You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
aggregation-platform/dist/hawtio-kubernetes.js

19045 lines
2.9 MiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/// <reference path="../libs/hawtio-forms/defs.d.ts"/>
/// <reference path="../libs/hawtio-kubernetes-api/defs.d.ts"/>
/// <reference path="../libs/hawtio-oauth/defs.d.ts"/>
/// <reference path="../libs/hawtio-ui/defs.d.ts"/>
/// <reference path="../libs/hawtio-utilities/defs.d.ts"/>
/// <reference path="../../includes.ts"/>
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']);
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: "<table class=\"table table-hover\">\n <tr>\n <th ng-repeat=\"column in tableTitle.column\" class=\"no-fade table-header\">\n \t<span class=\"{{column.class}}\">{{column.title}}</span>\n </th> \n </tr>\n <tr ng-repeat = \"row in tableContent\" class=\"row.class\">\n \t<td ng-repeat=\"col in row\" class=\"col.class\">\n \t\t<span class=\"col.class\">{{col.title}}</span>\n \t</td>\n </tr> \n </table> \n ",
link: function (scope, element, attr) {
}
};
}]);
hawtioPluginLoader.addModule(Configs.pluginName);
})(Configs || (Configs = {}));
/// <reference path="../../includes.ts"/>
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<Developer.BreadcrumbConfig>=): {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: "<div hawtio-breadcrumbs></div><div hawtio-tabs></div><ng-include src='contentTemplateUrl'></ng-include>",
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: `<div ng-include="'plugins/developer/html/projectSelector.html'"></div>`
},
*/
{
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 = {}));
/// <reference path="../../includes.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="developerNavigation.ts"/>
/// <reference path="developerHelpers.ts"/>
var Developer;
(function (Developer) {
var log = Logger.get('developer-navigation');
function createCurrentSubNavBar($scope, $location, $routeParams) {
return Developer.activateCurrent([
{
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", "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/", "task"),
label: "任务",
title: "任务查看"
}
]);
}
Developer.createCurrentSubNavBar = createCurrentSubNavBar;
})(Developer || (Developer = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="configPlugin.ts"/>
/// <reference path="../../developer/ts/developerNavigation.ts"/>
/// <reference path="../../developer/ts/dataManagerHelper.ts"/>
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);
}
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, resource.id + "", operate);
}
$http({
method: "POST",
url: RESTfulUrl,
params: resource,
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' },
transformRequest: function (obj) {
var str = [];
for (var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
},
}).success(function (data, status, headers, config) {
//成功之后做一些事情
if (angular.isFunction(fn))
fn(data, status);
}).error(function (data, status, headers, config) {
if (angular.isFunction(fn))
fn(data, status);
});
}
Configs.oracleInfoOperate = oracleInfoOperate;
})(Configs || (Configs = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="configPlugin.ts"/>
var Configs;
(function (Configs) {
//字节大小转换成字符大小
function getStringSize(size) {
var result = size;
var suffix = ["B", "KB", "MB", "GB", "GB", "TB"];
var count = 1;
while (result > 1024) {
result = result / 1024;
count++;
}
return result + suffix[count];
}
var ConfigsModelService = (function () {
function ConfigsModelService() {
this.cluster = [];
this.oracleParam = [];
this.updateAllData();
}
ConfigsModelService.prototype.updateAllData = function () {
this.updateVolumeData();
this.updateOracleParam();
};
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;
}
console.log(data);
}
});
this.cluster = result;
};
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 = {}));
/// <reference path="../../includes.ts"/>
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;
})(Configs || (Configs = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="configPlugin.ts"/>
/// <reference path="configsHelper.ts"/>
/// <reference path="configsUtils.ts"/>
/// <reference path="configsDataService.ts"/>
var Configs;
(function (Configs) {
Configs.GfsController = Configs.controller('GfsController', ["$scope", "$templateCache", "$location", "$routeParams", "$http", "$timeout", 'ConfigsModel',
function ($scope, $templateCache, $location, $routeParams, $http, $timeout, ConfigsModel) {
$scope.model = ConfigsModel;
$scope.volumes = ConfigsModel.cluster;
Configs.shareInit($scope, $location, $routeParams);
}]);
})(Configs || (Configs = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="configPlugin.ts"/>
/// <reference path="configsHelper.ts"/>
/// <reference path="configsUtils.ts"/>
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.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: "status",
displayName: "连接状态",
cellTemplate: $templateCache.get("connectStatus.html")
},
{
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.add = true;
$scope.edit = false;
$scope.tableForm = Configs.createNewObejct($scope.tableConfig.columnDefs, null);
$scope.rowId = 0;
Configs.removeElementsByValue($scope.tableForm, [{ key: "name", value: "序号" }, { key: "name", value: "连接状态" }, { key: "name", value: "操作" }]);
};
$scope.cancel = function () {
$scope.tableForm = null;
$scope.add = false;
$scope.edit = false;
};
$scope.onSubmit = function () {
$scope.edit = false;
$scope.add = false;
Configs.oracleInfoOperate($http, "/java/console/api/oracle", Configs.OperateType.UPDATE, Configs.createOracleInfo($scope.tableForm, $scope.rowId), function (result, status) {
if (status === 200) {
$scope.model.updateOracleParam();
}
else {
throw "资源请求失败";
}
});
};
$scope.$on("editRow", function (event, data) {
$scope.edit = true;
$scope.add = false;
$scope.rowId = data.id;
$scope.tableForm = Configs.createNewObejct($scope.tableConfig.columnDefs, data);
Configs.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) {
$scope.model.updateOracleParam();
}
else {
throw "资源请求失败";
}
});
//removeElementByValue($scope.model, data._id, "_id");
});
}]);
})(Configs || (Configs = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="configPlugin.ts"/>
var Configs;
(function (Configs) {
Configs.TableEdit = Configs.controller('TableEdit', ['$scope', function ($scope) {
$scope.editRow = function (entity) {
$scope.$emit('editRow', entity);
};
$scope.deleteRow = function (entity) {
$scope.$emit('deleteRow', entity);
};
}]);
})(Configs || (Configs = {}));
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 = {}));
/// <reference path="../../includes.ts"/>
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 = ["admin", "cfgtoollogs", "checkpoints", "diag", "flash-recovery-area", "oradata"];
}
resourceRCTemplate.prototype.createRC = function (Obj) {
var labels = {
"style": "oracle",
"status": "0",
"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;
})(Kubernetes || (Kubernetes = {}));
/*
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesInterfaces.ts"/>
/// <reference path="utilHelpers.ts"/>
/// <reference path="readPlacedivision.ts"/>
/// <reference path="../../configs/ts/ConfigsHelper.ts"/>
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;
;
//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 <code>key1=value1,key2=value2,....</code> 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 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 = {
'batch': 'k8s-badge-batch',
'region': 'k8s-badge-region',
'type': 'k8s-badge-type',
'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(name) {
var results = name.split("-");
if (results.length === 2) {
return "汇总数据库" + "(" + results[1] + ")";
}
else if (results.length === 3) {
return Kubernetes.getCountyByCode(results[0]) + "_" + Kubernetes.getSystemNameById(results[1]);
}
else {
return name;
}
}
Kubernetes.getOracleName = getOracleName;
function extractDataToOracle($http, selectedReplicationControllers, targetOracle) {
//console.log(targetReplicationController.length);
var answer = targetOracle && true;
var inneedOracle = [];
selectedReplicationControllers.forEach(function (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,
"isTarget": false
});
});
if (answer) {
var data = { "name": targetOracle.id, "target": targetOracle, "inneed": inneedOracle };
Configs.oracleInfoOperate($http, "/java/console/api/oracle", Configs.OperateType.EXTRACT, data);
}
else {
alert("您选择的汇总数据库或需要汇总的数据库中存在未启动成功的数据库,导致汇总操作失败,请重新选择!");
}
}
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;
})(Kubernetes || (Kubernetes = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="developerHelpers.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>
var Developer;
(function (Developer) {
Developer._module = angular.module(Developer.pluginName, ['hawtio-core', 'hawtio-ui', 'ui.codemirror', 'nvd3', 'treeControl']);
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';
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="developerPlugin.ts"/>
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;
}
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
};
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) {
return {
cityName: cityName,
districtName: districtName,
systemName: systemName,
version: "版本" + version
};
}
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);
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();
}
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 = 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 = {}));
/// <reference path="../../includes.ts"/>
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 = {}));
/// <reference path="developerPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="developerPlugin.ts"/>
/// <reference path="dataManagerModel.ts"/>
/// <reference path="dataManagerHelper.ts"/>
/// <reference path="../../configs/ts/ConfigsHelper.ts"/>
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.model.data = [{ _key: 2, name: "南京市-玄武区", labels: { system: 34, batch: 2 }, status: 1, process: 75 },
{ _key: 4, name: "南京市-雨花区", labels: { system: 14, batch: 1 }, status: 0, process: 0 },
{ _key: 5, name: "南京市-六合区", labels: { system: 76, batch: 1 }, status: 2, process: 100 },
{ _key: 6, name: "南京市-浦口区", labels: { system: 76, batch: 1 }, status: 3, process: 97 }];
$scope.tableConfig = {
data: 'model.data',
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) {
if (data.status === 1)
console.log("无法删除");
else {
Configs.oracleInfoOperate($http, "/java/console/api/task", Configs.OperateType.DELETE, data, function (data, status) {
if (status === 200)
console.log("删除成功");
});
}
});
}]);
})(Developer || (Developer = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>
/// <reference path="developerEnrichers.ts"/>
/// <reference path="developerHelpers.ts"/>
/// <reference path="developerNavigation.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>
/// <reference path="developerEnrichers.ts"/>
/// <reference path="developerHelpers.ts"/>
/// <reference path="developerNavigation.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>
/// <reference path="developerEnrichers.ts"/>
/// <reference path="developerHelpers.ts"/>
/// <reference path="developerNavigation.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
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) {
console.log("3");
Kubernetes.log.debug("Running");
viewRegistry['kubernetes'] = Kubernetes.templatePath + 'layoutKubernetes.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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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<any> {
return this.filterReplicationcontrollers;
}
public set filterReplicationcontrollers(filterReplicationcontrollers:Array<any>) {
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(Kubernetes.getName(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(',');
replicationController.$labelsText = Kubernetes.labelsToString(Kubernetes.getLabels(replicationController));
replicationController.metadata.labels = Kubernetes.labelToChinese(Kubernetes.getLabels(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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesInterfaces.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesModel.ts"/>
/// <reference path="developerPlugin.ts"/>
/// <reference path="developerEnrichers.ts"/>
/// <reference path="developerHelpers.ts"/>
/// <reference path="developerNavigation.ts"/>
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]", "<span class='log-success'>[INFO]</span>");
addReplaceFn("[WARN]", "<span class='log-warn'>[WARN]</span>");
addReplaceFn("[WARNING]", "<span class='log-warn'>[WARNING]</span>");
addReplaceFn("[ERROR]", "<span class='log-error'>[ERROR]</span>");
addReplaceFn("FAILURE", "<span class='log-error'>FAILURE</span>");
addReplaceFn("SUCCESS", "<span class='log-success'>SUCCESS</span>");
// lets try convert the Proceed / Abort links
replacements.push(function (text) {
var prefix = "<a href='#' onclick=\"new Ajax.Request('";
var idx = 0;
while (idx >= 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) + "<a class='btn btn-default btn-lg' ng-click=\"approve('" + url + "')\"" + text.substring(endDoubleQuote + 1);
text = text.substring(0, idx) + "<a class='btn btn-default btn-lg' onclick=\"Developer.clickApprove(this, '" + url + "')\"" + text.substring(endDoubleQuote + 1);
}
}
return text;
});
return function (text) {
var answer = text;
angular.forEach(replacements, function (fn) {
answer = fn(answer);
});
return answer;
};
}
function replaceText(text, from, to) {
if (from && to && text) {
//log.info("Replacing '" + from + "' => '" + 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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>
/// <reference path="developerEnrichers.ts"/>
/// <reference path="developerHelpers.ts"/>
/// <reference path="developerNavigation.ts"/>
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 = '<h3><i class="' + iconClass + '"></i> ' + build.displayName + '</h3>' +
'<p>duration: <b>' + y + '</b> seconds</p>';
if (date) {
tooltip += '<p>started: <b>' + date + '</b></p>';
}
if (result) {
tooltip += '<p>result: <b>' + result + '</b></p>';
}
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>
/// <reference path="developerEnrichers.ts"/>
/// <reference path="developerHelpers.ts"/>
/// <reference path="developerNavigation.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>
/// <reference path="developerEnrichers.ts"/>
/// <reference path="developerHelpers.ts"/>
/// <reference path="developerNavigation.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>
/// <reference path="developerEnrichers.ts"/>
/// <reference path="developerHelpers.ts"/>
/// <reference path="developerNavigation.ts"/>
var Developer;
(function (Developer) {
Developer._module.directive("pipelineView", function () {
return {
templateUrl: Developer.templatePath + 'pipelineView.html'
};
});
})(Developer || (Developer = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>
/// <reference path="developerPlugin.ts"/>
/// <reference path="developerEnrichers.ts"/>
/// <reference path="developerHelpers.ts"/>
/// <reference path="developerNavigation.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>
/// <reference path="developerEnrichers.ts"/>
/// <reference path="developerHelpers.ts"/>
/// <reference path="developerNavigation.ts"/>
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 = {}));
/// <reference path="developerPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>
/// <reference path="developerEnrichers.ts"/>
/// <reference path="developerHelpers.ts"/>
/// <reference path="developerNavigation.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>
/// <reference path="developerEnrichers.ts"/>
/// <reference path="developerHelpers.ts"/>
/// <reference path="developerNavigation.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesModel.ts"/>
/// <reference path="../../configs/ts/configsDataService.ts"/>
/// <reference path="developerEnrichers.ts"/>
/// <reference path="developerHelpers.ts"/>
/// <reference path="dataManagerHelper.ts"/>
/// <reference path="dataManagerModel.ts"/>
/// <reference path="../../configs/ts/configsHelper.ts"/>
var Developer;
(function (Developer) {
Developer.WorkspacesController = Developer.controller("WorkspacesController", ["$scope", "KubernetesModel", "DataModel", "ConfigsModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "$element",
function ($scope, KubernetesModel, DataModel, ConfigsModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, $element) {
$scope.model = DataModel;
init($scope, $location, $routeParams);
$scope.options = DataModel.paramOptions;
$scope.pageSizeChoses = DataModel.paramOptions.pagerSizeOption;
$scope.options.dataType = getDataType($location);
$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: '编码',
customSortField: function (field) {
return field.id;
}
},
{
field: "name",
displayName: '市-区/县'
},
{
field: "systemName",
displayName: '系统名称'
},
{
field: "labels",
displayName: '数据标签',
cellTemplate: $templateCache.get("dataLabelsTemplate.html")
},
{
field: "year",
displayName: '年度',
},
{
field: "collectingTime",
displayName: '采集时间'
},
{
field: "collectorName",
displayName: '汇总状态'
}
]
};
$scope.selectBatchItem = function (item) {
$scope.navbarItems.forEach(function (nav) {
nav.class = "";
});
item.class = "active";
if (item.label === "全部")
$scope.model.updateParamOption("dataBatch", null);
else
$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)
$scope.model.updateParamOption("currentPageNum", idx + 1);
};
$scope.$watch('options', function (newValue, oldValue) {
if (newValue && newValue !== oldValue) {
if (newValue.currentTableSize !== oldValue.currentTableSize)
$scope.options.priorTableSize = oldValue.currentTableSize;
else
$scope.options.priorTableSize = newValue.currentTableSize;
DataModel.updateModel();
}
}, true);
$scope.deletePrompt = function (selected) {
if (angular.isString(selected)) {
selected = [{
id: selected
}];
}
UI.multiItemConfirmActionDialog({
collection: selected,
index: 'id',
onClose: function (result) {
var idColl = [];
if (result) {
angular.forEach(selected, function (select) {
idColl.push(select.id);
console.log(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;
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 "资源请求失败";
}
});
migrationClick.close();
},
open: function (selected) {
var migrationClick = $scope.migrationClick;
if ($scope.volumes && $scope.volumes instanceof Array && $scope.volumes.length > 0)
migrationClick.selectedItem = $scope.volumes[0];
migrationClick.dialog.open();
},
close: function () {
$scope.migrationClick.selectedItem = { "name": "当前没有可以迁移的集群" };
$scope.migrationClick.dialog.close();
}
};
$scope.createOracleService = function (items) {
angular.forEach(items, function (item) {
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
},
path: item.dataPath + "app/",
isTarget: "false"
}, function (rc) {
Kubernetes.connectOracle($http, $timeout, "/java/console/api/connectOracle", "create", rc, 0);
});
});
$timeout(function () {
$location.path('/kubernetes/namespace/default/replicationControllers');
}, 200);
};
function init($scope, $location, $routeParams) {
$scope.model.updateModel();
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 result;
var subPath = path.split("/");
switch (subPath[subPath.length - 1]) {
case "financial":
result = "财政";
break;
case "social-security":
result = "社保";
break;
default:
result = null;
break;
}
return result;
}
}]);
})(Developer || (Developer = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = <any>{
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
/// <reference path="kubernetesModel.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
/// <reference path="kubernetesModel.ts"/>
/// <reference path="utilHelpers.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
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 = {}));
/// <reference path="schema.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
/// <reference path="kubernetesModel.ts"/>
///
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 = {}));
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="kubernetesPlugin.ts"/>
/// <reference path="watcher.ts"/>
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('<kubernetes-container-terminal pod="podLink" container="containerName" command="bash"></kubernetes-container-terminal>')(scope));
}
};
}]);
function getLogs(rc, scope) {
console.log(scope);
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
var obj = JSON.parse(xhr.responseText);
var text = obj.logContent.replace(/\\n/gmi, '\r\n');
scope.logs = text;
}
else {
}
}
};
xhr.open("POST", "/oracleExtractLog?rcName=" + Kubernetes.getName(rc), false);
xhr.send(null);
}
})(Kubernetes || (Kubernetes = {}));
/// <reference path="kubernetesPlugin.ts"/>
/// <reference path="term.ts"/>
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 = "</span>";
_.forOwn(colors, function (color, code) {
var start = "<span class=\"" + color + "\">";
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, '<b>').replace(/\033\[22m/g, '</b>');
msg = msg.replace(/\033\[3m/g, '<i>').replace(/\033\[23m/g, '</i>');
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, '<span>');
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 <div class=\"pod-log-lines\">\n <p ng-hide=\"fetched\">Please wait, fetching logs...</p>\n <p ng-hide=\"messages.length || previous\">View <a href=\"\" ng-click=\"previous=!previous\">previous container logs</a>?</p>\n <p ng-repeat=\"message in messages track by $index\" ng-bind-html=\"message\"></p>\n </div>\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) {
console.log("atBottom: ", val);
});
}
};
}]);
})(Kubernetes || (Kubernetes = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
/// <reference path="utilHelpers.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
/// <reference path="kubernetesModel.ts"/>
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")
},
//{ 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: '$pods[0].$eventCount',
displayName: '服务启动日志',
cellTemplate: $templateCache.get("eventSummaryTemplate.html")
},
{ field: '$podCounters',
displayName: '服务状态',
cellTemplate: $templateCache.get("podCountsAndLinkTemplate.html"),
customSortField: function (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")
}
]
};
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.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();
};
$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
}];
}
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();
};
$scope.reStartPrompt = function (selected) {
function startSelected(selected, next) {
if (next) {
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());
});
}
}
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];
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesInterfaces.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
/// <reference path="kubernetesModel.ts"/>
/// <reference path="utilHelpers.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
/// <reference path="kubernetesModel.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
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) {
console.log($scope.labels);
$scope.labelClick = function (entity, key, value) {
// log.debug("handleClick, entity: ", entity, " key: ", labelType, " value: ", value);
console.log("cacacacac");
$scope.$emit('dataLabelFilterUpdate', value);
};
$scope.labelClass = Kubernetes.containerLabelClass;
}]);
// controller that deals with the labels per pod
Kubernetes.Labels = Kubernetes.controller("Labels", ["$scope", "$location", function ($scope, $location) {
console.log($scope.entity);
$scope.labels = [];
var labelKeyWeights = {
"region": 1,
"system": 2,
"type": 3,
"batch": 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.deleteRow = function (entity) {
$scope.$emit('deleteRow', entity);
};
}]);
})(Kubernetes || (Kubernetes = {}));
/// <reference path="../../includes.ts"/>
/// <reference path="kubernetesHelpers.ts"/>
/// <reference path="kubernetesPlugin.ts"/>
var Kubernetes;
(function (Kubernetes) {
Kubernetes._module.directive("hawtioTabs", ['HawtioSubTabs', function (HawtioSubTabs) {
return {
link: function (scope, element, attrs) {
HawtioSubTabs.apply(scope.$eval('subTabConfig'));
}
};
}]);
})(Kubernetes || (Kubernetes = {}));
/// <reference path="kubernetesPlugin.ts"/>
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 = {}));
/// <reference path="../../includes.ts"/>
var Navigation;
(function (Navigation) {
Navigation.pluginName = 'hawtio-navigation';
Navigation.log = Logger.get(Navigation.pluginName);
Navigation._module = angular.module(Navigation.pluginName, []);
Navigation._module.run(function () {
console.log("1");
});
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 <div class=\"nav-pf-vertical nav-pf-vertical-with-secondary-nav\" ng-controller=\"Developer.NavBarController\" ng-class=\"getClass()\">\n <div class=\"list-group\">\n <div ng-repeat=\"subTab in subTabConfig\" ng-show=\"true\"\n class=\"list-group-item {{subTab.active ? 'active' : ''}}\"\n title=\"{{subTab.title}}\">\n <a ng-hide=\"subTab.template\" href=\"{{subTab.href}}\">\n <span ng-show=\"subTab.class\" ng-class=\"subTab.class\"></span>\n <img ng-show=\"subTab.icon\" ng-src=\"{{subTab.icon}}\">\n {{subTab.label}}\n </a>\n <div ng-show=\"subTab.template\" compile=\"subTab.template\"></div>\n </div>\n </>\n </div>\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 <div class=\"nav navbar-nav nav-breadcrumb nav-breadcrumbs\" ng-show=\"breadcrumbConfig\" ng-controller=\"Developer.NavBarController\">\n <ol class=\"breadcrumb\">\n <li ng-repeat=\"breadcrumb in breadcrumbConfig\" ng-show=\"isValid(breadcrumb) && label(breadcrumb)\"\n class=\"{{breadcrumb.active ? 'active' : ''}}\"\n ng-class=\"$last ? 'dropdown' : ''\"\n title=\"{{breadcrumb.title}}\">\n <a ng-show=\"breadcrumb.href\" href=\"{{breadcrumb.href}}\">{{label(breadcrumb)}}</a>\n <span ng-hide=\"breadcrumb.href\">{{label(breadcrumb)}}</span>\n </li>\n <li ng-show=\"pageTitle\">\n <span ng-bind=\"pageTitle\"></span>\n </li>\n </ol>\n </div>\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 <div class=\"nav-pf-vertical nav-pf-vertical-with-secondary-nav sj_menu\" ng-controller=\"Developer.NavBarController\" ng-class=\"getClass()\">\n <ul class=\"navbar-lf-menu \" >\n <li ng-repeat=\"subTab in subTabConfig \" >\n <div class=\"expandable closed \" ng-show=\"subTab.items.length\" style=\" padding:0;\">\n <div title=\"The title\" class=\"title sj_menu_nav\" >\n <i class=\" sj_menu_01\" >{{subTab.label}}</i> \n </div>\n <ul class=\"expandable-body sj_menu_ul\" >\n <li ng-repeat=\"item in subTab.items\" >\n <a href=\"{{item.href}}\" >{{item.label}}</a>\n </li>\n </ul>\n </div>\n <div ng-hide=\"subTab.items.length\" class=\"sj_menu_nav\" >\n <i class=\" sj_menu_02\" ></i><a href=\"{{subTab.href}}\">{{subTab.label}}</a> \n </div>\n </li> \n </ul>\n </div> \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 = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzLnRzIiwiY29uZmlncy90cy9jb25maWdQbHVnaW4udHMiLCJkZXZlbG9wZXIvdHMvZGV2ZWxvcGVyTmF2aWdhdGlvbi50cyIsImRldmVsb3Blci90cy9kZXZlbG9wZXJIZWxwZXJzLnRzIiwiZGV2ZWxvcGVyL3RzL2RhdGFNYW5hZ2VySGVscGVyLnRzIiwiY29uZmlncy90cy9Db25maWdzSGVscGVyLnRzIiwiY29uZmlncy90cy9jb25maWdzRGF0YVNlcnZpY2UudHMiLCJjb25maWdzL3RzL2NvbmZpZ3NVdGlscy50cyIsImNvbmZpZ3MvdHMvZ2x1c3RlcmZzU2V0dGluZy50cyIsImNvbmZpZ3MvdHMva3ViZUNsdXN0ZXJTZXR0aW5nLnRzIiwiY29uZmlncy90cy9zaGFyZUNvbnRyb2xsZXIudHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNJbnRlcmZhY2VzLnRzIiwia3ViZXJuZXRlcy90cy91dGlsSGVscGVycy50cyIsImt1YmVybmV0ZXMvdHMvcmVhZFBsYWNlZGl2aXNpb24udHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzIiwiZGV2ZWxvcGVyL3RzL2RldmVsb3BlclBsdWdpbi50cyIsImRldmVsb3Blci90cy9kYXRhTWFuYWdlck1vZGVsLnRzIiwiZGV2ZWxvcGVyL3RzL2RldmVsb3BlckVucmljaGVycy50cyIsImRldmVsb3Blci90cy9lbnZpcm9ubWVudFBhbmVsLnRzIiwiZGV2ZWxvcGVyL3RzL2ZpbGVNaWdyYXRpb25UYXNrLnRzIiwiZGV2ZWxvcGVyL3RzL2hvbWUudHMiLCJkZXZlbG9wZXIvdHMvamVua2luc0pvYi50cyIsImRldmVsb3Blci90cy9qZW5raW5zSm9icy50cyIsImt1YmVybmV0ZXMvdHMva3ViZXJuZXRlc1BsdWdpbi50cyIsImt1YmVybmV0ZXMvdHMva3ViZXJuZXRlc01vZGVsLnRzIiwiZGV2ZWxvcGVyL3RzL2plbmtpbnNMb2cudHMiLCJkZXZlbG9wZXIvdHMvamVua2luc01ldHJpY3MudHMiLCJkZXZlbG9wZXIvdHMvbmF2YmFyLnRzIiwiZGV2ZWxvcGVyL3RzL3BpcGVsaW5lLnRzIiwiZGV2ZWxvcGVyL3RzL3BpcGVsaW5lRGlyZWN0aXZlLnRzIiwiZGV2ZWxvcGVyL3RzL3BpcGVsaW5lcy50cyIsImRldmVsb3Blci90cy9wcm9qZWN0LnRzIiwiZGV2ZWxvcGVyL3RzL3Byb2plY3RTZWxlY3Rvci50cyIsImRldmVsb3Blci90cy9wcm9qZWN0cy50cyIsImRldmVsb3Blci90cy93b3Jrc3BhY2UudHMiLCJkZXZlbG9wZXIvdHMvd29ya3NwYWNlcy50cyIsImt1YmVybmV0ZXMvdHMvYXBwcy50cyIsImt1YmVybmV0ZXMvdHMvYnJlYWRjcnVtYnMudHMiLCJrdWJlcm5ldGVzL3RzL2J1aWxkLnRzIiwia3ViZXJuZXRlcy90cy9idWlsZENvbmZpZy50cyIsImt1YmVybmV0ZXMvdHMvYnVpbGRDb25maWdFZGl0LnRzIiwia3ViZXJuZXRlcy90cy9idWlsZENvbmZpZ3MudHMiLCJrdWJlcm5ldGVzL3RzL2J1aWxkTG9ncy50cyIsImt1YmVybmV0ZXMvdHMvYnVpbGRzLnRzIiwia3ViZXJuZXRlcy90cy9jb25uZWN0LnRzIiwia3ViZXJuZXRlcy90cy9kZXBsb3ltZW50Q29uZmlnLnRzIiwia3ViZXJuZXRlcy90cy9kZXBsb3ltZW50Q29uZmlncy50cyIsImt1YmVybmV0ZXMvdHMvZXZlbnRzLnRzIiwia3ViZXJuZXRlcy90cy9ob3N0LnRzIiwia3ViZXJuZXRlcy90cy9ob3N0cy50cyIsImt1YmVybmV0ZXMvdHMvaW1hZ2VSZXBvc2l0b3JpZXMudHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNOYXZpZ2F0aW9uLnRzIiwia3ViZXJuZXRlcy90cy9zY2hlbWEudHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNTY2hlbWEudHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNTZXJ2aWNlcy50cyIsImt1YmVybmV0ZXMvdHMva3ViZXJuZXRlc1RvcExldmVsLnRzIiwia3ViZXJuZXRlcy90cy9uYW1lc3BhY2UudHMiLCJrdWJlcm5ldGVzL3RzL292ZXJ2aWV3LnRzIiwia3ViZXJuZXRlcy90cy9waXBlbGluZXMudHMiLCJrdWJlcm5ldGVzL3RzL3BvZC50cyIsImt1YmVybmV0ZXMvdHMvcG9kRWRpdC50cyIsImt1YmVybmV0ZXMvdHMvd2F0Y2hlci50cyIsImt1YmVybmV0ZXMvdHMvdGVybS50cyIsImt1YmVybmV0ZXMvdHMvcG9kTG9ncy50cyIsImt1YmVybmV0ZXMvdHMvcG9kcy50cyIsImt1YmVybmV0ZXMvdHMvcmVwbGljYXRpb25Db250cm9sbGVyLnRzIiwia3ViZXJuZXRlcy90cy9yZXBsaWNhdGlvbkNvbnRyb2xsZXJFZGl0LnRzIiwia3ViZXJuZXRlcy90cy9yZXBsaWNhdGlvbkNvbnRyb2xsZXJzLnRzIiwia3ViZXJuZXRlcy90cy9zY2hlbWFIZWxwZXJzLnRzIiwia3ViZXJuZXRlcy90cy9zZWNyZXQudHMiLCJrdWJlcm5ldGVzL3RzL3NlY3JldHMudHMiLCJrdWJlcm5ldGVzL3RzL3NlcnZpY2UudHMiLCJrdWJlcm5ldGVzL3RzL3NlcnZpY2VFZGl0LnRzIiwia3ViZXJuZXRlcy90cy9zZXJ2aWNlUmVnaXN0cnkudHMiLCJrdWJlcm5ldGVzL3RzL3NlcnZpY2VzLnRzIiwia3ViZXJuZXRlcy90cy9zaGFyZWRDb250cm9sbGVycy50cyIsImt1YmVybmV0ZXMvdHMvdGFicy50cyIsImt1YmVybmV0ZXMvdHMvdGVtcGxhdGVzLnRzIiwibmF2aWdhdGlvbi90cy9uYXZpZ2F0aW9uUGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCwrREFBK0Q7QUFDL0Qsc0RBQXNEO0FBQ3RELG1EQUFtRDtBQUNuRCwwREFBMEQ7O0FDSjFELHlDQUF5QztBQUV6QyxJQUFPLE9BQU8sQ0FtRGI7QUFuREQsV0FBTyxPQUFPLEVBQUMsQ0FBQztJQUVKLGtCQUFVLEdBQUcsU0FBUyxDQUFDO0lBQ3ZCLGVBQU8sR0FBRyxTQUFTLENBQUM7SUFDcEIsa0JBQVUsR0FBRyxrQkFBa0IsQ0FBQztJQUM3QixvQkFBWSxHQUFHLGtCQUFVLEdBQUcsT0FBTyxDQUFDO0lBQ3ZDLGVBQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGtCQUFVLEVBQUUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzVGLGFBQUssR0FBRyxhQUFhLENBQUMscUJBQXFCLENBQUMsb0JBQVksQ0FBQyxDQUFDO0lBQzFELGtCQUFVLEdBQUcsYUFBYSxDQUFDLHdCQUF3QixDQUFDLGVBQU8sRUFBRSxrQkFBVSxDQUFDLENBQUM7SUFFcEYsZUFBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFDLFFBQVEsRUFBRSxjQUFjO1lBQ3RFLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFPLEVBQUUscUJBQXFCLENBQUMsRUFBRSxhQUFLLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3JHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQU8sRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLGFBQUssQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDL0YsSUFBSSxDQUFDLGVBQU8sRUFBRSxFQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQU8sRUFBRSx1QkFBdUIsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUN0RixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUgsZUFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsVUFBQyxZQUFZLEVBQUUsY0FBdUMsRUFBRSxHQUFHLEVBQUcsUUFBMkI7WUFDakssR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFDLE1BQU07Z0JBQ2hDLElBQUksUUFBUSxHQUFJLGNBQWMsQ0FBQyxHQUFHLENBQVMsVUFBVSxDQUFDLElBQUksQ0FBQyxvQkFBWSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQztnQkFDakcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FBQztZQUNILFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFTixlQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDcEMsTUFBTSxDQUFBO2dCQUNMLFFBQVEsRUFBRSxJQUFJO2dCQUNkLE9BQU8sRUFBRyxJQUFJO2dCQUNkLEtBQUssRUFBRTtvQkFDTixVQUFVLEVBQUUsR0FBRztvQkFDZixZQUFZLEVBQUUsR0FBRztpQkFDakI7Z0JBQ0QsUUFBUSxFQUFFLHdvQkFZRDtnQkFDRCxJQUFJLEVBQUUsVUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUk7Z0JBQzNCLENBQUM7YUFDVCxDQUFBO1FBQ0YsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVMLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxrQkFBVSxDQUFDLENBQUM7QUFDMUMsQ0FBQyxFQW5ETSxPQUFPLEtBQVAsT0FBTyxRQW1EYjs7QUNyREQseUNBQXlDO0FBQ3pDLElBQU8sU0FBUyxDQTBzQmY7QUExc0JELFdBQU8sU0FBUyxFQUFDLENBQUM7SUFFaEIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBYzdDO1FBQ0UsTUFBTSxDQUFDO1lBQ0wsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsQ0FBQztZQUMvRCxLQUFLLEVBQUUsT0FBTztZQUNkLEtBQUssRUFBRSw4QkFBOEI7WUFDckMsUUFBUSxFQUFFLFVBQUMsTUFBTSxFQUFFLElBQUksSUFBSyxPQUFBLEtBQUssRUFBTCxDQUFLO1NBQ2xDLENBQUM7SUFDSixDQUFDO0lBRUQ7UUFDRSxNQUFNLENBQUM7WUFDTCxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxDQUFDO1lBQy9ELEtBQUssRUFBRSxRQUFRO1lBQ2YsS0FBSyxFQUFFLCtDQUErQztTQUN2RCxDQUFDO0lBQ0osQ0FBQztJQUVEO1FBQ0UsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFGZSx1QkFBYSxnQkFFNUIsQ0FBQTtJQUVELHFCQUE0QixTQUFTO1FBQ25DLElBQUksSUFBSSxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQzNCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDZCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQVBlLHFCQUFXLGNBTzFCLENBQUE7SUFFRCxxQ0FBNEMsa0JBQW1CO1FBQzdELE1BQU0sQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRmUscUNBQTJCLDhCQUUxQyxDQUFBO0lBR0Qsb0NBQTJDLGtCQUFrQjtRQUN6RCxNQUFNLENBQUMsZUFBZSxDQUFDO1lBQ3JCLGlCQUFpQixFQUFFO1lBQ25CLGlCQUFpQixFQUFFO1NBQ3BCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFMZSxvQ0FBMEIsNkJBS3pDLENBQUE7SUFFRCxvQ0FBMkMsUUFBZSxFQUFFLGFBQW9CO1FBQXJDLHdCQUFlLEdBQWYsZUFBZTtRQUFFLDZCQUFvQixHQUFwQixvQkFBb0I7UUFDOUUsSUFBSSxNQUFNLEdBQUcsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ25CLGFBQWEsR0FBRyxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNsQixNQUFNLENBQUMsSUFBSSxDQUNUO2dCQUNFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDO2dCQUMvRSxLQUFLLEVBQUUsYUFBYTtnQkFDcEIsS0FBSyxFQUFFLG9CQUFvQixHQUFHLGFBQWE7Z0JBQzNDLFFBQVEsRUFBRSxVQUFDLE1BQU0sRUFBRSxJQUFJLElBQUssT0FBQSxLQUFLLEVBQUwsQ0FBSzthQUNsQyxDQUNGLENBQUM7WUFDRixNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBakJlLG9DQUEwQiw2QkFpQnpDLENBQUE7SUFHRCxzQ0FBNkMsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZO1FBQzFFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2pELElBQUksY0FBYyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDekYsSUFBSSxhQUFhLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUMzQyxJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQ25DLElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDekMsRUFBRSxDQUFDLENBQUMsYUFBYSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDaEgsTUFBTSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7WUFDbEMsTUFBTSxDQUFDLHFCQUFxQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3RSxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDM0QsSUFBSSxRQUFRLEdBQTRCO2dCQUN0QztvQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDO29CQUNsRCxLQUFLLEVBQUUsY0FBYztvQkFDckIsS0FBSyxFQUFFLHdDQUF3QztpQkFDaEQ7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUM7b0JBQ2pELEtBQUssRUFBRSxjQUFPLE9BQUEsZUFBZSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsRUFBbEMsQ0FBa0M7b0JBQ2hELEtBQUssRUFBRSxxQ0FBcUMsR0FBRyxFQUFFO2lCQUNsRDthQUNGLENBQUM7WUFDRixNQUFNLENBQUMsd0JBQXdCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsSUFBSSxXQUFXLElBQUksYUFBYSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDeEUsdUNBQXVDO1lBQ3ZDLElBQUksUUFBUSxHQUE0QjtnQkFDdEM7b0JBQ0UsSUFBSSxFQUFFLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztvQkFDckMsS0FBSyxFQUFFLGNBQWM7b0JBQ3JCLEtBQUssRUFBRSx3Q0FBd0M7aUJBQ2hEO2dCQUNEO29CQUNFLElBQUksRUFBRSxlQUFlLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztvQkFDakQsS0FBSyxFQUFFLGNBQU8sT0FBQSxlQUFlLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxFQUEzQyxDQUEyQztvQkFDekQsS0FBSyxFQUFFLHVCQUF1QjtpQkFDL0I7YUFDRixDQUFDO1lBQ0YsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDMUIsYUFBYSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBRywwQkFBMEIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RCxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1YsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUM7WUFDdEcsS0FBSyxFQUFFLFNBQVM7WUFDaEIsS0FBSyxFQUFFLHFDQUFxQyxHQUFHLEVBQUU7U0FDbEQsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBakRlLHNDQUE0QiwrQkFpRDNDLENBQUE7SUFFRDs7T0FFRztJQUNILHlCQUF5QixhQUFhLEVBQUUsV0FBVztRQUNqRDs7O1dBR0c7UUFDSCxNQUFNLENBQUMsV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQ0FBeUMsV0FBa0IsRUFBRSxRQUF3QyxFQUFFLGFBQW9CO1FBQWxGLDJCQUFrQixHQUFsQixrQkFBa0I7UUFBRSx3QkFBd0MsR0FBeEMsZUFBd0M7UUFBRSw2QkFBb0IsR0FBcEIsb0JBQW9CO1FBQ3pILEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNuQixhQUFhLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDMUQsQ0FBQztRQUNELElBQUksTUFBTSxHQUFHLDBCQUEwQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM3RCxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQ1Q7b0JBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDO29CQUMxRixLQUFLLEVBQUUsTUFBTTtvQkFDYixLQUFLLEVBQUUsbUNBQW1DO2lCQUMzQyxDQUNGLENBQUM7Z0JBRUYsTUFBTSxDQUFDLElBQUksQ0FDVDtvQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDO29CQUN2RyxLQUFLLEVBQUUsV0FBVztvQkFDbEIsS0FBSyxFQUFFLG9CQUFvQixHQUFHLFdBQVc7aUJBQzFDLENBQ0YsQ0FBQztZQUNKLENBQUM7WUFDRCxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBMUJlLGtDQUF3QiwyQkEwQnZDLENBQUE7SUFHRCwwQ0FBaUQsV0FBVyxFQUFFLGFBQW9CO1FBQXBCLDZCQUFvQixHQUFwQixvQkFBb0I7UUFDaEYsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNqQixRQUFRLEdBQUcsQ0FBQztvQkFDVixLQUFLLEVBQUUsU0FBUztvQkFDaEIsS0FBSyxFQUFFLHFCQUFxQjtpQkFDN0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFUZSwwQ0FBZ0MsbUNBUy9DLENBQUE7SUFFRDtRQUNFLElBQUksYUFBYSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzVELE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDckI7Z0JBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUM7Z0JBQzlFLEtBQUssRUFBRSxXQUFXO2dCQUNsQixLQUFLLEVBQUUsa0JBQWtCO2dCQUN6QixLQUFLLEVBQUUsNkVBQTZFO2FBQ3JGO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDO2dCQUN0RixLQUFLLEVBQUUsTUFBTTtnQkFDYixLQUFLLEVBQUUsY0FBYztnQkFDckIsS0FBSyxFQUFFLCtCQUErQjthQUN2QztZQUNEO2dCQUNFLE9BQU8sRUFBRSxjQUFNLE9BQUEscUJBQVcsRUFBRSxFQUFiLENBQWE7Z0JBQzVCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQztnQkFDNUYsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLEtBQUssRUFBRSxpQ0FBaUM7YUFDekM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ3hCLEtBQUssRUFBRSxjQUFjO2dCQUNyQixLQUFLLEVBQUUsYUFBYTtnQkFDcEIsS0FBSyxFQUFFLHdDQUF3QzthQUNoRDtZQUNEO2dCQUNFLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxhQUFhLENBQUM7Z0JBQ3pDLEtBQUssRUFBRSxTQUFTO2dCQUNoQixLQUFLLEVBQUUsWUFBWTtnQkFDbkIsS0FBSyxFQUFFLCtDQUErQzthQUN2RDtTQVNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUEzQ2UsbUNBQXlCLDRCQTJDeEMsQ0FBQTtJQUVELDhCQUFxQyxhQUFvQjtRQUFwQiw2QkFBb0IsR0FBcEIsb0JBQW9CO1FBQ3ZELEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNuQixhQUFhLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDMUQsQ0FBQztRQUNELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckgsQ0FBQztJQUxlLDhCQUFvQix1QkFLbkMsQ0FBQTtJQUVELDBCQUEwQixhQUFhLEVBQUUsV0FBVyxFQUFFLFlBQVk7UUFDaEUsYUFBYSxHQUFHLGFBQWEsSUFBSSxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUN6RSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN2SSxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0gsa0NBQXlDLE9BQWM7UUFDckQsTUFBTSxDQUFDLFVBQUMsWUFBbUIsRUFBRSxjQUE2QixFQUFFLFFBQTRDO1lBQTNFLDhCQUE2QixHQUE3QixxQkFBNkI7WUFDeEQsTUFBTSxDQUFDO2dCQUNMLFFBQVEsRUFBRSx5R0FBeUc7Z0JBQ25ILGNBQWMsRUFBRSxjQUFjO2dCQUM5QixVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLFVBQUMsTUFBTSxFQUFFLFlBQXlDO3dCQUN2RixFQUFFLENBQUEsQ0FBRSxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUUsSUFBSyxDQUFDLENBQUMsQ0FBQzs0QkFDckMsR0FBRyxDQUFDLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO3dCQUM3RSxDQUFDO3dCQUNELEVBQUUsQ0FBQSxDQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFLLENBQUMsQ0FBQyxDQUFDOzRCQUN2QyxHQUFHLENBQUMsS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUM7d0JBQzdFLENBQUM7d0JBQ0QsTUFBTSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQzdDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUM3QyxNQUFNLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7d0JBQ25FLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQzt3QkFDekYsTUFBTSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUM1RSxDQUFDLENBQUM7YUFDSCxDQUFDO1FBQ0osQ0FBQyxDQUFBO0lBQ0gsQ0FBQztJQXBCZSxrQ0FBd0IsMkJBb0J2QyxDQUFBO0lBRUQsaUNBQXdDLFdBQVcsRUFBRSxZQUFtQixFQUFFLE1BQWE7UUFBbEMsNEJBQW1CLEdBQW5CLG1CQUFtQjtRQUFFLHNCQUFhLEdBQWIsYUFBYTtRQUNyRixJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUM1RCxJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwSCxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4RCxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDbEIsWUFBWSxHQUFHLFdBQVcsQ0FBQztRQUM3QixDQUFDO1FBQ0QsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLEVBQUUsQ0FBQyxDQUFDLFdBQVcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDOUUsYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVEO1lBQ0UsSUFBSSxNQUFNLEdBQUcscUJBQVcsRUFBRSxJQUFJLGdCQUFnQixDQUFDO1lBQy9DLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMvQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUNYLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQztnQkFDdEMsQ0FBQztZQUNILENBQUM7WUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLE1BQU0sR0FBRztZQUNYOzs7Ozs7Ozs7O1FBVUo7WUFDSTtnQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQztnQkFDdkgsUUFBUSxFQUFFLFVBQUMsTUFBTSxFQUFFLElBQUk7b0JBQ3JCLElBQUksSUFBSSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3RDLG1EQUFtRDtvQkFDbkQsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztvQkFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNsRCxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDZCxDQUFDO29CQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQztnQkFDRCwwR0FBMEc7Z0JBQzFHLEtBQUssRUFBRSxXQUFXO2dCQUNsQixLQUFLLEVBQUUsa0JBQWtCO2dCQUN6QixLQUFLLEVBQUUscUVBQXFFO2FBQzdFO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLGNBQU0sT0FBQSxjQUFjLEVBQUUsSUFBSSxhQUFhLEVBQWpDLENBQWlDO2dCQUNoRCxFQUFFLEVBQUUsV0FBVztnQkFDZixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsS0FBSyxFQUFFLFdBQVc7Z0JBQ2xCLEtBQUssRUFBRSxrQkFBa0I7Z0JBQ3pCLEtBQUssRUFBRSx1Q0FBdUM7YUFDL0M7WUFDRDtnQkFDRSxPQUFPLEVBQUUsY0FBTSxPQUFBLENBQUMsY0FBYyxFQUFFLEVBQWpCLENBQWlCO2dCQUNoQyxJQUFJLEVBQUUsVUFBVTtnQkFDaEIsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLEtBQUssRUFBRSw4QkFBOEI7YUFDdEM7WUFDRDtnQkFDRSxPQUFPLEVBQUUsY0FBTSxPQUFBLGNBQWMsRUFBRSxFQUFoQixDQUFnQjtnQkFDL0IsUUFBUSxFQUFFLFVBQUMsSUFBSSxFQUFFLElBQUk7b0JBQ25CLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFDZixDQUFDO29CQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDckMsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDZCxDQUFDO29CQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQztnQkFDRCxFQUFFLEVBQUUsUUFBUTtnQkFDWixJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixLQUFLLEVBQUUsUUFBUTtnQkFDZixLQUFLLEVBQUUsWUFBWTtnQkFDbkIsS0FBSyxFQUFFLHNDQUFzQzthQUM5QztZQUNEO2dCQUNFLE9BQU8sRUFBRSxjQUFNLE9BQUEsY0FBYyxFQUFFLEVBQWhCLENBQWdCO2dCQUMvQixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDO2dCQUM5SSxLQUFLLEVBQUUsU0FBUztnQkFDaEIsS0FBSyxFQUFFLGlCQUFpQjtnQkFDeEIsS0FBSyxFQUFFLG1DQUFtQzthQUMzQztZQUNQOzs7Ozs7Y0FNRTtZQUNJO2dCQUNFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLENBQUM7Z0JBQzFILEtBQUssRUFBRSxVQUFVO2dCQUNqQixLQUFLLEVBQUUsV0FBVztnQkFDbEIsS0FBSyxFQUFFLDRCQUE0QjtnQkFDbkMsUUFBUSxFQUFFLFVBQUMsTUFBTSxFQUFFLElBQUk7b0JBQ3JCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNkLENBQUM7b0JBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztvQkFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDZCxDQUFDO29CQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQzthQUNGO1NBQ0YsQ0FBQztRQUVGLElBQUksT0FBTyxHQUFHO1lBQ1osYUFBYSxFQUFFLGFBQWE7WUFDNUIsV0FBVyxFQUFFLFdBQVc7WUFDeEIsV0FBVyxFQUFFLFdBQVc7WUFDeEIsWUFBWSxFQUFFLFlBQVk7WUFDMUIsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDO1FBQ0YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxzQ0FBNEIsRUFBRSxVQUFDLEVBQUU7WUFDL0MsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDekIsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDWCxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDNUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsVUFBQyxDQUFDOzRCQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNqQixDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQWpKZSxpQ0FBdUIsMEJBaUp0QyxDQUFBO0lBRUQseUNBQWdELFdBQVcsRUFBRSxZQUFtQjtRQUFuQiw0QkFBbUIsR0FBbkIsbUJBQW1CO1FBQzlFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNqQixNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELElBQUksYUFBYSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzVELElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BILEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNsQixZQUFZLEdBQUcsV0FBVyxDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBRztZQUNYO2dCQUNFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLENBQUM7Z0JBQzFILEtBQUssRUFBRSxNQUFNO2dCQUNiLEtBQUssRUFBRSxtQ0FBbUM7YUFDM0M7WUFDRDtnQkFDRSxJQUFJLEVBQUUsa0JBQWtCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztnQkFDcEQsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLEtBQUssRUFBRSxrRkFBa0Y7YUFDMUY7WUFDRDtnQkFDRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztnQkFDbEQsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLEtBQUssRUFBRSw0Q0FBNEM7YUFDcEQ7WUFDRDtnQkFDRSxPQUFPLEVBQUUsY0FBTSxPQUFBLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxFQUEvQixDQUErQjtnQkFDOUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUM7Z0JBQ3BELEtBQUssRUFBRSxPQUFPO2dCQUNkLEtBQUssRUFBRSxvQ0FBb0M7YUFDNUM7U0FDRixDQUFDO1FBQ0YsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBakNlLHlDQUErQixrQ0FpQzlDLENBQUE7SUFFRCxnQ0FBdUMsSUFBSTtRQUN6QyxJQUFJLFlBQVksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFNLGNBQWMsQ0FBQyxDQUFDO1FBQzFELEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDakIsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDZixDQUFDO0lBTmUsZ0NBQXNCLHlCQU1yQyxDQUFBO0lBRUQsb0NBQTJDLElBQUk7UUFDN0MsSUFBSSxZQUFZLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBTSxjQUFjLENBQUMsQ0FBQztRQUMxRCxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQU5lLG9DQUEwQiw2QkFNekMsQ0FBQTtJQUVELCtCQUFzQyxNQUFNO1FBQzFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUZlLCtCQUFxQix3QkFFcEMsQ0FBQTtJQUVELDJCQUFrQyxhQUFvQjtRQUFwQiw2QkFBb0IsR0FBcEIsb0JBQW9CO1FBQ3BELEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNuQixhQUFhLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDMUQsQ0FBQztRQUNELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUxlLDJCQUFpQixvQkFLaEMsQ0FBQTtJQUVELDBCQUFpQyxhQUFhLEVBQUUsV0FBVztRQUN6RCxNQUFNLENBQUMsb0JBQW9CLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFGZSwwQkFBZ0IsbUJBRS9CLENBQUE7SUFFRCw0QkFBbUMsYUFBYSxFQUFFLFdBQVc7UUFDM0QsTUFBTSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRmUsNEJBQWtCLHFCQUVqQyxDQUFBO0lBRUQsNEJBQW1DLGFBQWEsRUFBRSxXQUFXO1FBQzNELE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRmUsNEJBQWtCLHFCQUVqQyxDQUFBO0lBRUQsOEJBQXFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCO1FBQy9FLElBQUksTUFBTSxHQUFHLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDO1FBQ2xGLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUhlLDhCQUFvQix1QkFHbkMsQ0FBQTtJQUVELDhCQUFxQyxhQUFhLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxrQkFBeUI7UUFBekIsa0NBQXlCLEdBQXpCLHlCQUF5QjtRQUM5RixFQUFFLENBQUMsQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDdkMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDbkIsYUFBYSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pILENBQUM7SUFSZSw4QkFBb0IsdUJBUW5DLENBQUE7SUFFRCwwQkFBaUMsYUFBb0I7UUFBcEIsNkJBQW9CLEdBQXBCLG9CQUFvQjtRQUNuRCxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDbkIsYUFBYSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUNqRyxDQUFDO0lBTGUsMEJBQWdCLG1CQUsvQixDQUFBO0lBRUQseUJBQWdDLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxJQUFTLEVBQUUsa0JBQXlCO1FBQXBDLG9CQUFTLEdBQVQsU0FBUztRQUFFLGtDQUF5QixHQUF6Qix5QkFBeUI7UUFDdkcsRUFBRSxDQUFDLENBQUMsa0JBQWtCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDbkIsYUFBYSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0gsQ0FBQztJQVJlLHlCQUFlLGtCQVE5QixDQUFBO0lBRVUsc0NBQTRCLEdBQUcsRUFBRSxDQUFDO0lBRTdDLGtDQUF5QyxXQUFXLEVBQUUsS0FBSyxFQUFFLE9BQU87UUFDbEUsSUFBSSxhQUFhLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDNUQsSUFBSSxRQUFRLEdBQUc7WUFDYjtnQkFDRSxFQUFFLEVBQUUsUUFBUTtnQkFDWixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUM7Z0JBQ3pELEtBQUssRUFBRSxRQUFRO2dCQUNmLEtBQUssRUFBRSw4QkFBOEI7YUFDdEM7U0FDRixDQUFDO1FBQ0YsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNaLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ1osRUFBRSxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFLEdBQUcsR0FBRyxPQUFPO2dCQUNwQixLQUFLLEVBQUUsU0FBUyxHQUFHLE9BQU87YUFDM0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQW5CZSxrQ0FBd0IsMkJBbUJ2QyxDQUFBO0lBRUQsaUNBQXdDLFdBQVcsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFdBQXVCO1FBQXZCLDJCQUF1QixHQUF2QixrQkFBdUI7UUFDakcsSUFBSSxNQUFNLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDaEIsNkJBQTZCO1lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQVBlLGlDQUF1QiwwQkFPdEMsQ0FBQTtJQUdELHFDQUE0QyxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVk7UUFDekUsSUFBSSxFQUFFLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDakQsSUFBSSxhQUFhLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUMzQyxJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQ25DLElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDekMsSUFBSSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDNUU7Ozs7OztXQU1HO1FBQ0gsSUFBSSxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDL0QsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUNyQjtnQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxFQUFFLHdCQUF3QixDQUFDO2dCQUNuRSxLQUFLLEVBQUUsTUFBTTtnQkFDYixLQUFLLEVBQUUsYUFBYTtnQkFDcEIsS0FBSyxFQUFFLG9DQUFvQzthQUM1QztTQWNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFuQ2UscUNBQTJCLDhCQW1DMUMsQ0FBQTtJQUVELGlDQUF3QyxHQUFHLEVBQUUsV0FBa0I7UUFBbEIsMkJBQWtCLEdBQWxCLGtCQUFrQjtRQUM3RCxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ1IsSUFBSSxZQUFZLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDLDBCQUEwQixFQUFFLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ2hLLENBQUM7Z0JBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ04sTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3ZJLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDWixDQUFDO0lBWmUsaUNBQXVCLDBCQVl0QyxDQUFBO0lBR0QsdUJBQThCLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBVztRQUFYLG9CQUFXLEdBQVgsV0FBVztRQUM3RCxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNqRCxJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQzNDLElBQUksT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7UUFDbkMsSUFBSSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDNUUsRUFBRSxDQUFDLENBQUMsYUFBYSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDN0IsV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlHLENBQUM7UUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBVGUsdUJBQWEsZ0JBUzVCLENBQUE7SUFFRDs7T0FFRztJQUNILG1CQUFtQixJQUFJO1FBQ3JCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDVCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsd0RBQXdEO0lBQ3hELHVCQUE4QixJQUFXO1FBQ3ZDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDNUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFOZSx1QkFBYSxnQkFNNUIsQ0FBQTtJQUVELHlCQUFnQyxXQUFXO1FBQ3pDLFdBQVcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDbkMsSUFBSSxTQUFTLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQXNCLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNqRixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2QsSUFBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNsQixvQkFBb0IsSUFBSTtnQkFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ25CLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDZixDQUFDO1lBQ0QsaUJBQWlCLElBQUk7Z0JBQ25CLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBQ0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsVUFBQyxJQUFJO2dCQUNoQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNuQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3RDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDOUIsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNuQixDQUFDO29CQUNILENBQUM7b0JBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ04sSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUM3QixFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7NEJBQ2QsTUFBTSxDQUFDO3dCQUNULENBQUM7d0JBQ0QsRUFBRSxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7NEJBQ3RCLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDbkIsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILGdFQUFnRTtZQUNoRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ1gsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsVUFBQyxJQUFJO29CQUNoQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ1gsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3ZDLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDN0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dDQUNkLE1BQU0sQ0FBQzs0QkFDVCxDQUFDOzRCQUNELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDakMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNuQixDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxnQ0FBZ0M7WUFDaEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNYLEdBQUcsQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLENBQUMsV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUF2RGUseUJBQWUsa0JBdUQ5QixDQUFBO0lBRUQseUJBQXlCLE1BQU0sRUFBRSxRQUFRO1FBQ3ZDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDYixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEIsQ0FBQztRQUNILENBQUM7UUFDRCxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNoQixDQUFDO0FBQ0gsQ0FBQyxFQTFzQk0sU0FBUyxLQUFULFNBQVMsUUEwc0JmOztBQzNzQkQseUNBQXlDO0FBQ3pDLElBQU8sU0FBUyxDQW9TZjtBQXBTRCxXQUFPLFNBQVMsRUFBQyxDQUFDO0lBRUwsaUJBQU8sR0FBRyxhQUFhLENBQUM7SUFDeEIsY0FBSSxHQUFHLEdBQUcsR0FBRyxpQkFBTyxDQUFDO0lBQ3JCLG9CQUFVLEdBQUcsV0FBVyxDQUFDO0lBQ3pCLG9CQUFVLEdBQUcsb0JBQW9CLENBQUM7SUFDbEMsc0JBQVksR0FBRyxvQkFBVSxHQUFHLE9BQU8sQ0FBQztJQUNwQyxhQUFHLEdBQWtCLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0JBQVUsQ0FBQyxDQUFDO0lBRTVDLDRCQUFrQixHQUFHLFNBQVMsQ0FBQztJQUMvQixtQ0FBeUIsR0FBRyw0QkFBa0IsR0FBRyxPQUFPLENBQUM7SUFFekQsMkJBQWlCLEdBQUc7UUFDN0IsT0FBTyxFQUFFO1lBQ1AsTUFBTSxFQUFFLDJDQUEyQztTQUNwRDtLQUNGLENBQUM7SUFFRjs7T0FFRztJQUNILDBCQUFpQyxLQUFLLEVBQUUsS0FBSztRQUMzQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDO0lBQ3RDLENBQUM7SUFMZSwwQkFBZ0IsbUJBSy9CLENBQUE7SUFFRCx5QkFBZ0MsTUFBTTtRQUNwQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzdFLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUxlLHlCQUFlLGtCQUs5QixDQUFBO0lBQ0Q7O09BRUc7SUFDSCw2QkFBb0MsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTTtRQUNwRixJQUFJLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztRQUNsQyxJQUFJLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztRQUVsQyxJQUFJLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDMUMsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUVoQyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ1gsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDckIsQ0FBQztRQUVELElBQUksTUFBTSxHQUFHO1lBQ1gsR0FBRyxFQUFFLEVBQUU7WUFDUCxJQUFJLEVBQUUsRUFBRTtZQUNSLE1BQU0sRUFBRSxFQUFFO1lBQ1YsUUFBUSxFQUFFLEVBQUU7U0FDYixDQUFDO1FBRUYsSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBRXpCO1lBQ0UsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBRS9CLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxVQUFDLElBQUk7Z0JBQy9CLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNuQyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUN6QixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7Z0JBQzdDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUMzQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUU3QixJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBRXhDLCtCQUErQjtnQkFDL0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNiLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLENBQUM7Z0JBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNiLE9BQU8sR0FBRyxXQUFXLENBQUMsK0NBQStDLENBQUMsQ0FBQTtnQkFDeEUsQ0FBQztnQkFDRCxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxJQUFJLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUNsRCxJQUFJLFFBQVEsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3JDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDZCxRQUFRLEdBQUc7NEJBQ1QsT0FBTyxFQUFFLE9BQU87NEJBQ2hCLFFBQVEsRUFBRSxFQUFFO3lCQUNiLENBQUM7d0JBQ0YsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQztvQkFDbkMsQ0FBQztvQkFDRCxJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM3QyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7d0JBQ2pCLFdBQVcsR0FBRzs0QkFDWixzQkFBc0IsRUFBRSxFQUFFO3lCQUMzQixDQUFDO3dCQUNGLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsV0FBVyxDQUFDO29CQUMzQyxDQUFDO29CQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ1QsV0FBVyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQzt3QkFDaEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7d0JBQ2xCLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUM7NEJBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLHdCQUF3QixFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUMvSSxDQUFDO3dCQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNOLGFBQUcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsZ0JBQWdCLEdBQUcsUUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDO3dCQUNqRixDQUFDO3dCQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO3dCQUNwQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7d0JBQ2xCLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQUMsT0FBTzs0QkFDOUIsSUFBSSxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDL0MsSUFBSSxlQUFlLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQzs0QkFDdEQsRUFBRSxDQUFDLENBQUMsZUFBZSxJQUFJLFdBQVc7Z0NBQ2hDLFVBQVUsQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQztnQ0FDeEQsVUFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDckUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBQyxLQUFLO29DQUMxQixJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29DQUM5QyxFQUFFLENBQUMsQ0FBQyxXQUFXLEtBQUssVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7d0NBQzlDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7d0NBQzFCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dDQUN6RCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3Q0FDN0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzRDQUNaLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDOzRDQUNuRCxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dEQUNSLHNCQUFzQjtnREFDdEIsTUFBTSxHQUFHO29EQUNQLElBQUksRUFBRSxXQUFXO29EQUNqQixJQUFJLEVBQUUsR0FBRztpREFDVixDQUFDOzRDQUNKLENBQUM7d0NBQ0gsQ0FBQztvQ0FDSCxDQUFDO2dDQUNILENBQUMsQ0FBQyxDQUFDOzRCQUNMLENBQUM7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztvQkFDaEMsQ0FBQztvQkFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQ3BFLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLHNCQUFzQixDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDdkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsdUJBQXVCLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO29CQUMxRSxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7b0JBQ2pFLElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLHVCQUF1QixDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztvQkFDMUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzt3QkFDckIsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUMzQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzRCQUNWLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0NBQzNCLE1BQU0sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dDQUM3QixVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFDLElBQUk7b0NBQ3RELGVBQWUsR0FBRyxJQUFJLENBQUM7b0NBQ3ZCLHVCQUF1QixFQUFFLENBQUM7Z0NBQzVCLENBQUMsQ0FBQyxDQUFDOzRCQUNMLENBQUM7NEJBQUMsSUFBSSxDQUFDLENBQUM7Z0NBQ04sdUJBQXVCLEVBQUUsQ0FBQzs0QkFDNUIsQ0FBQzt3QkFDSCxDQUFDO3dCQUVELGtCQUFrQixJQUFJOzRCQUNwQixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7NEJBQ2YsOERBQThEOzRCQUM5RCxzRUFBc0U7NEJBQ3RFLGtEQUFrRDs0QkFDbEQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDOzRCQUNoRixFQUFFLENBQUMsQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0NBQ3BDLElBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDOUIsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztvQ0FDZCxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztnQ0FDMUIsQ0FBQzs0QkFDSCxDQUFDOzRCQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7d0JBQ2YsQ0FBQzt3QkFFRDs0QkFDRSxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsVUFBQyxFQUFFO2dDQUNwQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxVQUFDLElBQUksRUFBRSxJQUFJO29DQUNwRCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dDQUNyQixJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7d0NBQzNCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7NENBQ1YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsVUFBQyxjQUFjO2dEQUM5QyxJQUFJLFNBQVMsR0FBRyxjQUFjLENBQUMsb0JBQW9CLENBQUM7Z0RBQ3BELEVBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztvREFDckMsSUFBSSxVQUFVLEdBQUcsY0FBYyxDQUFDO29EQUNoQyxJQUFJLFlBQVksR0FBRyxjQUFjLENBQUMsbUJBQW1CLENBQUM7b0RBQ3RELEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7d0RBQ2pCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO3dEQUNwRCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO3dEQUMvQixFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7NERBQzlCLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7NERBQ3BDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0VBQ1AsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnRUFDaEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnRUFDaEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsVUFBQyxNQUFNO29FQUMxQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dFQUNYLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7d0VBQy9CLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7NEVBQy9ELElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzs0RUFDMUIsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnRkFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztnRkFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLEdBQUcsU0FBUyxDQUFDLENBQUM7NEVBQzdGLENBQUM7d0VBQ0gsQ0FBQztvRUFDSCxDQUFDO2dFQUNILENBQUMsQ0FBQyxDQUFDO2dFQUNILElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0VBQ3RELEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0VBQ1gsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsOEJBQThCLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO29FQUM1RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDO29FQUM1RixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUM7b0VBQ3RGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsbUNBQW1DLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUM7b0VBQy9GLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLCtCQUErQixDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztvRUFFN0UsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dFQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztvRUFDM0csQ0FBQztnRUFDSCxDQUFDOzREQUNILENBQUM7d0RBQ0gsQ0FBQztvREFDSCxDQUFDO2dEQUNILENBQUM7NENBQ0gsQ0FBQyxDQUFDLENBQUM7d0NBQ0wsQ0FBQztvQ0FDSCxDQUFDO2dDQUNILENBQUMsQ0FBQyxDQUFDOzRCQUNMLENBQUMsQ0FBQyxDQUFDO3dCQUNMLENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3dCQUNiLElBQUksWUFBWSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUM1RCxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLHFCQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQzt3QkFDcEYsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7d0JBQ2YsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQy9HLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsdUZBQXVGO1lBQ3ZGLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQUMsT0FBTyxFQUFFLFdBQVc7Z0JBQ2pELElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUNyQixPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBQyxXQUFXO29CQUM1QyxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsc0JBQXNCLENBQUM7b0JBQzdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFVBQUMsSUFBSSxFQUFFLElBQUk7d0JBQzlCLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO3dCQUMxRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzRCQUNWLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3pCLENBQUM7d0JBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ04sU0FBUyxDQUFDLElBQUksQ0FBQztnQ0FDYixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDbkIsQ0FBQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDSCxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDdkIsZ0NBQWdDO29CQUNoQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFDLEVBQUU7d0JBQzVCLEVBQUUsRUFBRSxDQUFDO29CQUNQLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLGFBQUcsQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQztRQUVELFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxFQUFFLEVBQUUsVUFBQyxJQUFJO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ1QsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7Z0JBQ2xCLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFVBQUMsSUFBSTtZQUN0RCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNULE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixXQUFXLEVBQUUsQ0FBQztZQUNoQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxVQUFDLElBQUk7WUFDcEQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDVCxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDckIsV0FBVyxFQUFFLENBQUM7WUFDaEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsVUFBQyxJQUFJO1lBQ2xELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ1QsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ25CLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUE1UGUsNkJBQW1CLHNCQTRQbEMsQ0FBQTtBQUdILENBQUMsRUFwU00sU0FBUyxLQUFULFNBQVMsUUFvU2Y7O0FDclNELHlDQUF5QztBQUN6Qyw4Q0FBOEM7QUFDOUMsMkNBQTJDO0FBQzNDLElBQU8sU0FBUyxDQW1EZjtBQW5ERCxXQUFPLFNBQVMsRUFBQSxDQUFDO0lBQ2IsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzdDLGdDQUF1QyxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVk7UUFDeEUsTUFBTSxDQUFDLHlCQUFlLENBQUM7WUFDdEI7Z0JBQ0MsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQU8sRUFBQyxVQUFVLEVBQUMsbUJBQW1CLENBQUM7Z0JBQzdELEtBQUssRUFBRSxRQUFRO2dCQUNmLEtBQUssRUFBRSxRQUFRO2dCQUNmLEtBQUssRUFBRSxDQUFDO3dCQUNQLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFPLEVBQUMsVUFBVSxFQUFDLG1CQUFtQixDQUFDO3dCQUM3RCxLQUFLLEVBQUUsSUFBSTt3QkFDWCxLQUFLLEVBQUUsTUFBTTtxQkFDYjtvQkFDRDt3QkFDQSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBTyxFQUFDLFVBQVUsRUFBQyx5QkFBeUIsQ0FBQzt3QkFDbEUsS0FBSyxFQUFFLElBQUk7d0JBQ1gsS0FBSyxFQUFFLE1BQU07cUJBQ2I7b0JBQ0Q7d0JBQ0MsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQU8sRUFBQyxXQUFXLEVBQUMsK0JBQStCLENBQUM7d0JBQzFFLEtBQUssRUFBRSxJQUFJO3dCQUNYLEtBQUssRUFBRSxNQUFNO3FCQUNiLENBQUM7YUFDRjtZQUNEO2dCQUNDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFPLEVBQUMsVUFBVSxFQUFDLG9CQUFvQixDQUFDO2dCQUM5RCxLQUFLLEVBQUUsUUFBUTtnQkFDZixLQUFLLEVBQUUsUUFBUTtnQkFDZixLQUFLLEVBQUUsQ0FBQzt3QkFDUCxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBTyxFQUFDLFVBQVUsRUFBQyxvQkFBb0IsQ0FBQzt3QkFDOUQsS0FBSyxFQUFFLElBQUk7d0JBQ1gsS0FBSyxFQUFFLE1BQU07cUJBQ2I7b0JBQ0Q7d0JBQ0EsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQU8sRUFBQyxVQUFVLEVBQUMsMEJBQTBCLENBQUM7d0JBQ25FLEtBQUssRUFBRSxJQUFJO3dCQUNYLEtBQUssRUFBRSxNQUFNO3FCQUNiO29CQUNEO3dCQUNDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFPLEVBQUMsV0FBVyxFQUFDLGdDQUFnQyxDQUFDO3dCQUMzRSxLQUFLLEVBQUUsSUFBSTt3QkFDWCxLQUFLLEVBQUUsTUFBTTtxQkFDYixDQUFDO2FBQ0Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLENBQUM7Z0JBQ2pELEtBQUssRUFBRSxJQUFJO2dCQUNYLEtBQUssRUFBRSxNQUFNO2FBQ2I7U0FDRixDQUFDLENBQUM7SUFDSixDQUFDO0lBaERrQixnQ0FBc0IseUJBZ0R4QyxDQUFBO0FBQ0YsQ0FBQyxFQW5ETSxTQUFTLEtBQVQsU0FBUyxRQW1EZjs7QUN0REQseUNBQXlDO0FBQ3pDLHVDQUF1QztBQUN2QyxpRUFBaUU7QUFDakUsZ0VBQWdFO0FBQ2hFLElBQU8sT0FBTyxDQW1IYjtBQW5IRCxXQUFPLE9BQU8sRUFBQSxDQUFDO0lBQ2Q7UUFBQTtRQU1BLENBQUM7UUFMQSxzQkFBa0IscUJBQU07aUJBQXhCLGNBQW1DLE1BQU0sQ0FBQyxRQUFRLENBQUEsQ0FBQSxDQUFDOzs7V0FBQTtRQUNuRCxzQkFBa0IscUJBQU07aUJBQXhCLGNBQW1DLE1BQU0sQ0FBQyxRQUFRLENBQUEsQ0FBQSxDQUFDOzs7V0FBQTtRQUNuRCxzQkFBa0Isa0JBQUc7aUJBQXJCLGNBQStCLE1BQU0sQ0FBQyxLQUFLLENBQUEsQ0FBQSxDQUFDOzs7V0FBQTtRQUM1QyxzQkFBa0IsbUJBQUk7aUJBQXRCLGNBQWdDLE1BQU0sQ0FBQyxNQUFNLENBQUEsQ0FBQSxDQUFDOzs7V0FBQTtRQUM5QyxzQkFBa0Isc0JBQU87aUJBQXpCLGNBQW1DLE1BQU0sQ0FBQyxTQUFTLENBQUEsQ0FBQSxDQUFDOzs7V0FBQTtRQUNyRCxrQkFBQztJQUFELENBTkEsQUFNQyxJQUFBO0lBTlksbUJBQVcsY0FNdkIsQ0FBQTtJQUVELGVBQU8sQ0FBQyxVQUFVLENBQUMsNEJBQTRCLEVBQUMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQUMsTUFBTSxFQUFFLFNBQVM7WUFDekYsTUFBTSxDQUFDLFFBQVEsR0FBQyxDQUFDO29CQUNoQixJQUFJLEVBQUUsa0NBQWtDO29CQUN4QyxLQUFLLEVBQUUsUUFBUTtvQkFDZixLQUFLLEVBQUUsVUFBVTtvQkFDakIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBTyxFQUFFLHFCQUFxQixDQUFDO2lCQUNyRDtnQkFDRDtvQkFDQyxJQUFJLEVBQUUsNkJBQTZCO29CQUNuQyxLQUFLLEVBQUUsUUFBUTtvQkFDZixLQUFLLEVBQUUsVUFBVTtvQkFDakIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBTyxFQUFFLHVCQUF1QixDQUFDO2lCQUN2RCxDQUFDLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUosaUNBQWlDLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWTtRQUMvRCxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxLQUFLLEVBQUUsS0FBSyxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDYixLQUFLLDRCQUE0QjtnQkFDaEMsS0FBSyxHQUFHLFFBQVEsQ0FBQztnQkFDakIsS0FBSyxHQUFFLFVBQVUsQ0FBQztnQkFDbEIsS0FBSyxDQUFDO1lBQ1AsS0FBSyw4QkFBOEI7Z0JBQy9CLEtBQUssR0FBRyxRQUFRLENBQUM7Z0JBQ3BCLEtBQUssR0FBRSxVQUFVLENBQUM7Z0JBQ2YsS0FBSyxDQUFDO1lBQ1Y7Z0JBQ0MsS0FBSyxDQUFDO1FBQ1IsQ0FBQztRQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2pDLElBQUksRUFBRSxHQUFHO2dCQUNULEtBQUssRUFBRSxLQUFLO2dCQUNaLEtBQUssRUFBRSxLQUFLLENBQUEsWUFBWTthQUN4QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCwwQkFBaUMsS0FBZ0IsRUFBRSxFQUFTO1FBQzNELElBQUksTUFBTSxHQUFFLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBQyxDQUFDO1FBQ3ZCLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQUMsR0FBRztZQUMxQixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2YsQ0FBQztJQU5lLHdCQUFnQixtQkFNL0IsQ0FBQTtJQUVELG1CQUEwQixNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVk7UUFDeEQsTUFBTSxDQUFFLFlBQVksR0FBRyxTQUFTLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRmUsaUJBQVMsWUFFeEIsQ0FBQTtJQUVELHlCQUFnQyxLQUFnQixFQUFFLEdBQUc7UUFDcEQsSUFBSSxNQUFNLEdBQUUsRUFBRSxDQUFDO1FBQ2YsRUFBRSxDQUFBLENBQUMsR0FBRyxDQUFDLENBQUEsQ0FBQztZQUNQLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQUMsR0FBRztnQkFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDWCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7b0JBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsV0FBVztvQkFDckIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO2lCQUNyQixDQUFDLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUM7UUFBQSxJQUFJLENBQUEsQ0FBQztZQUNMLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQUMsR0FBRztnQkFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDWCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7b0JBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsV0FBVztvQkFDckIsS0FBSyxFQUFFLElBQUk7aUJBQ1gsQ0FBQyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNmLENBQUM7SUFwQmUsdUJBQWUsa0JBb0I5QixDQUFBO0lBRUQsMkJBQWtDLEtBQUssRUFBRSxHQUFVLEVBQUUsT0FBYyxFQUFFLFFBQVEsRUFBRSxFQUF5QjtRQUN2RyxFQUFFLENBQUEsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDO1lBQ3BCLE1BQU0sV0FBVyxDQUFDO1FBRW5CLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRixJQUFJLFVBQVUsR0FBQyxHQUFHLENBQUM7UUFDbkIsRUFBRSxDQUFBLENBQUMsRUFBRSxLQUFHLFNBQVMsQ0FBQyxDQUFBLENBQUM7WUFDbEIsVUFBVSxHQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFBQSxJQUFJLENBQUEsQ0FBQztZQUNMLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxHQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBRUQsS0FBSyxDQUFDO1lBQ0ksTUFBTSxFQUFFLE1BQU07WUFDZCxHQUFHLEVBQUUsVUFBVTtZQUNmLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxrREFBa0QsRUFBQztZQUM5RSxnQkFBZ0IsRUFBRSxVQUFTLEdBQUc7Z0JBQzFCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztnQkFDYixHQUFHLENBQUEsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUM7b0JBQ2IsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekIsQ0FBQztTQUNKLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO1lBQ2pELHNCQUFzQjtZQUNsQixFQUFFLENBQUEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN0QixFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXpCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07WUFDM0MsRUFBRSxDQUFBLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdEIsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNWLENBQUM7SUFoQ2UseUJBQWlCLG9CQWdDaEMsQ0FBQTtBQUVGLENBQUMsRUFuSE0sT0FBTyxLQUFQLE9BQU8sUUFtSGI7O0FDdkhELHlDQUF5QztBQUN6Qyx1Q0FBdUM7QUFDdkMsSUFBTyxPQUFPLENBZ0diO0FBaEdELFdBQU8sT0FBTyxFQUFBLENBQUM7SUF5QlgsYUFBYTtJQUNoQix1QkFBdUIsSUFBWTtRQUNsQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxNQUFNLEdBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksS0FBSyxHQUFDLENBQUMsQ0FBQztRQUNaLE9BQU0sTUFBTSxHQUFHLElBQUksRUFBQyxDQUFDO1lBQ3BCLE1BQU0sR0FBRyxNQUFNLEdBQUMsSUFBSSxDQUFDO1lBQ3JCLEtBQUssRUFBRyxDQUFDO1FBQ1YsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFHRDtRQUlDO1lBSE8sWUFBTyxHQUFnQixFQUFFLENBQUM7WUFDMUIsZ0JBQVcsR0FBcUIsRUFBRSxDQUFDO1lBR3pDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBRU0sMkNBQWEsR0FBcEI7WUFDQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBQ1MsOENBQWdCLEdBQXZCO1lBQ0MsSUFBSSxNQUFNLEdBQUMsSUFBSSxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ1QsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osSUFBSSxFQUFHLE1BQU07Z0JBQ2IsR0FBRyxFQUFHLCtCQUErQjtnQkFDckMsT0FBTyxFQUFHLFVBQVMsSUFBSTtvQkFDbkIsRUFBRSxDQUFBLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQzt3QkFDUixNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNsQixDQUFDO29CQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25CLENBQUM7YUFDRCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUV2QixDQUFDO1FBRU0sK0NBQWlCLEdBQXhCO1lBQ0MsSUFBSSxNQUFNLEdBQUMsSUFBSSxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ04sS0FBSyxFQUFFLEtBQUs7Z0JBQ1osSUFBSSxFQUFHLE1BQU07Z0JBQ2IsR0FBRyxFQUFHLCtCQUErQjtnQkFDckMsT0FBTyxFQUFHLFVBQVMsSUFBSTtvQkFDbkIsRUFBRSxDQUFBLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQzt3QkFDUixNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNsQixDQUFDO2dCQUNGLENBQUM7YUFDRCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztRQUMzQixDQUFDO1FBRU0sbURBQXFCLEdBQTVCLFVBQTZCLElBQVk7WUFDeEMsRUFBRSxDQUFBLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBRyxJQUFJLENBQUM7Z0JBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDYixHQUFHLENBQUEsQ0FBQyxJQUFLLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFDLENBQUM7Z0JBQzFDLEVBQUUsQ0FBQSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQztvQkFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ2hDLENBQUM7UUFDRixDQUFDO1FBQ0YsMEJBQUM7SUFBRCxDQXBEQSxBQW9EQyxJQUFBO0lBcERZLDJCQUFtQixzQkFvRC9CLENBQUE7SUFFRSxlQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVM7WUFDekgsSUFBSSxNQUFNLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQyxFQWhHTSxPQUFPLEtBQVAsT0FBTyxRQWdHYjs7QUNsR0QseUNBQXlDO0FBRXpDLElBQU8sT0FBTyxDQXdCYjtBQXhCRCxXQUFPLE9BQU8sRUFBQSxDQUFDO0lBQ2QsOEJBQXFDLEtBQWdCLEVBQUUsS0FBUyxFQUFFLEdBQVc7UUFDNUUsRUFBRSxDQUFBLENBQUMsR0FBRyxDQUFDLENBQUEsQ0FBQztZQUNQLEdBQUcsQ0FBQSxDQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQyxDQUFDO2dCQUNqQyxFQUFFLENBQUEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUEsQ0FBQztvQkFDM0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ25CLEtBQUssQ0FBQztnQkFDUCxDQUFDO1lBQ0YsQ0FBQztRQUNGLENBQUM7UUFBQSxJQUFJLENBQUEsQ0FBQztZQUNMLEdBQUcsQ0FBQSxDQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRyxDQUFDLEdBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQyxDQUFDO2dCQUNsQyxFQUFFLENBQUEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUEsQ0FBQztvQkFDdEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ25CLEtBQUssQ0FBQztnQkFDUCxDQUFDO1lBQ0YsQ0FBQztRQUNGLENBQUM7SUFDRixDQUFDO0lBaEJlLDRCQUFvQix1QkFnQm5DLENBQUE7SUFFRCwrQkFBc0MsS0FBaUIsRUFBRSxRQUFtQjtRQUMzRSxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFDLE9BQU87WUFDakMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUplLDZCQUFxQix3QkFJcEMsQ0FBQTtBQUNGLENBQUMsRUF4Qk0sT0FBTyxLQUFQLE9BQU8sUUF3QmI7O0FDMUJELHlDQUF5QztBQUN6Qyx1Q0FBdUM7QUFDdkMsd0NBQXdDO0FBQ3hDLHVDQUF1QztBQUN2Qyw2Q0FBNkM7QUFDN0MsSUFBTyxPQUFPLENBUWI7QUFSRCxXQUFPLE9BQU8sRUFBQSxDQUFDO0lBRUgscUJBQWEsR0FBRyxrQkFBVSxDQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYztRQUNuSixVQUFDLE1BQU0sRUFBRSxjQUF1QyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZO1lBQ3hHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztZQUNuQyxpQkFBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsRUFSTSxPQUFPLEtBQVAsT0FBTyxRQVFiOztBQ2JELHlDQUF5QztBQUN6Qyx1Q0FBdUM7QUFDdkMsd0NBQXdDO0FBQ3hDLHVDQUF1QztBQUV2QyxJQUFPLE9BQU8sQ0EwR2I7QUExR0QsV0FBTyxPQUFPLEVBQUEsQ0FBQztJQUVILHNCQUFjLEdBQUcsa0JBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsY0FBYztRQUNwSixVQUFDLE1BQU0sRUFBRSxjQUF1QyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZO1lBQ3hHLE1BQU0sQ0FBQyxLQUFLLEdBQUUsWUFBWSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxXQUFXLEdBQUM7Z0JBQ1QsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFVBQVUsRUFBRSxDQUFDO3dCQUNULEtBQUssRUFBRSxNQUFNO3dCQUNiLFdBQVcsRUFBRSxJQUFJO3FCQUNwQjtvQkFDRDt3QkFDSSxLQUFLLEVBQUUsSUFBSTt3QkFDWCxXQUFXLEVBQUUsSUFBSTtxQkFDcEI7b0JBQ0Q7d0JBQ0MsS0FBSyxFQUFFLE1BQU07d0JBQ2IsV0FBVyxFQUFFLEtBQUs7cUJBQ2xCO29CQUNEO3dCQUNDLEtBQUssRUFBRSxNQUFNO3dCQUNiLFdBQVcsRUFBRSxLQUFLO3FCQUNsQjtvQkFDRDt3QkFDQyxLQUFLLEVBQUUsVUFBVTt3QkFDakIsV0FBVyxFQUFFLElBQUk7cUJBQ2pCO29CQUNEO3dCQUNDLEtBQUssRUFBRSxjQUFjO3dCQUNyQixXQUFXLEVBQUUsS0FBSztxQkFDbEI7b0JBQ0Q7d0JBQ0ksS0FBSyxFQUFFLFdBQVc7d0JBQ2xCLFdBQVcsRUFBRSxNQUFNO3FCQUN0QjtvQkFDRDt3QkFDSSxLQUFLLEVBQUUsUUFBUTt3QkFDZixXQUFXLEVBQUUsS0FBSztxQkFDckI7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLFFBQVE7d0JBQ2hCLFdBQVcsRUFBRSxNQUFNO3dCQUNoQixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQztxQkFDekQ7b0JBQ0Q7d0JBQ0MsS0FBSyxFQUFFLFFBQVE7d0JBQ2YsV0FBVyxFQUFFLElBQUk7d0JBQ2pCLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO3FCQUNsRCxDQUFDO2dCQUNGLHVCQUF1QixFQUFFLEtBQUs7Z0JBQzlCLHFCQUFxQixFQUFFLEtBQUs7Z0JBQzVCLFdBQVcsRUFBRSxLQUFLO2dCQUNsQixRQUFRLEVBQUU7b0JBQ04sTUFBTSxFQUFFLE1BQU07b0JBQ2QsU0FBUyxFQUFFLElBQUk7aUJBQ2xCO2FBQ0osQ0FBQTtZQUVELGlCQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUUzQyxNQUFNLENBQUMsTUFBTSxHQUFHO2dCQUNaLE1BQU0sQ0FBQyxHQUFHLEdBQUUsSUFBSSxDQUFDO2dCQUNqQixNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztnQkFDcEIsTUFBTSxDQUFDLFNBQVMsR0FBRyx1QkFBZSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN4RSxNQUFNLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQztnQkFDZiw2QkFBcUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsRUFBQyxFQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxFQUFDLEVBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xJLENBQUMsQ0FBQTtZQUVELE1BQU0sQ0FBQyxNQUFNLEdBQUk7Z0JBQ2IsTUFBTSxDQUFDLFNBQVMsR0FBRSxJQUFJLENBQUM7Z0JBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO2dCQUNuQixNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUN4QixDQUFDLENBQUE7WUFFRCxNQUFNLENBQUMsUUFBUSxHQUFHO2dCQUNkLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixNQUFNLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztnQkFDbkIseUJBQWlCLENBQUMsS0FBSyxFQUFFLDBCQUEwQixFQUFFLG1CQUFXLENBQUMsTUFBTSxFQUFFLHdCQUFnQixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQUMsTUFBTSxFQUFFLE1BQU07b0JBQ3RJLEVBQUUsQ0FBQSxDQUFDLE1BQU0sS0FBRyxHQUFHLENBQUMsQ0FBQSxDQUFDO3dCQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDckMsQ0FBQztvQkFBQSxJQUFJLENBQUEsQ0FBQzt3QkFDRixNQUFNLFFBQVEsQ0FBQztvQkFDbkIsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQTtZQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFVBQUMsS0FBSyxFQUFFLElBQUk7Z0JBQzlCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixNQUFNLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztnQkFDbkIsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFBO2dCQUN0QixNQUFNLENBQUMsU0FBUyxHQUFHLHVCQUFlLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3hFLDZCQUFxQixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxFQUFDLEVBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLEVBQUMsRUFBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEksQ0FBQyxDQUFDLENBQUU7WUFFSixNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxVQUFDLEtBQUssRUFBRSxJQUFJO2dCQUNoQyx5QkFBaUIsQ0FBQyxLQUFLLEVBQUUsMEJBQTBCLEVBQUUsbUJBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQUMsTUFBTSxFQUFFLE1BQU07b0JBQzFGLEVBQUUsQ0FBQSxDQUFDLE1BQU0sS0FBRyxHQUFHLENBQUMsQ0FBQSxDQUFDO3dCQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDckMsQ0FBQztvQkFBQSxJQUFJLENBQUEsQ0FBQzt3QkFDRixNQUFNLFFBQVEsQ0FBQztvQkFDbkIsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDSCxzREFBc0Q7WUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFDVixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxFQTFHTSxPQUFPLEtBQVAsT0FBTyxRQTBHYjs7QUMvR0QseUNBQXlDO0FBQ3pDLHVDQUF1QztBQUN2QyxJQUFPLE9BQU8sQ0FVYjtBQVZELFdBQU8sT0FBTyxFQUFBLENBQUM7SUFDSCxpQkFBUyxHQUFHLGtCQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQUMsTUFBTTtZQUNoRSxNQUFNLENBQUMsT0FBTyxHQUFHLFVBQUMsTUFBTTtnQkFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFBO1lBRUQsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFDLE1BQU07Z0JBQ3pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQTtRQUNGLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLEVBVk0sT0FBTyxLQUFQLE9BQU8sUUFVYjs7QUNaRCxJQUFPLFVBQVUsQ0FvSmhCO0FBcEpELFdBQU8sVUFBVSxFQUFDLENBQUM7SUFFakI7UUFBQTtRQUVBLENBQUM7UUFEQyxzQkFBSSx5Q0FBcUI7aUJBQXpCLGNBQXFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3ZFLGFBQUM7SUFBRCxDQUZBLEFBRUMsSUFBQTtJQUZZLGlCQUFNLFNBRWxCLENBQUE7SUFFVSxvQkFBUyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7SUE4Q3JDO1FBQUE7UUEwQkEsQ0FBQztRQXpCQSxzQkFBa0IsdUJBQVM7aUJBQTNCLGNBQXVDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUM1RCxzQkFBa0Isb0JBQU07aUJBQXhCLGNBQW9DLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUNwRCxzQkFBa0Isd0JBQVU7aUJBQTVCLGNBQXdDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUNoRSxzQkFBa0IsbUJBQUs7aUJBQXZCLGNBQW1DLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUNwRCxzQkFBa0IsZ0NBQWtCO2lCQUFwQyxjQUFnRCxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUM3RSxzQkFBa0Isc0NBQXdCO2lCQUExQyxjQUFzRCxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUN4RixzQkFBa0Isa0JBQUk7aUJBQXRCLGNBQWtDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUNsRCxzQkFBa0IscUNBQXVCO2lCQUF6QyxjQUFxRCxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUN2RixzQkFBa0IsNkJBQWU7aUJBQWpDLGNBQTZDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3ZFLHNCQUFrQiwyQkFBYTtpQkFBL0IsY0FBMkMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ25FLHNCQUFrQixxQkFBTztpQkFBekIsY0FBcUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3hELHNCQUFrQixzQkFBUTtpQkFBMUIsY0FBc0MsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQzFELHNCQUFrQiw4QkFBZ0I7aUJBQWxDLGNBQThDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBRXpFLHNCQUFrQix1QkFBUztpQkFBM0IsY0FBdUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQzVELHNCQUFrQixvQkFBTTtpQkFBeEIsY0FBb0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3RELHNCQUFrQiwyQkFBYTtpQkFBL0IsY0FBMkMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ25FLHNCQUFrQixvQkFBTTtpQkFBeEIsY0FBb0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3RELHNCQUFrQixnQ0FBa0I7aUJBQXBDLGNBQWdELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQzdFLHNCQUFrQiwyQkFBYTtpQkFBL0IsY0FBMkMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ25FLHNCQUFrQixzQkFBUTtpQkFBMUIsY0FBc0MsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQzFELHNCQUFrQiw2QkFBZTtpQkFBakMsY0FBNkMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDckUsc0JBQWtCLHNCQUFRO2lCQUExQixjQUFzQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDNUQsc0JBQWtCLDJCQUFhO2lCQUEvQixjQUEyQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDbkUsc0JBQWtCLG1CQUFLO2lCQUF2QixjQUFtQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDckQsaUJBQUM7SUFBRCxDQTFCQSxBQTBCQyxJQUFBO0lBMUJZLHFCQUFVLGFBMEJ0QixDQUFBO0lBRUE7UUFBQTtRQWtDQSxDQUFDO1FBakNDLHNCQUFrQiwyQkFBUTtpQkFBMUI7Z0JBQ0UsTUFBTSxDQUFDO29CQUNMLFVBQVUsQ0FBQyxTQUFTO29CQUNwQixVQUFVLENBQUMsTUFBTTtvQkFDakIsVUFBVSxDQUFDLEtBQUs7b0JBQ2hCLFVBQVUsQ0FBQyxrQkFBa0I7b0JBQzdCLFVBQVUsQ0FBQyx3QkFBd0I7b0JBQ25DLFVBQVUsQ0FBQyxJQUFJO29CQUNmLFVBQVUsQ0FBQyx1QkFBdUI7b0JBQ2xDLFVBQVUsQ0FBQyxlQUFlO29CQUMxQixVQUFVLENBQUMsa0JBQWtCO29CQUM3QixVQUFVLENBQUMsT0FBTztvQkFDbEIsVUFBVSxDQUFDLFFBQVE7b0JBQ25CLFVBQVUsQ0FBQyxnQkFBZ0I7aUJBQzVCLENBQUM7WUFDSixDQUFDOzs7V0FBQTtRQUNELHNCQUFrQiwwQkFBTztpQkFBekI7Z0JBQ0UsTUFBTSxDQUFDO29CQUNMLFVBQVUsQ0FBQyxTQUFTO29CQUNwQixVQUFVLENBQUMsYUFBYTtvQkFDeEIsVUFBVSxDQUFDLE1BQU07b0JBQ2pCLFVBQVUsQ0FBQyxNQUFNO29CQUNqQixVQUFVLENBQUMsYUFBYTtvQkFDeEIsVUFBVSxDQUFDLGtCQUFrQjtvQkFDN0IsVUFBVSxDQUFDLGFBQWE7b0JBQ3hCLFVBQVUsQ0FBQyxhQUFhO29CQUN4QixVQUFVLENBQUMsUUFBUTtvQkFDbkIsVUFBVSxDQUFDLGVBQWU7b0JBQzFCLFVBQVUsQ0FBQyxRQUFRO2lCQUdwQixDQUFDO1lBQ0osQ0FBQzs7O1dBQUE7UUFDSCxzQkFBQztJQUFELENBbENBLEFBa0NDLElBQUE7SUFsQ1ksMEJBQWUsa0JBa0MzQixDQUFBO0lBRUY7UUFBQTtRQUtBLENBQUM7UUFKQSxzQkFBa0IsbUJBQUc7aUJBQXJCLGNBQWlDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUM5QyxzQkFBa0IscUJBQUs7aUJBQXZCLGNBQW1DLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUNwRCxzQkFBa0Isd0JBQVE7aUJBQTFCLGNBQXNDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUMxRCxzQkFBa0IsdUJBQU87aUJBQXpCLGNBQXFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUN6RCxtQkFBQztJQUFELENBTEEsQUFLQyxJQUFBO0lBTFksdUJBQVksZUFLeEIsQ0FBQTtBQTJCRixDQUFDLEVBcEpNLFVBQVUsS0FBVixVQUFVLFFBb0poQjs7QUNwSkQseUNBQXlDO0FBQ3pDLElBQU8sVUFBVSxDQStPaEI7QUEvT0QsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUNOLG9CQUFTLEdBQUUsRUFBRSxDQUFDO0lBRXpCOzs7OztPQUtHO0lBQ0gscUJBQTRCLEVBQUU7UUFDNUIsNkVBQTZFO1FBQzdFLElBQUksS0FBSyxHQUFHLDRDQUE0QyxDQUFDO1FBQ3pELElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUM7SUFDSCxDQUFDO0lBZGUsc0JBQVcsY0FjMUIsQ0FBQTtJQUVEO1FBQ0csSUFBSSxRQUFRLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFDLENBQUMsS0FBSyxHQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0QsT0FBTSxvQkFBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQztZQUN0QyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFDLENBQUMsS0FBSyxHQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELG9CQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxRQUFRLENBQUE7SUFDbEIsQ0FBQztJQVBlLHFCQUFVLGFBT3pCLENBQUE7SUFFRCx5QkFBZ0MsR0FBWTtRQUN4QyxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUNoQixJQUFJLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLGdDQUFnQztRQUNyRSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDM0IsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFUZSwwQkFBZSxrQkFTOUIsQ0FBQTtJQUVEO1FBQUE7WUFFVSxVQUFLLEdBQUMsYUFBYSxDQUFDO1lBQ3BCLFVBQUssR0FBRyxDQUFDLE9BQU8sRUFBQyxhQUFhLEVBQUMsYUFBYSxFQUFDLE1BQU0sRUFBQyxxQkFBcUIsRUFBQyxTQUFTLENBQUMsQ0FBQztRQWlHL0YsQ0FBQztRQS9GUyxxQ0FBUSxHQUFmLFVBQWdCLEdBQUc7WUFDaEIsSUFBSSxNQUFNLEdBQUc7Z0JBQ1YsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLFFBQVEsRUFBRSxHQUFHO2dCQUNiLFdBQVcsRUFBRSxHQUFHO2dCQUNoQixVQUFVLEVBQUUsR0FBRyxDQUFDLFFBQVE7YUFDMUIsQ0FBQztZQUNGLEdBQUcsQ0FBQSxDQUFDLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRW5DLE1BQU0sQ0FBQztnQkFDSixZQUFZLEVBQUksVUFBVSxDQUFDLGlCQUFpQjtnQkFDNUMsTUFBTSxFQUFHLHVCQUF1QjtnQkFDaEMsVUFBVSxFQUFHO29CQUNWLE1BQU0sRUFBRyxHQUFHLENBQUMsSUFBSTtvQkFDakIsUUFBUSxFQUFHLE1BQU07b0JBQ2pCLGFBQWEsRUFBRSxHQUFHLENBQUMsV0FBVztpQkFDaEM7Z0JBQ0QsTUFBTSxFQUFHO29CQUNOLFFBQVEsRUFBRyxHQUFHLENBQUMsUUFBUSxJQUFJLENBQUM7b0JBQzVCLFVBQVUsRUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztpQkFDdkM7YUFDSCxDQUFBO1FBQ0osQ0FBQztRQUVNLCtDQUFrQixHQUF6QjtZQUNHLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN0QixHQUFHLENBQUEsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQztnQkFDekIsRUFBRSxDQUFBLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxxQkFBcUIsQ0FBQztvQkFDM0MsWUFBWSxDQUFDLElBQUksQ0FBQzt3QkFDZixNQUFNLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQ3pCLFdBQVcsRUFBRyxxQ0FBcUM7cUJBQ3JELENBQUMsQ0FBQztnQkFDTixJQUFJO29CQUNELFlBQVksQ0FBQyxJQUFJLENBQUM7d0JBQ2YsTUFBTSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO3dCQUN6QixXQUFXLEVBQUcsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7cUJBQ3JELENBQUMsQ0FBQztZQUNULENBQUM7WUFDRCxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ3ZCLENBQUM7UUFFTSwwQ0FBYSxHQUFwQixVQUFxQixRQUFnQjtZQUNsQyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDakIsR0FBRyxDQUFBLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBLENBQUM7Z0JBQ3hCLEVBQUUsQ0FBQSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUsscUJBQXFCLENBQUM7b0JBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ1YsTUFBTSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO3dCQUN6QixVQUFVLEVBQUU7NEJBQ1IsTUFBTSxFQUFHLFFBQVEsR0FBRyxxQkFBcUI7eUJBQzVDO3FCQUNILENBQUMsQ0FBQztnQkFDTixJQUFJO29CQUNELE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ1YsTUFBTSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO3dCQUN6QixVQUFVLEVBQUU7NEJBQ1IsTUFBTSxFQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzt5QkFDdkM7cUJBQ0gsQ0FBQyxDQUFDO1lBQ1YsQ0FBQztZQUNELE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDbEIsQ0FBQztRQUVNLDZDQUFnQixHQUF2QixVQUF3QixHQUFHO1lBQ3hCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNwQixVQUFVLENBQUMsSUFBSSxDQUNmO2dCQUNHLE1BQU0sRUFBRyxRQUFRO2dCQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ25CLGlCQUFpQixFQUFFLGNBQWM7Z0JBQ2pDLFNBQVMsRUFBQyxDQUFDLHVCQUF1QixDQUFDO2dCQUNuQyxPQUFPLEVBQUU7b0JBQ1Q7d0JBQ0UsZUFBZSxFQUFFLElBQUk7d0JBQ3JCLFVBQVUsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBRTtxQkFDckMsQ0FBQztnQkFDRixjQUFjLEVBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFO2FBQzVDLENBQUMsQ0FBQztZQUNILE1BQU0sQ0FBQyxVQUFVLENBQUE7UUFDcEIsQ0FBQztRQUVNLDJDQUFjLEdBQXJCLFVBQXNCLEdBQUc7WUFDdEIsTUFBTSxDQUFDO2dCQUNILFVBQVUsRUFDVjtvQkFDRyxtQkFBbUI7b0JBQ25CLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTTtpQkFDdEI7Z0JBQ0QsTUFBTSxFQUFHO29CQUNMLCtCQUErQixFQUFHLENBQUM7b0JBQ25DLFlBQVksRUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDO29CQUMxQyxTQUFTLEVBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2lCQUM1QzthQUNKLENBQUE7UUFDSixDQUFDO1FBQ0oseUJBQUM7SUFBRCxDQXBHQSxBQW9HQyxJQUFBO0lBcEdZLDZCQUFrQixxQkFvRzlCLENBQUE7SUFFRCx3QkFBK0IsTUFBTTtRQUNsQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUMsVUFBQyxLQUFLLEVBQUUsR0FBRztZQUMvQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQTtJQUNoQixDQUFDO0lBTmUseUJBQWMsaUJBTTdCLENBQUE7SUFFRCw0Q0FBb0Qsc0JBQXNCLEVBQUUsSUFBSTtRQUM1RSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixzQkFBc0IsQ0FBQyxPQUFPLENBQUMsVUFBQyxFQUFFO1lBQzlCLElBQUksTUFBTSxHQUFHLGtCQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekIsRUFBRSxDQUFBLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUEsQ0FBQztZQUNuQixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQUEsSUFBSSxDQUFBLENBQUM7WUFDRixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDWixLQUFLLENBQUMsT0FBTyxDQUFDLFVBQUMsS0FBSztnQkFDakIsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixFQUFFLENBQUEsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO29CQUNWLEdBQUcsR0FBRyxHQUFHLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLENBQUM7SUFDTCxDQUFDO0lBcEJnQiw2Q0FBa0MscUNBb0JsRCxDQUFBO0lBRUQsb0JBQTJCLEVBQUU7UUFDekIsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBQyxVQUFDLEtBQUssRUFBRSxHQUFHO1lBQ2hFLEVBQUUsQ0FBQSxDQUFDLEdBQUcsS0FBSyxVQUFVLElBQUksS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFBLENBQUM7Z0JBQ3hDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDakIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBUmUscUJBQVUsYUFRekIsQ0FBQTtJQUVELG1CQUEwQixHQUFHLEVBQUUsRUFBRTtRQUM5QixHQUFHLENBQUEsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQSxDQUFDO1lBQ2QsRUFBRSxDQUFBLENBQUMsa0JBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxrQkFBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ25CLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2hCLENBQUM7SUFOZSxvQkFBUyxZQU14QixDQUFBO0lBRUQsNkJBQW9DLEtBQVksRUFBRSxHQUFVO1FBQzNELElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNuQixNQUFNLENBQUEsQ0FBQyxHQUFHLENBQUMsQ0FBQSxDQUFDO1lBQ1gsS0FBSyxNQUFNO2dCQUNSLEVBQUUsQ0FBQSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUM7b0JBQ2YsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEVBQUUsQ0FBQSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUM7b0JBQ3BCLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLElBQUk7b0JBQ0QsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDckIsS0FBSyxDQUFDO1lBQ1QsS0FBSyxPQUFPO2dCQUNOLEVBQUUsQ0FBQSxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUM7b0JBQ2QsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSSxDQUFDLEVBQUUsQ0FBQSxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUM7b0JBQ25CLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUk7b0JBQ0QsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFFeEIsS0FBSyxDQUFDO1lBQ1QsS0FBSyxRQUFRO2dCQUNWLFNBQVMsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QyxLQUFLLENBQUM7WUFDVCxLQUFLLFFBQVE7Z0JBQ1YsU0FBUyxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEQsS0FBSyxDQUFDO1lBQ1QsS0FBSyxTQUFTO2dCQUNYLElBQUksR0FBRyxHQUFFLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0MsRUFBRSxDQUFBLENBQUMsR0FBRyxDQUFDO29CQUNILFNBQVMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixJQUFJO29CQUNBLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ25CLEtBQUssQ0FBQztZQUNULEtBQUssVUFBVTtnQkFDWixFQUFFLENBQUEsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDO29CQUNoQixTQUFTLEdBQUcsT0FBTyxDQUFDO2dCQUN4QixJQUFJO29CQUNBLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQztZQUNUO2dCQUNHLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQztRQUNELE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDbEIsQ0FBQztJQTNDZSw4QkFBbUIsc0JBMkNsQyxDQUFBO0FBQ0gsQ0FBQyxFQS9PTSxVQUFVLEtBQVYsVUFBVSxRQStPaEI7O0FDaFBEOzs7R0FHRztBQUNILElBQU8sVUFBVSxDQStmaEI7QUEvZkQsV0FBTyxVQUFVLEVBQUEsQ0FBQztJQUNOLHFCQUFVLEdBQUcsQ0FBQyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsR0FBRyxFQUFDO1FBQy9GLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsR0FBRyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsUUFBUSxFQUFDLEdBQUcsRUFBQztRQUM5RyxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsUUFBUSxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsR0FBRyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFFBQVEsRUFBQyxHQUFHLEVBQUM7UUFDL0csRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQy9HLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUN0SCxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDaEgsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQzlHLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUNsSCxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDNUcsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ2pILEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxvQkFBb0IsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQzFILEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDL0gsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3hILEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxtQkFBbUIsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ2hJLEVBQUMsVUFBVSxFQUFDLGtCQUFrQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3pILEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ2hKLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3RKLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQzdJLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3hKLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUNsSyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUM5SixFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQzVMLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDdEosRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3ZILEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUNuSCxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDdkgsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3RILEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDMUgsRUFBQyxVQUFVLEVBQUMsaUJBQWlCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxrQkFBa0IsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3RJLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsaUJBQWlCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUNwSSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNqSyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUM3SSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNsSixFQUFDLFVBQVUs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LEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQzFILEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ3hILEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNsSCxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDbEgsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxtQkFBbUIsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDM0gsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDekgsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLG1CQUFtQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDcEksRUFBQyxVQUFVLEVBQUMsb0JBQW9CLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNwSSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO0lBRTlHLDJCQUFnQixHQUFHLENBQUMsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN6SSxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDbEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNuSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzVHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ25ILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDekcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNuSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUM7UUFDdkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzVHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNsSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2hILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsb0JBQW9CLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN6SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDdEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ2hILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxtQkFBbUIsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ3ZILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsa0JBQWtCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN2SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM1RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNySCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDckgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2hILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNuSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLE1BQU0sRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUN6RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUM7UUFDdEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3BILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMs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TUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ3pHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLEVBQUUsRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNsSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGtCQUFrQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDdkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNuSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDckgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsb0JBQW9CLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN6SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ25ILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFD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LEVBQUM7UUFDdEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3RILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNySCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3RILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNySCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ25ILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNySCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGtCQUFrQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDdkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsaUJBQWlCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN0SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGtCQUFrQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDdkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxrQkFBa0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3ZILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsa0JBQWtCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN2SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLG1CQUFtQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDeEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxrQkFBa0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3ZILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsbUJBQW1CLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUN2SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLG9CQUFvQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDekgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNsSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDckgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxvQkFBb0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMscUJBQXFCLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUN6SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ25ILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDbkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsa0JBQWtCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN2SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLG1CQUFtQixFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDdkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxrQkFBa0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3ZILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsb0JBQW9CLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN6SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLG1CQUFtQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDeEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDbkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxxQkFBcUIsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzFILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsb0JBQW9CLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLG9CQUFvQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0gsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2hILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDbkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNwSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMs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QUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3BILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDekgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxhQUFhLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNwSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3ZILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsYUFBYSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDcEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLE1BQU0sRUFBQyxhQUFhLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLGFBQWEsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3BILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsYUFBYSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDdEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNySCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsYUFBYSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBQyxhQUFhLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNsSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ25ILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsYUFBYSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsbUJBQW1CLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM5SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLGFBQWEsRUFBQyxXQUFXLEVBQUMs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bGUiOiJjb21waWxlZC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9saWJzL2hhd3Rpby1mb3Jtcy9kZWZzLmQudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9saWJzL2hhd3Rpby1rdWJlcm5ldGVzLWFwaS9kZWZzLmQudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9saWJzL2hhd3Rpby1vYXV0aC9kZWZzLmQudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9saWJzL2hhd3Rpby11aS9kZWZzLmQudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9saWJzL2hhd3Rpby11dGlsaXRpZXMvZGVmcy5kLnRzXCIvPlxyXG5cclxuZGVjbGFyZSB2YXIgaHVtYW5kYXRlO1xyXG5kZWNsYXJlIHZhciBqc3lhbWw6YW55O1xyXG5cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG5cclxubW9kdWxlIENvbmZpZ3Mge1xyXG5cclxuXHRleHBvcnQgdmFyIHBsdWdpbk5hbWUgPSBcIkNvbmZpZ3NcIjtcclxuXHRleHBvcnQgdmFyIGNvbnRleHQgPSBcIi9jb25maWdcIjtcdFxyXG5cdGV4cG9ydCB2YXIgcGx1Z2luUGF0aCA9ICdwbHVnaW5zL2NvbmZpZ3MvJztcclxuICAgIGV4cG9ydCB2YXIgdGVtcGxhdGVQYXRoID0gcGx1Z2luUGF0aCArICdodG1sLyc7XHJcblx0ZXhwb3J0IHZhciBfbW9kdWxlID0gYW5ndWxhci5tb2R1bGUocGx1Z2luTmFtZSwgWydoYXd0aW8tY29yZScsICdoYXd0aW8tdWknLCAndWkuY29kZW1pcnJvcicsICdudmQzJ10pO1xyXG5cdGV4cG9ydCB2YXIgcm91dGUgPSBQbHVnaW5IZWxwZXJzLmNyZWF0ZVJvdXRpbmdGdW5jdGlvbih0ZW1wbGF0ZVBhdGgpO1xyXG5cdGV4cG9ydCB2YXIgY29udHJvbGxlciA9IFBsdWdpbkhlbHBlcnMuY3JlYXRlQ29udHJvbGxlckZ1bmN0aW9uKF9tb2R1bGUsIHBsdWdpbk5hbWUpO1xyXG5cclxuXHRfbW9kdWxlLmNvbmZpZyhbJyRwcm92aWRlJywgJyRyb3V0ZVByb3ZpZGVyJywgKCRwcm92aWRlLCAkcm91dGVQcm92aWRlcikgPT57XHJcblx0XHQkcm91dGVQcm92aWRlci53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL2dsdXN0ZXItZnMvc2V0dGluZycpLCByb3V0ZSgnZ2x1c3RlcmZzU2V0dGluZy5odG1sJywgZmFsc2UpKVxyXG5cdFx0XHRcdFx0ICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2t1YmUtY2x1c3Rlci9zZXR0aW5nJyksIHJvdXRlKCdrdWJlQ2x1c3RlclNldHRpbmcuaHRtbCcsIGZhbHNlKSlcclxuXHRcdFx0XHRcdCAgLndoZW4oY29udGV4dCwge3JlZGlyZWN0VG86IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL2t1YmUtY2x1c3Rlci9zZXR0aW5nJyl9KTtcdFx0ICAgXHRcdFx0ICBcclxuXHR9XSk7XHJcblxyXG5cdCBfbW9kdWxlLnJ1bihbJ3ZpZXdSZWdpc3RyeScsICckdGVtcGxhdGVDYWNoZScsICdIYXd0aW9FeHRlbnNpb24nLCAnJGNvbXBpbGUnLCAodmlld1JlZ2lzdHJ5LCAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsIGV4dCwgICRjb21waWxlOm5nLklDb21waWxlU2VydmljZSkgPT4ge1xyXG4gICAgICAgIGV4dC5hZGQoJ2NvbmZpZy1zZXR0aW5nJywgKCRzY29wZSkgPT4ge1xyXG4gICAgICAgIFx0dmFyIHRlbXBsYXRlICA9ICR0ZW1wbGF0ZUNhY2hlLmdldDxzdHJpbmc+KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiY29uZmlnTWVudUl0ZW0uaHRtbFwiKSk7XHJcbiAgICAgICAgXHRyZXR1cm4gJGNvbXBpbGUodGVtcGxhdGUpKCRzY29wZSk7XHJcbiAgICAgICAgfSk7IFxyXG4gICAgICAgIHZpZXdSZWdpc3RyeVsnY29uZmlnJ10gPSB0ZW1wbGF0ZVBhdGggKyBcInNoYXJlTGF5b3V0Lmh0bWxcIjsgICAgXHJcbiAgICB9XSk7XHJcblxyXG5cdCBfbW9kdWxlLmRpcmVjdGl2ZSgnZ2ZzQ29uZmlnVGFibGUnLCBbKCkgPT57XHJcblx0IFx0cmV0dXJue1xyXG5cdCBcdFx0cmVzdHJpY3Q6ICdBRScsXHJcblx0IFx0XHRyZXBsYWNlIDogdHJ1ZSwgXHJcblx0IFx0XHRzY29wZToge1xyXG5cdCBcdFx0XHR0YWJsZVRpdGxlOiAnPScsXHJcblx0IFx0XHRcdHRhYmxlQ29udGVudDogJz0nXHJcblx0IFx0XHR9LFxyXG5cdCBcdFx0dGVtcGxhdGU6IGA8dGFibGUgY2xhc3M9XCJ0YWJsZSAgdGFibGUtaG92ZXJcIj5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGggbmctcmVwZWF0PVwiY29sdW1uIGluIHRhYmxlVGl0bGUuY29sdW1uXCIgY2xhc3M9XCJuby1mYWRlIHRhYmxlLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFx0PHNwYW4gY2xhc3M9XCJ7e2NvbHVtbi5jbGFzc319XCI+e3tjb2x1bW4udGl0bGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPHRyIG5nLXJlcGVhdCA9IFwicm93IGluIHRhYmxlQ29udGVudFwiIGNsYXNzPVwicm93LmNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICBcdDx0ZCBuZy1yZXBlYXQ9XCJjb2wgaW4gcm93XCIgY2xhc3M9XCJjb2wuY2xhc3NcIj5cclxuICAgICAgICAgICAgICAgIFx0XHQ8c3BhbiBjbGFzcz1cImNvbC5jbGFzc1wiPnt7Y29sLnRpdGxlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICBcdDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC90YWJsZT4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgbGluazogKHNjb3BlLCBlbGVtZW50LCBhdHRyKSA9PnsgICAgICAgICAgICBcdFxyXG4gICAgICAgICAgICB9XHJcblx0IFx0fVx0IFx0XHJcblx0IH1dKTtcclxuXHJcblx0aGF3dGlvUGx1Z2luTG9hZGVyLmFkZE1vZHVsZShwbHVnaW5OYW1lKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cclxuICB2YXIgbG9nID0gTG9nZ2VyLmdldCgnZGV2ZWxvcGVyLW5hdmlnYXRpb24nKTtcclxuXHJcbiAgZXhwb3J0IHR5cGUgTGFiZWxSZXNvbHZlciA9ICgpID0+IHN0cmluZztcclxuXHJcbiAgZXhwb3J0IGludGVyZmFjZSBCcmVhZGNydW1iQ29uZmlnIHtcclxuICAgICAgaHJlZj86IHN0cmluZztcclxuICAgICAgbGFiZWw/OiBzdHJpbmcgfCBMYWJlbFJlc29sdmVyO1xyXG4gICAgICB0aXRsZT86IHN0cmluZztcclxuICAgICAgY2xhc3M/OiBzdHJpbmc7XHJcbiAgICAgIGlzVmFsaWQ/OiAoKSA9PiBib29sZWFuO1xyXG4gICAgICBpc0FjdGl2ZT86IChzdWJUYWIsIHBhdGgpID0+IGJvb2xlYW47XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gZGV2ZWxvcEJyZWFkY3J1bWIoKSA6IEJyZWFkY3J1bWJDb25maWcge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiksXHJcbiAgICAgIGxhYmVsOiBcIlRlYW1zXCIsXHJcbiAgICAgIHRpdGxlOiBcIlZpZXcgYWxsIHRoZSBhdmFpbGFibGUgdGVhbXNcIixcclxuICAgICAgaXNBY3RpdmU6IChzdWJUYWIsIHBhdGgpID0+IGZhbHNlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gb3BlcmF0ZUJyZWFkY3J1bWIoKSA6IEJyZWFkY3J1bWJDb25maWcge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL25hbWVzcGFjZXNcIiksXHJcbiAgICAgIGxhYmVsOiBcIk1hbmFnZVwiLFxyXG4gICAgICB0aXRsZTogXCJNYW5hZ2UgdGhlIHByb2plY3RzIGFuZCByZXNvdXJjZXMgaW5zaWRlIHRoZW1cIlxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiB3b3Jrc3BhY2VMaW5rKCkge1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gcHJvamVjdExpbmsocHJvamVjdElkKSB7XHJcbiAgICB2YXIgbGluayA9IHdvcmtzcGFjZUxpbmsoKTtcclxuICAgIGlmIChwcm9qZWN0SWQpIHtcclxuICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihsaW5rLCBcIi9wcm9qZWN0c1wiLCBwcm9qZWN0SWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGxpbms7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlV29ya3NwYWNlc0JyZWFkY3J1bWJzKGRldmVsb3BQZXJzcGVjdGl2ZT8pIHtcclxuICAgIHJldHVybiBbZGV2ZWxvcEJyZWFkY3J1bWIoKV07XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZXNTdWJOYXZCYXJzKGRldmVsb3BQZXJzcGVjdGl2ZSkge1xyXG4gICAgICByZXR1cm4gYWN0aXZhdGVDdXJyZW50KFtcclxuICAgICAgICBkZXZlbG9wQnJlYWRjcnVtYigpLFxyXG4gICAgICAgIG9wZXJhdGVCcmVhZGNydW1iKClcclxuICAgICAgXSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlV29ya3NwYWNlQnJlYWRjcnVtYnMoY2hpbGRyZW4gPSBudWxsLCB3b3Jrc3BhY2VOYW1lID0gbnVsbCkge1xyXG4gICAgdmFyIGFuc3dlciA9IGNyZWF0ZVdvcmtzcGFjZXNCcmVhZGNydW1icyh0cnVlKTtcclxuICAgIGlmICghd29ya3NwYWNlTmFtZSkge1xyXG4gICAgICB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHdvcmtzcGFjZU5hbWUpIHtcclxuICAgICAgYW5zd2VyLnB1c2goXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXMvXCIsIHdvcmtzcGFjZU5hbWUpLFxyXG4gICAgICAgICAgbGFiZWw6IHdvcmtzcGFjZU5hbWUsXHJcbiAgICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBwcm9qZWN0OiBcIiArIHdvcmtzcGFjZU5hbWUsXHJcbiAgICAgICAgICBpc0FjdGl2ZTogKHN1YlRhYiwgcGF0aCkgPT4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBwcm9jZXNzQ2hpbGRyZW4oYW5zd2VyLCBjaGlsZHJlbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYW5zd2VyO1xyXG4gIH1cclxuXHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnZpcm9ubWVudEJyZWFkY3J1bWJzKCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpIHtcclxuICAgIHZhciBucyA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIHZhciBuYW1lc3BhY2VzTGluayA9IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi9rdWJlcm5ldGVzL25hbWVzcGFjZVwiKTtcclxuICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gJHJvdXRlUGFyYW1zLndvcmtzcGFjZTtcclxuICAgIHZhciBwcm9qZWN0ID0gJHJvdXRlUGFyYW1zLnByb2plY3Q7XHJcbiAgICB2YXIgZW52aXJvbm1lbnQgPSAkcm91dGVQYXJhbXMubmFtZXNwYWNlO1xyXG4gICAgaWYgKHdvcmtzcGFjZU5hbWUgJiYgcHJvamVjdCkge1xyXG4gICAgICB2YXIgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3QpO1xyXG4gICAgICAkc2NvcGUuJHByb2plY3RMaW5rID0gcHJvamVjdExpbms7XHJcbiAgICAgICRzY29wZS4kcHJvamVjdE5hbWVzcGFjZUxpbmsgPSBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwibmFtZXNwYWNlXCIsIG5zKTtcclxuICAgICAgbmFtZXNwYWNlc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwibmFtZXNwYWNlXCIpO1xyXG4gICAgICB2YXIgY2hpbGRyZW46IEFycmF5PEJyZWFkY3J1bWJDb25maWc+ID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJlbnZpcm9ubWVudHNcIiksXHJcbiAgICAgICAgICBsYWJlbDogXCJFbnZpcm9ubWVudHNcIixcclxuICAgICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGVudmlyb25tZW50cyBmb3IgdGhpcyBwcm9qZWN0XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihuYW1lc3BhY2VzTGluaywgbnMsIFwiYXBwc1wiKSxcclxuICAgICAgICAgIGxhYmVsOiAoKSA9PiAgZW52aXJvbm1lbnROYW1lKHdvcmtzcGFjZU5hbWUsIG5zKSxcclxuICAgICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHJ1bnRpbWUgb2YgdGhlIHdvcmtzcGFjZTogXCIgKyBuc1xyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuICAgICAgcmV0dXJuIGNyZWF0ZVByb2plY3RCcmVhZGNydW1icyhwcm9qZWN0LCBjaGlsZHJlbiwgd29ya3NwYWNlTmFtZSk7XHJcbiAgICB9IGVsc2UgaWYgKHdvcmtzcGFjZU5hbWUgJiYgZW52aXJvbm1lbnQgJiYgd29ya3NwYWNlTmFtZSAhPSBlbnZpcm9ubWVudCkge1xyXG4gICAgICAvLyBmaW5kIGxhYmVsIGZvciBuYW1lc3BhY2UgZW52aXJvbm1lbnRcclxuICAgICAgdmFyIGNoaWxkcmVuOiBBcnJheTxCcmVhZGNydW1iQ29uZmlnPiA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBocmVmOiBlbnZpcm9ubWVudHNMaW5rKHdvcmtzcGFjZU5hbWUpLFxyXG4gICAgICAgICAgbGFiZWw6IFwiRW52aXJvbm1lbnRzXCIsXHJcbiAgICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBlbnZpcm9ubWVudHMgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBocmVmOiBlbnZpcm9ubWVudExpbmsod29ya3NwYWNlTmFtZSwgZW52aXJvbm1lbnQpLFxyXG4gICAgICAgICAgbGFiZWw6ICgpID0+ICBlbnZpcm9ubWVudE5hbWUod29ya3NwYWNlTmFtZSwgZW52aXJvbm1lbnQpLFxyXG4gICAgICAgICAgdGl0bGU6IFwiVmlldyB0aGlzIGVudmlyb25tZW50XCJcclxuICAgICAgICB9XHJcbiAgICAgIF07XHJcbiAgICAgIHJldHVybiBjcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMocHJvamVjdCwgY2hpbGRyZW4sIHdvcmtzcGFjZU5hbWUpO1xyXG4gICAgfSBlbHNlIGlmICghd29ya3NwYWNlTmFtZSkge1xyXG4gICAgICB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgfVxyXG4gICAgdmFyIGFuc3dlciA9IGNyZWF0ZVdvcmtzcGFjZUJyZWFkY3J1bWJzKHdvcmtzcGFjZU5hbWUpO1xyXG4gICAgYW5zd2VyLnB1c2goe1xyXG4gICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCJ3b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwibmFtZXNwYWNlXCIsIG5zLCBcImFwcHNcIiksXHJcbiAgICAgIGxhYmVsOiAnUnVudGltZScsXHJcbiAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHJ1bnRpbWUgb2YgdGhlIHdvcmtzcGFjZTogXCIgKyBuc1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYWN0aXZhdGVDdXJyZW50KGFuc3dlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBnaXZlbiBlbnZpcm9ubWVudCBuYW1lc3BhY2VcclxuICAgKi9cclxuICBmdW5jdGlvbiBlbnZpcm9ubWVudE5hbWUod29ya3NwYWNlTmFtZSwgZW52aXJvbm1lbnQpIHtcclxuICAgIC8qdmFyIG1vZGVsID0gS3ViZXJuZXRlcy5nZXRLdWJlcm5ldGVzTW9kZWwoKTtcclxuICAgIGlmIChtb2RlbCkge1xyXG4gICAgICByZXR1cm4gbW9kZWwuZW52aXJvbm1lbnROYW1lKHdvcmtzcGFjZU5hbWUsIGVudmlyb25tZW50KTtcclxuICAgIH0qL1xyXG4gICAgcmV0dXJuIGVudmlyb25tZW50O1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb2plY3RCcmVhZGNydW1icyhwcm9qZWN0TmFtZSA9IG51bGwsIGNoaWxkcmVuOiBBcnJheTxCcmVhZGNydW1iQ29uZmlnPiA9IG51bGwsIHdvcmtzcGFjZU5hbWUgPSBudWxsKSB7XHJcbiAgICBpZiAoIXdvcmtzcGFjZU5hbWUpIHtcclxuICAgICAgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIH1cclxuICAgIHZhciBhbnN3ZXIgPSBjcmVhdGVXb3Jrc3BhY2VCcmVhZGNydW1icyhudWxsLCB3b3Jrc3BhY2VOYW1lKTtcclxuICAgIGlmICh3b3Jrc3BhY2VOYW1lKSB7XHJcbiAgICAgIGlmIChwcm9qZWN0TmFtZSkge1xyXG4gICAgICAgIGFuc3dlci5wdXNoKFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIpLFxyXG4gICAgICAgICAgICBsYWJlbDogXCJBcHBzXCIsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIlZpZXcgYWxsIHRoZSBhcHBzIGluIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgYW5zd2VyLnB1c2goXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUpLFxyXG4gICAgICAgICAgICBsYWJlbDogcHJvamVjdE5hbWUsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHByb2plY3Q6IFwiICsgcHJvamVjdE5hbWVcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBwcm9jZXNzQ2hpbGRyZW4oYW5zd2VyLCBjaGlsZHJlbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYW5zd2VyO1xyXG4gIH1cclxuXHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9qZWN0U2V0dGluZ3NCcmVhZGNydW1icyhwcm9qZWN0TmFtZSwgd29ya3NwYWNlTmFtZSA9IG51bGwpIHtcclxuICAgIHZhciBjaGlsZHJlbiA9IFtdO1xyXG4gICAgaWYgKCFwcm9qZWN0TmFtZSkge1xyXG4gICAgICBjaGlsZHJlbiA9IFt7XHJcbiAgICAgICAgbGFiZWw6IFwiTmV3IEFwcFwiLFxyXG4gICAgICAgIHRpdGxlOiBcIkxldHMgbWFrZSBhIG5ldyBhcHBcIlxyXG4gICAgICB9XTtcclxuICAgIH1cclxuICAgIHJldHVybiBjcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMocHJvamVjdE5hbWUsIGNoaWxkcmVuLCB3b3Jrc3BhY2VOYW1lKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3Jrc3BhY2VTdWJOYXZCYXJzKCkge1xyXG4gICAgdmFyIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICByZXR1cm4gYWN0aXZhdGVDdXJyZW50KFtcclxuICAgICAge1xyXG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUpLFxyXG4gICAgICAgIGxhYmVsOiBcIkRhc2hib2FyZFwiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLXRhY2hvbWV0ZXJcIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBkYXNoYm9hcmQgZm9yIHRoZSBhcHBzLCBlbnZpcm9ubWVudHMgYW5kIHBpcGVsaW5lcyBpbiB0aGlzIHByb2plY3RcIlxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJhcHBzXCIpLFxyXG4gICAgICAgIGxhYmVsOiBcIkFwcHNcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS1yb2NrZXRcIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBhcHBzIGluIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpc1ZhbGlkOiAoKSA9PiBqZW5raW5zTGluaygpLFxyXG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwiamVua2luc0pvYlwiKSxcclxuICAgICAgICBsYWJlbDogXCJCdWlsZHNcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS1jb2RlXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgYnVpbGRzIGluIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBocmVmOiBlbnZpcm9ubWVudHNMaW5rKCksXHJcbiAgICAgICAgbGFiZWw6IFwiRW52aXJvbm1lbnRzXCIsXHJcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtY3ViZXNcIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBlbnZpcm9ubWVudHMgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBocmVmOiBuYW1lc3BhY2VSdW50aW1lTGluayh3b3Jrc3BhY2VOYW1lKSxcclxuICAgICAgICBsYWJlbDogXCJSdW50aW1lXCIsXHJcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtY3ViZVwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIFJ1bnRpbWUgcGVyc3BlY3RpdmUgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH1cclxuLypcclxuICAgICAge1xyXG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwiZGV0YWlsXCIpLFxyXG4gICAgICAgIGxhYmVsOiBcIkRldGFpbHNcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS1nZWFyXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcHJvamVjdCBkZXRhaWxzXCJcclxuICAgICAgfVxyXG4qL1xyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gbmFtZXNwYWNlUnVudGltZUxpbmsod29ya3NwYWNlTmFtZSA9IG51bGwpIHtcclxuICAgIGlmICghd29ya3NwYWNlTmFtZSkge1xyXG4gICAgICB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIndvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJuYW1lc3BhY2VcIiwgd29ya3NwYWNlTmFtZSwgXCJhcHBzXCIpO1xyXG4gIH1cclxuICBcclxuICBmdW5jdGlvbiBjcmVhdGVCdWlsZHNMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lLCBqZW5raW5zSm9iSWQpIHtcclxuICAgIHdvcmtzcGFjZU5hbWUgPSB3b3Jrc3BhY2VOYW1lIHx8IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcImplbmtpbnNKb2JcIiwgamVua2luc0pvYklkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSByb3V0aW5nIGZ1bmN0aW9uIHRoYXQgbG9hZHMgYSB0ZW1wbGF0ZSBhbmQgaW5qZWN0IHRoZSBuZWVkZWQgZGlyZWN0aXZlcyB0byBwcm9wZXJseVxyXG4gICAqIGRpc3BsYXkvdXBkYXRlIHRoZSBEZXZlbG9wZXIgbW9kdWxlIG1hbmFnZWQgdGFicyBhbmQgYnJlYWQgY3J1bWJzIGZvciB3aGVuIHRoZSByb3V0ZSBpcyBhY3RpdmUuXHJcbiAgICpcclxuICAgKiBFeGFtcGxlIFVzYWdlOlxyXG4gICAqXHJcbiAgICogdmFyIHJvdXRlID0gRGV2ZWxvcGVyLmNyZWF0ZVRhYlJvdXRpbmdGdW5jdGlvbihcIi9hcHAvc29tZWRpclwiKTtcclxuICAgKiAkcm91dGVQcm92aWRlci53aGVuKCcvcHJvZmlsZXMnLCByb3V0ZSgndmlldy5odG1sJywgZmFsc2UsIFt7XHJcbiAgICogICAgIGxhYmVsOiBcIlByb2ZpbGVzXCIsXHJcbiAgICogICAgIHRpdGxlOiBcIkJyb3dzZSB0aGUgcHJvZmlsZXMgb2YgdGhpcyBwcm9qZWN0XCJcclxuICAgKiAgIH1dXHJcbiAgICogKSk7XHJcbiAgICpcclxuICAgKiBAcGFyYW0gYmFzZVVSTFxyXG4gICAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIGJvb2xlYW49LCBBcnJheTxEZXZlbG9wZXIuQnJlYWRjcnVtYkNvbmZpZz49KToge3RlbXBsYXRlOiBzdHJpbmcsIHJlbG9hZE9uU2VhcmNoOiBib29sZWFuLCBjb250cm9sbGVyOiBzdHJpbmd8c3RyaW5nfChmdW5jdGlvbihhbnksIG5nLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UpOiB1bmRlZmluZWQpW119fVxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUYWJSb3V0aW5nRnVuY3Rpb24oYmFzZVVSTDpzdHJpbmcpIHtcclxuICAgIHJldHVybiAodGVtcGxhdGVOYW1lOnN0cmluZywgcmVsb2FkT25TZWFyY2g6Ym9vbGVhbiA9IHRydWUsIGNoaWxkcmVuPzogQXJyYXk8RGV2ZWxvcGVyLkJyZWFkY3J1bWJDb25maWc+KSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdGVtcGxhdGU6IFwiPGRpdiBoYXd0aW8tYnJlYWRjcnVtYnM+PC9kaXY+PGRpdiBoYXd0aW8tdGFicz48L2Rpdj48bmctaW5jbHVkZSBzcmM9J2NvbnRlbnRUZW1wbGF0ZVVybCc+PC9uZy1pbmNsdWRlPlwiLFxyXG4gICAgICAgIHJlbG9hZE9uU2VhcmNoOiByZWxvYWRPblNlYXJjaCxcclxuICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkcm91dGVQYXJhbXNcIiwgKCRzY29wZSwgJHJvdXRlUGFyYW1zOm5nLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UpID0+IHtcclxuICAgICAgICAgIGlmKCAkcm91dGVQYXJhbXNbXCJuYW1lc3BhY2VcIl09PW51bGwgKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcihcIlRoZSA6bmFtZXNwYWNlIHJvdXRlIHBhcmFtZXRlciB3YXMgbm90IGRlZmluZWQgZm9yIHRoZSByb3V0ZS5cIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiggJHJvdXRlUGFyYW1zW1wicHJvamVjdElkXCJdID09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcihcIlRoZSA6cHJvamVjdElkIHJvdXRlIHBhcmFtZXRlciB3YXMgbm90IGRlZmluZWQgZm9yIHRoZSByb3V0ZS5cIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAkc2NvcGUubmFtZXNwYWNlID0gJHJvdXRlUGFyYW1zW1wibmFtZXNwYWNlXCJdO1xyXG4gICAgICAgICAgJHNjb3BlLnByb2plY3RJZCA9ICRyb3V0ZVBhcmFtc1tcInByb2plY3RJZFwiXTtcclxuICAgICAgICAgICRzY29wZS5jb250ZW50VGVtcGxhdGVVcmwgPSBVcmxIZWxwZXJzLmpvaW4oYmFzZVVSTCwgdGVtcGxhdGVOYW1lKTtcclxuICAgICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUucHJvamVjdElkLCBjaGlsZHJlbik7XHJcbiAgICAgICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5wcm9qZWN0SWQpO1xyXG4gICAgICAgIH1dXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMocHJvamVjdE5hbWUsIGplbmtpbnNKb2JJZCA9IG51bGwsICRzY29wZSA9IG51bGwpIHtcclxuICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgdmFyIHByb2plY3RMaW5rID0gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSk7XHJcbiAgICB2YXIgYnVpbGRzTGluayA9IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJidWlsZHNcIik7XHJcbiAgICBpZiAoIWplbmtpbnNKb2JJZCkge1xyXG4gICAgICBqZW5raW5zSm9iSWQgPSBwcm9qZWN0TmFtZTtcclxuICAgIH1cclxuICAgIHZhciBqZW5raW5zQnVpbGRMaW5rID0gbnVsbDtcclxuICAgIHZhciBwaXBlbGluZXNMaW5rID0gbnVsbDtcclxuICAgIGlmIChwcm9qZWN0TmFtZSAmJiBqZW5raW5zSm9iSWQpIHtcclxuICAgICAgamVua2luc0J1aWxkTGluayA9IGNyZWF0ZUJ1aWxkc0xpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIGplbmtpbnNKb2JJZCk7XHJcbiAgICAgIHBpcGVsaW5lc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oamVua2luc0J1aWxkTGluaywgXCJwaXBlbGluZXNcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaXNKZW5raW5zQnVpbGQoKSB7XHJcbiAgICAgIHZhciBhbnN3ZXIgPSBqZW5raW5zTGluaygpICYmIGplbmtpbnNCdWlsZExpbms7XHJcbiAgICAgIGlmIChhbnN3ZXIgJiYgJHNjb3BlKSB7XHJcbiAgICAgICAgdmFyIGVudGl0eSA9IERldmVsb3Blci5wcm9qZWN0Rm9yU2NvcGUoJHNjb3BlKTtcclxuICAgICAgICBpZiAoZW50aXR5KSB7XHJcbiAgICAgICAgICByZXR1cm4gYW5zd2VyICYmIGVudGl0eS4kamVua2luc0pvYjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgYW5zd2VyID0gW1xyXG4gICAgICAvKlxyXG4gICAgICB7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSksXHJcbiAgICAgICAgbGFiZWw6IFwiQWxsIEFwcHNcIixcclxuICAgICAgICBjbGFzczogJ2ZhIGZhLWFuZ2xlLWRvdWJsZS1sZWZ0JyxcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBhcHBzIGluIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wbGF0ZTogYDxkaXYgbmctaW5jbHVkZT1cIidwbHVnaW5zL2RldmVsb3Blci9odG1sL3Byb2plY3RTZWxlY3Rvci5odG1sJ1wiPjwvZGl2PmBcclxuICAgICAgfSxcclxuKi9cclxuICAgICAge1xyXG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUsIFwiZW52aXJvbm1lbnRzXCIpLFxyXG4gICAgICAgIGlzQWN0aXZlOiAoc3ViVGFiLCBwYXRoKSA9PiB7XHJcbiAgICAgICAgICB2YXIgaHJlZiA9IG5vcm1hbGl6ZUhyZWYoc3ViVGFiLmhyZWYpO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcInN1YlRhYjogXCIsIHN1YlRhYiwgXCIgcGF0aDogXCIsIHBhdGgpO1xyXG4gICAgICAgICAgaWYgKHBhdGggPT09IGhyZWYpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YXIgcm9vdFBhdGggPSBocmVmLnJlcGxhY2UoL1xcL2Vudmlyb25tZW50cy8sICcnKTtcclxuICAgICAgICAgIGlmIChwYXRoID09PSByb290UGF0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSksXHJcbiAgICAgICAgbGFiZWw6IFwiRGFzaGJvYXJkXCIsXHJcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtdGFjaG9tZXRlclwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGFwcCBkYXNoYm9hcmQgZm9yIHRoZSBhY3Rpdml0eSwgZW52aXJvbm1lbnRzIGFuZCBwaXBlbGluZXNcIlxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaXNWYWxpZDogKCkgPT4gaXNKZW5raW5zQnVpbGQoKSAmJiBwaXBlbGluZXNMaW5rLFxyXG4gICAgICAgIGlkOiBcInBpcGVsaW5lc1wiLFxyXG4gICAgICAgIGhyZWY6IHBpcGVsaW5lc0xpbmssXHJcbiAgICAgICAgbGFiZWw6IFwiUGlwZWxpbmVzXCIsXHJcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtZWxsaXBzaXMtaFwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHBpcGVsaW5lIGJ1aWxkcyBmb3IgdGhpcyBhcHBcIlxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaXNWYWxpZDogKCkgPT4gIWlzSmVua2luc0J1aWxkKCksXHJcbiAgICAgICAgaHJlZjogYnVpbGRzTGluayxcclxuICAgICAgICBsYWJlbDogXCJCdWlsZHNcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS1iYXJzXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgYnVpbGRzIGZvciB0aGlzIGFwcFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpc1ZhbGlkOiAoKSA9PiBpc0plbmtpbnNCdWlsZCgpLFxyXG4gICAgICAgIGlzQWN0aXZlOiAoaXRlbSwgcGF0aCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHBhdGguaW5kZXhPZignL2xvZy8nKSA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHBhdGguaW5kZXhPZignL2plbmtpbnNKb2IvJykgPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaWQ6IFwiYnVpbGRzXCIsXHJcbiAgICAgICAgaHJlZjogamVua2luc0J1aWxkTGluayxcclxuICAgICAgICBsYWJlbDogXCJCdWlsZHNcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS1iYXJzXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgSmVua2lucyBidWlsZHMgZm9yIHRoaXMgYXBwXCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlzVmFsaWQ6ICgpID0+IGlzSmVua2luc0J1aWxkKCksXHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgXCJqZW5raW5zSm9iXCIsIGplbmtpbnNKb2JJZCwgXCJtZXRyaWNzXCIpLFxyXG4gICAgICAgIGxhYmVsOiBcIk1ldHJpY3NcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS1iYXItY2hhcnRcIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBtZXRyaWNzIGZvciB0aGlzIHByb2plY3RcIlxyXG4gICAgICB9LFxyXG4vKlxyXG4gICAgICB7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgXCJ0b29sc1wiKSxcclxuICAgICAgICBsYWJlbDogXCJUb29sc1wiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHRvb2xzIGZvciB0aGlzIHByb2plY3RcIlxyXG4gICAgICB9LFxyXG4qL1xyXG4gICAgICB7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgXCJidWlsZENvbmZpZ0VkaXRcIiksXHJcbiAgICAgICAgbGFiZWw6IFwiU2V0dGluZ3NcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS1jb2dcIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBhcHAgY29uZmlndXJhdGlvblwiLFxyXG4gICAgICAgIGlzQWN0aXZlOiAoc3ViVGFiLCBwYXRoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXy5lbmRzV2l0aChwYXRoLCAnL2J1aWxkQ29uZmlnRWRpdCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKF8uZW5kc1dpdGgocGF0aCwgJy9mb3JnZS9zZWNyZXRzJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXy5lbmRzV2l0aChwYXRoLCAnL2ZvcmdlL2NvbW1hbmQvZGV2b3BzLWVkaXQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgdmFyIGNvbnRleHQgPSB7XHJcbiAgICAgIHdvcmtzcGFjZU5hbWU6IHdvcmtzcGFjZU5hbWUsXHJcbiAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0TmFtZSxcclxuICAgICAgcHJvamVjdExpbms6IHByb2plY3RMaW5rLFxyXG4gICAgICBqZW5raW5zSm9iSWQ6IGplbmtpbnNKb2JJZCxcclxuICAgICAgJHNjb3BlOiAkc2NvcGVcclxuICAgIH07XHJcbiAgICBhbmd1bGFyLmZvckVhY2goY3VzdG9tUHJvamVjdFN1YlRhYkZhY3RvcmllcywgKGZuKSA9PiB7XHJcbiAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24oZm4pKSB7XHJcbiAgICAgICAgdmFyIHN1YnRhYiA9IGZuKGNvbnRleHQpO1xyXG4gICAgICAgIGlmIChzdWJ0YWIpIHtcclxuICAgICAgICAgIGlmIChhbmd1bGFyLmlzQXJyYXkoc3VidGFiKSkge1xyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goc3VidGFiLCAodCkgPT4ge1xyXG4gICAgICAgICAgICAgIGFuc3dlci5wdXNoKHQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFuc3dlci5wdXNoKHN1YnRhYik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gYWN0aXZhdGVDdXJyZW50KGFuc3dlcik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvamVjdFNldHRpbmdzU3ViTmF2QmFycyhwcm9qZWN0TmFtZSwgamVua2luc0pvYklkID0gbnVsbCkge1xyXG4gICAgaWYgKCFwcm9qZWN0TmFtZSkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICB2YXIgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIHZhciBwcm9qZWN0TGluayA9IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUpO1xyXG4gICAgaWYgKCFqZW5raW5zSm9iSWQpIHtcclxuICAgICAgamVua2luc0pvYklkID0gcHJvamVjdE5hbWU7XHJcbiAgICB9XHJcbiAgICB2YXIgYW5zd2VyID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgXCJidWlsZENvbmZpZ0VkaXRcIiksXHJcbiAgICAgICAgbGFiZWw6IFwiQ29yZVwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGNvcmUgYnVpbGQgY29uZmlndXJhdGlvblwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBocmVmOiBwcm9qZWN0U2VjcmV0c0xpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUpLFxyXG4gICAgICAgIGxhYmVsOiBcIlNlY3JldHNcIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IG9yIGNoYW5nZSB0aGUgc2VjcmV0cyB1c2VkIHRvIGVkaXQgc291cmNlIGNvZGUgaW4gdGhlIHNvdXJjZSBjb250cm9sIHN5c3RlbVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBocmVmOiBlZGl0UGlwZWxpbmVMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lKSxcclxuICAgICAgICBsYWJlbDogXCJQaXBlbGluZVwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIERldk9wcyBhbmQgcGlwZWxpbmUgY29uZmlndXJhdGlvblwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpc1ZhbGlkOiAoKSA9PiBmb3JnZVByb2plY3RIYXNCdWlsZGVyKFwibWF2ZW5cIiksXHJcbiAgICAgICAgaHJlZjogZWRpdE1hdmVuQnVpbGRMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lKSxcclxuICAgICAgICBsYWJlbDogXCJNYXZlblwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIE1hdmVuIGJ1aWxkIGNvbmZpZ3VyYXRpb25cIlxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gICAgcmV0dXJuIGFjdGl2YXRlQ3VycmVudChhbnN3ZXIpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGZvcmdlUHJvamVjdEhhc0J1aWxkZXIobmFtZSkge1xyXG4gICAgdmFyIGZvcmdlUHJvamVjdCA9IEt1YmVybmV0ZXMuaW5qZWN0PGFueT4oXCJGb3JnZVByb2plY3RcIik7XHJcbiAgICBpZiAoZm9yZ2VQcm9qZWN0KSB7XHJcbiAgICAgIHJldHVybiBmb3JnZVByb2plY3QuaGFzQnVpbGRlcihuYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBmb3JnZVByb2plY3RIYXNQZXJzcGVjdGl2ZShuYW1lKSB7XHJcbiAgICB2YXIgZm9yZ2VQcm9qZWN0ID0gS3ViZXJuZXRlcy5pbmplY3Q8YW55PihcIkZvcmdlUHJvamVjdFwiKTtcclxuICAgIGlmIChmb3JnZVByb2plY3QpIHtcclxuICAgICAgcmV0dXJuIGZvcmdlUHJvamVjdC5oYXNQZXJzcGVjdGl2ZShuYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlZGl0UGlwZWxpbmVMaW5rU2NvcGUoJHNjb3BlKSB7XHJcbiAgICByZXR1cm4gZWRpdFBpcGVsaW5lTGluaygkc2NvcGUubmFtZXNwYWNlLCAkc2NvcGUucHJvamVjdElkIHx8ICRzY29wZS5wcm9qZWN0TmFtZSB8fCAkc2NvcGUucHJvamVjdCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvamVjdExpbmsod29ya3NwYWNlTmFtZSA9IG51bGwpIHtcclxuICAgIGlmICghd29ya3NwYWNlTmFtZSkge1xyXG4gICAgICB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwiL2ZvcmdlL2NyZWF0ZVByb2plY3RcIik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZWRpdFBpcGVsaW5lTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSkge1xyXG4gICAgcmV0dXJuIHByb2plY3RXb3Jrc3BhY2VMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lLCBcImZvcmdlL2NvbW1hbmQvZGV2b3BzLWVkaXRcIik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZWRpdE1hdmVuQnVpbGRMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lKSB7XHJcbiAgICByZXR1cm4gcHJvamVjdFdvcmtzcGFjZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIFwiZm9yZ2UvY29tbWFuZC9mYWJyaWM4LXNldHVwXCIpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHByb2plY3RTZWNyZXRzTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSkge1xyXG4gICAgcmV0dXJuIHByb2plY3RXb3Jrc3BhY2VMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lLCBcImZvcmdlL3NlY3JldHNcIiwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHNlY3JldHNOYW1lc3BhY2VMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lLCBzZWNyZXRzTmFtZXNwYWNlKSB7XHJcbiAgICB2YXIgcHJlZml4ID0gcHJvamVjdFdvcmtzcGFjZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIFwiXCIpIHx8IFwia3ViZXJuZXRlc1wiO1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihwcmVmaXgsIFwibmFtZXNwYWNlXCIsIHNlY3JldHNOYW1lc3BhY2UsIFwic2VjcmV0c1wiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0V29ya3NwYWNlTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgcGF0aCwgaWdub3JlQmxhbmtQcm9qZWN0ID0gdHJ1ZSkge1xyXG4gICAgaWYgKGlnbm9yZUJsYW5rUHJvamVjdCAmJiAhcHJvamVjdE5hbWUpIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBpZiAoIXdvcmtzcGFjZU5hbWUpIHtcclxuICAgICAgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBwYXRoKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnZpcm9ubWVudHNMaW5rKHdvcmtzcGFjZU5hbWUgPSBudWxsKSB7XHJcbiAgICBpZiAoIXdvcmtzcGFjZU5hbWUpIHtcclxuICAgICAgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcImVudmlyb25tZW50c1wiKVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVudmlyb25tZW50TGluayh3b3Jrc3BhY2VOYW1lLCBlbnZpcm9ubWVudE5hbWVzcGFjZSwgcGF0aCA9IFwiXCIsIGlnbm9yZUJsYW5rUHJvamVjdCA9IHRydWUpIHtcclxuICAgIGlmIChpZ25vcmVCbGFua1Byb2plY3QgJiYgIWVudmlyb25tZW50TmFtZXNwYWNlKSB7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgaWYgKCF3b3Jrc3BhY2VOYW1lKSB7XHJcbiAgICAgIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJuYW1lc3BhY2VcIiwgZW52aXJvbm1lbnROYW1lc3BhY2UsIHBhdGgpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IHZhciBjdXN0b21Qcm9qZWN0U3ViVGFiRmFjdG9yaWVzID0gW107XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVKZW5raW5zQnJlYWRjcnVtYnMocHJvamVjdE5hbWUsIGpvYklkLCBidWlsZElkKSB7XHJcbiAgICB2YXIgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIHZhciBjaGlsZHJlbiA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGlkOiBcImJ1aWxkc1wiLFxyXG4gICAgICAgIGhyZWY6IGNyZWF0ZUJ1aWxkc0xpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIGpvYklkKSxcclxuICAgICAgICBsYWJlbDogXCJCdWlsZHNcIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBidWlsZHMgZm9yIHRoaXMgYXBwXCJcclxuICAgICAgfVxyXG4gICAgXTtcclxuICAgIGlmIChidWlsZElkKSB7XHJcbiAgICAgIGNoaWxkcmVuLnB1c2goe1xyXG4gICAgICAgIGlkOiBcIlwiLFxyXG4gICAgICAgIGhyZWY6IFwiXCIsXHJcbiAgICAgICAgbGFiZWw6IFwiI1wiICsgYnVpbGRJZCxcclxuICAgICAgICB0aXRsZTogXCJCdWlsZCAjXCIgKyBidWlsZElkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNyZWF0ZVByb2plY3RCcmVhZGNydW1icyhwcm9qZWN0TmFtZSwgY2hpbGRyZW4pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUplbmtpbnNTdWJOYXZCYXJzKHByb2plY3ROYW1lLCBqZW5raW5zSm9iSWQsIGJ1aWxkSWQsIGV4dHJhT3B0aW9uOiBhbnkgPSBudWxsKSB7XHJcbiAgICB2YXIgYW5zd2VyID0gY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMocHJvamVjdE5hbWUsIGplbmtpbnNKb2JJZCk7XHJcbiAgICBpZiAoZXh0cmFPcHRpb24pIHtcclxuICAgICAgLy8gZXh0cmFPcHRpb24uYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgYW5zd2VyLnB1c2goZXh0cmFPcHRpb24pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFuc3dlcjtcclxuICB9XHJcblxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlRW52aXJvbm1lbnRTdWJOYXZCYXJzKCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpIHtcclxuICAgIHZhciBucyA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gJHJvdXRlUGFyYW1zLndvcmtzcGFjZTtcclxuICAgIHZhciBwcm9qZWN0ID0gJHJvdXRlUGFyYW1zLnByb2plY3Q7XHJcbiAgICB2YXIgZW52aXJvbm1lbnQgPSAkcm91dGVQYXJhbXMubmFtZXNwYWNlO1xyXG4gICAgdmFyIHByb2plY3RMaW5rID0gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL2t1YmVybmV0ZXNcIik7XHJcbiAgICAvKmNvbnNvbGUubG9nKFwiPT09PT09PT09PT09PT09PT09PT09XCIpXHJcbiAgICBjb25zb2xlLmxvZyhwcm9qZWN0TGluayk7XHJcbiAgICBpZiAod29ya3NwYWNlTmFtZSAmJiBwcm9qZWN0KSB7XHJcbiAgICAgIHByb2plY3RMaW5rID0gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL2t1YmVybmV0ZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHByb2plY3RMaW5rID0gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL2t1YmVybmV0ZXNcIiwgd29ya3NwYWNlTmFtZSB8fCBucyk7XHJcbiAgICB9Ki9cclxuICAgIHZhciBuYW1lc3BhY2VzTGluayA9IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJuYW1lc3BhY2VcIik7ICAgIFxyXG4gICAgcmV0dXJuIGFjdGl2YXRlQ3VycmVudChbICAgICBcclxuICAgICAge1xyXG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihuYW1lc3BhY2VzTGluaywgbnMsIFwicmVwbGljYXRpb25Db250cm9sbGVyc1wiKSxcclxuICAgICAgICBsYWJlbDogXCLmnI3liqHnrqHnkIZcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS1jbG9uZVwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIFJlcGxpY2FzIGZvciB0aGlzIHByb2plY3RcIlxyXG4gICAgICB9LCAgICAgXHJcbiAgICAgIC8qe1xyXG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihuYW1lc3BhY2VzTGluaywgbnMsIFwiZXZlbnRzXCIpLFxyXG4gICAgICAgIGxhYmVsOiBcIuaXpeW/l+S/oeaBr1wiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLW5ld3NwYXBlci1vXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgZXZlbnRzIGZvciB0aGlzIHByb2plY3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcclxuICAgICAge1xyXG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJob3N0c1wiKSxcclxuICAgICAgICBsYWJlbDogXCLpm4bnvqToioLngrlcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS1zZXJ2ZXJcIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBub2RlcyBmb3IgdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSAqLyAgICBcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVudmlyb25tZW50SW5zdGFuY2VMaW5rKGVudiwgcHJvamVjdE5hbWUgPSBudWxsKSB7XHJcbiAgICBpZiAoZW52KSB7XHJcbiAgICAgIHZhciBlbnZOYW1lc3BhY2UgPSBlbnZbXCJuYW1lc3BhY2VcIl07XHJcbiAgICAgIGlmIChlbnZOYW1lc3BhY2UpIHtcclxuICAgICAgICBpZiAocHJvamVjdE5hbWUpIHtcclxuICAgICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCksIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUsIFwibmFtZXNwYWNlXCIsIGVudk5hbWVzcGFjZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCksIFwibmFtZXNwYWNlXCIsIGVudk5hbWVzcGFjZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gbmFtZXNwYWNlTGluaygkc2NvcGUsICRyb3V0ZVBhcmFtcywgcGF0aCA9IG51bGwpIHtcclxuICAgIHZhciBucyA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gJHJvdXRlUGFyYW1zLndvcmtzcGFjZTtcclxuICAgIHZhciBwcm9qZWN0ID0gJHJvdXRlUGFyYW1zLnByb2plY3Q7XHJcbiAgICB2YXIgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIva3ViZXJuZXRlc1wiKTtcclxuICAgIGlmICh3b3Jrc3BhY2VOYW1lICYmIHByb2plY3QpIHtcclxuICAgICAgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3QpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJuYW1lc3BhY2VcIiwgbnMsIHBhdGgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlcyB0aGUgVVJMIHF1ZXJ5IHN0cmluZyBpZiBpdHMgaW5zaWRlIHRoZSBnaXZlbiB0ZXh0XHJcbiAgICovXHJcbiAgZnVuY3Rpb24gdHJpbVF1ZXJ5KHRleHQpIHtcclxuICAgIGlmICh0ZXh0KSB7XHJcbiAgICAgIHZhciBpZHggPSB0ZXh0LmluZGV4T2YoXCI/XCIpO1xyXG4gICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICByZXR1cm4gdGV4dC5zdWJzdHJpbmcoMCwgaWR4KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHQ7XHJcbiAgfVxyXG5cclxuICAvLyBDYXRlciBmb3IgdGhlIGFwcCBydW5uaW5nIGF0IHNvbWUgd2VpcmQgZG9jdW1lbnQgYmFzZVxyXG4gIGV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVIcmVmKGhyZWY6c3RyaW5nKSB7XHJcbiAgICBpZiAoIWhyZWYpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKCdeJyArIEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCkucmVwbGFjZSgnLycsICdcXFxcLycpKTtcclxuICAgIHJldHVybiBocmVmLnJlcGxhY2UocmVnZXgsICcvJyk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gYWN0aXZhdGVDdXJyZW50KG5hdkJhckl0ZW1zKSB7XHJcbiAgICBuYXZCYXJJdGVtcyA9IF8uY29tcGFjdChuYXZCYXJJdGVtcyk7XHJcbiAgICB2YXIgaW5qZWN0b3IgPSBIYXd0aW9Db3JlLmluamVjdG9yO1xyXG4gICAgdmFyICRsb2NhdGlvbiA9IGluamVjdG9yID8gaW5qZWN0b3IuZ2V0PG5nLklMb2NhdGlvblNlcnZpY2U+KFwiJGxvY2F0aW9uXCIpIDogbnVsbDtcclxuICAgIGlmICgkbG9jYXRpb24pIHtcclxuICAgICAgdmFyIHBhdGggPSBub3JtYWxpemVIcmVmKHRyaW1RdWVyeSgkbG9jYXRpb24ucGF0aCgpKSk7XHJcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xyXG4gICAgICBmdW5jdGlvbiBtYWtlQWN0aXZlKGl0ZW0pIHtcclxuICAgICAgICBpdGVtLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgZm91bmQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGZ1bmN0aW9uIGdldEhyZWYoaXRlbSkge1xyXG4gICAgICAgIHZhciBocmVmID0gaXRlbS5ocmVmO1xyXG4gICAgICAgIHZhciB0cmltSHJlZiA9IHRyaW1RdWVyeShocmVmKTtcclxuICAgICAgICByZXR1cm4gbm9ybWFsaXplSHJlZih0cmltSHJlZik7XHJcbiAgICAgIH1cclxuICAgICAgYW5ndWxhci5mb3JFYWNoKG5hdkJhckl0ZW1zLCAoaXRlbSkgPT4ge1xyXG4gICAgICAgIGlmICghZm91bmQgJiYgaXRlbSkge1xyXG4gICAgICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihpdGVtLmlzQWN0aXZlKSkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5pc0FjdGl2ZShpdGVtLCBwYXRoKSkge1xyXG4gICAgICAgICAgICAgIG1ha2VBY3RpdmUoaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciB0cmltSHJlZiA9IGdldEhyZWYoaXRlbSk7XHJcbiAgICAgICAgICAgIGlmICghdHJpbUhyZWYpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRyaW1IcmVmID09PSBwYXRoKSB7XHJcbiAgICAgICAgICAgICAgbWFrZUFjdGl2ZShpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIC8vIE1heWJlIGl0J3MgYSBzdWItaXRlbSBvZiBhIHRhYiwgbGV0J3MgZmFsbCBiYWNrIHRvIHRoYXQgbWF5YmVcclxuICAgICAgaWYgKCFmb3VuZCkge1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChuYXZCYXJJdGVtcywgKGl0ZW0pID0+IHtcclxuICAgICAgICAgIGlmICghZm91bmQpIHtcclxuICAgICAgICAgICAgaWYgKCFhbmd1bGFyLmlzRnVuY3Rpb24oaXRlbS5pc0FjdGl2ZSkpIHtcclxuICAgICAgICAgICAgICB2YXIgdHJpbUhyZWYgPSBnZXRIcmVmKGl0ZW0pO1xyXG4gICAgICAgICAgICAgIGlmICghdHJpbUhyZWYpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKF8uc3RhcnRzV2l0aChwYXRoLCB0cmltSHJlZikpIHtcclxuICAgICAgICAgICAgICAgIG1ha2VBY3RpdmUoaXRlbSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gc3RpbGwgbm90IGZvdW5kLCBsZXQncyBsb2cgaXRcclxuICAgICAgaWYgKCFmb3VuZCkge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhcIk5vIG5hdmlnYXRpb24gdGFiIGZvdW5kIGZvciBwYXRoOlwiLCBwYXRoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5hdkJhckl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcHJvY2Vzc0NoaWxkcmVuKGFuc3dlciwgY2hpbGRyZW4pIHtcclxuICAgIGlmIChjaGlsZHJlbikge1xyXG4gICAgICBpZiAoYW5ndWxhci5pc0FycmF5KGNoaWxkcmVuKSkge1xyXG4gICAgICAgIGFuc3dlciA9IGFuc3dlci5jb25jYXQoY2hpbGRyZW4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFuc3dlci5wdXNoKGNoaWxkcmVuKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgYWN0aXZhdGVDdXJyZW50KGFuc3dlcik7XHJcbiAgICByZXR1cm4gYW5zd2VyO1xyXG4gIH1cclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cclxuICBleHBvcnQgdmFyIGNvbnRleHQgPSAnL3dvcmtzcGFjZXMnO1xyXG4gIGV4cG9ydCB2YXIgaGFzaCA9ICcjJyArIGNvbnRleHQ7XHJcbiAgZXhwb3J0IHZhciBwbHVnaW5OYW1lID0gJ0RldmVsb3Blcic7XHJcbiAgZXhwb3J0IHZhciBwbHVnaW5QYXRoID0gJ3BsdWdpbnMvZGV2ZWxvcGVyLyc7XHJcbiAgZXhwb3J0IHZhciB0ZW1wbGF0ZVBhdGggPSBwbHVnaW5QYXRoICsgJ2h0bWwvJztcclxuICBleHBvcnQgdmFyIGxvZzpMb2dnaW5nLkxvZ2dlciA9IExvZ2dlci5nZXQocGx1Z2luTmFtZSk7XHJcblxyXG4gIGV4cG9ydCB2YXIgamVua2luc1NlcnZpY2VOYW1lID0gXCJqZW5raW5zXCI7XHJcbiAgZXhwb3J0IHZhciBqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0ID0gamVua2luc1NlcnZpY2VOYW1lICsgXCI6aHR0cFwiO1xyXG5cclxuICBleHBvcnQgdmFyIGplbmtpbnNIdHRwQ29uZmlnID0ge1xyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC94LWpzb24sIHRleHQvcGxhaW5cIlxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaGFzbid0IGNoYW5nZWQgZnJvbSB0aGUgbGFzdCBjYWNoZWQgSlNPTiB2ZXJzaW9uIG9mIHRoaXMgb2JqZWN0XHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGhhc09iamVjdENoYW5nZWQodmFsdWUsIHN0YXRlKSB7XHJcbiAgICB2YXIganNvbiA9IGFuZ3VsYXIudG9Kc29uKHZhbHVlIHx8IFwiXCIpO1xyXG4gICAgdmFyIG9sZEpzb24gPSBzdGF0ZS5qc29uO1xyXG4gICAgc3RhdGUuanNvbiA9IGpzb247XHJcbiAgICByZXR1cm4gIW9sZEpzb24gfHwganNvbiAhPT0gb2xkSnNvbjtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0Rm9yU2NvcGUoJHNjb3BlKSB7XHJcbiAgICBpZiAoJHNjb3BlKSB7XHJcbiAgICAgIHJldHVybiAkc2NvcGUuYnVpbGRDb25maWcgfHwgJHNjb3BlLmVudGl0eSB8fCAoJHNjb3BlLm1vZGVsIHx8IHt9KS5wcm9qZWN0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIExldHMgbG9hZCB0aGUgcHJvamVjdCB2ZXJzaW9ucyBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZVxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBsb2FkUHJvamVjdFZlcnNpb25zKCRzY29wZSwgJGVsZW1lbnQsIHByb2plY3QsIGVudiwgbnMsIGFuc3dlciwgY2FjaGVzKSB7XHJcbiAgICB2YXIgcHJvamVjdEFubm90YXRpb24gPSBcInByb2plY3RcIjtcclxuICAgIHZhciB2ZXJzaW9uQW5ub3RhdGlvbiA9IFwidmVyc2lvblwiO1xyXG5cclxuICAgIHZhciBwcm9qZWN0TmFtZXNwYWNlID0gcHJvamVjdC4kbmFtZXNwYWNlO1xyXG4gICAgdmFyIHByb2plY3ROYW1lID0gcHJvamVjdC4kbmFtZTtcclxuXHJcbiAgICB2YXIgY2FjaGUgPSBjYWNoZXNbbnNdO1xyXG4gICAgaWYgKCFjYWNoZSkge1xyXG4gICAgICBjYWNoZSA9IHt9O1xyXG4gICAgICBjYWNoZXNbbnNdID0gY2FjaGU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHN0YXR1cyA9IHtcclxuICAgICAgcmNzOiBbXSxcclxuICAgICAgcG9kczogW10sXHJcbiAgICAgIHJvdXRlczogW10sXHJcbiAgICAgIHNlcnZpY2VzOiBbXVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgaW1hZ2VTdHJlYW1UYWdzID0gW107XHJcblxyXG4gICAgZnVuY3Rpb24gdXBkYXRlTW9kZWwoKSB7XHJcbiAgICAgIHZhciBwcm9qZWN0SW5mb3MgPSB7fTtcclxuICAgICAgdmFyIG1vZGVsID0gJHNjb3BlLm1vZGVsIHx8IHt9O1xyXG5cclxuICAgICAgYW5ndWxhci5mb3JFYWNoKHN0YXR1cy5yY3MsIChpdGVtKSA9PiB7XHJcbiAgICAgICAgdmFyIG1ldGFkYXRhID0gaXRlbS5tZXRhZGF0YSB8fCB7fTtcclxuICAgICAgICB2YXIgbmFtZSA9IG1ldGFkYXRhLm5hbWU7XHJcbiAgICAgICAgdmFyIGxhYmVscyA9IG1ldGFkYXRhLmxhYmVscyB8fCB7fTtcclxuICAgICAgICB2YXIgYW5ub3RhdGlvbnMgPSBtZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCB7fTtcclxuICAgICAgICB2YXIgc3BlYyA9IGl0ZW0uc3BlYyB8fCB7fTtcclxuICAgICAgICB2YXIgc2VsZWN0b3IgPSBzcGVjLnNlbGVjdG9yO1xyXG5cclxuICAgICAgICB2YXIgcHJvamVjdCA9IGxhYmVsc1twcm9qZWN0QW5ub3RhdGlvbl07XHJcbiAgICAgICAgdmFyIHZlcnNpb24gPSBsYWJlbHNbdmVyc2lvbkFubm90YXRpb25dO1xyXG5cclxuICAgICAgICAvLyBsZXRzIHRyeSB0aGUgUzJJIGRlZmF1bHRzLi4uXHJcbiAgICAgICAgaWYgKCFwcm9qZWN0KSB7XHJcbiAgICAgICAgICBwcm9qZWN0ID0gbGFiZWxzW1wiYXBwXCJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXZlcnNpb24pIHtcclxuICAgICAgICAgIHZlcnNpb24gPSBhbm5vdGF0aW9uc1tcIm9wZW5zaGlmdC5pby9kZXBsb3ltZW50LWNvbmZpZy5sYXRlc3QtdmVyc2lvblwiXVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJvamVjdCAmJiB2ZXJzaW9uICYmIHByb2plY3QgPT09IHByb2plY3ROYW1lKSB7XHJcbiAgICAgICAgICB2YXIgcHJvamVjdHMgPSBwcm9qZWN0SW5mb3NbcHJvamVjdF07XHJcbiAgICAgICAgICBpZiAoIXByb2plY3RzKSB7XHJcbiAgICAgICAgICAgIHByb2plY3RzID0ge1xyXG4gICAgICAgICAgICAgIHByb2plY3Q6IHByb2plY3QsXHJcbiAgICAgICAgICAgICAgdmVyc2lvbnM6IHt9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHByb2plY3RJbmZvc1twcm9qZWN0XSA9IHByb2plY3RzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFyIHZlcnNpb25JbmZvID0gcHJvamVjdHMudmVyc2lvbnNbdmVyc2lvbl07XHJcbiAgICAgICAgICBpZiAoIXZlcnNpb25JbmZvKSB7XHJcbiAgICAgICAgICAgIHZlcnNpb25JbmZvID0ge1xyXG4gICAgICAgICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcnM6IHt9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHByb2plY3RzLnZlcnNpb25zW3ZlcnNpb25dID0gdmVyc2lvbkluZm87XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICB2ZXJzaW9uSW5mby5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzW25hbWVdID0gaXRlbTtcclxuICAgICAgICAgICAgaXRlbS4kbmFtZSA9IG5hbWU7XHJcbiAgICAgICAgICAgIGlmIChwcm9qZWN0TmFtZXNwYWNlICYmIHByb2plY3ROYW1lKSB7XHJcbiAgICAgICAgICAgICAgaXRlbS4kdmlld0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlcy9cIiwgcHJvamVjdE5hbWVzcGFjZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgXCJuYW1lc3BhY2VcIiwgbnMsIFwicmVwbGljYXRpb25Db250cm9sbGVyc1wiLCBuYW1lKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsb2cud2FybihcIk1pc3NpbmcgcHJvamVjdCBkYXRhISBcIiArIHByb2plY3ROYW1lc3BhY2UgKyBcIiBuYW1lIFwiICsgcHJvamVjdE5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpdGVtLiRzZXJ2aWNlcyA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgcmNMaW5rID0gbnVsbDtcclxuICAgICAgICAgICAgc3RhdHVzLnNlcnZpY2VzLmZvckVhY2goKHNlcnZpY2UpID0+IHtcclxuICAgICAgICAgICAgICB2YXIgcmVwU2VsZWN0b3IgPSBLdWJlcm5ldGVzLmdldFNlbGVjdG9yKGl0ZW0pO1xyXG4gICAgICAgICAgICAgIHZhciBzZXJ2aWNlU2VsZWN0b3IgPSBLdWJlcm5ldGVzLmdldFNlbGVjdG9yKHNlcnZpY2UpO1xyXG4gICAgICAgICAgICAgIGlmIChzZXJ2aWNlU2VsZWN0b3IgJiYgcmVwU2VsZWN0b3IgJiZcclxuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuc2VsZWN0b3JNYXRjaGVzKHNlcnZpY2VTZWxlY3RvciwgcmVwU2VsZWN0b3IpICYmXHJcbiAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLmdldE5hbWVzcGFjZShzZXJ2aWNlKSA9PT0gS3ViZXJuZXRlcy5nZXROYW1lc3BhY2UoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgIHN0YXR1cy5yb3V0ZXMuZm9yRWFjaCgocm91dGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdmFyIHNlcnZpY2VOYW1lID0gS3ViZXJuZXRlcy5nZXROYW1lKHNlcnZpY2UpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoc2VydmljZU5hbWUgPT09IEt1YmVybmV0ZXMuZ2V0TmFtZShyb3V0ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlW1wiJHJvdXRlXCJdID0gcm91dGU7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZVtcIiRob3N0XCJdID0gQ29yZS5wYXRoR2V0KHJvdXRlLCBbXCJzcGVjXCIsIFwiaG9zdFwiXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS4kc2VydmljZXMucHVzaChzZXJ2aWNlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJjTGluaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMuc2VydmljZUxpbmtVcmwoc2VydmljZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gZmluZCBpY29uIGV0Yz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmNMaW5rID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHNlcnZpY2VOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6IHVybFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaXRlbVtcIiRzZXJ2aWNlTGlua1wiXSA9IHJjTGluaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGl0ZW0uJGJ1aWxkSWQgPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguaW8vYnVpbGQtaWRcIl0gfHwgaXRlbS4kYnVpbGRJZDtcclxuICAgICAgICAgIGl0ZW0uJGJ1aWxkVXJsID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LmlvL2J1aWxkLXVybFwiXSB8fCBpdGVtLiRidWlsZFVybDtcclxuICAgICAgICAgIGl0ZW0uJGdpdENvbW1pdCA9IGFubm90YXRpb25zW1wiZmFicmljOC5pby9naXQtY29tbWl0XCJdIHx8IGl0ZW0uJGdpdENvbW1pdDtcclxuICAgICAgICAgIGl0ZW0uJGdpdFVybCA9IGFubm90YXRpb25zW1wiZmFicmljOC5pby9naXQtdXJsXCJdIHx8IGl0ZW0uJGdpdFVybDtcclxuICAgICAgICAgIGl0ZW0uJGdpdEJyYW5jaCA9IGFubm90YXRpb25zW1wiZmFicmljOC5pby9naXQtYnJhbmNoXCJdIHx8IGl0ZW0uJGdpdEJyYW5jaDtcclxuICAgICAgICAgIGlmICghaXRlbS4kZ2l0Q29tbWl0KSB7XHJcbiAgICAgICAgICAgIHZhciBpbWFnZSA9IGdldEltYWdlKGl0ZW0pO1xyXG4gICAgICAgICAgICBpZiAoaW1hZ2UpIHtcclxuICAgICAgICAgICAgICBpZiAoISRzY29wZS4kaXNXYXRjaEltYWdlcykge1xyXG4gICAgICAgICAgICAgICAgJHNjb3BlLiRpc1dhdGNoSW1hZ2VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMud2F0Y2goJHNjb3BlLCAkZWxlbWVudCwgXCJpbWFnZXNcIiwgbnVsbCwgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJlYW1UYWdzID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgY2hlY2tGb3JNaXNzaW5nTWV0YWRhdGEoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjaGVja0Zvck1pc3NpbmdNZXRhZGF0YSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0SW1hZ2UoaXRlbSkge1xyXG4gICAgICAgICAgICAgIHZhciBpbWFnZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgLy8gbGV0cyBzZWUgaWYgd2UgY2FuIGZpbmQgdGhlIGNvbW1pdCBpZCBmcm9tIGEgUzJJIGltYWdlIG5hbWVcclxuICAgICAgICAgICAgICAvLyBUT0RPIG5lZWRzIHRoaXMgaXNzdWUgZml4ZWQgdG8gZmluZCBpdCB2aWEgYW4gT3BlblNoaWZ0IGFubm90YXRpb246XHJcbiAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5zaGlmdC9vcmlnaW4vaXNzdWVzLzYyNDFcclxuICAgICAgICAgICAgICB2YXIgY29udGFpbmVycyA9IENvcmUucGF0aEdldChpdGVtLCBbXCJzcGVjXCIsIFwidGVtcGxhdGVcIiwgXCJzcGVjXCIsIFwiY29udGFpbmVyc1wiXSk7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lcnMgJiYgY29udGFpbmVycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBjb250YWluZXJzWzBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICBpbWFnZSA9IGNvbnRhaW5lci5pbWFnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGltYWdlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBjaGVja0Zvck1pc3NpbmdNZXRhZGF0YSgpIHtcclxuICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2gocHJvamVjdHMudmVyc2lvbnMsICh2aSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHZpLnJlcGxpY2F0aW9uQ29udHJvbGxlcnMsIChpdGVtLCBuYW1lKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghaXRlbS4kZ2l0Q29tbWl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGltYWdlID0gZ2V0SW1hZ2UoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goaW1hZ2VTdHJlYW1UYWdzLCAoaW1hZ2VTdHJlYW1UYWcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltYWdlTmFtZSA9IGltYWdlU3RyZWFtVGFnLmRvY2tlckltYWdlUmVmZXJlbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VOYW1lICYmIGltYWdlTmFtZSA9PT0gaW1hZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmRJU1RhZyA9IGltYWdlU3RyZWFtVGFnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYW5pZmVzdEpTT04gPSBpbWFnZVN0cmVhbVRhZy5kb2NrZXJJbWFnZU1hbmlmZXN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYW5pZmVzdEpTT04pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYW5pZmVzdCA9IGFuZ3VsYXIuZnJvbUpzb24obWFuaWZlc3RKU09OKSB8fCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoaXN0b3J5ID0gbWFuaWZlc3QuaGlzdG9yeTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoaXN0b3J5ICYmIGhpc3RvcnkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2MSA9IGhpc3RvcnlbMF0udjFDb21wYXRpYmlsaXR5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodjEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGFuZ3VsYXIuZnJvbUpzb24odjEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnYgPSBDb3JlLnBhdGhHZXQoZGF0YSwgW1wiY29uZmlnXCIsIFwiRW52XCJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZW52LCAoZW52RXhwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW52RXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBlbnZFeHAuc3BsaXQoXCI9XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMiAmJiB2YWx1ZXNbMF0gPT0gXCJPUEVOU0hJRlRfQlVJTERfTkFNRVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1aWxkTmFtZSA9IHZhbHVlc1sxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVpbGROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRidWlsZElkID0gYnVpbGROYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS4kYnVpbGRVcmwgPSBEZXZlbG9wZXIucHJvamVjdFdvcmtzcGFjZUxpbmsobnMsIHByb2plY3ROYW1lLCBcImJ1aWxkTG9ncy9cIiArIGJ1aWxkTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhYmVscyA9IENvcmUucGF0aEdldChkYXRhLCBbXCJjb25maWdcIiwgXCJMYWJlbHNcIl0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYWJlbHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uJGdpdENvbW1pdCA9IGxhYmVsc1tcImlvLm9wZW5zaGlmdC5idWlsZC5jb21taXQuaWRcIl0gfHwgaXRlbS4kZ2l0Q29tbWl0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS4kZ2l0Q29tbWl0QXV0aG9yID0gbGFiZWxzW1wiaW8ub3BlbnNoaWZ0LmJ1aWxkLmNvbW1pdC5hdXRob3JcIl0gfHwgaXRlbS4kZ2l0Q29tbWl0QXV0aG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS4kZ2l0Q29tbWl0RGF0ZSA9IGxhYmVsc1tcImlvLm9wZW5zaGlmdC5idWlsZC5jb21taXQuZGF0ZVwiXSB8fCBpdGVtLiRnaXRDb21taXREYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS4kZ2l0Q29tbWl0TWVzc2FnZSA9IGxhYmVsc1tcImlvLm9wZW5zaGlmdC5idWlsZC5jb21taXQubWVzc2FnZVwiXSB8fCBpdGVtLiRnaXRDb21taXRNZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS4kZ2l0QnJhbmNoID0gbGFiZWxzW1wiaW8ub3BlbnNoaWZ0LmJ1aWxkLmNvbW1pdC5yZWZcIl0gfHwgaXRlbS4kZ2l0QnJhbmNoO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbS4kZ2l0VXJsICYmIGl0ZW0uJGdpdENvbW1pdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRnaXRVcmwgPSBEZXZlbG9wZXIucHJvamVjdFdvcmtzcGFjZUxpbmsobnMsIHByb2plY3ROYW1lLCBcIndpa2kvY29tbWl0RGV0YWlsLy8vXCIgKyBpdGVtLiRnaXRDb21taXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChzZWxlY3Rvcikge1xyXG4gICAgICAgICAgICB2YXIgc2VsZWN0b3JUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhzZWxlY3RvciwgXCIsXCIpO1xyXG4gICAgICAgICAgICB2YXIgcG9kTGlua1VybCA9IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluayhwcm9qZWN0TmFtZSksIFwibmFtZXNwYWNlXCIsIG5zLCBcInBvZHNcIik7XHJcbiAgICAgICAgICAgIGl0ZW0ucG9kcyA9IFtdO1xyXG4gICAgICAgICAgICBpdGVtLiRwb2RDb3VudGVycyA9IEt1YmVybmV0ZXMuY3JlYXRlUG9kQ291bnRlcnMoc2VsZWN0b3IsIHN0YXR1cy5wb2RzLCBpdGVtLnBvZHMsIHNlbGVjdG9yVGV4dCwgcG9kTGlua1VybCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIGxldHMgY2hlY2sgZm9yIGEgcHJvamVjdCBuYW1lIGlmIHdlIGhhdmUgbG90cyBvZiBSQ3Mgd2l0aCBubyBwb2RzLCBsZXRzIHJlbW92ZSB0aGVtIVxyXG4gICAgICBhbmd1bGFyLmZvckVhY2gocHJvamVjdEluZm9zLCAocHJvamVjdCwgcHJvamVjdE5hbWUpID0+IHtcclxuICAgICAgICB2YXIgcmNzTm9Qb2RzID0gW107XHJcbiAgICAgICAgdmFyIHJjc1dpdGhQb2RzID0gW107XHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKHByb2plY3QudmVyc2lvbnMsICh2ZXJzaW9uSW5mbykgPT4ge1xyXG4gICAgICAgICAgdmFyIHJjcyA9IHZlcnNpb25JbmZvLnJlcGxpY2F0aW9uQ29udHJvbGxlcnM7XHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2gocmNzLCAoaXRlbSwgbmFtZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgY291bnQgPSBLdWJlcm5ldGVzLnBvZENvdW50ZXJUb3RhbChpdGVtLiRwb2RDb3VudGVycyk7XHJcbiAgICAgICAgICAgIGlmIChjb3VudCkge1xyXG4gICAgICAgICAgICAgIHJjc1dpdGhQb2RzLnB1c2gobmFtZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmNzTm9Qb2RzLnB1c2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHJjc1tuYW1lXTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHJjc1dpdGhQb2RzLmxlbmd0aCkge1xyXG4gICAgICAgICAgLy8gbGV0cyByZW1vdmUgYWxsIHRoZSBlbXB0eSBSQ3NcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChyY3NOb1BvZHMsIChmbikgPT4ge1xyXG4gICAgICAgICAgICBmbigpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKHByb2plY3RJbmZvcywgY2FjaGUpKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKFwicHJvamVjdCB2ZXJzaW9ucyBoYXMgY2hhbmdlZCFcIik7XHJcbiAgICAgICAgYW5zd2VyW25zXSA9IHByb2plY3RJbmZvcztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEt1YmVybmV0ZXMud2F0Y2goJHNjb3BlLCAkZWxlbWVudCwgXCJyZXBsaWNhdGlvbmNvbnRyb2xsZXJzXCIsIG5zLCAoZGF0YSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIHN0YXR1cy5yY3MgPSBkYXRhO1xyXG4gICAgICAgIHVwZGF0ZU1vZGVsKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgS3ViZXJuZXRlcy53YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcInNlcnZpY2VzXCIsIG5zLCAoZGF0YSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIHN0YXR1cy5zZXJ2aWNlcyA9IGRhdGE7XHJcbiAgICAgICAgdXBkYXRlTW9kZWwoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBLdWJlcm5ldGVzLndhdGNoKCRzY29wZSwgJGVsZW1lbnQsIFwicm91dGVzXCIsIG5zLCAoZGF0YSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIHN0YXR1cy5yb3V0ZXMgPSBkYXRhO1xyXG4gICAgICAgIHVwZGF0ZU1vZGVsKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgS3ViZXJuZXRlcy53YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcInBvZHNcIiwgbnMsIChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgc3RhdHVzLnBvZHMgPSBkYXRhO1xyXG4gICAgICAgIHVwZGF0ZU1vZGVsKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XHJcbm1vZHVsZSBEZXZlbG9wZXJ7XHJcbiAgICB2YXIgbG9nID0gTG9nZ2VyLmdldCgnZGV2ZWxvcGVyLW5hdmlnYXRpb24nKTtcclxuICAgIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXJyZW50U3ViTmF2QmFyKCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpeyAgICBcdFxyXG5cdFx0cmV0dXJuIGFjdGl2YXRlQ3VycmVudChbXHJcblx0XHRcdHtcclxuXHRcdFx0IGhyZWY6IFVybEhlbHBlcnMuam9pbihjb250ZXh0LFwiT3ZlcnZpZXdcIixcImhvdC9kYXRhLXR5cGUvYWxsXCIpLFxyXG5cdFx0XHQgbGFiZWw6IFwi54Ot5Yy65pWw5o2u566h55CGXCIsXHJcblx0XHRcdCB0aXRsZTogXCLmn6XnnIvmiYDmnInmlbDmja5cIixcclxuXHRcdFx0IGl0ZW1zOiBbe1xyXG5cdFx0XHQgXHRocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCxcIk92ZXJ2aWV3XCIsXCJob3QvZGF0YS10eXBlL2FsbFwiKSxcclxuXHRcdFx0IFx0bGFiZWw6IFwi5YWo6YOoXCIsXHJcblx0XHRcdCBcdHRpdGxlOiBcIuWFqOmDqOaVsOaNrlwiXHJcblx0XHRcdCB9LFxyXG5cdFx0XHQge1xyXG5cdFx0XHRcdGhyZWY6IFVybEhlbHBlcnMuam9pbihjb250ZXh0LFwiT3ZlcnZpZXdcIixcImhvdC9kYXRhLXR5cGUvZmluYW5jaWFsXCIpLFxyXG5cdFx0XHQgXHRsYWJlbDogXCLotKLmlL9cIixcclxuXHRcdFx0IFx0dGl0bGU6IFwi6LSi5pS/5pWw5o2uXCJcclxuXHRcdFx0IH0sXHJcblx0XHRcdCB7XHJcblx0XHRcdCBcdGhyZWY6IFVybEhlbHBlcnMuam9pbihjb250ZXh0LFwiT3ZlcnZpZXcvXCIsXCJob3QvZGF0YS10eXBlL3NvY2lhbC1zZWN1cml0eVwiKSxcclxuXHRcdFx0IFx0bGFiZWw6IFwi56S+5L+dXCIsXHJcblx0XHRcdCBcdHRpdGxlOiBcIuekvuS/neaVsOaNrlwiXHJcblx0XHRcdCB9XVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdCBocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCxcIk92ZXJ2aWV3XCIsXCJjb2xkL2RhdGEtdHlwZS9hbGxcIiksXHJcblx0XHRcdCBsYWJlbDogXCLlhrfljLrmlbDmja7nrqHnkIZcIixcclxuXHRcdFx0IHRpdGxlOiBcIuaVsOaNruaxh+aAu+S7u+WKoVwiLFxyXG5cdFx0XHQgaXRlbXM6IFt7XHJcblx0XHRcdCBcdGhyZWY6IFVybEhlbHBlcnMuam9pbihjb250ZXh0LFwiT3ZlcnZpZXdcIixcImNvbGQvZGF0YS10eXBlL2FsbFwiKSxcclxuXHRcdFx0IFx0bGFiZWw6IFwi5YWo6YOoXCIsXHJcblx0XHRcdCBcdHRpdGxlOiBcIuWFqOmDqOaVsOaNrlwiXHJcblx0XHRcdCB9LFxyXG5cdFx0XHQge1xyXG5cdFx0XHRcdGhyZWY6IFVybEhlbHBlcnMuam9pbihjb250ZXh0LFwiT3ZlcnZpZXdcIixcImNvbGQvZGF0YS10eXBlL2ZpbmFuY2lhbFwiKSxcclxuXHRcdFx0IFx0bGFiZWw6IFwi6LSi5pS/XCIsXHJcblx0XHRcdCBcdHRpdGxlOiBcIui0ouaUv+aVsOaNrlwiXHJcblx0XHRcdCB9LFxyXG5cdFx0XHQge1xyXG5cdFx0XHQgXHRocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCxcIk92ZXJ2aWV3L1wiLFwiY29sZC9kYXRhLXR5cGUvc29jaWFsLXNlY3VyaXR5XCIpLFxyXG5cdFx0XHQgXHRsYWJlbDogXCLnpL7kv51cIixcclxuXHRcdFx0IFx0dGl0bGU6IFwi56S+5L+d5pWw5o2uXCJcclxuXHRcdFx0IH1dXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0IFx0aHJlZjogVXJsSGVscGVycy5qb2luKGNvbnRleHQsXCJPdmVydmlldy9cIixcInRhc2tcIiksXHJcblx0XHRcdCBcdGxhYmVsOiBcIuS7u+WKoVwiLFxyXG5cdFx0XHQgXHR0aXRsZTogXCLku7vliqHmn6XnnItcIlxyXG5cdFx0XHQgfVx0XHRcdFxyXG5cdFx0XSk7XHJcblx0fVx0XHJcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJjb25maWdQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9kZXZlbG9wZXIvdHMvZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuLy8vICA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9kZXZlbG9wZXIvdHMvZGF0YU1hbmFnZXJIZWxwZXIudHNcIi8+XHJcbm1vZHVsZSBDb25maWdze1xyXG5cdGV4cG9ydCBjbGFzcyBPcGVyYXRlVHlwZXtcclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IERFTEVURSgpOnN0cmluZyB7cmV0dXJuIFwiZGVsZXRlXCJ9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBVUERBVEUoKTpzdHJpbmcge3JldHVybiBcInVwZGF0ZVwifVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgUFVUKCk6c3RyaW5ne3JldHVybiBcInB1dFwifSBcclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IE1PVkUoKTpzdHJpbmd7cmV0dXJuIFwibW92ZVwifVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgRVhUUkFDVCgpOnN0cmluZ3tyZXR1cm4gXCJleHRyYWN0XCJ9XHJcblx0fVxyXG5cclxuXHRfbW9kdWxlLmNvbnRyb2xsZXIoJ0NvbmZpZ3MuTWVudUl0ZW1Db250cm9sbGVyJyxbJyRzY29wZScsICckbG9jYXRpb24nLCAoJHNjb3BlLCAkbG9jYXRpb24pID0+IHtcdFx0XHJcblx0XHQkc2NvcGUubWVudUl0ZW09W3tcclxuXHRcdFx0aWNvbjogXCJnbHlwaGljb24gZ2x5cGhpY29uLWNsb3VkLXVwbG9hZFwiLFxyXG5cdFx0XHRsYWJlbDogXCLmlbDmja7nrqHnkIbphY3nva5cIixcclxuXHRcdFx0dGl0bGU6IFwi6YWN572u5pWw5o2u5a2Y5YKo5L+h5oGvXCIsXHRcdFx0XHJcblx0XHRcdGhyZWY6IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCBcIi9nbHVzdGVyLWZzL3NldHRpbmdcIilcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGljb246IFwiZ2x5cGhpY29uIGdseXBoaWNvbi10aC1saXN0XCIsXHJcblx0XHRcdGxhYmVsOiBcIuacjeWKoembhue+pOmFjee9rlwiLFxyXG5cdFx0XHR0aXRsZTogXCLphY3nva7mnI3liqHpm4bnvqTkv6Hmga9cIixcclxuXHRcdFx0aHJlZjogVXJsSGVscGVycy5qb2luKGNvbnRleHQsIFwiL2t1YmUtY2x1c3Rlci9zZXR0aW5nXCIpXHJcblx0XHR9XVxyXG5cdH1dKTtcclxuXHJcblx0ZnVuY3Rpb24gY3JlYXRlQ29uZmlnQnJlYWRjcnVtYnMoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyl7XHJcblx0XHR2YXIgdXJsID0gJGxvY2F0aW9uLnVybCgpO1xyXG5cdFx0dmFyIGxhYmVsLCB0aXRsZTtcclxuXHRcdHN3aXRjaCAodXJsKSB7XHJcblx0XHRcdGNhc2UgXCIvY29uZmlnL2dsdXN0ZXItZnMvc2V0dGluZ1wiOlxyXG5cdFx0XHRcdGxhYmVsID0gXCLmlbDmja7nrqHnkIbphY3nva5cIjtcclxuXHRcdFx0XHR0aXRsZT0gXCLphY3nva7mlbDmja7lrZjlgqjkv6Hmga9cIjtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSBcIi9jb25maWcva3ViZS1jbHVzdGVyL3NldHRpbmdcIjpcclxuXHRcdFx0ICAgIGxhYmVsID0gXCLmnI3liqHpm4bnvqTphY3nva5cIjtcclxuXHRcdFx0XHR0aXRsZT0gXCLphY3nva7mnI3liqHpm4bnvqTkv6Hmga9cIjtcclxuXHRcdFx0ICAgIGJyZWFrO1x0XHRcdFxyXG5cdFx0XHRkZWZhdWx0Olx0XHRcdFx0XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdHJldHVybiBEZXZlbG9wZXIuYWN0aXZhdGVDdXJyZW50KFt7XHJcblx0XHRcdGhyZWY6IHVybCxcclxuXHRcdFx0bGFiZWw6IGxhYmVsLC8vaXRlbS5sYWJlbCxcclxuXHRcdFx0dGl0bGU6IHRpdGxlLy9pdGVtLnRpdGxlXHJcblx0XHR9XSk7IFxyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9yYWNsZUluZm8oYXJyYXk6QXJyYXk8YW55PiwgaWQ6bnVtYmVyKXtcclxuXHRcdHZhciByZXN1bHQgPXtcImlkXCI6IGlkfTtcclxuXHRcdGFuZ3VsYXIuZm9yRWFjaChhcnJheSwgKGFycikgPT4ge1xyXG5cdFx0XHRyZXN1bHRbYXJyLmZpZWxkXSAgPSBhcnIudmFsdWU7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gc2hhcmVJbml0KCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpe1xyXG5cdFx0JHNjb3BlLiBzdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlQ3VycmVudFN1Yk5hdkJhcigkc2NvcGUsICRsb2NhdGlvbiwgJHJvdXRlUGFyYW1zKTsgIFx0XHJcblx0fVxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gY3JlYXRlTmV3T2JlamN0KGFycmF5OkFycmF5PGFueT4sIG9iail7XHJcblx0XHR2YXIgcmVzdWx0ID1bXTtcclxuXHRcdGlmKG9iail7XHJcblx0XHRcdGFuZ3VsYXIuZm9yRWFjaChhcnJheSwgKGFycikgPT57XHRcdFx0XHJcblx0XHRcdFx0cmVzdWx0LnB1c2goe1xyXG5cdFx0XHRcdFx0ZmllbGQ6IGFyci5maWVsZCxcclxuXHRcdFx0XHRcdG5hbWU6IGFyci5kaXNwbGF5TmFtZSxcclxuXHRcdFx0XHRcdHZhbHVlOiBvYmpbYXJyLmZpZWxkXVxyXG5cdFx0XHRcdH0pO1x0XHRcdFxyXG5cdFx0XHR9KTtcclxuXHRcdH1lbHNle1xyXG5cdFx0XHRhbmd1bGFyLmZvckVhY2goYXJyYXksIChhcnIpID0+e1x0XHRcdFxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHtcclxuXHRcdFx0XHRcdGZpZWxkOiBhcnIuZmllbGQsXHJcblx0XHRcdFx0XHRuYW1lOiBhcnIuZGlzcGxheU5hbWUsXHJcblx0XHRcdFx0XHR2YWx1ZTogbnVsbFxyXG5cdFx0XHRcdH0pO1x0XHRcdFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cdFxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcdFx0XHJcblx0fVxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gb3JhY2xlSW5mb09wZXJhdGUoJGh0dHAsIHVybDpzdHJpbmcsIG9wZXJhdGU6c3RyaW5nLCByZXNvdXJjZSwgZm4/OiAoZGF0YSwgc3RhdHVzKT0+dm9pZCApe1xyXG5cdFx0aWYocmVzb3VyY2UgPT09IG51bGwpXHJcblx0XHRcdHRocm93IFwi5LiN6IO95pON5L2c56m66LWE5rqQ5a+56LGhXCI7XHRcclxuXHJcblx0XHR2YXIgaWQgPSByZXNvdXJjZVtcImlkXCJdIHx8IHJlc291cmNlW1wibmFtZVwiXSB8fCByZXNvdXJjZVtcIl9pZFwiXSB8fCByZXNvdXJjZVtcIl9rZXlcIl07XHJcblx0XHR2YXIgUkVTVGZ1bFVybD11cmw7XHJcblx0XHRpZihpZD09PXVuZGVmaW5lZCl7XHJcblx0XHRcdFJFU1RmdWxVcmwgPSAgVXJsSGVscGVycy5qb2luKHVybCwgb3BlcmF0ZSk7XHJcblx0XHR9ZWxzZXtcclxuXHRcdFx0UkVTVGZ1bFVybCA9IFVybEhlbHBlcnMuam9pbih1cmwsIHJlc291cmNlLmlkK1wiXCIsIG9wZXJhdGUpO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHQkaHR0cCh7ICBcclxuICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIiwgIFxyXG4gICAgICAgICAgICB1cmw6IFJFU1RmdWxVcmwsICAgICAgICAgXHJcbiAgICAgICAgICAgIHBhcmFtczogcmVzb3VyY2UsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgnfSxcclxuICAgICAgICAgICAgdHJhbnNmb3JtUmVxdWVzdDogZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc3RyID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IodmFyIHAgaW4gb2JqKVxyXG4gICAgICAgICAgICAgICAgICAgIHN0ci5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChwKSArIFwiPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG9ialtwXSkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5qb2luKFwiJlwiKTtcclxuICAgICAgICAgICAgfSwgICAgICAgIFx0ICAgXHJcbiAgICAgICAgfSkuc3VjY2VzcyhmdW5jdGlvbihkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykgeyAgXHJcbiAgICAgICAgLy/miJDlip/kuYvlkI7lgZrkuIDkupvkuovmg4UgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZihhbmd1bGFyLmlzRnVuY3Rpb24oZm4pKVxyXG4gICAgICAgICAgICAgICAgZm4oZGF0YSwgc3RhdHVzKTsgICAgICAgICBcclxuICAgICAgICAgICBcclxuICAgICAgICB9KS5lcnJvcihmdW5jdGlvbihkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykgeyAgXHJcbiAgICAgICAgICAgIGlmKGFuZ3VsYXIuaXNGdW5jdGlvbihmbikpXHJcbiAgICAgICAgICAgICAgICBmbihkYXRhLCBzdGF0dXMpOyAgXHJcbiAgICAgICAgfSk7ICBcclxuXHR9XHRcclxuXHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiY29uZmlnUGx1Z2luLnRzXCIvPlxyXG5tb2R1bGUgQ29uZmlnc3tcclxuXHJcblx0ZXhwb3J0IGludGVyZmFjZSBCbG9ja3tcclxuXHRcdGlwOnN0cmluZzsgLy/lrZjlgqjlnZfnmoTmnLrlmahpcOWcsOWdgFxyXG5cdFx0cGF0aDogc3RyaW5nOyAvL+i3r+W+hFxyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGludGVyZmFjZSBvcmFjbGVQYXJhbXtcclxuXHRcdG5hbWU6IHN0cmluZ1xyXG5cdFx0aXA6IHN0cmluZztcclxuXHRcdHBvcnQ6IHN0cmluZztcclxuXHRcdHNlcnZpY2VOYW1lOiBzdHJpbmc7XHJcblx0XHR0YWJsZU5hbWU6IHN0cmluZztcclxuXHRcdHN0YXR1czogc3RyaW5nO1x0XHJcblx0XHRpZD86bnVtYmVyO1x0XHJcblx0fVxyXG5cclxuXHRleHBvcnQgaW50ZXJmYWNlIHZvbHVtZXtcclxuXHRcdG5hbWU6IHN0cmluZzsgLy92b2x1bWXnmoTlkI3lrZdcclxuXHRcdHRvdGFsU2l6ZTogbnVtYmVyOyAvL3ZvbHVtZeepuumXtOWkp+Wwj1xyXG5cdFx0dXNlZFNpemU6IG51bWJlcjsgLy8gdm9sdW1l5bey5L2/55So56m66Ze05aSn5bCPXHJcblx0XHRibG9jazogQmxvY2s7IC8vdm9sdW1l5Lit55qE5a2Y5YKo5Z2XXHJcblx0XHRmb2xkZXI/OiBBcnJheTxhbnk+O1x0Ly92b2x1bWXnmoTmlofku7ZcdFxyXG5cdH1cdFxyXG5cclxuICAgIC8v5a2X6IqC5aSn5bCP6L2s5o2i5oiQ5a2X56ym5aSn5bCPXHJcblx0ZnVuY3Rpb24gZ2V0U3RyaW5nU2l6ZShzaXplOiBudW1iZXIpe1xyXG5cdFx0dmFyIHJlc3VsdCA9IHNpemU7IFxyXG5cdFx0dmFyIHN1ZmZpeCA9W1wiQlwiLCBcIktCXCIgLFwiTUJcIiwgXCJHQlwiLCBcIkdCXCIsIFwiVEJcIl07XHJcblx0XHR2YXIgY291bnQ9MTsgXHJcblx0XHR3aGlsZShyZXN1bHQgPiAxMDI0KXtcclxuXHRcdFx0cmVzdWx0ID0gcmVzdWx0LzEwMjQ7XHJcblx0XHRcdGNvdW50ICsrO1x0XHRcdFxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3VsdCArIHN1ZmZpeFtjb3VudF07XHJcblx0fVxyXG5cclxuXHJcblx0ZXhwb3J0IGNsYXNzIENvbmZpZ3NNb2RlbFNlcnZpY2V7XHJcblx0XHRwdWJsaWMgY2x1c3RlcjogQXJyYXk8dm9sdW1lPj1bXTtcclxuXHRcdHB1YmxpYyBvcmFjbGVQYXJhbTogQXJyYXk8b3JhY2xlUGFyYW0+PVtdO1xyXG5cclxuXHRcdHB1YmxpYyBjb25zdHJ1Y3Rvcigpe1xyXG5cdFx0XHR0aGlzLnVwZGF0ZUFsbERhdGEoKTtcdFx0XHJcblx0XHR9XHJcblxyXG5cdFx0cHVibGljIHVwZGF0ZUFsbERhdGEoKXtcclxuXHRcdFx0dGhpcy51cGRhdGVWb2x1bWVEYXRhKCk7XHJcblx0XHRcdHRoaXMudXBkYXRlT3JhY2xlUGFyYW0oKTtcclxuXHRcdH1cclxuXHQgICAgcHVibGljIHVwZGF0ZVZvbHVtZURhdGEoKXtcclxuXHQgICAgXHR2YXIgcmVzdWx0PW51bGw7XHJcblx0ICAgIFx0JC5hamF4KHsgXHJcblx0XHRcdFx0YXN5bmM6IGZhbHNlLCBcclxuXHRcdFx0XHR0eXBlIDogXCJQT1NUXCIsIFxyXG5cdFx0XHRcdHVybCA6IFwiL2phdmEvY29uc29sZS9hcGkvdm9sdW1lL2xpc3RcIixcdFx0XHRcdFx0XHJcblx0XHRcdFx0c3VjY2VzcyA6IGZ1bmN0aW9uKGRhdGEpIHsgXHJcblx0XHRcdFx0ICAgIGlmKGRhdGEpe1x0XHRcdFxyXG5cdFx0XHRcdFx0ICAgIHJlc3VsdCA9IGRhdGE7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0fSBcclxuXHRcdFx0fSk7XHRcdFx0XHJcblx0XHRcdHRoaXMuY2x1c3RlciA9IHJlc3VsdDtcclxuXHQgICAgXHRcclxuXHRcdH1cclxuXHJcblx0XHRwdWJsaWMgdXBkYXRlT3JhY2xlUGFyYW0oKXtcclxuXHRcdFx0dmFyIHJlc3VsdD1udWxsO1xyXG5cdFx0XHQkLmFqYXgoe1xyXG5cdFx0XHRcdGFzeW5jOiBmYWxzZSxcclxuXHRcdFx0XHR0eXBlIDogXCJQT1NUXCIsXHJcblx0XHRcdFx0dXJsIDogXCIvamF2YS9jb25zb2xlL2FwaS9vcmFjbGUvbGlzdFwiLFxyXG5cdFx0XHRcdHN1Y2Nlc3MgOiBmdW5jdGlvbihkYXRhKSB7IFxyXG5cdFx0XHRcdCAgICBpZihkYXRhKXtcdFx0XHRcclxuXHRcdFx0XHRcdCAgICByZXN1bHQgPSBkYXRhO1x0XHRcdFx0XHQgICBcclxuXHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0fSBcdFxyXG5cdFx0XHR9KTtcdFx0XHRcclxuXHRcdFx0dGhpcy5vcmFjbGVQYXJhbSA9IHJlc3VsdDtcdFx0XHRcclxuXHRcdH1cclxuXHJcblx0XHRwdWJsaWMgZ2V0Rm9sZGVyQnlWb2x1bWVOYW1lKG5hbWU6IHN0cmluZyl7XHJcblx0XHRcdGlmKHRoaXMuY2x1c3Rlcj09PW51bGwpXHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdGZvcih2YXIgIGk9MDsgaTwgdGhpcy5jbHVzdGVyLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0XHRpZih0aGlzLmNsdXN0ZXJbaV0ubmFtZSA9PT0gbmFtZSlcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNsdXN0ZXJbaV0uZm9sZGVyO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuICAgIF9tb2R1bGUuZmFjdG9yeSgnQ29uZmlnc01vZGVsJywgWyckcm9vdFNjb3BlJywgJyRodHRwJywgJyRsb2NhdGlvbicsICckcmVzb3VyY2UnLCAoJHJvb3RTY29wZSwgJGh0dHAsICRsb2NhdGlvbiwgJHJlc291cmNlKSA9PnsgICAgXHRcclxuICAgIFx0dmFyICRzY29wZSA9IG5ldyBDb25maWdzTW9kZWxTZXJ2aWNlKCk7XHJcbiAgICBcdHJldHVybiAkc2NvcGU7XHJcbiAgICB9XSk7XHJcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcblxyXG5tb2R1bGUgQ29uZmlnc3tcclxuXHRleHBvcnQgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudEJ5VmFsdWUoYXJyYXk6QXJyYXk8YW55PiAsdmFsdWU6YW55LCBrZXk/OnN0cmluZyApe1xyXG5cdFx0aWYoa2V5KXtcclxuXHRcdFx0Zm9yKHZhciBpPTA7IGk8YXJyYXkubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHRcdGlmKGFycmF5W2ldW2tleV0gPT09IHZhbHVlKXtcclxuXHRcdFx0XHRcdGFycmF5LnNwbGljZShpICwxKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fWVsc2V7XHJcblx0XHRcdGZvcih2YXIgaT0wIDsgaTxhcnJheS5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdFx0aWYoYXJyYXlbaV0gPT09IHZhbHVlKXtcclxuXHRcdFx0XHRcdGFycmF5LnNwbGljZShpICwxKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnRzQnlWYWx1ZShhcnJheTogQXJyYXk8YW55PiwgZWxlbWVudHM6QXJyYXk8YW55Pil7XHJcblx0XHRhbmd1bGFyLmZvckVhY2goZWxlbWVudHMsIChlbGVtZW50KSA9PntcclxuXHRcdFx0cmVtb3ZlRWxlbWVudEJ5VmFsdWUoYXJyYXksIGVsZW1lbnQudmFsdWUsIGVsZW1lbnQua2V5KTtcclxuXHRcdH0pO1xyXG5cdH1cclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImNvbmZpZ1BsdWdpbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImNvbmZpZ3NIZWxwZXIudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJjb25maWdzVXRpbHMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJjb25maWdzRGF0YVNlcnZpY2UudHNcIi8+XHJcbm1vZHVsZSBDb25maWdze1xyXG5cclxuXHRleHBvcnQgdmFyIEdmc0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKCdHZnNDb250cm9sbGVyJywgW1wiJHNjb3BlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsICdDb25maWdzTW9kZWwnLFxyXG5cdFx0KCRzY29wZSwgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBDb25maWdzTW9kZWwpID0+e1xyXG5cdFx0JHNjb3BlLm1vZGVsID0gQ29uZmlnc01vZGVsO1xyXG5cdFx0JHNjb3BlLnZvbHVtZXMgPSBDb25maWdzTW9kZWwuY2x1c3RlcjtcclxuXHQgICAgc2hhcmVJbml0KCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpO1x0XHJcblx0fV0pO1xyXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiY29uZmlnUGx1Z2luLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiY29uZmlnc0hlbHBlci50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImNvbmZpZ3NVdGlscy50c1wiLz5cclxuXHJcbm1vZHVsZSBDb25maWdze1xyXG5cclxuXHRleHBvcnQgdmFyIEt1YmVDb250cm9sbGVyID0gY29udHJvbGxlcignS3ViZUNvbnRyb2xsZXInLCBbXCIkc2NvcGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIixcIkNvbmZpZ3NNb2RlbFwiLFxyXG5cdFx0KCRzY29wZSwgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBDb25maWdzTW9kZWwpID0+IHtcclxuXHRcdCRzY29wZS5tb2RlbD0gQ29uZmlnc01vZGVsOyAgICAgICAgICAgIFxyXG5cdFx0JHNjb3BlLnRhYmxlQ29uZmlnPXtcclxuICAgICAgICAgICAgZGF0YTogJ21vZGVsLm9yYWNsZVBhcmFtJyxcclxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtczogW10sXHJcbiAgICAgICAgICAgIGNvbHVtbkRlZnM6IFt7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogXCJuYW1lXCIsXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogXCLlkI3np7BcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogXCJpcFwiLFxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IFwiSVBcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFx0ZmllbGQ6IFwicG9ydFwiLFxyXG4gICAgICAgICAgICBcdGRpc3BsYXlOYW1lOiBcIuerr+WPo+WPt1wiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgXHRmaWVsZDogXCJ1c2VyXCIsXHJcbiAgICAgICAgICAgIFx0ZGlzcGxheU5hbWU6IFwi55So5oi35ZCNXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICBcdGZpZWxkOiBcInBhc3N3b3JkXCIsXHJcbiAgICAgICAgICAgIFx0ZGlzcGxheU5hbWU6IFwi5a+G56CBXCIgICAgICAgICAgICBcdFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFx0ZmllbGQ6IFwiZGF0YWJhc2VOYW1lXCIsXHJcbiAgICAgICAgICAgIFx0ZGlzcGxheU5hbWU6IFwi5pyN5Yqh5ZCNXCIgICAgICAgICAgICAgXHRcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6IFwidGFibGVOYW1lXCIsXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogXCLooajnqbrpl7TlkI1cIiAgXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiBcInN1ZmZpeFwiLFxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IFwi6KGo5ZCO57yAXCIgIFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICBcdGZpZWxkOiBcInN0YXR1c1wiLFxyXG4gICAgICAgICAgICBcdGRpc3BsYXlOYW1lOiBcIui/nuaOpeeKtuaAgVwiLFxyXG4gICAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJjb25uZWN0U3RhdHVzLmh0bWxcIikgICAgICAgICAgICAgIFx0XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgXHRmaWVsZDogXCJlbnRpdHlcIixcclxuICAgICAgICAgICAgXHRkaXNwbGF5TmFtZTogXCLmk43kvZxcIiwgIFxyXG4gICAgICAgICAgICBcdGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwidGFibGVFZGl0Lmh0bWxcIikgICAgICAgICAgIFx0XHJcbiAgICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogZmFsc2UsXHJcbiAgICAgICAgICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcclxuICAgICAgICAgICAgc29ydEluZm86IHtcclxuICAgICAgICAgICAgICAgIHNvcnRCeTogXCJuYW1lXCIsXHJcbiAgICAgICAgICAgICAgICBhc2NlbmRpbmc6IHRydWVcclxuICAgICAgICAgICAgfSAgICAgICBcclxuICAgICAgICB9ICAgICAgIFxyXG5cclxuICAgICAgICBzaGFyZUluaXQoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyk7XHJcblxyXG4gICAgICAgICRzY29wZS5jcmVhdGUgPSAoKSA9PntcclxuICAgICAgICAgICAgJHNjb3BlLmFkZD0gdHJ1ZTtcclxuICAgICAgICAgICAgJHNjb3BlLmVkaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgJHNjb3BlLnRhYmxlRm9ybSA9IGNyZWF0ZU5ld09iZWpjdCgkc2NvcGUudGFibGVDb25maWcuY29sdW1uRGVmcywgbnVsbCk7ICBcclxuICAgICAgICAgICAgJHNjb3BlLnJvd0lkPTA7ICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlbW92ZUVsZW1lbnRzQnlWYWx1ZSgkc2NvcGUudGFibGVGb3JtLCBbe2tleTogXCJuYW1lXCIsIHZhbHVlOiBcIuW6j+WPt1wifSx7a2V5OiBcIm5hbWVcIiwgdmFsdWU6IFwi6L+e5o6l54q25oCBXCJ9LHtrZXk6IFwibmFtZVwiLCB2YWx1ZTogXCLmk43kvZxcIn1dKTsgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJHNjb3BlLmNhbmNlbCAgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICRzY29wZS50YWJsZUZvcm0gPW51bGw7XHJcbiAgICAgICAgICAgICRzY29wZS5hZGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgJHNjb3BlLmVkaXQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICRzY29wZS5vblN1Ym1pdCA9ICgpID0+IHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgJHNjb3BlLmVkaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgJHNjb3BlLmFkZCA9IGZhbHNlOyBcclxuICAgICAgICAgICAgb3JhY2xlSW5mb09wZXJhdGUoJGh0dHAsIFwiL2phdmEvY29uc29sZS9hcGkvb3JhY2xlXCIsIE9wZXJhdGVUeXBlLlVQREFURSwgY3JlYXRlT3JhY2xlSW5mbygkc2NvcGUudGFibGVGb3JtLCAkc2NvcGUucm93SWQpLCAocmVzdWx0LCBzdGF0dXMpID0+IHsgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKHN0YXR1cz09PTIwMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnVwZGF0ZU9yYWNsZVBhcmFtKCk7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBcIui1hOa6kOivt+axguWksei0pVwiOyAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0gXHJcblxyXG4gICAgICAgICRzY29wZS4kb24oXCJlZGl0Um93XCIsIChldmVudCwgZGF0YSkgPT57XHJcbiAgICAgICAgICAgICRzY29wZS5lZGl0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgJHNjb3BlLmFkZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAkc2NvcGUucm93SWQgPSBkYXRhLmlkXHJcbiAgICAgICAgICAgICRzY29wZS50YWJsZUZvcm0gPSBjcmVhdGVOZXdPYmVqY3QoJHNjb3BlLnRhYmxlQ29uZmlnLmNvbHVtbkRlZnMsIGRhdGEpOyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlbW92ZUVsZW1lbnRzQnlWYWx1ZSgkc2NvcGUudGFibGVGb3JtLCBbe2tleTogXCJuYW1lXCIsIHZhbHVlOiBcIuW6j+WPt1wifSx7a2V5OiBcIm5hbWVcIiwgdmFsdWU6IFwi6L+e5o6l54q25oCBXCJ9LHtrZXk6IFwibmFtZVwiLCB2YWx1ZTogXCLmk43kvZxcIn1dKTsgICAgICAgICAgICBcclxuICAgICAgICB9KSA7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oXCJkZWxldGVSb3dcIiwgKGV2ZW50LCBkYXRhKSA9PnsgICBcclxuICAgICAgICAgICAgb3JhY2xlSW5mb09wZXJhdGUoJGh0dHAsIFwiL2phdmEvY29uc29sZS9hcGkvb3JhY2xlXCIsIE9wZXJhdGVUeXBlLkRFTEVURSwgZGF0YSwgKHJlc3VsdCwgc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihzdGF0dXM9PT0yMDApe1xyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC51cGRhdGVPcmFjbGVQYXJhbSgpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgXCLotYTmupDor7fmsYLlpLHotKVcIjsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy9yZW1vdmVFbGVtZW50QnlWYWx1ZSgkc2NvcGUubW9kZWwsIGRhdGEuX2lkLCBcIl9pZFwiKTtcclxuICAgICAgICB9KTtcclxuXHR9XSk7XHJcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJjb25maWdQbHVnaW4udHNcIi8+XHJcbm1vZHVsZSBDb25maWdze1xyXG5cdGV4cG9ydCB2YXIgVGFibGVFZGl0ID0gY29udHJvbGxlcignVGFibGVFZGl0JywgWyckc2NvcGUnLCAoJHNjb3BlKSA9PiB7XHJcblx0XHQkc2NvcGUuZWRpdFJvdyA9IChlbnRpdHkpPT57XHRcdFx0XHJcblx0XHRcdCRzY29wZS4kZW1pdCgnZWRpdFJvdycsIGVudGl0eSk7XHJcblx0XHR9XHJcblxyXG5cdFx0JHNjb3BlLmRlbGV0ZVJvdyA9IChlbnRpdHkpID0+e1xyXG5cdFx0XHQkc2NvcGUuJGVtaXQoJ2RlbGV0ZVJvdycsIGVudGl0eSk7XHJcblx0XHR9XHJcblx0fV0pO1x0XHRcclxufSIsIm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IGNsYXNzIGNvbnN0cyB7XHJcbiAgICBnZXQgTkFNRVNQQUNFX1NUT1JBR0VfS0VZKCk6c3RyaW5nIHsgcmV0dXJuIFwiazhzU2VsZWN0ZWROYW1lc3BhY2VcIjsgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IHZhciBDb25zdGFudHMgPSBuZXcgY29uc3RzKCk7XHJcblx0XHJcbiAgZXhwb3J0IGludGVyZmFjZSBBcGlMb2NhdGlvbiB7XHJcbiAgICBwcm90bz86c3RyaW5nO1xyXG4gICAgaG9zdFBvcnQ6c3RyaW5nO1xyXG4gICAgcHJlZml4OnN0cmluZztcclxuICB9XHJcbiAgXHJcbiAgZXhwb3J0IGludGVyZmFjZSBBcGlMb2NhdGlvbnMge1xyXG4gICAgb3BlbnNoaWZ0PzogQXBpTG9jYXRpb247XHJcbiAgICBrOHM/OiBBcGlMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBpbnRlcmZhY2UgS3ViZXJuZXRlc0NvbmZpZyB7XHJcbiAgICBtYXN0ZXJfdXJpPzogc3RyaW5nO1xyXG4gICAgYXBpPzogQXBpTG9jYXRpb25zO1xyXG4gICAgb3BlbnNoaWZ0PzogT3BlblNoaWZ0T0F1dGhDb25maWc7XHJcbiAgICBnb29nbGU/OiBHb29nbGVPQXV0aENvbmZpZztcclxuICAgIGtleWNsb2FrPzogS2V5Q2xvYWtBdXRoQ29uZmlnO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGludGVyZmFjZSBPcGVuU2hpZnRPQXV0aENvbmZpZyB7XHJcbiAgICBvYXV0aF9hdXRob3JpemVfdXJpOnN0cmluZztcclxuICAgIG9hdXRoX2NsaWVudF9pZDpzdHJpbmc7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgaW50ZXJmYWNlIEdvb2dsZU9BdXRoQ29uZmlnIHtcclxuICAgIGF1dGhlbnRpY2F0aW9uVVJJOnN0cmluZztcclxuICAgIGF1dGhvcml6YXRpb25VUkk6c3RyaW5nO1xyXG4gICAgY2xpZW50SWQ6c3RyaW5nO1xyXG4gICAgY2xpZW50U2VjcmV0OnN0cmluZztcclxuICAgIHJlZGlyZWN0VVJJOnN0cmluZztcclxuICAgIHNjb3BlOnN0cmluZztcclxuICAgIHRva2VuVVJJPzpzdHJpbmc7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgaW50ZXJmYWNlIEtleUNsb2FrQXV0aENvbmZpZyB7XHJcbiAgICBvYXV0aF9hdXRob3JpemVfdXJpOnN0cmluZztcclxuICAgIG9hdXRoX2NsaWVudF9pZDpzdHJpbmc7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgaW50ZXJmYWNlIEt1YmVybmV0ZXNTdGF0ZSB7XHJcbiAgICBuYW1lc3BhY2VzOiBBcnJheTxzdHJpbmc+O1xyXG4gICAgc2VsZWN0ZWROYW1lc3BhY2U6IHN0cmluZztcclxuICB9XHJcblxyXG5cdGV4cG9ydCBjbGFzcyBXYXRjaFR5cGVzIHtcclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEVORFBPSU5UUygpOnN0cmluZyB7IHJldHVybiBcImVuZHBvaW50c1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBFVkVOVFMoKTpzdHJpbmcgeyByZXR1cm4gXCJldmVudHNcIjsgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgTkFNRVNQQUNFUygpOnN0cmluZyB7IHJldHVybiBcIm5hbWVzcGFjZXNcIjsgfVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgTk9ERVMoKTpzdHJpbmcgeyByZXR1cm4gXCJub2Rlc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBQRVJTSVNURU5UX1ZPTFVNRVMoKTpzdHJpbmcgeyByZXR1cm4gXCJwZXJzaXN0ZW50dm9sdW1lc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBQRVJTSVNURU5UX1ZPTFVNRV9DTEFJTVMoKTpzdHJpbmcgeyByZXR1cm4gXCJwZXJzaXN0ZW50dm9sdW1lY2xhaW1zXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFBPRFMoKTpzdHJpbmcgeyByZXR1cm4gXCJwb2RzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFJFUExJQ0FUSU9OX0NPTlRST0xMRVJTKCk6c3RyaW5nIHsgcmV0dXJuIFwicmVwbGljYXRpb25jb250cm9sbGVyc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBSRVNPVVJDRV9RVU9UQVMoKTpzdHJpbmcgeyByZXR1cm4gXCJyZXNvdXJjZXF1b3Rhc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBPQVVUSF9DTElFTlRTKCk6c3RyaW5nIHsgcmV0dXJuIFwib2F1dGhjbGllbnRzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFNFQ1JFVFMoKTpzdHJpbmcgeyByZXR1cm4gXCJzZWNyZXRzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFNFUlZJQ0VTKCk6c3RyaW5nIHsgcmV0dXJuIFwic2VydmljZXNcIjsgfVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgU0VSVklDRV9BQ0NPVU5UUygpOnN0cmluZyB7IHJldHVybiBcInNlcnZpY2VhY2NvdW50c1wiOyB9XHJcblxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgVEVNUExBVEVTKCk6c3RyaW5nIHsgcmV0dXJuIFwidGVtcGxhdGVzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFJPVVRFUygpOnN0cmluZyB7IHJldHVybiBcInJvdXRlc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBCVUlMRF9DT05GSUdTKCk6c3RyaW5nIHsgcmV0dXJuIFwiYnVpbGRjb25maWdzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEJVSUxEUygpOnN0cmluZyB7IHJldHVybiBcImJ1aWxkc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBERVBMT1lNRU5UX0NPTkZJR1MoKTpzdHJpbmcgeyByZXR1cm4gXCJkZXBsb3ltZW50Y29uZmlnc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBJTUFHRV9TVFJFQU1TKCk6c3RyaW5nIHsgcmV0dXJuIFwiaW1hZ2VzdHJlYW1zXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFBPTElDSUVTKCk6c3RyaW5nIHsgcmV0dXJuIFwicG9saWNpZXNcIjsgfVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgUE9MSUNZX0JJTkRJTkdTKCk6c3RyaW5nIHsgcmV0dXJuIFwicG9saWN5YmluZGluZ3NcIjsgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgUFJPSkVDVFMoKTpzdHJpbmcgeyByZXR1cm4gXCJwcm9qZWN0c1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBST0xFX0JJTkRJTkdTKCk6c3RyaW5nIHsgcmV0dXJuIFwicm9sZWJpbmRpbmdzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFJPTEVTKCk6c3RyaW5nIHsgcmV0dXJuIFwicm9sZXNcIjsgfVxyXG5cdH1cclxuXHJcbiAgZXhwb3J0IGNsYXNzIE5hbWVzcGFjZWRUeXBlcyB7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBrOHNUeXBlcygpOkFycmF5PHN0cmluZz4ge1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIFdhdGNoVHlwZXMuRU5EUE9JTlRTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuRVZFTlRTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuTk9ERVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRV9DTEFJTVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QT0RTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuUkVQTElDQVRJT05fQ09OVFJPTExFUlMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5SRVNPVVJDRV9RVU9UQVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5TRUNSRVRTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuU0VSVklDRVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5TRVJWSUNFX0FDQ09VTlRTXHJcbiAgICAgIF07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBvc1R5cGVzKCk6QXJyYXk8c3RyaW5nPiB7XHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5URU1QTEFURVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5CVUlMRF9DT05GSUdTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuUk9VVEVTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuQlVJTERTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuQlVJTERfQ09ORklHUyxcclxuICAgICAgICBXYXRjaFR5cGVzLkRFUExPWU1FTlRfQ09ORklHUyxcclxuICAgICAgICBXYXRjaFR5cGVzLklNQUdFX1NUUkVBTVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5PQVVUSF9DTElFTlRTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuUE9MSUNJRVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QT0xJQ1lfQklORElOR1MsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QUk9KRUNUUyxcclxuICAgICAgICAvL1dhdGNoVHlwZXMuUk9MRV9CSU5ESU5HUyxcclxuICAgICAgICAvL1dhdGNoVHlwZXMuUk9MRVNcclxuICAgICAgXTtcclxuICAgIH1cclxuICB9XHJcblx0XHJcblx0ZXhwb3J0IGNsYXNzIFdhdGNoQWN0aW9ucyB7XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBBTlkoKTpzdHJpbmcgeyByZXR1cm4gXCIqXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEFEREVEKCk6c3RyaW5nIHsgcmV0dXJuIFwiQURERURcIjsgfVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgTU9ESUZJRUQoKTpzdHJpbmcgeyByZXR1cm4gXCJNT0RJRklFRFwiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBERUxFVEVEKCk6c3RyaW5nIHsgcmV0dXJuIFwiREVMRVRFRFwiOyB9XHJcblx0fVxyXG5cdFxyXG5cdGV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0TWFwIHtcclxuXHRcdFt1aWQ6c3RyaW5nXTogYW55O1x0XHRcclxuXHR9XHJcblx0XHJcblx0ZXhwb3J0IGludGVyZmFjZSBXYXRjaGVyU2VydmljZSB7XHJcblx0XHRoYXNXZWJTb2NrZXQ6IGJvb2xlYW47XHJcblx0XHRhZGRDdXN0b21pemVyOiAodHlwZTogc3RyaW5nLCBjdXN0b21pemVyOiAob2JqOmFueSkgPT4gdm9pZCkgPT4gdm9pZDtcclxuXHRcdGdldFR5cGVzOiAoKSA9PiBBcnJheTxzdHJpbmc+O1xyXG5cdFx0Z2V0TmFtZXNwYWNlOiAoKSA9PiBzdHJpbmc7XHJcblx0XHRzZXROYW1lc3BhY2U6IChuYW1lc3BhY2U6IHN0cmluZykgPT4gdm9pZDtcclxuXHRcdGdldE9iamVjdHM6ICh0eXBlOiBzdHJpbmcpID0+IEFycmF5PGFueT47XHJcblx0XHRnZXRPYmplY3RNYXA6ICh0eXBlOiBzdHJpbmcpID0+IE9iamVjdE1hcDtcclxuXHRcdGFkZEFjdGlvbjogKHR5cGU6IHN0cmluZywgYWN0aW9uOiBzdHJpbmcsIGZuOiAob2JqOmFueSkgPT4gdm9pZCkgPT4gdm9pZDtcclxuXHRcdHJlZ2lzdGVyTGlzdGVuZXI6IChmbjoob2JqZWN0czpPYmplY3RNYXApID0+IHZvaWQpID0+IHZvaWQ7XHJcbiAgICByZWdpc3RlckN1c3RvbVVybEZ1bmN0aW9uOiAoa2luZDpzdHJpbmcsIHVybDooa2luZDpzdHJpbmcpID0+IHN0cmluZykgPT4gdm9pZDtcclxuXHR9XHJcblxyXG4gIGV4cG9ydCBpbnRlcmZhY2UgS3ViZVBvZCB7XHJcbiAgICBpZDpzdHJpbmc7XHJcbiAgICBuYW1lc3BhY2U6c3RyaW5nO1xyXG4gICAgbWV0YWRhdGE7XHJcbiAgICAkcmVwbGljYXM6IG51bWJlcjtcclxuICB9XHJcblxyXG5cdFxyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG4gIGV4cG9ydCB2YXIgaG9zdFBvcnRzID1bXTtcclxuXHJcbiAgLyoqXHJcbiAgICogU29ydHMgdGhlIHRoZSBpcCBmaWVsZFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlwIHRoZSBpcCBzdWNoIGFzICcxMC4xLjIuMTMnXHJcbiAgICogQHJldHVybnMge2FueX1cclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gc29ydEJ5UG9kSXAoaXApIDogYW55IHtcclxuICAgIC8vIGkgZ3Vlc3MgdGhlcmUgaXMgbWF5YmUgbmljZXIgd2F5cyBvZiBzb3J0IHRoaXMgd2l0aG91dCBwYXJzaW5nIGFuZCBzbGljaW5nXHJcbiAgICB2YXIgcmVnZXggPSAvKFxcZHsxLDN9KVxcLihcXGR7MSwzfSlcXC4oXFxkezEsM30pXFwuKFxcZHsxLDN9KS87XHJcbiAgICB2YXIgZ3JvdXBzID0gcmVnZXguZXhlYyhpcCk7XHJcbiAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQoZ3JvdXBzKSkge1xyXG4gICAgICB2YXIgZzEgPSAoXCIwMFwiICsgZ3JvdXBzWzFdKS5zbGljZSgtMyk7XHJcbiAgICAgIHZhciBnMiA9IChcIjAwXCIgKyBncm91cHNbMl0pLnNsaWNlKC0zKTtcclxuICAgICAgdmFyIGczID0gKFwiMDBcIiArIGdyb3Vwc1szXSkuc2xpY2UoLTMpO1xyXG4gICAgICB2YXIgZzQgPSAoXCIwMFwiICsgZ3JvdXBzWzRdKS5zbGljZSgtMyk7XHJcbiAgICAgIHZhciBhbnN3ZXIgPSBnMSArIGcyICsgZzMgKyBnNDtcclxuICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHJhbWRvbVBvcnQoKTogbnVtYmVye1xyXG4gICAgIHZhciBob3N0UG9ydD1NYXRoLmZsb29yKDMwMDAwK01hdGgucmFuZG9tKCkqKDY1NTM1LTMwMDAwKSk7XHJcbiAgICAgd2hpbGUoaG9zdFBvcnRzLmluZGV4T2YoaG9zdFBvcnQpID09PSAwKXtcclxuICAgICAgICBob3N0UG9ydCA9IE1hdGguZmxvb3IoMzAwMDArTWF0aC5yYW5kb20oKSooNjU1MzUtMzAwMDApKTtcclxuICAgICB9XHJcbiAgICAgaG9zdFBvcnRzLnB1c2goaG9zdFBvcnQpO1xyXG4gICAgIHJldHVybiBob3N0UG9ydFxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbVN0cmluZyhsZW4gOiBudW1iZXIpIDogc3RyaW5ne1xyXG4gICAgICBsZW4gPSBsZW4gfHwgMzI7XHJcbiAgICAgIHZhciAkY2hhcnMgPSAnYWJjZGVmaGlqa21ucHJzdHd4eXonOyAvLyDpu5jorqTljrvmjonkuoblrrnmmJPmt7fmt4bnmoTlrZfnrKZvT0xsLDlncSxWdixVdSxJMVxyXG4gICAgICB2YXIgbWF4UG9zID0gJGNoYXJzLmxlbmd0aDtcclxuICAgICAgdmFyIHB3ZCA9ICcnO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICBwd2QgKz0gJGNoYXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBtYXhQb3MpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcHdkO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGNsYXNzIHJlc291cmNlUkNUZW1wbGF0ZXtcclxuXHJcbiAgICAgcHVibGljIGltYWdlPVwib3JhY2xlOnV0ZjhcIjtcclxuICAgICBwdWJsaWMgbmFtZXMgPSBbXCJhZG1pblwiLFwiY2ZndG9vbGxvZ3NcIixcImNoZWNrcG9pbnRzXCIsXCJkaWFnXCIsXCJmbGFzaC1yZWNvdmVyeS1hcmVhXCIsXCJvcmFkYXRhXCJdO1xyXG5cclxuICAgICBwdWJsaWMgY3JlYXRlUkMoT2JqKXtcclxuICAgICAgICB2YXIgbGFiZWxzID0ge1xyXG4gICAgICAgICAgIFwic3R5bGVcIjogXCJvcmFjbGVcIixcclxuICAgICAgICAgICBcInN0YXR1c1wiOiBcIjBcIixcclxuICAgICAgICAgICBcImlzRXh0cmFjdFwiOiBcIjBcIixcclxuICAgICAgICAgICBcImlzVGFyZ2V0XCI6IE9iai5pc1RhcmdldFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm9yKHZhciBpdGVtIGluIE9iai5sYWJlbHMpXHJcbiAgICAgICAgICAgbGFiZWxzW2l0ZW1dID0gT2JqLmxhYmVsc1tpdGVtXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICBcImFwaVZlcnNpb25cIiA6ICBLdWJlcm5ldGVzLmRlZmF1bHRBcGlWZXJzaW9uLFxyXG4gICAgICAgICAgIFwia2luZFwiIDogXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJcIixcclxuICAgICAgICAgICBcIm1ldGFkYXRhXCIgOiB7XHJcbiAgICAgICAgICAgICAgXCJuYW1lXCIgOiBPYmoubmFtZSxcclxuICAgICAgICAgICAgICBcImxhYmVsc1wiIDogbGFiZWxzLFxyXG4gICAgICAgICAgICAgIFwiYW5ub3RhdGlvbnNcIjogT2JqLmFubm90YXRpb25zXHJcbiAgICAgICAgICAgfSxcclxuICAgICAgICAgICBcInNwZWNcIiA6IHtcclxuICAgICAgICAgICAgICByZXBsaWNhcyA6IE9iai5yZXBsaWNhcyB8fCAxLFxyXG4gICAgICAgICAgICAgIFwidGVtcGxhdGVcIiA6IHRoaXMuY3JlYXRlVGVtcGxhdGUoT2JqKVxyXG4gICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgfVxyXG5cclxuICAgICBwdWJsaWMgY3JlYXRlVm9sdW1lTW91bnRzKCl7XHJcbiAgICAgICAgdmFyIHZvbHVtZU1vdW50cyA9IFtdO1xyXG4gICAgICAgIGZvcih2YXIgaXRlbSBpbiB0aGlzLm5hbWVzKXtcclxuICAgICAgICAgICBpZih0aGlzLm5hbWVzW2l0ZW1dID09PSAnZmxhc2gtcmVjb3ZlcnktYXJlYScpXHJcbiAgICAgICAgICAgICAgdm9sdW1lTW91bnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgIFwibmFtZVwiIDogdGhpcy5uYW1lc1tpdGVtXSxcclxuICAgICAgICAgICAgICAgICBcIm1vdW50UGF0aFwiIDogXCIvb3B0L29yYWNsZS9hcHAvZmxhc2hfcmVjb3ZlcnlfYXJlYVwiXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHZvbHVtZU1vdW50cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICBcIm5hbWVcIiA6IHRoaXMubmFtZXNbaXRlbV0sXHJcbiAgICAgICAgICAgICAgICAgXCJtb3VudFBhdGhcIiA6IFwiL29wdC9vcmFjbGUvYXBwL1wiICsgdGhpcy5uYW1lc1tpdGVtXVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdm9sdW1lTW91bnRzO1xyXG4gICAgIH1cclxuXHJcbiAgICAgcHVibGljIGNyZWF0ZVZvbHVtZXMocm9vdFBhdGggOnN0cmluZyl7XHJcbiAgICAgICAgdmFyIHZvbHVtZXMgPSBbXTtcclxuICAgICAgICBmb3IodmFyIGl0ZW0gaW4gdGhpcy5uYW1lcyl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMubmFtZXNbaXRlbV0gPT09ICdmbGFzaC1yZWNvdmVyeS1hcmVhJylcclxuICAgICAgICAgICAgICAgdm9sdW1lcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgOiB0aGlzLm5hbWVzW2l0ZW1dLFxyXG4gICAgICAgICAgICAgICAgICBcImhvc3RQYXRoXCIgOntcclxuICAgICAgICAgICAgICAgICAgICAgIFwicGF0aFwiIDogcm9vdFBhdGggKyBcImZsYXNoX3JlY292ZXJ5X2FyZWFcIlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgIHZvbHVtZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIFwibmFtZVwiIDogdGhpcy5uYW1lc1tpdGVtXSxcclxuICAgICAgICAgICAgICAgICAgXCJob3N0UGF0aFwiIDp7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcInBhdGhcIiA6IHJvb3RQYXRoICsgdGhpcy5uYW1lc1tpdGVtXVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdm9sdW1lcztcclxuICAgICB9XHJcblxyXG4gICAgIHB1YmxpYyBjcmVhdGVDb250YWluZXJzKE9iail7XHJcbiAgICAgICAgdmFyIGNvbnRhaW5lcnMgPSBbXTtcclxuICAgICAgICBjb250YWluZXJzLnB1c2goXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgIFwibmFtZVwiIDogXCJvcmFjbGVcIixcclxuICAgICAgICAgICBcImltYWdlXCI6IHRoaXMuaW1hZ2UsXHJcbiAgICAgICAgICAgXCJpbWFnZVB1bGxQb2xpY3lcIjogXCJJZk5vdFByZXNlbnRcIixcclxuICAgICAgICAgICBcImNvbW1hbmRcIjpbXCIvYXNzZXRzL2VudHJ5cG9pbnQuc2hcIl0sXHJcbiAgICAgICAgICAgXCJwb3J0c1wiOiBbXHJcbiAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgXCJjb250YWluZXJQb3J0XCI6IDE1MjEsXHJcbiAgICAgICAgICAgICBcImhvc3RQb3J0XCI6IE9iai5wb3J0IHx8IHJhbWRvbVBvcnQoKVxyXG4gICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgIFwidm9sdW1lTW91bnRzXCIgOiB0aGlzLmNyZWF0ZVZvbHVtZU1vdW50cygpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lcnNcclxuICAgICB9XHJcblxyXG4gICAgIHB1YmxpYyBjcmVhdGVUZW1wbGF0ZShPYmope1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIFwibWV0YWRhdGFcIjpcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAvL1wibmFtZVwiOiBPYmoubmFtZSxcclxuICAgICAgICAgICAgICAgXCJsYWJlbHNcIjogT2JqLmxhYmVsc1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcInNwZWNcIiA6IHtcclxuICAgICAgICAgICAgICAgIFwidGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHNcIiA6IDAsXHJcbiAgICAgICAgICAgICAgICBcImNvbnRhaW5lcnNcIiA6ICB0aGlzLmNyZWF0ZUNvbnRhaW5lcnMoT2JqKSxcclxuICAgICAgICAgICAgICAgIFwidm9sdW1lc1wiIDogIHRoaXMuY3JlYXRlVm9sdW1lcyhPYmoucGF0aClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gbGFiZWxUb0NoaW5lc2UobGFiZWxzKXtcclxuICAgICB2YXIgYW5zd2VyID0ge307XHJcbiAgICAgYW5ndWxhci5mb3JFYWNoKGxhYmVscywodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgIGFuc3dlcltrZXldID0gbGFiZWxDaGFuZ2VUb0NoaW5lcyh2YWx1ZSwga2V5KTtcclxuICAgICB9KTtcclxuICAgICByZXR1cm4gYW5zd2VyXHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gIGZpbmRTYW1lTmFtZVJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVycywgbmFtZSl7XHJcbiAgICAgIHZhciBuYW1lcyA9IFtdO1xyXG4gICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmZvckVhY2goKHJjKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcmNOYW1lID0gZ2V0TmFtZShyYyk7XHJcbiAgICAgICAgICBpZihyY05hbWUuaW5kZXhvZihuYW1lKSAhPT0gLTEpXHJcbiAgICAgICAgICAgICAgbmFtZXMucHVzaChyY05hbWUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmKG5hbWVzLmxlbmd0aCA9PT0gMCl7XHJcbiAgICAgICAgICByZXR1cm4gbmFtZSArIFwiXzFcIjtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB2YXIgbWF4ID0gMDtcclxuICAgICAgICAgIG5hbWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICB2YXIgYW5zd2VyID0gdmFsdWUuc3BsaXQoXCJfXCIpO1xyXG4gICAgICAgICAgICAgdmFyIGtleSA9IHBhcnNlSW50KGFuc3dlclsxXSk7XHJcbiAgICAgICAgICAgICBpZihtYXggPCBrZXkpXHJcbiAgICAgICAgICAgICAgICBtYXggPSBrZXk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiBuYW1lICsgKG1heCsxKTtcclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyUkMocmMpe1xyXG4gICAgICB2YXIgYW5zd2VyID0gZmFsc2U7XHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChDb3JlLnBhdGhHZXQocmMsIFtcIm1ldGFkYXRhXCIsIFwibGFiZWxzXCJdKSwodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgaWYoa2V5ID09PSAnaXNUYXJnZXQnICYmIHZhbHVlID09PSAndHJ1ZScpe1xyXG4gICAgICAgICAgICAgYW5zd2VyID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gaXNJbmNsdWRlKHJjcywgcmMpe1xyXG4gICAgIGZvcih2YXIgaSBpbiByY3Mpe1xyXG4gICAgICAgICBpZihnZXROYW1lKHJjc1tpXSkgPT09IGdldE5hbWUocmMpKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICB9XHJcbiAgICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGxhYmVsQ2hhbmdlVG9DaGluZXModmFsdWU6c3RyaW5nLCBrZXk6c3RyaW5nKXtcclxuICBcdHZhciB0cnVlVmFsdWUgPSAnJztcclxuICBcdHN3aXRjaChrZXkpe1xyXG4gIFx0XHRjYXNlICd0eXBlJzpcclxuICBcdFx0ICAgaWYodmFsdWUgPT09ICcwMScpXHJcbiAgXHRcdCAgIFx0ICB0cnVlVmFsdWUgPSAn6LSi5pS/JztcclxuICBcdFx0ICAgZWxzZSBpZih2YWx1ZSA9PT0gJzAyJylcclxuICBcdFx0ICAgICAgdHJ1ZVZhbHVlID0gJ+ekvuS/nSc7XHJcbiAgXHRcdCAgIGVsc2VcclxuICBcdFx0ICAgXHQgIHRydWVWYWx1ZSA9IHZhbHVlO1xyXG4gIFx0XHQgICBicmVhaztcclxuICBcdFx0Y2FzZSAnYmF0Y2gnOlxyXG4gIFx0ICAgICAgIGlmKHZhbHVlID09PSAnQScpXHJcbiAgXHQgICAgICAgXHQgIHRydWVWYWx1ZSA9ICfmibnmrKFBJztcclxuICBcdCAgICAgICBlbHNlIGlmKHZhbHVlID09PSAnQicpXHJcbiAgXHQgICAgICAgXHQgIHRydWVWYWx1ZSA9ICfmibnmrKFCJztcclxuICBcdCAgICAgICBlbHNlXHJcbiAgXHQgICAgICAgXHQgIHRydWVWYWx1ZSA9IHZhbHVlO1xyXG5cclxuICBcdFx0ICAgYnJlYWs7XHJcbiAgXHRcdGNhc2UgJ3JlZ2lvbic6XHJcbiAgXHRcdCAgIHRydWVWYWx1ZSA9IEt1YmVybmV0ZXMuZ2V0Q291bnR5QnlDb2RlKHZhbHVlKTtcclxuICBcdFx0ICAgYnJlYWs7XHJcbiAgXHRcdGNhc2UgJ3N5c3RlbSc6XHJcbiAgXHRcdCAgIHRydWVWYWx1ZSA9IEt1YmVybmV0ZXMuZ2V0U3lzdGVtTmFtZUJ5SWQodmFsdWUpO1xyXG4gIFx0XHQgICBicmVhaztcclxuICBcdFx0Y2FzZSAndmVyc2lvbic6XHJcbiAgXHRcdCAgIHZhciByZWc9IG5ldyBSZWdFeHAoJ15bMC05XSQnKS5leGVjKHZhbHVlKTtcclxuICBcdFx0ICAgaWYocmVnKVxyXG4gIFx0XHQgICAgICAgdHJ1ZVZhbHVlID0gJ+eJiOacrCcgKyByZWdbMF07XHJcbiAgXHRcdCAgIGVsc2VcclxuICBcdFx0ICAgXHQgICB0cnVlVmFsdWUgPSB2YWx1ZTtcclxuICBcdCAgICAgICBicmVhaztcclxuICBcdCAgICBjYXNlICdpc1RhcmdldCc6XHJcbiAgXHQgICAgICAgaWYodmFsdWUgPT09ICd0cnVlJylcclxuICBcdCAgICAgICBcdCAgIHRydWVWYWx1ZSA9ICfmsYfmgLvmlbDmja7lupMnO1xyXG4gIFx0ICAgICAgIGVsc2VcclxuICBcdCAgICAgICAgICAgdHJ1ZVZhbHVlID0gdmFsdWU7XHJcbiAgXHQgICAgICAgYnJlYWs7XHJcbiAgXHQgICAgZGVmYXVsdDpcclxuICBcdCAgICAgICB0cnVlVmFsdWUgPSB2YWx1ZTtcclxuICBcdH1cclxuICBcdHJldHVybiB0cnVlVmFsdWU7XHJcbiAgfVxyXG59IiwiLypcclxucmVhZCBhIG9iamVjdCBmcm9tIGppYW5nc3UgcHJvdmluY2UgLCBzdWNoIGFzIG5hbmppbmcgd2l0aCBzb21lIGluZm9ybWF0aW9uXHJcbuivu+WPluaxn+iLj+eahOafkOS4quWcsOWMuueahOS/oeaBr++8jOS7peWPiuezu+e7n+S/oeaBr1xyXG4gKi9cclxubW9kdWxlIEt1YmVybmV0ZXN7XHJcblx0ZXhwb3J0IHZhciBzeXN0ZW1fYXJyID0gW3tcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpdcIixcInN5c19pZFwiOlwiMVwifSx7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5pS257y0566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjJcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjNcIn0se1wic3lzX25hbWVcIjpcIui1hOS6p+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI0XCJ9LHtcInN5c19uYW1lXCI6XCLnlKjlj4votKLmlL/nu7zlkIjnrqHnkIbkv6Hmga/ns7vnu59cIixcInN5c19pZFwiOlwiNVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLnlKjlj4tBKytcIixcInN5c19pZFwiOlwiNlwifSx7XCJzeXNfbmFtZVwiOlwi5rWm5Y+j6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfaWRcIjpcIjdcIn0se1wic3lzX25hbWVcIjpcIuaglumcnuWMuui0ouaUv+S4muWKoeS/oeaBr+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI4XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuS4gOS9k+WMluezu+e7n1wiLFwic3lzX2lkXCI6XCI5XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbkuIDkvZPljJbns7vnu59cIixcInN5c19pZFwiOlwiMTBcIn0se1wic3lzX25hbWVcIjpcIua7qOaxn+W8gOWPkeWMuui0ouaUv+WIhuWxgFwiLFwic3lzX2lkXCI6XCIxMVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLmsZ/lroHnu4/mtY7mioDmnK/lvIDlj5HljLrotKLmlL/liIblsYBcIixcInN5c19pZFwiOlwiMTJcIn0se1wic3lzX25hbWVcIjpcIuaxn+WugeenkeWtpuWbrei0ouaUv+WIhuWxgFwiLFwic3lzX2lkXCI6XCIxM1wifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfaWRcIjpcIjE0XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIkErK+i0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2lkXCI6XCIxNVwifSx7XCJzeXNfbmFtZVwiOlwi6Z2e56iO57O757ufXCIsXCJzeXNfaWRcIjpcIjE2XCJ9LHtcInN5c19uYW1lXCI6XCLkuIDkvZPljJbpooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMTdcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5LiA5L2T5YyWXCIsXCJzeXNfaWRcIjpcIjE4XCJ9LHtcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jnrqHnkIbkv6Hmga/ns7vnu59cIixcInN5c19pZFwiOlwiMTlcIn0se1wic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mFwiLFwic3lzX2lkXCI6XCIyMFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpflj4rpnZ7nqI7ns7vnu59cIixcInN5c19pZFwiOlwiMjFcIn0se1wic3lzX25hbWVcIjpcIumbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2lkXCI6XCIyMlwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjIzXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIumdnueojuaUtue8tOezu+e7n1wiLFwic3lzX2lkXCI6XCIyNFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjI1XCJ9LHtcInN5c19uYW1lXCI6XCLlr4zmt7HpooTnrpfmiafooYxcIixcInN5c19pZFwiOlwiMjZcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55So5Y+L6Z2e56iO5Y+K56Wo5o2uXCIsXCJzeXNfaWRcIjpcIjI3XCJ9LHtcInN5c19uYW1lXCI6XCLnlKjlj4vpooTnrpfmiafooYxcIixcInN5c19pZFwiOlwiMjhcIn0se1wic3lzX25hbWVcIjpcIuaxn+iLj+ecgei0ouaUv+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCIyOVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLnlKjlj4vpgJrnlKjova/ku7ZcIixcInN5c19pZFwiOlwiMzBcIn0se1wic3lzX25hbWVcIjpcIuiBlOWPi+i9r+S7ti/pgJrnlKjotKLliqFcIixcInN5c19pZFwiOlwiMzFcIn0se1wic3lzX25hbWVcIjpcIueUqOWPi0dSUEctVThSMTDotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiMzJcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55So5Y+LR1BQLVIxMOi0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIzM1wifSx7XCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6LSi5pS/5LiA5L2T5YyW566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfaWRcIjpcIjM0XCJ9LHtcInN5c19uYW1lXCI6XCLotKLliqHnu5/kuIDmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMzVcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5YWs5YWx6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjM2XCJ9LHtcInN5c19uYW1lXCI6XCJBKyvotKLmlL/kuIDkvZPljJbkv6Hmga/lubPlj7BcIixcInN5c19pZFwiOlwiMzdcIn0se1wic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouWKoeeuoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIzOFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLlr4zmt7HotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMzlcIn0se1wic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouaUv+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI0MFwifSx7XCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6LSi5pS/5LiA5L2T5YyW5Lia5Yqh566h55CG57O757uf6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjQxXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouaUv+euoeeQhui9r+S7tkdzb2Z0XCIsXCJzeXNfaWRcIjpcIjQyXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbkuJrliqHns7vnu59cIixcInN5c19pZFwiOlwiNDNcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlui9r+S7tlwiLFwic3lzX2lkXCI6XCI0NFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXns7vnu59cIixcInN5c19pZFwiOlwiNDVcIn0se1wic3lzX25hbWVcIjpcIuaAu+mihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCI0NlwifSx7XCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfaWRcIjpcIjQ3XCJ9LHtcInN5c19uYW1lXCI6XCLnlKjmrL7orqHliJLns7vnu59cIixcInN5c19pZFwiOlwiNDhcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5oyH5qCH566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjQ5XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/nu7zlkIjkuJrliqHnrqHnkIblubPlj7BcIixcInN5c19pZFwiOlwiNTBcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2lkXCI6XCI1MVwifSx7XCJzeXNfbmFtZVwiOlwi5bel6LWE57uf5Y+RXCIsXCJzeXNfaWRcIjpcIjUyXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuWbveaciei1hOS6p1wiLFwic3lzX2lkXCI6XCI1M1wifSx7XCJzeXNfbmFtZVwiOlwi5Lmh6ZWH6Z2e56iO5pS25YWlXCIsXCJzeXNfaWRcIjpcIjU0XCJ9LHtcInN5c19uYW1lXCI6XCLkuaHplYfpm4bkuK3mlK/ku5hcIixcInN5c19pZFwiOlwiNTVcIn0se1wic3lzX25hbWVcIjpcIumdnueojuW+gee8tOezu+e7n1wiLFwic3lzX2lkXCI6XCI1NlwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLpooTnrpfnvJbliLbkuI7miafooYzns7vnu59cIixcInN5c19pZFwiOlwiNTdcIn0se1wic3lzX25hbWVcIjpcIumihOeul+euoeeQhue7vOWQiOS4muWKoeW5s+WPsFwiLFwic3lzX2lkXCI6XCI1OFwifSx7XCJzeXNfbmFtZVwiOlwidTjnrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiNTlcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+aMh+agh+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI2MFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAtUjnotKLliqHnrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiNjFcIn0se1wic3lzX25hbWVcIjpcIueUqOWPi0dSUC1VOOi0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCI2MlwifSx7XCJzeXNfbmFtZVwiOlwi6LSm5Yqh5aSE55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjYzXCJ9LHtcInN5c19uYW1lXCI6XCJSOWnotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiNjRcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwidTjotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiNjVcIn0se1wic3lzX25hbWVcIjpcIuebuOWfjuWMuui0ouaUv+e7vOWQiOeuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2lkXCI6XCI2NlwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/6Z2e56iO57u85ZCI566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjY3XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/nu7zlkIjnrqHnkIblubPlj7BcIixcInN5c19pZFwiOlwiNjhcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5ZC05rGf5Yy66LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfaWRcIjpcIjY5XCJ9LHtcInN5c19uYW1lXCI6XCLnlKjlj4tSOVwiLFwic3lzX2lkXCI6XCI3MFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5YWs5YWx5bqU55So5pyN5Yqh5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjcxXCJ9LHtcInN5c19uYW1lXCI6XCLph5HonbZLLzPliJvmlrDnrqHnkIblubPlj7BcIixcInN5c19pZFwiOlwiNzJcIn0se1wic3lzX25hbWVcIjpcIui0puWKoeaVsOaNruezu+e7n1wiLFwic3lzX2lkXCI6XCI3M1wifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLlhazlhbHotKLmlL/mnI3liqHlubPlj7BcIixcInN5c19pZFwiOlwiNzRcIn0se1wic3lzX25hbWVcIjpcIuS8muiuoeaguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCI3NVwifSx7XCJzeXNfbmFtZVwiOlwi6aG555uu5bqTXCIsXCJzeXNfaWRcIjpcIjc2XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/mgLvpooTnrpfvvIjlpJbvvInkuJPmiLfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiNzdcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5Z+O5bu66LWE6YeR5LiT5oi3566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjc4XCJ9LHtcInN5c19uYW1lXCI6XCLlhpzkv53kuJPmiLfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiNzlcIn0se1wic3lzX25hbWVcIjpcIuWGnOS4muWPkeWxleWfuumHkeS4k+aIt+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI4MFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLlpLHlnLDlhpzmsJHkv53pmpzotYTph5HkuJPmiLdcIixcInN5c19pZFwiOlwiODFcIn0se1wic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeW+geeuoeezu+e7n1wiLFwic3lzX2lkXCI6XCI4MlwifSx7XCJzeXNfbmFtZVwiOlwi5bel6LWE57uf5Y+R5Lq65ZGY5L+h5oGvXCIsXCJzeXNfaWRcIjpcIjgzXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIumihOeul+aMh+aghy3lm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19pZFwiOlwiODRcIn0se1wic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoeaguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCI4NVwifSx7XCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfaWRcIjpcIjg2XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuWFrOWKoea2iOi0ueeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI4N1wifSx7XCJzeXNfbmFtZVwiOlwi5Zu95pyJ6LWE5Lqn566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjg4XCJ9LHtcInN5c19uYW1lXCI6XCLljLrplYfotKLmlL/nrqHnkIbigJzkuIDkvZPljJbigJ3ns7vnu59cIixcInN5c19pZFwiOlwiODlcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5Y6/5pys57qn6LSi5pS/566h55CG4oCc5LiA5L2T5YyW4oCd57O757ufXCIsXCJzeXNfaWRcIjpcIjkwXCJ9LHtcInN5c19uYW1lXCI6XCLnlKjlj4vmlL/liqFcIixcInN5c19pZFwiOlwiOTFcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOihjOaUv+WPo+S4k+mhuei1hOmHke+8iVwiLFwic3lzX2lkXCI6XCI5MlwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjnu4/lu7rlj6PkuJPpobnotYTph5HvvIlcIixcInN5c19pZFwiOlwiOTNcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOWGnOS4muS/nemZqeS4k+i0pu+8iVwiLFwic3lzX2lkXCI6XCI5NFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI5Yac5Lia57u85ZCI5byA5Y+R5LiT6LSm77yJXCIsXCJzeXNfaWRcIjpcIjk1XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOekvuS/nei1hOmHkeS4k+i0pu+8iVwiLFwic3lzX2lkXCI6XCI5NlwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI5Zyf5Zyw5Ye66K6p5LiT6LSm77yJXCIsXCJzeXNfaWRcIjpcIjk3XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjnu7zlkIjlj6PkuJPpobnotYTph5HvvIlcIixcInN5c19pZFwiOlwiOThcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjk5XCJ9LHtcInN5c19uYW1lXCI6XCLlhpzkuJrkuJPlkJHlj4rlhpzkuJrlj5HlsZXln7rph5HkuJPpoblcIixcInN5c19pZFwiOlwiMTAwXCJ9LHtcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqHmoLjnrpdcIixcInN5c19pZFwiOlwiMTAxXCJ9LHtcInN5c19uYW1lXCI6XCLph5HotKLlt6XnqIvkuIDkvZPljJbmlK/mkpHlubPlj7BcIixcInN5c19pZFwiOlwiMTAyXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIumdnueojuaUtue8tFwiLFwic3lzX2lkXCI6XCIxMDNcIn0se1wic3lzX25hbWVcIjpcIuWtpuagoemihOeul+aJp+ihjFwiLFwic3lzX2lkXCI6XCIxMDRcIn0se1wic3lzX25hbWVcIjpcIumihOeul+aJp+ihjFwiLFwic3lzX2lkXCI6XCIxMDVcIn0se1wic3lzX25hbWVcIjpcIuS4k+mhuei1hOmHkVwiLFwic3lzX2lkXCI6XCIxMDZcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5oC76aKE566XXCIsXCJzeXNfaWRcIjpcIjEwN1wifSx7XCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfaWRcIjpcIjEwOFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566XXCIsXCJzeXNfaWRcIjpcIjEwOVwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi36LSm5Yqh57O757ufXCIsXCJzeXNfaWRcIjpcIjExMFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLlr4zmt7HotKLmlL/kuIDkvZPljJbkuJrliqHnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTExXCJ9LHtcInN5c19uYW1lXCI6XCLlm73mnInotYTkuqfns7vnu59cIixcInN5c19pZFwiOlwiMTEyXCJ9LHtcInN5c19uYW1lXCI6XCLlm73lupPkuJPpobnotYTph5HnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTEzXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIumdnueojuaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxMTRcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOaWsOWGnOS/ne+8iVwiLFwic3lzX2lkXCI6XCIxMTVcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOWfjuW4guWxheawkeWMu+eWl+e7n+etue+8iVwiLFwic3lzX2lkXCI6XCIxMTZcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI6ZuG5Lit5pSv5LuY5Lit5b+D77yJXCIsXCJzeXNfaWRcIjpcIjExN1wifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI6Kej5Zuw6YeR77yJXCIsXCJzeXNfaWRcIjpcIjExOFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5pen5Z+O5pS56YCg77yJXCIsXCJzeXNfaWRcIjpcIjExOVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjnpL7kv53otYTph5HotKbmiLfvvIlcIixcInN5c19pZFwiOlwiMTIwXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjlnJ/lnLDlh7rorqnkuJPluJDvvIlcIixcInN5c19pZFwiOlwiMTIxXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjpooTmi6jlj4rpnZ7pm4bkuK3mlK/ku5jkuK3lv4PvvIlcIixcInN5c19pZFwiOlwiMTIyXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOmihOeul+Wklui1hOmHke+8iVwiLFwic3lzX2lkXCI6XCIxMjNcIn0se1wic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoVwiLFwic3lzX2lkXCI6XCIxMjRcIn0se1wic3lzX25hbWVcIjpcIui0ouWKoeaguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxMjVcIn0se1wic3lzX25hbWVcIjpcIuW3pei1hOe7n+WPkeezu+e7n1wiLFwic3lzX2lkXCI6XCIxMjZcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfaWRcIjpcIjEyN1wifSx7XCJzeXNfbmFtZVwiOlwi6aKE566X566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjEyOFwifSx7XCJzeXNfbmFtZVwiOlwi6aKE566X5aSW6LWE6YeR77yI5LuO6IGU572R5a6h6K6h5Lit5Y+W5pWw77yJXCIsXCJzeXNfaWRcIjpcIjEyOVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCJHNi1F6LSi5Yqh566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjEzMFwifSx7XCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn5YWs5YWx6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjEzMVwifSx7XCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQL1I56LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjEzMlwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAtVThSMTBcIixcInN5c19pZFwiOlwiMTMzXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjln7rlu7rmiLfvvIlcIixcInN5c19pZFwiOlwiMTM0XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjpm4bkuK3mlK/ku5jkuK3lv4PvvIlcIixcInN5c19pZFwiOlwiMTM1XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOWGnOS4mue7vOWQiOW8gOWPke+8iVwiLFwic3lzX2lkXCI6XCIxMzZcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOmihOeul+Wklui1hOmHke+8iVwiLFwic3lzX2lkXCI6XCIxMzdcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOaUr+WGnOS4k+aIt++8iVwiLFwic3lzX2lkXCI6XCIxMzhcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG57O757uf77yI5oC76aKE566X77yJXCIsXCJzeXNfaWRcIjpcIjEzOVwifSx7XCJzeXNfbmFtZVwiOlwi5Zu96LWE566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjE0MFwifSx7XCJzeXNfbmFtZVwiOlwi5Lmh6LSi5Y6/566h57O757ufXCIsXCJzeXNfaWRcIjpcIjE0MVwifSx7XCJzeXNfbmFtZVwiOlwi6aKE566X57yW5Yi2566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjE0MlwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5biC5pys57qnX+mDqOmXqOmihOeul1wiLFwic3lzX2lkXCI6XCIxNDNcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/luILmnKznuqdf6Z2e56iO5pS2566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjE0NFwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W4guacrOe6p1/pooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMTQ1XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf6LSi5pS/5LiT5oi3XCIsXCJzeXNfaWRcIjpcIjE0NlwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/pnZ7nqI7mlLblhaXnrqHnkIZcIixcInN5c19pZFwiOlwiMTQ3XCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lqt5rmW5Yy6X+WbveW6k+mbhuS4reaUr+S7mOeuoeeQhlwiLFwic3lzX2lkXCI6XCIxNDhcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/pooTnrpfmjIfmoIfnrqHnkIZcIixcInN5c19pZFwiOlwiMTQ5XCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lqt5rmW5Yy6X+aAu+mihOeul+S8muiuoeaguOeul1wiLFwic3lzX2lkXCI6XCIxNTBcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf6LSi5pS/5LiT5oi35qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjE1MVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf55uQ6YO95Yy6X+mdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNTJcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfaWRcIjpcIjE1M1wifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+ebkOmDveWMul/mgLvpooTnrpfkvJrorqHmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMTU0XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lk43msLTljr9f6YOo6Zeo6aKE566X566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjE1NVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WTjeawtOWOv1/otKLmlL/kuIDkvZPljJbkv6Hmga/ns7vnu59cIixcInN5c19pZFwiOlwiMTU2XCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5ZON5rC05Y6/X+mdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNTdcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+a7qOa1t+WOv+i0ouaUv+S4gOS9k+WMllwiLFwic3lzX2lkXCI6XCIxNThcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/pmJzlroHljr9f6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjE1OVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+mYnOWugeWOv1/otKLmlL/nrqHnkIbova/ku7bnlKjlj4tVOFwiLFwic3lzX2lkXCI6XCIxNjBcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WwhOmYs+WOv1/otKLmlL/pooTnrpfmiafooYzkuIDkvZPljJbns7vnu59cIixcInN5c19pZFwiOlwiMTYxXCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5bu65rmW5Y6/X+mdnueojuaUtue8tFwiLFwic3lzX2lkXCI6XCIxNjJcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W7uua5luWOv1/otKLmlL/kuIDkvZPljJZcIixcInN5c19pZFwiOlwiMTYzXCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5bu65rmW5Y6/X+WbveW6k+mbhuS4reaUr+S7mFwiLFwic3lzX2lkXCI6XCIxNjRcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/pg6jpl6jpooTnrpfnvJblrqHns7vnu59cIixcInN5c19pZFwiOlwiMTY1XCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lic5Y+w5biCX+i0ouaUv+S4gOS9k+WMluS/oeaBr+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxNjZcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/otKLmlL/kuJPmiLfmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMTY3XCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lic5Y+w5biCX+mdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNjhcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/mgLvpooTnrpfkvJrorqHmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMTY5XCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5aSn5Liw5Yy6X+mDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxNzBcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+Wkp+S4sOWMul/otKLmlL/kuIDkvZPljJZcIixcInN5c19pZFwiOlwiMTcxXCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5aSn5Liw5Yy6X+aAu+mihOeul+S8muiuoeaguOeul+i0ouWKoei9r+S7tlwiLFwic3lzX2lkXCI6XCIxNzJcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+e7j+a1juaKgOacr+W8gOWPkeWMul/pg6jpl6jpooTnrpfova/ku7ZcIixcInN5c19pZFwiOlwiMTczXCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf57uP5rWO5oqA5pyv5byA5Y+R5Yy6X+WbveW6k+mbhuS4reaUr+S7mFwiLFwic3lzX2lkXCI6XCIxNzRcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6ICB6Z2e56iO5pS25YWl5b6B57y057O757ufXCIsXCJzeXNfaWRcIjpcIjE3NVwifSx7XCJzeXNfbmFtZVwiOlwi5oms5bee6LSi5pS/5LiA5L2T5YyW5L+h5oGv566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjE3NlwifSx7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5b6B5pS2XCIsXCJzeXNfaWRcIjpcIjE3N1wifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfnvJbliLZcIixcInN5c19pZFwiOlwiMTc4XCJ9LHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXmlLbnvLRcIixcInN5c19pZFwiOlwiMTc5XCJ9LHtcInN5c19uYW1lXCI6XCLooYzmlL/kuovkuJrmgKfljZXkvY3lm73mnInotYTkuqfnrqHnkIZcIixcInN5c19pZFwiOlwiMTgwXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+S4muWKoeezu+e7n1wiLFwic3lzX2lkXCI6XCIxODFcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4muWKoee7vOWQiOezu+e7n1wiLFwic3lzX2lkXCI6XCIxODJcIn0se1wic3lzX25hbWVcIjpcIuaxn+mDveW8gOWPkeWMuumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCIxODNcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfaWRcIjpcIjE4NFwifSx7XCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6LSi5pS/5LiA5L2T5YyW5Lia5Yqh566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjE4NVwifSx7XCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6Z2e56iO5pS257y057O757ufXCIsXCJzeXNfaWRcIjpcIjE4NlwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLlr4zmt7HljY/pgJrlt6XotYTnu5/lj5Hns7vnu59cIixcInN5c19pZFwiOlwiMTg3XCJ9LHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaVcIixcInN5c19pZFwiOlwiMTg4XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/nu7zlkIjkuJrliqHns7vnu59cIixcInN5c19pZFwiOlwiMTg5XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfaWRcIjpcIjE5MFwifSx7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/pnZ7nqI7mlLblhaXns7vnu59cIixcInN5c19pZFwiOlwiMTkxXCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5biC5pys57qnX+e7qeaViOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxOTJcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/pooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMTkzXCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5biC5pys57qnX+e7vOWQiOayu+eojuezu+e7n1wiLFwic3lzX2lkXCI6XCIxOTRcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/mtbfpmbXljLpf6YOo6Zeo6aKE566X57yW5Yi257O757ufXCIsXCJzeXNfaWRcIjpcIjE5NVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5rW36Zm15Yy6X+WOv+WMuui0ouaUv+S4gOS9k+WMllwiLFwic3lzX2lkXCI6XCIxOTZcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/pq5jmuK/ljLpf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjE5N1wifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+mDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxOThcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lp5zloLDljLpf6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfaWRcIjpcIjE5OVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+mdnueojuaUtue8tOezu+e7n1wiLFwic3lzX2lkXCI6XCIyMDBcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lp5zloLDljLpf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjIwMVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5Yy76I2v6auY5paw5Yy6X+i0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2lkXCI6XCIyMDJcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lhbTljJbluIJf6YOo6Zeo6aKE566XXCIsXCJzeXNfaWRcIjpcIjIwM1wifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5YW05YyW5biCX+mdnueojuaUtue8tFwiLFwic3lzX2lkXCI6XCIyMDRcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lhbTljJbluIJf5Zu95bqT6ZuG5Lit5pSv5LuYXCIsXCJzeXNfaWRcIjpcIjIwNVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf6Z2W5rGf5biCX+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCIyMDZcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/pnZbmsZ/luIJf6Z2e56iO5pS25YWl5pS257y0XCIsXCJzeXNfaWRcIjpcIjIwN1wifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf6Z2W5rGf5biCX+mDqOmXqOmihOeul+e8luWuoeezu+e7n1wiLFwic3lzX2lkXCI6XCIyMDhcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/ms7DlhbTluIJf6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfaWRcIjpcIjIwOVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5rOw5YW05biCX+mdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIyMTBcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/ms7DlhbTluIJf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjIxMVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMjEyXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJblubPlj7Dlj4rlm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19pZFwiOlwiMjEzXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuaWsOS4reWkp+mdnueojuaUtuWFpeeuoeeQhlwiLFwic3lzX2lkXCI6XCIyMTRcIn0se1wic3lzX25hbWVcIjpcIuiBlOWPi+i0ouWKoeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIyMTVcIn0se1wic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mOOAgeaMh+agh+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIyMTZcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5byA5Y+R5Yy65oC76aKE566X57O757ufXCIsXCJzeXNfaWRcIjpcIjIxN1wifSx7XCJzeXNfbmFtZVwiOlwi5Zu95bqT6LSm5Yqh57O757ufXCIsXCJzeXNfaWRcIjpcIjIxOFwifSx7XCJzeXNfbmFtZVwiOlwi5YyW5a2m5bel5Lia5Zut5Yy66Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjIxOVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXotKblpZdcIixcInN5c19pZFwiOlwiMjIwXCJ9LHtcInN5c19uYW1lXCI6XCLljJblrablt6XkuJrlm63ljLrpooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMjIxXCJ9LHtcInN5c19uYW1lXCI6XCLkvJrorqHmoLjnrpdcIixcInN5c19pZFwiOlwiMjIyXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoei0plwiLFwic3lzX2lkXCI6XCIyMjNcIn0se1wic3lzX25hbWVcIjpcIumihOeul+WGheWkluaUtuaUr+aguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyMjRcIn0se1wic3lzX25hbWVcIjpcIui0puaIt+aguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyMjVcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5oC76aKE566X5qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjIyNlwifSx7XCJzeXNfbmFtZVwiOlwi6LSm5Yqh5aSE55CG57O757uf77yI5pS25pSv5YiG57G75pS56Z2p5Y2H57qn54mI77yJXCIsXCJzeXNfaWRcIjpcIjIyN1wifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/6aKE566X5aSW5Lia5YqhXCIsXCJzeXNfaWRcIjpcIjIyOFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLnlKjlj4tVOFIxMOi0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2lkXCI6XCIyMjlcIn0se1wic3lzX25hbWVcIjpcIuW8gOWPkeWMuui0ouaUv+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyMzBcIn0se1wic3lzX25hbWVcIjpcIumrmOaWsOWMuuaAu+mihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyMzFcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5byA5Y+R5Yy65YWs5YWx6LSi5pS/5pyN5Yqh5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjIzMlwifSx7XCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQLVU4566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjIzM1wifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WfjuWNl+aWsOWMul/lm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19pZFwiOlwiMjM0XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/ln47ljZfmlrDljLpf5oC76aKE566X6LSm5Yqh5aSE55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjIzNVwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/6aKE566X5oyH5qCH566h55CGXCIsXCJzeXNfaWRcIjpcIjIzNlwifSx7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/ooYzmlL/nrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMjM3XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuaWsOS4reWkp+i0ouWKoei9r+S7tlwiLFwic3lzX2lkXCI6XCIyMzhcIn0se1wic3lzX25hbWVcIjpcIuW8gOWPkeWMuuaWsOS4reWkp+i0ouWKoeaguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyMzlcIn0se1wic3lzX25hbWVcIjpcIuW8gOWPkeWMuui0puWKoeezu+e7n1wiLFwic3lzX2lkXCI6XCIyNDBcIn1dO1xyXG5cclxuXHRleHBvcnQgdmFyIG9yaWdpbl9wbGFjZV9hcnIgPSBbe1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAwXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566XXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMFwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDBcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAwXCIsXCJzeXNfbmFtZVwiOlwi6LWE5Lqn566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkNHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIueOhOatpuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMlwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLnp6bmt67ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDRcIixcInN5c19uYW1lXCI6XCLnlKjlj4votKLmlL/nu7zlkIjnrqHnkIbkv6Hmga/ns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLlu7rpgrrljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDVcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi6byT5qW85Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTA2XCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LQSsrXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5rWm5Y+j5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTExXCIsXCJzeXNfbmFtZVwiOlwi5rWm5Y+j6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5qCW6Zye5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTEzXCIsXCJzeXNfbmFtZVwiOlwi5qCW6Zye5Yy66LSi5pS/5Lia5Yqh5L+h5oGv566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi6Zuo6Iqx5Y+w5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTE0XCIsXCJzeXNfbmFtZVwiOlwi5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5rGf5a6B5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTE1XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5rGf5a6B5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTE1XCIsXCJzeXNfbmFtZVwiOlwi5ruo5rGf5byA5Y+R5Yy66LSi5pS/5YiG5bGAXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5rGf5a6B5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTE1XCIsXCJzeXNfbmFtZVwiOlwi5rGf5a6B57uP5rWO5oqA5pyv5byA5Y+R5Yy66LSi5pS/5YiG5bGAXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5rGf5a6B5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTE1XCIsXCJzeXNfbmFtZVwiOlwi5rGf5a6B56eR5a2m5Zut6LSi5pS/5YiG5bGAXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5YWt5ZCI5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTE2XCIsXCJzeXNfbmFtZVwiOlwi5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi6auY5rez5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTE4XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5rqn5rC05Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTI0XCIsXCJzeXNfbmFtZVwiOlwiQSsr6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjAwXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjAwXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5pS257y0566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuW0h+WuieWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwMlwiLFwic3lzX25hbWVcIjpcIumdnueojuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLltIflronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDJcIixcInN5c19uYW1lXCI6XCLkuIDkvZPljJbpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLljZfplb/ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDNcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5Y2X6ZW/5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjAzXCIsXCJzeXNfbmFtZVwiOlwi5LiA5L2T5YyWXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5YyX5aGY5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjA0XCIsXCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuY566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIumUoeWxseWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwNVwiLFwic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mFwiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLplKHlsbHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDVcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpflj4rpnZ7nqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTX0ZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmg6DlsbHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDZcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmu6jmuZbljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMTFcIixcInN5c19uYW1lXCI6XCLpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5ruo5rmW5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjExXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIua7qOa5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIxMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMTRcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjE0XCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS257y057O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIxNFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmsZ/pmLTluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyODFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLlrpzlhbTluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyODJcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLbnvLTns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5a6c5YW05biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjgyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAwXCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex6aKE566X5omn6KGMXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwMFwiLFwic3lzX25hbWVcIjpcIueUqOWPi+mdnueojuWPiuelqOaNrlwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMDBcIixcInN5c19uYW1lXCI6XCLnlKjlj4vpooTnrpfmiafooYxcIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi6byT5qW85Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAyXCIsXCJzeXNfbmFtZVwiOlwi5rGf6IuP55yB6LSi5pS/6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIum8k+alvOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwMlwiLFwic3lzX25hbWVcIjpcIueUqOWPi+mAmueUqOi9r+S7tlwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLkupHpvpnljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMDNcIixcInN5c19uYW1lXCI6XCLmsZ/oi4/nnIHotKLmlL/pooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5LqR6b6Z5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAzXCIsXCJzeXNfbmFtZVwiOlwi6IGU5Y+L6L2v5Lu2L+mAmueUqOi0ouWKoVwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLkupHpvpnljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMDNcIixcInN5c19uYW1lXCI6XCLnlKjlj4tHUlBHLVU4UjEw6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIui0vuaxquWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwNVwiLFwic3lzX25hbWVcIjpcIueUqOWPi0dQUC1SMTDotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5rOJ5bGx5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzExXCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6LSi5pS/5LiA5L2T5YyW566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi6ZOc5bGx5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzEyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5Yqh57uf5LiA5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIumTnOWxseWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMxMlwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLpk5zlsbHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMTJcIixcInN5c19uYW1lXCI6XCLlhazlhbHotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5Liw5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzIxXCIsXCJzeXNfbmFtZVwiOlwiQSsr6LSi5pS/5LiA5L2T5YyW5L+h5oGv5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5Liw5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzIxXCIsXCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn5YWs5YWx6LSi5Yqh566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuaym+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMyMlwiLFwic3lzX25hbWVcIjpcIuWvjOa3sei0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuaym+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMyMlwiLFwic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouaUv+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLnnaLlroHljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMjRcIixcInN5c19uYW1lXCI6XCLlr4zmt7HljY/pgJrotKLmlL/kuIDkvZPljJbkuJrliqHnrqHnkIbns7vnu5/ova/ku7ZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLnnaLlroHljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMjRcIixcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLmlL/nrqHnkIbova/ku7ZHc29mdFwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLmlrDmsoLluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzODFcIixcInN5c19uYW1lXCI6XCLmsZ/oi4/nnIHotKLmlL/pooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi6YKz5beeXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzgyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDAwXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5Lia5Yqh57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5aSp5a6B5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5aSp5a6B5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDAyXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuWkqeWugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwMlwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLpkp/mpbzljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDRcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA0XCIsXCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIumSn+alvOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwNFwiLFwic3lzX25hbWVcIjpcIueUqOasvuiuoeWIkuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkpIR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLpkp/mpbzljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDRcIixcInN5c19uYW1lXCI6XCLmjIfmoIfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJaQkdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA0XCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWllTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5paw5YyX5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDExXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/57u85ZCI5Lia5Yqh566h55CG5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5q2m6L+b5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDEyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5rqn6Ziz5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDgxXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566XXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIua6p+mYs+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQ4MVwiLFwic3lzX25hbWVcIjpcIuW3pei1hOe7n+WPkVwiLFwic3lzX2NvZGVcIjpcIkdaVEZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLmuqfpmLPluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0ODFcIixcInN5c19uYW1lXCI6XCLlm73mnInotYTkuqdcIixcInN5c19jb2RlXCI6XCJaQ0dMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5rqn6Ziz5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDgxXCIsXCJzeXNfbmFtZVwiOlwi5Lmh6ZWH6Z2e56iO5pS25YWlXCIsXCJzeXNfY29kZVwiOlwiWFpGU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIua6p+mYs+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQ4MVwiLFwic3lzX25hbWVcIjpcIuS5oemVh+mbhuS4reaUr+S7mFwiLFwic3lzX2NvZGVcIjpcIlhaR0tcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLph5HlnZvljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0ODJcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTAwXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5b6B57y057O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwMFwiLFwic3lzX25hbWVcIjpcIumihOeul+e8luWItuS4juaJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlt6XkuJrlm63ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDFcIixcInN5c19uYW1lXCI6XCLpooTnrpfnrqHnkIbnu7zlkIjkuJrliqHlubPlj7BcIixcInN5c19jb2RlXCI6XCJZU0dMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi6JmO5LiY5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA1XCIsXCJzeXNfbmFtZVwiOlwidTjnrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJDWkdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi6JmO5LiY5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA1XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5oyH5qCH566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkJHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuiZjuS4mOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNVwiLFwic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLomY7kuJjljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDVcIixcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAtUjnotKLliqHnrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJDV0dMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi6JmO5LiY5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA1XCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQLVU46LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiQ1dHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuiZjuS4mOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNVwiLFwic3lzX25hbWVcIjpcIui0puWKoeWkhOeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpXQ0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlkLTkuK3ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDZcIixcInN5c19uYW1lXCI6XCJSOWnotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJDWkdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5ZC05Lit5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA2XCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566XXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWQtOS4reWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWQtOS4reWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNlwiLFwic3lzX25hbWVcIjpcIumdnueojuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLnm7jln47ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDdcIixcInN5c19uYW1lXCI6XCJ1OOi0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIkNaR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLnm7jln47ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDdcIixcInN5c19uYW1lXCI6XCLnm7jln47ljLrotKLmlL/nu7zlkIjnrqHnkIbkv6Hmga/ns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlp5Hoi4/ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDhcIixcInN5c19uYW1lXCI6XCLotKLmlL/pnZ7nqI7nu7zlkIjnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5aeR6IuP5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA4XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/57u85ZCI566h55CG5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5ZC05rGf5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA5XCIsXCJzeXNfbmFtZVwiOlwi5ZC05rGf5Yy66LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5bi454af5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTgxXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5pS257y0566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW4uOeGn+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4MVwiLFwic3lzX25hbWVcIjpcIueUqOWPi1I5XCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW4uOeGn+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4MVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlvKDlrrbmuK/luIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODJcIixcInN5c19uYW1lXCI6XCLotKLmlL/lhazlhbHlupTnlKjmnI3liqHlubPlj7BcIixcInN5c19jb2RlXCI6XCJHR0ZXXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5byg5a625riv5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTgyXCIsXCJzeXNfbmFtZVwiOlwi6YeR6J22Sy8z5Yib5paw566h55CG5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiQ1pHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW8oOWutua4r+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4MlwiLFwic3lzX25hbWVcIjpcIui0puWKoeaVsOaNruezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLmmIblsbHluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODNcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5piG5bGx5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTgzXCIsXCJzeXNfbmFtZVwiOlwi5YWs5YWx6LSi5pS/5pyN5Yqh5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiR0dGV1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuaYhuWxseW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4M1wiLFwic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlpKrku5PluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODVcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5aSq5LuT5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTg1XCIsXCJzeXNfbmFtZVwiOlwi5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWkquS7k+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4NVwiLFwic3lzX25hbWVcIjpcIumhueebruW6k1wiLFwic3lzX2NvZGVcIjpcIlhNS1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWkquS7k+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4NVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MDBcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5bSH5bed5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjAyXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua4r+mXuOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+aAu+mihOeul++8iOWklu+8ieS4k+aIt+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTV1pIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5riv6Ze45Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjExXCIsXCJzeXNfbmFtZVwiOlwi5Z+O5bu66LWE6YeR5LiT5oi3566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiQ0paSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua4r+mXuOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMVwiLFwic3lzX25hbWVcIjpcIuWGnOS/neS4k+aIt+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIk5CWkhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmuK/pl7jljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MTFcIixcInN5c19uYW1lXCI6XCLlhpzkuJrlj5HlsZXln7rph5HkuJPmiLfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJORkpKXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5riv6Ze45Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjExXCIsXCJzeXNfbmFtZVwiOlwi5aSx5Zyw5Yac5rCR5L+d6Zqc6LWE6YeR5LiT5oi3XCIsXCJzeXNfY29kZVwiOlwiU0ROTVwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua4r+mXuOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLpgJrlt57ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MTJcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXlvoHnrqHns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi6YCa5bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjEyXCIsXCJzeXNfbmFtZVwiOlwi5bel6LWE57uf5Y+R5Lq65ZGY5L+h5oGvXCIsXCJzeXNfY29kZVwiOlwiR1pURlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIumAmuW3nuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMlwiLFwic3lzX25hbWVcIjpcIumihOeul+aMh+aghy3lm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi6YCa5bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjEyXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+WuieWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYyMVwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+e8luWuoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbflronljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MjFcIixcInN5c19uYW1lXCI6XCLlhazliqHmtojotLnnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJHV1hGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW35a6J5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjIxXCIsXCJzeXNfbmFtZVwiOlwi5Zu95pyJ6LWE5Lqn566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkNHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+WuieWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYyMVwiLFwic3lzX25hbWVcIjpcIuWMuumVh+i0ouaUv+euoeeQhuKAnOS4gOS9k+WMluKAneezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlhaWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW35a6J5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjIxXCIsXCJzeXNfbmFtZVwiOlwi5Y6/5pys57qn6LSi5pS/566h55CG4oCc5LiA5L2T5YyW4oCd57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5aaC5Lic5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjIzXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+L5pS/5YqhXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI6KGM5pS/5Y+j5LiT6aG56LWE6YeR77yJXCIsXCJzeXNfY29kZVwiOlwiWkhYWlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOe7j+W7uuWPo+S4k+mhuei1hOmHke+8iVwiLFwic3lzX2NvZGVcIjpcIlpISkpcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjlhpzkuJrkv53pmankuJPotKbvvIlcIixcInN5c19jb2RlXCI6XCJaSE5CXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI5Yac5Lia57u85ZCI5byA5Y+R5LiT6LSm77yJXCIsXCJzeXNfY29kZVwiOlwiWkhORlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOekvuS/nei1hOmHkeS4k+i0pu+8iVwiLFwic3lzX2NvZGVcIjpcIlpIU0JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjlnJ/lnLDlh7rorqnkuJPotKbvvIlcIixcInN5c19jb2RlXCI6XCJaSFREXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI57u85ZCI5Y+j5LiT6aG56LWE6YeR77yJXCIsXCJzeXNfY29kZVwiOlwiWkhaSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLlhpzkuJrkuJPlkJHlj4rlhpzkuJrlj5HlsZXln7rph5HkuJPpoblcIixcInN5c19jb2RlXCI6XCJORlpYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoeaguOeul1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlpoLnmovluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODJcIixcInN5c19uYW1lXCI6XCLph5HotKLlt6XnqIvkuIDkvZPljJbmlK/mkpHlubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbfpl6jluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODRcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLbnvLRcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW36Zeo5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjg0XCIsXCJzeXNfbmFtZVwiOlwi5a2m5qCh6aKE566X5omn6KGMXCIsXCJzeXNfY29kZVwiOlwiWVNaWFhYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW36Zeo5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjg0XCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGMXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+mXqOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4NFwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbfpl6jluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODRcIixcInN5c19uYW1lXCI6XCLkuJPpobnotYTph5FcIixcInN5c19jb2RlXCI6XCJaWFpKXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW36Zeo5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjg0XCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566XXCIsXCJzeXNfY29kZVwiOlwiWllTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzAwXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcwMFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MDBcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzAwXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIui/nuS6keWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcwM1wiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+i0puWKoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLov57kupHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MDNcIixcInN5c19uYW1lXCI6XCLlr4zmt7HotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLmtbflt57ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MDZcIixcInN5c19uYW1lXCI6XCLlr4zmt7HotKLmlL/kuIDkvZPljJbkuJrliqHnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLmtbflt57ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MDZcIixcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLmlL/nrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLotaPmpobljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MjFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLotaPmpobljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MjFcIixcInN5c19uYW1lXCI6XCLlm73mnInotYTkuqfns7vnu59cIixcInN5c19jb2RlXCI6XCJDWkdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5Lic5rW35Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzIyXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuS4nOa1t+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcyMlwiLFwic3lzX25hbWVcIjpcIuWbveW6k+S4k+mhuei1hOmHkeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpYWkpcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLkuJzmtbfljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MjJcIixcInN5c19uYW1lXCI6XCLlm73mnInotYTkuqfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJaQ0dMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5Lic5rW35Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzIyXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIueBjOS6keWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcyM1wiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIueBjOWNl+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcyNFwiLFwic3lzX25hbWVcIjpcIumdnueojuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLngYzljZfljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MjRcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAwXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS257y0566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMFwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjmlrDlhpzkv53vvIlcIixcInN5c19jb2RlXCI6XCJaSE5CXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rKz5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5Z+O5biC5bGF5rCR5Yy755aX57uf562577yJXCIsXCJzeXNfY29kZVwiOlwiWkhZQlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4heays+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOmbhuS4reaUr+S7mOS4reW/g++8iVwiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjop6Plm7Dph5HvvIlcIixcInN5c19jb2RlXCI6XCJaSEpLXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rKz5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5pen5Z+O5pS56YCg77yJXCIsXCJzeXNfY29kZVwiOlwiWkhDR1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4heays+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOekvuS/nei1hOmHkei0puaIt++8iVwiLFwic3lzX2NvZGVcIjpcIlpIU0JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjlnJ/lnLDlh7rorqnkuJPluJDvvIlcIixcInN5c19jb2RlXCI6XCJaSFREXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rKz5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI6aKE5ouo5Y+K6Z2e6ZuG5Lit5pSv5LuY5Lit5b+D77yJXCIsXCJzeXNfY29kZVwiOlwiWkhZQlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4heays+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOmihOeul+Wklui1hOmHke+8iVwiLFwic3lzX2NvZGVcIjpcIllTV1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4heays+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMlwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoVwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67lronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDNcIixcInN5c19uYW1lXCI6XCLotKLliqHmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3ruWuieWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwM1wiLFwic3lzX25hbWVcIjpcIuW3pei1hOe7n+WPkeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdaVEZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67lronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDNcIixcInN5c19uYW1lXCI6XCLnlKjlj4vmlL/liqFcIixcInN5c19jb2RlXCI6XCJZWVpXXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3ruWuieWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwM1wiLFwic3lzX25hbWVcIjpcIumihOeul+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67lronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDNcIixcInN5c19uYW1lXCI6XCLpooTnrpflpJbotYTph5HvvIjku47ogZTnvZHlrqHorqHkuK3lj5bmlbDvvIlcIixcInN5c19jb2RlXCI6XCJZU1dcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67lronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDNcIixcInN5c19uYW1lXCI6XCLpooTnrpfnvJblrqHns7vnu59cIixcInN5c19jb2RlXCI6XCJZU0JTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu6Zi05Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODA0XCIsXCJzeXNfbmFtZVwiOlwiRzYtRei0ouWKoeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkNXR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67pmLTljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDRcIixcInN5c19uYW1lXCI6XCLmsZ/oi4/nnIHotKLmlL/pooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu6Zi05Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODA0XCIsXCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn5YWs5YWx6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiQ1pHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3rumYtOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwNFwiLFwic3lzX25hbWVcIjpcIueUqOWPi0dSUC9SOei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIkNaR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67pmLTljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDRcIixcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAtVThSMTBcIixcInN5c19jb2RlXCI6XCJDV0dMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNCU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4hea1puWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgxMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOWfuuW7uuaIt++8iVwiLFwic3lzX2NvZGVcIjpcIlpISkpcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmtabljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjpm4bkuK3mlK/ku5jkuK3lv4PvvIlcIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rWm5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODExXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG57O757uf77yI5Yac5Lia57u85ZCI5byA5Y+R77yJXCIsXCJzeXNfY29kZVwiOlwiWkhORlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4hea1puWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgxMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOmihOeul+Wklui1hOmHke+8iVwiLFwic3lzX2NvZGVcIjpcIllTV1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4hea1puWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgxMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOaUr+WGnOS4k+aIt++8iVwiLFwic3lzX2NvZGVcIjpcIlpIWk5cIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmtabljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjmgLvpooTnrpfvvIlcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5raf5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODI2XCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5b6B57y057O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua2n+awtOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgyNlwiLFwic3lzX25hbWVcIjpcIuWbvei1hOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpDR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmtp/msLTljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MjZcIixcInN5c19uYW1lXCI6XCLkuaHotKLljr/nrqHns7vnu59cIixcInN5c19jb2RlXCI6XCJYQ1hHXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5raf5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODI2XCIsXCJzeXNfbmFtZVwiOlwi5Lmh6LSi5Y6/566h57O757ufXCIsXCJzeXNfY29kZVwiOlwiWENYR1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua2n+awtOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgyNlwiLFwic3lzX25hbWVcIjpcIumihOeul+e8luWItueuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTQlNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmtp/msLTljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MjZcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5rSq5rO95Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODI5XCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua0quazveWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgyOVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLnm7HnnJnljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MzBcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLph5HmuZbljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MzFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAwXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W4guacrOe6p1/pg6jpl6jpooTnrpdcIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAwXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W4guacrOe6p1/pnZ7nqI7mlLbnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAwXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W4guacrOe6p1/pooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lqt5rmW5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/otKLmlL/kuJPmiLdcIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lqt5rmW5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/pnZ7nqI7mlLblhaXnrqHnkIZcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lqt5rmW5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/lm73lupPpm4bkuK3mlK/ku5jnrqHnkIZcIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lqt5rmW5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/pooTnrpfmjIfmoIfnrqHnkIZcIixcInN5c19jb2RlXCI6XCJaQkdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lqt5rmW5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/mgLvpooTnrpfkvJrorqHmoLjnrpdcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi55uQ6YO95Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAzXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+ebkOmDveWMul/otKLmlL/kuJPmiLfmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi55uQ6YO95Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAzXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+ebkOmDveWMul/pnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi55uQ6YO95Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAzXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+ebkOmDveWMul/lm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi55uQ6YO95Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAzXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+ebkOmDveWMul/mgLvpooTnrpfkvJrorqHmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5ZON5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTIxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WTjeawtOWOv1/pg6jpl6jpooTnrpfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5ZON5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTIxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WTjeawtOWOv1/otKLmlL/kuIDkvZPljJbkv6Hmga/ns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlk43msLTljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MjFcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5ZON5rC05Y6/X+mdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLmu6jmtbfljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MjJcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5ruo5rW35Y6/6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi6Zic5a6B5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTIzXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+mYnOWugeWOv1/otKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJDWkdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi6Zic5a6B5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTIzXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+mYnOWugeWOv1/otKLmlL/nrqHnkIbova/ku7bnlKjlj4tVOFwiLFwic3lzX2NvZGVcIjpcIllZWldcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlsITpmLPljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MjRcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5bCE6Ziz5Y6/X+i0ouaUv+mihOeul+aJp+ihjOS4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuW7uua5luWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyNVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lu7rmuZbljr9f6Z2e56iO5pS257y0XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuW7uua5luWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyNVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lu7rmuZbljr9f6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5bu65rmW5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTI1XCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W7uua5luWOv1/lm73lupPpm4bkuK3mlK/ku5hcIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lic5Y+w5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/pg6jpl6jpooTnrpfnvJblrqHns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lic5Y+w5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/otKLmlL/kuIDkvZPljJbkv6Hmga/ns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLkuJzlj7DluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5ODFcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lic5Y+w5biCX+i0ouaUv+S4k+aIt+aguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLkuJzlj7DluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5ODFcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lic5Y+w5biCX+mdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLkuJzlj7DluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5ODFcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lic5Y+w5biCX+aAu+mihOeul+S8muiuoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlpKfkuLDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5ODJcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5aSn5Liw5Yy6X+mDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlpKfkuLDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5ODJcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5aSn5Liw5Yy6X+i0ouaUv+S4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuWkp+S4sOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDk4MlwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lpKfkuLDljLpf5oC76aKE566X5Lya6K6h5qC4566X6LSi5Yqh6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIue7j+a1juaKgOacr+W8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDk5MVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nu4/mtY7mioDmnK/lvIDlj5HljLpf6YOo6Zeo6aKE566X6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIue7j+a1juaKgOacr+W8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDk5MVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nu4/mtY7mioDmnK/lvIDlj5HljLpf5Zu95bqT6ZuG5Lit5pSv5LuYXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDBcIixcInN5c19uYW1lXCI6XCLogIHpnZ7nqI7mlLblhaXlvoHnvLTns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAwXCIsXCJzeXNfbmFtZVwiOlwi5oms5bee6LSi5pS/5LiA5L2T5YyW5L+h5oGv566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5bm/6Zm15Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5bm/6Zm15Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAyXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIumCl+axn+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwM1wiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIumCl+axn+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwM1wiLFwic3lzX25hbWVcIjpcIumdnueojuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLpgpfmsZ/ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDNcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5a6d5bqU5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDIzXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5b6B5pS2XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuWuneW6lOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAyM1wiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLku6rlvoHluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwODFcIixcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfnvJbliLZcIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5Luq5b6B5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDgxXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5pS257y0XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuS7quW+geW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4MVwiLFwic3lzX25hbWVcIjpcIuihjOaUv+S6i+S4muaAp+WNleS9jeWbveaciei1hOS6p+euoeeQhlwiLFwic3lzX2NvZGVcIjpcIlpDR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLku6rlvoHluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwODFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi6auY6YKu5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDg0XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5Lia5Yqh57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5rGf6YO95Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDg4XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5Lia5Yqh57u85ZCI57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhZV1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuaxn+mDveWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4OFwiLFwic3lzX25hbWVcIjpcIuaxn+mDveW8gOWPkeWMuumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjExMDBcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLkuqzlj6PljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjExMDJcIixcInN5c19uYW1lXCI6XCLlr4zmt7HljY/pgJrotKLmlL/kuIDkvZPljJbkuJrliqHnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLkuqzlj6PljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjExMDJcIixcInN5c19uYW1lXCI6XCLlr4zmt7HljY/pgJrpnZ7nqI7mlLbnvLTns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5Lqs5Y+j5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTAyXCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa5bel6LWE57uf5Y+R57O757ufXCIsXCJzeXNfY29kZVwiOlwiR1pURlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIua2puW3nuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTExMVwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLmtqblt57ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjExMTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLmtqblt57ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjExMTFcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaVcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5Li55b6S5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTEyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/57u85ZCI5Lia5Yqh57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5Li56Ziz5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTgxXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuS4uemYs+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTE4MVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLmiazkuK3luIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjExODJcIixcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5oms5Lit5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTgyXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuWPpeWuueW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTE4M1wiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpVwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLlj6XlrrnluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjExODNcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAwXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/pg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAwXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/pnZ7nqI7mlLblhaXns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAwXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/nu6nmlYjnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJKWEdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAwXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/pooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAwXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/nu7zlkIjmsrvnqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJaSFpTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5rW36Zm15Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAyXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+a1t+mZteWMul/pg6jpl6jpooTnrpfnvJbliLbns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5rW36Zm15Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAyXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+a1t+mZteWMul/ljr/ljLrotKLmlL/kuIDkvZPljJZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLpq5jmuK/ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDNcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf6auY5riv5Yy6X+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLlp5zloLDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDRcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+mDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLlp5zloLDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDRcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+i0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuWnnOWgsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwNFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lp5zloLDljLpf6Z2e56iO5pS257y057O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuWnnOWgsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwNFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lp5zloLDljLpf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuWMu+iNr+mrmOaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwNVwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/ljLvoja/pq5jmlrDljLpf6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5YW05YyW5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjgxXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WFtOWMluW4gl/pg6jpl6jpooTnrpdcIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5YW05YyW5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjgxXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WFtOWMluW4gl/pnZ7nqI7mlLbnvLRcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5YW05YyW5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjgxXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WFtOWMluW4gl/lm73lupPpm4bkuK3mlK/ku5hcIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi6Z2W5rGf5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjgyXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+mdluaxn+W4gl/pooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi6Z2W5rGf5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjgyXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+mdluaxn+W4gl/pnZ7nqI7mlLblhaXmlLbnvLRcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi6Z2W5rGf5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjgyXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+mdluaxn+W4gl/pg6jpl6jpooTnrpfnvJblrqHns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5rOw5YW05biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjgzXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+azsOWFtOW4gl/pg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5rOw5YW05biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjgzXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+azsOWFtOW4gl/pnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5rOw5YW05biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjgzXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+azsOWFtOW4gl/pooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzAwXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMwMFwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMDBcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5a6/5Z+O5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+w5Y+K5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuWuv+WfjuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMwMlwiLFwic3lzX25hbWVcIjpcIuaWsOS4reWkp+mdnueojuaUtuWFpeeuoeeQhlwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLlrr/ln47ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMDJcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqHmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5a6/6LGr5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzExXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS257y0566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuWuv+ixq+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMxMVwiLFwic3lzX25hbWVcIjpcIuiBlOWPi+i0ouWKoeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkNXR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLlrr/osavljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMTFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rKt6Ziz5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzIyXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuayremYs+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyMlwiLFwic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mOOAgeaMh+agh+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLmsq3pmLPljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjJcIixcInN5c19uYW1lXCI6XCLlvIDlj5HljLrmgLvpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rKt6Ziz5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzIyXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6h5qC4566XXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuazl+mYs+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyM1wiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjFwiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLms5fmtKrljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjRcIixcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rOX5rSq5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzI0XCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuazl+a0quWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyNFwiLFwic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLms5fmtKrljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjRcIixcInN5c19uYW1lXCI6XCLlm73lupPotKbliqHns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi6auY5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAwR1hRXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuWMluW3peWbreWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMEhHWVwiLFwic3lzX25hbWVcIjpcIuWMluWtpuW3peS4muWbreWMuumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLnu4/mtY7mioDmnK/lvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDBKS1FcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXotKblpZdcIixcInN5c19jb2RlXCI6XCJGU1pUXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5YyW5bel5Zut5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAxSEdZXCIsXCJzeXNfbmFtZVwiOlwi5YyW5a2m5bel5Lia5Zut5Yy66aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIue7j+a1juaKgOacr+W8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMUpLUVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLljJblt6Xlm63ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDJIR1lcIixcInN5c19uYW1lXCI6XCLkvJrorqHmoLjnrpdcIixcInN5c19jb2RlXCI6XCJLWUhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi57uP5rWO5oqA5pyv5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAySktRXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6h6LSmXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIumUoeWxseW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwNUtGUVwiLFwic3lzX25hbWVcIjpcIumihOeul+WGheWkluaUtuaUr+aguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmu6jmuZbljLrpqazlsbHlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMTFLRlFcIixcInN5c19uYW1lXCI6XCLotKbmiLfmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5rGf6Zi05byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjgxa2ZxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5rGf6Zi05byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjgxa2ZxXCIsXCJzeXNfbmFtZVwiOlwi6LSm5oi35qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuWunOWFtOeOr+enkeWbrVwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDI4MktGUVwiLFwic3lzX25hbWVcIjpcIui0ouWKoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLlrpzlhbTlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyODJLRlFcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi57uP5rWO5oqA5pyv5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAwSktRXCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6LSi5pS/5LiA5L2T5YyW5Lia5Yqh566h55CG57O757uf6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi57uP5rWO5oqA5pyv5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAwSktRXCIsXCJzeXNfbmFtZVwiOlwi6LSm5Yqh5aSE55CG57O757uf77yI5pS25pSv5YiG57G75pS56Z2p5Y2H57qn54mI77yJXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuWkqeWugee7j+W8gOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwMkpLUVwiLFwic3lzX25hbWVcIjpcIui0puWKoeWkhOeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLpkp/mpbzljLrlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDRLRlFcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy65byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA1S0ZRXCIsXCJzeXNfbmFtZVwiOlwi55So5qy+6K6h5YiS57O757ufXCIsXCJzeXNfY29kZVwiOlwiSkhHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIumSn+alvOWMuuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwNktGUVwiLFwic3lzX25hbWVcIjpcIuaMh+agh+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpCR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLpkp/mpbzljLrlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDdLRlFcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLnu4/lvIDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MTJKS1FcIixcInN5c19uYW1lXCI6XCLotKLmlL/pooTnrpflpJbkuJrliqFcIixcInN5c19jb2RlXCI6XCJZU1dcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLnu4/lvIDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MTJKS1FcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLbnvLTns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi57uP5byA5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDEySktRXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuatpui/m+mrmOaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQxM0dYUVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIua6p+mYs+S4reWFs+adkVwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQ4MVpHQ1wiLFwic3lzX25hbWVcIjpcIueUqOWPi1U4UjEw6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5rqn6Ziz5Lit5YWz5p2R5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDgxWkdDS0ZcIixcInN5c19uYW1lXCI6XCLnlKjlj4tVOFIxMOi0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuebuOWfjuWMuuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwN0tGUVwiLFwic3lzX25hbWVcIjpcIuW8gOWPkeWMuui0ouaUv+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW4uOeGn+W4gumrmOaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4MUdYUVwiLFwic3lzX25hbWVcIjpcIumrmOaWsOWMuuaAu+mihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuaYhuWxseW4guW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4M0tGUVwiLFwic3lzX25hbWVcIjpcIuW8gOWPkeWMuuWFrOWFsei0ouaUv+acjeWKoeW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWkquS7k+W4guaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4NVhRXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWkquS7k+W4guaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4NlhRXCIsXCJzeXNfbmFtZVwiOlwi5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWkquS7k+W4guaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4N1hRXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYwMEtGUVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLoi4/pgJrlm63ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MDBTVFlcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi6YCa5bee5rm+56S66IyD5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjAwVFpXXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcwMUtGUVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpVwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDBLRlFcIixcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAtVTjnrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLln47ljZfmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MDBDWlhRXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WfjuWNl+aWsOWMul/lm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Z+O5Y2X5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAxQ1pYUVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/ln47ljZfmlrDljLpf5oC76aKE566X6LSm5Yqh5aSE55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuWMluW3peWbreWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMEhHWVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDBLRlFcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXmlLbnvLRcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi56eR5oqA5paw5Z+OXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAwS0pDXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuicgOWGiC3nmKbopb/muZbpo47mma/lkI3og5zljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDBTWEhcIixcInN5c19uYW1lXCI6XCLotKLmlL/pooTnrpfmjIfmoIfnrqHnkIZcIixcInN5c19jb2RlXCI6XCJaQkdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi6JyA5YaILeeYpuilv+a5lumjjuaZr+WQjeiDnOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMFNYSFwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoeaguOeul1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDFLRlFcIixcInN5c19uYW1lXCI6XCLkuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDJLRlFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi6auY6YKu5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDg0S0ZRXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5Lia5Yqh57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTAwWFFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDBcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5biC5pys57qnX+ihjOaUv+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlhaR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLmuZbmu6jmlrDln45cIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMDBIQlhDXCIsXCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn6LSi5Yqh6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIue7j+W8gOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMwMEpLUVwiLFwic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIua0i+ays+aWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMwMFlIWFFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5a6/6LGr5Yy65byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzExS0ZRXCIsXCJzeXNfbmFtZVwiOlwi5byA5Y+R5Yy65paw5Lit5aSn6LSi5Yqh5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuazl+a0quWOv+W8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyNEtGUVwiLFwic3lzX25hbWVcIjpcIuW8gOWPkeWMuui0puWKoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn1dO1xyXG5cclxuXHJcblxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gZ2V0Q291bnR5QnlDb2RlKGNvZGUpe1xyXG5cdFx0Ly92YXIganNvYmogPSBKU09OLnBhcnNlKG9yaWdpbl9wbGFjZV9hcnIpO1xyXG5cdFx0dmFyIGpzb2JqID0gb3JpZ2luX3BsYWNlX2FycjtcclxuXHJcblx0XHR2YXIganNvbmxlbmd0aCA9IGpzb2JqLmxlbmd0aDtcclxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwganNvbmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGlmKGpzb2JqW2ldLmNvdW50eV9jb2RlID09IGNvZGUpe1xyXG5cdFx0XHRcdHJldHVybiBqc29ialtpXS5jaXR5K2pzb2JqW2ldLmNvdW50eTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNvZGU7XHJcblx0fVxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gZ2V0Q29kZUJ5Q291bnR5KHBsYWNlKXtcclxuXHRcdHBsYWNlID0gcGxhY2UucmVwbGFjZSgvXFxzKlxcdCovZ2ltLFwiXCIpO1xyXG5cdFx0Ly92YXIganNvYmogPSBKU09OLnBhcnNlKG9yaWdpbl9wbGFjZV9hcnIpO1xyXG5cdFx0dmFyIGpzb2JqID0gb3JpZ2luX3BsYWNlX2FycjtcclxuXHJcblx0XHR2YXIganNvbmxlbmd0aCA9IGpzb2JqLmxlbmd0aDtcclxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwganNvbmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGlmKGpzb2JqW2ldLmNpdHkgPT09IFwiXCIgfHwganNvYmpbaV0uY2l0eSA9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdGlmKGpzb2JqW2ldLmNvdW50eSA9PT0gXCJcIiB8fCBqc29ialtpXS5jb3VudHkgPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRpZigocGxhY2UuaW5kZXhPZihqc29ialtpXS5jaXR5KSAhPSAtMSkgJiYgKHBsYWNlLmluZGV4T2YoanNvYmpbaV0uY291bnR5KSAhPSAtMSkpe1xyXG5cdFx0XHRcdHJldHVybiBqc29ialtpXS5jb3VudHlfY29kZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHBsYWNlO1xyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIGdldFN5c3RlbU5hbWVCeUlkKGlkKXtcclxuXHRcdHZhciB0ZW1Kc29uID0gc3lzdGVtX2FycjtcclxuXHRcdHZhciBzeXNfc2l6ZSA9IHRlbUpzb24ubGVuZ3RoO1xyXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeXNfc2l6ZTsgaSsrKSB7XHJcblx0XHRcdGlmKHRlbUpzb25baV0uc3lzX2lkID09IGlkKXtcclxuXHRcdFx0XHRyZXR1cm4gdGVtSnNvbltpXS5zeXNfbmFtZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGlkO1xyXG5cdH1cclxuXHJcblxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gZ2V0SWRCeVN5c3RlbU5hbWUobmFtZSl7XHJcblx0XHR2YXIgdGVtSnNvbiA9IHN5c3RlbV9hcnI7XHJcblx0XHR2YXIgc3lzX3NpemUgPSB0ZW1Kc29uLmxlbmd0aDtcclxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3lzX3NpemU7IGkrKykge1xyXG5cdFx0XHRpZih0ZW1Kc29uW2ldLnN5c19uYW1lID09IG5hbWUpe1xyXG5cdFx0XHRcdHJldHVybiB0ZW1Kc29uW2ldLnN5c19pZDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG5hbWU7XHJcblx0fVxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gZ2V0Q29kZUJ5U3lzdGVtTmFtZShuYW1lKXtcclxuXHRcdHZhciBqc29iaiA9IG9yaWdpbl9wbGFjZV9hcnI7XHJcblxyXG5cdFx0dmFyIGpzb25sZW5ndGggPSBqc29iai5sZW5ndGg7XHJcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGpzb25sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRpZihqc29ialtpXS5zeXNfbmFtZSA9PSBuYW1lKXtcclxuXHRcdFx0XHRyZXR1cm4ganNvYmpbaV0uc3lzX2NvZGU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuYW1lO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNJbnRlcmZhY2VzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwidXRpbEhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJyZWFkUGxhY2VkaXZpc2lvbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2NvbmZpZ3MvdHMvQ29uZmlnc0hlbHBlci50c1wiLz5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIGNvbnRleHQgPSAnL2t1YmVybmV0ZXMnO1xyXG4gIGV4cG9ydCB2YXIgaGFzaCA9ICcjJyArIGNvbnRleHQ7XHJcbiAgZXhwb3J0IHZhciBkZWZhdWx0Um91dGUgPSBoYXNoICsgJy9hcHBzJztcclxuICBleHBvcnQgdmFyIHBsdWdpbk5hbWUgPSAnS3ViZXJuZXRlcyc7XHJcbiAgZXhwb3J0IHZhciBwbHVnaW5QYXRoID0gJ3BsdWdpbnMva3ViZXJuZXRlcy8nO1xyXG4gIGV4cG9ydCB2YXIgdGVtcGxhdGVQYXRoID0gcGx1Z2luUGF0aCArICdodG1sLyc7XHJcbiAgZXhwb3J0IHZhciBsb2c6TG9nZ2luZy5Mb2dnZXIgPSBMb2dnZXIuZ2V0KHBsdWdpbk5hbWUpO1xyXG5cclxuICBleHBvcnQgdmFyIGtlZXBQb2xsaW5nTW9kZWwgPSB0cnVlO1xyXG5cclxuICBleHBvcnQgdmFyIGRlZmF1bHRJY29uVXJsID0gQ29yZS51cmwoXCIvaW1nL2t1YmVybmV0ZXMuc3ZnXCIpO1xyXG4gIGV4cG9ydCB2YXIgaG9zdEljb25VcmwgPSBDb3JlLnVybChcIi9pbWcvaG9zdC5zdmdcIik7XHJcblxyXG4gIC8vIHRoaXMgZ2V0cyBzZXQgYXMgYSBwcmUtYm9vdHN0cmFwIHRhc2tcclxuICBleHBvcnQgdmFyIG9zQ29uZmlnOkt1YmVybmV0ZXNDb25maWcgPSB1bmRlZmluZWQ7XHJcbiAgZXhwb3J0IHZhciBtYXN0ZXJVcmwgPSBcIlwiO1xyXG5cclxuICBleHBvcnQgdmFyIGRlZmF1bHRBcGlWZXJzaW9uID0gXCJ2MVwiO1xyXG4gIGV4cG9ydCB2YXIgZGVmYXVsdE9TQXBpVmVyc2lvbiA9IFwidjFcIjtcclxuICBleHBvcnQgdmFyIGxhYmVsRmlsdGVyVGV4dFNlcGFyYXRvciA9IFwiLFwiO1xyXG5cclxuICBleHBvcnQgdmFyIGRlZmF1bHROYW1lc3BhY2UgPSBcImRlZmF1bHRcIjtcclxuXHJcbiAgZXhwb3J0IHZhciBhcHBTdWZmaXggPSBcIi5hcHBcIjtcclxuXHJcbiAgLy8ga3ViZXJuZXRlcyBzZXJ2aWNlIG5hbWVzXHJcbiAgZXhwb3J0IHZhciBraWJhbmFTZXJ2aWNlTmFtZSA9IFwia2liYW5hXCI7XHJcbiAgZXhwb3J0IHZhciBmYWJyaWM4Rm9yZ2VTZXJ2aWNlTmFtZSA9IFwiZmFicmljOC1mb3JnZVwiO1xyXG4gIGV4cG9ydCB2YXIgZ29nc1NlcnZpY2VOYW1lID0gXCJnb2dzXCI7XHJcbiAgZXhwb3J0IHZhciBqZW5raW5zU2VydmljZU5hbWUgPSBcImplbmtpbnNcIjtcclxuICBleHBvcnQgdmFyIGFwaW1hblNlcnZpY2VOYW1lID0gJ2FwaW1hbic7XHJcbiAgZXhwb3J0IHZhciBpc09wZW5TaGlmdCA9IHRydWU7XHJcblxyXG4gIGV4cG9ydCB2YXIgc3NoU2VjcmV0RGF0YUtleXMgPSBbXCJzc2gta2V5XCIsIFwic3NoLWtleS5wdWJcIl07XHJcbiAgZXhwb3J0IHZhciBodHRwc1NlY3JldERhdGFLZXlzID0gW1widXNlcm5hbWVcIiwgXCJwYXNzd29yZFwiXTtcclxuXHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpIHtcclxuICAgIHZhciBucyA9IGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICBpZiAobnMpIHtcclxuICAgICAgcmV0dXJuIFwiL25hbWVzcGFjZXMvXCIgKyBucztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGFwaVByZWZpeCgpIHtcclxuICAgIHZhciBwcmVmaXggPSBDb3JlLnBhdGhHZXQob3NDb25maWcsIFsnYXBpJywgJ2s4cycsICdwcmVmaXgnXSk7XHJcbiAgICBpZiAoIXByZWZpeCkge1xyXG4gICAgICBwcmVmaXggPSAnYXBpJztcclxuICAgIH1cclxuICAgIHJldHVybiBDb3JlLnRyaW1MZWFkaW5nKHByZWZpeCwgJy8nKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBvc0FwaVByZWZpeCgpIHtcclxuICAgIHZhciBwcmVmaXggPSBDb3JlLnBhdGhHZXQob3NDb25maWcsIFsnYXBpJywgJ29wZW5zaGlmdCcsICdwcmVmaXgnXSk7XHJcbiAgICBpZiAoIXByZWZpeCkge1xyXG4gICAgICBwcmVmaXggPSAnb2FwaSc7XHJcbiAgICB9XHJcbiAgICB2YXIgYW5zd2VyID0gQ29yZS50cmltTGVhZGluZyhwcmVmaXgsICcvJyk7XHJcbiAgICBpZiAoIWlzT3BlblNoaWZ0KSB7XHJcbiAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oYXBpUHJlZml4KCksIGRlZmF1bHRPU0FwaVZlcnNpb24sIFwicHJveHlcIiwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCJzZXJ2aWNlcy90ZW1wbGF0ZXNcIiwgYW5zd2VyKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gbWFzdGVyQXBpVXJsKCkge1xyXG4gICAgcmV0dXJuIG1hc3RlclVybCB8fCBcIlwiO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdBUk5JTkcgLSB0aGlzIGV4Y2x1ZGVzIHRoZSBob3N0IG5hbWUgLSB5b3UgcHJvYmFibHkgd2FudCB0byB1c2U6IGt1YmVybmV0ZXNBcGlVcmwoKSBpbnN0ZWFkISEgKi9cclxuICBleHBvcnQgZnVuY3Rpb24ga3ViZXJuZXRlc0FwaVByZWZpeCgpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oYXBpUHJlZml4KCksIGRlZmF1bHRBcGlWZXJzaW9uKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBvcGVuc2hpZnRBcGlQcmVmaXgoKSB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKG9zQXBpUHJlZml4KCksIGRlZmF1bHRPU0FwaVZlcnNpb24pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHByZWZpeEZvclR5cGUodHlwZTpzdHJpbmcpIHtcclxuICAgIGlmICh0eXBlID09PSBXYXRjaFR5cGVzLk5BTUVTUEFDRVMpIHtcclxuICAgICAgcmV0dXJuIGt1YmVybmV0ZXNBcGlQcmVmaXgoKTtcclxuICAgIH1cclxuICAgIGlmIChfLmFueShOYW1lc3BhY2VkVHlwZXMuazhzVHlwZXMsICh0KSA9PiB0ID09PSB0eXBlKSkge1xyXG4gICAgICByZXR1cm4ga3ViZXJuZXRlc0FwaVByZWZpeCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKF8uYW55KE5hbWVzcGFjZWRUeXBlcy5vc1R5cGVzLCAodCkgPT4gdCA9PT0gdHlwZSkpIHtcclxuICAgICAgcmV0dXJuIG9wZW5zaGlmdEFwaVByZWZpeCgpO1xyXG4gICAgfVxyXG4gICAgLy8gbGV0cyBhc3N1bWUgaXRzIGFuIE9wZW5TaGlmdCBleHRlbnNpb24gdHlwZVxyXG4gICAgcmV0dXJuIG9wZW5zaGlmdEFwaVByZWZpeCgpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGt1YmVybmV0ZXNBcGlVcmwoKSB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKG1hc3RlckFwaVVybCgpLCBrdWJlcm5ldGVzQXBpUHJlZml4KCkpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIG9wZW5zaGlmdEFwaVVybCgpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIG9wZW5zaGlmdEFwaVByZWZpeCgpKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiByZXNvdXJjZXNVcmlGb3JLaW5kKHR5cGUsIG5zID0gbnVsbCkge1xyXG4gICAgaWYgKCFucykge1xyXG4gICAgICBucyA9IGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKG1hc3RlckFwaVVybCgpLCBwcmVmaXhGb3JUeXBlKHR5cGUpLCBuYW1lc3BhY2VQYXRoRm9yS2luZCh0eXBlLCBucykpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHVyaVRlbXBsYXRlRm9yS3ViZXJuZXRlc0tpbmQodHlwZSkge1xyXG4gICAgdmFyIHVybFRlbXBsYXRlID0gJyc7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLk5BTUVTUEFDRVM6XHJcbiAgICAgIGNhc2UgXCJOYW1lc3BhY2VzXCI6XHJcbiAgICAgICAgdXJsVGVtcGxhdGUgPSBVcmxIZWxwZXJzLmpvaW4oJ25hbWVzcGFjZXMnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLk9BVVRIX0NMSUVOVFM6XHJcbiAgICAgIGNhc2UgXCJPQXV0aENsaWVudHNcIjpcclxuICAgICAgY2FzZSBcIk9BdXRoQ2xpZW50XCI6XHJcbiAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbignb2F1dGhjbGllbnRzJyk7XHJcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5QUk9KRUNUUzpcclxuICAgICAgY2FzZSBcIlByb2plY3RzXCI6XHJcbiAgICAgICAgdXJsVGVtcGxhdGUgPSBVcmxIZWxwZXJzLmpvaW4oJ3Byb2plY3RzJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdXJsVGVtcGxhdGUgPSBVcmxIZWxwZXJzLmpvaW4oJ25hbWVzcGFjZXMvOm5hbWVzcGFjZScsIHR5cGUsICc6aWQnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1cmxUZW1wbGF0ZTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2VQYXRoRm9yS2luZCh0eXBlLCBucykge1xyXG4gICAgdmFyIHVybFRlbXBsYXRlID0gJyc7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLk5BTUVTUEFDRVM6XHJcbiAgICAgIGNhc2UgXCJOYW1lc3BhY2VzXCI6XHJcbiAgICAgIGNhc2UgXCJOYW1lc3BhY2VcIjpcclxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCduYW1lc3BhY2VzJyk7XHJcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5OT0RFUzpcclxuICAgICAgY2FzZSBcIk5vZGVzXCI6XHJcbiAgICAgIGNhc2UgXCJub2RlXCI6XHJcbiAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbignbm9kZXMnKTtcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLlBST0pFQ1RTOlxyXG4gICAgICBjYXNlIFwiUHJvamVjdHNcIjpcclxuICAgICAgY2FzZSBcIlByb2plY3RcIjpcclxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdwcm9qZWN0cycpO1xyXG4gICAgICBjYXNlIFdhdGNoVHlwZXMuT0FVVEhfQ0xJRU5UUzpcclxuICAgICAgY2FzZSBcIk9BdXRoQ2xpZW50c1wiOlxyXG4gICAgICBjYXNlIFwiT0F1dGhDbGllbnRcIjpcclxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdvYXV0aGNsaWVudHMnKTtcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLlBFUlNJU1RFTlRfVk9MVU1FUzpcclxuICAgICAgY2FzZSBcIlBlcnNpc3RlbnRWb2x1bWVzXCI6XHJcbiAgICAgIGNhc2UgXCJQZXJzaXN0ZW50Vm9sdW1lXCI6XHJcbiAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbigncGVyc2lzdGVudHZvbHVtZXMnKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCduYW1lc3BhY2VzJywgbnMsIHR5cGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGV2YWx1ZSBmcm9tIHRoZSBpbmplY3RvciBpZiBpdHMgYXZhaWxhYmxlIG9yIG51bGxcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gaW5qZWN0PFQ+KG5hbWUpOlQge1xyXG4gICAgdmFyIGluamVjdG9yID0gSGF3dGlvQ29yZS5pbmplY3RvcjtcclxuICAgIHJldHVybiBpbmplY3RvciA/IGluamVjdG9yLmdldDxUPihuYW1lKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzb3VyY2UodGhpbmc6c3RyaW5nLCB1cmxUZW1wbGF0ZTpzdHJpbmcsICRyZXNvdXJjZTogbmcucmVzb3VyY2UuSVJlc291cmNlU2VydmljZSwgS3ViZXJuZXRlc01vZGVsKSB7XHJcbiAgICB2YXIgcHJlZml4ID0gcHJlZml4Rm9yVHlwZSh0aGluZyk7XHJcbiAgICBpZiAoIXByZWZpeCkge1xyXG4gICAgICBsb2cuZGVidWcoXCJJbnZhbGlkIHR5cGUgZ2l2ZW46IFwiLCB0aGluZyk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBwYXJhbXMgPSA8YW55PiB7XHJcbiAgICAgIG5hbWVzcGFjZTogY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2VcclxuICAgIH1cclxuICAgIHN3aXRjaCAodGhpbmcpIHtcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLk5BTUVTUEFDRVM6XHJcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5PQVVUSF9DTElFTlRTOlxyXG4gICAgICBjYXNlIFdhdGNoVHlwZXMuTk9ERVM6XHJcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5QUk9KRUNUUzpcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLk9BVVRIX0NMSUVOVFM6XHJcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRVM6XHJcbiAgICAgIHBhcmFtcyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB1cmwgPSBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIHByZWZpeCwgdXJsVGVtcGxhdGUpO1xyXG4gICAgbG9nLmRlYnVnKFwiVXJsIGZvciBcIiwgdGhpbmcsIFwiOiBcIiwgdXJsKTtcclxuICAgIHZhciByZXNvdXJjZSA9ICRyZXNvdXJjZSh1cmwsIG51bGwsIHtcclxuICAgICAgcXVlcnk6IHsgbWV0aG9kOiAnR0VUJywgaXNBcnJheTogZmFsc2UsIHBhcmFtczogcGFyYW1zfSxcclxuICAgICAgY3JlYXRlOiB7IG1ldGhvZDogJ1BPU1QnLCBwYXJhbXM6IHBhcmFtc30sXHJcbiAgICAgIHNhdmU6IHsgbWV0aG9kOiAnUFVUJywgcGFyYW1zOiBwYXJhbXN9LFxyXG4gICAgICBkZWxldGU6IHsgbWV0aG9kOiAnREVMRVRFJywgcGFyYW1zOiBfLmV4dGVuZCh7XHJcbiAgICAgICAgaWQ6ICdAaWQnXHJcbiAgICAgIH0sIHBhcmFtcyl9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXNvdXJjZTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBpbWFnZVJlcG9zaXRvcmllc1Jlc3RVUkwoKSB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKG9wZW5zaGlmdEFwaVVybCgpLCBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcIi9pbWFnZXN0cmVhbXNcIik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZGVwbG95bWVudENvbmZpZ3NSZXN0VVJMKCkge1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvcGVuc2hpZnRBcGlVcmwoKSwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvZGVwbG95bWVudGNvbmZpZ3NcIik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gYnVpbGRzUmVzdFVSTCgpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3BlbnNoaWZ0QXBpVXJsKCksIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL2J1aWxkc1wiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBidWlsZENvbmZpZ0hvb2tzUmVzdFVSTCgpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3BlbnNoaWZ0QXBpVXJsKCksIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL2J1aWxkY29uZmlnaG9va3NcIik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gYnVpbGRDb25maWdzUmVzdFVSTCgpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3BlbnNoaWZ0QXBpVXJsKCksIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL2J1aWxkY29uZmlnc1wiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiByb3V0ZXNSZXN0VVJMKCkge1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvcGVuc2hpZnRBcGlVcmwoKSwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvcm91dGVzXCIpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRlbXBsYXRlc1Jlc3RVUkwoKSB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKG9wZW5zaGlmdEFwaVVybCgpLCBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcIi90ZW1wbGF0ZXNcIik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlKGVudGl0eSkge1xyXG4gICAgdmFyIGFuc3dlciA9IENvcmUucGF0aEdldChlbnRpdHksIFtcIm1ldGFkYXRhXCIsIFwibmFtZXNwYWNlXCJdKTtcclxuICAgIHJldHVybiBhbnN3ZXIgPyBhbnN3ZXIgOiBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExhYmVscyhlbnRpdHkpIHtcclxuICAgIHZhciBhbnN3ZXIgPSBDb3JlLnBhdGhHZXQoZW50aXR5LCBbXCJtZXRhZGF0YVwiLCBcImxhYmVsc1wiXSk7XHJcbiAgICByZXR1cm4gYW5zd2VyID8gYW5zd2VyIDoge307XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0TmFtZShlbnRpdHkpIHtcclxuICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKGVudGl0eSkpIHtcclxuICAgICAgcmV0dXJuIGVudGl0eTtcclxuICAgIH1cclxuICAgIHJldHVybiBDb3JlLnBhdGhHZXQoZW50aXR5LCBbXCJtZXRhZGF0YVwiLCBcIm5hbWVcIl0pIHx8IENvcmUucGF0aEdldChlbnRpdHksIFwibmFtZVwiKSB8fCBDb3JlLnBhdGhHZXQoZW50aXR5LCBcImlkXCIpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldEtpbmQoZW50aXR5KSB7XHJcbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KGVudGl0eSwgW1wibWV0YWRhdGFcIiwgXCJraW5kXCJdKSB8fCBDb3JlLnBhdGhHZXQoZW50aXR5LCBcImtpbmRcIik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0b3IoZW50aXR5KSB7XHJcbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KGVudGl0eSwgW1wic3BlY1wiLCBcInNlbGVjdG9yXCJdKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRIb3N0KHBvZCkge1xyXG4gICAgcmV0dXJuIENvcmUucGF0aEdldChwb2QsIFtcInNwZWNcIiwgXCJob3N0XCJdKSB8fCBDb3JlLnBhdGhHZXQocG9kLCBbXCJzcGVjXCIsIFwibm9kZU5hbWVcIl0pIHx8IENvcmUucGF0aEdldChwb2QsIFtcInN0YXR1c1wiLCBcImhvc3RJUFwiXSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHVzKHBvZCkge1xyXG4gICAgcmV0dXJuIENvcmUucGF0aEdldChwb2QsIFtcInN0YXR1c1wiLCBcInBoYXNlXCJdKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRQb3J0cyhzZXJ2aWNlKSB7XHJcbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KHNlcnZpY2UsIFtcInNwZWNcIiwgXCJwb3J0c1wiXSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25UaW1lc3RhbXAoZW50aXR5KSB7XHJcbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KGVudGl0eSwgW1wibWV0YWRhdGFcIiwgXCJjcmVhdGlvblRpbWVzdGFtcFwiXSk7XHJcbiAgfTtcclxuXHJcbiAgLy92YXIgZmFicmljRG9tYWluID0gRmFicmljLmpteERvbWFpbjtcclxuICB2YXIgZmFicmljRG9tYWluID0gXCJpby5mYWJyaWM4XCI7XHJcbiAgZXhwb3J0IHZhciBtYmVhbiA9IGZhYnJpY0RvbWFpbiArIFwiOnR5cGU9S3ViZXJuZXRlc1wiO1xyXG4gIGV4cG9ydCB2YXIgbWFuYWdlck1CZWFuID0gZmFicmljRG9tYWluICsgXCI6dHlwZT1LdWJlcm5ldGVzTWFuYWdlclwiO1xyXG4gIGV4cG9ydCB2YXIgYXBwVmlld01CZWFuID0gZmFicmljRG9tYWluICsgXCI6dHlwZT1BcHBWaWV3XCI7XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0t1YmVybmV0ZXMod29ya3NwYWNlPykge1xyXG4gICAgLy8gcmV0dXJuIHdvcmtzcGFjZS50cmVlQ29udGFpbnNEb21haW5BbmRQcm9wZXJ0aWVzKGZhYnJpY0RvbWFpbiwge3R5cGU6IFwiS3ViZXJuZXRlc1wifSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0t1YmVybmV0ZXNUZW1wbGF0ZU1hbmFnZXIod29ya3NwYWNlPykge1xyXG4gICAgLy8gcmV0dXJuIHdvcmtzcGFjZS50cmVlQ29udGFpbnNEb21haW5BbmRQcm9wZXJ0aWVzKGZhYnJpY0RvbWFpbiwge3R5cGU6IFwiS3ViZXJuZXRlc1RlbXBsYXRlTWFuYWdlclwifSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0FwcFZpZXcod29ya3NwYWNlPykge1xyXG4gICAgLy8gcmV0dXJuIHdvcmtzcGFjZS50cmVlQ29udGFpbnNEb21haW5BbmRQcm9wZXJ0aWVzKGZhYnJpY0RvbWFpbiwge3R5cGU6IFwiQXBwVmlld1wifSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRTdHJpcHBlZFBhdGhOYW1lKCk6c3RyaW5nIHtcclxuICAgIHZhciBwYXRoTmFtZSA9IENvcmUudHJpbUxlYWRpbmcoKHRoaXMuJGxvY2F0aW9uLnBhdGgoKSB8fCAnLycpLCBcIiNcIik7XHJcbiAgICBwYXRoTmFtZSA9IHBhdGhOYW1lLnJlcGxhY2UoL15cXC8vLCAnJyk7XHJcbiAgICByZXR1cm4gcGF0aE5hbWU7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gbGlua0NvbnRhaW5zKC4uLndvcmRzOlN0cmluZ1tdKTpib29sZWFuIHtcclxuICAgIHZhciBwYXRoTmFtZSA9IHRoaXMuZ2V0U3RyaXBwZWRQYXRoTmFtZSgpO1xyXG4gICAgcmV0dXJuIF8uZXZlcnkod29yZHMsICh3b3JkOnN0cmluZykgPT4gcGF0aE5hbWUuaW5kZXhPZih3b3JkKSAhPT0gMCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBsaW5rIGlzIGFjdGl2ZS4gVGhlIGxpbmsgY2FuIG9taXQgdGhlIGxlYWRpbmcgIyBvciAvIGlmIG5lY2Vzc2FyeS5cclxuICAgKiBUaGUgcXVlcnkgcGFyYW1ldGVycyBvZiB0aGUgVVJMIGFyZSBpZ25vcmVkIGluIHRoZSBjb21wYXJpc29uLlxyXG4gICAqIEBtZXRob2QgaXNMaW5rQWN0aXZlXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IGhyZWZcclxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIHRoZSBnaXZlbiBsaW5rIGlzIGFjdGl2ZVxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0xpbmtBY3RpdmUoaHJlZjpzdHJpbmcpOmJvb2xlYW4ge1xyXG4gICAgLy8gbGV0cyB0cmltIHRoZSBsZWFkaW5nIHNsYXNoXHJcbiAgICB2YXIgcGF0aE5hbWUgPSBnZXRTdHJpcHBlZFBhdGhOYW1lKCk7XHJcblxyXG4gICAgdmFyIGxpbmsgPSBDb3JlLnRyaW1MZWFkaW5nKGhyZWYsIFwiI1wiKTtcclxuICAgIGxpbmsgPSBsaW5rLnJlcGxhY2UoL15cXC8vLCAnJyk7XHJcbiAgICAvLyBzdHJpcCBhbnkgcXVlcnkgYXJndW1lbnRzXHJcbiAgICB2YXIgaWR4ID0gbGluay5pbmRleE9mKCc/Jyk7XHJcbiAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgbGluayA9IGxpbmsuc3Vic3RyaW5nKDAsIGlkeCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXBhdGhOYW1lLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gbGluayA9PT0gcGF0aE5hbWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXy5zdGFydHNXaXRoKHBhdGhOYW1lLCBsaW5rKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBzZXRKc29uKCRzY29wZSwgaWQsIGNvbGxlY3Rpb24pIHtcclxuICAgICRzY29wZS5pZCA9IGlkO1xyXG4gICAgaWYgKCEkc2NvcGUuZmV0Y2hlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWlkKSB7XHJcbiAgICAgICRzY29wZS5qc29uID0gJyc7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghY29sbGVjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgaXRlbSA9IGNvbGxlY3Rpb24uZmluZCgoaXRlbSkgPT4geyByZXR1cm4gZ2V0TmFtZShpdGVtKSA9PT0gaWQ7IH0pO1xyXG4gICAgaWYgKGl0ZW0pIHtcclxuICAgICAgJHNjb3BlLmpzb24gPSBhbmd1bGFyLnRvSnNvbihpdGVtLCB0cnVlKTtcclxuICAgICAgJHNjb3BlLml0ZW0gPSBpdGVtO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgJHNjb3BlLmlkID0gdW5kZWZpbmVkO1xyXG4gICAgICAkc2NvcGUuanNvbiA9ICcnO1xyXG4gICAgICAkc2NvcGUuaXRlbSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGxhYmVscyB0ZXh0IHN0cmluZyB1c2luZyB0aGUgPGNvZGU+a2V5MT12YWx1ZTEsa2V5Mj12YWx1ZTIsLi4uLjwvY29kZT4gZm9ybWF0XHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc1RvU3RyaW5nKGxhYmVscywgc2VwZXJhdG9yVGV4dCA9IGxhYmVsRmlsdGVyVGV4dFNlcGFyYXRvcikge1xyXG4gICAgdmFyIGFuc3dlciA9IFwiXCI7XHJcbiAgICBhbmd1bGFyLmZvckVhY2gobGFiZWxzLCAodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICB2YXIgc2VwYXJhdG9yID0gYW5zd2VyID8gc2VwZXJhdG9yVGV4dCA6IFwiXCI7XHJcblxyXG4gICAgICBhbnN3ZXIgKz0gc2VwYXJhdG9yICsga2V5ICsgXCI9XCIgKyB2YWx1ZTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGFuc3dlcjtcclxuICB9XHJcblxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKSB7XHJcbiAgICAkc2NvcGUuYmFzZVVyaSA9IENvcmUudHJpbVRyYWlsaW5nKENvcmUudXJsKFwiL1wiKSB8fCBcIlwiLCBcIi9cIikgfHwgXCJcIjtcclxuXHJcbiAgICB2YXIgaW5qZWN0b3IgPSBIYXd0aW9Db3JlLmluamVjdG9yO1xyXG5cclxuICAgIGZ1bmN0aW9uIGhhc1NlcnZpY2UobmFtZSkge1xyXG4gICAgICBpZiAoaW5qZWN0b3IpIHtcclxuICAgICAgICB2YXIgU2VydmljZVJlZ2lzdHJ5ID0gaW5qZWN0b3IuZ2V0PGFueT4oXCJTZXJ2aWNlUmVnaXN0cnlcIik7XHJcbiAgICAgICAgaWYgKFNlcnZpY2VSZWdpc3RyeSkge1xyXG4gICAgICAgICAgcmV0dXJuIFNlcnZpY2VSZWdpc3RyeS5oYXNTZXJ2aWNlKG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLmhhc1NlcnZpY2VLaWJhbmEgPSAoKSA9PiBoYXNTZXJ2aWNlKGtpYmFuYVNlcnZpY2VOYW1lKTtcclxuICAgICRzY29wZS5oYXNTZXJ2aWNlR29ncyA9ICgpID0+IGhhc1NlcnZpY2UoZ29nc1NlcnZpY2VOYW1lKTtcclxuICAgICRzY29wZS5oYXNTZXJ2aWNlRm9yZ2UgPSAoKSA9PiBoYXNTZXJ2aWNlKGZhYnJpYzhGb3JnZVNlcnZpY2VOYW1lKTtcclxuICAgICRzY29wZS5oYXNTZXJ2aWNlQXBpbWFuID0gKCkgPT4gaGFzU2VydmljZShhcGltYW5TZXJ2aWNlTmFtZSk7XHJcblxyXG4gICAgJHNjb3BlLnZpZXdUZW1wbGF0ZXMgPSAoKSA9PiB7XHJcbiAgICAgIHZhciByZXR1cm5UbyA9ICRsb2NhdGlvbi51cmwoKTtcclxuICAgICAgJGxvY2F0aW9uLnBhdGgoJy9rdWJlcm5ldGVzL3RlbXBsYXRlcycpLnNlYXJjaCh7J3JldHVyblRvJzogcmV0dXJuVG99KTtcclxuICAgIH07XHJcblxyXG4gICAgJHNjb3BlLm5hbWVzcGFjZSA9ICRyb3V0ZVBhcmFtcy5uYW1lc3BhY2UgfHwgJHNjb3BlLm5hbWVzcGFjZSB8fCBLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UgfHwgZGVmYXVsdE5hbWVzcGFjZTtcclxuICAgIGlmICgkc2NvcGUubmFtZXNwYWNlICE9IEt1YmVybmV0ZXNTdGF0ZS5zZWxlY3RlZE5hbWVzcGFjZSkge1xyXG4gICAgICBLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UgPSAkc2NvcGUubmFtZXNwYWNlO1xyXG5cclxuICAgICAgLy8gbGV0cyBzaG93IHBhZ2UgaXMgZ29pbmcgdG8gcmVsb2FkXHJcbiAgICAgIGlmICgkc2NvcGUubW9kZWwpIHtcclxuICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBLdWJlcm5ldGVzLnNldEN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCRzY29wZS5uYW1lc3BhY2UpO1xyXG5cclxuICAgICRzY29wZS5mb3JnZUVuYWJsZWQgPSBpc0ZvcmdlRW5hYmxlZCgpO1xyXG5cclxuICAgICRzY29wZS5wcm9qZWN0SWQgPSAkcm91dGVQYXJhbXNbXCJwcm9qZWN0XCJdIHx8ICRzY29wZS5wcm9qZWN0SWQgfHwgJHNjb3BlLmlkO1xyXG4gICAgdmFyIHNob3dQcm9qZWN0TmF2QmFycyA9IGZhbHNlO1xyXG4gICAgaWYgKCRzY29wZS5wcm9qZWN0SWQgJiYgc2hvd1Byb2plY3ROYXZCYXJzKSB7XHJcbiAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUucHJvamVjdElkKTtcclxuICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUucHJvamVjdElkLCBudWxsLCAkc2NvcGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlRW52aXJvbm1lbnRCcmVhZGNydW1icygkc2NvcGUsICRsb2NhdGlvbiwgJHJvdXRlUGFyYW1zKTtcclxuICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVFbnZpcm9ubWVudFN1Yk5hdkJhcnMoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCRzY29wZS5wcm9qZWN0SWQpIHtcclxuICAgICAgJHNjb3BlLiRwcm9qZWN0TGluayA9IERldmVsb3Blci5wcm9qZWN0TGluaygkc2NvcGUucHJvamVjdElkKTtcclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUubGluayA9IChocmVmKSA9PiB7XHJcbiAgICAgIGlmICghaHJlZikge1xyXG4gICAgICAgIHJldHVybiBocmVmO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgkc2NvcGUuJHByb2plY3RMaW5rKSB7XHJcbiAgICAgICAgcmV0dXJuIERldmVsb3Blci5uYW1lc3BhY2VMaW5rKCRzY29wZSwgJHJvdXRlUGFyYW1zLCBocmVmLnJlcGxhY2UoL15cXC9rdWJlcm5ldGVzLywgJycpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gaHJlZjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5jb2RlTWlycm9yT3B0aW9ucyA9IHtcclxuICAgICAgbGluZVdyYXBwaW5nIDogdHJ1ZSxcclxuICAgICAgbGluZU51bWJlcnM6IHRydWUsXHJcbiAgICAgIHJlYWRPbmx5OiAnbm9jdXJzb3InLFxyXG4gICAgICBtb2RlOiB7bmFtZTogXCJqYXZhc2NyaXB0XCIsIGpzb246IHRydWV9XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5yZXNpemVEaWFsb2cgPSB7XHJcbiAgICAgIGNvbnRyb2xsZXI6IG51bGwsXHJcbiAgICAgIG5ld1JlcGxpY2FzOiAwLFxyXG4gICAgICBkaWFsb2c6IG5ldyBVSS5EaWFsb2coKSxcclxuICAgICAgb25PazogKCkgPT4ge1xyXG4gICAgICAgIHZhciByZXNpemVEaWFsb2cgPSAkc2NvcGUucmVzaXplRGlhbG9nO1xyXG4gICAgICAgIHJlc2l6ZURpYWxvZy5kaWFsb2cuY2xvc2UoKTtcclxuICAgICAgICByZXNpemVDb250cm9sbGVyKCRodHRwLCBLdWJlcm5ldGVzQXBpVVJMLCByZXNpemVEaWFsb2cuY29udHJvbGxlciwgcmVzaXplRGlhbG9nLm5ld1JlcGxpY2FzLCAoKSA9PiB7IGxvZy5kZWJ1ZyhcInVwZGF0ZWQgbnVtYmVyIG9mIHJlcGxpY2FzXCIpOyB9KVxyXG4gICAgICB9LFxyXG4gICAgICBvcGVuOiAoY29udHJvbGxlcikgPT4ge1xyXG4gICAgICAgIHZhciByZXNpemVEaWFsb2cgPSAkc2NvcGUucmVzaXplRGlhbG9nO1xyXG4gICAgICAgIHJlc2l6ZURpYWxvZy5jb250cm9sbGVyID0gY29udHJvbGxlcjtcclxuICAgICAgICByZXNpemVEaWFsb2cubmV3UmVwbGljYXMgPSBDb3JlLnBhdGhHZXQoY29udHJvbGxlciwgW1wic3RhdHVzXCIsIFwicmVwbGljYXNcIl0pO1xyXG4gICAgICAgIHJlc2l6ZURpYWxvZy5kaWFsb2cub3BlbigpO1xyXG5cclxuICAgICAgICAkdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAkKCcjcmVwbGljYXMnKS5mb2N1cygpO1xyXG4gICAgICAgIH0sIDUwKTtcclxuICAgICAgfSxcclxuICAgICAgY2xvc2U6ICgpID0+IHtcclxuICAgICAgICAkc2NvcGUucmVzaXplRGlhbG9nLmRpYWxvZy5jbG9zZSgpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS50cmlnZ2VyQnVpbGQgPSAoYnVpbGRDb25maWcpID0+IHtcclxuICAgICAgdmFyIHVybCA9IGJ1aWxkQ29uZmlnLiR0cmlnZ2VyVXJsO1xyXG4gICAgICBjb25zb2xlLmxvZyhcInRyaWdnZXJpbmcgYnVpbGQgYXQgdXJsOiBcIiArIHVybCk7XHJcbiAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAvL3ZhciBkYXRhID0ge307XHJcbiAgICAgICAgdmFyIGRhdGEgPSBudWxsO1xyXG4gICAgICAgIHZhciBjb25maWcgPSB7XHJcbiAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIG5hbWUgPSBDb3JlLnBhdGhHZXQoYnVpbGRDb25maWcsIFtcIm1ldGFkYXRhXCIsIFwibmFtZVwiXSk7XHJcbiAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2luZm8nLCBcIlRyaWdnZXJpbmcgYnVpbGQgXCIgKyBuYW1lKTtcclxuICAgICAgICAkaHR0cC5wb3N0KHVybCwgZGF0YSwgY29uZmlnKS5cclxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidHJpZ2dlciB3b3JrZWQhIGdvdCBkYXRhIFwiICsgYW5ndWxhci50b0pzb24oZGF0YSwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICAvLyBUT0RPIHNob3VsZCB3ZSBzaG93IHNvbWUgbGluayB0byB0aGUgYnVpbGRcclxuICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2luZm8nLCBcIkJ1aWxkaW5nIFwiICsgbmFtZSk7XHJcbiAgICAgICAgICB9KS5cclxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbignZXJyb3InLCBcIkZhaWxlZCB0byB0cmlnZ2VyIGJ1aWxkIGZvciBcIiArIG5hbWUgKyBcIi4gUmV0dXJuZWQgY29kZTogXCIgKyBzdGF0dXMgKyBcIiBcIiArIGRhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdXBkYXRlIHRoZSBVUkwgaWYgdGhlIGZpbHRlciBpcyBjaGFuZ2VkXHJcbiAgICAkc2NvcGUuJHdhdGNoKFwidGFibGVDb25maWcuZmlsdGVyT3B0aW9ucy5maWx0ZXJUZXh0XCIsICh0ZXh0KSA9PiB7XHJcbiAgICAgIC8vdmFyIGZpbHRlclRleHQgPSBLdWJlcm5ldGVzLmZpbmRWYWxlT2ZMYWJlbHModGV4dCk7XHJcbiAgICAgICRsb2NhdGlvbi5zZWFyY2goXCJxXCIsIHRleHQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLiRvbihcImxhYmVsRmlsdGVyVXBkYXRlXCIsICgkZXZlbnQsIHRleHQpID0+IHtcclxuICAgICAgdmFyIGZpbHRlck9wdGlvbnMgPSAoJHNjb3BlLnRhYmxlQ29uZmlnIHx8IHt9KS5maWx0ZXJPcHRpb25zIHx8IHt9O1xyXG4gICAgICB2YXIgY3VycmVudEZpbHRlciA9IGZpbHRlck9wdGlvbnMuZmlsdGVyVGV4dDtcclxuICAgICAgaWYgKENvcmUuaXNCbGFuayhjdXJyZW50RmlsdGVyKSkge1xyXG4gICAgICAgIGZpbHRlck9wdGlvbnMuZmlsdGVyVGV4dCA9IHRleHQ7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHZhciBleHByZXNzaW9ucyA9IGN1cnJlbnRGaWx0ZXIuc3BsaXQoL1xccysvKTtcclxuICAgICAgICBpZiAoZXhwcmVzc2lvbnMuaW5kZXhPZih0ZXh0KSAhPT0gLTEpIHtcclxuICAgICAgICAgIC8vIGxldHMgZXhjbHVkZSB0aGlzIGZpbHRlciBleHByZXNzaW9uXHJcbiAgICAgICAgICBleHByZXNzaW9ucyA9IGV4cHJlc3Npb25zLnJlbW92ZSh0ZXh0KTtcclxuICAgICAgICAgIGZpbHRlck9wdGlvbnMuZmlsdGVyVGV4dCA9IGV4cHJlc3Npb25zLmpvaW4oXCIgXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmaWx0ZXJPcHRpb25zLmZpbHRlclRleHQgPSBjdXJyZW50RmlsdGVyICsgXCIgXCIgKyB0ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAkc2NvcGUuaWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcG9kcyB0aGF0IGFyZSByZWFkeVxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiByZWFkeVBvZENvdW50KHNlcnZpY2UpIHtcclxuICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICBhbmd1bGFyLmZvckVhY2goKHNlcnZpY2UgfHwge30pLiRwb2RzLCAocG9kKT0+IHtcclxuICAgICAgaWYgKHBvZC4kcmVhZHkpIHtcclxuICAgICAgICBjb3VudCsrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjb3VudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHNlcnZpY2UgbGluayBVUkwgZm9yIGVpdGhlciB0aGUgc2VydmljZSBuYW1lIG9yIHRoZSBzZXJ2aWNlIG9iamVjdFxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlTGlua1VybChzZXJ2aWNlLCBodHRwT25seSA9IGZhbHNlKSB7XHJcbiAgICBpZiAoYW5ndWxhci5pc09iamVjdChzZXJ2aWNlKSkge1xyXG4gICAgICB2YXIgcG9ydGFsSVAgPSBzZXJ2aWNlLiRob3N0O1xyXG4gICAgICAvLyBsZXRzIGFzc3VtZSBubyBjdXN0b20gcG9ydCBmb3Igbm93IGZvciBleHRlcm5hbCByb3V0ZXNcclxuICAgICAgdmFyIHBvcnQgPSBudWxsO1xyXG4gICAgICB2YXIgcHJvdG9jb2wgPSBcImh0dHA6Ly9cIjtcclxuICAgICAgdmFyIHNwZWMgPSBzZXJ2aWNlLnNwZWM7XHJcbiAgICAgIGlmIChzcGVjKSB7XHJcbiAgICAgICAgaWYgKCFwb3J0YWxJUCkge1xyXG4gICAgICAgICAgcG9ydGFsSVAgPSBzcGVjLnBvcnRhbElQO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaGFzSHR0cHMgPSBmYWxzZTtcclxuICAgICAgICB2YXIgaGFzSHR0cCA9IGZhbHNlO1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzcGVjLnBvcnRzLCAocG9ydFNwZWMpID0+IHtcclxuICAgICAgICAgIHZhciBwID0gcG9ydFNwZWMucG9ydDtcclxuICAgICAgICAgIGlmIChwKSB7XHJcbiAgICAgICAgICAgIGlmIChwID09PSA0NDMpIHtcclxuICAgICAgICAgICAgICBoYXNIdHRwcyA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocCA9PT0gODApIHtcclxuICAgICAgICAgICAgICBoYXNIdHRwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXBvcnQpIHtcclxuICAgICAgICAgICAgICBwb3J0ID0gcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghaGFzSHR0cHMgJiYgIWhhc0h0dHAgJiYgcG9ydCkge1xyXG4gICAgICAgICAgLy8gbGV0cyB0cmVhdCA4MDgwIGFzIGh0dHAgd2hpY2ggaXMgYSBjb21tb24gc2VydmljZSB0byBleHBvcnRcclxuICAgICAgICAgIGlmIChwb3J0ID09PSA4MDgwKSB7XHJcbiAgICAgICAgICAgIGhhc0h0dHAgPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChwb3J0ID09PSA4NDQzKSB7XHJcbiAgICAgICAgICAgIGhhc0h0dHBzID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBvcnRhbElQKSB7XHJcbiAgICAgICAgaWYgKGhhc0h0dHBzKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJodHRwczovL1wiICsgcG9ydGFsSVA7XHJcbiAgICAgICAgfSBlbHNlIGlmIChoYXNIdHRwKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJodHRwOi8vXCIgKyBwb3J0YWxJUDtcclxuICAgICAgICB9IGVsc2UgaWYgKCFodHRwT25seSkge1xyXG4gICAgICAgICAgaWYgKHBvcnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb3RvY29sICsgcG9ydGFsSVAgKyBcIjpcIiArIHBvcnQgKyBcIi9cIjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm90b2NvbCArIHBvcnRhbElQO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChzZXJ2aWNlKSB7XHJcbiAgICAgIHZhciBzZXJ2aWNlSWQgPSBzZXJ2aWNlLnRvU3RyaW5nKCk7XHJcbiAgICAgIGlmIChzZXJ2aWNlSWQpIHtcclxuICAgICAgICB2YXIgU2VydmljZVJlZ2lzdHJ5ID0gZ2V0U2VydmljZVJlZ2lzdHJ5KCk7XHJcbiAgICAgICAgaWYgKFNlcnZpY2VSZWdpc3RyeSkge1xyXG4gICAgICAgICAgcmV0dXJuIFNlcnZpY2VSZWdpc3RyeS5zZXJ2aWNlTGluayhzZXJ2aWNlSWQpIHx8IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgY291bnRlcnMgZm9yIHRoZSBwb2RDb3VudGVycyBvYmplY3RcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gcG9kQ291bnRlclRvdGFsKCRwb2RDb3VudGVycykge1xyXG4gICAgdmFyIGFuc3dlciA9IDA7XHJcbiAgICBpZiAoJHBvZENvdW50ZXJzKSB7XHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChbXCJyZWFkeVwiLCBcInZhbGlkXCIsIFwid2FpdGluZ1wiLCBcImVycm9yXCJdLCAobmFtZSkgPT4ge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9ICRwb2RDb3VudGVyc1tuYW1lXSB8fCAwO1xyXG4gICAgICAgIGFuc3dlciArPSB2YWx1ZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYW5zd2VyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2l2ZW4gdGhlIGxpc3Qgb2YgcG9kcyBsZXRzIGl0ZXJhdGUgdGhyb3VnaCB0aGVtIGFuZCBmaW5kIGFsbCBwb2RzIG1hdGNoaW5nIHRoZSBzZWxlY3RvclxyXG4gICAqIGFuZCByZXR1cm4gY291bnRlcnMgYmFzZWQgb24gdGhlIHN0YXR1cyBvZiB0aGUgcG9kXHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBvZENvdW50ZXJzKHNlbGVjdG9yLCBwb2RzLCBvdXRwdXRQb2RzID0gW10sIHBvZExpbmtRdWVyeSA9IG51bGwsIHBvZExpbmtVcmwgPSBudWxsKSB7XHJcbiAgICBpZiAoIXBvZExpbmtVcmwpIHtcclxuICAgICAgcG9kTGlua1VybCA9IFwiL2t1YmVybmV0ZXMvcG9kc1wiO1xyXG4gICAgfVxyXG4gICAgdmFyIGZpbHRlckZuO1xyXG4gICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihzZWxlY3RvcikpIHtcclxuICAgICAgZmlsdGVyRm4gPSBzZWxlY3RvcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpbHRlckZuID0gKHBvZCkgPT4gc2VsZWN0b3JNYXRjaGVzKHNlbGVjdG9yLCBnZXRMYWJlbHMocG9kKSk7XHJcbiAgICB9XHJcbiAgICB2YXIgYW5zd2VyID0ge1xyXG4gICAgICBwb2RzTGluazogXCJcIixcclxuICAgICAgcmVhZHk6IDAsXHJcbiAgICAgIHZhbGlkOiAwLFxyXG4gICAgICB3YWl0aW5nOiAwLFxyXG4gICAgICBlcnJvcjogMFxyXG4gICAgfTtcclxuICAgIGlmIChzZWxlY3Rvcikge1xyXG4gICAgICBpZiAoIXBvZExpbmtRdWVyeSkge1xyXG4gICAgICAgIHBvZExpbmtRdWVyeSA9IEt1YmVybmV0ZXMubGFiZWxzVG9TdHJpbmcoc2VsZWN0b3IsIFwiIFwiKTtcclxuICAgICAgfVxyXG4gICAgICBhbnN3ZXIucG9kc0xpbmsgPSBwb2RMaW5rVXJsICsgXCI/cT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChwb2RMaW5rUXVlcnkpO1xyXG4gICAgICBhbmd1bGFyLmZvckVhY2gocG9kcywgcG9kID0+IHtcclxuICAgICAgICBpZiAoZmlsdGVyRm4ocG9kKSkge1xyXG4gICAgICAgICAgb3V0cHV0UG9kcy5wdXNoKHBvZCk7XHJcbiAgICAgICAgICB2YXIgc3RhdHVzID0gZ2V0U3RhdHVzKHBvZCk7XHJcbiAgICAgICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHZhciBsb3dlciA9IHN0YXR1cy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICBpZiAobG93ZXIuc3RhcnRzV2l0aChcInJ1blwiKSkge1xyXG4gICAgICAgICAgICAgIGlmIChpc1JlYWR5KHBvZCkpIHtcclxuICAgICAgICAgICAgICAgIGFuc3dlci5yZWFkeSArPSAxO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhbnN3ZXIudmFsaWQgKz0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobG93ZXIuc3RhcnRzV2l0aChcIndhaXRcIikgfHwgbG93ZXIuc3RhcnRzV2l0aChcInBlbmRcIikpIHtcclxuICAgICAgICAgICAgICBhbnN3ZXIud2FpdGluZyArPSAxO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoXCJ0ZXJtXCIpIHx8IGxvd2VyLnN0YXJ0c1dpdGgoXCJlcnJvclwiKSB8fCBsb3dlci5zdGFydHNXaXRoKFwiZmFpbFwiKSkge1xyXG4gICAgICAgICAgICAgIGFuc3dlci5lcnJvciArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbnN3ZXIuZXJyb3IgKz0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFuc3dlcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnRzIHRoZSBnaXZlbiBqc29uIGludG8gYW4gYXJyYXkgb2YgaXRlbXMuIElmIHRoZSBqc29uIGNvbnRhaW5zIGEgbmVzdGVkIHNldCBvZiBpdGVtcyB0aGVuIHRoYXQgaXMgc29ydGVkOyBzbyB0aGF0IHNlcnZpY2VzXHJcbiAgICogYXJlIHByb2Nlc3NlZCBmaXJzdDsgdGhlbiB0dXJuZWQgaW50byBhbiBhcnJheS4gT3RoZXJ3aXNlIHRoZSBqc29uIGlzIHB1dCBpbnRvIGFuIGFycmF5IHNvIGl0IGNhbiBiZSBwcm9jZXNzZWQgcG9seW1vcnBoaWNhbGx5XHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRLdWJlcm5ldGVzSnNvblRvSXRlbXMoanNvbikge1xyXG4gICAgdmFyIGl0ZW1zID0ganNvbi5pdGVtcztcclxuICAgIGlmIChhbmd1bGFyLmlzQXJyYXkoaXRlbXMpKSB7XHJcbiAgICAgIC8vIFRPRE8gd2UgY291bGQgY2hlY2sgZm9yIExpc3Qgb3IgQ29uZmlnIHR5cGVzIGhlcmUgYW5kIHdhcm4gaWYgbm90XHJcblxyXG4gICAgICAvLyBzb3J0IHRoZSBzZXJ2aWNlcyBmaXJzdFxyXG4gICAgICB2YXIgYW5zd2VyID0gW107XHJcbiAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5raW5kID09PSBcIlNlcnZpY2VcIikge1xyXG4gICAgICAgICAgYW5zd2VyLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLmtpbmQgIT09IFwiU2VydmljZVwiKSB7XHJcbiAgICAgICAgICBhbnN3ZXIucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFtqc29uXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1YxYmV0YTFPcjIoKSB7XHJcbiAgICByZXR1cm4gZGVmYXVsdEFwaVZlcnNpb24gPT09IFwidjFiZXRhMVwiIHx8IGRlZmF1bHRBcGlWZXJzaW9uID09PSBcInYxYmV0YTJcIjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSBsaW5rIHRvIHRoZSBkZXRhaWwgcGFnZSBmb3IgdGhlIGdpdmVuIGVudGl0eVxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnRpdHlQYWdlTGluayhvYmopIHtcclxuICAgIGlmIChvYmopIHtcclxuICAgICAgZnVuY3Rpb24gZ2V0TGluayhlbnRpdHkpIHtcclxuICAgICAgICB2YXIgdmlld0xpbmsgPSBlbnRpdHlbXCIkdmlld0xpbmtcIl07XHJcbiAgICAgICAgaWYgKHZpZXdMaW5rKSB7XHJcbiAgICAgICAgICByZXR1cm4gdmlld0xpbms7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpZCA9IGdldE5hbWUoZW50aXR5KTtcclxuICAgICAgICB2YXIga2luZCA9IGdldEtpbmQoZW50aXR5KTtcclxuICAgICAgICBpZiAoa2luZCAmJiBpZCkge1xyXG4gICAgICAgICAgdmFyIHBhdGggPSBraW5kLnN1YnN0cmluZygwLCAxKS50b0xvd2VyQ2FzZSgpICsga2luZC5zdWJzdHJpbmcoMSkgKyBcInNcIjtcclxuICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2UoZW50aXR5KTtcclxuICAgICAgICAgIGlmIChuYW1lc3BhY2UgJiYgIWlzSWdub3JlTmFtZXNwYWNlS2luZChraW5kKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gQ29yZS51cmwoVXJsSGVscGVycy5qb2luKCcva3ViZXJuZXRlcy9uYW1lc3BhY2UnLCBuYW1lc3BhY2UsIHBhdGgsIGlkKSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gQ29yZS51cmwoVXJsSGVscGVycy5qb2luKCcva3ViZXJuZXRlcycsIHBhdGgsIGlkKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHZhciBiYXNlTGluayA9IGdldExpbmsob2JqKTtcclxuICAgICAgaWYgKCFIYXd0aW9Db3JlLmluamVjdG9yIHx8ICFiYXNlTGluaykge1xyXG4gICAgICAgIHJldHVybiBiYXNlTGluaztcclxuICAgICAgfVxyXG4gICAgICB2YXIgJHJvdXRlUGFyYW1zID0gSGF3dGlvQ29yZS5pbmplY3Rvci5nZXQ8bmcucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZT4oJyRyb3V0ZVBhcmFtcycpO1xyXG4gICAgICB2YXIgcHJvamVjdElkID0gJHJvdXRlUGFyYW1zWydwcm9qZWN0J10gfHwgJHJvdXRlUGFyYW1zWydwcm9qZWN0J107XHJcbiAgICAgIGlmICghcHJvamVjdElkKSB7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VMaW5rO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oRGV2ZWxvcGVyLnByb2plY3RMaW5rKHByb2plY3RJZCksIGJhc2VMaW5rLnJlcGxhY2UoL15cXC9rdWJlcm5ldGVzXFwvLywgJycpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiByZXNvdXJjZUtpbmRUb1VyaVBhdGgoa2luZCkge1xyXG4gICAgdmFyIGtpbmRQYXRoID0ga2luZC50b0xvd2VyQ2FzZSgpICsgXCJzXCI7XHJcbiAgICBpZiAoa2luZFBhdGggPT09IFwicmVwbGljYXRpb25Db250cm9sbGVyc1wiICYmICFpc1YxYmV0YTFPcjIoKSkge1xyXG4gICAgICBraW5kUGF0aCA9IFwicmVwbGljYXRpb25jb250cm9sbGVyc1wiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtpbmRQYXRoO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaXNJZ25vcmVOYW1lc3BhY2VLaW5kKGtpbmQpIHtcclxuICAgIHJldHVybiBraW5kID09PSBcIkhvc3RcIiB8fCBraW5kID09PSBcIk1pbmlvblwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgcm9vdCBVUkwgZm9yIHRoZSBraW5kXHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGt1YmVybmV0ZXNVcmxGb3JLaW5kKEt1YmVybmV0ZXNBcGlVUkwsIGtpbmQsIG5hbWVzcGFjZSA9IG51bGwsIHBhdGggPSBudWxsKSB7XHJcbiAgICB2YXIgcGF0aFNlZ21lbnQgPSBcIlwiO1xyXG4gICAgaWYgKHBhdGgpIHtcclxuICAgICAgcGF0aFNlZ21lbnQgPSBcIi9cIiArIENvcmUudHJpbUxlYWRpbmcocGF0aCwgXCIvXCIpO1xyXG4gICAgfVxyXG4gICAgdmFyIGtpbmRQYXRoID0gcmVzb3VyY2VLaW5kVG9VcmlQYXRoKGtpbmQpO1xyXG4gICAgdmFyIGlnbm9yZU5hbWVzcGFjZSA9IGlzSWdub3JlTmFtZXNwYWNlS2luZChraW5kKTtcclxuICAgIGlmIChpc1YxYmV0YTFPcjIoKSB8fCBpZ25vcmVOYW1lc3BhY2UpIHtcclxuICAgICAgdmFyIHBvc3RmaXggPSBcIlwiO1xyXG4gICAgICBpZiAobmFtZXNwYWNlICYmICFpZ25vcmVOYW1lc3BhY2UpIHtcclxuICAgICAgICBwb3N0Zml4ID0gXCI/bmFtZXNwYWNlPVwiICsgbmFtZXNwYWNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oS3ViZXJuZXRlc0FwaVVSTCwga2luZFBhdGgsIHBhdGhTZWdtZW50LCBwb3N0Zml4KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oS3ViZXJuZXRlc0FwaVVSTCwgXCIvbmFtZXNwYWNlcy9cIiwgbmFtZXNwYWNlICwga2luZFBhdGgsIHBhdGhTZWdtZW50KTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBiYXNlIFVSTCBmb3IgdGhlIGtpbmQgb2Yga3ViZXJuZXRlcyByZXNvdXJjZSBvciBudWxsIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzVXJsRm9ySXRlbUtpbmQoS3ViZXJuZXRlc0FwaVVSTCwganNvbikge1xyXG4gICAgdmFyIGtpbmQgPSBqc29uLmtpbmQ7XHJcbiAgICBpZiAoa2luZCkge1xyXG4gICAgICByZXR1cm4ga3ViZXJuZXRlc1VybEZvcktpbmQoS3ViZXJuZXRlc0FwaVVSTCwga2luZCwganNvbi5uYW1lc3BhY2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbG9nLndhcm4oXCJJZ25vcmluZyBtaXNzaW5nIGtpbmQgXCIgKyBraW5kICsgXCIgZm9yIGt1YmVybmV0ZXMganNvbjogXCIgKyBhbmd1bGFyLnRvSnNvbihqc29uKSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2UoS3ViZXJuZXRlc0FwaVVSTCwgc2VydmljZSwgcGF0aCA9IG51bGwpIHtcclxuICAgIHZhciBwYXRoU2VnbWVudCA9IFwiXCI7XHJcbiAgICBpZiAocGF0aCkge1xyXG4gICAgICBwYXRoU2VnbWVudCA9IFwiL1wiICsgQ29yZS50cmltTGVhZGluZyhwYXRoLCBcIi9cIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYXRoU2VnbWVudCA9IFwiL1wiO1xyXG4gICAgfVxyXG4gICAgdmFyIG5hbWVzcGFjZSA9IGdldE5hbWVzcGFjZShzZXJ2aWNlKTtcclxuICAgIGlmIChpc1YxYmV0YTFPcjIoKSkge1xyXG4gICAgICB2YXIgcG9zdGZpeCA9IFwiP25hbWVzcGFjZT1cIiArIG5hbWVzcGFjZTtcclxuICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihLdWJlcm5ldGVzQXBpVVJMLCBcIi9wcm94eVwiLCAga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvc2VydmljZXMvXCIgKyBnZXROYW1lKHNlcnZpY2UpICsgcGF0aFNlZ21lbnQgKyBwb3N0Zml4KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oS3ViZXJuZXRlc0FwaVVSTCwgXCIvcHJveHkvbmFtZXNwYWNlcy9cIiwgbmFtZXNwYWNlLCBcIi9zZXJ2aWNlcy9cIiArIGdldE5hbWUoc2VydmljZSkgKyBwYXRoU2VnbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2VDdXJyZW50TmFtZXNwYWNlKHNlcnZpY2UsIHBhdGggPSBudWxsKSB7XHJcbiAgICB2YXIgYXBpUHJlZml4ID0gVXJsSGVscGVycy5qb2luKGt1YmVybmV0ZXNBcGlVcmwoKSk7XHJcbiAgICByZXR1cm4ga3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZShhcGlQcmVmaXgsIHNlcnZpY2UsIHBhdGgpO1xyXG5cclxuICB9XHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ29uZmlnUmVzdFVybChpZCkge1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihidWlsZENvbmZpZ3NSZXN0VVJMKCksIGlkKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBkZXBsb3ltZW50Q29uZmlnUmVzdFVybChpZCkge1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihkZXBsb3ltZW50Q29uZmlnc1Jlc3RVUkwoKSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGltYWdlUmVwb3NpdG9yeVJlc3RVcmwoaWQpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oaW1hZ2VSZXBvc2l0b3JpZXNSZXN0VVJMKCksIGlkKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBidWlsZFJlc3RVcmwoaWQpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oYnVpbGRzUmVzdFVSTCgpLCBpZCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gYnVpbGRMb2dzUmVzdFVybChpZCkge1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihidWlsZHNSZXN0VVJMKCksIGlkLCBcImxvZ1wiKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJ1bnMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIEpTT05cclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gcnVuQXBwKCRsb2NhdGlvbiwgJHNjb3BlLCAkaHR0cCwgS3ViZXJuZXRlc0FwaVVSTCwganNvbiwgbmFtZSA9IFwiQXBwXCIsIG9uU3VjY2Vzc0ZuID0gbnVsbCwgbmFtZXNwYWNlID0gbnVsbCwgb25Db21wbGV0ZUZuID0gbnVsbCkge1xyXG4gICAgaWYgKGpzb24pIHtcclxuICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoanNvbikpIHtcclxuICAgICAgICBqc29uID0gYW5ndWxhci5mcm9tSnNvbihqc29uKTtcclxuICAgICAgfVxyXG4gICAgICBuYW1lID0gbmFtZSB8fCBcIkFwcFwiO1xyXG4gICAgICB2YXIgcG9zdGZpeCA9IG5hbWVzcGFjZSA/IFwiIGluIG5hbWVzcGFjZSBcIiArIG5hbWVzcGFjZSA6IFwiXCI7XHJcbiAgICAgIENvcmUubm90aWZpY2F0aW9uKCdpbmZvJywgXCJSdW5uaW5nIFwiICsgbmFtZSArIHBvc3RmaXgpO1xyXG5cclxuICAgICAgdmFyIGl0ZW1zID0gY29udmVydEt1YmVybmV0ZXNKc29uVG9JdGVtcyhqc29uKTtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKGl0ZW1zLCAoaXRlbSkgPT4ge1xyXG4gICAgICAgIHZhciB1cmwgPSBrdWJlcm5ldGVzVXJsRm9ySXRlbUtpbmQoS3ViZXJuZXRlc0FwaVVSTCwgaXRlbSk7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgJGh0dHAucG9zdCh1cmwsIGl0ZW0pLlxyXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkdvdCBzdGF0dXM6IFwiICsgc3RhdHVzICsgXCIgb24gdXJsOiBcIiArIHVybCArIFwiIGRhdGE6IFwiICsgZGF0YSArIFwiIGFmdGVyIHBvc3Rpbmc6IFwiICsgYW5ndWxhci50b0pzb24oaXRlbSkpO1xyXG4gICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24ob25Db21wbGV0ZUZuKSkge1xyXG4gICAgICAgICAgICAgICAgb25Db21wbGV0ZUZuKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNPYmplY3QoZGF0YSkpIHtcclxuICAgICAgICAgICAgICBtZXNzYWdlID0gZGF0YS5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgIHZhciByZWFzb24gPSBkYXRhLnJlYXNvbjtcclxuICAgICAgICAgICAgICBpZiAocmVhc29uID09PSBcIkFscmVhZHlFeGlzdHNcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gbGV0cyBpZ25vcmUgZHVwbGljYXRlc1xyXG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZW50aXR5IGFscmVhZHkgZXhpc3RzIGF0IFwiICsgdXJsKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFtZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IFwiRmFpbGVkIHRvIFBPU1QgdG8gXCIgKyB1cmwgKyBcIiBnb3Qgc3RhdHVzOiBcIiArIHN0YXR1cztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBzYXZlIFwiICsgdXJsICsgXCIgc3RhdHVzOiBcIiArIHN0YXR1cyArIFwiIHJlc3BvbnNlOiBcIiArIGFuZ3VsYXIudG9Kc29uKGRhdGEsIHRydWUpKTtcclxuICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2Vycm9yJywgbWVzc2FnZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHBvZCBpcyBydW5uaW5nXHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUnVubmluZyhwb2RDdXJyZW50U3RhdGUpIHtcclxuICAgIHZhciBzdGF0dXMgPSAocG9kQ3VycmVudFN0YXRlIHx8IHt9KS5waGFzZTtcclxuICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgdmFyIGxvd2VyID0gc3RhdHVzLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHJldHVybiBsb3dlci5zdGFydHNXaXRoKFwicnVuXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBsYWJlbHMgb2JqZWN0IGhhcyBhbGwgb2YgdGhlIGtleS92YWx1ZSBwYWlycyBmcm9tIHRoZSBzZWxlY3RvclxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBzZWxlY3Rvck1hdGNoZXMoc2VsZWN0b3IsIGxhYmVscykge1xyXG4gICAgaWYgKGFuZ3VsYXIuaXNPYmplY3QobGFiZWxzKSkge1xyXG4gICAgICB2YXIgYW5zd2VyID0gdHJ1ZTtcclxuICAgICAgdmFyIGNvdW50ID0gMDtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKHNlbGVjdG9yLCAodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgIGNvdW50Kys7XHJcbiAgICAgICAgaWYgKGFuc3dlciAmJiBsYWJlbHNba2V5XSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgIGFuc3dlciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBhbnN3ZXIgJiYgY291bnQgPiAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgc2VydmljZSByZWdpc3RyeVxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRTZXJ2aWNlUmVnaXN0cnkoKSB7XHJcbiAgICB2YXIgaW5qZWN0b3IgPSBIYXd0aW9Db3JlLmluamVjdG9yO1xyXG4gICAgcmV0dXJuIGluamVjdG9yID8gaW5qZWN0b3IuZ2V0PGFueT4oXCJTZXJ2aWNlUmVnaXN0cnlcIikgOiBudWxsO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSBsaW5rIHRvIHRoZSBraWJhbmEgbG9ncyB3ZWIgYXBwbGljYXRpb25cclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24ga2liYW5hTG9nc0xpbmsoU2VydmljZVJlZ2lzdHJ5KSB7XHJcbiAgICB2YXIgbGluayA9IFNlcnZpY2VSZWdpc3RyeS5zZXJ2aWNlTGluayhraWJhbmFTZXJ2aWNlTmFtZSk7XHJcbiAgICBpZiAobGluaykge1xyXG4gICAgICBpZiAoIWxpbmsuZW5kc1dpdGgoXCIvXCIpKSB7XHJcbiAgICAgICAgbGluayArPSBcIi9cIjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbGluayArIFwiIy9kYXNoYm9hcmQvRmFicmljOFwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gb3BlbkxvZ3NGb3JQb2RzKFNlcnZpY2VSZWdpc3RyeSwgJHdpbmRvdywgbmFtZXNwYWNlLCBwb2RzKSB7XHJcbiAgICB2YXIgbGluayA9IGtpYmFuYUxvZ3NMaW5rKFNlcnZpY2VSZWdpc3RyeSk7XHJcbiAgICBpZiAobGluaykge1xyXG4gICAgICB2YXIgcXVlcnkgPSBcIlwiO1xyXG4gICAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgICBhbmd1bGFyLmZvckVhY2gocG9kcywgKGl0ZW0pID0+IHtcclxuICAgICAgICB2YXIgaWQgPSBnZXROYW1lKGl0ZW0pO1xyXG4gICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgdmFyIHNwYWNlID0gcXVlcnkgPyBcIiBPUiBcIiA6IFwiXCI7XHJcbiAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgcXVlcnkgKz0gc3BhY2UgKyAnXCInICsgaWQgKyAnXCInO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChxdWVyeSkge1xyXG4gICAgICAgIGlmIChjb3VudCA+IDEpIHtcclxuICAgICAgICAgIHF1ZXJ5ID0gXCIoXCIgKyBxdWVyeSArIFwiKVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBxdWVyeSA9ICdrdWJlcm5ldGVzLm5hbWVzcGFjZV9uYW1lOlwiJyArIG5hbWVzcGFjZSArICdcIiBBTkQga3ViZXJuZXRlcy5wb2RfbmFtZTonICsgcXVlcnk7XHJcbiAgICAgICAgbGluayArPSBcIj9fYT0ocXVlcnk6KHF1ZXJ5X3N0cmluZzoocXVlcnk6J1wiICsgcXVlcnkgKyBcIicpKSlcIjtcclxuICAgICAgICB2YXIgbmV3V2luZG93ID0gJHdpbmRvdy5vcGVuKGxpbmssIFwidmlld0xvZ3NcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiByZXNpemVDb250cm9sbGVyKCRodHRwLCBLdWJlcm5ldGVzQXBpVVJMLCByZXBsaWNhdGlvbkNvbnRyb2xsZXIsIG5ld1JlcGxpY2FzLCBvbkNvbXBsZXRlRm4gPSBudWxsKSB7XHJcbiAgICB2YXIgaWQgPSBnZXROYW1lKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XHJcbiAgICB2YXIgbmFtZXNwYWNlID0gZ2V0TmFtZXNwYWNlKHJlcGxpY2F0aW9uQ29udHJvbGxlcikgfHwgXCJcIjtcclxuICAgIHZhciB1cmwgPSBrdWJlcm5ldGVzVXJsRm9yS2luZChLdWJlcm5ldGVzQXBpVVJMLCBcIlJlcGxpY2F0aW9uQ29udHJvbGxlclwiLCBuYW1lc3BhY2UsIGlkKTtcclxuICAgICRodHRwLmdldCh1cmwpLlxyXG4gICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgIGlmIChkYXRhKSB7ICAgICAgICAgICBcclxuICAgICAgICAgIHZhciBkZXNpcmVkU3RhdGUgPSBkYXRhLnNwZWM7XHJcbiAgICAgICAgICBpZiAoIWRlc2lyZWRTdGF0ZSkge1xyXG4gICAgICAgICAgICBkZXNpcmVkU3RhdGUgPSB7fTtcclxuICAgICAgICAgICAgZGF0YS5zcGVjID0gZGVzaXJlZFN0YXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGVzaXJlZFN0YXRlLnJlcGxpY2FzID0gbmV3UmVwbGljYXM7XHJcbiAgICAgICAgICAkaHR0cC5wdXQodXJsLCBkYXRhKS5cclxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJ1cGRhdGVkIGNvbnRyb2xsZXIgXCIgKyB1cmwpO1xyXG4gICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24ob25Db21wbGV0ZUZuKSkge1xyXG4gICAgICAgICAgICAgICAgb25Db21wbGV0ZUZuKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5cclxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBzYXZlIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KS5cclxuICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzVGV4dFRvQ3NzQ2xhc3ModGV4dCwgcmVhZHkgPSBmYWxzZSkge1xyXG4gICAgaWYgKHRleHQpIHtcclxuICAgICAgdmFyIGxvd2VyID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBpZiAobG93ZXIuc3RhcnRzV2l0aChcInJ1blwiKSB8fCBsb3dlci5zdGFydHNXaXRoKFwib2tcIikpIHtcclxuICAgICAgICBpZiAoIXJlYWR5KSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJmYSBmYS1zcGlubmVyIGZhLXNwaW4gZ3JlZW5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdmYSBmYS1wbGF5LWNpcmNsZSBncmVlbic7XHJcbiAgICAgIH0gZWxzZSBpZiAobG93ZXIuc3RhcnRzV2l0aChcIndhaXRcIikgfHwgbG93ZXIuc3RhcnRzV2l0aChcInBlbmRcIikpIHtcclxuICAgICAgICByZXR1cm4gJ2ZhIGZhLWRvd25sb2FkJztcclxuICAgICAgfSBlbHNlIGlmIChsb3dlci5zdGFydHNXaXRoKFwidGVybVwiKSB8fCBsb3dlci5zdGFydHNXaXRoKFwiZXJyb3JcIikgfHwgbG93ZXIuc3RhcnRzV2l0aChcImZhaWxcIikpIHtcclxuICAgICAgICByZXR1cm4gJ2ZhIGZhLW9mZiBvcmFuZ2UnO1xyXG4gICAgICB9IGVsc2UgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoXCJzdWNjZWVkZWRcIikpIHtcclxuICAgICAgICByZXR1cm4gJ2ZhIGZhLWNoZWNrLWNpcmNsZS1vIGdyZWVuJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICdmYSBmYS1xdWVzdGlvbiByZWQnO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHBvZFN0YXR1cyhwb2QpIHtcclxuICAgIHJldHVybiBnZXRTdGF0dXMocG9kKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1JlYWR5KHBvZCkge1xyXG4gICAgdmFyIHN0YXR1cyA9IHBvZC5zdGF0dXMgfHwge307XHJcbiAgICB2YXIgYW5zd2VyID0gZmFsc2U7XHJcbiAgICBhbmd1bGFyLmZvckVhY2goc3RhdHVzLmNvbmRpdGlvbnMsIChjb25kaXRpb24pID0+IHtcclxuICAgICAgdmFyIHQgPSBjb25kaXRpb24udHlwZTtcclxuICAgICAgaWYgKHQgJiYgdCA9PT0gXCJSZWFkeVwiKSB7XHJcbiAgICAgICAgdmFyIHN0YXR1cyA9IGNvbmRpdGlvbi5zdGF0dXM7XHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJUcnVlXCIpIHtcclxuICAgICAgICAgIGFuc3dlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlQXBwVmlld1BvZENvdW50ZXJzKGFwcFZpZXcpIHtcclxuICAgIHZhciBhcnJheSA9IFtdO1xyXG4gICAgdmFyIG1hcCA9IHt9O1xyXG4gICAgdmFyIHBvZHMgPSBhcHBWaWV3LnBvZHM7XHJcbiAgICB2YXIgbG93ZXN0RGF0ZSA9IG51bGw7XHJcbiAgICBhbmd1bGFyLmZvckVhY2gocG9kcywgcG9kID0+IHtcclxuICAgICAgdmFyIHNlbGVjdG9yID0gZ2V0TGFiZWxzKHBvZCk7XHJcbiAgICAgIHZhciBzZWxlY3RvclRleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKHNlbGVjdG9yLCBcIiBcIik7XHJcbiAgICAgIHZhciBhbnN3ZXIgPSBtYXBbc2VsZWN0b3JdO1xyXG4gICAgICBpZiAoIWFuc3dlcikge1xyXG4gICAgICAgIGFuc3dlciA9IHtcclxuICAgICAgICAgIGxhYmVsVGV4dDogc2VsZWN0b3JUZXh0LFxyXG4gICAgICAgICAgcG9kc0xpbms6IFVybEhlbHBlcnMuam9pbihcIi9rdWJlcm5ldGVzL25hbWVzcGFjZS9cIiwgcG9kLm1ldGFkYXRhLm5hbWVzcGFjZSwgXCJwb2RzP3E9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoc2VsZWN0b3JUZXh0KSksXHJcbiAgICAgICAgICB2YWxpZDogMCxcclxuICAgICAgICAgIHdhaXRpbmc6IDAsXHJcbiAgICAgICAgICBlcnJvcjogMFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbWFwW3NlbGVjdG9yXSA9IGFuc3dlcjtcclxuICAgICAgICBhcnJheS5wdXNoKGFuc3dlcik7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIHN0YXR1cyA9IChwb2RTdGF0dXMocG9kKSB8fCBcIkVycm9yXCIpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGlmIChzdGF0dXMuc3RhcnRzV2l0aChcInJ1blwiKSB8fCBzdGF0dXMuc3RhcnRzV2l0aChcIm9rXCIpKSB7XHJcbiAgICAgICAgYW5zd2VyLnZhbGlkICs9IDE7XHJcbiAgICAgIH0gZWxzZSBpZiAoc3RhdHVzLnN0YXJ0c1dpdGgoXCJ3YWl0XCIpIHx8IHN0YXR1cy5zdGFydHNXaXRoKFwicHduZFwiKSkge1xyXG4gICAgICAgIGFuc3dlci53YWl0aW5nICs9IDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYW5zd2VyLmVycm9yICs9IDE7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGNyZWF0aW9uVGltZXN0YW1wID0gZ2V0Q3JlYXRpb25UaW1lc3RhbXAocG9kKTtcclxuICAgICAgaWYgKGNyZWF0aW9uVGltZXN0YW1wKSB7XHJcbiAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShjcmVhdGlvblRpbWVzdGFtcCk7XHJcbiAgICAgICAgaWYgKCFsb3dlc3REYXRlIHx8IGQgPCBsb3dlc3REYXRlKSB7XHJcbiAgICAgICAgICBsb3dlc3REYXRlID0gZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgYXBwVmlldy4kY3JlYXRpb25EYXRlID0gbG93ZXN0RGF0ZTtcclxuICAgIHJldHVybiBhcnJheTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBcHBWaWV3U2VydmljZVZpZXdzKGFwcFZpZXcpIHtcclxuICAgIHZhciBhcnJheSA9IFtdO1xyXG4gICAgdmFyIHBvZHMgPSBhcHBWaWV3LnBvZHM7XHJcbiAgICBhbmd1bGFyLmZvckVhY2gocG9kcywgcG9kID0+IHtcclxuICAgICAgdmFyIGlkID0gZ2V0TmFtZShwb2QpO1xyXG4gICAgICBpZiAoaWQpIHtcclxuICAgICAgICB2YXIgYWJicmV2ID0gaWQ7XHJcbiAgICAgICAgdmFyIGlkeCA9IGlkLmluZGV4T2YoXCItXCIpO1xyXG4gICAgICAgIGlmIChpZHggPiAxKSB7XHJcbiAgICAgICAgICBhYmJyZXYgPSBpZC5zdWJzdHJpbmcoMCwgaWR4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9kLmlkQWJicmV2ID0gYWJicmV2O1xyXG4gICAgICB9XHJcbiAgICAgIHBvZC5zdGF0dXNDbGFzcyA9IHN0YXR1c1RleHRUb0Nzc0NsYXNzKHBvZFN0YXR1cyhwb2QpLCBpc1JlYWR5KHBvZCkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdmFyIHNlcnZpY2VzID0gYXBwVmlldy5zZXJ2aWNlcyB8fCBbXTtcclxuICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXJzID0gYXBwVmlldy5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzIHx8IFtdO1xyXG4gICAgdmFyIHNpemUgPSBNYXRoLm1heChzZXJ2aWNlcy5sZW5ndGgsIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMubGVuZ3RoLCAxKTtcclxuICAgIHZhciBhcHBOYW1lID0gYXBwVmlldy4kaW5mby5uYW1lO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcclxuICAgICAgdmFyIHNlcnZpY2UgPSBzZXJ2aWNlc1tpXTtcclxuICAgICAgdmFyIHJlcGxpY2F0aW9uQ29udHJvbGxlciA9IHJlcGxpY2F0aW9uQ29udHJvbGxlcnNbaV07XHJcbiAgICAgIHZhciBjb250cm9sbGVySWQgPSBnZXROYW1lKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XHJcbiAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShzZXJ2aWNlKSB8fCBjb250cm9sbGVySWQ7XHJcbiAgICAgIHZhciBhZGRyZXNzID0gQ29yZS5wYXRoR2V0KHNlcnZpY2UsIFtcInNwZWNcIiwgXCJwb3J0YWxJUFwiXSk7XHJcbiAgICAgIGlmICghbmFtZSAmJiBwb2RzLmxlbmd0aCkge1xyXG4gICAgICAgIG5hbWUgPSBwb2RzWzBdLmlkQWJicmV2O1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghYXBwVmlldy4kaW5mby5uYW1lKSB7XHJcbiAgICAgICAgYXBwVmlldy4kaW5mby5uYW1lID0gbmFtZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWFwcFZpZXcuaWQgJiYgcG9kcy5sZW5ndGgpIHtcclxuICAgICAgICBhcHBWaWV3LmlkID0gZ2V0TmFtZShwb2RzWzBdKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICBhcHBOYW1lID0gbmFtZTtcclxuICAgICAgfVxyXG4gICAgICB2YXIgcG9kQ291bnQgPSBwb2RzLmxlbmd0aDtcclxuICAgICAgdmFyIHBvZENvdW50VGV4dCA9IHBvZENvdW50ICsgXCIgcG9kXCIgKyAocG9kQ291bnQgPiAxID8gXCJzXCIgOiBcIlwiKTtcclxuICAgICAgdmFyIHZpZXcgPSB7XHJcbiAgICAgICAgYXBwTmFtZTogYXBwTmFtZSB8fCBuYW1lLFxyXG4gICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgY3JlYXRlZERhdGU6IGFwcFZpZXcuJGNyZWF0aW9uRGF0ZSxcclxuICAgICAgICBwb2RDb3VudDogcG9kQ291bnQsXHJcbiAgICAgICAgcG9kQ291bnRUZXh0OiBwb2RDb3VudFRleHQsXHJcbiAgICAgICAgYWRkcmVzczogYWRkcmVzcyxcclxuICAgICAgICBjb250cm9sbGVySWQ6IGNvbnRyb2xsZXJJZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlLFxyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcjogcmVwbGljYXRpb25Db250cm9sbGVyLFxyXG4gICAgICAgIHBvZHM6IHBvZHNcclxuICAgICAgfTtcclxuICAgICAgYXJyYXkucHVzaCh2aWV3KTtcclxuICAgIH1cclxuICAgIHJldHVybiBhcnJheTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGNvbnZlcnRzIGEgZ2l0IHBhdGggaW50byBhbiBhY2Nlc3NpYmxlIFVSTCBmb3IgdGhlIGJyb3dzZXJcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gZ2l0UGF0aFRvVXJsKGljb25QYXRoLCBicmFuY2ggPSBcIm1hc3RlclwiKSB7XHJcbiAgICByZXR1cm4gKEhhd3Rpb0NvcmUuaW5qZWN0b3IuZ2V0PHN0cmluZz4oJ0FwcExpYnJhcnlVUkwnKSB8fCAnJykgKyBcIi9naXQvXCIgKyBicmFuY2ggKyBpY29uUGF0aDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFzRGF0ZSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hCdWlsZENvbmZpZyhidWlsZENvbmZpZywgc29ydGVkQnVpbGRzKSB7XHJcbiAgICBpZiAoYnVpbGRDb25maWcpIHtcclxuICAgICAgdmFyIHRyaWdnZXJVcmw6c3RyaW5nID0gbnVsbDtcclxuICAgICAgdmFyIG1ldGFkYXRhID0gYnVpbGRDb25maWcubWV0YWRhdGEgfHwge307XHJcbiAgICAgIHZhciBuYW1lID0gbWV0YWRhdGEubmFtZTtcclxuICAgICAgYnVpbGRDb25maWcuJG5hbWUgPSBuYW1lO1xyXG4gICAgICB2YXIgcHJvamVjdExpbmsgPSBEZXZlbG9wZXIucHJvamVjdExpbmsobmFtZSk7XHJcbiAgICAgIHZhciBucyA9IG1ldGFkYXRhLm5hbWVzcGFjZSB8fCBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgICBidWlsZENvbmZpZy4kbmFtZXNwYWNlID0gbnM7XHJcbiAgICAgIGJ1aWxkQ29uZmlnLmVudmlyb25tZW50cyA9IFtdO1xyXG4gICAgICBidWlsZENvbmZpZy4kY3JlYXRpb25EYXRlID0gYXNEYXRlKEt1YmVybmV0ZXMuZ2V0Q3JlYXRpb25UaW1lc3RhbXAoYnVpbGRDb25maWcpKTtcclxuICAgICAgYnVpbGRDb25maWcuJGxhYmVsc1RleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKGdldExhYmVscyhidWlsZENvbmZpZykpO1xyXG5cclxuICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICBidWlsZENvbmZpZy4kdmlld0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJ3b3Jrc3BhY2VzXCIsIG5zLCBcInByb2plY3RzXCIsIG5hbWUsIFwiZW52aXJvbm1lbnRzXCIpO1xyXG4gICAgICAgIGJ1aWxkQ29uZmlnLiRlZGl0TGluayA9IFVybEhlbHBlcnMuam9pbihcIndvcmtzcGFjZXNcIiwgbnMsIFwicHJvamVjdHNcIiwgbmFtZSwgXCJidWlsZENvbmZpZ0VkaXRcIik7XHJcblxyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChbZmFsc2UsIHRydWVdLCAoZmxhZykgPT4ge1xyXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGJ1aWxkQ29uZmlnLnRyaWdnZXJzLCAodHJpZ2dlcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRyaWdnZXJVcmwpIHtcclxuICAgICAgICAgICAgICB2YXIgdHlwZSA9IHRyaWdnZXIudHlwZTtcclxuICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJnZW5lcmljXCIgfHwgZmxhZykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGdlbmVyaWMgPSB0cmlnZ2VyW3R5cGVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgZ2VuZXJpYykge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgc2VjcmV0ID0gZ2VuZXJpYy5zZWNyZXQ7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChzZWNyZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyVXJsID0gVXJsSGVscGVycy5qb2luKGJ1aWxkQ29uZmlnSG9va3NSZXN0VVJMKCksIG5hbWUsIHNlY3JldCwgdHlwZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRDb25maWcuJHRyaWdnZXJVcmwgPSB0cmlnZ2VyVXJsO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gbGV0cyBmaW5kIHRoZSBsYXRlc3QgYnVpbGQuLi5cclxuICAgICAgICBpZiAoc29ydGVkQnVpbGRzKSB7XHJcbiAgICAgICAgICBidWlsZENvbmZpZy4kbGFzdEJ1aWxkID0gXy5maW5kKHNvcnRlZEJ1aWxkcywge1xyXG4gICAgICAgICAgICBtZXRhZGF0YToge1xyXG4gICAgICAgICAgICAgIGxhYmVsczoge1xyXG4gICAgICAgICAgICAgICAgYnVpbGRjb25maWc6IG5hbWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB2YXIgJGZhYnJpYzhWaWV3cyA9IHt9O1xyXG5cclxuICAgICAgZnVuY3Rpb24gZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KG5hbWUsIG9iamVjdCwgYXV0b0NyZWF0ZSA9IGZhbHNlKSB7XHJcbiAgICAgICAgdmFyIHZpZXcgPSAkZmFicmljOFZpZXdzW25hbWVdO1xyXG4gICAgICAgIGlmIChhdXRvQ3JlYXRlICYmICF2aWV3KSB7XHJcbiAgICAgICAgICB2aWV3ID0ge31cclxuICAgICAgICAgICRmYWJyaWM4Vmlld3NbbmFtZV0gPSB2aWV3O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmlldykge1xyXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKG9iamVjdCwgKHZhbHVlLCBwcm9wZXJ0eSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IHZpZXdbcHJvcGVydHldO1xyXG4gICAgICAgICAgICBpZiAoIWN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICB2aWV3W3Byb3BlcnR5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdFN0YXJ0c1dpdGgocHJlZml4LCBvYmplY3QsIGF1dG9DcmVhdGUgPSBmYWxzZSkge1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkZmFicmljOFZpZXdzLCAodmlldywgbmFtZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHZpZXcgJiYgbmFtZS5zdGFydHNXaXRoKHByZWZpeCkpIHtcclxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKG9iamVjdCwgKHZhbHVlLCBwcm9wZXJ0eSkgPT4ge1xyXG4gICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdmlld1twcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgaWYgKCFjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2aWV3W3Byb3BlcnR5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBsYWJlbHMgPSBtZXRhZGF0YS5sYWJlbHMgfHwge307XHJcbiAgICAgIHZhciBhbm5vdGF0aW9ucyA9IG1ldGFkYXRhLmFubm90YXRpb25zIHx8IHt9O1xyXG5cclxuICAgICAgLy8gbGV0cyBkZWZhdWx0IHRoZSByZXBvIGFuZCB1c2VyXHJcbiAgICAgIGJ1aWxkQ29uZmlnLiR1c2VyID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LmplbmtpbnMvdXNlclwiXSB8fCBsYWJlbHNbXCJ1c2VyXCJdO1xyXG4gICAgICBidWlsZENvbmZpZy4kcmVwbyA9IGFubm90YXRpb25zW1wiZmFicmljOC5qZW5raW5zL3JlcG9cIl0gfHwgbGFiZWxzW1wicmVwb1wiXTtcclxuXHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChhbm5vdGF0aW9ucywgKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICB2YXIgcGFydHMgPSBrZXkuc3BsaXQoJy8nLCAyKTtcclxuICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgdmFyIGxpbmtJZCA9IHBhcnRzWzBdO1xyXG4gICAgICAgICAgdmFyIHByb3BlcnR5ID0gcGFydHNbMV07XHJcbiAgICAgICAgICBpZiAobGlua0lkICYmIHByb3BlcnR5ICYmIGxpbmtJZC5zdGFydHNXaXRoKFwiZmFicmljOC5saW5rXCIpKSB7XHJcbiAgICAgICAgICAgIHZhciBsaW5rID0gJGZhYnJpYzhWaWV3c1tsaW5rSWRdO1xyXG4gICAgICAgICAgICBpZiAoIWxpbmspIHtcclxuICAgICAgICAgICAgICBsaW5rID0ge1xyXG4gICAgICAgICAgICAgICAgY2xhc3M6IGxpbmtJZFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgJGZhYnJpYzhWaWV3c1tsaW5rSWRdID0gbGluaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaW5rW3Byb3BlcnR5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoYnVpbGRDb25maWcuJHVzZXIgJiYgYnVpbGRDb25maWcuJHJlcG8pIHtcclxuICAgICAgICAvLyBicm93c2UgZ29ncyByZXBvIHZpZXdcclxuICAgICAgICB2YXIgZ29nc1VybCA9IHNlcnZpY2VMaW5rVXJsKGdvZ3NTZXJ2aWNlTmFtZSk7XHJcbiAgICAgICAgaWYgKGdvZ3NVcmwpIHtcclxuICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5icm93c2VHb2dzLnZpZXdcIiwge1xyXG4gICAgICAgICAgICBsYWJlbDogXCJCcm93c2UuLi5cIixcclxuICAgICAgICAgICAgdXJsOiBVcmxIZWxwZXJzLmpvaW4oZ29nc1VybCwgYnVpbGRDb25maWcuJHVzZXIsIGJ1aWxkQ29uZmlnLiRyZXBvKSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQnJvd3NlIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIHJlcG9zaXRvcnlcIixcclxuICAgICAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWV4dGVybmFsLWxpbmtcIlxyXG4gICAgICAgICAgfSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBydW4gZm9yZ2UgY29tbWFuZHMgdmlld1xyXG4gICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5mb3JnZUNvbW1hbmQudmlld1wiLCB7XHJcbiAgICAgICAgICBsYWJlbDogXCJDb21tYW5kLi4uXCIsXHJcbiAgICAgICAgICB1cmw6IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCIvZm9yZ2UvY29tbWFuZHMvdXNlclwiLCBidWlsZENvbmZpZy4kdXNlciwgYnVpbGRDb25maWcuJHJlcG8pLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiUGVyZm9ybSBhbiBhY3Rpb24gb24gdGhpcyBwcm9qZWN0XCIsXHJcbiAgICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtcGxheS1jaXJjbGVcIlxyXG4gICAgICAgIH0sIHRydWUpO1xyXG5cclxuXHJcbiAgICAgICAgLy8gY29uZmlndXJlIGRldm9wcyB2aWV3XHJcbiAgICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmZvcmdlQ29tbWFuZC5kZXZvcHMuc2V0dGluZ3NcIiwge1xyXG4gICAgICAgICAgbGFiZWw6IFwiU2V0dGluZ3NcIixcclxuICAgICAgICAgIHVybDogVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcIi9mb3JnZS9jb21tYW5kL2Rldm9wcy1lZGl0L3VzZXJcIiwgYnVpbGRDb25maWcuJHVzZXIsIGJ1aWxkQ29uZmlnLiRyZXBvKSxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbmZpZ3VyZSB0aGUgRGV2T3BzIHNldHRpbmdzIGZvciB0aGlzIHByb2plY3RcIixcclxuICAgICAgICAgIGljb25DbGFzczogXCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIlxyXG4gICAgICAgIH0sIHRydWUpO1xyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gYWRkIHNvbWUgaWNvbnMgYW5kIGRlc2NyaXB0aW9uc1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsucmVwb3NpdG9yeS5icm93c2VcIiwge1xyXG4gICAgICAgIGxhYmVsOiBcIkJyb3dzZS4uLlwiLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkJyb3dzZSB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyByZXBvc2l0b3J5XCIsXHJcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWV4dGVybmFsLWxpbmtcIlxyXG4gICAgICB9KTtcclxuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmplbmtpbnMuam9iXCIsIHtcclxuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtdGFza3NcIixcclxuICAgICAgICBkZXNjcmlwdGlvbjogXCJWaWV3IHRoZSBKZW5raW5zIEpvYiBmb3IgdGhpcyBidWlsZFwiXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsuamVua2lucy5tb25pdG9yXCIsIHtcclxuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtdGFjaG9tZXRlclwiLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlZpZXcgdGhlIEplbmtpbnMgTW9uaXRvciBkYXNoYm9hcmQgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsuamVua2lucy5waXBlbGluZVwiLCB7XHJcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWFycm93LWNpcmNsZS1vLXJpZ2h0XCIsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVmlldyB0aGUgSmVua2lucyBQaXBlbGluZSBmb3IgdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSk7XHJcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5sZXRzY2hhdC5yb29tXCIsIHtcclxuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtY29tbWVudFwiLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkNoYXQgcm9vbSBmb3IgdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSk7XHJcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5sZXRzY2hhdC5yb29tXCIsIHtcclxuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtY29tbWVudFwiLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkNoYXQgcm9vbSBmb3IgdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSk7XHJcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay50YWlnYVwiLCB7XHJcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWNoZWNrLXNxdWFyZS1vXCIsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IFwiSXNzdWUgdHJhY2tlciBmb3IgdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSk7XHJcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5pc3N1ZXNcIiwge1xyXG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS1jaGVjay1zcXVhcmUtb1wiLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIklzc3VlcyBmb3IgdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSk7XHJcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5yZWxlYXNlc1wiLCB7XHJcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLXRhZ1wiLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIklzc3VlcyBmb3IgdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSk7XHJcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay50YWlnYS50ZWFtXCIsIHtcclxuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtdXNlcnNcIixcclxuICAgICAgICBkZXNjcmlwdGlvbjogXCJUZWFtIG1lbWJlcnMgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsudGVhbVwiLCB7XHJcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLXVzZXJzXCIsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVGVhbSBtZW1iZXJzIGZvciB0aGlzIHByb2plY3RcIlxyXG4gICAgICB9KTtcclxuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0U3RhcnRzV2l0aChcImZhYnJpYzgubGluay5lbnZpcm9ubWVudC5cIiwge1xyXG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS1jbG91ZFwiLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBrdWJlcm5ldGVzIG5hbWVzcGFjZSBmb3IgdGhpcyBlbnZpcm9ubWVudFwiXHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgIC8vIGxldHMgcHV0IHRoZSB2aWV3cyBpbnRvIHNlY3Rpb25zLi4uXHJcbiAgICAgIHZhciAkZmFicmljOENvZGVWaWV3cyA9IHt9O1xyXG4gICAgICB2YXIgJGZhYnJpYzhCdWlsZFZpZXdzID0ge307XHJcbiAgICAgIHZhciAkZmFicmljOFRlYW1WaWV3cyA9IHt9O1xyXG4gICAgICB2YXIgJGZhYnJpYzhFbnZpcm9ubWVudFZpZXdzID0ge307XHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkZmFicmljOFZpZXdzLCAodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgIHZhciB2aWV3O1xyXG4gICAgICAgIGlmIChrZXkuaW5kZXhPZihcInRhaWdhXCIpID4gMCB8fCBrZXkuaW5kZXhPZihcIi5pc3N1ZVwiKSA+IDAgfHwga2V5LmluZGV4T2YoXCJsZXRzY2hhdFwiKSA+IDB8fCBrZXkuaW5kZXhPZihcIi50ZWFtXCIpID4gMCkge1xyXG4gICAgICAgICAgdmlldyA9ICRmYWJyaWM4VGVhbVZpZXdzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoa2V5LmluZGV4T2YoXCJqZW5raW5zXCIpID4gMCkge1xyXG4gICAgICAgICAgdmlldyA9ICRmYWJyaWM4QnVpbGRWaWV3cztcclxuICAgICAgICB9IGVsc2UgaWYgKGtleS5pbmRleE9mKFwiLmVudmlyb25tZW50LlwiKSA+IDApIHtcclxuICAgICAgICAgIHZpZXcgPSAkZmFicmljOEVudmlyb25tZW50Vmlld3M7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZpZXcgPSAkZmFicmljOENvZGVWaWV3cztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmlld1trZXldID0gdmFsdWU7XHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgIGJ1aWxkQ29uZmlnLiRmYWJyaWM4Vmlld3MgPSAkZmFicmljOFZpZXdzO1xyXG4gICAgICBidWlsZENvbmZpZy4kZmFicmljOENvZGVWaWV3cyA9ICRmYWJyaWM4Q29kZVZpZXdzO1xyXG4gICAgICBidWlsZENvbmZpZy4kZmFicmljOEJ1aWxkVmlld3MgPSAkZmFicmljOEJ1aWxkVmlld3M7XHJcbiAgICAgIGJ1aWxkQ29uZmlnLiRmYWJyaWM4RW52aXJvbm1lbnRWaWV3cyA9ICRmYWJyaWM4RW52aXJvbm1lbnRWaWV3cztcclxuICAgICAgYnVpbGRDb25maWcuJGZhYnJpYzhUZWFtVmlld3MgPSAkZmFicmljOFRlYW1WaWV3cztcclxuXHJcbiAgICAgIHZhciAkamVua2luc0pvYiA9IGFubm90YXRpb25zW1wiZmFicmljOC5pby9qZW5raW5zLWpvYlwiXTtcclxuICAgICAgaWYgKCEkamVua2luc0pvYiAmJiAkZmFicmljOFZpZXdzW1wiZmFicmljOC5saW5rLmplbmtpbnMuam9iXCJdKSB7XHJcbiAgICAgICAgJGplbmtpbnNKb2IgPSBuYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGJ1aWxkQ29uZmlnLiRqZW5raW5zSm9iID0gJGplbmtpbnNKb2I7XHJcblxyXG4gICAgICBhbmd1bGFyLmZvckVhY2goJGZhYnJpYzhFbnZpcm9ubWVudFZpZXdzLCAoZW52KSA9PiB7XHJcbiAgICAgICAgdmFyIGMgPSBlbnYuY2xhc3M7XHJcbiAgICAgICAgdmFyIHByZWZpeCA9IFwiZmFicmljOC5saW5rLmVudmlyb25tZW50LlwiO1xyXG4gICAgICAgIGlmIChjICYmIGMuc3RhcnRzV2l0aChwcmVmaXgpKSB7XHJcbiAgICAgICAgICB2YXIgZW5zID0gYy5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7XHJcbiAgICAgICAgICBlbnYubmFtZXNwYWNlID0gZW5zO1xyXG4gICAgICAgICAgZW52LnVybCA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIG5zLCBcInByb2plY3RzXCIsIG5hbWUsIFwibmFtZXNwYWNlXCIsIGVucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJ1aWxkQ29uZmlnLmVudmlyb25tZW50cy5wdXNoKGVudik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoIWJ1aWxkQ29uZmlnLmVudmlyb25tZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAvLyBsZXRzIGNyZWF0ZSBhIHNpbmdsZSBlbnZpcm9ubWVudFxyXG4gICAgICAgIHZhciBlbnMgPSBucztcclxuICAgICAgICB2YXIgZW52ID0ge1xyXG4gICAgICAgICAgbmFtZXNwYWNlOiBlbnMsXHJcbiAgICAgICAgICBsYWJlbDogXCJDdXJyZW50XCIsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGUgZW52aXJvbmVtbnQgdGhhdCB0aGlzIHByb2plY3QgaXMgYnVpbHQgYW5kIHJ1biBpbnNpZGVcIixcclxuICAgICAgICAgIGljb25DbGFzczogXCJmYSBmYS1jbG91ZFwiLFxyXG4gICAgICAgICAgdXJsOiBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCBucywgXCJwcm9qZWN0c1wiLCBuYW1lLCBcIm5hbWVzcGFjZVwiLCBlbnMpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBidWlsZENvbmZpZy5lbnZpcm9ubWVudHMucHVzaChlbnYpO1xyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgYnVpbGRDb25maWcuZW52aXJvbm1lbnRzID0gYnVpbGRDb25maWcuZW52aXJvbm1lbnRzLnJldmVyc2UoKTtcclxuXHJcbiAgICAgIGJ1aWxkQ29uZmlnLnRvb2xzID0gW107XHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkZmFicmljOENvZGVWaWV3cywgKGVudikgPT4ge1xyXG4gICAgICAgIGJ1aWxkQ29uZmlnLnRvb2xzLnB1c2goZW52KTtcclxuICAgICAgfSk7XHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkZmFicmljOFRlYW1WaWV3cywgKGVudikgPT4ge1xyXG4gICAgICAgIGJ1aWxkQ29uZmlnLnRvb2xzLnB1c2goZW52KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEJ1aWxkQ29uZmlncyhidWlsZENvbmZpZ3MsIHNvcnRlZEJ1aWxkcyA9IG51bGwpIHtcclxuICAgIGFuZ3VsYXIuZm9yRWFjaChidWlsZENvbmZpZ3MsIChidWlsZENvbmZpZykgPT4ge1xyXG4gICAgICBlbnJpY2hCdWlsZENvbmZpZyhidWlsZENvbmZpZywgc29ydGVkQnVpbGRzKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGJ1aWxkQ29uZmlncztcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hCdWlsZHMoYnVpbGRzKSB7XHJcbiAgICBhbmd1bGFyLmZvckVhY2goYnVpbGRzLCAoYnVpbGQpID0+IHtcclxuICAgICAgZW5yaWNoQnVpbGQoYnVpbGQpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gXy5zb3J0QnkoYnVpbGRzLCBcIiRjcmVhdGlvbkRhdGVcIikucmV2ZXJzZSgpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEJ1aWxkKGJ1aWxkKSB7XHJcbiAgICBpZiAoYnVpbGQpIHtcclxuICAgICAgdmFyIG1ldGFkYXRhID0gYnVpbGQubWV0YWRhdGEgfHwge307XHJcbiAgICAgIHZhciBhbm5vdGF0aW9ucyA9IG1ldGFkYXRhLmFubm90YXRpb25zIHx8IHt9O1xyXG4gICAgICB2YXIgbmFtZSA9IGdldE5hbWUoYnVpbGQpO1xyXG4gICAgICB2YXIgbmFtZXNwYWNlID0gZ2V0TmFtZXNwYWNlKGJ1aWxkKTtcclxuICAgICAgYnVpbGQuJG5hbWUgPSBuYW1lO1xyXG4gICAgICBidWlsZC4kbmFtZXNwYWNlID0gbmFtZXNwYWNlO1xyXG5cclxuICAgICAgdmFyIG5hbWVBcnJheSA9IG5hbWUuc3BsaXQoXCItXCIpO1xyXG4gICAgICB2YXIgbmFtZUFycmF5TGVuZ3RoID0gbmFtZUFycmF5Lmxlbmd0aDtcclxuICAgICAgYnVpbGQuJHNob3J0TmFtZSA9IChuYW1lQXJyYXlMZW5ndGggPiA0KSA/IG5hbWVBcnJheS5zbGljZSgwLCBuYW1lQXJyYXlMZW5ndGggLSA0KS5qb2luKFwiLVwiKSA6IG5hbWUuc3Vic3RyaW5nKDAsIDMwKTtcclxuXHJcbiAgICAgIHZhciBsYWJlbHMgPSBnZXRMYWJlbHMoYnVpbGQpO1xyXG4gICAgICB2YXIgY29uZmlnSWQgPSBsYWJlbHMuYnVpbGRjb25maWc7XHJcbiAgICAgIGJ1aWxkLiRjb25maWdJZCA9IGNvbmZpZ0lkO1xyXG4gICAgICBpZiAoY29uZmlnSWQpIHtcclxuICAgICAgICAvL2J1aWxkLiRjb25maWdMaW5rID0gVXJsSGVscGVycy5qb2luKFwia3ViZXJuZXRlcy9idWlsZENvbmZpZ3NcIiwgY29uZmlnSWQpO1xyXG4gICAgICAgIGJ1aWxkLiRjb25maWdMaW5rID0gVXJsSGVscGVycy5qb2luKFwid29ya3NwYWNlc1wiLCBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpLCBcInByb2plY3RzXCIsIGNvbmZpZ0lkKTtcclxuICAgICAgfVxyXG4gICAgICB2YXIgY3JlYXRpb25UaW1lc3RhbXAgPSBnZXRDcmVhdGlvblRpbWVzdGFtcChidWlsZCk7XHJcbiAgICAgIGlmIChjcmVhdGlvblRpbWVzdGFtcCkge1xyXG4gICAgICAgIHZhciBkID0gbmV3IERhdGUoY3JlYXRpb25UaW1lc3RhbXApO1xyXG4gICAgICAgIGJ1aWxkLiRjcmVhdGlvbkRhdGUgPSBkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgLy9idWlsZC4kdmlld0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJrdWJlcm5ldGVzL2J1aWxkc1wiLCBuYW1lKTtcclxuICAgICAgICB2YXIgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJ3b3Jrc3BhY2VzXCIsIGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCksIFwicHJvamVjdHNcIiwgY29uZmlnSWQpO1xyXG4gICAgICAgIGJ1aWxkLiR2aWV3TGluayA9IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJidWlsZHNcIiwgbmFtZSk7XHJcbiAgICAgICAgLy9idWlsZC4kbG9nc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJrdWJlcm5ldGVzL2J1aWxkTG9nc1wiLCBuYW1lKTtcclxuICAgICAgICBidWlsZC4kbG9nc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwiYnVpbGRMb2dzXCIsIG5hbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGJ1aWxkLnBvZE5hbWUgPSBidWlsZC5wb2ROYW1lIHx8IGFubm90YXRpb25zW1wib3BlbnNoaWZ0LmlvL2J1aWxkLnBvZC1uYW1lXCJdO1xyXG4gICAgICB2YXIgcG9kTmFtZSA9IGJ1aWxkLnBvZE5hbWU7XHJcbiAgICAgIGlmIChwb2ROYW1lICYmIG5hbWVzcGFjZSkge1xyXG4gICAgICAgIHZhciBwb2ROYW1lQXJyYXkgPSBwb2ROYW1lLnNwbGl0KFwiLVwiKTtcclxuICAgICAgICB2YXIgcG9kTmFtZUFycmF5TGVuZ3RoID0gcG9kTmFtZUFycmF5Lmxlbmd0aDtcclxuICAgICAgICBidWlsZC4kcG9kU2hvcnROYW1lID0gKHBvZE5hbWVBcnJheUxlbmd0aCA+IDUpID8gcG9kTmFtZUFycmF5W3BvZE5hbWVBcnJheUxlbmd0aCAtIDVdIDogcG9kTmFtZS5zdWJzdHJpbmcoMCwgMzApO1xyXG4gICAgICAgIGJ1aWxkLiRwb2RMaW5rID0gVXJsSGVscGVycy5qb2luKFwia3ViZXJuZXRlcy9uYW1lc3BhY2VcIiwgbmFtZXNwYWNlLCBcInBvZHNcIiwgcG9kTmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBidWlsZDtcclxuICB9XHJcblxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoRGVwbG95bWVudENvbmZpZyhkZXBsb3ltZW50Q29uZmlnKSB7XHJcbiAgICBpZiAoZGVwbG95bWVudENvbmZpZykge1xyXG4gICAgICB2YXIgdHJpZ2dlclVybDpzdHJpbmcgPSBudWxsO1xyXG4gICAgICB2YXIgbmFtZSA9IENvcmUucGF0aEdldChkZXBsb3ltZW50Q29uZmlnLCBbXCJtZXRhZGF0YVwiLCBcIm5hbWVcIl0pO1xyXG4gICAgICBkZXBsb3ltZW50Q29uZmlnLiRuYW1lID0gbmFtZTtcclxuICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChkZXBsb3ltZW50Q29uZmlnLnRyaWdnZXJzLCAodHJpZ2dlcikgPT4ge1xyXG4gICAgICAgIHZhciB0eXBlID0gdHJpZ2dlci50eXBlO1xyXG4gICAgICAgIGlmICghZGVwbG95bWVudENvbmZpZy4kaW1hZ2VDaGFuZ2VQYXJhbXMgJiYgdHlwZSA9PT0gXCJJbWFnZUNoYW5nZVwiKSB7XHJcbiAgICAgICAgICB2YXIgaW1hZ2VDaGFuZ2VQYXJhbXMgPSB0cmlnZ2VyLmltYWdlQ2hhbmdlUGFyYW1zO1xyXG4gICAgICAgICAgaWYgKGltYWdlQ2hhbmdlUGFyYW1zKSB7XHJcbiAgICAgICAgICAgIHZhciBjb250YWluZXJOYW1lcyA9IGltYWdlQ2hhbmdlUGFyYW1zLmNvbnRhaW5lck5hbWVzIHx8IFtdO1xyXG4gICAgICAgICAgICBpbWFnZUNoYW5nZVBhcmFtcy4kY29udGFpbmVyTmFtZXMgPSBjb250YWluZXJOYW1lcy5qb2luKFwiIFwiKTtcclxuICAgICAgICAgICAgZGVwbG95bWVudENvbmZpZy4kaW1hZ2VDaGFuZ2VQYXJhbXMgPSBpbWFnZUNoYW5nZVBhcmFtcztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaERlcGxveW1lbnRDb25maWdzKGRlcGxveW1lbnRDb25maWdzKSB7XHJcbiAgICBhbmd1bGFyLmZvckVhY2goZGVwbG95bWVudENvbmZpZ3MsIChkZXBsb3ltZW50Q29uZmlnKSA9PiB7XHJcbiAgICAgIGVucmljaERlcGxveW1lbnRDb25maWcoZGVwbG95bWVudENvbmZpZyk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkZXBsb3ltZW50Q29uZmlncztcclxuICB9XHJcblxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoRXZlbnQoZXZlbnQpIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICB2YXIgbWV0YWRhdGEgPSBldmVudC5tZXRhZGF0YSB8fCB7fTtcclxuXHJcbiAgICAgIHZhciBmaXJzdFRpbWVzdGFtcCA9IGV2ZW50LmZpcnN0VGltZXN0YW1wO1xyXG4gICAgICBpZiAoZmlyc3RUaW1lc3RhbXApIHtcclxuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGZpcnN0VGltZXN0YW1wKTtcclxuICAgICAgICBldmVudC4kZmlyc3RUaW1lc3RhbXAgPSBkO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBsYXN0VGltZXN0YW1wID0gZXZlbnQubGFzdFRpbWVzdGFtcDtcclxuICAgICAgaWYgKGxhc3RUaW1lc3RhbXApIHtcclxuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGxhc3RUaW1lc3RhbXApO1xyXG4gICAgICAgIGV2ZW50LiRsYXN0VGltZXN0YW1wID0gZDtcclxuICAgICAgfVxyXG4gICAgICB2YXIgbGFiZWxzID0gYW5ndWxhci5jb3B5KGV2ZW50LnNvdXJjZSB8fCB7fSk7XHJcbiAgICAgIHZhciBpbnZvbHZlZE9iamVjdCA9IGV2ZW50Lmludm9sdmVkT2JqZWN0IHx8IHt9O1xyXG4gICAgICB2YXIgbmFtZSA9IGludm9sdmVkT2JqZWN0Lm5hbWU7XHJcbiAgICAgIHZhciBraW5kID0gaW52b2x2ZWRPYmplY3Qua2luZDtcclxuICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICBsYWJlbHNbJ25hbWUnXSA9IG5hbWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGtpbmQpIHtcclxuICAgICAgICBsYWJlbHNbJ2tpbmQnXSA9IGtpbmQ7XHJcbiAgICAgIH1cclxuICAgICAgZXZlbnQuJGxhYmVsc1RleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKGxhYmVscyk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEV2ZW50cyhldmVudHMsIG1vZGVsID0gbnVsbCkge1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKGV2ZW50cywgKGV2ZW50KSA9PiB7XHJcbiAgICAgIGVucmljaEV2ZW50KGV2ZW50KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGxldHMgdXBkYXRlIGxpbmtzIHRvIHRoZSBldmVudHMgZm9yIGVhY2ggcG9kIGFuZCBSQ1xyXG4gICAgaWYgKG1vZGVsKSB7XHJcbiAgICAgIGZ1bmN0aW9uIGNsZWFyRXZlbnRzKGVudGl0eSkge1xyXG4gICAgICAgIGVudGl0eS4kZXZlbnRzID0gW107XHJcbiAgICAgICAgZW50aXR5LiRldmVudHNMaW5rID0gbnVsbDtcclxuICAgICAgICBlbnRpdHkuJGV2ZW50Q291bnQgPSAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiB1cGRhdGVFdmVudChlbnRpdHksIGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGVudGl0eSkge1xyXG4gICAgICAgICAgZW50aXR5LiRldmVudHMucHVzaChldmVudCk7XHJcbiAgICAgICAgICBpZiAoIWVudGl0eS4kZXZlbnRzTGluaykge1xyXG4gICAgICAgICAgICBlbnRpdHkuJGV2ZW50c0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCIva3ViZXJuZXRlcy9uYW1lc3BhY2UvXCIsIGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCksIFwiZXZlbnRzXCIpICsgXCI/cT1raW5kJTNEXCIgKyBlbnRpdHkua2luZCArIFwiJTIwbmFtZSUzRFwiICsgZW50aXR5Lm1ldGFkYXRhLm5hbWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbnRpdHkuJGV2ZW50Q291bnQgPSBlbnRpdHkuJGV2ZW50cy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgcG9kcyA9IG1vZGVsLnBvZHMgfHwgW107XHJcbiAgICAgIHZhciByY3MgPSBtb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzIHx8IFtdO1xyXG4gICAgICBhbmd1bGFyLmZvckVhY2gocG9kcywgY2xlYXJFdmVudHMpO1xyXG4gICAgICBhbmd1bGFyLmZvckVhY2gocmNzLCBjbGVhckV2ZW50cyk7XHJcblxyXG4gICAgICBhbmd1bGFyLmZvckVhY2goZXZlbnRzLCAoZXZlbnQpID0+IHtcclxuICAgICAgICB2YXIgaW52b2x2ZWRPYmplY3QgPSBldmVudC5pbnZvbHZlZE9iamVjdCB8fCB7fTtcclxuICAgICAgICB2YXIgbmFtZSA9IGludm9sdmVkT2JqZWN0Lm5hbWU7XHJcbiAgICAgICAgdmFyIGtpbmQgPSBpbnZvbHZlZE9iamVjdC5raW5kO1xyXG4gICAgICAgIHZhciBucyA9IG1vZGVsLmN1cnJlbnROYW1lc3BhY2UoKTtcclxuICAgICAgICBpZiAobmFtZSAmJiBraW5kICYmIG5zKSB7XHJcbiAgICAgICAgICB2YXIgZW50aXR5ID0gbnVsbDtcclxuICAgICAgICAgIGlmIChraW5kID09PSBcIlJlcGxpY2F0aW9uQ29udHJvbGxlclwiKSB7XHJcbiAgICAgICAgICAgIGVudGl0eSA9IG1vZGVsLmdldFJlcGxpY2F0aW9uQ29udHJvbGxlcihucywgbmFtZSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IFwiUG9kXCIpIHtcclxuICAgICAgICAgICAgZW50aXR5ID0gbW9kZWwuZ2V0UG9kKG5zLCBuYW1lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbnRpdHkpIHtcclxuICAgICAgICAgICAgdXBkYXRlRXZlbnQoZW50aXR5LCBldmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBldmVudHM7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSW1hZ2VSZXBvc2l0b3J5KGltYWdlUmVwb3NpdG9yeSkge1xyXG4gICAgaWYgKGltYWdlUmVwb3NpdG9yeSkge1xyXG4gICAgICB2YXIgdHJpZ2dlclVybDpzdHJpbmcgPSBudWxsO1xyXG4gICAgICB2YXIgbmFtZSA9IENvcmUucGF0aEdldChpbWFnZVJlcG9zaXRvcnksIFtcIm1ldGFkYXRhXCIsIFwibmFtZVwiXSk7XHJcbiAgICAgIGltYWdlUmVwb3NpdG9yeS4kbmFtZSA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSW1hZ2VSZXBvc2l0b3JpZXMoaW1hZ2VSZXBvc2l0b3JpZXMpIHtcclxuICAgIGFuZ3VsYXIuZm9yRWFjaChpbWFnZVJlcG9zaXRvcmllcywgKGltYWdlUmVwb3NpdG9yeSkgPT4ge1xyXG4gICAgICBlbnJpY2hJbWFnZVJlcG9zaXRvcnkoaW1hZ2VSZXBvc2l0b3J5KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGltYWdlUmVwb3NpdG9yaWVzO1xyXG4gIH1cclxuXHJcblxyXG4gIHZhciBsYWJlbENvbG9ycyA9IHtcclxuICAgICdiYXRjaCc6ICdrOHMtYmFkZ2UtYmF0Y2gnLFxyXG4gICAgJ3JlZ2lvbic6ICdrOHMtYmFkZ2UtcmVnaW9uJyxcclxuICAgICd0eXBlJzogJ2s4cy1iYWRnZS10eXBlJyxcclxuICAgICdzeXN0ZW0nOiAnazhzLWJhZGdlLXN5c3RlbScsXHJcbiAgICAnaXNUYXJnZXQnOiAnazhzLWJhZGdlLXRhcmdldCcgICAgXHJcbiAgfTtcclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5lckxhYmVsQ2xhc3MobGFiZWxUeXBlOnN0cmluZykge1xyXG4gICAgaWYgKCEobGFiZWxUeXBlIGluIGxhYmVsQ29sb3JzKSkge1xyXG4gICAgICByZXR1cm4gJ21vdXNlLXBvaW50ZXInO1xyXG4gICAgfVxyXG4gICAgZWxzZSByZXR1cm4gbGFiZWxDb2xvcnNbbGFiZWxUeXBlXSArICcgbW91c2UtcG9pbnRlcic7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBmYWJyaWM4IGZvcmdlIHBsdWdpbiBpcyBlbmFibGVkXHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGlzRm9yZ2VFbmFibGVkKCkge1xyXG4gICAgLy8gVE9ETyBzaG91bGQgcmV0dXJuIHRydWUgaWYgdGhlIHNlcnZpY2UgXCJmYWJyaWM4LWZvcmdlXCIgaXMgdmFsaWRcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBrdWJlcm5ldGVzIHNlbGVjdGVkIG5hbWVzcGFjZSBvciB0aGUgZGVmYXVsdCBvbmVcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSB7XHJcbiAgICB2YXIgaW5qZWN0b3IgPSBIYXd0aW9Db3JlLmluamVjdG9yO1xyXG4gICAgaWYgKGluamVjdG9yKSB7XHJcbiAgICAgIHZhciBLdWJlcm5ldGVzU3RhdGUgPSBpbmplY3Rvci5nZXQ8YW55PihcIkt1YmVybmV0ZXNTdGF0ZVwiKSB8fCB7fTtcclxuICAgICAgcmV0dXJuIEt1YmVybmV0ZXNTdGF0ZS5zZWxlY3RlZE5hbWVzcGFjZSB8fCBkZWZhdWx0TmFtZXNwYWNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlZmF1bHROYW1lc3BhY2U7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc2V0Q3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UobnMpIHtcclxuICAgIGlmIChucykge1xyXG4gICAgICB2YXIgS3ViZXJuZXRlc1N0YXRlID0gaW5qZWN0PGFueT4oXCJLdWJlcm5ldGVzU3RhdGVcIikgfHwge307XHJcbiAgICAgIEt1YmVybmV0ZXNTdGF0ZS5zZWxlY3RlZE5hbWVzcGFjZSA9IG5zO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJlcyB0aGUganNvbiBzY2hlbWFcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gY29uZmlndXJlU2NoZW1hKCkge1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKHNjaGVtYS5kZWZpbml0aW9ucywgKGRlZmluaXRpb24sIG5hbWUpID0+IHtcclxuICAgICAgdmFyIHByb3BlcnRpZXMgPSBkZWZpbml0aW9uLnByb3BlcnRpZXM7XHJcbiAgICAgIGlmIChwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgdmFyIGhpZGVQcm9wZXJ0aWVzID0gW1wiY3JlYXRpb25UaW1lc3RhbXBcIiwgXCJraW5kXCIsIFwiYXBpVmVyc2lvblwiLCBcImFubm90YXRpb25zXCIsIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIiwgXCJuYW1lc3BhY2VcIiwgXCJyZXNvdXJjZVZlcnNpb25cIiwgXCJzZWxmTGlua1wiLCBcInVpZFwiXTtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goaGlkZVByb3BlcnRpZXMsIChwcm9wZXJ0eU5hbWUpID0+IHtcclxuICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcclxuICAgICAgICAgIGlmIChwcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICBwcm9wZXJ0eVtcImhpZGRlblwiXSAgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChwcm9wZXJ0aWVzLCAocHJvcGVydHksIHByb3BlcnR5TmFtZSkgPT4ge1xyXG4gICAgICAgICAgdmFyIHJlZiA9IHByb3BlcnR5W1wiJHJlZlwiXTtcclxuICAgICAgICAgIHZhciB0eXBlID0gcHJvcGVydHlbXCJ0eXBlXCJdO1xyXG4gICAgICAgICAgaWYgKHJlZiAmJiAoIXR5cGUgfHwgdHlwZSA9PT0gXCJvYmplY3RcIikpIHtcclxuICAgICAgICAgICAgcHJvcGVydHlbXCJ0eXBlXCJdID0gcmVmO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHR5cGUgPT09IFwiYXJyYXlcIikge1xyXG4gICAgICAgICAgICB2YXIgaXRlbXMgPSBwcm9wZXJ0eVtcIml0ZW1zXCJdO1xyXG4gICAgICAgICAgICBpZiAoaXRlbXMpIHtcclxuICAgICAgICAgICAgICB2YXIgcmVmID0gaXRlbXNbXCIkcmVmXCJdO1xyXG4gICAgICAgICAgICAgIHZhciB0eXBlID0gaXRlbXNbXCJ0eXBlXCJdO1xyXG4gICAgICAgICAgICAgIGlmIChyZWYgJiYgKCF0eXBlIHx8IHR5cGUgPT09IFwib2JqZWN0XCIpKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc1tcInR5cGVcIl0gPSByZWY7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNjaGVtYS5kZWZpbml0aW9ucy5vc19idWlsZF9XZWJIb29rVHJpZ2dlci5wcm9wZXJ0aWVzLnNlY3JldC50eXBlID0gXCJwYXNzd29yZFwiO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExldHMgcmVtb3ZlIGFueSBlbnJpY2hlZCBkYXRhIHRvIGxlYXZlIHRoZSBvcmlnaW5hbCBqc29uIGludGFjdFxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiB1bmVucmljaChpdGVtKSB7XHJcbiAgICB2YXIgbyA9IF8uY2xvbmVEZWVwKGl0ZW0pO1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKG8sICh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChcIiRcIikgfHwga2V5LnN0YXJ0c1dpdGgoXCJfXCIpKSB7XHJcbiAgICAgICAgZGVsZXRlIG9ba2V5XTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBkZWxldGUgb1snY29ubmVjdFRvJ107XHJcbiAgICByZXR1cm4gbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHVuZW5yaWNoZWQgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3RcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gdG9SYXdKc29uKGl0ZW0pIHtcclxuICAgIHZhciBvID0gdW5lbnJpY2goaXRlbSk7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobywgbnVsbCwgMik7IC8vIHNwYWNpbmcgbGV2ZWwgPSAyXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB1bmVucmljaGVkIFlBTUwgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0XHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRvUmF3WWFtbChpdGVtKSB7XHJcbiAgICB2YXIgbyA9IHVuZW5yaWNoKGl0ZW0pO1xyXG4gICAgcmV0dXJuIGpzeWFtbC5kdW1wKG8sIHsgaW5kZW50OiAyIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiB3YXRjaCgkc2NvcGU6IGFueSwgJGVsZW1lbnQ6IGFueSwga2luZCwgbnMsIGZuLCBsYWJlbFNlbGVjdG9yID0gbnVsbCkge1xyXG4gICAgIHZhciBjb25uZWN0aW9uID0gS3ViZXJuZXRlc0FQSS53YXRjaCh7XHJcbiAgICAgICAga2luZDoga2luZCxcclxuICAgICAgICBuYW1lc3BhY2U6IG5zLFxyXG4gICAgICAgIGxhYmVsU2VsZWN0b3I6IGxhYmVsU2VsZWN0b3IsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKG9iamVjdHMpIHtcclxuICAgICAgICAgIGZuKG9iamVjdHMpO1xyXG4gICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICAkZWxlbWVudC5vbignJGRlc3Ryb3knLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJTdGF0aWMgY29udHJvbGxlcltcIiArIGtpbmQgKyBcIiwgXCIgKyBucyArIFwiXSBlbGVtZW50IGRlc3Ryb3llZFwiKTtcclxuICAgICAgICAkc2NvcGUuJGRlc3Ryb3koKTtcclxuICAgICAgfSk7XHJcbiAgICAgICRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiU3RhdGljIGNvbnRyb2xsZXJbXCIgKyBraW5kICsgXCIsIFwiICsgbnMgKyBcIl0gc2NvcGUgZGVzdHJveWVkXCIpO1xyXG4gICAgICAgIGNvbm5lY3Rpb24uZGlzY29ubmVjdCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgdmFyIG9sZERlbGV0ZVNjb3BlRm4gPSAkc2NvcGUuZGVsZXRlU2NvcGU7XHJcbiAgICAgICRzY29wZS5kZWxldGVTY29wZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkZWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKG9sZERlbGV0ZVNjb3BlRm4pKSB7XHJcbiAgICAgICAgICBvbGREZWxldGVTY29wZUZuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlS3ViZXJuZXRlc0NsaWVudChraW5kLCBucyA9IG51bGwpIHtcclxuICAgIHZhciBLOFNDbGllbnRGYWN0b3J5ID0gaW5qZWN0PGFueT4oXCJLOFNDbGllbnRGYWN0b3J5XCIpO1xyXG4gICAgaWYgKCFLOFNDbGllbnRGYWN0b3J5KSB7XHJcbiAgICAgIGxvZy53YXJuKFwiQ291bGQgbm90IGZpbmQgaW5qZWN0ZWQgSzhTQ2xpZW50RmFjdG9yeSFcIik7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKGtpbmQgPT09IFwicHJvamVjdHNcIiB8fCBraW5kID09PSBcIm5hbWVzcGFjZXNcIikge1xyXG4gICAgICBucyA9IG51bGw7XHJcbiAgICB9IGVsc2UgaWYgKCFucykge1xyXG4gICAgICBucyA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBLOFNDbGllbnRGYWN0b3J5LmNyZWF0ZShraW5kLCBucyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRVc2VyTmFtZSgpIHtcclxuICAgIHZhciB1c2VyRGV0YWlscyA9IEhhd3Rpb09BdXRoLmdldFVzZXJQcm9maWxlKCk7XHJcbiAgICB2YXIgYW5zd2VyID0gbnVsbDtcclxuICAgIGlmICh1c2VyRGV0YWlscykge1xyXG4gICAgICBhbnN3ZXIgPSBnZXROYW1lKHVzZXJEZXRhaWxzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbnN3ZXIgfHwgXCJhZG1pblwiO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU5hbWVzcGFjZShucywgY2xpZW50Pykge1xyXG4gICAgaWYgKCFjbGllbnQpIHtcclxuICAgICAgY2xpZW50ID0gaXNPcGVuU2hpZnQgPyBLdWJlcm5ldGVzLmNyZWF0ZUt1YmVybmV0ZXNDbGllbnQoJ3Byb2plY3RzJykgOiBLdWJlcm5ldGVzLmNyZWF0ZUt1YmVybmV0ZXNDbGllbnQoJ25hbWVzcGFjZXMnKTtcclxuICAgIH1cclxuICAgIGlmIChucyAmJiBucyAhPT0gY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSkge1xyXG4gICAgICB2YXIgb2JqZWN0ID0ge1xyXG4gICAgICAgIGFwaVZlcnNpb246IEt1YmVybmV0ZXMuZGVmYXVsdEFwaVZlcnNpb24sXHJcbiAgICAgICAga2luZDogaXNPcGVuU2hpZnQgPyAnUHJvamVjdCcgOiAnTmFtZXNwYWNlJyxcclxuICAgICAgICBtZXRhZGF0YToge1xyXG4gICAgICAgICAgbmFtZTogbnMsXHJcbiAgICAgICAgICBsYWJlbHM6IHtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIGNsaWVudC5wdXQob2JqZWN0LFxyXG4gICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBsb2cuaW5mbyhcIkNyZWF0ZWQgbmFtZXNwYWNlOiBcIiArIG5zKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gY3JlYXRlIG5hbWVzcGFjZTogXCIgKyBucyArIFwiOiBcIiArIGFuZ3VsYXIudG9Kc29uKGVycikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJDKG9iaiwgb25Db21wbGV0ZUZuID0gbnVsbCl7XHJcbiAgICB2YXIgY2xpZW50ID0gIEt1YmVybmV0ZXMuY3JlYXRlS3ViZXJuZXRlc0NsaWVudCgncmVwbGljYXRpb25jb250cm9sbGVycycsJ2RlZmF1bHQnKTtcclxuICAgIHZhciBSQ1RlbXBsYXRlID0gbmV3IHJlc291cmNlUkNUZW1wbGF0ZSgpO1xyXG4gICAgdmFyIHJjVGVtcGxhdGUgPSBSQ1RlbXBsYXRlLmNyZWF0ZVJDKG9iaik7ICBcclxuICAgIGNsaWVudC5wdXQocmNUZW1wbGF0ZSwgZnVuY3Rpb24ob2JqKSB7ICAgICAgIFxyXG4gICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihvbkNvbXBsZXRlRm4pKSB7XHJcbiAgICAgICAgICAgb25Db21wbGV0ZUZuKG9iaik7XHJcbiAgICAgICB9XHJcbiAgICB9LChlcnIpID0+e1xyXG4gICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgIGV4cG9ydCBmdW5jdGlvbiBjb25uZWN0T3JhY2xlKCRodHRwLCAkdGltZW91dCwgdXJsLCBvcGVyYXRpb24sIHJlcGxpY2FzLCBkZWxheVRpbWUpe1xyXG4gICAgICAkdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICRodHRwKHtcclxuICAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICAgbWV0aG9kOidQT1NUJyxcclxuICAgICAgICAgICAgIHBhcmFtczp7b3JhY2xlTmFtZTogZ2V0TmFtZShyZXBsaWNhcyksIG9wZXJhdGlvbjogb3BlcmF0aW9ufSwgICAgICAgICAgICBcclxuICAgICAgICAgfSkuc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcclxuICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic3VjY2Vzc1wiKTtcclxuICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XHJcbiAgICAgICAgICAgICAvL2xvZy53YXJuKFwiRmFpbGVkIHRvIGNvbm5lY3QgXCIgKyBjb25uZWN0UGFyYW0gKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgIH0pO1xyXG4gICAgfSwgZGVsYXlUaW1lKTtcclxuICAgfVxyXG5cclxuICAgZXhwb3J0IGZ1bmN0aW9uIGdldE9yYWNsZVN0YXR1cyhsYWJlbHMpe1xyXG4gICAgICAgdmFyIGFuc3dlciA9IC0xO1xyXG4gICAgICAgaWYodHlwZW9mKGxhYmVscykgPT09ICdvYmplY3QnICYmIGxhYmVscy5oYXNPd25Qcm9wZXJ0eShcInN0YXR1c1wiKSl7XHJcbiAgICAgICAgICAgc3dpdGNoKGxhYmVscy5zdGF0dXMpe1xyXG4gICAgICAgICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgICAgICAgICAgYW5zd2VyID0gMDtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXIgPSAxO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICAgICAgICAgIGFuc3dlciA9IDI7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXIgPSAtMTtcclxuICAgICAgICAgICB9XHJcbiAgICAgICB9XHJcbiAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICB9XHJcblxyXG4gICBleHBvcnQgZnVuY3Rpb24gZ2V0RXh0cmFjdFN0YXR1cyhsYWJlbHMpe1xyXG4gICAgICAgaWYobGFiZWxzLmlzVGFyZ2V0ID09PSAnZmFsc2UnKXtcclxuICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQobGFiZWxzLmlzRXh0cmFjdCk7XHJcbiAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICByZXR1cm4gMTA7XHJcbiAgICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIGV4cG9ydCBmdW5jdGlvbiBnZXRPcmFjbGVOYW1lKG5hbWU6c3RyaW5nKTpzdHJpbmcge1xyXG4gICAgICAgdmFyIHJlc3VsdHMgPSBuYW1lLnNwbGl0KFwiLVwiKTtcclxuICAgICAgIGlmKHJlc3VsdHMubGVuZ3RoID09PSAyKXtcclxuICAgICAgICAgIHJldHVybiBcIuaxh+aAu+aVsOaNruW6k1wiICsgXCIoXCIgK3Jlc3VsdHNbMV0gKyBcIilcIjtcclxuICAgICAgIH1lbHNlIGlmKHJlc3VsdHMubGVuZ3RoID09PSAzKXtcclxuICAgICAgICAgIHJldHVybiBLdWJlcm5ldGVzLmdldENvdW50eUJ5Q29kZShyZXN1bHRzWzBdKSArIFwiX1wiICsgS3ViZXJuZXRlcy5nZXRTeXN0ZW1OYW1lQnlJZChyZXN1bHRzWzFdKTtcclxuICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIGV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGF0YVRvT3JhY2xlKCRodHRwLCBzZWxlY3RlZFJlcGxpY2F0aW9uQ29udHJvbGxlcnMsIHRhcmdldE9yYWNsZTogQ29uZmlncy5vcmFjbGVQYXJhbSl7XHJcbiAgICAgICAvL2NvbnNvbGUubG9nKHRhcmdldFJlcGxpY2F0aW9uQ29udHJvbGxlci5sZW5ndGgpOyAgICAgIFxyXG4gICAgICB2YXIgYW5zd2VyID0gdGFyZ2V0T3JhY2xlICYmIHRydWU7IFxyXG4gICAgICB2YXIgaW5uZWVkT3JhY2xlID0gW107ICAgICBcclxuICAgICAgc2VsZWN0ZWRSZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmZvckVhY2goKHJjKSA9PiB7ICAgICAgICAgICBcclxuICAgICAgICAgYW5zd2VyID0gYW5zd2VyICYmIGNoZWNrb3V0T3JhY2xlSXNSdW5uaW5nKHJjKTtcclxuICAgICAgICAgICAgICBpbm5lZWRPcmFjbGUucHVzaCh7XHJcbiAgICAgICAgICAgICAgXCJuYW1lXCI6IGdldE5hbWUocmMpLFxyXG4gICAgICAgICAgICAgIFwiaXBcIjogZ2V0SG9zdChyYy4kcG9kc1swXSksXHJcbiAgICAgICAgICAgICAgXCJwb3J0XCI6IHJjLiRwb2RzWzBdLnNwZWMuY29udGFpbmVyc1swXS5wb3J0c1swXS5ob3N0UG9ydCxcclxuICAgICAgICAgICAgICBcImlzVGFyZ2V0XCI6IGZhbHNlXHJcbiAgICAgICAgICB9KTsgICAgICAgICAgXHJcbiAgICAgIH0pO1xyXG4gICAgIFxyXG4gICAgICBpZihhbnN3ZXIpe1xyXG4gICAgICAgICAgdmFyIGRhdGEgPXtcIm5hbWVcIjogdGFyZ2V0T3JhY2xlLmlkLCBcInRhcmdldFwiOiB0YXJnZXRPcmFjbGUsIFwiaW5uZWVkXCI6IGlubmVlZE9yYWNsZX07XHJcbiAgICAgICAgICBDb25maWdzLm9yYWNsZUluZm9PcGVyYXRlKCRodHRwLCBcIi9qYXZhL2NvbnNvbGUvYXBpL29yYWNsZVwiLCBDb25maWdzLk9wZXJhdGVUeXBlLkVYVFJBQ1QsIGRhdGEpO1xyXG4gICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgYWxlcnQoXCLmgqjpgInmi6nnmoTmsYfmgLvmlbDmja7lupPmiJbpnIDopoHmsYfmgLvnmoTmlbDmja7lupPkuK3lrZjlnKjmnKrlkK/liqjmiJDlip/nmoTmlbDmja7lupPvvIzlr7zoh7TmsYfmgLvmk43kvZzlpLHotKXvvIzor7fph43mlrDpgInmi6nvvIFcIik7XHJcbiAgICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIGV4cG9ydCBmdW5jdGlvbiBjaGVja291dE9yYWNsZUlzUnVubmluZyhyYyl7XHJcbiAgICAgIGlmKHJjLiRwb2RDb3VudGVycy5yZWFkeSAmJiByYy4kb3JhY2xlU3RhdHVzID09IDIpe1xyXG4gICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIGV4cG9ydCBmdW5jdGlvbiByZXBsaWNhc0lzQ3JlYXRlZCAocmVwbGljYXRpb25jb250cm9sbGVyczpBcnJheTxhbnk+LCBuYW1lOnN0cmluZyl7XHJcbiAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgIGlmKCByZXBsaWNhdGlvbmNvbnRyb2xsZXJzICE9bnVsbCB8fCByZXBsaWNhdGlvbmNvbnRyb2xsZXJzLmxlbmd0aDw9MCl7XHJcbiAgICAgICBmb3IodmFyIGk9MDsgaTxyZXBsaWNhdGlvbmNvbnRyb2xsZXJzLmxlbmd0aDtpKyspe1xyXG4gICAgICAgICBpZihnZXROYW1lKHJlcGxpY2F0aW9uY29udHJvbGxlcnNbaV0pID09PSBuYW1lKXtcclxuICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgfVxyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuXHJcbiAgZXhwb3J0IHZhciBfbW9kdWxlID0gYW5ndWxhci5tb2R1bGUocGx1Z2luTmFtZSwgWydoYXd0aW8tY29yZScsICdoYXd0aW8tdWknLCAndWkuY29kZW1pcnJvcicsICdudmQzJywgJ3RyZWVDb250cm9sJ10pO1xyXG4gIGV4cG9ydCB2YXIgY29udHJvbGxlciA9IFBsdWdpbkhlbHBlcnMuY3JlYXRlQ29udHJvbGxlckZ1bmN0aW9uKF9tb2R1bGUsIHBsdWdpbk5hbWUpO1xyXG4gIGV4cG9ydCB2YXIgcm91dGUgPSBQbHVnaW5IZWxwZXJzLmNyZWF0ZVJvdXRpbmdGdW5jdGlvbih0ZW1wbGF0ZVBhdGgpO1xyXG5cclxuICBfbW9kdWxlLmNvbmZpZyhbJyRyb3V0ZVByb3ZpZGVyJywgKCRyb3V0ZVByb3ZpZGVyOm5nLnJvdXRlLklSb3V0ZVByb3ZpZGVyKSA9PiB7ICAgICAgIFxyXG4gICAgJHJvdXRlUHJvdmlkZXIud2hlbihjb250ZXh0LCByb3V0ZSgnd29ya3NwYWNlcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgICAgICAgICAgICAud2hlbihcIi9kYXRhLW1hbmFnZXJcIiwgcm91dGUoJ3dvcmtzcGFjZXMuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdPdmVydmlldy86dHlwZS9kYXRhLXR5cGUvYWxsJyksIHJvdXRlKCd3b3Jrc3BhY2VzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnT3ZlcnZpZXcvOnR5cGUvZGF0YS10eXBlL2ZpbmFuY2lhbCcpLCByb3V0ZSgnd29ya3NwYWNlcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ092ZXJ2aWV3Lzp0eXBlL2RhdGEtdHlwZS9zb2NpYWwtc2VjdXJpdHknKSwgcm91dGUoJ3dvcmtzcGFjZXMuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnT3ZlcnZpZXcvdGFzaycpLCByb3V0ZSgnZmlsZU1pZ3JhdGlvblRhc2suaHRtbCcsIGZhbHNlKSkgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAub3RoZXJ3aXNlKGNvbnRleHQpOyAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgfV0pOyAgXHJcblxyXG4gIF9tb2R1bGUucnVuKFsndmlld1JlZ2lzdHJ5JywgJ1NlcnZpY2VSZWdpc3RyeScsICdIYXd0aW9OYXYnLCAnS3ViZXJuZXRlc01vZGVsJywgJyR0ZW1wbGF0ZUNhY2hlJywgKHZpZXdSZWdpc3RyeSwgU2VydmljZVJlZ2lzdHJ5LCBIYXd0aW9OYXYsIEt1YmVybmV0ZXNNb2RlbCwgJHRlbXBsYXRlQ2FjaGUpID0+IHtcclxuICAgIGxvZy5kZWJ1ZyhcIlJ1bm5pbmdcIik7ICAgXHJcbiAgICB2aWV3UmVnaXN0cnlbJ3dvcmtzcGFjZXMnXSA9IEt1YmVybmV0ZXMudGVtcGxhdGVQYXRoICsgJ2xheW91dEt1YmVybmV0ZXMuaHRtbCc7XHJcbiAgICB2aWV3UmVnaXN0cnlbJ25hbWVzcGFjZXMnXSA9IEt1YmVybmV0ZXMudGVtcGxhdGVQYXRoICsgJ2xheW91dEt1YmVybmV0ZXMuaHRtbCc7XHJcblxyXG4gICAgdmFyIGJ1aWxkZXIgPSBIYXd0aW9OYXYuYnVpbGRlcigpO1xyXG5cclxuICAgIHZhciBkbWFuYWdlclRhYiA9IGJ1aWxkZXIuaWQoJ2RtYW5hZ2VyJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgIC5yYW5rKDIwMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgIC5ocmVmKCgpID0+IGNvbnRleHQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAudGl0bGUoKCkgPT4gJ+aVsOaNrueuoeeQhicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAvLy5pc1ZhbGlkKCgpID0+ICFDb3JlLmlzUmVtb3RlQ29ubmVjdGlvbigpKSAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpO1xyXG5cclxuICAgIEhhd3Rpb05hdi5hZGQoZG1hbmFnZXJUYWIpO1xyXG4gIH1dKTtcclxuXHJcbiAgX21vZHVsZS5maWx0ZXIoJ2FzVHJ1c3RlZEh0bWwnLCBbJyRzY2UnLCBmdW5jdGlvbiAoJHNjZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICAgIHJldHVybiAkc2NlLnRydXN0QXNIdG1sKHRleHQpO1xyXG4gICAgfTtcclxuICB9XSk7XHJcblxyXG4gIGhhd3Rpb1BsdWdpbkxvYWRlci5hZGRNb2R1bGUocGx1Z2luTmFtZSk7XHJcblxyXG4gIC8vIGZvciBzY3JvbGwtZ2x1ZSBkaXJlY3RpdmVcclxuICBoYXd0aW9QbHVnaW5Mb2FkZXIuYWRkTW9kdWxlKCdsdWVnZy5kaXJlY3RpdmVzJyk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyUGx1Z2luLnRzXCIvPlxyXG5tb2R1bGUgRGV2ZWxvcGVye1xyXG5cdGV4cG9ydCBjbGFzcyBPcHRpb25zUGFyYW1ze1xyXG5cdFx0cHVibGljIHBhZ2VyU2l6ZU9wdGlvbiA9IFsyMCw1MCwxMDBdO1xyXG5cdFx0cHVibGljIGRhdGFUeXBlID1udWxsO1xyXG5cdFx0cHVibGljIGN1cnJlbnRUYWJsZVNpemUgPTIwO1xyXG5cdFx0cHVibGljIGRhdGFCYXRjaCA9bnVsbDtcclxuXHRcdHB1YmxpYyBsYWJlbHM9e307XHJcblx0XHRwdWJsaWMgY3VycmVudFBhZ2VOdW09MTtcdFx0XHJcblx0XHRwdWJsaWMgdG90YWxTaXplPW51bGw7XHJcblx0XHRwdWJsaWMgcHJpb3JUYWJsZVNpemUgPSAyMDtcdFx0XHRcclxuXHJcblx0XHRwdWJsaWMgY3JlYXRlUGFyYW1EYXRhKCl7XHJcblx0XHRcdHZhciBleHRlbmRWYWx1ZSA9W1wiY2l0eU5hbWVcIiwgXCJkaXN0cmljdE5hbWVcIiwgXCJkYXRhVmVyc2lvblwiLCBcInN5c3RlbU5hbWVcIiwgXCJkYXRhWWVhclwiXTtcclxuXHRcdFx0dmFyIHJlc3VsdD17XHJcblx0XHRcdFx0Y3VycmVudFBhZ2VOdW06IHRoaXMuY3VycmVudFBhZ2VOdW0sXHJcblx0XHRcdFx0ZGF0YVR5cGU6IHRoaXMuZGF0YVR5cGUsXHJcblx0XHRcdFx0c3VibWl0dGVkQmF0Y2g6IHRoaXMuZGF0YUJhdGNoLFxyXG5cdFx0XHRcdGxpbWl0OiB0aGlzLmN1cnJlbnRUYWJsZVNpemUsXHJcblx0XHRcdFx0cHJpb3JUYWJsZVNpemU6IHRoaXMucHJpb3JUYWJsZVNpemVcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0YW5ndWxhci5mb3JFYWNoKHRoaXMubGFiZWxzLCh2YWx1ZSwga2V5KSA9PntcclxuXHRcdFx0XHRpZihleHRlbmRWYWx1ZS5pbmRleE9mKGtleSkpXHJcblx0XHRcdFx0XHRyZXN1bHRba2V5XSA9IHZhbHVlO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0cHVibGljIGdldFBhZ2VTaXplTnVtKCl7XHRcdFx0XHJcblx0XHQgICAgdmFyIG51bSA9IE1hdGguY2VpbCh0aGlzLnRvdGFsU2l6ZS90aGlzLmN1cnJlbnRUYWJsZVNpemUpO1x0XHJcblx0XHQgICAgaWYobnVtIDwgdGhpcy5jdXJyZW50UGFnZU51bSlcdFx0ICAgIFx0XHJcblx0XHRcdCAgbnVtID0gIHRoaXMuY3VycmVudFBhZ2VOdW07XHRcdFx0XHJcblx0XHRcdHJldHVybiBudW07XHJcblx0XHR9XHJcblx0fVxyXG5cdGZ1bmN0aW9uIGNyZWF0ZUxhYmVsKGNpdHlOYW1lOnN0cmluZywgZGlzdHJpY3ROYW1lOnN0cmluZywgc3lzdGVtTmFtZTpzdHJpbmcsIHZlcnNpb246c3RyaW5nKXtcclxuXHRcdHJldHVybntcclxuXHRcdFx0Y2l0eU5hbWU6IGNpdHlOYW1lLFxyXG5cdFx0XHRkaXN0cmljdE5hbWU6IGRpc3RyaWN0TmFtZSxcclxuXHRcdFx0c3lzdGVtTmFtZTogc3lzdGVtTmFtZSxcclxuXHRcdFx0dmVyc2lvbjogXCLniYjmnKxcIit2ZXJzaW9uXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBjcmVhdGVLZXkocmVnaW9uYWxpc21Db2RlLCBzeXN0ZW1JZCwgdmVyc2lvbil7XHJcblx0XHRyZXR1cm4gcmVnaW9uYWxpc21Db2RlICsgXCItXCIgKyBzeXN0ZW1JZCArIFwiLVwiICsgdmVyc2lvbjtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHBvcHVsYXRlS2V5KGl0ZW0pe1xyXG5cdFx0dmFyIHJlc3VsdCA9IGl0ZW07XHJcblx0XHRyZXN1bHRbXCJfa2V5XCJdID0gY3JlYXRlS2V5KGl0ZW0ucmVnaW9uYWxpc21Db2RlLCAgaXRlbS5zeXN0ZW1Db2RlLCBpdGVtLmRhdGFWZXJzaW9uKTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBwb3B1bGF0ZUxhYmVsKGl0ZW0pe1xyXG5cdFx0dmFyIHJlc3VsdCA9IGl0ZW1cclxuXHRcdHJlc3VsdFtcImxhYmVsc1wiXSA9IGNyZWF0ZUxhYmVsKGl0ZW0uY2l0eU5hbWUsIGl0ZW0uZGlzdHJpY3ROYW1lLCBpdGVtLnN5c3RlbU5hbWUsIGl0ZW0uZGF0YVZlcnNpb24pO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHBvcHVsYXRlTGFiZWxzKGl0ZW1zOkFycmF5PGFueT4pe1xyXG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xyXG5cdFx0YW5ndWxhci5mb3JFYWNoKGl0ZW1zLCAoaXRlbSkgPT4ge1x0XHRcdFxyXG5cdFx0XHRyZXN1bHQucHVzaChwb3B1bGF0ZUxhYmVsKGl0ZW0pKTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHBvcHVsYXRlS2V5cyhpdGVtczpBcnJheTxhbnk+KXtcclxuXHRcdHZhciByZXN1bHQgPVtdO1xyXG5cdFx0YW5ndWxhci5mb3JFYWNoKGl0ZW1zLCAoaXRlbSkgPT57XHJcblx0XHRcdHJlc3VsdC5wdXNoKHBvcHVsYXRlS2V5KGl0ZW0pKTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGNyZWF0ZU5hbWUoY2l0eU5hbWUsIGRpc3RyaWN0TmFtZSl7XHJcblx0XHRyZXR1cm4gY2l0eU5hbWUgKyBcIi1cIiArIGRpc3RyaWN0TmFtZTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHBvcHVsYXRlTmFtZShpdGVtKXtcclxuXHRcdHZhciByZXN1bHQgPSBpdGVtO1xyXG5cdFx0cmVzdWx0W1wibmFtZVwiXSA9IGNyZWF0ZU5hbWUoaXRlbS5jaXR5TmFtZSwgaXRlbS5kaXN0cmljdE5hbWUpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHBvcHVsYXRlTmFtZXMoaXRlbXM6QXJyYXk8YW55Pil7XHJcblx0XHR2YXIgcmVzdWx0ID0gW107XHJcblx0XHRhbmd1bGFyLmZvckVhY2goaXRlbXMsIChpdGVtKSA9PntcdFx0XHRcclxuXHRcdFx0cmVzdWx0LnB1c2gocG9wdWxhdGVOYW1lKGl0ZW0pKTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGNyZWF0ZVBhcmFtRGF0YShvcHRpb25zOiBPcHRpb25zUGFyYW1zKXtcclxuXHRcdHJldHVybiBvcHRpb25zLmNyZWF0ZVBhcmFtRGF0YSgpO1xyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGNsYXNzIERhdGFNb2RlbFNlcnZpY2V7XHJcblx0XHRwdWJsaWMgZGF0YTpBcnJheTxhbnk+ID0gW107XHJcblx0XHRwdWJsaWMgcGFyYW1PcHRpb25zOiBPcHRpb25zUGFyYW1zID0gbmV3IE9wdGlvbnNQYXJhbXMoKTtcclxuXHRcdHB1YmxpYyB0cmFuc2ZlclRhc2tzOiBBcnJheTxhbnk+ID0gW107XHJcblxyXG5cdFx0Y29uc3RydWN0b3IoKXtcdFx0XHRcdFxyXG5cdFx0XHR0aGlzLnVwZGF0ZU1vZGVsKCk7XHRcdFx0XHRcdFx0XHRcclxuXHRcdH1cclxuXHJcblx0XHQvL+abtOaWsOaVsOaNruaooeWei1xyXG5cdFx0cHJvdGVjdGVkIGdldERhdGFNb2RlbChwYXJhbU9wdGlvbnMpe1xyXG5cdFx0XHR2YXIgcmVzdWx0IDtcclxuXHRcdFx0JC5hamF4KHsgXHJcblx0XHRcdFx0YXN5bmM6IGZhbHNlLCBcclxuXHRcdFx0XHR0eXBlIDogXCJQT1NUXCIsIFxyXG5cdFx0XHRcdHVybCA6IFwiL2phdmEvY29uc29sZS9hcGkvZGF0YS5qc29uXCIsIFxyXG5cdFx0XHRcdGRhdGFUeXBlIDogJ2pzb24nLFxyXG5cdFx0XHRcdGRhdGE6IGNyZWF0ZVBhcmFtRGF0YShwYXJhbU9wdGlvbnMpLFx0XHRcclxuXHRcdFx0XHRzdWNjZXNzIDogZnVuY3Rpb24oZGF0YSkge1x0XHRcdFx0XHJcblx0XHRcdFx0XHRyZXN1bHQgPSBkYXRhLmRhdGE7XHJcblx0XHRcdFx0XHRwYXJhbU9wdGlvbnMudG90YWxTaXplPWRhdGEubGVuZ3RoO1x0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdH0gXHJcblx0XHRcdH0pO1xyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1x0XHJcblx0XHR9XHJcblxyXG5cdFx0cHVibGljIGluaXRQYXJhbU9wdGlvbnMoKXtcclxuXHRcdFx0dGhpcy5wYXJhbU9wdGlvbnMgPSBuZXcgT3B0aW9uc1BhcmFtcygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHB1YmxpYyB1cGRhdGVNb2RlbCgpe1xyXG5cdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmdldERhdGFNb2RlbCh0aGlzLnBhcmFtT3B0aW9ucyk7XHJcblx0XHRcdHRoaXMubWF5YmVGb3JtYXQoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL+agvOW8j+aVsOaNruaooeWei+S4reeahOavj+S4quWNleadoeiusOW9lVxyXG5cdFx0cHVibGljIG1heWJlRm9ybWF0KCl7XHJcblx0XHRcdHRoaXMuZGF0YSA9IHBvcHVsYXRlS2V5cyh0aGlzLmRhdGEpO1xyXG5cdFx0XHR0aGlzLmRhdGEgPSBwb3B1bGF0ZU5hbWVzKHRoaXMuZGF0YSk7XHJcblx0XHRcdHRoaXMuZGF0YSAgPSBwb3B1bGF0ZUxhYmVscyh0aGlzLmRhdGEpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8v5pu05paw55So5oi36YCJ5oup5Y+C5pWwXHJcblx0XHRwdWJsaWMgdXBkYXRlUGFyYW1PcHRpb24ob3B0aW9uOnN0cmluZywgdmFsdWU6YW55KXtcclxuXHRcdFx0dGhpcy5wYXJhbU9wdGlvbnNbb3B0aW9uXSA9IHZhbHVlO1xyXG5cdFx0fVx0XHJcblxyXG5cdFx0Ly/moLnmja5rZXnojrflj5bnlKjmiLfpgInmi6nlj4LmlbBcclxuXHRcdHB1YmxpYyBnZXRQYXJhbU9wdGlvbihrZXk6c3RyaW5nKXtcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyYW1PcHRpb25zW2tleV07XHJcblx0XHR9XHJcblxyXG5cdFx0cHVibGljIHN0YXJ0SW50ZXJ2YWxUYXNrKCRpbnRlcnZhbCwgJGh0dHApe1xyXG5cdFx0XHR2YXIgcmVzdWx0O1xyXG5cdFx0XHR2YXIgdGltZXIgPSAkaW50ZXJ2YWwoKCkgPT4ge1x0IFx0XHRcdFxyXG5cdFx0IFx0XHQkLmFqYXgoe1xyXG5cdFx0XHRcdFx0YXN5bmM6IGZhbHNlLFxyXG5cdFx0XHRcdFx0dHlwZSA6IFwiUE9TVFwiLFxyXG5cdFx0XHRcdFx0dXJsIDogXCIvamF2YS9jb25zb2xlL2FwaS90YXNrL3RyYW5zZmVyL2xpc3RcIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3MgOiBmdW5jdGlvbihkYXRhKSB7IFxyXG5cdFx0XHRcdFx0ICAgIGlmKGRhdGEpe1x0XHRcdFxyXG5cdFx0XHRcdFx0XHQgICAgcmVzdWx0ID0gZGF0YTtcdFx0XHRcdFx0ICAgXHJcblx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdH0gXHRcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHR0aGlzLnRyYW5zZmVyVGFza3MgPSByZXN1bHQ7XHRcdFx0XHRcdFx0XHRcclxuIFx0XHQgICAgfSwxNTAwKTtcclxuXHJcbiBcdFx0ICAgIHRpbWVyLnRoZW4oKCkgPT57XHJcbiBcdFx0ICAgIFx0Y29uc29sZS5sb2coXCJEb25lIVwiKTtcclxuIFx0XHQgICAgfSwgKCkgPT57XHJcbiBcdFx0ICAgIFx0Y29uc29sZS5sb2coXCJlcnJvclwiKTtcclxuIFx0XHQgICAgfSwgKCkgPT57IFx0XHQgICAgXHRcclxuIFx0XHQgICAgXHRjb25zb2xlLmxvZyhcIuavj+asoemDveabtOaWsFwiKTsgXHRcdCAgICBcdFxyXG4gXHRcdCAgICB9KTtcclxuXHRcdH1cdFx0XHJcblx0fVxyXG5cclxuXHQvL+WIm+W7uuaVsOaNruaooeWei+acjeWKoVxyXG4gXHRfbW9kdWxlLmZhY3RvcnkoXCJEYXRhTW9kZWxcIiwgWyckcm9vdFNjb3BlJywgJyRodHRwJywgJyRpbnRlcnZhbCcsICckbG9jYXRpb24nLCAnJHJlc291cmNlJywgKCRyb290U2NvcGUsICRodHRwLCAkaW50ZXJ2YWwsICRsb2NhdGlvbiwgJHJlc291cmNlKSA9PiB7XHJcbiBcdFx0dmFyICRzY29wZSA9IG5ldyBEYXRhTW9kZWxTZXJ2aWNlKCk7ICBcclxuIFx0XHQkc2NvcGUuc3RhcnRJbnRlcnZhbFRhc2soJGludGVydmFsLCAkaHR0cCk7IFx0XHRcclxuIFx0ICAgIHJldHVybiAkc2NvcGU7XHJcbiBcdH1dKTtcclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hXb3Jrc3BhY2VzKHByb2plY3RzKSB7XHJcbiAgICBhbmd1bGFyLmZvckVhY2gocHJvamVjdHMsIChwcm9qZWN0KSA9PiB7XHJcbiAgICAgIGVucmljaFdvcmtzcGFjZShwcm9qZWN0KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHByb2plY3RzO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaFdvcmtzcGFjZShidWlsZCkge1xyXG4gICAgaWYgKGJ1aWxkKSB7XHJcbiAgICAgIHZhciBuYW1lID0gS3ViZXJuZXRlcy5nZXROYW1lKGJ1aWxkKTtcclxuICAgICAgYnVpbGQuJG5hbWUgPSBuYW1lO1xyXG4gICAgICBidWlsZC4kc29ydE9yZGVyID0gMCAtIGJ1aWxkLm51bWJlcjtcclxuXHJcbiAgICAgIHZhciBuYW1lQXJyYXkgPSBuYW1lLnNwbGl0KFwiLVwiKTtcclxuICAgICAgdmFyIG5hbWVBcnJheUxlbmd0aCA9IG5hbWVBcnJheS5sZW5ndGg7XHJcbiAgICAgIGJ1aWxkLiRzaG9ydE5hbWUgPSAobmFtZUFycmF5TGVuZ3RoID4gNCkgPyBuYW1lQXJyYXkuc2xpY2UoMCwgbmFtZUFycmF5TGVuZ3RoIC0gNCkuam9pbihcIi1cIikgOiBuYW1lLnN1YnN0cmluZygwLCAzMCk7XHJcblxyXG4gICAgICB2YXIgbGFiZWxzID0gS3ViZXJuZXRlcy5nZXRMYWJlbHMoYnVpbGQpO1xyXG4gICAgICBidWlsZC4kY3JlYXRpb25EYXRlID0gYXNEYXRlKEt1YmVybmV0ZXMuZ2V0Q3JlYXRpb25UaW1lc3RhbXAoYnVpbGQpKTtcclxuICAgICAgYnVpbGQuJGxhYmVsc1RleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKGxhYmVscyk7XHJcblxyXG4gICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgIGJ1aWxkLiRwcm9qZWN0c0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJ3b3Jrc3BhY2VzXCIsIG5hbWUpO1xyXG4gICAgICAgIGJ1aWxkLiRydW50aW1lTGluayA9IFVybEhlbHBlcnMuam9pbihcImt1YmVybmV0ZXMvbmFtZXNwYWNlL1wiLCBuYW1lLCBcIi9hcHBzXCIpO1xyXG4gICAgICAgIGJ1aWxkLiR2aWV3TGluayA9IGJ1aWxkLiRwcm9qZWN0c0xpbms7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBidWlsZDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBhc0RhdGUodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSmVua2luc0pvYnMoam9ic0RhdGEsIHByb2plY3RJZCwgam9iTmFtZSkge1xyXG4gICAgaWYgKGpvYnNEYXRhKSB7XHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChqb2JzRGF0YS5qb2JzLCAoam9iKSA9PiB7XHJcbiAgICAgICAgZW5yaWNoSmVua2luc0pvYihqb2IsIHByb2plY3RJZCwgam9iTmFtZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGpvYnNEYXRhO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEplbmtpbnNKb2Ioam9iLCBwcm9qZWN0SWQsIGpvYk5hbWUpIHtcclxuICAgIGlmIChqb2IpIHtcclxuICAgICAgam9iTmFtZSA9IGpvYk5hbWUgfHwgam9iLm5hbWUgfHwgcHJvamVjdElkO1xyXG4gICAgICBqb2IuJGpvYklkID0gam9iTmFtZTtcclxuICAgICAgam9iLiRwcm9qZWN0ID0gcHJvamVjdElkIHx8IGpvYk5hbWU7XHJcbiAgICAgIHZhciBsYXN0QnVpbGQgPSBqb2IubGFzdEJ1aWxkO1xyXG4gICAgICB2YXIgbGFzdEJ1aWxkUmVzdWx0ID0gbGFzdEJ1aWxkID8gbGFzdEJ1aWxkLnJlc3VsdCA6IFwiTk9UX1NUQVJURURcIjtcclxuICAgICAgdmFyICRpY29uQ2xhc3MgPSBjcmVhdGVCdWlsZFN0YXR1c0ljb25DbGFzcyhsYXN0QnVpbGRSZXN1bHQpO1xyXG5cclxuICAgICAgam9iLiRsYXN0QnVpbGROdW1iZXIgPSBlbnJpY2hKZW5raW5zQnVpbGQoam9iLCBsYXN0QnVpbGQpO1xyXG4gICAgICBqb2IuJGxhc3RTdWNjZXNzZnVsQnVpbGROdW1iZXIgPSBlbnJpY2hKZW5raW5zQnVpbGQoam9iLCBqb2IubGFzdFN1Y2Nlc3NmdWxCdWlsZCk7XHJcbiAgICAgIGpvYi4kbGFzdEZhaWxlZGxCdWlsZE51bWJlciA9IGVucmljaEplbmtpbnNCdWlsZChqb2IsIGpvYi5sYXN0RmFpbGVkbEJ1aWxkKTtcclxuXHJcbiAgICAgIGlmIChsYXN0QnVpbGQpIHtcclxuICAgICAgICBqb2IuJGR1cmF0aW9uID0gbGFzdEJ1aWxkLmR1cmF0aW9uO1xyXG4gICAgICAgIGpvYi4kdGltZXN0YW1wID0gYXNEYXRlKGxhc3RCdWlsZC50aW1lc3RhbXApO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBqb2JVcmwgPSAoam9iIHx8IHt9KS51cmw7XHJcbiAgICAgIGlmICgham9iVXJsIHx8ICFqb2JVcmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcclxuICAgICAgICB2YXIgamVua2luc1VybCA9IGplbmtpbnNMaW5rKCk7XHJcbiAgICAgICAgaWYgKGplbmtpbnNVcmwpIHtcclxuICAgICAgICAgIGpvYlVybCA9IFVybEhlbHBlcnMuam9pbihqZW5raW5zVXJsLCBcImpvYlwiLCBqb2JOYW1lKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoam9iVXJsKSB7XHJcbiAgICAgICAgam9iLiRqb2JMaW5rID0gam9iVXJsO1xyXG4gICAgICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgICAgIGpvYi4kcGlwZWxpbmVzTGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgam9iLiRwcm9qZWN0LCBcImplbmtpbnNKb2JcIiwgam9iTmFtZSwgXCJwaXBlbGluZXNcIik7XHJcbiAgICAgICAgam9iLiRidWlsZHNMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBqb2IuJHByb2plY3QsIFwiamVua2luc0pvYlwiLCBqb2JOYW1lKTtcclxuICAgICAgfVxyXG4gICAgICBqb2IuJGljb25DbGFzcyA9ICRpY29uQ2xhc3M7XHJcblxyXG4gICAgICBhbmd1bGFyLmZvckVhY2goam9iLmJ1aWxkcywgKGJ1aWxkKSA9PiB7XHJcbiAgICAgICAgZW5yaWNoSmVua2luc0J1aWxkKGpvYiwgYnVpbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBqb2I7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlQnVpbGRTdGF0dXNJY29uQ2xhc3MocmVzdWx0KSB7XHJcbiAgICB2YXIgJGljb25DbGFzcyA9IFwiZmEgZmEtc3Bpbm5lciBmYS1zcGluXCI7XHJcbiAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT09IFwiRkFJTFVSRVwiIHx8IHJlc3VsdCA9PT0gXCJGQUlMRURcIikge1xyXG4gICAgICAgIC8vIFRPRE8gbm90IGF2YWlsYWJsZSB5ZXRcclxuICAgICAgICAkaWNvbkNsYXNzID0gXCJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGUgcmVkXCI7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIkFCT1JURURcIiB8fCByZXN1bHQgPT09IFwiSU5URVJVUFRFRFwiKSB7XHJcbiAgICAgICAgJGljb25DbGFzcyA9IFwiZmEgZmEtY2lyY2xlIGdyZXlcIjtcclxuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiU1VDQ0VTU1wiIHx8IHJlc3VsdCA9PT0gXCJDT01QTEVURVwiIHx8IHJlc3VsdCA9PT0gXCJDT01QTEVURURcIikge1xyXG4gICAgICAgICRpY29uQ2xhc3MgPSBcImZhIGZhLWNoZWNrLWNpcmNsZSBncmVlblwiO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJOT1RfU1RBUlRFRFwiKSB7XHJcbiAgICAgICAgJGljb25DbGFzcyA9IFwiZmEgZmEtY2lyY2xlLXRoaW4gZ3JleVwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJGljb25DbGFzcztcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCdWlsZFN0YXR1c0JhY2tncm91bmRDbGFzcyhyZXN1bHQpIHtcclxuICAgIHZhciAkaWNvbkNsYXNzID0gXCJidWlsZC1wZW5kaW5nXCI7XHJcbiAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT09IFwiRkFJTFVSRVwiIHx8IHJlc3VsdCA9PT0gXCJGQUlMRURcIikge1xyXG4gICAgICAgICRpY29uQ2xhc3MgPSBcImJ1aWxkLWZhaWxcIjtcclxuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiQUJPUlRFRFwiIHx8IHJlc3VsdCA9PT0gXCJJTlRFUlVQVEVEXCIpIHtcclxuICAgICAgICAkaWNvbkNsYXNzID0gXCJidWlsZC1hYm9ydGVkXCI7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIlNVQ0NFU1NcIiB8fCByZXN1bHQgPT09IFwiQ09NUExFVEVcIiB8fCByZXN1bHQgPT09IFwiQ09NUExFVEVEXCIpIHtcclxuICAgICAgICAkaWNvbkNsYXNzID0gXCJidWlsZC1zdWNjZXNzXCI7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIk5PVF9TVEFSVEVEXCIpIHtcclxuICAgICAgICAkaWNvbkNsYXNzID0gXCJidWlsZC1ub3Qtc3RhcnRlZFwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJGljb25DbGFzcztcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hKZW5raW5zQnVpbGQoam9iLCBidWlsZCkge1xyXG4gICAgdmFyIG51bWJlciA9IG51bGw7XHJcbiAgICBpZiAoYnVpbGQpIHtcclxuICAgICAgYnVpbGQuJGR1cmF0aW9uID0gYnVpbGQuZHVyYXRpb247XHJcbiAgICAgIGJ1aWxkLiR0aW1lc3RhbXAgPSBhc0RhdGUoYnVpbGQudGltZXN0YW1wKTtcclxuICAgICAgdmFyIHByb2plY3RJZCA9IGpvYi4kcHJvamVjdDtcclxuICAgICAgdmFyIGpvYk5hbWUgPSBqb2IuJGpvYklkIHx8IHByb2plY3RJZDtcclxuICAgICAgdmFyIGJ1aWxkSWQgPSBidWlsZC5pZDtcclxuICAgICAgbnVtYmVyID0gYnVpbGQubnVtYmVyO1xyXG4gICAgICB2YXIgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuXHJcbiAgICAgIHZhciAkaWNvbkNsYXNzID0gY3JlYXRlQnVpbGRTdGF0dXNJY29uQ2xhc3MoYnVpbGQucmVzdWx0KTtcclxuICAgICAgdmFyIGpvYlVybCA9IChqb2IgfHwge30pLnVybDtcclxuICAgICAgaWYgKCFqb2JVcmwgfHwgIWpvYlVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xyXG4gICAgICAgIHZhciBqZW5raW5zVXJsID0gamVua2luc0xpbmsoKTtcclxuICAgICAgICBpZiAoamVua2luc1VybCkge1xyXG4gICAgICAgICAgam9iVXJsID0gVXJsSGVscGVycy5qb2luKGplbmtpbnNVcmwsIFwiam9iXCIsIGpvYk5hbWUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChqb2JVcmwpIHtcclxuICAgICAgICBidWlsZC4kam9iTGluayA9IGpvYlVybDtcclxuICAgICAgICBpZiAoYnVpbGRJZCkge1xyXG4gICAgICAgICAgLy9idWlsZC4kbG9nc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oYnVpbGQuJGJ1aWxkTGluaywgXCJjb25zb2xlXCIpO1xyXG4gICAgICAgICAgYnVpbGQuJGxvZ3NMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0SWQsIFwiamVua2luc0pvYlwiLCBqb2JOYW1lLCBcImxvZ1wiLCBidWlsZElkKTtcclxuICAgICAgICAgIGJ1aWxkLiRwaXBlbGluZUxpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3RJZCwgXCJqZW5raW5zSm9iXCIsIGpvYk5hbWUsIFwicGlwZWxpbmVcIiwgYnVpbGRJZCk7XHJcbiAgICAgICAgICBidWlsZC4kYnVpbGRzTGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdElkLCBcImplbmtpbnNKb2JcIiwgam9iTmFtZSk7XHJcbiAgICAgICAgICAvL2J1aWxkLiRidWlsZExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oam9iVXJsLCBidWlsZC5pZCk7XHJcbiAgICAgICAgICBidWlsZC4kYnVpbGRMaW5rID0gYnVpbGQuJGxvZ3NMaW5rO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBidWlsZC4kaWNvbkNsYXNzID0gJGljb25DbGFzcztcclxuICAgIH1cclxuICAgIHJldHVybiBudW1iZXI7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGplbmtpbnNMaW5rKCkge1xyXG4gICAgdmFyIFNlcnZpY2VSZWdpc3RyeSA9IEt1YmVybmV0ZXMuaW5qZWN0PGFueT4oXCJTZXJ2aWNlUmVnaXN0cnlcIik7XHJcbiAgICBpZiAoU2VydmljZVJlZ2lzdHJ5KSB7XHJcbiAgICAgIHJldHVybiBTZXJ2aWNlUmVnaXN0cnkuc2VydmljZUxpbmsoamVua2luc1NlcnZpY2VOYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGZvcmdlUmVhZHlMaW5rKCkge1xyXG4gICAgdmFyIFNlcnZpY2VSZWdpc3RyeSA9IEt1YmVybmV0ZXMuaW5qZWN0PGFueT4oXCJTZXJ2aWNlUmVnaXN0cnlcIik7XHJcbiAgICBpZiAoU2VydmljZVJlZ2lzdHJ5KSB7XHJcbiAgICAgIHJldHVybiBTZXJ2aWNlUmVnaXN0cnkuc2VydmljZVJlYWR5TGluayhLdWJlcm5ldGVzLmZhYnJpYzhGb3JnZVNlcnZpY2VOYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEplbmtpbnNQaXBlbGluZUpvYihqb2IsIHByb2plY3RJZCwgam9iSWQpIHtcclxuICAgIGlmIChqb2IpIHtcclxuICAgICAgam9iLiRwcm9qZWN0ID0gcHJvamVjdElkO1xyXG4gICAgICBqb2IuJGpvYklkID0gam9iSWQ7XHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChqb2IuYnVpbGRzLCAoYnVpbGQpID0+IHtcclxuICAgICAgICBlbnJpY2hKZW5raW5zU3RhZ2VzKGJ1aWxkLCBwcm9qZWN0SWQsIGpvYklkKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSmVua2luc1N0YWdlcyhidWlsZCwgcHJvamVjdElkLCBqb2JOYW1lKSB7XHJcbiAgICBpZiAoYnVpbGQpIHtcclxuICAgICAgYnVpbGQuJHByb2plY3QgPSBwcm9qZWN0SWQ7XHJcbiAgICAgIGJ1aWxkLiRqb2JJZCA9IGpvYk5hbWU7XHJcbiAgICAgIGJ1aWxkLiR0aW1lc3RhbXAgPSBhc0RhdGUoYnVpbGQudGltZUluTWlsbGlzKTtcclxuICAgICAgYnVpbGQuJGljb25DbGFzcyA9IGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKGJ1aWxkLnJlc3VsdCB8fCBcIk5PVF9TVEFSVEVEXCIpO1xyXG5cclxuICAgICAgdmFyIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICAgIHZhciBwYXJhbWV0ZXJzID0gYnVpbGQucGFyYW1ldGVycztcclxuICAgICAgdmFyICRwYXJhbWV0ZXJDb3VudCA9IDA7XHJcbiAgICAgIHZhciAkcGFyYW1ldGVyVGV4dCA9IFwiTm8gcGFyYW1ldGVyc1wiO1xyXG4gICAgICBpZiAocGFyYW1ldGVycykge1xyXG4gICAgICAgICRwYXJhbWV0ZXJDb3VudCA9IF8ua2V5cyhwYXJhbWV0ZXJzKS5sZW5ndGggfHwgMDtcclxuICAgICAgICAkcGFyYW1ldGVyVGV4dCA9IEt1YmVybmV0ZXMubGFiZWxzVG9TdHJpbmcocGFyYW1ldGVycywgXCIgXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGJ1aWxkLiRwYXJhbWV0ZXJDb3VudCA9ICRwYXJhbWV0ZXJDb3VudDtcclxuICAgICAgYnVpbGQuJHBhcmFtZXRlclRleHQgPSAkcGFyYW1ldGVyVGV4dDtcclxuICAgICAgdmFyIGplbmtpbnNVcmwgPSBqZW5raW5zTGluaygpO1xyXG4gICAgICBpZiAoamVua2luc1VybCkge1xyXG4gICAgICAgIHZhciB1cmwgPSBidWlsZC51cmw7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4vKlxyXG4gICAgICAgICAgYnVpbGQuJHZpZXdMaW5rID0gVXJsSGVscGVycy5qb2luKGplbmtpbnNVcmwsIHVybCk7XHJcbiAgICAgICAgICBidWlsZC4kbG9nTGluayA9IFVybEhlbHBlcnMuam9pbihidWlsZC4kdmlld0xpbmssIFwibG9nXCIpO1xyXG4qL1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBidWlsZC4kbG9nTGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdElkLCBcImplbmtpbnNKb2JcIiwgam9iTmFtZSwgXCJsb2dcIiwgYnVpbGQuaWQpO1xyXG4gICAgICBidWlsZC4kdmlld0xpbmsgPSBidWlsZC4kbG9nTGluaztcclxuXHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChidWlsZC5zdGFnZXMsIChzdGFnZSkgPT4ge1xyXG4gICAgICAgIGVucmljaEplbmtpbnNTdGFnZShzdGFnZSwgYnVpbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBidWlsZDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hKZW5raW5zU3RhZ2Uoc3RhZ2UsIGJ1aWxkID0gbnVsbCkge1xyXG4gICAgaWYgKHN0YWdlKSB7XHJcbiAgICAgIGlmIChidWlsZCkge1xyXG4gICAgICAgIHN0YWdlLiRidWlsZElkID0gYnVpbGQuaWQ7XHJcbiAgICAgICAgc3RhZ2UuJHByb2plY3QgPSBidWlsZC4kcHJvamVjdDtcclxuICAgICAgfVxyXG4gICAgICB2YXIgcHJvamVjdElkID0gYnVpbGQuJHByb2plY3Q7XHJcbiAgICAgIHZhciBqb2JOYW1lID0gYnVpbGQuJGpvYklkIHx8IHByb2plY3RJZDtcclxuICAgICAgdmFyIGJ1aWxkSWQgPSBidWlsZC5pZDtcclxuICAgICAgdmFyIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICAgIHN0YWdlLiRiYWNrZ3JvdW5kQ2xhc3MgPSAgY3JlYXRlQnVpbGRTdGF0dXNCYWNrZ3JvdW5kQ2xhc3Moc3RhZ2Uuc3RhdHVzKTtcclxuICAgICAgc3RhZ2UuJGljb25DbGFzcyA9IGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKHN0YWdlLnN0YXR1cyk7XHJcbiAgICAgIHN0YWdlLiRzdGFydFRpbWUgPSBhc0RhdGUoc3RhZ2Uuc3RhcnRUaW1lKTtcclxuICAgICAgaWYgKCFzdGFnZS5kdXJhdGlvbikge1xyXG4gICAgICAgIHN0YWdlLmR1cmF0aW9uID0gMDtcclxuICAgICAgfVxyXG4gICAgICB2YXIgamVua2luc1VybCA9IGplbmtpbnNMaW5rKCk7XHJcbiAgICAgIGlmIChqZW5raW5zVXJsKSB7XHJcbiAgICAgICAgdmFyIHVybCA9IHN0YWdlLnVybDtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICBzdGFnZS4kdmlld0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oamVua2luc1VybCwgdXJsKTtcclxuICAgICAgICAgIHN0YWdlLiRsb2dMaW5rID0gVXJsSGVscGVycy5qb2luKHN0YWdlLiR2aWV3TGluaywgXCJsb2dcIik7XHJcbiAgICAgICAgICBpZiAocHJvamVjdElkICYmIGJ1aWxkSWQpIHtcclxuICAgICAgICAgICAgc3RhZ2UuJGxvZ0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3RJZCwgXCJqZW5raW5zSm9iXCIsIGpvYk5hbWUsIFwibG9nXCIsIGJ1aWxkSWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcbiAgX21vZHVsZS5jb250cm9sbGVyKCdEZXZlbG9wZXIuRW52aXJvbm1lbnRQYW5lbENvbnRyb2xsZXInLCAoJHNjb3BlLCAkZWxlbWVudCwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLmVudlZlcnNpb25zID0ge307XHJcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAkc2NvcGUuZW52ID0gJHNjb3BlLiRldmFsKCdlbnYnKTtcclxuICAgICRzY29wZS5idWlsZENvbmZpZyA9ICRzY29wZS4kZXZhbCgnZW50aXR5Jyk7XHJcblxyXG4gICAgJHNjb3BlLm9wZW4gPSB0cnVlO1xyXG5cclxuICAgICRzY29wZS50b2dnbGUgPSAoKSA9PiAkc2NvcGUub3BlbiA9ICEkc2NvcGUub3BlbjtcclxuXHJcbiAgICB2YXIgY2FjaGVzID0ge307XHJcblxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgIGxvYWRQcm9qZWN0VmVyc2lvbnMoJHNjb3BlLCAkZWxlbWVudCwgJHNjb3BlLmJ1aWxkQ29uZmlnLCAkc2NvcGUuZW52LCAkc2NvcGUuZW52Lm5hbWVzcGFjZSwgJHNjb3BlLmVudlZlcnNpb25zLCBjYWNoZXMpO1xyXG5cclxuICB9KTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkYXRhTWFuYWdlck1vZGVsLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGF0YU1hbmFnZXJIZWxwZXIudHNcIi8+XHJcbi8vLyAgPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vY29uZmlncy90cy9Db25maWdzSGVscGVyLnRzXCIvPlxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuXHRleHBvcnQgdmFyIEt1YmVUYXNrQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJLdWJlVGFza0NvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiJGh0dHBcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCJEYXRhTW9kZWxcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCAoJHNjb3BlLCAkaHR0cCwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMsIERhdGFNb2RlbCwgJHRlbXBsYXRlQ2FjaGUpID0+IHtcclxuXHRcdCRzY29wZS5tb2RlbCA9IERhdGFNb2RlbDtcdFxyXG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlQ3VycmVudFN1Yk5hdkJhcigkc2NvcGUsICRsb2NhdGlvbiwgJHJvdXRlUGFyYW1zKTsgXHJcblx0XHQkc2NvcGUubW9kZWwuZGF0YSA9IFt7X2tleTogMiwgbmFtZTogXCLljZfkuqzluIIt546E5q2m5Yy6XCIsIGxhYmVsczp7c3lzdGVtOiAzNCwgYmF0Y2g6IDJ9LCBzdGF0dXM6IDEsIHByb2Nlc3M6NzV9LFxyXG5cdFx0ICAgICAgICAgICAgICAgIHtfa2V5OiA0LCBuYW1lOiBcIuWNl+S6rOW4gi3pm6joirHljLpcIiwgbGFiZWxzOntzeXN0ZW06IDE0LCBiYXRjaDogMX0sIHN0YXR1czogMCwgcHJvY2VzczowfSxcclxuXHRcdCAgICAgICAgICAgICAgICB7X2tleTogNSwgbmFtZTogXCLljZfkuqzluIIt5YWt5ZCI5Yy6XCIsIGxhYmVsczp7c3lzdGVtOiA3NiwgYmF0Y2g6IDF9LCBzdGF0dXM6IDIsIHByb2Nlc3M6MTAwfSxcclxuXHRcdCAgICAgICAgICAgICAgICB7X2tleTogNiwgbmFtZTogXCLljZfkuqzluIIt5rWm5Y+j5Yy6XCIsIGxhYmVsczp7c3lzdGVtOiA3NiwgYmF0Y2g6IDF9LCBzdGF0dXM6IDMsIHByb2Nlc3M6OTd9XTtcclxuXHJcblx0XHQkc2NvcGUudGFibGVDb25maWcgPSB7XHJcblx0XHQgIFx0ZGF0YTogJ21vZGVsLmRhdGEnLCAgICAgXHJcblx0XHRcdHNob3dTZWxlY3Rpb25DaGVja2JveDogZmFsc2UsXHJcblx0XHRcdGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcclxuXHRcdFx0bXVsdGlTZWxlY3Q6IHRydWUsICAgICBcclxuXHRcdFx0c2VsZWN0ZWRJdGVtczogW10sICAgICBcclxuXHRcdFx0ZmlsdGVyT3B0aW9uczoge1xyXG5cdFx0XHRmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXHJcblx0XHRcdH0sXHJcblx0XHQgXHRjb2x1bW5EZWZzOiBbe1xyXG5cdFx0ICAgICAgXHRmaWVsZDogXCJfa2V5XCIsXHJcblx0XHQgICAgICBcdGRpc3BsYXlOYW1lOiAn57yW56CBJyxcclxuXHRcdCAgICAgIFx0Y3VzdG9tU29ydEZpZWxkOiAoZmllbGQpID0+e1xyXG5cdFx0ICAgICAgICBcdHJldHVybiBmaWVsZC5pZDsgICAgICAgICAgIFxyXG5cdFx0ICAgICAgXHR9ICAgICAgICAgXHJcblx0XHQgICAgfSxcclxuXHRcdCAgICB7XHJcblx0XHQgICAgICBcdGZpZWxkOiBcIm5hbWVcIixcclxuXHRcdCAgICAgIFx0ZGlzcGxheU5hbWU6ICfluIIt5Yy6L+WOvycgICAgICAgXHJcblx0XHQgICAgfSxcclxuXHRcdCAgICB7IFxyXG5cdFx0ICAgICAgXHRmaWVsZDogXCJzeXN0ZW1OYW1lXCIsXHJcblx0XHQgICAgICBcdGRpc3BsYXlOYW1lOiAn57O757uf5ZCN56ewJyAgICAgICAgIFxyXG5cdFx0ICAgIH0sXHJcblx0XHQgICAge1xyXG5cdFx0ICAgICAgXHRmaWVsZDogXCJsYWJlbHNcIixcclxuXHRcdCAgICAgIFx0ZGlzcGxheU5hbWU6ICfmlbDmja7moIfnrb4nLFxyXG5cdFx0ICAgICAgXHRjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImRhdGFMYWJlbHNUZW1wbGF0ZS5odG1sXCIpICAgICAgXHJcblx0XHQgICAgfSwgXHJcblx0XHQgICAge1xyXG5cdFx0ICAgIFx0ZmllbGQ6IFwiZnJvbVwiLFxyXG5cdFx0ICAgICAgXHRkaXNwbGF5TmFtZTogJ+a6kOmbhue+pCcsXHRcdCAgICAgIFx0XHJcblx0XHQgICAgfSxcclxuXHRcdCAgICB7XHJcblx0XHQgICAgXHRmaWVsZDogXCJ0b1wiLFxyXG5cdFx0ICAgICAgXHRkaXNwbGF5TmFtZTogJ+ebrueahOmbhue+pCcsXHRcdCAgICAgIFx0XHJcblx0XHQgICAgfSxcclxuXHRcdCAgICB7XHJcblx0XHQgICAgXHRmaWVsZDogXCJzdGF0dXNcIixcclxuXHRcdCAgICAgIFx0ZGlzcGxheU5hbWU6ICfov4Hnp7vnirbmgIEnLFxyXG5cdFx0ICAgICAgXHRjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcInRhc2tTdGF0dXMuaHRtbFwiKSAgICAgXHJcblx0XHQgICAgfSxcclxuXHRcdCAgICB7XHJcblx0XHQgICAgXHRmaWVsZDogXCJwcm9jZXNzXCIsXHJcblx0XHQgICAgICBcdGRpc3BsYXlOYW1lOiAn6L+B56e76L+b5bqmJyxcclxuXHRcdCAgICAgIFx0Y2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJ0YXNrUHJvY2Vzcy5odG1sXCIpIFx0XHQgICAgICBcdCAgICAgIFxyXG5cdFx0ICAgIH0sXHJcblx0XHQgICAge1xyXG5cdFx0ICAgIFx0ZmllbGQ6IFwiZW50aXR5XCIsXHJcblx0XHQgICAgICBcdGRpc3BsYXlOYW1lOiAn5pON5L2cJyxcclxuXHRcdCAgICAgIFx0Y2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJ0YXNrRWRpdC5odG1sXCIpICBcdFx0ICAgICAgXHQgICAgICBcclxuXHRcdCAgICB9ICAgICAgICAgICBcclxuXHRcdF19O1xyXG5cclxuXHJcblx0XHQkc2NvcGUuJG9uKFwiZGVsZXRlUm93XCIsIChldmVudCwgZGF0YSkgPT57XHJcblx0XHRcdGlmKGRhdGEuc3RhdHVzID09PSAxKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKFwi5peg5rOV5Yig6ZmkXCIpO1xyXG5cdFx0XHRlbHNle1xyXG5cdFx0XHRcdENvbmZpZ3Mub3JhY2xlSW5mb09wZXJhdGUoJGh0dHAsIFwiL2phdmEvY29uc29sZS9hcGkvdGFza1wiLCBDb25maWdzLk9wZXJhdGVUeXBlLkRFTEVURSwgZGF0YSwgKGRhdGEsIHN0YXR1cykgPT57XHJcblx0XHRcdFx0XHRpZihzdGF0dXMgPT09IDIwMClcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCLliKDpmaTmiJDlip9cIik7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cdFxyXG5cdFx0fSk7XHRcdFxyXG5cdH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XHJcblxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuXHJcbiAgZXhwb3J0IHZhciBIb21lQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJIb21lQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAgICAgJHNjb3BlLm5hbWVzcGFjZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuXHJcbiAgICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XHJcblxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuXHJcbiAgZXhwb3J0IHZhciBKZW5raW5zSm9iQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJKZW5raW5zSm9iQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIFNlcnZpY2VSZWdpc3RyeSkgPT4ge1xyXG5cclxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcbiAgICAgICAgJHNjb3BlLmpvYklkID0gJHJvdXRlUGFyYW1zW1wiam9iXCJdO1xyXG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xyXG4gICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUgPSB7fTtcclxuXHJcbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuaWQpO1xyXG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgICAgIGRhdGE6ICdqb2IuYnVpbGRzJyxcclxuICAgICAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcclxuICAgICAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcclxuICAgICAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxyXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtczogW10sXHJcbiAgICAgICAgICBmaWx0ZXJPcHRpb25zOiB7XHJcbiAgICAgICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb2x1bW5EZWZzOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWVsZDogJyRzb3J0T3JkZXInLFxyXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXHJcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zQnVpbGRJZFRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpZWxkOiAnJGJ1aWxkTGluaycsXHJcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdWaWV3cycsXHJcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zQnVpbGRCdXR0b25zVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZmllbGQ6ICckZHVyYXRpb24nLFxyXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRHVyYXRpb24nLFxyXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0J1aWxkRHVyYXRpb25UZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWVsZDogJyR0aW1lc3RhbXAnLFxyXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVGltZSBTdGFydGVkJyxcclxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNCdWlsZFRpbWVzdGFtcFRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcclxuICAgICAgICAgIGlmICgkc2NvcGUuam9iSWQpIHtcclxuICAgICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgVXJsSGVscGVycy5qb2luKFwiam9iXCIsICRzY29wZS5qb2JJZCwgXCJhcGkvanNvbj9kZXB0aD0xXCIpKTtcclxuICAgICAgICAgICAgaWYgKHVybCAmJiAoISRzY29wZS5qb2IgfHwgS3ViZXJuZXRlcy5rZWVwUG9sbGluZ01vZGVsKSkge1xyXG4gICAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxyXG4gICAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnJpY2hKZW5raW5zSm9iKGRhdGEsICRzY29wZS5pZCwgJHNjb3BlLmpvYklkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT2JqZWN0Q2hhbmdlZChkYXRhLCAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oXCJlbnRpdHkgaGFzIGNoYW5nZWQhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmpvYiA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cclxuICBleHBvcnQgdmFyIEplbmtpbnNKb2JzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJKZW5raW5zSm9ic0NvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiU2VydmljZVJlZ2lzdHJ5XCIsXHJcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBTZXJ2aWNlUmVnaXN0cnkpID0+IHtcclxuXHJcbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xyXG4gICAgICAgICRzY29wZS5qZW5raW5zID0gbnVsbDtcclxuICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XHJcblxyXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuICAgICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IGNyZWF0ZVByb2plY3RCcmVhZGNydW1icygpO1xyXG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlV29ya3NwYWNlU3ViTmF2QmFycygpO1xyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgICAgIGRhdGE6ICdqZW5raW5zLmpvYnMnLFxyXG4gICAgICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxyXG4gICAgICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXHJcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcclxuICAgICAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpZWxkOiAnbmFtZScsXHJcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcclxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNKb2JOYW1lVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZmllbGQ6ICckYnVpbGRMaW5rJyxcclxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1ZpZXdzJyxcclxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNKb2JCdXR0b25zVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZmllbGQ6ICckbGFzdFN1Y2Nlc3NmdWxCdWlsZE51bWJlcicsXHJcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdMYXN0IFN1Y2Nlc3MnLFxyXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0xhc3RTdWNjZXNzVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZmllbGQ6ICckbGFzdEZhaWxlZGxCdWlsZE51bWJlcicsXHJcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdMYXN0IEZhaWx1cmUnLFxyXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0xhc3RGYWlsdXJlVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZmllbGQ6ICckZHVyYXRpb24nLFxyXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTGFzdCBEdXJhdGlvbicsXHJcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zQnVpbGREdXJhdGlvblRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpZWxkOiAnJHRpbWVzdGFtcCcsXHJcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdUaW1lIFN0YXJ0ZWQnLFxyXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0J1aWxkVGltZXN0YW1wVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfTtcclxuICAgICAgICB1cGRhdGVEYXRhKCk7XHJcblxyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICAgICAgLy8gVE9ETyBvbmx5IG5lZWQgZGVwdGggMiB0byBiZSBhYmxlIHRvIGZldGNoIHRoZSBsYXN0QnVpbGRcclxuICAgICAgICAgIHZhciB1cmwgPSBLdWJlcm5ldGVzLmt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2VDdXJyZW50TmFtZXNwYWNlKGplbmtpbnNTZXJ2aWNlTmFtZUFuZFBvcnQsIFwiYXBpL2pzb24/ZGVwdGg9MlwiKTtcclxuICAgICAgICAgIGxvZy5pbmZvKFwiXCIpO1xyXG4gICAgICAgICAgaWYgKHVybCAmJiAoISRzY29wZS5qZW5raW5zIHx8IEt1YmVybmV0ZXMua2VlcFBvbGxpbmdNb2RlbCkpIHtcclxuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCwgamVua2luc0h0dHBDb25maWcpLlxyXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICBlbnJpY2hKZW5raW5zSm9icyhkYXRhLCAkc2NvcGUuaWQsICRzY29wZS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKGRhdGEsICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oXCJlbnRpdHkgaGFzIGNoYW5nZWQhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5qZW5raW5zID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcblxyXG5cclxuZGVjbGFyZSB2YXIgT1NPQXV0aENvbmZpZzphbnk7XHJcbmRlY2xhcmUgdmFyIEdvb2dsZU9BdXRoQ29uZmlnOmFueTtcclxuZGVjbGFyZSB2YXIgS2V5Y2xvYWtDb25maWc6YW55O1xyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIF9tb2R1bGUgPSBhbmd1bGFyLm1vZHVsZShwbHVnaW5OYW1lLCBbJ2hhd3Rpby1jb3JlJywgJ2hhd3Rpby11aScsICd1aS5jb2RlbWlycm9yJywgJ3VpLnZhbGlkYXRlJywna3ViZXJuZXRlc1VJJ10pO1xyXG4gIGV4cG9ydCB2YXIgY29udHJvbGxlciA9IFBsdWdpbkhlbHBlcnMuY3JlYXRlQ29udHJvbGxlckZ1bmN0aW9uKF9tb2R1bGUsIHBsdWdpbk5hbWUpO1xyXG4gIGV4cG9ydCB2YXIgcm91dGUgPSBQbHVnaW5IZWxwZXJzLmNyZWF0ZVJvdXRpbmdGdW5jdGlvbih0ZW1wbGF0ZVBhdGgpO1xyXG5cclxuICBfbW9kdWxlLmNvbmZpZyhbJyRyb3V0ZVByb3ZpZGVyJywgKCRyb3V0ZVByb3ZpZGVyOm5nLnJvdXRlLklSb3V0ZVByb3ZpZGVyKSA9PiB7ICAgXHJcbiAgICAkcm91dGVQcm92aWRlclxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9wb2RzJyksIHJvdXRlKCdwb2RzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAncmVwbGljYXRpb25Db250cm9sbGVycycpLCByb3V0ZSgncmVwbGljYXRpb25Db250cm9sbGVycy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3NlcnZpY2VzJyksIHJvdXRlKCdzZXJ2aWNlcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2V2ZW50cycpLCByb3V0ZSgnZXZlbnRzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYXBwcycpLCByb3V0ZSgnYXBwcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2FwcHMvOm5hbWVzcGFjZScpLCByb3V0ZSgnYXBwcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3RlbXBsYXRlcycpLCByb3V0ZSgndGVtcGxhdGVzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnaG9zdHMnKSwgcm91dGUoJ2hvc3RzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnaG9zdHMvOmlkJyksIHJvdXRlKCdob3N0Lmh0bWwnLCB0cnVlKSlcclxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdwaXBlbGluZXMnKSwgcm91dGUoJ3BpcGVsaW5lcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ292ZXJ2aWV3JyksIHJvdXRlKCdvdmVydmlldy5odG1sJywgdHJ1ZSkpXHJcbiAgICAgIC53aGVuKGNvbnRleHQsIHtyZWRpcmVjdFRvOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcnMnKX0pOyAgICAgIFxyXG5cclxuICAgIGFuZ3VsYXIuZm9yRWFjaChbY29udGV4dCwgXCIvd29ya3NwYWNlcy86d29ya3NwYWNlL3Byb2plY3RzLzpwcm9qZWN0XCJdLCAoY29udGV4dCkgPT4geyAgICAgXHJcbiAgICAgICRyb3V0ZVByb3ZpZGVyXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvcG9kQ3JlYXRlJyksIHJvdXRlKCdwb2RDcmVhdGUuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9wb2RFZGl0LzppZCcpLCByb3V0ZSgncG9kRWRpdC5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3BvZHMnKSwgcm91dGUoJ3BvZHMuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9wb2RzLzppZCcpLCByb3V0ZSgncG9kLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvcmVwbGljYXRpb25Db250cm9sbGVycycpLCByb3V0ZSgncmVwbGljYXRpb25Db250cm9sbGVycy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3JlcGxpY2F0aW9uQ29udHJvbGxlcnMvOmlkJyksIHJvdXRlKCdyZXBsaWNhdGlvbkNvbnRyb2xsZXIuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9yZXBsaWNhdGlvbkNvbnRyb2xsZXJDcmVhdGUnKSwgcm91dGUoJ3JlcGxpY2F0aW9uQ29udHJvbGxlckNyZWF0ZS5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3JlcGxpY2F0aW9uQ29udHJvbGxlckVkaXQvOmlkJyksIHJvdXRlKCdyZXBsaWNhdGlvbkNvbnRyb2xsZXJFZGl0Lmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2Uvc2VjcmV0cycpLCByb3V0ZSgnc2VjcmV0cy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlY3JldHMvOmlkJyksIHJvdXRlKCdzZWNyZXQuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9zZWNyZXRDcmVhdGUnKSwgcm91dGUoJ3NlY3JldC5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlcnZpY2VzJyksIHJvdXRlKCdzZXJ2aWNlcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlcnZpY2VzLzppZCcpLCByb3V0ZSgnc2VydmljZS5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlcnZpY2VDcmVhdGUnKSwgcm91dGUoJ3NlcnZpY2VDcmVhdGUuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9zZXJ2aWNlRWRpdC86aWQnKSwgcm91dGUoJ3NlcnZpY2VFZGl0Lmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvZXZlbnRzJyksIHJvdXRlKCdldmVudHMuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9hcHBzJyksIHJvdXRlKCdhcHBzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2Uvb3ZlcnZpZXcnKSwgcm91dGUoJ292ZXJ2aWV3Lmh0bWwnLCB0cnVlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS90ZW1wbGF0ZXMvOnRhcmdldE5hbWVzcGFjZScpLCByb3V0ZSgndGVtcGxhdGVzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UnKSwgcm91dGUoJ2FwcHMuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkcycpLCByb3V0ZSgnYnVpbGRzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZHMvOmlkJyksIHJvdXRlKCdidWlsZC5odG1sJywgdHJ1ZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZExvZ3MvOmlkJyksIHJvdXRlKCdidWlsZExvZ3MuaHRtbCcsIHRydWUpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRDb25maWdzJyksIHJvdXRlKCdidWlsZENvbmZpZ3MuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlncy86aWQnKSwgcm91dGUoJ2J1aWxkQ29uZmlnLmh0bWwnLCB0cnVlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlnRWRpdC86aWQnKSwgcm91dGUoJ2J1aWxkQ29uZmlnRWRpdC5odG1sJywgdHJ1ZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdkZXBsb3ltZW50Q29uZmlncycpLCByb3V0ZSgnZGVwbG95bWVudENvbmZpZ3MuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2RlcGxveW1lbnRDb25maWdzLzppZCcpLCByb3V0ZSgnZGVwbG95bWVudENvbmZpZy5odG1sJywgdHJ1ZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdpbWFnZVJlcG9zaXRvcmllcycpLCByb3V0ZSgnaW1hZ2VSZXBvc2l0b3JpZXMuaHRtbCcsIGZhbHNlKSlcclxuICAgIH0pO1xyXG5cclxuICAgIGFuZ3VsYXIuZm9yRWFjaChbY29udGV4dCwgXCIvd29ya3NwYWNlcy86d29ya3NwYWNlXCIsIFwiL3dvcmtzcGFjZXMvOndvcmtzcGFjZS9wcm9qZWN0cy86cHJvamVjdFwiXSwgKGNvbnRleHQpID0+IHtcclxuICAgICAgJHJvdXRlUHJvdmlkZXJcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlnRWRpdCcpLCByb3V0ZSgnYnVpbGRDb25maWdFZGl0Lmh0bWwnLCB0cnVlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlnRWRpdC86aWQnKSwgcm91dGUoJ2J1aWxkQ29uZmlnRWRpdC5odG1sJywgdHJ1ZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdpbXBvcnRQcm9qZWN0JyksIHJvdXRlKCdpbXBvcnRQcm9qZWN0Lmh0bWwnLCB0cnVlKSlcclxuICAgIH0pO1xyXG4gIH1dKTtcclxuXHJcblxyXG4gIF9tb2R1bGUuZmFjdG9yeSgnQXBwTGlicmFyeVVSTCcsIFsnJHJvb3RTY29wZScsICgkcm9vdFNjb3BlOm5nLklSb290U2NvcGVTZXJ2aWNlKSA9PiB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGt1YmVybmV0ZXNBcGlVcmwoKSwgXCIvcHJveHlcIiwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvc2VydmljZXMvYXBwLWxpYnJhcnlcIik7XHJcbiAgfV0pO1xyXG5cclxuICBfbW9kdWxlLmZhY3RvcnkoJ1dpa2lHaXRVcmxQcmVmaXgnLCAoKSA9PiB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGt1YmVybmV0ZXNBcGlVcmwoKSwgXCIvcHJveHlcIiwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCJzZXJ2aWNlcy9hcHAtbGlicmFyeVwiKTtcclxuICB9KTtcclxuXHJcbiAgX21vZHVsZS5mYWN0b3J5KCd3aWtpUmVwb3NpdG9yeScsIFtcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCAoJGxvY2F0aW9uLCBsb2NhbFN0b3JhZ2UpID0+IHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XSk7XHJcblxyXG4gIF9tb2R1bGUuZmFjdG9yeSgnQ29ubmVjdERpYWxvZ1NlcnZpY2UnLCBbJyRyb290U2NvcGUnLCAoJHJvb3RTY29wZTpuZy5JUm9vdFNjb3BlU2VydmljZSkgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZGlhbG9nOiBuZXcgVUkuRGlhbG9nKCksXHJcbiAgICAgIHNhdmVDcmVkZW50aWFsczogZmFsc2UsXHJcbiAgICAgIHVzZXJOYW1lOiBudWxsLFxyXG4gICAgICBwYXNzd29yZDogbnVsbCxcclxuICAgICAgam9sb2tpYVVybDogbnVsbCxcclxuICAgICAgY29udGFpbmVyTmFtZTogbnVsbCxcclxuICAgICAgdmlldzogbnVsbFxyXG4gICAgfTtcclxuICB9XSk7XHJcblxyXG4gIF9tb2R1bGUuZmlsdGVyKCdrdWJlcm5ldGVzUGFnZUxpbmsnLCAoKSA9PiBlbnRpdHlQYWdlTGluayk7XHJcblxyXG4gIF9tb2R1bGUuZmlsdGVyKCdyZWxhdGl2ZVRpbWUnLCAoKSA9PiB7XHJcbiAgICByZXR1cm4gKGRhdGUpID0+IHtcclxuICAgICAgcmV0dXJuIGh1bWFuZGF0ZS5yZWxhdGl2ZVRpbWUoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIF9tb2R1bGUucnVuKFsndmlld1JlZ2lzdHJ5JywgJ1NlcnZpY2VSZWdpc3RyeScsICdIYXd0aW9OYXYnLCAnS3ViZXJuZXRlc01vZGVsJywgJyR0ZW1wbGF0ZUNhY2hlJywgKHZpZXdSZWdpc3RyeSwgU2VydmljZVJlZ2lzdHJ5LCBIYXd0aW9OYXYsIEt1YmVybmV0ZXNNb2RlbCwgJHRlbXBsYXRlQ2FjaGUpID0+IHtcclxuICAgICBjb25zb2xlLmxvZyhcIjNcIik7XHJcbiAgICBsb2cuZGVidWcoXCJSdW5uaW5nXCIpO1xyXG4gICAgdmlld1JlZ2lzdHJ5WydrdWJlcm5ldGVzJ10gPSB0ZW1wbGF0ZVBhdGggKyAnbGF5b3V0S3ViZXJuZXRlcy5odG1sJztcclxuICAgIHZhciBidWlsZGVyID0gSGF3dGlvTmF2LmJ1aWxkZXIoKTtcclxuICAgIHZhciBhcHBzID0gYnVpbGRlci5pZCgna3ViZS1hcHBzJylcclxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdhcHBzJykpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAnQXBwcycpXHJcbiAgICAgIC5idWlsZCgpO1xyXG5cclxuICAgIHZhciBzZXJ2aWNlcyA9IGJ1aWxkZXIuaWQoJ2t1YmUtc2VydmljZXMnKVxyXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3NlcnZpY2VzJykpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAnU2VydmljZXMnKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICB2YXIgY29udHJvbGxlcnMgPSBidWlsZGVyLmlkKCdrdWJlLWNvbnRyb2xsZXJzJylcclxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdyZXBsaWNhdGlvbkNvbnRyb2xsZXJzJykpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAnb3JhY2xl5pyN5YqhJylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIHBvZHMgPSBidWlsZGVyLmlkKCdrdWJlLXBvZHMnKVxyXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3BvZHMnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICfmtYvor5XpobXpnaInKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICB2YXIgZXZlbnRzID0gYnVpbGRlci5pZCgna3ViZS1ldmVudHMnKVxyXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2V2ZW50cycpKVxyXG4gICAgICAudGl0bGUoKCkgPT4gJ+acjeWKoeWQr+WKqOaXpeW/lycpXHJcbiAgICAgIC5idWlsZCgpO1xyXG5cclxuICAgIHZhciBob3N0cyA9IGJ1aWxkZXIuaWQoJ2t1YmUtaG9zdHMnKVxyXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2hvc3RzJykpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAn6ZuG576k6IqC54K5JylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIG92ZXJ2aWV3ID0gYnVpbGRlci5pZCgna3ViZS1vdmVydmlldycpXHJcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnb3ZlcnZpZXcnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICdEaWFncmFtJylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIGJ1aWxkcyA9IGJ1aWxkZXIuaWQoJ2t1YmUtYnVpbGRzJylcclxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZHMnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICdCdWlsZHMnKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICB2YXIgYnVpbGRDb25maWdzID0gYnVpbGRlci5pZCgna3ViZS1idWlsZENvbmZpZ3MnKVxyXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlncycpKVxyXG4gICAgICAudGl0bGUoKCkgPT4gJ0J1aWxkIENvbmZpZ3MnKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICB2YXIgZGVwbG95cyA9IGJ1aWxkZXIuaWQoJ2t1YmUtZGVwbG95cycpXHJcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnZGVwbG95bWVudENvbmZpZ3MnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICdEZXBsb3lzJylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIGltYWdlUmVwb3NpdG9yaWVzID0gYnVpbGRlci5pZCgna3ViZS1pbWFnZVJlcG9zaXRvcmllcycpXHJcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnaW1hZ2VSZXBvc2l0b3JpZXMnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICdSZWdpc3RyaWVzJylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIHBpcGVsaW5lcyA9IGJ1aWxkZXIuaWQoJ2t1YmUtcGlwZWxpbmVzJylcclxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdwaXBlbGluZXMnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICdQaXBlbGluZXMnKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICB2YXIgcmVwb3MgPSBidWlsZGVyLmlkKCdrdWJlLXJlcG9zJylcclxuICAgICAgLmhyZWYoKCkgPT4gXCIvZm9yZ2UvcmVwb3NcIilcclxuICAgICAgLmlzVmFsaWQoKCkgPT4gU2VydmljZVJlZ2lzdHJ5Lmhhc1NlcnZpY2UoZmFicmljOEZvcmdlU2VydmljZU5hbWUpICYmIFNlcnZpY2VSZWdpc3RyeS5oYXNTZXJ2aWNlKGdvZ3NTZXJ2aWNlTmFtZSkpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAnUmVwb3NpdG9yaWVzJylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIG1haW5UYWIgPSBidWlsZGVyLmlkKCdrdWJlcm5ldGVzJylcclxuICAgICAgLnJhbmsoMTAwKVxyXG4gICAgICAuZGVmYXVsdFBhZ2Uoe1xyXG4gICAgICAgIHJhbms6IDIwLFxyXG4gICAgICAgIGlzVmFsaWQ6ICh5ZXMsIG5vKSA9PiB7XHJcbiAgICAgICAgICB5ZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCBcIi9uYW1lc3BhY2UvZGVmYXVsdC9yZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIpKVxyXG4gICAgICAudGl0bGUoKCkgPT4gJ+acjeWKoembhue+pCcpXHJcbiAgICAgIC50YWJzKGNvbnRyb2xsZXJzLCBwb2RzLCBldmVudHMpXHJcbiAgICAgIC5idWlsZCgpO1xyXG4gICAgSGF3dGlvTmF2LmFkZChtYWluVGFiKTtcclxuXHJcbiAgICAvKiB0ZXN0S3ViZXJuZXRlc01vZGVsXHJcbiAgICBIYXd0aW9OYXYuYWRkKHtcclxuICAgICAgaWQ6ICdrOHNBcHBTd2l0Y2hlcicsXHJcbiAgICAgIHRpdGxlOiAoKSA9PiAnJywgLy8gbm90IHVzZWQgYXMgJ3RlbXBsYXRlJyBiZWxvdyBvdmVycmlkZXMgdGhpc1xyXG4gICAgICBpc1ZhbGlkOiAoKSA9PiBLdWJlcm5ldGVzTW9kZWwuc2VydmljZUFwcHMubGVuZ3RoID4gMCxcclxuICAgICAgY29udGV4dDogdHJ1ZSxcclxuICAgICAgdGVtcGxhdGU6ICgpID0+ICR0ZW1wbGF0ZUNhY2hlLmdldChVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCAnc2VydmljZUFwcHMuaHRtbCcpKVxyXG4gICAgfSk7XHJcbiAgICAqL1xyXG5cclxuICAgIHZhciBwcm9qZWN0c1RhYiA9IGJ1aWxkZXIuaWQoJ29wZW5zaGlmdCcpXHJcbiAgICAgIC5yYW5rKDEwMClcclxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZENvbmZpZ3MnKSArICc/c3ViLXRhYj1rdWJlLWJ1aWxkQ29uZmlncycpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAnUHJvamVjdHMnKVxyXG4gICAgICAvLyBsZXRzIGRpc2FibGUgdGhlIHBpcGVsaW5lcyB2aWV3IGZvciBub3dcclxuICAgICAgLy8gcGlwZWxpbmVzLFxyXG4gICAgICAudGFicyhyZXBvcywgYnVpbGRDb25maWdzLCBidWlsZHMsIGRlcGxveXMsIGltYWdlUmVwb3NpdG9yaWVzKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICAvL0hhd3Rpb05hdi5hZGQocHJvamVjdHNUYWIpO1xyXG4gIH1dKTtcclxuXHJcbiAgaGF3dGlvUGx1Z2luTG9hZGVyLnJlZ2lzdGVyUHJlQm9vdHN0cmFwVGFzayh7XHJcbiAgICBuYW1lOiAnS3ViZXJuZXRlc0luaXQnLFxyXG4gICAgdGFzazogKG5leHQpID0+IHtcclxuICAgICAgJC5nZXRTY3JpcHQoJ29zY29uc29sZS9jb25maWcuanMnKVxyXG4gICAgICAgIC5kb25lKChzY3JpcHQsIHRleHRTdGF0dXMpID0+IHtcclxuICAgICAgICAgIHZhciBjb25maWc6S3ViZXJuZXRlc0NvbmZpZyA9IEt1YmVybmV0ZXMub3NDb25maWcgPSB3aW5kb3dbJ09QRU5TSElGVF9DT05GSUcnXTtcclxuICAgICAgICAgIGxvZy5kZWJ1ZyhcIkZldGNoZWQgT0F1dGggY29uZmlnOiBcIiwgY29uZmlnKTtcclxuICAgICAgICAgIHZhciBtYXN0ZXI6c3RyaW5nID0gY29uZmlnLm1hc3Rlcl91cmk7XHJcbiAgICAgICAgICBpZiAoIW1hc3RlciAmJiBjb25maWcuYXBpICYmIGNvbmZpZy5hcGkuazhzKSB7XHJcbiAgICAgICAgICAgIHZhciBtYXN0ZXJVcmkgPSBuZXcgVVJJKCkuaG9zdChjb25maWcuYXBpLms4cy5ob3N0UG9ydCkucGF0aChcIlwiKS5xdWVyeShcIlwiKTtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5hcGkuazhzLnByb3RvKSB7XHJcbiAgICAgICAgICAgICAgbWFzdGVyVXJpLnByb3RvY29sKGNvbmZpZy5hcGkuazhzLnByb3RvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtYXN0ZXIgPSBtYXN0ZXJVcmkudG9TdHJpbmcoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBPU09BdXRoQ29uZmlnID0gY29uZmlnLm9wZW5zaGlmdDtcclxuICAgICAgICAgIEdvb2dsZU9BdXRoQ29uZmlnID0gY29uZmlnLmdvb2dsZTtcclxuICAgICAgICAgIEtleWNsb2FrQ29uZmlnID0gY29uZmlnLmtleWNsb2FrO1xyXG5cclxuICAgICAgICAgIGlmIChPU09BdXRoQ29uZmlnICYmICFtYXN0ZXIpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBhdXRoLm1hc3Rlcl91cmkgbm8gbG9uZ2VyIHVzZWQgcmlnaHQ/XHJcbiAgICAgICAgICAgIC8vIG1hc3RlciA9IE9TT0F1dGhDb25maWcubWFzdGVyX3VyaTtcclxuICAgICAgICAgICAgaWYgKCFtYXN0ZXIpIHtcclxuICAgICAgICAgICAgICB2YXIgb2F1dGhfYXV0aG9yaXplX3VyaSA9IE9TT0F1dGhDb25maWcub2F1dGhfYXV0aG9yaXplX3VyaTtcclxuICAgICAgICAgICAgICBpZiAob2F1dGhfYXV0aG9yaXplX3VyaSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHQgPSBvYXV0aF9hdXRob3JpemVfdXJpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeCA9IHRleHQuaW5kZXhPZihcIjovL1wiKTtcclxuICAgICAgICAgICAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlkeCArPSAzO1xyXG4gICAgICAgICAgICAgICAgICBpZHggPSB0ZXh0LmluZGV4T2YoXCIvXCIsIGlkeCk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFzdGVyID0gdGV4dC5zdWJzdHJpbmcoMCwgKytpZHgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoKCFLdWJlcm5ldGVzLm1hc3RlclVybCB8fCBLdWJlcm5ldGVzLm1hc3RlclVybCA9PT0gXCIvXCIpICYmICghbWFzdGVyIHx8IG1hc3RlciA9PT0gXCIvXCIpKSB7XHJcbiAgICAgICAgICAgIC8vIGxldHMgZGVmYXVsdCB0aGUgbWFzdGVyIHRvIHRoZSBjdXJyZW50IHByb3RvY29sIGFuZCBob3N0L3BvcnRcclxuICAgICAgICAgICAgLy8gaW4gY2FzZSB0aGUgbWFzdGVyIHVybCBpcyBcIi9cIiBhbmQgd2UgYXJlXHJcbiAgICAgICAgICAgIC8vIHNlcnZpbmcgdXAgc3RhdGljIGNvbnRlbnQgZnJvbSBpbnNpZGUgL2FwaS92MS9uYW1lc3BhY2VzL2RlZmF1bHQvc2VydmljZXMvZmFicmljOCBvciBzb21ldGhpbmcgbGlrZSB0aGF0XHJcbiAgICAgICAgICAgIHZhciBocmVmID0gbG9jYXRpb24uaHJlZjtcclxuICAgICAgICAgICAgaWYgKGhyZWYpIHtcclxuICAgICAgICAgICAgICBtYXN0ZXIgPSBuZXcgVVJJKGhyZWYpLnF1ZXJ5KFwiXCIpLnBhdGgoXCJcIikudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG1hc3Rlcikge1xyXG4gICAgICAgICAgICBLdWJlcm5ldGVzLm1hc3RlclVybCA9IG1hc3RlcjtcclxuICAgICAgICAgICAgbmV4dCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZmFpbCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGZldGNoaW5nIE9BVVRIIGNvbmZpZzogXCIsIHJlc3BvbnNlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hbHdheXMoKCkgPT4ge1xyXG4gICAgICAgICAgbmV4dCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0sIHRydWUpO1xyXG5cclxuICBoYXd0aW9QbHVnaW5Mb2FkZXIuYWRkTW9kdWxlKCduZ1Jlc291cmNlJyk7XHJcbiAgaGF3dGlvUGx1Z2luTG9hZGVyLmFkZE1vZHVsZShwbHVnaW5OYW1lKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIEZBQlJJQzhfUFJPSkVDVF9KU09OID0gXCJmYWJyaWM4UHJvamVjdEpzb25cIjtcclxuXHJcbiAgZnVuY3Rpb24gYnlJZCh0aGluZykge1xyXG4gICAgcmV0dXJuIHRoaW5nLmlkO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY3JlYXRlS2V5KG5hbWVzcGFjZSwgaWQsIGtpbmQpIHtcclxuICAgIHJldHVybiAobmFtZXNwYWNlIHx8IFwiXCIpICsgXCItXCIgKyAoa2luZCB8fCAndW5kZWZpbmVkJykudG9Mb3dlckNhc2UoKSArICctJyArIChpZCB8fCAndW5kZWZpbmVkJykucmVwbGFjZSgvXFwuL2csICctJyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwb3B1bGF0ZUtleShpdGVtKSB7XHJcbiAgICB2YXIgcmVzdWx0ID0gaXRlbTtcclxuICAgIHJlc3VsdFsnX2tleSddID0gY3JlYXRlS2V5KGdldE5hbWVzcGFjZShpdGVtKSwgZ2V0TmFtZShpdGVtKSwgZ2V0S2luZChpdGVtKSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcG9wdWxhdGVLZXlzKGl0ZW1zOkFycmF5PGFueT4pIHtcclxuICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgIGFuZ3VsYXIuZm9yRWFjaChpdGVtcywgKGl0ZW0pID0+IHtcclxuICAgICAgcmVzdWx0LnB1c2gocG9wdWxhdGVLZXkoaXRlbSkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0UG9kcyhwb2RzLCBuYW1lc3BhY2UsIGxhYmVscykge1xyXG4gICAgcmV0dXJuIHBvZHMuZmlsdGVyKChwb2QpID0+IHtcclxuICAgICAgcmV0dXJuIGdldE5hbWVzcGFjZShwb2QpID09PSBuYW1lc3BhY2UgJiYgc2VsZWN0b3JNYXRjaGVzKGxhYmVscywgZ2V0TGFiZWxzKHBvZCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgb2JqZWN0IHdoaWNoIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgcG9kcywgcmVwbGljYXRpb24gY29udHJvbGxlcnMsIHNlcnZpY2VzIGFuZCB0aGVpciBhc3NvY2lhdGlvbnNcclxuICAgKi9cclxuICBleHBvcnQgY2xhc3MgS3ViZXJuZXRlc01vZGVsU2VydmljZSB7XHJcbiAgICBwdWJsaWMga3ViZXJuZXRlcyA9IDxLdWJlcm5ldGVzU3RhdGU+IG51bGw7XHJcbiAgICBwdWJsaWMgYXBwcyA9IFtdO1xyXG4gICAgcHVibGljIHNlcnZpY2VzID0gW107XHJcblxyXG4gICAgcHVibGljIHJlcGxpY2F0aW9uY29udHJvbGxlcnMgPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVycyA9IFtdO1xyXG5cclxuICAgIC8qcHVibGljIGdldCBmaWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzKCk6QXJyYXk8YW55PiB7XHJcbiAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVycyhmaWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzOkFycmF5PGFueT4pIHtcclxuICAgICAgICB0aGlzLmZpbHRlclJlcGxpY2F0aW9uY29udHJvbGxlcnMgPSBmaWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzO1xyXG4gICAgfSovXHJcblxyXG4gICAgcHVibGljIGdldCByZXBsaWNhdGlvbkNvbnRyb2xsZXJzKCk6QXJyYXk8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJlcGxpY2F0aW9uY29udHJvbGxlcnM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVyczpBcnJheTxhbnk+KSB7XHJcbiAgICAgIHRoaXMucmVwbGljYXRpb25jb250cm9sbGVycyA9IHJlcGxpY2F0aW9uQ29udHJvbGxlcnM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcG9kcyA9IFtdO1xyXG4gICAgcHVibGljIGhvc3RzID0gW107XHJcbiAgICBwdWJsaWMgZ2V0IG5hbWVzcGFjZXMoKTpBcnJheTxzdHJpbmc+IHtcclxuICAgICAgcmV0dXJuIHRoaXMua3ViZXJuZXRlcy5uYW1lc3BhY2VzO1xyXG4gICAgfVxyXG4gICAgLy9wdWJsaWMgbmFtZXNwYWNlcyA9IFtdO1xyXG4gICAgcHVibGljIHJvdXRlcyA9IFtdO1xyXG4gICAgcHVibGljIHRlbXBsYXRlcyA9IFtdO1xyXG4gICAgcHVibGljIHJlZHJhdyA9IGZhbHNlO1xyXG4gICAgcHVibGljIHJlc291cmNlVmVyc2lvbnMgPSB7fTtcclxuXHJcbiAgICAvLyB2YXJpb3VzIHZpZXdzIG9uIHRoZSBkYXRhXHJcbiAgICBwdWJsaWMgcG9kc0J5SG9zdCA9IHt9O1xyXG4gICAgcHVibGljIHNlcnZpY2VzQnlLZXkgPSB7fTtcclxuICAgIHB1YmxpYyByZXBsaWNhdGlvbkNvbnRyb2xsZXJzQnlLZXkgPSB7fTtcclxuICAgIHB1YmxpYyBwb2RzQnlLZXkgPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgYXBwSW5mb3MgPSBbXTtcclxuICAgIHB1YmxpYyBhcHBWaWV3cyA9IFtdO1xyXG4gICAgcHVibGljIGFwcEZvbGRlcnMgPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgZmV0Y2hlZCA9IGZhbHNlO1xyXG4gICAgcHVibGljIGdldCBzaG93UnVuQnV0dG9uKCk6Ym9vbGVhbiB7XHJcbiAgICAgIGlmIChpc09wZW5TaGlmdCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBfLmFueSh0aGlzLnNlcnZpY2VzLCAoc2VydmljZSkgPT4ge1xyXG4gICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShzZXJ2aWNlKTtcclxuICAgICAgICBpZiAobmFtZSA9PT0gXCJ0ZW1wbGF0ZXNcIikge1xyXG4gICAgICAgICAgdmFyIHBvZENvdW50ZXJzID0gc2VydmljZS4kcG9kQ291bnRlcnM7XHJcbiAgICAgICAgICByZXR1cm4gcG9kQ291bnRlcnMgJiYgKHBvZENvdW50ZXJzLnZhbGlkIHx8IHBvZENvdW50ZXJzLnJlYWR5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGJ1aWxkY29uZmlncyA9IFtdO1xyXG4gICAgcHVibGljIGV2ZW50cyA9IFtdO1xyXG4gICAgcHVibGljIHdvcmtzcGFjZXMgPSBbXTtcclxuICAgIHB1YmxpYyBwcm9qZWN0cyA9IFtdO1xyXG4gICAgcHVibGljIHByb2plY3QgPSBudWxsO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgc2VydmljZUFwcHMoKTpBcnJheTxhbnk+IHtcclxuICAgICAgcmV0dXJuIF8uZmlsdGVyKHRoaXMuc2VydmljZXMsIChzKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHMuJGhvc3QgJiYgcy4kc2VydmljZVVybCAmJiBzLiRwb2RDb3VudFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgJGtlZXBQb2xsaW5nKCkge1xyXG4gICAgICByZXR1cm4ga2VlcFBvbGxpbmdNb2RlbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3JSZWRyYXcoZmxhZykge1xyXG4gICAgICB0aGlzLnJlZHJhdyA9IHRoaXMucmVkcmF3IHx8IGZsYWc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlcnZpY2UobmFtZXNwYWNlLCBpZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlc0J5S2V5W2NyZWF0ZUtleShuYW1lc3BhY2UsIGlkLCAnc2VydmljZScpXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UmVwbGljYXRpb25Db250cm9sbGVyKG5hbWVzcGFjZSwgaWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVwbGljYXRpb25Db250cm9sbGVyc0J5S2V5W2NyZWF0ZUtleShuYW1lc3BhY2UsIGlkLCAncmVwbGljYXRpb25Db250cm9sbGVyJyldO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQb2QobmFtZXNwYWNlLCBpZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wb2RzQnlLZXlbY3JlYXRlS2V5KG5hbWVzcGFjZSwgaWQsICdwb2QnKV07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHBvZHNGb3JOYW1lc3BhY2UobmFtZXNwYWNlID0gdGhpcy5jdXJyZW50TmFtZXNwYWNlKCkpIHtcclxuICAgICAgcmV0dXJuIF8uZmlsdGVyKHRoaXMucG9kcywgeyBuYW1lc3BhY2U6IG5hbWVzcGFjZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QnVpbGRDb25maWcobmFtZSkge1xyXG4gICAgICByZXR1cm4gXy5maW5kKHRoaXMuYnVpbGRjb25maWdzLCB7ICRuYW1lOiBuYW1lIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQcm9qZWN0KG5hbWUsIG5zID0gdGhpcy5jdXJyZW50TmFtZXNwYWNlKCkpIHtcclxuICAgICAgdmFyIGJ1aWxkQ29uZmlnID0gdGhpcy5wcm9qZWN0O1xyXG4gICAgICBpZiAoIWJ1aWxkQ29uZmlnKSB7XHJcbiAgICAgICAgdmFyIHRleHQgPSBsb2NhbFN0b3JhZ2VbRkFCUklDOF9QUk9KRUNUX0pTT05dO1xyXG4gICAgICAgIGlmICh0ZXh0KSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBidWlsZENvbmZpZyA9IGFuZ3VsYXIuZnJvbUpzb24odGV4dCk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy53YXJuKFwiQ291bGQgbm90IHBhcnNlIGpzb24gZm9yIFwiICsgRkFCUklDOF9QUk9KRUNUX0pTT04gKyBcIi4gV2FzOiBcIiArIHRleHQgKyBcIi4gXCIgKyBlLCBlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGJ1aWxkQ29uZmlnICYmIG5zICE9IGdldE5hbWVzcGFjZShidWlsZENvbmZpZykgJiYgbmFtZSAhPSBidWlsZENvbmZpZy4kbmFtZSkge1xyXG4gICAgICAgIGJ1aWxkQ29uZmlnID0gdGhpcy5nZXRCdWlsZENvbmZpZyhuYW1lKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYnVpbGRDb25maWc7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBzZXRQcm9qZWN0KGJ1aWxkQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMucHJvamVjdCA9IGJ1aWxkQ29uZmlnO1xyXG4gICAgICBpZiAoYnVpbGRDb25maWcpIHtcclxuICAgICAgICAvLyBsZXRzIHN0b3JlIGluIGxvY2FsIHN0b3JhZ2VcclxuICAgICAgICB2YXIgbG9jYWxTdG9yYWdlID0gaW5qZWN0KFwibG9jYWxTdG9yYWdlXCIpO1xyXG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZVtGQUJSSUM4X1BST0pFQ1RfSlNPTl0gPSBhbmd1bGFyLnRvSnNvbihidWlsZENvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNlbGVjdGVkIG5hbWVzcGFjZSBvciB0aGUgZGVmYXVsdCBuYW1lc3BhY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGN1cnJlbnROYW1lc3BhY2UoKSB7XHJcbiAgICAgIHZhciBhbnN3ZXIgPSBudWxsO1xyXG4gICAgICBpZiAodGhpcy5rdWJlcm5ldGVzKSB7XHJcbiAgICAgICAgYW5zd2VyID0gdGhpcy5rdWJlcm5ldGVzLnNlbGVjdGVkTmFtZXNwYWNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhbnN3ZXIgfHwgZGVmYXVsdE5hbWVzcGFjZTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlSWNvblVybEFuZEFwcEluZm8oZW50aXR5LCBuYW1lRmllbGQ6IHN0cmluZykge1xyXG4gICAgICB2YXIgYW5zd2VyID0gbnVsbDtcclxuICAgICAgdmFyIGlkID0gZ2V0TmFtZShlbnRpdHkpO1xyXG4gICAgICBlbnRpdHkuJGljb25VcmwgPSBDb3JlLnBhdGhHZXQoZW50aXR5LCBbJ21ldGFkYXRhJywgJ2Fubm90YXRpb25zJywgJ2ZhYnJpYzguJyArIGlkICsgJy9pY29uVXJsJ10pO1xyXG4gICAgICBlbnRpdHkuJGluZm8gPSBDb3JlLnBhdGhHZXQoZW50aXR5LCBbJ21ldGFkYXRhJywgJ2Fubm90YXRpb25zJywgJ2ZhYnJpYzguJyArIGlkICsgJy9zdW1tYXJ5J10pO1xyXG4gICAgICBpZiAoZW50aXR5LiRpY29uVXJsKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpZCAmJiBuYW1lRmllbGQpIHtcclxuICAgICAgICAodGhpcy50ZW1wbGF0ZXMgfHwgW10pLmZvckVhY2goKHRlbXBsYXRlKSA9PiB7XHJcbiAgICAgICAgICB2YXIgbWV0YWRhdGEgPSB0ZW1wbGF0ZS5tZXRhZGF0YTtcclxuICAgICAgICAgIGlmIChtZXRhZGF0YSkge1xyXG4gICAgICAgICAgICB2YXIgYW5ub3RhdGlvbnMgPSBtZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCB7fTtcclxuICAgICAgICAgICAgdmFyIGljb25VcmwgPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguXCIgKyBpZCArIFwiL2ljb25VcmxcIl0gfHwgYW5ub3RhdGlvbnNbXCJmYWJyaWM4L2ljb25VcmxcIl07XHJcbiAgICAgICAgICAgIGlmIChpY29uVXJsKSB7XHJcbiAgICAgICAgICAgICAgKHRlbXBsYXRlLm9iamVjdHMgfHwgW10pLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBlbnRpdHlOYW1lID0gZ2V0TmFtZShpdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmIChpZCA9PT0gZW50aXR5TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICBlbnRpdHkuJGljb25VcmwgPSBpY29uVXJsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgKHRoaXMuYXBwSW5mb3MgfHwgW10pLmZvckVhY2goKGFwcEluZm8pID0+IHtcclxuICAgICAgICAgIHZhciBpY29uUGF0aCA9IGFwcEluZm8uaWNvblBhdGg7XHJcbiAgICAgICAgICBpZiAoaWNvblBhdGggJiYgIWFuc3dlciAmJiBpY29uUGF0aCAhPT0gXCJudWxsXCIpIHtcclxuICAgICAgICAgICAgdmFyIGljb25VcmwgPSBnaXRQYXRoVG9VcmwoaWNvblBhdGgpO1xyXG4gICAgICAgICAgICB2YXIgaWRzID0gQ29yZS5wYXRoR2V0KGFwcEluZm8sIFtcIm5hbWVzXCIsIG5hbWVGaWVsZF0pO1xyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goaWRzLCAoYXBwSWQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoYXBwSWQgPT09IGlkKSB7XHJcbiAgICAgICAgICAgICAgICBlbnRpdHkuJGljb25VcmwgPSBpY29uVXJsO1xyXG4gICAgICAgICAgICAgICAgZW50aXR5LmFwcFBhdGggPSBhcHBJbmZvLmFwcFBhdGg7XHJcbiAgICAgICAgICAgICAgICBlbnRpdHkuJGluZm8gPSBhcHBJbmZvO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFlbnRpdHkuJGljb25VcmwpIHtcclxuICAgICAgICBlbnRpdHkuJGljb25VcmwgPSBkZWZhdWx0SWNvblVybDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYXliZUluaXQoKSB7XHJcbiAgICAgIHRoaXMuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VydmljZXNCeUtleSA9IHt9O1xyXG4gICAgICB0aGlzLnBvZHNCeUtleSA9IHt9O1xyXG4gICAgICB0aGlzLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNCeUtleSA9IHt9O1xyXG5cclxuICAgICAgdGhpcy5wb2RzLmZvckVhY2goKHBvZCkgPT4ge1xyXG4gICAgICAgIGlmICghcG9kLmtpbmQpIHBvZC5raW5kID0gXCJQb2RcIjtcclxuICAgICAgICB0aGlzLnBvZHNCeUtleVtwb2QuX2tleV0gPSBwb2Q7XHJcbiAgICAgICAgdmFyIGhvc3QgPSBnZXRIb3N0KHBvZCk7XHJcbiAgICAgICAgcG9kLiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhnZXRMYWJlbHMocG9kKSk7XHJcbiAgICAgICAgaWYgKGhvc3QpIHtcclxuICAgICAgICAgIHBvZC4kbGFiZWxzVGV4dCArPSBsYWJlbEZpbHRlclRleHRTZXBhcmF0b3IgKyBcImhvc3Q9XCIgKyBob3N0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBwb2QuJGljb25VcmwgPSBkZWZhdWx0SWNvblVybDtcclxuICAgICAgICB0aGlzLmRpc2NvdmVyUG9kQ29ubmVjdGlvbnMocG9kKTtcclxuICAgICAgICBwb2QuJGNvbnRhaW5lclBvcnRzID0gW107XHJcblxyXG4gICAgICAgIHZhciBwb2RTdGF0dXMgPSBwb2Quc3RhdHVzIHx8IHt9O1xyXG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBwb2RTdGF0dXMuc3RhcnRUaW1lO1xyXG4gICAgICAgIHBvZC4kc3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICBpZiAoc3RhcnRUaW1lKSB7XHJcbiAgICAgICAgICBwb2QuJHN0YXJ0VGltZSA9IG5ldyBEYXRlKHN0YXJ0VGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjcmVhdGVkVGltZSA9IGdldENyZWF0aW9uVGltZXN0YW1wKHBvZCk7XHJcbiAgICAgICAgcG9kLiRjcmVhdGVkVGltZSA9IG51bGw7XHJcbiAgICAgICAgcG9kLiRhZ2UgPSBudWxsO1xyXG4gICAgICAgIGlmIChjcmVhdGVkVGltZSkge1xyXG4gICAgICAgICAgcG9kLiRjcmVhdGVkVGltZSA9IG5ldyBEYXRlKGNyZWF0ZWRUaW1lKTtcclxuICAgICAgICAgIHBvZC4kYWdlID0gaHVtYW5kYXRlLnJlbGF0aXZlVGltZShwb2QuJGNyZWF0ZWRUaW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlYWR5ID0gaXNSZWFkeShwb2QpO1xyXG4gICAgICAgIHBvZC4kcmVhZHkgPSByZWFkeTtcclxuICAgICAgICBwb2QuJHN0YXR1c0NzcyA9IHN0YXR1c1RleHRUb0Nzc0NsYXNzKHBvZFN0YXR1cy5waGFzZSwgcmVhZHkpO1xyXG5cclxuICAgICAgICB2YXIgbWF4UmVzdGFydENvdW50ID0gMDtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goQ29yZS5wYXRoR2V0KHBvZCwgW1wic3RhdHVzXCIsIFwiY29udGFpbmVyU3RhdHVzZXNcIl0pLCAoc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcmVzdGFydENvdW50ID0gc3RhdHVzLnJlc3RhcnRDb3VudDtcclxuICAgICAgICAgIGlmIChyZXN0YXJ0Q291bnQpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3RhcnRDb3VudCA+IG1heFJlc3RhcnRDb3VudCkge1xyXG4gICAgICAgICAgICAgIG1heFJlc3RhcnRDb3VudCA9IHJlc3RhcnRDb3VudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChtYXhSZXN0YXJ0Q291bnQgKSB7XHJcbiAgICAgICAgICBwb2QuJHJlc3RhcnRDb3VudCA9IG1heFJlc3RhcnRDb3VudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGltYWdlTmFtZXMgPSBcIlwiO1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChDb3JlLnBhdGhHZXQocG9kLCBbXCJzcGVjXCIsIFwiY29udGFpbmVyc1wiXSksIChjb250YWluZXIpID0+IHtcclxuICAgICAgICAgIHZhciBpbWFnZSA9IGNvbnRhaW5lci5pbWFnZTtcclxuICAgICAgICAgIGlmIChpbWFnZSkge1xyXG4gICAgICAgICAgICBpZiAoIWltYWdlTmFtZXMpIHtcclxuICAgICAgICAgICAgICBpbWFnZU5hbWVzID0gaW1hZ2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW1hZ2VOYW1lcyA9IGltYWdlTmFtZXMgKyBcIiBcIiArIGltYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBpZHggPSBpbWFnZS5sYXN0SW5kZXhPZihcIjpcIik7XHJcbiAgICAgICAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgICAgICAgaW1hZ2UgPSBpbWFnZS5zdWJzdHJpbmcoMCwgaWR4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGF0aHMgPSBpbWFnZS5zcGxpdChcIi9cIiwgMyk7XHJcbiAgICAgICAgICAgIGlmIChwYXRocy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB2YXIgYW5zd2VyID0gbnVsbDtcclxuICAgICAgICAgICAgICBpZiAocGF0aHMubGVuZ3RoID09IDMpIHtcclxuICAgICAgICAgICAgICAgIGFuc3dlciA9IHBhdGhzWzFdICsgXCIvXCIgKyBwYXRoc1syXTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhdGhzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICBhbnN3ZXIgPSBwYXRoc1swXSArIFwiL1wiICsgcGF0aHNbMV07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFuc3dlciA9IHBhdGhzWzBdICsgXCIvXCIgKyBwYXRoc1sxXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY29udGFpbmVyLiRpbWFnZUxpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJodHRwczovL3JlZ2lzdHJ5Lmh1Yi5kb2NrZXIuY29tL3UvXCIsIGFuc3dlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChjb250YWluZXIucG9ydHMsIChwb3J0KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBjb250YWluZXJQb3J0ID0gcG9ydC5jb250YWluZXJQb3J0O1xyXG4gICAgICAgICAgICBpZiAoY29udGFpbmVyUG9ydCkge1xyXG4gICAgICAgICAgICAgIHBvZC4kY29udGFpbmVyUG9ydHMucHVzaChjb250YWluZXJQb3J0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcG9kLiRpbWFnZU5hbWVzID0gaW1hZ2VOYW1lcztcclxuICAgICAgICB2YXIgcG9kU3RhdHVzID0gcG9kU3RhdHVzO1xyXG4gICAgICAgIHZhciBwb2RTcGVjID0gKHBvZC5zcGVjIHx8IHt9KTtcclxuICAgICAgICBwb2QuJHBvZElQID0gcG9kU3RhdHVzLnBvZElQO1xyXG4gICAgICAgIHBvZC4kaG9zdCA9IHBvZFNwZWMuaG9zdCB8fCBwb2RTcGVjLm5vZGVOYW1lIHx8IHBvZFN0YXR1cy5ob3N0SVA7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zZXJ2aWNlcy5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzZXJ2aWNlLmtpbmQpIHNlcnZpY2Uua2luZCA9IFwiU2VydmljZVwiO1xyXG4gICAgICAgIHRoaXMuc2VydmljZXNCeUtleVtzZXJ2aWNlLl9rZXldID0gc2VydmljZTtcclxuICAgICAgICB2YXIgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihzZXJ2aWNlKTtcclxuICAgICAgICBzZXJ2aWNlLiRwb2RzID0gW107XHJcbiAgICAgICAgaWYgKCFzZXJ2aWNlLiRwb2RDb3VudGVycykge1xyXG4gICAgICAgICAgc2VydmljZS4kcG9kQ291bnRlcnMgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBvZExpbmtVcmwgPSBVcmxIZWxwZXJzLmpvaW4oXCIva3ViZXJuZXRlcy9uYW1lc3BhY2VcIiwgc2VydmljZS5tZXRhZGF0YS5uYW1lc3BhY2UsIFwicG9kc1wiKTtcclxuICAgICAgICBfLmFzc2lnbihzZXJ2aWNlLiRwb2RDb3VudGVycywgc2VsZWN0b3IgPyBjcmVhdGVQb2RDb3VudGVycyhzZWxlY3RvciwgdGhpcy5wb2RzLCBzZXJ2aWNlLiRwb2RzLCBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKHNlbGVjdG9yLCBcIixcIiksIHBvZExpbmtVcmwpIDoge30pO1xyXG4gICAgICAgIHNlcnZpY2UuJHBvZENvdW50ID0gc2VydmljZS4kcG9kcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIHZhciBzZWxlY3RlZFBvZHMgPSBzZXJ2aWNlLiRwb2RzO1xyXG4gICAgICAgIHNlcnZpY2UuY29ubmVjdFRvID0gc2VsZWN0ZWRQb2RzLm1hcCgocG9kKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcG9kLl9rZXk7XHJcbiAgICAgICAgfSkuam9pbignLCcpO1xyXG4gICAgICAgIHNlcnZpY2UuJGxhYmVsc1RleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKGdldExhYmVscyhzZXJ2aWNlKSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJY29uVXJsQW5kQXBwSW5mbyhzZXJ2aWNlLCBcInNlcnZpY2VOYW1lc1wiKTtcclxuICAgICAgICB2YXIgc3BlYyA9IHNlcnZpY2Uuc3BlYyB8fCB7fTtcclxuICAgICAgICBzZXJ2aWNlLiRwb3J0YWxJUCA9IHNwZWMucG9ydGFsSVA7XHJcbiAgICAgICAgc2VydmljZS4kc2VsZWN0b3JUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhzcGVjLnNlbGVjdG9yKTtcclxuICAgICAgICB2YXIgcG9ydHMgPSBfLm1hcChzcGVjLnBvcnRzIHx8IFtdLCBcInBvcnRcIik7XHJcbiAgICAgICAgc2VydmljZS4kcG9ydHMgPSBwb3J0cztcclxuICAgICAgICBzZXJ2aWNlLiRwb3J0c1RleHQgPSBwb3J0cy5qb2luKFwiLCBcIik7XHJcbiAgICAgICAgdmFyIGljb25VcmwgPSBzZXJ2aWNlLiRpY29uVXJsO1xyXG4gICAgICAgIGlmIChpY29uVXJsICYmIHNlbGVjdGVkUG9kcykge1xyXG4gICAgICAgICAgc2VsZWN0ZWRQb2RzLmZvckVhY2goKHBvZCkgPT4ge1xyXG4gICAgICAgICAgICBwb2QuJGljb25VcmwgPSBpY29uVXJsO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlcnZpY2UuJHNlcnZpY2VVcmwgPSBzZXJ2aWNlTGlua1VybChzZXJ2aWNlKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnJlcGxpY2F0aW9uQ29udHJvbGxlcnMuZm9yRWFjaCgocmVwbGljYXRpb25Db250cm9sbGVyKSA9PiB7XHJcbiAgICAgICAgaWYgKCFyZXBsaWNhdGlvbkNvbnRyb2xsZXIua2luZCkgcmVwbGljYXRpb25Db250cm9sbGVyLmtpbmQgPSBcIlJlcGxpY2F0aW9uQ29udHJvbGxlclwiO1xyXG4gICAgICAgIHRoaXMucmVwbGljYXRpb25Db250cm9sbGVyc0J5S2V5W3JlcGxpY2F0aW9uQ29udHJvbGxlci5fa2V5XSA9IHJlcGxpY2F0aW9uQ29udHJvbGxlclxyXG4gICAgICAgICAgdmFyIHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IocmVwbGljYXRpb25Db250cm9sbGVyKTtcclxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoaXNGaWx0ZXJSQyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpICYmICFpc0luY2x1ZGUodGhpcy5maWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzLCByZXBsaWNhdGlvbkNvbnRyb2xsZXIpKVxyXG4gICAgICAgICAgIHRoaXMuZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVycy5wdXNoKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XHJcblxyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kcG9kQ291bnRlcnMgPSBzZWxlY3RvciA/IGNyZWF0ZVBvZENvdW50ZXJzKHNlbGVjdG9yLCB0aGlzLnBvZHMsIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kcG9kcykgOiBudWxsO1xyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kcG9kQ291bnQgPSByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHMubGVuZ3RoO1xyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kcmVwbGljYXMgPSAocmVwbGljYXRpb25Db250cm9sbGVyLnNwZWMgfHwge30pLnJlcGxpY2FzO1xyXG5cclxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJG9yYWNsZU5hbWUgPSBnZXRPcmFjbGVOYW1lKGdldE5hbWUocmVwbGljYXRpb25Db250cm9sbGVyKSk7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhnZXROYW1lKHJlcGxpY2F0aW9uQ29udHJvbGxlcikpO1xyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kb3JhY2xlU3RhdHVzID0gZ2V0T3JhY2xlU3RhdHVzKGdldExhYmVscyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcclxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJGV4dHJhY3RTdGF0dXMgPSBnZXRFeHRyYWN0U3RhdHVzKGdldExhYmVscyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcclxuXHJcblxyXG4gICAgICAgIHZhciBzZWxlY3RlZFBvZHMgPSByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHM7XHJcbiAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyLmNvbm5lY3RUbyA9IHNlbGVjdGVkUG9kcy5tYXAoKHBvZCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHBvZC5fa2V5O1xyXG4gICAgICAgIH0pLmpvaW4oJywnKTtcclxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJGxhYmVsc1RleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKGdldExhYmVscyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcclxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIubWV0YWRhdGEubGFiZWxzID0gS3ViZXJuZXRlcy5sYWJlbFRvQ2hpbmVzZShnZXRMYWJlbHMocmVwbGljYXRpb25Db250cm9sbGVyKSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJY29uVXJsQW5kQXBwSW5mbyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIsIFwicmVwbGljYXRpb25Db250cm9sbGVyTmFtZXNcIik7XHJcbiAgICAgICAgdmFyIGljb25VcmwgPSAgcmVwbGljYXRpb25Db250cm9sbGVyLiRpY29uVXJsO1xyXG4gICAgICAgIGlmIChpY29uVXJsICYmIHNlbGVjdGVkUG9kcykge1xyXG4gICAgICAgICAgc2VsZWN0ZWRQb2RzLmZvckVhY2goKHBvZCkgPT4ge1xyXG4gICAgICAgICAgICBwb2QuJGljb25VcmwgPSBpY29uVXJsO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIHNlcnZpY2VzIG1heSBub3QgbWFwIHRvIGFuIGljb24gYnV0IHRoZWlyIHBvZHMgbWF5IGRvIHZpYSB0aGUgUkNcclxuICAgICAgLy8gc28gbGV0cyBkZWZhdWx0IGl0Li4uXHJcbiAgICAgIHRoaXMuc2VydmljZXMuZm9yRWFjaCgoc2VydmljZSkgPT4ge1xyXG4gICAgICAgIHZhciBpY29uVXJsID0gc2VydmljZS4kaWNvblVybDtcclxuICAgICAgICB2YXIgc2VsZWN0ZWRQb2RzID0gc2VydmljZS4kcG9kcztcclxuICAgICAgICBpZiAoc2VsZWN0ZWRQb2RzKSB7XHJcbiAgICAgICAgICBpZiAoIWljb25VcmwgfHwgaWNvblVybCA9PT0gZGVmYXVsdEljb25VcmwpIHtcclxuICAgICAgICAgICAgaWNvblVybCA9IG51bGw7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkUG9kcy5mb3JFYWNoKChwb2QpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWljb25VcmwpIHtcclxuICAgICAgICAgICAgICAgIGljb25VcmwgPSBwb2QuJGljb25Vcmw7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWNvblVybCkge1xyXG4gICAgICAgICAgICAgICAgICBzZXJ2aWNlLiRpY29uVXJsID0gaWNvblVybDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZUFwcHMoKTtcclxuXHJcbiAgICAgIHZhciBwb2RzQnlIb3N0ID0ge307XHJcbiAgICAgIHRoaXMucG9kcy5mb3JFYWNoKChwb2QpID0+IHtcclxuICAgICAgICB2YXIgaG9zdCA9IGdldEhvc3QocG9kKTtcclxuICAgICAgICB2YXIgcG9kc0Zvckhvc3QgPSBwb2RzQnlIb3N0W2hvc3RdO1xyXG4gICAgICAgIGlmICghcG9kc0Zvckhvc3QpIHtcclxuICAgICAgICAgIHBvZHNGb3JIb3N0ID0gW107XHJcbiAgICAgICAgICBwb2RzQnlIb3N0W2hvc3RdID0gcG9kc0Zvckhvc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBvZHNGb3JIb3N0LnB1c2gocG9kKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucG9kc0J5SG9zdCA9IHBvZHNCeUhvc3Q7XHJcblxyXG4gICAgICB2YXIgdG1wSG9zdHMgPSBbXTtcclxuICAgICAgZm9yICh2YXIgaG9zdEtleSBpbiBwb2RzQnlIb3N0KSB7XHJcbiAgICAgICAgdmFyIGhvc3RQb2RzID0gW107XHJcbiAgICAgICAgdmFyIHBvZENvdW50ZXJzID0gY3JlYXRlUG9kQ291bnRlcnMoKHBvZCkgPT4gZ2V0SG9zdChwb2QpID09PSBob3N0S2V5LCB0aGlzLnBvZHMsIGhvc3RQb2RzLCBcImhvc3Q9XCIgKyBob3N0S2V5KTtcclxuICAgICAgICB2YXIgaG9zdElQID0gbnVsbDtcclxuICAgICAgICBpZiAoaG9zdFBvZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB2YXIgcG9kID0gaG9zdFBvZHNbMF07XHJcbiAgICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gcG9kLnN0YXR1cztcclxuICAgICAgICAgIGlmIChjdXJyZW50U3RhdGUpIHtcclxuICAgICAgICAgICAgaG9zdElQID0gY3VycmVudFN0YXRlLmhvc3RJUDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhvc3REZXRhaWxzID0ge1xyXG4gICAgICAgICAgbmFtZTogaG9zdEtleSxcclxuICAgICAgICAgIGlkOiBob3N0S2V5LFxyXG4gICAgICAgICAgZWxlbWVudElkOiBob3N0S2V5LnJlcGxhY2UoL1xcLi9nLCAnXycpLFxyXG4gICAgICAgICAgaG9zdElQOiBob3N0SVAsXHJcbiAgICAgICAgICBwb2RzOiBob3N0UG9kcyxcclxuICAgICAgICAgIGtpbmQ6IFwiSG9zdFwiLFxyXG4gICAgICAgICAgICAkcG9kQ291bnRlcnM6IHBvZENvdW50ZXJzLFxyXG4gICAgICAgICAgICAkaWNvblVybDogaG9zdEljb25VcmxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRtcEhvc3RzLnB1c2goaG9zdERldGFpbHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmhvc3RzID0gdG1wSG9zdHM7XHJcblxyXG4gICAgICBlbnJpY2hCdWlsZENvbmZpZ3ModGhpcy5idWlsZGNvbmZpZ3MpO1xyXG4gICAgICBlbnJpY2hFdmVudHModGhpcy5ldmVudHMsIHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB1cGRhdGVBcHBzKCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vIGxldHMgY3JlYXRlIHRoZSBhcHAgdmlld3MgYnkgdHJ5aW5nIHRvIGpvaW4gY29udHJvbGxlcnMgLyBzZXJ2aWNlcyAvIHBvZHMgdGhhdCBhcmUgcmVsYXRlZFxyXG4gICAgICAgIHZhciBhcHBWaWV3cyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnJlcGxpY2F0aW9uQ29udHJvbGxlcnMuZm9yRWFjaCgocmVwbGljYXRpb25Db250cm9sbGVyKSA9PiB7XHJcbiAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUocmVwbGljYXRpb25Db250cm9sbGVyKTtcclxuICAgICAgICAgIHZhciAkaWNvblVybCA9IHJlcGxpY2F0aW9uQ29udHJvbGxlci4kaWNvblVybDtcclxuICAgICAgICAgIGFwcFZpZXdzLnB1c2goe1xyXG4gICAgICAgICAgICBhcHBQYXRoOiBcIi9kdW1teVBhdGgvXCIgKyBuYW1lLFxyXG4gICAgICAgICAgICAkbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgJGluZm86IHtcclxuICAgICAgICAgICAgICAkaWNvblVybDogJGljb25VcmxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJGljb25Vcmw6ICRpY29uVXJsLFxyXG4gICAgICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXJzOiBbcmVwbGljYXRpb25Db250cm9sbGVyXSxcclxuICAgICAgICAgICAgcG9kczogcmVwbGljYXRpb25Db250cm9sbGVyLiRwb2RzIHx8IFtdLFxyXG4gICAgICAgICAgICBzZXJ2aWNlczogW11cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB2YXIgbm9NYXRjaGVzID0gW107XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlcy5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XHJcbiAgICAgICAgICAvLyBub3cgbGV0cyBzZWUgaWYgd2UgY2FuIGZpbmQgYW4gYXBwIHdpdGggYW4gUkMgb2YgdGhlIHNhbWUgc2VsZWN0b3JcclxuICAgICAgICAgIHZhciBtYXRjaGVzQXBwID0gbnVsbDtcclxuICAgICAgICAgIGFwcFZpZXdzLmZvckVhY2goKGFwcFZpZXcpID0+IHtcclxuICAgICAgICAgICAgYXBwVmlldy5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmZvckVhY2goKHJlcGxpY2F0aW9uQ29udHJvbGxlcikgPT4ge1xyXG4gICAgICAgICAgICAgIHZhciByZXBTZWxlY3RvciA9IGdldFNlbGVjdG9yKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcFNlbGVjdG9yICYmXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdG9yTWF0Y2hlcyhyZXBTZWxlY3RvciwgZ2V0U2VsZWN0b3Ioc2VydmljZSkpICYmXHJcbiAgICAgICAgICAgICAgICAgIGdldE5hbWVzcGFjZShzZXJ2aWNlKSA9PT0gZ2V0TmFtZXNwYWNlKHJlcGxpY2F0aW9uQ29udHJvbGxlcikpIHtcclxuICAgICAgICAgICAgICAgIG1hdGNoZXNBcHAgPSBhcHBWaWV3O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAobWF0Y2hlc0FwcCkge1xyXG4gICAgICAgICAgICBtYXRjaGVzQXBwLnNlcnZpY2VzLnB1c2goc2VydmljZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBub01hdGNoZXMucHVzaChzZXJ2aWNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBsb2cuZGVidWcoXCJubyBtYXRjaGVzOiBcIiwgbm9NYXRjaGVzKTtcclxuICAgICAgICBub01hdGNoZXMuZm9yRWFjaCgoc2VydmljZSkgPT4ge1xyXG4gICAgICAgICAgdmFyIGFwcFZpZXcgPSBfLmZpbmQoYXBwVmlld3MsIChhcHBWaWV3KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBfLmFueShhcHBWaWV3LnJlcGxpY2F0aW9uQ29udHJvbGxlcnMsIChyYykgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfLnN0YXJ0c1dpdGgoZ2V0TmFtZShyYyksIGdldE5hbWUoc2VydmljZSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGFwcFZpZXcpIHtcclxuICAgICAgICAgICAgYXBwVmlldy5zZXJ2aWNlcy5wdXNoKHNlcnZpY2UpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyICRpY29uVXJsID0gc2VydmljZS4kaWNvblVybDtcclxuICAgICAgICAgICAgYXBwVmlld3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgYXBwUGF0aDogXCIvZHVtbXlQYXRoL1wiICsgbmFtZSxcclxuICAgICAgICAgICAgICAkbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgICAkaW5mbzoge1xyXG4gICAgICAgICAgICAgICAgJGljb25Vcmw6ICRpY29uVXJsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICRpY29uVXJsOiAkaWNvblVybCxcclxuICAgICAgICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXJzOiBbXSxcclxuICAgICAgICAgICAgICBwb2RzOiBzZXJ2aWNlLiRwb2RzIHx8IFtdLFxyXG4gICAgICAgICAgICAgIHNlcnZpY2VzOiBbc2VydmljZV1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaCh0aGlzLnJvdXRlcywgKHJvdXRlKSA9PiB7XHJcbiAgICAgICAgICB2YXIgbWV0YWRhdGEgPSByb3V0ZS5tZXRhZGF0YSB8fCB7fTtcclxuICAgICAgICAgIHZhciBzcGVjID0gcm91dGUuc3BlYyB8fCB7fTtcclxuICAgICAgICAgIHZhciBzZXJ2aWNlTmFtZSA9IENvcmUucGF0aEdldChzcGVjLCBbXCJ0b1wiLCBcIm5hbWVcIl0pO1xyXG4gICAgICAgICAgdmFyIGhvc3QgPSBzcGVjLmhvc3Q7XHJcbiAgICAgICAgICB2YXIgbmFtZXNwYWNlID0gZ2V0TmFtZXNwYWNlKHJvdXRlKTtcclxuICAgICAgICAgIGlmIChzZXJ2aWNlTmFtZSAmJiBob3N0KSB7XHJcbiAgICAgICAgICAgIHZhciBzZXJ2aWNlID0gdGhpcy5nZXRTZXJ2aWNlKG5hbWVzcGFjZSwgc2VydmljZU5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoc2VydmljZSkge1xyXG4gICAgICAgICAgICAgIHNlcnZpY2UuJGhvc3QgPSBob3N0O1xyXG5cclxuICAgICAgICAgICAgICAvLyBUT0RPIHdlIGNvdWxkIHVzZSBzb21lIGFubm90YXRpb25zIC8gbWV0YWRhdGEgdG8gZGVkdWNlIHdoYXQgVVJMIHdlIHNob3VsZCB1c2UgdG8gb3BlbiB0aGlzXHJcbiAgICAgICAgICAgICAgLy8gc2VydmljZSBpbiB0aGUgY29uc29sZS4gRm9yIG5vdyBqdXN0IGFzc3VtZSBpdHMgaHR0cDpcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGhvc3QpIHtcclxuICAgICAgICAgICAgICAgIHZhciBob3N0VXJsID0gIGhvc3Q7XHJcbiAgICAgICAgICAgICAgICBpZiAoaG9zdFVybC5pbmRleE9mKFwiOi8vXCIpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICBob3N0VXJsID0gXCJodHRwOi8vXCIgKyBob3N0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2VydmljZS4kY29ubmVjdFVybCA9IFVybEhlbHBlcnMuam9pbihob3N0VXJsLCAgXCIvXCIpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgLy8gVE9ETyBkZWZpbml0ZWx5IG5lZWQgdGhhdCBhbm5vdGF0aW9uLCB0ZW1wIGhhY2sgZm9yIGFwaW1hbiBsaW5rXHJcbiAgICAgICAgICAgICAgaWYgKGdldE5hbWUoc2VydmljZSkgPT09ICdhcGltYW4nICYmIGhvc3QpIHtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2UuJGNvbm5lY3RVcmwgPSAoPGFueT4gbmV3IFVSSSgpLmhvc3Qoc2VydmljZS4kaG9zdClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wYXRoKCdhcGltYW51aS9pbmRleC5odG1sJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucXVlcnkoe30pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaGFzaChVUkkuZW5jb2RlKGFuZ3VsYXIudG9Kc29uKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvOiBuZXcgVVJJKCkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IEhhd3Rpb09BdXRoLmdldE9BdXRoVG9rZW4oKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpKS50b1N0cmluZygpO1xyXG5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiQ291bGQgbm90IGZpbmQgc2VydmljZSBcIiArIHNlcnZpY2VOYW1lICsgXCIgbmFtZXNwYWNlIFwiICsgbmFtZXNwYWNlICsgXCIgZm9yIHJvdXRlOiBcIiArIG1ldGFkYXRhLm5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGFwcFZpZXdzID0gXy5zb3J0QnkocG9wdWxhdGVLZXlzKGFwcFZpZXdzKSwgKGFwcFZpZXcpID0+IGFwcFZpZXcuX2tleSk7XHJcblxyXG4gICAgICAgIEFycmF5SGVscGVycy5zeW5jKHRoaXMuYXBwVmlld3MsIGFwcFZpZXdzLCAnJG5hbWUnKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXBwSW5mb3MgJiYgdGhpcy5hcHBWaWV3cykge1xyXG4gICAgICAgICAgdmFyIGZvbGRlck1hcCA9IHt9O1xyXG4gICAgICAgICAgdmFyIGZvbGRlcnMgPSBbXTtcclxuICAgICAgICAgIHZhciBhcHBNYXAgPSB7fTtcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCh0aGlzLmFwcEluZm9zLCAoYXBwSW5mbykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWFwcEluZm8uJGljb25VcmwgJiYgYXBwSW5mby5pY29uUGF0aCAmJiBhcHBJbmZvLmljb25QYXRoICE9PSBcIm51bGxcIikge1xyXG4gICAgICAgICAgICAgIGFwcEluZm8uJGljb25VcmwgPSBnaXRQYXRoVG9VcmwoYXBwSW5mby5pY29uUGF0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGFwcFBhdGggPSBhcHBJbmZvLmFwcFBhdGg7XHJcbiAgICAgICAgICAgIGlmIChhcHBQYXRoKSB7XHJcbiAgICAgICAgICAgICAgYXBwTWFwW2FwcFBhdGhdID0gYXBwSW5mbztcclxuICAgICAgICAgICAgICB2YXIgaWR4ID0gYXBwUGF0aC5sYXN0SW5kZXhPZihcIi9cIik7XHJcbiAgICAgICAgICAgICAgdmFyIGZvbGRlclBhdGggPSBcIlwiO1xyXG4gICAgICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgZm9sZGVyUGF0aCA9IGFwcFBhdGguc3Vic3RyaW5nKDAsIGlkeCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZvbGRlclBhdGggPSBDb3JlLnRyaW1MZWFkaW5nKGZvbGRlclBhdGgsIFwiL1wiKTtcclxuICAgICAgICAgICAgICB2YXIgZm9sZGVyID0gZm9sZGVyTWFwW2ZvbGRlclBhdGhdO1xyXG4gICAgICAgICAgICAgIGlmICghZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBmb2xkZXIgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHBhdGg6IGZvbGRlclBhdGgsXHJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBhcHBzOiBbXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGZvbGRlcnMucHVzaChmb2xkZXIpO1xyXG4gICAgICAgICAgICAgICAgZm9sZGVyTWFwW2ZvbGRlclBhdGhdID0gZm9sZGVyO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb2xkZXIuYXBwcy5wdXNoKGFwcEluZm8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuYXBwRm9sZGVycyA9IF8uc29ydEJ5KGZvbGRlcnMsIFwicGF0aFwiKTtcclxuXHJcbiAgICAgICAgICB2YXIgYXBwcyA9IFtdO1xyXG4gICAgICAgICAgdmFyIGRlZmF1bHRJbmZvID0ge1xyXG4gICAgICAgICAgICAkaWNvblVybDogZGVmYXVsdEljb25VcmxcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHRoaXMuYXBwVmlld3MsIChhcHBWaWV3OmFueSkgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIHZhciBhcHBQYXRoID0gYXBwVmlldy5hcHBQYXRoO1xyXG5cclxuICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICBUT0RPXHJcbiAgICAgICAgICAgICAgIGFwcFZpZXcuJHNlbGVjdCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5zZXRKc29uKCRzY29wZSwgYXBwVmlldy5pZCwgJHNjb3BlLm1vZGVsLmFwcHMpO1xyXG4gICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAqL1xyXG5cclxuICAgICAgICAgICAgICB2YXIgYXBwSW5mbzphbnkgPSBhbmd1bGFyLmNvcHkoZGVmYXVsdEluZm8pO1xyXG4gICAgICAgICAgICAgIGlmIChhcHBQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBhcHBJbmZvID0gYXBwTWFwW2FwcFBhdGhdIHx8IGFwcEluZm87XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICghYXBwVmlldy4kaW5mbykge1xyXG4gICAgICAgICAgICAgICAgYXBwVmlldy4kaW5mbyA9IGRlZmF1bHRJbmZvO1xyXG4gICAgICAgICAgICAgICAgYXBwVmlldy4kaW5mbyA9IGFwcEluZm87XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGFwcFZpZXcuaWQgPSBhcHBQYXRoO1xyXG4gICAgICAgICAgICAgIGlmICghYXBwVmlldy4kbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgYXBwVmlldy4kbmFtZSA9IGFwcEluZm8ubmFtZSB8fCBhcHBWaWV3LiRuYW1lO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoIWFwcFZpZXcuJGljb25VcmwpIHtcclxuICAgICAgICAgICAgICAgIGFwcFZpZXcuJGljb25VcmwgPSBhcHBJbmZvLiRpY29uVXJsO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBhcHBzLnB1c2goYXBwVmlldyk7XHJcbiAgICAgICAgICAgICAgYXBwVmlldy4kcG9kQ291bnRlcnMgPSBjcmVhdGVBcHBWaWV3UG9kQ291bnRlcnMoYXBwVmlldyk7XHJcbiAgICAgICAgICAgICAgYXBwVmlldy4kcG9kQ291bnQgPSAoYXBwVmlldy5wb2RzIHx8IFtdKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgYXBwVmlldy4kcmVwbGljYXRpb25Db250cm9sbGVyc1RleHQgPSAoYXBwVmlldy5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzIHx8IFtdKS5tYXAoKGkpID0+IGlbXCJfa2V5XCJdKS5qb2luKFwiIFwiKTtcclxuICAgICAgICAgICAgICBhcHBWaWV3LiRzZXJ2aWNlc1RleHQ9IChhcHBWaWV3LnNlcnZpY2VzIHx8IFtdKS5tYXAoKGkpID0+IGlbXCJfa2V5XCJdKS5qb2luKFwiIFwiKTtcclxuICAgICAgICAgICAgICBhcHBWaWV3LiRzZXJ2aWNlVmlld3MgPSBjcmVhdGVBcHBWaWV3U2VydmljZVZpZXdzKGFwcFZpZXcpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gdXBkYXRlIGFwcFZpZXdzOiBcIiArIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vdGhpcy5hcHBzID0gYXBwcztcclxuICAgICAgICAgIHRoaXMuYXBwcyA9IHRoaXMuYXBwVmlld3M7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgbG9nLndhcm4oXCJDYXVnaHQgZXJyb3I6IFwiICsgZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZGlzY292ZXJQb2RDb25uZWN0aW9ucyhlbnRpdHkpIHtcclxuICAgICAgdmFyIGluZm8gPSBDb3JlLnBhdGhHZXQoZW50aXR5LCBbXCJzdGF0dXNcIiwgXCJpbmZvXCJdKTtcclxuICAgICAgdmFyIGhvc3RQb3J0ID0gbnVsbDtcclxuICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IGVudGl0eS5zdGF0dXMgfHwge307XHJcbiAgICAgIHZhciBkZXNpcmVkU3RhdGUgPSBlbnRpdHkuc3BlYyB8fCB7fTtcclxuICAgICAgdmFyIHBvZElkID0gZ2V0TmFtZShlbnRpdHkpO1xyXG4gICAgICB2YXIgaG9zdCA9IGN1cnJlbnRTdGF0ZVtcImhvc3RJUFwiXTtcclxuICAgICAgdmFyIHBvZElQID0gY3VycmVudFN0YXRlW1wicG9kSVBcIl07XHJcbiAgICAgIHZhciBoYXNEb2NrZXIgPSBmYWxzZTtcclxuICAgICAgdmFyIGZvdW5kQ29udGFpbmVyUG9ydCA9IG51bGw7XHJcbiAgICAgIGlmIChkZXNpcmVkU3RhdGUpIHtcclxuICAgICAgICB2YXIgY29udGFpbmVycyA9IGRlc2lyZWRTdGF0ZS5jb250YWluZXJzO1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChjb250YWluZXJzLCAoY29udGFpbmVyKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWhvc3RQb3J0KSB7XHJcbiAgICAgICAgICAgIHZhciBwb3J0cyA9IGNvbnRhaW5lci5wb3J0cztcclxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHBvcnRzLCAocG9ydCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghaG9zdFBvcnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb250YWluZXJQb3J0ID0gcG9ydC5jb250YWluZXJQb3J0O1xyXG4gICAgICAgICAgICAgICAgdmFyIHBvcnROYW1lID0gcG9ydC5uYW1lO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lckhvc3RQb3J0ID0gcG9ydC5ob3N0UG9ydDtcclxuICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJQb3J0ID09PSA4Nzc4IHx8IFwiam9sb2tpYVwiID09PSBwb3J0TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyUG9ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwb2RJUCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZm91bmRDb250YWluZXJQb3J0ID0gY29udGFpbmVyUG9ydDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lckhvc3RQb3J0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBob3N0UG9ydCA9IGNvbnRhaW5lckhvc3RQb3J0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGZvdW5kQ29udGFpbmVyUG9ydCAmJiBwb2RJZCAmJiBpc1J1bm5pbmcoY3VycmVudFN0YXRlKSkge1xyXG4gICAgICAgIGlmICghS3ViZXJuZXRlcy5pc09wZW5TaGlmdCkge1xyXG4gICAgICAgICAgLy8gVE9ETyB0ZW1wIHdvcmthcm91bmQgZm9yIGs4cyBvbiBHS0UgaHR0cHM6Ly9naXRodWIuY29tL2t1YmVybmV0ZXMva3ViZXJuZXRlcy9pc3N1ZXMvMTcxNzJcclxuICAgICAgICAgIGVudGl0eS4kam9sb2tpYVVybCA9IFVybEhlbHBlcnMuam9pbihLdWJlcm5ldGVzLm1hc3RlckFwaVVybCgpLFxyXG4gICAgICAgICAgICAgIFwiYXBpXCIsXHJcbiAgICAgICAgICAgICAgS3ViZXJuZXRlcy5kZWZhdWx0QXBpVmVyc2lvbixcclxuICAgICAgICAgICAgICBcInByb3h5XCIsXHJcbiAgICAgICAgICAgICAgXCJuYW1lc3BhY2VzXCIsXHJcbiAgICAgICAgICAgICAgZW50aXR5Lm1ldGFkYXRhLm5hbWVzcGFjZSAsXHJcbiAgICAgICAgICAgICAgXCJwb2RzXCIsXHJcbiAgICAgICAgICAgICAgLy9cImh0dHBzOlwiICsgcG9kSWQgKyBcIjpcIiArIGZvdW5kQ29udGFpbmVyUG9ydCxcclxuICAgICAgICAgICAgICBwb2RJZCArIFwiOlwiICsgZm91bmRDb250YWluZXJQb3J0LFxyXG4gICAgICAgICAgICAgIFwiam9sb2tpYS9cIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGVudGl0eS4kam9sb2tpYVVybCA9IFVybEhlbHBlcnMuam9pbihLdWJlcm5ldGVzLm1hc3RlckFwaVVybCgpLFxyXG4gICAgICAgICAgICAgIFwiYXBpXCIsXHJcbiAgICAgICAgICAgICAgS3ViZXJuZXRlcy5kZWZhdWx0QXBpVmVyc2lvbixcclxuICAgICAgICAgICAgICBcIm5hbWVzcGFjZXNcIixcclxuICAgICAgICAgICAgICBlbnRpdHkubWV0YWRhdGEubmFtZXNwYWNlICxcclxuICAgICAgICAgICAgICBcInBvZHNcIixcclxuICAgICAgICAgICAgICBcImh0dHBzOlwiICsgcG9kSWQgKyBcIjpcIiArIGZvdW5kQ29udGFpbmVyUG9ydCxcclxuICAgICAgICAgICAgICBcInByb3h5L2pvbG9raWEvXCIpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldFRlbXBsYXRlU2VydmljZShtb2RlbCkge1xyXG4gICAgdmFyIGtleSA9IGNyZWF0ZUtleSgnZGVmYXVsdCcsICd0ZW1wbGF0ZXMnLCAnc2VydmljZScpO1xyXG4gICAgdmFyIGFuc3dlciA9IG1vZGVsLnNlcnZpY2VzQnlLZXlba2V5XTtcclxuICAgIGxvZy5kZWJ1ZyhcImZvdW5kIHRlbXBsYXRlIHNlcnZpY2U6IFwiLCBhbnN3ZXIpO1xyXG4gICAgcmV0dXJuIGFuc3dlcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBtb2RlbCBzZXJ2aWNlIHdoaWNoIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgcG9kcywgcmVwbGljYXRpb24gY29udHJvbGxlcnMgYW5kIHNlcnZpY2VzIGFsb25nXHJcbiAgICogd2l0aCB0aGVpciBhc3NvY2lhdGlvbnMgYW5kIHN0YXR1c1xyXG4gICAqL1xyXG4gIF9tb2R1bGUuZmFjdG9yeSgnS3ViZXJuZXRlc01vZGVsJywgWyckcm9vdFNjb3BlJywgJyRodHRwJywgJ0t1YmVybmV0ZXNBcGlVUkwnLCAnS3ViZXJuZXRlc1N0YXRlJywgJ1dhdGNoZXJTZXJ2aWNlJywgJyRsb2NhdGlvbicsICckcmVzb3VyY2UnLCAoJHJvb3RTY29wZSwgJGh0dHAsIEFwcExpYnJhcnlVUkwsIEt1YmVybmV0ZXNTdGF0ZSwgd2F0Y2hlcjpXYXRjaGVyU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyZXNvdXJjZTpuZy5yZXNvdXJjZS5JUmVzb3VyY2VTZXJ2aWNlKSA9PiB7XHJcblxyXG4gICAgdmFyICRzY29wZSA9IG5ldyBLdWJlcm5ldGVzTW9kZWxTZXJ2aWNlKCk7XHJcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuXHJcbiAgICAvLyBjcmVhdGUgYWxsIG9mIG91ciByZXNvdXJjZSBjbGFzc2VzXHJcbiAgICB2YXIgdHlwZU5hbWVzID0gd2F0Y2hlci5nZXRUeXBlcygpO1xyXG4gICAgXy5mb3JFYWNoKHR5cGVOYW1lcywgKHR5cGU6c3RyaW5nKSA9PiB7XHJcbiAgICAgIHZhciB1cmxUZW1wbGF0ZSA9IHVyaVRlbXBsYXRlRm9yS3ViZXJuZXRlc0tpbmQodHlwZSk7XHJcbiAgICAgICRzY29wZVt0eXBlICsgJ1Jlc291cmNlJ10gPSBjcmVhdGVSZXNvdXJjZSh0eXBlLCB1cmxUZW1wbGF0ZSwgJHJlc291cmNlLCAkc2NvcGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFpc09wZW5TaGlmdCkge1xyXG4gICAgICAvLyByZWdpc3RlciBjdXN0b20gVVJMIGZhY3RvcmllcyBmb3IgdGVtcGxhdGVzL3Byb2plY3RzXHJcbiAgICAgIHdhdGNoZXIucmVnaXN0ZXJDdXN0b21VcmxGdW5jdGlvbihLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuQlVJTERfQ09ORklHUywgKG9wdGlvbnM6S3ViZXJuZXRlc0FQSS5LOFNPcHRpb25zKSA9PiB7XHJcbiAgICAgICAgdmFyIHRlbXBsYXRlU2VydmljZSA9IGdldFRlbXBsYXRlU2VydmljZSgkc2NvcGUpO1xyXG4gICAgICAgIGlmICh0ZW1wbGF0ZVNlcnZpY2UpIHtcclxuICAgICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVTZXJ2aWNlLnByb3h5VXJsLCAnL29hcGkvdjEvbmFtZXNwYWNlcy9kZWZhdWx0L2J1aWxkY29uZmlncy8nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyByZWdpc3RlciBjdXN0b20gVVJMIGZhY3RvcmllcyBmb3IgdGVtcGxhdGVzL3Byb2plY3RzXHJcbiAgICAgIHdhdGNoZXIucmVnaXN0ZXJDdXN0b21VcmxGdW5jdGlvbihLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuVEVNUExBVEVTLCAob3B0aW9uczpLdWJlcm5ldGVzQVBJLks4U09wdGlvbnMpID0+IHtcclxuICAgICAgICB2YXIgdGVtcGxhdGVTZXJ2aWNlID0gZ2V0VGVtcGxhdGVTZXJ2aWNlKCRzY29wZSk7XHJcbiAgICAgICAgaWYgKHRlbXBsYXRlU2VydmljZSkge1xyXG4gICAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVNlcnZpY2UucHJveHlVcmwsICcvb2FwaS92MS9uYW1lc3BhY2VzL2RlZmF1bHQvdGVtcGxhdGVzLycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmVnaXN0ZXIgZm9yIGFsbCB1cGRhdGVzIG9uIG9iamVjdHNcclxuXHRcdHdhdGNoZXIucmVnaXN0ZXJMaXN0ZW5lcigob2JqZWN0czpPYmplY3RNYXApID0+IHtcclxuXHRcdFx0dmFyIHR5cGVzID0gd2F0Y2hlci5nZXRUeXBlcygpO1xyXG5cdFx0XHRfLmZvckVhY2godHlwZXMsICh0eXBlOnN0cmluZykgPT4ge1xyXG5cdFx0XHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRcdFx0Y2FzZSBXYXRjaFR5cGVzLlNFUlZJQ0VTOlxyXG5cdFx0XHRcdFx0XHR2YXIgaXRlbXMgPSBwb3B1bGF0ZUtleXMob2JqZWN0c1t0eXBlXSk7XHJcblx0XHRcdFx0XHRcdGFuZ3VsYXIuZm9yRWFjaChpdGVtcywgKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICBpdGVtLnByb3h5VXJsID0ga3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZShrdWJlcm5ldGVzQXBpVXJsKCksIGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHRcdFx0XHRcdFx0JHNjb3BlW3R5cGVdID0gaXRlbXM7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBXYXRjaFR5cGVzLlRFTVBMQVRFUzpcclxuICAgICAgICAgIGNhc2UgV2F0Y2hUeXBlcy5ST1VURVM6XHJcbiAgICAgICAgICBjYXNlIFdhdGNoVHlwZXMuQlVJTERTOlxyXG4gICAgICAgICAgY2FzZSBXYXRjaFR5cGVzLkJVSUxEX0NPTkZJR1M6XHJcbiAgICAgICAgICBjYXNlIFdhdGNoVHlwZXMuSU1BR0VfU1RSRUFNUzpcclxuICAgICAgICAgICAgLy8gZG9uJ3QgcHV0IGEgYnJlYWsgaGVyZSA6LSlcclxuXHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdCRzY29wZVt0eXBlXSA9IHBvcHVsYXRlS2V5cyhvYmplY3RzW3R5cGVdKTtcclxuXHRcdFx0XHR9XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiVHlwZTogXCIsIHR5cGUsIFwiIG9iamVjdDogXCIsICRzY29wZVt0eXBlXSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHQkc2NvcGUubWF5YmVJbml0KCk7XHJcbiAgICAgICRyb290U2NvcGUuJGJyb2FkY2FzdCgna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsICRzY29wZSk7XHJcbiAgICAgIENvcmUuJGFwcGx5KCRyb290U2NvcGUpO1xyXG5cdFx0fSk7XHJcblxyXG4gICAgLy8gc2V0IHRoZSBzZWxlY3RlZCBuYW1lc3BhY2UgaWYgc2V0IGluIHRoZSBsb2NhdGlvbiBiYXJcclxuICAgIC8vIG90aGVyd2lzZSB1c2Ugd2hhdGV2ZXIgcHJldmlvdXNseSBzZWxlY3RlZCBuYW1lc3BhY2UgaXNcclxuICAgIC8vIGF2YWlsYWJsZVxyXG4gICAgdmFyIHNlYXJjaCA9ICRsb2NhdGlvbi5zZWFyY2goKTtcclxuICAgIGlmICgnbmFtZXNwYWNlJyBpbiBzZWFyY2gpIHtcclxuICAgICAgd2F0Y2hlci5zZXROYW1lc3BhY2Uoc2VhcmNoWyduYW1lc3BhY2UnXSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2VsZWN0UG9kcyhwb2RzLCBuYW1lc3BhY2UsIGxhYmVscykge1xyXG4gICAgICByZXR1cm4gcG9kcy5maWx0ZXIoKHBvZCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBnZXROYW1lc3BhY2UocG9kKSA9PT0gbmFtZXNwYWNlICYmIHNlbGVjdG9yTWF0Y2hlcyhsYWJlbHMsIGdldExhYmVscyhwb2QpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJHNjb3BlO1xyXG4gIH1dKTtcclxuXHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0ludGVyZmFjZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNNb2RlbC50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlclBsdWdpbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjbGlja0FwcHJvdmUoZWxlbWVudCwgdXJsKSB7XHJcbiAgICB2YXIgJHNjb3BlOiBhbnkgPSBhbmd1bGFyLmVsZW1lbnQoZWxlbWVudCkuc2NvcGUoKTtcclxuICAgIGlmICgkc2NvcGUpIHtcclxuICAgICAgJHNjb3BlLmFwcHJvdmUodXJsLCBlbGVtZW50LnRleHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IHZhciBKZW5raW5zTG9nQ29udHJvbGxlciA9IF9tb2R1bGUuY29udHJvbGxlcihcIkRldmVsb3Blci5KZW5raW5zTG9nQ29udHJvbGxlclwiLCAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXHJcbiAgICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsICRtb2RhbCwgS3ViZXJuZXRlc0FwaVVSTCwgU2VydmljZVJlZ2lzdHJ5LCAkZWxlbWVudCkgPT4ge1xyXG5cclxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG5cclxuICAgICRzY29wZS5zZWxlY3RlZEJ1aWxkID0gJHNjb3BlLiRldmFsKCdidWlsZCcpIHx8ICRzY29wZS4kZXZhbCgnc2VsZWN0ZWRCdWlsZCcpO1xyXG5cclxuICAgICRzY29wZS5pZCA9ICRzY29wZS4kZXZhbCgnYnVpbGQuaWQnKSB8fCAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xyXG4gICAgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSA9IHt9O1xyXG5cclxuICAgICRlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcclxuICAgICAgJHNjb3BlLiRkZXN0cm95KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkc2NvcGUubG9nID0ge1xyXG4gICAgICBodG1sOiBcIlwiLFxyXG4gICAgICBzdGFydDogMCxcclxuICAgICAgZmlyc3RJZHg6IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgdXBkYXRlSmVua2luc0xpbmsoKTtcclxuICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS4kb24oJ2plbmtpbnNTZWxlY3RlZEJ1aWxkJywgKGV2ZW50LCBidWlsZCkgPT4ge1xyXG4gICAgICBsb2cuaW5mbyhcIj09PT0gamVua2lucyBidWlsZCBzZWxlY3RlZCEgXCIgKyBidWlsZC5pZCArIFwiIFwiICsgYnVpbGQuJGpvYklkKTtcclxuICAgICAgJHNjb3BlLnNlbGVjdGVkQnVpbGQgPSBidWlsZDtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAkc2NvcGUuJHdhdGNoKCdzZWxlY3RlZEJ1aWxkJywgKHNlbGVjdGVkQnVpbGQpID0+IHtcclxuICAgICAgbG9nLmluZm8oXCJTZWxlY3RlZCBidWlsZCB1cGRhdGVkOiBcIiwgc2VsZWN0ZWRCdWlsZCk7XHJcbiAgICAgICRzY29wZS5mZXRjaCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBjcmVhdGVKZW5raW5zQnJlYWRjcnVtYnMoJHNjb3BlLmlkLCBnZXRKb2JJZCgpLCBnZXRCdWlsZElkKCkpO1xyXG4gICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IGNyZWF0ZUplbmtpbnNTdWJOYXZCYXJzKCRzY29wZS5pZCwgZ2V0Sm9iSWQoKSwgZ2V0QnVpbGRJZCgpLCB7XHJcbiAgICAgIGxhYmVsOiBcIkxvZ1wiLFxyXG4gICAgICB0aXRsZTogXCJWaWV3cyB0aGUgbG9ncyBvZiB0aGlzIGJ1aWxkXCJcclxuICAgIH0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIGdldEpvYklkKCkge1xyXG4gICAgICAvLyBsZXRzIGFsbG93IHRoZSBwYXJlbnQgc2NvcGUgdG8gYmUgdXNlZCB0b28gZm9yIHdoZW4gdGhpcyBpcyB1c2VkIGFzIGEgcGFuZWxcclxuICAgICAgcmV0dXJuICRyb3V0ZVBhcmFtc1tcImpvYlwiXSB8fCAoJHNjb3BlLnNlbGVjdGVkQnVpbGQgfHwge30pLiRqb2JJZDtcclxuICAgIH1cclxuICAgICRzY29wZS5nZXRKb2JJZCA9IGdldEpvYklkO1xyXG5cclxuICAgIGZ1bmN0aW9uIGdldEJ1aWxkSWQoKSB7XHJcbiAgICAgIC8vIGxldHMgYWxsb3cgdGhlIHBhcmVudCBzY29wZSB0byBiZSB1c2VkIHRvbyBmb3Igd2hlbiB0aGlzIGlzIHVzZWQgYXMgYSBwYW5lbFxyXG4gICAgICByZXR1cm4gJHJvdXRlUGFyYW1zW1wiYnVpbGRcIl0gfHwgKCRzY29wZS5zZWxlY3RlZEJ1aWxkIHx8IHt9KS5pZDtcclxuICAgIH1cclxuICAgICRzY29wZS5nZXRCdWlsZElkID0gZ2V0QnVpbGRJZDtcclxuXHJcbiAgICBmdW5jdGlvbiB1cGRhdGVKZW5raW5zTGluaygpIHtcclxuICAgICAgdmFyIGplbmtpbnNVcmwgPSBqZW5raW5zTGluaygpO1xyXG4gICAgICBpZiAoamVua2luc1VybCkge1xyXG4gICAgICAgICRzY29wZS4kdmlld0plbmtpbnNCdWlsZExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oamVua2luc1VybCwgXCJqb2JcIiwgZ2V0Sm9iSWQoKSwgZ2V0QnVpbGRJZCgpKTtcclxuICAgICAgICAkc2NvcGUuJHZpZXdKZW5raW5zTG9nTGluayA9IFVybEhlbHBlcnMuam9pbigkc2NvcGUuJHZpZXdKZW5raW5zQnVpbGRMaW5rLCBcImNvbnNvbGVcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgcXVlcnlTaXplID0gNTAwMDA7XHJcblxyXG4gICAgJHNjb3BlLmFwcHJvdmUgPSAodXJsLCBvcGVyYXRpb24pID0+IHtcclxuICAgICAgdmFyIG1vZGFsID0gJG1vZGFsLm9wZW4oe1xyXG4gICAgICB0ZW1wbGF0ZVVybDogVXJsSGVscGVycy5qb2luKHRlbXBsYXRlUGF0aCwgJ2plbmtpbnNBcHByb3ZlTW9kYWwuaHRtbCcpLFxyXG4gICAgICBjb250cm9sbGVyOiBbJyRzY29wZScsICckbW9kYWxJbnN0YW5jZScsICgkc2NvcGUsICRtb2RhbEluc3RhbmNlKSA9PiB7XHJcbiAgICAgICAgJHNjb3BlLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcclxuICAgICAgICAkc2NvcGUuaGVhZGVyID0gb3BlcmF0aW9uICsgXCI/XCI7XHJcbiAgICAgICAgJHNjb3BlLm9rID0gKCkgPT4ge1xyXG4gICAgICAgICAgbW9kYWwuY2xvc2UoKTtcclxuICAgICAgICAgIHBvc3RUb0plbmtpbnModXJsLCBvcGVyYXRpb24pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgJHNjb3BlLmNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgIG1vZGFsLmRpc21pc3MoKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9XVxyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gcG9zdFRvSmVua2lucyh1cmksIG9wZXJhdGlvbikge1xyXG4gICAgICB2YXIgdXJsID0gIEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgdXJpKTtcclxuICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgIHZhciBib2R5ID0gbnVsbDtcclxuICAgICAgICB2YXIgY29uZmlnID0ge1xyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsb2cuaW5mbyhcInBvc3RpbmcgdG8gamVua2luc1VybDogXCIgKyB1cmwpO1xyXG4gICAgICAgICRodHRwLnBvc3QodXJsLCBib2R5LCBjb25maWcpLlxyXG4gICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgbG9nLmluZm8oXCJNYW5hZ2VkIHRvIFwiICsgb3BlcmF0aW9uICsgXCIgYXQgXCIgKyB1cmwpO1xyXG4gICAgICAgICAgfSkuXHJcbiAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCBcIiArIG9wZXJhdGlvbiArIFwiIGpvYiBhdCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsb2cud2FybihcIkNhbm5vdCBwb3N0IHRvIGplbmtpbnMgVVJJOiBcIiArIHVyaSArIFwiIGFzIG5vIGplbmtpbnMgZm91bmQhXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLiRrZWVwUG9sbGluZyA9ICgpID0+IEt1YmVybmV0ZXMua2VlcFBvbGxpbmdNb2RlbDtcclxuXHJcbiAgICAkc2NvcGUuZmV0Y2ggPSBQb2xsSGVscGVycy5zZXR1cFBvbGxpbmcoJHNjb3BlLCAobmV4dDooKSA9PiB2b2lkKSA9PiB7XHJcbiAgICAgIGlmICgkc2NvcGUuJGV2YWwoJ2hpZGVMb2dzICYmICFidWlsZC5idWlsZGluZycpKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiTG9nIGhpZGRlbiwgbm90IGZldGNoaW5nIGxvZ3NcIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhcIkZldGNoaW5nIGxvZ3MgZm9yIGJ1aWxkOiBcIiwgJHNjb3BlLiRldmFsKCdidWlsZCcpKTtcclxuICAgICAgfVxyXG4gICAgICB2YXIgYnVpbGRJZCA9IGdldEJ1aWxkSWQoKTtcclxuICAgICAgdmFyIGpvYklkID0gZ2V0Sm9iSWQoKTtcclxuICAgICAgLy9sb2cuaW5mbyhcIj09PSBqZW5raW5zIGxvZyBxdWVyeWluZyBqb2IgXCIgKyBqb2JJZCArIFwiIGJ1aWxkIFwiICsgYnVpbGRJZCArIFwiIHNlbGVjdGVkIGJ1aWxkIFwiICsgICRzY29wZS5zZWxlY3RlZEJ1aWxkKTtcclxuICAgICAgaWYgKGpvYklkICYmIGJ1aWxkSWQpIHtcclxuICAgICAgICBpZiAoJHNjb3BlLmJ1aWxkSWQgIT09IGJ1aWxkSWQgfHwgJHNjb3BlLmpvYklkICE9PSBqb2JJZCkge1xyXG4gICAgICAgICAgLy8gbGV0cyBjbGVhciB0aGUgcXVlcnlcclxuICAgICAgICAgICRzY29wZS5sb2cgPSB7XHJcbiAgICAgICAgICAgIGh0bWw6IFwiXCIsXHJcbiAgICAgICAgICAgIHN0YXJ0OiAwLFxyXG4gICAgICAgICAgICBmaXJzdElkeDogbnVsbFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJHNjb3BlLmJ1aWxkSWQgPSBidWlsZElkO1xyXG4gICAgICAgICRzY29wZS5qb2JJZCA9IGpvYklkO1xyXG5cclxuICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCBVcmxIZWxwZXJzLmpvaW4oXCJqb2JcIiwgam9iSWQsIGJ1aWxkSWQsIFwiZmFicmljOC9sb2dIdG1sP3RhaWw9MSZzdGFydD1cIiArICRzY29wZS5sb2cuc3RhcnQgKyBcIiZzaXplPVwiICsgcXVlcnlTaXplKSk7XHJcbiAgICAgICAgaWYgKCRzY29wZS5sb2cuZmlyc3RJZHggIT09IG51bGwpIHtcclxuICAgICAgICAgIHVybCArPSBcIiZmaXJzdD1cIiArICRzY29wZS5sb2cuZmlyc3RJZHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1cmwgJiYgKCEkc2NvcGUubG9nLmZldGNoZWQgfHwgS3ViZXJuZXRlcy5rZWVwUG9sbGluZ01vZGVsKSkge1xyXG4gICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXBsYWNlQ2x1c3RlcklQc0luSHRtbCA9IHJlcGxhY2VDbHVzdGVySXBGdW5jdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghJHNjb3BlLmxvZy5sb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cubG9ncyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGxpbmVzID0gZGF0YS5saW5lcztcclxuICAgICAgICAgICAgICAgIHZhciByZXR1cm5lZExlbmd0aCA9IGRhdGEucmV0dXJuZWRMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG9nTGVuZ3RoID0gZGF0YS5sb2dMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmV0dXJuZWRTdGFydCA9IGRhdGEuc3RhcnQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgZWFybGllckxvZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKHJldHVybmVkU3RhcnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGVhcmxpZXJMb2cgPSByZXR1cm5lZFN0YXJ0IDwgJHNjb3BlLmxvZy5zdGFydDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBsaW5lU3BsaXQgPSBkYXRhLmxpbmVTcGxpdDtcclxuICAgICAgICAgICAgICAgIC8vIGxvZy5pbmZvKFwic3RhcnQgd2FzOiBcIiArICRzY29wZS5sb2cuc3RhcnQgKyBcIiBmaXJzdDogXCIgKyAkc2NvcGUubG9nLmZpcnN0SWR4ICsgXCIgPT4gcmV0dXJuZWRMZW5ndGg6IFwiICsgcmV0dXJuZWRMZW5ndGggKyBcIiBsb2dMZW5ndGg6IFwiICsgbG9nTGVuZ3RoICsgIFwiIHJldHVybmVkU3RhcnQ6IFwiICsgcmV0dXJuZWRTdGFydCArIFwiIGVhcmxpZXJMb2c6IFwiICsgZWFybGllckxvZyArIFwiIGxpbmVTcGxpdDogXCIgKyBsaW5lU3BsaXQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxpbmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50TG9ncyA9ICRzY29wZS5sb2cubG9ncztcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIGxldHMgcmUtam9pbiBzcGxpdCBsaW5lc1xyXG4gICAgICAgICAgICAgICAgICBpZiAobGluZVNwbGl0ICYmIGN1cnJlbnRMb2dzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBsYXN0SW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3RPZkxpbmU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVhcmxpZXJMb2cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXN0T2ZMaW5lID0gbGluZXMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdE9mTGluZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TG9nc1tsYXN0SW5kZXhdID0gcmVwbGFjZUNsdXN0ZXJJUHNJbkh0bWwocmVzdE9mTGluZSArIGN1cnJlbnRMb2dzW2xhc3RJbmRleF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBjdXJyZW50TG9ncy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdE9mTGluZSA9IGxpbmVzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdE9mTGluZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TG9nc1tsYXN0SW5kZXhdID0gcmVwbGFjZUNsdXN0ZXJJUHNJbkh0bWwoY3VycmVudExvZ3NbbGFzdEluZGV4XSArIHJlc3RPZkxpbmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGluZXNbaV0gPSByZXBsYWNlQ2x1c3RlcklQc0luSHRtbChsaW5lc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKGVhcmxpZXJMb2cpIHtcclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUubG9nLmxvZ3MgPSBsaW5lcy5jb25jYXQoY3VycmVudExvZ3MpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cubG9ncyA9IGN1cnJlbnRMb2dzLmNvbmNhdChsaW5lcyk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBtb3ZlRm9yd2FyZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQocmV0dXJuZWRTdGFydCkpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHJldHVybmVkU3RhcnQgPiAkc2NvcGUubG9nLnN0YXJ0ICYmICRzY29wZS5sb2cuc3RhcnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSd2ZSBqdW1wZWQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSB0byByZWFkIHRoZSB0YWlsIG9mIGl0XHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5zdGFydCA9IHJldHVybmVkU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5maXJzdElkeCA9IHJldHVybmVkU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJHNjb3BlLmxvZy5maXJzdElkeCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGxldHMgcmVtZW1iZXIgd2hlcmUgdGhlIGZpcnN0IHJlcXVlc3Qgc3RhcnRlZFxyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cuZmlyc3RJZHggPSByZXR1cm5lZFN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHVybmVkU3RhcnQgPCAkc2NvcGUubG9nLmZpcnN0SWR4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UndmUgZ290IGFuIGVhcmxpZXIgYml0IG9mIHRoZSBsb2dcclxuICAgICAgICAgICAgICAgICAgICAvLyBhZnRlciBzdGFydGluZyBhdCB0aGUgdGFpbFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIGxldHMgbW92ZSBmaXJzdElkeCBiYWNrd2FyZHMgYW5kIGxlYXZlIHN0YXJ0IGFzIGl0IGlzIChhdCB0aGUgZW5kIG9mIHRoZSBmaWxlKVxyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cuZmlyc3RJZHggPSByZXR1cm5lZFN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgIG1vdmVGb3J3YXJkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChtb3ZlRm9yd2FyZCAmJiByZXR1cm5lZExlbmd0aCAmJiAhZWFybGllckxvZykge1xyXG4gICAgICAgICAgICAgICAgICAkc2NvcGUubG9nLnN0YXJ0ICs9IHJldHVybmVkTGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICBpZiAobG9nTGVuZ3RoICYmICRzY29wZS5sb2cuc3RhcnQgPiBsb2dMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUubG9nLnN0YXJ0ID0gbG9nTGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVKZW5raW5zTGluaygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAkc2NvcGUubG9nLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIC8vIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICAgICAgbmV4dCgpO1xyXG4gICAgICAgICAgICB9KS5cclxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICBuZXh0KCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJHNjb3BlLmxvZy5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgIG5leHQoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbigkc2NvcGUuZmV0Y2gpKSB7XHJcbiAgICAgICRzY29wZS5mZXRjaCgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiByZXBsYWNlQ2x1c3RlcklwRnVuY3Rpb24oKSB7XHJcbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZVJlcGxhY2VGdW5jdGlvbihmcm9tLCB0bykge1xyXG4gICAgICAgIHJldHVybiAodGV4dCkgPT4gcmVwbGFjZVRleHQodGV4dCwgZnJvbSwgdG8pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgcmVwbGFjZW1lbnRzID0gW107XHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUubW9kZWwuc2VydmljZXMsIChzZXJ2aWNlKSA9PiB7XHJcbiAgICAgICAgdmFyICRwb3J0YWxJUCA9IHNlcnZpY2UuJHBvcnRhbElQO1xyXG4gICAgICAgIHZhciAkc2VydmljZVVybCA9IHNlcnZpY2UuJHNlcnZpY2VVcmw7XHJcbiAgICAgICAgdmFyICRwb3J0c1RleHQgPSBzZXJ2aWNlLiRwb3J0c1RleHQ7XHJcbiAgICAgICAgaWYgKCRwb3J0YWxJUCAmJiAkc2VydmljZVVybCkge1xyXG4gICAgICAgICAgdmFyIGlkeCA9ICRzZXJ2aWNlVXJsLmluZGV4T2YoXCI6Ly9cIik7XHJcbiAgICAgICAgICBpZiAoaWR4ID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgcmVwbGFjZVdpdGggPSAkc2VydmljZVVybC5zdWJzdHJpbmcoaWR4LCAkc2VydmljZVVybC5sZW5ndGgpO1xyXG4gICAgICAgICAgICBpZiAoIXJlcGxhY2VXaXRoLmVuZHNXaXRoKFwiL1wiKSkge1xyXG4gICAgICAgICAgICAgIHJlcGxhY2VXaXRoICs9IFwiL1wiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXBsYWNlV2l0aC5sZW5ndGggPiA0KSB7XHJcbiAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2goY3JlYXRlUmVwbGFjZUZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIFwiOi8vXCIgKyAkcG9ydGFsSVAgKyBcIi9cIixcclxuICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aFxyXG4gICAgICAgICAgICAgICAgICAgICkpO1xyXG4gICAgICAgICAgICAgIGlmICgkcG9ydHNUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc3VmZml4ID0gXCI6XCIgKyAkcG9ydHNUZXh0O1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlcnZpY2VXaXRoUG9ydCA9IHJlcGxhY2VXaXRoLnN1YnN0cmluZygwLCByZXBsYWNlV2l0aC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIGlmICghc2VydmljZVdpdGhQb3J0LmVuZHNXaXRoKHN1ZmZpeCkpIHtcclxuICAgICAgICAgICAgICAgICAgc2VydmljZVdpdGhQb3J0ICs9IHN1ZmZpeDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNlcnZpY2VXaXRoUG9ydCArPSBcIi9cIjtcclxuICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5wdXNoKGNyZWF0ZVJlcGxhY2VGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgIFwiOi8vXCIgKyAkcG9ydGFsSVAgKyBcIjpcIiArICRwb3J0c1RleHQgKyBcIi9cIixcclxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VXaXRoUG9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIGFkZFJlcGxhY2VGbihmcm9tLCB0bykge1xyXG4gICAgICAgIHJlcGxhY2VtZW50cy5wdXNoKCh0ZXh0KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZVRleHQodGV4dCwgZnJvbSwgdG8pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfVxyXG4gICAgICBhZGRSZXBsYWNlRm4oXCJbSU5GT11cIiwgXCI8c3BhbiBjbGFzcz0nbG9nLXN1Y2Nlc3MnPltJTkZPXTwvc3Bhbj5cIik7XHJcbiAgICAgIGFkZFJlcGxhY2VGbihcIltXQVJOXVwiLCBcIjxzcGFuIGNsYXNzPSdsb2ctd2Fybic+W1dBUk5dPC9zcGFuPlwiKTtcclxuICAgICAgYWRkUmVwbGFjZUZuKFwiW1dBUk5JTkddXCIsIFwiPHNwYW4gY2xhc3M9J2xvZy13YXJuJz5bV0FSTklOR108L3NwYW4+XCIpO1xyXG4gICAgICBhZGRSZXBsYWNlRm4oXCJbRVJST1JdXCIsIFwiPHNwYW4gY2xhc3M9J2xvZy1lcnJvcic+W0VSUk9SXTwvc3Bhbj5cIik7XHJcbiAgICAgIGFkZFJlcGxhY2VGbihcIkZBSUxVUkVcIiwgXCI8c3BhbiBjbGFzcz0nbG9nLWVycm9yJz5GQUlMVVJFPC9zcGFuPlwiKTtcclxuICAgICAgYWRkUmVwbGFjZUZuKFwiU1VDQ0VTU1wiLCBcIjxzcGFuIGNsYXNzPSdsb2ctc3VjY2Vzcyc+U1VDQ0VTUzwvc3Bhbj5cIik7XHJcblxyXG4gICAgICAvLyBsZXRzIHRyeSBjb252ZXJ0IHRoZSBQcm9jZWVkIC8gQWJvcnQgbGlua3NcclxuICAgICAgcmVwbGFjZW1lbnRzLnB1c2goKHRleHQpID0+IHtcclxuICAgICAgICB2YXIgcHJlZml4ID0gXCI8YSBocmVmPScjJyBvbmNsaWNrPVxcXCJuZXcgQWpheC5SZXF1ZXN0KCdcIjtcclxuICAgICAgICB2YXIgaWR4ID0gMDtcclxuICAgICAgICB3aGlsZSAoaWR4ID49IDApIHtcclxuICAgICAgICAgIGlkeCA9IHRleHQuaW5kZXhPZihwcmVmaXgsIGlkeCk7XHJcbiAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gaWR4ICsgcHJlZml4Lmxlbmd0aDtcclxuICAgICAgICAgICAgdmFyIGVuZFF1b3RlID0gdGV4dC5pbmRleE9mKFwiJ1wiLCBzdGFydCArIDEpO1xyXG4gICAgICAgICAgICBpZiAoZW5kUXVvdGUgPD0gMCkge1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlbmREb3VibGVRdW90ZSA9IHRleHQuaW5kZXhPZignXCInLCBlbmRRdW90ZSArIDEpO1xyXG4gICAgICAgICAgICBpZiAoZW5kRG91YmxlUXVvdGUgPD0gMCkge1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB1cmwgPSB0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kUXVvdGUpO1xyXG4gICAgICAgICAgICAvLyBUT0RPIHVzaW5nICRjb21waWxlIGlzIGEgdGFkIGNvbXBsZXgsIGZvciBub3cgbGV0cyBjaGVhdCB3aXRoIGEgbGl0dGxlIG9uY2xpY2sgOylcclxuICAgICAgICAgICAgLy90ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgaWR4KSArIFwiPGEgY2xhc3M9J2J0biBidG4tZGVmYXVsdCBidG4tbGcnIG5nLWNsaWNrPVxcXCJhcHByb3ZlKCdcIiArIHVybCArIFwiJylcXFwiXCIgKyB0ZXh0LnN1YnN0cmluZyhlbmREb3VibGVRdW90ZSArIDEpO1xyXG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgaWR4KSArIFwiPGEgY2xhc3M9J2J0biBidG4tZGVmYXVsdCBidG4tbGcnIG9uY2xpY2s9XFxcIkRldmVsb3Blci5jbGlja0FwcHJvdmUodGhpcywgJ1wiICsgdXJsICsgXCInKVxcXCJcIiArIHRleHQuc3Vic3RyaW5nKGVuZERvdWJsZVF1b3RlICsgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZXh0O1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHRleHQpIHtcclxuICAgICAgICB2YXIgYW5zd2VyID0gdGV4dDtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2gocmVwbGFjZW1lbnRzLCAoZm4pID0+IHtcclxuICAgICAgICAgIGFuc3dlciA9IGZuKGFuc3dlcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlcGxhY2VUZXh0KHRleHQsIGZyb20sIHRvKSB7XHJcbiAgICAgIGlmIChmcm9tICYmIHRvICYmIHRleHQpIHtcclxuICAgICAgICAvL2xvZy5pbmZvKFwiUmVwbGFjaW5nICdcIiArIGZyb20gKyBcIicgPT4gJ1wiICsgdG8gKyBcIidcIik7XHJcbiAgICAgICAgdmFyIGlkeCA9IDA7XHJcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICAgIGlkeCA9IHRleHQuaW5kZXhPZihmcm9tLCBpZHgpO1xyXG4gICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBpZHgpICsgdG8gKyB0ZXh0LnN1YnN0cmluZyhpZHggKyBmcm9tLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGlkeCArPSB0by5sZW5ndGg7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRleHQ7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cclxuICBleHBvcnQgdmFyIEplbmtpbnNNZXRyaWNzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJKZW5raW5zTWV0cmljc0NvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiU2VydmljZVJlZ2lzdHJ5XCIsXHJcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBTZXJ2aWNlUmVnaXN0cnkpID0+IHtcclxuXHJcbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG4gICAgICAgICRzY29wZS5qb2JJZCA9ICRyb3V0ZVBhcmFtc1tcImpvYlwiXTtcclxuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcclxuICAgICAgICAkc2NvcGUuamVua2lucyA9IG51bGw7XHJcbiAgICAgICAgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSA9IHt9O1xyXG5cclxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcbiAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5pZCk7XHJcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUuaWQsICRzY29wZS5qb2JJZCk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLm9wdGlvbnMgPSB7XHJcbiAgICAgICAgICBjaGFydDoge1xyXG4gICAgICAgICAgICB0eXBlOiAnZGlzY3JldGVCYXJDaGFydCcsXHJcbiAgICAgICAgICAgIGF1dG9yZWZyZXNoOiBmYWxzZSxcclxuICAgICAgICAgICAgaGVpZ2h0OiA0NTAsXHJcbiAgICAgICAgICAgIG1hcmdpbjoge1xyXG4gICAgICAgICAgICAgIHRvcDogMjAsXHJcbiAgICAgICAgICAgICAgcmlnaHQ6IDIwLFxyXG4gICAgICAgICAgICAgIGJvdHRvbTogNjAsXHJcbiAgICAgICAgICAgICAgbGVmdDogNDVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2xpcEVkZ2U6IHRydWUsXHJcbiAgICAgICAgICAgIHN0YWdnZXJMYWJlbHM6IGZhbHNlLFxyXG4gICAgICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb246IDUwMCxcclxuICAgICAgICAgICAgc3RhY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxyXG4gICAgICAgICAgICB0b29sdGlwOiB7XHJcbiAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICBjb250ZW50R2VuZXJhdG9yOiAoYXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBhcmdzLmRhdGEgfHwge307XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS50b29sdGlwO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbG9yOiAoZCwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkLmNvbG9yO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB4QXhpczoge1xyXG4gICAgICAgICAgICAgIGF4aXNMYWJlbDogJ0J1aWxkcycsXHJcbiAgICAgICAgICAgICAgc2hvd01heE1pbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgdGlja0Zvcm1hdDogZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIiNcIiArIGQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB5QXhpczoge1xyXG4gICAgICAgICAgICAgIGF4aXNMYWJlbDogJ0J1aWxkIER1cmF0aW9uIChzZWNvbmRzKScsXHJcbiAgICAgICAgICAgICAgdGlja0Zvcm1hdDogZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkMy5mb3JtYXQoJywuMWYnKShkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAkc2NvcGUuZGF0YSA9IFtdO1xyXG5cclxuICAgICAgICB1cGRhdGVEYXRhKCk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGJhckNvbG91ckZvckJ1aWxkUmVzdWx0KHJlc3VsdCkge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBcIkZBSUxVUkVcIiB8fCByZXN1bHQgPT09IFwiRkFJTEVEXCIpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXCJyZWRcIjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiQUJPUlRFRFwiIHx8IHJlc3VsdCA9PT0gXCJJTlRFUlVQVEVEXCIpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXCJ0YW5cIjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFwiZ3JlZW5cIjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiTk9UX1NUQVJURURcIikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBcImxpZ2h0Z3JleVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBcImRhcmtncmV5XCI7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlQ2hhcnREYXRhKCkge1xyXG4gICAgICAgICAgdmFyIHVzZVNpbmdsZVNldCA9IHRydWU7XHJcbiAgICAgICAgICB2YXIgYnVpbGRzU3VjY2VlZGVkID0gW107XHJcbiAgICAgICAgICB2YXIgYnVpbGRzRmFpbGVkID0gW107XHJcbiAgICAgICAgICB2YXIgc3VjY2Vzc0J1aWxkS2V5ID0gXCJTdWNjZWVkZWQgYnVpbGRzXCI7XHJcbiAgICAgICAgICB2YXIgZmFpbGVkQnVpbGRLZXkgPSBcIkZhaWxlZCBidWlsZHNcIjtcclxuXHJcbiAgICAgICAgICBpZiAodXNlU2luZ2xlU2V0KSB7XHJcbiAgICAgICAgICAgIHN1Y2Nlc3NCdWlsZEtleSA9IFwiQnVpbGRzXCI7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdmFyIGNvdW50ID0gMDtcclxuICAgICAgICAgIHZhciBidWlsZHMgPSBfLnNvcnRCeSgkc2NvcGUubWV0cmljcy5idWlsZHMgfHwgW10sIFwibnVtYmVyXCIpO1xyXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGJ1aWxkcywgKGJ1aWxkOmFueSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgeCA9IGJ1aWxkLm51bWJlcjtcclxuICAgICAgICAgICAgdmFyIHkgPSBidWlsZC5kdXJhdGlvbiAvIDEwMDA7XHJcbiAgICAgICAgICAgIHZhciBkYXRlID0gRGV2ZWxvcGVyLmFzRGF0ZShidWlsZC50aW1lSW5NaWxsaXMpO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYnVpbGQucmVzdWx0IHx8IFwiTk9UX1NUQVJURURcIjtcclxuICAgICAgICAgICAgdmFyIGNvbG9yID0gYmFyQ29sb3VyRm9yQnVpbGRSZXN1bHQocmVzdWx0KTtcclxuICAgICAgICAgICAgdmFyIGljb25DbGFzcyA9IGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHZhciB0b29sdGlwID0gJzxoMz48aSBjbGFzcz1cIicgKyBpY29uQ2xhc3MgKyAnXCI+PC9pPiAnICsgYnVpbGQuZGlzcGxheU5hbWUgKyAnPC9oMz4nICtcclxuICAgICAgICAgICAgICAnPHA+ZHVyYXRpb246IDxiPicgKyB5ICsgJzwvYj4gc2Vjb25kczwvcD4nO1xyXG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xyXG4gICAgICAgICAgICAgIHRvb2x0aXAgKz0gJzxwPnN0YXJ0ZWQ6IDxiPicgKyBkYXRlICsgJzwvYj48L3A+JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgdG9vbHRpcCArPSAnPHA+cmVzdWx0OiA8Yj4nICsgcmVzdWx0ICsgJzwvYj48L3A+JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHgpIHtcclxuICAgICAgICAgICAgICB2YXIgZGF0YSA9IGJ1aWxkc1N1Y2NlZWRlZDtcclxuICAgICAgICAgICAgICB2YXIga2V5ID0gc3VjY2Vzc0J1aWxkS2V5O1xyXG4gICAgICAgICAgICAgIGlmICghc3VjY2Vzc0J1aWxkS2V5ICYmICghcmVzdWx0IHx8ICFyZXN1bHQuc3RhcnRzV2l0aChcIlNVQ0NcIikpKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0gYnVpbGRzRmFpbGVkO1xyXG4gICAgICAgICAgICAgICAga2V5ID0gZmFpbGVkQnVpbGRLZXk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGRhdGEucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0b29sdGlwOiB0b29sdGlwLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IGNvbG9yLFxyXG4gICAgICAgICAgICAgICAgeDogeCwgeTogeX0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgICRzY29wZS5kYXRhID0gW107XHJcbiAgICAgICAgICBpZiAoYnVpbGRzU3VjY2VlZGVkLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAkc2NvcGUuZGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgICBrZXk6IHN1Y2Nlc3NCdWlsZEtleSxcclxuICAgICAgICAgICAgICB2YWx1ZXM6IGJ1aWxkc1N1Y2NlZWRlZFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChidWlsZHNGYWlsZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICRzY29wZS5kYXRhLnB1c2goe1xyXG4gICAgICAgICAgICAgIGtleTogZmFpbGVkQnVpbGRLZXksXHJcbiAgICAgICAgICAgICAgdmFsdWVzOiBidWlsZHNGYWlsZWRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAkc2NvcGUuYXBpLnVwZGF0ZVdpdGhEYXRhKCRzY29wZS5kYXRhKTtcclxuXHJcbiAgICAgICAgICAkdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICRzY29wZS5hcGkudXBkYXRlKCk7XHJcbiAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICAgICAgdmFyIG1ldHJpY3NQYXRoID0gJHNjb3BlLmpvYklkID8gVXJsSGVscGVycy5qb2luKFwiam9iXCIsICRzY29wZS5qb2JJZCwgXCJmYWJyaWM4L21ldHJpY3NcIikgOiBcImZhYnJpYzgvbWV0cmljc1wiO1xyXG4gICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgbWV0cmljc1BhdGgpO1xyXG4gICAgICAgICAgbG9nLmluZm8oXCJcIik7XHJcbiAgICAgICAgICBpZiAodXJsICYmICghJHNjb3BlLmplbmtpbnMgfHwgS3ViZXJuZXRlcy5rZWVwUG9sbGluZ01vZGVsKSkge1xyXG4gICAgICAgICAgICAkaHR0cC5nZXQodXJsLCBqZW5raW5zSHR0cENvbmZpZykuXHJcbiAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKGRhdGEsICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oXCJlbnRpdHkgaGFzIGNoYW5nZWQhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5tZXRyaWNzID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVDaGFydERhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIGV4cG9ydCB2YXIgTmF2QmFyQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJOYXZCYXJDb250cm9sbGVyXCIsXHJcbiAgICBbXCIkc2NvcGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICAgKCRzY29wZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJHRpbWVvdXQpID0+IHtcclxuXHJcbiAgICAgICAgJHNjb3BlLmlzVmFsaWQgPSAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlbS5pc1ZhbGlkO1xyXG4gICAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZShpdGVtKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBhbmd1bGFyLmlzVW5kZWZpbmVkKHZhbHVlKSB8fCB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cclxuICBleHBvcnQgdmFyIFBpcGVsaW5lQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJQaXBlbGluZUNvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiU2VydmljZVJlZ2lzdHJ5XCIsXHJcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBTZXJ2aWNlUmVnaXN0cnkpID0+IHtcclxuXHJcbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICAgJHNjb3BlLmt1YmVNb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuICAgICAgICAkc2NvcGUuam9iSWQgPSAkcm91dGVQYXJhbXNbXCJqb2JcIl07XHJcbiAgICAgICAgJHNjb3BlLmJ1aWxkSWQgPSAkcm91dGVQYXJhbXNbXCJidWlsZFwiXTtcclxuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcclxuICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XHJcblxyXG4gICAgICAgICRzY29wZS5tb2RlbCA9IHtcclxuICAgICAgICAgIHN0YWdlczogbnVsbFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuaWQpO1xyXG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcclxuICAgICAgICAgIGlmICgkc2NvcGUuam9iSWQpIHtcclxuICAgICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgVXJsSGVscGVycy5qb2luKFwiam9iXCIsICRzY29wZS5qb2JJZCwgJHNjb3BlLmJ1aWxkSWQsIFwiZmFicmljOC9zdGFnZXMvXCIpKTtcclxuICAgICAgICAgICAgaWYgKHVybCAmJiAoISRzY29wZS5tb2RlbC5zdGFnZXMgfHwgS3ViZXJuZXRlcy5rZWVwUG9sbGluZ01vZGVsKSkge1xyXG4gICAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxyXG4gICAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnJpY2hKZW5raW5zU3RhZ2VzKGRhdGEsICRzY29wZS5pZCwgJHNjb3BlLmpvYklkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT2JqZWN0Q2hhbmdlZChkYXRhLCAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oXCJlbnRpdHkgaGFzIGNoYW5nZWQhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmJ1aWxkID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5zdGFnZXMgPSBkYXRhLnN0YWdlcztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XHJcblxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuICBfbW9kdWxlLmRpcmVjdGl2ZShcInBpcGVsaW5lVmlld1wiLCAoKSA9PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0ZW1wbGF0ZVVybDogdGVtcGxhdGVQYXRoICsgJ3BpcGVsaW5lVmlldy5odG1sJ1xyXG4gICAgfTtcclxuICB9KTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyUGx1Z2luLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XHJcblxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuXHJcbiAgZXhwb3J0IHZhciBQaXBlbGluZXNDb250cm9sbGVyID0gX21vZHVsZS5jb250cm9sbGVyKFwiRGV2ZWxvcGVyLlBpcGVsaW5lc0NvbnRyb2xsZXJcIiwgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBTZXJ2aWNlUmVnaXN0cnksICRlbGVtZW50KSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAkc2NvcGUua3ViZU1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcbiAgICAkc2NvcGUuam9iSWQgPSAkc2NvcGUuam9iSWQgfHwgJHJvdXRlUGFyYW1zW1wiam9iXCJdO1xyXG4gICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XHJcbiAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XHJcblxyXG4gICAgJGVsZW1lbnQub24oJyRkZXN0cm95JywgKCkgPT4ge1xyXG4gICAgICAkc2NvcGUuJGRlc3Ryb3koKTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS5tb2RlbCA9IHtcclxuICAgICAgam9iOiBudWxsLFxyXG4gICAgICBwZW5kaW5nT25seTogJHNjb3BlLnBlbmRpbmdQaXBlbGluZXNPbmx5XHJcbiAgICB9O1xyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5pZCk7XHJcbiAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5pZCwgJHNjb3BlLmpvYklkKTtcclxuXHJcbiAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLnBlbmRpbmdPbmx5JywgKCRldmVudCkgPT4ge1xyXG4gICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkc2NvcGUuc2VsZWN0QnVpbGQgPSAoYnVpbGQpID0+IHtcclxuICAgICAgdmFyIGlkID0gYnVpbGQuaWQ7XHJcbiAgICAgIGlmIChpZCkge1xyXG4gICAgICAgIGlmIChpZCAhPT0gJHNjb3BlLnNlbGVjdGVkQnVpbGRJZCkge1xyXG4gICAgICAgICAgJHNjb3BlLnNlbGVjdGVkQnVpbGRJZCA9IGlkO1xyXG4gICAgICAgICAgJHNjb3BlLiRicm9hZGNhc3QoXCJqZW5raW5zU2VsZWN0ZWRCdWlsZFwiLCBidWlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciB1cGRhdGVEYXRhID0gXy5kZWJvdW5jZSgoKSA9PiB7XHJcbiAgICAgIHZhciBlbnRpdHkgPSAkc2NvcGUuZW50aXR5O1xyXG4gICAgICBpZiAoJHNjb3BlLmpvYklkKSB7XHJcbiAgICAgICAgaWYgKCghZW50aXR5IHx8IGVudGl0eS4kamVua2luc0pvYikpIHtcclxuICAgICAgICAgIHZhciBxdWVyeVBhdGggPSBcImZhYnJpYzgvc3RhZ2VzL1wiO1xyXG4gICAgICAgICAgaWYgKCRzY29wZS5tb2RlbC5wZW5kaW5nT25seSkge1xyXG4gICAgICAgICAgICBxdWVyeVBhdGggPSBcImZhYnJpYzgvcGVuZGluZ1N0YWdlcy9cIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhciB1cmwgPSBLdWJlcm5ldGVzLmt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2VDdXJyZW50TmFtZXNwYWNlKGplbmtpbnNTZXJ2aWNlTmFtZUFuZFBvcnQsIFVybEhlbHBlcnMuam9pbihcImpvYlwiLCAkc2NvcGUuam9iSWQsIHF1ZXJ5UGF0aCkpO1xyXG4gICAgICAgICAgaWYgKHVybCAmJiAoISRzY29wZS5tb2RlbC5qb2IgfHwgS3ViZXJuZXRlcy5rZWVwUG9sbGluZ01vZGVsKSkge1xyXG4gICAgICAgICAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgZW5yaWNoSmVua2luc1BpcGVsaW5lSm9iKGRhdGEsICRzY29wZS5pZCwgJHNjb3BlLmpvYklkKTtcclxuICAgICAgICAgICAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKGRhdGEsICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKFwiZW50aXR5IGhhcyBjaGFuZ2VkIVwiKTtcclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmpvYiA9IGRhdGE7XHJcblxyXG4gICAgICAgICAgICAgICAgICB2YXIgYnVpbGRzID0gZGF0YS5idWlsZHM7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChidWlsZHMgJiYgYnVpbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5zZWxlY3RCdWlsZChidWlsZHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoJHNjb3BlLm1vZGVsKSB7XHJcbiAgICAgICAgICAgIEt1YmVybmV0ZXMuZW5yaWNoQnVpbGRzKCRzY29wZS5rdWJlTW9kZWwuYnVpbGRzKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBidWlsZHMgPSBbXTtcclxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5rdWJlTW9kZWwuYnVpbGRzLCAoYnVpbGQpID0+IHtcclxuICAgICAgICAgICAgICB2YXIgbGFiZWxzID0gS3ViZXJuZXRlcy5nZXRMYWJlbHMoYnVpbGQpO1xyXG4gICAgICAgICAgICAgIHZhciBhcHAgPSBsYWJlbHNbXCJhcHBcIl07XHJcbiAgICAgICAgICAgICAgaWYgKGFwcCA9PT0gJHNjb3BlLnByb2plY3RJZCkge1xyXG4gICAgICAgICAgICAgICAgYnVpbGRzLnB1c2goYnVpbGQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGJ1aWxkcyA9IF8uc29ydEJ5KGJ1aWxkcywgXCIkY3JlYXRpb25EYXRlXCIpLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgdmFyIGFsbEJ1aWxkcyA9IGJ1aWxkcztcclxuICAgICAgICAgICAgaWYgKGFsbEJ1aWxkcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgYnVpbGRzID0gXy5maWx0ZXIoYWxsQnVpbGRzLCAoYikgPT4gIWIuJGNyZWF0aW9uRGF0ZSk7XHJcbiAgICAgICAgICAgICAgaWYgKCFidWlsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBidWlsZHMgPSBbYWxsQnVpbGRzWzBdXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHBpcGVsaW5lcyA9IFtdO1xyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goYnVpbGRzLCAoYnVpbGQpID0+IHtcclxuICAgICAgICAgICAgICB2YXIgYnVpbGRTdGF0dXMgPSBidWlsZC5zdGF0dXMgfHwge307XHJcbiAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJ1aWxkU3RhdHVzLnBoYXNlIHx8IFwiXCI7XHJcbiAgICAgICAgICAgICAgdmFyIHJlc3VsdFVwcGVyQ2FzZSA9IHJlc3VsdC50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICAgICAgICAgIHZhciAkdmlld0xpbmsgPSBidWlsZC4kdmlld0xpbms7XHJcbiAgICAgICAgICAgICAgdmFyICRsb2dMaW5rID0gYnVpbGQuJGxvZ3NMaW5rO1xyXG4gICAgICAgICAgICAgIHZhciAkdGltZXN0YW1wID0gYnVpbGQuJGNyZWF0aW9uRGF0ZTtcclxuICAgICAgICAgICAgICB2YXIgZHVyYXRpb24gPSBidWlsZFN0YXR1cy5kdXJhdGlvbjtcclxuICAgICAgICAgICAgICBpZiAoZHVyYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIC8vIDE3cyA9IDE3LDAwMCwwMDAsMDAwIG9uIG9wZW5zaGlmdFxyXG4gICAgICAgICAgICAgICAgZHVyYXRpb24gPSBkdXJhdGlvbiAvIDEwMDAwMDA7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHZhciBkaXNwbGF5TmFtZSA9IEt1YmVybmV0ZXMuZ2V0TmFtZShidWlsZCk7XHJcbiAgICAgICAgICAgICAgdmFyICRpY29uQ2xhc3MgPSBjcmVhdGVCdWlsZFN0YXR1c0ljb25DbGFzcyhyZXN1bHRVcHBlckNhc2UpO1xyXG4gICAgICAgICAgICAgIHZhciAkYmFja2dyb3VuZENsYXNzID0gY3JlYXRlQnVpbGRTdGF0dXNCYWNrZ3JvdW5kQ2xhc3MocmVzdWx0VXBwZXJDYXNlKTtcclxuICAgICAgICAgICAgICB2YXIgc3RhZ2UgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGFnZU5hbWU6IFwiT3BlblNoaWZ0IEJ1aWxkXCIsXHJcbiAgICAgICAgICAgICAgICAkdmlld0xpbms6ICR2aWV3TGluayxcclxuICAgICAgICAgICAgICAgICRsb2dMaW5rOiAkbG9nTGluayxcclxuICAgICAgICAgICAgICAgICRzdGFydFRpbWU6ICR0aW1lc3RhbXAsXHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3VsdCxcclxuICAgICAgICAgICAgICAgICRpY29uQ2xhc3M6ICRpY29uQ2xhc3MsXHJcbiAgICAgICAgICAgICAgICAkYmFja2dyb3VuZENsYXNzOiAkYmFja2dyb3VuZENsYXNzXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB2YXIgcGlwZWxpbmUgPSB7XHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogZGlzcGxheU5hbWUsXHJcbiAgICAgICAgICAgICAgICAkdmlld0xpbms6ICR2aWV3TGluayxcclxuICAgICAgICAgICAgICAgICRsb2dMaW5rOiAkbG9nTGluayxcclxuICAgICAgICAgICAgICAgICR0aW1lc3RhbXA6ICR0aW1lc3RhbXAsXHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICBzdGFnZXM6IFtzdGFnZV1cclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHBpcGVsaW5lcy5wdXNoKHBpcGVsaW5lKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBsZXRzIGZpbHRlciB0aGUgT3BlblNoaWZ0IGJ1aWxkcyBhbmQgbWFrZSBhIHBpcGVsaW5lIGZyb20gdGhhdFxyXG4gICAgICAgICAgICAkc2NvcGUubW9kZWwuam9iID0ge1xyXG4gICAgICAgICAgICAgICRqb2JJZDogJHNjb3BlLmpvYklkLFxyXG4gICAgICAgICAgICAgICRwcm9qZWN0OiAkc2NvcGUucHJvamVjdElkLFxyXG4gICAgICAgICAgICAgIGJ1aWxkczogcGlwZWxpbmVzXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgfVxyXG4gICAgfSwgNTApO1xyXG5cclxuICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcbiAgfSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIGV4cG9ydCB2YXIgUHJvamVjdENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUHJvamVjdENvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICAgKCRzY29wZSwgJGVsZW1lbnQsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuXHJcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XHJcbiAgICAgICAgJHNjb3BlLmNvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMub3NfYnVpbGRfQnVpbGRDb25maWc7XHJcbiAgICAgICAgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSA9IHt9O1xyXG4gICAgICAgICRzY29wZS5lbnZWZXJzaW9uc0NhY2hlID0ge307XHJcbiAgICAgICAgJHNjb3BlLmVudk5TQ2FjaGVzID0ge307XHJcbiAgICAgICAgJHNjb3BlLmVudlZlcnNpb25zID0ge307XHJcblxyXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuICAgICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IFtdOyAvL0RldmVsb3Blci5jcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoJHNjb3BlLmlkKTtcclxuICAgICAgICB1cGRhdGVUYWJzKCk7XHJcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGZvciB0aGUgcGVuZGluZ1BpcGVsaW5lcyB2aWV3XHJcbiAgICAgICAgJHNjb3BlLmpvYklkID0gJHNjb3BlLmlkO1xyXG4gICAgICAgICRzY29wZS5wZW5kaW5nUGlwZWxpbmVzT25seSA9IHRydWU7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJ2plbmtpbnNTZWxlY3RlZEJ1aWxkJywgKGV2ZW50LCBidWlsZCkgPT4ge1xyXG4gICAgICAgICAgJHNjb3BlLnNlbGVjdGVkQnVpbGQgPSBidWlsZDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyB0aGlzIHNob3VsZCBiZSB1bm5lY2Vzc2FyeSBidXQgc2VlbXMgc29tZXRpZW1zIHRoaXMgd2F0Y2ggZG9lc24ndCBhbHdheXMgdHJpZ2dlciB1bmxlc3MgeW91IGhpdCByZWxvYWQgb24gdGhpcyBwYWdlXHJcbiAgICAgICAgaWYgKCRzY29wZS5tb2RlbC5idWlsZGNvbmZpZ3MpIHtcclxuICAgICAgICAgIG9uQnVpbGRDb25maWdzKCRzY29wZS5tb2RlbC5idWlsZGNvbmZpZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBLdWJlcm5ldGVzLndhdGNoKCRzY29wZSwgJGVsZW1lbnQsIFwiYnVpbGRjb25maWdzXCIsICRzY29wZS5uYW1lc3BhY2UsIG9uQnVpbGRDb25maWdzKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gb25CdWlsZENvbmZpZ3MoYnVpbGRDb25maWdzKSB7XHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goYnVpbGRDb25maWdzLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IEt1YmVybmV0ZXMuZ2V0TmFtZShkYXRhKTtcclxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICRzY29wZS5pZCkge1xyXG4gICAgICAgICAgICAgIHZhciBzb3J0ZWRCdWlsZHMgPSBudWxsO1xyXG4gICAgICAgICAgICAgIEt1YmVybmV0ZXMuZW5yaWNoQnVpbGRDb25maWcoZGF0YSwgc29ydGVkQnVpbGRzKTtcclxuICAgICAgICAgICAgICBpZiAoaGFzT2JqZWN0Q2hhbmdlZChkYXRhLCAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlKSkge1xyXG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJlbnRpdHkgaGFzIGNoYW5nZWQhXCIpO1xyXG4gICAgICAgICAgICAgICAgJHNjb3BlLmVudGl0eSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5LiRidWlsZCA9IChkYXRhLiRmYWJyaWM4Q29kZVZpZXdzIHx8IHt9KVsnZmFicmljOC5saW5rLmJyb3dzZUdvZ3MudmlldyddO1xyXG4gICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNldFByb2plY3QoJHNjb3BlLmVudGl0eSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHVwZGF0ZUVudmlyb25tZW50V2F0Y2goKTtcclxuICAgICAgICAgICAgICB1cGRhdGVUYWJzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXZSBoYXZlIHVwZGF0ZWQgdGhlIGVudGl0eSBzbyBsZXRzIG1ha2Ugc3VyZSB3ZSBhcmUgd2F0Y2hpbmcgYWxsIHRoZSBlbnZpcm9ubWVudHMgdG8gZmluZFxyXG4gICAgICAgICAqIHRoZSBwcm9qZWN0IHZlcnNpb25zIGZvciBlYWNoIG5hbWVzcGFjZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZUVudmlyb25tZW50V2F0Y2goKSB7XHJcbiAgICAgICAgICB2YXIgcHJvamVjdCA9ICRzY29wZS5lbnRpdHk7XHJcbiAgICAgICAgICBpZiAocHJvamVjdCkge1xyXG4gICAgICAgICAgICB2YXIgamVua2luc0pvYiA9IHByb2plY3QuJGplbmtpbnNKb2I7XHJcbiAgICAgICAgICAgIGlmIChqZW5raW5zSm9iKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGJ1aWxkc1RhYiA9IF8uZmluZCgkc2NvcGUuc3ViVGFiQ29uZmlnLCB7aWQ6IFwiYnVpbGRzXCJ9KTtcclxuICAgICAgICAgICAgICBpZiAoYnVpbGRzVGFiKSB7XHJcbiAgICAgICAgICAgICAgICBidWlsZHNUYWJbXCJocmVmXCJdID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpLCBcInByb2plY3RzXCIsICRzY29wZS5pZCwgXCJqZW5raW5zSm9iXCIsIGplbmtpbnNKb2IpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHByb2plY3QuZW52aXJvbm1lbnRzLCAoZW52KSA9PiB7XHJcbiAgICAgICAgICAgICAgdmFyIG5zID0gZW52Lm5hbWVzcGFjZTtcclxuICAgICAgICAgICAgICB2YXIgY2FjaGVzID0gJHNjb3BlLmVudk5TQ2FjaGVzW25zXTtcclxuICAgICAgICAgICAgICBpZiAoIWNhY2hlcykge1xyXG4gICAgICAgICAgICAgICAgY2FjaGVzID0ge307XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUuZW52TlNDYWNoZXNbbnNdID0gY2FjaGVzO1xyXG4gICAgICAgICAgICAgICAgbG9hZFByb2plY3RWZXJzaW9ucygkc2NvcGUsICRlbGVtZW50LCBwcm9qZWN0LCBlbnYsIG5zLCAkc2NvcGUuZW52VmVyc2lvbnMsIGNhY2hlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVRhYnMoKSB7XHJcbiAgICAgICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5pZCwgbnVsbCwgJHNjb3BlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlclBsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cclxuICBfbW9kdWxlLmNvbnRyb2xsZXIoJ0RldmVsb3Blci5Qcm9qZWN0U2VsZWN0b3InLCBbJyRzY29wZScsICckcm91dGVQYXJhbXMnLCAnS3ViZXJuZXRlc01vZGVsJywgKCRzY29wZSwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwpID0+IHtcclxuICAgIHZhciBwcm9qZWN0SWQgPSAkcm91dGVQYXJhbXNbJ3Byb2plY3RJZCddIHx8ICRyb3V0ZVBhcmFtc1sncHJvamVjdCddIHx8ICRyb3V0ZVBhcmFtc1snaWQnXTtcclxuICAgIGlmIChwcm9qZWN0SWQpIHtcclxuICAgICAgJHNjb3BlLnByb2plY3RJZCA9IHByb2plY3RJZDtcclxuICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsXHJcbiAgICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLmJ1aWxkY29uZmlncycsIChidWlsZGNvbmZpZ3MpID0+IHtcclxuICAgICAgICAkc2NvcGUucHJvamVjdHMgPSBidWlsZGNvbmZpZ3M7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbG9nLmluZm8oXCJubyBwcm9qZWN0IElEIGluIHJvdXRlUGFyYW1zOiBcIiwgJHJvdXRlUGFyYW1zKTtcclxuICAgIH1cclxuICB9XSk7XHJcblxyXG59XHJcblxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XHJcblxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuXHJcbiAgZXhwb3J0IHZhciBQcm9qZWN0c0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUHJvamVjdHNDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiRkaWFsb2dcIiwgXCIkd2luZG93XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCAkZGlhbG9nLCAkd2luZG93LCAkdGVtcGxhdGVDYWNoZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgbG9jYWxTdG9yYWdlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcblxyXG4gICAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XHJcbiAgICAgICAgZGF0YTogJ21vZGVsLmJ1aWxkY29uZmlncycsXHJcbiAgICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcclxuICAgICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcclxuICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcclxuICAgICAgICBmaWx0ZXJPcHRpb25zOiB7XHJcbiAgICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb2x1bW5EZWZzOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnJG5hbWUnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxyXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImlkVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgfSxcclxuLypcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLnNvdXJjZS50eXBlJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTb3VyY2UnXHJcbiAgICAgICAgICB9LFxyXG4qL1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc291cmNlLmdpdC51cmknLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1JlcG9zaXRvcnknXHJcbiAgICAgICAgICB9LFxyXG4vKlxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc3RyYXRlZ3kudHlwZScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU3RyYXRlZ3knXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc3RyYXRlZ3kuc3RpU3RyYXRlZ3kuaW1hZ2UnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NvdXJjZSBJbWFnZSdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5vdXRwdXQuaW1hZ2VUYWcnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ091dHB1dCBJbWFnZSdcclxuICAgICAgICAgIH0sXHJcbiovXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnbWV0YWRhdGEuZGVzY3JpcHRpb24nLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0Rlc2NyaXB0aW9uJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICckY3JlYXRpb25EYXRlJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdDcmVhdGVkJyxcclxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJjcmVhdGlvblRpbWVUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJyRsYWJlbHNUZXh0JyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdMYWJlbHMnLFxyXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImxhYmVsVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuXHJcbiAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCk7XHJcbiAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlV29ya3NwYWNlU3ViTmF2QmFycygpO1xyXG5cclxuICAgICAgLy8gVE9ET1xyXG4gICAgICAvLyRzY29wZS5pc0xvZ2dlZEludG9Hb2dzID0gRm9yZ2UuaXNMb2dnZWRJbnRvR29ncztcclxuXHJcbiAgICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcclxuICAgICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XHJcbiAgICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcclxuICAgICAgICAgIGluZGV4OiAnJG5hbWUnLFxyXG4gICAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgbmV4dCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlRW50aXR5KG5leHQsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICAgICAgICAvLyB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0aXRsZTogJ0RlbGV0ZSBBcHBzJyxcclxuICAgICAgICAgIGFjdGlvbjogJ1RoZSBmb2xsb3dpbmcgQXBwcyB3aWxsIGJlIGRlbGV0ZWQ6JyxcclxuICAgICAgICAgIG9rVGV4dDogJ0RlbGV0ZScsXHJcbiAgICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXHJcbiAgICAgICAgICBjdXN0b206IFwiVGhpcyBvcGVyYXRpb24gaXMgcGVybWFuZW50IG9uY2UgY29tcGxldGVkIVwiLFxyXG4gICAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXHJcbiAgICAgICAgfSkub3BlbigpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgZnVuY3Rpb24gZGVsZXRlRW50aXR5KHNlbGVjdGlvbiwgbmV4dENhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIG5hbWUgPSAoc2VsZWN0aW9uIHx8IHt9KS4kbmFtZTtcclxuICAgICAgICB2YXIgamVua2luc0pvYiA9IHNlbGVjdGlvbi4kamVua2luc0pvYjtcclxuICAgICAgICB2YXIgcHVibGljSmVua2luc1VybCA9IGplbmtpbnNMaW5rKCk7XHJcbiAgICAgICAgLy92YXIgamVua2luc1VybCA9IENvcmUucGF0aEdldChzZWxlY3Rpb24sIFtcIiRmYWJyaWM4Vmlld3NcIiwgXCJmYWJyaWM4LmxpbmsuamVua2lucy5qb2JcIiwgXCJ1cmxcIl0pO1xyXG4gICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkFib3V0IHRvIGRlbGV0ZSBidWlsZCBjb25maWc6IFwiICsgbmFtZSk7XHJcbiAgICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5idWlsZENvbmZpZ1Jlc3RVcmwobmFtZSk7XHJcbiAgICAgICAgICAkaHR0cC5kZWxldGUodXJsKS5cclxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICBuZXh0Q2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGRlbGV0ZSBidWlsZCBjb25maWcgb24gXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgbmV4dENhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIndhcm5pbmc6IG5vIG5hbWUgZm9yIHNlbGVjdGlvbjogXCIgKyBhbmd1bGFyLnRvSnNvbihzZWxlY3Rpb24pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChqZW5raW5zSm9iICYmIHB1YmxpY0plbmtpbnNVcmwpIHtcclxuICAgICAgICAgIHZhciB1cmwgPSBLdWJlcm5ldGVzLmt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2VDdXJyZW50TmFtZXNwYWNlKGplbmtpbnNTZXJ2aWNlTmFtZUFuZFBvcnQsIFVybEhlbHBlcnMuam9pbihcImpvYlwiLCBqZW5raW5zSm9iLCBcImRvRGVsZXRlXCIpKTtcclxuICAgICAgICAgIHZhciBib2R5ID0gXCJcIjtcclxuICAgICAgICAgIHZhciBjb25maWcgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogXCJ0ZXh0L3BsYWluXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGxvZy5pbmZvKFwicG9zdGluZyB0byBqZW5raW5zVXJsOiBcIiArIHVybCk7XHJcbiAgICAgICAgICAkaHR0cC5wb3N0KHVybCwgYm9keSwgY29uZmlnKS5cclxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICBsb2cuaW5mbyhcIk1hbmFnZWQgdG8gZGVsZXRlIFwiICsgdXJsKTtcclxuICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGRlbGV0ZSBqZW5raW5zIGpvYiBhdCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4vKlxyXG4gICAgICAkc2NvcGUuJGtlZXBQb2xsaW5nID0gKCkgPT4gS3ViZXJuZXRlcy5rZWVwUG9sbGluZ01vZGVsO1xyXG4gICAgICAkc2NvcGUuZmV0Y2ggPSBQb2xsSGVscGVycy5zZXR1cFBvbGxpbmcoJHNjb3BlLCAobmV4dDooKSA9PiB2b2lkKSA9PiB7XHJcbiAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMuYnVpbGRDb25maWdzUmVzdFVSTCgpO1xyXG4gICAgICAgICRodHRwLmdldCh1cmwpLlxyXG4gICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiZ290IGRhdGEgXCIgKyBhbmd1bGFyLnRvSnNvbihkYXRhLCB0cnVlKSk7XHJcbiAgICAgICAgICAgICAgdmFyIHNvcnRlZEJ1aWxkcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgJHNjb3BlLmJ1aWxkQ29uZmlncyA9IEt1YmVybmV0ZXMuZW5yaWNoQnVpbGRDb25maWdzKGRhdGEuaXRlbXMsIHNvcnRlZEJ1aWxkcyk7XHJcbiAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICAgICAgbmV4dCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KS5cclxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICBuZXh0KCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAkc2NvcGUuZmV0Y2goKTtcclxuKi9cclxuICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XHJcblxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuXHJcbiAgZXhwb3J0IHZhciBXb3Jrc3BhY2VDb250cm9sbGVyID0gY29udHJvbGxlcihcIldvcmtzcGFjZUNvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJuYW1lc3BhY2VcIl07XHJcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XHJcbiAgICAgICAgJHNjb3BlLmNvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMua3ViZXJuZXRlc19OYW1lc3BhY2U7XHJcblxyXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuICAgICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IGNyZWF0ZVdvcmtzcGFjZUJyZWFkY3J1bWJzKCk7XHJcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVXb3Jrc3BhY2VTdWJOYXZCYXJzKCk7XHJcblxyXG4gICAgICAgICRzY29wZS4ka2VlcFBvbGxpbmcgPSAoKSA9PiBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWw7XHJcbiAgICAgICAgJHNjb3BlLmZldGNoID0gUG9sbEhlbHBlcnMuc2V0dXBQb2xsaW5nKCRzY29wZSwgKG5leHQ6KCkgPT4gdm9pZCkgPT4ge1xyXG4gICAgICAgICAgJHNjb3BlLml0ZW0gPSBudWxsO1xyXG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xyXG4gICAgICAgICAgICB2YXIgdXJsID0gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXMucmVzb3VyY2VzVXJpRm9yS2luZChcIlByb2plY3RzXCIpLCAkc2NvcGUuaWQpO1xyXG4gICAgICAgICAgICBsb2cuaW5mbyhcIkxvYWRpbmcgdXJsOiBcIiArIHVybCk7XHJcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxyXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5ID0gZW5yaWNoV29ya3NwYWNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICAgIG5leHQoKTtcclxuICAgICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICBuZXh0KCk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICAgIG5leHQoKTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS5mZXRjaCgpO1xyXG4gICAgICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc01vZGVsLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vY29uZmlncy90cy9jb25maWdzRGF0YVNlcnZpY2UudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGF0YU1hbmFnZXJIZWxwZXIudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkYXRhTWFuYWdlck1vZGVsLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vY29uZmlncy90cy9jb25maWdzSGVscGVyLnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcbiAgZXhwb3J0IHZhciBXb3Jrc3BhY2VzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJXb3Jrc3BhY2VzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJEYXRhTW9kZWxcIiwgXCJDb25maWdzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiJGVsZW1lbnRcIixcclxuICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgRGF0YU1vZGVsOkRldmVsb3Blci5EYXRhTW9kZWxTZXJ2aWNlLCBDb25maWdzTW9kZWw6Q29uZmlncy5Db25maWdzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgJGVsZW1lbnQpID0+IHsgICAgXHJcbiAgICAkc2NvcGUubW9kZWw9RGF0YU1vZGVsOyBcclxuICAgIGluaXQoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyk7ICAgXHJcbiAgICAkc2NvcGUub3B0aW9ucyA9IERhdGFNb2RlbC5wYXJhbU9wdGlvbnM7XHJcbiAgICAkc2NvcGUucGFnZVNpemVDaG9zZXMgPSBEYXRhTW9kZWwucGFyYW1PcHRpb25zLnBhZ2VyU2l6ZU9wdGlvbjtcclxuICAgICRzY29wZS5vcHRpb25zLmRhdGFUeXBlID0gZ2V0RGF0YVR5cGUoJGxvY2F0aW9uKTsgICAgXHJcblxyXG4gICAgJHNjb3BlLnRyZWVPcHRpb25zID0ge1xyXG4gICAgICBub2RlQ2hpbGRyZW46IFwiY2hpbGROb2Rlc1wiLFxyXG4gICAgICBkaXJTZWxlY3RhYmxlOiB0cnVlLFxyXG4gICAgICBpbmplY3RDbGFzc2VzOiB7XHJcbiAgICAgICAgdWw6IFwiYTFcIixcclxuICAgICAgICBsaTogXCJhMlwiLFxyXG4gICAgICAgIGxpU2VsZWN0ZWQ6IFwiYTdcIixcclxuICAgICAgICBpRXhwYW5kZWQ6IFwiYTNcIixcclxuICAgICAgICBpQ29sbGFwc2VkOiBcImE0XCIsXHJcbiAgICAgICAgaUxlYWY6IFwiYTVcIixcclxuICAgICAgICBsYWJlbDogXCJhNlwiLFxyXG4gICAgICAgIGxhYmVsU2VsZWN0ZWQ6IFwiYThcIlxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy/phY3nva7mlbDmja7ooajmoLzpnIDopoHmmL7npLrnmoTlhoXlrrnlj4rmmL7npLrmoLzlvI9cclxuICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgZGF0YTogJ21vZGVsLmRhdGEnLCAgICAgXHJcbiAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcclxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgICBtdWx0aVNlbGVjdDogdHJ1ZSwgICAgIFxyXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSwgICAgIFxyXG4gICAgICBmaWx0ZXJPcHRpb25zOiB7XHJcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xyXG4gICAgICB9LFxyXG4gICAgICBjb2x1bW5EZWZzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6IFwiX2tleVwiLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICfnvJbnoIEnLFxyXG4gICAgICAgICAgY3VzdG9tU29ydEZpZWxkOiAoZmllbGQpID0+e1xyXG4gICAgICAgICAgICByZXR1cm4gZmllbGQuaWQ7ICAgICAgICAgICBcclxuICAgICAgICAgIH0gICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiBcIm5hbWVcIixcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAn5biCLeWMui/ljr8nICAgICAgIFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBcclxuICAgICAgICAgIGZpZWxkOiBcInN5c3RlbU5hbWVcIixcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAn57O757uf5ZCN56ewJyAgICAgICAgIFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6IFwibGFiZWxzXCIsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ+aVsOaNruagh+etvicsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImRhdGFMYWJlbHNUZW1wbGF0ZS5odG1sXCIpICAgICAgXHJcbiAgICAgICAgfSwgXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6IFwieWVhclwiLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICflubTluqYnLCAgICAgICAgXHJcbiAgICAgICAgfSwgICAgXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6IFwiY29sbGVjdGluZ1RpbWVcIixcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAn6YeH6ZuG5pe26Ze0JyAgICAgICAgXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogXCJjb2xsZWN0b3JOYW1lXCIsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ+axh+aAu+eKtuaAgScgICAgICAgXHJcbiAgICAgICAgfSAgICAgICAgIFxyXG4gICAgICBdXHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5zZWxlY3RCYXRjaEl0ZW0gPSAoaXRlbSk9PiB7ICAgICAgXHJcbiAgICAgICRzY29wZS5uYXZiYXJJdGVtcy5mb3JFYWNoKChuYXYpID0+e1xyXG4gICAgICAgIG5hdi5jbGFzcz1cIlwiO1xyXG4gICAgICB9KTtcclxuICAgICAgaXRlbS5jbGFzcz1cImFjdGl2ZVwiO1xyXG4gICAgICBpZihpdGVtLmxhYmVsID09PSBcIuWFqOmDqFwiKSBcclxuICAgICAgICAgJHNjb3BlLm1vZGVsLnVwZGF0ZVBhcmFtT3B0aW9uKFwiZGF0YUJhdGNoXCIsIG51bGwpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgICRzY29wZS5tb2RlbC51cGRhdGVQYXJhbU9wdGlvbihcImRhdGFCYXRjaFwiLCBpdGVtLmFsaWFzKTsgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5pc0VtcHR5T3JGaXJzdCA9ICgpID0+IHtcclxuICAgICAgdmFyIGlkeCA9ICRzY29wZS5tb2RlbC5nZXRQYXJhbU9wdGlvbihcImN1cnJlbnRQYWdlTnVtXCIpO1xyXG4gICAgICB2YXIgbGVuZ3RoID0kc2NvcGUub3B0aW9ucy5nZXRQYWdlU2l6ZU51bSgpOyAgICAgIFxyXG4gICAgICByZXR1cm4gbGVuZ3RoIDw9IDAgfHwgaWR4IDw9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLmlzRW1wdHlPckxhc3QgPSAoKSA9PntcclxuICAgICAgdmFyIGlkeCA9ICRzY29wZS5tb2RlbC5nZXRQYXJhbU9wdGlvbihcImN1cnJlbnRQYWdlTnVtXCIpO1xyXG4gICAgICB2YXIgbGVuZ3RoID0kc2NvcGUub3B0aW9ucy5nZXRQYWdlU2l6ZU51bSgpO1xyXG4gICAgICByZXR1cm4gbGVuZ3RoIDwgMSB8fCBpZHggPj0gbGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5maXJzdCA9ICgpID0+IHsgICAgICBcclxuICAgICAgdmFyIGlkeCA9ICRzY29wZS5tb2RlbC5nZXRQYXJhbU9wdGlvbihcImN1cnJlbnRQYWdlTnVtXCIpOyAgICAgIFxyXG4gICAgICBpZihpZHggPjEpXHJcbiAgICAgICAgJHNjb3BlLm1vZGVsLnVwZGF0ZVBhcmFtT3B0aW9uKFwiY3VycmVudFBhZ2VOdW1cIiwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLmxhc3QgPSAoKSA9PnsgICAgICBcclxuICAgICAgdmFyIGlkeCA9ICRzY29wZS5tb2RlbC5nZXRQYXJhbU9wdGlvbihcImN1cnJlbnRQYWdlTnVtXCIpOyBcclxuICAgICAgdmFyIGxlbmd0aCA9JHNjb3BlLm9wdGlvbnMuZ2V0UGFnZVNpemVOdW0oKTtcclxuICAgICAgaWYoaWR4IDwgbGVuZ3RoKVxyXG4gICAgICAgICAkc2NvcGUubW9kZWwudXBkYXRlUGFyYW1PcHRpb24oXCJjdXJyZW50UGFnZU51bVwiLCBsZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5wcmV2aW91cyA9ICgpID0+IHsgICAgICBcclxuICAgICAgdmFyIGlkeCA9ICRzY29wZS5tb2RlbC5nZXRQYXJhbU9wdGlvbihcImN1cnJlbnRQYWdlTnVtXCIpOyBcclxuICAgICAgdmFyIGxlbmd0aCA9JHNjb3BlLm9wdGlvbnMuZ2V0UGFnZVNpemVOdW0oKTtcclxuICAgICAgaWYoaWR4ID4gMSlcclxuICAgICAgICAkc2NvcGUubW9kZWwudXBkYXRlUGFyYW1PcHRpb24oXCJjdXJyZW50UGFnZU51bVwiLCBpZHgtMSk7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLm5leHQgPSAoKSA9PntcclxuICAgICAgdmFyIGxlbmd0aCA9JHNjb3BlLm9wdGlvbnMuZ2V0UGFnZVNpemVOdW0oKTtcclxuICAgICAgdmFyIGlkeCA9ICRzY29wZS5tb2RlbC5nZXRQYXJhbU9wdGlvbihcImN1cnJlbnRQYWdlTnVtXCIpO1xyXG4gICAgICBpZihpZHggPCBsZW5ndGgpXHJcbiAgICAgICAgJHNjb3BlLm1vZGVsLnVwZGF0ZVBhcmFtT3B0aW9uKFwiY3VycmVudFBhZ2VOdW1cIiwgaWR4KzEpOyAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS4kd2F0Y2goJ29wdGlvbnMnLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7ICAgICAgICAgICAgIFxyXG4gICAgICBpZihuZXdWYWx1ZSAmJiBuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpe1xyXG4gICAgICAgIGlmKG5ld1ZhbHVlLmN1cnJlbnRUYWJsZVNpemUgIT09IG9sZFZhbHVlLmN1cnJlbnRUYWJsZVNpemUpXHJcbiAgICAgICAgICAkc2NvcGUub3B0aW9ucy5wcmlvclRhYmxlU2l6ZSA9IG9sZFZhbHVlLmN1cnJlbnRUYWJsZVNpemU7ICAgICAgICBcclxuICAgICAgICBlbHNlIFxyXG4gICAgICAgICAgJHNjb3BlLm9wdGlvbnMucHJpb3JUYWJsZVNpemUgPSBuZXdWYWx1ZS5jdXJyZW50VGFibGVTaXplO1xyXG5cclxuICAgICAgICBEYXRhTW9kZWwudXBkYXRlTW9kZWwoKTtcclxuICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgIH0sIHRydWUpOyAgXHJcblxyXG4gICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xyXG4gICAgICBpZiAoYW5ndWxhci5pc1N0cmluZyhzZWxlY3RlZCkpIHtcclxuICAgICAgICBzZWxlY3RlZCA9IFt7XHJcbiAgICAgICAgICBpZDogc2VsZWN0ZWRcclxuICAgICAgICB9XTtcclxuICAgICAgfVxyXG4gICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XHJcbiAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXHJcbiAgICAgICAgaW5kZXg6ICdpZCcsXHJcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICB2YXIgaWRDb2xsID0gW107XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzZWxlY3RlZCwgKHNlbGVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlkQ29sbC5wdXNoKHNlbGVjdC5pZCk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coc2VsZWN0LmlkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICRodHRwKHsgIFxyXG4gICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsICBcclxuICAgICAgICAgICAgICB1cmw6IFwiL2phdmEvY29uc29sZS9hcGkvZGVsZXRlL2RhdGFcIiwgICAgICAgICBcclxuICAgICAgICAgICAgICBwYXJhbXM6IHtcImRhdGFcIjogaWRDb2xsfSAgIFxyXG4gICAgICAgICAgICB9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7ICBcclxuICAgICAgICAgICAgICAvL+aIkOWKn+S5i+WQjuWBmuS4gOS6m+S6i+aDhSBcclxuICAgICAgICAgICAgICBEYXRhTW9kZWwudXBkYXRlTW9kZWwoKTsgICAgICBcclxuICAgICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24oZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHsgIFxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aXRsZTogJ+aYr+WQpumcgOimgeWIoOmZpOmHh+mbhuaVsOaNru+8nycsXHJcbiAgICAgICAgYWN0aW9uOiAn5Lul5LiL6YeH6ZuG5pWw5o2u5paH5Lu25bCG5Lya6KKr5Yig6ZmkOicsXHJcbiAgICAgICAgb2tUZXh0OiAn5Yig6ZmkJyxcclxuICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlciBzal9idG5fY2lyJyxcclxuICAgICAgICBjdXN0b206IFwi6K+l5Yig6Zmk5pON5L2c5bCG5Lya5b275bqV5Yig6Zmk5pWw5o2u5paH5Lu2LOaYr+WQpuWIoOmZpO+8jOivt+ehruiupO+8gVwiLFxyXG4gICAgICAgIGN1c3RvbUNsYXNzOiBcImFsZXJ0IGFsZXJ0LXdhcm5pbmcgc2pfYWxlcnQtd2FybmluZ1wiLFxyXG4gICAgICAgIGNhbmNlbFRleHQ6IFwi5Y+W5raIXCIsXHJcbiAgICAgICAgY2FuY2VsQ2xhc3M6ICdzal9idG5fZ3JleSdcclxuICAgICAgfSkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5taWdyYXRpb25DbGljayA9IHtcclxuICAgICAgaXRlbXM6bnVsbCxcclxuICAgICAgc2VsZWN0ZWRJdGVtOiB7XCJuYW1lXCI6IFwi5b2T5YmN5rKh5pyJ5Y+v5Lul6L+B56e755qE6ZuG576kXCJ9LFxyXG4gICAgICBkaWFsb2c6IG5ldyBVSS5EaWFsb2coKSxcclxuICAgICAgb25PazogKCkgPT4geyAgICAgICAgXHJcbiAgICAgICAgdmFyIG1pZ3JhdGlvbkNsaWNrID0gJHNjb3BlLm1pZ3JhdGlvbkNsaWNrO1xyXG4gICAgICAgIENvbmZpZ3Mub3JhY2xlSW5mb09wZXJhdGUoJGh0dHAsIFwiL2phdmEvY29uc29sZS9hcGkvdm9sdW1lXCIsIENvbmZpZ3MuT3BlcmF0ZVR5cGUuTU9WRSwgXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFwibmFtZVwiOiBtaWdyYXRpb25DbGljay5zZWxlY3RlZEl0ZW0ubmFtZSxcclxuICAgICAgICAgICAgXCJzZWxlY3RJdGVtc1wiOiAkc2NvcGUudGFibGVDb25maWcuc2VsZWN0ZWRJdGVtcyxcclxuICAgICAgICAgICAgXCJzZWxlY3ROb2RlXCI6ICRzY29wZS5zZWxlY3ROb2RlXHJcbiAgICAgICAgICB9LCAocmVzdWx0LCBzdGF0dXMpID0+IHtcclxuICAgICAgICAgIGlmKHN0YXR1cz09PTIwMCl7XHJcbiAgICAgICAgICAgICAgLy8kc2NvcGUubW9kZWwudXBkYXRlT3JhY2xlUGFyYW0oKTtcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIHRocm93IFwi6LWE5rqQ6K+35rGC5aSx6LSlXCI7ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBtaWdyYXRpb25DbGljay5jbG9zZSgpO1xyXG4gICAgICB9LFxyXG4gICAgICBvcGVuOiAoc2VsZWN0ZWQpID0+e1xyXG4gICAgICAgIHZhciBtaWdyYXRpb25DbGljayA9ICRzY29wZS5taWdyYXRpb25DbGljaztcclxuICAgICAgICBpZigkc2NvcGUudm9sdW1lcyAmJiAkc2NvcGUudm9sdW1lcyBpbnN0YW5jZW9mIEFycmF5ICYmICRzY29wZS52b2x1bWVzLmxlbmd0aCA+MClcclxuICAgICAgICAgICBtaWdyYXRpb25DbGljay5zZWxlY3RlZEl0ZW0gPSAkc2NvcGUudm9sdW1lc1swXTsgXHJcbiAgICAgICAgbWlncmF0aW9uQ2xpY2suZGlhbG9nLm9wZW4oKTsgIFxyXG4gICAgICB9LFxyXG4gICAgICBjbG9zZTogKCkgPT4ge1xyXG4gICAgICAgICRzY29wZS5taWdyYXRpb25DbGljay5zZWxlY3RlZEl0ZW0gPSB7XCJuYW1lXCI6IFwi5b2T5YmN5rKh5pyJ5Y+v5Lul6L+B56e755qE6ZuG576kXCJ9O1xyXG4gICAgICAgICRzY29wZS5taWdyYXRpb25DbGljay5kaWFsb2cuY2xvc2UoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuY3JlYXRlT3JhY2xlU2VydmljZSA9IChpdGVtcykgPT57ICAgICBcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKGl0ZW1zLChpdGVtKT0+eyAgICAgICBcclxuICAgICAgICBLdWJlcm5ldGVzLmNyZWF0ZVJDKHtcclxuICAgICAgICAgIG5hbWU6IGl0ZW0uX2tleSxcclxuICAgICAgICAgIGxhYmVsczoge1xyXG4gICAgICAgICAgICBzeXN0ZW06IGl0ZW0uc3lzdGVtQ29kZS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICB2ZXJzaW9uOiBpdGVtLmRhdGFWZXJzaW9uLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHJlZ2lvbjogaXRlbS5yZWdpb25hbGlzbUNvZGUudG9TdHJpbmcoKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGFubm90YXRpb25zOiB7XHJcbiAgICAgICAgICAgIGNpdHlOYW1lOiBpdGVtLmNpdHlOYW1lLFxyXG4gICAgICAgICAgICBkaXN0cmljdE5hbWU6IGl0ZW0uZGlzdHJpY3ROYW1lLFxyXG4gICAgICAgICAgICBzeXN0ZW1OYW1lOiBpdGVtLnN5c3RlbU5hbWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBwYXRoOiBpdGVtLmRhdGFQYXRoK1wiYXBwL1wiLFxyXG4gICAgICAgICAgaXNUYXJnZXQ6IFwiZmFsc2VcIlxyXG4gICAgICAgIH0sIChyYykgPT57IFxyXG4gICAgICAgICAgICBLdWJlcm5ldGVzLmNvbm5lY3RPcmFjbGUoJGh0dHAsICR0aW1lb3V0LCBcIi9qYXZhL2NvbnNvbGUvYXBpL2Nvbm5lY3RPcmFjbGVcIiwgXCJjcmVhdGVcIiwgcmMsIDApOyAgXHJcbiAgICAgICAgfSk7ICAgICAgICAgICAgICBcclxuICAgICAgfSk7ICAgIFxyXG4gICAgIFxyXG4gICAgICAkdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICRsb2NhdGlvbi5wYXRoKCcva3ViZXJuZXRlcy9uYW1lc3BhY2UvZGVmYXVsdC9yZXBsaWNhdGlvbkNvbnRyb2xsZXJzJyk7ICAgICAgICAgICAgXHJcbiAgICAgIH0sIDIwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaW5pdCgkc2NvcGUsJGxvY2F0aW9uLCRyb3V0ZVBhcmFtcyl7XHJcbiAgICAgICRzY29wZS5tb2RlbC51cGRhdGVNb2RlbCgpO1xyXG4gICAgICBpZihDb25maWdzTW9kZWwuY2x1c3RlciE9bnVsbClcclxuICAgICAgICAkc2NvcGUudm9sdW1lcyA9IENvbmZpZ3NNb2RlbC5jbHVzdGVyOyAgXHJcblxyXG4gICAgICAvL+WIm+W7uuS6jOe6p+iPnOWNlSAgICAgIFxyXG4gICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZUN1cnJlbnRTdWJOYXZCYXIoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyk7XHJcbiAgICAgICRzY29wZS5uYXZiYXJJdGVtcyA9W3sgICAgICAgXHJcbiAgICAgICAgaGVyZjogXCJcIixcclxuICAgICAgICBsYWJlbDogXCLlhajpg6hcIixcclxuICAgICAgICB0aXRsZTogXCLmn6XnnIvlhajpg6jmlbDmja5cIixcclxuICAgICAgICBjbGFzczogXCJhY3RpdmVcIixcclxuICAgICAgICBhbGlhczogbnVsbFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVyZjogXCJcIixcclxuICAgICAgICBsYWJlbDogXCLmibnmrKFBXCIsXHJcbiAgICAgICAgdGl0bGU6IFwi5p+l55yL5om55qyhQeeahOaVsOaNrlwiLFxyXG4gICAgICAgIGNsYXNzOiBcIlwiLFxyXG4gICAgICAgIGFsaWFzOiBcIkFcIlxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVyZjogXCJcIixcclxuICAgICAgICBsYWJlbDogXCLmibnmrKFCXCIsXHJcbiAgICAgICAgdGl0bGU6IFwi5p+l55yL5om55qyhQueahOaVsOaNrlwiLFxyXG4gICAgICAgIGNsYXNzOiBcIlwiLFxyXG4gICAgICAgIGFsaWFzOiBcIkJcIlxyXG4gICAgICB9XVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldERhdGFUeXBlKCRsb2NhdGlvbil7XHJcbiAgICAgIHZhciBwYXRoID0gJGxvY2F0aW9uLnBhdGgoKTtcclxuICAgICAgdmFyIHJlc3VsdDtcclxuICAgICAgdmFyIHN1YlBhdGggPSBwYXRoLnNwbGl0KFwiL1wiKTtcclxuICAgICAgc3dpdGNoIChzdWJQYXRoW3N1YlBhdGgubGVuZ3RoIC0xXSkge1xyXG4gICAgICAgIGNhc2UgXCJmaW5hbmNpYWxcIjpcclxuICAgICAgICAgIHJlc3VsdCA9IFwi6LSi5pS/XCJcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzb2NpYWwtc2VjdXJpdHlcIjpcclxuICAgICAgICAgIHJlc3VsdCA9IFwi56S+5L+dXCJcclxuICAgICAgICAgIGJyZWFrOyAgICAgICAgICBcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmVzdWx0ID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9ICAgICBcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuICBcclxuICBleHBvcnQgdmFyIEFwcHMgPSBjb250cm9sbGVyKFwiQXBwc1wiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1NlcnZpY2VzXCIsIFwiS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnNcIiwgXCJLdWJlcm5ldGVzUG9kc1wiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJGRpYWxvZ1wiLCBcIiR0aW1lb3V0XCIsIFxyXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1NlcnZpY2VzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNSZXBsaWNhdGlvbkNvbnRyb2xsZXJzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNQb2RzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICRkaWFsb2csICR0aW1lb3V0KSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG5cclxuICAgICRzY29wZS5hcHBzID0gW107XHJcbiAgICAkc2NvcGUuYWxsQXBwcyA9IFtdO1xyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAkc2NvcGUuZmV0Y2hlZCA9IGZhbHNlO1xyXG4gICAgJHNjb3BlLmpzb24gPSAnJztcclxuICAgIENvbnRyb2xsZXJIZWxwZXJzLmJpbmRNb2RlbFRvU2VhcmNoUGFyYW0oJHNjb3BlLCAkbG9jYXRpb24sICdpZCcsICdfaWQnLCB1bmRlZmluZWQpO1xyXG4gICAgQ29udHJvbGxlckhlbHBlcnMuYmluZE1vZGVsVG9TZWFyY2hQYXJhbSgkc2NvcGUsICRsb2NhdGlvbiwgJ2FwcFNlbGVjdG9yU2hvdycsICdvcGVuQXBwJywgdW5kZWZpbmVkKTtcclxuICAgIENvbnRyb2xsZXJIZWxwZXJzLmJpbmRNb2RlbFRvU2VhcmNoUGFyYW0oJHNjb3BlLCAkbG9jYXRpb24sICdtb2RlJywgJ21vZGUnLCAnZGV0YWlsJyk7XHJcblxyXG4gICAgdmFyIGJyYW5jaCA9ICRzY29wZS5icmFuY2ggfHwgXCJtYXN0ZXJcIjtcclxuICAgIHZhciBuYW1lc3BhY2UgPSBudWxsO1xyXG5cclxuICAgIGZ1bmN0aW9uIGFwcE1hdGNoZXMoYXBwKSB7XHJcbiAgICAgIHZhciBmaWx0ZXJUZXh0ID0gJHNjb3BlLmFwcFNlbGVjdG9yLmZpbHRlclRleHQ7XHJcbiAgICAgIGlmIChmaWx0ZXJUZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5ncm91cElkLCBmaWx0ZXJUZXh0KSB8fFxyXG4gICAgICAgICAgQ29yZS5tYXRjaEZpbHRlcklnbm9yZUNhc2UoYXBwLmFydGlmYWN0SWQsIGZpbHRlclRleHQpIHx8XHJcbiAgICAgICAgICBDb3JlLm1hdGNoRmlsdGVySWdub3JlQ2FzZShhcHAubmFtZSwgZmlsdGVyVGV4dCkgfHxcclxuICAgICAgICAgIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5kZXNjcmlwdGlvbiwgZmlsdGVyVGV4dCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBhcHBSdW5uaW5nKGFwcCkge1xyXG4gICAgICByZXR1cm4gJHNjb3BlLm1vZGVsLmFwcHMuYW55KChydW5uaW5nKSA9PiBydW5uaW5nLmFwcFBhdGggPT09IGFwcC5hcHBQYXRoKTtcclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XHJcbiAgICAgIGRhdGE6ICdtb2RlbC5hcHBzJyxcclxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxyXG4gICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxyXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcclxuICAgICAgZmlsdGVyT3B0aW9uczoge1xyXG4gICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcclxuICAgICAgfSxcclxuICAgICAgY29sdW1uRGVmczogW1xyXG4gICAgICAgIHsgZmllbGQ6ICckbmFtZScsIGRpc3BsYXlOYW1lOiAnQXBwJywgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoVXJsSGVscGVycy5qb2luKHRlbXBsYXRlUGF0aCwgXCJhcHBJY29uVGVtbGF0ZS5odG1sXCIpKSB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICckc2VydmljZXNUZXh0JywgZGlzcGxheU5hbWU6ICdTZXJ2aWNlcycsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwU2VydmljZXNUZW1wbGF0ZS5odG1sXCIpKSB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICckcmVwbGljYXRpb25Db250cm9sbGVyc1RleHQnLCBkaXNwbGF5TmFtZTogJ0NvbnRyb2xsZXJzJywgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoVXJsSGVscGVycy5qb2luKHRlbXBsYXRlUGF0aCwgXCJhcHBSZXBsaWNhdGlvbkNvbnRyb2xsZXJUZW1wbGF0ZS5odG1sXCIpKSB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICckcG9kQ291bnQnLCBkaXNwbGF5TmFtZTogJ1BvZHMnLCBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCBcImFwcFBvZENvdW50c0FuZExpbmtUZW1wbGF0ZS5odG1sXCIpKSB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICckY3JlYXRpb25EYXRlJywgZGlzcGxheU5hbWU6ICdEZXBsb3llZCcsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwRGVwbG95ZWRUZW1wbGF0ZS5odG1sXCIpKSB9XHJcbiAgICAgIF1cclxuICAgIH07XHJcblxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuXHJcbiAgICAkc2NvcGUuZXhwYW5kZWRQb2RzID0gW107XHJcblxyXG4gICAgJHNjb3BlLiRvbignZG8tcmVzaXplJywgKCRldmVudCwgY29udHJvbGxlcikgPT4ge1xyXG4gICAgICAkc2NvcGUucmVzaXplRGlhbG9nLm9wZW4oY29udHJvbGxlcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICAgICAgXHJcbiAgICAkc2NvcGUucG9kRXhwYW5kZWQgPSAocG9kKSA9PiB7XHJcbiAgICAgIHZhciBpZCA9IGdldE5hbWUocG9kKVxyXG4gICAgICByZXR1cm4gaWQgJiYgKCRzY29wZS5leHBhbmRlZFBvZHMgfHwgW10pLmluZGV4T2YoaWQpID49IDA7XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5leHBhbmRQb2QgPSAocG9kKSA9PiB7XHJcbiAgICAgIHZhciBpZCA9IGdldE5hbWUocG9kKTtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgJHNjb3BlLmV4cGFuZGVkUG9kcy5wdXNoKGlkKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuY29sbGFwc2VQb2QgPSAocG9kKSA9PiB7XHJcbiAgICAgIHZhciBpZCA9IGdldE5hbWUocG9kKTtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgXy5yZW1vdmUoJHNjb3BlLmV4cGFuZGVkUG9kcywgKHYpID0+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+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcbiAgdmFyIGxvZyA9IExvZ2dlci5nZXQoJ2t1YmVybmV0ZXMtd2F0Y2hlcicpO1xyXG5cclxuICB2YXIgazhzVHlwZXMgPSBLdWJlcm5ldGVzQVBJLk5hbWVzcGFjZWRUeXBlcy5rOHNUeXBlcztcclxuICB2YXIgb3NUeXBlcyAgPSBLdWJlcm5ldGVzQVBJLk5hbWVzcGFjZWRUeXBlcy5vc1R5cGVzO1xyXG5cclxuICB2YXIgc2VsZiA9IDxhbnk+IHt9O1xyXG5cclxuICB2YXIgdXBkYXRlRnVuY3Rpb24gPSAoKSA9PiB7XHJcbiAgICBcclxuICAgIGxvZy5kZWJ1ZyhcIk9iamVjdHMgY2hhbmdlZCwgZmlyaW5nIGxpc3RlbmVyc1wiKTtcclxuICAgIHZhciBvYmplY3RzID0gPE9iamVjdE1hcD57fTtcclxuICAgIF8uZm9yRWFjaChzZWxmLmdldFR5cGVzKCksICh0eXBlOnN0cmluZykgPT4ge1xyXG4gICAgICBvYmplY3RzW3R5cGVdID0gc2VsZi5nZXRPYmplY3RzKHR5cGUpO1xyXG4gICAgfSk7XHJcbiAgICBfLmZvckVhY2goc2VsZi5saXN0ZW5lcnMsIChsaXN0ZW5lcjooT2JqZWN0TWFwKSA9PiB2b2lkKSA9PiB7XHJcbiAgICAgIGxpc3RlbmVyKG9iamVjdHMpO1xyXG4gICAgfSk7ICBcclxuICB9O1xyXG4gIHZhciBkZWJvdW5jZWRVcGRhdGUgPSBfLmRlYm91bmNlKHVwZGF0ZUZ1bmN0aW9uLCA3NSwgeyB0cmFpbGluZzogdHJ1ZSB9KTtcclxuXHJcbiAgdmFyIG5hbWVzcGFjZVdhdGNoID0ge1xyXG4gICAgc2VsZWN0ZWQ6IHVuZGVmaW5lZCxcclxuICAgIHdhdGNoOiB1bmRlZmluZWQsXHJcbiAgICBvYmplY3RzOiBbXSxcclxuICAgIG9iamVjdE1hcDoge30sXHJcbiAgICB3YXRjaGVzOiB7fVxyXG4gIH07XHJcblxyXG4gIGhhd3Rpb1BsdWdpbkxvYWRlci5yZWdpc3RlclByZUJvb3RzdHJhcFRhc2soe1xyXG4gICAgbmFtZTogJ0t1YmVybmV0ZXNXYXRjaGVySW5pdCcsXHJcbiAgICBkZXBlbmRzOiBbJ0t1YmVybmV0ZXNBcGlEaXNjb3ZlcnknXSxcclxuICAgIHRhc2s6IChuZXh0KSA9PiB7XHJcbiAgICAgIHZhciBib290ZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKGlzT3BlblNoaWZ0KSB7XHJcbiAgICAgICAgbG9nLmluZm8oXCJCYWNrZW5kIGlzIGFuIE9wZW5zaGlmdCBpbnN0YW5jZVwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsb2cuaW5mbyhcIkJhY2tlbmQgaXMgYSB2YW5pbGxhIEt1YmVybmV0ZXMgaW5zdGFuY2VcIik7XHJcbiAgICAgIH1cclxuICAgICAgbmFtZXNwYWNlV2F0Y2gud2F0Y2ggPSBLdWJlcm5ldGVzQVBJLndhdGNoKHtcclxuICAgICAgICBraW5kOiBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuTkFNRVNQQUNFUyxcclxuICAgICAgICBzdWNjZXNzOiAob2JqZWN0cykgPT4ge1xyXG4gICAgICAgICAgbmFtZXNwYWNlV2F0Y2gub2JqZWN0cyA9IG9iamVjdHM7XHJcbiAgICAgICAgICBpZiAoIWJvb3RlZCkge1xyXG4gICAgICAgICAgICBib290ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBzZWxmLnNldE5hbWVzcGFjZShsb2NhbFN0b3JhZ2VbQ29uc3RhbnRzLk5BTUVTUEFDRV9TVE9SQUdFX0tFWV0gfHwgZGVmYXVsdE5hbWVzcGFjZSk7XHJcbiAgICAgICAgICAgIG5leHQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxvZy5kZWJ1ZyhcIkdvdCBuYW1lc3BhY2VzOiBcIiwgbmFtZXNwYWNlV2F0Y2gub2JqZWN0cyk7XHJcbiAgICAgICAgfSwgZXJyb3I6IChlcnJvcjphbnkpID0+IHtcclxuICAgICAgICAgIGxvZy53YXJuKFwiRXJyb3IgZmV0Y2hpbmcgbmFtZXNwYWNlczogXCIsIGVycm9yKTtcclxuICAgICAgICAgIC8vIFRPRE8gaXMgdGhpcyBuZWNlc3Nhcnk/XHJcbiAgICAgICAgICAvL0hhd3Rpb09BdXRoLmRvTG9nb3V0KCk7XHJcbiAgICAgICAgICBpZiAoIWJvb3RlZCkge1xyXG4gICAgICAgICAgICBib290ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBuZXh0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgaGF3dGlvUGx1Z2luTG9hZGVyLnJlZ2lzdGVyUHJlQm9vdHN0cmFwVGFzayh7XHJcbiAgICBuYW1lOiAnS3ViZXJuZXRlc0FwaURpc2NvdmVyeScsXHJcbiAgICBkZXBlbmRzOiBbJ2hhd3Rpby1vYXV0aCddLFxyXG4gICAgdGFzazogKG5leHQpID0+IHtcclxuICAgICAgaXNPcGVuU2hpZnQgPSBmYWxzZTtcclxuXHJcbiAgICAgIHZhciB1c2VyUHJvZmlsZSA9IEhhd3Rpb09BdXRoLmdldFVzZXJQcm9maWxlKCk7XHJcbiAgICAgIGxvZy5kZWJ1ZyhcIlVzZXIgcHJvZmlsZTogXCIsIHVzZXJQcm9maWxlKTtcclxuICAgICAgaWYgKHVzZXJQcm9maWxlICYmIHVzZXJQcm9maWxlLnByb3ZpZGVyID09PSBcImhhd3Rpby1nb29nbGUtb2F1dGhcIikge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhcIlBvc3NpYmx5IHJ1bm5pbmcgb24gR0NFXCIpO1xyXG4gICAgICAgIC8vIGFwaSBtYXN0ZXIgaXMgb24gR0NFXHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgIHVybDogVXJsSGVscGVycy5qb2luKG1hc3RlckFwaVVybCgpLCAnYXBpJywgJ3YxJywgJ25hbWVzcGFjZXMnKSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoanFYSFIsIHRleHRTdGF0dXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRleHRTdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwianFYSFI6IFwiLCBqcVhIUik7XHJcbiAgICAgICAgICAgICAgdXNlclByb2ZpbGUub2xkVG9rZW4gPSB1c2VyUHJvZmlsZS50b2tlbjtcclxuICAgICAgICAgICAgICB1c2VyUHJvZmlsZS50b2tlbiA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAkLmFqYXhTZXR1cCh7XHJcbiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiAocmVxdWVzdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXh0KCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYmVmb3JlU2VuZDogKHJlcXVlc3QpID0+IHtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiTm90IHJ1bm5pbmcgb24gR0NFXCIpO1xyXG4gICAgICAgIC8vIGRvdWJsZS1jaGVjayBpZiB3ZSdyZSBvbiB2YW5pbGxhIGs4cyBvciBvcGVuc2hpZnRcclxuICAgICAgICB2YXIgcm9vdFVyaSA9IG5ldyBVUkkobWFzdGVyQXBpVXJsKCkpLnBhdGgoXCIvb2FwaVwiKS5xdWVyeShcIlwiKS50b1N0cmluZygpO1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhcIkNoZWNraW5nIGZvciBhbiBvcGVuc2hpZnQgYmFja2VuZFwiKTtcclxuICAgICAgICBIYXd0aW9PQXV0aC5hdXRoZW50aWNhdGVkSHR0cFJlcXVlc3Qoe1xyXG4gICAgICAgICAgdXJsOiByb290VXJpLFxyXG4gICAgICAgICAgc3VjY2VzczogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICBpc09wZW5TaGlmdCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbmV4dCgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBlcnJvciA9IEt1YmVybmV0ZXNBUEkuZ2V0RXJyb3JPYmplY3QoanFYSFIpO1xyXG4gICAgICAgICAgICBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiRmFpbGVkIHRvIGZpbmQgcm9vdCBwYXRoczogXCIsIHRleHRTdGF0dXMsIFwiOiBcIiwgZXJyb3JUaHJvd24pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkZhaWxlZCB0byBmaW5kIHJvb3QgcGF0aHM6IFwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaXNPcGVuU2hpZnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgbmV4dCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHZhciBjdXN0b21VcmxIYW5kbGVycyA9IHt9O1xyXG5cclxuICBzZWxmLnNldE5hbWVzcGFjZSA9IChuYW1lc3BhY2U6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKG5hbWVzcGFjZSA9PT0gbmFtZXNwYWNlV2F0Y2guc2VsZWN0ZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKG5hbWVzcGFjZVdhdGNoLnNlbGVjdGVkKSB7XHJcbiAgICAgIGxvZy5kZWJ1ZyhcIlN0b3BwaW5nIGN1cnJlbnQgd2F0Y2hlc1wiKTtcclxuICAgICAgXy5mb3JPd24obmFtZXNwYWNlV2F0Y2gud2F0Y2hlcywgKHdhdGNoLCBrZXkpID0+IHtcclxuICAgICAgICBpZiAoIUt1YmVybmV0ZXNBUEkubmFtZXNwYWNlZChrZXkpKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxvZy5kZWJ1ZyhcIkRpc2Nvbm5lY3Rpbmcgd2F0Y2g6IFwiLCBrZXkpO1xyXG4gICAgICAgIHdhdGNoLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIF8uZm9yRWFjaChfLmtleXMobmFtZXNwYWNlV2F0Y2gud2F0Y2hlcyksIChrZXkpID0+IHtcclxuICAgICAgICBpZiAoIUt1YmVybmV0ZXNBUEkubmFtZXNwYWNlZChrZXkpKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxvZy5kZWJ1ZyhcIkRlbGV0aW5nIGtpbmQ6IFwiLCBrZXkpO1xyXG4gICAgICAgIGRlbGV0ZSBuYW1lc3BhY2VXYXRjaC53YXRjaGVzW2tleV07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgbmFtZXNwYWNlV2F0Y2guc2VsZWN0ZWQgPSBuYW1lc3BhY2U7XHJcbiAgICBpZiAobmFtZXNwYWNlKSB7XHJcbiAgICAgIF8uZm9yRWFjaChzZWxmLmdldFR5cGVzKCksIChraW5kOnN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChraW5kID09PSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuTkFNRVNQQUNFUykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW5hbWVzcGFjZVdhdGNoLndhdGNoZXNba2luZF0pIHtcclxuICAgICAgICAgIGxvZy5kZWJ1ZyhcIkNyZWF0aW5nIHdhdGNoIGZvciBraW5kOiBcIiwga2luZCk7XHJcbiAgICAgICAgICB2YXIgY29uZmlnID0gPGFueT4ge1xyXG4gICAgICAgICAgICBraW5kOiBraW5kLFxyXG4gICAgICAgICAgICBuYW1lc3BhY2U6IEt1YmVybmV0ZXNBUEkubmFtZXNwYWNlZChraW5kKSA/IG5hbWVzcGFjZSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgc3VjY2VzczogKG9iamVjdHMpID0+IHtcclxuICAgICAgICAgICAgICB3YXRjaC5vYmplY3RzID0gb2JqZWN0cztcclxuICAgICAgICAgICAgICBkZWJvdW5jZWRVcGRhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGlmIChraW5kIGluIGN1c3RvbVVybEhhbmRsZXJzKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy51cmxGdW5jdGlvbiA9IGN1c3RvbVVybEhhbmRsZXJzW2tpbmRdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFyIHdhdGNoID0gPGFueT4gS3ViZXJuZXRlc0FQSS53YXRjaChjb25maWcpO1xyXG4gICAgICAgICAgd2F0Y2guY29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgICAgbmFtZXNwYWNlV2F0Y2gud2F0Y2hlc1traW5kXSA9IHdhdGNoO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgc2VsZi5oYXNXZWJTb2NrZXQgPSB0cnVlO1xyXG5cclxuICBzZWxmLmdldE5hbWVzcGFjZSA9ICgpID0+IG5hbWVzcGFjZVdhdGNoLnNlbGVjdGVkO1xyXG5cclxuICBzZWxmLnJlZ2lzdGVyQ3VzdG9tVXJsRnVuY3Rpb24gPSAoa2luZDpzdHJpbmcsIHVybDoob3B0aW9uczpLdWJlcm5ldGVzQVBJLks4U09wdGlvbnMpID0+IHN0cmluZykgPT4ge1xyXG4gICAgY3VzdG9tVXJsSGFuZGxlcnNba2luZF0gPSB1cmw7XHJcbiAgICBpZiAoa2luZCBpbiBuYW1lc3BhY2VXYXRjaC53YXRjaGVzKSB7XHJcbiAgICAgIHZhciB3YXRjaCA9IG5hbWVzcGFjZVdhdGNoLndhdGNoZXNba2luZF07XHJcbiAgICAgIHZhciBjb25maWcgPSB3YXRjaC5jb25maWc7XHJcbiAgICAgIGNvbmZpZy51cmxGdW5jdGlvbiA9IHVybDtcclxuICAgICAgd2F0Y2guZGlzY29ubmVjdCgpO1xyXG4gICAgICBkZWxldGUgbmFtZXNwYWNlV2F0Y2gud2F0Y2hlc1traW5kXTtcclxuICAgICAgY29uZmlnLnN1Y2Nlc3MgPSAob2JqZWN0cykgPT4ge1xyXG4gICAgICAgIHdhdGNoLm9iamVjdHMgPSBvYmplY3RzO1xyXG4gICAgICAgIGRlYm91bmNlZFVwZGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHdhdGNoID0gPGFueT4gS3ViZXJuZXRlc0FQSS53YXRjaChjb25maWcpO1xyXG4gICAgICB3YXRjaC5jb25maWcgPSBjb25maWc7XHJcbiAgICAgIG5hbWVzcGFjZVdhdGNoLndhdGNoZXNba2luZF0gPSB3YXRjaDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGYuZ2V0VHlwZXMgPSAoKSA9PiB7XHJcbiAgICB2YXIgZmlsdGVyID0gKGtpbmQ6c3RyaW5nKSA9PiB7XHJcbiAgICAgIC8vIGZpbHRlciBvdXQgc3R1ZmYgd2UgZG9uJ3QgY2FyZSBhYm91dCB5ZXRcclxuICAgICAgc3dpdGNoKGtpbmQpIHtcclxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5PQVVUSF9DTElFTlRTOlxyXG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLklNQUdFX1NUUkVBTVM6XHJcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUE9MSUNJRVM6XHJcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUk9MRVM6XHJcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUk9MRV9CSU5ESU5HUzpcclxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5QT0xJQ1lfQklORElOR1M6XHJcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUEVSU0lTVEVOVF9WT0xVTUVfQ0xBSU1TOlxyXG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlBFUlNJU1RFTlRfVk9MVU1FUzpcclxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5FTkRQT0lOVFM6XHJcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUkVTT1VSQ0VfUVVPVEFTOlxyXG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlNFUlZJQ0VfQUNDT1VOVFM6XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGFuc3dlciA9IGs4c1R5cGVzLmNvbmNhdChbV2F0Y2hUeXBlcy5OQU1FU1BBQ0VTXSk7XHJcbiAgICBpZiAoaXNPcGVuU2hpZnQpIHtcclxuICAgICAgYW5zd2VyID0gYW5zd2VyLmNvbmNhdChvc1R5cGVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFuc3dlciA9IGFuc3dlci5jb25jYXQoS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlRFTVBMQVRFUyk7XHJcbiAgICAgIGFuc3dlciA9IGFuc3dlci5jb25jYXQoS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLkJVSUxEX0NPTkZJR1MpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF8uZmlsdGVyKGFuc3dlciwgZmlsdGVyKTtcclxuICB9XHJcblxyXG4gIHNlbGYuZ2V0T2JqZWN0cyA9IChraW5kOiBzdHJpbmcpID0+IHtcclxuICAgIGlmIChraW5kID09PSBXYXRjaFR5cGVzLk5BTUVTUEFDRVMpIHtcclxuICAgICAgcmV0dXJuIG5hbWVzcGFjZVdhdGNoLm9iamVjdHM7XHJcbiAgICB9XHJcbiAgICBpZiAoa2luZCBpbiBuYW1lc3BhY2VXYXRjaC53YXRjaGVzKSB7XHJcbiAgICAgIHJldHVybiBuYW1lc3BhY2VXYXRjaC53YXRjaGVzW2tpbmRdLm9iamVjdHM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZi5saXN0ZW5lcnMgPSA8QXJyYXk8KE9iamVjdE1hcCkgPT4gdm9pZD4+IFtdO1xyXG5cclxuICAvLyBsaXN0ZW5lciBnZXRzIG5vdGlmaWVkIGFmdGVyIGEgYnVuY2ggb2YgY2hhbmdlcyBoYXZlIG9jY3VycmVkXHJcbiAgc2VsZi5yZWdpc3Rlckxpc3RlbmVyID0gKGZuOihvYmplY3RzOk9iamVjdE1hcCkgPT4gdm9pZCkgPT4ge1xyXG4gICAgc2VsZi5saXN0ZW5lcnMucHVzaChmbik7XHJcbiAgfVxyXG5cclxuICB2YXIgcHJvamVjdHNIYW5kbGUgPSA8YW55PiB1bmRlZmluZWQ7XHJcblxyXG4gIC8vIGtpY2sgb2ZmIHRoZSBwcm9qZWN0IHdhdGNoZXIgYSBiaXQgc29vbmVyIGFsc29cclxuICBoYXd0aW9QbHVnaW5Mb2FkZXIucmVnaXN0ZXJQcmVCb290c3RyYXBUYXNrKHtcclxuICAgIG5hbWU6ICdQcm9qZWN0c1dhdGNoZXInLFxyXG4gICAgZGVwZW5kczogWydLdWJlcm5ldGVzQXBpRGlzY292ZXJ5J10sXHJcbiAgICB0YXNrOiAobmV4dCkgPT4ge1xyXG4gICAgICBpZiAoaXNPcGVuU2hpZnQpIHtcclxuXHJcbiAgICAgICAgcHJvamVjdHNIYW5kbGUgPSBLdWJlcm5ldGVzQVBJLndhdGNoKHtcclxuICAgICAgICAgIGtpbmQ6IEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5QUk9KRUNUUyxcclxuICAgICAgICAgIG5hbWVzcGFjZTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgc3VjY2VzczogKG9iamVjdHMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHNlbGYubGlzdGVuZXJzICYmIHNlbGYubGlzdGVuZXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImdvdCBwcm9qZWN0czogXCIsIG9iamVjdHMpO1xyXG4gICAgICAgICAgICAgIF8uZm9yRWFjaChzZWxmLmxpc3RlbmVycywgKGxpc3RlbmVyOihvYmplY3RzOk9iamVjdE1hcCkgPT4gdm9pZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGlzdGVuZXIoe1xyXG4gICAgICAgICAgICAgICAgICBwcm9qZWN0czogb2JqZWN0c1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBuZXh0KCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG5cclxuX21vZHVsZS5zZXJ2aWNlKCdXYXRjaGVyU2VydmljZScsIFsndXNlckRldGFpbHMnLCAnJHJvb3RTY29wZScsICckdGltZW91dCcsICh1c2VyRGV0YWlscywgJHJvb3RTY29wZSwgJHRpbWVvdXQpID0+IHtcclxuICAgIHJldHVybiBzZWxmO1xyXG59XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJ3YXRjaGVyLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICB2YXIgbG9nID0gTG9nZ2VyLmdldChcImt1YmVybmV0ZXMtdGVybS13aW5kb3dzXCIpO1xyXG5cclxuICBfbW9kdWxlLmNvbmZpZygoa3ViZXJuZXRlc0NvbnRhaW5lclNvY2tldFByb3ZpZGVyKSA9PiB7XHJcbiAgICBrdWJlcm5ldGVzQ29udGFpbmVyU29ja2V0UHJvdmlkZXIuV2ViU29ja2V0RmFjdG9yeSA9IFwiQ3VzdG9tV2ViU29ja2V0c1wiO1xyXG4gIH0pO1xyXG5cclxuICBfbW9kdWxlLmZhY3RvcnkoJ0N1c3RvbVdlYlNvY2tldHMnLCAodXNlckRldGFpbHM6YW55KSA9PiB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gQ3VzdG9tV2ViU29ja2V0KHVybCwgcHJvdG9jb2xzKSB7XHJcbiAgICAgIHZhciBwYXRocyA9IHVybC5zcGxpdCgnPycpO1xyXG4gICAgICBpZiAoIV8uc3RhcnRzV2l0aChwYXRoc1swXSwgbWFzdGVyQXBpVXJsKCkpKSB7XHJcbiAgICAgICAgcGF0aHNbMF0gPSBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIHBhdGhzWzBdKTtcclxuICAgICAgfVxyXG4gICAgICB1cmwgPSBLdWJlcm5ldGVzQVBJLndzVXJsKHBhdGhzWzBdKTtcclxuICAgICAgdXJsLnNlYXJjaChwYXRoc1sxXSArICcmYWNjZXNzX3Rva2VuPScgKyB1c2VyRGV0YWlscy50b2tlbik7XHJcbiAgICAgIGxvZy5kZWJ1ZyhcIlVzaW5nIHdzIHVybDogXCIsIHVybC50b1N0cmluZygpKTtcclxuICAgICAgcmV0dXJuIG5ldyBXZWJTb2NrZXQodXJsLnRvU3RyaW5nKCksIHByb3RvY29scyk7XHJcbiAgICB9O1xyXG4gIH0pO1xyXG5cclxuICBfbW9kdWxlLnNlcnZpY2UoJ1Rlcm1pbmFsU2VydmljZScsICgkcm9vdFNjb3BlLCAkZG9jdW1lbnQsICRjb21waWxlLCAkaW50ZXJ2YWwsICR0ZW1wbGF0ZUNhY2hlKSA9PiB7XHJcbiAgICB2YXIgYm9keSA9ICRkb2N1bWVudC5maW5kKCdib2R5Jyk7XHJcbiAgICBmdW5jdGlvbiBwb3NpdGlvblRlcm1pbmFscyh0ZXJtaW5hbHMpIHtcclxuICAgICAgdmFyIHRvdGFsID0gXy5rZXlzKHRlcm1pbmFscykubGVuZ3RoO1xyXG4gICAgICB2YXIgZGlzdCA9IChib2R5LndpZHRoKCkgLSAyMjUpIC8gdG90YWw7XHJcbiAgICAgIHZhciBwb3NpdGlvbiA9IDU7XHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaCh0ZXJtaW5hbHMsICh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZS5zY29wZS5kb2NrZWQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFsdWUuZWwuY3NzKCdsZWZ0JywgcG9zaXRpb24gKyAncHgnKTtcclxuICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgZGlzdDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB2YXIgZGVmYXVsdFRlbXBsYXRlID0gJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsICd0ZXJtU2hlbGwuaHRtbCcpKTtcclxuICAgIHZhciBzZWxmID0ge1xyXG4gICAgICBwb3NpdGlvblRlcm1pbmFsczogKCkgPT4ge1xyXG4gICAgICAgIHBvc2l0aW9uVGVybWluYWxzKHNlbGYudGVybWluYWxzKTtcclxuICAgICAgfSxcclxuICAgICAgdGVybWluYWxzOiB7fSxcclxuICAgICAgaHR0cFRhc2s6IHt9LFxyXG4gICAgICBuZXdUZXJtaW5hbDogKCRpbnRlcnZhbCwgcG9kTGluaywgY29udGFpbmVyTmFtZSwgZW50aXR5LCB0ZW1wbGF0ZSA9IGRlZmF1bHRUZW1wbGF0ZSkgPT4ge1xyXG4gICAgICAgIHZhciB0ZXJtaW5hbElkID0gVXJsSGVscGVycy5qb2luKHBvZExpbmssIGNvbnRhaW5lck5hbWUpO1xyXG4gICAgICAgIGlmICh0ZXJtaW5hbElkIGluIHNlbGYudGVybWluYWxzKSB7XHJcbiAgICAgICAgICBsb2cuZGVidWcoXCJBbHJlYWR5IGEgdGVybWluYWwgd2l0aCBpZDogXCIsIHRlcm1pbmFsSWQpO1xyXG4gICAgICAgICAgc2VsZi5yYWlzZVRlcm1pbmFsKHRlcm1pbmFsSWQpO1xyXG4gICAgICAgICAgcmV0dXJuIHRlcm1pbmFsSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzY29wZSA9ICRyb290U2NvcGUuJG5ldygpO1xyXG4gICAgICAgIGdldExvZ3MoZW50aXR5LCBzY29wZSk7XHJcbiAgICAgICAgc2NvcGUucG9kTGluayA9IHBvZExpbms7XHJcbiAgICAgICAgc2NvcGUuY29udGFpbmVyTmFtZSA9IGNvbnRhaW5lck5hbWU7XHJcbiAgICAgICAgc2NvcGUuaWQgPSB0ZXJtaW5hbElkO1xyXG4gICAgICAgIHNjb3BlLmRvY2tlZCA9IHRydWU7XHJcbiAgICAgICAgaWYodGVybWluYWxJZCBpbiBzZWxmLmh0dHBUYXNrKXtcclxuICAgICAgICAgICBzZWxmLnJhaXNlVGVybWluYWwodGVybWluYWxJZCk7XHJcbiAgICAgICAgICAgcmV0dXJuIHRlcm1pbmFsSWQ7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgc2VsZi5odHRwVGFza1t0ZXJtaW5hbElkXSA9ICRpbnRlcnZhbCgoKSA9PntcclxuICAgICAgICAgICAgICBnZXRMb2dzKGVudGl0eSwgc2NvcGUpO1xyXG4gICAgICAgICAgIH0sMjAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBlbCA9ICQoJGNvbXBpbGUodGVtcGxhdGUpKHNjb3BlKSk7XHJcbiAgICAgICAgdmFyIHRlcm0gPSB7XHJcbiAgICAgICAgICBzY29wZTogc2NvcGUsXHJcbiAgICAgICAgICBlbDogZWxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJvZHkuYXBwZW5kKGVsKTtcclxuICAgICAgICBzZWxmLnRlcm1pbmFsc1t0ZXJtaW5hbElkXSA9IHRlcm07XHJcbiAgICAgICAgcG9zaXRpb25UZXJtaW5hbHMoc2VsZi50ZXJtaW5hbHMpO1xyXG4gICAgICAgIHJldHVybiB0ZXJtaW5hbElkO1xyXG4gICAgICB9LFxyXG4gICAgICBjbG9zZVRlcm1pbmFsOiAoaWQpID0+IHtcclxuICAgICAgICB2YXIgdGVybSA9IHNlbGYudGVybWluYWxzW2lkXTtcclxuICAgICAgICB2YXIgdGltZXIgPSBzZWxmLmh0dHBUYXNrW2lkXTtcclxuICAgICAgICBpZih0aW1lcil7XHJcbiAgICAgICAgICAkaW50ZXJ2YWwuY2FuY2VsKHRpbWVyKTtcclxuICAgICAgICAgIGRlbGV0ZSBzZWxmLmh0dHBUYXNrW2lkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRlcm0pIHtcclxuICAgICAgICAgIHRlcm0uZWwucmVtb3ZlKCk7XHJcbiAgICAgICAgICBkZWxldGUgc2VsZi50ZXJtaW5hbHNbaWRdO1xyXG4gICAgICAgICAgcG9zaXRpb25UZXJtaW5hbHMoc2VsZi50ZXJtaW5hbHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgcmFpc2VUZXJtaW5hbDogKGlkKSA9PiB7XHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKHNlbGYudGVybWluYWxzLCAodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGtleSA9PT0gaWQpIHtcclxuICAgICAgICAgICAgdmFsdWUuZWwuY3NzKCd6LWluZGV4JywgJzQwMDAnKTtcclxuICAgICAgICAgICAgdmFsdWUuZWwuZmluZCgnLnRlcm1pbmFsJykuZm9jdXMoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhbHVlLmVsLmNzcygnei1pbmRleCcsICczMDAwJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gc2VsZjtcclxuICB9KTtcclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGFkZFdpbmRvd0FjdGlvbnMoc2NvcGUsIGVsZW1lbnQsIFRlcm1pbmFsU2VydmljZSkge1xyXG4gICAgdmFyIG1vdmVkID0gZmFsc2U7XHJcbiAgICB2YXIgbGFzdFggPSAwO1xyXG4gICAgdmFyIGxhc3RZID0gMDtcclxuICAgIHZhciBoZWFkZXIgPSBlbGVtZW50LmZpbmQoJy50ZXJtaW5hbC10aXRsZScpO1xyXG4gICAgdmFyIGJvZHkgPSBlbGVtZW50LmZpbmQoJy50ZXJtaW5hbC1ib2R5Jyk7XHJcbiAgICBlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcclxuICAgICAgJCgnI21haW4nKS5jc3MoeyBkaXNwbGF5OiAnaW5oZXJpdCcgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB2YXIgSEVJR0hUID0gMzQ4O1xyXG4gICAgdmFyIFdJRFRIID0gNjAwO1xyXG4gICAgdmFyIFRJVExFX0hFSUdIVCA9IDM1O1xyXG4gICAgdmFyIE5BVl9PRkZTRVQgPSA0NjtcclxuXHJcbiAgICBlbGVtZW50LmNzcyh7XHJcbiAgICAgIGhlaWdodDogSEVJR0hULFxyXG4gICAgICB3aWR0aDogV0lEVEhcclxuICAgIH0pO1xyXG4gICAgaGVhZGVyLmNzcyh7XHJcbiAgICAgIGhlaWdodDogVElUTEVfSEVJR0hUXHJcbiAgICB9KTtcclxuICAgIGJvZHkuY3NzKHtcclxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXHJcbiAgICAgIHRvcDogMzUsXHJcbiAgICAgIGxlZnQ6IDAsXHJcbiAgICAgIHJpZ2h0OiAwLCBcclxuICAgICAgYm90dG9tOiAwXHJcbiAgICB9KTtcclxuICAgIHNjb3BlLmNsb3NlID0gKCkgPT4ge1xyXG4gICAgICBUZXJtaW5hbFNlcnZpY2UuY2xvc2VUZXJtaW5hbChzY29wZS5pZCk7XHJcbiAgICB9O1xyXG4gICAgc2NvcGUucmFpc2UgPSAoKSA9PiB7XHJcbiAgICAgIFRlcm1pbmFsU2VydmljZS5yYWlzZVRlcm1pbmFsKHNjb3BlLmlkKTtcclxuICAgIH07XHJcbiAgICBzY29wZS4kd2F0Y2goJ2RvY2tlZCcsIChkb2NrZWQpID0+IHtcclxuICAgICAgaWYgKGRvY2tlZCkge1xyXG4gICAgICAgIGVsZW1lbnQud2lkdGgoV0lEVEgpO1xyXG4gICAgICAgIGlmICghZWxlbWVudC5oYXNDbGFzcygnbWluaW1pemVkJykpIHtcclxuICAgICAgICAgIGVsZW1lbnQuaGVpZ2h0KEhFSUdIVCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHNjb3BlLnN0YXJ0UmVzaXplID0gKGUpID0+IHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBsb2cuZGVidWcoXCJTdGFydCByZXNpemVcIik7XHJcbiAgICAgIHNjb3BlLnJlc2l6aW5nID0gdHJ1ZTtcclxuICAgICAgZWxlbWVudC5vbignbW91c2V1cCcsIHNjb3BlLnN0b3BSZXNpemUpO1xyXG4gICAgICAkKGRvY3VtZW50KS5vbignbW91c2Vtb3ZlJywgc2NvcGUuZG9SZXNpemUpO1xyXG4gICAgICAkKGRvY3VtZW50KS5vbignbW91c2VsZWF2ZScsIHNjb3BlLnN0b3BSZXNpemUpO1xyXG4gICAgfTtcclxuICAgIHNjb3BlLmRvUmVzaXplID0gKGUpID0+IHtcclxuICAgICAgaWYgKHNjb3BlLnJlc2l6aW5nKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiUmVzaXppbmcsIGU6IFwiLCBlKTtcclxuICAgICAgICBpZiAoIW1vdmVkKSB7XHJcbiAgICAgICAgICBsYXN0WCA9IGUuY2xpZW50WDtcclxuICAgICAgICAgIGxhc3RZID0gZS5jbGllbnRZO1xyXG4gICAgICAgICAgbW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5oZWlnaHQoKTtcclxuICAgICAgICB2YXIgd2lkdGggPSBlbGVtZW50LndpZHRoKCk7XHJcbiAgICAgICAgdmFyIGRlbHRhWCA9IGUuY2xpZW50WCAtIGxhc3RYO1xyXG4gICAgICAgIHZhciBkZWx0YVkgPSBlLmNsaWVudFkgLSBsYXN0WTtcclxuICAgICAgICB2YXIgbmV3SGVpZ2h0ID0gaGVpZ2h0ICsgZGVsdGFZO1xyXG4gICAgICAgIHZhciBuZXdXaWR0aCA9IHdpZHRoICsgZGVsdGFYO1xyXG4gICAgICAgIGlmIChuZXdIZWlnaHQgPiAzNSAmJiBuZXdXaWR0aCA+IDgwKSB7XHJcbiAgICAgICAgICBlbGVtZW50LmhlaWdodChoZWlnaHQgKyBkZWx0YVkpO1xyXG4gICAgICAgICAgZWxlbWVudC53aWR0aCh3aWR0aCArIGRlbHRhWCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxhc3RYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgc2NvcGUuc3RvcFJlc2l6ZSA9IChlKSA9PiB7XHJcbiAgICAgIHNjb3BlLnJlc2l6aW5nID0gZmFsc2U7XHJcbiAgICAgIG1vdmVkID0gZmFsc2U7XHJcbiAgICAgIGVsZW1lbnQub2ZmKCdtb3VzZXVwJywgc2NvcGUuc3RvcFJlc2l6ZSk7XHJcbiAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2Vtb3ZlJywgc2NvcGUuZG9SZXNpemUpO1xyXG4gICAgICAkKGRvY3VtZW50KS5vZmYoJ21vdXNlbGVhdmUnLCBzY29wZS5zdG9wUmVzaXplKTtcclxuICAgIH1cclxuICAgIHNjb3BlLm1vdXNlRG93biA9IChlKSA9PiB7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoJ21pbmltaXplZCcpIHx8IGVsZW1lbnQuaGFzQ2xhc3MoJ21heGltaXplZCcpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHNjb3BlLmRyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgZWxlbWVudC5vbignbW91c2V1cCcsIHNjb3BlLm1vdXNlVXApO1xyXG4gICAgICAkKGRvY3VtZW50KS5vbignbW91c2Vtb3ZlJywgc2NvcGUubW91c2VNb3ZlKTtcclxuICAgICAgJChkb2N1bWVudCkub24oJ21vdXNlbGVhdmUnLCBzY29wZS5tb3VzZVVwKTtcclxuICAgIH07XHJcbiAgICBzY29wZS5tb3VzZVVwID0gKGUpID0+IHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBzY29wZS5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICBtb3ZlZCA9IGZhbHNlO1xyXG4gICAgICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5oZWlnaHQoKTtcclxuICAgICAgdmFyIG9mZnNldCA9IGVsZW1lbnQub2Zmc2V0KCk7XHJcbiAgICAgIHZhciB3aW5IZWlnaHQgPSAkKHdpbmRvdykuaGVpZ2h0KCk7XHJcbiAgICAgIGlmIChvZmZzZXQudG9wID4gKHdpbkhlaWdodCAtIGhlaWdodCAtIDIwKSkge1xyXG4gICAgICAgIGVsZW1lbnQuY3NzKHsgdG9wOiBcImluaGVyaXRcIiwgbGVmdDogXCJpbmhlcml0XCIgfSk7XHJcbiAgICAgICAgc2NvcGUuZG9ja2VkID0gdHJ1ZTtcclxuICAgICAgICBUZXJtaW5hbFNlcnZpY2UucG9zaXRpb25UZXJtaW5hbHMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzY29wZS5kb2NrZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBlbGVtZW50Lm9mZignbW91c2V1cCcsIHNjb3BlLm1vdXNlVXApO1xyXG4gICAgICAkKGRvY3VtZW50KS5vZmYoJ21vdXNlbW92ZScsIHNjb3BlLm1vdXNlTW92ZSk7XHJcbiAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2VsZWF2ZScsIHNjb3BlLm1vdXNlVXApO1xyXG4gICAgfTtcclxuICAgIHNjb3BlLm1vdXNlTW92ZSA9IChlKSA9PiB7XHJcbiAgICAgIGlmIChzY29wZS5kcmFnZ2luZykge1xyXG4gICAgICAgIGlmICghbW92ZWQpIHtcclxuICAgICAgICAgIGxhc3RYID0gZS5jbGllbnRYO1xyXG4gICAgICAgICAgbGFzdFkgPSBlLmNsaWVudFk7XHJcbiAgICAgICAgICBtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkZWx0YVggPSBlLmNsaWVudFggLSBsYXN0WDtcclxuICAgICAgICB2YXIgZGVsdGFZID0gZS5jbGllbnRZIC0gbGFzdFk7XHJcbiAgICAgICAgdmFyIGVsT2Zmc2V0ID0gZWxlbWVudC5vZmZzZXQoKTtcclxuICAgICAgICBlbGVtZW50Lm9mZnNldCh7IHRvcDogZWxPZmZzZXQudG9wICsgZGVsdGFZLCBsZWZ0OiBlbE9mZnNldC5sZWZ0ICsgZGVsdGFYIH0pO1xyXG4gICAgICAgIGxhc3RYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcmVzdG9yZVdpbmRvdyhzY29wZSwgZWxlbWVudCkge1xyXG4gICAgICBpZiAoc2NvcGUub2Zmc2V0KSB7XHJcbiAgICAgICAgZWxlbWVudC5vZmZzZXQoc2NvcGUub2Zmc2V0KTtcclxuICAgICAgICBzY29wZS5kb2NrZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2NvcGUuaGVpZ2h0KSB7XHJcbiAgICAgICAgZWxlbWVudC5oZWlnaHQoc2NvcGUuaGVpZ2h0KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2NvcGUud2lkdGgpIHtcclxuICAgICAgICBlbGVtZW50LndpZHRoKHNjb3BlLndpZHRoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNhdmVXaW5kb3coc2NvcGUsIGVsZW1lbnQpIHtcclxuICAgICAgc2NvcGUub2Zmc2V0ID0gZWxlbWVudC5vZmZzZXQoKTtcclxuICAgICAgc2NvcGUuaGVpZ2h0ID0gZWxlbWVudC5oZWlnaHQoKTtcclxuICAgICAgc2NvcGUud2lkdGggPSBlbGVtZW50LndpZHRoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2NvcGUubWF4aW1pemVkID0gKCkgPT4ge1xyXG4gICAgICByZXR1cm4gZWxlbWVudC5oYXNDbGFzcygnbWF4aW1pemVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2NvcGUubWF4aW1pemUgPSAoJGUpID0+IHtcclxuICAgICAgJGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoJ21pbmltaXplZCcpKSB7XHJcbiAgICAgICAgc2NvcGUubWluaW1pemUoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygnbWF4aW1pemVkJykpIHtcclxuICAgICAgICByZXN0b3JlV2luZG93KHNjb3BlLCBlbGVtZW50KTtcclxuICAgICAgICAkKCcjbWFpbicpLmNzcyh7IGRpc3BsYXk6ICdpbmhlcml0JyB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzYXZlV2luZG93KHNjb3BlLCBlbGVtZW50KTtcclxuICAgICAgICAkKCcjbWFpbicpLmNzcyh7IGRpc3BsYXk6ICdub25lJyB9KTtcclxuICAgICAgICBlbGVtZW50LmNzcyh7IFxyXG4gICAgICAgICAgaGVpZ2h0OiAnaW5oZXJpdCcsIFxyXG4gICAgICAgICAgYm90dG9tOiAwLCBcclxuICAgICAgICAgIHdpZHRoOiAnMTAwJScsIFxyXG4gICAgICAgICAgdG9wOiBOQVZfT0ZGU0VULCBcclxuICAgICAgICAgIGxlZnQ6IDAgXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxlbWVudC50b2dnbGVDbGFzcygnbWF4aW1pemVkJyk7XHJcbiAgICB9XHJcbiAgICBzY29wZS5taW5pbWl6ZSA9ICgkZSkgPT4ge1xyXG4gICAgICAkZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygnbWF4aW1pemVkJykpIHtcclxuICAgICAgICBzY29wZS5tYXhpbWl6ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50Lmhhc0NsYXNzKCdtaW5pbWl6ZWQnKSkge1xyXG4gICAgICAgIHJlc3RvcmVXaW5kb3coc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNhdmVXaW5kb3coc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgICAgIHNjb3BlLmRvY2tlZCA9IHRydWU7XHJcbiAgICAgICAgZWxlbWVudC5jc3MoeyBoZWlnaHQ6IFRJVExFX0hFSUdIVCwgdG9wOiBcImluaGVyaXRcIiwgbGVmdDogXCJpbmhlcml0XCIgfSk7XHJcbiAgICAgICAgVGVybWluYWxTZXJ2aWNlLnBvc2l0aW9uVGVybWluYWxzKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxlbWVudC50b2dnbGVDbGFzcygnbWluaW1pemVkJyk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgX21vZHVsZS5kaXJlY3RpdmUoJ3Rlcm1pbmFsV2luZG93JywgKCRjb21waWxlLCBUZXJtaW5hbFNlcnZpY2UpID0+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlc3RyaWN0OiAnQScsXHJcbiAgICAgIHNjb3BlOiBmYWxzZSxcclxuICAgICAgbGluazogKHNjb3BlOmFueSwgZWxlbWVudCwgYXR0cikgPT4ge1xyXG4gICAgICAgIGFkZFdpbmRvd0FjdGlvbnMoc2NvcGUsIGVsZW1lbnQsIFRlcm1pbmFsU2VydmljZSk7XHJcbiAgICAgICAgdmFyIGJvZHkgPSBlbGVtZW50LmZpbmQoJy50ZXJtaW5hbC1ib2R5Jyk7XHJcbiAgICAgICAgYm9keS5hcHBlbmQoJGNvbXBpbGUoJzxrdWJlcm5ldGVzLWNvbnRhaW5lci10ZXJtaW5hbCBwb2Q9XCJwb2RMaW5rXCIgY29udGFpbmVyPVwiY29udGFpbmVyTmFtZVwiIGNvbW1hbmQ9XCJiYXNoXCI+PC9rdWJlcm5ldGVzLWNvbnRhaW5lci10ZXJtaW5hbD4nKShzY29wZSkpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH0pO1xyXG5cclxuICBmdW5jdGlvbiBnZXRMb2dzKHJjLCBzY29wZSl7XHJcbiAgICAgY29uc29sZS5sb2coc2NvcGUpO1xyXG4gICAgIHZhciB4aHI9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYoeGhyLnJlYWR5U3RhdGUgPT0gNCl7XHJcbiAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKXtcclxuICAgICAgICAgICAgICAgdmFyIG9iaj1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICB2YXIgdGV4dCA9IG9iai5sb2dDb250ZW50LnJlcGxhY2UoL1xcXFxuL2dtaSwgJ1xcclxcbicpO1xyXG4gICAgICAgICAgICAgICBzY29wZS5sb2dzID0gdGV4dDtcclxuICAgICAgICAgICAgICAgLy9yZXR1cm4gKHt0ZXh0OiBcImFhYWFhYVwifSk7XHJcblxyXG4gICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAvL2xvZyA9IFwi5b2T5YmN5rKh5pyJ5Y+v5Lul5p+l55yL55qE5pel5b+X77yBXCI7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICB9XHJcbiAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIFwiL29yYWNsZUV4dHJhY3RMb2c/cmNOYW1lPVwiICsgZ2V0TmFtZShyYyksZmFsc2UpO1xyXG4gICAgIHhoci5zZW5kKG51bGwpO1xyXG4gIH1cclxufVxyXG5cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJ0ZXJtLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICB2YXIgbG9nID0gTG9nZ2VyLmdldChcImt1YmVybmV0ZXMtcG9kLWxvZ3NcIik7XHJcblxyXG4gIF9tb2R1bGUuc2VydmljZShcIlBvZExvZ1JlcGxhY2VtZW50c1wiLCAoKSA9PiB7XHJcbiAgICByZXR1cm4gW107XHJcbiAgfSk7XHJcblxyXG4gIF9tb2R1bGUucnVuKChQb2RMb2dSZXBsYWNlbWVudHMpID0+IHtcclxuICAgIHZhciBsb2cgPSBMb2dnZXIuZ2V0KFwicG9kLWxvZy1yZXBsYWNlcnNcIik7XHJcbiAgICAvLyBBZGQgQU5TSSBlc2NhcGUgY2hhcmFjdGVyIHJlcGxhY2VyXHJcbiAgICAvLyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21tYWxlY2tpL2Fuc2lzcGFuXHJcbiAgICB2YXIgY29sb3JzID0ge1xyXG4gICAgICAnMzAnOiAnYmxhY2snLFxyXG4gICAgICAnMzEnOiAncmVkJyxcclxuICAgICAgJzMyJzogJ2dyZWVuJyxcclxuICAgICAgJzMzJzogJ3llbGxvdycsXHJcbiAgICAgICczNCc6ICdibHVlJyxcclxuICAgICAgJzM1JzogJ3B1cnBsZScsXHJcbiAgICAgICczNic6ICdjeWFuJyxcclxuICAgICAgJzM3JzogJ3doaXRlJyBcclxuICAgIH1cclxuICAgIFBvZExvZ1JlcGxhY2VtZW50cy5wdXNoKChtc2cpID0+IHtcclxuICAgICAgaWYgKCFtc2cpIHtcclxuICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBlbmQgPSBcIjwvc3Bhbj5cIjtcclxuICAgICAgXy5mb3JPd24oY29sb3JzLCAoY29sb3IsIGNvZGUpID0+IHtcclxuICAgICAgICB2YXIgc3RhcnQgPSBgPHNwYW4gY2xhc3M9XCJgICsgY29sb3IgKyBgXCI+YDtcclxuICAgICAgICBtc2cgPSBtc2cucmVwbGFjZShuZXcgUmVnRXhwKCdcXDAzM1xcXFxbJyArIGNvZGUgKyAnbScsICdnJyksIHN0YXJ0KVxyXG4gICAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcMDMzXFxcXFswOycgKyBjb2RlICsgJ20nLCAnZycpLCBzdGFydCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvXFwwMzNcXFsxbS9nLCAnPGI+JykucmVwbGFjZSgvXFwwMzNcXFsyMm0vZywgJzwvYj4nKTtcclxuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcMDMzXFxbM20vZywgJzxpPicpLnJlcGxhY2UoL1xcMDMzXFxbMjNtL2csICc8L2k+Jyk7XHJcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcW20vZywgZW5kKTtcclxuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcMDMzXFxbMG0vZywgZW5kKTtcclxuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcMDMzXFxbMzltL2csIGVuZCk7XHJcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcWzJtL2csICc8c3Bhbj4nKTtcclxuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcMDMzXFxbMDszOW0vZywgZW5kKTtcclxuICAgICAgbG9nLmRlYnVnKFwiUnVubmluZyByZXBsYWNlbWVudCBvbiBtZXNzYWdlOiBcIiwgbXNnKTtcclxuICAgICAgcmV0dXJuIG1zZztcclxuICAgIH0pO1xyXG4gIH0pO1xyXG5cclxuICBfbW9kdWxlLmNvbnRyb2xsZXIoXCJLdWJlcm5ldGVzLlBvZExvZ0xpbmtDb250cm9sbGVyXCIsICgkc2NvcGUsICRpbnRlcnZhbCwgVGVybWluYWxTZXJ2aWNlLCAkdGVtcGxhdGVDYWNoZSkgPT4ge1xyXG5cclxuICAgICRzY29wZS5vcGVuTG9ncyA9IChlbnRpdHkpID0+IHtcclxuICAgICAgbG9nLmRlYnVnKFwiT3BlbiBsb2dzOiBcIiwgZW50aXR5KTtcclxuICAgICAgVGVybWluYWxTZXJ2aWNlLm5ld1Rlcm1pbmFsKCRpbnRlcnZhbCwgZW50aXR5Lm1ldGFkYXRhLnNlbGZMaW5rLCBlbnRpdHkuJG9yYWNsZU5hbWUsIGVudGl0eSwkdGVtcGxhdGVDYWNoZS5nZXQoVXJsSGVscGVycy5qb2luKHRlbXBsYXRlUGF0aCwgJ2xvZ1NoZWxsLmh0bWwnKSkpO1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgX21vZHVsZS5kaXJlY3RpdmUoJ3BvZExvZ0Rpc3BsYXknLCAodXNlckRldGFpbHMsIFBvZExvZ1JlcGxhY2VtZW50cykgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdHJpY3Q6ICdFJyxcclxuICAgICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9kLWxvZy1saW5lc1wiPlxyXG4gICAgICAgICAgPHAgbmctaGlkZT1cImZldGNoZWRcIj5QbGVhc2Ugd2FpdCwgZmV0Y2hpbmcgbG9ncy4uLjwvcD5cclxuICAgICAgICAgIDxwIG5nLWhpZGU9XCJtZXNzYWdlcy5sZW5ndGggfHwgcHJldmlvdXNcIj5WaWV3IDxhIGhyZWY9XCJcIiBuZy1jbGljaz1cInByZXZpb3VzPSFwcmV2aW91c1wiPnByZXZpb3VzIGNvbnRhaW5lciBsb2dzPC9hPj88L3A+XHJcbiAgICAgICAgICA8cCBuZy1yZXBlYXQ9XCJtZXNzYWdlIGluIG1lc3NhZ2VzIHRyYWNrIGJ5ICRpbmRleFwiIG5nLWJpbmQtaHRtbD1cIm1lc3NhZ2VcIj48L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIGAsXHJcbiAgICAgIGxpbms6IChzY29wZTphbnksIGVsZW1lbnQsIGF0dHIpID0+IHtcclxuICAgICAgICB2YXIgbGluayA9IHNjb3BlLiRldmFsKCdwb2RMaW5rJyk7XHJcbiAgICAgICAgdmFyIG5hbWUgPSBzY29wZS4kZXZhbCgnY29udGFpbmVyTmFtZScpO1xyXG5cclxuICAgICAgICBpZiAoIWxpbmspIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNjb3BlLmZldGNoZWQgPSBmYWxzZTtcclxuICAgICAgICBzY29wZS5wcmV2aW91cyA9IGZhbHNlO1xyXG4gICAgICAgIHNjb3BlLm1lc3NhZ2VzID0gW107XHJcblxyXG4gICAgICAgIGxpbmsgPSBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIGxpbmssICdsb2cnKTtcclxuICAgICAgICBsaW5rID0gS3ViZXJuZXRlc0FQSS53c1VybChsaW5rKTtcclxuICAgICAgICBsaW5rLnNlYXJjaCh7XHJcbiAgICAgICAgICBmb2xsb3c6IHRydWUsXHJcbiAgICAgICAgICB0YWlsTGluZXM6IDEwMDAsXHJcbiAgICAgICAgICBhY2Nlc3NfdG9rZW46IHVzZXJEZXRhaWxzLnRva2VuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHZhciBtZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgcHVsbE1lc3NhZ2VzID0gXy5kZWJvdW5jZSgoKSA9PiB7XHJcbiAgICAgICAgICBzY29wZS5tZXNzYWdlcyA9IHNjb3BlLm1lc3NhZ2VzLmNvbmNhdChfLnJlbW92ZShtZXNzYWdlcywgKCkgPT4gdHJ1ZSkubWFwKChtc2cpID0+IHtcclxuICAgICAgICAgICAgUG9kTG9nUmVwbGFjZW1lbnRzLmZvckVhY2goKHJlcGxGdW5jOmFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24ocmVwbEZ1bmMpKSB7XHJcbiAgICAgICAgICAgICAgICBtc2cgPSByZXBsRnVuYyhtc2cpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBtc2c7XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICBpZiAoIXNjb3BlLmZldGNoZWQpIHtcclxuICAgICAgICAgICAgc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBDb3JlLiRhcHBseShzY29wZSk7XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGluaXRTb2NrZXQobGluaykge1xyXG4gICAgICAgICAgc2NvcGUuZmV0Y2hlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgbWVzc2FnZXMubGVuZ3RoID0gMDtcclxuICAgICAgICAgIHNjb3BlLm1lc3NhZ2VzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICB2YXIgd3MgPSBuZXcgV2ViU29ja2V0KGxpbmsudG9TdHJpbmcoKSwgJ2Jhc2U2NC5iaW5hcnkuazhzLmlvJyk7XHJcbiAgICAgICAgICB3cy5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IHdpbmRvdy5hdG9iKGV2ZW50LmRhdGEpO1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgcHVsbE1lc3NhZ2VzKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgIC8vIHdlJ2xsIGp1c3QgaWdub3JlIHRoZXNlXHJcbiAgICAgICAgICAgICAgLy9sb2cuZGVidWcoXCJGYWlsZWQgdG8gZGVjb2RlIG1lc3NhZ2U6IFwiLCBldmVudC5kYXRhLCBcIiBlcnJvcjogXCIsIGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB3cztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB3cyA9IGluaXRTb2NrZXQobGluayk7XHJcblxyXG4gICAgICAgIHNjb3BlLiR3YXRjaCgncHJldmlvdXMnLCAodmFsdWUsIG9sZCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSBvbGQpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmsuaGFzU2VhcmNoKCdwcmV2aW91cycpKSB7XHJcbiAgICAgICAgICAgICAgbGluay5yZW1vdmVTZWFyY2goJ3ByZXZpb3VzJykuYWRkU2VhcmNoKCdwcmV2aW91cycsIHNjb3BlLnByZXZpb3VzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsaW5rLmFkZFNlYXJjaCgncHJldmlvdXMnLCBzY29wZS5wcmV2aW91cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd3MuY2xvc2UoKTtcclxuICAgICAgICAgICAgd3MgPSBpbml0U29ja2V0KGxpbmspO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcclxuICAgICAgICAgIGlmICh3cykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIHdzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG9cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWxldGUgd3M7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgX21vZHVsZS5kaXJlY3RpdmUoJ3BvZExvZ1dpbmRvdycsICgkY29tcGlsZSwgVGVybWluYWxTZXJ2aWNlKSA9PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZXN0cmljdDogJ0EnLFxyXG4gICAgICBzY29wZTogZmFsc2UsXHJcbiAgICAgIGxpbms6IChzY29wZTphbnksIGVsZW1lbnQsIGF0dHIpID0+IHtcclxuICAgICAgICBhZGRXaW5kb3dBY3Rpb25zKHNjb3BlLCBlbGVtZW50LCBUZXJtaW5hbFNlcnZpY2UpO1xyXG4gICAgICAgIHNjb3BlLmF0Qm90dG9tID0gdHJ1ZTtcclxuICAgICAgICBzY29wZS4kd2F0Y2goJ2F0Qm90dG9tJywgKHZhbCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJhdEJvdHRvbTogXCIsIHZhbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfSk7XHJcblxyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJ1dGlsSGVscGVycy50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBFbnZJdGVtID0gY29udHJvbGxlcihcIkVudkl0ZW1cIiwgW1wiJHNjb3BlXCIsICgkc2NvcGUpID0+IHtcclxuICAgIHZhciBwYXJ0cyA9ICRzY29wZS5kYXRhLnNwbGl0KCc9Jyk7XHJcbiAgICAkc2NvcGUua2V5ID0gcGFydHMuc2hpZnQoKTtcclxuICAgICRzY29wZS52YWx1ZSA9IHBhcnRzLmpvaW4oJz0nKTtcclxuICB9XSk7XHJcblxyXG4gIC8vIG1haW4gY29udHJvbGxlciBmb3IgdGhlIHBhZ2VcclxuICBleHBvcnQgdmFyIFBvZHMgPSBjb250cm9sbGVyKFwiUG9kc1wiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzUG9kc1wiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIlNlcnZpY2VSZWdpc3RyeVwiLCBcIiRkaWFsb2dcIiwgXCIkd2luZG93XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNQb2RzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNTdGF0ZSwgU2VydmljZVJlZ2lzdHJ5LCAkZGlhbG9nLCAkd2luZG93LCAkdGVtcGxhdGVDYWNoZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgbG9jYWxTdG9yYWdlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkc2NvcGUuaXRlbVNjaGVtYSA9IEZvcm1zLmNyZWF0ZUZvcm1Db25maWd1cmF0aW9uKCk7XHJcblxyXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICBkYXRhOiAnbW9kZWwucG9kcycsXHJcbiAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcclxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcclxuICAgICAgc2VsZWN0ZWRJdGVtczogW10sXHJcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogJ19rZXknLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcclxuICAgICAgICAgIGRlZmF1bHRTb3J0OiB0cnVlLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpZFRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiAnJHN0YXR1c0NzcycsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ1N0YXR1cycsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcInN0YXR1c1RlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICckZXZlbnRDb3VudCcsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0V2ZW50cycsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImV2ZW50U3VtbWFyeVRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiAnJHJlc3RhcnRDb3VudCcsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ1Jlc3RhcnRzJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6ICckY3JlYXRlZFRpbWUnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdBZ2UnLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJhZ2VUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogJyRpbWFnZU5hbWVzJyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnSW1hZ2VzJyxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiaW1hZ2VUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogJyRob3N0JyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnSG9zdCcsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImhvc3RUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogJyRsYWJlbHNUZXh0JyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTGFiZWxzJyxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFiZWxUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogJyRwb2RJUCcsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ1BvZCBJUCcsXHJcbiAgICAgICAgICBjdXN0b21Tb3J0RmllbGQ6IChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gS3ViZXJuZXRlcy5zb3J0QnlQb2RJcChmaWVsZC4kcG9kSVApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUub3BlbkxvZ3MgPSAoKSA9PiB7XHJcbiAgICAgIHZhciBwb2RzID0gJHNjb3BlLnRhYmxlQ29uZmlnLnNlbGVjdGVkSXRlbXM7XHJcbiAgICAgIGlmICghcG9kcyB8fCAhcG9kcy5sZW5ndGgpIHtcclxuICAgICAgICBpZiAoJHNjb3BlLmlkKSB7XHJcbiAgICAgICAgICB2YXIgaXRlbSA9ICRzY29wZS5pdGVtO1xyXG4gICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgcG9kcyA9IFtpdGVtXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgb3BlbkxvZ3NGb3JQb2RzKFNlcnZpY2VSZWdpc3RyeSwgJHdpbmRvdywgS3ViZXJuZXRlc01vZGVsLmN1cnJlbnROYW1lc3BhY2UoKSwgcG9kcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuXHJcbiAgICAkc2NvcGUuZGVsZXRlUHJvbXB0ID0gKHNlbGVjdGVkKSA9PiB7XHJcbiAgICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKHNlbGVjdGVkKSkge1xyXG4gICAgICAgIHNlbGVjdGVkID0gW3tcclxuICAgICAgICAgIGlkOiBzZWxlY3RlZFxyXG4gICAgICAgIH1dO1xyXG4gICAgICB9XHJcbiAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcclxuICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcclxuICAgICAgICBpbmRleDogJ21ldGFkYXRhLm5hbWUnLFxyXG4gICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZDpBcnJheTxLdWJlUG9kPiwgbmV4dDpLdWJlUG9kKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG5leHQpIHtcclxuICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImRlbGV0aW5nOiBcIiwgZ2V0TmFtZShuZXh0KSk7XHJcbiAgICAgICAgICAgICAgICBLdWJlcm5ldGVzUG9kcy5kZWxldGUoe1xyXG4gICAgICAgICAgICAgICAgICBpZDogZ2V0TmFtZShuZXh0KVxyXG4gICAgICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImRlbGV0ZWQ6IFwiLCBnZXROYW1lKG5leHQpKTtcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGRlbGV0aW5nOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGl0bGU6ICdEZWxldGUgcG9kcz8nLFxyXG4gICAgICAgIGFjdGlvbjogJ1RoZSBmb2xsb3dpbmcgcG9kcyB3aWxsIGJlIGRlbGV0ZWQ6JyxcclxuICAgICAgICBva1RleHQ6ICdEZWxldGUnLFxyXG4gICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcclxuICAgICAgICBjdXN0b206IFwiVGhpcyBvcGVyYXRpb24gaXMgcGVybWFuZW50IG9uY2UgY29tcGxldGVkIVwiLFxyXG4gICAgICAgIGN1c3RvbUNsYXNzOiBcImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIlxyXG4gICAgICB9KS5vcGVuKCk7XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5jcmVhdGVQb2RzPSAoKSA9PiB7XHJcbiAgICAgIHZhciB4aHI9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSA0KSB7Ly806KGo56S65pWw5o2u5bey57uP6LCD55So5a6M5oiQXHJcbiAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApIHsvL0hUVFDnmoTnirbmgIHnoIFcclxuICAgICAgICAgICAgdmFyIG9iaj1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICB2YXIgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAgICBcIm5hbWVcIjogXCJuZXdwb2RcIixcclxuICAgICAgICAgICAgICAgXCJsYWJlbHNcIjoge1xyXG4gICAgICAgICAgICAgICAgIFwiYWltXCI6IFwidGVzdFwiLFxyXG4gICAgICAgICAgICAgICAgIFwiYXBwXCI6IFwib3JhY2xlXCJcclxuICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgXCJwYXRoXCI6ICcvaG9tZS8nLFxyXG4gICAgICAgICAgICAgICBcInBvcnRcIjogMTUyNVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEt1YmVybmV0ZXMuY3JlYXRlUkMob2JqZWN0KTtcclxuXHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgIC8vYWx0ZXIoXCJzaGliYWlcIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICB4aHIub3BlbihcIlBPU1RcIiwgXCIvb3JhY2xlQXBwUGF0aFwiLCBmYWxzZSk7Ly/kuI7mnI3liqHlmajov57mjqXlubblj5HpgIFcclxuICAgICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgICB9O1xyXG4gIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgUmVwbGljYXRpb25Db250cm9sbGVyQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJDb250cm9sbGVyXCIsXHJcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgJHNjb3BlLnJhd01vZGVsID0gbnVsbFxyXG5cclxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuXHJcbiAgICAkc2NvcGUuaXRlbUNvbmZpZyA9IHtcclxuICAgICAgcHJvcGVydGllczoge1xyXG4gICAgICAgICdeXFxcXC9sYWJlbHMkJzoge1xyXG4gICAgICAgICAgdGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldCgnbGFiZWxUZW1wbGF0ZS5odG1sJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsICgpID0+IHtcclxuICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xyXG4gICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkc2NvcGUuJHdhdGNoKCdtb2RlbC5wb2RzJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG4gICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICB9LCB0cnVlKTtcclxuXHJcbiAgICAkc2NvcGUuZmxpcFJhdyA9ICgpID0+IHtcclxuICAgICAgJHNjb3BlLnJhd01vZGUgPSAhJHNjb3BlLnJhd01vZGU7XHJcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcbiAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICBpZiAoJHNjb3BlLmRpcnR5KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG4gICAgICAkc2NvcGUuaXRlbSA9ICRzY29wZS5tb2RlbC5nZXRSZXBsaWNhdGlvbkNvbnRyb2xsZXIoS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlLCAkc2NvcGUuaWQpO1xyXG4gICAgICBpZiAoJHNjb3BlLml0ZW0pIHtcclxuICAgICAgICAkc2NvcGUucmF3TW9kZWwgPSB0b1Jhd1lhbWwoJHNjb3BlLml0ZW0pO1xyXG4gICAgICB9XHJcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICB9XHJcbiAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBSZXBsaWNhdGlvbkNvbnRyb2xsZXJFZGl0Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJFZGl0Q29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTY2hlbWFSZWdpc3RyeVwiLFxyXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIHNjaGVtYXM6SGF3dGlvRm9ybXMuU2NoZW1hUmVnaXN0cnkpID0+IHtcclxuXHJcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG4gICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XHJcbiAgICBsb2cuZGVidWcoXCJTY2hlbWE6IFwiLCAkc2NvcGUuc2NoZW1hKTtcclxuICAgICRzY29wZS5jb25maWcgPSBzY2hlbWFzLmNsb25lU2NoZW1hKFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXBsaWNhdGlvbkNvbnRyb2xsZXJcIik7XHJcbiAgICAvLyQkc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5rdWJlcm5ldGVzX3YxYmV0YTNfUmVwbGljYXRpb25Db250cm9sbGVyO1xyXG5cclxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuXHJcbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcbiAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICBpZiAoJHNjb3BlLmlkKSB7XHJcbiAgICAgICAgJHNjb3BlLmVudGl0eSA9ICRzY29wZS5tb2RlbC5nZXRSZXBsaWNhdGlvbkNvbnRyb2xsZXIoS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlLCAkc2NvcGUuaWQpO1xyXG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzTW9kZWwudHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgUmVwbGljYXRpb25Db250cm9sbGVycyA9IGNvbnRyb2xsZXIoXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIsXHJcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzUmVwbGljYXRpb25Db250cm9sbGVyc1wiLCBcIkt1YmVybmV0ZXNQb2RzXCIsIFwiQ29uZmlnc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgICAoJHNjb3BlLCAgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsICBLdWJlcm5ldGVzUmVwbGljYXRpb25Db250cm9sbGVyczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzUG9kczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBDb25maWdzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICRzY29wZS5jb25maWdzID0gQ29uZmlnc01vZGVsO1xyXG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsOyAgICBcclxuXHJcbiAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XHJcbiAgICAgIGRhdGE6ICdtb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzJyxcclxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxyXG4gICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxyXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcclxuICAgICAgZmlsdGVyT3B0aW9uczoge1xyXG4gICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcclxuICAgICAgfSxcclxuICAgICBjb2x1bW5EZWZzOiBbXHJcbiAgICAgICAgIHsgZmllbGQ6ICckb3JhY2xlTmFtZScsXHJcbiAgICAgICAgICAgZGlzcGxheU5hbWU6ICfmnI3liqHlkI3np7AnLFxyXG4gICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiaWRUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgIH0sXHJcbiAgICAgICAgIC8veyBmaWVsZDogJyRyZXBsaWNhcycsXHJcbiAgICAgICAgIC8vICBkaXNwbGF5TmFtZTogJ1NjYWxlJyxcclxuICAgICAgICAgLy8gIGNlbGxUZW1wbGF0ZTokdGVtcGxhdGVDYWNoZS5nZXQoXCJkZXNpcmVkUmVwbGljYXMuaHRtbFwiKVxyXG4gICAgICAgICAvL30sXHJcbiAgICAgICAgIHsgZmllbGQ6ICckcG9kcy5hZ2UnLFxyXG4gICAgICAgICAgIGRpc3BsYXlOYW1lOiAn5ZCv5Yqo5pe26Ze0JyxcclxuICAgICAgICAgICBjZWxsVGVtcGxhdGU6JHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYWdlVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICB9LFxyXG4gICAgICAgICB7IGZpZWxkOiAnJGxhYmVsc1RleHQnLFxyXG4gICAgICAgICAgIGRpc3BsYXlOYW1lOiAn5pWw5o2u5qCH562+JyxcclxuICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImxhYmVsVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICB9LFxyXG4gICAgICAgICB7IGZpZWxkOiAnJHBvZHMnLFxyXG4gICAgICAgICAgIGRpc3BsYXlOYW1lOiAn6L+e5o6l5Y+C5pWwJyxcclxuICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImNvbm5lY3RQYXJhbVRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgfSxcclxuICAgICAgICAgeyBmaWVsZDogJyRwb2RzWzBdLiRldmVudENvdW50JyxcclxuICAgICAgICAgICBkaXNwbGF5TmFtZTogJ+acjeWKoeWQr+WKqOaXpeW/lycsXHJcbiAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJldmVudFN1bW1hcnlUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgIH0sXHJcbiAgICAgICAgIHsgZmllbGQ6ICckcG9kQ291bnRlcnMnLFxyXG4gICAgICAgICAgIGRpc3BsYXlOYW1lOiAn5pyN5Yqh54q25oCBJyxcclxuICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcInBvZENvdW50c0FuZExpbmtUZW1wbGF0ZS5odG1sXCIpLFxyXG4gICAgICAgICAgIGN1c3RvbVNvcnRGaWVsZDogKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgICBpZihmaWVsZC4kcG9kQ291bnRlcnMucmVhZHkgKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiAzO1xyXG4gICAgICAgICAgICAgfWVsc2UgaWYoZmllbGQuJHBvZENvdW50ZXJzLnZhbGlkIHx8IGZpZWxkLiRwb2RDb3VudGVycy53YWl0aW5nKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiAyO1xyXG4gICAgICAgICAgICAgfWVsc2UgaWYoZmllbGQuJHBvZENvdW50ZXJzLmVycm9yKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgICB9XHJcbiAgICAgICAgIH0sXHJcbiAgICAgICAgIHsgZmllbGQ6ICckZXh0cmFjdFN0YXR1cycsXHJcbiAgICAgICAgICAgZGlzcGxheU5hbWU6ICfmlbDmja7msYfmgLvnirbmgIEnLFxyXG4gICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiZGF0YVN1bW1hcnlUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgIH1cclxuICAgICAgIF1cclxuICAgIH1cclxuICAgXHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4geyAgICAgIFxyXG4gICAgICBpZiAoYW5ndWxhci5pc1N0cmluZyhzZWxlY3RlZCkpIHtcclxuICAgICAgICBzZWxlY3RlZCA9IFt7XHJcbiAgICAgICAgICBpZDogc2VsZWN0ZWRcclxuICAgICAgICB9XTtcclxuICAgICAgfVxyXG4gICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XHJcbiAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXHJcbiAgICAgICAgaW5kZXg6ICdtZXRhZGF0YS5uYW1lJyxcclxuICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQ6QXJyYXk8S3ViZVBvZD4sIG5leHQ6S3ViZVBvZCkge1xyXG4gICAgICAgICAgICAgIGlmIChuZXh0KSB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5yZXNpemVDb250cm9sbGVyKCRodHRwLCBLdWJlcm5ldGVzQXBpVVJMLCBuZXh0LCAwLCAoKSA9PiB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnMuZGVsZXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgaWQ6IGdldE5hbWUobmV4dClcclxuICAgICAgICAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4geyAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICBpZihuZXh0Lm1ldGFkYXRhLmxhYmVscy5zdHlsZSA9PT0gXCJvcmFjbGVcIil7ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5jb25uZWN0T3JhY2xlKCRodHRwLCAkdGltZW91dCwgXCIvamF2YS9jb25zb2xlL2FwaS9jYW5jZWxPcmFjbGVDb25lY3Rpb25cIiwgXCJkZWxldGVcIiwgbmV4dCwgMCk7ICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGRlbGV0aW5nOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpOyAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aXRsZTogJ+aYr+WQpumcgOimgeWIoOmZpG9yYWNsZeacjeWKoe+8nycsXHJcbiAgICAgICAgYWN0aW9uOiAn5Lul5LiL55qEb3JhY2xl5pyN5Yqh5bCG5Lya6KKr5Yig6ZmkOicsXHJcbiAgICAgICAgb2tUZXh0OiAn5Yig6ZmkJyxcclxuICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlciBzal9idG5fY2lyJyxcclxuICAgICAgICBjdXN0b206IFwi6K+l5pyN5Yqh5Yig6Zmk5ZCO5bCG5Lya5riF6Zmkb3JhY2xl5a+55bqU5pyN5Yqh55qE56uv5Y+j562J6LWE5rqQ5Y2g55So77yM5L2G5LiN5Yig6Zmk5pWw5o2u5paH5Lu277yM5piv5ZCm5Yig6Zmk77yM6K+356Gu6K6k77yBXCIsXHJcbiAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZyBzal9hbGVydC13YXJuaW5nXCIsXHJcbiAgICAgICAgY2FuY2VsVGV4dDogXCLlj5bmtohcIixcclxuICAgICAgICBjYW5jZWxDbGFzczogJ3NqX2J0bl9ncmV5J1xyXG4gICAgICB9KS5vcGVuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLmNyZWF0ZVJDcz0gKCkgPT4geyBcclxuICAgICAgICRodHRwKHtcclxuICAgICAgICAgICAgICAgdXJsOiAnL2phdmEvY29uc29sZS9hcGkvY2FuY2VsT3JhY2xlQ29uZWN0aW9uJyxcclxuICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgICAgbWV0aG9kOidQT1NUJyxcclxuICAgICAgICAgICAgICAgcGFyYW1zOntwYXJhbTogXCJkYXRhXCJ9XHJcbiAgICAgICAgICAgfSkuc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcclxuICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJzdWNjZXNzXCIpO1xyXG4gICAgICAgICAgIH0pLmVycm9yKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xyXG4gICAgICAgICAgICAgICAvL2xvZy53YXJuKFwiRmFpbGVkIHRvIGNvbm5lY3QgXCIgKyBjb25uZWN0UGFyYW0gKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgfSk7ICBcclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUuc3RvcFByb21wdCA9IChzZWxlY3RlZCkgPT57ICAgICBcclxuICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoc2VsZWN0ZWQpKSB7XHJcbiAgICAgICAgc2VsZWN0ZWQgPSBbe1xyXG4gICAgICAgICAgaWQ6IHNlbGVjdGVkXHJcbiAgICAgICAgfV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcclxuICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcclxuICAgICAgICBpbmRleDogJ21ldGFkYXRhLm5hbWUnLFxyXG4gICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICBmdW5jdGlvbiBzdG9wU2VsZWN0ZWQoc2VsZWN0ZWQ6QXJyYXk8S3ViZVBvZD4sIG5leHQ6S3ViZVBvZCkge1xyXG4gICAgICAgICAgICAgaWYgKG5leHQpIHtcclxuICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5yZXNpemVDb250cm9sbGVyKCRodHRwLCBLdWJlcm5ldGVzQXBpVVJMLCBuZXh0LCAwLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgaWYobmV4dC5tZXRhZGF0YS5sYWJlbHMuc3R5bGUgPT09IFwib3JhY2xlXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuY29ubmVjdE9yYWNsZSgkaHR0cCwgJHRpbWVvdXQsIFwiL2phdmEvY29uc29sZS9hcGkvY2FuY2VsT3JhY2xlQ29uZWN0aW9uXCIsIFwic3RvcFwiLCBuZXh0LCAwKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICBzdG9wU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgICB9XHJcbiAgICAgICAgICAgc3RvcFNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTsgICAgICAgICAgXHJcbiAgICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdGl0bGU6ICfmmK/lkKbpnIDopoHlgZzmraJvcmFjbGXmnI3liqHvvJ8nLFxyXG4gICAgICBhY3Rpb246ICfku6XkuIvnmoRvcmFjbGXmnI3liqHlsIbkvJrooqvlgZzmraI6JyxcclxuICAgICAgb2tUZXh0OiAn5YGc5q2iJyxcclxuICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXIgc2pfYnRuX2NpcicsXHJcbiAgICAgIGN1c3RvbTogXCLor6XmnI3liqHlgZzmraLlkI7lsIbml6Dms5Xnu6fnu63mj5Dkvpvov57mjqXorr/pl67mnI3liqHvvIzkvYblj6/pgJrov4flkK/liqjmjInpkq7ph43mlrDlkK/liqjor6XmnI3liqHku6Xov5vooYzorr/pl67jgILmmK/lkKblgZzmraLvvIzor7fnoa7orqRcIixcclxuICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZyBzal9hbGVydC13YXJuaW5nXCIsXHJcbiAgICAgIGNhbmNlbFRleHQ6IFwi5Y+W5raIXCIsXHJcbiAgICAgIGNhbmNlbENsYXNzOiAnc2pfYnRuX2dyZXknXHJcbiAgICB9KS5vcGVuKCk7XHJcbiAgIH07XHJcblxyXG4gICAkc2NvcGUucmVTdGFydFByb21wdCA9IChzZWxlY3RlZCkgPT4geyAgICBcclxuICAgICAgZnVuY3Rpb24gc3RhcnRTZWxlY3RlZChzZWxlY3RlZDpBcnJheTxLdWJlUG9kPiwgbmV4dDpLdWJlUG9kKXtcclxuICAgICAgICAgaWYobmV4dCl7XHJcbiAgICAgICAgICAgIGlmKG5leHQuJHJlcGxpY2FzID09PSAwKVxyXG4gICAgICAgICAgICAgICBLdWJlcm5ldGVzLnJlc2l6ZUNvbnRyb2xsZXIoJGh0dHAsIEt1YmVybmV0ZXNBcGlVUkwsIG5leHQsIDEsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5jb25uZWN0T3JhY2xlKCRodHRwLCAkdGltZW91dCwgXCIvamF2YS9jb25zb2xlL2FwaS9jb25uZWN0T3JhY2xlXCIsIFwicmVTdGFydFwiLCBuZXh0LCAyMDApO1xyXG4gICAgICAgICAgICAgICAgICBzdGFydFNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBzdGFydFNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICBcclxuICAgfTtcclxuXHJcbiAgICRzY29wZS5leHRyYWN0Q2xpY2sgPSB7XHJcbiAgICAgIGl0ZW1zOiBudWxsLFxyXG4gICAgICBzZWxlY3RlZEl0ZW06ICB7bmFtZTogXCLlvZPliY3msqHmnInlj6/nlKjnmoTmsYfmgLvlupNcIn0sXHJcbiAgICAgIGRpYWxvZzogbmV3IFVJLkRpYWxvZygpLFxyXG4gICAgICBvbk9rOiAoKSA9PiB7ICAgICAgICAgICAgICBcclxuICAgICAgICB2YXIgZXh0cmFjdENsaWNrID0gJHNjb3BlLmV4dHJhY3RDbGljazsgICAgXHJcbiAgICAgICAgZXh0cmFjdENsaWNrLml0ZW1zID0gJHNjb3BlLnRhYmxlQ29uZmlnLnNlbGVjdGVkSXRlbXM7XHJcbiAgICAgICAgS3ViZXJuZXRlcy5leHRyYWN0RGF0YVRvT3JhY2xlKCRodHRwLCBleHRyYWN0Q2xpY2suaXRlbXMsIGV4dHJhY3RDbGljay5zZWxlY3RlZEl0ZW0pO1xyXG4gICAgICAgIC8vZXh0cmFjdENsaWNrLnNlbGVjdGVkSXRlbSA9ICRzY29wZS5maWx0ZXJSZXBsaWNhdGlvbkNvbnRyb2xsZXJzWzBdIHx8IFwiXCI7XHJcbiAgICAgICAgZXh0cmFjdENsaWNrLmRpYWxvZy5jbG9zZSgpO1xyXG4gICAgICB9LFxyXG4gICAgICBvcGVuOiAoc2VsZWN0ZWQpID0+IHsgICAgICAgICAgIFxyXG4gICAgICAgIHZhciBleHRyYWN0Q2xpY2sgPSAkc2NvcGUuZXh0cmFjdENsaWNrOyBcclxuICAgICAgICBpZigkc2NvcGUuY29uZmlncyAmJiAkc2NvcGUuY29uZmlncy5vcmFjbGVQYXJhbSBpbnN0YW5jZW9mIEFycmF5ICYmICRzY29wZS5jb25maWdzLm9yYWNsZVBhcmFtLmxlbmd0aD4wKVxyXG4gICAgICAgICAgIGV4dHJhY3RDbGljay5zZWxlY3RlZEl0ZW0gPSAkc2NvcGUuY29uZmlncy5vcmFjbGVQYXJhbVswXTsgICAgICAgICBcclxuICAgICAgICBleHRyYWN0Q2xpY2suZGlhbG9nLm9wZW4oKTtcclxuICAgICAgICAvKmV4dHJhY3REYXRhLnNlbGVjdGVkSXRlbSA9ICRzY29wZS5maWx0ZXJSZXBsaWNhdGlvbkNvbnRyb2xsZXJzWzBdIHx8IFwiXCI7XHJcbiAgICAgICAgICBleHRyYWN0RGF0YS5pdGVtcyA9IHNlbGVjdGVkOyovXHJcbiAgICAgICAgICAkdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICQoJyNuZXdEYXRhTmFtZScpLmZvY3VzKCk7XHJcbiAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICB9LFxyXG4gICAgICAgY2xvc2U6ICgpID0+IHtcclxuICAgICAgICAgICAkc2NvcGUuZXh0cmFjdENsaWNrLnNlbGVjdGVkSXRlbSA9IHtuYW1lOiBcIuW9k+WJjeayoeacieWPr+eUqOeahOaxh+aAu+W6k1wifTtcclxuICAgICAgICAgICAkc2NvcGUuZXh0cmFjdENsaWNrLmRpYWxvZy5jbG9zZSgpO1xyXG4gICAgICAgfVxyXG4gICB9O1xyXG5cclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0ludGVyZmFjZXMudHNcIi8+XHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHNjaGVtYVNldFJlcXVpcmVkKHNjaGVtYSwgcHJvcGVydHlOYW1lLCBpc1JlcXVpcmVkID0gdHJ1ZSkge1xyXG4gICAgaWYgKHNjaGVtYSAmJiBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgdmFyIHJlcXVpcmVkID0gc2NoZW1hLnJlcXVpcmVkO1xyXG4gICAgICBpZiAoaXNSZXF1aXJlZCkge1xyXG4gICAgICAgIGlmICghcmVxdWlyZWQpIHtcclxuICAgICAgICAgIHJlcXVpcmVkID0gW107XHJcbiAgICAgICAgICBzY2hlbWEucmVxdWlyZWQgPSByZXF1aXJlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHJlcXVpcmVkLCBwcm9wZXJ0eU5hbWUpKSB7XHJcbiAgICAgICAgICByZXF1aXJlZC5wdXNoKHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChyZXF1aXJlZCkge1xyXG4gICAgICAgICAgdmFyIGlkeCA9IHJlcXVpcmVkLmluZGV4T2YocHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICByZXF1aXJlZC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIFNlY3JldENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiU2VjcmV0Q29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJLOFNDbGllbnRGYWN0b3J5XCIsXHJcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBLOFNDbGllbnRGYWN0b3J5KSA9PiB7XHJcblxyXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuXHJcbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gICAgICAgIHNlbGVjdFN1Yk5hdkJhcigkc2NvcGUsIFwiU2VjcmV0c1wiLCAkc2NvcGUuaWQgPyBcIkVkaXQgU2VjcmV0OiBcIiArICRzY29wZS5pZCA6IFwiQ3JlYXRlIFNlY3JldFwiKTtcclxuXHJcbiAgICAgICAgdmFyIGt1YmVDbGllbnQgPSBjcmVhdGVLdWJlcm5ldGVzQ2xpZW50KFwic2VjcmV0c1wiKTtcclxuXHJcbiAgICAgICAgdmFyIG9uU2F2ZVVybCA9ICRsb2NhdGlvbi5zZWFyY2goKVtcInNhdmVkVXJsXCJdO1xyXG4gICAgICAgIHZhciBjcmVhdGVLaW5kID0gJGxvY2F0aW9uLnNlYXJjaCgpW1wia2luZFwiXTtcclxuXHJcbiAgICAgICAgJHNjb3BlLnNzaEtleXMgPSBzc2hTZWNyZXREYXRhS2V5cztcclxuICAgICAgICAkc2NvcGUuaHR0cHNLZXlzID0gaHR0cHNTZWNyZXREYXRhS2V5cztcclxuXHJcbiAgICAgICAgdmFyIHNlY3JldExhYmVscyA9IHtcclxuICAgICAgICAgIFwic3NoLWtleVwiOiBcIlNTSCBwcml2YXRlIGtleVwiLFxyXG4gICAgICAgICAgXCJzc2gta2V5LnB1YlwiOiBcIlNTSCBwdWJsaWMga2V5XCIsXHJcbiAgICAgICAgICBcImNhLmNydFwiOiBcIkNBIENlcnRpZmljYXRlXCIsXHJcbiAgICAgICAgICBcIi5kb2NrZXJjZmdcIjogXCJEb2NrZXIgY29uZmlnXCIsXHJcbiAgICAgICAgICBcInVzZXJuYW1lXCI6IFwiVXNlciBuYW1lXCJcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBzZWNyZXRUb29sdGlwcyA9IHtcclxuICAgICAgICAgIFwic3NoLWtleVwiOiBcIlNTSCBwcml2YXRlIGtleSB0ZXh0IGNvbnRlbnRzXCIsXHJcbiAgICAgICAgICBcImNhLmNydFwiOiBcIkNlcnRpZmljYXRlIEF1dGhvcml0eSAoQ0EpIENlcnRpZmljYXRlXCIsXHJcbiAgICAgICAgICBcIi5kb2NrZXJjZmdcIjogXCJEb2NrZXIgY29uZmlndXJhdGlvbiB0b2tlblwiXHJcbiAgICAgICAgfTtcclxuXHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAoJHNjb3BlLmlkICYmICEkc2NvcGUuc2VjcmV0KSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUucHJvcGVydHlLZXlzID0gKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIF8ua2V5cyhzZWNyZXRMYWJlbHMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgICRzY29wZS5jaGVja05hbWVVbmlxdWUgPSAodmFsdWUpID0+IHtcclxuICAgICAgICAgIHZhciBhbnN3ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5tb2RlbC5zZWNyZXRzLCAoc2VjcmV0KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShzZWNyZXQpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IG5hbWUpIHtcclxuICAgICAgICAgICAgICBhbnN3ZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgICRzY29wZS5jaGVja0ZpZWxkVW5pcXVlID0gKGtleSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuICRzY29wZS5lbnRpdHkucHJvcGVydGllc1trZXldID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgICRzY29wZS5oYXNBbGxLZXlzID0gKGtleXMpID0+IHtcclxuICAgICAgICAgIHZhciBhbnN3ZXIgPSBrZXlzICYmIGtleXMubGVuZ3RoO1xyXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGtleXMsIChrZXkpID0+IHtcclxuICAgICAgICAgICAgaWYgKCEkc2NvcGUuZW50aXR5LnByb3BlcnRpZXNba2V5XSkge1xyXG4gICAgICAgICAgICAgIGFuc3dlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgJHNjb3BlLmFkZEZpZWxkRGlhbG9nID0ge1xyXG4gICAgICAgICAgY29udHJvbGxlcjogbnVsbCxcclxuICAgICAgICAgIG5ld1JlcGxpY2FzOiAwLFxyXG4gICAgICAgICAgZGlhbG9nOiBuZXcgVUkuRGlhbG9nKCksXHJcbiAgICAgICAgICBvbk9rOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICRzY29wZS5hZGRGaWVsZERpYWxvZy5kaWFsb2cuY2xvc2UoKTtcclxuICAgICAgICAgICAgJHNjb3BlLmFkZERhdGFGaWVsZCgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9wZW46IChjb250cm9sbGVyKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBhZGRGaWVsZERpYWxvZyA9ICRzY29wZS5hZGRGaWVsZERpYWxvZztcclxuICAgICAgICAgICAgYWRkRmllbGREaWFsb2cuZGlhbG9nLm9wZW4oKTtcclxuXHJcbiAgICAgICAgICAgICR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAkKCcjbmV3RGF0YU5hbWUnKS5mb2N1cygpO1xyXG4gICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY2xvc2U6ICgpID0+IHtcclxuICAgICAgICAgICAgJHNjb3BlLmFkZEZpZWxkRGlhbG9nLmRpYWxvZy5jbG9zZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG5cclxuXHJcbiAgICAgICAgJHNjb3BlLmVudGl0eUNoYW5nZWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAkc2NvcGUuY2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgJHNjb3BlLmFkZEZpZWxkcyA9IChrZXlzKSA9PiB7XHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goa2V5cywgKGtleSkgPT4gYWRkRmllbGQoa2V5KSk7XHJcbiAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGFkZEZpZWxkKGtleSkge1xyXG4gICAgICAgICAgdmFyIHByb3BlcnR5ID0gY3JlYXRlUHJvcGVydHkoa2V5LCBcIlwiKTtcclxuICAgICAgICAgICRzY29wZS5lbnRpdHkucHJvcGVydGllc1trZXldID0gcHJvcGVydHk7XHJcbiAgICAgICAgICAkc2NvcGUuZW50aXR5Lm5ld0RhdGFLZXkgPSBcIlwiO1xyXG4gICAgICAgICAgJHNjb3BlLnNob3dBZGREYXRhRmllbGRGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJHNjb3BlLmFkZERhdGFGaWVsZCA9ICgpID0+IHtcclxuICAgICAgICAgIHZhciBrZXkgPSAkc2NvcGUuZW50aXR5Lm5ld0RhdGFLZXk7XHJcbiAgICAgICAgICBpZiAoa2V5KSB7XHJcbiAgICAgICAgICAgIGFkZEZpZWxkKGtleSk7XHJcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgJHNjb3BlLmRlbGV0ZVByb3BlcnR5ID0gKGtleSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGtleSkge1xyXG4gICAgICAgICAgICBkZWxldGUgJHNjb3BlLmVudGl0eS5wcm9wZXJ0aWVzW2tleV07XHJcbiAgICAgICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgJHNjb3BlLmNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAkc2NvcGUuc2F2ZSA9ICgpID0+IHtcclxuICAgICAgICAgIHZhciBlbnRpdHkgPSAkc2NvcGUuZW50aXR5IHx8IHt9O1xyXG4gICAgICAgICAgdmFyIG5hbWUgPSBlbnRpdHkubmFtZTtcclxuICAgICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgIGlmICghJHNjb3BlLnNlY3JldCkge1xyXG4gICAgICAgICAgICAgICRzY29wZS5zZWNyZXQgPSB7XHJcbiAgICAgICAgICAgICAgICBhcGlWZXJzaW9uOiBLdWJlcm5ldGVzLmRlZmF1bHRBcGlWZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAga2luZDogXCJTZWNyZXRcIixcclxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwiXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7fVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZGF0YSA9IHt9O1xyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZW50aXR5LnByb3BlcnRpZXMsIChwcm9wZXJ0eSkgPT4ge1xyXG4gICAgICAgICAgICAgIHZhciBrZXkgPSBwcm9wZXJ0eS5rZXk7XHJcbiAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcHJvcGVydHkudmFsdWUgfHwgXCJcIjtcclxuICAgICAgICAgICAgICBpZiAoa2V5KSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhW2tleV0gPSB3aW5kb3cuYnRvYSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgJHNjb3BlLnNlY3JldC5tZXRhZGF0YS5uYW1lID0gbmFtZTtcclxuICAgICAgICAgICAgJHNjb3BlLnNlY3JldC5kYXRhID0gZGF0YTtcclxuXHJcbiAgICAgICAgICAgIENvcmUubm90aWZpY2F0aW9uKCdpbmZvJywgXCJTYXZpbmcgc2VjcmV0IFwiICsgbmFtZSk7XHJcblxyXG4gICAgICAgICAgICBrdWJlQ2xpZW50LnB1dCgkc2NvcGUuc2VjcmV0LFxyXG4gICAgICAgICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VjcmV0c0xpbmsgPSBvblNhdmVVcmwgfHwgRGV2ZWxvcGVyLm5hbWVzcGFjZUxpbmsoJHNjb3BlLCAkcm91dGVQYXJhbXMsIFwic2VjcmV0c1wiKTtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7fTtcclxuICAgICAgICAgICAgICAgIGlmIChvblNhdmVVcmwpIHtcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zWydzZWNyZXQnXSA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkbG9jYXRpb24ucGF0aChzZWNyZXRzTGluayk7XHJcbiAgICAgICAgICAgICAgICAkbG9jYXRpb24uc2VhcmNoKHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhcIm5hdmlnYXRpbmcgdG8gVVJMOiBcIiArIHNlY3JldHNMaW5rICsgXCIgd2l0aCBwYXJhbXMgXCIgKyBhbmd1bGFyLnRvSnNvbigkbG9jYXRpb24uc2VhcmNoKCkpKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgIENvcmUubm90aWZpY2F0aW9uKCdlcnJvcicsIFwiRmFpbGVkIHRvIHNlY3JldCBcIiArIG5hbWUgKyBcIlxcblwiICsgZXJyKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB1cGRhdGVEYXRhKCk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVByb3BlcnR5KGtleSwgdGV4dCkge1xyXG4gICAgICAgICAgdmFyIGxhYmVsID0gc2VjcmV0TGFiZWxzW2tleV0gfHwgQ29yZS5odW1hbml6ZVZhbHVlKGtleSk7XHJcbiAgICAgICAgICB2YXIgdG9vbHRpcCA9IHNlY3JldFRvb2x0aXBzW2tleV0gfHwgXCJWYWx1ZSBvZiB0aGUgXCIgKyBsYWJlbDtcclxuXHJcbiAgICAgICAgICB2YXIgcm93cyA9IDU7XHJcbiAgICAgICAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KFwiXFxuXCIpLmxlbmd0aCArIDE7XHJcbiAgICAgICAgICBpZiAobGluZXMgPiByb3dzKSB7XHJcbiAgICAgICAgICAgIHJvd3MgPSBsaW5lcztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhciB0eXBlID0gXCJ0ZXh0YXJlYVwiO1xyXG4gICAgICAgICAgaWYgKGtleSA9PT0gXCJ1c2VybmFtZVwiKSB7XHJcbiAgICAgICAgICAgIHR5cGUgPSBcInRleHRcIjtcclxuICAgICAgICAgICAgaWYgKCF0ZXh0KSB7XHJcbiAgICAgICAgICAgICAgdGV4dCA9IGN1cnJlbnRVc2VyTmFtZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJwYXNzd29yZFwiKSB7XHJcbiAgICAgICAgICAgIHR5cGUgPSBcInBhc3N3b3JkXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YXIgcHJvcGVydHkgPSB7XHJcbiAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICBsYWJlbDogbGFiZWwsXHJcbiAgICAgICAgICAgIHRvb2x0aXA6IHRvb2x0aXAsXHJcbiAgICAgICAgICAgIHJvd3M6IHJvd3MsXHJcbiAgICAgICAgICAgIHZhbHVlOiB0ZXh0LFxyXG4gICAgICAgICAgICB0eXBlOiB0eXBlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgcmV0dXJuIHByb3BlcnR5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcclxuICAgICAgICAgICRzY29wZS5pdGVtID0gbnVsbDtcclxuICAgICAgICAgICRzY29wZS5jaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAkc2NvcGUuZW50aXR5ID0ge1xyXG4gICAgICAgICAgICBuYW1lOiAkc2NvcGUuaWQsXHJcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHt9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLm1vZGVsLnNlY3JldHMsIChzZWNyZXQpID0+IHtcclxuICAgICAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VjcmV0KTtcclxuICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJHNjb3BlLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUuc2VjcmV0ID0gc2VjcmV0O1xyXG4gICAgICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHNlY3JldC5kYXRhLCAodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKHZhbHVlKSAmJiB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB3aW5kb3cuYXRvYih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gY3JlYXRlUHJvcGVydHkoa2V5LCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSBwcm9wZXJ0eTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGNyZWF0ZUtpbmQgPT09IFwic3NoXCIpIHtcclxuICAgICAgICAgICAgICAkc2NvcGUuYWRkRmllbGRzKCRzY29wZS5zc2hLZXlzKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjcmVhdGVLaW5kID09PSBcImh0dHBzXCIpIHtcclxuICAgICAgICAgICAgICAkc2NvcGUuYWRkRmllbGRzKCRzY29wZS5odHRwc0tleXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc01vZGVsLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwidXRpbEhlbHBlcnMudHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgU2VjcmV0c0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiU2VjcmV0c0NvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiU2VydmljZVJlZ2lzdHJ5XCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBTZXJ2aWNlUmVnaXN0cnksICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS4kY3JlYXRlU2VjcmV0TGluayA9IERldmVsb3Blci5uYW1lc3BhY2VMaW5rKCRzY29wZSwgJHJvdXRlUGFyYW1zLCBcInNlY3JldENyZWF0ZVwiKTtcclxuXHJcbiAgICB2YXIga3ViZUNsaWVudCA9IGNyZWF0ZUt1YmVybmV0ZXNDbGllbnQoXCJzZWNyZXRzXCIpO1xyXG5cclxuICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgZGF0YTogJ21vZGVsLnNlY3JldHMnLFxyXG4gICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXHJcbiAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcclxuICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXHJcbiAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxyXG4gICAgICBmaWx0ZXJPcHRpb25zOiB7XHJcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xyXG4gICAgICB9LFxyXG4gICAgICBjb2x1bW5EZWZzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6ICdfa2V5JyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXHJcbiAgICAgICAgICBkZWZhdWx0U29ydDogdHJ1ZSxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiaWRUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogJyRsYWJlbHNUZXh0JyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTGFiZWxzJyxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFiZWxUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgfSxcclxuICAgICAgXVxyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuZGVsZXRlUHJvbXB0ID0gKHNlbGVjdGVkKSA9PiB7XHJcbiAgICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XHJcbiAgICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxyXG4gICAgICAgICBpbmRleDogJ21ldGFkYXRhLm5hbWUnLFxyXG4gICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcclxuICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgbmV4dCkge1xyXG4gICAgICAgICAgICAgICBpZiAobmV4dCkge1xyXG4gICAgICAgICAgICAgICAgIGt1YmVDbGllbnQuZGVsZXRlKG5leHQsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgICAgICAgLy8gdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgfSxcclxuICAgICAgICAgdGl0bGU6ICdEZWxldGUgU2VjcmV0cycsXHJcbiAgICAgICAgIGFjdGlvbjogJ1RoZSBmb2xsb3dpbmcgU2VjcmV0cyB3aWxsIGJlIGRlbGV0ZWQ6JyxcclxuICAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcclxuICAgICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXInLFxyXG4gICAgICAgICBjdXN0b206IFwiVGhpcyBvcGVyYXRpb24gaXMgcGVybWFuZW50IG9uY2UgY29tcGxldGVkIVwiLFxyXG4gICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcclxuICAgICAgIH0pLm9wZW4oKTtcclxuICAgICB9O1xyXG5cclxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIFNlcnZpY2VDb250cm9sbGVyID0gY29udHJvbGxlcihcIlNlcnZpY2VDb250cm9sbGVyXCIsXHJcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgJHNjb3BlLnJhd01vZGVsID0gbnVsbDtcclxuXHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgJHNjb3BlLml0ZW1Db25maWcgPSB7XHJcbiAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICAnXlxcXFwvbGFiZWxzJCc6IHtcclxuICAgICAgICAgIHRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoJ2xhYmVsVGVtcGxhdGUuaHRtbCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLnNlcnZpY2VzJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG4gICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICB9LCB0cnVlKTtcclxuXHJcbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS5mbGlwUmF3ID0gKCkgPT4ge1xyXG4gICAgICAkc2NvcGUucmF3TW9kZSA9ICEkc2NvcGUucmF3TW9kZTtcclxuICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgIH07XHJcblxyXG4gICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XHJcbiAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG4gICAgICAkc2NvcGUubmFtZXNwYWNlID0gJHJvdXRlUGFyYW1zW1wibmFtZXNwYWNlXCJdIHx8IEt1YmVybmV0ZXNTdGF0ZS5zZWxlY3RlZE5hbWVzcGFjZTtcclxuICAgICAgJHNjb3BlLml0ZW0gPSAkc2NvcGUubW9kZWwuZ2V0U2VydmljZSgkc2NvcGUubmFtZXNwYWNlLCAkc2NvcGUuaWQpO1xyXG4gICAgICBpZiAoJHNjb3BlLml0ZW0pIHtcclxuICAgICAgICAkc2NvcGUucmF3TW9kZWwgPSB0b1Jhd1lhbWwoJHNjb3BlLml0ZW0pO1xyXG4gICAgICB9XHJcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICB9XHJcbiAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBTZXJ2aWNlRWRpdENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiU2VydmljZUVkaXRDb250cm9sbGVyXCIsXHJcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCBcIlNjaGVtYVJlZ2lzdHJ5XCIsXHJcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgc2NoZW1hczpIYXd0aW9Gb3Jtcy5TY2hlbWFSZWdpc3RyeSkgPT4ge1xyXG5cclxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcbiAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcclxuICAgICRzY29wZS5jb25maWcgPSBzY2hlbWFzLmNsb25lU2NoZW1hKFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlXCIpO1xyXG4gICAgLy8kc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5rdWJlcm5ldGVzX3YxYmV0YTJfU2VydmljZTtcclxuXHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xyXG4gICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB1cGRhdGVEYXRhKCk7XHJcblxyXG4gICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcclxuICAgICAgaWYgKCRzY29wZS5pZCkge1xyXG4gICAgICAgICRzY29wZS5lbnRpdHkgPSAkc2NvcGUubW9kZWwuZ2V0U2VydmljZShLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UsICRzY29wZS5pZCk7XHJcbiAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNNb2RlbC50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgX21vZHVsZS5mYWN0b3J5KCdTZXJ2aWNlUmVnaXN0cnknLCBbKCkgPT4ge1xyXG4gICAgcmV0dXJuIG5ldyBTZXJ2aWNlUmVnaXN0cnlTZXJ2aWNlKCk7XHJcbiAgfV0pO1xyXG5cclxuICAvKipcclxuICAgKiBSZXByZXNlbnRzIGEgc2ltcGxlIGludGVyZmFjZSB0byBzZXJ2aWNlIGRpc2NvdmVyeSB0aGF0IGNhbiBiZSB1c2VkIGVhcmx5IG9uIGluIHRoZSBhcHBsaWNhdGlvbiBsaWZlY3ljbGUgYmVmb3JlIHRoZVxyXG4gICAqIHVuZGVybHlpbmcgbW9kZWwgaGFzIGJlZW4gY3JlYXRlZCB2aWEgZGVwZW5kZW5jeSBpbmplY3Rpb25cclxuICAgKi9cclxuICBleHBvcnQgY2xhc3MgU2VydmljZVJlZ2lzdHJ5U2VydmljZSB7XHJcbiAgICBwcml2YXRlIG1vZGVsOkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGEgc2VydmljZSBhdmFpbGFibGUgZm9yIHRoZSBnaXZlbiBJRCBvciBmYWxzZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGFzU2VydmljZShzZXJ2aWNlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpbmRTZXJ2aWNlKHNlcnZpY2VOYW1lKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHNlcnZpY2UgZm9yIHRoZSBnaXZlbiBzZXJ2aWNlIG5hbWUgKElEKSBvciBudWxsIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzZXJ2aWNlTmFtZSB0aGUgbmFtZSBvZiB0aGUgc2VydmljZSB0byBsb29rIGZvclxyXG4gICAgICogQHJldHVybiB7bnVsbH1cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbmRTZXJ2aWNlKHNlcnZpY2VOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgdmFyIGFuc3dlciA9IG51bGw7XHJcbiAgICAgIGlmIChzZXJ2aWNlTmFtZSkge1xyXG4gICAgICAgIHZhciBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcclxuICAgICAgICBpZiAobW9kZWwpIHtcclxuICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSBtb2RlbC5jdXJyZW50TmFtZXNwYWNlKCk7XHJcbiAgICAgICAgICByZXR1cm4gbW9kZWwuZ2V0U2VydmljZShuYW1lc3BhY2UgLHNlcnZpY2VOYW1lKTtcclxuLypcclxuICAgICAgICBUT0RPIGxldHMgb25seSBsb29rIGluIHRoZSBjdXJyZW50IG5hbWVzcGFjZVxyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChtb2RlbC5zZXJ2aWNlcywgKHNlcnZpY2UpID0+IHtcclxuICAgICAgICAgIGlmIChzZXJ2aWNlTmFtZSA9PT0gZ2V0TmFtZShzZXJ2aWNlKSkge1xyXG4gICAgICAgICAgICBhbnN3ZXIgPSBzZXJ2aWNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4qL1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc2VydmljZSBsaW5rIGZvciB0aGUgZ2l2ZW4gc2VydmljZSBuYW1lXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNlcnZpY2VOYW1lIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlXHJcbiAgICAgKiBAcmV0dXJuIHtudWxsfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2VydmljZUxpbmsoc2VydmljZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgIHZhciBzZXJ2aWNlID0gdGhpcy5maW5kU2VydmljZShzZXJ2aWNlTmFtZSk7XHJcbiAgICAgIHJldHVybiBzZXJ2aWNlTGlua1VybChzZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHNlcnZpY2UgbGluayBmb3IgdGhlIGdpdmVuIHNlcnZpY2UgbmFtZSBpZiBpdHMgcmVhZHkgKGhhcyBhdCBsZWFzdCBvbmUgcmVhZHkgcG9kKVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzZXJ2aWNlTmFtZSB0aGUgbmFtZSBvZiB0aGUgc2VydmljZVxyXG4gICAgICogQHJldHVybiB7bnVsbH1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNlcnZpY2VSZWFkeUxpbmsoc2VydmljZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgIHZhciBzZXJ2aWNlID0gdGhpcy5maW5kU2VydmljZShzZXJ2aWNlTmFtZSk7XHJcbiAgICAgIGlmIChyZWFkeVBvZENvdW50KHNlcnZpY2UpKSB7XHJcbiAgICAgICAgcmV0dXJuIHNlcnZpY2VMaW5rVXJsKHNlcnZpY2UpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRNb2RlbCgpOkt1YmVybmV0ZXNNb2RlbFNlcnZpY2Uge1xyXG4gICAgICB2YXIgYW5zd2VyID0gdGhpcy5tb2RlbDtcclxuICAgICAgLy8gbGV0cyBhbGxvdyBsYXp5IGxvYWQgc28gd2UgY2FuIGJlIGludm9rZWQgYmVmb3JlIHRoZSBpbmplY3RvciBoYXMgYmVlbiBjcmVhdGVkXHJcbiAgICAgIGlmICghYW5zd2VyKSB7XHJcbiAgICAgICAgdmFyIGluamVjdG9yID0gSGF3dGlvQ29yZS5pbmplY3RvcjtcclxuICAgICAgICBpZiAoaW5qZWN0b3IpIHtcclxuICAgICAgICAgIHRoaXMubW9kZWwgPSBpbmplY3Rvci5nZXQ8S3ViZXJuZXRlc01vZGVsU2VydmljZT4oJ0t1YmVybmV0ZXNNb2RlbCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBhbnN3ZXIgPSB0aGlzLm1vZGVsO1xyXG4gICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgU2VydmljZUFwcHMgPSBfbW9kdWxlLmNvbnRyb2xsZXIoJ0t1YmVybmV0ZXMuU2VydmljZUFwcHMnLCAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWwpID0+IHtcclxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICB9KTtcclxuXHJcbiAgZXhwb3J0IHZhciBTZXJ2aWNlcyA9IGNvbnRyb2xsZXIoXCJTZXJ2aWNlc1wiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1NlcnZpY2VzXCIsIFwiS3ViZXJuZXRlc1BvZHNcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU2VydmljZXM6bmcucmVzb3VyY2UuSVJlc291cmNlQ2xhc3M8YW55PiwgS3ViZXJuZXRlc1BvZHM6bmcucmVzb3VyY2UuSVJlc291cmNlQ2xhc3M8YW55PiwgS3ViZXJuZXRlc1N0YXRlLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuXHJcbiAgICBDb250cm9sbGVySGVscGVycy5iaW5kTW9kZWxUb1NlYXJjaFBhcmFtKCRzY29wZSwgJGxvY2F0aW9uLCAnbW9kZScsICdtb2RlJywgJ2xpc3QnKTtcclxuXHJcbiAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XHJcbiAgICAgIGRhdGE6ICdtb2RlbC5zZXJ2aWNlcycsXHJcbiAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcclxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcclxuICAgICAgc2VsZWN0ZWRJdGVtczogW10sXHJcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICB7IGZpZWxkOiAnX2tleScsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpZFRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICckc2VydmljZVVybCcsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0FkZHJlc3MnLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJwb3J0YWxBZGRyZXNzLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICckcG9kQ291bnQnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdQb2RzJyxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicG9kQ291bnRzQW5kTGlua1RlbXBsYXRlLmh0bWxcIiksXHJcbiAgICAgICAgICBjdXN0b21Tb3J0RmllbGQ6IChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBuZWVkIHRvIGNvbmNhdCBhbGwgdGhlIHBvZCBjb3VudGVyc1xyXG4gICAgICAgICAgICB2YXIgcmVhZHkgPSBmaWVsZC4kcG9kQ291bnRlcnMucmVhZHkgfHwgMDtcclxuICAgICAgICAgICAgdmFyIHZhbGlkID0gZmllbGQuJHBvZENvdW50ZXJzLnZhbGlkIHx8IDA7XHJcbiAgICAgICAgICAgIHZhciB3YWl0aW5nID0gZmllbGQuJHBvZENvdW50ZXJzLndhaXRpbmcgfHwgMDtcclxuICAgICAgICAgICAgdmFyIGVycm9yID0gZmllbGQuJHBvZENvdW50ZXJzLmVycm9yIHx8IDA7XHJcbiAgICAgICAgICAgIHJldHVybiByZWFkeSArIHZhbGlkICsgd2FpdGluZyArIGVycm9yO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBmaWVsZDogJyRzZWxlY3RvclRleHQnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdTZWxlY3RvcicsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcInNlbGVjdG9yVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBmaWVsZDogJyRsYWJlbHNUZXh0JyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTGFiZWxzJyxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFiZWxUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9O1xyXG5cclxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuXHJcbiAgICAkc2NvcGUuZGVsZXRlUHJvbXB0ID0gKHNlbGVjdGVkKSA9PiB7XHJcbiAgICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKHNlbGVjdGVkKSkge1xyXG4gICAgICAgIHNlbGVjdGVkID0gW3tcclxuICAgICAgICAgIGlkOiBzZWxlY3RlZFxyXG4gICAgICAgIH1dO1xyXG4gICAgICB9XHJcbiAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcclxuICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcclxuICAgICAgICBpbmRleDogJ21ldGFkYXRhLm5hbWUnLFxyXG4gICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZDpBcnJheTxLdWJlUG9kPiwgbmV4dDpLdWJlUG9kKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG5leHQpIHtcclxuICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImRlbGV0aW5nOiBcIiwgZ2V0TmFtZShuZXh0KSk7XHJcbiAgICAgICAgICAgICAgICBLdWJlcm5ldGVzU2VydmljZXMuZGVsZXRlKHtcclxuICAgICAgICAgICAgICAgICAgaWQ6IGdldE5hbWUobmV4dClcclxuICAgICAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJkZWxldGVkOiBcIiwgZ2V0TmFtZShuZXh0KSk7XHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZzogXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHRpdGxlOiAnRGVsZXRlIHNlcnZpY2VzPycsXHJcbiAgICAgICAgYWN0aW9uOiAnVGhlIGZvbGxvd2luZyBzZXJ2aWNlcyB3aWxsIGJlIGRlbGV0ZWQ6JyxcclxuICAgICAgICBva1RleHQ6ICdEZWxldGUnLFxyXG4gICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcclxuICAgICAgICBjdXN0b206IFwiVGhpcyBvcGVyYXRpb24gaXMgcGVybWFuZW50IG9uY2UgY29tcGxldGVkIVwiLFxyXG4gICAgICAgIGN1c3RvbUNsYXNzOiBcImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIlxyXG4gICAgICB9KS5vcGVuKCk7XHJcbiAgICB9O1xyXG5cclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICAvLyBjb250cm9sbGVyIGZvciB0aGUgc3RhdHVzIGljb24gY2VsbFxyXG4gIGV4cG9ydCB2YXIgUG9kU3RhdHVzID0gY29udHJvbGxlcihcIlBvZFN0YXR1c1wiLCBbXCIkc2NvcGVcIiwgKCRzY29wZSkgPT4ge1xyXG4gICAgJHNjb3BlLnN0YXR1c01hcHBpbmcgPSAodGV4dCkgPT4ge1xyXG4gICAgICByZXR1cm4gc3RhdHVzVGV4dFRvQ3NzQ2xhc3ModGV4dCk7XHJcbiAgICB9XHJcbiAgfV0pO1xyXG5cclxuICBfbW9kdWxlLmNvbnRyb2xsZXIoXCJLdWJlcm5ldGVzLlRlcm1Db250cm9sbGVyXCIsICgkc2NvcGUsIFRlcm1pbmFsU2VydmljZSkgPT4ge1xyXG4gICAgJHNjb3BlLmNhbkNvbm5lY3RUbyA9IChjb250YWluZXIpID0+IHtcclxuICAgICAgaWYgKGNvbnRhaW5lci5zZWN1cml0eUNvbnRleHQgJiYgY29udGFpbmVyLnNlY3VyaXR5Q29udGV4dC5wcml2aWxlZ2VkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgJHNjb3BlLm9wZW5UZXJtaW5hbCA9IChzZWxmTGluaywgY29udGFpbmVyTmFtZSkgPT4ge1xyXG4gICAgICB2YXIgaWQgPSBUZXJtaW5hbFNlcnZpY2UubmV3VGVybWluYWwoc2VsZkxpbmssIGNvbnRhaW5lck5hbWUpO1xyXG4gICAgICBsb2cuZGVidWcoXCJDcmVhdGVkIHRlcm1pbmFsLCBpZDogXCIsIGlkKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgZXhwb3J0IHZhciBEYXRhTGFiZWxzID0gY29udHJvbGxlcihcIkRhdGFMYWJlbHNcIixbJyRzY29wZScsJyRsb2NhdGlvbicsICgkc2NvcGUsICRsb2NhdGlvbikgPT57ICBcclxuICAgICAgY29uc29sZS5sb2coJHNjb3BlLmxhYmVscyk7ICBcclxuICAgICAgJHNjb3BlLmxhYmVsQ2xpY2sgPSAoZW50aXR5LCBrZXk6c3RyaW5nLCB2YWx1ZTpzdHJpbmcpID0+IHtcclxuICAgICAgLy8gbG9nLmRlYnVnKFwiaGFuZGxlQ2xpY2ssIGVudGl0eTogXCIsIGVudGl0eSwgXCIga2V5OiBcIiwgbGFiZWxUeXBlLCBcIiB2YWx1ZTogXCIsIHZhbHVlKTtcclxuICAgICAgY29uc29sZS5sb2coXCJjYWNhY2FjYWNcIik7XHJcbiAgICAgICRzY29wZS4kZW1pdCgnZGF0YUxhYmVsRmlsdGVyVXBkYXRlJywgdmFsdWUpXHJcbiAgICB9XHJcbiAgICAkc2NvcGUubGFiZWxDbGFzcyA9IGNvbnRhaW5lckxhYmVsQ2xhc3M7XHJcbiAgfV0pO1xyXG5cclxuICAvLyBjb250cm9sbGVyIHRoYXQgZGVhbHMgd2l0aCB0aGUgbGFiZWxzIHBlciBwb2RcclxuICBleHBvcnQgdmFyIExhYmVscyA9IGNvbnRyb2xsZXIoXCJMYWJlbHNcIiwgW1wiJHNjb3BlXCIsIFwiJGxvY2F0aW9uXCIsICgkc2NvcGUsICRsb2NhdGlvbikgPT4ge1xyXG4gICAgY29uc29sZS5sb2coJHNjb3BlLmVudGl0eSk7XHJcbiAgICAkc2NvcGUubGFiZWxzID0gW107XHJcbiAgICB2YXIgbGFiZWxLZXlXZWlnaHRzID0ge1xyXG4gICAgICBcInJlZ2lvblwiOiAxLFxyXG4gICAgICBcInN5c3RlbVwiOiAyLFxyXG4gICAgICBcInR5cGVcIjogMyxcclxuICAgICAgXCJiYXRjaFwiOiA0LFxyXG4gICAgICBcInZlcnNpb25cIjogNVxyXG4gICAgfTtcclxuICAgICRzY29wZS4kd2F0Y2goJ2VudGl0eScsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcclxuICAgICAgaWYgKG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgLy8gbG9nLmRlYnVnKFwibGFiZWxzOiBcIiwgbmV3VmFsdWUpO1xyXG4gICAgICAgIC8vIG1hc3NhZ2UgdGhlIGxhYmVscyBhIGJpdFxyXG4gICAgICAgICRzY29wZS5sYWJlbHMgPSBbXTtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goQ29yZS5wYXRoR2V0KCRzY29wZS5lbnRpdHksIFtcIm1ldGFkYXRhXCIsIFwibGFiZWxzXCJdKSwgKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICAgIGlmIChrZXkgPT09ICdmYWJyaWM4JyB8fCBrZXkgPT09ICdzdHlsZScgfHwga2V5ID09PSAnc3RhdHVzJyB8fCAoa2V5ID09PSAnaXNUYXJnZXQnICYmIHZhbHVlID09PSAnZmFsc2UnKSB8fCBrZXkgPT09ICdpc0V4dHJhY3QnIHx8IGtleSA9PT0gJ25hbWUnKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gbm90IHN1cmUgd2hhdCB0aGlzIGlzIGZvciwgdGhlIGNvbnRhaW5lciB0eXBlP1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgJHNjb3BlLmxhYmVscy5wdXNoKHtcclxuICAgICAgICAgICAga2V5OiBrZXksXHJcbiAgICAgICAgICAgIHRpdGxlOiB2YWx1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vICBsZXRzIHNvcnQgYnkga2V5IGJ1dCBsZXRzIG1ha2Ugc3VyZSB0aGF0IHdlIHdlaWdodCBjZXJ0YWluIGxhYmVscyBzbyB0aGV5IGFyZSBmaXJzdFxyXG4gICAgICAgICRzY29wZS5sYWJlbHMgPSAkc2NvcGUubGFiZWxzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgIGZ1bmN0aW9uIGdldFdlaWdodChrZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxhYmVsS2V5V2VpZ2h0c1trZXldIHx8IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YXIgbjEgPSBhW1wia2V5XCJdO1xyXG4gICAgICAgICAgdmFyIG4yID0gYltcImtleVwiXTtcclxuICAgICAgICAgIHZhciB3MSA9IGdldFdlaWdodChuMSk7XHJcbiAgICAgICAgICB2YXIgdzIgPSBnZXRXZWlnaHQobjIpO1xyXG4gICAgICAgICAgdmFyIGRpZmYgPSB3MSAtIHcyO1xyXG4gICAgICAgICAgaWYgKGRpZmYgPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZGlmZiA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAobjEgJiYgbjIpIHtcclxuICAgICAgICAgICAgaWYgKG4xID4gbjIpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChuMSA8IG4yKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAobjEgPT09IG4yKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobjEpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLmhhbmRsZUNsaWNrID0gKGVudGl0eSwgbGFiZWxUeXBlOnN0cmluZywgdmFsdWUpID0+IHtcclxuICAgICAgLy8gbG9nLmRlYnVnKFwiaGFuZGxlQ2xpY2ssIGVudGl0eTogXCIsIGVudGl0eSwgXCIga2V5OiBcIiwgbGFiZWxUeXBlLCBcIiB2YWx1ZTogXCIsIHZhbHVlKTtcclxuICAgICAgJHNjb3BlLiRlbWl0KCdsYWJlbEZpbHRlclVwZGF0ZScsIHZhbHVlLnRpdGxlKVxyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5sYWJlbENsYXNzID0gY29udGFpbmVyTGFiZWxDbGFzcztcclxuICB9XSk7XHJcblxyXG4gIC8v5pyN5Yqh54q25oCB6L+H5rukXHJcbiAgZXhwb3J0IHZhciBTdGF0dXMgPSBjb250cm9sbGVyKCdTdGF0dXMnLCBbXCIkc2NvcGVcIiwgXCIkaHR0cFwiLCBcIiRpbnRlcnZhbFwiLCBcIiRsb2NhdGlvblwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgKCRzY29wZSwgJGh0dHAsICRpbnRlcnZhbCwgJGxvY2F0aW9uLCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcbiAgICAgIC8qJHNjb3BlLiR3YXRjaCgnZW50aXR5JywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgaWYobmV3VmFsdWUpXHJcbiAgICAgICAgICAgICBjb25zb2xlLmxvZyhuZXdWYWx1ZSk7XHJcbiAgICAgIH0sdHJ1ZSk7Ki9cclxuICB9XSk7XHJcblxyXG4gIGV4cG9ydCB2YXIgVGFza0VkaXQgPSBjb250cm9sbGVyKCdUYXNrRWRpdCcsIFsnJHNjb3BlJywgKCRzY29wZSkgPT4ge1xyXG4gICAgJHNjb3BlLmRlbGV0ZVJvdyA9IChlbnRpdHkpID0+e1xyXG4gICAgICAkc2NvcGUuJGVtaXQoJ2RlbGV0ZVJvdycsIGVudGl0eSk7XHJcbiAgICB9XHJcbiAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgX21vZHVsZS5kaXJlY3RpdmUoXCJoYXd0aW9UYWJzXCIsIFsnSGF3dGlvU3ViVGFicycsIChIYXd0aW9TdWJUYWJzKSA9PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSA9PiB7XHJcbiAgICAgICAgSGF3dGlvU3ViVGFicy5hcHBseShzY29wZS4kZXZhbCgnc3ViVGFiQ29uZmlnJykpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuICBleHBvcnQgdmFyIFRlbXBsYXRlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJUZW1wbGF0ZUNvbnRyb2xsZXJcIiwgW1xyXG4gICAgXCIkc2NvcGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwibWFya2VkXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbW9kYWxcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBtYXJrZWQsICR0ZW1wbGF0ZUNhY2hlLCAkbW9kYWwsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcbiAgICB2YXIgbW9kZWwgPSAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAkc2NvcGUuZmlsdGVyVGV4dCA9ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl07XHJcblxyXG4gICAgJHNjb3BlLnRhcmdldE5hbWVzcGFjZSA9ICRyb3V0ZVBhcmFtcy50YXJnZXROYW1lc3BhY2U7XHJcbiAgICBpbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgICRzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKCdtb2RlbC5uYW1lc3BhY2VzJywgKCkgPT4ge1xyXG4gICAgICBpZiAoISRzY29wZS50YXJnZXROYW1lc3BhY2UpIHtcclxuICAgICAgICAkc2NvcGUudGFyZ2V0TmFtZXNwYWNlID0gbW9kZWwuY3VycmVudE5hbWVzcGFjZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB2YXIgcmV0dXJuVG8gPSBuZXcgVVJJKCRsb2NhdGlvbi5zZWFyY2goKVsncmV0dXJuVG8nXSB8fCAnL2t1YmVybmV0ZXMvYXBwcycpO1xyXG5cclxuICAgIGZ1bmN0aW9uIGdvQmFjaygpIHtcclxuICAgICAgJGxvY2F0aW9uLnBhdGgocmV0dXJuVG8ucGF0aCgpKS5zZWFyY2gocmV0dXJuVG8ucXVlcnkodHJ1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldEFubm90YXRpb25zKG9iaikge1xyXG4gICAgICByZXR1cm4gQ29yZS5wYXRoR2V0KG9iaiwgWydtZXRhZGF0YScsICdhbm5vdGF0aW9ucyddKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRWYWx1ZUZvcihvYmosIGtleSkge1xyXG4gICAgICB2YXIgYW5ub3RhdGlvbnMgPSBnZXRBbm5vdGF0aW9ucyhvYmopO1xyXG4gICAgICBpZiAoIWFubm90YXRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKG9iaik7XHJcbiAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIGZ1bGxLZXkgPSBcImZhYnJpYzguXCIgKyBuYW1lICsgXCIvXCIgKyBrZXk7XHJcbiAgICAgICAgdmFyIGFuc3dlciA9IGFubm90YXRpb25zW2Z1bGxLZXldO1xyXG4gICAgICAgIGlmIChhbnN3ZXIpIHtcclxuICAgICAgICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHZhciBrZXk6IGFueSA9IF8uZmluZChfLmtleXMoYW5ub3RhdGlvbnMpLCAoazogc3RyaW5nKSA9PiBfLmVuZHNXaXRoKGssIGtleSkpO1xyXG4gICAgICBpZiAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIGFubm90YXRpb25zW2tleV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUuY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICBpZiAoJHNjb3BlLmZvcm1Db25maWcpIHtcclxuICAgICAgICBkZWxldGUgJHNjb3BlLmZvcm1Db25maWc7XHJcbiAgICAgICAgZGVsZXRlICRzY29wZS5lbnRpdHk7XHJcbiAgICAgICAgJHNjb3BlLm9iamVjdHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGdvQmFjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAkc2NvcGUuJHdhdGNoKCdtb2RlbC50ZW1wbGF0ZXMubGVuZ3RoJywgKG5ld1ZhbHVlKSA9PiB7XHJcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gMCkge1xyXG4gICAgICAgIGdvQmFjaygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgICovXHJcblxyXG4gICAgJHNjb3BlLmZpbHRlclRlbXBsYXRlcyA9ICh0ZW1wbGF0ZSkgPT4ge1xyXG4gICAgICBpZiAoQ29yZS5pc0JsYW5rKCRzY29wZS5maWx0ZXJUZXh0KSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBfLmNvbnRhaW5zKGFuZ3VsYXIudG9Kc29uKHRlbXBsYXRlKSwgJHNjb3BlLmZpbHRlclRleHQudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5vcGVuRnVsbERlc2NyaXB0aW9uID0gKHRlbXBsYXRlKSA9PiB7XHJcbiAgICAgIHZhciB0ZXh0ID0gbWFya2VkKGdldFZhbHVlRm9yKHRlbXBsYXRlLCAnZGVzY3JpcHRpb24nKSB8fCAnTm8gZGVzY3JpcHRpb24nKTtcclxuICAgICAgdmFyIG1vZGFsID0gJG1vZGFsLm9wZW4oe1xyXG4gICAgICAgIHRlbXBsYXRlVXJsOiBVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCAndGVtcGxhdGVEZXNjcmlwdGlvbi5odG1sJyksXHJcbiAgICAgICAgY29udHJvbGxlcjogWyckc2NvcGUnLCAnJG1vZGFsSW5zdGFuY2UnLCAoJHNjb3BlLCAkbW9kYWxJbnN0YW5jZSkgPT4ge1xyXG4gICAgICAgICAgJHNjb3BlLnRleHQgPSB0ZXh0LFxyXG4gICAgICAgICAgJHNjb3BlLm9rID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBtb2RhbC5jbG9zZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1dXHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuZ2V0RGVzY3JpcHRpb24gPSAodGVtcGxhdGUpID0+IHtcclxuICAgICAgdmFyIGFuc3dlcjphbnkgPSAkKG1hcmtlZChnZXRWYWx1ZUZvcih0ZW1wbGF0ZSwgJ2Rlc2NyaXB0aW9uJykgfHwgJ05vIGRlc2NyaXB0aW9uJykpO1xyXG4gICAgICB2YXIgdGV4dERlZmF1bHQgPSBhbnN3ZXIuaHRtbCgpO1xyXG4gICAgICB2YXIgbWF4TGVuZ3RoID0gMjAwO1xyXG4gICAgICBpZiAodGV4dERlZmF1bHQubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIHRydW5jYXRlZCA9ICQudHJpbSh0ZXh0RGVmYXVsdCkuc3Vic3RyaW5nKDAsIG1heExlbmd0aCkuc3BsaXQoJyAnKS5zbGljZSgwLCAtMSkuam9pbignICcpO1xyXG4gICAgICAgIGFuc3dlci5odG1sKHRydW5jYXRlZCArICcuLi4nKTtcclxuICAgICAgICBhbnN3ZXIuYXBwZW5kKCR0ZW1wbGF0ZUNhY2hlLmdldCgndHJ1bmNhdGVkRGVzY3JpcHRpb25UYWcuaHRtbCcpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYW5zd2VyLmh0bWwoKTtcclxuICAgIH07XHJcblxyXG4gICAgJHNjb3BlLmdldEljb25VcmwgPSAodGVtcGxhdGUpID0+IHtcclxuICAgICAgcmV0dXJuIGdldFZhbHVlRm9yKHRlbXBsYXRlLCAnaWNvblVybCcpIHx8IGRlZmF1bHRJY29uVXJsO1xyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuZGVwbG95VGVtcGxhdGUgPSAodGVtcGxhdGUpID0+IHtcclxuICAgICAgbG9nLmRlYnVnKFwiVGVtcGxhdGUgcGFyYW1ldGVyczogXCIsIHRlbXBsYXRlLnBhcmFtZXRlcnMpO1xyXG4gICAgICBsb2cuZGVidWcoXCJUZW1wbGF0ZSBvYmplY3RzOiBcIiwgdGVtcGxhdGUub2JqZWN0cyk7XHJcbiAgICAgIGxvZy5kZWJ1ZyhcIlRlbXBsYXRlIGFubm90YXRpb25zOiBcIiwgdGVtcGxhdGUubWV0YWRhdGEuYW5ub3RhdGlvbnMpO1xyXG4gICAgICB2YXIgdGVtcGxhdGVBbm5vdGF0aW9ucyA9IHRlbXBsYXRlLm1ldGFkYXRhLmFubm90YXRpb25zO1xyXG4gICAgICBpZiAodGVtcGxhdGVBbm5vdGF0aW9ucykge1xyXG4gICAgICAgIF8uZm9yRWFjaCh0ZW1wbGF0ZS5vYmplY3RzLCAob2JqZWN0OmFueSkgPT4ge1xyXG4gICAgICAgICAgdmFyIGFubm90YXRpb25zID0gb2JqZWN0Lm1ldGFkYXRhLmFubm90YXRpb25zIHx8IHt9O1xyXG4gICAgICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKG9iamVjdCk7XHJcbiAgICAgICAgICB2YXIgbWF0Y2hlcyA9IF8uZmlsdGVyKF8ua2V5cyh0ZW1wbGF0ZUFubm90YXRpb25zKSwgKGtleSkgPT4ga2V5Lm1hdGNoKCcuJyArIG5hbWUgKyAnLycpKTtcclxuICAgICAgICAgIG1hdGNoZXMuZm9yRWFjaCgobWF0Y2gpID0+IHtcclxuICAgICAgICAgICAgaWYgKCEobWF0Y2ggaW4gYW5ub3RhdGlvbnMpKSB7XHJcbiAgICAgICAgICAgICAgYW5ub3RhdGlvbnNbbWF0Y2hdID0gdGVtcGxhdGVBbm5vdGF0aW9uc1ttYXRjaF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgb2JqZWN0Lm1ldGFkYXRhLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIHJvdXRlU2VydmljZU5hbWUgPSA8c3RyaW5nPiB1bmRlZmluZWQ7XHJcbiAgICAgIHZhciBzZXJ2aWNlID0gXy5maW5kKHRlbXBsYXRlLm9iamVjdHMsIChvYmopID0+IHtcclxuICAgICAgICBpZiAoZ2V0S2luZChvYmopID09PSBcIlNlcnZpY2VcIikge1xyXG4gICAgICAgICAgdmFyIHBvcnRzID0gZ2V0UG9ydHMob2JqKTtcclxuICAgICAgICAgIGlmIChwb3J0cyAmJiBwb3J0cy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoc2VydmljZSkge1xyXG4gICAgICAgIHJvdXRlU2VydmljZU5hbWUgPSBnZXROYW1lKHNlcnZpY2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGxvZy5kZWJ1ZyhcIlNlcnZpY2U6IFwiLCBzZXJ2aWNlKTtcclxuICAgICAgaWYgKCghcm91dGVTZXJ2aWNlTmFtZSB8fCAhaXNPcGVuU2hpZnQpICYmICghdGVtcGxhdGUucGFyYW1ldGVycyB8fCB0ZW1wbGF0ZS5wYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMCkpIHtcclxuICAgICAgICBsb2cuZGVidWcoXCJObyBwYXJhbWV0ZXJzIHJlcXVpcmVkLCBkZXBsb3lpbmcgb2JqZWN0c1wiKTtcclxuICAgICAgICBhcHBseU9iamVjdHModGVtcGxhdGUub2JqZWN0cyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBmb3JtQ29uZmlnID0ge1xyXG4gICAgICAgIHN0eWxlOiBIYXd0aW9Gb3Jtcy5Gb3JtU3R5bGUuU1RBTkRBUkQsXHJcbiAgICAgICAgaGlkZUxlZ2VuZDogdHJ1ZSxcclxuICAgICAgICBwcm9wZXJ0aWVzOiA8YW55PiB7fVxyXG4gICAgICB9O1xyXG4gICAgICB2YXIgcGFyYW1zID0gdGVtcGxhdGUucGFyYW1ldGVycztcclxuICAgICAgXy5mb3JFYWNoKHBhcmFtcywgKHBhcmFtOmFueSkgPT4ge1xyXG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IDxhbnk+IHt9O1xyXG4gICAgICAgIHByb3BlcnR5LmxhYmVsID0gXy5zdGFydENhc2UocGFyYW0ubmFtZSk7XHJcbiAgICAgICAgcHJvcGVydHkuZGVzY3JpcHRpb24gPSBwYXJhbS5kZXNjcmlwdGlvbjtcclxuICAgICAgICBwcm9wZXJ0eS5kZWZhdWx0ID0gcGFyYW0udmFsdWU7XHJcbiAgICAgICAgLy8gVE9ETywgZG8gcGFyYW1ldGVycyBzdXBwb3J0IHR5cGVzP1xyXG4gICAgICAgIHByb3BlcnR5LnR5cGUgPSAnc3RyaW5nJztcclxuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXNbcGFyYW0ubmFtZV0gPSBwcm9wZXJ0eTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChyb3V0ZVNlcnZpY2VOYW1lICYmIGlzT3BlblNoaWZ0KSB7XHJcbiAgICAgICAgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmNyZWF0ZVJvdXRlID0ge1xyXG4gICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxyXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgICAgICAgIGxhYmVsOiBcIkNyZWF0ZSBSb3V0ZVwiXHJcbiAgICAgICAgfTtcclxuLypcclxuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXMucm91dGVOYW1lID0ge1xyXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgICBsYWJlbDogJ1JvdXRlIE5hbWUnLFxyXG4gICAgICAgICAgZGVmYXVsdDogcm91dGVTZXJ2aWNlTmFtZSxcclxuICAgICAgICAgICdjb250cm9sLWdyb3VwLWF0dHJpYnV0ZXMnOiB7XHJcbiAgICAgICAgICAgICduZy1zaG93JzogJ2VudGl0eS5jcmVhdGVSb3V0ZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4qL1xyXG4gICAgICAgIGZvcm1Db25maWcucHJvcGVydGllcy5yb3V0ZVNlcnZpY2VOYW1lID0ge1xyXG4gICAgICAgICAgdHlwZTogJ2hpZGRlbicsXHJcbiAgICAgICAgICBkZWZhdWx0OiByb3V0ZVNlcnZpY2VOYW1lXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbmFtZXNwYWNlID0gY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgICAgICAvLyBUT0RPIHN0b3JlIHRoaXMgaW4gbG9jYWxTdG9yYWdlIVxyXG4gICAgICAgIHZhciBkb21haW4gPSBcInZhZ3JhbnQuZjhcIjtcclxuICAgICAgICB2YXIgZGVmYXVsdFJvdXRlSG9zdFN1ZmZpeCA9ICcuJyArIChuYW1lc3BhY2UgPT09IFwiZGVmYXVsdFwiID8gXCJcIiA6IG5hbWVzcGFjZSArIFwiLlwiKSArIGRvbWFpbjtcclxuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXMucm91dGVIb3N0bmFtZSA9IHtcclxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgZGVmYXVsdDogZGVmYXVsdFJvdXRlSG9zdFN1ZmZpeCxcclxuICAgICAgICAgIGxhYmVsOiBcIlJvdXRlIGhvc3QgbmFtZSBzdWZmaXhcIixcclxuICAgICAgICAgICdjb250cm9sLWdyb3VwLWF0dHJpYnV0ZXMnOiB7XHJcbiAgICAgICAgICAgICduZy1zaG93JzogJ2VudGl0eS5jcmVhdGVSb3V0ZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgICRzY29wZS5lbnRpdHkgPSA8YW55PiB7fTtcclxuICAgICAgJHNjb3BlLmZvcm1Db25maWcgPSBmb3JtQ29uZmlnO1xyXG4gICAgICAkc2NvcGUub2JqZWN0cyA9IHRlbXBsYXRlLm9iamVjdHM7XHJcbiAgICAgIGxvZy5kZWJ1ZyhcIkZvcm0gY29uZmlnOiBcIiwgZm9ybUNvbmZpZyk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGUoc3RyLCBkYXRhKSB7XHJcbiAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvXFwke1xcdyp9L2csIChtYXRjaCkgPT4ge1xyXG4gICAgICAgIHZhciBrZXkgPSBtYXRjaC5yZXBsYWNlKC9cXCR7LywgJycpLnJlcGxhY2UoL30vLCAnJykudHJpbSgpO1xyXG4gICAgICAgIHJldHVybiBkYXRhW2tleV0gfHwgbWF0Y2g7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuc3Vic3RpdHV0ZUFuZERlcGxveVRlbXBsYXRlID0gKCkgPT4ge1xyXG4gICAgICB2YXIgb2JqZWN0cyA9ICRzY29wZS5vYmplY3RzO1xyXG4gICAgICB2YXIgb2JqZWN0c1RleHQgPSBhbmd1bGFyLnRvSnNvbihvYmplY3RzLCB0cnVlKTtcclxuICAgICAgLy8gcHVsbCB0aGVzZSBvdXQgb2YgdGhlIGVudGl0eSBvYmplY3Qgc28gdGhleSdyZSBub3QgdXNlZCBpbiBzdWJzdGl0dXRpb25zXHJcbiAgICAgIHZhciBjcmVhdGVSb3V0ZSA9ICRzY29wZS5lbnRpdHkuY3JlYXRlUm91dGU7XHJcbiAgICAgIHZhciByb3V0ZUhvc3RuYW1lU3VmZml4ID0gJHNjb3BlLmVudGl0eS5yb3V0ZUhvc3RuYW1lIHx8IFwiXCI7XHJcbiAgICAgIHZhciByb3V0ZU5hbWUgPSAkc2NvcGUuZW50aXR5LnJvdXRlTmFtZTtcclxuICAgICAgdmFyIHJvdXRlU2VydmljZU5hbWUgPSAkc2NvcGUuZW50aXR5LnJvdXRlU2VydmljZU5hbWU7XHJcbiAgICAgIGRlbGV0ZSAkc2NvcGUuZW50aXR5LmNyZWF0ZVJvdXRlO1xyXG4gICAgICBkZWxldGUgJHNjb3BlLmVudGl0eS5yb3V0ZUhvc3RuYW1lO1xyXG4gICAgICBkZWxldGUgJHNjb3BlLmVudGl0eS5yb3V0ZU5hbWU7XHJcbiAgICAgIGRlbGV0ZSAkc2NvcGUuZW50aXR5LnJvdXRlU2VydmljZU5hbWU7XHJcbiAgICAgIG9iamVjdHNUZXh0ID0gc3Vic3RpdHV0ZShvYmplY3RzVGV4dCwgJHNjb3BlLmVudGl0eSk7XHJcbiAgICAgIG9iamVjdHMgPSBhbmd1bGFyLmZyb21Kc29uKG9iamVjdHNUZXh0KTtcclxuICAgICAgaWYgKGNyZWF0ZVJvdXRlKSB7XHJcbiAgICAgICAgdmFyIHJvdXRlcyA9IFtdO1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChvYmplY3RzLCAob2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICB2YXIga2luZCA9IG9iamVjdC5raW5kO1xyXG4gICAgICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKG9iamVjdCk7XHJcbiAgICAgICAgICBpZiAobmFtZSAmJiBcIlNlcnZpY2VcIiA9PT0ga2luZCkge1xyXG4gICAgICAgICAgICB2YXIgcm91dGVIb3N0bmFtZSA9IG5hbWUgKyByb3V0ZUhvc3RuYW1lU3VmZml4O1xyXG4gICAgICAgICAgICB2YXIgcm91dGUgPSB7XHJcbiAgICAgICAgICAgICAga2luZDogXCJSb3V0ZVwiLFxyXG4gICAgICAgICAgICAgIGFwaVZlcnNpb246IGRlZmF1bHRPU0FwaVZlcnNpb24sXHJcbiAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzcGVjOiB7XHJcbiAgICAgICAgICAgICAgICBob3N0OiByb3V0ZUhvc3RuYW1lLFxyXG4gICAgICAgICAgICAgICAgdG86IHtcclxuICAgICAgICAgICAgICAgICAga2luZDogXCJTZXJ2aWNlXCIsXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJvdXRlcy5wdXNoKHJvdXRlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBvYmplY3RzID0gb2JqZWN0cy5jb25jYXQocm91dGVzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJHNjb3BlLnRhcmdldE5hbWVzcGFjZSAhPT0gbW9kZWwuY3VycmVudE5hbWVzcGFjZSgpKSB7XHJcbiAgICAgICAgJHNjb3BlLiRvbignV2F0Y2hlck5hbWVzcGFjZUNoYW5nZWQnLCAoKSA9PiB7XHJcbiAgICAgICAgICBsb2cuZGVidWcoXCJOYW1lc3BhY2UgY2hhbmdlZFwiKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBhcHBseU9iamVjdHMob2JqZWN0cyk7XHJcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIENvcmUubm90aWZpY2F0aW9uKCdpbmZvJywgXCJTd2l0Y2hpbmcgdG8gbmFtZXNwYWNlIFwiICsgJHNjb3BlLnRhcmdldE5hbWVzcGFjZSArIFwiIGFuZCBkZXBsb3lpbmcgdGVtcGxhdGVcIik7XHJcbiAgICAgICAgbW9kZWwua3ViZXJuZXRlcy5zZWxlY3RlZE5hbWVzcGFjZSA9ICRzY29wZS50YXJnZXROYW1lc3BhY2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXBwbHlPYmplY3RzKG9iamVjdHMpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGFwcGx5T2JqZWN0cyhvYmplY3RzKSB7XHJcbiAgICAgIHZhciBwcm9qZWN0Q2xpZW50ID0gS3ViZXJuZXRlcy5jcmVhdGVLdWJlcm5ldGVzQ2xpZW50KFwicHJvamVjdHNcIik7XHJcblxyXG4gICAgICBfLmZvckVhY2gob2JqZWN0cywgKG9iamVjdDphbnkpID0+IHtcclxuICAgICAgICBsb2cuZGVidWcoXCJPYmplY3Q6IFwiLCBvYmplY3QpO1xyXG5cclxuICAgICAgICB2YXIga2luZCA9IGdldEtpbmQob2JqZWN0KTtcclxuICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUob2JqZWN0KTtcclxuICAgICAgICB2YXIgbnMgPSBnZXROYW1lc3BhY2Uob2JqZWN0KTtcclxuXHJcbiAgICAgICAgaWYgKGtpbmQgJiYgbmFtZSkge1xyXG4gICAgICAgICAgaWYgKG5zICYmIG5zICE9PSBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpKSB7XHJcbiAgICAgICAgICAgIHZhciBwcm9qZWN0ID0ge1xyXG4gICAgICAgICAgICAgIGFwaVZlcnNpb246IEt1YmVybmV0ZXMuZGVmYXVsdEFwaVZlcnNpb24sXHJcbiAgICAgICAgICAgICAga2luZDogXCJQcm9qZWN0XCIsXHJcbiAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG5zLFxyXG4gICAgICAgICAgICAgICAgbGFiZWxzOiB7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBwcm9qZWN0Q2xpZW50LnB1dChwcm9qZWN0LFxyXG4gICAgICAgICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhcIkNyZWF0ZWQgbmFtZXNwYWNlOiBcIiArIG5zKVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gY3JlYXRlIG5hbWVzcGFjZTogXCIgKyBucyArIFwiOiBcIiArIGFuZ3VsYXIudG9Kc29uKGVycikpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHZhciBwbHVyYWxLaW5kID0ga2luZC50b0xvd2VyQ2FzZSgpICsgXCJzXCI7XHJcbiAgICAgICAgICB2YXIga3ViZUNsaWVudCA9IEt1YmVybmV0ZXMuY3JlYXRlS3ViZXJuZXRlc0NsaWVudChwbHVyYWxLaW5kLCBucyk7XHJcbiAgICAgICAgICBrdWJlQ2xpZW50LnB1dChvYmplY3QsXHJcbiAgICAgICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgbG9nLmluZm8oXCJ1cGRhdGVkIFwiICsga2luZCArIFwiIG5hbWU6IFwiICsgbmFtZSArIChucyA/IFwiIG5zOiBcIiArIG5zOiBcIlwiKSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byB1cGRhdGUgXCIgKyBraW5kICsgXCIgbmFtZTogXCIgKyBuYW1lICsgKG5zID8gXCIgbnM6IFwiICsgbnM6IFwiXCIpICsgXCIgZXJyb3I6IFwiICsgYW5ndWxhci50b0pzb24oZXJyKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGdvQmFjaygpO1xyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5kZWxldGVUZW1wbGF0ZSA9ICh0ZW1wbGF0ZSkgPT4ge1xyXG4gICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XHJcbiAgICAgICAgY29sbGVjdGlvbjogW3RlbXBsYXRlXSxcclxuICAgICAgICBpbmRleDogJ21ldGFkYXRhLm5hbWUnLFxyXG4gICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBLdWJlcm5ldGVzTW9kZWxbJ3RlbXBsYXRlc1Jlc291cmNlJ10uZGVsZXRlKHtcclxuICAgICAgICAgICAgICBpZDogdGVtcGxhdGUubWV0YWRhdGEubmFtZVxyXG4gICAgICAgICAgICB9LCB1bmRlZmluZWQsICgpID0+IHtcclxuICAgICAgICAgICAgICBLdWJlcm5ldGVzTW9kZWxbJ3RlbXBsYXRlc1Jlc291cmNlJ10ucXVlcnkoKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXNNb2RlbC50ZW1wbGF0ZXMgPSBkYXRhLml0ZW1zO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZyB0ZW1wbGF0ZTogXCIsIGVycm9yKTsgXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGl0bGU6ICdEZWxldGUgVGVtcGxhdGU/JyxcclxuICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIHRlbXBsYXRlIHdpbGwgYmUgZGVsZXRlZDonLFxyXG4gICAgICAgIG9rVGV4dDogJ0RlbGV0ZScsXHJcbiAgICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXInLFxyXG4gICAgICAgIGN1c3RvbTogXCJUaGlzIG9wZXJhdGlvbiBpcyBwZXJtYW5lbnQgb25jZSBjb21wbGV0ZWQhXCIsXHJcbiAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXHJcbiAgICAgIH0pLm9wZW4oKTtcclxuICAgIH07XHJcbiAgfV0pO1xyXG59XHJcblxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbm1vZHVsZSBOYXZpZ2F0aW9uIHtcclxuXHJcbiAgZXhwb3J0IHZhciBwbHVnaW5OYW1lID0gJ2hhd3Rpby1uYXZpZ2F0aW9uJztcclxuICBleHBvcnQgdmFyIGxvZyA9IExvZ2dlci5nZXQocGx1Z2luTmFtZSk7XHJcbiAgZXhwb3J0IHZhciBfbW9kdWxlID0gYW5ndWxhci5tb2R1bGUocGx1Z2luTmFtZSwgW10pO1xyXG5cclxuICBfbW9kdWxlLnJ1bigoKSA9PntcclxuICAgIGNvbnNvbGUubG9nKFwiMVwiKTsgICAgXHJcbiAgfSk7XHJcblxyXG4gIF9tb2R1bGUuc2VydmljZSgnSGF3dGlvQnJlYWRjcnVtYnMnLCAoKSA9PiB7XHJcbiAgICB2YXIgX2NvbmZpZyA9IFtdO1xyXG4gICAgdmFyIHNlbGYgPSB7XHJcbiAgICAgIGFwcGx5OiAoY29uZmlnKSA9PiB7XHJcbiAgICAgICAgX2NvbmZpZy5sZW5ndGggPSAwO1xyXG4gICAgICAgIF8uZm9yRWFjaChjb25maWcsIChjcnVtYikgPT4ge1xyXG4gICAgICAgICAgX2NvbmZpZy5wdXNoKGNydW1iKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgZ2V0OiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIF9jb25maWc7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gc2VsZjtcclxuICB9KTtcclxuXHJcbiAgX21vZHVsZS5zZXJ2aWNlKCdIYXd0aW9TdWJUYWJzJywgKCkgPT4ge1xyXG4gICAgdmFyIF9jb25maWcgPSBbXTtcclxuICAgIHZhciBzZWxmID0ge1xyXG4gICAgICBhcHBseTogKGNvbmZpZykgPT4ge1xyXG4gICAgICAgIF9jb25maWcubGVuZ3RoID0gMDtcclxuICAgICAgICBfLmZvckVhY2goY29uZmlnLCAoY3J1bWIpID0+IHtcclxuICAgICAgICAgIF9jb25maWcucHVzaChjcnVtYik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGdldDogKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBfY29uZmlnO1xyXG4gICAgICB9IFxyXG4gICAgfSBcclxuICAgIHJldHVybiBzZWxmO1xyXG4gIH0pO1xyXG5cclxuICBfbW9kdWxlLmRpcmVjdGl2ZSgnaGF3dGlvUmVsYXRpdmVIcmVmJywgWyckbG9jYXRpb24nLCAoJGxvY2F0aW9uKSA9PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZXN0cmljdDogJ0EnLFxyXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHIpID0+IHtcclxuICAgICAgICB2YXIgdGFyZ2V0UGF0aCA9IGF0dHJbJ2hhd3Rpb1JlbGF0aXZlSHJlZiddO1xyXG4gICAgICAgIHZhciB0YXJnZXRIcmVmID0gbmV3IFVSSSgkbG9jYXRpb24udXJsKCkpO1xyXG4gICAgICAgIHRhcmdldEhyZWYuc2VnbWVudCh0YXJnZXRQYXRoKTtcclxuICAgICAgICBlbGVtZW50LmF0dHIoJ2hyZWYnLCB0YXJnZXRIcmVmLnRvU3RyaW5nKCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfV0pO1xyXG5cclxuICBfbW9kdWxlLmRpcmVjdGl2ZSgndmlld3BvcnRIZWlnaHQnLCBbJyR3aW5kb3cnLCAnJGRvY3VtZW50JywgKCR3aW5kb3csICRkb2N1bWVudCkgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgICAgbGluazogKHNjb3BlLCBlbGVtZW50LCBhdHRyKSA9PiB7XHJcbiAgICAgICAgLy8gbG9nLmRlYnVnKFwiV2luZG93OiBcIiwgJHdpbmRvdyk7XHJcbiAgICAgICAgLy8gbG9nLmRlYnVnKFwiZWxlbWVudDogXCIsIGVsZW1lbnQpO1xyXG4gICAgICAgIHZhciB3aW4gPSAkKCR3aW5kb3cpO1xyXG4gICAgICAgIHZhciByZXNpemVGdW5jID0gKCkgPT4ge1xyXG4gICAgICAgICAgdmFyIHZpZXdwb3J0SGVpZ2h0ID0gd2luLmlubmVySGVpZ2h0KCk7XHJcbiAgICAgICAgICAvLyBsb2cuZGVidWcoXCJWaWV3cG9ydCBoZWlnaHQ6IFwiLCB2aWV3cG9ydEhlaWdodCk7XHJcbiAgICAgICAgICB2YXIgZWxUb3AgPSBlbGVtZW50Lm9mZnNldCgpLnRvcDtcclxuICAgICAgICAgIC8vIGxvZy5kZWJ1ZyhcIkVsZW1lbnQgdG9wOiBcIiwgZWxUb3ApO1xyXG4gICAgICAgICAgdmFyIGhlaWdodCA9IHZpZXdwb3J0SGVpZ2h0IC0gZWxUb3A7XHJcbiAgICAgICAgICBlbGVtZW50LmNzcygnaGVpZ2h0JywgaGVpZ2h0KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHdpbi5vbigncmVzaXplJywgcmVzaXplRnVuYyk7XHJcbiAgICAgICAgZWxlbWVudC5vbignJGRlc3Ryb3knLCAoKSA9PiB7XHJcbiAgICAgICAgICB3aW4ub2ZmKCdyZXNpemUnLCByZXNpemVGdW5jKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzZXRUaW1lb3V0KHJlc2l6ZUZ1bmMsIDUwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1dKTtcclxuXHJcbiAgX21vZHVsZS5kaXJlY3RpdmUoJ2hhd3Rpb01haW5PdXRsZXQnLCBbJ0hhd3Rpb1N1YlRhYnMnLCAoSGF3dGlvU3ViVGFicykgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgICAgbGluazogKHNjb3BlLCBlbGVtZW50LCBhdHRycykgPT4ge1xyXG4gICAgICAgIHNjb3BlLnRhYnMgPSBIYXd0aW9TdWJUYWJzO1xyXG4gICAgICAgIHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oJ3RhYnMuZ2V0KCknLCAodGFicykgPT4ge1xyXG4gICAgICAgICAgLy8gbG9nLmRlYnVnKFwic3ViVGFiQ29uZmlnOiBcIiwgc3ViVGFiQ29uZmlnKTtcclxuICAgICAgICAgIGlmICh0YWJzICYmIHRhYnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUNsYXNzKCdoaWRkZW4tbmF2Jyk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY3NzKHsgJ21hcmdpbi1sZWZ0JzogJycgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlbGVtZW50LmFkZENsYXNzKCdoaWRkZW4tbmF2Jyk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY3NzKHsgJ21hcmdpbi1sZWZ0JzogJ2F1dG8nIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICB9XSk7XHJcblxyXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCdoYXd0aW9UYWJzT3V0bGV0JywgWydIYXd0aW9TdWJUYWJzJywgKEhhd3Rpb1N1YlRhYnMpID0+IHtcclxuICAgIHZhciBpbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdHJpY3Q6ICdBRScsXHJcbiAgICAgIHJlcGxhY2U6IHRydWUsXHJcbiAgICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1wZi12ZXJ0aWNhbCBuYXYtcGYtdmVydGljYWwtd2l0aC1zZWNvbmRhcnktbmF2XCIgbmctY29udHJvbGxlcj1cIkRldmVsb3Blci5OYXZCYXJDb250cm9sbGVyXCIgbmctY2xhc3M9XCJnZXRDbGFzcygpXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cFwiPlxyXG4gICAgICAgICAgICA8ZGl2IG5nLXJlcGVhdD1cInN1YlRhYiBpbiBzdWJUYWJDb25maWdcIiBuZy1zaG93PVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSB7e3N1YlRhYi5hY3RpdmUgPyAnYWN0aXZlJyA6ICcnfX1cIlxyXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7e3N1YlRhYi50aXRsZX19XCI+XHJcbiAgICAgICAgICAgICAgICA8YSBuZy1oaWRlPVwic3ViVGFiLnRlbXBsYXRlXCIgaHJlZj1cInt7c3ViVGFiLmhyZWZ9fVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBuZy1zaG93PVwic3ViVGFiLmNsYXNzXCIgbmctY2xhc3M9XCJzdWJUYWIuY2xhc3NcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpbWcgbmctc2hvdz1cInN1YlRhYi5pY29uXCIgbmctc3JjPVwie3tzdWJUYWIuaWNvbn19XCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7c3ViVGFiLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmctc2hvdz1cInN1YlRhYi50ZW1wbGF0ZVwiIGNvbXBpbGU9XCJzdWJUYWIudGVtcGxhdGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8Lz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgYCxcclxuICAgICAgbGluazogKHNjb3BlLCBlbGVtZW50LCBhdHRycykgPT4ge1xyXG4gICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vKDxhbnk+JCkoKS5zZXR1cFZlcnRpY2FsTmF2aWdhdGlvbihmYWxzZSk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlIGlmIHdlIGhhdmVuJ3QgbG9hZGVkIHBhdHRlcm5mbHlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NvcGUuSGF3dGlvU3ViVGFicyA9IEhhd3Rpb1N1YlRhYnM7XHJcblxyXG4gICAgICAgIHZhciBjb2xsYXBzZWQgPSBmYWxzZTtcclxuICAgICAgICBzY29wZS5nZXRDbGFzcyA9ICgpID0+IHtcclxuICAgICAgICAgIC8vbG9nLmRlYnVnKFwiTXkgY2xhc3M6IFwiLCBlbGVtZW50LmF0dHIoJ2NsYXNzJykpO1xyXG4gICAgICAgICAgaWYgKCFzY29wZS5zdWJUYWJDb25maWcgfHwgIXNjb3BlLnN1YlRhYkNvbmZpZy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdoaWRkZW4nO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2NvbGxhcHNlZCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjb3BlLiRvbignaGF3dGlvQ29sbGFwc2VOYXYnLCAoKSA9PiB7XHJcbiAgICAgICAgICBjb2xsYXBzZWQgPSAhY29sbGFwc2VkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNjb3BlLiR3YXRjaCgnSGF3dGlvU3ViVGFicy5nZXQoKScsIChzdWJUYWJDb25maWcpID0+IHtcclxuICAgICAgICAgIHNjb3BlLnN1YlRhYkNvbmZpZyA9IHN1YlRhYkNvbmZpZztcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfV0pO1xyXG5cclxuICBfbW9kdWxlLmRpcmVjdGl2ZSgnaGF3dGlvQnJlYWRjcnVtYnNPdXRsZXQnLCBbJ0hhd3Rpb0JyZWFkY3J1bWJzJywgJ0hhd3Rpb1N1YlRhYnMnLCAoSGF3dGlvQnJlYWRjcnVtYnMsIEhhd3Rpb1N1YlRhYnMpID0+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlc3RyaWN0OiAnRScsXHJcbiAgICAgIHNjb3BlOiB7fSxcclxuICAgICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2IG5hdmJhci1uYXYgbmF2LWJyZWFkY3J1bWIgbmF2LWJyZWFkY3J1bWJzXCIgbmctc2hvdz1cImJyZWFkY3J1bWJDb25maWdcIiBuZy1jb250cm9sbGVyPVwiRGV2ZWxvcGVyLk5hdkJhckNvbnRyb2xsZXJcIj5cclxuICAgICAgICAgIDxvbCBjbGFzcz1cImJyZWFkY3J1bWJcIj5cclxuICAgICAgICAgICAgPGxpIG5nLXJlcGVhdD1cImJyZWFkY3J1bWIgaW4gYnJlYWRjcnVtYkNvbmZpZ1wiIG5nLXNob3c9XCJpc1ZhbGlkKGJyZWFkY3J1bWIpICYmIGxhYmVsKGJyZWFkY3J1bWIpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwie3ticmVhZGNydW1iLmFjdGl2ZSA/ICdhY3RpdmUnIDogJyd9fVwiXHJcbiAgICAgICAgICAgICAgICBuZy1jbGFzcz1cIiRsYXN0ID8gJ2Ryb3Bkb3duJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3ticmVhZGNydW1iLnRpdGxlfX1cIj5cclxuICAgICAgICAgICAgICA8YSBuZy1zaG93PVwiYnJlYWRjcnVtYi5ocmVmXCIgaHJlZj1cInt7YnJlYWRjcnVtYi5ocmVmfX1cIj57e2xhYmVsKGJyZWFkY3J1bWIpfX08L2E+XHJcbiAgICAgICAgICAgICAgPHNwYW4gbmctaGlkZT1cImJyZWFkY3J1bWIuaHJlZlwiPnt7bGFiZWwoYnJlYWRjcnVtYil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIG5nLXNob3c9XCJwYWdlVGl0bGVcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBuZy1iaW5kPVwicGFnZVRpdGxlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC9vbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgYCxcclxuICAgICAgbGluazogKHNjb3BlLCBlbGVtZW50LCBhdHRycykgPT4gIHtcclxuICAgICAgICBzY29wZS5icmVhZGNydW1icyA9IEhhd3Rpb0JyZWFkY3J1bWJzO1xyXG4gICAgICAgIHNjb3BlLnRhYnMgPSBIYXd0aW9TdWJUYWJzO1xyXG4gICAgICAgIHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oJ2JyZWFkY3J1bWJzLmdldCgpJywgKGJyZWFkY3J1bWJDb25maWcpID0+IHtcclxuICAgICAgICAgIHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBicmVhZGNydW1iQ29uZmlnOyAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuICAgICAgICBzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKCd0YWJzLmdldCgpJywgKHRhYnMpID0+IHsgICAgICAgIFxyXG4gICAgICAgICAgdmFyIGFjdGl2ZSA9IF8uZmluZCh0YWJzLCAodGFiOmFueSkgPT4gdGFiLmFjdGl2ZSk7XHJcbiAgICAgICAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHNjb3BlLnBhZ2VUaXRsZSA9IGFjdGl2ZS5sYWJlbDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNjb3BlLnBhZ2VUaXRsZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XSk7XHJcblxyXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCdwbGF0Zm9ybVN1YlRhYnNPdXRsZXQnLCBbJ0hhd3Rpb1N1YlRhYnMnLCAoSGF3dGlvU3ViVGFicykgPT4ge1xyXG4gICAgdmFyIGluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZXN0cmljdDogJ0FFJyxcclxuICAgICAgcmVwbGFjZTogdHJ1ZSxcclxuICAgICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LXBmLXZlcnRpY2FsIG5hdi1wZi12ZXJ0aWNhbC13aXRoLXNlY29uZGFyeS1uYXYgc2pfbWVudVwiICBuZy1jb250cm9sbGVyPVwiRGV2ZWxvcGVyLk5hdkJhckNvbnRyb2xsZXJcIiBuZy1jbGFzcz1cImdldENsYXNzKClcIj5cclxuICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdmJhci1sZi1tZW51IFwiICA+XHJcbiAgICAgICAgICAgIDxsaSBuZy1yZXBlYXQ9XCJzdWJUYWIgaW4gc3ViVGFiQ29uZmlnIFwiID5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhwYW5kYWJsZSBjbG9zZWQgXCIgIG5nLXNob3c9XCJzdWJUYWIuaXRlbXMubGVuZ3RoXCIgc3R5bGU9XCIgcGFkZGluZzowO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiB0aXRsZT1cIlRoZSB0aXRsZVwiIGNsYXNzPVwidGl0bGUgc2pfbWVudV9uYXZcIiA+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIHNqX21lbnVfMDFcIiA+e3tzdWJUYWIubGFiZWx9fTwvaT4gXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImV4cGFuZGFibGUtYm9keSAgc2pfbWVudV91bFwiID5cclxuICAgICAgICAgICAgICAgICAgPGxpIG5nLXJlcGVhdD1cIml0ZW0gaW4gc3ViVGFiLml0ZW1zXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2l0ZW0uaHJlZn19XCIgPnt7aXRlbS5sYWJlbH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IG5nLWhpZGU9XCJzdWJUYWIuaXRlbXMubGVuZ3RoXCIgY2xhc3M9XCJzal9tZW51X25hdlwiID5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIHNqX21lbnVfMDJcIiA+PC9pPjxhIGhyZWY9XCJ7e3N1YlRhYi5ocmVmfX1cIj57e3N1YlRhYi5sYWJlbH19PC9hPiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2xpPiAgXHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PiBcclxuICAgICAgYCxcclxuICAgICAgbGluazogKHNjb3BlLCBlbGVtZW50LCBhdHRycykgPT4ge1xyXG4gICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vKDxhbnk+JCkoKS5zZXR1cFZlcnRpY2FsTmF2aWdhdGlvbihmYWxzZSk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlIGlmIHdlIGhhdmVuJ3QgbG9hZGVkIHBhdHRlcm5mbHlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NvcGUuSGF3dGlvU3ViVGFicyA9IEhhd3Rpb1N1YlRhYnM7XHJcblxyXG4gICAgICAgIHZhciBjb2xsYXBzZWQgPSBmYWxzZTtcclxuICAgICAgICBzY29wZS5nZXRDbGFzcyA9ICgpID0+IHtcclxuICAgICAgICAgIC8vbG9nLmRlYnVnKFwiTXkgY2xhc3M6IFwiLCBlbGVtZW50LmF0dHIoJ2NsYXNzJykpO1xyXG4gICAgICAgICAgaWYgKCFzY29wZS5zdWJUYWJDb25maWcgfHwgIXNjb3BlLnN1YlRhYkNvbmZpZy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdoaWRkZW4nO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2NvbGxhcHNlZCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjb3BlLiRvbignaGF3dGlvQ29sbGFwc2VOYXYnLCAoKSA9PiB7XHJcbiAgICAgICAgICBjb2xsYXBzZWQgPSAhY29sbGFwc2VkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNjb3BlLiR3YXRjaCgnSGF3dGlvU3ViVGFicy5nZXQoKScsIChzdWJUYWJDb25maWcpID0+IHtcclxuICAgICAgICAgIHNjb3BlLnN1YlRhYkNvbmZpZyA9IHN1YlRhYkNvbmZpZztcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfV0pO1xyXG5cclxuICAvL2hhd3Rpb1BsdWdpbkxvYWRlci5hZGRNb2R1bGUoJ3BhdHRlcm5mbHknKTtcclxuXHJcbiAgaGF3dGlvUGx1Z2luTG9hZGVyLmFkZE1vZHVsZShwbHVnaW5OYW1lKTtcclxuXHJcbn1cclxuXHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==
angular.module("hawtio-kubernetes-templates", []).run(["$templateCache", function($templateCache) {$templateCache.put("plugins/configs/html/configMenuItem.html","<ul ng-controller=\"Configs.MenuItemController\" class=\"nav nav-pills\" role=\"tablist\">\r\n <li ng-repeat=\"item in menuItem\" role=\"presentation\">\r\n <a href=\"{{item.href}}\"><span class=\"{{item.icon}}\"></span> {{item.label}}</a>\r\n </li>\r\n</ul>\r\n");
$templateCache.put("plugins/configs/html/glusterfsSetting.html","<div ng-controller=\"Configs.GfsController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n <div class=\"container-content sj_content\">\r\n <div class=\"row\">\r\n <div class=\"mb10\">\r\n <button class=\"btn sj_btn_green\" style=\"color:#fff;\" ng-click=\"create()\">\r\n <span class=\"glyphicon glyphicon-plus \"></span> 添加\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\" ng-repeat=\"volume in volumes\">\r\n <table class=\"table table-bordered sj_content_table \" >\r\n <thead class=\"no-scope\">\r\n <tr>\r\n <th class=\"sj_c_green simple-table-checkbox\" style=\"padding:0 10px;color: #58b358;\">已启用</th>\r\n <th class=\"no-fade table-header\">\r\n <span class=\"\">{{volume.name}}</span>\r\n </th>\r\n <th class=\"no-fade table-header\" colspan=\"2\">\r\n <span class=\"\">云路径:{{volume.path}}</span>\r\n </th>\r\n \r\n <th class=\"no-fade table-header\">\r\n <span class=\"\">已用&nbsp;{{volume.usedSize}}&nbsp;&nbsp;/&nbsp;&nbsp;共&nbsp;{{allSize}}</span>\r\n </th>\r\n <th class=\"no-fade table-header\">\r\n <button class=\"btn sj_btn\" ng-click=\"editRow(volume)\">\r\n <span class=\"glyphicon glyphicon-pencil\"></span>&nbsp;&nbsp;编辑\r\n </button>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr ng-repeat=\"row in volume.brick track by $index\" class=\"row.class\">\r\n <td>\r\n <span class=\"glyphicon glyphicon-ok sj_c_green\" style=\"padding:0 10px; color: #58b358;\"></span>\r\n </td>\r\n <td >\r\n <span class=\"\">服务器{{$index+1}}</span>\r\n </td>\r\n <td >\r\n <span class=\"\">{{row.ip}}</span>\r\n </td>\r\n <td >\r\n <span class=\"\">存储路径:{{row.path}}</span>\r\n </td>\r\n <td >\r\n <span class=\"\">已用&nbsp;{{row.usedSize}}&nbsp;&nbsp;/&nbsp;&nbsp;共&nbsp;{{row.availableSize}}</span>\r\n </td>\r\n <td></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/configs/html/kubeClusterSetting.html","<div ng-controller=\"Configs.KubeController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n <div class=\"container-content \" >\r\n <div class=\"row align-center mb10\" ng-hide=\"model.oracleParam.length\">\r\n <p class=\"alert alert-info\">当前没有配置汇总库信息,请配置,否则汇总操作将不可用!</p>\r\n </div>\r\n <div class=\"row mb10\" ng-show=\"model.oracleParam.length\">\r\n <table class=\"table table-bordered table-striped sj_content_table\" hawtio-simple-table=\"tableConfig\" />\r\n </div>\r\n <div class=\"row\" >\r\n <div >\r\n <button class=\"btn sj_btn_green mb10\" style=\"color:#fff;\" ng-click=\"create()\">\r\n <span class=\"glyphicon glyphicon-plus\"></span> 添加\r\n </button>\r\n </div>\r\n </div>\r\n <hr>\r\n <div class=\"row \" style=\"padding-top:10px;\" ng-show=\"tableForm.length>=0 && (edit || add)\" >\r\n <h3 class=\"mb10\" ng-show=\"edit\" >编辑汇总库连接信息:</h3>\r\n <h3 class=\"mb10\" ng-show=\"add\" >添加汇总库信息:</h3>\r\n <div class=\"col-md-6 col-md-offset-1 \" >\r\n <form class=\"form-horizontal\" ng-submit=\"onSubmit(validForm.$valid)\" novalidate=\"novalidate\" name=\"validForm\">\r\n <div class=\"form-group\" ng-repeat=\"item in tableForm\">\r\n <label class=\"col-sm-2 control-label\">{{item.name}}</label>\r\n <div class=\"col-sm-10 sj_form_input\">\r\n <input type=\"text \" ng-model=\"item.value\">\r\n </div>\r\n </div>\r\n <div class=\"form-group\" style=\"margin-left:140px;\">\r\n <button class=\"btn sj_btn_blue\" type=\'submit\' style=\"color:#fff;\">\r\n <span class=\"glyphicon glyphicon-save \"></span> 保存\r\n </button>\r\n <button class=\"btn sj_btn_grey\" ng-click=\'cancel()\'>\r\n <span class=\"glyphicon glyphicon-remove \"></span> 取消\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <hr>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/configs/html/kubeForm.html","<form class=\"form-horizontal\" ng-submit=\"onSubmit(validForm.$valid)\" novalidate=\"novalidate\" name=\"validForm\" ng-init=\"mode=tableForm\">\r\n <div class=\"form-group\">\r\n <label class=\"col-sm-2 control-label\">名称</label>\r\n <div class=\"col-sm-10\">\r\n <input class=\"form-control \" type=\"text\" ng-model=\"mode.name\" id=\"orcName\" ng-minlength=\"4\" ng-maxlength=\"20\">\r\n <span class=\"glyphicon glyphicon-ok form-control-feedback\" ng-show=\"validForm.orcName.$valid\" />\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-sm-2 control-label\">名称</label>\r\n <div class=\"col-sm-10\">\r\n <input class=\"form-control\" type=\"text\" ng-model=\"mode.name\" id=\"orcName\" ng-minlength=\"4\" ng-maxlength=\"20\">\r\n <span class=\"glyphicon glyphicon-ok form-control-feedback\" ng-show=\"validForm.orcName.$valid\" />\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <button class=\"btn\" type=\'submit\'>\r\n <span class=\"glyphicon glyphicon-save\"></span> 保存\r\n </button>\r\n </div>\r\n</form>\r\n");
$templateCache.put("plugins/configs/html/shareLayout.html","<script type=\"text/ng-template\" id=\"tableEdit.html\" >\r\n <div class=\"ngCellText\" ng-init=\"entity=row.entity\" ng-controller=\"Configs.TableEdit\">\r\n <button class=\"btn sj_btn\" ng-click=\"editRow(entity)\">\r\n <span class=\"glyphicon glyphicon-pencil\"></span>&nbsp;&nbsp;编辑\r\n </button> \r\n <span class=\"pull-right\">&nbsp;</span> \r\n <button class=\"btn sj_btn\" ng-click=\"deleteRow(entity)\">\r\n <span class=\"glyphicon glyphicon-trash\"></span>&nbsp;&nbsp;删除\r\n </button> \r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"connectStatus.html\">\r\n <div class=\"ngCellText\" ng-init=\"entity=row.entity\">\r\n <div ng-show=\"true\" title=\"汇总库的连接状态\">\r\n <span ng-show=\"entity.status== 0\" class=\"glyphicon glyphicon-minus\">&nbsp;未连接</span>\r\n <span ng-show=\"entity.status== 1\" class=\"glyphicon glyphicon-ok\">&nbsp;连接成功</span>\r\n <span ng-show=\"entity.status== 2\" class=\"glyphicon glyphicon-import\">&nbsp;使用中</span>\r\n <span ng-show=\"entity.status== 3\" class=\"glyphicon glyphicon-remove\">&nbsp;连接失败</span>\r\n </div>\r\n </div>\r\n</script>\r\n<div ng-controller=\"Kubernetes.TopLevel\">\r\n <div class=\"wiki-icon-view\" ng-controller=\"Kubernetes.FileDropController\" nv-file-drop nv-file-over uploader=\"uploader\" over-class=\"ready-drop\">\r\n <div class=\"row kubernetes-view\" ng-view></div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/developer/html/addDataFile.html","<div class=\"data_container\" ng-controller=\"Developer.DataOverView\">\r\n <header class=\"data_heaer\">\r\n <h2 >江苏省审计厅数据汇总平台</h2>\r\n </header>\r\n <div class=\"data_content\">\r\n <div class=\"data_leftside fl\">\r\n <h3 class=\"data_h3\">本地文件列表</h3>\r\n <ul class=\"fl data_leftside_files\">\r\n <li class=\" data_title\">文件名</li>\r\n <li><label class=\"fl date_label\">列表项1列表项1</label><input type=\"checkbox\" class=\"fr\"/></li>\r\n <li><label class=\"fl date_label\">列表项1列表项1列表项1列表项11列表项11列表项1</label><input type=\"checkbox\" class=\"fr\"/></li>\r\n <li><label class=\"fl date_label\">列表项1列表项1</label><input type=\"checkbox\" class=\"fr\"/></li>\r\n <li><label class=\"fl date_label\">列表项1列表项1列表项1列表项11列表项11列表项1</label><input type=\"checkbox\" class=\"fr\"/></li>\r\n <li><label class=\"fl date_label\">列表项1列表项1</label><input type=\"checkbox\" class=\"fr\"/></li>\r\n <li><label class=\"fl date_label\">列表项1列表项1列表项1列表项11列表项11列表项1</label><input type=\"checkbox\" class=\"fr\"/></li>\r\n </ul>\r\n <ul class=\"fl data_leftside_files data_leftside_shu\">\r\n <li class=\" data_title\">文件属性</li>\r\n <li><label class=\"fl date_label\">列表项1列表项1</label><input type=\"checkbox\" class=\"fr\"/></li>\r\n <li><label class=\"fl date_label\">列表项1列表项1列表项1列表项11列表项11列表项1</label><input type=\"checkbox\" class=\"fr\"/></li>\r\n </ul>\r\n <div class=\"cl\"></div>\r\n </div><!--data_leftside end-->\r\n <div class=\"data_conbar fl\">\r\n <div class=\"date_btns\">\r\n <a href=\"#\" class=\"data_file_btn\" >选择本地xml<input type=\"file\" /></a>\r\n <a href=\"#\" class=\"data_file_btn\" style=\"font-size:12px;\" >选择服务器端xml<input type=\"file\" /></a>\r\n </div>\r\n <div class=\"date_btns\">\r\n <a href=\"#\" class=\"data_file_btn\" >导入到服务器<input type=\"file\" /></a>\r\n <a href=\"#\" class=\"data_file_btn\" >导出到硬盘<input type=\"file\" /></a>\r\n </div>\r\n </div><!--data_conbar end-->\r\n <div class=\"data_rightside fr\">\r\n <h3 class=\"data_h3\">服务器文件列表</h3>\r\n <div class=\"data_rightside_tree fl\">\r\n <div treecontrol class=\"tree-classic\"\r\n tree-model=\"dataForTheTree\"\r\n options=\"treeOptions\"\r\n on-selection=\"showSelected(node)\"\r\n selected-node=\"node1\">\r\n employee: {{node.name}} age {{node.age}}\r\n </div>\r\n <!-- <div class=\"tree well\">\r\n <ul>\r\n <li >\r\n <p class=\"icon-plus-sign\" style=\"padding-left:20px;\"> 数据类型1</p>\r\n <ul>\r\n <li>\r\n <p> 数据批次1</p>\r\n <ul>\r\n <li>\r\n <p> 行政区划1</p>\r\n <ul>\r\n <li>\r\n <p>数据版本1</p>\r\n </li>\r\n <li>\r\n <p>数据版本1</p>\r\n </li>\r\n </ul>\r\n </li>\r\n </ul>\r\n </li>\r\n\r\n </ul>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"tree well\">\r\n <ul>\r\n <li >\r\n <p class=\"icon-plus-sign\" style=\"padding-left:20px;\"> 数据类型1</p>\r\n <ul>\r\n <li>\r\n <p> 数据批次1</p>\r\n <ul>\r\n <li>\r\n <p> 行政区划1</p>\r\n <ul>\r\n <li>\r\n <p>数据版本1</p>\r\n </li>\r\n <li>\r\n <p>数据版本1</p>\r\n </li>\r\n </ul>\r\n </li>\r\n </ul>\r\n </li>\r\n\r\n </ul>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"tree well\">\r\n <ul>\r\n <li >\r\n <p class=\"icon-plus-sign\" style=\"padding-left:20px;\"> 数据类型1</p>\r\n <ul>\r\n <li>\r\n <p> 数据批次1</p>\r\n <ul>\r\n <li>\r\n <p> 行政区划1</p>\r\n <ul>\r\n <li>\r\n <p>数据版本1</p>\r\n </li>\r\n <li>\r\n <p>数据版本1</p>\r\n </li>\r\n </ul>\r\n </li>\r\n </ul>\r\n </li>\r\n\r\n </ul>\r\n </li>\r\n </ul>\r\n </div> -->\r\n </div><!--data_rightside_tree end-->\r\n <div class=\"data_leftside fl data_rightside_w\">\r\n <ul class=\"fl data_leftside_files\">\r\n <li class=\" data_title data_title_w\">文件名</li>\r\n <li><label class=\"fl date_label date_label_w\">列表项1列表项1</label><input type=\"checkbox\" class=\"fr\"/></li>\r\n <li><label class=\"fl date_label date_label_w\">列表项1列表项1列表项1列表项11列表项11列表项1</label><input type=\"checkbox\" class=\"fr\"/></li>\r\n <li><label class=\"fl date_label date_label_w\">列表项1列表项1</label><input type=\"checkbox\" class=\"fr\"/></li>\r\n <li><label class=\"fl date_label date_label_w\">列表项1列表项1列表项1列表项11列表项11列表项1</label><input type=\"checkbox\" class=\"fr\"/></li>\r\n <li><label class=\"fl date_label date_label_w\">列表项1列表项1</label><input type=\"checkbox\" class=\"fr\"/></li>\r\n <li><label class=\"fl date_label date_label_w\">列表项1列表项1列表项1列表项11列表项11列表项1</label><input type=\"checkbox\" class=\"fr\"/></li>\r\n </ul>\r\n <ul class=\"fl data_leftside_files data_leftside_shu\">\r\n <li class=\" data_title data_title_w\">文件属性</li>\r\n </ul>\r\n <div class=\"cl\"></div>\r\n </div><!--data_leftside end-->\r\n </div>\r\n <div class=\"cl\"></div>\r\n\r\n </div>\r\n\r\n\r\n\r\n</div>");
$templateCache.put("plugins/developer/html/code.html","<div ng-controller=\"Kubernetes.BuildConfigController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\" ng-show=\"model.tools.length\">\r\n <span ng-show=\"!id\">\r\n <hawtio-filter ng-model=\"tableConfig.filterOptions.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter tools...\"></hawtio-filter>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"entity.tools.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no tools currently available.</p>\r\n </div>\r\n <div ng-show=\"entity.tools.length\">\r\n <div ng-hide=\"entity.tools.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no tools currently available.</p>\r\n </div>\r\n <div ng-repeat=\"env in entity.tools | filter:filterTemplates | orderBy:\'label\' track by $index\">\r\n <div class=\"row\"\r\n title=\"{{env.description}}\">\r\n <div class=\"col-md-9\">\r\n <a href=\"{{env.url}}\">\r\n <h3>\r\n <i class=\"{{env.iconClass}}\"></i>\r\n {{env.label}}\r\n </h3>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/developer/html/environment.html","environment!!!!");
$templateCache.put("plugins/developer/html/environmentPanel.html","<div class=\"inline-block environment-row\" ng-controller=\"Developer.EnvironmentPanelController\">\r\n <div class=\"panel-group\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h2 class=\"panel-title inline-block\">\r\n <a href=\"{{env.url}}\" title=\"namespace: {{env.namespace}}\">\r\n <!-- <i class=\"{{env.iconClass}}\"></i>&nbsp; -->\r\n {{env.label}}\r\n </a>\r\n </h2>\r\n </div>\r\n\r\n <div class=\"panel-body\">\r\n <div class=\"environment-deploy-block\"\r\n ng-repeat=\"(project, versions) in envVersions[env.namespace] | orderBy:\'project\' track by $index\">\r\n <div ng-repeat=\"(version, versionInfo) in versions.versions | orderBy:\'version\' track by $index\">\r\n <div ng-repeat=\"(rcname, rc) in versionInfo.replicationControllers\">\r\n <div class=\"environment-deploy-version-and-pods\">\r\n <a href=\"{{rc.$viewLink}}\" ng-show=\"rc.$viewLink\"\r\n title=\"View the Replication Controller from project {{project}} of version {{version}}\">\r\n <i class=\"fa fa-cubes\"></i>\r\n {{rc.$name}}\r\n : {{version}}\r\n </a>\r\n <span ng-hide=\"rc.$viewLink\"\r\n title=\"View the Replication Controller from project {{project}} of version {{version}}\">\r\n <i class=\"fa fa-cubes\"></i>\r\n {{rc.$name}}\r\n : {{version}}\r\n </span>\r\n <span class=\"pull-right\" ng-show=\"rc.$serviceLink.href\">\r\n &nbsp;\r\n &nbsp;\r\n &nbsp;\r\n <a target=\"test-service\" href=\"{{rc.$serviceLink.href}}\" title=\"Open this service in a new tab\">\r\n <i class=\"fa fa-external-link\"></i>\r\n </a>\r\n </span>\r\n &nbsp;\r\n &nbsp;\r\n &nbsp;\r\n <span class=\"pull-right\">\r\n <a ng-show=\"rc.$podCounters.podsLink\" href=\"{{rc.$podCounters.podsLink}}\" title=\"View pods\">\r\n <span ng-show=\"rc.$podCounters.ready\"\r\n class=\"badge badge-success\">{{rc.$podCounters.ready}}</span>\r\n <span ng-show=\"rc.$podCounters.valid\"\r\n class=\"badge badge-info\">{{rc.$podCounters.valid}}</span>\r\n <span ng-show=\"rc.$podCounters.waiting\" class=\"badge\">{{rc.$podCounters.waiting}}</span>\r\n <span ng-show=\"rc.$podCounters.error\"\r\n class=\"badge badge-warning\">{{rc.$podCounters.error}}</span>\r\n </a>\r\n </span>\r\n </div>\r\n <div class=\"environment-deploy-build-info\">\r\n <a href=\"{{rc.$buildUrl}}\" target=\"builds\" ng-show=\"rc.$buildUrl && rc.$buildId\" class=\"=\"\r\n title=\"View the build which created this Replication Controller\">\r\n <i class=\"fa fa-tasks\"></i>\r\n Build #{{rc.$buildId}}\r\n </a>\r\n &nbsp;\r\n &nbsp;\r\n &nbsp;\r\n <a href=\"{{rc.$gitUrl}}\" target=\"git\" ng-show=\"rc.$gitUrl\" class=\"pull-right\"\r\n title=\"{{rc.$gitCommit}}\r\n {{rc.$gitCommitAuthor}}\r\n {{rc.$gitCommitDate}}\r\n {{rc.$gitCommitMessage}}\">\r\n <i class=\"fa fa-code-fork\"></i>\r\n Commit {{rc.$gitCommit | limitTo:7}}\r\n </a>\r\n <span ng-hide=\"rc.$gitUrl || !rc.$gitCommit\" class=\"pull-right\"\r\n title=\"{{rc.$gitCommit}}\r\n {{rc.$gitCommitAuthor}}\r\n {{rc.$gitCommitDate}}\r\n {{rc.$gitCommitMessage}}\">\r\n <i class=\"fa fa-code-fork\"></i>\r\n Commit {{rc.$gitCommit | limitTo:7}}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n");
$templateCache.put("plugins/developer/html/environments.html","<div class=\"project-dashboard\" ng-controller=\"Developer.ProjectController\" hawtio-card-bg>\r\n\r\n <div hawtio-breadcrumbs></div>\r\n <div hawtio-tabs></div>\r\n\r\n <!--\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\" ng-show=\"model.environments.length\">\r\n <span ng-show=\"!id\">\r\n <hawtio-filter ng-model=\"tableConfig.filterOptions.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter environments...\"></hawtio-filter>\r\n </span>\r\n </div>\r\n </div>\r\n -->\r\n\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"align-center\">\r\n <div class=\"spinner spinner-lg\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div ng-show=\"model.fetched\" style=\"float: none; position: static;\">\r\n<!--\r\n <div class=\"row page-header-row\">\r\n <div class=\"col-md-12\">\r\n <h1 class=\"inline-block\">{{id}}</h1>\r\n </div>\r\n </div>\r\n-->\r\n\r\n <!--\r\n <div class=\"pull-right\">\r\n <a href=\"{{entity.$build.url}}\" class=\"btn btn-default\" target=\"browse\">\r\n <i class=\"{{entity.$build.iconClass}}\"></i>\r\n {{entity.$build.label}}\r\n </a>\r\n </div>\r\n -->\r\n\r\n <div class=\"row row-cards-pf\" title=\"{{env.description}}\">\r\n <div class=\"col-md-12 environment-rows\">\r\n <div class=\"card-pf\">\r\n <div class=\"card-pf-heading\">\r\n <h2 class=\"card-pf-title inline-block\">Environments Overview</h2>\r\n </div>\r\n <div class=\"card-pf-body\">\r\n <div ng-hide=\"entity.environments.length\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12 align-center\">\r\n <h2>No Environment Available</h2>\r\n <p>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.</p>\r\n <a class=\"btn btn-primary\" ng-href=\"{{settingsLink}}\"><i class=\"fa fa-plus\"></i> New Build</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div ng-show=\"entity.environments.length\">\r\n <div ng-repeat=\"env in entity.environments | filter:filterTemplates track by $index\"\r\n class=\"inline-block environment-block\" ng-include=\"\'plugins/developer/html/environmentPanel.html\'\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row row-cards-pf\">\r\n <div class=\"col-md-12\">\r\n <div class=\"card-pf pipeline\">\r\n <div class=\"card-pf-heading no-border\">\r\n <h2 class=\"card-pf-title inline-block\">Active Pipelines</h4>\r\n <a ng-href=\"{{$projectLink}}/jenkinsJob/{{jobId}}/pipelines\">View All Pipelines >></a>\r\n </div>\r\n <div class=\"card-pf-body no-top-margin\">\r\n <div class=\"full-card-width\" ng-controller=\"Developer.PipelinesController\" ng-include=\"\'plugins/kubernetes/html/pendingPipelines.html\'\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row row-cards-pf\">\r\n <div class=\"col-md-12\">\r\n <div class=\"card-pf\">\r\n <div class=\"card-pf-heading\">\r\n <h2 class=\"card-pf-title inline-block\">Commits</h2>\r\n <a ng-href=\"{{$projectLink}}/wiki/history//\">View All Commits >></a>\r\n </div>\r\n <div class=\"card-pf-body\">\r\n <div ng-include=\"\'plugins/wiki/html/projectCommitsPanel.html\'\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n");
$templateCache.put("plugins/developer/html/fileMigrationTask.html","<div ng-controller=\"Developer.KubeTaskController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n <div class=\"container-content \">\r\n <div class=\"row align-center mb10\" ng-hide=\"true\">\r\n <p class=\"alert alert-info\">当前没有可以查看的任务列表!</p>\r\n </div>\r\n <div class=\"row mb10\" ng-show=\"model.data.length\">\r\n <table class=\"table table-bordered table-striped sj_content_table\" hawtio-simple-table=\"tableConfig\" />\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/developer/html/home.html","<div ng-controller=\"Developer.HomeController\">\r\n <div class=\"jumbotron\">\r\n <h1>Perspectives</h1>\r\n\r\n <p>\r\n Please choose the perspective you would like to use:\r\n </p>\r\n </div>\r\n <div class=\"row\">\r\n\r\n <div class=\"col-md-6\">\r\n <p class=\"text-center\">\r\n <a class=\"btn btn-lg btn-primary\" href=\"/workspaces\" role=\"button\"\r\n title=\"Create or work on Projects\">\r\n <i class=\"fa fa-tasks\"></i>\r\n &nbspDevelop »\r\n </a>\r\n </p>\r\n\r\n <p class=\"text-center\">\r\n Work on projects and source code\r\n </p>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <p class=\"text-center\">\r\n <a class=\"btn btn-lg btn-primary\" href=\"/namespaces\" role=\"button\"\r\n title=\"Look around the various Namespaces at running Pods and Services\">\r\n <i class=\"fa fa-cubes\"></i>\r\n &nbsp;Operate »\r\n </a>\r\n </p>\r\n\r\n <p class=\"text-center\">\r\n Manage and run Pods and Services\r\n </p>\r\n </div>\r\n </div>\r\n</div>");
$templateCache.put("plugins/developer/html/jenkinsApproveModal.html","<div class=\"modal-header\">\r\n <h3 class=\"modal-title\">{{operation}}?</h3>\r\n</div>\r\n<div class=\"modal-body\">\r\n Are you sure you wish to {{operation}}?\r\n</div>\r\n<div class=\"modal-footer\">\r\n <button class=\"btn btn-primary\" ng-click=\"ok()\">{{operation}}</button>\r\n <button class=\"btn btn-warning\" ng-click=\"cancel()\">Cancel</button>\r\n</div>\r\n");
$templateCache.put("plugins/developer/html/jenkinsJob.html","<div class=\"row\" ng-controller=\"Developer.JenkinsJobController\">\r\n <script type=\"text/ng-template\" id=\"jenkinsBuildIdTemplate.html\">\r\n <div class=\"ngCellText\" title=\"{{row.entity.fullDisplayName}} {{row.entity.result}}\">\r\n <a href=\"{{row.entity.$logsLink}}\" title=\"View the build logs\">\r\n <i class=\"{{row.entity.$iconClass}}\"></i>&nbsp;&nbsp;{{row.entity.displayName}}\r\n </a>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"jenkinsBuildButtonsTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <a class=\"btn btn-default\" href=\"{{row.entity.$pipelineLink}}\" ng-show=\"row.entity.$pipelineLink\" target=\"View the pipeline for this build\">\r\n <i class=\"fa fa-tasks\"></i> Pipeline\r\n </a>\r\n &nbsp;&nbsp;\r\n <a class=\"btn btn-default\" href=\"{{row.entity.$logsLink}}\" ng-show=\"row.entity.$logsLink\" title=\"View the build logs\">\r\n <i class=\"fa fa-tasks\"></i> Logs\r\n </a>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"jenkinsBuildTimestampTemplate.html\">\r\n <div class=\"ngCellText\" title=\"Build started at: {{row.entity.$timestamp}}\">\r\n {{row.entity.$timestamp.relative()}}\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"jenkinsBuildDurationTemplate.html\">\r\n <div class=\"ngCellText\" title=\"Build took {{row.entity.$duration}} milliseconds\">\r\n {{row.entity.$duration.duration()}}\r\n </div>\r\n </script>\r\n\r\n\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\">\r\n <span>\r\n <hawtio-filter ng-show=\"job.builds.length\"\r\n ng-model=\"tableConfig.filterOptions.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter builds...\"></hawtio-filter>\r\n </span>\r\n <button ng-show=\"fetched\"\r\n title=\"Delete this build history\"\r\n class=\"btn btn-danger pull-right\"\r\n ng-disabled=\"tableConfig.selectedItems.length == 0\"\r\n ng-click=\"deletePrompt(tableConfig.selectedItems)\">\r\n <i class=\"fa fa-remove\"></i> Delete\r\n </button>\r\n\r\n <a class=\"btn btn-primary pull-right\" ng-click=\"triggerBuild()\"\r\n title=\"Trigger this build\">\r\n <i class=\"fa fa-play-circle-o\"></i> Trigger</a>\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"job.builds.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no builds in this job.</p>\r\n </div>\r\n <div ng-show=\"job.builds.length\">\r\n <table class=\"table table-bordered table-striped\" hawtio-simple-table=\"tableConfig\"></table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/developer/html/jenkinsJobs.html","<div class=\"row\" ng-controller=\"Developer.JenkinsJobsController\">\r\n <script type=\"text/ng-template\" id=\"jenkinsJobNameTemplate.html\">\r\n <div class=\"ngCellText\" title=\"{{row.entity.fullDisplayName}} {{row.entity.result}}\">\r\n <a href=\"{{row.entity.$buildsLink}}\">\r\n <i class=\"{{row.entity.$iconClass}}\"></i>&nbsp;&nbsp;{{row.entity.displayName}}\r\n </a>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"jenkinsJobButtonsTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <a class=\"btn btn-default\" href=\"{{row.entity.$pipelinesLink}}\" ng-show=\"row.entity.$pipelinesLink\" title=\"View the pipelines for this build\">\r\n <i class=\"fa fa-tasks\"></i> Pipelines\r\n </a>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"jenkinsBuildTimestampTemplate.html\">\r\n <div class=\"ngCellText\" title=\"Build started at: {{row.entity.$timestamp}}\">\r\n {{row.entity.$timestamp.relative()}}\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"jenkinsBuildDurationTemplate.html\">\r\n <div class=\"ngCellText\" title=\"Build took {{row.entity.$duration}} milliseconds\">\r\n {{row.entity.$duration.duration()}}\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"jenkinsLastSuccessTemplate.html\">\r\n <div class=\"ngCellText\" ng-init=\"success=row.entity.lastSuccessfulBuild\">\r\n <span title=\"Build took {{success.$duration.duration()}} milliseconds\">\r\n <span ng-show=\"success\">\r\n {{success.$timestamp.relative()}}\r\n </span>\r\n <span ng-show=\"success.$buildLink\">\r\n -\r\n <a href=\"{{success.$buildLink}}\" target=\"build\" title=\"View the builds\">\r\n {{success.displayName}}\r\n </a>\r\n </span>\r\n </span>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"jenkinsLastFailureTemplate.html\">\r\n <div class=\"ngCellText\" ng-init=\"fail=row.entity.lastFailedBuild\">\r\n <span title=\"Build took {{fail.$duration.duration()}} milliseconds\">\r\n <span ng-show=\"fail\">\r\n {{fail.$timestamp.relative()}}\r\n </span>\r\n <span ng-show=\"fail.$buildLink\">\r\n -\r\n <a href=\"{{fail.$buildLink}}\" target=\"build\" title=\"View the builds\">\r\n {{fail.displayName}}\r\n </a>\r\n </span>\r\n </span>\r\n </div>\r\n </script>\r\n\r\n\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\">\r\n <span>\r\n <hawtio-filter ng-show=\"jenkins.jobs.length\"\r\n ng-model=\"tableConfig.filterOptions.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter jobs...\"></hawtio-filter>\r\n </span>\r\n <a class=\"btn btn-primary pull-right\" ng-click=\"triggerBuild()\"\r\n title=\"Trigger this build\">\r\n <i class=\"fa fa-play-circle-o\"></i> Trigger</a>\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"jenkins.jobs.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no jobs in this jenkins.</p>\r\n </div>\r\n <div ng-show=\"jenkins.jobs.length\">\r\n <table class=\"table table-bordered table-striped\" hawtio-simple-table=\"tableConfig\"></table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/developer/html/jenkinsLog.html","<div class=\"row\" ng-controller=\"Developer.JenkinsLogController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\">\r\n <span>\r\n <hawtio-filter ng-model=\"log.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter logs...\"></hawtio-filter>\r\n </span>\r\n <a class=\"btn btn-default pull-right\" target=\"jenkins\" href=\"{{$viewJenkinsLogLink}}\" ng-show=\"$viewJenkinsLogLink\"\r\n title=\"View this log inside Jenkins\">\r\n <i class=\"fa fa-external-link\"></i> Log in Jenkins</a>\r\n </a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\" target=\"jenkins\" href=\"{{$viewJenkinsBuildLink}}\" ng-show=\"$viewJenkinsBuildLink\"\r\n title=\"View this build inside Jenkins\">\r\n <i class=\"fa fa-external-link\"></i> Build in Jenkins</a>\r\n </a>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"log-window\" viewport-height scroll-glue>\r\n <div class=\"log-window-inner\" >\r\n <p ng-repeat=\"log in log.logs | filter:log.filterText track by $index\" ng-bind-html=\"log | asTrustedHtml\"></p>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/developer/html/jenkinsMetrics.html","<div class=\"row\" ng-controller=\"Developer.JenkinsMetricsController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"metrics.builds.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no completed builds in this job.</p>\r\n </div>\r\n <div ng-show=\"metrics.builds.length\">\r\n <nvd3 options=\"options\" data=\"data\" api=\"api\"></nvd3>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/developer/html/logPanel.html","<div class=\"log-panel\" ng-controller=\"Developer.JenkinsLogController\" scroll-glue>\r\n <div class=\"log-panel-inner\" style=\"height: 25px;\">\r\n <p ng-repeat=\"log in log.logs track by $index\" ng-bind-html=\"log | asTrustedHtml\"></p>\r\n </div>\r\n</div>\r\n\r\n\r\n");
$templateCache.put("plugins/developer/html/overview.html","");
$templateCache.put("plugins/developer/html/pipeline.html","<div class=\"row\" ng-controller=\"Developer.PipelineController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\">\r\n <span>\r\n <hawtio-filter ng-show=\"model.stages.length\"\r\n ng-model=\"model.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter pipeline...\"></hawtio-filter>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"model.stages.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no pipeline stages in this build.</p>\r\n </div>\r\n <div ng-show=\"model.stages.length\">\r\n\r\n <h2>Pipeline for {{jobId}}</h2>\r\n\r\n <div pipeline-view></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/developer/html/pipelineView.html","<div class=\"panel-group\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h2 class=\"panel-title\">\r\n <a data-toggle=\"collapse\" data-parent=\".panel-group\" href=\"#build-{{build.id}}\">\r\n Build {{build.displayName}}\r\n </a>\r\n <span class=\"pull-right\" title=\"This build started at {{build.$timestamp}}\">\r\n started {{build.$timestamp.relative()}}\r\n </span>\r\n </h2>\r\n </div>\r\n\r\n <div id=\"build-{{build.id}}\" class=\"panel-collapse collapse in\">\r\n <div class=\"panel-body\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <!--\r\n <div class=\"pipeline-build inline-block\"\r\n title=\"{{build.description || \'Pipeline build number \' + build.displayName}}\">\r\n <div class=\"buildName\">\r\n <a href=\"{{build.$viewLink}}\" title=\"View the build details\">\r\n {{build.displayName}}\r\n </a>\r\n <span class=\"buildParameters pull-right\" ng-show=\"$parameterText\">\r\n <i class=\"fa fa-ellipsis-v\" title=\"build parameters: {{build.$parameterText}}\"></i>\r\n </span>\r\n </div>\r\n\r\n <div class=\"buildDuration text-center\">\r\n <a href=\"{{build.$logLink}}\" title=\"This build started at {{build.$timestamp}}\">\r\n started {{build.$timestamp.relative()}}\r\n </a>\r\n </div>\r\n </div>\r\n -->\r\n\r\n <div ng-repeat=\"stage in build.stages | filter:model.filterText track by $index\" class=\"inline-block\">\r\n <div class=\"pipeline-arrow inline-block\" ng-show=\"$index\">\r\n <i class=\"fa fa-angle-double-right\"></i>\r\n </div>\r\n <div class=\"pipeline-deploy {{stage.$backgroundClass}} inline-block\">\r\n <div class=\"text-center stageName\" title=\"{{stage.status}}\"><i class=\"{{stage.$iconClass}}\"></i>\r\n <a href=\"{{stage.$viewLink}}\" title=\"This stage started at {{stage.$startTime}}\" target=\"jenkins\">\r\n {{stage.stageName}}\r\n </a>\r\n </div>\r\n <div class=\"text-center stageStartTime\" title=\"Stage started at {{stage.$startTime}}\">\r\n <a href=\"{{stage.$logLink}}\" title=\"View the logs of this stage\">\r\n {{stage.duration.duration()}}\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"row\" ng-show=\"hideLogs && !build.building\">\r\n <div class=\"col-md-12\">\r\n <a href=\"{{build.$logLink}}\" class=\"pull-right\">View Full Log</a>\r\n </div>\r\n </div>\r\n <div class=\"row\" ng-hide=\"hideLogs && !build.building\">\r\n <div class=\"col-md-12\">\r\n <h4 class=\"inline-block\">Logs</h4>\r\n <a href=\"{{build.$logLink}}\" class=\"pull-right\">View Full Log</a>\r\n <div style=\"height: 250px;\" ng-include=\"\'plugins/developer/html/logPanel.html\'\"></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/developer/html/pipelines.html","<div class=\"row\" ng-controller=\"Developer.PipelinesController\">\r\n <div hawtio-breadcrumbs></div>\r\n <div hawtio-tabs></div>\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-4\">\r\n <span>\r\n <hawtio-filter ng-show=\"model.job.builds.length\"\r\n ng-model=\"model.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter pipelines...\"></hawtio-filter>\r\n </span>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <form class=\"form-inline\">\r\n <div class=\"checkbox\" title=\"Only show build pipelines which are pending\">\r\n <label>\r\n <input type=\"checkbox\" ng-model=\"model.pendingOnly\"> &nbsp;Only pending builds\r\n </label>\r\n </div>\r\n </form>\r\n\r\n </div>\r\n </div>\r\n <div class=\"row\" ng-init=\"hideLogs = true\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"model.job.builds.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no pipelines for this job.</p>\r\n </div>\r\n <div ng-show=\"model.job.builds.length\">\r\n <div ng-repeat=\"build in model.job.builds | filter:model.filterText track by $index\">\r\n <div pipeline-view></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/developer/html/projectDetail.html","<div ng-controller=\"Kubernetes.BuildConfigController\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\"\r\n href=\"{{baseUri}}/kubernetes/buildConfigs\"><i class=\"fa fa-list\"></i></a>\r\n <div class=\"pull-right\" ng-repeat=\"view in entity.$fabric8Views | orderBy:\'label\'\">\r\n <a title=\"{{view.description}}\" ng-show=\"view.url\" ng-href=\"{{view.url}}\" class=\"btn btn-default\">\r\n <i class=\"{{view.iconClass}}\" ng-show=\"view.iconClass\"></i>\r\n {{view.label}}\r\n </a>\r\n <span class=\"pull-right\" ng-show=\"view.url\" >&nbsp;</span>\r\n </div>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button class=\"btn btn-primary pull-right\"\r\n title=\"Trigger this build\"\r\n ng-disabled=\"!entity.$triggerUrl\"\r\n ng-click=\"triggerBuild(entity)\"><i class=\"fa fa-play-circle-o\"></i> Trigger</button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div hawtio-object=\"entity\" config=\"config\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/developer/html/projectSelector.html","<ul class=\"project-selector\" ng-controller=\"Developer.ProjectSelector\" ng-show=\'projectId\'>\r\n <li class=\"dropdown\">\r\n <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">\r\n <strong ng-bind=\"projectId\"></strong>\r\n <b class=\"caret\"></b>\r\n </a>\r\n <ul class=\"dropdown-menu\">\r\n <li ng-repeat=\'project in projects\'>\r\n <a ng-href=\"{{project.$viewLink}}\">{{project.$name}}</a>\r\n </li>\r\n </ul>\r\n </li>\r\n</ul>\r\n");
$templateCache.put("plugins/developer/html/projects.html","<div class=\"row\" ng-controller=\"Developer.ProjectsController\">\r\n <script type=\"text/ng-template\" id=\"buildConfigLinkTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <a title=\"View details for this build configuration\"\r\n href=\"{{baseUri}}/kubernetes/buildConfigs/{{row.entity.metadata.name}}\">\r\n<!--\r\n <img class=\"app-icon-small\" ng-src=\"{{row.entity.$iconUrl}}\">\r\n-->\r\n {{row.entity.metadata.name}}</a>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"buildConfigViewsTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <span ng-repeat=\"view in row.entity.$fabric8Views track by $index\">\r\n <a title=\"{{view.description}}\" ng-show=\"view.url\" ng-href=\"{{view.url}}\" class=\"btn btn-default\">\r\n <i class=\"{{view.iconClass}}\" ng-show=\"view.iconClass\"></i>\r\n {{view.label}}\r\n </a>\r\n </span>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"buildConfigCodeViewsTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <span ng-repeat=\"view in row.entity.$fabric8CodeViews track by $index\">\r\n <a title=\"{{view.description}}\" ng-show=\"view.url\" ng-href=\"{{view.url}}\" class=\"btn btn-default\">\r\n <i class=\"{{view.iconClass}}\" ng-show=\"view.iconClass\"></i>\r\n {{view.label}}\r\n </a>\r\n </span>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"buildConfigBuildViewsTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <span ng-repeat=\"view in row.entity.$fabric8BuildViews track by $index\">\r\n <a title=\"{{view.description}}\" ng-show=\"view.url\" ng-href=\"{{view.url}}\" class=\"btn btn-default\">\r\n <i class=\"{{view.iconClass}}\" ng-show=\"view.iconClass\"></i>\r\n {{view.label}}\r\n </a>\r\n </span>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"buildConfigEnvironmentViewsTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <span ng-repeat=\"view in row.entity.$fabric8EnvironmentViews track by $index\">\r\n <a title=\"{{view.description}}\" ng-show=\"view.url\" ng-href=\"{{view.url}}\" class=\"btn btn-default\">\r\n <i class=\"{{view.iconClass}}\" ng-show=\"view.iconClass\"></i>\r\n {{view.label}}\r\n </a>\r\n </span>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"buildConfigTeamViewsTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <span ng-repeat=\"view in row.entity.$fabric8TeamViews track by $index\">\r\n <a title=\"{{view.description}}\" ng-show=\"view.url\" ng-href=\"{{view.url}}\" class=\"btn btn-default\">\r\n <i class=\"{{view.iconClass}}\" ng-show=\"view.iconClass\"></i>\r\n {{view.label}}\r\n </a>\r\n </span>\r\n </div>\r\n </script>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\">\r\n <span>\r\n <hawtio-filter ng-show=\"model.buildconfigs.length\"\r\n ng-model=\"tableConfig.filterOptions.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter apps...\"></hawtio-filter>\r\n </span>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button ng-show=\"fetched\"\r\n title=\"Delete the selected build configuration\"\r\n class=\"btn btn-danger pull-right\"\r\n ng-disabled=\"tableConfig.selectedItems.length == 0\"\r\n ng-click=\"deletePrompt(tableConfig.selectedItems)\">\r\n <i class=\"fa fa-remove\"></i> Delete\r\n </button>\r\n\r\n <button ng-show=\"model.fetched\"\r\n class=\"btn btn-danger pull-right\"\r\n ng-disabled=\"!id && tableConfig.selectedItems.length == 0\"\r\n ng-click=\"deletePrompt(id || tableConfig.selectedItems)\"\r\n title=\"Delete the selected apps\">\r\n <i class=\"fa fa-remove\"></i> Delete\r\n </button>\r\n\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-primary pull-right\" href=\"{{baseUri}}/workspaces/{{namespace}}/forge/createProject\"\r\n title=\"Create a new app in this project\">\r\n <i class=\"fa fa-plus\"></i> Create App</a>\r\n </a>\r\n\r\n<!--\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <button class=\"btn btn-default pull-right\"\r\n title=\"Trigger the given build\"\r\n ng-disabled=\"tableConfig.selectedItems.length != 1 || !tableConfig.selectedItems[0].$triggerUrl\"\r\n ng-click=\"triggerBuild(tableConfig.selectedItems[0])\"><i class=\"fa fa-play-circle-o\"></i> Trigger</button>\r\n-->\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"model.buildconfigs.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no projects in this workspace.</p>\r\n </div>\r\n <div ng-show=\"model.buildconfigs.length\">\r\n <table class=\"table table-bordered table-striped\" hawtio-simple-table=\"tableConfig\"></table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/developer/html/tools.html","<div ng-controller=\"Kubernetes.BuildConfigController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\" ng-show=\"model.tools.length\">\r\n <span ng-show=\"!id\">\r\n <hawtio-filter ng-model=\"tableConfig.filterOptions.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter tools...\"></hawtio-filter>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"entity.tools.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no tools currently available.</p>\r\n </div>\r\n <div ng-show=\"entity.tools.length\">\r\n <div ng-hide=\"entity.tools.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no tools currently available.</p>\r\n </div>\r\n <div ng-repeat=\"env in entity.tools | filter:filterTemplates | orderBy:\'label\' track by $index\">\r\n <div class=\"row\"\r\n title=\"{{env.description}}\">\r\n <div class=\"col-md-9\">\r\n <a href=\"{{env.url}}\">\r\n <h3>\r\n <i class=\"{{env.iconClass}}\"></i>\r\n {{env.label}}\r\n </h3>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/developer/html/workspace.html","<div ng-controller=\"Developer.WorkspaceController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <a class=\"btn btn-default pull-right\"\r\n href=\"{{baseUri}}/kubernetes/workspaces\"><i class=\"fa fa-list\"></i></a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\" ng-show=\"entity.$configLink\"\r\n title=\"View the workspace configuration\"\r\n href=\"{{entity.$configLink}}\">\r\n Configuration\r\n </a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\" ng-show=\"entity.$podLink\"\r\n title=\"View the workspace pod\"\r\n href=\"{{entity.$podLink}}\">\r\n Pod\r\n </a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-primary pull-right\" ng-show=\"entity.$logsLink\"\r\n title=\"View the workspace logs\"\r\n href=\"{{entity.$logsLink}}\">\r\n View Log\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div hawtio-object=\"entity\" config=\"config\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/developer/html/workspaces.html","<div ng-controller=\"Developer.WorkspacesController\" hawtio-card-bg>\r\n <div hawtio-breadcrumbs></div>\r\n <div hawtio-tabs></div>\r\n <div class=\"container-content \">\r\n <div class=\"container-fluid sj_fluid\">\r\n <div class=\"row nav-content mb10 clear \">\r\n <ul class=\"nav nav-tabs sj_nav_taps fl\" ng-show=\"navbarItems.length\">\r\n <li role=\"presentation\" ng-repeat=\"item in navbarItems\" class=\"{{item.class}}\"><a href=\"#\" ng-click=\"selectBatchItem(item)\">{{item.label}}</a></li>\r\n </ul>\r\n <div class=\"fr sj_searchbox\">\r\n <input type=\"text\" class=\"sj_search_input\" />\r\n <a href=\"#\" class=\"sj_search_btn\"></a>\r\n </div>\r\n </div>\r\n <div ng-hide=\"model.data.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">当前没有可以查看的数据.</p>\r\n </div>\r\n <div ng-show=\"model.data.length\">\r\n <table class=\"table table-striped table-bordered sj_content_table\" hawtio-simple-table=\"tableConfig\"></table>\r\n <div class=\"row clear\">\r\n <div class=\" fl\">\r\n <input type=\"checkbox\" class=\"fl mr5 \" style=\"margin-top: 8px;\" />\r\n <label class=\"fl mr5 \" style=\"margin-top: 5px; font-style:nomal;\">全选</label>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button class=\"btn pull-right sj_btn_grey \" ng-disabled=\"!id && tableConfig.selectedItems.length == 0\" ng-click=\"deletePrompt(id || tableConfig.selectedItems)\">\r\n <i class=\"glyphicon glyphicon-trash\"></i> 删除\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button class=\"btn pull-right sj_btn_grey \" ng-disabled=\"!id && tableConfig.selectedItems.length == 0\" ng-click=\"migrationClick.open(id || tableConfig.selectedItems)\">\r\n <i class=\"glyphicon glyphicon-export\"></i> 迁移\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button class=\"btn pull-right sj_btn_grey \" ng-disabled=\"!id && tableConfig.selectedItems.length == 0\" ng-click=\"createOracleService(id || tableConfig.selectedItems)\">\r\n <i class=\"glyphicon glyphicon-play-circle\"></i> 启动\r\n </button>\r\n </div>\r\n <ul class=\"fr sj_table_bottom\">\r\n <li class=\"mr5 \">当前显示1~7行共7行。</li>\r\n <li class=\"mr5 \">每页显示\r\n <select ng-options=\"value for value in pageSizeChoses\" ng-change=\"selectAction()\" ng-model=\"options.currentTableSize\"></select>行\r\n </li>\r\n <li class=\"mr5 \">当前页码</li>\r\n <li>\r\n <div class=\"hawtio-pager clearfix\">\r\n <label>{{options.currentPageNum}} / {{options.getPageSizeNum()}}</label>\r\n <div class=btn-group>\r\n <button class=\"btn sj_btn_grey\" ng-disabled=\"isEmptyOrFirst()\" ng-click=\"first()\"><i class=\"fa fa-fast-backward\"></i></button>\r\n <button class=\"btn sj_btn_grey\" ng-disabled=\"isEmptyOrFirst()\" ng-click=\"previous()\"><i class=\"fa fa-step-backward\"></i></button>\r\n <button class=\"btn sj_btn_grey \" ng-disabled=\"isEmptyOrLast()\" ng-click=\"next()\"><i class=\"fa fa-step-forward\"></i></button>\r\n <button class=\"btn sj_btn_grey\" ng-disabled=\"isEmptyOrLast()\" ng-click=\"last()\"><i class=\"fa fa-fast-forward\"></i></button>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div modal=\"migrationClick.dialog.show \">\r\n <form name=\"selectFolder \" class=\" \" ng-submit=\"migrationClick.onOk() \">\r\n <div class=\"modal-header sj_modal-header\">\r\n <h4>数据迁移</h4></div>\r\n <div class=\"modal-body sj_modal_body\">\r\n <div class=\"row sj_model_row\">\r\n <label class=\"col-sm-3 control-label sj_contro_label\" for=\"selectedItem \">\r\n 请选择迁移集群\r\n </label>\r\n <select ng-model=\"migrationClick.selectedItem \" class=\"col-sm-3 sj_modal_select\" title=\"name of the new namespace \" id=\"selectedItem \" ng-options=\"x.name for x in volumes \" />\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"col-sm-12 alert alert-warning\" ng-show=\"!volumes || volumes.length == 0\">\r\n <span class=\"help-block\">\r\n\r\n 当前没有可以迁移的集群,请在数据集群配置页面进行配置!\r\n </span>\r\n </div>\r\n </div>\r\n <div ng-hide=\"!volumes || volumes.length == 0\">\r\n <treecontrol class=\"tree-classic\" tree-model=\"migrationClick.selectedItem.folder\" options=\"treeOptions\" on-selection=\"showSelected(node)\" selected-node=\"selectNode\">\r\n {{node.name}}\r\n </treecontrol>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer \">\r\n <input class=\"btn btn-primary sj_btn_blue\" type=\"submit\" ng-disabled=\"!selectNode || selectNode.children.length <= 0\" value=\"确定\">\r\n <button class=\"btn btn-warning cancel sj_btn_grey\" type=\"button\" ng-click=\"migrationClick.close()\">取消</button>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"prettify \"></div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/appDeployedTemplate.html","<div class=\"ngCellText\" title=\"deployed at: {{row.entity.$creationDate | date:\'yyyy-MMM-dd HH:mm:ss Z\'}}\">\r\n {{row.entity.$creationDate ? (row.entity.$creationDate | relativeTime) : \'\'}}\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/appDetailTemplate.html","<div class=\"service-view-rectangle\" ng-repeat=\"view in item.$serviceViews\" ng-hide=\"view.appName === \'kubernetes\'\">\r\n <div class=\"service-view-header row\">\r\n <div class=\"col-md-4\">\r\n <span class=\"service-view-icon\">\r\n <a ng-href=\"{{view.service | kubernetesPageLink}}\" title=\"View the service detail page\">\r\n <img ng-show=\"item.$iconUrl\" ng-src=\"{{item.$iconUrl}}\">\r\n </a>\r\n </span>\r\n <span class=\"service-view-name\" title=\"{{view.name}}\">\r\n <a ng-href=\"{{view.service | kubernetesPageLink}}\" title=\"View the service detail page\">\r\n {{view.appName}}\r\n </a>\r\n </span>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <span class=\"service-view-address\" title=\"The service address\">\r\n <a ng-show=\"view.service.$connectUrl\" target=\"_blank\" href=\"{{view.service.$connectUrl}}\" title=\"Connect to the service\">\r\n {{view.service.$host}}\r\n </a>\r\n <span ng-hide=\"view.service.$connectUrl\">{{view.service.$host}}</span>\r\n </span>\r\n </div>\r\n <div class=\"col-md-2 align-right\">\r\n <a class=\"service-view-header-delete\" href=\"\" ng-click=\"deleteSingleApp(item)\" title=\"Delete this app\"><i\r\n class=\"fa fa-remove red\"></i></a>\r\n </div>\r\n </div>\r\n\r\n <div class=\"service-view-detail-rectangle\">\r\n <div class=\"service-view-detail-header row\">\r\n <div class=\"col-md-3\">\r\n <div class=\"service-view-detail-deployed\" ng-show=\"view.createdDate\"\r\n title=\"deployed at: {{view.createdDate | date:\'yyyy-MMM-dd HH:mm:ss Z\'}}\">\r\n deployed:\r\n <span class=\"value\">{{view.createdDate | relativeTime}}</span>\r\n </div>\r\n <div class=\"service-view-detail-deployed\" ng-hide=\"view.createdDate\">\r\n not deployed\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"service-view-detail-pod-template\" ng-show=\"view.controllerId\">\r\n pod template:\r\n <span class=\"value\" title=\"Go to the replication controller detail page\"><a\r\n ng-href=\"{{view.replicationController | kubernetesPageLink}}\">{{view.controllerId}}</a></span>\r\n </div>\r\n <div class=\"service-view-detail-pod-template\" ng-hide=\"view.controllerId\">\r\n no pod template\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 service-view-detail-pod-counts align-right\">\r\n <span>\r\n pods:\r\n <a href=\"\" ng-show=\"view.replicationController\" class=\"badge badge-success\"\r\n ng-click=\"resizeDialog.open(view.replicationController)\"\r\n title=\"Resize the number of pods\">\r\n {{view.podCount}}\r\n </a>\r\n <span ng-hide=\"view.replicationController\" class=\"badge badge-info\">\r\n {{view.podCount}}\r\n </span>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"service-view-detail-pod-box row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"inline-block\" ng-repeat=\"pod in item.pods track by $index\">\r\n <div ng-show=\"podExpanded(pod)\" class=\"service-view-detail-pod-summary-expand\">\r\n <table>\r\n <tr>\r\n <td class=\"service-view-detail-pod-status\">\r\n <i ng-class=\"pod.statusClass\"></i>\r\n </td>\r\n <td class=\"service-view-detail-pod-connect\" ng-show=\"pod.$jolokiaUrl\"\r\n ng-controller=\"Kubernetes.ConnectController\">\r\n <a class=\"clickable\"\r\n ng-click=\"doConnect(pod)\"\r\n title=\"Open a new window and connect to this container\">\r\n <i class=\"fa fa-sign-in\"></i>\r\n </a>\r\n </td>\r\n <td>\r\n <div class=\"service-view-detail-pod-id\" title=\"{{pod.id}}\">\r\n <span class=\"value\">Pod <a title=\"Go to the pod detail page\" ng-href=\"{{pod | kubernetesPageLink}}\">{{pod.idAbbrev}}</a></span>\r\n </div>\r\n <div class=\"service-view-detail-pod-ip\">\r\n IP:\r\n <span class=\"value\">{{pod.status.podIP}}</span>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"service-view-detail-pod-ports\">\r\n ports: <span class=\"value\">{{pod.$containerPorts.join(\", \")}}</span>\r\n </div>\r\n <div class=\"service-view-detail-pod-minion\">\r\n minion:\r\n <span class=\"value\">\r\n <a ng-show=\"pod.$host\" ng-href=\"{{baseUri}}/kubernetes/hosts/{{pod.$host}}\">{{pod.$host}}</a>\r\n </span>\r\n </div>\r\n </td>\r\n <td class=\"service-view-detail-pod-expand\" ng-click=\"collapsePod(pod)\">\r\n <i class=\"fa fa-chevron-left\"></i>\r\n </td>\r\n </tr>\r\n </table>\r\n <!--\r\n <div class=\"service-view-detail-pod-status\">\r\n status:\r\n <span class=\"value\">{{pod.status}}</span>\r\n </div>\r\n -->\r\n </div>\r\n\r\n <div ng-hide=\"podExpanded(pod)\" class=\"service-view-detail-pod-summary\">\r\n <table>\r\n <tr>\r\n <td class=\"service-view-detail-pod-status\">\r\n <i ng-class=\"pod.statusClass\"></i>\r\n </td>\r\n <td class=\"service-view-detail-pod-connect\" ng-show=\"pod.$jolokiaUrl\"\r\n ng-controller=\"Kubernetes.ConnectController\">\r\n <a class=\"clickable\"\r\n ng-click=\"doConnect(pod)\"\r\n title=\"Open a new window and connect to this container\">\r\n <i class=\"fa fa-sign-in\"></i>\r\n </a>\r\n </td>\r\n <td>\r\n <div class=\"service-view-detail-pod-id\" title=\"{{pod.id}}\">\r\n <span class=\"value\">Pod <a title=\"Go to the pod detail page\" ng-href=\"{{pod | kubernetesPageLink}}\">{{pod.idAbbrev}}</a></span>\r\n </div>\r\n <div class=\"service-view-detail-pod-ip\">\r\n IP:\r\n <span class=\"value\">{{pod.status.podIP}}</span>\r\n </div>\r\n </td>\r\n <td class=\"service-view-detail-pod-expand\" ng-click=\"expandPod(pod)\">\r\n <i class=\"fa fa-chevron-right\"></i>\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/appIconTemplate.html","<div class=\"ngCellText\" title=\"{{row.entity.$info.description}}\">\r\n <a ng-href=\"row.entity.$appUrl\">\r\n <img ng-show=\"row.entity.$iconUrl\" class=\"app-icon-small\" ng-src=\"{{row.entity.$iconUrl}}\">\r\n </a>\r\n <span class=\"app-name\">\r\n <a ng-click=\"row.entity.$select()\">\r\n {{row.entity.$info.name}}\r\n </a>\r\n </span>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/appPodCountsAndLinkTemplate.html","<div class=\"ngCellText\" title=\"Number of running pods for this controller\">\r\n <div ng-repeat=\"podCounters in row.entity.$podCounters track by $index\">\r\n <a ng-show=\"podCounters.podsLink\" href=\"{{podCounters.podsLink}}\" title=\"{{podCounters.labelText}}\">\r\n <span ng-show=\"podCounters.valid\" class=\"badge badge-success\">{{podCounters.valid}}</span>\r\n <span ng-show=\"podCounters.waiting\" class=\"badge\">{{podCounters.waiting}}</span>\r\n <span ng-show=\"podCounters.error\" class=\"badge badge-warning\">{{podCounters.error}}</span>\r\n </a>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/appReplicationControllerTemplate.html","<div class=\"ngCellText\">\r\n <span ng-repeat=\"controller in row.entity.replicationControllers\">\r\n <a ng-href=\"{{controller | kubernetesPageLink}}\"\r\n title=\"View controller details\">\r\n <span>{{controller.metadata.name || controller.id}}</span>\r\n </a>\r\n &nbsp;\r\n <span class=\"pull-right\">\r\n <a class=\"badge badge-info\" href=\"\" ng-click=\"$emit(\'do-resize\', controller)\"\r\n title=\"Resize the number of replicas of this controller\">\r\n {{controller.spec.replicas || 0}}</a>\r\n </span>\r\n </span>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/appServicesTemplate.html","<div class=\"ngCellText\">\r\n <span ng-repeat=\"service in row.entity.services\">\r\n <a ng-href=\"{{service | kubernetesPageLink}}\"\r\n title=\"View service details\">\r\n <span>{{service.metadata.name ||service.name || service.id}}</span>\r\n </a>\r\n </span>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/apps.html","<div ng-controller=\"Kubernetes.Apps\">\r\n\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div ng-hide=\"appSelectorShow\">\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\">\r\n <span ng-show=\"model.apps.length && !id\">\r\n <hawtio-filter ng-model=\"tableConfig.filterOptions.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter apps...\"></hawtio-filter>\r\n </span>\r\n <span ng-hide=\"id\" class=\"pull-right\">\r\n <div class=\"btn-group\">\r\n <a class=\"btn btn-default\" ng-disabled=\"mode == \'list\'\" href=\"\" ng-click=\"mode = \'list\'\">\r\n <i class=\"fa fa-list\"></i></a>\r\n <a class=\"btn btn-default\" ng-disabled=\"mode == \'detail\'\" href=\"\" ng-click=\"mode = \'detail\'\">\r\n <i class=\"fa fa-table\"></i></a>\r\n </div>\r\n </span>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button ng-show=\"model.apps.length && mode == \'list\'\"\r\n class=\"btn btn-danger pull-right\"\r\n ng-disabled=\"!id && tableConfig.selectedItems.length == 0\"\r\n ng-click=\"deletePrompt(id || tableConfig.selectedItems)\">\r\n <i class=\"fa fa-remove\"></i> Delete\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n<!--\r\n <button ng-show=\"model.showRunButton\"\r\n class=\"btn btn-success pull-right\"\r\n ng-click=\"appSelectorShow = true\"\r\n title=\"Run an application\">\r\n <i class=\"fa fa-play-circle\"></i> Run ...\r\n </button>\r\n-->\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <span ng-include=\"\'runButton.html\'\"></span>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button ng-show=\"id\"\r\n class=\"btn btn-primary pull-right\"\r\n ng-click=\"id = undefined\"><i class=\"fa fa-list\"></i></button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched && !id\">\r\n <div ng-hide=\"model.apps.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no apps currently available.</p>\r\n </div>\r\n <div ng-show=\"model.apps.length\">\r\n <div ng-show=\"mode == \'list\'\">\r\n <table class=\"table table-bordered table-striped\" hawtio-simple-table=\"tableConfig\"></table>\r\n </div>\r\n <div ng-show=\"mode == \'detail\'\">\r\n <div class=\"app-detail\" ng-repeat=\"item in model.apps | filter:tableConfig.filterOptions.filterText | orderBy:\'$name\' track by $index\">\r\n <ng-include src=\"\'plugins/kubernetes/html/appDetailTemplate.html\'\"/>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched && id\">\r\n <div class=\"app-detail\">\r\n <ng-include src=\"\'plugins/kubernetes/html/appDetailTemplate.html\'\"/>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div ng-show=\"appSelectorShow\">\r\n <div class=\"col-md-7\">\r\n <div class=\"row\">\r\n <hawtio-filter ng-model=\"appSelector.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter apps...\"></hawtio-filter>\r\n </div>\r\n <div class=\"row\">\r\n <ul>\r\n <li class=\"no-list profile-selector-folder\" ng-repeat=\"folder in model.appFolders\"\r\n ng-show=\"appSelector.showFolder(folder)\">\r\n <div class=\"expandable\" ng-class=\"appSelector.isOpen(folder)\">\r\n <div title=\"{{folder.path}}\" class=\"title\">\r\n <i class=\"expandable-indicator folder\"></i> <span class=\"folder-title\" ng-show=\"folder.path\">{{folder.path.capitalize(true)}}</span><span\r\n class=\"folder-title\" ng-hide=\"folder.path\">Uncategorized</span>\r\n </div>\r\n <div class=\"expandable-body\">\r\n <ul>\r\n <li class=\"no-list profile\" ng-repeat=\"profile in folder.apps\" ng-show=\"appSelector.showApp(profile)\">\r\n <div class=\"profile-selector-item\">\r\n <div class=\"inline-block profile-selector-checkbox\">\r\n <input type=\"checkbox\" ng-model=\"profile.selected\"\r\n ng-change=\"appSelector.updateSelected()\">\r\n </div>\r\n <div class=\"inline-block profile-selector-name\" ng-class=\"appSelector.getSelectedClass(profile)\">\r\n <span class=\"contained c-max\">\r\n <a href=\"\" ng-click=\"appSelector.select(profile, !profile.selected)\"\r\n title=\"Details for {{profile.id}}\">\r\n <img ng-show=\"profile.$iconUrl\" class=\"icon-small-app\" ng-src=\"{{profile.$iconUrl}}\">\r\n <span class=\"app-name\">{{profile.name}}</span>\r\n </a>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"col-md-5\">\r\n <div class=\"row\">\r\n <button class=\"btn btn-primary pull-right\"\r\n ng-click=\"appSelectorShow = undefined\"><i class=\"fa fa-circle-arrow-left\"></i> Back\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button class=\"btn pull-right\"\r\n ng-disabled=\"!appSelector.selectedApps.length\"\r\n title=\"Clears the selected Apps\"\r\n ng-click=\"appSelector.clearSelected()\"><i class=\"fa fa-check-empty\"></i> Clear\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button class=\"btn btn-success pull-right\"\r\n ng-disabled=\"!appSelector.selectedApps.length\"\r\n ng-click=\"appSelector.runSelectedApps()\"\r\n title=\"Run the selected apps\">\r\n <i class=\"fa fa-play-circle\"></i>\r\n <ng-pluralize count=\"appSelector.selectedApps.length\"\r\n when=\"{\'0\': \'No App Selected\',\r\n \'1\': \'Run App\',\r\n \'other\': \'Run {} Apps\'}\"></ng-pluralize>\r\n\r\n </button>\r\n </div>\r\n <div class=\"row\">\r\n <!--\r\n <div ng-hide=\"appSelector.selectedApps.length\">\r\n <p class=\"alert pull-right\">\r\n Please select an App\r\n </p>\r\n </div>\r\n -->\r\n\r\n <div ng-show=\"appSelector.selectedApps.length\">\r\n\r\n <ul class=\"zebra-list pull-right\">\r\n <li ng-repeat=\"app in appSelector.selectedApps\">\r\n <img ng-show=\"app.$iconUrl\" class=\"icon-selected-app\" ng-src=\"{{app.$iconUrl}}\">\r\n <strong class=\"green selected-app-name\">{{app.name}}</strong>\r\n &nbsp;\r\n <i class=\"red clickable fa fa-remove\"\r\n title=\"Remove appp\"\r\n ng-click=\"appSelector.select(app, false)\"></i>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-include src=\"\'resizeDialog.html\'\"/>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/breadcrumbs.html","<div ng-show=\"breadcrumbConfig\" ng-init=\"breadcrumbConfig = $parent.breadcrumbConfig\"\r\n ng-controller=\"Developer.NavBarController\">\r\n <ol class=\"breadcrumb\">\r\n <li ng-repeat=\"breadcrumb in breadcrumbConfig\" ng-show=\"isValid(breadcrumb)\"\r\n class=\"{{breadcrumb.active ? \'active\' : \'\'}}\"\r\n title=\"{{breadcrumb.title}}\">\r\n <a ng-show=\"breadcrumb.href && !breadcrumb.active\" href=\"{{breadcrumb.href}}\">{{breadcrumb.label}}</a>\r\n <span ng-hide=\"breadcrumb.href && !breadcrumb.active\">{{breadcrumb.label}}</span>\r\n </ol>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/build.html","<div ng-controller=\"Kubernetes.BuildController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <a class=\"btn btn-default pull-right\"\r\n href=\"{{baseUri}}/kubernetes/builds\"><i class=\"fa fa-list\"></i></a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\" ng-show=\"entity.$configLink\"\r\n title=\"View the build configuration\"\r\n href=\"{{entity.$configLink}}\">\r\n Configuration\r\n </a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\" ng-show=\"entity.$podLink\"\r\n title=\"View the build pod\"\r\n href=\"{{entity.$podLink}}\">\r\n Pod\r\n </a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-primary pull-right\" ng-show=\"entity.$logsLink\"\r\n title=\"View the build logs\"\r\n href=\"{{entity.$logsLink}}\">\r\n View Log\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched\">\r\n <div hawtio-object=\"entity\" config=\"config\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/buildConfig.html","<div ng-controller=\"Kubernetes.BuildConfigController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\" ng-show=\"entity.$editLink\" href=\"{{entity.$editLink}}\">\r\n <i class=\"fa fa-pencil-square-o\"></i> Edit\r\n </a>\r\n <div class=\"pull-right\" ng-repeat=\"view in entity.$fabric8Views | orderBy:\'label\'\">\r\n <a title=\"{{view.description}}\" ng-show=\"view.url\" ng-href=\"{{view.url}}\" class=\"btn btn-default\">\r\n <i class=\"{{view.iconClass}}\" ng-show=\"view.iconClass\"></i>\r\n {{view.label}}\r\n </a>\r\n <span class=\"pull-right\" ng-show=\"view.url\" >&nbsp;</span>\r\n </div>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button class=\"btn btn-primary pull-right\"\r\n title=\"Trigger this build\"\r\n ng-disabled=\"!entity.$triggerUrl\"\r\n ng-click=\"triggerBuild(entity)\"><i class=\"fa fa-play-circle-o\"></i> Trigger</button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched\">\r\n <div hawtio-object=\"entity\" config=\"config\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/buildConfigEdit.html","<div ng-init=\"mode=\'edit\'\">\r\n <div ng-controller=\"Kubernetes.BuildConfigEditController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div ng-init=\"subTabConfig = tabs\" ng-include=\"\'plugins/kubernetes/html/tabs.html\'\"></div>\r\n <div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <button class=\"btn btn-primary pull-right\"\r\n title=\"Saves changes to this project configuration\"\r\n ng-disabled=\"!entity.metadata.name\"\r\n ng-click=\"save()\">\r\n Save Changes\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched\">\r\n\r\n <form name=\"nameForm\" ng-disabled=\"config.mode == 0\" class=\"form-horizontal\">\r\n <fieldset>\r\n <legend ng-show=\"config.label || config.description\" ng-hide=\"config.hideLegend\"\r\n class=\"ng-binding\"></legend>\r\n <div class=\"row\">\r\n <div class=\"clearfix col-md-12\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\">Name</label>\r\n <input type=\"text\" class=\"form-control\" placeholder=\"project name\" pattern=\"[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\" ng-model=\"entity.metadata.name\" required>\r\n\r\n <p class=\"form-warning bg-danger\" ng-show=\"nameForm.$error.pattern\">\r\n Project name must be a lower case DNS name with letters, numbers and dots or dashes such as `example.com`\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </form>\r\n\r\n\r\n <!--\r\n <div hawtio-form-2=\"config\" entity=\"entity\"></div>\r\n -->\r\n <div hawtio-form-2=\"specConfig\" entity=\"spec\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/buildConfigs.html","<div class=\"row\" ng-controller=\"Kubernetes.BuildConfigsController\">\r\n <script type=\"text/ng-template\" id=\"buildConfigLinkTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <a title=\"View details for this build configuration\"\r\n href=\"{{baseUri}}/kubernetes/buildConfigs/{{row.entity.metadata.name}}\">\r\n<!--\r\n <img class=\"app-icon-small\" ng-src=\"{{row.entity.$iconUrl}}\">\r\n-->\r\n {{row.entity.metadata.name}}</a>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"buildConfigViewsTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <span ng-repeat=\"view in row.entity.$fabric8Views track by $index\">\r\n <a title=\"{{view.description}}\" ng-show=\"view.url\" ng-href=\"{{view.url}}\" class=\"btn btn-default\">\r\n <i class=\"{{view.iconClass}}\" ng-show=\"view.iconClass\"></i>\r\n {{view.label}}\r\n </a>\r\n </span>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"buildConfigCodeViewsTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <span ng-repeat=\"view in row.entity.$fabric8CodeViews track by $index\">\r\n <a title=\"{{view.description}}\" ng-show=\"view.url\" ng-href=\"{{view.url}}\" class=\"btn btn-default\">\r\n <i class=\"{{view.iconClass}}\" ng-show=\"view.iconClass\"></i>\r\n {{view.label}}\r\n </a>\r\n </span>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"buildConfigBuildViewsTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <span ng-repeat=\"view in row.entity.$fabric8BuildViews track by $index\">\r\n <a title=\"{{view.description}}\" ng-show=\"view.url\" ng-href=\"{{view.url}}\" class=\"btn btn-default\">\r\n <i class=\"{{view.iconClass}}\" ng-show=\"view.iconClass\"></i>\r\n {{view.label}}\r\n </a>\r\n </span>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"buildConfigEnvironmentViewsTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <span ng-repeat=\"view in row.entity.$fabric8EnvironmentViews track by $index\">\r\n <a title=\"{{view.description}}\" ng-show=\"view.url\" ng-href=\"{{view.url}}\" class=\"btn btn-default\">\r\n <i class=\"{{view.iconClass}}\" ng-show=\"view.iconClass\"></i>\r\n {{view.label}}\r\n </a>\r\n </span>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"buildConfigTeamViewsTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <span ng-repeat=\"view in row.entity.$fabric8TeamViews track by $index\">\r\n <a title=\"{{view.description}}\" ng-show=\"view.url\" ng-href=\"{{view.url}}\" class=\"btn btn-default\">\r\n <i class=\"{{view.iconClass}}\" ng-show=\"view.iconClass\"></i>\r\n {{view.label}}\r\n </a>\r\n </span>\r\n </div>\r\n </script>\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\">\r\n <span>\r\n <hawtio-filter ng-show=\"buildConfigs.length\"\r\n ng-model=\"tableConfig.filterOptions.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter build configurations...\"></hawtio-filter>\r\n </span>\r\n <button ng-show=\"fetched\"\r\n title=\"Delete the selected build configuration\"\r\n class=\"btn btn-danger pull-right\"\r\n ng-disabled=\"tableConfig.selectedItems.length == 0\"\r\n ng-click=\"deletePrompt(tableConfig.selectedItems)\">\r\n <i class=\"fa fa-remove\"></i> Delete\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\"\r\n title=\"Add a build configuration for an existing project\"\r\n href=\"{{baseUri}}/kubernetes/buildConfigCreate\"><i class=\"fa fa-wrench\"></i> Add Build</a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-primary pull-right\" href=\"/workspaces/{{namespace}}/forge/createProject\"\r\n ng-show=\"isLoggedIntoGogs()\"\r\n title=\"Create a new app and repository\">\r\n <i class=\"fa fa-plus\"></i> Create Project</a>\r\n </a>\r\n <span class=\"pull-right\" ng-show=\"isLoggedIntoGogs()\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-primary pull-right\" href=\"/workspaces/{{namespace}}/forge/repos\"\r\n ng-hide=\"isLoggedIntoGogs()\"\r\n title=\"Sign in to gogs so that you can create a new app\">\r\n <i class=\"fa fa-sign-in\"></i> Sign In</a>\r\n </a>\r\n <span class=\"pull-right\" ng-hide=\"isLoggedIntoGogs()\">&nbsp;</span>\r\n\r\n <button class=\"btn btn-default pull-right\"\r\n title=\"Trigger the given build\"\r\n ng-disabled=\"tableConfig.selectedItems.length != 1 || !tableConfig.selectedItems[0].$triggerUrl\"\r\n ng-click=\"triggerBuild(tableConfig.selectedItems[0])\"><i class=\"fa fa-play-circle-o\"></i> Trigger</button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"model.buildconfigs.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no build configurations available.</p>\r\n <a class=\"btn btn-primary\" href=\"{{baseUri}}/kubernetes/buildConfigCreate\"><i class=\"fa fa-wrench\"></i> Add Build Configuration</a>\r\n </div>\r\n <div ng-show=\"model.buildconfigs.length\">\r\n <table class=\"table table-bordered table-striped\" ui-if=\"kubernetes.selectedNamespace\"\r\n hawtio-simple-table=\"tableConfig\"></table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/buildLogs.html","<div ng-controller=\"Kubernetes.BuildLogsController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\" ng-show=\"entity.$viewLink\"\r\n title=\"View the build detail\"\r\n href=\"{{entity.$viewLink}}\">\r\n Build\r\n </a>\r\n <a class=\"btn btn-primary pull-right\" ng-show=\"entity.$configLink\"\r\n title=\"View the build configuration\"\r\n href=\"{{entity.$configLink}}\">\r\n Configuration\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched\">\r\n <h3>logs for {{entity.$configId}}</h3>\r\n\r\n <p>\r\n <pre>\r\n <code>\r\n {{logsText}}\r\n </code>\r\n </pre>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/builds.html","<div class=\"row\" ng-controller=\"Kubernetes.BuildsController\">\r\n <script type=\"text/ng-template\" id=\"buildLinkTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <a title=\"View details for this build: {{row.entity.$name}}\"\r\n href=\"{{row.entity.$viewLink}}\">\r\n <!--\r\n <img class=\"app-icon-small\" ng-src=\"{{row.entity.$iconUrl}}\">\r\n -->\r\n {{row.entity.$shortName}}\r\n </a>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"buildPodTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <a title=\"View the pod for this build: {{row.entity.podName}}\" ng-show=\"row.entity.$podLink\"\r\n href=\"{{row.entity.$podLink}}\">\r\n {{row.entity.$podShortName}}</a>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"buildLogsTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <a title=\"View the log for this build\" ng-show=\"row.entity.$logsLink\"\r\n href=\"{{row.entity.$logsLink}}\">\r\n <i class=\"fa fa-file-text-o\"></i> Logs\r\n </a>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"buildRepositoryTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <a ng-show=\"row.entity.spec.source.git.uri\" target=\"gitRepository\"\r\n title=\"View the git based source repository\"\r\n href=\"{{row.entity.spec.source.git.uri}}\">\r\n {{row.entity.spec.source.git.uri}}\r\n </a>\r\n <span ng-hide=\"row.entity.spec.source.git.uri\">\r\n {{row.entity.spec.source.git.uri}}\r\n </span>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"buildStatusTemplate.html\">\r\n <div class=\"ngCellText\" ng-switch=\"row.entity.status.phase\">\r\n <span ng-switch-when=\"New\" class=\"text-primary\">\r\n <i class=\"fa fa-spin fa-spinner\"></i> New\r\n </span>\r\n <span ng-switch-when=\"Pending\" class=\"text-primary\">\r\n <i class=\"fa fa-spin fa-spinner\"></i> Pending\r\n </span>\r\n <span ng-switch-when=\"Running\" class=\"text-primary\">\r\n <i class=\"fa fa-spin fa-spinner\"></i> Running\r\n </span>\r\n <span ng-switch-when=\"Complete\" class=\"text-success\">\r\n <i class=\"fa fa-check-circle\"></i> Complete\r\n </span>\r\n <span ng-switch-when=\"Failed\" class=\"text-danger\">\r\n <i class=\"fa fa-exclamation-circle\"></i> Failed\r\n </span>\r\n <span ng-switch-default class=\"text-warning\">\r\n <i class=\"fa fa-exclamation-triangle\"></i> {{row.entity.status}}\r\n </span>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"buildTimeTemplate.html\">\r\n <div class=\"ngCellText\" title=\"built at: {{row.entity.$creationDate | date : \'h:mm:ss a, EEE MMM yyyy\'}}\">\r\n {{row.entity.$creationDate.relative()}}\r\n </div>\r\n </script>\r\n\r\n\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\" >\r\n <span ng-show=\"!id\">\r\n <hawtio-filter ng-show=\"model.builds.length\"\r\n ng-model=\"tableConfig.filterOptions.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter builds...\"></hawtio-filter>\r\n </span>\r\n <div class=\"pull-right\" ng-repeat=\"view in buildConfig.$fabric8BuildViews | orderBy:\'label\'\">\r\n <a title=\"{{view.description}}\" ng-show=\"view.url\" ng-href=\"{{view.url}}\" class=\"btn btn-default\">\r\n <i class=\"{{view.iconClass}}\" ng-show=\"view.iconClass\"></i>\r\n {{view.label}}\r\n </a>\r\n <span class=\"pull-right\" ng-show=\"view.url\" >&nbsp;</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched\">\r\n <div ng-hide=\"model.builds.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no builds currently running.</p>\r\n </div>\r\n <div ng-show=\"model.builds.length\">\r\n <table class=\"table table-bordered table-striped\" hawtio-simple-table=\"tableConfig\"></table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/deploymentConfig.html","<div ng-controller=\"Kubernetes.DeploymentConfigController\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\"\r\n href=\"{{baseUri}}/kubernetes/deploymentConfigs\"><i class=\"fa fa-list\"></i></a>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched\">\r\n <div hawtio-object=\"entity\" config=\"config\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/deploymentConfigs.html","<div class=\"row\" ng-controller=\"Kubernetes.DeploymentConfigsController\">\r\n <script type=\"text/ng-template\" id=\"deploymentConfigLinkTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <a title=\"View details for this build configuration\"\r\n href=\"{{baseUri}}/kubernetes/deploymentConfigs/{{row.entity.metadata.name}}\">\r\n<!--\r\n <img class=\"app-icon-small\" ng-src=\"{{row.entity.$iconUrl}}\">\r\n-->\r\n {{row.entity.metadata.name}}</a>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"deploymentConfigLabelTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <span ng-repeat=\"(key, label) in row.entity.template.controllerTemplate.template.metadata.labels track by $index\"\r\n class=\"pod-label badge\"\r\n ng-class=\"labelClass(key)\"\r\n ng-click=\"clickTag(entity, key, label)\"\r\n title=\"{{key}}\">{{label}}</span>\r\n </div>\r\n </script>\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\">\r\n <span>\r\n <hawtio-filter ng-show=\"deploymentConfigs.length\"\r\n ng-model=\"tableConfig.filterOptions.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter deployment configurations...\"></hawtio-filter>\r\n </span>\r\n <button ng-show=\"fetched && deploymentConfigs.length\"\r\n title=\"Delete the selected build configuration\"\r\n class=\"btn btn-danger pull-right\"\r\n ng-disabled=\"tableConfig.selectedItems.length == 0\"\r\n ng-click=\"deletePrompt(tableConfig.selectedItems)\">\r\n <i class=\"fa fa-remove\"></i> Delete\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\"\r\n title=\"Create a new build configuration\"\r\n href=\"{{baseUri}}/kubernetes/buildConfigCreate\"><i class=\"fa fa-plus\"></i> Create</a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button class=\"btn btn-primary pull-right\"\r\n ng-show=\"fetched && deploymentConfigs.length\"\r\n title=\"Trigger the given build\"\r\n ng-disabled=\"tableConfig.selectedItems.length != 1 || !tableConfig.selectedItems[0].$triggerUrl\"\r\n ng-click=\"triggerBuild(tableConfig.selectedItems[0])\"><i class=\"fa fa-play-circle-o\"></i> Trigger</button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched\">\r\n <div ng-hide=\"deploymentConfigs.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no deployment configurations available.</p>\r\n <a class=\"btn btn-primary\" href=\"{{baseUri}}/kubernetes/deploymentConfigCreate\"><i class=\"fa fa-plus\"></i> Create Deployment Configuration</a>\r\n </div>\r\n <div ng-show=\"deploymentConfigs.length\">\r\n <table class=\"table table-bordered table-striped\" ui-if=\"kubernetes.selectedNamespace\"\r\n hawtio-simple-table=\"tableConfig\"></table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/events.html","<div ng-controller=\"Kubernetes.EventsController\">\r\n\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\" ng-show=\"model.events.length\">\r\n <span ng-show=\"!id\">\r\n <hawtio-filter ng-model=\"tableConfig.filterOptions.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"筛选日志信息...\"></hawtio-filter>\r\n </span>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button ng-show=\"id\"\r\n class=\"btn btn-primary pull-right\"\r\n ng-click=\"id = undefined\"><i class=\"fa fa-list\"></i></button>\r\n <span ng-include=\"\'runButton.html\'\"></span>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"model.events.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no events currently available.</p>\r\n </div>\r\n <div ng-show=\"model.events.length\">\r\n <div ng-show=\"mode == \'list\'\">\r\n <table class=\"table table-bordered table-striped\" ui-if=\"kubernetes.selectedNamespace\"\r\n hawtio-simple-table=\"tableConfig\"></table>\r\n </div>\r\n\r\n <div ng-hide=\"mode == \'list\'\">\r\n <div class=\"column-box\"\r\n ng-repeat=\"service in model.serviceApps | filter:filterTemplates | orderBy:\'metadata.name\' track by $index\">\r\n <div class=\"row\">\r\n <div class=\"col-md-2\">\r\n <a href=\"{{service.$serviceUrl}}\"\r\n target=\"_blank\"\r\n title=\"Click to open this app\">\r\n <img style=\"width: 64px; height: 64px;\" ng-src=\"{{service.$iconUrl}}\">\r\n </a>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <a href=\"{{service.$serviceUrl}}\"\r\n target=\"_blank\"\r\n title=\"Click to open this app\">\r\n <h3 ng-bind=\"service.metadata.name\"></h3>\r\n </a>\r\n </div>\r\n<!--\r\n <div class=\"col-md-1\">\r\n <a href=\"\" ng-click=\"deleteService(service)\"><i class=\"fa fa-remove red\"></i></a>\r\n </div>\r\n-->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/host.html","<div ng-controller=\"Kubernetes.HostController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\"\r\n href=\"{{baseUri}}/kubernetes/hosts\"><i class=\"fa fa-list\"></i></a>\r\n <a class=\"btn btn-default pull-right\"\r\n ng-click=\"flipRaw()\"\r\n title=\"{{rawMode ? \'Raw mode\' : \'Form mode\'}}\">{{rawMode ? \'Form\' : \'Raw\'}}</a>\r\n <a class=\"btn btn-default pull-right\" ng-show=\"rawMode\" ng-click=\"readOnly = !readOnly\" ng-class=\"!readOnly ? \'btn-primary\' : \'\'\">Edit</a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-success pull-right\" ng-show=\"dirty\" ng-click=\"save(rawModel)\">Save</a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-primary pull-right\"\r\n title=\"View all the pods on this host\"\r\n href=\"{{baseUri}}/kubernetes/pods/?q=host={{item.id}}\">\r\n Pods\r\n </a>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched && !rawMode\">\r\n <div hawtio-object=\"item\" config=\"itemConfig\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"span12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched && rawMode\">\r\n <div class=\"row-fluid wiki-fixed form-horizontal\">\r\n <div class=\"control-group editor-autoresize\">\r\n <div hawtio-editor=\"rawModel\" mode=\"mode\" read-only=\"readOnly\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/hosts.html","<div class=\"row\" ng-controller=\"Kubernetes.HostsController\">\r\n <script type=\"text/ng-template\" id=\"hostLinkTemplate.html\">\r\n <div class=\"ngCellText\">\r\n </div>\r\n </script>\r\n\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\">\r\n <span ng-show=\"!id\">\r\n <hawtio-filter ng-show=\"model.hosts.length\"\r\n ng-model=\"tableConfig.filterOptions.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter hosts...\"></hawtio-filter>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"model.hosts.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no hosts currently running.</p>\r\n </div>\r\n <div ng-show=\"model.hosts.length\">\r\n <table class=\"table table-bordered table-striped\" ui-if=\"kubernetes.selectedNamespace\"\r\n hawtio-simple-table=\"tableConfig\"></table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/imageRepositories.html","<div class=\"row\" ng-controller=\"Kubernetes.ImageRepositoriesController\">\r\n <script type=\"text/ng-template\" id=\"imageRegistryLabelTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <span ng-repeat=\"(key, label) in row.entity.tags track by $index\"\r\n class=\"pod-label badge\"\r\n ng-class=\"labelClass(key)\"\r\n ng-click=\"clickTag(entity, key, label)\"\r\n title=\"{{key}}\">{{label}}</span>\r\n </div>\r\n </script>\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\">\r\n <span>\r\n <hawtio-filter ng-show=\"imageRepositories.length\"\r\n ng-model=\"tableConfig.filterOptions.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter image repositories...\"></hawtio-filter>\r\n </span>\r\n <button ng-show=\"fetched && imageRepositories.length\"\r\n title=\"Delete the selected build configuration\"\r\n class=\"btn btn-danger pull-right\"\r\n ng-disabled=\"tableConfig.selectedItems.length == 0\"\r\n ng-click=\"deletePrompt(tableConfig.selectedItems)\">\r\n <i class=\"fa fa-remove\"></i> Delete\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\"\r\n title=\"Create a new image repository\"\r\n href=\"{{baseUri}}/kubernetes/imageRepositoryCreate\"><i class=\"fa fa-plus\"></i> Create</a>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched\">\r\n <div ng-hide=\"imageRepositories.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no image repositories available.</p>\r\n <a class=\"btn btn-primary\" href=\"{{baseUri}}/kubernetes/imageRepositoryCreate\"><i class=\"fa fa-plus\"></i> Create Image Repository</a>\r\n </div>\r\n <div ng-show=\"imageRepositories.length\">\r\n <table class=\"table table-bordered table-striped\" ui-if=\"kubernetes.selectedNamespace\"\r\n hawtio-simple-table=\"tableConfig\"></table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/importProject.html","<div ng-init=\"mode=\'create\'\">\r\n <div ng-controller=\"Kubernetes.BuildConfigEditController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <button class=\"btn btn-primary pull-right\"\r\n title=\"Saves changes to this project configuration\"\r\n ng-disabled=\"!entity.metadata.name\"\r\n ng-click=\"save()\">\r\n Save Changes\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched\">\r\n\r\n <p class=\"hero-unit\">\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 </p>\r\n\r\n <div hawtio-form-2=\"specConfig\" entity=\"spec\"></div>\r\n\r\n <form name=\"nameForm\" ng-disabled=\"config.mode == 0\" class=\"form-horizontal\">\r\n <fieldset>\r\n <div class=\"row\">\r\n <div class=\"clearfix col-md-12\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\">Name</label>\r\n <input type=\"text\" class=\"form-control\" pattern=\"[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\" ng-model=\"entity.metadata.name\" required>\r\n\r\n <p class=\"form-warning bg-danger\" ng-show=\"nameForm.$error.pattern\">\r\n Project name must be a lower case DNS name with letters, numbers and dots or dashes such as `example.com`\r\n </p>\r\n <p class=\"help-block\">Name of this project</p>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </form>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/kubernetesJsonDirective.html","<div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"fabric-page-header row\">\r\n\r\n <div class=\"pull-left\" ng-show=\"iconURL\">\r\n <div class=\"app-logo\">\r\n <img ng-src=\"{{iconURL}}\">&nbsp;\r\n </div>\r\n </div>\r\n <div class=\"pull-left\">\r\n <h2 class=\"list-inline\"><span class=\"contained c-wide3\">&nbsp;{{displayName || appTitle}}</span></h2>\r\n </div>\r\n <div class=\"pull-right\">\r\n <button class=\"btn btn-success pull-right\"\r\n title=\"Run this application\"\r\n ng-disabled=\"!config || config.error\"\r\n ng-click=\"apply()\">\r\n <i class=\"fa fa-play-circle\"></i> Run\r\n </button>\r\n </div>\r\n <div class=\"pull-left col-md-10 profile-summary-wide\">\r\n <div\r\n ng-show=\"summaryHtml\"\r\n ng-bind-html-unsafe=\"summaryHtml\"></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/layoutKubernetes.html","<script type=\"text/ng-template\" id=\"runButton.html\">\r\n <button ng-show=\"model.showRunButton\" class=\"btn btn-success pull-right\" ng-click=\"viewTemplates()\" title=\"Run an application from a template\">\r\n <i class=\"fa fa-play-circle\"></i> Run ...\r\n </button>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"idTemplate.html\">\r\n <div class=\"ngCellText nowrap\">\r\n <a href=\"\" title=\"View details for {{row.entity.metadata.name || row.entity.name}}\">\r\n <!--<img class=\"app-icon-small\" ng-src=\"{{row.entity.$iconUrl}}\" ng-show=\"row.entity.$iconUrl\">-->\r\n <strong>{{row.entity.$oracleName || row.entity.name}}</strong></a>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"selectorTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <span ng-repeat=\"(name, value) in row.entity.spec.selector track by $index\">\r\n <strong>{{name}}</strong>: {{value}}\r\n </span>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"podCountsAndLinkTemplate.html\">\r\n <div class=\"ngCellText\" ng-init=\"entity=row.entity\" ng-controller=\"Kubernetes.Status\">\r\n <a ng-show=\"row.entity.$podCounters.podsLink\" title=\"pods status\">\r\n <span ng-show=\"row.entity.$podCounters.ready && (row.entity.$oracleStatus===2)\" class=\"badge badge-success\"> 启动</span>\r\n <span ng-show=\"row.entity.$podCounters.ready && (row.entity.$oracleStatus===0)\" class=\"badge badge-info\"> 等待</span>\r\n <span ng-show=\"row.entity.$podCounters.ready && (row.entity.$oracleStatus===1)\" class=\"badge badge-warning \"> 失败</span>\r\n <span ng-show=\"row.entity.$podCounters.valid || row.entity.$podCounters.waiting\" class=\"badge badge-info\"> 等待</span>\r\n <span ng-show=\"!(row.entity.$podCounters.waiting || row.entity.$podCounters.ready || row.entity.$podCounters.valid || row.entity.$podCounters.error)\" class=\"badge\"> 停止</span>\r\n <span ng-show=\"row.entity.$podCounters.error\" class=\"badge badge-warning\"> 失败</span>\r\n </a>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"dataSummaryTemplate.html\">\r\n <div class=\"ngCellText\" ng-init=\"entity=row.entity\">\r\n <a ng-show=\"row.entity.$podCounters.podsLink\" title=\"pods status\">\r\n <span ng-show=\"row.entity.$extractStatus === 0\" class=\"badge badge-info\" href=\"\"> 未汇总</span>\r\n <span ng-show=\"row.entity.$extractStatus === 1\" class=\"badge badge-success\" href=\"\"> 正在汇总</span>\r\n <span ng-show=\"row.entity.$extractStatus === 2\" class=\"badge\" href=\"\"> 已完成</span>\r\n <span ng-show=\"row.entity.$extractStatus === 3\" class=\"badge badge-warning\" href=\"\"> 失败</span>\r\n <div ng-show=\"row.entity.$extractStatus === 10\">\r\n <span class=\"badge badge-remind\"> 汇总数据库</span>\r\n <span ng-include=\"\'oracleLogTemplate.html\'\"></span>\r\n </div>\r\n </a>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"labelTemplate.html\">\r\n <div class=\"ngCellText\" ng-init=\"entity=row.entity\" ng-controller=\"Kubernetes.Labels\">\r\n <p ng-show=\"data\"><strong>Labels</strong></p>\r\n <span ng-repeat=\"label in labels track by $index\" class=\"pod-label badge\" ng-class=\"labelClass(label.key)\" ng-click=\"handleClick(entity, label.key, label)\" title=\"{{label.key}}\">{{label.title}}</span>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"eventSourceTemplate.html\">\r\n <div class=\"ngCellText\" ng-init=\"labels=row.entity.source\">\r\n <p ng-show=\"data\"><strong>Labels</strong></p>\r\n <span ng-repeat=\"(key, value) in labels track by $index\" class=\"pod-label badge\" class=\"background-light-grey mouse-pointer\" title=\"{{key}}\" ng-click=\"$emit(\'labelFilterUpdate\', key + \'=\' + value)\">{{value}}</span>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"dataLabelsTemplate.html\" ng-controller=\"Kubernetes.DataLabels\">\r\n <div class=\"ngCellText\" ng-init=\"labels=row.entity.labels\">\r\n <p ng-show=\"data\"><strong>Labels</strong></p>\r\n <span ng-repeat=\"(key, value) in labels track by $index\" class=\"pod-label badge\" ng-class=\"labelClass(label.key)\" ng-click=\"labelClick(entity, label.key, label.value)\" title=\"{{label.key}}\">{{value}}</span>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"hostTemplate.html\">\r\n <div class=\"ngCellText\" ng-init=\"host=row.entity.$host\">\r\n <span class=\"pod-label badge background-light-grey mouse-pointer\" ng-click=\"$emit(\'labelFilterUpdate\', \'host=\' + host)\">{{host}}</span>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"portalAddress.html\">\r\n <div class=\"ngCellText\">\r\n <div ng-repeat=\"port in row.entity.$ports track by $index\">\r\n <a target=\"_blank\" href=\"{{row.entity.$connectUrl}}\" ng-show=\"row.entity.$connectUrl && row.entity.$podCounters.ready\" title=\"Protocol {{row.entity.spec.protocol}}\">\r\n {{row.entity.$host}}\r\n </a>\r\n <span ng-hide=\"row.entity.$connectUrl && row.entity.$podCounters.ready\">{{row.entity.spec.portalIP || row.entity.spec.clusterIP}}:{{port}}</span>\r\n </div>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"iconCellTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <img class=\"app-icon-small\" ng-src=\"{{row.entity.$iconUrl}}\">\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"ageTemplate.html\">\r\n <div class=\"ngCellText \" ng-model=\"row.entity.$pods[0].$age\">\r\n {{row.entity.$pods[0].$age}}\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"firstTimestampTemplate.html\">\r\n <div class=\"ngCellText\" title=\"{{row.entity.$firstTimestamp}}\">\r\n {{row.entity.$firstTimestamp | relativeTime}}\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"lastTimestampTemplate.html\">\r\n <div class=\"ngCellText\" title=\"{{row.entity.$lastTimestamp}}\">\r\n {{row.entity.$lastTimestamp | relativeTime}}\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"eventKindTemplate.html\">\r\n <div class=\"ngCellText\" ng-init=\"kind=row.entity.involvedObject.kind\">\r\n <span class=\"pod-label badge\" class=\"background-light-grey mouse-pointer\" ng-click=\"$emit(\'labelFilterUpdate\', \'kind=\' + kind)\">{{kind}}</span>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"eventNameTemplate.html\">\r\n <div class=\"ngCellText\" ng-init=\"name=row.entity.involvedObject.name\">\r\n <span class=\"pod-label badge\" class=\"background-light-grey mouse-pointer\" ng-click=\"$emit(\'labelFilterUpdate\', \'name=\' + name)\">{{name}}</span>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"eventSummaryTemplate.html\">\r\n <div class=\"ngCellText\" title=\"Number of events on this resource\">\r\n <a ng-show=\"row.entity.$pods[0].$eventsLink\" href=\"{{row.entity.$pods[0].$eventsLink}}\">\r\n <span class=\"badge\">{{row.entity.$pods[0].$events.length}}</span>\r\n </a>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"connectTemplate.html\">\r\n <span ng-show=\"entity.$jolokiaUrl && entity.$ready\" ng-controller=\"Kubernetes.ConnectController\">\r\n <a class=\"clickable\"\r\n ng-click=\"doConnect(row.entity)\"\r\n title=\"Open a new window and connect to this container\">\r\n <i class=\"fa fa-sign-in\"></i>\r\n </a>\r\n </span>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"termTemplate.html\">\r\n <span ng-show=\"entity.status.phase === \'Running\'\" ng-controller=\"Kubernetes.TermController\">\r\n <span ng-repeat=\"container in entity.spec.containers\" ng-show=\"canConnectTo(container)\">\r\n <i class=\"fa fa-television clickable\" title=\"Open up a terminal to {{container.name}}\" ng-click=\"openTerminal(entity.metadata.selfLink, container.name)\"></i>\r\n </span>\r\n </span>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"logIconTemplate.html\">\r\n <span ng-show=\"entity.status.phase === \'Running\'\" ng-controller=\"Kubernetes.PodLogLinkController\">\r\n <i class=\"fa fa-file-text\" title=\"Open up the logs for {{entity.metadata.name}}\" ng-click=\"openLogs(entity)\"></i>\r\n </span>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"oracleLogTemplate.html\">\r\n <span ng-controller=\"Kubernetes.PodLogLinkController\">\r\n <i class=\"fa fa-file-text\" title=\"打开{{entity.$oracleName}}的汇总日志\" ng-click=\"openLogs(entity)\"></i>\r\n </span>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"connectParamTemplate.html\">\r\n <div class=\"ngCellText\" ng-init=\"entity=row.entity\">\r\n <p ng-show=\"row.entity.$pods.length\"><strong>{{row.entity.$pods[0].$host}}:{{row.entity.$pods[0].spec.containers[0].ports[0].hostPort}}/orcl</strong></p>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"statusTemplate.html\">\r\n <div class=\"ngCellText nowrap\" ng-init=\"entity=row.entity\" ng-controller=\"Kubernetes.PodStatus\" title=\"Pod {{entity.metadata.name}} is {{entity.status.phase}}\">\r\n <!-- in detail view -->\r\n <p ng-show=\"data\"><strong>Status: </strong></p>\r\n <i class=\"fa {{entity.$statusCss}}\"></i>\r\n <span ng-show=\"data\">{{data}}</span>\r\n <!-- in table -->\r\n <span ng-include=\"\'connectTemplate.html\'\"></span>\r\n <span ng-include=\"\'termTemplate.html\'\"></span>\r\n <span ng-include=\"\'logIconTemplate.html\'\"></span>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"resizeDialog.html\">\r\n <div modal=\"resizeDialog.dialog.show\">\r\n <form class=\"form-horizontal\" ng-submit=\"resizeDialog.onOk()\">\r\n <div class=\"modal-header\">\r\n <h4>Scale {{resizeDialog.controller.metadata.name}}</h4></div>\r\n <div class=\"modal-body\">\r\n <div class=\"control-group\">\r\n <label class=\"control-label\" for=\"replicas\">Number of pods you would like to scale to?</label>\r\n <div class=\"controls\">\r\n <input type=\"number\" min=\"0\" id=\"replicas\" ng-model=\"resizeDialog.newReplicas\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <input class=\"btn btn-primary\" type=\"submit\" ng-disabled=\"resizeDialog.newReplicas === resizeDialog.controller.status.replicas\" value=\"Resize\">\r\n <button class=\"btn btn-warning cancel sj_btn_grey\" type=\"button\" ng-click=\"resizeDialog.close()\">取消</button>\r\n </div>\r\n </form>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"namespaceSelector.html\">\r\n <span ng-controller=\"Kubernetes.NamespaceController\">\r\n namespace:\r\n <select ng-model=\"namespace\" ng-options=\"namespace for namespace in namespaces\"\r\n title=\"choose the namespace - which is a selection of resources in kubernetes\">\r\n </select>\r\n </span>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"pendingPipelines.html\">\r\n <div class=\"row\" ng-controller=\"Developer.PipelinesController\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"model.job.builds.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no pipelines for this job.</p>\r\n </div>\r\n <div ng-show=\"model.job.builds.length\">\r\n <div class=\"pipeline-build-block\" ng-repeat=\"build in model.job.builds | filter:model.filterText track by $index\">\r\n <div pipeline-view></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"taskEdit.html\">\r\n <div class=\"ngCellText\" ng-init=\"entity=row.entity\" ng-controller=\"Kubernetes.TaskEdit\">\r\n <button class=\"btn sj_btn\" ng-click=\"deleteRow(entity)\">\r\n <span class=\"glyphicon glyphicon-trash\"></span>&nbsp;&nbsp;删除\r\n </button>\r\n </div>\r\n</script>\r\n<!-- 迁移进度条 -->\r\n<script type=\"text/ng-template\" id=\"taskProcess.html\">\r\n <div class=\"ngCellText progress\" ng-init=\"entity=row.entity\">\r\n <div ng-show=\"entity.status!==3\" class=\"progress-bar progress-bar-success active sj_progress_bar \" role=\"progressbar\" aria-valuenow=\"{{entity.process}}\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: {{entity.process}}%\"> \r\n <span class=\"sj_progress_font\">{{entity.process}}%</span>\r\n </div>\r\n <div ng-show=\"entity.status ===3\" class=\"progress-bar progress-bar-danger active sj_progress_bar\" role=\"progressbar\" aria-valuenow=\"{{entity.process}}\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: {{entity.process}}%\"> \r\n <span class=\"sj_progress_font\">{{entity.process}}%</span>\r\n </div>\r\n </div>\r\n</script>\r\n<!--迁移状态显示 -->\r\n<script type=\"text/ng-template\" id=\"taskStatus.html\">\r\n <div class=\"ngCellText\" ng-init=\"entity=row.entity\">\r\n <span ng-show=\"entity.status===0\" class=\"glyphicon glyphicon-minus\"></span>\r\n <span ng-show=\"entity.status===1\" class=\"glyphicon glyphicon-transfer\"></span>\r\n <span ng-show=\"entity.status===2\" class=\"glyphicon glyphicon-ok\"></span>\r\n <span ng-show=\"entity.status===3\" class=\"glyphicon glyphicon-remove\"></span>\r\n </div>\r\n</script>\r\n<script type=\"text/ng-template\" id=\"creationTimeTemplate.html\">\r\n <div class=\"ngCellText\" title=\"created at: {{row.entity.$creationDate | date : \'h:mm:ss a, EEE MMM yyyy\'}}\">\r\n {{row.entity.$creationDate.relative()}}\r\n </div>\r\n</script>\r\n<div ng-controller=\"Kubernetes.TopLevel\">\r\n <div class=\"wiki-icon-view\" ng-controller=\"Kubernetes.FileDropController\" nv-file-drop nv-file-over uploader=\"uploader\" over-class=\"ready-drop\">\r\n <div class=\"row kubernetes-view\" ng-view></div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/logShell.html","<div class=\"terminal-window pod-log-window\" pod-log-window ng-mousedown=\"raise()\">\r\n <div class=\"resize-dot\" ng-mousedown=\"startResize($event)\" ng-hide=\"docked\"></div>\r\n <div class=\"centered scroll-indicator\" ng-hide=\"atBottom\" ng-click=\"atBottom = true\">\r\n <span class=\"fa fa-caret-down\"></span>\r\n </div>\r\n <div class=\"terminal-title\" ng-mousedown=\"mouseDown($event)\" ng-mouseup=\"mouseUp($event)\" ng-mousemove=\"mouseMove($event)\">\r\n <h5 class=\"top-bottom-middle\">{{containerName}}的汇总日志</h5>\r\n <i class=\"fa fa-remove pull-right clickable\" title=\"Close and exit this log\" ng-click=\"close()\"></i>\r\n <i class=\"fa fa-square-o pull-right clickable\" title=\"Maximize this log\" ng-click=\"maximize($event)\"></i>\r\n <i class=\"fa fa-sort-desc pull-right clickable\" ng-hide=\"maximized()\" title=\"Minimize this log\" ng-click=\"minimize($event)\"></i>\r\n </div>\r\n <!--<div class=\"terminal-body\" scroll-glue ng-model=\"atBottom\" style=\"overflow-y:hidden\"> -->\r\n <textarea style=\"height:100%; width:100%\" disabled=\"disabled\">{{logs}}</textarea>\r\n <!--</div>-->\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/overview.html","<div ng-controller=\"Kubernetes.OverviewController\">\r\n <script type=\"text/ng-template\" id=\"serviceBoxTemplate.html\">\r\n <div>\r\n <div class=\"align-left node-body\">{{entity.$portsText}}</div>\r\n <div class=\"align-right node-header\" title=\"{{entity.metadata.name}}\" ng-bind=\"entity.metadata.name\"></div>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"serviceTemplate.html\">\r\n <div class=\"kubernetes-overview-row\">\r\n <div class=\"kubernetes-overview-cell\">\r\n <div id=\"{{service._key}}\"\r\n namespace=\"{{service.metadata.namespace}}\"\r\n connect-to=\"{{service.connectTo}}\"\r\n data-type=\"service\"\r\n class=\"jsplumb-node kubernetes-node kubernetes-service-node\"\r\n ng-controller=\"Kubernetes.OverviewBoxController\"\r\n ng-init=\"entity=getEntity(\'service\', \'{{service._key}}\')\"\r\n ng-mouseenter=\"mouseEnter($event)\"\r\n ng-mouseleave=\"mouseLeave($event)\"\r\n ng-click=\"viewDetails(entity, \'services\')\">\r\n <div ng-init=\"entity=entity\" ng-include=\"\'serviceBoxTemplate.html\'\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"overviewHostTemplate.html\">\r\n <div class=\"kubernetes-overview-row\">\r\n <div class=\"kubernetes-overview-cell\">\r\n <div id=\"{{host.elementId}}\"\r\n data-type=\"host\"\r\n class=\"kubernetes-host-container host\">\r\n <h5><img ng-src=\"{{host.$iconUrl}}\" style=\"width: 32px; height: 32px;\">\r\n <a ng-href=\"{{baseUri}}/kubernetes/hosts/{{host.id}}\">{{host.id}}</a>\r\n </h5>\r\n <div class=\"pod-container\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"podTemplate.html\">\r\n <div id=\"{{pod._key}}\"\r\n data-type=\"pod\"\r\n title=\"Pod ID: {{pod.metadata.name}}\"\r\n class=\"jsplumb-node kubernetes-node kubernetes-pod-node\"\r\n ng-mouseenter=\"mouseEnter($event)\"\r\n ng-mouseleave=\"mouseLeave($event)\"\r\n ng-controller=\"Kubernetes.OverviewBoxController\"\r\n ng-init=\"entity=getEntity(\'pod\', \'{{pod._key}}\')\"\r\n ng-click=\"viewDetails(entity, \'pods\')\">\r\n <div class=\"css-table\">\r\n <div class=\"css-table-row\">\r\n <div class=\"pod-status-cell css-table-cell\">\r\n <span ng-init=\"row={ entity: entity }\" ng-include=\"\'statusTemplate.html\'\"></span>\r\n </div>\r\n <div class=\"pod-label-cell css-table-cell\">\r\n <span ng-init=\"row={ entity: entity }\" ng-include=\"\'labelTemplate.html\'\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"replicationControllerTemplate.html\">\r\n <div class=\"kubernetes-overview-row\">\r\n <div class=\"kubernetes-overview-cell\">\r\n <div\r\n id=\"{{replicationController._key}}\"\r\n title=\"{{replicationController.id}}\"\r\n data-type=\"replicationController\"\r\n data-placement=\"top\"\r\n connect-to=\"{{replicationController.connectTo}}\"\r\n ng-mouseenter=\"mouseEnter($event)\"\r\n ng-mouseleave=\"mouseLeave($event)\"\r\n class=\"jsplumb-node kubernetes-replicationController-node kubernetes-node\"\r\n ng-controller=\"Kubernetes.OverviewBoxController\"\r\n ng-init=\"entity=getEntity(\'replicationController\', \'{{replicationController._key}}\')\"\r\n ng-click=\"viewDetails(entity, \'replicationControllers\')\">\r\n <img class=\"app-icon-medium\" ng-src=\"{{replicationController.$iconUrl}}\">\r\n </div>\r\n </div>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"overviewTemplate.html\">\r\n <div class=\"kubernetes-overview\"\r\n hawtio-jsplumb\r\n draggable=\"false\"\r\n layout=\"false\"\r\n node-sep=\"50\"\r\n rank-sep=\"300\">\r\n <div class=\"kubernetes-overview-row\">\r\n <div class=\"kubernetes-overview-cell\">\r\n <div class=\"kubernetes-overview services\">\r\n <h6>Services</h6>\r\n </div>\r\n </div>\r\n <div class=\"kubernetes-overview-cell\">\r\n <div class=\"kubernetes-overview hosts\">\r\n <h6>Hosts and Pods</h6>\r\n </div>\r\n </div>\r\n <div class=\"kubernetes-overview-cell\">\r\n <div class=\"kubernetes-overview replicationControllers\">\r\n <h6>Replication controllers</h6>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </script>\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <kubernetes-overview></kubernetes-overview>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/pendingPipelines.html","<div class=\"pipeline-panel\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <div class=\"spinner spinner-lg\"></div>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"model.job.builds.length\" class=\"align-center\">\r\n <div>\r\n <h2>No Pipeline Available</h2>\r\n <p>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</p>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.job.builds.length\">\r\n <div ng-repeat=\"build in model.job.builds | filter:model.filterText track by $index\">\r\n <div pipeline-view></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/pipelines.html","<div class=\"row\" ng-controller=\"Kubernetes.PipelinesController\">\r\n <script type=\"text/ng-template\" id=\"hostLinkTemplate.html\">\r\n <div class=\"ngCellText\">\r\n </div>\r\n </script>\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\">\r\n <span>\r\n <hawtio-filter ng-show=\"pipelines.length\"\r\n ng-model=\"filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter builds...\"></hawtio-filter>\r\n </span>\r\n <a class=\"btn btn-default pull-right\"\r\n title=\"Create a new project\"\r\n ng-show=\"forgeEnabled\"\r\n href=\"/workspaces/{{namespace}}/forge/createProject\"><i class=\"fa fa-plus\"></i> Create Project</a>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched\">\r\n <div ng-hide=\"pipelines.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no build pipelines available.</p>\r\n <a class=\"btn btn-primary\" href=\"{{baseUri}}/kubernetes/buildConfig\">Create Build Configuration</a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched && pipelines.length\">\r\n <div ng-repeat=\"pipeline in pipelines | filter:filterText\">\r\n <div class=\"row\">\r\n\r\n <div class=\"pipeline-row\">\r\n <div ng-repeat=\"step in pipeline.triggersSteps\">\r\n <div ng-switch=\"step.buildConfig.kind\">\r\n <div ng-switch-default=\"\">\r\n <div class=\"col-md-1\" ng-hide=\"$first\">\r\n <div class=\"pipeline-arrow\">\r\n <i class=\"fa fa-long-arrow-right\"></i>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-2 pipeline-build\" title=\"Build configuration\">\r\n <span class=\"pipeline-build-details\">\r\n <a title=\"View details for this build configuration\"\r\n href=\"{{baseUri}}/kubernetes/buildConfigs/{{step.buildConfig.metadata.name}}\">\r\n <i class=\"fa fa-cog\"></i>\r\n {{step.buildConfig.metadata.name}}\r\n </a>\r\n </span>\r\n &nbsp;&nbsp;&nbsp;\r\n <span class=\"pipeline-last-build\" ng-show=\"step.buildConfig.$lastBuild\">\r\n <a href=\"{{step.buildConfig.$lastBuild.$viewLink}}\" title=\"view this build\">\r\n <i class=\"fa fa-info\"></i>\r\n build\r\n </a>\r\n </span>\r\n\r\n <div class=\"ngCellText\" class=\"pipeline-last-build-time\"\r\n title=\"last build was at: {{step.buildConfig.$lastBuild.$creationDate | date : \'h:mm:ss a, EEE MMM yyyy\'}}\">\r\n <div ng-switch=\"step.buildConfig.$lastBuild.status\">\r\n <span ng-switch-when=\"New\" class=\"text-primary\">\r\n <i class=\"fa fa-spin fa-spinner\"></i> new: {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n </span>\r\n <span ng-switch-when=\"Pending\" class=\"text-primary\">\r\n <i class=\"fa fa-spin fa-spinner\"></i> pending: {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n </span>\r\n <span ng-switch-when=\"Running\" class=\"text-primary\">\r\n <i class=\"fa fa-spin fa-spinner\"></i> running {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n </span>\r\n <span ng-switch-when=\"Complete\" class=\"text-success\">\r\n <i class=\"fa fa-check-circle\"></i> completed {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n </span>\r\n <span ng-switch-when=\"Failed\" class=\"text-danger\">\r\n <i class=\"fa fa-exclamation-circle\"></i> failed {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n </span>\r\n <span ng-switch-default class=\"text-warning\">\r\n <i class=\"fa fa-exclamation-triangle\"></i> {{step.buildConfig.$lastBuild.status}}: {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"pipeline-last-build-logs\">\r\n <a href=\"{{step.buildConfig.$lastBuild.$logsLink}}\" title=\"view the logs of this build\">\r\n <i class=\"fa fa-file-text-o\"></i>\r\n logs\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div ng-switch-when=\"DeploymentConfig\">\r\n <div class=\"col-md-1\">\r\n <div class=\"pipeline-arrow\">\r\n <i class=\"fa fa-long-arrow-right\"></i>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-2 pipeline-deploy\" title=\"Deployment Configuration\">\r\n <div class=\"pipeline-build-details\">\r\n <a title=\"View details for this deployment configuration\"\r\n href=\"{{baseUri}}/kubernetes/deploymentConfigs/{{step.buildConfig.metadata.name}}\">\r\n <i class=\"fa fa-cogs\"></i>\r\n {{step.buildConfig.metadata.name}}\r\n </a>\r\n </div>\r\n <div class=\"pipeline-deploy-pods\">\r\n <div class=\"pipeline-pod-counts\" ng-show=\"step.$podCounters\">pods:\r\n <a ng-show=\"step.$podCounters.podsLink\" target=\"pods\" href=\"{{step.$podCounters.podsLink}}\"\r\n title=\"View pods for this deployment\">\r\n <span class=\"badge badge-success\">{{step.$podCounters.ready}}</span>\r\n <span class=\"badge badge-info\">{{step.$podCounters.valid}}</span>\r\n <span ng-show=\"step.$podCounters.waiting\" class=\"badge\">{{step.$podCounters.waiting}}</span>\r\n <span ng-show=\"step.$podCounters.error\"\r\n class=\"badge badge-warning\">{{step.$podCounters.error}}</span>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/pod.html","<div ng-controller=\"Kubernetes.PodController\">\r\n\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row row-header\">\r\n <div class=\"col-md-12\">\r\n <span ng-show=\"model.fetched && !rawMode\" class=\"icon-heading\">\r\n <i ng-show=\"item.$statusCss\" class=\"icon-selected-app fa {{item.$statusCss}}\"></i>\r\n\r\n <img ng-show=\"item.$iconUrl\" class=\"icon-selected-app\" ng-src=\"{{item.$iconUrl}}\">&nbsp;{{item.metadata.name}}\r\n </span>\r\n\r\n <button class=\"btn btn-danger pull-right\"\r\n title=\"Delete this Pod\"\r\n ng-click=\"deleteEntity()\">\r\n <i class=\"fa fa-remove\"></i> Delete\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-default pull-right\"\r\n href=\"{{baseUri}}/kubernetes/pods?namespace={{item.metadata.namespace}}\"><i class=\"fa fa-list\"></i></a>\r\n <span ng-show=\"hasServiceKibana()\" class=\"pull-right\">&nbsp;</span>\r\n <button ng-show=\"hasServiceKibana()\"\r\n class=\"btn btn-default pull-right\"\r\n title=\"View the logs for this pod\"\r\n ng-click=\"openLogs()\">\r\n <i class=\"fa fa-file-text-o\"></i> Logs\r\n </button>\r\n\r\n <a class=\"btn btn-default pull-right\"\r\n ng-click=\"flipRaw()\"\r\n title=\"{{rawMode ? \'Raw mode\' : \'Form mode\'}}\">{{rawMode ? \'Form\' : \'Raw\'}}</a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-default pull-right\" ng-show=\"rawMode\" ng-click=\"readOnly = !readOnly\" ng-class=\"!readOnly ? \'btn-primary\' : \'\'\">Edit</a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-success pull-right\" ng-show=\"dirty\" ng-click=\"save(rawModel)\">Save</a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-primary pull-right\"\r\n href=\"/kubernetes/namespace/{{item.metadata.namespace}}/events?q=kind%3DPod%20name%3D{{item.metadata.name}}\"\r\n title=\"View the events for this Pod\">\r\n <i class=\"fa fa-ellipsis-v\"></i> Events\r\n </a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <div ng-show=\"item.$jolokiaUrl && item.$ready\" ng-controller=\"Kubernetes.ConnectController\" class=\"pull-right\">\r\n <span>&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\"\r\n ng-click=\"doConnect(item)\"\r\n title=\"Open a new window and connect to this container\">\r\n <i class=\"fa fa-sign-in\"></i> Connect\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched && !rawMode\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div hawtio-object=\"item\" config=\"itemConfig\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div ng-show=\"model.fetched && rawMode\">\r\n <div class=\"raw-json-view\">\r\n <div hawtio-editor=\"rawModel\" mode=\"mode\" read-only=\"readOnly\"></div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/podCreate.html","<div ng-controller=\"Kubernetes.PodEditController\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\"\r\n title=\"Go back to viewing all the pods\"\r\n href=\"{{baseUri}}/kubernetes/pods\"><i class=\"fa fa-list\"></i></a>\r\n <button class=\"btn btn-primary pull-right\"\r\n title=\"Create a new pod\"\r\n ng-click=\"save()\">\r\n Create Pod\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched\">\r\n <div hawtio-form-2=\"config\" entity=\"entity\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/podEdit.html","<div ng-controller=\"Kubernetes.PodEditController\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\"\r\n title=\"Go back to viewing all the pods\"\r\n href=\"{{baseUri}}/kubernetes/pods\"><i class=\"fa fa-list\"></i></a>\r\n <button class=\"btn btn-primary pull-right\"\r\n title=\"Saves changes to this pod\"\r\n ng-click=\"save()\">\r\n Save\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched\">\r\n <div hawtio-form-2=\"config\" entity=\"entity\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/pods.html","<div class=\"row\" ng-controller=\"Kubernetes.Pods\">\r\n <script type=\"text/ng-template\" id=\"imageTemplate.html\">\r\n <div class=\"ngCellText\">\r\n <!-- in table -->\r\n <span ng-hide=\"data\">\r\n <span ng-repeat=\"container in row.entity.spec.containers\">\r\n <span ng-hide=\"container.$imageLink\">{{container.image}}</span>\r\n <a ng-show=\"container.$imageLink\" target=\"dockerRegistry\" href=\"{{container.$imageLink}}\" title=\"{{container.name}}\">{{container.image}}</a>\r\n </span>\r\n </span>\r\n <!-- in detail view -->\r\n <span ng-show=\"data\">\r\n <a target=\"dockerRegistry\" ng-href=\"https://registry.hub.docker.com/u/{{data}}\" title=\"{{data}}\">{{data}}</a>\r\n </span>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"configDetail.html\">\r\n <pre>{{data}}</pre>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"envItemTemplate.html\">\r\n <span ng-controller=\"Kubernetes.EnvItem\">\r\n <span class=\"blue\">{{key}}</span>=<span class=\"green\">{{value}}</span>\r\n </span>\r\n </script>\r\n\r\n\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\" ng-show=\"true\">\r\n <span ng-show=\"!id\">\r\n <hawtio-filter ng-model=\"tableConfig.filterOptions.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter pods...\"></hawtio-filter>\r\n </span>\r\n <button ng-show=\"model.fetched\"\r\n class=\"btn btn-danger pull-right\"\r\n ng-disabled=\"!id && tableConfig.selectedItems.length == 0\"\r\n ng-click=\"deletePrompt(id || tableConfig.selectedItems)\">\r\n <i class=\"fa fa-remove\"></i> Delete\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button ng-show=\"id\"\r\n class=\"btn btn-primary pull-right\"\r\n ng-click=\"id = undefined\"><i class=\"fa fa-list\"></i></button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button ng-show=\"hasServiceKibana()\"\r\n class=\"btn btn-primary pull-right\"\r\n title=\"View the logs for the selected pods\"\r\n ng-disabled=\"!id && tableConfig.selectedItems.length == 0\"\r\n ng-click=\"openLogs()\">\r\n <i class=\"fa fa-file-text-o\"></i> Logs\r\n </button>\r\n <span ng-show=\"hasServiceKibana()\" class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\"\r\n title=\"Create a new pod\"\r\n ng-click=\"createPods()\"><i class=\"fa fa-plus\"></i> 创建新服务</a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <span ng-include=\"\'runButton.html\'\"></span>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"model.pods.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no pods currently running.</p>\r\n </div>\r\n <div ng-show=\"model.pods.length\">\r\n <table class=\"table table-striped table-bordered\" ui-if=\"kubernetes.selectedNamespace\"\r\n hawtio-simple-table=\"tableConfig\"></table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/replicationController.html","<div ng-controller=\"Kubernetes.ReplicationControllerController\">\r\n\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row row-header\">\r\n <div class=\"col-md-12\">\r\n <span ng-show=\"model.fetched && !rawMode\" class=\"icon-heading\">\r\n <img ng-show=\"item.$iconUrl\" class=\"icon-selected-app\" ng-src=\"{{item.$iconUrl}}\">&nbsp;{{item.metadata.name}}\r\n </span>\r\n\r\n <button class=\"btn btn-danger pull-right\"\r\n title=\"Delete this ReplicationController\"\r\n ng-click=\"deleteEntity()\">\r\n <i class=\"fa fa-remove\"></i> Delete\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-default pull-right\"\r\n title=\"Return to table of controllers\"\r\n href=\"{{baseUri}}/kubernetes/replicationControllers?namespace={{item.metadata.namespace}}\"><i class=\"fa fa-list\"></i></a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-default pull-right\"\r\n ng-click=\"flipRaw()\"\r\n title=\"{{rawMode ? \'Raw mode\' : \'Form mode\'}}\">{{rawMode ? \'Form\' : \'Raw\'}}</a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-default pull-right\" ng-show=\"rawMode\" ng-click=\"readOnly = !readOnly\" ng-class=\"!readOnly ? \'btn-primary\' : \'\'\">Edit</a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-success pull-right\" ng-show=\"dirty\" ng-click=\"save(rawModel)\">Save</a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-default pull-right\"\r\n href=\"/kubernetes/namespace/{{item.metadata.namespace}}/events?q=kind%3DReplicationController%20name%3D{{item.metadata.name}}\"\r\n title=\"View the events for this Replication Controller\">\r\n <i class=\"fa fa-ellipsis-v\"></i> Events\r\n </a>\r\n\r\n <span class=\"pull-right\">&nbsp;&nbsp;&nbsp;</span>\r\n\r\n <a class=\"btn btn-default pull-right\"\r\n ng-click=\"resizeDialog.open(item)\"\r\n title=\"Scale this controller, changing the number of pods you wish to run\">\r\n <i class=\"fa fa-server\"></i> Scale\r\n </a>\r\n\r\n <span class=\"pull-right controller-pod-counts\" ng-show=\"item.$podCounters\">Pods:\r\n <a ng-show=\"item.$podCounters.podsLink\" href=\"{{link(item.$podCounters.podsLink)}}\" title=\"View pods\">\r\n <span ng-show=\"item.$podCounters.ready\" class=\"badge badge-success\">{{item.$podCounters.ready}}</span>\r\n <span ng-show=\"item.$podCounters.valid\" class=\"badge badge-info\">{{item.$podCounters.valid}}</span>\r\n <span ng-show=\"item.$podCounters.waiting\" class=\"badge\">{{item.$podCounters.waiting}}</span>\r\n <span ng-show=\"item.$podCounters.error\" class=\"badge badge-warning\">{{item.$podCounters.error}}</span>\r\n </a>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched && !rawMode\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div hawtio-object=\"item\" config=\"itemConfig\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div ng-show=\"model.fetched && rawMode\">\r\n <div class=\"raw-json-view\">\r\n <div hawtio-editor=\"rawModel\" mode=\"mode\" read-only=\"readOnly\"></div>\r\n </div>\r\n </div>\r\n\r\n <ng-include src=\"\'resizeDialog.html\'\"/>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/replicationControllerCreate.html","<div ng-controller=\"Kubernetes.ReplicationControllerEditController\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\"\r\n title=\"Go back to viewing all the replication controllers\"\r\n href=\"{{baseUri}}/kubernetes/replicationControllers\"><i class=\"fa fa-list\"></i></a>\r\n <button class=\"btn btn-primary pull-right\"\r\n title=\"Create a new controller\"\r\n ng-click=\"save()\">\r\n Create Controller\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched\">\r\n <div hawtio-form-2=\"config\" entity=\"entity\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/replicationControllerEdit.html","<div ng-controller=\"Kubernetes.ReplicationControllerEditController\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\"\r\n title=\"Go back to viewing all the replication controllers\"\r\n href=\"{{baseUri}}/kubernetes/replicationControllers\"><i class=\"fa fa-list\"></i></a>\r\n <button class=\"btn btn-primary pull-right\"\r\n title=\"Saves changes to the controller\"\r\n ng-click=\"save()\">\r\n Save\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched\">\r\n <div hawtio-form-2=\"config\" entity=\"entity\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/replicationControllers.html","<div ng-controller=\"Kubernetes.ReplicationControllers\">\r\n <script type=\"text/ng-template\" id=\"currentReplicasTemplate.html\">\r\n <div class=\"ngCellText\" title=\"Number of running pods for this controller\">\r\n <a ng-show=\"row.entity.podsLink\" href=\"{{row.entity.podsLink}}\">\r\n <span class=\"badge {{row.entity.status.replicas > 0 ? \'badge-success\' : \'badge-warning\'}}\">{{row.entity.status.replicas}}</span>\r\n </a>\r\n <span ng-hide=\"row.entity.podsLink\" class=\"badge\">{{row.entity.status.replicas}}</span>\r\n </div>\r\n </script>\r\n <script type=\"text/ng-template\" id=\"desiredReplicas.html\">\r\n <div class=\"ngCellText\">\r\n <a href=\"\" class=\"badge badge-info\" \r\n ng-click=\"$parent.$parent.resizeDialog.open(row.entity)\" \r\n title=\"Edit the number of replicas of this controller\">{{row.entity.spec.replicas || 0}}</a>\r\n </div>\r\n </script>\r\n\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12 sj_fluid\" >\r\n <span ng-show=\"!id\">\r\n <hawtio-filter ng-model=\"tableConfig.filterOptions.filterText\"\r\n css-class=\"input-xxlarge sj_txt_box\"\r\n placeholder=\"通过数据标签筛选相应的oracle服务...\"\r\n save-as=\"kubernetes-replication-controllers-text-filter\"></hawtio-filter>\r\n </span>\r\n <button ng-show=\"model.fetched\"\r\n class=\"btn btn-danger pull-right sj_btn_grey \"\r\n ng-disabled=\"!id && tableConfig.selectedItems.length == 0\"\r\n ng-click=\"deletePrompt(id || tableConfig.selectedItems)\">\r\n <i class=\"glyphicon glyphicon-trash\"></i> 删除\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <button ng-show=\"model.fetched\"\r\n class=\"btn btn-warning pull-right sj_btn_grey \"\r\n ng-disabled=\"!id && tableConfig.selectedItems.length == 0\"\r\n ng-click=\"stopPrompt(id || tableConfig.selectedItems)\">\r\n <i class=\"glyphicon glyphicon-off\"></i> 停止\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <button ng-show=\"model.fetched\"\r\n class=\"btn btn-info pull-right sj_btn_grey\"\r\n ng-disabled=\"!id && tableConfig.selectedItems.length == 0\"\r\n ng-click=\"reStartPrompt(id || tableConfig.selectedItems)\">\r\n <i class=\"glyphicon glyphicon-play\"></i> 启动\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <button ng-show=\"model.fetched\"\r\n ng-disabled=\"!id && tableConfig.selectedItems.length == 0\"\r\n class=\"btn btn-success pull-right sj_btn_grey\"\r\n ng-click=\"extractClick.open(id || tableConfig.selectedItems)\">\r\n <i class=\"glyphicon glyphicon-cloud-download\"></i> 汇总\r\n </button>\r\n <!--<span ng-include=\"\'runButton.html\'\"></span>-->\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12 sj_fluid\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"model.replicationControllers.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">当前没有正在运行的oracle服务.</p>\r\n </div>\r\n <div ng-show=\"model.replicationControllers.length\">\r\n <table class=\"table table-bordered table-striped sj_content_table\"\r\n hawtio-simple-table=\"tableConfig\" ></table>\r\n </div>\r\n </div>\r\n </div>\r\n </div> \r\n\r\n <div modal=\"extractClick.dialog.show\">\r\n <form name=\"selectOracle\" class=\"\" ng-submit=\"extractClick.onOk()\">\r\n <div class=\"modal-header\"><h4>数据汇总</h4></div>\r\n <div class=\"modal-body\">\r\n\r\n <div class=\"form-group\" ng-class=\"{\'has-error\': selectOracle.$invalid}\">\r\n <label class=\"fl control-label sj_control-label\" for=\"selectedItem\">\r\n 数据库名称\r\n <a tabindex=\"0\" role=\"button\" data-toggle=\"popover\" data-trigger=\"focus\" data-html=\"true\" title=\"\"\r\n data-content=\"name of the new project\" data-placement=\"top\" data-original-title=\"\">\r\n <span class=\"fa fa-info-circle\"></span>\r\n </a>\r\n </label>\r\n\r\n <div class=\"col-sm-9\">\r\n <select ng-model=\"extractClick.selectedItem\" class=\"form-control sj_txt_box02\"\r\n title=\"name of the new namespace\"\r\n id =\"selectedItem\"\r\n ng-options=\"x.name for x in configs.oracleParam\">\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <hr/>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-sm-12 alert alert-warning sj_alert-warning\">\r\n <span class=\"help-block \" ng-show=\"configs.oracleParam.length >0 && extractClick.selectedItem\">\r\n <br>\r\n 您所选择的数据库数据将会被抽取到汇总数据库:\r\n <font color=\"Red\"><strong>{{extractClick.selectedItem.name}}</strong></font> 中,是否继续请确认!\r\n </span>\r\n <span class=\"help-block\" ng-show=\"configs.oracleParam.length == 0\">\r\n 当前没有汇总数据库可以选择,请先创建,可以点击创建汇总数据库按钮进行创建或从汇总页面中的服务器数据列表中启动已创建的汇总数据库!\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <input class=\"btn btn-primary sj_btn_blue\" type=\"submit\"\r\n ng-disabled=\"configs.oracleParam.length == 0\"\r\n value=\"确定\">\r\n\r\n <button class=\"btn btn-warning cancel sj_btn_grey\" type=\"button\" ng-click=\"extractClick.close()\">取消</button>\r\n </div>\r\n </form>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/secret.html","<div ng-controller=\"Kubernetes.SecretController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\">\r\n <button class=\"btn btn-default pull-right\"\r\n title=\"Cancel changes to this secret\"\r\n ng-click=\"cancel()\">\r\n Cancel\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button class=\"btn btn-primary pull-right\"\r\n title=\"Saves changes to this secret\"\r\n ng-disabled=\"!entity.name || !changed\"\r\n ng-click=\"save()\">\r\n Save Changes\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div ng-hide=\"fetched\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div ng-show=\"fetched\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <form name=\"secretForm\" class=\"form-horizontal\">\r\n <div class=\"form-group\" ng-hide=\"id\" ng-class=\"{\'has-error\': secretForm.$error.validator}\">\r\n <label class=\"col-sm-2 control-label\" for=\"secretName\">\r\n Name\r\n <a tabindex=\"0\" role=\"button\" data-toggle=\"popover\" data-trigger=\"focus\" data-html=\"true\" title=\"\"\r\n data-content=\"name of the secret\" data-placement=\"top\" data-original-title=\"\">\r\n <span class=\"fa fa-info-circle\"></span>\r\n </a>\r\n </label>\r\n\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" id=\"secretName\" name=\"secretName\" ng-model=\"entity.name\" ng-change=\"entityChanged()\" class=\"form-control\"\r\n ui-validate=\"\'checkNameUnique($value)\'\"\r\n required=\"required\">\r\n <span class=\"help-block\" ng-show=\"secretForm.secretName.$error.validator\">\r\n There is already a secret with that name!\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\" ng-repeat=\"property in entity.properties track by $index\">\r\n <label class=\"col-sm-2 control-label\" for=\"{{property.key}}\">\r\n {{property.label}}\r\n <a tabindex=\"0\" role=\"button\" data-toggle=\"popover\" data-trigger=\"focus\" data-html=\"true\" title=\"\"\r\n data-content=\"{{property.description}}\" data-placement=\"top\" data-original-title=\"\">\r\n <span class=\"fa fa-info-circle\"></span>\r\n </a>\r\n </label>\r\n\r\n <div class=\"col-sm-9\" ng-switch=\"property.type\">\r\n <textarea ng-switch-when=\"textarea\" class=\"form-control\" rows=\"{{property.rows}}\" id=\"{{property.key}}\" ng-change=\"entityChanged()\"\r\n ng-model=\"entity.properties[property.key].value\"></textarea>\r\n <input ng-switch-default=\"\" type=\"{{property.type}}\" class=\"form-control\" id=\"{{property.key}}\" ng-change=\"entityChanged()\"\r\n ng-model=\"entity.properties[property.key].value\">\r\n </div>\r\n\r\n <div class=\"col-sm-1\">\r\n <button class=\"btn btn-danger pull-right\" ng-click=\"deleteProperty(property.key)\"\r\n title=\"Remove this property from the secret\">\r\n <i class=\"fa fa-remove\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n\r\n\r\n <div class=\"form-group\" ng-show=\"entity.name\">\r\n <div class=\"col-sm-12\">\r\n <div class=\"text-center\">\r\n <button class=\"btn btn-default btn-padding\" ng-click=\"addFields(httpsKeys)\" ng-hide=\"hasAllKeys(httpsKeys)\"\r\n title=\"Adds fields to store HTTPS user and password fields\">\r\n <i class=\"fa fa-plus\"></i> HTTPS User &amp; Password Fields\r\n </button>\r\n <button class=\"btn btn-default btn-padding\" ng-click=\"addFields(sshKeys)\" ng-hide=\"hasAllKeys(sshKeys)\"\r\n title=\"Adds the fields to store SSH private and public keys\">\r\n <i class=\"fa fa-plus\"></i> SSH Key Fields\r\n </button>\r\n <button class=\"btn btn-default btn-padding\" ng-click=\"addFieldDialog.dialog.open()\"\r\n title=\"Adds a new data field to store new data in this secret\">\r\n <i class=\"fa fa-plus\"></i> Custom Field\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div modal=\"addFieldDialog.dialog.show\">\r\n <form name=\"addDataFieldForm\" class=\"\" ng-submit=\"addFieldDialog.onOk()\">\r\n <div class=\"modal-header\"><h4>Add New Data Field</h4></div>\r\n <div class=\"modal-body\">\r\n\r\n <div class=\"form-group\" ng-class=\"{\'has-error\': addDataFieldForm.$invalid}\">\r\n <label class=\"col-sm-2 control-label\" for=\"newDataName\">\r\n Name\r\n <a tabindex=\"0\" role=\"button\" data-toggle=\"popover\" data-trigger=\"focus\" data-html=\"true\" title=\"\"\r\n data-content=\"name of the new field to add to the secret\" data-placement=\"top\" data-original-title=\"\">\r\n <span class=\"fa fa-info-circle\"></span>\r\n </a>\r\n </label>\r\n\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" id=\"newDataName\" name=\"newDataName\" ng-model=\"entity.newDataKey\" class=\"form-control\"\r\n ui-validate=\"\'checkFieldUnique($value)\'\"\r\n typeahead=\"title for title in propertyKeys() | filter:$viewValue\"\r\n typeahead-editable=\"true\"\r\n autocomplete=\"off\"\r\n title=\"name of the new field to add to the secret\"\r\n placeholder=\"new data field name\">\r\n\r\n <span class=\"help-block\" ng-show=\"addDataFieldForm.newDataName.$error.validator\">\r\n That field name is already in use!\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <hr/>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-sm-12\">\r\n <span class=\"help-block\">\r\n Enter the name of the new data field to add to the secret\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <input class=\"btn btn-primary\" type=\"submit\"\r\n ng-disabled=\"!entity.newDataKey\"\r\n value=\"Add\">\r\n\r\n <button class=\"btn btn-warning cancel\" type=\"button\" ng-click=\"addFieldDialog.close()\">Cancel</button>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/secrets.html","<div class=\"row\" ng-controller=\"Kubernetes.SecretsController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\">\r\n <span ng-show=\"!id\">\r\n <hawtio-filter ng-show=\"model.secrets.length\"\r\n ng-model=\"tableConfig.filterOptions.filterText\"\r\n save-as=\"kubernetes-secrets-text-filter\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter secrets...\"></hawtio-filter>\r\n\r\n <button class=\"btn btn-danger pull-right\"\r\n title=\"Deletes the selected secrets\"\r\n ng-disabled=\"!tableConfig.selectedItems.length\"\r\n ng-click=\"deletePrompt(tableConfig.selectedItems)\">\r\n <i class=\"fa fa-remove\"></i> Delete\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-primary pull-right\"\r\n title=\"Create a new secret\"\r\n ng-show=\"$createSecretLink\" href=\"{{$createSecretLink}}\">\r\n <i class=\"fa fa-plus\"></i> Create\r\n </a>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"model.secrets.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no secrets currently available.</p>\r\n </div>\r\n <div ng-show=\"model.secrets.length\">\r\n <table class=\"table table-bordered table-striped\" ui-if=\"kubernetes.selectedNamespace\"\r\n hawtio-simple-table=\"tableConfig\"></table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/service.html","<div ng-controller=\"Kubernetes.ServiceController\">\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row row-header\">\r\n <div class=\"col-md-12\">\r\n <span ng-show=\"model.fetched && !rawMode\" class=\"icon-heading\">\r\n <img ng-show=\"item.$iconUrl\" class=\"icon-selected-app\" ng-src=\"{{item.$iconUrl}}\">&nbsp;{{item.metadata.name}}\r\n </span>\r\n\r\n <button class=\"btn btn-danger pull-right\"\r\n title=\"Delete this Service\"\r\n ng-click=\"deleteEntity()\">\r\n <i class=\"fa fa-remove\"></i> Delete\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-default pull-right\"\r\n href=\"{{baseUri}}/kubernetes/services?namespace={{item.metadata.namespace}}\"><i class=\"fa fa-list\"></i></a>\r\n\r\n <a class=\"btn btn-default pull-right\"\r\n ng-click=\"flipRaw()\"\r\n title=\"{{rawMode ? \'Raw mode\' : \'Form mode\'}}\">{{rawMode ? \'Form\' : \'Raw\'}}</a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-default pull-right\" ng-show=\"rawMode\" ng-click=\"readOnly = !readOnly\" ng-class=\"!readOnly ? \'btn-primary\' : \'\'\">Edit</a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-success pull-right\" ng-show=\"dirty\" ng-click=\"save(rawModel)\">Save</a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n\r\n <a class=\"btn btn-primary pull-right\"\r\n title=\"Open this service in your browser\"\r\n ng-show=\"item.$connectUrl\" href=\"{{item.$connectUrl}}\">\r\n <i class=\"fa fa-sign-in\"></i> Connect\r\n </a>\r\n </div>\r\n </div>\r\n\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched && !rawMode\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div hawtio-object=\"item\" config=\"itemConfig\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div ng-show=\"model.fetched && rawMode\">\r\n <div class=\"raw-json-view\">\r\n <div hawtio-editor=\"rawModel\" mode=\"mode\" read-only=\"readOnly\"></div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/serviceApps.html","<div class=\"dropdown\" ng-controller=\"Kubernetes.ServiceApps\">\r\n <a href=\"\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">\r\n <i class=\"fa fa-ellipsis-v\" title=\"View the available tools\"></i>\r\n </a>\r\n <ul class=\"dropdown-menu right k8sServiceApp-menu\">\r\n <li class=\"k8sServiceApp\" \r\n ng-repeat=\"service in model.serviceApps | filter:filterTemplates | orderBy:\'metadata.name\' track by $index\">\r\n <a href=\"{{service.$connectUrl}}\"\r\n target=\"_blank\"\r\n title=\"Click to open this app\">\r\n <img style=\"width: 32px; height: 32px;\" ng-src=\"{{service.$iconUrl}}\">&nbsp;\r\n <span ng-bind=\"service.metadata.name\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/serviceCreate.html","<div ng-controller=\"Kubernetes.ServiceEditController\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\"\r\n title=\"Go back to viewing all the services\"\r\n href=\"{{baseUri}}/kubernetes/services\"><i class=\"fa fa-list\"></i></a>\r\n <button class=\"btn btn-primary pull-right\"\r\n title=\"Create a new service\"\r\n ng-click=\"save()\">\r\n Create Service\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched\">\r\n <div hawtio-form-2=\"config\" entity=\"entity\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/serviceEdit.html","<div ng-controller=\"Kubernetes.ServiceEditController\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\"\r\n title=\"Go back to viewing all the services\"\r\n href=\"{{baseUri}}/kubernetes/services\"><i class=\"fa fa-list\"></i></a>\r\n <button class=\"btn btn-primary pull-right\"\r\n title=\"Save changes to this service\"\r\n ng-click=\"save()\">\r\n Save\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"fetched\">\r\n <div hawtio-form-2=\"config\" entity=\"entity\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/services.html","<div ng-controller=\"Kubernetes.Services\">\r\n\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\" ng-show=\"model.services.length\">\r\n <span ng-show=\"!id\">\r\n <hawtio-filter ng-model=\"tableConfig.filterOptions.filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter services...\"\r\n save-as=\"kubernetes-services-text-filter\"></hawtio-filter>\r\n </span>\r\n <span ng-hide=\"id\" class=\"pull-right\">\r\n <div class=\"btn-group\">\r\n <a class=\"btn\" ng-disabled=\"mode == \'list\'\" href=\"\" ng-click=\"mode = \'list\'\">\r\n <i class=\"fa fa-list\"></i></a>\r\n <a class=\"btn\" ng-disabled=\"mode == \'icon\'\" href=\"\" ng-click=\"mode = \'icon\'\">\r\n <i class=\"fa fa-table\"></i></a>\r\n </div>\r\n </span>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button ng-show=\"model.fetched\"\r\n class=\"btn btn-danger pull-right\"\r\n ng-disabled=\"!id && tableConfig.selectedItems.length == 0\"\r\n ng-click=\"deletePrompt(id || tableConfig.selectedItems)\">\r\n <i class=\"fa fa-remove\"></i> Delete\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button ng-show=\"id\"\r\n class=\"btn btn-primary pull-right\"\r\n ng-click=\"id = undefined\"><i class=\"fa fa-list\"></i></button>\r\n <span ng-show=\"id\" class=\"pull-right\">&nbsp;</span>\r\n <a class=\"btn btn-default pull-right\"\r\n title=\"Create a new service\"\r\n href=\"{{baseUri}}/kubernetes/namespace/{{namespace}}/serviceCreate\"><i class=\"fa fa-plus\"></i> Create</a>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <span ng-include=\"\'runButton.html\'\"></span>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div ng-hide=\"model.fetched\">\r\n <div class=\"align-center\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n </div>\r\n <div ng-show=\"model.fetched\">\r\n <div ng-hide=\"model.services.length\" class=\"align-center\">\r\n <p class=\"alert alert-info\">There are no services currently available.</p>\r\n </div>\r\n <div ng-show=\"model.services.length\">\r\n <div ng-show=\"mode == \'list\'\">\r\n <table class=\"table table-bordered table-striped\" ui-if=\"kubernetes.selectedNamespace\"\r\n hawtio-simple-table=\"tableConfig\"></table>\r\n </div>\r\n\r\n <div ng-hide=\"mode == \'list\'\">\r\n <div class=\"column-box\"\r\n ng-repeat=\"service in model.serviceApps | filter:filterTemplates | orderBy:\'metadata.name\' track by $index\">\r\n <div class=\"row\">\r\n <div class=\"col-md-2\">\r\n <a href=\"{{service.$serviceUrl}}\"\r\n target=\"_blank\"\r\n title=\"Click to open this app\">\r\n <img style=\"width: 64px; height: 64px;\" ng-src=\"{{service.$iconUrl}}\">\r\n </a>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <a href=\"{{service.$serviceUrl}}\"\r\n target=\"_blank\"\r\n title=\"Click to open this app\">\r\n <h3 ng-bind=\"service.metadata.name\"></h3>\r\n </a>\r\n </div>\r\n<!--\r\n <div class=\"col-md-1\">\r\n <a href=\"\" ng-click=\"deleteService(service)\"><i class=\"fa fa-remove red\"></i></a>\r\n </div>\r\n-->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/tabs.html","<div ng-show=\"subTabConfig\" ng-init=\"subTabConfig = $parent.subTabConfig\" class=\"breadcrumb-tabs\"\r\n ng-controller=\"Developer.NavBarController\">\r\n <ul class=\"nav nav-tabs\">\r\n <li ng-repeat=\"breadcrumb in subTabConfig\" ng-show=\"isValid(breadcrumb)\"\r\n class=\"{{breadcrumb.active ? \'active\' : \'\'}}\"\r\n title=\"{{breadcrumb.title}}\">\r\n <a href=\"{{breadcrumb.href}}\">{{breadcrumb.label}}</a>\r\n </li>\r\n </ul>\r\n<div class=\"pull-right inline-block\"\r\n ng-show=\"model.serviceApps && model.serviceApps.length\"\r\n ng-include=\"\'plugins/kubernetes/html/serviceApps.html\'\"></div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/templateDescription.html","<div class=\"modal-header\">\r\n <h3 class=\"modal-title\">Description</h3>\r\n</div>\r\n<div class=\"modal-body\">\r\n <div compile=\"text\"></div>\r\n</div>\r\n<div class=\"modal-footer\">\r\n <button class=\"btn btn-primary\" ng-click=\"ok()\">Close</button>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/templates.html","<div ng-controller=\"Kubernetes.TemplateController\">\r\n <script type=\"text/ng-template\" id=\"truncatedDescriptionTag.html\">\r\n <a href=\"\" ng-click=\"openFullDescription(template)\">More...</a>\r\n </script>\r\n\r\n <div class=\"row\">\r\n <div hawtio-breadcrumbs></div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div hawtio-tabs></div>\r\n </div>\r\n\r\n\r\n <div class=\"row filter-header\">\r\n <div class=\"col-md-12\">\r\n <span ng-show=\"model.templates.length && !formConfig\">\r\n <hawtio-filter ng-model=\"filterText\"\r\n css-class=\"input-xxlarge\"\r\n placeholder=\"Filter templates...\"></hawtio-filter>\r\n </span>\r\n\r\n <button ng-show=\"formConfig\" \r\n class=\"btn btn-success pull-right\"\r\n title=\"Click to deploy this app\" \r\n ng-click=\"substituteAndDeployTemplate()\">\r\n <i class=\"fa fa-play-circle\"></i> Run\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <button class=\"btn btn-info pull-right\"\r\n ng-click=\"cancel()\"\r\n title=\"Go back to app view\">\r\n Cancel\r\n </button>\r\n <span class=\"pull-right\">&nbsp;</span>\r\n <span class=\"pull-right\">\r\n Target namespace: <select ng-model=\"targetNamespace\" ng-options=\"namespace for namespace in model.namespaces\" title=\"Select the namespace to deploy these objects in\">\r\n </select>\r\n\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"row\" ng-hide=\"formConfig || model.templates.length != 0\">\r\n <div class=\"col-md-12\">\r\n <div class=\"alert alert-info centered\">\r\n There are no templates currently available. Add templates by dragging and dropping template files into this area.\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\" ng-hide=\"formConfig\">\r\n <div class=\"col-md-12\">\r\n <div class=\"column-box\" \r\n ng-repeat=\"template in model.templates | filter:filterTemplates | orderBy:\'metadata.name\' track by $index\">\r\n <div class=\"row\">\r\n <div class=\"col-md-2\">\r\n <img style=\"width: 64px; height: 64px;\" ng-src=\"{{getIconUrl(template)}}\">\r\n </div>\r\n <div class=\"col-md-9\">\r\n <h3 ng-bind=\"template.metadata.name\"></h3>\r\n </div>\r\n <div class=\"col-md-1\">\r\n <a href=\"\" ng-click=\"deleteTemplate(template)\"><i class=\"fa fa-remove red\"></i></a>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-10\">\r\n <div compile=\"getDescription(template)\"></div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <a href=\"\" \r\n title=\"Click to deploy this app\" \r\n ng-click=\"deployTemplate(template)\">\r\n <i class=\"fa fa-play-circle green fa-3x\"></i>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\" ng-show=\"formConfig\">\r\n <div class=\"col-md-4\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div hawtio-form-2=\"formConfig\" entity=\"entity\"></div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n </div>\r\n\r\n </div>\r\n</div>\r\n");
$templateCache.put("plugins/kubernetes/html/termShell.html","<div class=\"terminal-window\" terminal-window ng-mousedown=\"raise()\">\r\n <div class=\"terminal-title\" ng-mousedown=\"mouseDown($event)\">\r\n <h5 ng-bind=\"containerName\"></h5>\r\n <i class=\"fa fa-remove pull-right clickable\" title=\"Close and exit this terminal\" ng-click=\"close()\"></i>\r\n <i class=\"fa fa-sort-desc pull-right clickable\" title=\"Minimize this terminal\" ng-click=\"minimize($event)\"></i>\r\n </div>\r\n <div class=\"terminal-body\">\r\n </div>\r\n</div>\r\n");}]); hawtioPluginLoader.addModule("hawtio-kubernetes-templates");