/// /// /// /// /// var Kubernetes; (function (Kubernetes) { var consts = (function () { function consts() { } Object.defineProperty(consts.prototype, "NAMESPACE_STORAGE_KEY", { get: function () { return "k8sSelectedNamespace"; }, enumerable: true, configurable: true }); return consts; }()); Kubernetes.consts = consts; Kubernetes.Constants = new consts(); var WatchTypes = (function () { function WatchTypes() { } Object.defineProperty(WatchTypes, "ENDPOINTS", { get: function () { return "endpoints"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "EVENTS", { get: function () { return "events"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "NAMESPACES", { get: function () { return "namespaces"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "NODES", { get: function () { return "nodes"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "PERSISTENT_VOLUMES", { get: function () { return "persistentvolumes"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "PERSISTENT_VOLUME_CLAIMS", { get: function () { return "persistentvolumeclaims"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "PODS", { get: function () { return "pods"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "REPLICATION_CONTROLLERS", { get: function () { return "replicationcontrollers"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "RESOURCE_QUOTAS", { get: function () { return "resourcequotas"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "OAUTH_CLIENTS", { get: function () { return "oauthclients"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "SECRETS", { get: function () { return "secrets"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "SERVICES", { get: function () { return "services"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "SERVICE_ACCOUNTS", { get: function () { return "serviceaccounts"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "TEMPLATES", { get: function () { return "templates"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "ROUTES", { get: function () { return "routes"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "BUILD_CONFIGS", { get: function () { return "buildconfigs"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "BUILDS", { get: function () { return "builds"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "DEPLOYMENT_CONFIGS", { get: function () { return "deploymentconfigs"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "IMAGE_STREAMS", { get: function () { return "imagestreams"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "POLICIES", { get: function () { return "policies"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "POLICY_BINDINGS", { get: function () { return "policybindings"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "PROJECTS", { get: function () { return "projects"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "ROLE_BINDINGS", { get: function () { return "rolebindings"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "ROLES", { get: function () { return "roles"; }, enumerable: true, configurable: true }); return WatchTypes; }()); Kubernetes.WatchTypes = WatchTypes; var NamespacedTypes = (function () { function NamespacedTypes() { } Object.defineProperty(NamespacedTypes, "k8sTypes", { get: function () { return [ WatchTypes.ENDPOINTS, WatchTypes.EVENTS, WatchTypes.NODES, WatchTypes.PERSISTENT_VOLUMES, WatchTypes.PERSISTENT_VOLUME_CLAIMS, WatchTypes.PODS, WatchTypes.REPLICATION_CONTROLLERS, WatchTypes.RESOURCE_QUOTAS, WatchTypes.PERSISTENT_VOLUMES, WatchTypes.SECRETS, WatchTypes.SERVICES, WatchTypes.SERVICE_ACCOUNTS ]; }, enumerable: true, configurable: true }); Object.defineProperty(NamespacedTypes, "osTypes", { get: function () { return [ WatchTypes.TEMPLATES, WatchTypes.BUILD_CONFIGS, WatchTypes.ROUTES, WatchTypes.BUILDS, WatchTypes.BUILD_CONFIGS, WatchTypes.DEPLOYMENT_CONFIGS, WatchTypes.IMAGE_STREAMS, WatchTypes.OAUTH_CLIENTS, WatchTypes.POLICIES, WatchTypes.POLICY_BINDINGS, WatchTypes.PROJECTS, ]; }, enumerable: true, configurable: true }); return NamespacedTypes; }()); Kubernetes.NamespacedTypes = NamespacedTypes; var WatchActions = (function () { function WatchActions() { } Object.defineProperty(WatchActions, "ANY", { get: function () { return "*"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchActions, "ADDED", { get: function () { return "ADDED"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchActions, "MODIFIED", { get: function () { return "MODIFIED"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchActions, "DELETED", { get: function () { return "DELETED"; }, enumerable: true, configurable: true }); return WatchActions; }()); Kubernetes.WatchActions = WatchActions; })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.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 key1=value1,key2=value2,.... format */ function labelsToString(labels, seperatorText) { if (seperatorText === void 0) { seperatorText = Kubernetes.labelFilterTextSeparator; } var answer = ""; angular.forEach(labels, function (value, key) { var separator = answer ? seperatorText : ""; answer += separator + key + "=" + value; }); return answer; } Kubernetes.labelsToString = labelsToString; function 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); //console.log(rcTemplate); client.put(rcTemplate, function (obj) { //console.log("Created: ", obj); if (angular.isFunction(onCompleteFn)) { onCompleteFn(obj); } }); } Kubernetes.createRC = createRC; function connectOracle($http, $timeout, url, operation, rcName, delayTime) { $timeout(function () { $http({ url: url, method: 'POST', params: { oracleName: rcName, 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, targetReplicationController) { //console.log(targetReplicationController.length); if (selectedReplicationControllers.length === 1 && (getName(selectedReplicationControllers[0]) === getName(targetReplicationController))) { alert("您选择的数据库中不包含需要汇总的数据库,导致汇总操作失败,请重新选择!"); return; } var answer = checkoutOracleRCIsRunning(targetReplicationController) && targetReplicationController; var oracleConnectParam = [{ OracleName: getName(targetReplicationController), connectHost: getHost(targetReplicationController.$pods[0]), connectPort: targetReplicationController.$pods[0].spec.containers[0].ports[0].hostPort, isTarget: true }]; selectedReplicationControllers.forEach(function (rc) { if (getName(rc) !== getName(targetReplicationController)) { answer = answer && checkoutOracleRCIsRunning(rc); oracleConnectParam.push({ "OracleName": getName(rc), "connectHost": getHost(rc.$pods[0]), "connectPort": rc.$pods[0].spec.containers[0].ports[0].hostPort, "isTarget": false }); } }); if (answer) { $http({ url: '/extractOracleData', dataType: 'json', method: 'POST', params: { param: oracleConnectParam } }).success(function (data, header, config, status) { console.log("success"); }).error(function (data, header, config, status) { //log.warn("Failed to connect " + connectParam + " " + data + " " + status); }); } else { alert("您选择的汇总数据库或需要汇总的数据库中存在未启动成功的数据库,导致汇总操作失败,请重新选择!"); } } Kubernetes.extractDataToOracle = extractDataToOracle; function checkoutOracleRCIsRunning(rc) { if (rc.$podCounters.ready && rc.$oracleStatus == 2) { return true; } else { return false; } } Kubernetes.checkoutOracleRCIsRunning = checkoutOracleRCIsRunning; })(Kubernetes || (Kubernetes = {})); /// var Developer; (function (Developer) { function enrichWorkspaces(projects) { angular.forEach(projects, function (project) { enrichWorkspace(project); }); return projects; } Developer.enrichWorkspaces = enrichWorkspaces; function enrichWorkspace(build) { if (build) { var name = Kubernetes.getName(build); build.$name = name; build.$sortOrder = 0 - build.number; var nameArray = name.split("-"); var nameArrayLength = nameArray.length; build.$shortName = (nameArrayLength > 4) ? nameArray.slice(0, nameArrayLength - 4).join("-") : name.substring(0, 30); var labels = Kubernetes.getLabels(build); build.$creationDate = asDate(Kubernetes.getCreationTimestamp(build)); build.$labelsText = Kubernetes.labelsToString(labels); if (name) { build.$projectsLink = UrlHelpers.join("workspaces", name); build.$runtimeLink = UrlHelpers.join("kubernetes/namespace/", name, "/apps"); build.$viewLink = build.$projectsLink; } } return build; } Developer.enrichWorkspace = enrichWorkspace; function asDate(value) { return value ? new Date(value) : null; } Developer.asDate = asDate; function enrichJenkinsJobs(jobsData, projectId, jobName) { if (jobsData) { angular.forEach(jobsData.jobs, function (job) { enrichJenkinsJob(job, projectId, jobName); }); } return jobsData; } Developer.enrichJenkinsJobs = enrichJenkinsJobs; function enrichJenkinsJob(job, projectId, jobName) { if (job) { jobName = jobName || job.name || projectId; job.$jobId = jobName; job.$project = projectId || jobName; var lastBuild = job.lastBuild; var lastBuildResult = lastBuild ? lastBuild.result : "NOT_STARTED"; var $iconClass = createBuildStatusIconClass(lastBuildResult); job.$lastBuildNumber = enrichJenkinsBuild(job, lastBuild); job.$lastSuccessfulBuildNumber = enrichJenkinsBuild(job, job.lastSuccessfulBuild); job.$lastFailedlBuildNumber = enrichJenkinsBuild(job, job.lastFailedlBuild); if (lastBuild) { job.$duration = lastBuild.duration; job.$timestamp = asDate(lastBuild.timestamp); } var jobUrl = (job || {}).url; if (!jobUrl || !jobUrl.startsWith("http")) { var jenkinsUrl = jenkinsLink(); if (jenkinsUrl) { jobUrl = UrlHelpers.join(jenkinsUrl, "job", jobName); } } if (jobUrl) { job.$jobLink = jobUrl; var workspaceName = Kubernetes.currentKubernetesNamespace(); job.$pipelinesLink = UrlHelpers.join("/workspaces", workspaceName, "projects", job.$project, "jenkinsJob", jobName, "pipelines"); job.$buildsLink = UrlHelpers.join("/workspaces", workspaceName, "projects", job.$project, "jenkinsJob", jobName); } job.$iconClass = $iconClass; angular.forEach(job.builds, function (build) { enrichJenkinsBuild(job, build); }); } return job; } Developer.enrichJenkinsJob = enrichJenkinsJob; function createBuildStatusIconClass(result) { var $iconClass = "fa fa-spinner fa-spin"; if (result) { if (result === "FAILURE" || result === "FAILED") { // TODO not available yet $iconClass = "fa fa-exclamation-circle red"; } else if (result === "ABORTED" || result === "INTERUPTED") { $iconClass = "fa fa-circle grey"; } else if (result === "SUCCESS" || result === "COMPLETE" || result === "COMPLETED") { $iconClass = "fa fa-check-circle green"; } else if (result === "NOT_STARTED") { $iconClass = "fa fa-circle-thin grey"; } } return $iconClass; } Developer.createBuildStatusIconClass = createBuildStatusIconClass; function createBuildStatusBackgroundClass(result) { var $iconClass = "build-pending"; if (result) { if (result === "FAILURE" || result === "FAILED") { $iconClass = "build-fail"; } else if (result === "ABORTED" || result === "INTERUPTED") { $iconClass = "build-aborted"; } else if (result === "SUCCESS" || result === "COMPLETE" || result === "COMPLETED") { $iconClass = "build-success"; } else if (result === "NOT_STARTED") { $iconClass = "build-not-started"; } } return $iconClass; } Developer.createBuildStatusBackgroundClass = createBuildStatusBackgroundClass; function enrichJenkinsBuild(job, build) { var number = null; if (build) { build.$duration = build.duration; build.$timestamp = asDate(build.timestamp); var projectId = job.$project; var jobName = job.$jobId || projectId; var buildId = build.id; number = build.number; var workspaceName = Kubernetes.currentKubernetesNamespace(); var $iconClass = createBuildStatusIconClass(build.result); var jobUrl = (job || {}).url; if (!jobUrl || !jobUrl.startsWith("http")) { var jenkinsUrl = jenkinsLink(); if (jenkinsUrl) { jobUrl = UrlHelpers.join(jenkinsUrl, "job", jobName); } } if (jobUrl) { build.$jobLink = jobUrl; if (buildId) { //build.$logsLink = UrlHelpers.join(build.$buildLink, "console"); build.$logsLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "log", buildId); build.$pipelineLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "pipeline", buildId); build.$buildsLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName); //build.$buildLink = UrlHelpers.join(jobUrl, build.id); build.$buildLink = build.$logsLink; } } build.$iconClass = $iconClass; } return number; } Developer.enrichJenkinsBuild = enrichJenkinsBuild; function jenkinsLink() { var ServiceRegistry = Kubernetes.inject("ServiceRegistry"); if (ServiceRegistry) { return ServiceRegistry.serviceLink(Developer.jenkinsServiceName); } return null; } Developer.jenkinsLink = jenkinsLink; function forgeReadyLink() { var ServiceRegistry = Kubernetes.inject("ServiceRegistry"); if (ServiceRegistry) { return ServiceRegistry.serviceReadyLink(Kubernetes.fabric8ForgeServiceName); } return null; } Developer.forgeReadyLink = forgeReadyLink; function enrichJenkinsPipelineJob(job, projectId, jobId) { if (job) { job.$project = projectId; job.$jobId = jobId; angular.forEach(job.builds, function (build) { enrichJenkinsStages(build, projectId, jobId); }); } } Developer.enrichJenkinsPipelineJob = enrichJenkinsPipelineJob; function enrichJenkinsStages(build, projectId, jobName) { if (build) { build.$project = projectId; build.$jobId = jobName; build.$timestamp = asDate(build.timeInMillis); build.$iconClass = createBuildStatusIconClass(build.result || "NOT_STARTED"); var workspaceName = Kubernetes.currentKubernetesNamespace(); var parameters = build.parameters; var $parameterCount = 0; var $parameterText = "No parameters"; if (parameters) { $parameterCount = _.keys(parameters).length || 0; $parameterText = Kubernetes.labelsToString(parameters, " "); } build.$parameterCount = $parameterCount; build.$parameterText = $parameterText; var jenkinsUrl = jenkinsLink(); if (jenkinsUrl) { var url = build.url; if (url) { } } build.$logLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "log", build.id); build.$viewLink = build.$logLink; angular.forEach(build.stages, function (stage) { enrichJenkinsStage(stage, build); }); } return build; } Developer.enrichJenkinsStages = enrichJenkinsStages; function enrichJenkinsStage(stage, build) { if (build === void 0) { build = null; } if (stage) { if (build) { stage.$buildId = build.id; stage.$project = build.$project; } var projectId = build.$project; var jobName = build.$jobId || projectId; var buildId = build.id; var workspaceName = Kubernetes.currentKubernetesNamespace(); stage.$backgroundClass = createBuildStatusBackgroundClass(stage.status); stage.$iconClass = createBuildStatusIconClass(stage.status); stage.$startTime = asDate(stage.startTime); if (!stage.duration) { stage.duration = 0; } var jenkinsUrl = jenkinsLink(); if (jenkinsUrl) { var url = stage.url; if (url) { stage.$viewLink = UrlHelpers.join(jenkinsUrl, url); stage.$logLink = UrlHelpers.join(stage.$viewLink, "log"); if (projectId && buildId) { stage.$logLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "log", buildId); } } } } } Developer.enrichJenkinsStage = enrichJenkinsStage; })(Developer || (Developer = {})); /// var Developer; (function (Developer) { Developer.context = '/workspaces'; Developer.hash = '#' + Developer.context; Developer.pluginName = 'Developer'; Developer.pluginPath = 'plugins/developer/'; Developer.templatePath = Developer.pluginPath + 'html/'; Developer.log = Logger.get(Developer.pluginName); Developer.jenkinsServiceName = "jenkins"; Developer.jenkinsServiceNameAndPort = Developer.jenkinsServiceName + ":http"; Developer.jenkinsHttpConfig = { headers: { Accept: "application/json, text/x-json, text/plain" } }; /** * Returns true if the value hasn't changed from the last cached JSON version of this object */ function hasObjectChanged(value, state) { var json = angular.toJson(value || ""); var oldJson = state.json; state.json = json; return !oldJson || json !== oldJson; } Developer.hasObjectChanged = hasObjectChanged; function projectForScope($scope) { if ($scope) { return $scope.buildConfig || $scope.entity || ($scope.model || {}).project; } return null; } Developer.projectForScope = projectForScope; /** * Lets load the project versions for the given namespace */ function loadProjectVersions($scope, $element, project, env, ns, answer, caches) { var projectAnnotation = "project"; var versionAnnotation = "version"; var projectNamespace = project.$namespace; var projectName = project.$name; var cache = caches[ns]; if (!cache) { cache = {}; caches[ns] = cache; } var status = { rcs: [], pods: [], routes: [], services: [] }; var imageStreamTags = []; function updateModel() { var projectInfos = {}; var model = $scope.model || {}; angular.forEach(status.rcs, function (item) { var metadata = item.metadata || {}; var name = metadata.name; var labels = metadata.labels || {}; var annotations = metadata.annotations || {}; var spec = item.spec || {}; var selector = spec.selector; var project = labels[projectAnnotation]; var version = labels[versionAnnotation]; // lets try the S2I defaults... if (!project) { project = labels["app"]; } if (!version) { version = annotations["openshift.io/deployment-config.latest-version"]; } if (project && version && project === projectName) { var projects = projectInfos[project]; if (!projects) { projects = { project: project, versions: {} }; projectInfos[project] = projects; } var versionInfo = projects.versions[version]; if (!versionInfo) { versionInfo = { replicationControllers: {} }; projects.versions[version] = versionInfo; } if (name) { versionInfo.replicationControllers[name] = item; item.$name = name; if (projectNamespace && projectName) { item.$viewLink = UrlHelpers.join("/workspaces/", projectNamespace, "projects", projectName, "namespace", ns, "replicationControllers", name); } else { Developer.log.warn("Missing project data! " + projectNamespace + " name " + projectName); } item.$services = []; var rcLink = null; status.services.forEach(function (service) { var repSelector = Kubernetes.getSelector(item); var serviceSelector = Kubernetes.getSelector(service); if (serviceSelector && repSelector && Kubernetes.selectorMatches(serviceSelector, repSelector) && Kubernetes.getNamespace(service) === Kubernetes.getNamespace(item)) { status.routes.forEach(function (route) { var serviceName = Kubernetes.getName(service); if (serviceName === Kubernetes.getName(route)) { service["$route"] = route; service["$host"] = Core.pathGet(route, ["spec", "host"]); item.$services.push(service); if (!rcLink) { var url = Kubernetes.serviceLinkUrl(service, true); if (url) { // TODO find icon etc? rcLink = { name: serviceName, href: url }; } } } }); } }); item["$serviceLink"] = rcLink; } item.$buildId = annotations["fabric8.io/build-id"] || item.$buildId; item.$buildUrl = annotations["fabric8.io/build-url"] || item.$buildUrl; item.$gitCommit = annotations["fabric8.io/git-commit"] || item.$gitCommit; item.$gitUrl = annotations["fabric8.io/git-url"] || item.$gitUrl; item.$gitBranch = annotations["fabric8.io/git-branch"] || item.$gitBranch; if (!item.$gitCommit) { var image = getImage(item); if (image) { if (!$scope.$isWatchImages) { $scope.$isWatchImages = true; Kubernetes.watch($scope, $element, "images", null, function (data) { imageStreamTags = data; checkForMissingMetadata(); }); } else { checkForMissingMetadata(); } } function getImage(item) { var image = ""; // lets see if we can find the commit id from a S2I image name // TODO needs this issue fixed to find it via an OpenShift annotation: // https://github.com/openshift/origin/issues/6241 var containers = Core.pathGet(item, ["spec", "template", "spec", "containers"]); if (containers && containers.length) { var container = containers[0]; if (container) { image = container.image; } } return image; } function checkForMissingMetadata() { angular.forEach(projects.versions, function (vi) { angular.forEach(vi.replicationControllers, function (item, name) { if (!item.$gitCommit) { var image = getImage(item); if (image) { angular.forEach(imageStreamTags, function (imageStreamTag) { var imageName = imageStreamTag.dockerImageReference; if (imageName && imageName === image) { var foundISTag = imageStreamTag; var manifestJSON = imageStreamTag.dockerImageManifest; if (manifestJSON) { var manifest = angular.fromJson(manifestJSON) || {}; var history = manifest.history; if (history && history.length) { var v1 = history[0].v1Compatibility; if (v1) { var data = angular.fromJson(v1); var env = Core.pathGet(data, ["config", "Env"]); angular.forEach(env, function (envExp) { if (envExp) { var values = envExp.split("="); if (values.length === 2 && values[0] == "OPENSHIFT_BUILD_NAME") { var buildName = values[1]; if (buildName) { item.$buildId = buildName; item.$buildUrl = Developer.projectWorkspaceLink(ns, projectName, "buildLogs/" + buildName); } } } }); var labels = Core.pathGet(data, ["config", "Labels"]); if (labels) { item.$gitCommit = labels["io.openshift.build.commit.id"] || item.$gitCommit; item.$gitCommitAuthor = labels["io.openshift.build.commit.author"] || item.$gitCommitAuthor; item.$gitCommitDate = labels["io.openshift.build.commit.date"] || item.$gitCommitDate; item.$gitCommitMessage = labels["io.openshift.build.commit.message"] || item.$gitCommitMessage; item.$gitBranch = labels["io.openshift.build.commit.ref"] || item.$gitBranch; if (!item.$gitUrl && item.$gitCommit) { item.$gitUrl = Developer.projectWorkspaceLink(ns, projectName, "wiki/commitDetail///" + item.$gitCommit); } } } } } } }); } } }); }); } } if (selector) { var selectorText = Kubernetes.labelsToString(selector, ","); var podLinkUrl = UrlHelpers.join(Developer.projectLink(projectName), "namespace", ns, "pods"); item.pods = []; item.$podCounters = Kubernetes.createPodCounters(selector, status.pods, item.pods, selectorText, podLinkUrl); } } }); // lets check for a project name if we have lots of RCs with no pods, lets remove them! angular.forEach(projectInfos, function (project, projectName) { var rcsNoPods = []; var rcsWithPods = []; angular.forEach(project.versions, function (versionInfo) { var rcs = versionInfo.replicationControllers; angular.forEach(rcs, function (item, name) { var count = Kubernetes.podCounterTotal(item.$podCounters); if (count) { rcsWithPods.push(name); } else { rcsNoPods.push(function () { delete rcs[name]; }); } }); }); if (rcsWithPods.length) { // lets remove all the empty RCs angular.forEach(rcsNoPods, function (fn) { fn(); }); } }); if (hasObjectChanged(projectInfos, cache)) { Developer.log.debug("project versions has changed!"); answer[ns] = projectInfos; } } Kubernetes.watch($scope, $element, "replicationcontrollers", ns, function (data) { if (data) { status.rcs = data; updateModel(); } }); Kubernetes.watch($scope, $element, "services", ns, function (data) { if (data) { status.services = data; updateModel(); } }); Kubernetes.watch($scope, $element, "routes", ns, function (data) { if (data) { status.routes = data; updateModel(); } }); Kubernetes.watch($scope, $element, "pods", ns, function (data) { if (data) { status.pods = data; updateModel(); } }); } Developer.loadProjectVersions = loadProjectVersions; })(Developer || (Developer = {})); /// var Developer; (function (Developer) { /* function homeBreadcrumb() { return { href: "/home", label: "Home", title: "Go to the home page" } } */ function developBreadcrumb() { return { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces"), label: "Develop", title: "View all the apps for a project" }; } 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) { /* if (developPerspective) { return [ //homeBreadcrumb(), developBreadcrumb() ]; } else { return [ //homeBreadcrumb(), operateBreadcrumb() ]; } */ return []; } 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 = [ //homeBreadcrumb(), developBreadcrumb() ]; if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } if (workspaceName) { answer.push({ href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces/", workspaceName), label: workspaceName, title: "View the project: " + workspaceName }); 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; 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"); // TODO use the logical name? var envName = ns; var buildConfig = null; if ($scope.model) { buildConfig = $scope.model.getProject(project, workspaceName); if (buildConfig) { // lets find the label for the namespace var env = _.find(buildConfig.environments, { namespace: ns }); if (env) { envName = env['label'] || envName; } Developer.log.info("env found: " + env + " for nameppace " + ns + " on buildConfig: " + buildConfig); } } var children = [ { href: UrlHelpers.join(projectLink, "environments"), label: "Environments", title: "View the environments for this project" }, { href: UrlHelpers.join(namespacesLink, ns, "apps"), label: envName, title: "View the runtime of the workspace: " + ns } ]; return createProjectBreadcrumbs(project, children, workspaceName); } else { if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } return activateCurrent([ //homeBreadcrumb(), operateBreadcrumb(), { href: UrlHelpers.join(namespacesLink, ns, "apps"), label: workspaceName, title: "View the runtime of the workspace: " + ns } ]); } } Developer.createEnvironmentBreadcrumbs = createEnvironmentBreadcrumbs; 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 = [{ label: "Settings", title: "View the settings of this app" }]; if (!projectName) { var 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: "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: UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes/namespace", workspaceName, "apps"), label: "Runtime", class: "fa fa-gears", title: "View the runtime resources in this project" }, { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "detail"), label: "Details", class: "fa fa-gear", title: "View the project details" } ]); } Developer.createWorkspaceSubNavBars = createWorkspaceSubNavBars; function createBuildsLink(workspaceName, projectName, jenkinsJobId) { workspaceName = workspaceName || Kubernetes.currentKubernetesNamespace(); return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "jenkinsJob", jenkinsJobId); } function createProjectSubNavBars(projectName, jenkinsJobId, $scope) { if (jenkinsJobId === void 0) { jenkinsJobId = null; } if ($scope === void 0) { $scope = null; } var workspaceName = Kubernetes.currentKubernetesNamespace(); var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName); var buildsLink = UrlHelpers.join(projectLink, "builds"); if (!jenkinsJobId) { jenkinsJobId = projectName; } var jenkinsBuildLink = null; var pipelinesLink = null; if (projectName && jenkinsJobId) { jenkinsBuildLink = createBuildsLink(workspaceName, projectName, jenkinsJobId); pipelinesLink = UrlHelpers.join(jenkinsBuildLink, "pipelines"); } function isJenkinsBuild() { var answer = Developer.jenkinsLink() && jenkinsBuildLink; if (answer && $scope) { var entity = Developer.projectForScope($scope); if (entity) { return answer && entity.$jenkinsJob; } } return answer; } var answer = [ { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName), label: "All Apps", class: 'fa fa-angle-double-left', title: "View the apps in this project" }, { template: "
" }, { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "environments"), isActive: function (subTab, path) { //console.log("subTab: ", subTab, " path: ", path); if (path === subTab.href) { return true; } var rootPath = subTab.href.replace(/\/environments/, ''); if (path === rootPath) { return true; } return false; }, //href: UrlHelpers.join("/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(); }, 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("/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; 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 projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes"); if (workspaceName && project) { projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", project); } var namespacesLink = UrlHelpers.join(projectLink, "namespace"); return activateCurrent([ { href: UrlHelpers.join(projectLink, "environments"), label: "<< Back To App", title: "Go back to the Dashboard for this App", isValid: function () { return project; } }, { href: UrlHelpers.join(namespacesLink, ns, "apps"), label: "Overview", class: "fa fa-list", title: "Overview of all the apps for this project" }, { href: UrlHelpers.join(namespacesLink, ns, "services"), label: "Services", class: "fa fa-plug", title: "View the apps for this project" }, { href: UrlHelpers.join(namespacesLink, ns, "replicationControllers"), label: "Controllers", class: "fa fa-clone", title: "View the Replication Controllers for this project" }, { href: UrlHelpers.join(namespacesLink, ns, "pods"), label: "Pods", class: "fa fa-puzzle-piece", title: "View the pods for this project" }, { href: UrlHelpers.join(namespacesLink, ns, "events"), label: "Events", class: "fa fa-newspaper-o", title: "View the events for this project" }, { href: UrlHelpers.join(namespacesLink, ns, "secrets"), label: "Secrets", class: "fa fa-key", title: "View the secrets for this project" }, { href: UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes/hosts"), label: "Nodes", class: "fa fa-server", title: "View the nodes for this project" }, { href: UrlHelpers.join(namespacesLink, ns, "overview"), label: "Diagram", class: "fa fa-sitemap", title: "View all the objects in this project and their relationship" }, { href: UrlHelpers.join(namespacesLink, ns, "angryPods"), label: "Angry Pods", class: "fa fa-gamepad", title: "Try the Angry Pods game!" }, ]); } Developer.createEnvironmentSubNavBars = createEnvironmentSubNavBars; 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; } function activateCurrent(navBarItems) { navBarItems = _.compact(navBarItems); var injector = HawtioCore.injector; var $location = injector ? injector.get("$location") : null; if ($location) { var path = trimQuery($location.path()); var found = false; function makeActive(item) { item.active = true; found = true; } angular.forEach(navBarItems, function (item) { if (item) { if (angular.isFunction(item.isActive)) { if (!found && item.isActive(item, path)) { makeActive(item); } } else { var href = item.href; var trimHref = trimQuery(href); if (!found && trimHref && trimHref === path) { makeActive(item); } } } }); } return navBarItems; } function processChildren(answer, children) { if (children) { if (angular.isArray(children)) { answer = answer.concat(children); } else { answer.push(children); } } activateCurrent(answer); return answer; } })(Developer || (Developer = {})); /// /// /// /// /// /// /// var 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("/namespaces", Developer.route('workspaces.html', false)) .when(UrlHelpers.join(Developer.context, '/:namespace'), Developer.route('projects.html', false)) .when(UrlHelpers.join(Developer.context, '/:namespace/detail'), Developer.route('workspace.html', false)) .when(UrlHelpers.join(Developer.context, '/:namespace/jenkinsJob'), Developer.route('jenkinsJobs.html', false)) .when(UrlHelpers.join(Developer.context, '/:namespace/projects'), Developer.route('projects.html', false)) .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id'), Developer.route('environments.html', false)) .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/detail'), Kubernetes.route('buildConfig.html', false)) .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/builds'), Kubernetes.route('builds.html', false)) .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/environments'), Developer.route('environments.html', false)) .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsJob/:job'), Developer.route('jenkinsJob.html', false)) .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsJob/:job/log/:build'), Developer.route('jenkinsLog.html', false)) .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsJob/:job/pipelines'), Developer.route('pipelines.html', false)) .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsJob/:job/pipeline/:build'), Developer.route('pipeline.html', false)) .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsJob/:job/metrics'), Developer.route('jenkinsMetrics.html', false)) .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsMetrics'), Developer.route('jenkinsMetrics.html', false)) .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/tools'), Developer.route('tools.html', false)) .when(UrlHelpers.join(Developer.context, '/:workspace/projects/:project/environments/:namespace'), Developer.route('environment.html', false)) .when(UrlHelpers.join(Developer.context, '/:workspace/projects/:project/environments/:namespace'), Developer.route('environment.html', false)) .when(UrlHelpers.join(Developer.context, '/Aggregate/overview'), Developer.route('addDataFile.html', false)) .otherwise("/workspaces"); }]); Developer._module.run(['viewRegistry', 'ServiceRegistry', 'HawtioNav', 'KubernetesModel', '$templateCache', 'DataInfoModel', function (viewRegistry, ServiceRegistry, HawtioNav, KubernetesModel, $templateCache, DataInfoModel) { Developer.log.debug("Running"); viewRegistry['workspaces'] = Kubernetes.templatePath + 'layoutKubernetes.html'; viewRegistry['namespaces'] = Kubernetes.templatePath + 'layoutKubernetes.html'; var builder = HawtioNav.builder(); var workspaces = builder.id('workspaces') .href(function () { return Developer.context; }) .title(function () { return '查看'; }) .build(); /* var workspaceOverview = builder.id('workspaces') .href(() => UrlHelpers.join(context, 'overview')) .title(() => 'Workspace') .build(); */ /* var dataadd = builder.id('dataadd') .href(() => context) .title(() => '汇总') .build(); */ var Aggregate = builder.id('Aggregate;') .rank(200) .href(function () { return Developer.context; }) .title(function () { return '数据汇总'; }) .tabs(workspaces) .build(); HawtioNav.add(Aggregate); }]); Developer._module.filter('asTrustedHtml', ['$sce', function ($sce) { return function (text) { return $sce.trustAsHtml(text); }; }]); hawtioPluginLoader.addModule(Developer.pluginName); // for scroll-glue directive hawtioPluginLoader.addModule('luegg.directives'); })(Developer || (Developer = {})); /// var Developer; (function (Developer) { Developer._module.controller('Developer.EnvironmentPanelController', ["$scope", "$element", "$location", "$routeParams", "KubernetesModel", "$http", "$timeout", "KubernetesState", "KubernetesApiURL", function ($scope, $element, $location, $routeParams, KubernetesModel, $http, $timeout, KubernetesState, KubernetesApiURL) { $scope.envVersions = {}; $scope.model = KubernetesModel; $scope.env = $scope.$eval('env'); $scope.buildConfig = $scope.$eval('entity'); $scope.open = true; $scope.toggle = function () { return $scope.open = !$scope.open; }; var caches = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); Developer.loadProjectVersions($scope, $element, $scope.buildConfig, $scope.env, $scope.env.namespace, $scope.envVersions, caches); }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.HomeController = Developer.controller("HomeController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.namespace = Kubernetes.currentKubernetesNamespace(); }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.JenkinsJobController = Developer.controller("JenkinsJobController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.jobId = $routeParams["job"]; $scope.schema = KubernetesSchema; $scope.entityChangedCache = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.tableConfig = { data: 'job.builds', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '$sortOrder', displayName: 'Name', cellTemplate: $templateCache.get("jenkinsBuildIdTemplate.html") }, { field: '$buildLink', displayName: 'Views', cellTemplate: $templateCache.get("jenkinsBuildButtonsTemplate.html") }, { field: '$duration', displayName: 'Duration', cellTemplate: $templateCache.get("jenkinsBuildDurationTemplate.html") }, { field: '$timestamp', displayName: 'Time Started', cellTemplate: $templateCache.get("jenkinsBuildTimestampTemplate.html") } ] }; updateData(); function updateData() { if ($scope.jobId) { var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", $scope.jobId, "api/json?depth=1")); if (url && (!$scope.job || Kubernetes.keepPollingModel)) { $http.get(url). success(function (data, status, headers, config) { if (data) { Developer.enrichJenkinsJob(data, $scope.id, $scope.jobId); if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.job = data; } } $scope.model.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); }); } } else { $scope.model.fetched = true; Core.$apply($scope); } } }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.JenkinsJobsController = Developer.controller("JenkinsJobsController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.jenkins = null; $scope.entityChangedCache = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs(); $scope.subTabConfig = Developer.createWorkspaceSubNavBars(); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.tableConfig = { data: 'jenkins.jobs', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'name', displayName: 'Name', cellTemplate: $templateCache.get("jenkinsJobNameTemplate.html") }, { field: '$buildLink', displayName: 'Views', cellTemplate: $templateCache.get("jenkinsJobButtonsTemplate.html") }, { field: '$lastSuccessfulBuildNumber', displayName: 'Last Success', cellTemplate: $templateCache.get("jenkinsLastSuccessTemplate.html") }, { field: '$lastFailedlBuildNumber', displayName: 'Last Failure', cellTemplate: $templateCache.get("jenkinsLastFailureTemplate.html") }, { field: '$duration', displayName: 'Last Duration', cellTemplate: $templateCache.get("jenkinsBuildDurationTemplate.html") }, { field: '$timestamp', displayName: 'Time Started', cellTemplate: $templateCache.get("jenkinsBuildTimestampTemplate.html") } ] }; updateData(); function updateData() { // TODO only need depth 2 to be able to fetch the lastBuild var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, "api/json?depth=2"); Developer.log.info(""); if (url && (!$scope.jenkins || Kubernetes.keepPollingModel)) { $http.get(url, Developer.jenkinsHttpConfig). success(function (data, status, headers, config) { if (data) { Developer.enrichJenkinsJobs(data, $scope.id, $scope.id); if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.jenkins = data; } } $scope.model.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); }); } } }]); })(Developer || (Developer = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes._module = angular.module(Kubernetes.pluginName, ['hawtio-core', 'hawtio-ui', 'ui.codemirror', 'ui.validate', 'kubernetesUI']); Kubernetes.controller = PluginHelpers.createControllerFunction(Kubernetes._module, Kubernetes.pluginName); Kubernetes.route = PluginHelpers.createRoutingFunction(Kubernetes.templatePath); Kubernetes._module.config(['$routeProvider', function ($routeProvider) { $routeProvider .when(UrlHelpers.join(Kubernetes.context, '/pods'), Kubernetes.route('pods.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'replicationControllers'), Kubernetes.route('replicationControllers.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'services'), Kubernetes.route('services.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'events'), Kubernetes.route('events.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'apps'), Kubernetes.route('apps.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'apps/:namespace'), Kubernetes.route('apps.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'templates'), Kubernetes.route('templates.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'hosts'), Kubernetes.route('hosts.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'hosts/:id'), Kubernetes.route('host.html', true)) .when(UrlHelpers.join(Kubernetes.context, 'pipelines'), Kubernetes.route('pipelines.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'overview'), Kubernetes.route('overview.html', true)) .when(Kubernetes.context, { redirectTo: UrlHelpers.join(Kubernetes.context, 'replicationControllers') }); angular.forEach([Kubernetes.context, "/workspaces/:workspace/projects/:project"], function (context) { $routeProvider .when(UrlHelpers.join(context, '/namespace/:namespace/podCreate'), Kubernetes.route('podCreate.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/podEdit/:id'), Kubernetes.route('podEdit.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/pods'), Kubernetes.route('pods.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/pods/:id'), Kubernetes.route('pod.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllers'), Kubernetes.route('replicationControllers.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllers/:id'), Kubernetes.route('replicationController.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllerCreate'), Kubernetes.route('replicationControllerCreate.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllerEdit/:id'), Kubernetes.route('replicationControllerEdit.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/secrets'), Kubernetes.route('secrets.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/secrets/:id'), Kubernetes.route('secret.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/secretCreate'), Kubernetes.route('secret.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/services'), Kubernetes.route('services.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/services/:id'), Kubernetes.route('service.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/serviceCreate'), Kubernetes.route('serviceCreate.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/serviceEdit/:id'), Kubernetes.route('serviceEdit.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/events'), Kubernetes.route('events.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/apps'), Kubernetes.route('apps.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/overview'), Kubernetes.route('overview.html', true)) .when(UrlHelpers.join(context, '/namespace/:namespace/templates/:targetNamespace'), Kubernetes.route('templates.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace'), Kubernetes.route('apps.html', false)) .when(UrlHelpers.join(context, 'builds'), Kubernetes.route('builds.html', false)) .when(UrlHelpers.join(context, 'builds/:id'), Kubernetes.route('build.html', true)) .when(UrlHelpers.join(context, 'buildLogs/:id'), Kubernetes.route('buildLogs.html', true)) .when(UrlHelpers.join(context, 'buildConfigs'), Kubernetes.route('buildConfigs.html', false)) .when(UrlHelpers.join(context, 'buildConfigs/:id'), Kubernetes.route('buildConfig.html', true)) .when(UrlHelpers.join(context, 'buildConfigEdit/:id'), Kubernetes.route('buildConfigEdit.html', true)) .when(UrlHelpers.join(context, 'deploymentConfigs'), Kubernetes.route('deploymentConfigs.html', false)) .when(UrlHelpers.join(context, 'deploymentConfigs/:id'), Kubernetes.route('deploymentConfig.html', true)) .when(UrlHelpers.join(context, 'imageRepositories'), Kubernetes.route('imageRepositories.html', false)); }); angular.forEach([Kubernetes.context, "/workspaces/:workspace", "/workspaces/:workspace/projects/:project"], function (context) { $routeProvider .when(UrlHelpers.join(context, 'buildConfigEdit'), Kubernetes.route('buildConfigEdit.html', true)) .when(UrlHelpers.join(context, 'buildConfigEdit/:id'), Kubernetes.route('buildConfigEdit.html', true)) .when(UrlHelpers.join(context, 'importProject'), Kubernetes.route('importProject.html', true)); }); }]); Kubernetes._module.factory('AppLibraryURL', ['$rootScope', function ($rootScope) { return UrlHelpers.join(Kubernetes.kubernetesApiUrl(), "/proxy", Kubernetes.kubernetesNamespacePath(), "/services/app-library"); }]); Kubernetes._module.factory('WikiGitUrlPrefix', function () { return UrlHelpers.join(Kubernetes.kubernetesApiUrl(), "/proxy", Kubernetes.kubernetesNamespacePath(), "services/app-library"); }); Kubernetes._module.factory('wikiRepository', ["$location", "localStorage", function ($location, localStorage) { return false; }]); Kubernetes._module.factory('ConnectDialogService', ['$rootScope', function ($rootScope) { return { dialog: new UI.Dialog(), saveCredentials: false, userName: null, password: null, jolokiaUrl: null, containerName: null, view: null }; }]); Kubernetes._module.filter('kubernetesPageLink', function () { return Kubernetes.entityPageLink; }); Kubernetes._module.filter('relativeTime', function () { return function (date) { return humandate.relativeTime(date); }; }); Kubernetes._module.run(['viewRegistry', 'ServiceRegistry', 'HawtioNav', 'KubernetesModel', '$templateCache', function (viewRegistry, ServiceRegistry, HawtioNav, KubernetesModel, $templateCache) { Kubernetes.log.debug("Running"); viewRegistry['kubernetes'] = Kubernetes.templatePath + 'layoutKubernetes.html'; 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 Kubernetes.context; }) .title(function () { return '服务集群'; }) .tabs(controllers, pods, events) .build(); HawtioNav.add(mainTab); /* testKubernetesModel HawtioNav.add({ id: 'k8sAppSwitcher', title: () => '', // not used as 'template' below overrides this isValid: () => KubernetesModel.serviceApps.length > 0, context: true, template: () => $templateCache.get(UrlHelpers.join(templatePath, 'serviceApps.html')) }); */ var projectsTab = builder.id('openshift') .rank(100) .href(function () { return UrlHelpers.join(Kubernetes.context, 'buildConfigs') + '?sub-tab=kube-buildConfigs'; }) .title(function () { return 'Projects'; }) .tabs(repos, buildConfigs, builds, deploys, imageRepositories) .build(); //HawtioNav.add(projectsTab); }]); hawtioPluginLoader.registerPreBootstrapTask({ name: 'KubernetesInit', task: function (next) { $.getScript('osconsole/config.js') .done(function (script, textStatus) { var config = Kubernetes.osConfig = window['OPENSHIFT_CONFIG']; Kubernetes.log.debug("Fetched OAuth config: ", config); var master = config.master_uri; if (!master && config.api && config.api.k8s) { var masterUri = new URI().host(config.api.k8s.hostPort).path("").query(""); if (config.api.k8s.proto) { masterUri.protocol(config.api.k8s.proto); } master = masterUri.toString(); } OSOAuthConfig = config.openshift; GoogleOAuthConfig = config.google; KeycloakConfig = config.keycloak; if (OSOAuthConfig && !master) { // TODO auth.master_uri no longer used right? // master = OSOAuthConfig.master_uri; if (!master) { var oauth_authorize_uri = OSOAuthConfig.oauth_authorize_uri; if (oauth_authorize_uri) { var text = oauth_authorize_uri; var idx = text.indexOf("://"); if (idx > 0) { idx += 3; idx = text.indexOf("/", idx); if (idx > 0) { master = text.substring(0, ++idx); } } } } } if ((!Kubernetes.masterUrl || Kubernetes.masterUrl === "/") && (!master || master === "/")) { // lets default the master to the current protocol and host/port // in case the master url is "/" and we are // serving up static content from inside /api/v1/namespaces/default/services/fabric8 or something like that var href = location.href; if (href) { master = new URI(href).query("").path("").toString(); } } if (master) { Kubernetes.masterUrl = master; next(); return; } }) .fail(function (response) { Kubernetes.log.debug("Error fetching OAUTH config: ", response); }) .always(function () { next(); }); } }, true); hawtioPluginLoader.addModule('ngResource'); hawtioPluginLoader.addModule(Kubernetes.pluginName); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.FABRIC8_PROJECT_JSON = "fabric8ProjectJson"; function byId(thing) { return thing.id; } function createKey(namespace, id, kind) { return (namespace || "") + "-" + (kind || 'undefined').toLowerCase() + '-' + (id || 'undefined').replace(/\./g, '-'); } function populateKey(item) { var result = item; result['_key'] = createKey(Kubernetes.getNamespace(item), Kubernetes.getName(item), Kubernetes.getKind(item)); return result; } function populateKeys(items) { var result = []; angular.forEach(items, function (item) { result.push(populateKey(item)); }); return result; } function selectPods(pods, namespace, labels) { return pods.filter(function (pod) { return Kubernetes.getNamespace(pod) === namespace && Kubernetes.selectorMatches(labels, Kubernetes.getLabels(pod)); }); } /** * The object which keeps track of all the pods, replication controllers, services and their associations */ var KubernetesModelService = (function () { function KubernetesModelService() { this.kubernetes = null; this.apps = []; this.services = []; this.replicationcontrollers = []; this.filterReplicationcontrollers = []; this.pods = []; this.hosts = []; //public namespaces = []; this.routes = []; this.templates = []; this.redraw = false; this.resourceVersions = {}; // various views on the data this.podsByHost = {}; this.servicesByKey = {}; this.replicationControllersByKey = {}; this.podsByKey = {}; this.appInfos = []; this.appViews = []; this.appFolders = []; this.fetched = false; this.buildconfigs = []; this.events = []; this.workspaces = []; this.projects = []; this.project = null; } Object.defineProperty(KubernetesModelService.prototype, "replicationControllers", { /*public get filterReplicationcontrollers():Array { return this.filterReplicationcontrollers; } public set filterReplicationcontrollers(filterReplicationcontrollers:Array) { this.filterReplicationcontrollers = filterReplicationcontrollers; }*/ get: function () { return this.replicationcontrollers; }, set: function (replicationControllers) { this.replicationcontrollers = replicationControllers; }, enumerable: true, configurable: true }); Object.defineProperty(KubernetesModelService.prototype, "namespaces", { get: function () { return this.kubernetes.namespaces; }, enumerable: true, configurable: true }); Object.defineProperty(KubernetesModelService.prototype, "showRunButton", { get: function () { if (Kubernetes.isOpenShift) { return true; } return _.any(this.services, function (service) { var name = Kubernetes.getName(service); if (name === "templates") { var podCounters = service.$podCounters; return podCounters && (podCounters.valid || podCounters.ready); } else { return false; } }); }, enumerable: true, configurable: true }); Object.defineProperty(KubernetesModelService.prototype, "serviceApps", { get: function () { return _.filter(this.services, function (s) { return s.$host && s.$serviceUrl && s.$podCount; }); }, enumerable: true, configurable: true }); KubernetesModelService.prototype.$keepPolling = function () { return Kubernetes.keepPollingModel; }; KubernetesModelService.prototype.orRedraw = function (flag) { this.redraw = this.redraw || flag; }; KubernetesModelService.prototype.getService = function (namespace, id) { return this.servicesByKey[createKey(namespace, id, 'service')]; }; KubernetesModelService.prototype.getReplicationController = function (namespace, id) { return this.replicationControllersByKey[createKey(namespace, id, 'replicationController')]; }; KubernetesModelService.prototype.getPod = function (namespace, id) { return this.podsByKey[createKey(namespace, id, 'pod')]; }; KubernetesModelService.prototype.podsForNamespace = function (namespace) { if (namespace === void 0) { namespace = this.currentNamespace(); } return _.filter(this.pods, { namespace: namespace }); }; KubernetesModelService.prototype.getBuildConfig = function (name) { return _.find(this.buildconfigs, { $name: name }); }; KubernetesModelService.prototype.getProject = function (name, ns) { if (ns === void 0) { ns = this.currentNamespace(); } var buildConfig = this.project; if (!buildConfig) { var text = localStorage[Kubernetes.FABRIC8_PROJECT_JSON]; if (text) { try { buildConfig = angular.fromJson(text); } catch (e) { Kubernetes.log.warn("Could not parse json for " + Kubernetes.FABRIC8_PROJECT_JSON + ". Was: " + text + ". " + e, e); } } } if (buildConfig && ns != Kubernetes.getNamespace(buildConfig) && name != buildConfig.$name) { buildConfig = this.getBuildConfig(name); } return buildConfig; }; KubernetesModelService.prototype.setProject = function (buildConfig) { this.project = buildConfig; if (buildConfig) { // lets store in local storage var localStorage = Kubernetes.inject("localStorage"); if (localStorage) { localStorage[Kubernetes.FABRIC8_PROJECT_JSON] = angular.toJson(buildConfig); } } }; /** * Returns the current selected namespace or the default namespace */ KubernetesModelService.prototype.currentNamespace = function () { var answer = null; if (this.kubernetes) { answer = this.kubernetes.selectedNamespace; } return answer || Kubernetes.defaultNamespace; }; KubernetesModelService.prototype.updateIconUrlAndAppInfo = function (entity, nameField) { var answer = null; var id = Kubernetes.getName(entity); entity.$iconUrl = Core.pathGet(entity, ['metadata', 'annotations', 'fabric8.' + id + '/iconUrl']); entity.$info = Core.pathGet(entity, ['metadata', 'annotations', 'fabric8.' + id + '/summary']); if (entity.$iconUrl) { return; } if (id && nameField) { (this.templates || []).forEach(function (template) { var metadata = template.metadata; if (metadata) { var annotations = metadata.annotations || {}; var iconUrl = annotations["fabric8." + id + "/iconUrl"] || annotations["fabric8/iconUrl"]; if (iconUrl) { (template.objects || []).forEach(function (item) { var entityName = Kubernetes.getName(item); if (id === entityName) { entity.$iconUrl = iconUrl; } }); } } }); (this.appInfos || []).forEach(function (appInfo) { var iconPath = appInfo.iconPath; if (iconPath && !answer && iconPath !== "null") { var iconUrl = Kubernetes.gitPathToUrl(iconPath); var ids = Core.pathGet(appInfo, ["names", nameField]); angular.forEach(ids, function (appId) { if (appId === id) { entity.$iconUrl = iconUrl; entity.appPath = appInfo.appPath; entity.$info = appInfo; } }); } }); } if (!entity.$iconUrl) { entity.$iconUrl = Kubernetes.defaultIconUrl; } }; KubernetesModelService.prototype.maybeInit = function () { var _this = this; this.fetched = true; this.servicesByKey = {}; this.podsByKey = {}; this.replicationControllersByKey = {}; this.pods.forEach(function (pod) { if (!pod.kind) pod.kind = "Pod"; _this.podsByKey[pod._key] = pod; var host = Kubernetes.getHost(pod); pod.$labelsText = Kubernetes.labelsToString(Kubernetes.getLabels(pod)); if (host) { pod.$labelsText += Kubernetes.labelFilterTextSeparator + "host=" + host; } pod.$iconUrl = Kubernetes.defaultIconUrl; _this.discoverPodConnections(pod); pod.$containerPorts = []; var podStatus = pod.status || {}; var startTime = podStatus.startTime; pod.$startTime = null; if (startTime) { pod.$startTime = new Date(startTime); } var createdTime = Kubernetes.getCreationTimestamp(pod); pod.$createdTime = null; pod.$age = null; if (createdTime) { pod.$createdTime = new Date(createdTime); pod.$age = humandate.relativeTime(pod.$createdTime); } var ready = Kubernetes.isReady(pod); pod.$ready = ready; pod.$statusCss = Kubernetes.statusTextToCssClass(podStatus.phase, ready); var maxRestartCount = 0; angular.forEach(Core.pathGet(pod, ["status", "containerStatuses"]), function (status) { var restartCount = status.restartCount; if (restartCount) { if (restartCount > maxRestartCount) { maxRestartCount = restartCount; } } }); if (maxRestartCount) { pod.$restartCount = maxRestartCount; } var imageNames = ""; angular.forEach(Core.pathGet(pod, ["spec", "containers"]), function (container) { var image = container.image; if (image) { if (!imageNames) { imageNames = image; } else { imageNames = imageNames + " " + image; } var idx = image.lastIndexOf(":"); if (idx > 0) { image = image.substring(0, idx); } var paths = image.split("/", 3); if (paths.length) { var answer = null; if (paths.length == 3) { answer = paths[1] + "/" + paths[2]; } else if (paths.length == 2) { answer = paths[0] + "/" + paths[1]; } else { answer = paths[0] + "/" + paths[1]; } container.$imageLink = UrlHelpers.join("https://registry.hub.docker.com/u/", answer); } } angular.forEach(container.ports, function (port) { var containerPort = port.containerPort; if (containerPort) { pod.$containerPorts.push(containerPort); } }); }); pod.$imageNames = imageNames; var podStatus = podStatus; var podSpec = (pod.spec || {}); pod.$podIP = podStatus.podIP; pod.$host = podSpec.host || podSpec.nodeName || podStatus.hostIP; }); this.services.forEach(function (service) { if (!service.kind) service.kind = "Service"; _this.servicesByKey[service._key] = service; var selector = Kubernetes.getSelector(service); service.$pods = []; if (!service.$podCounters) { service.$podCounters = {}; } var podLinkUrl = UrlHelpers.join("/kubernetes/namespace", service.metadata.namespace, "pods"); _.assign(service.$podCounters, selector ? Kubernetes.createPodCounters(selector, _this.pods, service.$pods, Kubernetes.labelsToString(selector, ","), podLinkUrl) : {}); service.$podCount = service.$pods.length; var selectedPods = service.$pods; service.connectTo = selectedPods.map(function (pod) { return pod._key; }).join(','); service.$labelsText = Kubernetes.labelsToString(Kubernetes.getLabels(service)); _this.updateIconUrlAndAppInfo(service, "serviceNames"); var spec = service.spec || {}; service.$portalIP = spec.portalIP; service.$selectorText = Kubernetes.labelsToString(spec.selector); var ports = _.map(spec.ports || [], "port"); service.$ports = ports; service.$portsText = ports.join(", "); var iconUrl = service.$iconUrl; if (iconUrl && selectedPods) { selectedPods.forEach(function (pod) { pod.$iconUrl = iconUrl; }); } service.$serviceUrl = Kubernetes.serviceLinkUrl(service); }); this.replicationControllers.forEach(function (replicationController) { if (!replicationController.kind) replicationController.kind = "ReplicationController"; _this.replicationControllersByKey[replicationController._key] = replicationController; var selector = Kubernetes.getSelector(replicationController); replicationController.$pods = []; if (Kubernetes.isFilterRC(replicationController) && !Kubernetes.isInclude(_this.filterReplicationcontrollers, replicationController)) _this.filterReplicationcontrollers.push(replicationController); replicationController.$podCounters = selector ? Kubernetes.createPodCounters(selector, _this.pods, replicationController.$pods) : null; replicationController.$podCount = replicationController.$pods.length; replicationController.$replicas = (replicationController.spec || {}).replicas; replicationController.$oracleName = Kubernetes.getOracleName(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 = {})); /// /// /// /// /// /// /// /// var Developer; (function (Developer) { function clickApprove(element, url) { var $scope = angular.element(element).scope(); if ($scope) { $scope.approve(url, element.text); } } Developer.clickApprove = clickApprove; Developer.JenkinsLogController = Developer._module.controller("Developer.JenkinsLogController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "$modal", "KubernetesApiURL", "ServiceRegistry", "$element", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, $modal, KubernetesApiURL, ServiceRegistry, $element) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.selectedBuild = $scope.$eval('build') || $scope.$eval('selectedBuild'); $scope.id = $scope.$eval('build.id') || $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.entityChangedCache = {}; $element.on('$destroy', function () { $scope.$destroy(); }); $scope.log = { html: "", start: 0, firstIdx: null }; $scope.$on('kubernetesModelUpdated', function () { updateJenkinsLink(); Core.$apply($scope); }); $scope.$on('jenkinsSelectedBuild', function (event, build) { Developer.log.info("==== jenkins build selected! " + build.id + " " + build.$jobId); $scope.selectedBuild = build; }); $scope.$watch('selectedBuild', function (selectedBuild) { Developer.log.info("Selected build updated: ", selectedBuild); $scope.fetch(); }); Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createJenkinsBreadcrumbs($scope.id, getJobId(), getBuildId()); $scope.subTabConfig = Developer.createJenkinsSubNavBars($scope.id, getJobId(), getBuildId(), { label: "Log", title: "Views the logs of this build" }); function getJobId() { // lets allow the parent scope to be used too for when this is used as a panel return $routeParams["job"] || ($scope.selectedBuild || {}).$jobId; } $scope.getJobId = getJobId; function getBuildId() { // lets allow the parent scope to be used too for when this is used as a panel return $routeParams["build"] || ($scope.selectedBuild || {}).id; } $scope.getBuildId = getBuildId; function updateJenkinsLink() { var jenkinsUrl = Developer.jenkinsLink(); if (jenkinsUrl) { $scope.$viewJenkinsBuildLink = UrlHelpers.join(jenkinsUrl, "job", getJobId(), getBuildId()); $scope.$viewJenkinsLogLink = UrlHelpers.join($scope.$viewJenkinsBuildLink, "console"); } } var querySize = 50000; $scope.approve = function (url, operation) { var modal = $modal.open({ templateUrl: UrlHelpers.join(Developer.templatePath, 'jenkinsApproveModal.html'), controller: ['$scope', '$modalInstance', function ($scope, $modalInstance) { $scope.operation = operation; $scope.header = operation + "?"; $scope.ok = function () { modal.close(); postToJenkins(url, operation); }; $scope.cancel = function () { modal.dismiss(); }; }] }); }; function postToJenkins(uri, operation) { var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, uri); if (url) { var body = null; var config = { headers: {} }; Developer.log.info("posting to jenkinsUrl: " + url); $http.post(url, body, config). success(function (data, status, headers, config) { Developer.log.info("Managed to " + operation + " at " + url); }). error(function (data, status, headers, config) { Developer.log.warn("Failed " + operation + " job at " + url + " " + data + " " + status); }); } else { Developer.log.warn("Cannot post to jenkins URI: " + uri + " as no jenkins found!"); } } $scope.$keepPolling = function () { return Kubernetes.keepPollingModel; }; $scope.fetch = PollHelpers.setupPolling($scope, function (next) { if ($scope.$eval('hideLogs && !build.building')) { Developer.log.debug("Log hidden, not fetching logs"); return; } else { Developer.log.debug("Fetching logs for build: ", $scope.$eval('build')); } var buildId = getBuildId(); var jobId = getJobId(); //log.info("=== jenkins log querying job " + jobId + " build " + buildId + " selected build " + $scope.selectedBuild); if (jobId && buildId) { if ($scope.buildId !== buildId || $scope.jobId !== jobId) { // lets clear the query $scope.log = { html: "", start: 0, firstIdx: null }; } $scope.buildId = buildId; $scope.jobId = jobId; var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", jobId, buildId, "fabric8/logHtml?tail=1&start=" + $scope.log.start + "&size=" + querySize)); if ($scope.log.firstIdx !== null) { url += "&first=" + $scope.log.firstIdx; } if (url && (!$scope.log.fetched || Kubernetes.keepPollingModel)) { $http.get(url). success(function (data, status, headers, config) { if (data) { var replaceClusterIPsInHtml = replaceClusterIpFunction(); if (!$scope.log.logs) { $scope.log.logs = []; } var lines = data.lines; var returnedLength = data.returnedLength; var logLength = data.logLength; var returnedStart = data.start; var earlierLog = false; if (angular.isDefined(returnedStart)) { earlierLog = returnedStart < $scope.log.start; } var lineSplit = data.lineSplit; // log.info("start was: " + $scope.log.start + " first: " + $scope.log.firstIdx + " => returnedLength: " + returnedLength + " logLength: " + logLength + " returnedStart: " + returnedStart + " earlierLog: " + earlierLog + " lineSplit: " + lineSplit); if (lines) { var currentLogs = $scope.log.logs; // lets re-join split lines if (lineSplit && currentLogs.length) { var lastIndex; var restOfLine; if (earlierLog) { lastIndex = 0; restOfLine = lines.pop(); if (restOfLine) { currentLogs[lastIndex] = replaceClusterIPsInHtml(restOfLine + currentLogs[lastIndex]); } } else { lastIndex = currentLogs.length - 1; restOfLine = lines.shift(); if (restOfLine) { currentLogs[lastIndex] = replaceClusterIPsInHtml(currentLogs[lastIndex] + restOfLine); } } } for (var i = 0; i < lines.length; i++) { lines[i] = replaceClusterIPsInHtml(lines[i]); } if (earlierLog) { $scope.log.logs = lines.concat(currentLogs); } else { $scope.log.logs = currentLogs.concat(lines); } } var moveForward = true; if (angular.isDefined(returnedStart)) { if (returnedStart > $scope.log.start && $scope.log.start === 0) { // we've jumped to the end of the file to read the tail of it $scope.log.start = returnedStart; $scope.log.firstIdx = returnedStart; } else if ($scope.log.firstIdx === null) { // lets remember where the first request started $scope.log.firstIdx = returnedStart; } else if (returnedStart < $scope.log.firstIdx) { // we've got an earlier bit of the log // after starting at the tail // so lets move firstIdx backwards and leave start as it is (at the end of the file) $scope.log.firstIdx = returnedStart; moveForward = false; } } if (moveForward && returnedLength && !earlierLog) { $scope.log.start += returnedLength; if (logLength && $scope.log.start > logLength) { $scope.log.start = logLength; } } updateJenkinsLink(); } $scope.log.fetched = true; // Core.$apply($scope); next(); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); next(); }); } } else { $scope.log.fetched = true; Core.$apply($scope); next(); } }); if (angular.isFunction($scope.fetch)) { $scope.fetch(); } function replaceClusterIpFunction() { function createReplaceFunction(from, to) { return function (text) { return replaceText(text, from, to); }; } var replacements = []; angular.forEach($scope.model.services, function (service) { var $portalIP = service.$portalIP; var $serviceUrl = service.$serviceUrl; var $portsText = service.$portsText; if ($portalIP && $serviceUrl) { var idx = $serviceUrl.indexOf("://"); if (idx > 0) { var replaceWith = $serviceUrl.substring(idx, $serviceUrl.length); if (!replaceWith.endsWith("/")) { replaceWith += "/"; } if (replaceWith.length > 4) { replacements.push(createReplaceFunction("://" + $portalIP + "/", replaceWith)); if ($portsText) { var suffix = ":" + $portsText; var serviceWithPort = replaceWith.substring(0, replaceWith.length - 1); if (!serviceWithPort.endsWith(suffix)) { serviceWithPort += suffix; } serviceWithPort += "/"; replacements.push(createReplaceFunction("://" + $portalIP + ":" + $portsText + "/", serviceWithPort)); } } } } }); function addReplaceFn(from, to) { replacements.push(function (text) { return replaceText(text, from, to); }); } addReplaceFn("[INFO]", "[INFO]"); addReplaceFn("[WARN]", "[WARN]"); addReplaceFn("[WARNING]", "[WARNING]"); addReplaceFn("[ERROR]", "[ERROR]"); addReplaceFn("FAILURE", "FAILURE"); addReplaceFn("SUCCESS", "SUCCESS"); // lets try convert the Proceed / Abort links replacements.push(function (text) { var prefix = "= 0) { idx = text.indexOf(prefix, idx); if (idx >= 0) { var start = idx + prefix.length; var endQuote = text.indexOf("'", start + 1); if (endQuote <= 0) { break; } var endDoubleQuote = text.indexOf('"', endQuote + 1); if (endDoubleQuote <= 0) { break; } var url = text.substring(start, endQuote); // TODO using $compile is a tad complex, for now lets cheat with a little onclick ;) //text = text.substring(0, idx) + " '" + to + "'"); var idx = 0; while (true) { idx = text.indexOf(from, idx); if (idx >= 0) { text = text.substring(0, idx) + to + text.substring(idx + from.length); idx += to.length; } else { break; } } } return text; } }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.JenkinsMetricsController = Developer.controller("JenkinsMetricsController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.jobId = $routeParams["job"]; $scope.schema = KubernetesSchema; $scope.jenkins = null; $scope.entityChangedCache = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.options = { chart: { type: 'discreteBarChart', autorefresh: false, height: 450, margin: { top: 20, right: 20, bottom: 60, left: 45 }, clipEdge: true, staggerLabels: false, transitionDuration: 500, stacked: false, interactive: true, tooltip: { enabled: true, contentGenerator: function (args) { var data = args.data || {}; return data.tooltip; }, }, color: function (d, i) { return d.color; }, xAxis: { axisLabel: 'Builds', showMaxMin: false, tickFormat: function (d) { return "#" + d; } }, yAxis: { axisLabel: 'Build Duration (seconds)', tickFormat: function (d) { return d3.format(',.1f')(d); } } } }; $scope.data = []; updateData(); function barColourForBuildResult(result) { if (result) { if (result === "FAILURE" || result === "FAILED") { return "red"; } else if (result === "ABORTED" || result === "INTERUPTED") { return "tan"; } else if (result === "SUCCESS") { return "green"; } else if (result === "NOT_STARTED") { return "lightgrey"; } } return "darkgrey"; } function updateChartData() { var useSingleSet = true; var buildsSucceeded = []; var buildsFailed = []; var successBuildKey = "Succeeded builds"; var failedBuildKey = "Failed builds"; if (useSingleSet) { successBuildKey = "Builds"; } var count = 0; var builds = _.sortBy($scope.metrics.builds || [], "number"); angular.forEach(builds, function (build) { var x = build.number; var y = build.duration / 1000; var date = Developer.asDate(build.timeInMillis); var result = build.result || "NOT_STARTED"; var color = barColourForBuildResult(result); var iconClass = Developer.createBuildStatusIconClass(result); var tooltip = '

' + build.displayName + '

' + '

duration: ' + y + ' seconds

'; if (date) { tooltip += '

started: ' + date + '

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

result: ' + result + '

'; } if (x) { var data = buildsSucceeded; var key = successBuildKey; if (!successBuildKey && (!result || !result.startsWith("SUCC"))) { data = buildsFailed; key = failedBuildKey; } data.push({ tooltip: tooltip, color: color, x: x, y: y }); } }); $scope.data = []; if (buildsSucceeded.length) { $scope.data.push({ key: successBuildKey, values: buildsSucceeded }); } if (buildsFailed.length) { $scope.data.push({ key: failedBuildKey, values: buildsFailed }); } $scope.api.updateWithData($scope.data); $timeout(function () { $scope.api.update(); }, 50); } function updateData() { var metricsPath = $scope.jobId ? UrlHelpers.join("job", $scope.jobId, "fabric8/metrics") : "fabric8/metrics"; var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, metricsPath); Developer.log.info(""); if (url && (!$scope.jenkins || Kubernetes.keepPollingModel)) { $http.get(url, Developer.jenkinsHttpConfig). success(function (data, status, headers, config) { if (data) { if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.metrics = data; updateChartData(); } } $scope.model.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); }); } } }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.NavBarController = Developer.controller("NavBarController", ["$scope", "$location", "$routeParams", "$timeout", "KubernetesApiURL", function ($scope, $location, $routeParams, $timeout) { $scope.isValid = function (item) { if (item) { var value = item.isValid; if (angular.isFunction(value)) { return value(item); } else { return angular.isUndefined(value) || value; } } return false; }; }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.PipelineController = Developer.controller("PipelineController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { $scope.kubernetes = KubernetesState; $scope.kubeModel = KubernetesModel; $scope.id = $routeParams["id"]; $scope.jobId = $routeParams["job"]; $scope.buildId = $routeParams["build"]; $scope.schema = KubernetesSchema; $scope.entityChangedCache = {}; $scope.model = { stages: null }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { if ($scope.jobId) { var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", $scope.jobId, $scope.buildId, "fabric8/stages/")); if (url && (!$scope.model.stages || Kubernetes.keepPollingModel)) { $http.get(url). success(function (data, status, headers, config) { if (data) { Developer.enrichJenkinsStages(data, $scope.id, $scope.jobId); if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.build = data; $scope.model.stages = data.stages; } } $scope.model.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); $scope.model.fetched = true; }); } } else { $scope.model.fetched = true; Core.$apply($scope); } } }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer._module.directive("pipelineView", function () { return { templateUrl: Developer.templatePath + 'pipelineView.html' }; }); })(Developer || (Developer = {})); /// /// /// /// /// /// var Developer; (function (Developer) { Developer.PipelinesController = Developer._module.controller("Developer.PipelinesController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", "$element", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry, $element) { $scope.kubernetes = KubernetesState; $scope.kubeModel = KubernetesModel; $scope.id = $routeParams["id"]; $scope.jobId = $scope.jobId || $routeParams["job"]; $scope.schema = KubernetesSchema; $scope.entityChangedCache = {}; $element.on('$destroy', function () { $scope.$destroy(); }); $scope.model = { job: null, pendingOnly: $scope.pendingPipelinesOnly }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.$watch('model.pendingOnly', function ($event) { updateData(); }); $scope.selectBuild = function (build) { var id = build.id; if (id) { if (id !== $scope.selectedBuildId) { $scope.selectedBuildId = id; $scope.$broadcast("jenkinsSelectedBuild", build); } } }; var updateData = _.debounce(function () { var entity = $scope.entity; if ($scope.jobId) { if ((!entity || entity.$jenkinsJob)) { var queryPath = "fabric8/stages/"; if ($scope.model.pendingOnly) { queryPath = "fabric8/pendingStages/"; } var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", $scope.jobId, queryPath)); if (url && (!$scope.model.job || Kubernetes.keepPollingModel)) { $http.get(url). success(function (data, status, headers, config) { if (data) { Developer.enrichJenkinsPipelineJob(data, $scope.id, $scope.jobId); if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.model.job = data; var builds = data.builds; if (builds && builds.length) { $scope.selectBuild(builds[0]); } } } $scope.model.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); $scope.model.fetched = true; }); } } else { if ($scope.model) { Kubernetes.enrichBuilds($scope.kubeModel.builds); var builds = []; angular.forEach($scope.kubeModel.builds, function (build) { var labels = Kubernetes.getLabels(build); var app = labels["app"]; if (app === $scope.projectId) { builds.push(build); } }); builds = _.sortBy(builds, "$creationDate").reverse(); var allBuilds = builds; if (allBuilds.length > 1) { builds = _.filter(allBuilds, function (b) { return !b.$creationDate; }); if (!builds.length) { builds = [allBuilds[0]]; } } var pipelines = []; angular.forEach(builds, function (build) { var buildStatus = build.status || {}; var result = buildStatus.phase || ""; var resultUpperCase = result.toUpperCase(); var description = ""; var $viewLink = build.$viewLink; var $logLink = build.$logsLink; var $timestamp = build.$creationDate; var duration = buildStatus.duration; if (duration) { // 17s = 17,000,000,000 on openshift duration = duration / 1000000; } var displayName = Kubernetes.getName(build); var $iconClass = Developer.createBuildStatusIconClass(resultUpperCase); var $backgroundClass = Developer.createBuildStatusBackgroundClass(resultUpperCase); var stage = { stageName: "OpenShift Build", $viewLink: $viewLink, $logLink: $logLink, $startTime: $timestamp, duration: duration, status: result, $iconClass: $iconClass, $backgroundClass: $backgroundClass }; var pipeline = { description: description, displayName: displayName, $viewLink: $viewLink, $logLink: $logLink, $timestamp: $timestamp, duration: duration, stages: [stage] }; pipelines.push(pipeline); }); // lets filter the OpenShift builds and make a pipeline from that $scope.model.job = { $jobId: $scope.jobId, $project: $scope.projectId, builds: pipelines }; } $scope.model.fetched = true; Core.$apply($scope); } } else { $scope.model.fetched = true; Core.$apply($scope); } }, 50); updateData(); }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.ProjectController = Developer.controller("ProjectController", ["$scope", "$element", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, $element, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.os_build_BuildConfig; $scope.entityChangedCache = {}; $scope.envVersionsCache = {}; $scope.envNSCaches = {}; $scope.envVersions = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = []; //Developer.createProjectBreadcrumbs($scope.id); updateTabs(); // this is used for the pendingPipelines view $scope.jobId = $scope.id; $scope.pendingPipelinesOnly = true; $scope.$on('jenkinsSelectedBuild', function (event, build) { $scope.selectedBuild = build; }); // TODO this should be unnecessary but seems sometiems this watch doesn't always trigger unless you hit reload on this page if ($scope.model.buildconfigs) { onBuildConfigs($scope.model.buildconfigs); } Kubernetes.watch($scope, $element, "buildconfigs", $scope.namespace, onBuildConfigs); function onBuildConfigs(buildConfigs) { angular.forEach(buildConfigs, function (data) { var name = Kubernetes.getName(data); if (name === $scope.id) { var sortedBuilds = null; Kubernetes.enrichBuildConfig(data, sortedBuilds); if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.entity = data; $scope.entity.$build = (data.$fabric8CodeViews || {})['fabric8.link.browseGogs.view']; $scope.model.setProject($scope.entity); } updateEnvironmentWatch(); updateTabs(); } }); $scope.model.fetched = true; Core.$apply($scope); } /** * We have updated the entity so lets make sure we are watching all the environments to find * the project versions for each namespace */ function updateEnvironmentWatch() { var project = $scope.entity; if (project) { var jenkinsJob = project.$jenkinsJob; if (jenkinsJob) { var buildsTab = _.find($scope.subTabConfig, { id: "builds" }); if (buildsTab) { buildsTab["href"] = UrlHelpers.join("/workspaces", Kubernetes.currentKubernetesNamespace(), "projects", $scope.id, "jenkinsJob", jenkinsJob); } } angular.forEach(project.environments, function (env) { var ns = env.namespace; var caches = $scope.envNSCaches[ns]; if (!caches) { caches = {}; $scope.envNSCaches[ns] = caches; Developer.loadProjectVersions($scope, $element, project, env, ns, $scope.envVersions, caches); } }); } } function updateTabs() { $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, null, $scope); } }]); })(Developer || (Developer = {})); /// var Developer; (function (Developer) { Developer._module.controller('Developer.ProjectSelector', ['$scope', '$routeParams', 'KubernetesModel', function ($scope, $routeParams, KubernetesModel) { var projectId = $routeParams['projectId'] || $routeParams['project'] || $routeParams['id']; if (projectId) { $scope.projectId = projectId; $scope.model = KubernetesModel; $scope.$watch('model.buildconfigs', function (buildconfigs) { $scope.projects = buildconfigs; }); } else { Developer.log.info("no project ID in routeParams: ", $routeParams); } }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.ProjectsController = Developer.controller("ProjectsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.tableConfig = { data: 'model.buildconfigs', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '$name', displayName: 'Name', cellTemplate: $templateCache.get("idTemplate.html") }, /* { field: 'spec.source.type', displayName: 'Source' }, */ { field: 'spec.source.git.uri', displayName: 'Repository' }, /* { field: 'spec.strategy.type', displayName: 'Strategy' }, { field: 'spec.strategy.stiStrategy.image', displayName: 'Source Image' }, { field: 'spec.output.imageTag', displayName: 'Output Image' }, */ { field: 'metadata.description', displayName: 'Description' }, { field: '$creationDate', displayName: 'Created', cellTemplate: $templateCache.get("creationTimeTemplate.html") }, { field: '$labelsText', displayName: 'Labels', cellTemplate: $templateCache.get("labelTemplate.html") } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs(); $scope.subTabConfig = Developer.createWorkspaceSubNavBars(); // TODO //$scope.isLoggedIntoGogs = Forge.isLoggedIntoGogs; $scope.deletePrompt = function (selected) { UI.multiItemConfirmActionDialog({ collection: selected, index: '$name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { deleteEntity(next, function () { deleteSelected(selected, selected.shift()); }); } else { } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Apps', action: 'The following Apps will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; function deleteEntity(selection, nextCallback) { var name = (selection || {}).$name; var jenkinsJob = selection.$jenkinsJob; var publicJenkinsUrl = Developer.jenkinsLink(); //var jenkinsUrl = Core.pathGet(selection, ["$fabric8Views", "fabric8.link.jenkins.job", "url"]); if (name) { console.log("About to delete build config: " + name); var url = Kubernetes.buildConfigRestUrl(name); $http.delete(url). success(function (data, status, headers, config) { nextCallback(); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to delete build config on " + url + " " + data + " " + status); nextCallback(); }); } else { console.log("warning: no name for selection: " + angular.toJson(selection)); } if (jenkinsJob && publicJenkinsUrl) { var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", jenkinsJob, "doDelete")); var body = ""; var config = { headers: { 'Content-Type': "text/plain" } }; Developer.log.info("posting to jenkinsUrl: " + url); $http.post(url, body, config). success(function (data, status, headers, config) { Developer.log.info("Managed to delete " + url); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to delete jenkins job at " + url + " " + data + " " + status); }); } } /* $scope.$keepPolling = () => Kubernetes.keepPollingModel; $scope.fetch = PollHelpers.setupPolling($scope, (next:() => void) => { var url = Kubernetes.buildConfigsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { //console.log("got data " + angular.toJson(data, true)); var sortedBuilds = null; $scope.buildConfigs = Kubernetes.enrichBuildConfigs(data.items, sortedBuilds); $scope.model.fetched = true; Core.$apply($scope); next(); } }). error(function (data, status, headers, config) { log.warn("Failed to load " + url + " " + data + " " + status); next(); }); }); $scope.fetch(); */ }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.WorkspaceController = Developer.controller("WorkspaceController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["namespace"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.kubernetes_Namespace; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createWorkspaceBreadcrumbs(); $scope.subTabConfig = Developer.createWorkspaceSubNavBars(); $scope.$keepPolling = function () { return Kubernetes.keepPollingModel; }; $scope.fetch = PollHelpers.setupPolling($scope, function (next) { $scope.item = null; if ($scope.id) { var url = UrlHelpers.join(Kubernetes.resourcesUriForKind("Projects"), $scope.id); Developer.log.info("Loading url: " + url); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = Developer.enrichWorkspace(data); } $scope.model.fetched = true; Core.$apply($scope); next(); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); next(); }); } else { $scope.model.fetched = true; Core.$apply($scope); next(); } }); $scope.fetch(); }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.WorkspacesController = Developer.controller("WorkspacesController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "DataInfoModel", "$interval", function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, DataInfoModel, $interval) { $scope.model = DataInfoModel; $scope.items = []; $scope.localitems = []; var rootPath = ""; var FilterList = { length: 0 }; update(); $scope.treeOptions = { nodeChildren: "children", dirSelectable: true, multiSelection: false, injectClasses: { ul: "a1", li: "a2", liSelected: "a7", iExpanded: "a3", iCollapsed: "a4", iLeaf: "a5", label: "a6", labelSelected: "a8" } }; $scope.treeOptionss = { nodeChildren: "children", dirSelectable: true, multiSelection: true, injectClasses: { ul: "a1", li: "a2", liSelected: "a7", iExpanded: "a3", iCollapsed: "a4", iLeaf: "a5", label: "a6", labelSelected: "a8" } }; $scope.showSelected = function (node, selected) { $scope.model.serveritems = []; var array = new Array(); if (selected) { if (node.children.length > 0) { array.unshift(node); while (array.length > 0) { var childNode = array.pop(); if (childNode.children.length > 0) { for (var i = 0; i < childNode.children.length; i++) array.unshift(childNode.children[i]); } else { if (childNode.hasOwnProperty("path")) $scope.model.serveritems.push(childNode); } } } else { if (node.hasOwnProperty("path")) $scope.model.serveritems.push(node); } } }; $scope.dataForTheTree = $scope.model.serverdata; $scope.dataForTheTreeLocal = $scope.model.localdata; $scope.$watch('model.serverdata', function (newValue, oldValue) { if (newValue) { $scope.dataForTheTree = $scope.model.serverdata; } }); $scope.$watch('model.localdata', function (newValue, oldValue) { if (newValue) { $scope.dataForTheTreeLocal = $scope.model.localdata; } }); $scope.upLoadXMLFile = function (files) { FilterList.length = 0; if (files.length > 0) { var j = 0; for (var i = 0; i < files.length; i++) { if (files[i].name.indexOf("data.xml") != -1) { //console.log(files[i]); rootPath = files[i].webkitRelativePath.replace(/\/data.xml$/, ""); var reader = new FileReader(); var resultString = "{\"name\": \"数据\", \"children\":["; reader.onload = function () { var str = event.target.result; // alert(str); var item = ""; var itemEnd = ""; // ´ý·µ»ØµÄ½á¹û£º if (str != undefined) { // Õû¸öxml ÍêÕûÊý¾Ý£ºxmldata var xmldata = str.toString(); // °´¶ÔÏó·ÖµÄÊý¾Ý£º var itemArray = xmldata.split(item); var itemsize = itemArray.length; for (var k = 1; k < itemsize; k++) { var itemvalue = itemArray[k].split(itemEnd); // province var provinceValueTemp = itemvalue[0].split(""); var provinceValue = provinceValueTemp[provinceValueTemp.length - 1].split("")[0]; //city var cityValueTemp = itemvalue[0].split(""); var cityValue = cityValueTemp[cityValueTemp.length - 1].split("")[0]; // county var countyValueTemp = itemvalue[0].split(""); var countyValue = countyValueTemp[countyValueTemp.length - 1].split("")[0]; // var codeValueTemp = itemvalue[0].split(""); var codeValue = codeValueTemp[codeValueTemp.length - 1].split("")[0]; // var sys_nameValueTemp = itemvalue[0].split(""); var sys_nameValue = sys_nameValueTemp[sys_nameValueTemp.length - 1].split("")[0]; // var character_setValueTemp = itemvalue[0].split(""); var character_setValue = character_setValueTemp[character_setValueTemp.length - 1].split("")[0]; // var sys_name_codeValueTemp = itemvalue[0].split(""); var sys_name_codeValue = sys_name_codeValueTemp[sys_name_codeValueTemp.length - 1].split("")[0]; // var contactValueTemp = itemvalue[0].split(""); var contactValue = contactValueTemp[contactValueTemp.length - 1].split("")[0]; // var phoneValueTemp = itemvalue[0].split(""); var phoneValue = phoneValueTemp[phoneValueTemp.length - 1].split("")[0]; // var dateValueTemp = itemvalue[0].split(""); var dateValue = dateValueTemp[dateValueTemp.length - 1].split("")[0]; //id : var itemId = codeValue + "_" + sys_name_codeValue; // http get version var rid = itemId; //.replace(/\"/g, ""); // TODO typeValue 通过前端页面获取或者??,财政01或社保02 var typeValue = "01"; // TODO batchValue 通过前端页面获取或者??,批次A :大写的A,批次B :大写的B, var batchValue = "A"; var itemname = cityValue + countyValue + sys_nameValue; var versionid = 1; var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status == 200) { versionid = xhr.responseText; } } }; xhr.open("get", "/getversion?id=" + rid, false); xhr.send(null); var jsobj = JSON.parse(versionid); var xmlversion = jsobj.id; var properValue = "{\"id\":\"" + itemId + "\", \"name\":\"" + itemname + "\", \"city\":\"" + cityValue + "\", \"county\":\"" + countyValue + "\", \"system\":\"" + sys_nameValue + "\", \"type\":\"" + typeValue + "\",\"batch\":\"" + batchValue + "\",\"version\":\"" + xmlversion + "\", \"province\":\"" + provinceValue + "\", \"code\":\"" + codeValue + "\", \"character_set\":\"" + character_setValue + "\", \"sys_name_code\":\"" + sys_name_codeValue + "\", \"contact\":\"" + contactValue + "\", \"phone\":\"" + phoneValue + "\", \"date\":\"" + dateValue + "\"}"; resultString = resultString + properValue; if (k < itemsize - 1) { resultString = resultString + ", "; } } resultString = resultString + "]}"; } $scope.$apply(function () { $scope.model.localdata = JSON.parse(resultString.toString()); }); }; reader.readAsText(files[i], "utf-8"); } else { FilterList.length += 1; var file_id = files[i].name.replace(/\.\w*$/, ''); // var file_id=file[i].webkitRelativePath.replace(/^[a-z]*\/$/,''); // file_id = file_id.replace(/\/\w+$/,''); FilterList[j++] = files[i]; } } } $scope.model.uploadprocess = {}; }; $scope.upLoadFiles = function () { if ($scope.model.uploadedStatus == "once") { return; } $scope.model.uploadedStatus = "once"; $scope.model.createFolderList(FilterList, rootPath); if ($scope.model.folderList.length > 0 && $scope.model.selectednodes.length > 0) { var isNotExited = []; var isExited = []; for (var node in $scope.model.selectednodes) { if (!$scope.model.folderList.hasOwnProperty($scope.model.selectednodes[node].id)) { isNotExited.push($scope.model.selectednodes[node]); } else { if ($scope.model.uploadprocess[$scope.model.selectednodes[node].id] === 'undefined' || $scope.model.uploadprocess[$scope.model.selectednodes[node].id] === 0) isExited.push($scope.model.selectednodes[node]); } } if (isNotExited.length > 0) { var str = "以下数据文件不存在:\n\r文件名:\n"; for (var item in isNotExited) str += isNotExited[item].id + "\n"; alert(str); } if (isExited.length <= 0) { alert("数据文件中没有可用上传的文件!"); } else { var isuploaad = 1, i = 0; var timerForUpload = $interval(function () { if (i >= isExited.length) { // clearInterval(timerForUpload); $interval.cancel(timerForUpload); } if (isuploaad == 1) { var r = new Resumable({ target: '/uploadfiles', chunkSize: 50 * 1024 * 1024, simultaneousUploads: 400, testChunks: true, throttleProgressCallbacks: 1 }); var xhr = new XMLHttpRequest(); xhr.open("GET", "/getclientip", true); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status == 200) { r.setip(xhr.responseText); } } }; xhr.send(null); r.on('fileAdded', function (file) { r.upload(); update(); }); $scope.model.resumablejs.push({ dirname: isExited[i].id, resumable: r }); r.setRootPath(isExited[i].type + "/" + isExited[i].batch + "/" + isExited[i].id + "/" + isExited[i].version + "/"); r.myLoadFiles($scope.model.folderList[isExited[i].id]); r.upload(); r.on('fileProgress', function (file) { var file_id = file.relativePath.replace(/^[a-z]*\/$/, ''); var filestr = ""; var reg = /\/[0-9]*_*[0-9]*\//g; var resultstr; while ((resultstr = reg.exec(file_id)) != null) { filestr = resultstr[0]; } file_id = filestr.replace(/\/*/g, ''); r.setFileId(file_id); // $scope.$apply(function(){ $scope.model.uploadprocess[file_id] = Math.floor(r.progress() * 98); // }); }); r.on('complete', function () { var timerForchmod = setInterval(function () { var pathjson = "\"path\":\"" + r.getrootPath() + "\""; var datamessage = { "path": r.getrootPath(), "filenum": $scope.model.folderList[isExited[i - 1].id].length }; $scope.model.uploadprocess[r.getFileId()] = Math.round(r.progress() * 99); $http({ url: '/setchmod2dir', method: 'GET', params: datamessage }).success(function (data, header, config, status) { if (data) { //console.log(data); var clientdata = data; if (clientdata == "chmod") { sendDateMessage(isExited[i - 1]); r.setisnowcheck("1"); r.mkRetfileUploadSucceed(); clearInterval(timerForchmod); } } }).error(function (data, header, config, status) { console.log("-----sendDateMessage-------------" + status); }); }, 5000); }); i++; isuploaad = 0; r.on('fileuploadendsucceed', function () { $scope.model.uploadprocess[r.getFileId()] = Math.floor(r.progress() * 100); $timeout(function () { $http({ url: '/xmlformserver', method: 'Post' }).success(function (data, header, config, status) { if (data) { $scope.model.serverdata = data; } }).error(function (data, header, config, status) { console.log("error"); }); }, 2000); isuploaad = 1; }); } }, 2000); } } else { alert("您没有选择需要上传的数据文件,或你选择的文件中不存在指定格式的数据文件!"); } }; function sendDateMessage(datamessage) { $http({ url: '/sendDateMessage', method: 'GET', params: datamessage }).success(function (data, header, config, status) { if (data) var clientdata = data; }).error(function (data, header, config, status) { }); } $scope.downLoadFiles = function () { //Kubernetes.connectOracle($http, $timeout, "192.168.0.103:64182", "320614-54-1", 500); }; $scope.isSelected = function (node) { var index = $scope.model.findItemIndex(node); if (index !== -1) { $scope.model.selecteditems.splice(index, 1); } else { $scope.model.selecteditems.push(node); } }; $scope.showSelectedLocal = function (node, selected) { var index = $scope.model.findNodes(node); if (index !== "-1") { if ($scope.model.uploadprocess[node.id] === 0) $scope.model.selectednodes.splice(index, 1); } else { $scope.model.uploadprocess[node.id] = 0; $scope.model.selectednodes.push(node); } }; $scope.startOracle = function () { if ($scope.model.selecteditems.length > 0) { for (var id in $scope.model.selecteditems) { var Obj = createRCObj($scope.model.selecteditems[id]); if (!checkIsRunning(KubernetesModel.replicationControllers, Obj)) { Kubernetes.createRC(Obj, function (rc) { console.log(rc); Kubernetes.connectOracle($http, $timeout, "/connectToOracle", "create", rc.metadata.name, 0); }); } } } }; function checkIsRunning(replicationControllers, item) { for (var rc in replicationControllers) { if (item.name === replicationControllers[rc].metadata.name) return true; } return false; } function createRCObj(item) { var array = item.id.split("_"); if (array[0] === "10") { //console.log(item); return { "name": item.fakename, "labels": { "name": item.fakename }, "path": item.path + "app/", "isTarget": "true" }; } else { return { "name": array[2] + "-" + array[3] + "-" + array[4], "labels": { "type": array[0], "batch": array[1], "region": array[2], "system": array[3], "version": array[4] }, "path": item.path + "app/", "isTarget": "false" }; } } function setchmod2dir(datamessage) { $http({ url: '/setchmod2dir', method: 'GET', params: datamessage }).success(function (data, header, config, status) { if (data) var clientdata = data; }).error(function (data, header, config, status) { console.log("-----sendDateMessage-------------" + status); }); } function update() { for (var i = 0; i < $scope.model.resumablejs.length; i++) { var dirId = $scope.model.resumablejs[i].dirname; var r = $scope.model.resumablejs[i].resumable; r.on('fileProgress', function (file) { if (r.getisnowcheck().indexOf("0") == -1) { $scope.$apply(function () { $scope.model.uploadprocess[dirId] = Math.floor(r.progress() * 100); }); } else { $scope.$apply(function () { $scope.model.uploadprocess[dirId] = Math.floor(r.progress() * 98); }); } }); } } }]); })(Developer || (Developer = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.Apps = Kubernetes.controller("Apps", ["$scope", "KubernetesModel", "KubernetesServices", "KubernetesReplicationControllers", "KubernetesPods", "KubernetesState", "KubernetesApiURL", "$templateCache", "$location", "$routeParams", "$http", "$dialog", "$timeout", function ($scope, KubernetesModel, KubernetesServices, KubernetesReplicationControllers, KubernetesPods, KubernetesState, KubernetesApiURL, $templateCache, $location, $routeParams, $http, $dialog, $timeout) { $scope.model = KubernetesModel; $scope.apps = []; $scope.allApps = []; $scope.kubernetes = KubernetesState; $scope.fetched = false; $scope.json = ''; ControllerHelpers.bindModelToSearchParam($scope, $location, 'id', '_id', undefined); ControllerHelpers.bindModelToSearchParam($scope, $location, 'appSelectorShow', 'openApp', undefined); ControllerHelpers.bindModelToSearchParam($scope, $location, 'mode', 'mode', 'detail'); var branch = $scope.branch || "master"; var namespace = null; function appMatches(app) { var filterText = $scope.appSelector.filterText; if (filterText) { return Core.matchFilterIgnoreCase(app.groupId, filterText) || Core.matchFilterIgnoreCase(app.artifactId, filterText) || Core.matchFilterIgnoreCase(app.name, filterText) || Core.matchFilterIgnoreCase(app.description, filterText); } else { return true; } } function appRunning(app) { return $scope.model.apps.any(function (running) { return running.appPath === app.appPath; }); } $scope.tableConfig = { data: 'model.apps', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '$name', displayName: 'App', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appIconTemlate.html")) }, { field: '$servicesText', displayName: 'Services', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appServicesTemplate.html")) }, { field: '$replicationControllersText', displayName: 'Controllers', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appReplicationControllerTemplate.html")) }, { field: '$podCount', displayName: 'Pods', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appPodCountsAndLinkTemplate.html")) }, { field: '$creationDate', displayName: 'Deployed', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appDeployedTemplate.html")) } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.expandedPods = []; $scope.$on('do-resize', function ($event, controller) { $scope.resizeDialog.open(controller); }); $scope.podExpanded = function (pod) { var id = Kubernetes.getName(pod); return id && ($scope.expandedPods || []).indexOf(id) >= 0; }; $scope.expandPod = function (pod) { var id = Kubernetes.getName(pod); if (id) { $scope.expandedPods.push(id); } }; $scope.collapsePod = function (pod) { var id = Kubernetes.getName(pod); if (id) { _.remove($scope.expandedPods, function (v) { return id === v; }); } }; $scope.$on('$routeUpdate', function ($event) { Kubernetes.setJson($scope, $location.search()['_id'], $scope.model.apps); }); function deleteApp(app, onCompleteFn) { function deleteServices(services, service, onCompletedFn) { if (!service || !services) { return onCompletedFn(); } var id = Kubernetes.getName(service); if (!id) { Kubernetes.log.warn("No ID for service " + angular.toJson(service)); } else { KubernetesServices.delete({ id: id }, undefined, function () { Kubernetes.log.debug("Deleted service: ", id); deleteServices(services, services.shift(), onCompletedFn); }, function (error) { Kubernetes.log.debug("Error deleting service: ", error); deleteServices(services, services.shift(), onCompletedFn); }); } } function deleteReplicationControllers(replicationControllers, replicationController, onCompletedFn) { if (!replicationController || !replicationControllers) { return onCompletedFn(); } var id = Kubernetes.getName(replicationController); if (!id) { Kubernetes.log.warn("No ID for replicationController " + angular.toJson(replicationController)); } else { KubernetesReplicationControllers.delete({ id: id }, undefined, function () { Kubernetes.log.debug("Deleted replicationController: ", id); deleteReplicationControllers(replicationControllers, replicationControllers.shift(), onCompletedFn); }, function (error) { Kubernetes.log.debug("Error deleting replicationController: ", error); deleteReplicationControllers(replicationControllers, replicationControllers.shift(), onCompletedFn); }); } } function deletePods(pods, pod, onCompletedFn) { if (!pod || !pods) { return onCompletedFn(); } var id = Kubernetes.getName(pod); if (!id) { Kubernetes.log.warn("No ID for pod " + angular.toJson(pod)); } else { KubernetesPods.delete({ id: id }, undefined, function () { Kubernetes.log.debug("Deleted pod: ", id); deletePods(pods, pods.shift(), onCompletedFn); }, function (error) { Kubernetes.log.debug("Error deleting pod: ", error); deletePods(pods, pods.shift(), onCompletedFn); }); } } var services = [].concat(app.services); deleteServices(services, services.shift(), function () { var replicationControllers = [].concat(app.replicationControllers); deleteReplicationControllers(replicationControllers, replicationControllers.shift(), function () { var pods = [].concat(app.pods); deletePods(pods, pods.shift(), onCompleteFn); }); }); } $scope.deleteSingleApp = function (app) { $scope.deletePrompt([app]); }; $scope.deletePrompt = function (selected) { if (angular.isString(selected)) { selected = [{ id: selected }]; } UI.multiItemConfirmActionDialog({ collection: selected, index: '$name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { var id = next.name; Kubernetes.log.debug("deleting: ", id); deleteApp(next, function () { Kubernetes.log.debug("deleted: ", id); deleteSelected(selected, selected.shift()); }); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Apps?', action: 'The following Apps will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; $scope.appSelector = { filterText: "", folders: [], selectedApps: [], isOpen: function (folder) { if ($scope.appSelector.filterText !== '' || folder.expanded) { return "opened"; } return "closed"; }, getSelectedClass: function (app) { if (app.abstract) { return "abstract"; } if (app.selected) { return "selected"; } return ""; }, showApp: function (app) { return appMatches(app) && !appRunning(app); }, showFolder: function (folder) { return !$scope.appSelector.filterText || folder.apps.some(function (app) { return appMatches(app) && !appRunning(app); }); }, clearSelected: function () { angular.forEach($scope.model.appFolders, function (folder) { angular.forEach(folder.apps, function (app) { app.selected = false; }); }); $scope.appSelector.selectedApps = []; Core.$apply($scope); }, updateSelected: function () { // lets update the selected apps var selectedApps = []; angular.forEach($scope.model.appFolders, function (folder) { var apps = folder.apps.filter(function (app) { return app.selected; }); if (apps) { selectedApps = selectedApps.concat(apps); } }); $scope.appSelector.selectedApps = _.sortBy(selectedApps, "name"); }, select: function (app, flag) { app.selected = flag; $scope.appSelector.updateSelected(); }, hasSelection: function () { return $scope.model.appFolders.any(function (folder) { return folder.apps.any(function (app) { return app.selected; }); }); }, runSelectedApps: function () { // lets run all the selected apps angular.forEach($scope.appSelector.selectedApps, function (app) { var name = app.name; var metadataPath = app.metadataPath; if (metadataPath) { // lets load the json/yaml //var url = gitPathToUrl(Wiki.gitRelativeURL(branch, metadataPath)); var url = Kubernetes.gitPathToUrl(metadataPath, branch); if (url) { $http.get(url). success(function (data, status, headers, config) { if (data) { // lets convert the json object structure into a string var json = angular.toJson(data); var fn = function () { }; Kubernetes.runApp($location, $scope, $http, KubernetesApiURL, json, name, fn, namespace); } }). error(function (data, status, headers, config) { $scope.summaryHtml = null; Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } } }); // lets go back to the apps view $scope.appSelector.clearSelected(); $scope.appSelectorShow = false; } }; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes._module.directive("hawtioBreadcrumbs", ['HawtioBreadcrumbs', function (HawtioBreadcrumbs) { return { /* templateUrl: Kubernetes.templatePath + 'breadcrumbs.html' */ link: function (scope, element, attrs) { HawtioBreadcrumbs.apply(scope.$eval('breadcrumbConfig')); } }; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildController = Kubernetes.controller("BuildController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.os_build_Build; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, null, $scope); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { $scope.item = null; if ($scope.id) { var url = Kubernetes.buildRestUrl($scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = Kubernetes.enrichBuild(data); } $scope.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } else { $scope.fetched = true; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildConfigController = Kubernetes.controller("BuildConfigController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.os_build_BuildConfig; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { $scope.item = null; if ($scope.id) { var url = Kubernetes.buildConfigRestUrl($scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = data; var sortedBuilds = null; Kubernetes.enrichBuildConfig(data, sortedBuilds); $scope.model.setProject($scope.entity); } $scope.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } else { $scope.fetched = true; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildConfigEditController = Kubernetes._module.controller("Kubernetes.BuildConfigEditController", ["$scope", "$element", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "K8SClientFactory", "SchemaRegistry", function ($scope, $element, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, K8SClientFactory, SchemaRegistry) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["project"] || $routeParams["id"]; $scope.schema = KubernetesSchema; var mode = $scope.$eval('mode') || 'edit'; Kubernetes.log.debug("Mode: ", mode); var specConfig = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildConfigSpec'); var gitBuildSource = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.GitBuildSource'); var buildSource = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildSource'); var buildOutput = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildOutput'); var resources = SchemaRegistry.getSchema('io.fabric8.kubernetes.api.model.ResourceRequirements'); var revision = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.SourceRevision'); var strategy = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildStrategy'); var customStrategy = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.CustomBuildStrategy'); var buildTriggerPolicy = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildTriggerPolicy'); var getSecrets = function () { return $scope.secrets; }; var secretSchemaType = "fabric8_SecretReference"; var secretSchemaRef = "#/definitions/" + secretSchemaType; var secretSchemaJavaType = "io.fabric8.console.SecretReference"; var secretNameElement = { "type": "string", "enum": getSecrets, required: true }; var secretSchema = { "type": "object", properties: { "name": secretNameElement }, javaType: secretSchemaJavaType }; SchemaRegistry.addSchema(secretSchemaType, secretSchema); // lets switch to the new secrets types: var sourceSecretProperty = Core.pathGet(buildSource, ["properties", "sourceSecret"]); angular.forEach([ Core.pathGet(customStrategy, ["properties", "pullSecret"]), sourceSecretProperty, ], function (schemaType) { if (schemaType) { schemaType["type"] = secretSchemaType; schemaType["$ref"] = secretSchemaRef; schemaType["javaType"] = secretSchemaJavaType; } }); // lets try make the buildSource's sourceSecret mandatory //schemaSetRequired(customStrategy, 'pullSecret'); Kubernetes.schemaSetRequired(buildSource, 'sourceSecret'); if (sourceSecretProperty) { Core.pathSet(sourceSecretProperty, ['properties', 'required'], true); Core.pathSet(sourceSecretProperty, ['properties', 'input-attributes', 'required'], true); } $scope.customStrategy = customStrategy; $scope.buildSource = buildSource; $scope.secrets = []; // $scope.config = KubernetesSchema.definitions.os_build_BuildConfig; //$scope.specConfig = KubernetesSchema.definitions.os_build_BuildConfigSpec; // specConfig.style = HawtioForms.FormStyle.STANDARD; specConfig.properties['triggers']['label-attributes'] = { style: 'display: none;' }; gitBuildSource.controls = ['uri', 'ref', '*']; buildSource.properties['type'].type = 'hidden'; buildSource.properties['type']['default'] = 'Git'; buildSource.controls = ['git', 'contextDir', 'sourceSecret', '*']; gitBuildSource['hideLegend'] = true; buildSource['hideLegend'] = true; buildOutput['hideLegend'] = true; resources['hideLegend'] = true; revision['hideLegend'] = true; strategy['hideLegend'] = true; strategy.controls = ['type', '*']; strategy.properties['type'] = { type: 'text', enum: [{ 'value': 'Custom', 'label': 'Custom' }, { 'value': 'Docker', 'label': 'Docker' }, { 'value': 'Source', 'label': 'Source' }] }; customStrategy['control-group-attributes'] = { 'ng-show': "entity.type == 'Custom'" }; strategy.properties['dockerStrategy']['control-group-attributes'] = { 'ng-show': "entity.type == 'Docker'" }; strategy.properties['sourceStrategy']['control-group-attributes'] = { 'ng-show': "entity.type == 'Source'" }; buildTriggerPolicy.controls = ['type', '*']; buildTriggerPolicy.properties['type'] = { type: 'string', enum: [{ 'value': 'Github', 'label': 'Github' }, { 'value': 'ImageChange', 'label': 'Image Change' }, { 'value': 'Generic', 'label': 'Generic' }] }; buildTriggerPolicy.properties['generic']['control-group-attributes'] = { 'ng-show': "entity.type == 'Generic'" }; buildTriggerPolicy.properties['github']['control-group-attributes'] = { 'ng-show': "entity.type == 'Github'" }; buildTriggerPolicy.properties['imageChange']['control-group-attributes'] = { 'ng-show': "entity.type == 'ImageChange'" }; // re-arranging the controls //specConfig.controls = ['source', '*']; // tabs specConfig.tabs = { "Source": ["source"], "Revision": ["revision"], "Output": ["output"], "Resources": ["resources"], "Strategy": ["strategy"], "Triggers": ["triggers"], "Service Account": ["serviceAccount"] }; /* * wizard, needs an 'onFinish' function in the scope specConfig.wizard = { pages: { Source: { controls: ["source"] }, Revision: { controls: ["revision"] }, Output: { controls: ["output"] }, Resources: { controls: ["resources"] }, Strategy: { controls: ["strategy"] }, Triggers: { controls: ["triggers"] }, "Service Account": { controls: ["serviceAccount"] } } }; */ $scope.entity = { "apiVersion": "v1", "kind": "BuildConfig", "metadata": { "name": "", "labels": {} }, "spec": { "source": { "type": "Git" }, "strategy": { "type": "Custom", "customStrategy": { "from": { "kind": "DockerImage", "name": "fabric8/openshift-s2i-jenkins-trigger" }, "env": [ { "name": "BASE_URI", "value": jenkinsUrl }, { "name": "JOB_NAME", "value": jobName } ] } } } }; $scope.$watch('entity.spec.source.git.uri', function (val) { if (!val) { return; } var lastBit = val.match(/[^\/]+$/)[0]; if (lastBit) { var name = lastBit.replace(/\.git$/, ''); Kubernetes.log.debug("name: ", name); if (!Core.isBlank(name) && Core.isBlank(Core.pathGet($scope.entity, ['metadata', 'name']))) { Core.pathSet($scope.entity, ['metadata', 'name'], name); } } }); Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectSettingsBreadcrumbs($scope.projectId); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.projectId); $scope.tabs = Developer.createProjectSettingsSubNavBars($scope.projectId); Kubernetes.watch($scope, $element, "secrets", $scope.namespace, onSecrets); $scope.buildConfigClient = K8SClientFactory.create("buildconfigs", $scope.namespace); $element.on('$destroy', function () { $scope.$destroy(); }); $scope.$on('$destroy', function () { K8SClientFactory.destroy($scope.buildConfigClient); }); /* $scope.$on('kubernetesModelUpdated', function () { updateData(); }); */ $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.save = function () { Kubernetes.log.info("Saving!"); var entity = $scope.entity; var spec = (entity || {}).spec || {}; // TODO update the jenkins job name! // lets delete lots of cruft var strategy = spec.strategy || {}; delete strategy["dockerStrategy"]; delete strategy["sourceStrategy"]; delete spec["revision"]; delete spec["output"]; delete spec["resources"]; var strategyPullSecretName = Core.pathGet(spec, ["strategy", "customStrategy", "pullSecret", "name"]); var sourceSecretName = Core.pathGet(spec, ["source", "sourceSecret", "name"]); Kubernetes.log.info("sourceSecretName: " + sourceSecretName); Kubernetes.log.info("strategyPullSecretName: " + strategyPullSecretName); if (!strategyPullSecretName && sourceSecretName) { Core.pathSet(spec, ["strategy", "customStrategy", "pullSecret", "name"], sourceSecretName); } /* // TODO hack until the put deals with updates var metadata = entity.metadata; if (metadata) { delete metadata["resourceVersion"]; } */ Kubernetes.log.info(angular.toJson(entity, true)); $scope.buildConfigClient.put(entity, function (obj) { Kubernetes.log.info("build config created!"); var link = Developer.projectSecretsLink($scope.namespace, Kubernetes.getName(entity)); if (link) { Kubernetes.log.info("Navigating to: " + link); $location.path(link); } else { Kubernetes.log.warn("Could not find the edit pipeline link!"); } }); }; updateData(); var jenkinsUrl = Developer.jenkinsLink(); var jobName = ""; function updateData() { $scope.item = null; if ($scope.id) { var url = Kubernetes.buildConfigRestUrl($scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = data; var buildConfig = angular.copy(data); var sortedBuilds = null; Kubernetes.enrichBuildConfig(buildConfig, sortedBuilds); $scope.buildConfig = buildConfig; } $scope.spec = ($scope.entity || {}).spec || {}; $scope.fetched = true; // lets update the tabs $scope.subTabConfig = Developer.createProjectSubNavBars($scope.projectId, null, $scope); Core.$apply($scope); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } else { $scope.fetched = true; $scope.spec = $scope.entity.spec; Core.$apply($scope); } } function onSecrets(secrets) { var array = []; angular.forEach(secrets, function (secret) { var name = Kubernetes.getName(secret); if (name) { array.push({ label: name, value: name, "attributes": { "title": name }, $secret: secret }); } }); $scope.secrets = _.sortBy(array, "label"); var specSourceSecretNamePath = ['spec', 'source', 'sourceSecret', 'name']; if ($scope.entity && !Core.pathGet($scope.entity, specSourceSecretNamePath)) { var defaultSecretName = findDefaultImportSecretName(secrets); Core.pathSet($scope.entity, specSourceSecretNamePath, defaultSecretName); } } function findDefaultImportSecretName(secrets) { var answer = null; angular.forEach(secrets, function (secret) { var name = Kubernetes.getName(secret); if (!answer && name && name.startsWith("jenkins-login")) { answer = name; } }); if (!answer) { angular.forEach(secrets, function (secret) { var name = Kubernetes.getName(secret); if (!answer && name && name.startsWith("jenkins-token")) { answer = name; } }); } return answer; } switch (mode) { case 'create': delete specConfig.tabs; _.forIn(buildSource.properties, function (property, name) { if (name !== 'git') { Kubernetes.log.info("Hiding property: ", name); property.hidden = true; } }); _.forIn(gitBuildSource.properties, function (property, name) { if (name !== 'uri') { Kubernetes.log.info("Hiding property: ", name); property.hidden = true; } else { property.label = "Git URL"; property['input-attributes'] = { 'required': true }; } }); _.forIn(specConfig.properties, function (property, name) { if (name !== 'source') { Kubernetes.log.info("Hiding property: ", name); property.hidden = true; } }); break; case 'edit': default: } $scope.specConfig = specConfig; }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildConfigsController = Kubernetes.controller("BuildConfigsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.tableConfig = { data: 'model.buildconfigs', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'metadata.name', displayName: 'Name', cellTemplate: $templateCache.get("buildConfigLinkTemplate.html") }, /* { field: 'spec.source.type', displayName: 'Source' }, */ { field: 'spec.source.git.uri', displayName: 'Repository' }, /* { field: 'spec.strategy.type', displayName: 'Strategy' }, { field: 'spec.strategy.stiStrategy.image', displayName: 'Source Image' }, { field: 'spec.output.imageTag', displayName: 'Output Image' }, */ { field: '$fabric8CodeViews', displayName: 'Code', width: "***", minWidth: 500, cellTemplate: $templateCache.get("buildConfigCodeViewsTemplate.html") }, { field: '$fabric8BuildViews', displayName: 'Builds', width: "***", minWidth: 500, cellTemplate: $templateCache.get("buildConfigBuildViewsTemplate.html") }, { field: '$fabric8EnvironmentViews', displayName: 'Environments', width: "***", minWidth: 500, cellTemplate: $templateCache.get("buildConfigEnvironmentViewsTemplate.html") }, { field: '$fabric8TeamViews', displayName: 'People', width: "***", minWidth: 500, cellTemplate: $templateCache.get("buildConfigTeamViewsTemplate.html") } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); // TODO // $scope.isLoggedIntoGogs = Forge.isLoggedIntoGogs; $scope.deletePrompt = function (selected) { UI.multiItemConfirmActionDialog({ collection: selected, index: '$name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { deleteEntity(next, function () { deleteSelected(selected, selected.shift()); }); } else { updateData(); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Build Configs?', action: 'The following Build Configs will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; function deleteEntity(selection, nextCallback) { var name = (selection || {}).$name; if (name) { console.log("About to delete build config: " + name); var url = Kubernetes.buildConfigRestUrl(name); $http.delete(url). success(function (data, status, headers, config) { nextCallback(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to delete build config on " + url + " " + data + " " + status); }); } else { console.log("warning: no name for selection: " + angular.toJson(selection)); } } function updateData() { } updateData(); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildLogsController = Kubernetes.controller("BuildLogsController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.os_build_Build; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.logsText = "Loading logs..."; updateData(); function updateData() { $scope.item = null; if ($scope.id) { var url = Kubernetes.buildRestUrl($scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = Kubernetes.enrichBuild(data); } $scope.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); url = Kubernetes.buildLogsRestUrl($scope.id); $http.get(url). success(function (data, status) { $scope.logsText = data; Core.$apply($scope); }). error(function (data, status) { $scope.logsText = "Failed to load logs from: " + url + " " + data + " status: " + status; Core.$apply($scope); }). catch(function (error) { $scope.logsText = "Failed to load logs: " + angular.toJson(error, true); Core.$apply($scope); }); } else { $scope.fetched = true; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildsController = Kubernetes.controller("BuildsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.buildConfigId = $routeParams["id"]; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.tableConfig = { data: 'model.builds', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'metadata.name', displayName: 'Name', cellTemplate: $templateCache.get("buildLinkTemplate.html") }, { field: '$creationDate', displayName: 'Time', defaultSort: true, cellTemplate: $templateCache.get("buildTimeTemplate.html") }, { field: 'status', displayName: 'Status', cellTemplate: $templateCache.get("buildStatusTemplate.html") }, { field: '$logsLink', displayName: 'Logs', cellTemplate: $templateCache.get("buildLogsTemplate.html") }, { field: '$podLink', displayName: 'Build Pod', cellTemplate: $templateCache.get("buildPodTemplate.html") }, /* { field: 'parameters.source.type', displayName: 'Source' }, */ { field: 'spec.source.git.uri', displayName: 'Repository', cellTemplate: $templateCache.get("buildRepositoryTemplate.html") }, { field: 'spec.strategy.type', displayName: 'Strategy' }, { field: 'spec.strategy.sourceStrategy.from.name', displayName: 'Source Image' }, { field: 'spec.output.to.name', displayName: 'Output Image' }] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.buildConfigId); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.buildConfigId, null, $scope); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); function updateData() { if ($scope.model) { var builds = $scope.model.builds; var buildConfigId = $scope.buildConfigId; Kubernetes.enrichBuilds(builds); $scope.fetched = true; if (buildConfigId) { $scope.buildConfig = $scope.model.getBuildConfig(buildConfigId); } } } updateData(); /* $scope.$keepPolling = () => keepPollingModel; $scope.fetch = PollHelpers.setupPolling($scope, (next:() => void) => { var url = buildsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { //console.log("got data " + angular.toJson(data, true)); $scope.builds = enrichBuilds(data.items); $scope.fetched = true; if ($scope.model) { $scope.buildConfig = $scope.model.getBuildConfig($scope.buildConfigId); } } Core.$apply($scope); next(); }). error(function (data, status, headers, config) { log.warn("Failed to load " + url + " " + data + " " + status); Core.$apply($scope); next(); }); }); $scope.fetch(); */ }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { // controller for connecting to a remote container via jolokia Kubernetes.ConnectController = Kubernetes.controller("ConnectController", [ "$scope", "localStorage", "userDetails", "ConnectDialogService", "$browser", function ($scope, localStorage, userDetails, ConnectDialogService, $browser) { $scope.doConnect = function (entity) { var connectUrl = new URI().path(UrlHelpers.join(HawtioCore.documentBase(), '/java/index.html')); var returnTo = new URI().toString(); var title = entity.metadata.name || 'Untitled Container'; var token = userDetails.token || ''; connectUrl.hash(token).query({ jolokiaUrl: entity.$jolokiaUrl, title: title, returnTo: returnTo }); Kubernetes.log.debug("Connect URI: ", connectUrl.toString()); window.open(connectUrl.toString()); }; }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { var dataInfoModelService = (function () { function dataInfoModelService() { this.serverdata = {}; this.promiseobject = {}; this.localdata = {}; this.selectednodes = []; this.resumablejs = []; this.selecteditems = []; this.serveritems = []; this.uploadprocess = {}; this.uploadedStatus = ""; this.folderList = { length: 0 }; } Object.defineProperty(dataInfoModelService.prototype, "uploadProcess", { get: function () { return this.uploadprocess; }, set: function (uploadProcess) { this.uploadprocess = uploadProcess; }, enumerable: true, configurable: true }); Object.defineProperty(dataInfoModelService.prototype, "serverItems", { get: function () { return this.serveritems; }, set: function (serverItems) { this.serveritems = serverItems; }, enumerable: true, configurable: true }); Object.defineProperty(dataInfoModelService.prototype, "resumableJs", { get: function () { return this.resumableJs; }, set: function (resumableJs) { this.resumablejs = resumableJs; }, enumerable: true, configurable: true }); Object.defineProperty(dataInfoModelService.prototype, "selectedItems", { get: function () { return this.selecteditems; }, set: function (selectedItems) { this.selecteditems = selectedItems; }, enumerable: true, configurable: true }); Object.defineProperty(dataInfoModelService.prototype, "selectedNodes", { get: function () { return this.selectednodes; }, set: function (selectedNodes) { this.selectednodes = selectedNodes; }, enumerable: true, configurable: true }); dataInfoModelService.prototype.isContainsNodes = function (node) { for (var item in this.selectednodes) { if (this.selectednodes[item].id === node.id) return true; } return false; }; dataInfoModelService.prototype.findNodes = function (node) { var id = "-1"; if (typeof (node) === "object") { id = node.id; } else if (typeof (node) === "number") { id = node.toString(); } else if (typeof (node) === "string") { id = node; } else { return "-1"; } for (var item in this.selectednodes) { if (this.selectednodes[item].id === id) return item; } return "-1"; }; dataInfoModelService.prototype.findItemIndex = function (item) { var id = -1; if (typeof (item) === "object") { id = item.id; } else if (typeof (item) === "number") { id = item.toString(); } else if (typeof (item) === "string") { id = item; } else { return -1; } for (var it in this.selecteditems) { if (this.selecteditems[it].id === id) return it; } return -1; }; dataInfoModelService.prototype.createFolderList = function (files, rootPath) { for (var i = 0; i < files.length; i++) { var relativePath = files[i].webkitRelativePath.replace(RegExp("^" + rootPath + "/"), ""); var paths = relativePath.split("/"); if (!this.folderList.hasOwnProperty(paths[0])) { this.folderList[paths[0]] = { length: 0 }; this.folderList.length++; } var Obj = this.folderList[paths[0]]; Obj[Obj.length] = files[i]; Obj.length++; this.folderList[paths[0]] = Obj; } }; dataInfoModelService.prototype.updateNodeById = function (nodeId, key, value) { for (var item in this.selectednodes) { var node = this.selectednodes[item]; if (node.id === nodeId) { node[key] = value; break; } } }; Object.defineProperty(dataInfoModelService.prototype, "serverData", { get: function () { return this.serverData; }, set: function (serverData) { this.serverdata = serverData; }, enumerable: true, configurable: true }); Object.defineProperty(dataInfoModelService.prototype, "promiseObject", { get: function () { return this.promiseobject; }, enumerable: true, configurable: true }); Object.defineProperty(dataInfoModelService.prototype, "promise", { set: function (promiseObject) { this.promiseobject = promiseObject; }, enumerable: true, configurable: true }); Object.defineProperty(dataInfoModelService.prototype, "localData", { get: function () { return this.localdata; }, set: function (localData) { this.localdata = localData; }, enumerable: true, configurable: true }); dataInfoModelService.prototype.updataDataModel = function () { this.promiseobject.success(function (data, header, config, status) { this.serverdata = data; }); this.promiseobject.error(function (data, status, hedaers, config) { this.serverdata = {}; }); }; return dataInfoModelService; }()); Kubernetes.dataInfoModelService = dataInfoModelService; Kubernetes._module.factory('DataInfoModel', ['$http', function ($http) { var $scope = new dataInfoModelService(); $scope.promiseobject = $http({ url: '/xmlformserver', method: 'POST' }); updateDataFromServer($scope.serverdata, function (data, header, config, status) { $scope.serverdata = data; }); function updateDataFromServer(data, callback) { $http({ url: '/xmlformserver', method: 'POST' }).success(function (data, header, config, status) { if (data) callback(data, header, config, status); }).error(function (data, header, config, status) { console.log("error"); }); } ; return $scope; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.DeploymentConfigController = Kubernetes.controller("DeploymentConfigController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.os_deploy_DeploymentConfig; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { $scope.item = null; if ($scope.id) { var url = Kubernetes.deploymentConfigRestUrl($scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = data; Kubernetes.enrichDeploymentConfig(data); } $scope.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } else { $scope.fetched = true; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.DeploymentConfigsController = Kubernetes.controller("DeploymentConfigsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.labelClass = Kubernetes.containerLabelClass; $scope.tableConfig = { data: 'deploymentConfigs', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'metadata.name', displayName: 'Name', cellTemplate: $templateCache.get("deploymentConfigLinkTemplate.html") }, { field: 'metadata.namespace', displayName: 'Namespace' }, { field: '$imageChangeParams.automatic', displayName: 'Automatic' }, { field: '$imageChangeParams.$containerNames', displayName: 'Container Names' }, { field: '$imageChangeParams.from.name', displayName: 'From image' }, { field: '$imageChangeParams.tag', displayName: 'Tag' }, { field: 'template.controllerTemplate.podTemplate.tags', displayName: 'Labels', cellTemplate: $templateCache.get("deploymentConfigLabelTemplate.html") } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.deletePrompt = function (selected) { UI.multiItemConfirmActionDialog({ collection: selected, index: '$name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { deleteEntity(next, function () { deleteSelected(selected, selected.shift()); }); } else { updateData(); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Deployment?', action: 'The following Deployments will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; function deleteEntity(selection, nextCallback) { var name = (selection || {}).$name; if (name) { console.log("About to delete deployment config: " + name); var url = Kubernetes.deploymentConfigRestUrl(name); $http.delete(url). success(function (data, status, headers, config) { nextCallback(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to delete deployment config on " + url + " " + data + " " + status); }); } else { console.log("warning: no name for selection: " + angular.toJson(selection)); } } function updateData() { var url = Kubernetes.deploymentConfigsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { //console.log("got data " + angular.toJson(data, true)); $scope.deploymentConfigs = Kubernetes.enrichDeploymentConfigs(data.items); $scope.fetched = true; Core.$apply($scope); } }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } updateData(); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.EventsController = Kubernetes.controller("EventsController", ["$scope", "KubernetesModel", "KubernetesServices", "KubernetesPods", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesServices, KubernetesPods, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; ControllerHelpers.bindModelToSearchParam($scope, $location, 'mode', 'mode', 'list'); $scope.tableConfig = { data: 'model.events', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '$firstTimestamp', displayName: 'First Seen', cellTemplate: $templateCache.get("firstTimestampTemplate.html") }, { field: '$lastTimestamp', displayName: 'Last Seen', cellTemplate: $templateCache.get("lastTimestampTemplate.html") }, { field: 'count', displayName: 'Count' }, { field: 'involvedObject.name', displayName: 'Name', cellTemplate: $templateCache.get("eventNameTemplate.html") }, { field: 'involvedObject.kind', displayName: 'Kind', cellTemplate: $templateCache.get("eventKindTemplate.html") }, { field: 'involvedObject.fieldPath', displayName: 'Subject' }, { field: 'reason', displayName: 'Reason' }, { field: 'source', displayName: 'Source', cellTemplate: $templateCache.get("eventSourceTemplate.html") }, { field: 'message', displayName: 'Message' } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.HostController = Kubernetes.controller("HostController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.rawModel = null; $scope.itemConfig = { properties: {} }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.flipRaw = function () { $scope.rawMode = !$scope.rawMode; Core.$apply($scope); }; updateData(); function updateData() { $scope.id = $routeParams["id"]; $scope.item = null; if ($scope.id) { var url = UrlHelpers.join(KubernetesApiURL, "nodes", $scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.item = data; } if ($scope.item) { $scope.rawModel = Kubernetes.toRawYaml($scope.item); } }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } else { $scope.rawModel = null; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// var Kubernetes; (function (Kubernetes) { Kubernetes.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 = "s1:latest"; 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 }, "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 = {})); /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.HostsController = Kubernetes.controller("HostsController", ["$scope", "KubernetesModel", "KubernetesPods", "KubernetesState", "ServiceRegistry", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesPods, KubernetesState, ServiceRegistry, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.tableConfig = { data: 'model.hosts', showSelectionCheckbox: false, enableRowClickSelection: false, multiSelect: false, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'id', displayName: 'Name', defaultSort: true, cellTemplate: $templateCache.get("idTemplate.html") }, { field: 'hostIP', displayName: 'IP', customSortField: function (field) { // use a custom sort to sort ip address return Kubernetes.sortByPodIp(field.hostIP); } }, { field: '$podsLink', displayName: 'Pods', cellTemplate: $templateCache.get("podCountsAndLinkTemplate.html"), customSortField: function (field) { // need to concat all the pod counters var ready = field.$podCounters.ready || 0; var valid = field.$podCounters.valid || 0; var waiting = field.$podCounters.waiting || 0; var error = field.$podCounters.error || 0; return ready + valid + waiting + error; } } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ImageRepositoriesController = Kubernetes.controller("ImageRepositoriesController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.tableConfig = { data: 'imageRepositories', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'metadata.name', displayName: 'Name' }, { field: 'metadata.namespace', displayName: 'Namespace' }, { field: 'status.dockerImageRepository', displayName: 'Docker Registry' }, { field: 'tags', displayName: 'Tags', cellTemplate: $templateCache.get('imageRegistryLabelTemplate.html') } ] }; var labelColors = { 'prod': 'background-blue', 'valid': 'background-light-green', 'test': 'background-light-grey' }; $scope.labelClass = function (labelType) { if (!(labelType in labelColors)) { return 'mouse-pointer'; } else return labelColors[labelType] + ' mouse-pointer'; }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.deletePrompt = function (selected) { UI.multiItemConfirmActionDialog({ collection: selected, index: '$name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { deleteEntity(next, function () { deleteSelected(selected, selected.shift()); }); } else { updateData(); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Image Repository?', action: 'The following Image Repositories will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; function deleteEntity(selection, nextCallback) { var name = (selection || {}).$name; if (name) { console.log("About to delete image repository: " + name); var url = Kubernetes.imageRepositoryRestUrl(name); $http.delete(url). success(function (data, status, headers, config) { nextCallback(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to delete image repository on " + url + " " + data + " " + status); }); } else { console.log("warning: no name for selection: " + angular.toJson(selection)); } } function updateData() { var url = Kubernetes.imageRepositoriesRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { //console.log("got data " + angular.toJson(data, true)); $scope.imageRepositories = Kubernetes.enrichImageRepositories(data.items); $scope.fetched = true; Core.$apply($scope); } }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } updateData(); }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { function selectSubNavBar($scope, tabName, newSubTabLabel) { var foundTab = null; angular.forEach($scope.subTabConfig, function (tab) { if (tabName === tab.label || tabName === tab.id) { foundTab = tab; } }); var breadcrumbConfig = $scope.breadcrumbConfig; if (foundTab && breadcrumbConfig) { breadcrumbConfig.push(foundTab); $scope.subTabConfig = [ { label: newSubTabLabel } ]; } } Kubernetes.selectSubNavBar = selectSubNavBar; })(Kubernetes || (Kubernetes = {})); /// var Kubernetes; (function (Kubernetes) { Kubernetes.schema = { "id": "http://fabric8.io/fabric8/v2/Schema#", "$schema": "http://json-schema.org/schema#", "definitions": { "api_RootPaths": { "type": "object", "description": "", "properties": { "paths": { "type": "array", "description": "", "items": { "type": "string", "description": "" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.RootPaths" }, "kubernetes_AWSElasticBlockStoreVolumeSource": { "type": "object", "description": "", "properties": { "fsType": { "type": "string", "description": "file system type to mount" }, "partition": { "type": "integer", "description": "partition on the disk to mount (e.g." }, "readOnly": { "type": "boolean", "description": "read-only if true" }, "volumeID": { "type": "string", "description": "unique id of the PD resource in AWS; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#awselasticblockstore" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, "kubernetes_Capabilities": { "type": "object", "description": "", "properties": { "add": { "type": "array", "description": "added capabilities", "items": { "type": "string", "description": "added capabilities" } }, "drop": { "type": "array", "description": "droped capabilities", "items": { "type": "string", "description": "droped capabilities" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Capabilities" }, "kubernetes_CephFSVolumeSource": { "type": "object", "description": "", "properties": { "monitors": { "type": "array", "description": "a collection of Ceph monitors", "items": { "type": "string", "description": "a collection of Ceph monitors" } }, "readOnly": { "type": "boolean", "description": "Ceph fs to be mounted with read-only permissions" }, "secretFile": { "type": "string", "description": "path to secret for rados user; default is /etc/ceph/user.secret; optional" }, "secretRef": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "user": { "type": "string", "description": "rados user name; default is admin; optional" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" }, "kubernetes_Container": { "type": "object", "description": "", "properties": { "args": { "type": "array", "description": "command array; the docker image's cmd is used if this is not provided; arguments to the entrypoint; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved", "items": { "type": "string", "description": "command array; the docker image's cmd is used if this is not provided; arguments to the entrypoint; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved" } }, "command": { "type": "array", "description": "entrypoint array; not executed within a shell; the docker image's entrypoint is used if this is not provided; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved", "items": { "type": "string", "description": "entrypoint array; not executed within a shell; the docker image's entrypoint is used if this is not provided; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved" } }, "env": { "type": "array", "description": "list of environment variables to set in the container; cannot be updated", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } }, "image": { "type": "string", "description": "Docker image name; see http://releases.k8s.io/HEAD/docs/user-guide/images.md" }, "imagePullPolicy": { "type": "string", "description": "image pull policy; one of Always" }, "lifecycle": { "$ref": "#/definitions/kubernetes_Lifecycle", "javaType": "io.fabric8.kubernetes.api.model.Lifecycle" }, "livenessProbe": { "$ref": "#/definitions/kubernetes_Probe", "javaType": "io.fabric8.kubernetes.api.model.Probe" }, "name": { "type": "string", "description": "name of the container; must be a DNS_LABEL and unique within the pod; cannot be updated", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "ports": { "type": "array", "description": "list of ports to expose from the container; cannot be updated", "items": { "$ref": "#/definitions/kubernetes_ContainerPort", "javaType": "io.fabric8.kubernetes.api.model.ContainerPort" } }, "readinessProbe": { "$ref": "#/definitions/kubernetes_Probe", "javaType": "io.fabric8.kubernetes.api.model.Probe" }, "resources": { "$ref": "#/definitions/kubernetes_ResourceRequirements", "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "securityContext": { "$ref": "#/definitions/kubernetes_SecurityContext", "javaType": "io.fabric8.kubernetes.api.model.SecurityContext" }, "stdin": { "type": "boolean", "description": "Whether this container should allocate a buffer for stdin in the container runtime; default is false" }, "terminationMessagePath": { "type": "string", "description": "path at which the file to which the container's termination message will be written is mounted into the container's filesystem; message written is intended to be brief final status" }, "tty": { "type": "boolean", "description": "Whether this container should allocate a TTY for itself" }, "volumeMounts": { "type": "array", "description": "pod volumes to mount into the container's filesyste; cannot be updated", "items": { "$ref": "#/definitions/kubernetes_VolumeMount", "javaType": "io.fabric8.kubernetes.api.model.VolumeMount" } }, "workingDir": { "type": "string", "description": "container's working directory; defaults to image's default; cannot be updated" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Container" }, "kubernetes_ContainerPort": { "type": "object", "description": "", "properties": { "containerPort": { "type": "integer", "description": "number of port to expose on the pod's IP address" }, "hostIP": { "type": "string", "description": "host IP to bind the port to" }, "hostPort": { "type": "integer", "description": "number of port to expose on the host; most containers do not need this" }, "name": { "type": "string", "description": "name for the port that can be referred to by services; must be an IANA_SVC_NAME and unique within the pod" }, "protocol": { "type": "string", "description": "protocol for port; must be UDP or TCP; TCP if unspecified" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerPort" }, "kubernetes_ContainerState": { "type": "object", "description": "", "properties": { "running": { "$ref": "#/definitions/kubernetes_ContainerStateRunning", "javaType": "io.fabric8.kubernetes.api.model.ContainerStateRunning" }, "terminated": { "$ref": "#/definitions/kubernetes_ContainerStateTerminated", "javaType": "io.fabric8.kubernetes.api.model.ContainerStateTerminated" }, "waiting": { "$ref": "#/definitions/kubernetes_ContainerStateWaiting", "javaType": "io.fabric8.kubernetes.api.model.ContainerStateWaiting" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerState" }, "kubernetes_ContainerStateRunning": { "type": "object", "description": "", "properties": { "startedAt": { "type": "string", "description": "time at which the container was last (re-)started" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerStateRunning" }, "kubernetes_ContainerStateTerminated": { "type": "object", "description": "", "properties": { "containerID": { "type": "string", "description": "container's ID in the format 'docker://\u003ccontainer_id\u003e'" }, "exitCode": { "type": "integer", "description": "exit status from the last termination of the container" }, "finishedAt": { "type": "string", "description": "time at which the container last terminated" }, "message": { "type": "string", "description": "message regarding the last termination of the container" }, "reason": { "type": "string", "description": "(brief) reason from the last termination of the container" }, "signal": { "type": "integer", "description": "signal from the last termination of the container" }, "startedAt": { "type": "string", "description": "time at which previous execution of the container started" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerStateTerminated" }, "kubernetes_ContainerStateWaiting": { "type": "object", "description": "", "properties": { "reason": { "type": "string", "description": "(brief) reason the container is not yet running" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerStateWaiting" }, "kubernetes_ContainerStatus": { "type": "object", "description": "", "properties": { "containerID": { "type": "string", "description": "container's ID in the format 'docker://\u003ccontainer_id\u003e'; see http://releases.k8s.io/HEAD/docs/user-guide/container-environment.md#container-information" }, "image": { "type": "string", "description": "image of the container; see http://releases.k8s.io/HEAD/docs/user-guide/images.md" }, "imageID": { "type": "string", "description": "ID of the container's image" }, "lastState": { "$ref": "#/definitions/kubernetes_ContainerState", "javaType": "io.fabric8.kubernetes.api.model.ContainerState" }, "name": { "type": "string", "description": "name of the container; must be a DNS_LABEL and unique within the pod; cannot be updated", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "ready": { "type": "boolean", "description": "specifies whether the container has passed its readiness probe" }, "restartCount": { "type": "integer", "description": "the number of times the container has been restarted" }, "state": { "$ref": "#/definitions/kubernetes_ContainerState", "javaType": "io.fabric8.kubernetes.api.model.ContainerState" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerStatus" }, "kubernetes_EmptyDirVolumeSource": { "type": "object", "description": "", "properties": { "medium": { "type": "string", "description": "type of storage used to back the volume; must be an empty string (default) or Memory; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#emptydir" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EmptyDirVolumeSource" }, "kubernetes_EndpointAddress": { "type": "object", "description": "", "properties": { "ip": { "type": "string", "description": "IP address of the endpoint" }, "targetRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EndpointAddress" }, "kubernetes_EndpointPort": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of this port", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "port": { "type": "integer", "description": "port number of the endpoint" }, "protocol": { "type": "string", "description": "protocol for this port; must be UDP or TCP; TCP if unspecified" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EndpointPort" }, "kubernetes_EndpointSubset": { "type": "object", "description": "", "properties": { "addresses": { "type": "array", "description": "IP addresses which offer the related ports", "items": { "$ref": "#/definitions/kubernetes_EndpointAddress", "javaType": "io.fabric8.kubernetes.api.model.EndpointAddress" } }, "ports": { "type": "array", "description": "port numbers available on the related IP addresses", "items": { "$ref": "#/definitions/kubernetes_EndpointPort", "javaType": "io.fabric8.kubernetes.api.model.EndpointPort" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EndpointSubset" }, "kubernetes_Endpoints": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Endpoints", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "subsets": { "type": "array", "description": "sets of addresses and ports that comprise a service", "items": { "$ref": "#/definitions/kubernetes_EndpointSubset", "javaType": "io.fabric8.kubernetes.api.model.EndpointSubset" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Endpoints", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_EndpointsList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of endpoints", "items": { "$ref": "#/definitions/kubernetes_Endpoints", "javaType": "io.fabric8.kubernetes.api.model.Endpoints" } }, "kind": { "type": "string", "description": "", "default": "EndpointsList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EndpointsList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_EnvVar": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the environment variable; must be a C_IDENTIFIER", "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" }, "value": { "type": "string", "description": "value of the environment variable; defaults to empty string; variable references $(VAR_NAME) are expanded using the previously defined environment varibles in the container and any service environment variables; if a variable cannot be resolved" }, "valueFrom": { "$ref": "#/definitions/kubernetes_EnvVarSource", "javaType": "io.fabric8.kubernetes.api.model.EnvVarSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EnvVar" }, "kubernetes_EnvVarSource": { "type": "object", "description": "", "properties": { "fieldRef": { "$ref": "#/definitions/kubernetes_ObjectFieldSelector", "javaType": "io.fabric8.kubernetes.api.model.ObjectFieldSelector" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EnvVarSource" }, "kubernetes_Event": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "count": { "type": "integer", "description": "the number of times this event has occurred" }, "firstTimestamp": { "type": "string", "description": "the time at which the event was first recorded" }, "involvedObject": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "kind": { "type": "string", "description": "", "default": "Event", "required": true }, "lastTimestamp": { "type": "string", "description": "the time at which the most recent occurrence of this event was recorded" }, "message": { "type": "string", "description": "human-readable description of the status of this operation" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "reason": { "type": "string", "description": "short" }, "source": { "$ref": "#/definitions/kubernetes_EventSource", "javaType": "io.fabric8.kubernetes.api.model.EventSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Event", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_EventList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of events", "items": { "$ref": "#/definitions/kubernetes_Event", "javaType": "io.fabric8.kubernetes.api.model.Event" } }, "kind": { "type": "string", "description": "", "default": "EventList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EventList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_EventSource": { "type": "object", "description": "", "properties": { "component": { "type": "string", "description": "component that generated the event" }, "host": { "type": "string", "description": "name of the host where the event is generated" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EventSource" }, "kubernetes_ExecAction": { "type": "object", "description": "", "properties": { "command": { "type": "array", "description": "command line to execute inside the container; working directory for the command is root ('/') in the container's file system; the command is exec'd", "items": { "type": "string", "description": "command line to execute inside the container; working directory for the command is root ('/') in the container's file system; the command is exec'd" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ExecAction" }, "kubernetes_GCEPersistentDiskVolumeSource": { "type": "object", "description": "", "properties": { "fsType": { "type": "string", "description": "file system type to mount" }, "partition": { "type": "integer", "description": "partition on the disk to mount (e.g." }, "pdName": { "type": "string", "description": "unique name of the PD resource in GCE; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#gcepersistentdisk" }, "readOnly": { "type": "boolean", "description": "read-only if true" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, "kubernetes_GitRepoVolumeSource": { "type": "object", "description": "", "properties": { "repository": { "type": "string", "description": "repository URL" }, "revision": { "type": "string", "description": "commit hash for the specified revision" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.GitRepoVolumeSource" }, "kubernetes_GlusterfsVolumeSource": { "type": "object", "description": "", "properties": { "endpoints": { "type": "string", "description": "gluster hosts endpoints name; see http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod" }, "path": { "type": "string", "description": "path to gluster volume; see http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod" }, "readOnly": { "type": "boolean", "description": "glusterfs volume to be mounted with read-only permissions; see http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, "kubernetes_HTTPGetAction": { "type": "object", "description": "", "properties": { "host": { "type": "string", "description": "hostname to connect to; defaults to pod IP" }, "path": { "type": "string", "description": "path to access on the HTTP server" }, "port": { "$ref": "#/definitions/kubernetes_util_IntOrString", "javaType": "io.fabric8.kubernetes.api.model.IntOrString" }, "scheme": { "type": "string", "description": "scheme to connect with" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.HTTPGetAction" }, "kubernetes_Handler": { "type": "object", "description": "", "properties": { "exec": { "$ref": "#/definitions/kubernetes_ExecAction", "javaType": "io.fabric8.kubernetes.api.model.ExecAction" }, "httpGet": { "$ref": "#/definitions/kubernetes_HTTPGetAction", "javaType": "io.fabric8.kubernetes.api.model.HTTPGetAction" }, "tcpSocket": { "$ref": "#/definitions/kubernetes_TCPSocketAction", "javaType": "io.fabric8.kubernetes.api.model.TCPSocketAction" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Handler" }, "kubernetes_HostPathVolumeSource": { "type": "object", "description": "", "properties": { "path": { "type": "string", "description": "path of the directory on the host; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#hostpath" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" }, "kubernetes_ISCSIVolumeSource": { "type": "object", "description": "", "properties": { "fsType": { "type": "string", "description": "file system type to mount" }, "iqn": { "type": "string", "description": "iSCSI Qualified Name" }, "lun": { "type": "integer", "description": "iscsi target lun number" }, "readOnly": { "type": "boolean", "description": "read-only if true" }, "targetPortal": { "type": "string", "description": "iSCSI target portal" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, "kubernetes_Lifecycle": { "type": "object", "description": "", "properties": { "postStart": { "$ref": "#/definitions/kubernetes_Handler", "javaType": "io.fabric8.kubernetes.api.model.Handler" }, "preStop": { "$ref": "#/definitions/kubernetes_Handler", "javaType": "io.fabric8.kubernetes.api.model.Handler" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Lifecycle" }, "kubernetes_List": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of objects", "items": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" } }, "kind": { "type": "string", "description": "", "default": "List", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.BaseKubernetesList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_ListMeta": { "type": "object", "description": "", "properties": { "resourceVersion": { "type": "string", "description": "string that identifies the internal version of this object that can be used by clients to determine when objects have changed; populated by the system" }, "selfLink": { "type": "string", "description": "URL for the object; populated by the system" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ListMeta" }, "kubernetes_LoadBalancerIngress": { "type": "object", "description": "", "properties": { "hostname": { "type": "string", "description": "hostname of ingress point" }, "ip": { "type": "string", "description": "IP address of ingress point" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerIngress" }, "kubernetes_LoadBalancerStatus": { "type": "object", "description": "", "properties": { "ingress": { "type": "array", "description": "load-balancer ingress points", "items": { "$ref": "#/definitions/kubernetes_LoadBalancerIngress", "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerIngress" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerStatus" }, "kubernetes_LocalObjectReference": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "kubernetes_MetadataFile": { "type": "object", "description": "", "properties": { "fieldRef": { "$ref": "#/definitions/kubernetes_ObjectFieldSelector", "javaType": "io.fabric8.kubernetes.api.model.ObjectFieldSelector" }, "name": { "type": "string", "description": "the name of the file to be created" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.MetadataFile" }, "kubernetes_MetadataVolumeSource": { "type": "object", "description": "", "properties": { "items": { "type": "array", "description": "list of metadata files", "items": { "$ref": "#/definitions/kubernetes_MetadataFile", "javaType": "io.fabric8.kubernetes.api.model.MetadataFile" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.MetadataVolumeSource" }, "kubernetes_NFSVolumeSource": { "type": "object", "description": "", "properties": { "path": { "type": "string", "description": "the path that is exported by the NFS server; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs" }, "readOnly": { "type": "boolean", "description": "forces the NFS export to be mounted with read-only permissions; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs" }, "server": { "type": "string", "description": "the hostname or IP address of the NFS server; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, "kubernetes_Namespace": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Namespace", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_NamespaceSpec", "javaType": "io.fabric8.kubernetes.api.model.NamespaceSpec" }, "status": { "$ref": "#/definitions/kubernetes_NamespaceStatus", "javaType": "io.fabric8.kubernetes.api.model.NamespaceStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Namespace", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_NamespaceList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "items is the list of Namespace objects in the list; see http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md", "items": { "$ref": "#/definitions/kubernetes_Namespace", "javaType": "io.fabric8.kubernetes.api.model.Namespace" } }, "kind": { "type": "string", "description": "", "default": "NamespaceList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamespaceList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_NamespaceSpec": { "type": "object", "description": "", "properties": { "finalizers": { "type": "array", "description": "an opaque list of values that must be empty to permanently remove object from storage; see http://releases.k8s.io/HEAD/docs/design/namespaces.md#finalizers", "items": { "type": "string", "description": "an opaque list of values that must be empty to permanently remove object from storage; see http://releases.k8s.io/HEAD/docs/design/namespaces.md#finalizers" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamespaceSpec" }, "kubernetes_NamespaceStatus": { "type": "object", "description": "", "properties": { "phase": { "type": "string", "description": "phase is the current lifecycle phase of the namespace; see http://releases.k8s.io/HEAD/docs/design/namespaces.md#phases" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamespaceStatus" }, "kubernetes_Node": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Node", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_NodeSpec", "javaType": "io.fabric8.kubernetes.api.model.NodeSpec" }, "status": { "$ref": "#/definitions/kubernetes_NodeStatus", "javaType": "io.fabric8.kubernetes.api.model.NodeStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Node", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_NodeAddress": { "type": "object", "description": "", "properties": { "address": { "type": "string", "description": "the node address" }, "type": { "type": "string", "description": "node address type" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeAddress" }, "kubernetes_NodeCondition": { "type": "object", "description": "", "properties": { "lastHeartbeatTime": { "type": "string", "description": "last time we got an update on a given condition" }, "lastTransitionTime": { "type": "string", "description": "last time the condition transit from one status to another" }, "message": { "type": "string", "description": "human readable message indicating details about last transition" }, "reason": { "type": "string", "description": "(brief) reason for the condition's last transition" }, "status": { "type": "string", "description": "status of the condition" }, "type": { "type": "string", "description": "type of node condition" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeCondition" }, "kubernetes_NodeList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of nodes", "items": { "$ref": "#/definitions/kubernetes_Node", "javaType": "io.fabric8.kubernetes.api.model.Node" } }, "kind": { "type": "string", "description": "", "default": "NodeList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_NodeSpec": { "type": "object", "description": "", "properties": { "externalID": { "type": "string", "description": "deprecated. External ID assigned to the node by some machine database (e.g. a cloud provider). Defaults to node name when empty." }, "podCIDR": { "type": "string", "description": "pod IP range assigned to the node" }, "providerID": { "type": "string", "description": "ID of the node assigned by the cloud provider in the format: \u003cProviderName\u003e://\u003cProviderSpecificNodeID\u003e" }, "unschedulable": { "type": "boolean", "description": "disable pod scheduling on the node; see http://releases.k8s.io/HEAD/docs/admin/node.md#manual-node-administration" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeSpec" }, "kubernetes_NodeStatus": { "type": "object", "description": "", "properties": { "addresses": { "type": "array", "description": "list of addresses reachable to the node; see http://releases.k8s.io/HEAD/docs/admin/node.md#node-addresses", "items": { "$ref": "#/definitions/kubernetes_NodeAddress", "javaType": "io.fabric8.kubernetes.api.model.NodeAddress" } }, "capacity": { "type": "object", "description": "compute resource capacity of the node; see http://releases.k8s.io/HEAD/docs/user-guide/compute-resources.md", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, "conditions": { "type": "array", "description": "list of node conditions observed; see http://releases.k8s.io/HEAD/docs/admin/node.md#node-condition", "items": { "$ref": "#/definitions/kubernetes_NodeCondition", "javaType": "io.fabric8.kubernetes.api.model.NodeCondition" } }, "nodeInfo": { "$ref": "#/definitions/kubernetes_NodeSystemInfo", "javaType": "io.fabric8.kubernetes.api.model.NodeSystemInfo" }, "phase": { "type": "string", "description": "most recently observed lifecycle phase of the node; see http://releases.k8s.io/HEAD/docs/admin/node.md#node-phase" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeStatus" }, "kubernetes_NodeSystemInfo": { "type": "object", "description": "", "properties": { "bootID": { "type": "string", "description": "boot id is the boot-id reported by the node" }, "containerRuntimeVersion": { "type": "string", "description": "Container runtime version reported by the node through runtime remote API (e.g. docker://1.5.0)" }, "kernelVersion": { "type": "string", "description": "Kernel version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64)" }, "kubeProxyVersion": { "type": "string", "description": "Kube-proxy version reported by the node" }, "kubeletVersion": { "type": "string", "description": "Kubelet version reported by the node" }, "machineID": { "type": "string", "description": "machine-id reported by the node" }, "osImage": { "type": "string", "description": "OS image used reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy))" }, "systemUUID": { "type": "string", "description": "system-uuid reported by the node" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeSystemInfo" }, "kubernetes_ObjectFieldSelector": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "version of the schema that fieldPath is written in terms of; defaults to v1" }, "fieldPath": { "type": "string", "description": "path of the field to select in the specified API version" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ObjectFieldSelector" }, "kubernetes_ObjectMeta": { "type": "object", "description": "", "properties": { "annotations": { "type": "object", "description": "map of string keys and values that can be used by external tooling to store and retrieve arbitrary metadata about objects; see http://releases.k8s.io/HEAD/docs/user-guide/annotations.md", "additionalProperties": { "type": "string", "description": "map of string keys and values that can be used by external tooling to store and retrieve arbitrary metadata about objects; see http://releases.k8s.io/HEAD/docs/user-guide/annotations.md" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "creationTimestamp": { "type": "string", "description": "RFC 3339 date and time at which the object was created; populated by the system" }, "deletionTimestamp": { "type": "string", "description": "RFC 3339 date and time at which the object will be deleted; populated by the system when a graceful deletion is requested" }, "generateName": { "type": "string", "description": "an optional prefix to use to generate a unique name; has the same validation rules as name; optional" }, "generation": { "type": "integer", "description": "a sequence number representing a specific generation of the desired state; populated by the system; read-only", "javaType": "Long" }, "labels": { "type": "object", "description": "map of string keys and values that can be used to organize and categorize objects; may match selectors of replication controllers and services; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md", "additionalProperties": { "type": "string", "description": "map of string keys and values that can be used to organize and categorize objects; may match selectors of replication controllers and services; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "name": { "type": "string", "description": "string that identifies an object. Must be unique within a namespace; cannot be updated; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "namespace": { "type": "string", "description": "namespace of the object; must be a DNS_LABEL; cannot be updated; see http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md", "maxLength": 253, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$" }, "resourceVersion": { "type": "string", "description": "string that identifies the internal version of this object that can be used by clients to determine when objects have changed; populated by the system" }, "selfLink": { "type": "string", "description": "URL for the object; populated by the system" }, "uid": { "type": "string", "description": "unique UUID across space and time; populated by the system; read-only; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#uids" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "kubernetes_ObjectReference": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "API version of the referent" }, "fieldPath": { "type": "string", "description": "if referring to a piece of an object instead of an entire object" }, "kind": { "type": "string", "description": "kind of the referent; see http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" }, "name": { "type": "string", "description": "name of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names" }, "namespace": { "type": "string", "description": "namespace of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md" }, "resourceVersion": { "type": "string", "description": "specific resourceVersion to which this reference is made" }, "uid": { "type": "string", "description": "uid of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#uids" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "kubernetes_PersistentVolume": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "PersistentVolume", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_PersistentVolumeSpec", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeSpec" }, "status": { "$ref": "#/definitions/kubernetes_PersistentVolumeStatus", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolume", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_PersistentVolumeClaim": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "PersistentVolumeClaim", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaimSpec", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpec" }, "status": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaimStatus", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaim", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_PersistentVolumeClaimList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "a list of persistent volume claims; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", "items": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaim", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaim" } }, "kind": { "type": "string", "description": "", "default": "PersistentVolumeClaimList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_PersistentVolumeClaimSpec": { "type": "object", "description": "", "properties": { "accessModes": { "type": "array", "description": "the desired access modes the volume should have; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1", "items": { "type": "string", "description": "the desired access modes the volume should have; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1" } }, "resources": { "$ref": "#/definitions/kubernetes_ResourceRequirements", "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "volumeName": { "type": "string", "description": "the binding reference to the persistent volume backing this claim" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpec" }, "kubernetes_PersistentVolumeClaimStatus": { "type": "object", "description": "", "properties": { "accessModes": { "type": "array", "description": "the actual access modes the volume has; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1", "items": { "type": "string", "description": "the actual access modes the volume has; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1" } }, "capacity": { "type": "object", "description": "the actual resources the volume has", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, "phase": { "type": "string", "description": "the current phase of the claim" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimStatus" }, "kubernetes_PersistentVolumeClaimVolumeSource": { "type": "object", "description": "", "properties": { "claimName": { "type": "string", "description": "the name of the claim in the same namespace to be mounted as a volume; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistentvolumeclaims" }, "readOnly": { "type": "boolean", "description": "mount volume as read-only when true; default false" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSource" }, "kubernetes_PersistentVolumeList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of persistent volumes; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md", "items": { "$ref": "#/definitions/kubernetes_PersistentVolume", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolume" } }, "kind": { "type": "string", "description": "", "default": "PersistentVolumeList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_PersistentVolumeSource": { "type": "object", "description": "", "properties": { "awsElasticBlockStore": { "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, "cephfs": { "$ref": "#/definitions/kubernetes_CephFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" }, "gcePersistentDisk": { "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, "glusterfs": { "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, "hostPath": { "$ref": "#/definitions/kubernetes_HostPathVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" }, "iscsi": { "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, "nfs": { "$ref": "#/definitions/kubernetes_NFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, "rbd": { "$ref": "#/definitions/kubernetes_RBDVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeSource" }, "kubernetes_PersistentVolumeSpec": { "type": "object", "description": "", "properties": { "accessModes": { "type": "array", "description": "all ways the volume can be mounted; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes", "items": { "type": "string", "description": "all ways the volume can be mounted; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes" } }, "awsElasticBlockStore": { "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, "capacity": { "type": "object", "description": "a description of the persistent volume's resources and capacityr; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#capacity", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, "cephfs": { "$ref": "#/definitions/kubernetes_CephFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" }, "claimRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "gcePersistentDisk": { "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, "glusterfs": { "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, "hostPath": { "$ref": "#/definitions/kubernetes_HostPathVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" }, "iscsi": { "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, "nfs": { "$ref": "#/definitions/kubernetes_NFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, "persistentVolumeReclaimPolicy": { "type": "string", "description": "what happens to a volume when released from its claim; Valid options are Retain (default) and Recycle. Recyling must be supported by the volume plugin underlying this persistent volume. See http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#recycling-policy" }, "rbd": { "$ref": "#/definitions/kubernetes_RBDVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeSpec" }, "kubernetes_PersistentVolumeStatus": { "type": "object", "description": "", "properties": { "message": { "type": "string", "description": "human-readable message indicating details about why the volume is in this state" }, "phase": { "type": "string", "description": "the current phase of a persistent volume; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#phase" }, "reason": { "type": "string", "description": "(brief) reason the volume is not is not available" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeStatus" }, "kubernetes_Pod": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Pod", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_PodSpec", "javaType": "io.fabric8.kubernetes.api.model.PodSpec" }, "status": { "$ref": "#/definitions/kubernetes_PodStatus", "javaType": "io.fabric8.kubernetes.api.model.PodStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Pod", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_PodCondition": { "type": "object", "description": "", "properties": { "status": { "type": "string", "description": "status of the condition" }, "type": { "type": "string", "description": "kind of the condition" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PodCondition" }, "kubernetes_PodList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of pods; see http://releases.k8s.io/HEAD/docs/user-guide/pods.md", "items": { "$ref": "#/definitions/kubernetes_Pod", "javaType": "io.fabric8.kubernetes.api.model.Pod" } }, "kind": { "type": "string", "description": "", "default": "PodList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PodList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_PodSpec": { "type": "object", "description": "", "properties": { "activeDeadlineSeconds": { "type": "integer", "description": "", "javaType": "Long" }, "containers": { "type": "array", "description": "list of containers belonging to the pod; cannot be updated; containers cannot currently be added or removed; there must be at least one container in a Pod; see http://releases.k8s.io/HEAD/docs/user-guide/containers.md", "items": { "$ref": "#/definitions/kubernetes_Container", "javaType": "io.fabric8.kubernetes.api.model.Container" } }, "dnsPolicy": { "type": "string", "description": "DNS policy for containers within the pod; one of 'ClusterFirst' or 'Default'" }, "host": { "type": "string", "description": "deprecated" }, "hostNetwork": { "type": "boolean", "description": "host networking requested for this pod" }, "imagePullSecrets": { "type": "array", "description": "list of references to secrets in the same namespace available for pulling the container images; see http://releases.k8s.io/HEAD/docs/user-guide/images.md#specifying-imagepullsecrets-on-a-pod", "items": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" } }, "nodeName": { "type": "string", "description": "node requested for this pod" }, "nodeSelector": { "type": "object", "description": "selector which must match a node's labels for the pod to be scheduled on that node; see http://releases.k8s.io/HEAD/docs/user-guide/node-selection/README.md", "additionalProperties": { "type": "string", "description": "selector which must match a node's labels for the pod to be scheduled on that node; see http://releases.k8s.io/HEAD/docs/user-guide/node-selection/README.md" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "restartPolicy": { "type": "string", "description": "restart policy for all containers within the pod; one of Always" }, "serviceAccount": { "type": "string", "description": "deprecated; use serviceAccountName instead" }, "serviceAccountName": { "type": "string", "description": "name of the ServiceAccount to use to run this pod; see http://releases.k8s.io/HEAD/docs/design/service_accounts.md" }, "terminationGracePeriodSeconds": { "type": "integer", "description": "optional duration in seconds the pod needs to terminate gracefully; may be decreased in delete request; value must be non-negative integer; the value zero indicates delete immediately; if this value is not set", "javaType": "Long" }, "volumes": { "type": "array", "description": "list of volumes that can be mounted by containers belonging to the pod; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md", "items": { "$ref": "#/definitions/kubernetes_Volume", "javaType": "io.fabric8.kubernetes.api.model.Volume" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PodSpec" }, "kubernetes_PodStatus": { "type": "object", "description": "", "properties": { "conditions": { "type": "array", "description": "current service state of pod; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#pod-conditions", "items": { "$ref": "#/definitions/kubernetes_PodCondition", "javaType": "io.fabric8.kubernetes.api.model.PodCondition" } }, "containerStatuses": { "type": "array", "description": "list of container statuses; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-statuses", "items": { "$ref": "#/definitions/kubernetes_ContainerStatus", "javaType": "io.fabric8.kubernetes.api.model.ContainerStatus" } }, "hostIP": { "type": "string", "description": "IP address of the host to which the pod is assigned; empty if not yet scheduled" }, "message": { "type": "string", "description": "human readable message indicating details about why the pod is in this condition" }, "phase": { "type": "string", "description": "current condition of the pod; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#pod-phase" }, "podIP": { "type": "string", "description": "IP address allocated to the pod; routable at least within the cluster; empty if not yet allocated" }, "reason": { "type": "string", "description": "(brief-CamelCase) reason indicating details about why the pod is in this condition" }, "startTime": { "type": "string", "description": "RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod." } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PodStatus" }, "kubernetes_PodTemplateSpec": { "type": "object", "description": "", "properties": { "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_PodSpec", "javaType": "io.fabric8.kubernetes.api.model.PodSpec" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PodTemplateSpec" }, "kubernetes_Probe": { "type": "object", "description": "", "properties": { "exec": { "$ref": "#/definitions/kubernetes_ExecAction", "javaType": "io.fabric8.kubernetes.api.model.ExecAction" }, "httpGet": { "$ref": "#/definitions/kubernetes_HTTPGetAction", "javaType": "io.fabric8.kubernetes.api.model.HTTPGetAction" }, "initialDelaySeconds": { "type": "integer", "description": "number of seconds after the container has started before liveness probes are initiated; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-probes", "javaType": "Long" }, "tcpSocket": { "$ref": "#/definitions/kubernetes_TCPSocketAction", "javaType": "io.fabric8.kubernetes.api.model.TCPSocketAction" }, "timeoutSeconds": { "type": "integer", "description": "number of seconds after which liveness probes timeout; defaults to 1 second; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-probes", "javaType": "Long" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Probe" }, "kubernetes_RBDVolumeSource": { "type": "object", "description": "", "properties": { "fsType": { "type": "string", "description": "file system type to mount" }, "image": { "type": "string", "description": "rados image name; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" }, "keyring": { "type": "string", "description": "keyring is the path to key ring for rados user; default is /etc/ceph/keyring; optional; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" }, "monitors": { "type": "array", "description": "a collection of Ceph monitors; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it", "items": { "type": "string", "description": "a collection of Ceph monitors; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" } }, "pool": { "type": "string", "description": "rados pool name; default is rbd; optional; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" }, "readOnly": { "type": "boolean", "description": "rbd volume to be mounted with read-only permissions; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" }, "secretRef": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "user": { "type": "string", "description": "rados user name; default is admin; optional; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" }, "kubernetes_ReplicationController": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ReplicationController", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_ReplicationControllerSpec", "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerSpec" }, "status": { "$ref": "#/definitions/kubernetes_ReplicationControllerStatus", "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ReplicationController", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_ReplicationControllerList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of replication controllers; see http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md", "items": { "$ref": "#/definitions/kubernetes_ReplicationController", "javaType": "io.fabric8.kubernetes.api.model.ReplicationController" } }, "kind": { "type": "string", "description": "", "default": "ReplicationControllerList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_ReplicationControllerSpec": { "type": "object", "description": "", "properties": { "replicas": { "type": "integer", "description": "number of replicas desired; defaults to 1; see http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md#what-is-a-replication-controller" }, "selector": { "type": "object", "description": "label keys and values that must match in order to be controlled by this replication controller", "additionalProperties": { "type": "string", "description": "label keys and values that must match in order to be controlled by this replication controller" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "template": { "$ref": "#/definitions/kubernetes_PodTemplateSpec", "javaType": "io.fabric8.kubernetes.api.model.PodTemplateSpec" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerSpec" }, "kubernetes_ReplicationControllerStatus": { "type": "object", "description": "", "properties": { "observedGeneration": { "type": "integer", "description": "reflects the generation of the most recently observed replication controller", "javaType": "Long" }, "replicas": { "type": "integer", "description": "most recently oberved number of replicas; see http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md#what-is-a-replication-controller" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerStatus" }, "kubernetes_ResourceQuota": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ResourceQuota", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_ResourceQuotaSpec", "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaSpec" }, "status": { "$ref": "#/definitions/kubernetes_ResourceQuotaStatus", "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ResourceQuota", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_ResourceQuotaList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "items is a list of ResourceQuota objects; see http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", "items": { "$ref": "#/definitions/kubernetes_ResourceQuota", "javaType": "io.fabric8.kubernetes.api.model.ResourceQuota" } }, "kind": { "type": "string", "description": "", "default": "ResourceQuotaList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_ResourceQuotaSpec": { "type": "object", "description": "", "properties": { "hard": { "type": "object", "description": "hard is the set of desired hard limits for each named resource; see http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaSpec" }, "kubernetes_ResourceQuotaStatus": { "type": "object", "description": "", "properties": { "hard": { "type": "object", "description": "hard is the set of enforced hard limits for each named resource; see http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, "used": { "type": "object", "description": "used is the current observed total usage of the resource in the namespace", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaStatus" }, "kubernetes_ResourceRequirements": { "type": "object", "description": "", "properties": { "limits": { "type": "object", "description": "Maximum amount of compute resources allowed; see http://releases.k8s.io/HEAD/docs/design/resources.md#resource-specifications", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, "requests": { "type": "object", "description": "Minimum amount of resources requested; if Requests is omitted for a container", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "kubernetes_RunAsUserStrategyOptions": { "type": "object", "description": "", "properties": { "type": { "type": "string", "description": "strategy used to generate RunAsUser" }, "uid": { "type": "integer", "description": "the uid to always run as; required for MustRunAs", "javaType": "Long" }, "uidRangeMax": { "type": "integer", "description": "max value for range based allocators", "javaType": "Long" }, "uidRangeMin": { "type": "integer", "description": "min value for range based allocators", "javaType": "Long" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.RunAsUserStrategyOptions" }, "kubernetes_SELinuxContextStrategyOptions": { "type": "object", "description": "", "properties": { "seLinuxOptions": { "$ref": "#/definitions/kubernetes_SELinuxOptions", "javaType": "io.fabric8.kubernetes.api.model.SELinuxOptions" }, "type": { "type": "string", "description": "strategy used to generate the SELinux context" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SELinuxContextStrategyOptions" }, "kubernetes_SELinuxOptions": { "type": "object", "description": "", "properties": { "level": { "type": "string", "description": "the level label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" }, "role": { "type": "string", "description": "the role label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" }, "type": { "type": "string", "description": "the type label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" }, "user": { "type": "string", "description": "the user label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SELinuxOptions" }, "kubernetes_Secret": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "data": { "type": "object", "description": "data contains the secret data. Each key must be a valid DNS_SUBDOMAIN or leading dot followed by valid DNS_SUBDOMAIN. Each value must be a base64 encoded string as described in https://tools.ietf.org/html/rfc4648#section-4", "additionalProperties": { "type": "string", "description": "data contains the secret data. Each key must be a valid DNS_SUBDOMAIN or leading dot followed by valid DNS_SUBDOMAIN. Each value must be a base64 encoded string as described in https://tools.ietf.org/html/rfc4648#section-4" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "kind": { "type": "string", "description": "", "default": "Secret", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "type": { "type": "string", "description": "type facilitates programmatic handling of secret data" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Secret", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_SecretList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "items is a list of secret objects; see http://releases.k8s.io/HEAD/docs/user-guide/secrets.md", "items": { "$ref": "#/definitions/kubernetes_Secret", "javaType": "io.fabric8.kubernetes.api.model.Secret" } }, "kind": { "type": "string", "description": "", "default": "SecretList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SecretList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_SecretVolumeSource": { "type": "object", "description": "", "properties": { "secretName": { "type": "string", "description": "secretName is the name of a secret in the pod's namespace; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#secrets" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SecretVolumeSource" }, "kubernetes_SecurityContext": { "type": "object", "description": "", "properties": { "capabilities": { "$ref": "#/definitions/kubernetes_Capabilities", "javaType": "io.fabric8.kubernetes.api.model.Capabilities" }, "privileged": { "type": "boolean", "description": "run the container in privileged mode; see http://releases.k8s.io/HEAD/docs/design/security_context.md#security-context" }, "runAsNonRoot": { "type": "boolean", "description": "indicates the container must be run as a non-root user either by specifying the runAsUser or in the image specification" }, "runAsUser": { "type": "integer", "description": "the user id that runs the first process in the container; see http://releases.k8s.io/HEAD/docs/design/security_context.md#security-context", "javaType": "Long" }, "seLinuxOptions": { "$ref": "#/definitions/kubernetes_SELinuxOptions", "javaType": "io.fabric8.kubernetes.api.model.SELinuxOptions" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SecurityContext" }, "kubernetes_SecurityContextConstraints": { "type": "object", "description": "", "properties": { "allowHostDirVolumePlugin": { "type": "boolean", "description": "allow the use of the host dir volume plugin" }, "allowHostNetwork": { "type": "boolean", "description": "allow the use of the hostNetwork in the pod spec" }, "allowHostPorts": { "type": "boolean", "description": "allow the use of the host ports in the containers" }, "allowPrivilegedContainer": { "type": "boolean", "description": "allow containers to run as privileged" }, "allowedCapabilities": { "type": "array", "description": "capabilities that are allowed to be added", "items": { "type": "string", "description": "capabilities that are allowed to be added" } }, "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "groups": { "type": "array", "description": "groups allowed to use this SecurityContextConstraints", "items": { "type": "string", "description": "groups allowed to use this SecurityContextConstraints" } }, "kind": { "type": "string", "description": "", "default": "SecurityContextConstraints", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "runAsUser": { "$ref": "#/definitions/kubernetes_RunAsUserStrategyOptions", "javaType": "io.fabric8.kubernetes.api.model.RunAsUserStrategyOptions" }, "seLinuxContext": { "$ref": "#/definitions/kubernetes_SELinuxContextStrategyOptions", "javaType": "io.fabric8.kubernetes.api.model.SELinuxContextStrategyOptions" }, "users": { "type": "array", "description": "users allowed to use this SecurityContextConstraints", "items": { "type": "string", "description": "users allowed to use this SecurityContextConstraints" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraints", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_SecurityContextConstraintsList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_SecurityContextConstraints", "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraints" } }, "kind": { "type": "string", "description": "", "default": "SecurityContextConstraintsList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraintsList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_Service": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Service", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_ServiceSpec", "javaType": "io.fabric8.kubernetes.api.model.ServiceSpec" }, "status": { "$ref": "#/definitions/kubernetes_ServiceStatus", "javaType": "io.fabric8.kubernetes.api.model.ServiceStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Service", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_ServiceAccount": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "imagePullSecrets": { "type": "array", "description": "list of references to secrets in the same namespace available for pulling container images; see http://releases.k8s.io/HEAD/docs/user-guide/secrets.md#manually-specifying-an-imagepullsecret", "items": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" } }, "kind": { "type": "string", "description": "", "default": "ServiceAccount", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "secrets": { "type": "array", "description": "list of secrets that can be used by pods running as this service account; see http://releases.k8s.io/HEAD/docs/user-guide/secrets.md", "items": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServiceAccount", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_ServiceAccountList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of ServiceAccounts; see http://releases.k8s.io/HEAD/docs/design/service_accounts.md#service-accounts", "items": { "$ref": "#/definitions/kubernetes_ServiceAccount", "javaType": "io.fabric8.kubernetes.api.model.ServiceAccount" } }, "kind": { "type": "string", "description": "", "default": "ServiceAccountList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServiceAccountList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_ServiceList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of services", "items": { "$ref": "#/definitions/kubernetes_Service", "javaType": "io.fabric8.kubernetes.api.model.Service" } }, "kind": { "type": "string", "description": "", "default": "ServiceList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServiceList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_ServicePort": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "the name of this port; optional if only one port is defined", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "nodePort": { "type": "integer", "description": "the port on each node on which this service is exposed when type=NodePort or LoadBalancer; usually assigned by the system; if specified" }, "port": { "type": "integer", "description": "the port number that is exposed" }, "protocol": { "type": "string", "description": "the protocol used by this port; must be UDP or TCP; TCP if unspecified" }, "targetPort": { "$ref": "#/definitions/kubernetes_util_IntOrString", "javaType": "io.fabric8.kubernetes.api.model.IntOrString" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServicePort" }, "kubernetes_ServiceSpec": { "type": "object", "description": "", "properties": { "clusterIP": { "type": "string", "description": "IP address of the service; usually assigned by the system; if specified" }, "deprecatedPublicIPs": { "type": "array", "description": "deprecated. externally visible IPs (e.g. load balancers) that should be proxied to this service", "items": { "type": "string", "description": "deprecated. externally visible IPs (e.g. load balancers) that should be proxied to this service" } }, "portalIP": { "type": "string", "description": "deprecated" }, "ports": { "type": "array", "description": "ports exposed by the service; see http://releases.k8s.io/HEAD/docs/user-guide/services.md#virtual-ips-and-service-proxies", "items": { "$ref": "#/definitions/kubernetes_ServicePort", "javaType": "io.fabric8.kubernetes.api.model.ServicePort" } }, "selector": { "type": "object", "description": "label keys and values that must match in order to receive traffic for this service; if empty", "additionalProperties": { "type": "string", "description": "label keys and values that must match in order to receive traffic for this service; if empty" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "sessionAffinity": { "type": "string", "description": "enable client IP based session affinity; must be ClientIP or None; defaults to None; see http://releases.k8s.io/HEAD/docs/user-guide/services.md#virtual-ips-and-service-proxies" }, "type": { "type": "string", "description": "type of this service; must be ClusterIP" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServiceSpec" }, "kubernetes_ServiceStatus": { "type": "object", "description": "", "properties": { "loadBalancer": { "$ref": "#/definitions/kubernetes_LoadBalancerStatus", "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServiceStatus" }, "kubernetes_Status": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "code": { "type": "integer", "description": "suggested HTTP return code for this status; 0 if not set" }, "details": { "$ref": "#/definitions/kubernetes_StatusDetails", "javaType": "io.fabric8.kubernetes.api.model.StatusDetails" }, "kind": { "type": "string", "description": "", "default": "Status", "required": true }, "message": { "type": "string", "description": "human-readable description of the status of this operation" }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" }, "reason": { "type": "string", "description": "machine-readable description of why this operation is in the 'Failure' status; if this value is empty there is no information available; a reason clarifies an HTTP status code but does not override it" }, "status": { "type": "string", "description": "status of the operation; either Success" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Status" }, "kubernetes_StatusCause": { "type": "object", "description": "", "properties": { "field": { "type": "string", "description": "field of the resource that has caused this error" }, "message": { "type": "string", "description": "human-readable description of the cause of the error; this field may be presented as-is to a reader" }, "reason": { "type": "string", "description": "machine-readable description of the cause of the error; if this value is empty there is no information available" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.StatusCause" }, "kubernetes_StatusDetails": { "type": "object", "description": "", "properties": { "causes": { "type": "array", "description": "the Causes array includes more details associated with the StatusReason failure; not all StatusReasons may provide detailed causes", "items": { "$ref": "#/definitions/kubernetes_StatusCause", "javaType": "io.fabric8.kubernetes.api.model.StatusCause" } }, "kind": { "type": "string", "description": "the kind attribute of the resource associated with the status StatusReason; on some operations may differ from the requested resource Kind; see http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" }, "name": { "type": "string", "description": "the name attribute of the resource associated with the status StatusReason (when there is a single name which can be described)" }, "retryAfterSeconds": { "type": "integer", "description": "the number of seconds before the client should attempt to retry this operation" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.StatusDetails" }, "kubernetes_TCPSocketAction": { "type": "object", "description": "", "properties": { "port": { "$ref": "#/definitions/kubernetes_util_IntOrString", "javaType": "io.fabric8.kubernetes.api.model.IntOrString" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.TCPSocketAction" }, "kubernetes_TypeMeta": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "version of the schema the object should have; see http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources" }, "kind": { "type": "string", "description": "kind of object" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.TypeMeta" }, "kubernetes_Volume": { "type": "object", "description": "", "properties": { "awsElasticBlockStore": { "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, "cephfs": { "$ref": "#/definitions/kubernetes_CephFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" }, "emptyDir": { "$ref": "#/definitions/kubernetes_EmptyDirVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.EmptyDirVolumeSource" }, "gcePersistentDisk": { "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, "gitRepo": { "$ref": "#/definitions/kubernetes_GitRepoVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GitRepoVolumeSource" }, "glusterfs": { "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, "hostPath": { "$ref": "#/definitions/kubernetes_HostPathVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" }, "iscsi": { "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, "metadata": { "$ref": "#/definitions/kubernetes_MetadataVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.MetadataVolumeSource" }, "name": { "type": "string", "description": "volume name; must be a DNS_LABEL and unique within the pod; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "nfs": { "$ref": "#/definitions/kubernetes_NFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, "persistentVolumeClaim": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaimVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSource" }, "rbd": { "$ref": "#/definitions/kubernetes_RBDVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" }, "secret": { "$ref": "#/definitions/kubernetes_SecretVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.SecretVolumeSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Volume" }, "kubernetes_VolumeMount": { "type": "object", "description": "", "properties": { "mountPath": { "type": "string", "description": "path within the container at which the volume should be mounted" }, "name": { "type": "string", "description": "name of the volume to mount" }, "readOnly": { "type": "boolean", "description": "mounted read-only if true" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.VolumeMount" }, "kubernetes_VolumeSource": { "type": "object", "description": "", "properties": { "awsElasticBlockStore": { "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, "cephfs": { "$ref": "#/definitions/kubernetes_CephFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" }, "emptyDir": { "$ref": "#/definitions/kubernetes_EmptyDirVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.EmptyDirVolumeSource" }, "gcePersistentDisk": { "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, "gitRepo": { "$ref": "#/definitions/kubernetes_GitRepoVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GitRepoVolumeSource" }, "glusterfs": { "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, "hostPath": { "$ref": "#/definitions/kubernetes_HostPathVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" }, "iscsi": { "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, "metadata": { "$ref": "#/definitions/kubernetes_MetadataVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.MetadataVolumeSource" }, "nfs": { "$ref": "#/definitions/kubernetes_NFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, "persistentVolumeClaim": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaimVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSource" }, "rbd": { "$ref": "#/definitions/kubernetes_RBDVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" }, "secret": { "$ref": "#/definitions/kubernetes_SecretVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.SecretVolumeSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.VolumeSource" }, "kubernetes_config_AuthInfo": { "type": "object", "description": "", "properties": { "client-certificate": { "type": "string", "description": "" }, "client-certificate-data": { "type": "string", "description": "" }, "client-key": { "type": "string", "description": "" }, "client-key-data": { "type": "string", "description": "" }, "extensions": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedExtension", "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } }, "password": { "type": "string", "description": "" }, "token": { "type": "string", "description": "" }, "username": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.AuthInfo" }, "kubernetes_config_Cluster": { "type": "object", "description": "", "properties": { "api-version": { "type": "string", "description": "" }, "certificate-authority": { "type": "string", "description": "" }, "certificate-authority-data": { "type": "string", "description": "" }, "extensions": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedExtension", "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } }, "insecure-skip-tls-verify": { "type": "boolean", "description": "" }, "server": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Cluster" }, "kubernetes_config_Config": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "" }, "clusters": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedCluster", "javaType": "io.fabric8.kubernetes.api.model.NamedCluster" } }, "contexts": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedContext", "javaType": "io.fabric8.kubernetes.api.model.NamedContext" } }, "current-context": { "type": "string", "description": "" }, "extensions": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedExtension", "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } }, "kind": { "type": "string", "description": "" }, "preferences": { "$ref": "#/definitions/kubernetes_config_Preferences", "javaType": "io.fabric8.kubernetes.api.model.Preferences" }, "users": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedAuthInfo", "javaType": "io.fabric8.kubernetes.api.model.NamedAuthInfo" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Config" }, "kubernetes_config_Context": { "type": "object", "description": "", "properties": { "cluster": { "type": "string", "description": "" }, "extensions": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedExtension", "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } }, "namespace": { "type": "string", "description": "" }, "user": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Context" }, "kubernetes_config_NamedAuthInfo": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "" }, "user": { "$ref": "#/definitions/kubernetes_config_AuthInfo", "javaType": "io.fabric8.kubernetes.api.model.AuthInfo" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamedAuthInfo" }, "kubernetes_config_NamedCluster": { "type": "object", "description": "", "properties": { "cluster": { "$ref": "#/definitions/kubernetes_config_Cluster", "javaType": "io.fabric8.kubernetes.api.model.Cluster" }, "name": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamedCluster" }, "kubernetes_config_NamedContext": { "type": "object", "description": "", "properties": { "context": { "$ref": "#/definitions/kubernetes_config_Context", "javaType": "io.fabric8.kubernetes.api.model.Context" }, "name": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamedContext" }, "kubernetes_config_NamedExtension": { "type": "object", "description": "", "properties": { "extension": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "name": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" }, "kubernetes_config_Preferences": { "type": "object", "description": "", "properties": { "colors": { "type": "boolean", "description": "" }, "extensions": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedExtension", "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Preferences" }, "kubernetes_resource_Quantity": { "type": "object", "description": "", "properties": { "Amount": { "$ref": "#/definitions/speter_inf_Dec", "javaType": "io.fabric8.openshift.api.model.Dec" }, "Format": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "kubernetes_runtime_RawExtension": { "type": "object", "description": "", "properties": { "RawJSON": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "kubernetes_util_IntOrString": { "type": "object", "description": "", "properties": { "IntVal": { "type": "integer", "description": "" }, "Kind": { "type": "integer", "description": "" }, "StrVal": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.IntOrString" }, "kubernetes_watch_WatchEvent": { "type": "object", "description": "", "properties": { "object": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "type": { "type": "string", "description": "the type of watch event; may be ADDED" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.WatchEvent" }, "os_authorization_AuthorizationAttributes": { "type": "object", "description": "", "properties": { "content": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "namespace": { "type": "string", "description": "namespace of the action being requested" }, "resource": { "type": "string", "description": "one of the existing resource types" }, "resourceName": { "type": "string", "description": "name of the resource being requested for a get or delete" }, "verb": { "type": "string", "description": "one of get" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.AuthorizationAttributes" }, "os_authorization_ClusterPolicy": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ClusterPolicy", "required": true }, "lastModified": { "type": "string", "description": "last time any part of the object was created" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "roles": { "type": "array", "description": "all the roles held by this policy", "items": { "$ref": "#/definitions/os_authorization_NamedClusterRole", "javaType": "io.fabric8.openshift.api.model.NamedClusterRole" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterPolicy", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_ClusterPolicyBinding": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ClusterPolicyBinding", "required": true }, "lastModified": { "type": "string", "description": "last time any part of the object was created" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "policyRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "roleBindings": { "type": "array", "description": "all the role bindings held by this policy", "items": { "$ref": "#/definitions/os_authorization_NamedClusterRoleBinding", "javaType": "io.fabric8.openshift.api.model.NamedClusterRoleBinding" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBinding", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_ClusterPolicyBindingList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of cluster policy bindings", "items": { "$ref": "#/definitions/os_authorization_ClusterPolicyBinding", "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBinding" } }, "kind": { "type": "string", "description": "", "default": "ClusterPolicyBindingList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBindingList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_ClusterPolicyList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of cluster policies", "items": { "$ref": "#/definitions/os_authorization_ClusterPolicy", "javaType": "io.fabric8.openshift.api.model.ClusterPolicy" } }, "kind": { "type": "string", "description": "", "default": "ClusterPolicyList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterPolicyList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_ClusterRole": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ClusterRole", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "rules": { "type": "array", "description": "list of policy rules", "items": { "$ref": "#/definitions/os_authorization_PolicyRule", "javaType": "io.fabric8.openshift.api.model.PolicyRule" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterRole", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_ClusterRoleBinding": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "groupNames": { "type": "array", "description": "all the groups directly bound to the role", "items": { "type": "string", "description": "all the groups directly bound to the role" } }, "kind": { "type": "string", "description": "", "default": "ClusterRoleBinding", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "roleRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "subjects": { "type": "array", "description": "references to subjects bound to the role. Only User", "items": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "userNames": { "type": "array", "description": "all user names directly bound to the role", "items": { "type": "string", "description": "all user names directly bound to the role" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_ClusterRoleBindingList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of cluster role bindings", "items": { "$ref": "#/definitions/os_authorization_ClusterRoleBinding", "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding" } }, "kind": { "type": "string", "description": "", "default": "ClusterRoleBindingList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterRoleBindingList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_LocalSubjectAccessReview": { "type": "object", "description": "", "properties": { "TypeMeta": { "$ref": "#/definitions/kubernetes_TypeMeta", "javaType": "io.fabric8.kubernetes.api.model.TypeMeta" }, "content": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "groups": { "type": "array", "description": "optional", "items": { "type": "string", "description": "optional" } }, "namespace": { "type": "string", "description": "namespace of the action being requested" }, "resource": { "type": "string", "description": "one of the existing resource types" }, "resourceName": { "type": "string", "description": "name of the resource being requested for a get or delete" }, "user": { "type": "string", "description": "optional" }, "verb": { "type": "string", "description": "one of get" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.LocalSubjectAccessReview" }, "os_authorization_NamedClusterRole": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the cluster role" }, "role": { "$ref": "#/definitions/os_authorization_ClusterRole", "javaType": "io.fabric8.openshift.api.model.ClusterRole" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedClusterRole" }, "os_authorization_NamedClusterRoleBinding": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the cluster role binding" }, "roleBinding": { "$ref": "#/definitions/os_authorization_ClusterRoleBinding", "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedClusterRoleBinding" }, "os_authorization_NamedRole": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the role" }, "role": { "$ref": "#/definitions/os_authorization_Role", "javaType": "io.fabric8.openshift.api.model.Role" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedRole" }, "os_authorization_NamedRoleBinding": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the roleBinding" }, "roleBinding": { "$ref": "#/definitions/os_authorization_RoleBinding", "javaType": "io.fabric8.openshift.api.model.RoleBinding" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedRoleBinding" }, "os_authorization_Policy": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Policy", "required": true }, "lastModified": { "type": "string", "description": "last time that any part of the policy was created" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "roles": { "type": "array", "description": "roles held by this policy", "items": { "$ref": "#/definitions/os_authorization_NamedRole", "javaType": "io.fabric8.openshift.api.model.NamedRole" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Policy", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_PolicyBinding": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "PolicyBinding", "required": true }, "lastModified": { "type": "string", "description": "last time that any part of the object was created" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "policyRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "roleBindings": { "type": "array", "description": "all roleBindings held by this policyBinding", "items": { "$ref": "#/definitions/os_authorization_NamedRoleBinding", "javaType": "io.fabric8.openshift.api.model.NamedRoleBinding" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.PolicyBinding", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_PolicyBindingList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of policy bindings", "items": { "$ref": "#/definitions/os_authorization_PolicyBinding", "javaType": "io.fabric8.openshift.api.model.PolicyBinding" } }, "kind": { "type": "string", "description": "", "default": "PolicyBindingList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.PolicyBindingList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_PolicyList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of policies", "items": { "$ref": "#/definitions/os_authorization_Policy", "javaType": "io.fabric8.openshift.api.model.Policy" } }, "kind": { "type": "string", "description": "", "default": "PolicyList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.PolicyList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_PolicyRule": { "type": "object", "description": "", "properties": { "attributeRestrictions": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "nonResourceURLs": { "type": "array", "description": "set of partial urls that a user should have access to. *s are allowed", "items": { "type": "string", "description": "set of partial urls that a user should have access to. *s are allowed" } }, "resourceNames": { "type": "array", "description": "optional white list of names that the rule applies to. An empty set means that everything is allowed.", "items": { "type": "string", "description": "optional white list of names that the rule applies to. An empty set means that everything is allowed." } }, "resources": { "type": "array", "description": "list of resources this rule applies to. * represents all resources.", "items": { "type": "string", "description": "list of resources this rule applies to. * represents all resources." } }, "verbs": { "type": "array", "description": "list of verbs that apply to ALL the resourceKinds and attributeRestrictions contained in this rule. The verb * represents all kinds.", "items": { "type": "string", "description": "list of verbs that apply to ALL the resourceKinds and attributeRestrictions contained in this rule. The verb * represents all kinds." } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.PolicyRule" }, "os_authorization_Role": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Role", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "rules": { "type": "array", "description": "all the rules for this role", "items": { "$ref": "#/definitions/os_authorization_PolicyRule", "javaType": "io.fabric8.openshift.api.model.PolicyRule" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Role", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_RoleBinding": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "groupNames": { "type": "array", "description": "all the groups directly bound to the role", "items": { "type": "string", "description": "all the groups directly bound to the role" } }, "kind": { "type": "string", "description": "", "default": "RoleBinding", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "roleRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "subjects": { "type": "array", "description": "references to subjects bound to the role. Only User", "items": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "userNames": { "type": "array", "description": "all the usernames directly bound to the role", "items": { "type": "string", "description": "all the usernames directly bound to the role" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RoleBinding", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_RoleBindingList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of role bindings", "items": { "$ref": "#/definitions/os_authorization_RoleBinding", "javaType": "io.fabric8.openshift.api.model.RoleBinding" } }, "kind": { "type": "string", "description": "", "default": "RoleBindingList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RoleBindingList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_RoleList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of roles", "items": { "$ref": "#/definitions/os_authorization_Role", "javaType": "io.fabric8.openshift.api.model.Role" } }, "kind": { "type": "string", "description": "", "default": "RoleList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RoleList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_SubjectAccessReview": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "content": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "groups": { "type": "array", "description": "optional", "items": { "type": "string", "description": "optional" } }, "kind": { "type": "string", "description": "", "default": "SubjectAccessReview", "required": true }, "namespace": { "type": "string", "description": "namespace of the action being requested" }, "resource": { "type": "string", "description": "one of the existing resource types" }, "resourceName": { "type": "string", "description": "name of the resource being requested for a get or delete" }, "user": { "type": "string", "description": "optional" }, "verb": { "type": "string", "description": "one of get" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.SubjectAccessReview" }, "os_authorization_SubjectAccessReviewResponse": { "type": "object", "description": "", "properties": { "allowed": { "type": "boolean", "description": "true if the action would be allowed" }, "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "SubjectAccessReviewResponse", "required": true }, "namespace": { "type": "string", "description": "the namespace used for the access review" }, "reason": { "type": "string", "description": "reason is optional" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.SubjectAccessReviewResponse" }, "os_build_Build": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Build", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_build_BuildSpec", "javaType": "io.fabric8.openshift.api.model.BuildSpec" }, "status": { "$ref": "#/definitions/os_build_BuildStatus", "javaType": "io.fabric8.openshift.api.model.BuildStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Build", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_build_BuildConfig": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "BuildConfig", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_build_BuildConfigSpec", "javaType": "io.fabric8.openshift.api.model.BuildConfigSpec" }, "status": { "$ref": "#/definitions/os_build_BuildConfigStatus", "javaType": "io.fabric8.openshift.api.model.BuildConfigStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildConfig", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_build_BuildConfigList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of build configs", "items": { "$ref": "#/definitions/os_build_BuildConfig", "javaType": "io.fabric8.openshift.api.model.BuildConfig" } }, "kind": { "type": "string", "description": "", "default": "BuildConfigList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildConfigList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_build_BuildConfigSpec": { "type": "object", "description": "", "properties": { "output": { "$ref": "#/definitions/os_build_BuildOutput", "javaType": "io.fabric8.openshift.api.model.BuildOutput" }, "resources": { "$ref": "#/definitions/kubernetes_ResourceRequirements", "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "revision": { "$ref": "#/definitions/os_build_SourceRevision", "javaType": "io.fabric8.openshift.api.model.SourceRevision" }, "serviceAccount": { "type": "string", "description": "the name of the service account to use to run pods created by the build" }, "source": { "$ref": "#/definitions/os_build_BuildSource", "javaType": "io.fabric8.openshift.api.model.BuildSource" }, "strategy": { "$ref": "#/definitions/os_build_BuildStrategy", "javaType": "io.fabric8.openshift.api.model.BuildStrategy" }, "triggers": { "type": "array", "description": "determines how new builds can be launched from a build config. if no triggers are defined", "items": { "$ref": "#/definitions/os_build_BuildTriggerPolicy", "javaType": "io.fabric8.openshift.api.model.BuildTriggerPolicy" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildConfigSpec" }, "os_build_BuildConfigStatus": { "type": "object", "description": "", "properties": { "lastVersion": { "type": "integer", "description": "used to inform about number of last triggered build" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildConfigStatus" }, "os_build_BuildList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of builds", "items": { "$ref": "#/definitions/os_build_Build", "javaType": "io.fabric8.openshift.api.model.Build" } }, "kind": { "type": "string", "description": "", "default": "BuildList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_build_BuildOutput": { "type": "object", "description": "", "properties": { "pushSecret": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "to": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildOutput" }, "os_build_BuildRequest": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "kind": { "type": "string", "description": "", "default": "BuildRequest", "required": true }, "lastVersion": { "type": "integer", "description": "LastVersion of the BuildConfig that triggered this build" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "revision": { "$ref": "#/definitions/os_build_SourceRevision", "javaType": "io.fabric8.openshift.api.model.SourceRevision" }, "triggeredByImage": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildRequest", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_build_BuildSource": { "type": "object", "description": "", "properties": { "contextDir": { "type": "string", "description": "specifies sub-directory where the source code for the application exists" }, "git": { "$ref": "#/definitions/os_build_GitBuildSource", "javaType": "io.fabric8.openshift.api.model.GitBuildSource" }, "sourceSecret": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "type": { "type": "string", "description": "type of source control management system" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildSource" }, "os_build_BuildSpec": { "type": "object", "description": "", "properties": { "output": { "$ref": "#/definitions/os_build_BuildOutput", "javaType": "io.fabric8.openshift.api.model.BuildOutput" }, "resources": { "$ref": "#/definitions/kubernetes_ResourceRequirements", "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "revision": { "$ref": "#/definitions/os_build_SourceRevision", "javaType": "io.fabric8.openshift.api.model.SourceRevision" }, "serviceAccount": { "type": "string", "description": "the name of the service account to use to run pods created by the build" }, "source": { "$ref": "#/definitions/os_build_BuildSource", "javaType": "io.fabric8.openshift.api.model.BuildSource" }, "strategy": { "$ref": "#/definitions/os_build_BuildStrategy", "javaType": "io.fabric8.openshift.api.model.BuildStrategy" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildSpec" }, "os_build_BuildStatus": { "type": "object", "description": "", "properties": { "cancelled": { "type": "boolean", "description": "describes if a canceling event was triggered for the build" }, "completionTimestamp": { "type": "string", "description": "server time when the pod running this build stopped running" }, "config": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "duration": { "type": "integer", "description": "amount of time the build has been running", "javaType": "Long" }, "message": { "type": "string", "description": "human-readable message indicating details about why the build has this status" }, "phase": { "type": "string", "description": "observed point in the build lifecycle" }, "startTimestamp": { "type": "string", "description": "server time when this build started running in a pod" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildStatus" }, "os_build_BuildStrategy": { "type": "object", "description": "", "properties": { "customStrategy": { "$ref": "#/definitions/os_build_CustomBuildStrategy", "javaType": "io.fabric8.openshift.api.model.CustomBuildStrategy" }, "dockerStrategy": { "$ref": "#/definitions/os_build_DockerBuildStrategy", "javaType": "io.fabric8.openshift.api.model.DockerBuildStrategy" }, "sourceStrategy": { "$ref": "#/definitions/os_build_SourceBuildStrategy", "javaType": "io.fabric8.openshift.api.model.SourceBuildStrategy" }, "type": { "type": "string", "description": "identifies the type of build strategy" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildStrategy" }, "os_build_BuildTriggerPolicy": { "type": "object", "description": "", "properties": { "generic": { "$ref": "#/definitions/os_build_WebHookTrigger", "javaType": "io.fabric8.openshift.api.model.WebHookTrigger" }, "github": { "$ref": "#/definitions/os_build_WebHookTrigger", "javaType": "io.fabric8.openshift.api.model.WebHookTrigger" }, "imageChange": { "$ref": "#/definitions/os_build_ImageChangeTrigger", "javaType": "io.fabric8.openshift.api.model.ImageChangeTrigger" }, "type": { "type": "string", "description": "type of build trigger" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildTriggerPolicy" }, "os_build_CustomBuildStrategy": { "type": "object", "description": "", "properties": { "env": { "type": "array", "description": "additional environment variables you want to pass into a builder container", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } }, "exposeDockerSocket": { "type": "boolean", "description": "allow running Docker commands (and build Docker images) from inside the container" }, "forcePull": { "type": "boolean", "description": "forces pulling of builder image from remote registry if true" }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "pullSecret": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.CustomBuildStrategy" }, "os_build_DockerBuildStrategy": { "type": "object", "description": "", "properties": { "env": { "type": "array", "description": "additional environment variables you want to pass into a builder container", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } }, "forcePull": { "type": "boolean", "description": "forces the source build to pull the image if true" }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "noCache": { "type": "boolean", "description": "if true" }, "pullSecret": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DockerBuildStrategy" }, "os_build_GitBuildSource": { "type": "object", "description": "", "properties": { "httpProxy": { "type": "string", "description": "specifies a http proxy to be used during git clone operations" }, "httpsProxy": { "type": "string", "description": "specifies a https proxy to be used during git clone operations" }, "ref": { "type": "string", "description": "identifies the branch/tag/ref to build" }, "uri": { "type": "string", "description": "points to the source that will be built" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.GitBuildSource" }, "os_build_GitSourceRevision": { "type": "object", "description": "", "properties": { "author": { "$ref": "#/definitions/os_build_SourceControlUser", "javaType": "io.fabric8.openshift.api.model.SourceControlUser" }, "commit": { "type": "string", "description": "hash identifying a specific commit" }, "committer": { "$ref": "#/definitions/os_build_SourceControlUser", "javaType": "io.fabric8.openshift.api.model.SourceControlUser" }, "message": { "type": "string", "description": "description of a specific commit" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.GitSourceRevision" }, "os_build_ImageChangeTrigger": { "type": "object", "description": "", "properties": { "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "lastTriggeredImageID": { "type": "string", "description": "used internally to save last used image ID for build" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageChangeTrigger" }, "os_build_SourceBuildStrategy": { "type": "object", "description": "", "properties": { "env": { "type": "array", "description": "additional environment variables you want to pass into a builder container", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } }, "forcePull": { "type": "boolean", "description": "forces the source build to pull the image if true" }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "incremental": { "type": "boolean", "description": "forces the source build to do incremental builds if true" }, "pullSecret": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "scripts": { "type": "string", "description": "location of the source scripts" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.SourceBuildStrategy" }, "os_build_SourceControlUser": { "type": "object", "description": "", "properties": { "email": { "type": "string", "description": "e-mail of the source control user" }, "name": { "type": "string", "description": "name of the source control user" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.SourceControlUser" }, "os_build_SourceRevision": { "type": "object", "description": "", "properties": { "git": { "$ref": "#/definitions/os_build_GitSourceRevision", "javaType": "io.fabric8.openshift.api.model.GitSourceRevision" }, "type": { "type": "string", "description": "type of the build source" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.SourceRevision" }, "os_build_WebHookTrigger": { "type": "object", "description": "", "properties": { "secret": { "type": "string", "description": "secret used to validate requests" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.WebHookTrigger" }, "os_deploy_CustomDeploymentStrategyParams": { "type": "object", "description": "", "properties": { "command": { "type": "array", "description": "optionally overrides the container command (default is specified by the image)", "items": { "type": "string", "description": "optionally overrides the container command (default is specified by the image)" } }, "environment": { "type": "array", "description": "environment variables provided to the deployment process container", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } }, "image": { "type": "string", "description": "a Docker image which can carry out a deployment" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.CustomDeploymentStrategyParams" }, "os_deploy_DeploymentCause": { "type": "object", "description": "", "properties": { "imageTrigger": { "$ref": "#/definitions/os_deploy_DeploymentCauseImageTrigger", "javaType": "io.fabric8.openshift.api.model.DeploymentCauseImageTrigger" }, "type": { "type": "string", "description": "the type of trigger that resulted in a new deployment" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentCause" }, "os_deploy_DeploymentCauseImageTrigger": { "type": "object", "description": "", "properties": { "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentCauseImageTrigger" }, "os_deploy_DeploymentConfig": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "DeploymentConfig", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_deploy_DeploymentConfigSpec", "javaType": "io.fabric8.openshift.api.model.DeploymentConfigSpec" }, "status": { "$ref": "#/definitions/os_deploy_DeploymentConfigStatus", "javaType": "io.fabric8.openshift.api.model.DeploymentConfigStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentConfig", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_deploy_DeploymentConfigList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "a list of deployment configs", "items": { "$ref": "#/definitions/os_deploy_DeploymentConfig", "javaType": "io.fabric8.openshift.api.model.DeploymentConfig" } }, "kind": { "type": "string", "description": "", "default": "DeploymentConfigList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentConfigList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_deploy_DeploymentConfigSpec": { "type": "object", "description": "", "properties": { "replicas": { "type": "integer", "description": "the desired number of replicas" }, "selector": { "type": "object", "description": "a label query over pods that should match the replicas count", "additionalProperties": { "type": "string", "description": "a label query over pods that should match the replicas count" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "strategy": { "$ref": "#/definitions/os_deploy_DeploymentStrategy", "javaType": "io.fabric8.openshift.api.model.DeploymentStrategy" }, "template": { "$ref": "#/definitions/kubernetes_PodTemplateSpec", "javaType": "io.fabric8.kubernetes.api.model.PodTemplateSpec" }, "triggers": { "type": "array", "description": "how new deployments are triggered", "items": { "$ref": "#/definitions/os_deploy_DeploymentTriggerPolicy", "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerPolicy" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentConfigSpec" }, "os_deploy_DeploymentConfigStatus": { "type": "object", "description": "", "properties": { "details": { "$ref": "#/definitions/os_deploy_DeploymentDetails", "javaType": "io.fabric8.openshift.api.model.DeploymentDetails" }, "latestVersion": { "type": "integer", "description": "used to determine whether the current deployment is out of sync" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentConfigStatus" }, "os_deploy_DeploymentDetails": { "type": "object", "description": "", "properties": { "causes": { "type": "array", "description": "extended data associated with all the causes for creating a new deployment", "items": { "$ref": "#/definitions/os_deploy_DeploymentCause", "javaType": "io.fabric8.openshift.api.model.DeploymentCause" } }, "message": { "type": "string", "description": "a user specified change message" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentDetails" }, "os_deploy_DeploymentStrategy": { "type": "object", "description": "", "properties": { "customParams": { "$ref": "#/definitions/os_deploy_CustomDeploymentStrategyParams", "javaType": "io.fabric8.openshift.api.model.CustomDeploymentStrategyParams" }, "recreateParams": { "$ref": "#/definitions/os_deploy_RecreateDeploymentStrategyParams", "javaType": "io.fabric8.openshift.api.model.RecreateDeploymentStrategyParams" }, "resources": { "$ref": "#/definitions/kubernetes_ResourceRequirements", "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "rollingParams": { "$ref": "#/definitions/os_deploy_RollingDeploymentStrategyParams", "javaType": "io.fabric8.openshift.api.model.RollingDeploymentStrategyParams" }, "type": { "type": "string", "description": "the name of a deployment strategy" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentStrategy" }, "os_deploy_DeploymentTriggerImageChangeParams": { "type": "object", "description": "", "properties": { "automatic": { "type": "boolean", "description": "whether detection of a new tag value should trigger a deployment" }, "containerNames": { "type": "array", "description": "restricts tag updates to a set of container names in the pod", "items": { "type": "string", "description": "restricts tag updates to a set of container names in the pod" } }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "lastTriggeredImage": { "type": "string", "description": "the last image to be triggered" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerImageChangeParams" }, "os_deploy_DeploymentTriggerPolicy": { "type": "object", "description": "", "properties": { "imageChangeParams": { "$ref": "#/definitions/os_deploy_DeploymentTriggerImageChangeParams", "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerImageChangeParams" }, "type": { "type": "string", "description": "the type of the trigger" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerPolicy" }, "os_deploy_ExecNewPodHook": { "type": "object", "description": "", "properties": { "command": { "type": "array", "description": "the hook command and its arguments", "items": { "type": "string", "description": "the hook command and its arguments" } }, "containerName": { "type": "string", "description": "the name of a container from the pod template whose image will be used for the hook container" }, "env": { "type": "array", "description": "environment variables provided to the hook container", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ExecNewPodHook" }, "os_deploy_LifecycleHook": { "type": "object", "description": "", "properties": { "execNewPod": { "$ref": "#/definitions/os_deploy_ExecNewPodHook", "javaType": "io.fabric8.openshift.api.model.ExecNewPodHook" }, "failurePolicy": { "type": "string", "description": "what action to take if the hook fails" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.LifecycleHook" }, "os_deploy_RecreateDeploymentStrategyParams": { "type": "object", "description": "", "properties": { "post": { "$ref": "#/definitions/os_deploy_LifecycleHook", "javaType": "io.fabric8.openshift.api.model.LifecycleHook" }, "pre": { "$ref": "#/definitions/os_deploy_LifecycleHook", "javaType": "io.fabric8.openshift.api.model.LifecycleHook" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RecreateDeploymentStrategyParams" }, "os_deploy_RollingDeploymentStrategyParams": { "type": "object", "description": "", "properties": { "intervalSeconds": { "type": "integer", "description": "the time to wait between polling deployment status after update", "javaType": "Long" }, "post": { "$ref": "#/definitions/os_deploy_LifecycleHook", "javaType": "io.fabric8.openshift.api.model.LifecycleHook" }, "pre": { "$ref": "#/definitions/os_deploy_LifecycleHook", "javaType": "io.fabric8.openshift.api.model.LifecycleHook" }, "timeoutSeconds": { "type": "integer", "description": "the time to wait for updates before giving up", "javaType": "Long" }, "updatePercent": { "type": "integer", "description": "the percentage of replicas to scale up or down each interval (negative value switches scale order to down/up instead of up/down)" }, "updatePeriodSeconds": { "type": "integer", "description": "the time to wait between individual pod updates", "javaType": "Long" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RollingDeploymentStrategyParams" }, "os_image_Image": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "dockerImageManifest": { "type": "string", "description": "raw JSON of the manifest" }, "dockerImageMetadata": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "dockerImageMetadataVersion": { "type": "string", "description": "conveys version of the object" }, "dockerImageReference": { "type": "string", "description": "string that can be used to pull this image" }, "kind": { "type": "string", "description": "", "default": "Image", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Image", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_image_ImageList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of image objects", "items": { "$ref": "#/definitions/os_image_Image", "javaType": "io.fabric8.openshift.api.model.Image" } }, "kind": { "type": "string", "description": "", "default": "ImageList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_image_ImageStream": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ImageStream", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_image_ImageStreamSpec", "javaType": "io.fabric8.openshift.api.model.ImageStreamSpec" }, "status": { "$ref": "#/definitions/os_image_ImageStreamStatus", "javaType": "io.fabric8.openshift.api.model.ImageStreamStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageStream", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_image_ImageStreamList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of image stream objects", "items": { "$ref": "#/definitions/os_image_ImageStream", "javaType": "io.fabric8.openshift.api.model.ImageStream" } }, "kind": { "type": "string", "description": "", "default": "ImageStreamList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageStreamList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_image_ImageStreamSpec": { "type": "object", "description": "", "properties": { "dockerImageRepository": { "type": "string", "description": "optional field if specified this stream is backed by a Docker repository on this server" }, "tags": { "type": "array", "description": "map arbitrary string values to specific image locators", "items": { "$ref": "#/definitions/os_image_NamedTagReference", "javaType": "io.fabric8.openshift.api.model.NamedTagReference" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageStreamSpec" }, "os_image_ImageStreamStatus": { "type": "object", "description": "", "properties": { "dockerImageRepository": { "type": "string", "description": "represents the effective location this stream may be accessed at" }, "tags": { "type": "array", "description": "historical record of images associated with each tag", "items": { "$ref": "#/definitions/os_image_NamedTagEventList", "javaType": "io.fabric8.openshift.api.model.NamedTagEventList" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageStreamStatus" }, "os_image_NamedTagEventList": { "type": "object", "description": "", "properties": { "items": { "type": "array", "description": "list of tag events related to the tag", "items": { "$ref": "#/definitions/os_image_TagEvent", "javaType": "io.fabric8.openshift.api.model.TagEvent" } }, "tag": { "type": "string", "description": "the tag" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedTagEventList" }, "os_image_NamedTagReference": { "type": "object", "description": "", "properties": { "annotations": { "type": "object", "description": "annotations associated with images using this tag", "additionalProperties": { "type": "string", "description": "annotations associated with images using this tag" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "name": { "type": "string", "description": "name of tag" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedTagReference" }, "os_image_TagEvent": { "type": "object", "description": "", "properties": { "created": { "type": "string", "description": "when the event was created" }, "dockerImageReference": { "type": "string", "description": "the string that can be used to pull this image" }, "image": { "type": "string", "description": "the image" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.TagEvent" }, "os_oauth_OAuthAccessToken": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "authorizeToken": { "type": "string", "description": "contains the token that authorized this token" }, "clientName": { "type": "string", "description": "references the client that created this token" }, "expiresIn": { "type": "integer", "description": "is the seconds from creation time before this token expires", "javaType": "Long" }, "kind": { "type": "string", "description": "", "default": "OAuthAccessToken", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "redirectURI": { "type": "string", "description": "redirection URI associated with the token" }, "refreshToken": { "type": "string", "description": "optional value by which this token can be renewed" }, "scopes": { "type": "array", "description": "list of requested scopes", "items": { "type": "string", "description": "list of requested scopes" } }, "userName": { "type": "string", "description": "user name associated with this token" }, "userUID": { "type": "string", "description": "unique UID associated with this token" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthAccessToken", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_oauth_OAuthAccessTokenList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of oauth access tokens", "items": { "$ref": "#/definitions/os_oauth_OAuthAccessToken", "javaType": "io.fabric8.openshift.api.model.OAuthAccessToken" } }, "kind": { "type": "string", "description": "", "default": "OAuthAccessTokenList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthAccessTokenList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_oauth_OAuthAuthorizeToken": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "clientName": { "type": "string", "description": "references the client that created this token" }, "expiresIn": { "type": "integer", "description": "seconds from creation time before this token expires", "javaType": "Long" }, "kind": { "type": "string", "description": "", "default": "OAuthAuthorizeToken", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "redirectURI": { "type": "string", "description": "redirection URI associated with the token" }, "scopes": { "type": "array", "description": "list of requested scopes", "items": { "type": "string", "description": "list of requested scopes" } }, "state": { "type": "string", "description": "state data from request" }, "userName": { "type": "string", "description": "user name associated with this token" }, "userUID": { "type": "string", "description": "unique UID associated with this token. userUID and userName must both match for this token to be valid" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeToken", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_oauth_OAuthAuthorizeTokenList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of oauth authorization tokens", "items": { "$ref": "#/definitions/os_oauth_OAuthAuthorizeToken", "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeToken" } }, "kind": { "type": "string", "description": "", "default": "OAuthAuthorizeTokenList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeTokenList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_oauth_OAuthClient": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "OAuthClient", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "redirectURIs": { "type": "array", "description": "valid redirection URIs associated with a client", "items": { "type": "string", "description": "valid redirection URIs associated with a client" } }, "respondWithChallenges": { "type": "boolean", "description": "indicates whether the client wants authentication needed responses made in the form of challenges instead of redirects" }, "secret": { "type": "string", "description": "unique secret associated with a client" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthClient", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_oauth_OAuthClientAuthorization": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "clientName": { "type": "string", "description": "references the client that created this authorization" }, "kind": { "type": "string", "description": "", "default": "OAuthClientAuthorization", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "scopes": { "type": "array", "description": "list of granted scopes", "items": { "type": "string", "description": "list of granted scopes" } }, "userName": { "type": "string", "description": "user name that authorized this client" }, "userUID": { "type": "string", "description": "unique UID associated with this authorization. userUID and userName must both match for this authorization to be valid" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorization", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_oauth_OAuthClientAuthorizationList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of oauth client authorizations", "items": { "$ref": "#/definitions/os_oauth_OAuthClientAuthorization", "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorization" } }, "kind": { "type": "string", "description": "", "default": "OAuthClientAuthorizationList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorizationList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_oauth_OAuthClientList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of oauth clients", "items": { "$ref": "#/definitions/os_oauth_OAuthClient", "javaType": "io.fabric8.openshift.api.model.OAuthClient" } }, "kind": { "type": "string", "description": "", "default": "OAuthClientList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthClientList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_project_Project": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Project", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_project_ProjectSpec", "javaType": "io.fabric8.openshift.api.model.ProjectSpec" }, "status": { "$ref": "#/definitions/os_project_ProjectStatus", "javaType": "io.fabric8.openshift.api.model.ProjectStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Project", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_project_ProjectList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of projects", "items": { "$ref": "#/definitions/os_project_Project", "javaType": "io.fabric8.openshift.api.model.Project" } }, "kind": { "type": "string", "description": "", "default": "ProjectList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ProjectList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_project_ProjectRequest": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "description": { "type": "string", "description": "description to apply to a project" }, "displayName": { "type": "string", "description": "display name to apply to a project" }, "kind": { "type": "string", "description": "", "default": "ProjectRequest", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ProjectRequest", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_project_ProjectSpec": { "type": "object", "description": "", "properties": { "finalizers": { "type": "array", "description": "an opaque list of values that must be empty to permanently remove object from storage", "items": { "type": "string", "description": "an opaque list of values that must be empty to permanently remove object from storage" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ProjectSpec" }, "os_project_ProjectStatus": { "type": "object", "description": "", "properties": { "phase": { "type": "string", "description": "phase is the current lifecycle phase of the project" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ProjectStatus" }, "os_route_Route": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Route", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_route_RouteSpec", "javaType": "io.fabric8.openshift.api.model.RouteSpec" }, "status": { "$ref": "#/definitions/os_route_RouteStatus", "javaType": "io.fabric8.openshift.api.model.RouteStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Route", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_route_RouteList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of routes", "items": { "$ref": "#/definitions/os_route_Route", "javaType": "io.fabric8.openshift.api.model.Route" } }, "kind": { "type": "string", "description": "", "default": "RouteList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RouteList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_route_RouteSpec": { "type": "object", "description": "", "properties": { "host": { "type": "string", "description": "optional: alias/dns that points to the service" }, "path": { "type": "string", "description": "optional: path that the router watches to route traffic to the service" }, "tls": { "$ref": "#/definitions/os_route_TLSConfig", "javaType": "io.fabric8.openshift.api.model.TLSConfig" }, "to": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RouteSpec" }, "os_route_RouteStatus": { "type": "object", "description": "", "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RouteStatus" }, "os_route_TLSConfig": { "type": "object", "description": "", "properties": { "caCertificate": { "type": "string", "description": "provides the cert authority certificate contents" }, "certificate": { "type": "string", "description": "provides certificate contents" }, "destinationCACertificate": { "type": "string", "description": "provides the contents of the ca certificate of the final destination. When using re-encrypt termination this file should be provided in order to have routers use it for health checks on the secure connection" }, "key": { "type": "string", "description": "provides key file contents" }, "termination": { "type": "string", "description": "indicates termination type. if not set" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.TLSConfig" }, "os_template_Parameter": { "type": "object", "description": "", "properties": { "description": { "type": "string", "description": "optional: describes the parameter" }, "from": { "type": "string", "description": "input value for the generator" }, "generate": { "type": "string", "description": "optional: generate specifies the generator to be used to generate random string from an input value specified by the from field. the result string is stored in the value field. if not specified" }, "name": { "type": "string", "description": "name of the parameter" }, "required": { "type": "boolean", "description": "indicates the parameter must have a non-empty value or be generated" }, "value": { "type": "string", "description": "optional: holds the parameter data. if specified" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Parameter" }, "os_template_Template": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Template", "required": true }, "labels": { "type": "object", "description": "optional: list of lables that are applied to every object during the template to config transformation", "additionalProperties": { "type": "string", "description": "optional: list of lables that are applied to every object during the template to config transformation" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "objects": { "type": "array", "description": "list of objects to include in the template", "items": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" } }, "parameters": { "type": "array", "description": "optional: list of parameters used during template to config transformation", "items": { "$ref": "#/definitions/os_template_Parameter", "javaType": "io.fabric8.openshift.api.model.Parameter" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Template", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_template_TemplateList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of templates", "items": { "$ref": "#/definitions/os_template_Template", "javaType": "io.fabric8.openshift.api.model.Template" } }, "kind": { "type": "string", "description": "", "default": "TemplateList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.TemplateList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_user_Group": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Group", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "users": { "type": "array", "description": "list of users in this group", "items": { "type": "string", "description": "list of users in this group" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Group", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_user_GroupList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of groups", "items": { "$ref": "#/definitions/os_user_Group", "javaType": "io.fabric8.openshift.api.model.Group" } }, "kind": { "type": "string", "description": "", "default": "GroupList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.GroupList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_user_Identity": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "extra": { "type": "object", "description": "extra information for this identity", "additionalProperties": { "type": "string", "description": "extra information for this identity" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "kind": { "type": "string", "description": "", "default": "Identity", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "providerName": { "type": "string", "description": "source of identity information" }, "providerUserName": { "type": "string", "description": "uniquely represents this identity in the scope of the provider" }, "user": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Identity", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_user_IdentityList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of identities", "items": { "$ref": "#/definitions/os_user_Identity", "javaType": "io.fabric8.openshift.api.model.Identity" } }, "kind": { "type": "string", "description": "", "default": "IdentityList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.IdentityList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_user_User": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "fullName": { "type": "string", "description": "full name of user" }, "groups": { "type": "array", "description": "list of groups", "items": { "type": "string", "description": "list of groups" } }, "identities": { "type": "array", "description": "list of identities", "items": { "type": "string", "description": "list of identities" } }, "kind": { "type": "string", "description": "", "default": "User", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.User", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_user_UserList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of users", "items": { "$ref": "#/definitions/os_user_User", "javaType": "io.fabric8.openshift.api.model.User" } }, "kind": { "type": "string", "description": "", "default": "UserList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.UserList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "speter_inf_Dec": { "type": "object", "description": "", "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Dec" } }, "type": "object", "properties": { "BaseKubernetesList": { "$ref": "#/definitions/kubernetes_List", "javaType": "io.fabric8.kubernetes.api.model.BaseKubernetesList" }, "BuildConfigList": { "$ref": "#/definitions/os_build_BuildConfigList", "javaType": "io.fabric8.openshift.api.model.BuildConfigList" }, "BuildList": { "$ref": "#/definitions/os_build_BuildList", "javaType": "io.fabric8.openshift.api.model.BuildList" }, "BuildRequest": { "$ref": "#/definitions/os_build_BuildRequest", "javaType": "io.fabric8.openshift.api.model.BuildRequest" }, "ClusterPolicy": { "$ref": "#/definitions/os_authorization_ClusterPolicy", "javaType": "io.fabric8.openshift.api.model.ClusterPolicy" }, "ClusterPolicyBinding": { "$ref": "#/definitions/os_authorization_ClusterPolicyBinding", "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBinding" }, "ClusterPolicyBindingList": { "$ref": "#/definitions/os_authorization_ClusterPolicyBindingList", "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBindingList" }, "ClusterPolicyList": { "$ref": "#/definitions/os_authorization_ClusterPolicyList", "javaType": "io.fabric8.openshift.api.model.ClusterPolicyList" }, "ClusterRoleBinding": { "$ref": "#/definitions/os_authorization_ClusterRoleBinding", "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding" }, "ClusterRoleBindingList": { "$ref": "#/definitions/os_authorization_ClusterRoleBindingList", "javaType": "io.fabric8.openshift.api.model.ClusterRoleBindingList" }, "Config": { "$ref": "#/definitions/kubernetes_config_Config", "javaType": "io.fabric8.kubernetes.api.model.Config" }, "ContainerStatus": { "$ref": "#/definitions/kubernetes_ContainerStatus", "javaType": "io.fabric8.kubernetes.api.model.ContainerStatus" }, "DeploymentConfigList": { "$ref": "#/definitions/os_deploy_DeploymentConfigList", "javaType": "io.fabric8.openshift.api.model.DeploymentConfigList" }, "Endpoints": { "$ref": "#/definitions/kubernetes_Endpoints", "javaType": "io.fabric8.kubernetes.api.model.Endpoints" }, "EndpointsList": { "$ref": "#/definitions/kubernetes_EndpointsList", "javaType": "io.fabric8.kubernetes.api.model.EndpointsList" }, "EnvVar": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" }, "EventList": { "$ref": "#/definitions/kubernetes_EventList", "javaType": "io.fabric8.kubernetes.api.model.EventList" }, "Group": { "$ref": "#/definitions/os_user_Group", "javaType": "io.fabric8.openshift.api.model.Group" }, "GroupList": { "$ref": "#/definitions/os_user_GroupList", "javaType": "io.fabric8.openshift.api.model.GroupList" }, "Identity": { "$ref": "#/definitions/os_user_Identity", "javaType": "io.fabric8.openshift.api.model.Identity" }, "IdentityList": { "$ref": "#/definitions/os_user_IdentityList", "javaType": "io.fabric8.openshift.api.model.IdentityList" }, "ImageList": { "$ref": "#/definitions/os_image_ImageList", "javaType": "io.fabric8.openshift.api.model.ImageList" }, "ImageStreamList": { "$ref": "#/definitions/os_image_ImageStreamList", "javaType": "io.fabric8.openshift.api.model.ImageStreamList" }, "LocalSubjectAccessReview": { "$ref": "#/definitions/os_authorization_LocalSubjectAccessReview", "javaType": "io.fabric8.openshift.api.model.LocalSubjectAccessReview" }, "Namespace": { "$ref": "#/definitions/kubernetes_Namespace", "javaType": "io.fabric8.kubernetes.api.model.Namespace" }, "NamespaceList": { "$ref": "#/definitions/kubernetes_NamespaceList", "javaType": "io.fabric8.kubernetes.api.model.NamespaceList" }, "Node": { "$ref": "#/definitions/kubernetes_Node", "javaType": "io.fabric8.kubernetes.api.model.Node" }, "NodeList": { "$ref": "#/definitions/kubernetes_NodeList", "javaType": "io.fabric8.kubernetes.api.model.NodeList" }, "OAuthAccessToken": { "$ref": "#/definitions/os_oauth_OAuthAccessToken", "javaType": "io.fabric8.openshift.api.model.OAuthAccessToken" }, "OAuthAccessTokenList": { "$ref": "#/definitions/os_oauth_OAuthAccessTokenList", "javaType": "io.fabric8.openshift.api.model.OAuthAccessTokenList" }, "OAuthAuthorizeToken": { "$ref": "#/definitions/os_oauth_OAuthAuthorizeToken", "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeToken" }, "OAuthAuthorizeTokenList": { "$ref": "#/definitions/os_oauth_OAuthAuthorizeTokenList", "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeTokenList" }, "OAuthClient": { "$ref": "#/definitions/os_oauth_OAuthClient", "javaType": "io.fabric8.openshift.api.model.OAuthClient" }, "OAuthClientAuthorization": { "$ref": "#/definitions/os_oauth_OAuthClientAuthorization", "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorization" }, "OAuthClientAuthorizationList": { "$ref": "#/definitions/os_oauth_OAuthClientAuthorizationList", "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorizationList" }, "OAuthClientList": { "$ref": "#/definitions/os_oauth_OAuthClientList", "javaType": "io.fabric8.openshift.api.model.OAuthClientList" }, "ObjectMeta": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "PersistentVolume": { "$ref": "#/definitions/kubernetes_PersistentVolume", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolume" }, "PersistentVolumeClaim": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaim", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaim" }, "PersistentVolumeClaimList": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaimList", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimList" }, "PersistentVolumeList": { "$ref": "#/definitions/kubernetes_PersistentVolumeList", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeList" }, "PodList": { "$ref": "#/definitions/kubernetes_PodList", "javaType": "io.fabric8.kubernetes.api.model.PodList" }, "Policy": { "$ref": "#/definitions/os_authorization_Policy", "javaType": "io.fabric8.openshift.api.model.Policy" }, "PolicyBinding": { "$ref": "#/definitions/os_authorization_PolicyBinding", "javaType": "io.fabric8.openshift.api.model.PolicyBinding" }, "PolicyBindingList": { "$ref": "#/definitions/os_authorization_PolicyBindingList", "javaType": "io.fabric8.openshift.api.model.PolicyBindingList" }, "PolicyList": { "$ref": "#/definitions/os_authorization_PolicyList", "javaType": "io.fabric8.openshift.api.model.PolicyList" }, "Project": { "$ref": "#/definitions/os_project_Project", "javaType": "io.fabric8.openshift.api.model.Project" }, "ProjectList": { "$ref": "#/definitions/os_project_ProjectList", "javaType": "io.fabric8.openshift.api.model.ProjectList" }, "ProjectRequest": { "$ref": "#/definitions/os_project_ProjectRequest", "javaType": "io.fabric8.openshift.api.model.ProjectRequest" }, "Quantity": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "ReplicationControllerList": { "$ref": "#/definitions/kubernetes_ReplicationControllerList", "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerList" }, "ResourceQuota": { "$ref": "#/definitions/kubernetes_ResourceQuota", "javaType": "io.fabric8.kubernetes.api.model.ResourceQuota" }, "ResourceQuotaList": { "$ref": "#/definitions/kubernetes_ResourceQuotaList", "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaList" }, "Role": { "$ref": "#/definitions/os_authorization_Role", "javaType": "io.fabric8.openshift.api.model.Role" }, "RoleBinding": { "$ref": "#/definitions/os_authorization_RoleBinding", "javaType": "io.fabric8.openshift.api.model.RoleBinding" }, "RoleBindingList": { "$ref": "#/definitions/os_authorization_RoleBindingList", "javaType": "io.fabric8.openshift.api.model.RoleBindingList" }, "RoleList": { "$ref": "#/definitions/os_authorization_RoleList", "javaType": "io.fabric8.openshift.api.model.RoleList" }, "RootPaths": { "$ref": "#/definitions/api_RootPaths", "javaType": "io.fabric8.kubernetes.api.model.RootPaths" }, "RouteList": { "$ref": "#/definitions/os_route_RouteList", "javaType": "io.fabric8.openshift.api.model.RouteList" }, "Secret": { "$ref": "#/definitions/kubernetes_Secret", "javaType": "io.fabric8.kubernetes.api.model.Secret" }, "SecretList": { "$ref": "#/definitions/kubernetes_SecretList", "javaType": "io.fabric8.kubernetes.api.model.SecretList" }, "SecurityContextConstraints": { "$ref": "#/definitions/kubernetes_SecurityContextConstraints", "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraints" }, "SecurityContextConstraintsList": { "$ref": "#/definitions/kubernetes_SecurityContextConstraintsList", "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraintsList" }, "ServiceAccount": { "$ref": "#/definitions/kubernetes_ServiceAccount", "javaType": "io.fabric8.kubernetes.api.model.ServiceAccount" }, "ServiceAccountList": { "$ref": "#/definitions/kubernetes_ServiceAccountList", "javaType": "io.fabric8.kubernetes.api.model.ServiceAccountList" }, "ServiceList": { "$ref": "#/definitions/kubernetes_ServiceList", "javaType": "io.fabric8.kubernetes.api.model.ServiceList" }, "Status": { "$ref": "#/definitions/kubernetes_Status", "javaType": "io.fabric8.kubernetes.api.model.Status" }, "SubjectAccessReview": { "$ref": "#/definitions/os_authorization_SubjectAccessReview", "javaType": "io.fabric8.openshift.api.model.SubjectAccessReview" }, "SubjectAccessReviewResponse": { "$ref": "#/definitions/os_authorization_SubjectAccessReviewResponse", "javaType": "io.fabric8.openshift.api.model.SubjectAccessReviewResponse" }, "TagEvent": { "$ref": "#/definitions/os_image_TagEvent", "javaType": "io.fabric8.openshift.api.model.TagEvent" }, "Template": { "$ref": "#/definitions/os_template_Template", "javaType": "io.fabric8.openshift.api.model.Template" }, "TemplateList": { "$ref": "#/definitions/os_template_TemplateList", "javaType": "io.fabric8.openshift.api.model.TemplateList" }, "User": { "$ref": "#/definitions/os_user_User", "javaType": "io.fabric8.openshift.api.model.User" }, "UserList": { "$ref": "#/definitions/os_user_UserList", "javaType": "io.fabric8.openshift.api.model.UserList" }, "WatchEvent": { "$ref": "#/definitions/kubernetes_watch_WatchEvent", "javaType": "io.fabric8.kubernetes.api.model.WatchEvent" } }, "additionalProperties": true }; })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { var hiddenProperties = ['status', 'deletionTimestamp']; function withProperty(schema, name, action) { if (schema.properties[name]) { action(schema.properties[name]); } } function hideProperties(schema) { _.forEach(hiddenProperties, function (property) { withProperty(schema, property, function (property) { property.hidden = true; }); }); } Kubernetes._module.factory('KubernetesSchema', ['SchemaRegistry', function (schemas) { Kubernetes.configureSchema(); schemas.addListener("k8s schema customizer", function (name, schema) { if (schema.properties) { if (schema.properties.name) { schema.controls = ['name', '*']; } withProperty(schema, 'portalIP', function (property) { property.label = "Portal IP"; }); withProperty(schema, 'publicIPs', function (property) { property.label = "Public IPs"; }); withProperty(schema, 'Spec', function (property) { property.label = 'false'; }); withProperty(schema, 'Metadata', function (property) { property.label = 'false'; }); hideProperties(schema); } if (_.endsWith(name, "ServiceSpec")) { schema.controls = ["portalIP", "createExternalLoadBalancer", "sessionAffinity", "publicIPs", "ports", "selector", "*"]; withProperty(schema, 'sessionAffinity', function (property) { Kubernetes.log.debug("Schema: ", schema); property.enum = ['None', 'ClientIP']; property.default = 'None'; }); } if (_.endsWith(name, "Service")) { schema.controls = undefined; schema.tabs = { 'Basic Information': ['metadata'], 'Details': ['*'] }; Kubernetes.log.debug("Name: ", name, " Schema: ", schema); } }); schemas.addSchema('kubernetes', Kubernetes.schema); // now lets iterate and add all the definitions too angular.forEach(Kubernetes.schema.definitions, function (definition, typeName) { //schemas.addSchema(typeName, definition); schemas.addSchema("#/definitions/" + typeName, definition); }); return Kubernetes.schema; }]); })(Kubernetes || (Kubernetes = {})); /// var Kubernetes; (function (Kubernetes) { // facade this to the watcher service var KubernetesStateImpl = (function () { function KubernetesStateImpl(watcher) { this.watcher = watcher; } Object.defineProperty(KubernetesStateImpl.prototype, "namespaces", { get: function () { return _.map(this.watcher.getObjects(Kubernetes.WatchTypes.NAMESPACES), function (namespace) { return namespace.metadata.name; }); }, enumerable: true, configurable: true }); Object.defineProperty(KubernetesStateImpl.prototype, "selectedNamespace", { get: function () { return this.watcher.getNamespace(); }, set: function (namespace) { this.watcher.setNamespace(namespace); }, enumerable: true, configurable: true }); return KubernetesStateImpl; }()); Kubernetes._module.factory('KubernetesState', ['WatcherService', function (watcher) { return new KubernetesStateImpl(watcher); }]); // TODO this doesn't need to be a service really Kubernetes._module.factory('KubernetesApiURL', function () { return Kubernetes.kubernetesApiUrl(); }); // TODO we'll get rid of this... Kubernetes._module.factory('KubernetesVersion', [function () { return { query: function () { return null; } }; }]); // TODO let's move these into KubernetesModel so controllers don't have to inject them separately Kubernetes._module.factory('KubernetesPods', ['KubernetesModel', function (KubernetesModel) { return KubernetesModel['podsResource']; }]); Kubernetes._module.factory('KubernetesReplicationControllers', ['KubernetesModel', function (KubernetesModel) { return KubernetesModel['replicationcontrollersResource']; }]); Kubernetes._module.factory('KubernetesServices', ['KubernetesModel', function (KubernetesModel) { return KubernetesModel['servicesResource']; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.FileDropController = Kubernetes.controller("FileDropController", ["$scope", "KubernetesModel", "FileUploader", '$http', function ($scope, model, FileUploader, $http) { var log = Logger.get('kubernetes-file-uploader'); var uploader = $scope.uploader = new FileUploader({ autoUpload: false, removeAfterUpload: true, url: Kubernetes.kubernetesApiUrl() }); $scope.uploader.onAfterAddingFile = function (file) { var reader = new FileReader(); reader.onload = function () { if (reader.readyState === 2) { log.debug("File added: ", file); var data = reader.result; var obj = null; if (_.endsWith(file._file.name, '.json')) { log.debug("Parsing JSON file"); try { obj = angular.fromJson(data); } catch (err) { log.debug("Failed to read dropped file ", file._file.name, ": ", err); return; } } else if (_.endsWith(file._file.name, '.yaml')) { log.debug("Parsing YAML file"); try { obj = jsyaml.load(data); } catch (err) { log.debug("Failed to read dropped file ", file._file.name, ": ", err); return; } } else { log.debug("Unknown file type for file: ", file._file.name); return; } log.debug("Dropped object: ", obj); if (!KubernetesAPI.getNamespace(obj)) { obj.metadata.namespace = model.currentNamespace(); } KubernetesAPI.put({ object: obj, success: function (data) { Core.notification("success", "Applied " + file._file.name); }, error: function (err) { log.info("Got error applying", file._file.name, ": ", err); Core.notification("warning", "Failed to apply " + file._file.name + ", error: " + err.message); } }); } }; reader.readAsText(file._file); }; $scope.uploader.onBeforeUploadItem = function (item) { log.debug("Uploading: ", item); //Core.notification('info', 'Uploading ' + item); }; $scope.uploader.onSuccessItem = function (item) { log.debug("onSuccessItem: ", item); }; $scope.uploader.onErrorItem = function (item, response, status) { log.debug("Failed to apply, response: ", response, " status: ", status); }; }]); Kubernetes.NamespaceController = Kubernetes.controller('NamespaceController', ['$scope', 'WatcherService', function ($scope, watcher) { $scope.namespaces = watcher.getObjects('namespaces'); $scope.$watchCollection('namespaces', function (newValue, oldValue) { if (newValue !== oldValue) { $scope.namespace = watcher.getNamespace(); } }); $scope.$watch('namespace', function (newValue, oldValue) { if (newValue !== oldValue) { if (newValue !== oldValue) { watcher.setNamespace(newValue); } } }); }]); Kubernetes.TopLevel = Kubernetes.controller("TopLevel", ["$scope", "KubernetesVersion", "KubernetesState", function ($scope, KubernetesVersion, KubernetesState) { $scope.version = undefined; $scope.showAppView = Kubernetes.isAppView(); $scope.isActive = function (href) { return Kubernetes.isLinkActive(href); }; $scope.mode = 'yaml'; $scope.rawMode = true; $scope.dirty = false; $scope.readOnly = true; $scope.rawModel = null; $scope.$on('hawtioEditor_default_dirty', function ($event, dirty) { $scope.dirty = dirty; }); $scope.save = function (rawModel) { var obj = null; var str = rawModel.replace(/\t/g, " "); try { obj = jsyaml.load(str); } catch (err) { Core.notification("warning", "Failed to save object, error: \"" + err + "\""); } if (!obj) { return; } $scope.readOnly = true; KubernetesAPI.put({ object: obj, success: function (data) { $scope.dirty = false; Core.notification("success", "Saved object " + Kubernetes.getName(obj)); Core.$apply($scope); }, error: function (err) { console.log("Got error: ", err); Core.notification("warning", "Failed to save object, error: \"" + err.message + "\""); $scope.dirty = false; Core.$apply($scope); } }); }; $scope.kubernetes = KubernetesState; KubernetesVersion.query(function (response) { $scope.version = response; }); }]); })(Kubernetes || (Kubernetes = {})); /// var Kubernetes; (function (Kubernetes) { Kubernetes.NamespaceController = Kubernetes.controller("NamespaceController", ["$scope", "WatcherService", function ($scope, watcher) { $scope.watcher = watcher; $scope.namespaceObjects = watcher.getObjects('namespaces'); $scope.namespace = watcher.getNamespace(); $scope.namespaces = []; $scope.$watch('namespace', function (newValue, oldValue) { if (newValue !== oldValue) { watcher.setNamespace(newValue); } }); $scope.$watch('watcher.getNamespace()', function (newValue, oldValue) { if (newValue !== oldValue) { $scope.namespace = newValue; } }); $scope.$watchCollection('namespaceObjects', function (namespaceObjects) { $scope.namespaces = _.map(namespaceObjects, function (namespace) { return namespace.metadata.name; }); }); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { var OverviewDirective = Kubernetes._module.directive("kubernetesOverview", ["$templateCache", "$compile", "$interpolate", "$timeout", "$window", "KubernetesState", 'KubernetesModel', function ($templateCache, $compile, $interpolate, $timeout, $window, KubernetesState, KubernetesModel) { var log = Logger.get('kubernetes-overview'); var model = KubernetesModel; var state = KubernetesState; return { restrict: 'E', replace: true, link: function (scope, element, attr) { scope.model = model; element.css({ visibility: 'hidden' }); scope.getEntity = function (type, key) { switch (type) { case 'host': return model.podsByHost[key]; case 'pod': return model.podsByKey[key]; case 'replicationController': return model.replicationControllersByKey[key]; case 'service': return model.servicesByKey[key]; default: return undefined; } }; scope.kubernetes = state; scope.customizeDefaultOptions = function (options) { options.Endpoint = ['Blank', {}]; }; scope.mouseEnter = function ($event) { if (scope.jsPlumb) { angular.element($event.currentTarget).addClass("hovered"); scope.jsPlumb.getEndpoints($event.currentTarget).forEach(function (endpoint) { endpoint.connections.forEach(function (connection) { if (!connection.isHover()) { connection.setHover(true); connection.endpoints.forEach(function (e) { scope.mouseEnter({ currentTarget: e.element }); }); } }); }); } }; scope.mouseLeave = function ($event) { if (scope.jsPlumb) { angular.element($event.currentTarget).removeClass("hovered"); scope.jsPlumb.getEndpoints($event.currentTarget).forEach(function (endpoint) { endpoint.connections.forEach(function (connection) { if (connection.isHover()) { connection.setHover(false); connection.endpoints.forEach(function (e) { scope.mouseLeave({ currentTarget: e.element }); }); } }); }); } }; /* scope.customizeEndpointOptions = (jsPlumb, node, options) => { var type = node.el.attr('data-type'); // log.debug("endpoint type: ", type); switch (type) { case 'pod': break; case 'service': break; case 'replicationController': break; } }; */ scope.customizeConnectionOptions = function (jsPlumb, edge, params, options) { var type = edge.source.el.attr('data-type'); options.connector = ["Bezier", { curviness: 50, stub: 25, alwaysRespectStubs: true }]; params.paintStyle = { lineWidth: 2, strokeStyle: '#5555cc' }; switch (type) { case 'pod': break; case 'service': params.anchors = [ ["Continuous", { faces: ["right"] }], ["Continuous", { faces: ["left"] }] ]; break; case 'replicationController': params.anchors = [ ["Perimeter", { shape: "Circle" }], ["Continuous", { faces: ["right"] }] ]; break; } //log.debug("connection source type: ", type); return options; }; function interpolate(template, config) { return $interpolate(template)(config); } function createElement(template, thingName, thing) { var config = {}; config[thingName] = thing; return interpolate(template, config); } function createElements(template, thingName, things) { return things.map(function (thing) { return createElement(template, thingName, thing); }); } function appendNewElements(parentEl, template, thingName, things) { things.forEach(function (thing) { var key = thing['_key'] || thing['elementId'] || thing['id']; var existing = parentEl.find("#" + key); if (!existing.length) { log.debug("existing: ", existing, " key: ", key); parentEl.append($compile(createElement(template, thingName, thing))(scope)); } }); } function namespaceFilter(item) { return Kubernetes.getNamespace(item) === scope.kubernetes.selectedNamespace; } function firstDraw() { log.debug("First draw"); element.empty(); var services = model.services; var replicationControllers = model.replicationControllers; var pods = model.pods; var hosts = model.hosts; // log.debug("hosts: ", model.hosts); var parentEl = angular.element($templateCache.get("overviewTemplate.html")); var servicesEl = parentEl.find(".services"); var hostsEl = parentEl.find(".hosts"); var replicationControllersEl = parentEl.find(".replicationControllers"); servicesEl.append(createElements($templateCache.get("serviceTemplate.html"), 'service', services.filter(namespaceFilter))); replicationControllersEl.append(createElements($templateCache.get("replicationControllerTemplate.html"), 'replicationController', replicationControllers.filter(namespaceFilter))); hosts.forEach(function (host) { var hostEl = angular.element(createElement($templateCache.get("overviewHostTemplate.html"), 'host', host)); var podContainer = angular.element(hostEl.find('.pod-container')); podContainer.append(createElements($templateCache.get("podTemplate.html"), "pod", host.pods)); hostsEl.append(hostEl); }); //parentEl.append(createElements($templateCache.get("podTemplate.html"), 'pod', pods)); element.append($compile(parentEl)(scope)); $timeout(function () { element.css({ visibility: 'visible' }); }, 250); } function update() { scope.$emit('jsplumbDoWhileSuspended', function () { log.debug("Update"); var services = model.services; var replicationControllers = model.replicationControllers; var pods = model.pods; var hosts = model.hosts; var parentEl = element.find('[hawtio-jsplumb]'); var children = parentEl.find('.jsplumb-node'); children.each(function (index, c) { var child = angular.element(c); var key = child.attr('id'); log.debug('key: ', key); if (Core.isBlank(key)) { return; } var type = child.attr('data-type'); switch (type) { case 'host': if (key in model.podsByHost) { return; } break; case 'service': if (key in model.servicesByKey && Kubernetes.getNamespace(model.servicesByKey[key]) == scope.kubernetes.selectedNamespace) { var service = model.servicesByKey[key]; child.attr('connect-to', service.connectTo); return; } break; case 'pod': /* if (hasId(pods, id)) { return; } */ if (key in model.podsByKey) { return; } break; case 'replicationController': if (key in model.replicationControllersByKey) { var replicationController = model.replicationControllersByKey[key]; child.attr('connect-to', replicationController.connectTo); return; } break; default: log.debug("Ignoring element with unknown type"); return; } log.debug("Removing: ", key); child.remove(); }); var servicesEl = element.find(".services"); var replicationControllersEl = element.find(".replicationControllers"); var hostsEl = element.find(".hosts"); appendNewElements(servicesEl, $templateCache.get("serviceTemplate.html"), "service", services); appendNewElements(replicationControllersEl, $templateCache.get("replicationControllerTemplate.html"), "replicationController", replicationControllers); appendNewElements(hostsEl, $templateCache.get("overviewHostTemplate.html"), "host", hosts); hosts.forEach(function (host) { var hostEl = angular.element(hostsEl.find("#" + host.elementId)); var podContainer = angular.element(hostEl.find('.pod-container')); appendNewElements(podContainer, $templateCache.get("podTemplate.html"), "pod", host.pods); }); }); } function refreshDrawing() { log.debug("Refreshing drawing"); if (element.children().length === 0) { firstDraw(); } else { update(); } Core.$apply(scope); } scope.$on('kubernetesModelUpdated', _.debounce(refreshDrawing, 500, { trailing: true })); setTimeout(refreshDrawing, 100); } }; }]); var OverviewBoxController = Kubernetes.controller("OverviewBoxController", ["$scope", "$location", function ($scope, $location) { $scope.viewDetails = function (entity, path) { if (entity) { var namespace = Kubernetes.getNamespace(entity); var id = Kubernetes.getName(entity); $location.path(UrlHelpers.join('/kubernetes/namespace', namespace, path, id)); } else { Kubernetes.log.warn("No entity for viewDetails!"); } }; }]); var scopeName = "OverviewController"; var OverviewController = Kubernetes.controller(scopeName, ["$scope", "$location", "$http", "$timeout", "$routeParams", "KubernetesModel", "KubernetesState", "KubernetesApiURL", function ($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL) { $scope.name = scopeName; $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); //$scope.subTabConfig = []; }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.PipelinesController = Kubernetes.controller("PipelinesController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); /** * Lets update the various data to join them together to a pipeline model */ function updateData() { var pipelineSteps = {}; if ($scope.buildConfigs && $scope.builds && $scope.deploymentConfigs) { Kubernetes.enrichBuildConfigs($scope.buildConfigs, $scope.builds); $scope.fetched = true; angular.forEach($scope.buildConfigs, function (buildConfig) { var pipelineKey = createPipelineKey(buildConfig); if (pipelineKey) { pipelineSteps[pipelineKey] = { buildConfig: buildConfig, builds: [], triggeredBy: null, triggersSteps: [], $class: 'pipeline-build' }; } }); angular.forEach($scope.builds, function (build) { var pipelineKey = createPipelineKey(build); if (pipelineKey) { var pipeline = pipelineSteps[pipelineKey]; if (!pipeline) { //console.log("warning no pipeline generated for buildConfig for key " + pipelineKey + " for build " + angular.toJson(build, true)); console.log("warning no pipeline generated for buildConfig for key " + pipelineKey + " for build " + build.$name); } else { pipeline.builds.push(build); } } }); // TODO now we need to look at the triggers to figure out which pipelineSteps triggers each pipelineStep // now lets create an array of all pipelines, starting from the first known step with a list of the steps var pipelines = []; angular.forEach(pipelineSteps, function (pipelineStep, key) { if (!pipelineStep.triggeredBy) { // we are a root step.... pipelines.push(pipelineStep); // now lets add all the steps for this key... pipelineStep.triggersSteps.push(pipelineStep); angular.forEach(pipelineSteps, function (step) { if (step.triggeredBy === key) { pipelineStep.triggersSteps.push(step); } }); } }); angular.forEach($scope.deploymentConfigs, function (deploymentConfig) { if (!deploymentConfig.kind) { deploymentConfig.kind = "DeploymentConfig"; } angular.forEach(deploymentConfig.triggers, function (trigger) { var type = trigger.type; var imageChangeParams = trigger.imageChangeParams; if (imageChangeParams && type === "ImageChange") { var from = imageChangeParams.from; if (from) { var name = from.name; if (from.kind === "ImageRepository") { var tag = imageChangeParams.tag || "latest"; if (name) { // now lets find a pipeline step which fires from this angular.forEach(pipelineSteps, function (pipelineStep, key) { var to = Core.pathGet(pipelineStep, ["buildConfig", "parameters", "output", "to"]); if (to && (to.kind === "ImageRepository" || to.kind === "ImageStream")) { var toName = to.name; if (toName === name) { var selector = Core.pathGet(deploymentConfig, ["template", "controllerTemplate", "selector"]); var pods = []; var $podCounters = selector ? Kubernetes.createPodCounters(selector, KubernetesModel.podsForNamespace(), pods) : null; var deployPipelineStep = { buildConfig: deploymentConfig, $class: 'pipeline-deploy', $podCounters: $podCounters, $pods: pods }; pipelineStep.triggersSteps.push(deployPipelineStep); } } }); } } } } }); }); $scope.pipelines = pipelines; } } /** * Lets create a unique key for build / config we can use to do linking of builds / configs / triggers */ function createPipelineKey(buildConfig) { return Core.pathGet(buildConfig, ["parameters", "source", "git", "uri"]); } $scope.$keepPolling = function () { return Kubernetes.keepPollingModel; }; $scope.fetch = PollHelpers.setupPolling($scope, function (next) { var ready = 0; var numServices = 3; function maybeNext() { if (++ready >= numServices) { next(); } } var url = Kubernetes.buildsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.builds = Kubernetes.enrichBuilds(data.items); updateData(); } maybeNext(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); maybeNext(); }); url = Kubernetes.buildConfigsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.buildConfigs = data.items; updateData(); } maybeNext(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); maybeNext(); }); url = Kubernetes.deploymentConfigsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.deploymentConfigs = data.items; updateData(); } maybeNext(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); maybeNext(); }); }); $scope.fetch(); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.PodController = Kubernetes.controller("PodController", ["$scope", "KubernetesModel", "KubernetesState", "ServiceRegistry", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "$window", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, ServiceRegistry, $templateCache, $location, $routeParams, $http, $timeout, $window, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.rawModel = null; $scope.itemConfig = { properties: { 'containers/image$': { template: $templateCache.get('imageTemplate.html') }, 'status/phase': { template: $templateCache.get('statusTemplate.html') }, '\\/Env\\/': { template: $templateCache.get('envItemTemplate.html') }, '^\\/labels$': { template: $templateCache.get('labelTemplate.html') }, '\\/env\\/key$': { hidden: true } } }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.$watch('model.pods', function (newValue, oldValue) { updateData(); }, true); $scope.flipRaw = function () { $scope.rawMode = !$scope.rawMode; Core.$apply($scope); }; $scope.openLogs = function () { var pods = [$scope.item]; Kubernetes.openLogsForPods(ServiceRegistry, $window, KubernetesModel.currentNamespace(), pods); }; updateData(); function updateData() { $scope.id = $routeParams["id"]; $scope.item = $scope.model.getPod(KubernetesState.selectedNamespace, $scope.id); if ($scope.item) { $scope.rawModel = Kubernetes.toRawYaml($scope.item); } Core.$apply($scope); } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.PodEditController = Kubernetes.controller("PodEditController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "SchemaRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, schemas) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = schemas.cloneSchema("io.fabric8.kubernetes.api.model.Pod"); //$scope.config = KubernetesSchema.definitions.kubernetes_v1beta2_Pod; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { if ($scope.id) { $scope.entity = $scope.model.getPod(KubernetesState.selectedNamespace, $scope.id); Core.$apply($scope); $scope.fetched = true; } else { $scope.fetched = true; } } $scope.save = function () { console.log($scope.entity); }; }]); })(Kubernetes || (Kubernetes = {})); /// var Kubernetes; (function (Kubernetes) { var log = Logger.get('kubernetes-watcher'); var k8sTypes = KubernetesAPI.NamespacedTypes.k8sTypes; var osTypes = KubernetesAPI.NamespacedTypes.osTypes; var self = {}; var updateFunction = function () { log.debug("Objects changed, firing listeners"); var objects = {}; _.forEach(self.getTypes(), function (type) { objects[type] = self.getObjects(type); }); _.forEach(self.listeners, function (listener) { listener(objects); }); }; var debouncedUpdate = _.debounce(updateFunction, 75, { trailing: true }); var namespaceWatch = { selected: undefined, watch: undefined, objects: [], objectMap: {}, watches: {} }; hawtioPluginLoader.registerPreBootstrapTask({ name: 'KubernetesWatcherInit', depends: ['KubernetesApiDiscovery'], task: function (next) { var booted = false; if (Kubernetes.isOpenShift) { log.info("Backend is an Openshift instance"); } else { log.info("Backend is a vanilla Kubernetes instance"); } namespaceWatch.watch = KubernetesAPI.watch({ kind: KubernetesAPI.WatchTypes.NAMESPACES, success: function (objects) { namespaceWatch.objects = objects; if (!booted) { booted = true; self.setNamespace(localStorage[Kubernetes.Constants.NAMESPACE_STORAGE_KEY] || Kubernetes.defaultNamespace); next(); } log.debug("Got namespaces: ", namespaceWatch.objects); }, error: function (error) { log.warn("Error fetching namespaces: ", error); // TODO is this necessary? //HawtioOAuth.doLogout(); if (!booted) { booted = true; next(); } } }); } }); hawtioPluginLoader.registerPreBootstrapTask({ name: 'KubernetesApiDiscovery', depends: ['hawtio-oauth'], task: function (next) { Kubernetes.isOpenShift = false; var userProfile = HawtioOAuth.getUserProfile(); log.debug("User profile: ", userProfile); if (userProfile && userProfile.provider === "hawtio-google-oauth") { log.debug("Possibly running on GCE"); // api master is on GCE $.ajax({ url: UrlHelpers.join(Kubernetes.masterApiUrl(), 'api', 'v1', 'namespaces'), complete: function (jqXHR, textStatus) { if (textStatus === "success") { log.debug("jqXHR: ", jqXHR); userProfile.oldToken = userProfile.token; userProfile.token = undefined; $.ajaxSetup({ beforeSend: function (request) { } }); } next(); }, beforeSend: function (request) { } }); } else { log.debug("Not running on GCE"); // double-check if we're on vanilla k8s or openshift var rootUri = new URI(Kubernetes.masterApiUrl()).path("/oapi").query("").toString(); log.debug("Checking for an openshift backend"); HawtioOAuth.authenticatedHttpRequest({ url: rootUri, success: function (data) { if (data) { Kubernetes.isOpenShift = true; } next(); }, error: function (jqXHR, textStatus, errorThrown) { var error = KubernetesAPI.getErrorObject(jqXHR); if (!error) { log.debug("Failed to find root paths: ", textStatus, ": ", errorThrown); } else { log.debug("Failed to find root paths: ", error); } Kubernetes.isOpenShift = false; next(); } }); } } }); var customUrlHandlers = {}; self.setNamespace = function (namespace) { if (namespace === namespaceWatch.selected) { return; } if (namespaceWatch.selected) { log.debug("Stopping current watches"); _.forOwn(namespaceWatch.watches, function (watch, key) { if (!KubernetesAPI.namespaced(key)) { return; } log.debug("Disconnecting watch: ", key); watch.disconnect(); }); _.forEach(_.keys(namespaceWatch.watches), function (key) { if (!KubernetesAPI.namespaced(key)) { return; } log.debug("Deleting kind: ", key); delete namespaceWatch.watches[key]; }); } namespaceWatch.selected = namespace; if (namespace) { _.forEach(self.getTypes(), function (kind) { if (kind === KubernetesAPI.WatchTypes.NAMESPACES) { return; } if (!namespaceWatch.watches[kind]) { log.debug("Creating watch for kind: ", kind); var config = { kind: kind, namespace: KubernetesAPI.namespaced(kind) ? namespace : undefined, success: function (objects) { watch.objects = objects; debouncedUpdate(); } }; if (kind in customUrlHandlers) { config.urlFunction = customUrlHandlers[kind]; } var watch = KubernetesAPI.watch(config); watch.config = config; namespaceWatch.watches[kind] = watch; } }); } }; self.hasWebSocket = true; self.getNamespace = function () { return namespaceWatch.selected; }; self.registerCustomUrlFunction = function (kind, url) { customUrlHandlers[kind] = url; if (kind in namespaceWatch.watches) { var watch = namespaceWatch.watches[kind]; var config = watch.config; config.urlFunction = url; watch.disconnect(); delete namespaceWatch.watches[kind]; config.success = function (objects) { watch.objects = objects; debouncedUpdate(); }; watch = KubernetesAPI.watch(config); watch.config = config; namespaceWatch.watches[kind] = watch; } }; self.getTypes = function () { var filter = function (kind) { // filter out stuff we don't care about yet switch (kind) { case KubernetesAPI.WatchTypes.OAUTH_CLIENTS: case KubernetesAPI.WatchTypes.IMAGE_STREAMS: case KubernetesAPI.WatchTypes.POLICIES: case KubernetesAPI.WatchTypes.ROLES: case KubernetesAPI.WatchTypes.ROLE_BINDINGS: case KubernetesAPI.WatchTypes.POLICY_BINDINGS: case KubernetesAPI.WatchTypes.PERSISTENT_VOLUME_CLAIMS: case KubernetesAPI.WatchTypes.PERSISTENT_VOLUMES: case KubernetesAPI.WatchTypes.ENDPOINTS: case KubernetesAPI.WatchTypes.RESOURCE_QUOTAS: case KubernetesAPI.WatchTypes.SERVICE_ACCOUNTS: return false; default: return true; } }; var answer = k8sTypes.concat([Kubernetes.WatchTypes.NAMESPACES]); if (Kubernetes.isOpenShift) { answer = answer.concat(osTypes); } else { answer = answer.concat(KubernetesAPI.WatchTypes.TEMPLATES); answer = answer.concat(KubernetesAPI.WatchTypes.BUILD_CONFIGS); } return _.filter(answer, filter); }; self.getObjects = function (kind) { if (kind === Kubernetes.WatchTypes.NAMESPACES) { return namespaceWatch.objects; } if (kind in namespaceWatch.watches) { return namespaceWatch.watches[kind].objects; } else { return undefined; } }; self.listeners = []; // listener gets notified after a bunch of changes have occurred self.registerListener = function (fn) { self.listeners.push(fn); }; var projectsHandle = undefined; // kick off the project watcher a bit sooner also hawtioPluginLoader.registerPreBootstrapTask({ name: 'ProjectsWatcher', depends: ['KubernetesApiDiscovery'], task: function (next) { if (Kubernetes.isOpenShift) { projectsHandle = KubernetesAPI.watch({ kind: KubernetesAPI.WatchTypes.PROJECTS, namespace: undefined, success: function (objects) { if (self.listeners && self.listeners.length) { log.debug("got projects: ", objects); _.forEach(self.listeners, function (listener) { listener({ projects: objects }); }); } } }); } next(); } }); Kubernetes._module.service('WatcherService', ['userDetails', '$rootScope', '$timeout', function (userDetails, $rootScope, $timeout) { return self; }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { var log = Logger.get("kubernetes-term-windows"); Kubernetes._module.config(["kubernetesContainerSocketProvider", function (kubernetesContainerSocketProvider) { kubernetesContainerSocketProvider.WebSocketFactory = "CustomWebSockets"; }]); Kubernetes._module.factory('CustomWebSockets', ["userDetails", function (userDetails) { return function CustomWebSocket(url, protocols) { var paths = url.split('?'); if (!_.startsWith(paths[0], Kubernetes.masterApiUrl())) { paths[0] = UrlHelpers.join(Kubernetes.masterApiUrl(), paths[0]); } url = KubernetesAPI.wsUrl(paths[0]); url.search(paths[1] + '&access_token=' + userDetails.token); log.debug("Using ws url: ", url.toString()); return new WebSocket(url.toString(), protocols); }; }]); Kubernetes._module.service('TerminalService', ["$rootScope", "$document", "$compile", "$interval", "$templateCache", function ($rootScope, $document, $compile, $interval, $templateCache) { var body = $document.find('body'); function positionTerminals(terminals) { var total = _.keys(terminals).length; var dist = (body.width() - 225) / total; var position = 5; angular.forEach(terminals, function (value, key) { if (!value.scope.docked) { return; } value.el.css('left', position + 'px'); position = position + dist; }); } var defaultTemplate = $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, 'termShell.html')); var self = { positionTerminals: function () { positionTerminals(self.terminals); }, terminals: {}, httpTask: {}, newTerminal: function ($interval, podLink, containerName, entity, template) { if (template === void 0) { template = defaultTemplate; } var terminalId = UrlHelpers.join(podLink, containerName); if (terminalId in self.terminals) { log.debug("Already a terminal with id: ", terminalId); self.raiseTerminal(terminalId); return terminalId; } var scope = $rootScope.$new(); getLogs(entity, scope); scope.podLink = podLink; scope.containerName = containerName; scope.id = terminalId; scope.docked = true; if (terminalId in self.httpTask) { self.raiseTerminal(terminalId); return terminalId; } else { self.httpTask[terminalId] = $interval(function () { getLogs(entity, scope); }, 2000); } var el = $($compile(template)(scope)); var term = { scope: scope, el: el }; body.append(el); self.terminals[terminalId] = term; positionTerminals(self.terminals); return terminalId; }, closeTerminal: function (id) { var term = self.terminals[id]; var timer = self.httpTask[id]; if (timer) { $interval.cancel(timer); delete self.httpTask[id]; } if (term) { term.el.remove(); delete self.terminals[id]; positionTerminals(self.terminals); } }, raiseTerminal: function (id) { angular.forEach(self.terminals, function (value, key) { if (key === id) { value.el.css('z-index', '4000'); value.el.find('.terminal').focus(); } else { value.el.css('z-index', '3000'); } }); } }; return self; }]); function addWindowActions(scope, element, TerminalService) { var moved = false; var lastX = 0; var lastY = 0; var header = element.find('.terminal-title'); var body = element.find('.terminal-body'); element.on('$destroy', function () { $('#main').css({ display: 'inherit' }); }); var HEIGHT = 348; var WIDTH = 600; var TITLE_HEIGHT = 35; var NAV_OFFSET = 46; element.css({ height: HEIGHT, width: WIDTH }); header.css({ height: TITLE_HEIGHT }); body.css({ position: 'absolute', top: 35, left: 0, right: 0, bottom: 0 }); scope.close = function () { TerminalService.closeTerminal(scope.id); }; scope.raise = function () { TerminalService.raiseTerminal(scope.id); }; scope.$watch('docked', function (docked) { if (docked) { element.width(WIDTH); if (!element.hasClass('minimized')) { element.height(HEIGHT); } } }); scope.startResize = function (e) { e.preventDefault(); log.debug("Start resize"); scope.resizing = true; element.on('mouseup', scope.stopResize); $(document).on('mousemove', scope.doResize); $(document).on('mouseleave', scope.stopResize); }; scope.doResize = function (e) { if (scope.resizing) { log.debug("Resizing, e: ", e); if (!moved) { lastX = e.clientX; lastY = e.clientY; moved = true; return; } var height = element.height(); var width = element.width(); var deltaX = e.clientX - lastX; var deltaY = e.clientY - lastY; var newHeight = height + deltaY; var newWidth = width + deltaX; if (newHeight > 35 && newWidth > 80) { element.height(height + deltaY); element.width(width + deltaX); } lastX = e.clientX; lastY = e.clientY; } }; scope.stopResize = function (e) { scope.resizing = false; moved = false; element.off('mouseup', scope.stopResize); $(document).off('mousemove', scope.doResize); $(document).off('mouseleave', scope.stopResize); }; scope.mouseDown = function (e) { e.preventDefault(); if (element.hasClass('minimized') || element.hasClass('maximized')) { return; } scope.dragging = true; element.on('mouseup', scope.mouseUp); $(document).on('mousemove', scope.mouseMove); $(document).on('mouseleave', scope.mouseUp); }; scope.mouseUp = function (e) { e.preventDefault(); scope.dragging = false; moved = false; var height = element.height(); var offset = element.offset(); var winHeight = $(window).height(); if (offset.top > (winHeight - height - 20)) { element.css({ top: "inherit", left: "inherit" }); scope.docked = true; TerminalService.positionTerminals(); } else { scope.docked = false; } element.off('mouseup', scope.mouseUp); $(document).off('mousemove', scope.mouseMove); $(document).off('mouseleave', scope.mouseUp); }; scope.mouseMove = function (e) { if (scope.dragging) { if (!moved) { lastX = e.clientX; lastY = e.clientY; moved = true; return; } var deltaX = e.clientX - lastX; var deltaY = e.clientY - lastY; var elOffset = element.offset(); element.offset({ top: elOffset.top + deltaY, left: elOffset.left + deltaX }); lastX = e.clientX; lastY = e.clientY; } }; function restoreWindow(scope, element) { if (scope.offset) { element.offset(scope.offset); scope.docked = false; } if (scope.height) { element.height(scope.height); } if (scope.width) { element.width(scope.width); } } function saveWindow(scope, element) { scope.offset = element.offset(); scope.height = element.height(); scope.width = element.width(); } scope.maximized = function () { return element.hasClass('maximized'); }; scope.maximize = function ($e) { $e.preventDefault(); if (element.hasClass('minimized')) { scope.minimize(); } if (element.hasClass('maximized')) { restoreWindow(scope, element); $('#main').css({ display: 'inherit' }); } else { saveWindow(scope, element); $('#main').css({ display: 'none' }); element.css({ height: 'inherit', bottom: 0, width: '100%', top: NAV_OFFSET, left: 0 }); } element.toggleClass('maximized'); }; scope.minimize = function ($e) { $e.preventDefault(); if (element.hasClass('maximized')) { scope.maximize(); } if (element.hasClass('minimized')) { restoreWindow(scope, element); } else { saveWindow(scope, element); scope.docked = true; element.css({ height: TITLE_HEIGHT, top: "inherit", left: "inherit" }); TerminalService.positionTerminals(); } element.toggleClass('minimized'); }; } Kubernetes.addWindowActions = addWindowActions; Kubernetes._module.directive('terminalWindow', ["$compile", "TerminalService", function ($compile, TerminalService) { return { restrict: 'A', scope: false, link: function (scope, element, attr) { addWindowActions(scope, element, TerminalService); var body = element.find('.terminal-body'); body.append($compile('')(scope)); } }; }]); function getLogs(rc, scope) { 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 = {})); /// /// var Kubernetes; (function (Kubernetes) { var log = Logger.get("kubernetes-pod-logs"); Kubernetes._module.service("PodLogReplacements", function () { return []; }); Kubernetes._module.run(["PodLogReplacements", function (PodLogReplacements) { var log = Logger.get("pod-log-replacers"); // Add ANSI escape character replacer // adapted from https://github.com/mmalecki/ansispan var colors = { '30': 'black', '31': 'red', '32': 'green', '33': 'yellow', '34': 'blue', '35': 'purple', '36': 'cyan', '37': 'white' }; PodLogReplacements.push(function (msg) { if (!msg) { return msg; } var end = ""; _.forOwn(colors, function (color, code) { var start = ""; msg = msg.replace(new RegExp('\033\\[' + code + 'm', 'g'), start); msg = msg.replace(new RegExp('\033\\[0;' + code + 'm', 'g'), start); }); msg = msg.replace(/\033\[1m/g, '').replace(/\033\[22m/g, ''); msg = msg.replace(/\033\[3m/g, '').replace(/\033\[23m/g, ''); msg = msg.replace(/\033\[m/g, end); msg = msg.replace(/\033\[0m/g, end); msg = msg.replace(/\033\[39m/g, end); msg = msg.replace(/\033\[2m/g, ''); msg = msg.replace(/\033\[0;39m/g, end); log.debug("Running replacement on message: ", msg); return msg; }); }]); Kubernetes._module.controller("Kubernetes.PodLogLinkController", ["$scope", "$interval", "TerminalService", "$templateCache", function ($scope, $interval, TerminalService, $templateCache) { $scope.openLogs = function (entity) { log.debug("Open logs: ", entity); TerminalService.newTerminal($interval, entity.metadata.selfLink, entity.$oracleName, entity, $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, 'logShell.html'))); }; }]); Kubernetes._module.directive('podLogDisplay', ["userDetails", "PodLogReplacements", function (userDetails, PodLogReplacements) { return { restrict: 'E', template: "\n \n ", link: function (scope, element, attr) { var link = scope.$eval('podLink'); var name = scope.$eval('containerName'); if (!link) { return; } scope.fetched = false; scope.previous = false; scope.messages = []; link = UrlHelpers.join(Kubernetes.masterApiUrl(), link, 'log'); link = KubernetesAPI.wsUrl(link); link.search({ follow: true, tailLines: 1000, access_token: userDetails.token }); var messages = []; var pullMessages = _.debounce(function () { scope.messages = scope.messages.concat(_.remove(messages, function () { return true; }).map(function (msg) { PodLogReplacements.forEach(function (replFunc) { if (angular.isFunction(replFunc)) { msg = replFunc(msg); } }); return msg; })); if (!scope.fetched) { scope.fetched = true; } Core.$apply(scope); }, 1000); function initSocket(link) { scope.fetched = false; messages.length = 0; scope.messages.length = 0; var ws = new WebSocket(link.toString(), 'base64.binary.k8s.io'); ws.onmessage = function (event) { try { var message = window.atob(event.data); messages.push(message); pullMessages(); } catch (err) { } }; return ws; } var ws = initSocket(link); scope.$watch('previous', function (value, old) { if (value !== old) { if (link.hasSearch('previous')) { link.removeSearch('previous').addSearch('previous', scope.previous); } else { link.addSearch('previous', scope.previous); } ws.close(); ws = initSocket(link); } }); element.on('$destroy', function () { if (ws) { try { ws.close(); } catch (err) { } delete ws; } }); } }; }]); Kubernetes._module.directive('podLogWindow', ["$compile", "TerminalService", function ($compile, TerminalService) { return { restrict: 'A', scope: false, link: function (scope, element, attr) { Kubernetes.addWindowActions(scope, element, TerminalService); scope.atBottom = true; scope.$watch('atBottom', function (val) { console.log("atBottom: ", val); }); } }; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.EnvItem = Kubernetes.controller("EnvItem", ["$scope", function ($scope) { var parts = $scope.data.split('='); $scope.key = parts.shift(); $scope.value = parts.join('='); }]); // main controller for the page Kubernetes.Pods = Kubernetes.controller("Pods", ["$scope", "KubernetesModel", "KubernetesPods", "KubernetesState", "ServiceRegistry", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesPods, KubernetesState, ServiceRegistry, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.itemSchema = Forms.createFormConfiguration(); $scope.tableConfig = { data: 'model.pods', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '_key', displayName: 'Name', defaultSort: true, cellTemplate: $templateCache.get("idTemplate.html") }, { field: '$statusCss', displayName: 'Status', cellTemplate: $templateCache.get("statusTemplate.html") }, { field: '$eventCount', displayName: 'Events', cellTemplate: $templateCache.get("eventSummaryTemplate.html") }, { field: '$restartCount', displayName: 'Restarts' }, { field: '$createdTime', displayName: 'Age', cellTemplate: $templateCache.get("ageTemplate.html") }, { field: '$imageNames', displayName: 'Images', cellTemplate: $templateCache.get("imageTemplate.html") }, { field: '$host', displayName: 'Host', cellTemplate: $templateCache.get("hostTemplate.html") }, { field: '$labelsText', displayName: 'Labels', cellTemplate: $templateCache.get("labelTemplate.html") }, { field: '$podIP', displayName: 'Pod IP', customSortField: function (field) { return Kubernetes.sortByPodIp(field.$podIP); } } ] }; $scope.openLogs = function () { var pods = $scope.tableConfig.selectedItems; if (!pods || !pods.length) { if ($scope.id) { var item = $scope.item; if (item) { pods = [item]; } } } Kubernetes.openLogsForPods(ServiceRegistry, $window, KubernetesModel.currentNamespace(), pods); }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.deletePrompt = function (selected) { if (angular.isString(selected)) { selected = [{ id: selected }]; } UI.multiItemConfirmActionDialog({ collection: selected, index: 'metadata.name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { Kubernetes.log.debug("deleting: ", Kubernetes.getName(next)); KubernetesPods.delete({ id: Kubernetes.getName(next) }, undefined, function () { Kubernetes.log.debug("deleted: ", Kubernetes.getName(next)); deleteSelected(selected, selected.shift()); }, function (error) { Kubernetes.log.debug("Error deleting: ", error); deleteSelected(selected, selected.shift()); }); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete pods?', action: 'The following pods will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; $scope.createPods = function () { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status == 200) { var obj = JSON.parse(xhr.responseText); var object = { "name": "newpod", "labels": { "aim": "test", "app": "oracle" }, "path": '/home/', "port": 1525 }; Kubernetes.createRC(object); } else { } } }; xhr.open("POST", "/oracleAppPath", false); //与服务器连接并发送 xhr.send(null); }; }]); })(Kubernetes || (Kubernetes = {})); /* read a object from jiangsu province , such as nanjing with some information 读取江苏的某个地区的信息,以及系统信息 */ var Kubernetes; (function (Kubernetes) { var 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" }]; var 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 = 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 = 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 = 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 = 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 = origin_place_arr; var jsonlength = jsobj.length; for (var i = 0; i < jsonlength; i++) { if (jsobj[i].sys_name == name) { return jsobj[i].sys_code; } } return name; } Kubernetes.getCodeBySystemName = getCodeBySystemName; })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ReplicationControllerController = Kubernetes.controller("ReplicationControllerController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.rawModel = null; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.itemConfig = { properties: { '^\\/labels$': { template: $templateCache.get('labelTemplate.html') } } }; $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.$watch('model.pods', function (newValue, oldValue) { updateData(); }, true); $scope.flipRaw = function () { $scope.rawMode = !$scope.rawMode; Core.$apply($scope); }; updateData(); function updateData() { if ($scope.dirty) { return; } $scope.id = $routeParams["id"]; $scope.item = $scope.model.getReplicationController(KubernetesState.selectedNamespace, $scope.id); if ($scope.item) { $scope.rawModel = Kubernetes.toRawYaml($scope.item); } Core.$apply($scope); } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ReplicationControllerEditController = Kubernetes.controller("ReplicationControllerEditController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "SchemaRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, schemas) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; Kubernetes.log.debug("Schema: ", $scope.schema); $scope.config = schemas.cloneSchema("io.fabric8.kubernetes.api.model.ReplicationController"); //$$scope.config = KubernetesSchema.definitions.kubernetes_v1beta3_ReplicationController; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { if ($scope.id) { $scope.entity = $scope.model.getReplicationController(KubernetesState.selectedNamespace, $scope.id); Core.$apply($scope); $scope.fetched = true; } else { $scope.fetched = true; } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ReplicationControllers = Kubernetes.controller("ReplicationControllers", ["$scope", "KubernetesModel", "DataInfoModel", "KubernetesReplicationControllers", "KubernetesPods", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, DataInfoModel, KubernetesReplicationControllers, KubernetesPods, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.filterReplicationControllers = $scope.model.filterReplicationcontrollers; $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.log.debug("deleting: ", Kubernetes.getName(next)); Kubernetes.resizeController($http, KubernetesApiURL, next, 0, function () { Kubernetes.log.debug("updated number of replicas"); KubernetesReplicationControllers.delete({ id: Kubernetes.getName(next) }, undefined, function () { Kubernetes.log.debug("deleted: ", Kubernetes.getName(next)); if (next.metadata.labels.style === "oracle") { console.log("delete " + next.metadata.name); Kubernetes.connectOracle($http, $timeout, "/cancelOracleConection", "delete", Kubernetes.getName(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', custom: "该服务删除后将会清除oracle对应服务的端口等资源占用,但不删除数据文件,是否删除,请确认!", customClass: "alert alert-warning", cancelText: "取消" }).open(); }; $scope.createRCs = function () { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status == 200) { var obj = JSON.parse(xhr.responseText); //console.log(obj.path); var name = obj.name; //console.log(name + "=====" +port); var object = { "name": name, "labels": { "name": name }, "path": obj.path, "isTarget": "true" }; console.log(object); Kubernetes.createRC(object, function (rc) { $http({ url: '/xmlformserver', method: 'Post' }).success(function (data, header, config, status) { if (data) { DataInfoModel.serverdata = data; } }).error(function (data, header, config, status) { console.log("error"); }); Kubernetes.connectOracle($http, $timeout, "/connectToOracle", "create", Kubernetes.getName(rc), 0); }); } else if (xhr.status == 403) { alert("两次创建oracle服务时间间隔需要超过2分钟!"); } else { } } }; xhr.open("POST", "/oracleAppPath", false); //与服务器连接并发送 xhr.send(null); }; $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") { console.log("stop " + next.metadata.name); Kubernetes.connectOracle($http, $timeout, "/cancelOracleConection", "stop", Kubernetes.getName(next), 0); } stopSelected(selected, selected.shift()); }); } } stopSelected(selected, selected.shift()); } }, title: '是否需要停止oracle服务?', action: '以下的oracle服务将会被停止:', okText: '停止', okClass: 'btn-danger', custom: "该服务停止后将无法继续提供连接访问服务,但可通过启动按钮重新启动该服务以进行访问。是否停止,请确认", customClass: "alert alert-warning", cancelText: "取消" }).open(); }; $scope.reStartPrompt = function (selected) { function startSelected(selected, next) { if (next) { if (next.$replicas === 0) Kubernetes.resizeController($http, KubernetesApiURL, next, 1, function () { console.log("restart " + next.metadata.name); Kubernetes.connectOracle($http, $timeout, "/connectToOracle", "reStart", Kubernetes.getName(next), 0); startSelected(selected, selected.shift()); }); } } startSelected(selected, selected.shift()); }; $scope.extractData = { items: null, selectedItem: $scope.filterReplicationControllers[0] || "", dialog: new UI.Dialog(), onOk: function () { var extractData = $scope.extractData; extractData.dialog.close(); var filterReplicationController = extractData.selectedItem; Kubernetes.extractDataToOracle($http, extractData.items, filterReplicationController); extractData.selectedItem = $scope.filterReplicationControllers[0] || ""; }, open: function (selected) { var extractData = $scope.extractData; extractData.dialog.open(); extractData.selectedItem = $scope.filterReplicationControllers[0] || ""; extractData.items = selected; $timeout(function () { $('#newDataName').focus(); }, 50); }, close: function () { $scope.extractData.dialog.close(); } }; }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { function schemaSetRequired(schema, propertyName, isRequired) { if (isRequired === void 0) { isRequired = true; } if (schema && propertyName) { var required = schema.required; if (isRequired) { if (!required) { required = []; schema.required = required; } if (!_.contains(required, propertyName)) { required.push(propertyName); } } else { if (required) { var idx = required.indexOf(propertyName); if (idx >= 0) { required.splice(idx, 1); } } } } } Kubernetes.schemaSetRequired = schemaSetRequired; })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.SecretController = Kubernetes.controller("SecretController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "K8SClientFactory", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, K8SClientFactory) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); Kubernetes.selectSubNavBar($scope, "Secrets", $scope.id ? "Edit Secret: " + $scope.id : "Create Secret"); var kubeClient = Kubernetes.createKubernetesClient("secrets"); var onSaveUrl = $location.search()["savedUrl"]; var createKind = $location.search()["kind"]; $scope.sshKeys = Kubernetes.sshSecretDataKeys; $scope.httpsKeys = Kubernetes.httpsSecretDataKeys; var secretLabels = { "ssh-key": "SSH private key", "ssh-key.pub": "SSH public key", "ca.crt": "CA Certificate", ".dockercfg": "Docker config", "username": "User name" }; var secretTooltips = { "ssh-key": "SSH private key text contents", "ca.crt": "Certificate Authority (CA) Certificate", ".dockercfg": "Docker configuration token" }; $scope.$on('kubernetesModelUpdated', function () { if ($scope.id && !$scope.secret) { updateData(); } }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.propertyKeys = function () { return _.keys(secretLabels); }; $scope.checkNameUnique = function (value) { var answer = true; angular.forEach($scope.model.secrets, function (secret) { var name = Kubernetes.getName(secret); if (value === name) { answer = false; } }); return answer; }; $scope.checkFieldUnique = function (key) { return $scope.entity.properties[key] ? false : true; }; $scope.hasAllKeys = function (keys) { var answer = keys && keys.length; angular.forEach(keys, function (key) { if (!$scope.entity.properties[key]) { answer = false; } }); return answer; }; $scope.addFieldDialog = { controller: null, newReplicas: 0, dialog: new UI.Dialog(), onOk: function () { $scope.addFieldDialog.dialog.close(); $scope.addDataField(); }, open: function (controller) { var addFieldDialog = $scope.addFieldDialog; addFieldDialog.dialog.open(); $timeout(function () { $('#newDataName').focus(); }, 50); }, close: function () { $scope.addFieldDialog.dialog.close(); } }; $scope.entityChanged = function () { $scope.changed = true; }; $scope.addFields = function (keys) { angular.forEach(keys, function (key) { return addField(key); }); Core.$apply($scope); }; function addField(key) { var property = createProperty(key, ""); $scope.entity.properties[key] = property; $scope.entity.newDataKey = ""; $scope.showAddDataFieldForm = false; $scope.entityChanged(); } $scope.addDataField = function () { var key = $scope.entity.newDataKey; if (key) { addField(key); Core.$apply($scope); } }; $scope.deleteProperty = function (key) { if (key) { delete $scope.entity.properties[key]; $scope.entityChanged(); Core.$apply($scope); } }; $scope.cancel = function () { updateData(); }; $scope.save = function () { var entity = $scope.entity || {}; var name = entity.name; if (name) { if (!$scope.secret) { $scope.secret = { apiVersion: Kubernetes.defaultApiVersion, kind: "Secret", metadata: { name: "" }, data: {} }; } var data = {}; angular.forEach(entity.properties, function (property) { var key = property.key; var value = property.value || ""; if (key) { data[key] = window.btoa(value); } }); $scope.secret.metadata.name = name; $scope.secret.data = data; Core.notification('info', "Saving secret " + name); kubeClient.put($scope.secret, function (data) { var secretsLink = onSaveUrl || Developer.namespaceLink($scope, $routeParams, "secrets"); var params = {}; if (onSaveUrl) { params['secret'] = name; } $location.path(secretsLink); $location.search(params); Kubernetes.log.info("navigating to URL: " + secretsLink + " with params " + angular.toJson($location.search())); }, function (err) { Core.notification('error', "Failed to secret " + name + "\n" + err); }); } }; updateData(); function createProperty(key, text) { var label = secretLabels[key] || Core.humanizeValue(key); var tooltip = secretTooltips[key] || "Value of the " + label; var rows = 5; var lines = text.split("\n").length + 1; if (lines > rows) { rows = lines; } var type = "textarea"; if (key === "username") { type = "text"; if (!text) { text = Kubernetes.currentUserName(); } } else if (key === "password") { type = "password"; } var property = { key: key, label: label, tooltip: tooltip, rows: rows, value: text, type: type }; return property; } function updateData() { $scope.item = null; $scope.changed = false; $scope.entity = { name: $scope.id, properties: {} }; if ($scope.id) { angular.forEach($scope.model.secrets, function (secret) { var name = Kubernetes.getName(secret); if (name === $scope.id) { $scope.secret = secret; angular.forEach(secret.data, function (value, key) { var text = ""; if (angular.isString(value) && value) { text = window.atob(value); } var property = createProperty(key, text); $scope.entity.properties[key] = property; }); $scope.fetched = true; Core.$apply($scope); } }); } else { if (createKind === "ssh") { $scope.addFields($scope.sshKeys); } else if (createKind === "https") { $scope.addFields($scope.httpsKeys); } $scope.fetched = true; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.SecretsController = Kubernetes.controller("SecretsController", ["$scope", "KubernetesModel", "KubernetesState", "ServiceRegistry", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, ServiceRegistry, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.$createSecretLink = Developer.namespaceLink($scope, $routeParams, "secretCreate"); var kubeClient = Kubernetes.createKubernetesClient("secrets"); $scope.tableConfig = { data: 'model.secrets', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '_key', displayName: 'Name', defaultSort: true, cellTemplate: $templateCache.get("idTemplate.html") }, { field: '$labelsText', displayName: 'Labels', cellTemplate: $templateCache.get("labelTemplate.html") }, ] }; $scope.deletePrompt = function (selected) { UI.multiItemConfirmActionDialog({ collection: selected, index: 'metadata.name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { kubeClient.delete(next, function () { deleteSelected(selected, selected.shift()); }); } else { } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Secrets', action: 'The following Secrets will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ServiceController = Kubernetes.controller("ServiceController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.rawModel = null; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.itemConfig = { properties: { '^\\/labels$': { template: $templateCache.get('labelTemplate.html') } } }; $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$watch('model.services', function (newValue, oldValue) { updateData(); }, true); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.flipRaw = function () { $scope.rawMode = !$scope.rawMode; Core.$apply($scope); }; updateData(); function updateData() { $scope.id = $routeParams["id"]; $scope.namespace = $routeParams["namespace"] || KubernetesState.selectedNamespace; $scope.item = $scope.model.getService($scope.namespace, $scope.id); if ($scope.item) { $scope.rawModel = Kubernetes.toRawYaml($scope.item); } Core.$apply($scope); } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ServiceEditController = Kubernetes.controller("ServiceEditController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "SchemaRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, schemas) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = schemas.cloneSchema("io.fabric8.kubernetes.api.model.Service"); //$scope.config = KubernetesSchema.definitions.kubernetes_v1beta2_Service; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { if ($scope.id) { $scope.entity = $scope.model.getService(KubernetesState.selectedNamespace, $scope.id); Core.$apply($scope); $scope.fetched = true; } else { $scope.fetched = true; } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes._module.factory('ServiceRegistry', [function () { return new ServiceRegistryService(); }]); /** * Represents a simple interface to service discovery that can be used early on in the application lifecycle before the * underlying model has been created via dependency injection */ var ServiceRegistryService = (function () { function ServiceRegistryService() { this.model = null; } /** * Returns true if there is a service available for the given ID or false */ ServiceRegistryService.prototype.hasService = function (serviceName) { return this.findService(serviceName) ? true : false; }; /** * Returns the service for the given service name (ID) or null if it cannot be found * * @param serviceName the name of the service to look for * @return {null} */ ServiceRegistryService.prototype.findService = function (serviceName) { var answer = null; if (serviceName) { var model = this.getModel(); if (model) { var namespace = model.currentNamespace(); return model.getService(namespace, serviceName); } } return answer; }; /** * Returns the service link for the given service name * * @param serviceName the name of the service * @return {null} */ ServiceRegistryService.prototype.serviceLink = function (serviceName) { var service = this.findService(serviceName); return Kubernetes.serviceLinkUrl(service); }; /** * Returns the service link for the given service name if its ready (has at least one ready pod) * * @param serviceName the name of the service * @return {null} */ ServiceRegistryService.prototype.serviceReadyLink = function (serviceName) { var service = this.findService(serviceName); if (Kubernetes.readyPodCount(service)) { return Kubernetes.serviceLinkUrl(service); } else { return null; } }; ServiceRegistryService.prototype.getModel = function () { var answer = this.model; // lets allow lazy load so we can be invoked before the injector has been created if (!answer) { var injector = HawtioCore.injector; if (injector) { this.model = injector.get('KubernetesModel'); } } answer = this.model; return answer; }; return ServiceRegistryService; }()); Kubernetes.ServiceRegistryService = ServiceRegistryService; })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ServiceApps = Kubernetes._module.controller('Kubernetes.ServiceApps', ["$scope", "KubernetesModel", function ($scope, KubernetesModel) { $scope.model = KubernetesModel; }]); Kubernetes.Services = Kubernetes.controller("Services", ["$scope", "KubernetesModel", "KubernetesServices", "KubernetesPods", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesServices, KubernetesPods, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; ControllerHelpers.bindModelToSearchParam($scope, $location, 'mode', 'mode', 'list'); $scope.tableConfig = { data: 'model.services', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '_key', displayName: 'Name', cellTemplate: $templateCache.get("idTemplate.html") }, { field: '$serviceUrl', displayName: 'Address', cellTemplate: $templateCache.get("portalAddress.html") }, { field: '$podCount', displayName: 'Pods', cellTemplate: $templateCache.get("podCountsAndLinkTemplate.html"), customSortField: function (field) { // need to concat all the pod counters var ready = field.$podCounters.ready || 0; var valid = field.$podCounters.valid || 0; var waiting = field.$podCounters.waiting || 0; var error = field.$podCounters.error || 0; return ready + valid + waiting + error; } }, { field: '$selectorText', displayName: 'Selector', cellTemplate: $templateCache.get("selectorTemplate.html") }, { field: '$labelsText', displayName: 'Labels', cellTemplate: $templateCache.get("labelTemplate.html") } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.deletePrompt = function (selected) { if (angular.isString(selected)) { selected = [{ id: selected }]; } UI.multiItemConfirmActionDialog({ collection: selected, index: 'metadata.name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { Kubernetes.log.debug("deleting: ", Kubernetes.getName(next)); KubernetesServices.delete({ id: Kubernetes.getName(next) }, undefined, function () { Kubernetes.log.debug("deleted: ", Kubernetes.getName(next)); deleteSelected(selected, selected.shift()); }, function (error) { Kubernetes.log.debug("Error deleting: ", error); deleteSelected(selected, selected.shift()); }); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete services?', action: 'The following services will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { // controller for the status icon cell Kubernetes.PodStatus = Kubernetes.controller("PodStatus", ["$scope", function ($scope) { $scope.statusMapping = function (text) { return Kubernetes.statusTextToCssClass(text); }; }]); Kubernetes._module.controller("Kubernetes.TermController", ["$scope", "TerminalService", function ($scope, TerminalService) { $scope.canConnectTo = function (container) { if (container.securityContext && container.securityContext.privileged) { return false; } return true; }; $scope.openTerminal = function (selfLink, containerName) { var id = TerminalService.newTerminal(selfLink, containerName); Kubernetes.log.debug("Created terminal, id: ", id); }; }]); // controller that deals with the labels per pod Kubernetes.Labels = Kubernetes.controller("Labels", ["$scope", "$location", function ($scope, $location) { $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 || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes._module.directive("hawtioTabs", ['HawtioSubTabs', function (HawtioSubTabs) { return { link: function (scope, element, attrs) { HawtioSubTabs.apply(scope.$eval('subTabConfig')); } }; }]); })(Kubernetes || (Kubernetes = {})); /// var Kubernetes; (function (Kubernetes) { Kubernetes.TemplateController = Kubernetes.controller("TemplateController", [ "$scope", "$location", "$http", "$timeout", "$routeParams", "marked", "$templateCache", "$modal", "KubernetesModel", "KubernetesState", "KubernetesApiURL", function ($scope, $location, $http, $timeout, $routeParams, marked, $templateCache, $modal, KubernetesModel, KubernetesState, KubernetesApiURL) { var model = $scope.model = KubernetesModel; $scope.filterText = $location.search()["q"]; $scope.targetNamespace = $routeParams.targetNamespace; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$watchCollection('model.namespaces', function () { if (!$scope.targetNamespace) { $scope.targetNamespace = model.currentNamespace(); } }); var returnTo = new URI($location.search()['returnTo'] || '/kubernetes/apps'); function goBack() { $location.path(returnTo.path()).search(returnTo.query(true)); } function getAnnotations(obj) { return Core.pathGet(obj, ['metadata', 'annotations']); } function getValueFor(obj, key) { var annotations = getAnnotations(obj); if (!annotations) { return ""; } var name = Kubernetes.getName(obj); if (name) { var fullKey = "fabric8." + name + "/" + key; var answer = annotations[fullKey]; if (answer) { return answer; } } var key = _.find(_.keys(annotations), function (k) { return _.endsWith(k, key); }); if (key) { return annotations[key]; } else { return ""; } } $scope.cancel = function () { if ($scope.formConfig) { delete $scope.formConfig; delete $scope.entity; $scope.objects = undefined; return; } goBack(); }; /* $scope.$watch('model.templates.length', (newValue) => { if (newValue === 0) { goBack(); } }); */ $scope.filterTemplates = function (template) { if (Core.isBlank($scope.filterText)) { return true; } return _.contains(angular.toJson(template), $scope.filterText.toLowerCase()); }; $scope.openFullDescription = function (template) { var text = marked(getValueFor(template, 'description') || 'No description'); var modal = $modal.open({ templateUrl: UrlHelpers.join(Kubernetes.templatePath, 'templateDescription.html'), controller: ['$scope', '$modalInstance', function ($scope, $modalInstance) { $scope.text = text, $scope.ok = function () { modal.close(); }; }] }); }; $scope.getDescription = function (template) { var answer = $(marked(getValueFor(template, 'description') || 'No description')); var textDefault = answer.html(); var maxLength = 200; if (textDefault.length > maxLength) { var truncated = $.trim(textDefault).substring(0, maxLength).split(' ').slice(0, -1).join(' '); answer.html(truncated + '...'); answer.append($templateCache.get('truncatedDescriptionTag.html')); } return answer.html(); }; $scope.getIconUrl = function (template) { return getValueFor(template, 'iconUrl') || Kubernetes.defaultIconUrl; }; $scope.deployTemplate = function (template) { Kubernetes.log.debug("Template parameters: ", template.parameters); Kubernetes.log.debug("Template objects: ", template.objects); Kubernetes.log.debug("Template annotations: ", template.metadata.annotations); var templateAnnotations = template.metadata.annotations; if (templateAnnotations) { _.forEach(template.objects, function (object) { var annotations = object.metadata.annotations || {}; var name = Kubernetes.getName(object); var matches = _.filter(_.keys(templateAnnotations), function (key) { return key.match('.' + name + '/'); }); matches.forEach(function (match) { if (!(match in annotations)) { annotations[match] = templateAnnotations[match]; } }); object.metadata.annotations = annotations; }); } var routeServiceName = undefined; var service = _.find(template.objects, function (obj) { if (Kubernetes.getKind(obj) === "Service") { var ports = Kubernetes.getPorts(obj); if (ports && ports.length === 1) { return true; } } else { return false; } }); if (service) { routeServiceName = Kubernetes.getName(service); } Kubernetes.log.debug("Service: ", service); if ((!routeServiceName || !Kubernetes.isOpenShift) && (!template.parameters || template.parameters.length === 0)) { Kubernetes.log.debug("No parameters required, deploying objects"); applyObjects(template.objects); return; } var formConfig = { style: HawtioForms.FormStyle.STANDARD, hideLegend: true, properties: {} }; var params = template.parameters; _.forEach(params, function (param) { var property = {}; property.label = _.startCase(param.name); property.description = param.description; property.default = param.value; // TODO, do parameters support types? property.type = 'string'; formConfig.properties[param.name] = property; }); if (routeServiceName && Kubernetes.isOpenShift) { formConfig.properties.createRoute = { type: 'boolean', default: true, label: "Create Route" }; /* formConfig.properties.routeName = { type: 'string', label: 'Route Name', default: routeServiceName, 'control-group-attributes': { 'ng-show': 'entity.createRoute' } }; */ formConfig.properties.routeServiceName = { type: 'hidden', default: routeServiceName }; var namespace = Kubernetes.currentKubernetesNamespace(); // TODO store this in localStorage! var domain = "vagrant.f8"; var defaultRouteHostSuffix = '.' + (namespace === "default" ? "" : namespace + ".") + domain; formConfig.properties.routeHostname = { type: 'string', default: defaultRouteHostSuffix, label: "Route host name suffix", 'control-group-attributes': { 'ng-show': 'entity.createRoute' } }; } $scope.entity = {}; $scope.formConfig = formConfig; $scope.objects = template.objects; Kubernetes.log.debug("Form config: ", formConfig); }; function substitute(str, data) { return str.replace(/\${\w*}/g, function (match) { var key = match.replace(/\${/, '').replace(/}/, '').trim(); return data[key] || match; }); } ; $scope.substituteAndDeployTemplate = function () { var objects = $scope.objects; var objectsText = angular.toJson(objects, true); // pull these out of the entity object so they're not used in substitutions var createRoute = $scope.entity.createRoute; var routeHostnameSuffix = $scope.entity.routeHostname || ""; var routeName = $scope.entity.routeName; var routeServiceName = $scope.entity.routeServiceName; delete $scope.entity.createRoute; delete $scope.entity.routeHostname; delete $scope.entity.routeName; delete $scope.entity.routeServiceName; objectsText = substitute(objectsText, $scope.entity); objects = angular.fromJson(objectsText); if (createRoute) { var routes = []; angular.forEach(objects, function (object) { var kind = object.kind; var name = Kubernetes.getName(object); if (name && "Service" === kind) { var routeHostname = name + routeHostnameSuffix; var route = { kind: "Route", apiVersion: Kubernetes.defaultOSApiVersion, metadata: { name: name, }, spec: { host: routeHostname, to: { kind: "Service", name: name } } }; routes.push(route); } }); objects = objects.concat(routes); } if ($scope.targetNamespace !== model.currentNamespace()) { $scope.$on('WatcherNamespaceChanged', function () { Kubernetes.log.debug("Namespace changed"); setTimeout(function () { applyObjects(objects); Core.$apply($scope); }, 500); }); Core.notification('info', "Switching to namespace " + $scope.targetNamespace + " and deploying template"); model.kubernetes.selectedNamespace = $scope.targetNamespace; } else { applyObjects(objects); } }; function applyObjects(objects) { var projectClient = Kubernetes.createKubernetesClient("projects"); _.forEach(objects, function (object) { Kubernetes.log.debug("Object: ", object); var kind = Kubernetes.getKind(object); var name = Kubernetes.getName(object); var ns = Kubernetes.getNamespace(object); if (kind && name) { if (ns && ns !== Kubernetes.currentKubernetesNamespace()) { var project = { apiVersion: Kubernetes.defaultApiVersion, kind: "Project", metadata: { name: ns, labels: {} } }; projectClient.put(project, function (data) { Kubernetes.log.info("Created namespace: " + ns); }, function (err) { Kubernetes.log.warn("Failed to create namespace: " + ns + ": " + angular.toJson(err)); }); } var pluralKind = kind.toLowerCase() + "s"; var kubeClient = Kubernetes.createKubernetesClient(pluralKind, ns); kubeClient.put(object, function (data) { Kubernetes.log.info("updated " + kind + " name: " + name + (ns ? " ns: " + ns : "")); }, function (err) { Kubernetes.log.warn("Failed to update " + kind + " name: " + name + (ns ? " ns: " + ns : "") + " error: " + angular.toJson(err)); }); } }); goBack(); } $scope.deleteTemplate = function (template) { UI.multiItemConfirmActionDialog({ collection: [template], index: 'metadata.name', onClose: function (result) { if (result) { KubernetesModel['templatesResource'].delete({ id: template.metadata.name }, undefined, function () { KubernetesModel['templatesResource'].query(function (data) { KubernetesModel.templates = data.items; }); }, function (error) { Kubernetes.log.debug("Error deleting template: ", error); }); } }, title: 'Delete Template?', action: 'The following template will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; }]); })(Kubernetes || (Kubernetes = {})); /// var Navigation; (function (Navigation) { Navigation.pluginName = 'hawtio-navigation'; Navigation.log = Logger.get(Navigation.pluginName); Navigation._module = angular.module(Navigation.pluginName, []); Navigation._module.run(function () { }); Navigation._module.service('HawtioBreadcrumbs', function () { var _config = []; var self = { apply: function (config) { _config.length = 0; _.forEach(config, function (crumb) { _config.push(crumb); }); }, get: function () { return _config; } }; return self; }); Navigation._module.service('HawtioSubTabs', function () { var _config = []; var self = { apply: function (config) { _config.length = 0; _.forEach(config, function (crumb) { _config.push(crumb); }); }, get: function () { return _config; } }; return self; }); Navigation._module.directive('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.HawtioSubTabs = HawtioSubTabs; scope.$watchCollection('HawtioSubTabs.get()', function (subTabConfig) { // log.debug("subTabConfig: ", subTabConfig); if (subTabConfig && subTabConfig.length > 0) { element.removeClass('hidden-nav'); } else { element.addClass('hidden-nav'); } }); } }; }]); Navigation._module.directive('hawtioTabsOutlet', ['HawtioSubTabs', function (HawtioSubTabs) { var initialized = false; return { restrict: 'AE', replace: true, template: "\n
\n \n
\n ", link: function (scope, element, attrs) { if (!initialized) { try { $().setupVerticalNavigation(false); } 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', function (HawtioBreadcrumbs) { return { restrict: 'E', scope: {}, template: "\n
\n
    \n

    \n
  1. \n {{breadcrumb.label}}\n {{breadcrumb.label}}\n
\n
\n ", link: function (scope, element, attrs) { scope.breadcrumbs = HawtioBreadcrumbs; scope.$watchCollection('breadcrumbs.get()', function (breadcrumbConfig) { scope.breadcrumbConfig = breadcrumbConfig; }); } }; }]); //hawtioPluginLoader.addModule('patternfly'); hawtioPluginLoader.addModule(Navigation.pluginName); })(Navigation || (Navigation = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzLnRzIiwia3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSW50ZXJmYWNlcy50cyIsImt1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHMiLCJkZXZlbG9wZXIvdHMvZGV2ZWxvcGVyRW5yaWNoZXJzLnRzIiwiZGV2ZWxvcGVyL3RzL2RldmVsb3BlckhlbHBlcnMudHMiLCJkZXZlbG9wZXIvdHMvZGV2ZWxvcGVyTmF2aWdhdGlvbi50cyIsImRldmVsb3Blci90cy9GaWxlTW9kZS50cyIsImRldmVsb3Blci90cy9kZXZlbG9wZXJQbHVnaW4udHMiLCJkZXZlbG9wZXIvdHMvZW52aXJvbm1lbnRQYW5lbC50cyIsImRldmVsb3Blci90cy9ob21lLnRzIiwiZGV2ZWxvcGVyL3RzL2plbmtpbnNKb2IudHMiLCJkZXZlbG9wZXIvdHMvamVua2luc0pvYnMudHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNQbHVnaW4udHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNNb2RlbC50cyIsImRldmVsb3Blci90cy9qZW5raW5zTG9nLnRzIiwiZGV2ZWxvcGVyL3RzL2plbmtpbnNNZXRyaWNzLnRzIiwiZGV2ZWxvcGVyL3RzL25hdmJhci50cyIsImRldmVsb3Blci90cy9waXBlbGluZS50cyIsImRldmVsb3Blci90cy9waXBlbGluZURpcmVjdGl2ZS50cyIsImRldmVsb3Blci90cy9waXBlbGluZXMudHMiLCJkZXZlbG9wZXIvdHMvcHJvamVjdC50cyIsImRldmVsb3Blci90cy9wcm9qZWN0U2VsZWN0b3IudHMiLCJkZXZlbG9wZXIvdHMvcHJvamVjdHMudHMiLCJkZXZlbG9wZXIvdHMvd29ya3NwYWNlLnRzIiwiZGV2ZWxvcGVyL3RzL3dvcmtzcGFjZXMudHMiLCJrdWJlcm5ldGVzL3RzL2FwcHMudHMiLCJrdWJlcm5ldGVzL3RzL2JyZWFkY3J1bWJzLnRzIiwia3ViZXJuZXRlcy90cy9idWlsZC50cyIsImt1YmVybmV0ZXMvdHMvYnVpbGRDb25maWcudHMiLCJrdWJlcm5ldGVzL3RzL2J1aWxkQ29uZmlnRWRpdC50cyIsImt1YmVybmV0ZXMvdHMvYnVpbGRDb25maWdzLnRzIiwia3ViZXJuZXRlcy90cy9idWlsZExvZ3MudHMiLCJrdWJlcm5ldGVzL3RzL2J1aWxkcy50cyIsImt1YmVybmV0ZXMvdHMvY29ubmVjdC50cyIsImt1YmVybmV0ZXMvdHMvZGF0YUluZm5Nb2RlbC50cyIsImt1YmVybmV0ZXMvdHMvZGVwbG95bWVudENvbmZpZy50cyIsImt1YmVybmV0ZXMvdHMvZGVwbG95bWVudENvbmZpZ3MudHMiLCJrdWJlcm5ldGVzL3RzL2V2ZW50cy50cyIsImt1YmVybmV0ZXMvdHMvaG9zdC50cyIsImt1YmVybmV0ZXMvdHMvdXRpbEhlbHBlcnMudHMiLCJrdWJlcm5ldGVzL3RzL2hvc3RzLnRzIiwia3ViZXJuZXRlcy90cy9pbWFnZVJlcG9zaXRvcmllcy50cyIsImt1YmVybmV0ZXMvdHMva3ViZXJuZXRlc05hdmlnYXRpb24udHMiLCJrdWJlcm5ldGVzL3RzL3NjaGVtYS50cyIsImt1YmVybmV0ZXMvdHMva3ViZXJuZXRlc1NjaGVtYS50cyIsImt1YmVybmV0ZXMvdHMva3ViZXJuZXRlc1NlcnZpY2VzLnRzIiwia3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzVG9wTGV2ZWwudHMiLCJrdWJlcm5ldGVzL3RzL25hbWVzcGFjZS50cyIsImt1YmVybmV0ZXMvdHMvb3ZlcnZpZXcudHMiLCJrdWJlcm5ldGVzL3RzL3BpcGVsaW5lcy50cyIsImt1YmVybmV0ZXMvdHMvcG9kLnRzIiwia3ViZXJuZXRlcy90cy9wb2RFZGl0LnRzIiwia3ViZXJuZXRlcy90cy93YXRjaGVyLnRzIiwia3ViZXJuZXRlcy90cy90ZXJtLnRzIiwia3ViZXJuZXRlcy90cy9wb2RMb2dzLnRzIiwia3ViZXJuZXRlcy90cy9wb2RzLnRzIiwia3ViZXJuZXRlcy90cy9yZWFkUGxhY2VkaXZpc2lvbi50cyIsImt1YmVybmV0ZXMvdHMvcmVwbGljYXRpb25Db250cm9sbGVyLnRzIiwia3ViZXJuZXRlcy90cy9yZXBsaWNhdGlvbkNvbnRyb2xsZXJFZGl0LnRzIiwia3ViZXJuZXRlcy90cy9yZXBsaWNhdGlvbkNvbnRyb2xsZXJzLnRzIiwia3ViZXJuZXRlcy90cy9zY2hlbWFIZWxwZXJzLnRzIiwia3ViZXJuZXRlcy90cy9zZWNyZXQudHMiLCJrdWJlcm5ldGVzL3RzL3NlY3JldHMudHMiLCJrdWJlcm5ldGVzL3RzL3NlcnZpY2UudHMiLCJrdWJlcm5ldGVzL3RzL3NlcnZpY2VFZGl0LnRzIiwia3ViZXJuZXRlcy90cy9zZXJ2aWNlUmVnaXN0cnkudHMiLCJrdWJlcm5ldGVzL3RzL3NlcnZpY2VzLnRzIiwia3ViZXJuZXRlcy90cy9zaGFyZWRDb250cm9sbGVycy50cyIsImt1YmVybmV0ZXMvdHMvdGFicy50cyIsImt1YmVybmV0ZXMvdHMvdGVtcGxhdGVzLnRzIiwibmF2aWdhdGlvbi90cy9uYXZpZ2F0aW9uUGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCwrREFBK0Q7QUFDL0Qsc0RBQXNEO0FBQ3RELG1EQUFtRDtBQUNuRCwwREFBMEQ7O0FDSjFELElBQU8sVUFBVSxDQWtKaEI7QUFsSkQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVqQjtRQUFBO1FBRUEsQ0FBQztRQURDLHNCQUFJLHlDQUFxQjtpQkFBekIsY0FBcUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDdkUsYUFBQztJQUFELENBRkEsQUFFQyxJQUFBO0lBRlksaUJBQU0sU0FFbEIsQ0FBQTtJQUVVLG9CQUFTLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztJQThDckM7UUFBQTtRQTBCQSxDQUFDO1FBekJBLHNCQUFrQix1QkFBUztpQkFBM0IsY0FBdUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQzVELHNCQUFrQixvQkFBTTtpQkFBeEIsY0FBb0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3BELHNCQUFrQix3QkFBVTtpQkFBNUIsY0FBd0MsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ2hFLHNCQUFrQixtQkFBSztpQkFBdkIsY0FBbUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3BELHNCQUFrQixnQ0FBa0I7aUJBQXBDLGNBQWdELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQzdFLHNCQUFrQixzQ0FBd0I7aUJBQTFDLGNBQXNELE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3hGLHNCQUFrQixrQkFBSTtpQkFBdEIsY0FBa0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ2xELHNCQUFrQixxQ0FBdUI7aUJBQXpDLGNBQXFELE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3ZGLHNCQUFrQiw2QkFBZTtpQkFBakMsY0FBNkMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDdkUsc0JBQWtCLDJCQUFhO2lCQUEvQixjQUEyQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDbkUsc0JBQWtCLHFCQUFPO2lCQUF6QixjQUFxQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDeEQsc0JBQWtCLHNCQUFRO2lCQUExQixjQUFzQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDMUQsc0JBQWtCLDhCQUFnQjtpQkFBbEMsY0FBOEMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFFekUsc0JBQWtCLHVCQUFTO2lCQUEzQixjQUF1QyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDNUQsc0JBQWtCLG9CQUFNO2lCQUF4QixjQUFvQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDdEQsc0JBQWtCLDJCQUFhO2lCQUEvQixjQUEyQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDbkUsc0JBQWtCLG9CQUFNO2lCQUF4QixjQUFvQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDdEQsc0JBQWtCLGdDQUFrQjtpQkFBcEMsY0FBZ0QsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDN0Usc0JBQWtCLDJCQUFhO2lCQUEvQixjQUEyQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDbkUsc0JBQWtCLHNCQUFRO2lCQUExQixjQUFzQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDMUQsc0JBQWtCLDZCQUFlO2lCQUFqQyxjQUE2QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUNyRSxzQkFBa0Isc0JBQVE7aUJBQTFCLGNBQXNDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUM1RCxzQkFBa0IsMkJBQWE7aUJBQS9CLGNBQTJDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUNuRSxzQkFBa0IsbUJBQUs7aUJBQXZCLGNBQW1DLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUNyRCxpQkFBQztJQUFELENBMUJBLEFBMEJDLElBQUE7SUExQlkscUJBQVUsYUEwQnRCLENBQUE7SUFFQTtRQUFBO1FBa0NBLENBQUM7UUFqQ0Msc0JBQWtCLDJCQUFRO2lCQUExQjtnQkFDRSxNQUFNLENBQUM7b0JBQ0wsVUFBVSxDQUFDLFNBQVM7b0JBQ3BCLFVBQVUsQ0FBQyxNQUFNO29CQUNqQixVQUFVLENBQUMsS0FBSztvQkFDaEIsVUFBVSxDQUFDLGtCQUFrQjtvQkFDN0IsVUFBVSxDQUFDLHdCQUF3QjtvQkFDbkMsVUFBVSxDQUFDLElBQUk7b0JBQ2YsVUFBVSxDQUFDLHVCQUF1QjtvQkFDbEMsVUFBVSxDQUFDLGVBQWU7b0JBQzFCLFVBQVUsQ0FBQyxrQkFBa0I7b0JBQzdCLFVBQVUsQ0FBQyxPQUFPO29CQUNsQixVQUFVLENBQUMsUUFBUTtvQkFDbkIsVUFBVSxDQUFDLGdCQUFnQjtpQkFDNUIsQ0FBQztZQUNKLENBQUM7OztXQUFBO1FBQ0Qsc0JBQWtCLDBCQUFPO2lCQUF6QjtnQkFDRSxNQUFNLENBQUM7b0JBQ0wsVUFBVSxDQUFDLFNBQVM7b0JBQ3BCLFVBQVUsQ0FBQyxhQUFhO29CQUN4QixVQUFVLENBQUMsTUFBTTtvQkFDakIsVUFBVSxDQUFDLE1BQU07b0JBQ2pCLFVBQVUsQ0FBQyxhQUFhO29CQUN4QixVQUFVLENBQUMsa0JBQWtCO29CQUM3QixVQUFVLENBQUMsYUFBYTtvQkFDeEIsVUFBVSxDQUFDLGFBQWE7b0JBQ3hCLFVBQVUsQ0FBQyxRQUFRO29CQUNuQixVQUFVLENBQUMsZUFBZTtvQkFDMUIsVUFBVSxDQUFDLFFBQVE7aUJBR3BCLENBQUM7WUFDSixDQUFDOzs7V0FBQTtRQUNILHNCQUFDO0lBQUQsQ0FsQ0EsQUFrQ0MsSUFBQTtJQWxDWSwwQkFBZSxrQkFrQzNCLENBQUE7SUFFRjtRQUFBO1FBS0EsQ0FBQztRQUpBLHNCQUFrQixtQkFBRztpQkFBckIsY0FBaUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQzlDLHNCQUFrQixxQkFBSztpQkFBdkIsY0FBbUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3BELHNCQUFrQix3QkFBUTtpQkFBMUIsY0FBc0MsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQzFELHNCQUFrQix1QkFBTztpQkFBekIsY0FBcUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3pELG1CQUFDO0lBQUQsQ0FMQSxBQUtDLElBQUE7SUFMWSx1QkFBWSxlQUt4QixDQUFBO0FBeUJGLENBQUMsRUFsSk0sVUFBVSxLQUFWLFVBQVUsUUFrSmhCOztBQ2xKRCx5Q0FBeUM7QUFDekMsK0NBQStDO0FBQy9DLElBQU8sVUFBVSxDQXV6RGhCO0FBdnpERCxXQUFPLFVBQVUsRUFBQyxDQUFDO0lBRU4sa0JBQU8sR0FBRyxhQUFhLENBQUM7SUFDeEIsZUFBSSxHQUFHLEdBQUcsR0FBRyxrQkFBTyxDQUFDO0lBQ3JCLHVCQUFZLEdBQUcsZUFBSSxHQUFHLE9BQU8sQ0FBQztJQUM5QixxQkFBVSxHQUFHLFlBQVksQ0FBQztJQUMxQixxQkFBVSxHQUFHLHFCQUFxQixDQUFDO0lBQ25DLHVCQUFZLEdBQUcscUJBQVUsR0FBRyxPQUFPLENBQUM7SUFDcEMsY0FBRyxHQUFrQixNQUFNLENBQUMsR0FBRyxDQUFDLHFCQUFVLENBQUMsQ0FBQztJQUU1QywyQkFBZ0IsR0FBRyxJQUFJLENBQUM7SUFFeEIseUJBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDakQsc0JBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRW5ELHdDQUF3QztJQUM3QixtQkFBUSxHQUFvQixTQUFTLENBQUM7SUFDdEMsb0JBQVMsR0FBRyxFQUFFLENBQUM7SUFFZiw0QkFBaUIsR0FBRyxJQUFJLENBQUM7SUFDekIsOEJBQW1CLEdBQUcsSUFBSSxDQUFDO0lBQzNCLG1DQUF3QixHQUFHLEdBQUcsQ0FBQztJQUUvQiwyQkFBZ0IsR0FBRyxTQUFTLENBQUM7SUFFN0Isb0JBQVMsR0FBRyxNQUFNLENBQUM7SUFFOUIsMkJBQTJCO0lBQ2hCLDRCQUFpQixHQUFHLFFBQVEsQ0FBQztJQUM3QixrQ0FBdUIsR0FBRyxlQUFlLENBQUM7SUFDMUMsMEJBQWUsR0FBRyxNQUFNLENBQUM7SUFDekIsNkJBQWtCLEdBQUcsU0FBUyxDQUFDO0lBQy9CLDRCQUFpQixHQUFHLFFBQVEsQ0FBQztJQUM3QixzQkFBVyxHQUFHLElBQUksQ0FBQztJQUVuQiw0QkFBaUIsR0FBRyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMvQyw4QkFBbUIsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUcxRDtRQUNFLElBQUksRUFBRSxHQUFHLDBCQUEwQixFQUFFLENBQUM7UUFDdEMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNQLE1BQU0sQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQVBlLGtDQUF1QiwwQkFPdEMsQ0FBQTtJQUVEO1FBQ0UsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzlELEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNaLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBTmUsb0JBQVMsWUFNeEIsQ0FBQTtJQUVEO1FBQ0UsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNaLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDbEIsQ0FBQztRQUNELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLEVBQUUsQ0FBQyxDQUFDLENBQUMsc0JBQVcsQ0FBQyxDQUFDLENBQUM7WUFDakIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsOEJBQW1CLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0gsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQVZlLHNCQUFXLGNBVTFCLENBQUE7SUFFRDtRQUNFLE1BQU0sQ0FBQyxvQkFBUyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRmUsdUJBQVksZUFFM0IsQ0FBQTtJQUVELHFHQUFxRztJQUNyRztRQUNFLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLDRCQUFpQixDQUFDLENBQUM7SUFDekQsQ0FBQztJQUZlLDhCQUFtQixzQkFFbEMsQ0FBQTtJQUVEO1FBQ0UsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsOEJBQW1CLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRmUsNkJBQWtCLHFCQUVqQyxDQUFBO0lBRUQsdUJBQThCLElBQVc7UUFDdkMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLHFCQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNuQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMvQixDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQywwQkFBZSxDQUFDLFFBQVEsRUFBRSxVQUFDLENBQUMsSUFBSyxPQUFBLENBQUMsS0FBSyxJQUFJLEVBQVYsQ0FBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLDBCQUFlLENBQUMsT0FBTyxFQUFFLFVBQUMsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxLQUFLLElBQUksRUFBVixDQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEQsTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUNELDhDQUE4QztRQUM5QyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBWmUsd0JBQWEsZ0JBWTVCLENBQUE7SUFFRDtRQUNFLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRmUsMkJBQWdCLG1CQUUvQixDQUFBO0lBRUQ7UUFDRSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUZlLDBCQUFlLGtCQUU5QixDQUFBO0lBRUQsNkJBQW9DLElBQUksRUFBRSxFQUFTO1FBQVQsa0JBQVMsR0FBVCxTQUFTO1FBQ2pELEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNSLEVBQUUsR0FBRywwQkFBMEIsRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUxlLDhCQUFtQixzQkFLbEMsQ0FBQTtJQUVELHNDQUE2QyxJQUFJO1FBQy9DLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNyQixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2IsS0FBSyxxQkFBVSxDQUFDLFVBQVUsQ0FBQztZQUMzQixLQUFLLFlBQVk7Z0JBQ2YsV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzVDLEtBQUssQ0FBQztZQUNSLEtBQUsscUJBQVUsQ0FBQyxhQUFhLENBQUM7WUFDOUIsS0FBSyxjQUFjLENBQUM7WUFDcEIsS0FBSyxhQUFhO2dCQUNoQixNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN6QyxLQUFLLHFCQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3pCLEtBQUssVUFBVTtnQkFDYixXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDMUMsS0FBSyxDQUFDO1lBQ1I7Z0JBQ0UsV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxNQUFNLENBQUMsV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFuQmUsdUNBQTRCLCtCQW1CM0MsQ0FBQTtJQUVELDhCQUFxQyxJQUFJLEVBQUUsRUFBRTtRQUMzQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDckIsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNiLEtBQUsscUJBQVUsQ0FBQyxVQUFVLENBQUM7WUFDM0IsS0FBSyxZQUFZLENBQUM7WUFDbEIsS0FBSyxXQUFXO2dCQUNkLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3ZDLEtBQUsscUJBQVUsQ0FBQyxLQUFLLENBQUM7WUFDdEIsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLE1BQU07Z0JBQ1QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEMsS0FBSyxxQkFBVSxDQUFDLFFBQVEsQ0FBQztZQUN6QixLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLFNBQVM7Z0JBQ1osTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckMsS0FBSyxxQkFBVSxDQUFDLGFBQWEsQ0FBQztZQUM5QixLQUFLLGNBQWMsQ0FBQztZQUNwQixLQUFLLGFBQWE7Z0JBQ2hCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3pDLEtBQUsscUJBQVUsQ0FBQyxrQkFBa0IsQ0FBQztZQUNuQyxLQUFLLG1CQUFtQixDQUFDO1lBQ3pCLEtBQUssa0JBQWtCO2dCQUNyQixNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzlDO2dCQUNFLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7SUExQmUsK0JBQW9CLHVCQTBCbkMsQ0FBQTtJQUVEOztPQUVHO0lBQ0gsZ0JBQTBCLElBQUk7UUFDNUIsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNuQyxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2pELENBQUM7SUFIZSxpQkFBTSxTQUdyQixDQUFBO0lBRUQsd0JBQStCLEtBQVksRUFBRSxXQUFrQixFQUFFLFNBQXVDLEVBQUUsZUFBZTtRQUN2SCxJQUFJLE1BQU0sR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osY0FBRyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksTUFBTSxHQUFTO1lBQ2pCLFNBQVMsRUFBRSwwQkFBMEI7U0FDdEMsQ0FBQTtRQUNELE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDZCxLQUFLLHFCQUFVLENBQUMsVUFBVSxDQUFDO1lBQzNCLEtBQUsscUJBQVUsQ0FBQyxhQUFhLENBQUM7WUFDOUIsS0FBSyxxQkFBVSxDQUFDLEtBQUssQ0FBQztZQUN0QixLQUFLLHFCQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3pCLEtBQUsscUJBQVUsQ0FBQyxhQUFhLENBQUM7WUFDOUIsS0FBSyxxQkFBVSxDQUFDLGtCQUFrQjtnQkFDbEMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMvRCxjQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFO1lBQ2xDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDO1lBQ3ZELE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBQztZQUN6QyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUM7WUFDdEMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDM0MsRUFBRSxFQUFFLEtBQUs7aUJBQ1YsRUFBRSxNQUFNLENBQUMsRUFBQztTQUNaLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQS9CZSx5QkFBYyxpQkErQjdCLENBQUE7SUFFRDtRQUNFLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLHVCQUF1QixFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUZlLG1DQUF3QiwyQkFFdkMsQ0FBQTtJQUVEO1FBQ0UsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsdUJBQXVCLEVBQUUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFGZSxtQ0FBd0IsMkJBRXZDLENBQUE7SUFFRDtRQUNFLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLHVCQUF1QixFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUZlLHdCQUFhLGdCQUU1QixDQUFBO0lBRUQ7UUFDRSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSx1QkFBdUIsRUFBRSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUZlLGtDQUF1QiwwQkFFdEMsQ0FBQTtJQUVEO1FBQ0UsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsdUJBQXVCLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRmUsOEJBQW1CLHNCQUVsQyxDQUFBO0lBRUQ7UUFDRSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSx1QkFBdUIsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFGZSx3QkFBYSxnQkFFNUIsQ0FBQTtJQUVEO1FBQ0UsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsdUJBQXVCLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRmUsMkJBQWdCLG1CQUUvQixDQUFBO0lBRUQsc0JBQTZCLE1BQU07UUFDakMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUM3RCxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRywwQkFBMEIsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFIZSx1QkFBWSxlQUczQixDQUFBO0lBRUQsbUJBQTBCLE1BQU07UUFDOUIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRCxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUhlLG9CQUFTLFlBR3hCLENBQUE7SUFFRCxpQkFBd0IsTUFBTTtRQUM1QixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsSCxDQUFDO0lBTGUsa0JBQU8sVUFLdEIsQ0FBQTtJQUVELGlCQUF3QixNQUFNO1FBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFGZSxrQkFBTyxVQUV0QixDQUFBO0lBRUQscUJBQTRCLE1BQU07UUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUZlLHNCQUFXLGNBRTFCLENBQUE7SUFFRCxpQkFBd0IsR0FBRztRQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbkksQ0FBQztJQUZlLGtCQUFPLFVBRXRCLENBQUE7SUFFRCxtQkFBMEIsR0FBRztRQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRmUsb0JBQVMsWUFFeEIsQ0FBQTtJQUVELGtCQUF5QixPQUFPO1FBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFGZSxtQkFBUSxXQUV2QixDQUFBO0lBRUQsOEJBQXFDLE1BQU07UUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRmUsK0JBQW9CLHVCQUVuQyxDQUFBO0lBQUEsQ0FBQztJQUVGLHNDQUFzQztJQUN0QyxJQUFJLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDckIsZ0JBQUssR0FBRyxZQUFZLEdBQUcsa0JBQWtCLENBQUM7SUFDMUMsdUJBQVksR0FBRyxZQUFZLEdBQUcseUJBQXlCLENBQUM7SUFDeEQsdUJBQVksR0FBRyxZQUFZLEdBQUcsZUFBZSxDQUFDO0lBRXpELHNCQUE2QixTQUFVO1FBQ3JDLHdGQUF3RjtRQUN4RixNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUhlLHVCQUFZLGVBRzNCLENBQUE7SUFFRCxxQ0FBNEMsU0FBVTtRQUNwRCx1R0FBdUc7UUFDdkcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNkLENBQUM7SUFIZSxzQ0FBMkIsOEJBRzFDLENBQUE7SUFFRCxtQkFBMEIsU0FBVTtRQUNsQyxxRkFBcUY7UUFDckYsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNkLENBQUM7SUFIZSxvQkFBUyxZQUd4QixDQUFBO0lBRUQ7UUFDRSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyRSxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkMsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBSmUsOEJBQW1CLHNCQUlsQyxDQUFBO0lBRUQ7UUFBNkIsZUFBaUI7YUFBakIsV0FBaUIsQ0FBakIsc0JBQWlCLENBQWpCLElBQWlCO1lBQWpCLDhCQUFpQjs7UUFDNUMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDMUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFVBQUMsSUFBVyxJQUFLLE9BQUEsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQTVCLENBQTRCLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBSGUsdUJBQVksZUFHM0IsQ0FBQTtJQUdEOzs7Ozs7T0FNRztJQUNILHNCQUE2QixJQUFXO1FBQ3RDLDhCQUE4QjtRQUM5QixJQUFJLFFBQVEsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBRXJDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMvQiw0QkFBNEI7UUFDNUIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNiLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNyQixNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQztRQUMzQixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFoQmUsdUJBQVksZUFnQjNCLENBQUE7SUFFRCxpQkFBd0IsTUFBTSxFQUFFLEVBQUUsRUFBRSxVQUFVO1FBQzVDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2YsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNwQixNQUFNLENBQUM7UUFDVCxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ1IsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTSxDQUFDO1FBQ1QsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNoQixNQUFNLENBQUM7UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFDLElBQUksSUFBTyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDVCxNQUFNLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLE1BQU0sQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBckJlLGtCQUFPLFVBcUJ0QixDQUFBO0lBRUQ7O09BRUc7SUFDSCx3QkFBK0IsTUFBTSxFQUFFLGFBQXdDO1FBQXhDLDZCQUF3QyxHQUF4QyxtREFBd0M7UUFDN0UsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFVBQUMsS0FBSyxFQUFFLEdBQUc7WUFDakMsSUFBSSxTQUFTLEdBQUcsTUFBTSxHQUFHLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFFNUMsTUFBTSxJQUFJLFNBQVMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQVJlLHlCQUFjLGlCQVE3QixDQUFBO0lBR0Qsb0JBQTJCLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0I7UUFDN0gsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVuRSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBRW5DLG9CQUFvQixJQUFJO1lBQ3RCLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsSUFBSSxlQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBTSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUMzRCxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO29CQUNwQixNQUFNLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUMsQ0FBQztZQUNILENBQUM7WUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxjQUFNLE9BQUEsVUFBVSxDQUFDLDRCQUFpQixDQUFDLEVBQTdCLENBQTZCLENBQUM7UUFDOUQsTUFBTSxDQUFDLGNBQWMsR0FBRyxjQUFNLE9BQUEsVUFBVSxDQUFDLDBCQUFlLENBQUMsRUFBM0IsQ0FBMkIsQ0FBQztRQUMxRCxNQUFNLENBQUMsZUFBZSxHQUFHLGNBQU0sT0FBQSxVQUFVLENBQUMsa0NBQXVCLENBQUMsRUFBbkMsQ0FBbUMsQ0FBQztRQUNuRSxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsY0FBTSxPQUFBLFVBQVUsQ0FBQyw0QkFBaUIsQ0FBQyxFQUE3QixDQUE2QixDQUFDO1FBRTlELE1BQU0sQ0FBQyxhQUFhLEdBQUc7WUFDckIsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQy9CLFNBQVMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUM7UUFFRixNQUFNLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxlQUFlLENBQUMsaUJBQWlCLElBQUksMkJBQWdCLENBQUM7UUFDdkgsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQzFELGVBQWUsQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBRXJELG9DQUFvQztZQUNwQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQy9CLENBQUM7UUFDSCxDQUFDO1FBQ0QsVUFBVSxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzRCxNQUFNLENBQUMsWUFBWSxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBRXZDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM1RSxJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUMvQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMvRSxNQUFNLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixNQUFNLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDbEcsTUFBTSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBRUQsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDckIsTUFBTSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsTUFBTSxDQUFDLElBQUksR0FBRyxVQUFDLElBQUk7WUFDakIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxRixDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sTUFBTSxDQUFDLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDLENBQUE7UUFFRCxNQUFNLENBQUMsaUJBQWlCLEdBQUc7WUFDekIsWUFBWSxFQUFHLElBQUk7WUFDbkIsV0FBVyxFQUFFLElBQUk7WUFDakIsUUFBUSxFQUFFLFVBQVU7WUFDcEIsSUFBSSxFQUFFLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDO1NBQ3ZDLENBQUM7UUFFRixNQUFNLENBQUMsWUFBWSxHQUFHO1lBQ3BCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFdBQVcsRUFBRSxDQUFDO1lBQ2QsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRTtZQUN2QixJQUFJLEVBQUU7Z0JBQ0osSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztnQkFDdkMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDNUIsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxjQUFRLGNBQUcsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2xKLENBQUM7WUFDRCxJQUFJLEVBQUUsVUFBQyxVQUFVO2dCQUNmLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7Z0JBQ3ZDLFlBQVksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO2dCQUNyQyxZQUFZLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVFLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBRTNCLFFBQVEsQ0FBQztvQkFDUCxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3pCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNULENBQUM7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckMsQ0FBQztTQUNGLENBQUM7UUFFRixNQUFNLENBQUMsWUFBWSxHQUFHLFVBQUMsV0FBVztZQUNoQyxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDL0MsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDUixnQkFBZ0I7Z0JBQ2hCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDaEIsSUFBSSxNQUFNLEdBQUc7b0JBQ1gsT0FBTyxFQUFFO3dCQUNQLGNBQWMsRUFBRSxrQkFBa0I7cUJBQ25DO2lCQUNGLENBQUM7Z0JBQ0YsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ3RELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUM7b0JBQzNCLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07b0JBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDdEUsNkNBQTZDO29CQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ2hELENBQUMsQ0FBQztvQkFDRixLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO29CQUMzQyxjQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztvQkFDOUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsOEJBQThCLEdBQUcsSUFBSSxHQUFHLG1CQUFtQixHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ2hILENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUFBLENBQUM7UUFDSixDQUFDLENBQUE7UUFFRCwwQ0FBMEM7UUFDMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxzQ0FBc0MsRUFBRSxVQUFDLElBQUk7WUFDekQscURBQXFEO1lBQ3JELFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxVQUFDLE1BQU0sRUFBRSxJQUFJO1lBQzNDLElBQUksYUFBYSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1lBQ25FLElBQUksYUFBYSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUM7WUFDN0MsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ2xDLENBQUM7WUFBQSxJQUFJLENBQUEsQ0FBQztnQkFDSixJQUFJLFdBQVcsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3QyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckMsc0NBQXNDO29CQUN0QyxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkMsYUFBYSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRCxDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLGFBQWEsQ0FBQyxVQUFVLEdBQUcsYUFBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7Z0JBQ3hELENBQUM7WUFDSCxDQUFDO1lBQ0QsTUFBTSxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDO0lBaEplLHFCQUFVLGFBZ0p6QixDQUFBO0lBRUQ7O09BRUc7SUFDSCx1QkFBOEIsT0FBTztRQUNuQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFDLEdBQUc7WUFDekMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsS0FBSyxFQUFFLENBQUM7WUFDVixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQVJlLHdCQUFhLGdCQVE1QixDQUFBO0lBRUQ7O09BRUc7SUFDSCx3QkFBK0IsT0FBTyxFQUFFLFFBQWdCO1FBQWhCLHdCQUFnQixHQUFoQixnQkFBZ0I7UUFDdEQsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUM3Qix5REFBeUQ7WUFDekQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQztZQUN6QixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ3hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ1QsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUNkLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUMzQixDQUFDO2dCQUNELElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsVUFBQyxRQUFRO29CQUNuQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUN0QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNOLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUNkLFFBQVEsR0FBRyxJQUFJLENBQUM7d0JBQ2xCLENBQUM7d0JBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUNwQixPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUNqQixDQUFDO3dCQUNELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs0QkFDVixJQUFJLEdBQUcsQ0FBQyxDQUFDO3dCQUNYLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNsQyw4REFBOEQ7b0JBQzlELEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUNsQixPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUNqQixDQUFDO29CQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDekIsUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDbEIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUNELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDYixNQUFNLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztnQkFDL0IsQ0FBQztnQkFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDbkIsTUFBTSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7Z0JBQzlCLENBQUM7Z0JBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDckIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDVCxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztvQkFDaEQsQ0FBQztvQkFBQyxJQUFJLENBQUMsQ0FBQzt3QkFDTixNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztvQkFDN0IsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNuQixJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDZCxJQUFJLGVBQWUsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMzQyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO29CQUNwQixNQUFNLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3RELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDWixDQUFDO0lBMURlLHlCQUFjLGlCQTBEN0IsQ0FBQTtJQUdEOztPQUVHO0lBQ0gseUJBQWdDLFlBQVk7UUFDMUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNqQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBQyxJQUFJO2dCQUMzRCxJQUFJLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQVRlLDBCQUFlLGtCQVM5QixDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsMkJBQWtDLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBZSxFQUFFLFlBQW1CLEVBQUUsVUFBaUI7UUFBdkQsMEJBQWUsR0FBZixlQUFlO1FBQUUsNEJBQW1CLEdBQW5CLG1CQUFtQjtRQUFFLDBCQUFpQixHQUFqQixpQkFBaUI7UUFDdkcsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUM7UUFDYixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3RCLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLFFBQVEsR0FBRyxVQUFDLEdBQUcsSUFBSyxPQUFBLGVBQWUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQXpDLENBQXlDLENBQUM7UUFDaEUsQ0FBQztRQUNELElBQUksTUFBTSxHQUFHO1lBQ1gsUUFBUSxFQUFFLEVBQUU7WUFDWixLQUFLLEVBQUUsQ0FBQztZQUNSLEtBQUssRUFBRSxDQUFDO1lBQ1IsT0FBTyxFQUFFLENBQUM7WUFDVixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUM7UUFDRixFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2IsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixZQUFZLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUNELE1BQU0sQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN4RSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxVQUFBLEdBQUc7Z0JBQ3ZCLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xCLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3JCLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDNUIsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDWCxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ2pDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUM1QixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUNqQixNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQzs0QkFDcEIsQ0FBQzs0QkFBQyxJQUFJLENBQUMsQ0FBQztnQ0FDTixNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQzs0QkFDcEIsQ0FBQzt3QkFDSCxDQUFDO3dCQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNoRSxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQzt3QkFDdEIsQ0FBQzt3QkFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUM3RixNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQzt3QkFDcEIsQ0FBQztvQkFDSCxDQUFDO29CQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNOLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO29CQUNwQixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUE5Q2UsNEJBQWlCLG9CQThDaEMsQ0FBQTtJQUVEOzs7T0FHRztJQUNILHNDQUE2QyxJQUFJO1FBQy9DLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0Isb0VBQW9FO1lBRXBFLDBCQUEwQjtZQUMxQixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDaEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFDLElBQUk7Z0JBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFDLElBQUk7Z0JBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQztJQXJCZSx1Q0FBNEIsK0JBcUIzQyxDQUFBO0lBRUQ7UUFDRSxNQUFNLENBQUMsNEJBQWlCLEtBQUssU0FBUyxJQUFJLDRCQUFpQixLQUFLLFNBQVMsQ0FBQztJQUM1RSxDQUFDO0lBRmUsdUJBQVksZUFFM0IsQ0FBQTtJQUVEOztPQUVHO0lBQ0gsd0JBQStCLEdBQUc7UUFDaEMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNSLGlCQUFpQixNQUFNO2dCQUNyQixJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ25DLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQ2IsTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFDbEIsQ0FBQztnQkFDRCxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3pCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0IsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2YsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7b0JBQ3hFLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDckMsRUFBRSxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM5QyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDakYsQ0FBQztvQkFBQyxJQUFJLENBQUMsQ0FBQzt3QkFDTixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDNUQsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ2xCLENBQUM7WUFDRCxJQUFJLFlBQVksR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBK0IsY0FBYyxDQUFDLENBQUM7WUFDekYsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUNsQixDQUFDO1lBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBL0JlLHlCQUFjLGlCQStCN0IsQ0FBQTtJQUdELCtCQUFzQyxJQUFJO1FBQ3hDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDeEMsRUFBRSxDQUFDLENBQUMsUUFBUSxLQUFLLHdCQUF3QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdELFFBQVEsR0FBRyx3QkFBd0IsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBTmUsZ0NBQXFCLHdCQU1wQyxDQUFBO0lBRUQsK0JBQStCLElBQUk7UUFDakMsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCw4QkFBcUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFNBQWdCLEVBQUUsSUFBVztRQUE3Qix5QkFBZ0IsR0FBaEIsZ0JBQWdCO1FBQUUsb0JBQVcsR0FBWCxXQUFXO1FBQ3hGLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNyQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1QsV0FBVyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsSUFBSSxRQUFRLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsSUFBSSxlQUFlLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsRUFBRSxDQUFDLENBQUMsWUFBWSxFQUFFLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQztZQUN0QyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDakIsRUFBRSxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztnQkFDbEMsT0FBTyxHQUFHLGFBQWEsR0FBRyxTQUFTLENBQUM7WUFDdEMsQ0FBQztZQUNELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDOUYsQ0FBQztJQUNILENBQUM7SUFoQmUsK0JBQW9CLHVCQWdCbkMsQ0FBQTtJQUFBLENBQUM7SUFFRjs7T0FFRztJQUNILGtDQUF5QyxnQkFBZ0IsRUFBRSxJQUFJO1FBQzdELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNULE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLGNBQUcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxHQUFHLHdCQUF3QixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1RixNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFSZSxtQ0FBd0IsMkJBUXZDLENBQUE7SUFFRCxzQ0FBNkMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLElBQVc7UUFBWCxvQkFBVyxHQUFYLFdBQVc7UUFDakYsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDVCxXQUFXLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDcEIsQ0FBQztRQUNELElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxFQUFFLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkIsSUFBSSxPQUFPLEdBQUcsYUFBYSxHQUFHLFNBQVMsQ0FBQztZQUN4QyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUcsdUJBQXVCLEVBQUUsRUFBRSxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLFdBQVcsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUMxSSxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztRQUMzSCxDQUFDO0lBQ0gsQ0FBQztJQWRlLHVDQUE0QiwrQkFjM0MsQ0FBQTtJQUdELHNEQUE2RCxPQUFPLEVBQUUsSUFBVztRQUFYLG9CQUFXLEdBQVgsV0FBVztRQUMvRSxJQUFJLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUNwRCxNQUFNLENBQUMsNEJBQTRCLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUVoRSxDQUFDO0lBSmUsdURBQTRDLCtDQUkzRCxDQUFBO0lBQ0QsNEJBQW1DLEVBQUU7UUFDbkMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRmUsNkJBQWtCLHFCQUVqQyxDQUFBO0lBRUQsaUNBQXdDLEVBQUU7UUFDeEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRmUsa0NBQXVCLDBCQUV0QyxDQUFBO0lBRUQsZ0NBQXVDLEVBQUU7UUFDdkMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRmUsaUNBQXNCLHlCQUVyQyxDQUFBO0lBRUQsc0JBQTZCLEVBQUU7UUFDN0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUZlLHVCQUFZLGVBRTNCLENBQUE7SUFFRCwwQkFBaUMsRUFBRTtRQUNqQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUZlLDJCQUFnQixtQkFFL0IsQ0FBQTtJQUVEOztPQUVHO0lBQ0gsZ0JBQXVCLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFZLEVBQUUsV0FBa0IsRUFBRSxTQUFnQixFQUFFLFlBQW1CO1FBQXZFLG9CQUFZLEdBQVosWUFBWTtRQUFFLDJCQUFrQixHQUFsQixrQkFBa0I7UUFBRSx5QkFBZ0IsR0FBaEIsZ0JBQWdCO1FBQUUsNEJBQW1CLEdBQW5CLG1CQUFtQjtRQUM5SSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1QsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLElBQUksR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLENBQUM7WUFDRCxJQUFJLEdBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQztZQUNyQixJQUFJLE9BQU8sR0FBRyxTQUFTLEdBQUcsZ0JBQWdCLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFVLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1lBRXZELElBQUksS0FBSyxHQUFHLDRCQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQUMsSUFBSTtnQkFDMUIsSUFBSSxHQUFHLEdBQUcsd0JBQXdCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzNELEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ1IsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO3dCQUNuQixPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO3dCQUM3QyxjQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxNQUFNLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxTQUFTLEdBQUcsSUFBSSxHQUFHLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDdEgsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3JDLFlBQVksRUFBRSxDQUFDO3dCQUNqQixDQUFDO3dCQUNELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RCLENBQUMsQ0FBQzt3QkFDSixLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO3dCQUMzQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7d0JBQ25CLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUMzQixPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzs0QkFDdkIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs0QkFDekIsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0NBQy9CLHlCQUF5QjtnQ0FDekIsY0FBRyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsR0FBRyxHQUFHLENBQUMsQ0FBQztnQ0FDN0MsTUFBTSxDQUFDOzRCQUNULENBQUM7d0JBQ0gsQ0FBQzt3QkFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7NEJBQ2IsT0FBTyxHQUFHLG9CQUFvQixHQUFHLEdBQUcsR0FBRyxlQUFlLEdBQUcsTUFBTSxDQUFDO3dCQUNsRSxDQUFDO3dCQUNELGNBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLFdBQVcsR0FBRyxNQUFNLEdBQUcsYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ3RHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUN0QyxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQXpDZSxpQkFBTSxTQXlDckIsQ0FBQTtJQUdEOztPQUVHO0lBQ0gsbUJBQTBCLGVBQWU7UUFDdkMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzNDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDWCxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBUmUsb0JBQVMsWUFReEIsQ0FBQTtJQUVEOztPQUVHO0lBQ0gseUJBQWdDLFFBQVEsRUFBRSxNQUFNO1FBQzlDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztZQUNsQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZCxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFDLEtBQUssRUFBRSxHQUFHO2dCQUNuQyxLQUFLLEVBQUUsQ0FBQztnQkFDUixFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ2pCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sQ0FBQyxNQUFNLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFkZSwwQkFBZSxrQkFjOUIsQ0FBQTtJQUVEOztPQUVHO0lBQ0g7UUFDRSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBTSxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNoRSxDQUFDO0lBSGUsNkJBQWtCLHFCQUdqQyxDQUFBO0lBR0Q7O09BRUc7SUFDSCx3QkFBK0IsZUFBZTtRQUM1QyxJQUFJLElBQUksR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLDRCQUFpQixDQUFDLENBQUM7UUFDMUQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNULEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksSUFBSSxHQUFHLENBQUM7WUFDZCxDQUFDO1lBQ0QsTUFBTSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQztRQUN0QyxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFWZSx5QkFBYyxpQkFVN0IsQ0FBQTtJQUVELHlCQUFnQyxlQUFlLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJO1FBQ3ZFLElBQUksSUFBSSxHQUFHLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1QsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsVUFBQyxJQUFJO2dCQUN6QixJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ1AsSUFBSSxLQUFLLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7b0JBQ2hDLEtBQUssRUFBRSxDQUFDO29CQUNSLEtBQUssSUFBSSxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7Z0JBQ2xDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ1YsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2QsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO2dCQUM1QixDQUFDO2dCQUNELEtBQUssR0FBRyw2QkFBNkIsR0FBRyxTQUFTLEdBQUcsNEJBQTRCLEdBQUcsS0FBSyxDQUFDO2dCQUN6RixJQUFJLElBQUksbUNBQW1DLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztnQkFDN0QsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDakQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBdEJlLDBCQUFlLGtCQXNCOUIsQ0FBQTtJQUVELDBCQUFpQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsV0FBVyxFQUFFLFlBQW1CO1FBQW5CLDRCQUFtQixHQUFuQixtQkFBbUI7UUFDL0csSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDeEMsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFELElBQUksR0FBRyxHQUFHLG9CQUFvQixDQUFDLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6RixLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUNaLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07WUFDN0MsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDVCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUM3QixFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7b0JBQ2xCLFlBQVksR0FBRyxFQUFFLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO2dCQUMzQixDQUFDO2dCQUNELFlBQVksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO2dCQUNwQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7b0JBQ2xCLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07b0JBQzdDLGNBQUcsQ0FBQyxLQUFLLENBQUMscUJBQXFCLEdBQUcsR0FBRyxDQUFDLENBQUM7b0JBQ3ZDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNyQyxZQUFZLEVBQUUsQ0FBQztvQkFDakIsQ0FBQztnQkFDSCxDQUFDLENBQUM7b0JBQ0osS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTtvQkFDM0MsY0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7Z0JBQ2hFLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQztZQUNGLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07WUFDM0MsY0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBNUJlLDJCQUFnQixtQkE0Qi9CLENBQUE7SUFFRCw4QkFBcUMsSUFBSSxFQUFFLEtBQWE7UUFBYixxQkFBYSxHQUFiLGFBQWE7UUFDdEQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNULElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMvQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ1gsTUFBTSxDQUFDLDZCQUE2QixDQUFDO2dCQUN2QyxDQUFDO2dCQUNELE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQztZQUNuQyxDQUFDO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztZQUMxQixDQUFDO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0YsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1lBQzVCLENBQUM7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQztJQUM5QixDQUFDO0lBakJlLCtCQUFvQix1QkFpQm5DLENBQUE7SUFFRCxtQkFBMEIsR0FBRztRQUMzQixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFGZSxvQkFBUyxZQUV4QixDQUFBO0lBRUQsaUJBQXdCLEdBQUc7UUFDekIsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDOUIsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFDLFNBQVM7WUFDM0MsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUN2QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7Z0JBQzlCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUN0QixNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNoQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBYmUsa0JBQU8sVUFhdEIsQ0FBQTtJQUVELGtDQUF5QyxPQUFPO1FBQzlDLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDeEIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFVBQUEsR0FBRztZQUN2QixJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsSUFBSSxZQUFZLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDNUQsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDWixNQUFNLEdBQUc7b0JBQ1AsU0FBUyxFQUFFLFlBQVk7b0JBQ3ZCLFFBQVEsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDekgsS0FBSyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUM7b0JBQ1YsS0FBSyxFQUFFLENBQUM7aUJBQ1QsQ0FBQztnQkFDRixHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUN2QixLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JCLENBQUM7WUFDRCxJQUFJLE1BQU0sR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2RCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNwQixDQUFDO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xFLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1lBQ3RCLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNwQixDQUFDO1lBQ0QsSUFBSSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRCxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3BDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUM7UUFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNmLENBQUM7SUF0Q2UsbUNBQXdCLDJCQXNDdkMsQ0FBQTtJQUVELG1DQUEwQyxPQUFPO1FBQy9DLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDeEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsVUFBQSxHQUFHO1lBQ3ZCLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNQLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDMUIsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ1osTUFBTSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO2dCQUNELEdBQUcsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO1lBQ3hCLENBQUM7WUFDRCxHQUFHLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ3RDLElBQUksc0JBQXNCLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixJQUFJLEVBQUUsQ0FBQztRQUNsRSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUIsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUkscUJBQXFCLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEQsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDbEQsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFlBQVksQ0FBQztZQUM1QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQzFELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUMxQixDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUM1QixDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixPQUFPLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1YsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNqQixDQUFDO1lBQ0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMzQixJQUFJLFlBQVksR0FBRyxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDakUsSUFBSSxJQUFJLEdBQUc7Z0JBQ1QsT0FBTyxFQUFFLE9BQU8sSUFBSSxJQUFJO2dCQUN4QixJQUFJLEVBQUUsSUFBSTtnQkFDVixXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWE7Z0JBQ2xDLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixZQUFZLEVBQUUsWUFBWTtnQkFDMUIsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLFlBQVksRUFBRSxZQUFZO2dCQUMxQixPQUFPLEVBQUUsT0FBTztnQkFDaEIscUJBQXFCLEVBQUUscUJBQXFCO2dCQUM1QyxJQUFJLEVBQUUsSUFBSTthQUNYLENBQUM7WUFDRixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQXZEZSxvQ0FBeUIsNEJBdUR4QyxDQUFBO0lBRUQ7O09BRUc7SUFDSCxzQkFBNkIsUUFBUSxFQUFFLE1BQWlCO1FBQWpCLHNCQUFpQixHQUFqQixpQkFBaUI7UUFDdEQsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQVMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUM7SUFDaEcsQ0FBQztJQUZlLHVCQUFZLGVBRTNCLENBQUE7SUFFRCxnQkFBZ0IsS0FBSztRQUNuQixNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN4QyxDQUFDO0lBRUQsMkJBQWtDLFdBQVcsRUFBRSxZQUFZO1FBQ3pELEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDaEIsSUFBSSxVQUFVLEdBQVUsSUFBSSxDQUFDO1lBQzdCLElBQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1lBQzFDLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDekIsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJLDBCQUEwQixFQUFFLENBQUM7WUFDNUQsV0FBVyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDNUIsV0FBVyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDOUIsV0FBVyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDakYsV0FBVyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBRTVFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ1QsV0FBVyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDNUYsV0FBVyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUUvRixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLFVBQUMsSUFBSTtvQkFDbEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFVBQUMsT0FBTzt3QkFDNUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDOzRCQUNoQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDOzRCQUN4QixFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7Z0NBQy9CLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FDNUIsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0NBQ3BCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7b0NBQzVCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0NBQ1gsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO3dDQUM1RSxXQUFXLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztvQ0FDdkMsQ0FBQztnQ0FDSCxDQUFDOzRCQUNILENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFFSCxnQ0FBZ0M7Z0JBQ2hDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7b0JBQ2pCLFdBQVcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7d0JBQzVDLFFBQVEsRUFBRTs0QkFDUixNQUFNLEVBQUU7Z0NBQ04sV0FBVyxFQUFFLElBQUk7NkJBQ2xCO3lCQUNGO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUV2QixxQ0FBcUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFrQjtnQkFBbEIsMEJBQWtCLEdBQWxCLGtCQUFrQjtnQkFDbkUsSUFBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQixFQUFFLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUN4QixJQUFJLEdBQUcsRUFBRSxDQUFBO29CQUNULGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLENBQUM7Z0JBQ0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDVCxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxVQUFDLEtBQUssRUFBRSxRQUFRO3dCQUN0QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQzdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzs0QkFDYixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO3dCQUN6QixDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1lBRUQsK0NBQStDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBa0I7Z0JBQWxCLDBCQUFrQixHQUFsQixrQkFBa0I7Z0JBQy9FLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFVBQUMsSUFBSSxFQUFFLElBQUk7b0JBQ3hDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDcEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsVUFBQyxLQUFLLEVBQUUsUUFBUTs0QkFDdEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzRCQUM3QixFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0NBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQzs0QkFDekIsQ0FBQzt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1lBQ25DLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1lBRTdDLGlDQUFpQztZQUNqQyxXQUFXLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxRSxXQUFXLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUxRSxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxVQUFDLEtBQUssRUFBRSxHQUFHO2dCQUN0QyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDOUIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyQixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3RCLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDeEIsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDNUQsSUFBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNqQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7NEJBQ1YsSUFBSSxHQUFHO2dDQUNMLEtBQUssRUFBRSxNQUFNOzZCQUNkLENBQUM7NEJBQ0YsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQzt3QkFDL0IsQ0FBQzt3QkFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUN6QixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLHdCQUF3QjtnQkFDeEIsSUFBSSxPQUFPLEdBQUcsY0FBYyxDQUFDLDBCQUFlLENBQUMsQ0FBQztnQkFDOUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDWiwyQkFBMkIsQ0FBQyw4QkFBOEIsRUFBRTt3QkFDMUQsS0FBSyxFQUFFLFdBQVc7d0JBQ2xCLEdBQUcsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUM7d0JBQ25FLFdBQVcsRUFBRSwyQ0FBMkM7d0JBQ3hELFNBQVMsRUFBRSxxQkFBcUI7cUJBQ2pDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ1gsQ0FBQztnQkFFRCwwQkFBMEI7Z0JBQzFCLDJCQUEyQixDQUFDLGdDQUFnQyxFQUFFO29CQUM1RCxLQUFLLEVBQUUsWUFBWTtvQkFDbkIsR0FBRyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLHNCQUFzQixFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQztvQkFDL0YsV0FBVyxFQUFFLG1DQUFtQztvQkFDaEQsU0FBUyxFQUFFLG1CQUFtQjtpQkFDL0IsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFHVCx3QkFBd0I7Z0JBQ3hCLDJCQUEyQixDQUFDLDJDQUEyQyxFQUFFO29CQUN2RSxLQUFLLEVBQUUsVUFBVTtvQkFDakIsR0FBRyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGlDQUFpQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQztvQkFDMUcsV0FBVyxFQUFFLGdEQUFnRDtvQkFDN0QsU0FBUyxFQUFFLHVCQUF1QjtpQkFDbkMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVYLENBQUM7WUFFRCxrQ0FBa0M7WUFDbEMsMkJBQTJCLENBQUMsZ0NBQWdDLEVBQUU7Z0JBQzVELEtBQUssRUFBRSxXQUFXO2dCQUNsQixXQUFXLEVBQUUsMkNBQTJDO2dCQUN4RCxTQUFTLEVBQUUscUJBQXFCO2FBQ2pDLENBQUMsQ0FBQztZQUNILDJCQUEyQixDQUFDLDBCQUEwQixFQUFFO2dCQUN0RCxTQUFTLEVBQUUsYUFBYTtnQkFDeEIsV0FBVyxFQUFFLHFDQUFxQzthQUNuRCxDQUFDLENBQUM7WUFDSCwyQkFBMkIsQ0FBQyw4QkFBOEIsRUFBRTtnQkFDMUQsU0FBUyxFQUFFLGtCQUFrQjtnQkFDN0IsV0FBVyxFQUFFLHFEQUFxRDthQUNuRSxDQUFDLENBQUM7WUFDSCwyQkFBMkIsQ0FBQywrQkFBK0IsRUFBRTtnQkFDM0QsU0FBUyxFQUFFLDRCQUE0QjtnQkFDdkMsV0FBVyxFQUFFLDRDQUE0QzthQUMxRCxDQUFDLENBQUM7WUFDSCwyQkFBMkIsQ0FBQyw0QkFBNEIsRUFBRTtnQkFDeEQsU0FBUyxFQUFFLGVBQWU7Z0JBQzFCLFdBQVcsRUFBRSw0QkFBNEI7YUFDMUMsQ0FBQyxDQUFDO1lBQ0gsMkJBQTJCLENBQUMsNEJBQTRCLEVBQUU7Z0JBQ3hELFNBQVMsRUFBRSxlQUFlO2dCQUMxQixXQUFXLEVBQUUsNEJBQTRCO2FBQzFDLENBQUMsQ0FBQztZQUNILDJCQUEyQixDQUFDLG9CQUFvQixFQUFFO2dCQUNoRCxTQUFTLEVBQUUsc0JBQXNCO2dCQUNqQyxXQUFXLEVBQUUsZ0NBQWdDO2FBQzlDLENBQUMsQ0FBQztZQUNILDJCQUEyQixDQUFDLHFCQUFxQixFQUFFO2dCQUNqRCxTQUFTLEVBQUUsc0JBQXNCO2dCQUNqQyxXQUFXLEVBQUUseUJBQXlCO2FBQ3ZDLENBQUMsQ0FBQztZQUNILDJCQUEyQixDQUFDLHVCQUF1QixFQUFFO2dCQUNuRCxTQUFTLEVBQUUsV0FBVztnQkFDdEIsV0FBVyxFQUFFLHlCQUF5QjthQUN2QyxDQUFDLENBQUM7WUFDSCwyQkFBMkIsQ0FBQyx5QkFBeUIsRUFBRTtnQkFDckQsU0FBUyxFQUFFLGFBQWE7Z0JBQ3hCLFdBQVcsRUFBRSwrQkFBK0I7YUFDN0MsQ0FBQyxDQUFDO1lBQ0gsMkJBQTJCLENBQUMsbUJBQW1CLEVBQUU7Z0JBQy9DLFNBQVMsRUFBRSxhQUFhO2dCQUN4QixXQUFXLEVBQUUsK0JBQStCO2FBQzdDLENBQUMsQ0FBQztZQUNILHFDQUFxQyxDQUFDLDJCQUEyQixFQUFFO2dCQUNqRSxTQUFTLEVBQUUsYUFBYTtnQkFDeEIsV0FBVyxFQUFFLCtDQUErQzthQUM3RCxDQUFDLENBQUM7WUFHSCxzQ0FBc0M7WUFDdEMsSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7WUFDM0IsSUFBSSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7WUFDNUIsSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7WUFDM0IsSUFBSSx3QkFBd0IsR0FBRyxFQUFFLENBQUM7WUFDbEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsVUFBQyxLQUFLLEVBQUUsR0FBRztnQkFDeEMsSUFBSSxJQUFJLENBQUM7Z0JBQ1QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNwSCxJQUFJLEdBQUcsaUJBQWlCLENBQUM7Z0JBQzNCLENBQUM7Z0JBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO2dCQUM1QixDQUFDO2dCQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVDLElBQUksR0FBRyx3QkFBd0IsQ0FBQztnQkFDbEMsQ0FBQztnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDTixJQUFJLEdBQUcsaUJBQWlCLENBQUM7Z0JBQzNCLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNwQixDQUFDLENBQUMsQ0FBQztZQUdILFdBQVcsQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1lBQzFDLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztZQUNsRCxXQUFXLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7WUFDcEQsV0FBVyxDQUFDLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO1lBQ2hFLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztZQUVsRCxJQUFJLFdBQVcsR0FBRyxXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUN4RCxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxhQUFhLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlELFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDckIsQ0FBQztZQUNELFdBQVcsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1lBRXRDLE9BQU8sQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsVUFBQyxHQUFHO2dCQUM1QyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO2dCQUNsQixJQUFJLE1BQU0sR0FBRywyQkFBMkIsQ0FBQztnQkFDekMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM5QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDckMsR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7b0JBQ3BCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRixDQUFDO2dCQUNELFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLG1DQUFtQztnQkFDbkMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksR0FBRyxHQUFHO29CQUNSLFNBQVMsRUFBRSxHQUFHO29CQUNkLEtBQUssRUFBRSxTQUFTO29CQUNoQixXQUFXLEVBQUUsMkRBQTJEO29CQUN4RSxTQUFTLEVBQUUsYUFBYTtvQkFDeEIsR0FBRyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUM7aUJBQzVFLENBQUM7Z0JBQ0YsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFckMsQ0FBQztZQUVELFdBQVcsQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUU5RCxXQUFXLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLFVBQUMsR0FBRztnQkFDckMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLFVBQUMsR0FBRztnQkFDckMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFTCxDQUFDO0lBQ0gsQ0FBQztJQTVQZSw0QkFBaUIsb0JBNFBoQyxDQUFBO0lBRUQsNEJBQW1DLFlBQVksRUFBRSxZQUFtQjtRQUFuQiw0QkFBbUIsR0FBbkIsbUJBQW1CO1FBQ2xFLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQUMsV0FBVztZQUN4QyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFMZSw2QkFBa0IscUJBS2pDLENBQUE7SUFFRCxzQkFBNkIsTUFBTTtRQUNqQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxVQUFDLEtBQUs7WUFDNUIsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFMZSx1QkFBWSxlQUszQixDQUFBO0lBRUQscUJBQTRCLEtBQUs7UUFDL0IsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNWLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ3BDLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1lBQzdDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDbkIsS0FBSyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7WUFFN0IsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLGVBQWUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUVySCxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUNsQyxLQUFLLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztZQUMzQixFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNiLDJFQUEyRTtnQkFDM0UsS0FBSyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSwwQkFBMEIsRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN4RyxDQUFDO1lBQ0QsSUFBSSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRCxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3BDLEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLENBQUM7WUFDRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNULCtEQUErRDtnQkFDL0QsSUFBSSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsMEJBQTBCLEVBQUUsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3BHLEtBQUssQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMvRCxrRUFBa0U7Z0JBQ2xFLEtBQUssQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFDRCxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksV0FBVyxDQUFDLDZCQUE2QixDQUFDLENBQUM7WUFDNUUsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUM1QixFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDekIsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxrQkFBa0IsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO2dCQUM3QyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNqSCxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN2RixDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDZixDQUFDO0lBMUNlLHNCQUFXLGNBMEMxQixDQUFBO0lBR0QsZ0NBQXVDLGdCQUFnQjtRQUNyRCxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDckIsSUFBSSxVQUFVLEdBQVUsSUFBSSxDQUFDO1lBQzdCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNoRSxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQzlCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNsQixPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxVQUFDLE9BQU87Z0JBQ2pELElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3hCLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLElBQUksSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUM7b0JBQ25FLElBQUksaUJBQWlCLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDO29CQUNsRCxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7d0JBQ3RCLElBQUksY0FBYyxHQUFHLGlCQUFpQixDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7d0JBQzVELGlCQUFpQixDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUM3RCxnQkFBZ0IsQ0FBQyxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztvQkFDMUQsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQWxCZSxpQ0FBc0IseUJBa0JyQyxDQUFBO0lBRUQsaUNBQXdDLGlCQUFpQjtRQUN2RCxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLFVBQUMsZ0JBQWdCO1lBQ2xELHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFDM0IsQ0FBQztJQUxlLGtDQUF1QiwwQkFLdEMsQ0FBQTtJQUdELHFCQUE0QixLQUFLO1FBQy9CLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDVixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUVwQyxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzFDLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNqQyxLQUFLLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztZQUM1QixDQUFDO1lBQ0QsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztZQUN4QyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDaEMsS0FBSyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDM0IsQ0FBQztZQUNELElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM5QyxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztZQUNoRCxJQUFJLElBQUksR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQy9CLElBQUksSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDL0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDVCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLENBQUM7WUFDRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNULE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDeEIsQ0FBQztZQUNELEtBQUssQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4RCxDQUFDO0lBQ0gsQ0FBQztJQTNCZSxzQkFBVyxjQTJCMUIsQ0FBQTtJQUVELHNCQUE2QixNQUFNLEVBQUUsS0FBWTtRQUFaLHFCQUFZLEdBQVosWUFBWTtRQUMvQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxVQUFDLEtBQUs7WUFDNUIsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBRUgsc0RBQXNEO1FBQ3RELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDVixxQkFBcUIsTUFBTTtnQkFDekIsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUN6QixDQUFDO1lBRUQscUJBQXFCLE1BQU0sRUFBRSxLQUFLO2dCQUNoQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUNYLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMzQixFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO3dCQUN4QixNQUFNLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsRUFBRSxRQUFRLENBQUMsR0FBRyxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxZQUFZLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7b0JBQzVLLENBQUM7b0JBQ0QsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDN0MsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM1QixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsc0JBQXNCLElBQUksRUFBRSxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ25DLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBRWxDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFVBQUMsS0FBSztnQkFDNUIsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7Z0JBQ2hELElBQUksSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQy9CLElBQUksSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQy9CLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNsQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDbEIsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLHVCQUF1QixDQUFDLENBQUMsQ0FBQzt3QkFDckMsTUFBTSxHQUFHLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3BELENBQUM7b0JBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUMxQixNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2xDLENBQUM7b0JBQ0QsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDWCxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUM3QixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUEvQ2UsdUJBQVksZUErQzNCLENBQUE7SUFFRCwrQkFBc0MsZUFBZTtRQUNuRCxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksVUFBVSxHQUFVLElBQUksQ0FBQztZQUM3QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQy9ELGVBQWUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBTmUsZ0NBQXFCLHdCQU1wQyxDQUFBO0lBRUQsaUNBQXdDLGlCQUFpQjtRQUN2RCxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLFVBQUMsZUFBZTtZQUNqRCxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0lBTGUsa0NBQXVCLDBCQUt0QyxDQUFBO0lBR0QsSUFBSSxXQUFXLEdBQUc7UUFDaEIsT0FBTyxFQUFFLGlCQUFpQjtRQUMxQixRQUFRLEVBQUUsa0JBQWtCO1FBQzVCLE1BQU0sRUFBRSxnQkFBZ0I7UUFDeEIsUUFBUSxFQUFFLGtCQUFrQjtRQUM1QixVQUFVLEVBQUUsa0JBQWtCO0tBQy9CLENBQUM7SUFFRiw2QkFBb0MsU0FBZ0I7UUFDbEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsSUFBSTtZQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7SUFDeEQsQ0FBQztJQUxlLDhCQUFtQixzQkFLbEMsQ0FBQTtJQUdEOztPQUVHO0lBQ0g7UUFDRSxrRUFBa0U7UUFDbEUsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNkLENBQUM7SUFIZSx5QkFBYyxpQkFHN0IsQ0FBQTtJQUVEOztPQUVHO0lBQ0g7UUFDRSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ25DLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDYixJQUFJLGVBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFNLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pFLE1BQU0sQ0FBQyxlQUFlLENBQUMsaUJBQWlCLElBQUksMkJBQWdCLENBQUM7UUFDL0QsQ0FBQztRQUNELE1BQU0sQ0FBQywyQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBUGUscUNBQTBCLDZCQU96QyxDQUFBO0lBRUQsdUNBQThDLEVBQUU7UUFDOUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNQLElBQUksZUFBZSxHQUFHLE1BQU0sQ0FBTSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzRCxlQUFlLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDO0lBTGUsd0NBQTZCLGdDQUs1QyxDQUFBO0lBRUQ7O09BRUc7SUFDSDtRQUNFLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQU0sQ0FBQyxXQUFXLEVBQUUsVUFBQyxVQUFVLEVBQUUsSUFBSTtZQUNuRCxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQ3ZDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxjQUFjLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMzSixPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxVQUFDLFlBQVk7b0JBQzNDLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDeEMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDYixRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUksSUFBSSxDQUFDO29CQUM3QixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFVBQUMsUUFBUSxFQUFFLFlBQVk7b0JBQ2pELElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDM0IsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM1QixFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN4QyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUN6QixDQUFDO29CQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO3dCQUNyQixJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQzlCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7NEJBQ1YsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUN4QixJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQ3pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ3hDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7NEJBQ3RCLENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELGlCQUFNLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztRQUNqRixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFoQ2UsMEJBQWUsa0JBZ0M5QixDQUFBO0lBRUQ7O09BRUc7SUFDSCxrQkFBeUIsSUFBSTtRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFVBQUMsS0FBSyxFQUFFLEdBQUc7WUFDNUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFUZSxtQkFBUSxXQVN2QixDQUFBO0lBRUQ7O09BRUc7SUFDSCxtQkFBMEIsSUFBSTtRQUM1QixJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtJQUN6RCxDQUFDO0lBSGUsb0JBQVMsWUFHeEIsQ0FBQTtJQUVEOztPQUVHO0lBQ0gsbUJBQTBCLElBQUk7UUFDNUIsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFIZSxvQkFBUyxZQUd4QixDQUFBO0lBR0QsZUFBc0IsTUFBVyxFQUFFLFFBQWEsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxhQUFvQjtRQUFwQiw2QkFBb0IsR0FBcEIsb0JBQW9CO1FBQ2pGLElBQUksVUFBVSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFDbEMsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsRUFBRTtZQUNiLGFBQWEsRUFBRSxhQUFhO1lBQzVCLE9BQU8sRUFBRSxVQUFVLE9BQU87Z0JBQ3hCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDWixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RCLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRTtZQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLHFCQUFxQixDQUFDLENBQUM7WUFDN0UsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUU7WUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzNFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUMxQyxNQUFNLENBQUMsV0FBVyxHQUFHO1lBQ25CLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDLENBQUE7SUFDTCxDQUFDO0lBekJlLGdCQUFLLFFBeUJwQixDQUFBO0lBRUQsZ0NBQXVDLElBQUksRUFBRSxFQUFTO1FBQVQsa0JBQVMsR0FBVCxTQUFTO1FBQ3BELElBQUksZ0JBQWdCLEdBQUcsTUFBTSxDQUFNLGtCQUFrQixDQUFDLENBQUM7UUFDdkQsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDdEIsY0FBRyxDQUFDLElBQUksQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1lBQ3RELE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNqRCxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ1osQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDZixFQUFFLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDL0MsQ0FBQztRQUNELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFaZSxpQ0FBc0IseUJBWXJDLENBQUE7SUFHRDtRQUNFLElBQUksV0FBVyxHQUFHLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMvQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbEIsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNoQixNQUFNLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBUGUsMEJBQWUsa0JBTzlCLENBQUE7SUFFRCx5QkFBZ0MsRUFBRSxFQUFFLE1BQU87UUFDekMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osTUFBTSxHQUFHLHNCQUFXLEdBQUcsVUFBVSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6SCxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSywwQkFBMEIsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5QyxJQUFJLE1BQU0sR0FBRztnQkFDWCxVQUFVLEVBQUUsVUFBVSxDQUFDLGlCQUFpQjtnQkFDeEMsSUFBSSxFQUFFLHNCQUFXLEdBQUcsU0FBUyxHQUFHLFdBQVc7Z0JBQzNDLFFBQVEsRUFBRTtvQkFDUixJQUFJLEVBQUUsRUFBRTtvQkFDUixNQUFNLEVBQUUsRUFDUDtpQkFDRjthQUNGLENBQUM7WUFDRixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFDZixVQUFDLElBQUk7Z0JBQ0gsY0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUMsQ0FBQTtZQUN0QyxDQUFDLEVBQ0QsVUFBQyxHQUFHO2dCQUNGLGNBQUcsQ0FBQyxJQUFJLENBQUMsOEJBQThCLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0UsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQztJQXRCZSwwQkFBZSxrQkFzQjlCLENBQUE7SUFFRCxrQkFBeUIsR0FBRyxFQUFFLFlBQW1CO1FBQW5CLDRCQUFtQixHQUFuQixtQkFBbUI7UUFDL0MsSUFBSSxNQUFNLEdBQUksVUFBVSxDQUFDLHNCQUFzQixDQUFDLHdCQUF3QixFQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BGLElBQUksVUFBVSxHQUFHLElBQUksNkJBQWtCLEVBQUUsQ0FBQztRQUMxQyxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLDBCQUEwQjtRQUMxQixNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFTLEdBQUc7WUFDaEMsZ0NBQWdDO1lBQ2hDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQVhlLG1CQUFRLFdBV3ZCLENBQUE7SUFFQSx1QkFBOEIsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTO1FBQzVFLFFBQVEsQ0FBQztZQUNMLEtBQUssQ0FBQztnQkFDRixHQUFHLEVBQUUsR0FBRztnQkFDUixNQUFNLEVBQUMsTUFBTTtnQkFDYixNQUFNLEVBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUM7YUFDcEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFTLElBQUksRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU07Z0JBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVMsSUFBSSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTTtnQkFDdkMsNEVBQTRFO1lBQ2hGLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFaZSx3QkFBYSxnQkFZNUIsQ0FBQTtJQUVELHlCQUFnQyxNQUFNO1FBQ2xDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLEVBQUUsQ0FBQSxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBLENBQUM7WUFDL0QsTUFBTSxDQUFBLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUM7Z0JBQ2xCLEtBQUssR0FBRztvQkFDTCxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUNYLEtBQUssQ0FBQztnQkFDVCxLQUFLLEdBQUc7b0JBQ0wsTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFDWCxLQUFLLENBQUM7Z0JBQ1QsS0FBSyxHQUFHO29CQUNMLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQ1gsS0FBSyxDQUFDO2dCQUNUO29CQUNHLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNuQixDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQWxCZSwwQkFBZSxrQkFrQjlCLENBQUE7SUFFRCwwQkFBaUMsTUFBTTtRQUNuQyxFQUFFLENBQUEsQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFBLENBQUM7WUFDNUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUFBLElBQUksQ0FBQSxDQUFDO1lBQ0YsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDTCxDQUFDO0lBTmUsMkJBQWdCLG1CQU0vQixDQUFBO0lBRUQsdUJBQThCLElBQVc7UUFDckMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixFQUFFLENBQUEsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFBLENBQUM7WUFDdEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMxQyxDQUFDO1FBQUEsSUFBSSxDQUFDLEVBQUUsQ0FBQSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUEsQ0FBQztZQUM1QixNQUFNLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLENBQUM7UUFBQSxJQUFJLENBQUEsQ0FBQztZQUNILE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDZixDQUFDO0lBQ0wsQ0FBQztJQVRlLHdCQUFhLGdCQVM1QixDQUFBO0lBRUQsNkJBQW9DLEtBQUssRUFBRSw4QkFBOEIsRUFBRSwyQkFBMkI7UUFDbEcsa0RBQWtEO1FBQ2xELEVBQUUsQ0FBQSxDQUFDLDhCQUE4QixDQUFDLE1BQU0sS0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQztZQUNwSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztZQUM3QyxNQUFNLENBQUM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxNQUFNLEdBQUcseUJBQXlCLENBQUMsMkJBQTJCLENBQUMsSUFBSSwyQkFBMkIsQ0FBQztRQUNuRyxJQUFJLGtCQUFrQixHQUFHLENBQUM7Z0JBQ3RCLFVBQVUsRUFBRSxPQUFPLENBQUMsMkJBQTJCLENBQUM7Z0JBQ2hELFdBQVcsRUFBRSxPQUFPLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxXQUFXLEVBQUUsMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVE7Z0JBQ3RGLFFBQVEsRUFBRSxJQUFJO2FBQ2pCLENBQUMsQ0FBQztRQUNILDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxVQUFDLEVBQUU7WUFDdEMsRUFBRSxDQUFBLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUEsQ0FBQztnQkFDckQsTUFBTSxHQUFHLE1BQU0sSUFBSSx5QkFBeUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO29CQUN4QixZQUFZLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDekIsYUFBYSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNuQyxhQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRO29CQUMvRCxVQUFVLEVBQUUsS0FBSztpQkFDcEIsQ0FBQyxDQUFDO1lBQ04sQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFBLENBQUMsTUFBTSxDQUFDLENBQUEsQ0FBQztZQUNQLEtBQUssQ0FBQztnQkFDRixHQUFHLEVBQUUsb0JBQW9CO2dCQUN6QixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFDLE1BQU07Z0JBQ2IsTUFBTSxFQUFDLEVBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFDO2FBQ3JDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBUyxJQUFJLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNO2dCQUN6QyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFTLElBQUksRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU07Z0JBQ3ZDLDRFQUE0RTtZQUNoRixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFBQSxJQUFJLENBQUEsQ0FBQztZQUNGLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQzVELENBQUM7SUFDTCxDQUFDO0lBdkNlLDhCQUFtQixzQkF1Q2xDLENBQUE7SUFFRCxtQ0FBMEMsRUFBRTtRQUN4QyxFQUFFLENBQUEsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUM7WUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQTtRQUNmLENBQUM7UUFBQSxJQUFJLENBQUEsQ0FBQztZQUNGLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakIsQ0FBQztJQUNMLENBQUM7SUFOZSxvQ0FBeUIsNEJBTXhDLENBQUE7QUFDSixDQUFDLEVBdnpETSxVQUFVLEtBQVYsVUFBVSxRQXV6RGhCOztBQ3p6REQseUNBQXlDO0FBQ3pDLElBQU8sU0FBUyxDQXFQZjtBQXJQRCxXQUFPLFNBQVMsRUFBQyxDQUFDO0lBRWhCLDBCQUFpQyxRQUFRO1FBQ3ZDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFVBQUMsT0FBTztZQUNoQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFMZSwwQkFBZ0IsbUJBSy9CLENBQUE7SUFFRCx5QkFBZ0MsS0FBSztRQUNuQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ1YsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNuQixLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBRXBDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEMsSUFBSSxlQUFlLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUN2QyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFckgsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNyRSxLQUFLLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFdEQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDVCxLQUFLLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMxRCxLQUFLLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM3RSxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQXJCZSx5QkFBZSxrQkFxQjlCLENBQUE7SUFFRCxnQkFBdUIsS0FBSztRQUMxQixNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN4QyxDQUFDO0lBRmUsZ0JBQU0sU0FFckIsQ0FBQTtJQUVELDJCQUFrQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU87UUFDNUQsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNiLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxVQUFDLEdBQUc7Z0JBQ2pDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBUGUsMkJBQWlCLG9CQU9oQyxDQUFBO0lBRUQsMEJBQWlDLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTztRQUN0RCxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ1IsT0FBTyxHQUFHLE9BQU8sSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQztZQUMzQyxHQUFHLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztZQUNyQixHQUFHLENBQUMsUUFBUSxHQUFHLFNBQVMsSUFBSSxPQUFPLENBQUM7WUFDcEMsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQztZQUM5QixJQUFJLGVBQWUsR0FBRyxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUM7WUFDbkUsSUFBSSxVQUFVLEdBQUcsMEJBQTBCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFN0QsR0FBRyxDQUFDLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMxRCxHQUFHLENBQUMsMEJBQTBCLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ2xGLEdBQUcsQ0FBQyx1QkFBdUIsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFFNUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDZCxHQUFHLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7Z0JBQ25DLEdBQUcsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBQ0QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLElBQUksVUFBVSxHQUFHLFdBQVcsRUFBRSxDQUFDO2dCQUMvQixFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUNmLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7Z0JBQ3RELENBQUM7WUFDSCxDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDWCxHQUFHLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztnQkFDdEIsSUFBSSxhQUFhLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7Z0JBQzVELEdBQUcsQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ2pJLEdBQUcsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNuSCxDQUFDO1lBQ0QsR0FBRyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFFNUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFVBQUMsS0FBSztnQkFDaEMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDYixDQUFDO0lBckNlLDBCQUFnQixtQkFxQy9CLENBQUE7SUFFRCxvQ0FBMkMsTUFBTTtRQUMvQyxJQUFJLFVBQVUsR0FBRyx1QkFBdUIsQ0FBQztRQUN6QyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1gsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDaEQseUJBQXlCO2dCQUN6QixVQUFVLEdBQUcsOEJBQThCLENBQUM7WUFDOUMsQ0FBQztZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxVQUFVLEdBQUcsbUJBQW1CLENBQUM7WUFDbkMsQ0FBQztZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sS0FBSyxVQUFVLElBQUksTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ25GLFVBQVUsR0FBRywwQkFBMEIsQ0FBQztZQUMxQyxDQUFDO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxVQUFVLEdBQUcsd0JBQXdCLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFmZSxvQ0FBMEIsNkJBZXpDLENBQUE7SUFFRCwwQ0FBaUQsTUFBTTtRQUNyRCxJQUFJLFVBQVUsR0FBRyxlQUFlLENBQUM7UUFDakMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNYLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hELFVBQVUsR0FBRyxZQUFZLENBQUM7WUFDNUIsQ0FBQztZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxVQUFVLEdBQUcsZUFBZSxDQUFDO1lBQy9CLENBQUM7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUssVUFBVSxJQUFJLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNuRixVQUFVLEdBQUcsZUFBZSxDQUFDO1lBQy9CLENBQUM7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQWRlLDBDQUFnQyxtQ0FjL0MsQ0FBQTtJQUVELDRCQUFtQyxHQUFHLEVBQUUsS0FBSztRQUMzQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbEIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNWLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUNqQyxLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0MsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUM3QixJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQztZQUN0QyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3RCLElBQUksYUFBYSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBRTVELElBQUksVUFBVSxHQUFHLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxRCxJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDN0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxVQUFVLEdBQUcsV0FBVyxFQUFFLENBQUM7Z0JBQy9CLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQ2YsTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtnQkFDdEQsQ0FBQztZQUNILENBQUM7WUFDRCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNYLEtBQUssQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO2dCQUN4QixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNaLGlFQUFpRTtvQkFDakUsS0FBSyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDOUgsS0FBSyxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDdkksS0FBSyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQ2hILHVEQUF1RDtvQkFDdkQsS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUNyQyxDQUFDO1lBQ0gsQ0FBQztZQUNELEtBQUssQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFqQ2UsNEJBQWtCLHFCQWlDakMsQ0FBQTtJQUdEO1FBQ0UsSUFBSSxlQUFlLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBTSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDcEIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsNEJBQWtCLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNkLENBQUM7SUFOZSxxQkFBVyxjQU0xQixDQUFBO0lBRUQ7UUFDRSxJQUFJLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFNLGlCQUFpQixDQUFDLENBQUM7UUFDaEUsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUNwQixNQUFNLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQU5lLHdCQUFjLGlCQU03QixDQUFBO0lBRUQsa0NBQXlDLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSztRQUM1RCxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ1IsR0FBRyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7WUFDekIsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDbkIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFVBQUMsS0FBSztnQkFDaEMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMvQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBUmUsa0NBQXdCLDJCQVF2QyxDQUFBO0lBRUQsNkJBQW9DLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTztRQUMzRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ1YsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7WUFDM0IsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7WUFDdkIsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzlDLEtBQUssQ0FBQyxVQUFVLEdBQUcsMEJBQTBCLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxhQUFhLENBQUMsQ0FBQztZQUU3RSxJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUM1RCxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ2xDLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztZQUN4QixJQUFJLGNBQWMsR0FBRyxlQUFlLENBQUM7WUFDckMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDZixlQUFlLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO2dCQUNqRCxjQUFjLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUQsQ0FBQztZQUNELEtBQUssQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1lBQ3hDLEtBQUssQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBQ3RDLElBQUksVUFBVSxHQUFHLFdBQVcsRUFBRSxDQUFDO1lBQy9CLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztnQkFDcEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFLVixDQUFDO1lBQ0gsQ0FBQztZQUNELEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlILEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUVqQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsVUFBQyxLQUFLO2dCQUNsQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNmLENBQUM7SUFuQ2UsNkJBQW1CLHNCQW1DbEMsQ0FBQTtJQUVELDRCQUFtQyxLQUFLLEVBQUUsS0FBWTtRQUFaLHFCQUFZLEdBQVosWUFBWTtRQUNwRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ1YsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDVixLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUNsQyxDQUFDO1lBQ0QsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUMvQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQztZQUN4QyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksYUFBYSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQzVELEtBQUssQ0FBQyxnQkFBZ0IsR0FBSSxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekUsS0FBSyxDQUFDLFVBQVUsR0FBRywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUQsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLENBQUM7WUFDRCxJQUFJLFVBQVUsR0FBRyxXQUFXLEVBQUUsQ0FBQztZQUMvQixFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUNmLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7Z0JBQ3BCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ1IsS0FBSyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDbkQsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3pELEVBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDO3dCQUN6QixLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUMvSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUE1QmUsNEJBQWtCLHFCQTRCakMsQ0FBQTtBQUNILENBQUMsRUFyUE0sU0FBUyxLQUFULFNBQVMsUUFxUGY7O0FDdFBELHlDQUF5QztBQUN6QyxJQUFPLFNBQVMsQ0FvU2Y7QUFwU0QsV0FBTyxTQUFTLEVBQUMsQ0FBQztJQUVMLGlCQUFPLEdBQUcsYUFBYSxDQUFDO0lBQ3hCLGNBQUksR0FBRyxHQUFHLEdBQUcsaUJBQU8sQ0FBQztJQUNyQixvQkFBVSxHQUFHLFdBQVcsQ0FBQztJQUN6QixvQkFBVSxHQUFHLG9CQUFvQixDQUFDO0lBQ2xDLHNCQUFZLEdBQUcsb0JBQVUsR0FBRyxPQUFPLENBQUM7SUFDcEMsYUFBRyxHQUFrQixNQUFNLENBQUMsR0FBRyxDQUFDLG9CQUFVLENBQUMsQ0FBQztJQUU1Qyw0QkFBa0IsR0FBRyxTQUFTLENBQUM7SUFDL0IsbUNBQXlCLEdBQUcsNEJBQWtCLEdBQUcsT0FBTyxDQUFDO0lBRXpELDJCQUFpQixHQUFHO1FBQzdCLE9BQU8sRUFBRTtZQUNQLE1BQU0sRUFBRSwyQ0FBMkM7U0FDcEQ7S0FDRixDQUFDO0lBRUY7O09BRUc7SUFDSCwwQkFBaUMsS0FBSyxFQUFFLEtBQUs7UUFDM0MsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixNQUFNLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQztJQUN0QyxDQUFDO0lBTGUsMEJBQWdCLG1CQUsvQixDQUFBO0lBRUQseUJBQWdDLE1BQU07UUFDcEMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNYLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUM3RSxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNkLENBQUM7SUFMZSx5QkFBZSxrQkFLOUIsQ0FBQTtJQUNEOztPQUVHO0lBQ0gsNkJBQW9DLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU07UUFDcEYsSUFBSSxpQkFBaUIsR0FBRyxTQUFTLENBQUM7UUFDbEMsSUFBSSxpQkFBaUIsR0FBRyxTQUFTLENBQUM7UUFFbEMsSUFBSSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQzFDLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFFaEMsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNYLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDWCxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxJQUFJLE1BQU0sR0FBRztZQUNYLEdBQUcsRUFBRSxFQUFFO1lBQ1AsSUFBSSxFQUFFLEVBQUU7WUFDUixNQUFNLEVBQUUsRUFBRTtZQUNWLFFBQVEsRUFBRSxFQUFFO1NBQ2IsQ0FBQztRQUVGLElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUV6QjtZQUNFLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUUvQixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBQyxJQUFJO2dCQUMvQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7Z0JBQ25DLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO2dCQUM3QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFFN0IsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3hDLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUV4QywrQkFBK0I7Z0JBQy9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDYixPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMxQixDQUFDO2dCQUNELEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDYixPQUFPLEdBQUcsV0FBVyxDQUFDLCtDQUErQyxDQUFDLENBQUE7Z0JBQ3hFLENBQUM7Z0JBQ0QsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sSUFBSSxPQUFPLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxRQUFRLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNyQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQ2QsUUFBUSxHQUFHOzRCQUNULE9BQU8sRUFBRSxPQUFPOzRCQUNoQixRQUFRLEVBQUUsRUFBRTt5QkFDYixDQUFDO3dCQUNGLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUM7b0JBQ25DLENBQUM7b0JBQ0QsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDN0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO3dCQUNqQixXQUFXLEdBQUc7NEJBQ1osc0JBQXNCLEVBQUUsRUFBRTt5QkFDM0IsQ0FBQzt3QkFDRixRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFdBQVcsQ0FBQztvQkFDM0MsQ0FBQztvQkFDRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUNULFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7d0JBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO3dCQUNsQixFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDOzRCQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFDL0ksQ0FBQzt3QkFBQyxJQUFJLENBQUMsQ0FBQzs0QkFDTixhQUFHLENBQUMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLGdCQUFnQixHQUFHLFFBQVEsR0FBRyxXQUFXLENBQUMsQ0FBQzt3QkFDakYsQ0FBQzt3QkFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQzt3QkFDcEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO3dCQUNsQixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFDLE9BQU87NEJBQzlCLElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQy9DLElBQUksZUFBZSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQ3RELEVBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBSSxXQUFXO2dDQUNoQyxVQUFVLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUM7Z0NBQ3hELFVBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ3JFLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQUMsS0FBSztvQ0FDMUIsSUFBSSxXQUFXLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQ0FDOUMsRUFBRSxDQUFDLENBQUMsV0FBVyxLQUFLLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dDQUM5QyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO3dDQUMxQixPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3Q0FDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0NBQzdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzs0Q0FDWixJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQzs0Q0FDbkQsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnREFDUixzQkFBc0I7Z0RBQ3RCLE1BQU0sR0FBRztvREFDUCxJQUFJLEVBQUUsV0FBVztvREFDakIsSUFBSSxFQUFFLEdBQUc7aURBQ1YsQ0FBQzs0Q0FDSixDQUFDO3dDQUNILENBQUM7b0NBQ0gsQ0FBQztnQ0FDSCxDQUFDLENBQUMsQ0FBQzs0QkFDTCxDQUFDO3dCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7b0JBQ2hDLENBQUM7b0JBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMscUJBQXFCLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUNwRSxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQ3ZFLElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLHVCQUF1QixDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztvQkFDMUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsb0JBQW9CLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO29CQUNqRSxJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7b0JBQzFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7d0JBQ3JCLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDM0IsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzs0QkFDVixFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dDQUMzQixNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztnQ0FDN0IsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBQyxJQUFJO29DQUN0RCxlQUFlLEdBQUcsSUFBSSxDQUFDO29DQUN2Qix1QkFBdUIsRUFBRSxDQUFDO2dDQUM1QixDQUFDLENBQUMsQ0FBQzs0QkFDTCxDQUFDOzRCQUFDLElBQUksQ0FBQyxDQUFDO2dDQUNOLHVCQUF1QixFQUFFLENBQUM7NEJBQzVCLENBQUM7d0JBQ0gsQ0FBQzt3QkFFRCxrQkFBa0IsSUFBSTs0QkFDcEIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDOzRCQUNmLDhEQUE4RDs0QkFDOUQsc0VBQXNFOzRCQUN0RSxrREFBa0Q7NEJBQ2xELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQzs0QkFDaEYsRUFBRSxDQUFDLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dDQUNwQyxJQUFJLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQzlCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0NBQ2QsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0NBQzFCLENBQUM7NEJBQ0gsQ0FBQzs0QkFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO3dCQUNmLENBQUM7d0JBRUQ7NEJBQ0UsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFVBQUMsRUFBRTtnQ0FDcEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsc0JBQXNCLEVBQUUsVUFBQyxJQUFJLEVBQUUsSUFBSTtvQ0FDcEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzt3Q0FDckIsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO3dDQUMzQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzRDQUNWLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLFVBQUMsY0FBYztnREFDOUMsSUFBSSxTQUFTLEdBQUcsY0FBYyxDQUFDLG9CQUFvQixDQUFDO2dEQUNwRCxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7b0RBQ3JDLElBQUksVUFBVSxHQUFHLGNBQWMsQ0FBQztvREFDaEMsSUFBSSxZQUFZLEdBQUcsY0FBYyxDQUFDLG1CQUFtQixDQUFDO29EQUN0RCxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO3dEQUNqQixJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3REFDcEQsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQzt3REFDL0IsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzREQUM5QixJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDOzREQUNwQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dFQUNQLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Z0VBQ2hDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0VBQ2hELE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFVBQUMsTUFBTTtvRUFDMUIsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzt3RUFDWCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dFQUMvQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksc0JBQXNCLENBQUMsQ0FBQyxDQUFDOzRFQUMvRCxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7NEVBQzFCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0ZBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7Z0ZBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxHQUFHLFNBQVMsQ0FBQyxDQUFDOzRFQUM3RixDQUFDO3dFQUNILENBQUM7b0VBQ0gsQ0FBQztnRUFDSCxDQUFDLENBQUMsQ0FBQztnRUFDSCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO2dFQUN0RCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29FQUNYLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLDhCQUE4QixDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztvRUFDNUUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztvRUFDNUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO29FQUN0RixJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLG1DQUFtQyxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDO29FQUMvRixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7b0VBRTdFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzt3RUFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0VBQzNHLENBQUM7Z0VBQ0gsQ0FBQzs0REFDSCxDQUFDO3dEQUNILENBQUM7b0RBQ0gsQ0FBQztnREFDSCxDQUFDOzRDQUNILENBQUMsQ0FBQyxDQUFDO3dDQUNMLENBQUM7b0NBQ0gsQ0FBQztnQ0FDSCxDQUFDLENBQUMsQ0FBQzs0QkFDTCxDQUFDLENBQUMsQ0FBQzt3QkFDTCxDQUFDO29CQUNILENBQUM7b0JBRUQsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDYixJQUFJLFlBQVksR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDNUQsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxxQkFBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7d0JBQ3BGLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO3dCQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUMvRyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILHVGQUF1RjtZQUN2RixPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxVQUFDLE9BQU8sRUFBRSxXQUFXO2dCQUNqRCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7Z0JBQ25CLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFVBQUMsV0FBVztvQkFDNUMsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLHNCQUFzQixDQUFDO29CQUM3QyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxVQUFDLElBQUksRUFBRSxJQUFJO3dCQUM5QixJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzt3QkFDMUQsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzs0QkFDVixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN6QixDQUFDO3dCQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNOLFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0NBQ2IsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ25CLENBQUMsQ0FBQyxDQUFDO3dCQUNMLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ3ZCLGdDQUFnQztvQkFDaEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBQyxFQUFFO3dCQUM1QixFQUFFLEVBQUUsQ0FBQztvQkFDUCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxhQUFHLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7UUFFRCxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsd0JBQXdCLEVBQUUsRUFBRSxFQUFFLFVBQUMsSUFBSTtZQUNwRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNULE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO2dCQUNsQixXQUFXLEVBQUUsQ0FBQztZQUNoQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxVQUFDLElBQUk7WUFDdEQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDVCxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDdkIsV0FBVyxFQUFFLENBQUM7WUFDaEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsVUFBQyxJQUFJO1lBQ3BELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ1QsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFVBQUMsSUFBSTtZQUNsRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNULE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixXQUFXLEVBQUUsQ0FBQztZQUNoQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBNVBlLDZCQUFtQixzQkE0UGxDLENBQUE7QUFHSCxDQUFDLEVBcFNNLFNBQVMsS0FBVCxTQUFTLFFBb1NmOztBQ3JTRCx5Q0FBeUM7QUFDekMsSUFBTyxTQUFTLENBc21CZjtBQXRtQkQsV0FBTyxTQUFTLEVBQUMsQ0FBQztJQUVsQjs7Ozs7Ozs7TUFRRTtJQUNBO1FBQ0UsTUFBTSxDQUFDO1lBQ0wsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsQ0FBQztZQUMvRCxLQUFLLEVBQUUsU0FBUztZQUNoQixLQUFLLEVBQUUsaUNBQWlDO1NBQ3pDLENBQUM7SUFDSixDQUFDO0lBQ0Q7UUFDRSxNQUFNLENBQUM7WUFDTCxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxDQUFDO1lBQy9ELEtBQUssRUFBRSxRQUFRO1lBQ2YsS0FBSyxFQUFFLCtDQUErQztTQUN2RCxDQUFDO0lBQ0osQ0FBQztJQUVEO1FBQ0UsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFGZSx1QkFBYSxnQkFFNUIsQ0FBQTtJQUVELHFCQUE0QixTQUFTO1FBQ25DLElBQUksSUFBSSxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQzNCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDZCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQVBlLHFCQUFXLGNBTzFCLENBQUE7SUFFRCxxQ0FBNEMsa0JBQWtCO1FBQ2hFOzs7Ozs7Ozs7Ozs7VUFZRTtRQUNFLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDWixDQUFDO0lBZmUscUNBQTJCLDhCQWUxQyxDQUFBO0lBR0Qsb0NBQTJDLGtCQUFrQjtRQUN6RCxNQUFNLENBQUMsZUFBZSxDQUFDO1lBQ3JCLGlCQUFpQixFQUFFO1lBQ25CLGlCQUFpQixFQUFFO1NBQ3BCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFMZSxvQ0FBMEIsNkJBS3pDLENBQUE7SUFFRCxvQ0FBMkMsUUFBZSxFQUFFLGFBQW9CO1FBQXJDLHdCQUFlLEdBQWYsZUFBZTtRQUFFLDZCQUFvQixHQUFwQixvQkFBb0I7UUFDOUUsSUFBSSxNQUFNLEdBQUc7WUFDWCxtQkFBbUI7WUFDbkIsaUJBQWlCLEVBQUU7U0FDcEIsQ0FBQztRQUNGLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNuQixhQUFhLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDMUQsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDbEIsTUFBTSxDQUFDLElBQUksQ0FDVDtnQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQztnQkFDL0UsS0FBSyxFQUFFLGFBQWE7Z0JBQ3BCLEtBQUssRUFBRSxvQkFBb0IsR0FBRyxhQUFhO2FBQzVDLENBQ0YsQ0FBQztZQUNGLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFuQmUsb0NBQTBCLDZCQW1CekMsQ0FBQTtJQUdELHNDQUE2QyxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVk7UUFDMUUsSUFBSSxFQUFFLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDakQsSUFBSSxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUN6RixJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQzNDLElBQUksT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7UUFDbkMsRUFBRSxDQUFDLENBQUMsYUFBYSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDaEgsTUFBTSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7WUFDbEMsTUFBTSxDQUFDLHFCQUFxQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3RSxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDM0QsNkJBQTZCO1lBQzdCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNqQixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDdkIsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQzlELEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLHdDQUF3QztvQkFDeEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUM7b0JBQzdELEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQ1IsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUM7b0JBQ3BDLENBQUM7b0JBQ0QsYUFBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLGlCQUFpQixHQUFHLEVBQUUsR0FBRyxtQkFBbUIsR0FBRyxXQUFXLENBQUMsQ0FBQztnQkFDN0YsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLFFBQVEsR0FBRztnQkFDWDtvQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDO29CQUNsRCxLQUFLLEVBQUUsY0FBYztvQkFDckIsS0FBSyxFQUFFLHdDQUF3QztpQkFDaEQ7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUM7b0JBQ2pELEtBQUssRUFBRSxPQUFPO29CQUNkLEtBQUssRUFBRSxxQ0FBcUMsR0FBRyxFQUFFO2lCQUNsRDthQUNBLENBQUM7WUFDTixNQUFNLENBQUMsd0JBQXdCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLGFBQWEsR0FBRyxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUMxRCxDQUFDO1lBQ0QsTUFBTSxDQUFDLGVBQWUsQ0FBQztnQkFDckIsbUJBQW1CO2dCQUNuQixpQkFBaUIsRUFBRTtnQkFDbkI7b0JBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUM7b0JBQ2pELEtBQUssRUFBRSxhQUFhO29CQUNwQixLQUFLLEVBQUUscUNBQXFDLEdBQUcsRUFBRTtpQkFDbEQ7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQW5EZSxzQ0FBNEIsK0JBbUQzQyxDQUFBO0lBRUQsa0NBQXlDLFdBQWtCLEVBQUUsUUFBZSxFQUFFLGFBQW9CO1FBQXpELDJCQUFrQixHQUFsQixrQkFBa0I7UUFBRSx3QkFBZSxHQUFmLGVBQWU7UUFBRSw2QkFBb0IsR0FBcEIsb0JBQW9CO1FBQ2hHLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNuQixhQUFhLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDMUQsQ0FBQztRQUNELElBQUksTUFBTSxHQUFHLDBCQUEwQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM3RCxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQ1Q7b0JBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDO29CQUMxRixLQUFLLEVBQUUsTUFBTTtvQkFDYixLQUFLLEVBQUUsbUNBQW1DO2lCQUMzQyxDQUNGLENBQUM7Z0JBRUYsTUFBTSxDQUFDLElBQUksQ0FDVDtvQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDO29CQUN2RyxLQUFLLEVBQUUsV0FBVztvQkFDbEIsS0FBSyxFQUFFLG9CQUFvQixHQUFHLFdBQVc7aUJBQzFDLENBQ0YsQ0FBQztZQUNKLENBQUM7WUFDRCxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBMUJlLGtDQUF3QiwyQkEwQnZDLENBQUE7SUFHRCwwQ0FBaUQsV0FBVyxFQUFFLGFBQW9CO1FBQXBCLDZCQUFvQixHQUFwQixvQkFBb0I7UUFDaEYsSUFBSSxRQUFRLEdBQUcsQ0FBQztnQkFDZCxLQUFLLEVBQUUsVUFBVTtnQkFDakIsS0FBSyxFQUFFLCtCQUErQjthQUN2QyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDakIsSUFBSSxRQUFRLEdBQUcsQ0FBQztvQkFDZCxLQUFLLEVBQUUsU0FBUztvQkFDaEIsS0FBSyxFQUFFLHFCQUFxQjtpQkFDN0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFaZSwwQ0FBZ0MsbUNBWS9DLENBQUE7SUFFRDtRQUNFLElBQUksYUFBYSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzVELE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDckI7Z0JBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUM7Z0JBQzlFLEtBQUssRUFBRSxNQUFNO2dCQUNiLEtBQUssRUFBRSxjQUFjO2dCQUNyQixLQUFLLEVBQUUsK0JBQStCO2FBQ3ZDO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLGNBQU0sT0FBQSxxQkFBVyxFQUFFLEVBQWIsQ0FBYTtnQkFDNUIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDO2dCQUM1RixLQUFLLEVBQUUsUUFBUTtnQkFDZixLQUFLLEVBQUUsWUFBWTtnQkFDbkIsS0FBSyxFQUFFLGlDQUFpQzthQUN6QztZQUNEO2dCQUNFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSx1QkFBdUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDO2dCQUNoRyxLQUFLLEVBQUUsU0FBUztnQkFDaEIsS0FBSyxFQUFFLGFBQWE7Z0JBQ3BCLEtBQUssRUFBRSw0Q0FBNEM7YUFDcEQ7WUFDRDtnQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUM7Z0JBQ3hGLEtBQUssRUFBRSxTQUFTO2dCQUNoQixLQUFLLEVBQUUsWUFBWTtnQkFDbkIsS0FBSyxFQUFFLDBCQUEwQjthQUNsQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUE3QmUsbUNBQXlCLDRCQTZCeEMsQ0FBQTtJQUVELDBCQUEwQixhQUFhLEVBQUUsV0FBVyxFQUFFLFlBQVk7UUFDaEUsYUFBYSxHQUFHLGFBQWEsSUFBSSxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUN6RSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN2SSxDQUFDO0lBRUQsaUNBQXdDLFdBQVcsRUFBRSxZQUFtQixFQUFFLE1BQWE7UUFBbEMsNEJBQW1CLEdBQW5CLG1CQUFtQjtRQUFFLHNCQUFhLEdBQWIsYUFBYTtRQUNyRixJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUM1RCxJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwSCxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4RCxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDbEIsWUFBWSxHQUFHLFdBQVcsQ0FBQztRQUM3QixDQUFDO1FBQ0QsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLEVBQUUsQ0FBQyxDQUFDLFdBQVcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDOUUsYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVEO1lBQ0UsSUFBSSxNQUFNLEdBQUcscUJBQVcsRUFBRSxJQUFJLGdCQUFnQixDQUFDO1lBQy9DLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMvQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUNYLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQztnQkFDdEMsQ0FBQztZQUNILENBQUM7WUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLE1BQU0sR0FBRztZQUNYO2dCQUNFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDO2dCQUM5RSxLQUFLLEVBQUUsVUFBVTtnQkFDakIsS0FBSyxFQUFFLHlCQUF5QjtnQkFDaEMsS0FBSyxFQUFFLCtCQUErQjthQUN2QztZQUNEO2dCQUNFLFFBQVEsRUFBRSwwRUFBd0U7YUFDbkY7WUFDRDtnQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQztnQkFDdkgsUUFBUSxFQUFFLFVBQUMsTUFBTSxFQUFFLElBQUk7b0JBQ3JCLG1EQUFtRDtvQkFDbkQsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNkLENBQUM7b0JBQ0QsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3pELEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO3dCQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNkLENBQUM7b0JBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDZixDQUFDO2dCQUNELCtFQUErRTtnQkFDL0UsS0FBSyxFQUFFLFdBQVc7Z0JBQ2xCLEtBQUssRUFBRSxrQkFBa0I7Z0JBQ3pCLEtBQUssRUFBRSxxRUFBcUU7YUFDN0U7WUFDRDtnQkFDRSxPQUFPLEVBQUUsY0FBTSxPQUFBLGNBQWMsRUFBRSxJQUFJLGFBQWEsRUFBakMsQ0FBaUM7Z0JBQ2hELEVBQUUsRUFBRSxXQUFXO2dCQUNmLElBQUksRUFBRSxhQUFhO2dCQUNuQixLQUFLLEVBQUUsV0FBVztnQkFDbEIsS0FBSyxFQUFFLGtCQUFrQjtnQkFDekIsS0FBSyxFQUFFLHVDQUF1QzthQUMvQztZQUNEO2dCQUNFLE9BQU8sRUFBRSxjQUFNLE9BQUEsQ0FBQyxjQUFjLEVBQUUsRUFBakIsQ0FBaUI7Z0JBQ2hDLElBQUksRUFBRSxVQUFVO2dCQUNoQixLQUFLLEVBQUUsUUFBUTtnQkFDZixLQUFLLEVBQUUsWUFBWTtnQkFDbkIsS0FBSyxFQUFFLDhCQUE4QjthQUN0QztZQUNEO2dCQUNFLE9BQU8sRUFBRSxjQUFNLE9BQUEsY0FBYyxFQUFFLEVBQWhCLENBQWdCO2dCQUMvQixFQUFFLEVBQUUsUUFBUTtnQkFDWixJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixLQUFLLEVBQUUsUUFBUTtnQkFDZixLQUFLLEVBQUUsWUFBWTtnQkFDbkIsS0FBSyxFQUFFLHNDQUFzQzthQUM5QztZQUNEO2dCQUNFLE9BQU8sRUFBRSxjQUFNLE9BQUEsY0FBYyxFQUFFLEVBQWhCLENBQWdCO2dCQUMvQixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDO2dCQUM5SSxLQUFLLEVBQUUsU0FBUztnQkFDaEIsS0FBSyxFQUFFLGlCQUFpQjtnQkFDeEIsS0FBSyxFQUFFLG1DQUFtQzthQUMzQztZQUNQOzs7Ozs7Y0FNRTtZQUNJO2dCQUNFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLENBQUM7Z0JBQzFILEtBQUssRUFBRSxVQUFVO2dCQUNqQixLQUFLLEVBQUUsV0FBVztnQkFDbEIsS0FBSyxFQUFFLDRCQUE0QjtnQkFDbkMsUUFBUSxFQUFFLFVBQUMsTUFBTSxFQUFFLElBQUk7b0JBQ3JCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNkLENBQUM7b0JBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztvQkFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDZCxDQUFDO29CQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQzthQUNGO1NBQ0YsQ0FBQztRQUVGLElBQUksT0FBTyxHQUFHO1lBQ1osYUFBYSxFQUFFLGFBQWE7WUFDNUIsV0FBVyxFQUFFLFdBQVc7WUFDeEIsV0FBVyxFQUFFLFdBQVc7WUFDeEIsWUFBWSxFQUFFLFlBQVk7WUFDMUIsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDO1FBQ0YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxzQ0FBNEIsRUFBRSxVQUFDLEVBQUU7WUFDL0MsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDekIsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDWCxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDNUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsVUFBQyxDQUFDOzRCQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNqQixDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQXJJZSxpQ0FBdUIsMEJBcUl0QyxDQUFBO0lBRUQseUNBQWdELFdBQVcsRUFBRSxZQUFtQjtRQUFuQiw0QkFBbUIsR0FBbkIsbUJBQW1CO1FBQzlFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNqQixNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELElBQUksYUFBYSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzVELElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BILEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNsQixZQUFZLEdBQUcsV0FBVyxDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBRztZQUNYO2dCQUNFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLENBQUM7Z0JBQzFILEtBQUssRUFBRSxNQUFNO2dCQUNiLEtBQUssRUFBRSxtQ0FBbUM7YUFDM0M7WUFDRDtnQkFDRSxJQUFJLEVBQUUsa0JBQWtCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztnQkFDcEQsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLEtBQUssRUFBRSxrRkFBa0Y7YUFDMUY7WUFDRDtnQkFDRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztnQkFDbEQsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLEtBQUssRUFBRSw0Q0FBNEM7YUFDcEQ7WUFDRDtnQkFDRSxPQUFPLEVBQUUsY0FBTSxPQUFBLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxFQUEvQixDQUErQjtnQkFDOUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUM7Z0JBQ3BELEtBQUssRUFBRSxPQUFPO2dCQUNkLEtBQUssRUFBRSxvQ0FBb0M7YUFDNUM7U0FDRixDQUFDO1FBQ0YsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBakNlLHlDQUErQixrQ0FpQzlDLENBQUE7SUFFRCxnQ0FBdUMsSUFBSTtRQUN6QyxJQUFJLFlBQVksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFNLGNBQWMsQ0FBQyxDQUFDO1FBQzFELEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDakIsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDZixDQUFDO0lBTmUsZ0NBQXNCLHlCQU1yQyxDQUFBO0lBRUQsb0NBQTJDLElBQUk7UUFDN0MsSUFBSSxZQUFZLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBTSxjQUFjLENBQUMsQ0FBQztRQUMxRCxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQU5lLG9DQUEwQiw2QkFNekMsQ0FBQTtJQUVELCtCQUFzQyxNQUFNO1FBQzFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUZlLCtCQUFxQix3QkFFcEMsQ0FBQTtJQUVELDJCQUFrQyxhQUFvQjtRQUFwQiw2QkFBb0IsR0FBcEIsb0JBQW9CO1FBQ3BELEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNuQixhQUFhLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDMUQsQ0FBQztRQUNELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUxlLDJCQUFpQixvQkFLaEMsQ0FBQTtJQUVELDBCQUFpQyxhQUFhLEVBQUUsV0FBVztRQUN6RCxNQUFNLENBQUMsb0JBQW9CLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFGZSwwQkFBZ0IsbUJBRS9CLENBQUE7SUFFRCw0QkFBbUMsYUFBYSxFQUFFLFdBQVc7UUFDM0QsTUFBTSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRmUsNEJBQWtCLHFCQUVqQyxDQUFBO0lBRUQsNEJBQW1DLGFBQWEsRUFBRSxXQUFXO1FBQzNELE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRmUsNEJBQWtCLHFCQUVqQyxDQUFBO0lBRUQsOEJBQXFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCO1FBQy9FLElBQUksTUFBTSxHQUFHLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDO1FBQ2xGLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUhlLDhCQUFvQix1QkFHbkMsQ0FBQTtJQUVELDhCQUFxQyxhQUFhLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxrQkFBeUI7UUFBekIsa0NBQXlCLEdBQXpCLHlCQUF5QjtRQUM5RixFQUFFLENBQUMsQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDdkMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDbkIsYUFBYSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pILENBQUM7SUFSZSw4QkFBb0IsdUJBUW5DLENBQUE7SUFFVSxzQ0FBNEIsR0FBRyxFQUFFLENBQUM7SUFFN0Msa0NBQXlDLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTztRQUNsRSxJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUM1RCxJQUFJLFFBQVEsR0FBRztZQUNiO2dCQUNFLEVBQUUsRUFBRSxRQUFRO2dCQUNaLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQztnQkFDekQsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsS0FBSyxFQUFFLDhCQUE4QjthQUN0QztTQUNGLENBQUM7UUFDRixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ1osUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDWixFQUFFLEVBQUUsRUFBRTtnQkFDTixJQUFJLEVBQUUsRUFBRTtnQkFDUixLQUFLLEVBQUUsR0FBRyxHQUFHLE9BQU87Z0JBQ3BCLEtBQUssRUFBRSxTQUFTLEdBQUcsT0FBTzthQUMzQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBbkJlLGtDQUF3QiwyQkFtQnZDLENBQUE7SUFFRCxpQ0FBd0MsV0FBVyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsV0FBdUI7UUFBdkIsMkJBQXVCLEdBQXZCLGtCQUF1QjtRQUNqRyxJQUFJLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDaEUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNoQixXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFQZSxpQ0FBdUIsMEJBT3RDLENBQUE7SUFHRCxxQ0FBNEMsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZO1FBQ3pFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2pELElBQUksYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDM0MsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM1RSxFQUFFLENBQUMsQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM3QixXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUcsQ0FBQztRQUNELElBQUksY0FBYyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDckI7Z0JBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQztnQkFDbEQsS0FBSyxFQUFFLGdCQUFnQjtnQkFDdkIsS0FBSyxFQUFFLHVDQUF1QztnQkFDOUMsT0FBTyxFQUFFLGNBQU0sT0FBQSxPQUFPLEVBQVAsQ0FBTzthQUN2QjtZQUNEO2dCQUNFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDO2dCQUNqRCxLQUFLLEVBQUUsVUFBVTtnQkFDakIsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLEtBQUssRUFBRSwyQ0FBMkM7YUFDbkQ7WUFDRDtnQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQztnQkFDckQsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLEtBQUssRUFBRSxZQUFZO2dCQUNuQixLQUFLLEVBQUUsZ0NBQWdDO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSx3QkFBd0IsQ0FBQztnQkFDbkUsS0FBSyxFQUFFLGFBQWE7Z0JBQ3BCLEtBQUssRUFBRSxhQUFhO2dCQUNwQixLQUFLLEVBQUUsbURBQW1EO2FBQzNEO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUM7Z0JBQ2pELEtBQUssRUFBRSxNQUFNO2dCQUNiLEtBQUssRUFBRSxvQkFBb0I7Z0JBQzNCLEtBQUssRUFBRSxnQ0FBZ0M7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQztnQkFDbkQsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsS0FBSyxFQUFFLG1CQUFtQjtnQkFDMUIsS0FBSyxFQUFFLGtDQUFrQzthQUMxQztZQUNEO2dCQUNFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDO2dCQUNwRCxLQUFLLEVBQUUsU0FBUztnQkFDaEIsS0FBSyxFQUFFLFdBQVc7Z0JBQ2xCLEtBQUssRUFBRSxtQ0FBbUM7YUFDM0M7WUFDRDtnQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsbUJBQW1CLENBQUM7Z0JBQ3JFLEtBQUssRUFBRSxPQUFPO2dCQUNkLEtBQUssRUFBRSxjQUFjO2dCQUNyQixLQUFLLEVBQUUsaUNBQWlDO2FBQ3pDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUM7Z0JBQ3JELEtBQUssRUFBRSxTQUFTO2dCQUNoQixLQUFLLEVBQUUsZUFBZTtnQkFDdEIsS0FBSyxFQUFFLDZEQUE2RDthQUNyRTtZQUNEO2dCQUNFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDO2dCQUN0RCxLQUFLLEVBQUUsWUFBWTtnQkFDbkIsS0FBSyxFQUFFLGVBQWU7Z0JBQ3RCLEtBQUssRUFBRSwwQkFBMEI7YUFDbEM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBdkVlLHFDQUEyQiw4QkF1RTFDLENBQUE7SUFHRCx1QkFBOEIsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFXO1FBQVgsb0JBQVcsR0FBWCxXQUFXO1FBQzdELElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2pELElBQUksYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDM0MsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM1RSxFQUFFLENBQUMsQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM3QixXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUcsQ0FBQztRQUNELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFUZSx1QkFBYSxnQkFTNUIsQ0FBQTtJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLElBQUk7UUFDckIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNULElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUIsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCx5QkFBeUIsV0FBVztRQUNsQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyQyxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ25DLElBQUksU0FBUyxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFzQixXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDakYsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNkLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2QyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbEIsb0JBQW9CLElBQUk7Z0JBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2YsQ0FBQztZQUNELE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFVBQUMsSUFBSTtnQkFDaEMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDVCxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3RDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDeEMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNuQixDQUFDO29CQUNILENBQUM7b0JBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ04sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQzt3QkFDckIsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUMvQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxRQUFRLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7NEJBQzVDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDbkIsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxNQUFNLENBQUMsV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCx5QkFBeUIsTUFBTSxFQUFFLFFBQVE7UUFDdkMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNiLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuQyxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN4QixDQUFDO1FBQ0gsQ0FBQztRQUNELGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2hCLENBQUM7QUFDSCxDQUFDLEVBdG1CTSxTQUFTLEtBQVQsU0FBUyxRQXNtQmY7O0FDdm1CRCx5Q0FBeUM7QUFDekMsZ0VBQWdFO0FBQ2hFLDZDQUE2QztBQUM3QywyQ0FBMkM7QUFDM0MsOENBQThDO0FBbUM3QztBQ3ZDRCx5Q0FBeUM7QUFDekMsMkNBQTJDO0FBRTNDLElBQU8sU0FBUyxDQTBFZjtBQTFFRCxXQUFPLFNBQVMsRUFBQyxDQUFDO0lBRUwsaUJBQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLG9CQUFVLEVBQUUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUMzRyxvQkFBVSxHQUFHLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBTyxFQUFFLG9CQUFVLENBQUMsQ0FBQztJQUN6RSxlQUFLLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixDQUFDLHNCQUFZLENBQUMsQ0FBQztJQUVyRSxpQkFBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGdCQUFnQixFQUFFLFVBQUMsY0FBc0M7WUFDdkUsY0FBYyxDQUFDLElBQUksQ0FBQyxpQkFBTyxFQUFFLGVBQUssQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDOUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxlQUFLLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBRXBELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFPLEVBQUUsYUFBYSxDQUFDLEVBQUUsZUFBSyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDNUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQU8sRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLGVBQUssQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDcEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQU8sRUFBRSx3QkFBd0IsQ0FBQyxFQUFFLGVBQUssQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDMUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQU8sRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLGVBQUssQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3JGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFPLEVBQUUsMEJBQTBCLENBQUMsRUFBRSxlQUFLLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQzdGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFPLEVBQUUsaUNBQWlDLENBQUMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUM5RyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBTyxFQUFFLGlDQUFpQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3pHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFPLEVBQUUsdUNBQXVDLENBQUMsRUFBRSxlQUFLLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQzFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFPLEVBQUUsMENBQTBDLENBQUMsRUFBRSxlQUFLLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQzNHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFPLEVBQUUscURBQXFELENBQUMsRUFBRSxlQUFLLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3RILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFPLEVBQUUsb0RBQW9ELENBQUMsRUFBRSxlQUFLLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3BILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFPLEVBQUUsMERBQTBELENBQUMsRUFBRSxlQUFLLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUN6SCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBTyxFQUFFLGtEQUFrRCxDQUFDLEVBQUUsZUFBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUN2SCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBTyxFQUFFLHlDQUF5QyxDQUFDLEVBQUUsZUFBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUM5RyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBTyxFQUFFLGdDQUFnQyxDQUFDLEVBQUUsZUFBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDNUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQU8sRUFBRSx1REFBdUQsQ0FBQyxFQUFFLGVBQUssQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDekgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQU8sRUFBRSx1REFBdUQsQ0FBQyxFQUFFLGVBQUssQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDekgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQU8sRUFBRSxxQkFBcUIsQ0FBQyxFQUFFLGVBQUssQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDdkYsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFHSixpQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFDLFVBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxhQUFhO1lBQ3pNLGFBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckIsWUFBWSxDQUFDLFlBQVksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxZQUFZLEdBQUcsdUJBQXVCLENBQUM7WUFDL0UsWUFBWSxDQUFDLFlBQVksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxZQUFZLEdBQUcsdUJBQXVCLENBQUM7WUFFL0UsSUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN0QixJQUFJLENBQUMsY0FBTSxPQUFBLGlCQUFPLEVBQVAsQ0FBTyxDQUFDO2lCQUNuQixLQUFLLENBQUMsY0FBTSxPQUFBLElBQUksRUFBSixDQUFJLENBQUM7aUJBQ2pCLEtBQUssRUFBRSxDQUFDO1lBQy9COzs7OztjQUtFO1lBQ0Y7Ozs7Y0FJRTtZQUNFLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDO2lCQUNULElBQUksQ0FBQyxjQUFNLE9BQUEsaUJBQU8sRUFBUCxDQUFPLENBQUM7aUJBQ25CLEtBQUssQ0FBQyxjQUFNLE9BQUEsTUFBTSxFQUFOLENBQU0sQ0FBQztpQkFFbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDaEIsS0FBSyxFQUFFLENBQUM7WUFFOUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUosaUJBQU8sQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQVUsSUFBSTtZQUNyRCxNQUFNLENBQUMsVUFBVSxJQUFJO2dCQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUosa0JBQWtCLENBQUMsU0FBUyxDQUFDLG9CQUFVLENBQUMsQ0FBQztJQUV6Qyw0QkFBNEI7SUFDNUIsa0JBQWtCLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDbkQsQ0FBQyxFQTFFTSxTQUFTLEtBQVQsU0FBUyxRQTBFZjs7QUM3RUQsMENBQTBDO0FBRTFDLElBQU8sU0FBUyxDQW1CZjtBQW5CRCxXQUFPLFNBQVMsRUFBQyxDQUFDO0lBQ2hCLGlCQUFPLENBQUMsVUFBVSxDQUFDLHNDQUFzQyxFQUFFLFVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGVBQWlELEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCO1FBRTFNLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFFbkIsTUFBTSxDQUFDLE1BQU0sR0FBRyxjQUFNLE9BQUEsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQTFCLENBQTBCLENBQUM7UUFFakQsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRWhCLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFNUgsNkJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUxSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsRUFuQk0sU0FBUyxLQUFULFNBQVMsUUFtQmY7O0FDckJELHlDQUF5QztBQUN6QyxnRUFBZ0U7QUFDaEUsNkNBQTZDO0FBQzdDLDJDQUEyQztBQUMzQyw4Q0FBOEM7QUFFOUMsSUFBTyxTQUFTLENBVWY7QUFWRCxXQUFPLFNBQVMsRUFBQyxDQUFDO0lBRUwsd0JBQWMsR0FBRyxvQkFBVSxDQUFDLGdCQUFnQixFQUNyRCxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCO1FBQ3pKLFVBQUMsTUFBTSxFQUFFLGVBQWlELEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUM1RixjQUF1QyxFQUFFLFNBQTZCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCO1lBRXRILE1BQU0sQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFFN0QsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNWLENBQUMsRUFWTSxTQUFTLEtBQVQsU0FBUyxRQVVmOztBQ2hCRCx5Q0FBeUM7QUFDekMsZ0VBQWdFO0FBQ2hFLDZDQUE2QztBQUM3QywyQ0FBMkM7QUFDM0MsOENBQThDO0FBRTlDLElBQU8sU0FBUyxDQXVGZjtBQXZGRCxXQUFPLFNBQVMsRUFBQyxDQUFDO0lBRUwsOEJBQW9CLEdBQUcsb0JBQVUsQ0FBQyxzQkFBc0IsRUFDakUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQjtRQUM1SyxVQUFDLE1BQU0sRUFBRSxlQUFpRCxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFDNUYsY0FBdUMsRUFBRSxTQUE2QixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGVBQWU7WUFFdkksTUFBTSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUM7WUFDcEMsTUFBTSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7WUFDL0IsTUFBTSxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQztZQUNqQyxNQUFNLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1lBRS9CLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDNUgsTUFBTSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEUsTUFBTSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFakYsTUFBTSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRTtnQkFDbkMsVUFBVSxFQUFFLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLFVBQUMsTUFBTTtnQkFDaEMsVUFBVSxFQUFFLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxXQUFXLEdBQUc7Z0JBQ25CLElBQUksRUFBRSxZQUFZO2dCQUNsQixxQkFBcUIsRUFBRSxJQUFJO2dCQUMzQix1QkFBdUIsRUFBRSxLQUFLO2dCQUM5QixXQUFXLEVBQUUsSUFBSTtnQkFDakIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLGFBQWEsRUFBRTtvQkFDYixVQUFVLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7aUJBQzFDO2dCQUNELFVBQVUsRUFBRTtvQkFDVjt3QkFDRSxLQUFLLEVBQUUsWUFBWTt3QkFDbkIsV0FBVyxFQUFFLE1BQU07d0JBQ25CLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDO3FCQUNoRTtvQkFDRDt3QkFDRSxLQUFLLEVBQUUsWUFBWTt3QkFDbkIsV0FBVyxFQUFFLE9BQU87d0JBQ3BCLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUFDO3FCQUNyRTtvQkFDRDt3QkFDRSxLQUFLLEVBQUUsV0FBVzt3QkFDbEIsV0FBVyxFQUFFLFVBQVU7d0JBQ3ZCLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxDQUFDO3FCQUN0RTtvQkFDRDt3QkFDRSxLQUFLLEVBQUUsWUFBWTt3QkFDbkIsV0FBVyxFQUFFLGNBQWM7d0JBQzNCLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDO3FCQUN2RTtpQkFDRjthQUNGLENBQUM7WUFDRixVQUFVLEVBQUUsQ0FBQztZQUdiO2dCQUNFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUNqQixJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsNENBQTRDLENBQUMsbUNBQXlCLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZKLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3hELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDOzRCQUNaLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07NEJBQzdDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0NBQ1QsMEJBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dDQUNoRCxFQUFFLENBQUMsQ0FBQywwQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUN0RCxhQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7b0NBQ2hDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO2dDQUNwQixDQUFDOzRCQUNILENBQUM7NEJBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDOzRCQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN0QixDQUFDLENBQUM7NEJBQ0YsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTs0QkFDM0MsYUFBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7d0JBQ2hFLENBQUMsQ0FBQyxDQUFDO29CQUNQLENBQUM7Z0JBQ0gsQ0FBQztnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDTixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNWLENBQUMsRUF2Rk0sU0FBUyxLQUFULFNBQVMsUUF1RmY7O0FDN0ZELHlDQUF5QztBQUN6QyxnRUFBZ0U7QUFDaEUsNkNBQTZDO0FBQzdDLDJDQUEyQztBQUMzQyw4Q0FBOEM7QUFFOUMsSUFBTyxTQUFTLENBOEZmO0FBOUZELFdBQU8sU0FBUyxFQUFDLENBQUM7SUFFTCwrQkFBcUIsR0FBRyxvQkFBVSxDQUFDLHVCQUF1QixFQUNuRSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCO1FBQzVLLFVBQUMsTUFBTSxFQUFFLGVBQWlELEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUM1RixjQUF1QyxFQUFFLFNBQTZCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZTtZQUV2SSxNQUFNLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQztZQUNwQyxNQUFNLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQztZQUMvQixNQUFNLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7WUFFL0IsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUM1SCxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsa0NBQXdCLEVBQUUsQ0FBQztZQUNyRCxNQUFNLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBRTVELE1BQU0sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ25DLFVBQVUsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxVQUFDLE1BQU07Z0JBQ2hDLFVBQVUsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsV0FBVyxHQUFHO2dCQUNuQixJQUFJLEVBQUUsY0FBYztnQkFDcEIscUJBQXFCLEVBQUUsSUFBSTtnQkFDM0IsdUJBQXVCLEVBQUUsS0FBSztnQkFDOUIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixhQUFhLEVBQUU7b0JBQ2IsVUFBVSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO2lCQUMxQztnQkFDRCxVQUFVLEVBQUU7b0JBQ1Y7d0JBQ0UsS0FBSyxFQUFFLE1BQU07d0JBQ2IsV0FBVyxFQUFFLE1BQU07d0JBQ25CLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDO3FCQUNoRTtvQkFDRDt3QkFDRSxLQUFLLEVBQUUsWUFBWTt3QkFDbkIsV0FBVyxFQUFFLE9BQU87d0JBQ3BCLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDO3FCQUNuRTtvQkFDRDt3QkFDRSxLQUFLLEVBQUUsNEJBQTRCO3dCQUNuQyxXQUFXLEVBQUUsY0FBYzt3QkFDM0IsWUFBWSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUM7cUJBQ3BFO29CQUNEO3dCQUNFLEtBQUssRUFBRSx5QkFBeUI7d0JBQ2hDLFdBQVcsRUFBRSxjQUFjO3dCQUMzQixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQztxQkFDcEU7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLFdBQVc7d0JBQ2xCLFdBQVcsRUFBRSxlQUFlO3dCQUM1QixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsQ0FBQztxQkFDdEU7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLFlBQVk7d0JBQ25CLFdBQVcsRUFBRSxjQUFjO3dCQUMzQixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQztxQkFDdkU7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsVUFBVSxFQUFFLENBQUM7WUFHYjtnQkFDRSwyREFBMkQ7Z0JBQzNELElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyw0Q0FBNEMsQ0FBQyxtQ0FBeUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUNqSCxhQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNiLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLDJCQUFpQixDQUFDO3dCQUMvQixPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO3dCQUM3QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUNULDJCQUFpQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDOUMsRUFBRSxDQUFDLENBQUMsMEJBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDdEQsYUFBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dDQUNoQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzs0QkFDeEIsQ0FBQzt3QkFDSCxDQUFDO3dCQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEIsQ0FBQyxDQUFDO3dCQUNGLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07d0JBQzNDLGFBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO29CQUNoRSxDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDVixDQUFDLEVBOUZNLFNBQVMsS0FBVCxTQUFTLFFBOEZmOztBQ3BHRCx5Q0FBeUM7QUFDekMsNENBQTRDO0FBTTVDLElBQU8sVUFBVSxDQTRRaEI7QUE1UUQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVOLGtCQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxxQkFBVSxFQUFFLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDbEgscUJBQVUsR0FBRyxhQUFhLENBQUMsd0JBQXdCLENBQUMsa0JBQU8sRUFBRSxxQkFBVSxDQUFDLENBQUM7SUFDekUsZ0JBQUssR0FBRyxhQUFhLENBQUMscUJBQXFCLENBQUMsdUJBQVksQ0FBQyxDQUFDO0lBRXJFLGtCQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsVUFBQyxjQUFzQztZQUV2RSxjQUFjO2lCQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsZ0JBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ2xFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFPLEVBQUUsd0JBQXdCLENBQUMsRUFBRSxnQkFBSyxDQUFDLDZCQUE2QixFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNyRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLGdCQUFLLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUN6RSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLGdCQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNyRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLGdCQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNqRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBTyxFQUFFLGlCQUFpQixDQUFDLEVBQUUsZ0JBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQzVFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFPLEVBQUUsV0FBVyxDQUFDLEVBQUUsZ0JBQUssQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDM0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxnQkFBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDbkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQU8sRUFBRSxXQUFXLENBQUMsRUFBRSxnQkFBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDckUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQU8sRUFBRSxXQUFXLENBQUMsRUFBRSxnQkFBSyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUMzRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLGdCQUFLLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUN4RSxJQUFJLENBQUMsa0JBQU8sRUFBRSxFQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFPLEVBQUUsd0JBQXdCLENBQUMsRUFBQyxDQUFDLENBQUM7WUFHbkYsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGtCQUFPLEVBQUUsMENBQTBDLENBQUMsRUFBRSxVQUFDLE9BQU87Z0JBQzdFLGNBQWM7cUJBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGlDQUFpQyxDQUFDLEVBQUUsZ0JBQUssQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDakcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG1DQUFtQyxDQUFDLEVBQUUsZ0JBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7cUJBQ2pHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSw0QkFBNEIsQ0FBQyxFQUFFLGdCQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUN2RixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0NBQWdDLENBQUMsRUFBRSxnQkFBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDMUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDhDQUE4QyxDQUFDLEVBQUUsZ0JBQUssQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDM0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGtEQUFrRCxDQUFDLEVBQUUsZ0JBQUssQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDOUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG1EQUFtRCxDQUFDLEVBQUUsZ0JBQUssQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDckksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHFEQUFxRCxDQUFDLEVBQUUsZ0JBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDckksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLCtCQUErQixDQUFDLEVBQUUsZ0JBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7cUJBQzdGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFLGdCQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUNoRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsb0NBQW9DLENBQUMsRUFBRSxnQkFBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDakcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGdDQUFnQyxDQUFDLEVBQUUsZ0JBQUssQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7cUJBQy9GLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxvQ0FBb0MsQ0FBQyxFQUFFLGdCQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUNsRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUscUNBQXFDLENBQUMsRUFBRSxnQkFBSyxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUN6RyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsdUNBQXVDLENBQUMsRUFBRSxnQkFBSyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUN6RyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsOEJBQThCLENBQUMsRUFBRSxnQkFBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDM0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLEVBQUUsZ0JBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7cUJBQ3ZGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQ0FBZ0MsQ0FBQyxFQUFFLGdCQUFLLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUM5RixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsa0RBQWtELENBQUMsRUFBRSxnQkFBSyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUNsSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsdUJBQXVCLENBQUMsRUFBRSxnQkFBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDbEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLGdCQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUNyRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLEVBQUUsZ0JBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ3ZFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsRUFBRSxnQkFBSyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUM5RSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLEVBQUUsZ0JBQUssQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDakYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLEVBQUUsZ0JBQUssQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDbkYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLEVBQUUsZ0JBQUssQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDMUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLEVBQUUsZ0JBQUssQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDM0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHVCQUF1QixDQUFDLEVBQUUsZ0JBQUssQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDN0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLEVBQUUsZ0JBQUssQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBQ2hHLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGtCQUFPLEVBQUUsd0JBQXdCLEVBQUUsMENBQTBDLENBQUMsRUFBRSxVQUFDLE9BQU87Z0JBQ3ZHLGNBQWM7cUJBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLEVBQUUsZ0JBQUssQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDdEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLEVBQUUsZ0JBQUssQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDMUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxFQUFFLGdCQUFLLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUN2RixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFHSixrQkFBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxZQUFZLEVBQUUsVUFBQyxVQUErQjtZQUM5RSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQywyQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxrQ0FBdUIsRUFBRSxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDM0csQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVKLGtCQUFPLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFO1FBQ2xDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLDJCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLGtDQUF1QixFQUFFLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUMxRyxDQUFDLENBQUMsQ0FBQztJQUVILGtCQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUMsV0FBVyxFQUFFLGNBQWMsRUFBRSxVQUFDLFNBQVMsRUFBRSxZQUFZO1lBQ3RGLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUosa0JBQU8sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxZQUFZLEVBQUUsVUFBQyxVQUErQjtZQUNyRixNQUFNLENBQUM7Z0JBQ0wsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRTtnQkFDdkIsZUFBZSxFQUFFLEtBQUs7Z0JBQ3RCLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixhQUFhLEVBQUUsSUFBSTtnQkFDbkIsSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVKLGtCQUFPLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUFFLGNBQU0sT0FBQSx5QkFBYyxFQUFkLENBQWMsQ0FBQyxDQUFDO0lBRTNELGtCQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRTtRQUM3QixNQUFNLENBQUMsVUFBQyxJQUFJO1lBQ1YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxrQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsVUFBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsY0FBYztZQUUxSyxjQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JCLFlBQVksQ0FBQyxZQUFZLENBQUMsR0FBRyx1QkFBWSxHQUFHLHVCQUF1QixDQUFDO1lBQ3BFLElBQUksT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQztpQkFDL0IsSUFBSSxDQUFDLGNBQU0sT0FBQSxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFPLEVBQUUsTUFBTSxDQUFDLEVBQWhDLENBQWdDLENBQUM7aUJBQzVDLEtBQUssQ0FBQyxjQUFNLE9BQUEsTUFBTSxFQUFOLENBQU0sQ0FBQztpQkFDbkIsS0FBSyxFQUFFLENBQUM7WUFFWCxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQztpQkFDdkMsSUFBSSxDQUFDLGNBQU0sT0FBQSxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFPLEVBQUUsVUFBVSxDQUFDLEVBQXBDLENBQW9DLENBQUM7aUJBQ2hELEtBQUssQ0FBQyxjQUFNLE9BQUEsVUFBVSxFQUFWLENBQVUsQ0FBQztpQkFDdkIsS0FBSyxFQUFFLENBQUM7WUFFWCxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2lCQUM3QyxJQUFJLENBQUMsY0FBTSxPQUFBLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQU8sRUFBRSx3QkFBd0IsQ0FBQyxFQUFsRCxDQUFrRCxDQUFDO2lCQUM5RCxLQUFLLENBQUMsY0FBTSxPQUFBLFVBQVUsRUFBVixDQUFVLENBQUM7aUJBQ3ZCLEtBQUssRUFBRSxDQUFDO1lBRVgsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUM7aUJBQy9CLElBQUksQ0FBQyxjQUFNLE9BQUEsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBTyxFQUFFLE1BQU0sQ0FBQyxFQUFoQyxDQUFnQyxDQUFDO2lCQUM1QyxLQUFLLENBQUMsY0FBTSxPQUFBLE1BQU0sRUFBTixDQUFNLENBQUM7aUJBQ25CLEtBQUssRUFBRSxDQUFDO1lBRVgsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7aUJBQ25DLElBQUksQ0FBQyxjQUFNLE9BQUEsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBTyxFQUFFLFFBQVEsQ0FBQyxFQUFsQyxDQUFrQyxDQUFDO2lCQUM5QyxLQUFLLENBQUMsY0FBTSxPQUFBLFFBQVEsRUFBUixDQUFRLENBQUM7aUJBQ3JCLEtBQUssRUFBRSxDQUFDO1lBRVgsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQ2pDLElBQUksQ0FBQyxjQUFNLE9BQUEsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBTyxFQUFFLE9BQU8sQ0FBQyxFQUFqQyxDQUFpQyxDQUFDO2lCQUM3QyxLQUFLLENBQUMsY0FBTSxPQUFBLE1BQU0sRUFBTixDQUFNLENBQUM7aUJBQ25CLEtBQUssRUFBRSxDQUFDO1lBRVgsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUM7aUJBQ3ZDLElBQUksQ0FBQyxjQUFNLE9BQUEsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBTyxFQUFFLFVBQVUsQ0FBQyxFQUFwQyxDQUFvQyxDQUFDO2lCQUNoRCxLQUFLLENBQUMsY0FBTSxPQUFBLFNBQVMsRUFBVCxDQUFTLENBQUM7aUJBQ3RCLEtBQUssRUFBRSxDQUFDO1lBRVgsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7aUJBQ25DLElBQUksQ0FBQyxjQUFNLE9BQUEsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBTyxFQUFFLFFBQVEsQ0FBQyxFQUFsQyxDQUFrQyxDQUFDO2lCQUM5QyxLQUFLLENBQUMsY0FBTSxPQUFBLFFBQVEsRUFBUixDQUFRLENBQUM7aUJBQ3JCLEtBQUssRUFBRSxDQUFDO1lBRVgsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztpQkFDL0MsSUFBSSxDQUFDLGNBQU0sT0FBQSxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFPLEVBQUUsY0FBYyxDQUFDLEVBQXhDLENBQXdDLENBQUM7aUJBQ3BELEtBQUssQ0FBQyxjQUFNLE9BQUEsZUFBZSxFQUFmLENBQWUsQ0FBQztpQkFDNUIsS0FBSyxFQUFFLENBQUM7WUFFWCxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQztpQkFDckMsSUFBSSxDQUFDLGNBQU0sT0FBQSxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFPLEVBQUUsbUJBQW1CLENBQUMsRUFBN0MsQ0FBNkMsQ0FBQztpQkFDekQsS0FBSyxDQUFDLGNBQU0sT0FBQSxTQUFTLEVBQVQsQ0FBUyxDQUFDO2lCQUN0QixLQUFLLEVBQUUsQ0FBQztZQUVYLElBQUksaUJBQWlCLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztpQkFDekQsSUFBSSxDQUFDLGNBQU0sT0FBQSxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFPLEVBQUUsbUJBQW1CLENBQUMsRUFBN0MsQ0FBNkMsQ0FBQztpQkFDekQsS0FBSyxDQUFDLGNBQU0sT0FBQSxZQUFZLEVBQVosQ0FBWSxDQUFDO2lCQUN6QixLQUFLLEVBQUUsQ0FBQztZQUVYLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQ3pDLElBQUksQ0FBQyxjQUFNLE9BQUEsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBTyxFQUFFLFdBQVcsQ0FBQyxFQUFyQyxDQUFxQyxDQUFDO2lCQUNqRCxLQUFLLENBQUMsY0FBTSxPQUFBLFdBQVcsRUFBWCxDQUFXLENBQUM7aUJBQ3hCLEtBQUssRUFBRSxDQUFDO1lBRVgsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQ2pDLElBQUksQ0FBQyxjQUFNLE9BQUEsY0FBYyxFQUFkLENBQWMsQ0FBQztpQkFDMUIsT0FBTyxDQUFDLGNBQU0sT0FBQSxlQUFlLENBQUMsVUFBVSxDQUFDLGtDQUF1QixDQUFDLElBQUksZUFBZSxDQUFDLFVBQVUsQ0FBQywwQkFBZSxDQUFDLEVBQWxHLENBQWtHLENBQUM7aUJBQ2pILEtBQUssQ0FBQyxjQUFNLE9BQUEsY0FBYyxFQUFkLENBQWMsQ0FBQztpQkFDM0IsS0FBSyxFQUFFLENBQUM7WUFFWCxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQztpQkFDVCxXQUFXLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLFVBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ2YsR0FBRyxFQUFFLENBQUM7Z0JBQ1IsQ0FBQzthQUNGLENBQUM7aUJBQ0QsSUFBSSxDQUFDLGNBQU0sT0FBQSxrQkFBTyxFQUFQLENBQU8sQ0FBQztpQkFDbkIsS0FBSyxDQUFDLGNBQU0sT0FBQSxNQUFNLEVBQU4sQ0FBTSxDQUFDO2lCQUNuQixJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUM7aUJBQy9CLEtBQUssRUFBRSxDQUFDO1lBQ1gsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV2Qjs7Ozs7Ozs7Y0FRRTtZQUVGLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDO2lCQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDO2lCQUNULElBQUksQ0FBQyxjQUFNLE9BQUEsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBTyxFQUFFLGNBQWMsQ0FBQyxHQUFHLDRCQUE0QixFQUF2RSxDQUF1RSxDQUFDO2lCQUNuRixLQUFLLENBQUMsY0FBTSxPQUFBLFVBQVUsRUFBVixDQUFVLENBQUM7aUJBR3ZCLElBQUksQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsaUJBQWlCLENBQUM7aUJBQzdELEtBQUssRUFBRSxDQUFDO1lBRVgsNkJBQTZCO1FBQy9CLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFSixrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQztRQUMxQyxJQUFJLEVBQUUsZ0JBQWdCO1FBQ3RCLElBQUksRUFBRSxVQUFDLElBQUk7WUFDVCxDQUFDLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDO2lCQUMvQixJQUFJLENBQUMsVUFBQyxNQUFNLEVBQUUsVUFBVTtnQkFDdkIsSUFBSSxNQUFNLEdBQW9CLFVBQVUsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQy9FLGNBQUcsQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzVDLElBQUksTUFBTSxHQUFVLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQ3RDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUM1QyxJQUFJLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUMzRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN6QixTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMzQyxDQUFDO29CQUNELE1BQU0sR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hDLENBQUM7Z0JBRUQsYUFBYSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQ2pDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ2xDLGNBQWMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO2dCQUVqQyxFQUFFLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUM3Qiw2Q0FBNkM7b0JBQzdDLHFDQUFxQztvQkFDckMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNaLElBQUksbUJBQW1CLEdBQUcsYUFBYSxDQUFDLG1CQUFtQixDQUFDO3dCQUM1RCxFQUFFLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7NEJBQ3hCLElBQUksSUFBSSxHQUFHLG1CQUFtQixDQUFDOzRCQUMvQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUM5QixFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDWixHQUFHLElBQUksQ0FBQyxDQUFDO2dDQUNULEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQ0FDN0IsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0NBQ1osTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0NBQ3BDLENBQUM7NEJBQ0gsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxVQUFVLENBQUMsU0FBUyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0YsZ0VBQWdFO29CQUNoRSwyQ0FBMkM7b0JBQzNDLDJHQUEyRztvQkFDM0csSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztvQkFDekIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDVCxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDdkQsQ0FBQztnQkFDSCxDQUFDO2dCQUNELEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ1gsVUFBVSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7b0JBQzlCLElBQUksRUFBRSxDQUFDO29CQUNQLE1BQU0sQ0FBQztnQkFDVCxDQUFDO1lBQ0gsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxVQUFDLFFBQVE7Z0JBQ2IsY0FBRyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN2RCxDQUFDLENBQUM7aUJBQ0QsTUFBTSxDQUFDO2dCQUNOLElBQUksRUFBRSxDQUFDO1lBQ1QsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0tBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUVULGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMscUJBQVUsQ0FBQyxDQUFDO0FBQzNDLENBQUMsRUE1UU0sVUFBVSxLQUFWLFVBQVUsUUE0UWhCOztBQ25SRCx5Q0FBeUM7QUFDekMsMkNBQTJDO0FBRTNDLElBQU8sVUFBVSxDQTJ3QmhCO0FBM3dCRCxXQUFPLFVBQVUsRUFBQyxDQUFDO0lBRU4sK0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7SUFFdkQsY0FBYyxLQUFLO1FBQ2pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxtQkFBbUIsU0FBUyxFQUFFLEVBQUUsRUFBRSxJQUFJO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkgsQ0FBQztJQUVELHFCQUFxQixJQUFJO1FBQ3ZCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLHVCQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsa0JBQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxrQkFBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDN0UsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsc0JBQXNCLEtBQWdCO1FBQ3BDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFDLElBQUk7WUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELG9CQUFvQixJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU07UUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBQyxHQUFHO1lBQ3JCLE1BQU0sQ0FBQyx1QkFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsSUFBSSwwQkFBZSxDQUFDLE1BQU0sRUFBRSxvQkFBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSDtRQUFBO1lBQ1MsZUFBVSxHQUFxQixJQUFJLENBQUM7WUFDcEMsU0FBSSxHQUFHLEVBQUUsQ0FBQztZQUNWLGFBQVEsR0FBRyxFQUFFLENBQUM7WUFFZCwyQkFBc0IsR0FBRyxFQUFFLENBQUM7WUFFNUIsaUNBQTRCLEdBQUcsRUFBRSxDQUFDO1lBZ0JsQyxTQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1YsVUFBSyxHQUFHLEVBQUUsQ0FBQztZQUlsQix5QkFBeUI7WUFDbEIsV0FBTSxHQUFHLEVBQUUsQ0FBQztZQUNaLGNBQVMsR0FBRyxFQUFFLENBQUM7WUFDZixXQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ2YscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1lBRTdCLDRCQUE0QjtZQUNyQixlQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ25CLGdDQUEyQixHQUFHLEVBQUUsQ0FBQztZQUNqQyxjQUFTLEdBQUcsRUFBRSxDQUFDO1lBRWYsYUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNkLGFBQVEsR0FBRyxFQUFFLENBQUM7WUFDZCxlQUFVLEdBQUcsRUFBRSxDQUFDO1lBRWhCLFlBQU8sR0FBRyxLQUFLLENBQUM7WUFnQmhCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLFdBQU0sR0FBRyxFQUFFLENBQUM7WUFDWixlQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLGFBQVEsR0FBRyxFQUFFLENBQUM7WUFDZCxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBZ2xCeEIsQ0FBQztRQS9uQkMsc0JBQVcsMERBQXNCO1lBUmpDOzs7Ozs7ZUFNRztpQkFFSDtnQkFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQ3JDLENBQUM7aUJBQ0QsVUFBa0Msc0JBQWlDO2dCQUNqRSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7WUFDdkQsQ0FBQzs7O1dBSEE7UUFNRCxzQkFBVyw4Q0FBVTtpQkFBckI7Z0JBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQ3BDLENBQUM7OztXQUFBO1FBa0JELHNCQUFXLGlEQUFhO2lCQUF4QjtnQkFDRSxFQUFFLENBQUMsQ0FBQyxzQkFBVyxDQUFDLENBQUMsQ0FBQztvQkFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDZCxDQUFDO2dCQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBQyxPQUFPO29CQUNsQyxJQUFJLElBQUksR0FBRyxrQkFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM1QixFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQzt3QkFDekIsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQzt3QkFDdkMsTUFBTSxDQUFDLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNqRSxDQUFDO29CQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUM7b0JBQ2YsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7OztXQUFBO1FBUUQsc0JBQVcsK0NBQVc7aUJBQXRCO2dCQUNFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBQyxDQUFDO29CQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUE7Z0JBQ2hELENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQzs7O1dBQUE7UUFFTSw2Q0FBWSxHQUFuQjtZQUNFLE1BQU0sQ0FBQywyQkFBZ0IsQ0FBQztRQUMxQixDQUFDO1FBRU0seUNBQVEsR0FBZixVQUFnQixJQUFJO1lBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7UUFDcEMsQ0FBQztRQUVNLDJDQUFVLEdBQWpCLFVBQWtCLFNBQVMsRUFBRSxFQUFFO1lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVNLHlEQUF3QixHQUEvQixVQUFnQyxTQUFTLEVBQUUsRUFBRTtZQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLHVCQUF1QixDQUFDLENBQUMsQ0FBQztRQUM3RixDQUFDO1FBRU0sdUNBQU0sR0FBYixVQUFjLFNBQVMsRUFBRSxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVNLGlEQUFnQixHQUF2QixVQUF3QixTQUFtQztZQUFuQyx5QkFBbUMsR0FBbkMsWUFBWSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekQsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFTSwrQ0FBYyxHQUFyQixVQUFzQixJQUFJO1lBQ3hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRU0sMkNBQVUsR0FBakIsVUFBa0IsSUFBSSxFQUFFLEVBQTRCO1lBQTVCLGtCQUE0QixHQUE1QixLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNsRCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQy9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDakIsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLCtCQUFvQixDQUFDLENBQUM7Z0JBQzlDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ1QsSUFBSSxDQUFDO3dCQUNILFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN2QyxDQUFFO29CQUFBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ1gsY0FBRyxDQUFDLElBQUksQ0FBQywyQkFBMkIsR0FBRywrQkFBb0IsR0FBRyxTQUFTLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2hHLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxFQUFFLENBQUMsQ0FBQyxXQUFXLElBQUksRUFBRSxJQUFJLHVCQUFZLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNoRixXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQyxDQUFDO1lBQ0QsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUNyQixDQUFDO1FBR00sMkNBQVUsR0FBakIsVUFBa0IsV0FBVztZQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQztZQUMzQixFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNoQiw4QkFBOEI7Z0JBQzlCLElBQUksWUFBWSxHQUFHLGlCQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7b0JBQ2pCLFlBQVksQ0FBQywrQkFBb0IsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ25FLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVEOztXQUVHO1FBQ0ksaURBQWdCLEdBQXZCO1lBQ0UsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztZQUM3QyxDQUFDO1lBQ0QsTUFBTSxDQUFDLE1BQU0sSUFBSSwyQkFBZ0IsQ0FBQztRQUNwQyxDQUFDO1FBRVMsd0RBQXVCLEdBQWpDLFVBQWtDLE1BQU0sRUFBRSxTQUFpQjtZQUN6RCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbEIsSUFBSSxFQUFFLEdBQUcsa0JBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxVQUFVLEdBQUcsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDbEcsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsVUFBVSxHQUFHLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQy9GLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixNQUFNLENBQUM7WUFDVCxDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxRQUFRO29CQUN0QyxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO29CQUNqQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3dCQUNiLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO3dCQUM3QyxJQUFJLE9BQU8sR0FBRyxXQUFXLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxVQUFVLENBQUMsSUFBSSxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQzt3QkFDMUYsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzs0QkFDWixDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUMsSUFBSTtnQ0FDcEMsSUFBSSxVQUFVLEdBQUcsa0JBQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FDL0IsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0NBQ3RCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO2dDQUM1QixDQUFDOzRCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNMLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUMsT0FBTztvQkFDcEMsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztvQkFDaEMsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUMvQyxJQUFJLE9BQU8sR0FBRyx1QkFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNyQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO3dCQUN0RCxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxVQUFDLEtBQUs7NEJBQ3pCLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUNqQixNQUFNLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztnQ0FDMUIsTUFBTSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO2dDQUNqQyxNQUFNLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQzs0QkFDekIsQ0FBQzt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLE1BQU0sQ0FBQyxRQUFRLEdBQUcseUJBQWMsQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQztRQUVNLDBDQUFTLEdBQWhCO1lBQUEsaUJBeU5DO1lBeE5DLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7WUFFdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFHO2dCQUNwQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7Z0JBQ2hDLEtBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDL0IsSUFBSSxJQUFJLEdBQUcsa0JBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDeEIsR0FBRyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLG9CQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDNUQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDVCxHQUFHLENBQUMsV0FBVyxJQUFJLG1DQUF3QixHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQy9ELENBQUM7Z0JBQ0QsR0FBRyxDQUFDLFFBQVEsR0FBRyx5QkFBYyxDQUFDO2dCQUM5QixLQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO2dCQUV6QixJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztnQkFDcEMsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ2QsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztnQkFDRCxJQUFJLFdBQVcsR0FBRywrQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUMsR0FBRyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNoQixFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUNoQixHQUFHLENBQUMsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUN6QyxHQUFHLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN0RCxDQUFDO2dCQUNELElBQUksS0FBSyxHQUFHLGtCQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNuQixHQUFHLENBQUMsVUFBVSxHQUFHLCtCQUFvQixDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBRTlELElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztnQkFDeEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsVUFBQyxNQUFNO29CQUN6RSxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO29CQUN2QyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO3dCQUNqQixFQUFFLENBQUMsQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQzs0QkFDbkMsZUFBZSxHQUFHLFlBQVksQ0FBQzt3QkFDakMsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILEVBQUUsQ0FBQyxDQUFDLGVBQWdCLENBQUMsQ0FBQyxDQUFDO29CQUNyQixHQUFHLENBQUMsYUFBYSxHQUFHLGVBQWUsQ0FBQztnQkFDdEMsQ0FBQztnQkFDRCxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRSxVQUFDLFNBQVM7b0JBQ25FLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7b0JBQzVCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ1YsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDOzRCQUNoQixVQUFVLEdBQUcsS0FBSyxDQUFDO3dCQUNyQixDQUFDO3dCQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNOLFVBQVUsR0FBRyxVQUFVLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQzt3QkFDeEMsQ0FBQzt3QkFDRCxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNqQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDWixLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ2xDLENBQUM7d0JBQ0QsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ2hDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzRCQUNqQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7NEJBQ2xCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDdEIsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNyQyxDQUFDOzRCQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQzdCLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDckMsQ0FBQzs0QkFBQyxJQUFJLENBQUMsQ0FBQztnQ0FDTixNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3JDLENBQUM7NEJBQ0QsU0FBUyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUN2RixDQUFDO29CQUNILENBQUM7b0JBQ0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFVBQUMsSUFBSTt3QkFDcEMsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzt3QkFDdkMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs0QkFDbEIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7d0JBQzFDLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsR0FBRyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7Z0JBQzdCLElBQUksU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFDMUIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQixHQUFHLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQzdCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDbkUsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFDLE9BQU87Z0JBQzVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFBQyxPQUFPLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztnQkFDNUMsS0FBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO2dCQUMzQyxJQUFJLFFBQVEsR0FBRyxzQkFBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDbkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztvQkFDMUIsT0FBTyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQzVCLENBQUM7Z0JBQ0QsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDOUYsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFFBQVEsR0FBRyw0QkFBaUIsQ0FBQyxRQUFRLEVBQUUsS0FBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUM1SixPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUV6QyxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUNqQyxPQUFPLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBQyxHQUFHO29CQUN2QyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDbEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLE9BQU8sQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxvQkFBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ3BFLEtBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQ3RELElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUM5QixPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ2xDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzVDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixPQUFPLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RDLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQy9CLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDO29CQUM1QixZQUFZLENBQUMsT0FBTyxDQUFDLFVBQUMsR0FBRzt3QkFDdkIsR0FBRyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7b0JBQ3pCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLFdBQVcsR0FBRyx5QkFBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxVQUFDLHFCQUFxQjtnQkFDeEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7b0JBQUMscUJBQXFCLENBQUMsSUFBSSxHQUFHLHVCQUF1QixDQUFDO2dCQUN0RixLQUFJLENBQUMsMkJBQTJCLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcscUJBQXFCLENBQUE7Z0JBQ2xGLElBQUksUUFBUSxHQUFHLHNCQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDcEQscUJBQXFCLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFFakMsRUFBRSxDQUFBLENBQUMscUJBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsb0JBQVMsQ0FBQyxLQUFJLENBQUMsNEJBQTRCLEVBQUUscUJBQXFCLENBQUMsQ0FBQztvQkFDMUcsS0FBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUVqRSxxQkFBcUIsQ0FBQyxZQUFZLEdBQUcsUUFBUSxHQUFHLDRCQUFpQixDQUFDLFFBQVEsRUFBRSxLQUFJLENBQUMsSUFBSSxFQUFFLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDM0gscUJBQXFCLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQ3JFLHFCQUFxQixDQUFDLFNBQVMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBRTlFLHFCQUFxQixDQUFDLFdBQVcsR0FBRyx3QkFBYSxDQUFDLGtCQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO2dCQUNsRiw4Q0FBOEM7Z0JBQzlDLHFCQUFxQixDQUFDLGFBQWEsR0FBRywwQkFBZSxDQUFDLG9CQUFTLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO2dCQUN4RixxQkFBcUIsQ0FBQyxjQUFjLEdBQUcsMkJBQWdCLENBQUMsb0JBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7Z0JBRzFGLElBQUksWUFBWSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQztnQkFDL0MscUJBQXFCLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBQyxHQUFHO29CQUNyRCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDbEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLHFCQUFxQixDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLG9CQUFTLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO2dCQUNoRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsb0JBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BHLEtBQUksQ0FBQyx1QkFBdUIsQ0FBQyxxQkFBcUIsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO2dCQUNsRixJQUFJLE9BQU8sR0FBSSxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7Z0JBQzlDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDO29CQUM1QixZQUFZLENBQUMsT0FBTyxDQUFDLFVBQUMsR0FBRzt3QkFDdkIsR0FBRyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7b0JBQ3pCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILG1FQUFtRTtZQUNuRSx3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBQyxPQUFPO2dCQUM1QixJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO2dCQUMvQixJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUNqQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO29CQUNqQixFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLEtBQUsseUJBQWMsQ0FBQyxDQUFDLENBQUM7d0JBQzNDLE9BQU8sR0FBRyxJQUFJLENBQUM7d0JBQ2YsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFDLEdBQUc7NEJBQ3ZCLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQ0FDYixPQUFPLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQ0FDdkIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQ0FDWixPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztnQ0FDN0IsQ0FBQzs0QkFDSCxDQUFDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRWxCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFDLEdBQUc7Z0JBQ3BCLElBQUksSUFBSSxHQUFHLGtCQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUNqQixXQUFXLEdBQUcsRUFBRSxDQUFDO29CQUNqQixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDO2dCQUNqQyxDQUFDO2dCQUNELFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztZQUU3QixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbEIsR0FBRyxDQUFDLENBQUMsSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUNsQixJQUFJLFdBQVcsR0FBRyw0QkFBaUIsQ0FBQyxVQUFDLEdBQUcsSUFBSyxPQUFBLGtCQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssT0FBTyxFQUF4QixDQUF3QixFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQztnQkFDL0csSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNsQixFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDcEIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN0QixJQUFJLFlBQVksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO29CQUM5QixFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO3dCQUNqQixNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztvQkFDL0IsQ0FBQztnQkFDSCxDQUFDO2dCQUNELElBQUksV0FBVyxHQUFHO29CQUNoQixJQUFJLEVBQUUsT0FBTztvQkFDYixFQUFFLEVBQUUsT0FBTztvQkFDWCxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO29CQUN0QyxNQUFNLEVBQUUsTUFBTTtvQkFDZCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxJQUFJLEVBQUUsTUFBTTtvQkFDVixZQUFZLEVBQUUsV0FBVztvQkFDekIsUUFBUSxFQUFFLHNCQUFXO2lCQUN4QixDQUFDO2dCQUNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0IsQ0FBQztZQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO1lBRXRCLDZCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN0Qyx1QkFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVTLDJDQUFVLEdBQXBCO1lBQUEsaUJBNkxDO1lBNUxDLElBQUksQ0FBQztnQkFDSCw2RkFBNkY7Z0JBQzdGLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFFbEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxVQUFDLHFCQUFxQjtvQkFDeEQsSUFBSSxJQUFJLEdBQUcsa0JBQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO29CQUMxQyxJQUFJLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7b0JBQzlDLFFBQVEsQ0FBQyxJQUFJLENBQUM7d0JBQ1osT0FBTyxFQUFFLGFBQWEsR0FBRyxJQUFJO3dCQUM3QixLQUFLLEVBQUUsSUFBSTt3QkFDWCxLQUFLLEVBQUU7NEJBQ0wsUUFBUSxFQUFFLFFBQVE7eUJBQ25CO3dCQUNELFFBQVEsRUFBRSxRQUFRO3dCQUNsQixzQkFBc0IsRUFBRSxDQUFDLHFCQUFxQixDQUFDO3dCQUMvQyxJQUFJLEVBQUUscUJBQXFCLENBQUMsS0FBSyxJQUFJLEVBQUU7d0JBQ3ZDLFFBQVEsRUFBRSxFQUFFO3FCQUNiLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQUMsT0FBTztvQkFDNUIscUVBQXFFO29CQUNyRSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBQ3RCLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBQyxPQUFPO3dCQUN2QixPQUFPLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLFVBQUMscUJBQXFCOzRCQUMzRCxJQUFJLFdBQVcsR0FBRyxzQkFBVyxDQUFDLHFCQUFxQixDQUFDLENBQUM7NEJBQ3JELEVBQUUsQ0FBQyxDQUFDLFdBQVc7Z0NBQ1gsMEJBQWUsQ0FBQyxXQUFXLEVBQUUsc0JBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQ0FDbEQsdUJBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyx1QkFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUNsRSxVQUFVLEdBQUcsT0FBTyxDQUFDOzRCQUN2QixDQUFDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO29CQUVILEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7d0JBQ2YsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3BDLENBQUM7b0JBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ04sU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDMUIsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxjQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDckMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFDLE9BQU87b0JBQ3hCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQUMsT0FBTzt3QkFDckMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLFVBQUMsRUFBRTs0QkFDOUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsa0JBQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxrQkFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7d0JBQ3JELENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO29CQUNILEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7d0JBQ1osT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ2pDLENBQUM7b0JBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ04sSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQzt3QkFDaEMsUUFBUSxDQUFDLElBQUksQ0FBQzs0QkFDWixPQUFPLEVBQUUsYUFBYSxHQUFHLElBQUk7NEJBQzdCLEtBQUssRUFBRSxJQUFJOzRCQUNYLEtBQUssRUFBRTtnQ0FDTCxRQUFRLEVBQUUsUUFBUTs2QkFDbkI7NEJBQ0MsUUFBUSxFQUFFLFFBQVE7NEJBQ3BCLHNCQUFzQixFQUFFLEVBQUU7NEJBQzFCLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUU7NEJBQ3pCLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQzt5QkFDcEIsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQUMsS0FBSztvQkFDakMsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7b0JBQ3BDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO29CQUM1QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUNyQixJQUFJLFNBQVMsR0FBRyx1QkFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNwQyxFQUFFLENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDeEIsSUFBSSxPQUFPLEdBQUcsS0FBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7d0JBQ3RELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7NEJBQ1osT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7NEJBRXJCLDhGQUE4Rjs0QkFDOUYsd0RBQXdEOzRCQUV4RCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dDQUNULElBQUksT0FBTyxHQUFJLElBQUksQ0FBQztnQ0FDcEIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUMvQixPQUFPLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQztnQ0FDN0IsQ0FBQztnQ0FDRCxPQUFPLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFHLEdBQUcsQ0FBQyxDQUFDOzRCQUN2RCxDQUFDOzRCQUVELGtFQUFrRTs0QkFDbEUsRUFBRSxDQUFDLENBQUMsa0JBQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztnQ0FDMUMsT0FBTyxDQUFDLFdBQVcsR0FBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO3FDQUNqQyxJQUFJLENBQUMscUJBQXFCLENBQUU7cUNBQzVCLEtBQUssQ0FBQyxFQUFFLENBQUM7cUNBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztvQ0FDOUIsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFO29DQUM1QixLQUFLLEVBQUUsV0FBVyxDQUFDLGFBQWEsRUFBRTtpQ0FDbkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzs0QkFFMUMsQ0FBQzt3QkFDSCxDQUFDO3dCQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNOLGNBQUcsQ0FBQyxLQUFLLENBQUMseUJBQXlCLEdBQUcsV0FBVyxHQUFHLGFBQWEsR0FBRyxTQUFTLEdBQUcsY0FBYyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDbEgsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUVILFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFDLE9BQU8sSUFBSyxPQUFBLE9BQU8sQ0FBQyxJQUFJLEVBQVosQ0FBWSxDQUFDLENBQUM7Z0JBRXZFLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBRXBELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQ25DLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNqQixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7b0JBQ2hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFDLE9BQU87d0JBQ3JDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQzs0QkFDekUsT0FBTyxDQUFDLFFBQVEsR0FBRyx1QkFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDcEQsQ0FBQzt3QkFDRCxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO3dCQUM5QixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOzRCQUNaLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUM7NEJBQzFCLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ25DLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQzs0QkFDcEIsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ2IsVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDOzRCQUN6QyxDQUFDOzRCQUNELFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQzs0QkFDL0MsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUNuQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0NBQ1osTUFBTSxHQUFHO29DQUNQLElBQUksRUFBRSxVQUFVO29DQUNoQixRQUFRLEVBQUUsSUFBSTtvQ0FDZCxJQUFJLEVBQUUsRUFBRTtpQ0FDVCxDQUFDO2dDQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0NBQ3JCLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7NEJBQ2pDLENBQUM7NEJBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQzVCLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFFNUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUNkLElBQUksV0FBVyxHQUFHO3dCQUNoQixRQUFRLEVBQUUseUJBQWM7cUJBQ3pCLENBQUM7b0JBRUYsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQUMsT0FBVzt3QkFDekMsSUFBSSxDQUFDOzRCQUNILElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7NEJBRTlCOzs7OzsrQkFLRzs0QkFFSCxJQUFJLE9BQU8sR0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDOzRCQUM1QyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dDQUNaLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDOzRCQUN2QyxDQUFDOzRCQUNELEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0NBQ25CLE9BQU8sQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO2dDQUM1QixPQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQzs0QkFDMUIsQ0FBQzs0QkFDRCxPQUFPLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQzs0QkFDckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQ0FDbkIsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUM7NEJBQ2hELENBQUM7NEJBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQ0FDdEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDOzRCQUN0QyxDQUFDOzRCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQ25CLE9BQU8sQ0FBQyxZQUFZLEdBQUcsbUNBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQ3pELE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQzs0QkFDaEQsT0FBTyxDQUFDLDJCQUEyQixHQUFHLENBQUMsT0FBTyxDQUFDLHNCQUFzQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFDLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBVCxDQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzdHLE9BQU8sQ0FBQyxhQUFhLEdBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFDLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBVCxDQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ2hGLE9BQU8sQ0FBQyxhQUFhLEdBQUcsb0NBQXlCLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQzdELENBQUU7d0JBQUEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDWCxjQUFHLENBQUMsSUFBSSxDQUFDLDZCQUE2QixHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUM5QyxDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO29CQUNILG1CQUFtQjtvQkFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUM1QixDQUFDO1lBQ0gsQ0FBRTtZQUFBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1gsY0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQztRQUVTLHVEQUFzQixHQUFoQyxVQUFpQyxNQUFNO1lBQ3JDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDcEQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1lBQ3ZDLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JDLElBQUksS0FBSyxHQUFHLGtCQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUIsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xDLElBQUksS0FBSyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDOUIsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDakIsSUFBSSxVQUFVLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQztnQkFDekMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsVUFBQyxTQUFTO29CQUNwQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQ2QsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQzt3QkFDNUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBQyxJQUFJOzRCQUMxQixFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0NBQ2QsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQ0FDdkMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztnQ0FDekIsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dDQUN0QyxFQUFFLENBQUMsQ0FBQyxhQUFhLEtBQUssSUFBSSxJQUFJLFNBQVMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO29DQUNyRCxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3dDQUNsQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzRDQUNWLGtCQUFrQixHQUFHLGFBQWEsQ0FBQzt3Q0FDckMsQ0FBQzt3Q0FDRCxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7NENBQ3RCLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQzt3Q0FDL0IsQ0FBQztvQ0FDSCxDQUFDO2dDQUNILENBQUM7NEJBQ0gsQ0FBQzt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixJQUFJLEtBQUssSUFBSSxvQkFBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDNUIsNEZBQTRGO29CQUM1RixNQUFNLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUMxRCxLQUFLLEVBQ0wsVUFBVSxDQUFDLGlCQUFpQixFQUM1QixPQUFPLEVBQ1AsWUFBWSxFQUNaLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUN6QixNQUFNO29CQUNOLDhDQUE4QztvQkFDOUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxrQkFBa0IsRUFDaEMsVUFBVSxDQUFDLENBQUM7Z0JBQ2xCLENBQUM7Z0JBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ04sTUFBTSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFDMUQsS0FBSyxFQUNMLFVBQVUsQ0FBQyxpQkFBaUIsRUFDNUIsWUFBWSxFQUNaLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUN6QixNQUFNLEVBQ04sUUFBUSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsa0JBQWtCLEVBQzNDLGdCQUFnQixDQUFDLENBQUM7Z0JBRXhCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNILDZCQUFDO0lBQUQsQ0FocEJBLEFBZ3BCQyxJQUFBO0lBaHBCWSxpQ0FBc0IseUJBZ3BCbEMsQ0FBQTtJQUVELDRCQUE0QixLQUFLO1FBQy9CLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsY0FBRyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxPQUFzQixFQUFFLFNBQTZCLEVBQUUsU0FBc0M7WUFFN1IsSUFBSSxNQUFNLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDO1lBRXBDLHFDQUFxQztZQUNyQyxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBQyxJQUFXO2dCQUMvQixJQUFJLFdBQVcsR0FBRyx1Q0FBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckQsTUFBTSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyx5QkFBYyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ25GLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLENBQUMsQ0FBQyxzQkFBVyxDQUFDLENBQUMsQ0FBQztnQkFDakIsdURBQXVEO2dCQUN2RCxPQUFPLENBQUMseUJBQXlCLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsVUFBQyxPQUFnQztvQkFDekcsSUFBSSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2pELEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7d0JBQ3BCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsMkNBQTJDLENBQUMsQ0FBQztvQkFDaEcsQ0FBQztvQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNkLENBQUMsQ0FBQyxDQUFDO2dCQUNILHVEQUF1RDtnQkFDdkQsT0FBTyxDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFVBQUMsT0FBZ0M7b0JBQ3JHLElBQUksZUFBZSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNqRCxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO3dCQUNwQixNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLHdDQUF3QyxDQUFDLENBQUM7b0JBQzdGLENBQUM7b0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDZCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxzQ0FBc0M7WUFDeEMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFVBQUMsT0FBaUI7Z0JBQzFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDL0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBQyxJQUFXO29CQUM1QixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUNkLEtBQUsscUJBQVUsQ0FBQyxRQUFROzRCQUN2QixJQUFJLEtBQUssR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7NEJBQ3hDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQUMsSUFBSTtnQ0FDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyx1Q0FBNEIsQ0FBQywyQkFBZ0IsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDOzRCQUN6RSxDQUFDLENBQUMsQ0FBQzs0QkFDVCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDOzRCQUNyQixLQUFLLENBQUM7d0JBQ0YsS0FBSyxxQkFBVSxDQUFDLFNBQVMsQ0FBQzt3QkFDMUIsS0FBSyxxQkFBVSxDQUFDLE1BQU0sQ0FBQzt3QkFDdkIsS0FBSyxxQkFBVSxDQUFDLE1BQU0sQ0FBQzt3QkFDdkIsS0FBSyxxQkFBVSxDQUFDLGFBQWEsQ0FBQzt3QkFDOUIsS0FBSyxxQkFBVSxDQUFDLGFBQWEsQ0FBQzt3QkFDNUIsNkJBQTZCO3dCQUNwQzs0QkFDQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUM3QyxDQUFDO29CQUNHLGNBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzFELENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDaEIsVUFBVSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztZQUVELHdEQUF3RDtZQUN4RCwwREFBMEQ7WUFDMUQsWUFBWTtZQUNaLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxFQUFFLENBQUMsQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDMUIsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBRUQsb0JBQW9CLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTTtnQkFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBQyxHQUFHO29CQUNyQixNQUFNLENBQUMsdUJBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLElBQUksMEJBQWUsQ0FBQyxNQUFNLEVBQUUsb0JBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNwRixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFTixDQUFDLEVBM3dCTSxVQUFVLEtBQVYsVUFBVSxRQTJ3QmhCOztBQzl3QkQseUNBQXlDO0FBQ3pDLGdFQUFnRTtBQUNoRSxtRUFBbUU7QUFDbkUsOERBQThEO0FBQzlELDBDQUEwQztBQUMxQyw2Q0FBNkM7QUFDN0MsMkNBQTJDO0FBQzNDLDhDQUE4QztBQUU5QyxJQUFPLFNBQVMsQ0FvVmY7QUFwVkQsV0FBTyxTQUFTLEVBQUMsQ0FBQztJQUVoQixzQkFBNkIsT0FBTyxFQUFFLEdBQUc7UUFDdkMsSUFBSSxNQUFNLEdBQVEsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuRCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBTGUsc0JBQVksZUFLM0IsQ0FBQTtJQUVVLDhCQUFvQixHQUFHLGlCQUFPLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxFQUFFLFVBQUMsTUFBTSxFQUFFLGVBQWlELEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUM5SyxjQUF1QyxFQUFFLFNBQTZCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxRQUFRO1FBRTlKLE1BQU0sQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDO1FBRS9CLE1BQU0sQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRTlFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsTUFBTSxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQztRQUNqQyxNQUFNLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBRS9CLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFO1lBQ3RCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxHQUFHLEdBQUc7WUFDWCxJQUFJLEVBQUUsRUFBRTtZQUNSLEtBQUssRUFBRSxDQUFDO1lBQ1IsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBRUYsTUFBTSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRTtZQUNuQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLFVBQUMsS0FBSyxFQUFFLEtBQUs7WUFDOUMsYUFBRyxDQUFDLElBQUksQ0FBQywrQkFBK0IsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUUsTUFBTSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFHSCxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFDLGFBQWE7WUFDM0MsYUFBRyxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNwRCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFFSCxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVILE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxrQ0FBd0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDeEYsTUFBTSxDQUFDLFlBQVksR0FBRyxpQ0FBdUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFO1lBQ2pGLEtBQUssRUFBRSxLQUFLO1lBQ1osS0FBSyxFQUFFLDhCQUE4QjtTQUN0QyxDQUFDLENBQUM7UUFFSDtZQUNFLDhFQUE4RTtZQUM5RSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDcEUsQ0FBQztRQUNELE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRTNCO1lBQ0UsOEVBQThFO1lBQzlFLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsTUFBTSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFFL0I7WUFDRSxJQUFJLFVBQVUsR0FBRyxxQkFBVyxFQUFFLENBQUM7WUFDL0IsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDZixNQUFNLENBQUMscUJBQXFCLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBQzVGLE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN4RixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztRQUV0QixNQUFNLENBQUMsT0FBTyxHQUFHLFVBQUMsR0FBRyxFQUFFLFNBQVM7WUFDOUIsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDeEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsc0JBQVksRUFBRSwwQkFBMEIsQ0FBQztnQkFDdEUsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFVBQUMsTUFBTSxFQUFFLGNBQWM7d0JBQzlELE1BQU0sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO3dCQUM3QixNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxHQUFHLENBQUM7d0JBQ2hDLE1BQU0sQ0FBQyxFQUFFLEdBQUc7NEJBQ1YsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDOzRCQUNkLGFBQWEsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7d0JBQ2hDLENBQUMsQ0FBQzt3QkFDRixNQUFNLENBQUMsTUFBTSxHQUFHOzRCQUNkLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDbEIsQ0FBQyxDQUFDO29CQUNKLENBQUMsQ0FBQzthQUNELENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLHVCQUF1QixHQUFHLEVBQUUsU0FBUztZQUNuQyxJQUFJLEdBQUcsR0FBSSxVQUFVLENBQUMsNENBQTRDLENBQUMsbUNBQXlCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbkcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDUixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ2hCLElBQUksTUFBTSxHQUFHO29CQUNiLE9BQU8sRUFBRSxFQUNSO2lCQUNBLENBQUM7Z0JBQ0YsYUFBRyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDMUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQztvQkFDM0IsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTtvQkFDN0MsYUFBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDckQsQ0FBQyxDQUFDO29CQUNKLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07b0JBQzNDLGFBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxVQUFVLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO2dCQUNqRixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixhQUFHLENBQUMsSUFBSSxDQUFDLDhCQUE4QixHQUFHLEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDO1lBQzNFLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxDQUFDLFlBQVksR0FBRyxjQUFNLE9BQUEsVUFBVSxDQUFDLGdCQUFnQixFQUEzQixDQUEyQixDQUFDO1FBRXhELE1BQU0sQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBQyxJQUFlO1lBQzlELEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hELGFBQUcsQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxDQUFDO1lBQ1QsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNOLGFBQUcsQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7WUFDRCxJQUFJLE9BQU8sR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUMzQixJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUN2Qix1SEFBdUg7WUFDdkgsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDekQsdUJBQXVCO29CQUN2QixNQUFNLENBQUMsR0FBRyxHQUFHO3dCQUNYLElBQUksRUFBRSxFQUFFO3dCQUNSLEtBQUssRUFBRSxDQUFDO3dCQUNSLFFBQVEsRUFBRSxJQUFJO3FCQUNmLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztnQkFDekIsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Z0JBRXJCLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyw0Q0FBNEMsQ0FBQyxtQ0FBeUIsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLCtCQUErQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNoTixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNqQyxHQUFHLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUN6QyxDQUFDO2dCQUNELEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNoRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzt3QkFDWixPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO3dCQUM3QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUNULElBQUksdUJBQXVCLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQzs0QkFFekQsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0NBQ3JCLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQzs0QkFDdkIsQ0FBQzs0QkFDRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDOzRCQUN2QixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDOzRCQUN6QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDOzRCQUMvQixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDOzRCQUMvQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7NEJBQ3ZCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUNyQyxVQUFVLEdBQUcsYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOzRCQUNoRCxDQUFDOzRCQUNELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7NEJBQy9CLDBQQUEwUDs0QkFDMVAsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQ0FDVixJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztnQ0FFbEMsMkJBQTJCO2dDQUMzQixFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0NBQ3BDLElBQUksU0FBUyxDQUFDO29DQUNkLElBQUksVUFBVSxDQUFDO29DQUNmLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7d0NBQ2YsU0FBUyxHQUFHLENBQUMsQ0FBQzt3Q0FDZCxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dDQUN6QixFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDOzRDQUNmLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0NBQ3hGLENBQUM7b0NBQ0gsQ0FBQztvQ0FBQyxJQUFJLENBQUMsQ0FBQzt3Q0FDTixTQUFTLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7d0NBQ25DLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7d0NBQzNCLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7NENBQ2YsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQzt3Q0FDeEYsQ0FBQztvQ0FDSCxDQUFDO2dDQUNILENBQUM7Z0NBQ0QsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0NBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDL0MsQ0FBQztnQ0FDRCxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO29DQUNmLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7Z0NBQzlDLENBQUM7Z0NBQUMsSUFBSSxDQUFDLENBQUM7b0NBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQ0FDOUMsQ0FBQzs0QkFDSCxDQUFDOzRCQUNELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQzs0QkFDdkIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ3JDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUMvRCw2REFBNkQ7b0NBQzdELE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQztvQ0FDakMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO2dDQUN0QyxDQUFDO2dDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO29DQUN4QyxnREFBZ0Q7b0NBQ2hELE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQztnQ0FDdEMsQ0FBQztnQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQ0FDL0Msc0NBQXNDO29DQUN0Qyw2QkFBNkI7b0NBQzdCLG9GQUFvRjtvQ0FDcEYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO29DQUNwQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2dDQUN0QixDQUFDOzRCQUNILENBQUM7NEJBQ0QsRUFBRSxDQUFDLENBQUMsV0FBVyxJQUFJLGNBQWMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0NBQ2pELE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLGNBQWMsQ0FBQztnQ0FDbkMsRUFBRSxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0NBQzlDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztnQ0FDL0IsQ0FBQzs0QkFDSCxDQUFDOzRCQUNELGlCQUFpQixFQUFFLENBQUM7d0JBQ3RCLENBQUM7d0JBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUMxQix1QkFBdUI7d0JBQ3ZCLElBQUksRUFBRSxDQUFDO29CQUNULENBQUMsQ0FBQzt3QkFDSixLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO3dCQUMzQyxhQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQzt3QkFDOUQsSUFBSSxFQUFFLENBQUM7b0JBQ1QsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksRUFBRSxDQUFDO1lBQ1QsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixDQUFDO1FBR0Q7WUFDRSwrQkFBK0IsSUFBSSxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sQ0FBQyxVQUFDLElBQUksSUFBSyxPQUFBLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUEzQixDQUEyQixDQUFDO1lBQy9DLENBQUM7WUFFRCxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxVQUFDLE9BQU87Z0JBQzdDLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7Z0JBQ2xDLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7Z0JBQ3RDLElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7Z0JBQ3BDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUM3QixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNyQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDWixJQUFJLFdBQVcsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ2pFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQy9CLFdBQVcsSUFBSSxHQUFHLENBQUM7d0JBQ3JCLENBQUM7d0JBQ0QsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUMzQixZQUFZLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUNqQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEdBQUcsRUFDdkIsV0FBVyxDQUNWLENBQUMsQ0FBQzs0QkFDVCxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dDQUNmLElBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxVQUFVLENBQUM7Z0NBQzlCLElBQUksZUFBZSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0NBQ3ZFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0NBQ3RDLGVBQWUsSUFBSSxNQUFNLENBQUM7Z0NBQzVCLENBQUM7Z0NBQ0QsZUFBZSxJQUFJLEdBQUcsQ0FBQztnQ0FDdkIsWUFBWSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FDakMsS0FBSyxHQUFHLFNBQVMsR0FBRyxHQUFHLEdBQUcsVUFBVSxHQUFHLEdBQUcsRUFDMUMsZUFBZSxDQUNkLENBQUMsQ0FBQzs0QkFDWCxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxzQkFBc0IsSUFBSSxFQUFFLEVBQUU7Z0JBQzVCLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBQyxJQUFJO29CQUNyQixNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBRUwsQ0FBQztZQUNELFlBQVksQ0FBQyxRQUFRLEVBQUUseUNBQXlDLENBQUMsQ0FBQztZQUNsRSxZQUFZLENBQUMsUUFBUSxFQUFFLHNDQUFzQyxDQUFDLENBQUM7WUFDL0QsWUFBWSxDQUFDLFdBQVcsRUFBRSx5Q0FBeUMsQ0FBQyxDQUFDO1lBQ3JFLFlBQVksQ0FBQyxTQUFTLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztZQUNsRSxZQUFZLENBQUMsU0FBUyxFQUFFLHdDQUF3QyxDQUFDLENBQUM7WUFDbEUsWUFBWSxDQUFDLFNBQVMsRUFBRSwwQ0FBMEMsQ0FBQyxDQUFDO1lBRXBFLDZDQUE2QztZQUM3QyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQUMsSUFBSTtnQkFDckIsSUFBSSxNQUFNLEdBQUcsMENBQTBDLENBQUM7Z0JBQ3hELElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDWixPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDaEIsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNoQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDYixJQUFJLEtBQUssR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQzt3QkFDaEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUM1QyxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDbEIsS0FBSyxDQUFDO3dCQUNSLENBQUM7d0JBQ0QsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUNyRCxFQUFFLENBQUMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDeEIsS0FBSyxDQUFDO3dCQUNSLENBQUM7d0JBQ0QsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7d0JBQzFDLG9GQUFvRjt3QkFDcEYsK0lBQStJO3dCQUMvSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsNEVBQTRFLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDbkssQ0FBQztnQkFDSCxDQUFDO2dCQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sQ0FBQyxVQUFTLElBQUk7Z0JBQ2xCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsVUFBQyxFQUFFO29CQUMvQixNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0QixDQUFDLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ2hCLENBQUMsQ0FBQTtRQUNILENBQUM7UUFFRCxxQkFBcUIsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ2pDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDdkIsdURBQXVEO2dCQUN2RCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQ1osT0FBTyxJQUFJLEVBQUUsQ0FBQztvQkFDWixHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQzlCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNiLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN2RSxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQztvQkFDbkIsQ0FBQztvQkFBQyxJQUFJLENBQUMsQ0FBQzt3QkFDTixLQUFLLENBQUM7b0JBQ1IsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFTCxDQUFDLEVBcFZNLFNBQVMsS0FBVCxTQUFTLFFBb1ZmOztBQzdWRCx5Q0FBeUM7QUFDekMsZ0VBQWdFO0FBQ2hFLDZDQUE2QztBQUM3QywyQ0FBMkM7QUFDM0MsOENBQThDO0FBRTlDLElBQU8sU0FBUyxDQThLZjtBQTlLRCxXQUFPLFNBQVMsRUFBQyxDQUFDO0lBRUwsa0NBQXdCLEdBQUcsb0JBQVUsQ0FBQywwQkFBMEIsRUFDekUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQjtRQUM1SyxVQUFDLE1BQU0sRUFBRSxlQUFpRCxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFDNUYsY0FBdUMsRUFBRSxTQUE2QixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGVBQWU7WUFFdkksTUFBTSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUM7WUFDcEMsTUFBTSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7WUFDL0IsTUFBTSxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQztZQUNqQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUN0QixNQUFNLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1lBRS9CLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDNUgsTUFBTSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEUsTUFBTSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFakYsTUFBTSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRTtnQkFDbkMsVUFBVSxFQUFFLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLFVBQUMsTUFBTTtnQkFDaEMsVUFBVSxFQUFFLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxPQUFPLEdBQUc7Z0JBQ2YsS0FBSyxFQUFFO29CQUNMLElBQUksRUFBRSxrQkFBa0I7b0JBQ3hCLFdBQVcsRUFBRSxLQUFLO29CQUNsQixNQUFNLEVBQUUsR0FBRztvQkFDWCxNQUFNLEVBQUU7d0JBQ04sR0FBRyxFQUFFLEVBQUU7d0JBQ1AsS0FBSyxFQUFFLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLEVBQUU7d0JBQ1YsSUFBSSxFQUFFLEVBQUU7cUJBQ1Q7b0JBQ0QsUUFBUSxFQUFFLElBQUk7b0JBQ2QsYUFBYSxFQUFFLEtBQUs7b0JBQ3BCLGtCQUFrQixFQUFFLEdBQUc7b0JBQ3ZCLE9BQU8sRUFBRSxLQUFLO29CQUNkLFdBQVcsRUFBRSxJQUFJO29CQUNqQixPQUFPLEVBQUU7d0JBQ1AsT0FBTyxFQUFFLElBQUk7d0JBQ2IsZ0JBQWdCLEVBQUUsVUFBQyxJQUFJOzRCQUNyQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQzs0QkFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7d0JBQ3RCLENBQUM7cUJBQ0Y7b0JBQ0QsS0FBSyxFQUFFLFVBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ1YsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQ2pCLENBQUM7b0JBQ0QsS0FBSyxFQUFFO3dCQUNMLFNBQVMsRUFBRSxRQUFRO3dCQUNuQixVQUFVLEVBQUUsS0FBSzt3QkFDakIsVUFBVSxFQUFFLFVBQVUsQ0FBQzs0QkFDckIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7d0JBQ2pCLENBQUM7cUJBQ0Y7b0JBQ0QsS0FBSyxFQUFFO3dCQUNMLFNBQVMsRUFBRSwwQkFBMEI7d0JBQ3JDLFVBQVUsRUFBRSxVQUFVLENBQUM7NEJBQ3JCLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM5QixDQUFDO3FCQUNGO2lCQUNGO2FBQ0YsQ0FBQztZQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBRWpCLFVBQVUsRUFBRSxDQUFDO1lBRWIsaUNBQWlDLE1BQU07Z0JBQ3JDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ1gsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDaEQsTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFDZixDQUFDO29CQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDO3dCQUMzRCxNQUFNLENBQUMsS0FBSyxDQUFDO29CQUNmLENBQUM7b0JBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO3dCQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDO29CQUNqQixDQUFDO29CQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQzt3QkFDcEMsTUFBTSxDQUFDLFdBQVcsQ0FBQTtvQkFDcEIsQ0FBQztnQkFDSCxDQUFDO2dCQUNELE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDcEIsQ0FBQztZQUdEO2dCQUNFLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDeEIsSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO2dCQUN6QixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksZUFBZSxHQUFHLGtCQUFrQixDQUFDO2dCQUN6QyxJQUFJLGNBQWMsR0FBRyxlQUFlLENBQUM7Z0JBRXJDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7b0JBQ2pCLGVBQWUsR0FBRyxRQUFRLENBQUM7Z0JBQzdCLENBQUM7Z0JBRUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNkLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM3RCxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxVQUFDLEtBQVM7b0JBQ2hDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO29CQUM5QixJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDaEQsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxhQUFhLENBQUM7b0JBQzNDLElBQUksS0FBSyxHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM1QyxJQUFJLFNBQVMsR0FBRyxvQ0FBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbkQsSUFBSSxPQUFPLEdBQUcsZ0JBQWdCLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxLQUFLLENBQUMsV0FBVyxHQUFHLE9BQU87d0JBQ2xGLGtCQUFrQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztvQkFDOUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDVCxPQUFPLElBQUksaUJBQWlCLEdBQUcsSUFBSSxHQUFHLFVBQVUsQ0FBQztvQkFDbkQsQ0FBQztvQkFDRCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNYLE9BQU8sSUFBSSxnQkFBZ0IsR0FBRyxNQUFNLEdBQUcsVUFBVSxDQUFDO29CQUNwRCxDQUFDO29CQUVELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ04sSUFBSSxJQUFJLEdBQUcsZUFBZSxDQUFDO3dCQUMzQixJQUFJLEdBQUcsR0FBRyxlQUFlLENBQUM7d0JBQzFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNoRSxJQUFJLEdBQUcsWUFBWSxDQUFDOzRCQUNwQixHQUFHLEdBQUcsY0FBYyxDQUFDO3dCQUN2QixDQUFDO3dCQUNELElBQUksQ0FBQyxJQUFJLENBQUM7NEJBQ1IsT0FBTyxFQUFFLE9BQU87NEJBQ2hCLEtBQUssRUFBRSxLQUFLOzRCQUNaLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7b0JBQ2pCLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt3QkFDZixHQUFHLEVBQUUsZUFBZTt3QkFDcEIsTUFBTSxFQUFFLGVBQWU7cUJBQ3hCLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt3QkFDZixHQUFHLEVBQUUsY0FBYzt3QkFDbkIsTUFBTSxFQUFFLFlBQVk7cUJBQ3JCLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFdkMsUUFBUSxDQUFDO29CQUNQLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3RCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNULENBQUM7WUFFRDtnQkFDRSxJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztnQkFDN0csSUFBSSxHQUFHLEdBQUcsVUFBVSxDQUFDLDRDQUE0QyxDQUFDLG1DQUF5QixFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUMxRyxhQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNiLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLDJCQUFpQixDQUFDO3dCQUMvQixPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO3dCQUM3QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUNULEVBQUUsQ0FBQyxDQUFDLDBCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ3RELGFBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQ0FDaEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0NBQ3RCLGVBQWUsRUFBRSxDQUFDOzRCQUNwQixDQUFDO3dCQUNILENBQUM7d0JBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QixDQUFDLENBQUM7d0JBQ0YsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTt3QkFDM0MsYUFBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7b0JBQ2hFLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNWLENBQUMsRUE5S00sU0FBUyxLQUFULFNBQVMsUUE4S2Y7O0FDcExELHlDQUF5QztBQUN6QyxnRUFBZ0U7QUFDaEUsNkNBQTZDO0FBQzdDLDJDQUEyQztBQUMzQyw4Q0FBOEM7QUFFOUMsSUFBTyxTQUFTLENBa0JmO0FBbEJELFdBQU8sU0FBUyxFQUFDLENBQUM7SUFFTCwwQkFBZ0IsR0FBRyxvQkFBVSxDQUFDLGtCQUFrQixFQUN6RCxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxrQkFBa0I7UUFDcEUsVUFBQyxNQUFNLEVBQUUsU0FBNkIsRUFBRSxZQUFZLEVBQUUsUUFBUTtZQUU1RCxNQUFNLENBQUMsT0FBTyxHQUFHLFVBQUMsSUFBSTtnQkFDcEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDVCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO29CQUN6QixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtvQkFDcEIsQ0FBQztvQkFBQyxJQUFJLENBQUMsQ0FBQzt3QkFDTixNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7b0JBQzdDLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNWLENBQUMsRUFsQk0sU0FBUyxLQUFULFNBQVMsUUFrQmY7O0FDeEJELHlDQUF5QztBQUN6QyxnRUFBZ0U7QUFDaEUsNkNBQTZDO0FBQzdDLDJDQUEyQztBQUMzQyw4Q0FBOEM7QUFFOUMsSUFBTyxTQUFTLENBNERmO0FBNURELFdBQU8sU0FBUyxFQUFDLENBQUM7SUFFTCw0QkFBa0IsR0FBRyxvQkFBVSxDQUFDLG9CQUFvQixFQUM3RCxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCO1FBQzVLLFVBQUMsTUFBTSxFQUFFLGVBQWlELEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUM1RixjQUF1QyxFQUFFLFNBQTZCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZTtZQUV2SSxNQUFNLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQztZQUNwQyxNQUFNLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQztZQUNuQyxNQUFNLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQyxNQUFNLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2QyxNQUFNLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7WUFFL0IsTUFBTSxDQUFDLEtBQUssR0FBRztnQkFDYixNQUFNLEVBQUUsSUFBSTthQUNiLENBQUM7WUFDRixVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVILE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWpGLE1BQU0sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ25DLFVBQVUsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxVQUFDLE1BQU07Z0JBQ2hDLFVBQVUsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFFSCxVQUFVLEVBQUUsQ0FBQztZQUViO2dCQUNFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUNqQixJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsNENBQTRDLENBQUMsbUNBQXlCLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztvQkFDdEssRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2pFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDOzRCQUNaLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07NEJBQzdDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0NBQ1QsNkJBQW1CLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dDQUNuRCxFQUFFLENBQUMsQ0FBQywwQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUN0RCxhQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7b0NBQ2hDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO29DQUNwQixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2dDQUNwQyxDQUFDOzRCQUNILENBQUM7NEJBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDOzRCQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN0QixDQUFDLENBQUM7NEJBQ0YsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTs0QkFDM0MsYUFBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7NEJBQzlELE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDOUIsQ0FBQyxDQUFDLENBQUM7b0JBQ1AsQ0FBQztnQkFDSCxDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1YsQ0FBQyxFQTVETSxTQUFTLEtBQVQsU0FBUyxRQTREZjs7QUNsRUQseUNBQXlDO0FBQ3pDLGdFQUFnRTtBQUNoRSw2Q0FBNkM7QUFDN0MsMkNBQTJDO0FBQzNDLDhDQUE4QztBQUU5QyxJQUFPLFNBQVMsQ0FNZjtBQU5ELFdBQU8sU0FBUyxFQUFDLENBQUM7SUFDaEIsaUJBQU8sQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFO1FBQ2hDLE1BQU0sQ0FBQztZQUNMLFdBQVcsRUFBRSxzQkFBWSxHQUFHLG1CQUFtQjtTQUNoRCxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLEVBTk0sU0FBUyxLQUFULFNBQVMsUUFNZjs7QUNaRCx5Q0FBeUM7QUFDekMsZ0VBQWdFO0FBQ2hFLDBDQUEwQztBQUMxQyw2Q0FBNkM7QUFDN0MsMkNBQTJDO0FBQzNDLDhDQUE4QztBQUU5QyxJQUFPLFNBQVMsQ0E2SmY7QUE3SkQsV0FBTyxTQUFTLEVBQUMsQ0FBQztJQUVMLDZCQUFtQixHQUFHLGlCQUFPLENBQUMsVUFBVSxDQUFDLCtCQUErQixFQUFFLFVBQUMsTUFBTSxFQUFFLGVBQWlELEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUM1SyxjQUF1QyxFQUFFLFNBQTZCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLFFBQVE7UUFFdEosTUFBTSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUM7UUFDcEMsTUFBTSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUM7UUFDbkMsTUFBTSxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxNQUFNLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFL0IsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUU7WUFDdEIsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLEtBQUssR0FBRztZQUNiLEdBQUcsRUFBRSxJQUFJO1lBQ1QsV0FBVyxFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7U0FDekMsQ0FBQztRQUNGLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDNUgsTUFBTSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEUsTUFBTSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFakYsTUFBTSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRTtZQUNuQyxVQUFVLEVBQUUsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsVUFBQyxNQUFNO1lBQ2hDLFVBQVUsRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLFVBQUMsTUFBTTtZQUN4QyxVQUFVLEVBQUUsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLFdBQVcsR0FBRyxVQUFDLEtBQUs7WUFDekIsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNQLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztvQkFDbEMsTUFBTSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7b0JBQzVCLE1BQU0sQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ25ELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUMxQixJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQzNCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNqQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLElBQUksU0FBUyxHQUFHLGlCQUFpQixDQUFDO29CQUNsQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7d0JBQzdCLFNBQVMsR0FBRyx3QkFBd0IsQ0FBQztvQkFDdkMsQ0FBQztvQkFDRCxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsNENBQTRDLENBQUMsbUNBQXlCLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUM5SSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7NEJBQ2QsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTs0QkFDN0MsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQ0FDVCxrQ0FBd0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0NBQ3hELEVBQUUsQ0FBQyxDQUFDLDBCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7b0NBQ3RELGFBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQ0FDaEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO29DQUV4QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO29DQUN6QixFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0NBQzVCLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0NBQ2hDLENBQUM7Z0NBQ0gsQ0FBQzs0QkFDSCxDQUFDOzRCQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzs0QkFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDdEIsQ0FBQyxDQUFDOzRCQUNGLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07NEJBQzNDLGFBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDOzRCQUM5RCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7d0JBQzlCLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDTixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDakIsVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUVqRCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7d0JBQ2hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsVUFBQyxLQUFLOzRCQUM3QyxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUN6QyxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ3hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQ0FDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDckIsQ0FBQzt3QkFDSCxDQUFDLENBQUMsQ0FBQzt3QkFDSCxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ3JELElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQzt3QkFDdkIsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUN6QixNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBQyxDQUFDLElBQUssT0FBQSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQWhCLENBQWdCLENBQUMsQ0FBQzs0QkFDdEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQ0FDbkIsTUFBTSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQzFCLENBQUM7d0JBQ0gsQ0FBQzt3QkFDRCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7d0JBQ25CLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFVBQUMsS0FBSzs0QkFDNUIsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7NEJBQ3JDLElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDOzRCQUNyQyxJQUFJLGVBQWUsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7NEJBRTNDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQzs0QkFDckIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQzs0QkFDaEMsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQzs0QkFDL0IsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQzs0QkFDckMsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQzs0QkFDcEMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQ0FDYixvQ0FBb0M7Z0NBQ3BDLFFBQVEsR0FBRyxRQUFRLEdBQUcsT0FBTyxDQUFDOzRCQUNoQyxDQUFDOzRCQUNELElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQzVDLElBQUksVUFBVSxHQUFHLG9DQUEwQixDQUFDLGVBQWUsQ0FBQyxDQUFDOzRCQUM3RCxJQUFJLGdCQUFnQixHQUFHLDBDQUFnQyxDQUFDLGVBQWUsQ0FBQyxDQUFDOzRCQUN6RSxJQUFJLEtBQUssR0FBRztnQ0FDVixTQUFTLEVBQUUsaUJBQWlCO2dDQUM1QixTQUFTLEVBQUUsU0FBUztnQ0FDcEIsUUFBUSxFQUFFLFFBQVE7Z0NBQ2xCLFVBQVUsRUFBRSxVQUFVO2dDQUN0QixRQUFRLEVBQUUsUUFBUTtnQ0FDbEIsTUFBTSxFQUFFLE1BQU07Z0NBQ2QsVUFBVSxFQUFFLFVBQVU7Z0NBQ3RCLGdCQUFnQixFQUFFLGdCQUFnQjs2QkFDbkMsQ0FBQzs0QkFDRixJQUFJLFFBQVEsR0FBRztnQ0FDYixXQUFXLEVBQUUsV0FBVztnQ0FDeEIsV0FBVyxFQUFFLFdBQVc7Z0NBQ3hCLFNBQVMsRUFBRSxTQUFTO2dDQUNwQixRQUFRLEVBQUUsUUFBUTtnQ0FDbEIsVUFBVSxFQUFFLFVBQVU7Z0NBQ3RCLFFBQVEsRUFBRSxRQUFRO2dDQUNsQixNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUM7NkJBQ2hCLENBQUM7NEJBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDM0IsQ0FBQyxDQUFDLENBQUM7d0JBRUgsaUVBQWlFO3dCQUNqRSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRzs0QkFDakIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLOzRCQUNwQixRQUFRLEVBQUUsTUFBTSxDQUFDLFNBQVM7NEJBQzFCLE1BQU0sRUFBRSxTQUFTO3lCQUNsQixDQUFDO29CQUNKLENBQUM7b0JBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0QixDQUFDO1lBQ0gsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVAsVUFBVSxFQUFFLENBQUM7SUFFZixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsRUE3Sk0sU0FBUyxLQUFULFNBQVMsUUE2SmY7O0FDcEtELHlDQUF5QztBQUN6QyxnRUFBZ0U7QUFDaEUsNkNBQTZDO0FBQzdDLDJDQUEyQztBQUMzQyw4Q0FBOEM7QUFFOUMsSUFBTyxTQUFTLENBd0ZmO0FBeEZELFdBQU8sU0FBUyxFQUFDLENBQUM7SUFFTCwyQkFBaUIsR0FBRyxvQkFBVSxDQUFDLG1CQUFtQixFQUMzRCxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQjtRQUNySyxVQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsZUFBaUQsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQ3RHLGNBQXVDLEVBQUUsU0FBNkIsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0I7WUFFdEgsTUFBTSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUM7WUFDcEMsTUFBTSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7WUFDL0IsTUFBTSxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0IsTUFBTSxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQztZQUNqQyxNQUFNLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQztZQUNsRSxNQUFNLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFFeEIsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUM1SCxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLENBQUMsZ0RBQWdEO1lBQzlFLFVBQVUsRUFBRSxDQUFDO1lBQ2IsNkNBQTZDO1lBQzdDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBRW5DLE1BQU0sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsVUFBQyxLQUFLLEVBQUUsS0FBSztnQkFDOUMsTUFBTSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQUM7WUFFSCwySEFBMkg7WUFDM0gsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBQ0QsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBRXJGLHdCQUF3QixZQUFZO2dCQUNsQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxVQUFDLElBQUk7b0JBQ2pDLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3BDLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDdkIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO3dCQUN4QixVQUFVLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO3dCQUNqRCxFQUFFLENBQUMsQ0FBQywwQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUN0RCxhQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7NEJBQ2hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDOzRCQUNyQixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDOzRCQUN0RixNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ3pDLENBQUM7d0JBQ0Qsc0JBQXNCLEVBQUUsQ0FBQzt3QkFDekIsVUFBVSxFQUFFLENBQUM7b0JBQ2YsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEIsQ0FBQztZQUdEOzs7ZUFHRztZQUNIO2dCQUNFLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQzVCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ1osSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztvQkFDckMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzt3QkFDZixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBQyxFQUFFLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQzt3QkFDNUQsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzs0QkFDZCxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLDBCQUEwQixFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO3dCQUMvSSxDQUFDO29CQUNILENBQUM7b0JBRUQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQUMsR0FBRzt3QkFDeEMsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQzt3QkFDdkIsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDcEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzRCQUNaLE1BQU0sR0FBRyxFQUFFLENBQUM7NEJBQ1osTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7NEJBQ2hDLDZCQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQzt3QkFDdEYsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztZQUVEO2dCQUNFLE1BQU0sQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ25GLENBQUM7UUFFSCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1YsQ0FBQyxFQXhGTSxTQUFTLEtBQVQsU0FBUyxRQXdGZjs7QUM5RkQsMENBQTBDO0FBRTFDLElBQU8sU0FBUyxDQWVmO0FBZkQsV0FBTyxTQUFTLEVBQUMsQ0FBQztJQUVoQixpQkFBTyxDQUFDLFVBQVUsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsVUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLGVBQWU7WUFDbEksSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0YsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDZCxNQUFNLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFDN0IsTUFBTSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUE7Z0JBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsVUFBQyxZQUFZO29CQUMvQyxNQUFNLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztnQkFDakMsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sYUFBRyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMzRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVOLENBQUMsRUFmTSxTQUFTLEtBQVQsU0FBUyxRQWVmOztBQ2pCRCx5Q0FBeUM7QUFDekMsZ0VBQWdFO0FBQ2hFLDZDQUE2QztBQUM3QywyQ0FBMkM7QUFDM0MsOENBQThDO0FBRTlDLElBQU8sU0FBUyxDQW9LZjtBQXBLRCxXQUFPLFNBQVMsRUFBQyxDQUFDO0lBRUwsNEJBQWtCLEdBQUcsb0JBQVUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCO1FBQzVPLFVBQUMsTUFBTSxFQUFFLGVBQWlELEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxTQUE2QixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGdCQUFnQjtZQUV6TSxNQUFNLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQztZQUNwQyxNQUFNLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQztZQUUvQixNQUFNLENBQUMsV0FBVyxHQUFHO2dCQUNuQixJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixxQkFBcUIsRUFBRSxJQUFJO2dCQUMzQix1QkFBdUIsRUFBRSxLQUFLO2dCQUM5QixXQUFXLEVBQUUsSUFBSTtnQkFDakIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLGFBQWEsRUFBRTtvQkFDYixVQUFVLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7aUJBQzFDO2dCQUNELFVBQVUsRUFBRTtvQkFDVjt3QkFDRSxLQUFLLEVBQUUsT0FBTzt3QkFDZCxXQUFXLEVBQUUsTUFBTTt3QkFDbkIsWUFBWSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUM7cUJBQ3BEO29CQUNYOzs7OztzQkFLRTtvQkFDUTt3QkFDRSxLQUFLLEVBQUUscUJBQXFCO3dCQUM1QixXQUFXLEVBQUUsWUFBWTtxQkFDMUI7b0JBQ1g7Ozs7Ozs7Ozs7Ozs7c0JBYUU7b0JBQ1E7d0JBQ0UsS0FBSyxFQUFFLHNCQUFzQjt3QkFDN0IsV0FBVyxFQUFFLGFBQWE7cUJBQzNCO29CQUNEO3dCQUNFLEtBQUssRUFBRSxlQUFlO3dCQUN0QixXQUFXLEVBQUUsU0FBUzt3QkFDdEIsWUFBWSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUM7cUJBQzlEO29CQUNEO3dCQUNFLEtBQUssRUFBRSxhQUFhO3dCQUNwQixXQUFXLEVBQUUsUUFBUTt3QkFDckIsWUFBWSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUM7cUJBQ3ZEO2lCQUNGO2FBQ0YsQ0FBQztZQUVGLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFFNUgsTUFBTSxDQUFDLGdCQUFnQixHQUFHLGtDQUF3QixFQUFFLENBQUM7WUFDckQsTUFBTSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUU1RCxPQUFPO1lBQ1AsbURBQW1EO1lBRW5ELE1BQU0sQ0FBQyxZQUFZLEdBQUcsVUFBQyxRQUFRO2dCQUM3QixFQUFFLENBQUMsNEJBQTRCLENBQW1DO29CQUNoRSxVQUFVLEVBQUUsUUFBUTtvQkFDcEIsS0FBSyxFQUFFLE9BQU87b0JBQ2QsT0FBTyxFQUFFLFVBQUMsTUFBYzt3QkFDdEIsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzs0QkFDWCx3QkFBd0IsUUFBUSxFQUFFLElBQUk7Z0NBQ3BDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0NBQ1QsWUFBWSxDQUFDLElBQUksRUFBRTt3Q0FDakIsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztvQ0FDN0MsQ0FBQyxDQUFDLENBQUM7Z0NBQ0wsQ0FBQztnQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FHUixDQUFDOzRCQUNILENBQUM7NEJBRUQsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQzt3QkFDN0MsQ0FBQztvQkFDSCxDQUFDO29CQUNELEtBQUssRUFBRSxhQUFhO29CQUNwQixNQUFNLEVBQUUscUNBQXFDO29CQUM3QyxNQUFNLEVBQUUsUUFBUTtvQkFDaEIsT0FBTyxFQUFFLFlBQVk7b0JBQ3JCLE1BQU0sRUFBRSw2Q0FBNkM7b0JBQ3JELFdBQVcsRUFBRSxxQkFBcUI7aUJBQ25DLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLENBQUMsQ0FBQztZQUVGLHNCQUFzQixTQUFTLEVBQUUsWUFBWTtnQkFDM0MsSUFBSSxJQUFJLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxJQUFJLFVBQVUsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO2dCQUN2QyxJQUFJLGdCQUFnQixHQUFHLHFCQUFXLEVBQUUsQ0FBQztnQkFDckMsaUdBQWlHO2dCQUNqRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBQ3JELElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDOUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7d0JBQ2YsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTt3QkFDN0MsWUFBWSxFQUFFLENBQUM7b0JBQ2pCLENBQUMsQ0FBQzt3QkFDRixLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO3dCQUMzQyxhQUFHLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQzt3QkFDaEYsWUFBWSxFQUFFLENBQUM7b0JBQ2pCLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlFLENBQUM7Z0JBRUQsRUFBRSxDQUFDLENBQUMsVUFBVSxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxHQUFHLEdBQUcsVUFBVSxDQUFDLDRDQUE0QyxDQUFDLG1DQUF5QixFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUM3SSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ2QsSUFBSSxNQUFNLEdBQUc7d0JBQ1gsT0FBTyxFQUFFOzRCQUNQLGNBQWMsRUFBRSxZQUFZO3lCQUM3QjtxQkFDRixDQUFDO29CQUNGLGFBQUcsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEdBQUcsR0FBRyxDQUFDLENBQUM7b0JBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUM7d0JBQzNCLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07d0JBQzdDLGFBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxDQUFDLENBQUM7b0JBQ3ZDLENBQUMsQ0FBQzt3QkFDRixLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO3dCQUMzQyxhQUFHLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztvQkFDakYsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztZQUNILENBQUM7WUFFUDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztjQXNCRTtRQUNFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDLEVBcEtNLFNBQVMsS0FBVCxTQUFTLFFBb0tmOztBQzFLRCx5Q0FBeUM7QUFDekMsZ0VBQWdFO0FBQ2hFLDZDQUE2QztBQUM3QywyQ0FBMkM7QUFDM0MsOENBQThDO0FBRTlDLElBQU8sU0FBUyxDQThDZjtBQTlDRCxXQUFPLFNBQVMsRUFBQyxDQUFDO0lBRUwsNkJBQW1CLEdBQUcsb0JBQVUsQ0FBQyxxQkFBcUIsRUFDL0QsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQjtRQUN6SixVQUFDLE1BQU0sRUFBRSxlQUFpRCxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFDNUYsY0FBdUMsRUFBRSxTQUE2QixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGdCQUFnQjtZQUV0SCxNQUFNLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQztZQUNwQyxNQUFNLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQztZQUMvQixNQUFNLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDO1lBRWxFLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDNUgsTUFBTSxDQUFDLGdCQUFnQixHQUFHLG9DQUEwQixFQUFFLENBQUM7WUFDdkQsTUFBTSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUU1RCxNQUFNLENBQUMsWUFBWSxHQUFHLGNBQU0sT0FBQSxVQUFVLENBQUMsZ0JBQWdCLEVBQTNCLENBQTJCLENBQUM7WUFDeEQsTUFBTSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFDLElBQWU7Z0JBQzlELE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDZCxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2pGLGFBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQyxDQUFDO29CQUNoQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzt3QkFDWixPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO3dCQUM3QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUNULE1BQU0sQ0FBQyxNQUFNLEdBQUcseUJBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDeEMsQ0FBQzt3QkFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7d0JBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ3BCLElBQUksRUFBRSxDQUFDO29CQUNULENBQUMsQ0FBQzt3QkFDRixLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO3dCQUMzQyxhQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQzt3QkFDOUQsSUFBSSxFQUFFLENBQUM7b0JBQ1QsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDTixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3BCLElBQUksRUFBRSxDQUFDO2dCQUVULENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1YsQ0FBQyxFQTlDTSxTQUFTLEtBQVQsU0FBUyxRQThDZjs7QUNwREQseUNBQXlDO0FBQ3pDLGdFQUFnRTtBQUNoRSw2Q0FBNkM7QUFDN0MsMkNBQTJDO0FBQzNDLDhDQUE4QztBQUU5QyxJQUFPLFNBQVMsQ0FrZGY7QUFsZEQsV0FBTyxTQUFTLEVBQUMsQ0FBQztJQUVMLDhCQUFvQixHQUFHLG9CQUFVLENBQUMsc0JBQXNCLEVBQ2pFLENBQUMsUUFBUSxFQUFHLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsV0FBVztRQUNwSyxVQUFDLE1BQU0sRUFBRyxlQUFpRCxFQUFFLGVBQWUsRUFBRSxjQUF1QyxFQUFFLFNBQTZCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFDLFNBQVM7WUFDNU4sTUFBTSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUM7WUFDN0IsTUFBTSxDQUFDLEtBQUssR0FBQyxFQUFFLENBQUM7WUFFaEIsTUFBTSxDQUFDLFVBQVUsR0FBQyxFQUFFLENBQUM7WUFDckIsSUFBSSxRQUFRLEdBQUMsRUFBRSxDQUFDO1lBQ2hCLElBQUksVUFBVSxHQUFFO2dCQUNaLE1BQU0sRUFBQyxDQUFDO2FBQ1gsQ0FBQztZQUVGLE1BQU0sRUFBRSxDQUFDO1lBRVQsTUFBTSxDQUFDLFdBQVcsR0FBRztnQkFDbkIsWUFBWSxFQUFFLFVBQVU7Z0JBQ3hCLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixjQUFjLEVBQUUsS0FBSztnQkFDckIsYUFBYSxFQUFFO29CQUNiLEVBQUUsRUFBRSxJQUFJO29CQUNSLEVBQUUsRUFBRSxJQUFJO29CQUNSLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUUsSUFBSTtvQkFDZixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsS0FBSyxFQUFFLElBQUk7b0JBQ1gsS0FBSyxFQUFFLElBQUk7b0JBQ1gsYUFBYSxFQUFFLElBQUk7aUJBQ3BCO2FBQ0YsQ0FBQztZQUVGLE1BQU0sQ0FBQyxZQUFZLEdBQUc7Z0JBQ3BCLFlBQVksRUFBRSxVQUFVO2dCQUN4QixhQUFhLEVBQUUsSUFBSTtnQkFDbkIsY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLGFBQWEsRUFBRTtvQkFDYixFQUFFLEVBQUUsSUFBSTtvQkFDUixFQUFFLEVBQUUsSUFBSTtvQkFDUixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFLElBQUk7b0JBQ2YsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLEtBQUssRUFBRSxJQUFJO29CQUNYLEtBQUssRUFBRSxJQUFJO29CQUNYLGFBQWEsRUFBRSxJQUFJO2lCQUNwQjthQUNGLENBQUM7WUFFRixNQUFNLENBQUMsWUFBWSxHQUFHLFVBQUMsSUFBSSxFQUFDLFFBQVE7Z0JBRWpDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDeEIsRUFBRSxDQUFBLENBQUMsUUFBUSxDQUFDLENBQUEsQ0FBQztvQkFDVixFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQSxDQUFDO3dCQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNwQixPQUFNLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDLENBQUM7NEJBQ3JCLElBQUksU0FBUyxHQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQzs0QkFDMUIsRUFBRSxDQUFBLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQztnQ0FDN0IsR0FBRyxDQUFBLENBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUU7b0NBQ3pDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUMxQyxDQUFDOzRCQUFBLElBQUksQ0FBQSxDQUFDO2dDQUNILEVBQUUsQ0FBQSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7b0NBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzs0QkFDL0MsQ0FBQzt3QkFDSixDQUFDO29CQUNKLENBQUM7b0JBQUEsSUFBSSxDQUFBLENBQUM7d0JBQ0gsRUFBRSxDQUFBLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFDNUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMxQyxDQUFDO2dCQUNKLENBQUM7WUFDSixDQUFDLENBQUM7WUFFRixNQUFNLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ2hELE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUVwRCxNQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLFVBQVMsUUFBUSxFQUFDLFFBQVE7Z0JBQ3pELEVBQUUsQ0FBQSxDQUFDLFFBQVEsQ0FBQyxDQUFBLENBQUM7b0JBQ1YsTUFBTSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDbkQsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxVQUFTLFFBQVEsRUFBQyxRQUFRO2dCQUN4RCxFQUFFLENBQUEsQ0FBQyxRQUFRLENBQUMsQ0FBQSxDQUFDO29CQUNWLE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFDdkQsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLGFBQWEsR0FBRyxVQUFDLEtBQUs7Z0JBQzFCLFVBQVUsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDO2dCQUNwQixFQUFFLENBQUEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFBLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQztvQkFDUixHQUFHLENBQUEsQ0FBQyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQzt3QkFDOUIsRUFBRSxDQUFBLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDOzRCQUN2Qyx3QkFBd0I7NEJBQ3hCLFFBQVEsR0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBQyxFQUFFLENBQUMsQ0FBQzs0QkFDL0QsSUFBSSxNQUFNLEdBQUUsSUFBSSxVQUFVLEVBQUUsQ0FBQzs0QkFDN0IsSUFBSSxZQUFZLEdBQUcsbUNBQW1DLENBQUM7NEJBQ3ZELE1BQU0sQ0FBQyxNQUFNLEdBQUc7Z0NBQ2IsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0NBQzlCLGtCQUFrQjtnQ0FDbEIsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDO2dDQUNwQixJQUFJLE9BQU8sR0FBRyxTQUFTLENBQUM7Z0NBQ3hCLGlCQUFpQjtnQ0FDakIsRUFBRSxDQUFBLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFBLENBQUM7b0NBQ2xCLDRCQUE0QjtvQ0FDNUIsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO29DQUM3QixtQkFBbUI7b0NBQ25CLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7b0NBQ3BDLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7b0NBQ2hDLEdBQUcsQ0FBQSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFDLENBQUM7d0NBQzlCLElBQUksU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7d0NBRTNDLFdBQVc7d0NBQ1osSUFBSSxpQkFBaUIsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO3dDQUN6RCxJQUFJLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dDQUN6RixNQUFNO3dDQUNQLElBQUksYUFBYSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7d0NBQ2pELElBQUksU0FBUyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3Q0FDekUsU0FBUzt3Q0FDVixJQUFJLGVBQWUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dDQUNyRCxJQUFJLFdBQVcsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0NBQ2pGLFNBQVM7d0NBQ1YsSUFBSSxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQzt3Q0FDakQsSUFBSSxTQUFTLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dDQUN4RSxhQUFhO3dDQUNmLElBQUksaUJBQWlCLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQzt3Q0FDekQsSUFBSSxhQUFhLEdBQUcsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3Q0FDekYsa0JBQWtCO3dDQUNuQixJQUFJLHNCQUFzQixHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQzt3Q0FDbkUsSUFBSSxrQkFBa0IsR0FBRyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0NBQzVHLGtCQUFrQjt3Q0FDcEIsSUFBSSxzQkFBc0IsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7d0NBQ25FLElBQUksa0JBQWtCLEdBQUcsc0JBQXNCLENBQUMsc0JBQXNCLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dDQUMzRyxZQUFZO3dDQUNmLElBQUksZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQzt3Q0FDdkQsSUFBSSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3Q0FDcEYsVUFBVTt3Q0FDWixJQUFJLGNBQWMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dDQUNuRCxJQUFJLFVBQVUsR0FBRyxjQUFjLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0NBQzVFLFNBQVM7d0NBQ1gsSUFBSSxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQzt3Q0FDakQsSUFBSSxTQUFTLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dDQUUxRSxNQUFNO3dDQUNOLElBQUksTUFBTSxHQUFHLFNBQVMsR0FBRyxHQUFHLEdBQUcsa0JBQWtCLENBQUM7d0NBQ2xELG1CQUFtQjt3Q0FDbkIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFBLENBQUEsc0JBQXNCO3dDQUV0Qyx3Q0FBd0M7d0NBQ3hDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQzt3Q0FDckIsb0RBQW9EO3dDQUNwRCxJQUFJLFVBQVUsR0FBRyxHQUFHLENBQUM7d0NBRXJCLElBQUksUUFBUSxHQUFHLFNBQVMsR0FBRyxXQUFXLEdBQUcsYUFBYSxDQUFDO3dDQUN2RCxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7d0NBQ2xCLElBQUksR0FBRyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7d0NBRS9CLEdBQUcsQ0FBQyxrQkFBa0IsR0FBQzs0Q0FDbkIsRUFBRSxDQUFBLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBRSxDQUFDLENBQUMsQ0FBQSxDQUFDO2dEQUNsQixFQUFFLENBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFFLEdBQUcsQ0FBQyxDQUFBLENBQUM7b0RBQ2pCLFNBQVMsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO2dEQUNoQyxDQUFDOzRDQUNMLENBQUM7d0NBQ0wsQ0FBQyxDQUFBO3dDQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFDLGlCQUFpQixHQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQzt3Q0FDN0MsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3Q0FFZixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dDQUNsQyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO3dDQUUxQixJQUFJLFdBQVcsR0FBRyxZQUFZLEdBQUMsTUFBTSxHQUFDLGlCQUFpQixHQUFDLFFBQVEsR0FBQyxpQkFBaUI7NENBQzlFLFNBQVMsR0FBRyxtQkFBbUIsR0FBQyxXQUFXLEdBQUMsbUJBQW1COzRDQUMvRCxhQUFhLEdBQUMsaUJBQWlCLEdBQUcsU0FBUyxHQUFHLGlCQUFpQjs0Q0FDL0QsVUFBVSxHQUFDLG1CQUFtQixHQUFDLFVBQVUsR0FBQyxxQkFBcUI7NENBQy9ELGFBQWEsR0FBRSxpQkFBaUI7NENBQ2hDLFNBQVMsR0FBRSwwQkFBMEI7NENBQ3JDLGtCQUFrQixHQUFFLDBCQUEwQjs0Q0FDOUMsa0JBQWtCLEdBQUUsb0JBQW9COzRDQUN4QyxZQUFZLEdBQUUsa0JBQWtCOzRDQUNoQyxVQUFVLEdBQUUsaUJBQWlCOzRDQUM3QixTQUFTLEdBQUUsS0FBSyxDQUFDO3dDQUNyQixZQUFZLEdBQUcsWUFBWSxHQUFHLFdBQVcsQ0FBQzt3Q0FDMUMsRUFBRSxDQUFBLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDOzRDQUNmLFlBQVksR0FBRSxZQUFZLEdBQUMsSUFBSSxDQUFBO3dDQUNuQyxDQUFDO29DQUNMLENBQUM7b0NBQ0QsWUFBWSxHQUFHLFlBQVksR0FBQyxJQUFJLENBQUM7Z0NBQ3BDLENBQUM7Z0NBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztvQ0FDWixNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dDQUMvRCxDQUFDLENBQUMsQ0FBQzs0QkFFTixDQUFDLENBQUE7NEJBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3ZDLENBQUM7d0JBQ0QsSUFBSSxDQUFBLENBQUM7NEJBQ0QsVUFBVSxDQUFDLE1BQU0sSUFBRSxDQUFDLENBQUM7NEJBQ3JCLElBQUksT0FBTyxHQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBQyxFQUFFLENBQUMsQ0FBQzs0QkFDL0MsbUVBQW1FOzRCQUNuRSw0Q0FBNEM7NEJBQzdDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDNUIsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ25DLENBQUMsQ0FBQTtZQUVILE1BQU0sQ0FBQyxXQUFXLEdBQUc7Z0JBQ2xCLEVBQUUsQ0FBQSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxDQUFBLENBQUM7b0JBQ3ZDLE1BQU0sQ0FBQztnQkFDVixDQUFDO2dCQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztnQkFDckMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ25ELEVBQUUsQ0FBQSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFFLENBQUMsQ0FBQyxDQUFBLENBQUM7b0JBQzNFLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO29CQUNsQixHQUFHLENBQUEsQ0FBQyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBLENBQUM7d0JBQ3pDLEVBQUUsQ0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUEsQ0FBQzs0QkFDOUUsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUN0RCxDQUFDO3dCQUFBLElBQUksQ0FBQSxDQUFDOzRCQUNILEVBQUUsQ0FBQSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7Z0NBQ3pKLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDdEQsQ0FBQztvQkFDSixDQUFDO29CQUNELEVBQUUsQ0FBQSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUUsQ0FBRSxDQUFDLENBQUEsQ0FBQzt3QkFDeEIsSUFBSSxHQUFHLEdBQUcsc0JBQXNCLENBQUM7d0JBQ2pDLEdBQUcsQ0FBQSxDQUFDLElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQzs0QkFDekIsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUMsSUFBSSxDQUFDO3dCQUNwQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2QsQ0FBQztvQkFFRCxFQUFFLENBQUEsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFHLENBQUMsQ0FBQyxDQUFBLENBQUM7d0JBQ3JCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO29CQUM1QixDQUFDO29CQUFBLElBQUksQ0FBQSxDQUFDO3dCQUNaLElBQUksU0FBUyxHQUFHLENBQUMsRUFBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUV4QixJQUFJLGNBQWMsR0FBRyxTQUFTLENBQUM7NEJBQy9CLEVBQUUsQ0FBQSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUEsQ0FBQztnQ0FDL0Isc0NBQXNDO2dDQUNoQyxTQUFTLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDOzRCQUNqQyxDQUFDOzRCQUNELEVBQUUsQ0FBQSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQSxDQUFDO2dDQUNuQixJQUFJLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQztvQ0FDdEIsTUFBTSxFQUFDLGNBQWM7b0NBQ3JCLFNBQVMsRUFBQyxFQUFFLEdBQUMsSUFBSSxHQUFDLElBQUk7b0NBQ3RCLG1CQUFtQixFQUFDLEdBQUc7b0NBQ3ZCLFVBQVUsRUFBQyxJQUFJO29DQUNmLHlCQUF5QixFQUFDLENBQUM7aUNBQzNCLENBQUMsQ0FBQztnQ0FFWSxJQUFJLEdBQUcsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dDQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBQyxjQUFjLEVBQUMsSUFBSSxDQUFDLENBQUM7Z0NBQ3BDLEdBQUcsQ0FBQyxrQkFBa0IsR0FBQztvQ0FDckIsRUFBRSxDQUFBLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBRSxDQUFDLENBQUMsQ0FBQSxDQUFDO3dDQUNwQixFQUFFLENBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFFLEdBQUcsQ0FBQyxDQUFBLENBQUM7NENBQ2xCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO3dDQUM1QixDQUFDO29DQUNILENBQUM7Z0NBQ0gsQ0FBQyxDQUFBO2dDQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0NBRTlCLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFVBQVMsSUFBSTtvQ0FDOUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO29DQUNYLE1BQU0sRUFBRSxDQUFDO2dDQUNWLENBQUMsQ0FBQyxDQUFDO2dDQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztvQ0FDM0IsT0FBTyxFQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29DQUN4QixTQUFTLEVBQUcsQ0FBQztpQ0FDZixDQUFDLENBQUM7Z0NBQ0gsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFDLEdBQUcsR0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLEdBQUcsR0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFDLEdBQUcsR0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFDLEdBQUcsQ0FBQyxDQUFDO2dDQUNyRyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUN2RCxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Z0NBQ1gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUMsVUFBUyxJQUFJO29DQUNoQyxJQUFJLE9BQU8sR0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUMsRUFBRSxDQUFDLENBQUM7b0NBQ3ZELElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztvQ0FDakIsSUFBSSxHQUFHLEdBQUcscUJBQXFCLENBQUM7b0NBQ2hDLElBQUksU0FBUyxDQUFDO29DQUNkLE9BQU8sQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBQyxDQUFDO3dDQUMvQyxPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUN4QixDQUFDO29DQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsQ0FBQztvQ0FDckMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQ0FDM0IsaUNBQWlDO29DQUMxQixNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBQyxFQUFFLENBQUMsQ0FBQztvQ0FDekUsV0FBVztnQ0FDTixDQUFDLENBQUMsQ0FBQztnQ0FFSCxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRTtvQ0FDaEIsSUFBSSxhQUFhLEdBQUcsV0FBVyxDQUFDO3dDQUMvQixJQUFJLFFBQVEsR0FBRyxhQUFhLEdBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFDLElBQUksQ0FBQTt3Q0FDakQsSUFBSSxXQUFXLEdBQUcsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFDLFNBQVMsRUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDO3dDQUN0RyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBQyxFQUFFLENBQUMsQ0FBQzt3Q0FFeEUsS0FBSyxDQUFDOzRDQUNKLEdBQUcsRUFBQyxlQUFlOzRDQUNuQixNQUFNLEVBQUMsS0FBSzs0Q0FDWixNQUFNLEVBQUMsV0FBVzt5Q0FDbkIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFTLElBQUksRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU07NENBQzNDLEVBQUUsQ0FBQSxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUM7Z0RBQ1Qsb0JBQW9CO2dEQUNwQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0RBQ3RCLEVBQUUsQ0FBQSxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsQ0FBQSxDQUFDO29EQUNLLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0RBQy9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7b0RBQ3JCLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO29EQUMzQixhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7Z0RBQzdELENBQUM7NENBQ0EsQ0FBQzt3Q0FFSCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBUyxJQUFJLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNOzRDQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxHQUFDLE1BQU0sQ0FBQyxDQUFDO3dDQUN6RCxDQUFDLENBQUMsQ0FBQztvQ0FFSixDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUM7Z0NBQ1QsQ0FBQyxDQUFDLENBQUM7Z0NBRUgsQ0FBQyxFQUFFLENBQUM7Z0NBQ0osU0FBUyxHQUFHLENBQUMsQ0FBQztnQ0FFQyxDQUFDLENBQUMsRUFBRSxDQUFDLHNCQUFzQixFQUFFO29DQUMxQixNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBQyxHQUFHLENBQUMsQ0FBQztvQ0FDekUsUUFBUSxDQUFDO3dDQUNOLEtBQUssQ0FBQzs0Q0FDSCxHQUFHLEVBQUMsZ0JBQWdCOzRDQUNwQixNQUFNLEVBQUMsTUFBTTt5Q0FDZixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVMsSUFBSSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTTs0Q0FDeEMsRUFBRSxDQUFBLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQztnREFDTixNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7NENBQ2xDLENBQUM7d0NBQ04sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVMsSUFBSSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTTs0Q0FDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3Q0FDekIsQ0FBQyxDQUFDLENBQUM7b0NBQ04sQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDO29DQUNSLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0NBQ2pCLENBQUMsQ0FBQyxDQUFDOzRCQUVMLENBQUM7d0JBQ2IsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDO29CQUNGLENBQUM7Z0JBQ0osQ0FBQztnQkFBQSxJQUFJLENBQUEsQ0FBQztvQkFDSCxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztnQkFDakQsQ0FBQztZQUVKLENBQUMsQ0FBQTtZQUVELHlCQUF5QixXQUFXO2dCQUNoQyxLQUFLLENBQUM7b0JBQ0gsR0FBRyxFQUFDLGtCQUFrQjtvQkFDdEIsTUFBTSxFQUFDLEtBQUs7b0JBQ2IsTUFBTSxFQUFDLFdBQVc7aUJBQ25CLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBUyxJQUFJLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNO29CQUMxQyxFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUM7d0JBQ1IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBUyxJQUFJLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNO2dCQUUzQyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7WUFFRCxNQUFNLENBQUMsYUFBYSxHQUFHO2dCQUNuQix1RkFBdUY7WUFDM0YsQ0FBQyxDQUFBO1lBRUQsTUFBTSxDQUFDLFVBQVUsR0FBRSxVQUFDLElBQUk7Z0JBQ3JCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QyxFQUFFLENBQUEsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDO29CQUNkLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlDLENBQUM7Z0JBQ0QsSUFBSSxDQUFBLENBQUM7b0JBQ0YsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QyxDQUFDO1lBQ0osQ0FBQyxDQUFBO1lBRUQsTUFBTSxDQUFDLGlCQUFpQixHQUFHLFVBQUMsSUFBSSxFQUFDLFFBQVE7Z0JBQ3RDLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QyxFQUFFLENBQUEsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUEsQ0FBQztvQkFDaEIsRUFBRSxDQUFBLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFJLENBQUMsQ0FBQzt3QkFDekMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQztnQkFDakQsQ0FBQztnQkFBQSxJQUFJLENBQUEsQ0FBQztvQkFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDO29CQUN2QyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7WUFDSixDQUFDLENBQUE7WUFFRCxNQUFNLENBQUMsV0FBVyxHQUFHO2dCQUNsQixFQUFFLENBQUEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUUsQ0FBQyxDQUFDLENBQUEsQ0FBQztvQkFDdEMsR0FBRyxDQUFBLENBQUMsSUFBSSxFQUFFLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQSxDQUFDO3dCQUN2QyxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDdEQsRUFBRSxDQUFBLENBQUMsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLHNCQUFzQixFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUEsQ0FBQzs0QkFDN0QsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsVUFBQyxFQUFFO2dDQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dDQUNoQixVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUNqRyxDQUFDLENBQUMsQ0FBQzt3QkFDTixDQUFDO29CQUNKLENBQUM7Z0JBQ0osQ0FBQztZQUNKLENBQUMsQ0FBQTtZQUVELHdCQUF3QixzQkFBc0IsRUFBQyxJQUFJO2dCQUNoRCxHQUFHLENBQUEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxzQkFBc0IsQ0FBQyxDQUFBLENBQUM7b0JBQ25DLEVBQUUsQ0FBQSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzt3QkFDdkQsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDbEIsQ0FBQztnQkFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2hCLENBQUM7WUFFRCxxQkFBcUIsSUFBWTtnQkFDOUIsSUFBSSxLQUFLLEdBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlCLEVBQUUsQ0FBQSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQSxDQUFDO29CQUNsQixvQkFBb0I7b0JBQ3BCLE1BQU0sQ0FBQzt3QkFDSCxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVE7d0JBQ3JCLFFBQVEsRUFBRTs0QkFDUCxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVE7eUJBQ3ZCO3dCQUNELE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFFLE1BQU07d0JBQ3pCLFVBQVUsRUFBSSxNQUFNO3FCQUN2QixDQUFBO2dCQUNKLENBQUM7Z0JBQUEsSUFBSSxDQUFBLENBQUM7b0JBQ0gsTUFBTSxDQUFDO3dCQUNKLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDbEQsUUFBUSxFQUFFOzRCQUNQLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDOzRCQUNoQixPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzs0QkFDakIsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7NEJBQ2xCLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDOzRCQUNsQixTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzt5QkFDckI7d0JBQ0QsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUUsTUFBTTt3QkFDekIsVUFBVSxFQUFFLE9BQU87cUJBQ3JCLENBQUE7Z0JBQ0osQ0FBQztZQUNMLENBQUM7WUFFRCxzQkFBc0IsV0FBVztnQkFDOUIsS0FBSyxDQUFDO29CQUNILEdBQUcsRUFBQyxlQUFlO29CQUNuQixNQUFNLEVBQUMsS0FBSztvQkFDWixNQUFNLEVBQUMsV0FBVztpQkFDcEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFTLElBQUksRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU07b0JBQzFDLEVBQUUsQ0FBQSxDQUFDLElBQUksQ0FBQzt3QkFDTixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFTLElBQUksRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU07b0JBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLEdBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdELENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVEO2dCQUNHLEdBQUcsQ0FBQSxDQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFDLENBQUM7b0JBQ2xELElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztvQkFDaEQsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUM5QyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxVQUFDLElBQUk7d0JBQ2xDLEVBQUUsQ0FBQSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDOzRCQUN4QyxNQUFNLENBQUMsTUFBTSxDQUFDO2dDQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUNsRSxDQUFDLENBQUMsQ0FBQzt3QkFDSixDQUFDO3dCQUNELElBQUksQ0FBQSxDQUFDOzRCQUNKLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0NBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUMsRUFBRSxDQUFDLENBQUM7NEJBQ2pFLENBQUMsQ0FBQyxDQUFDO3dCQUNKLENBQUM7b0JBQ08sQ0FBQyxDQUFDLENBQUM7Z0JBQ04sQ0FBQztZQUNKLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxFQWxkTSxTQUFTLEtBQVQsU0FBUyxRQWtkZjs7QUN4ZEQseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUUzQyxJQUFPLFVBQVUsQ0FzU2hCO0FBdFNELFdBQU8sVUFBVSxFQUFDLENBQUM7SUFFTixlQUFJLEdBQUcscUJBQVUsQ0FBQyxNQUFNLEVBQ2pDLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLGtDQUFrQyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVO1FBQzVOLFVBQUMsTUFBTSxFQUFFLGVBQWtELEVBQUUsa0JBQWtELEVBQUUsZ0NBQWdFLEVBQUUsY0FBOEMsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQ25RLGNBQXVDLEVBQUUsU0FBNkIsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRO1lBRWpILE1BQU0sQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDO1lBRS9CLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNwRixpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNyRyxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFdEYsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUM7WUFDdkMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBRXJCLG9CQUFvQixHQUFHO2dCQUNyQixJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztnQkFDL0MsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztvQkFDZixNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDO3dCQUN4RCxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7d0JBQ3RELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQzt3QkFDaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQzVELENBQUM7Z0JBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ04sTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDZCxDQUFDO1lBQ0gsQ0FBQztZQUVELG9CQUFvQixHQUFHO2dCQUNyQixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQUMsT0FBTyxJQUFLLE9BQUEsT0FBTyxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQUMsT0FBTyxFQUEvQixDQUErQixDQUFDLENBQUM7WUFDN0UsQ0FBQztZQUVELE1BQU0sQ0FBQyxXQUFXLEdBQUc7Z0JBQ25CLElBQUksRUFBRSxZQUFZO2dCQUNsQixxQkFBcUIsRUFBRSxJQUFJO2dCQUMzQix1QkFBdUIsRUFBRSxLQUFLO2dCQUM5QixXQUFXLEVBQUUsSUFBSTtnQkFDakIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLGFBQWEsRUFBRTtvQkFDYixVQUFVLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7aUJBQzFDO2dCQUNELFVBQVUsRUFBRTtvQkFDVixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHVCQUFZLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxFQUFFO29CQUM5SCxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHVCQUFZLEVBQUUsMEJBQTBCLENBQUMsQ0FBQyxFQUFFO29CQUNoSixFQUFFLEtBQUssRUFBRSw2QkFBNkIsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsdUJBQVksRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDLEVBQUU7b0JBQzlLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsdUJBQVksRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDLEVBQUU7b0JBQ2hKLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsdUJBQVksRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLEVBQUU7aUJBQ2pKO2FBQ0YsQ0FBQztZQUVGLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFHNUgsTUFBTSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFFekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsVUFBQyxNQUFNLEVBQUUsVUFBVTtnQkFDekMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkMsQ0FBQyxDQUFDLENBQUM7WUFHSCxNQUFNLENBQUMsV0FBVyxHQUFHLFVBQUMsR0FBRztnQkFDdkIsSUFBSSxFQUFFLEdBQUcsa0JBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDckIsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1RCxDQUFDLENBQUM7WUFFRixNQUFNLENBQUMsU0FBUyxHQUFHLFVBQUMsR0FBRztnQkFDckIsSUFBSSxFQUFFLEdBQUcsa0JBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDUCxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDL0IsQ0FBQztZQUNILENBQUMsQ0FBQztZQUVGLE1BQU0sQ0FBQyxXQUFXLEdBQUcsVUFBQyxHQUFHO2dCQUN2QixJQUFJLEVBQUUsR0FBRyxrQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNQLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxVQUFDLENBQUMsSUFBSyxPQUFBLEVBQUUsS0FBSyxDQUFDLEVBQVIsQ0FBUSxDQUFDLENBQUM7Z0JBQ2pELENBQUM7WUFDSCxDQUFDLENBQUM7WUFFRixNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxVQUFDLE1BQU07Z0JBQ2hDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNFLENBQUMsQ0FBQyxDQUFDO1lBRUgsbUJBQW1CLEdBQUcsRUFBRSxZQUFZO2dCQUNsQyx3QkFBd0IsUUFBUSxFQUFFLE9BQU8sRUFBRSxhQUFhO29CQUN0RCxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQzFCLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDekIsQ0FBQztvQkFDRCxJQUFJLEVBQUUsR0FBRyxrQkFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUMxQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ1IsY0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQzNELENBQUM7b0JBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ04sa0JBQWtCLENBQUMsTUFBTSxDQUFDOzRCQUN4QixFQUFFLEVBQUUsRUFBRTt5QkFDUCxFQUFFLFNBQVMsRUFBRTs0QkFDWixjQUFHLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDOzRCQUNuQyxjQUFjLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQzt3QkFDNUQsQ0FBQyxFQUFFLFVBQUMsS0FBSzs0QkFDUCxjQUFHLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDOzRCQUM3QyxjQUFjLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQzt3QkFDNUQsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztnQkFDSCxDQUFDO2dCQUVELHNDQUFzQyxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSxhQUFhO29CQUNoRyxFQUFFLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO3dCQUN0RCxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3pCLENBQUM7b0JBQ0QsSUFBSSxFQUFFLEdBQUcsa0JBQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO29CQUN4QyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ1IsY0FBRyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztvQkFDdkYsQ0FBQztvQkFBQyxJQUFJLENBQUMsQ0FBQzt3QkFDTixnQ0FBZ0MsQ0FBQyxNQUFNLENBQUM7NEJBQ3RDLEVBQUUsRUFBRSxFQUFFO3lCQUNQLEVBQUUsU0FBUyxFQUFFOzRCQUNaLGNBQUcsQ0FBQyxLQUFLLENBQUMsaUNBQWlDLEVBQUUsRUFBRSxDQUFDLENBQUM7NEJBQ2pELDRCQUE0QixDQUFDLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDLEtBQUssRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO3dCQUN0RyxDQUFDLEVBQUUsVUFBQyxLQUFLOzRCQUNQLGNBQUcsQ0FBQyxLQUFLLENBQUMsd0NBQXdDLEVBQUUsS0FBSyxDQUFDLENBQUM7NEJBQzNELDRCQUE0QixDQUFDLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDLEtBQUssRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO3dCQUN0RyxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsb0JBQW9CLElBQUksRUFBRSxHQUFHLEVBQUUsYUFBYTtvQkFDMUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUNsQixNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3pCLENBQUM7b0JBQ0QsSUFBSSxFQUFFLEdBQUcsa0JBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNSLGNBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNuRCxDQUFDO29CQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNOLGNBQWMsQ0FBQyxNQUFNLENBQUM7NEJBQ3BCLEVBQUUsRUFBRSxFQUFFO3lCQUNQLEVBQUUsU0FBUyxFQUFFOzRCQUNaLGNBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDOzRCQUMvQixVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQzt3QkFDaEQsQ0FBQyxFQUFFLFVBQUMsS0FBSzs0QkFDUCxjQUFHLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUFDOzRCQUN6QyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQzt3QkFDaEQsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN2QyxjQUFjLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFFekMsSUFBSSxzQkFBc0IsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO29CQUNuRSw0QkFBNEIsQ0FBQyxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFFbkYsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQy9CLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO29CQUMvQyxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxNQUFNLENBQUMsZUFBZSxHQUFHLFVBQUMsR0FBRztnQkFDM0IsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFBO1lBRUQsTUFBTSxDQUFDLFlBQVksR0FBRyxVQUFDLFFBQVE7Z0JBQzdCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMvQixRQUFRLEdBQUcsQ0FBQzs0QkFDVixFQUFFLEVBQUUsUUFBUTt5QkFDYixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxFQUFFLENBQUMsNEJBQTRCLENBQW1DO29CQUNoRSxVQUFVLEVBQUUsUUFBUTtvQkFDcEIsS0FBSyxFQUFFLE9BQU87b0JBQ2QsT0FBTyxFQUFFLFVBQUMsTUFBYzt3QkFDdEIsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzs0QkFDWCx3QkFBd0IsUUFBUSxFQUFFLElBQUk7Z0NBQ3BDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0NBQ1QsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztvQ0FDbkIsY0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7b0NBQzVCLFNBQVMsQ0FBQyxJQUFJLEVBQUU7d0NBQ2QsY0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7d0NBQzNCLGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7b0NBQzdDLENBQUMsQ0FBQyxDQUFDO2dDQUNMLENBQUM7NEJBQ0gsQ0FBQzs0QkFFRCxjQUFjLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO3dCQUM3QyxDQUFDO29CQUNILENBQUM7b0JBQ0QsS0FBSyxFQUFFLGNBQWM7b0JBQ3JCLE1BQU0sRUFBRSxxQ0FBcUM7b0JBQzdDLE1BQU0sRUFBRSxRQUFRO29CQUNoQixPQUFPLEVBQUUsWUFBWTtvQkFDckIsTUFBTSxFQUFFLDZDQUE2QztvQkFDckQsV0FBVyxFQUFFLHFCQUFxQjtpQkFDbkMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osQ0FBQyxDQUFDO1lBRUYsTUFBTSxDQUFDLFdBQVcsR0FBRztnQkFDbkIsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsWUFBWSxFQUFFLEVBQUU7Z0JBRWhCLE1BQU0sRUFBRSxVQUFDLE1BQU07b0JBQ2IsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3dCQUM1RCxNQUFNLENBQUMsUUFBUSxDQUFDO29CQUNsQixDQUFDO29CQUNELE1BQU0sQ0FBQyxRQUFRLENBQUM7Z0JBQ2xCLENBQUM7Z0JBRUQsZ0JBQWdCLEVBQUUsVUFBQyxHQUFHO29CQUNwQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDakIsTUFBTSxDQUFDLFVBQVUsQ0FBQztvQkFDcEIsQ0FBQztvQkFDRCxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDakIsTUFBTSxDQUFDLFVBQVUsQ0FBQztvQkFDcEIsQ0FBQztvQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNaLENBQUM7Z0JBRUQsT0FBTyxFQUFFLFVBQUMsR0FBRztvQkFDWCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QyxDQUFDO2dCQUVELFVBQVUsRUFBRSxVQUFDLE1BQU07b0JBQ2pCLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQUMsR0FBRyxJQUFLLE9BQUEsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFuQyxDQUFtQyxDQUFDLENBQUM7Z0JBQzFHLENBQUM7Z0JBRUQsYUFBYSxFQUFFO29CQUNiLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBQyxNQUFNO3dCQUM5QyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBQyxHQUFHOzRCQUMvQixHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzt3QkFDdkIsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO29CQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0QixDQUFDO2dCQUVELGNBQWMsRUFBRTtvQkFDZCxnQ0FBZ0M7b0JBQ2hDLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztvQkFDdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFDLE1BQU07d0JBQzlDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQUMsR0FBRyxJQUFLLE9BQUEsR0FBRyxDQUFDLFFBQVEsRUFBWixDQUFZLENBQUMsQ0FBQzt3QkFDckQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs0QkFDVCxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDM0MsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDSCxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDbkUsQ0FBQztnQkFFRCxNQUFNLEVBQUUsVUFBQyxHQUFHLEVBQUUsSUFBSTtvQkFDaEIsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7b0JBQ3BCLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3RDLENBQUM7Z0JBRUQsWUFBWSxFQUFFO29CQUNaLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBQyxNQUFNLElBQUssT0FBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFDLEdBQUcsSUFBSyxPQUFBLEdBQUcsQ0FBQyxRQUFRLEVBQVosQ0FBWSxDQUFDLEVBQXRDLENBQXNDLENBQUMsQ0FBQztnQkFDekYsQ0FBQztnQkFHRCxlQUFlLEVBQUU7b0JBQ2YsaUNBQWlDO29CQUNqQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLFVBQUMsR0FBRzt3QkFDbkQsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQzt3QkFDcEIsSUFBSSxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQzt3QkFDcEMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzs0QkFDakIsMEJBQTBCOzRCQUMxQixvRUFBb0U7NEJBQ3BFLElBQUksR0FBRyxHQUFHLHVCQUFZLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDOzRCQUM3QyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dDQUNSLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO29DQUNaLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07b0NBQzdDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0NBQ1QsdURBQXVEO3dDQUN2RCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO3dDQUNoQyxJQUFJLEVBQUUsR0FBRyxjQUFPLENBQUMsQ0FBQzt3Q0FDbEIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztvQ0FDM0YsQ0FBQztnQ0FDSCxDQUFDLENBQUM7b0NBQ0YsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTtvQ0FDM0MsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7b0NBQzFCLGNBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO2dDQUNoRSxDQUFDLENBQUMsQ0FBQzs0QkFDUCxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsZ0NBQWdDO29CQUNoQyxNQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUNuQyxNQUFNLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDakMsQ0FBQzthQUNGLENBQUM7UUFFSixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxFQXRTTSxVQUFVLEtBQVYsVUFBVSxRQXNTaEI7O0FDelNELHlDQUF5QztBQUN6Qyw0Q0FBNEM7QUFDNUMsMkNBQTJDO0FBRTNDLElBQU8sVUFBVSxDQVloQjtBQVpELFdBQU8sVUFBVSxFQUFDLENBQUM7SUFFakIsa0JBQU8sQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxVQUFDLGlCQUFpQjtZQUM3RSxNQUFNLENBQUM7Z0JBQ0w7O2tCQUVFO2dCQUNGLElBQUksRUFBRSxVQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSztvQkFDMUIsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDO2FBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDLEVBWk0sVUFBVSxLQUFWLFVBQVUsUUFZaEI7O0FDaEJELHlDQUF5QztBQUN6Qyw0Q0FBNEM7QUFDNUMsMkNBQTJDO0FBRTNDLElBQU8sVUFBVSxDQWdEaEI7QUFoREQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVOLDBCQUFlLEdBQUcscUJBQVUsQ0FBQyxpQkFBaUIsRUFDdkQsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQjtRQUN6SixVQUFDLE1BQU0sRUFBRSxlQUFpRCxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFDNUYsY0FBdUMsRUFBRSxTQUE2QixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGdCQUFnQjtZQUV0SCxNQUFNLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQztZQUNwQyxNQUFNLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQztZQUMvQixNQUFNLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQztZQUU1RCxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVILE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRWpGLE1BQU0sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ25DLFVBQVUsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxVQUFDLE1BQU07Z0JBQ2hDLFVBQVUsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFFSCxVQUFVLEVBQUUsQ0FBQztZQUViO2dCQUNFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDZCxJQUFJLEdBQUcsR0FBRyx1QkFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDbEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7d0JBQ1osT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTt3QkFDN0MsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs0QkFDVCxNQUFNLENBQUMsTUFBTSxHQUFHLHNCQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3BDLENBQUM7d0JBQ0QsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RCLENBQUMsQ0FBQzt3QkFDRixLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO3dCQUMzQyxjQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztvQkFDaEUsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDTixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1YsQ0FBQyxFQWhETSxVQUFVLEtBQVYsVUFBVSxRQWdEaEI7O0FDcERELHlDQUF5QztBQUN6Qyw0Q0FBNEM7QUFDNUMsMkNBQTJDO0FBRTNDLElBQU8sVUFBVSxDQW1EaEI7QUFuREQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVOLGdDQUFxQixHQUFHLHFCQUFVLENBQUMsdUJBQXVCLEVBQ25FLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0I7UUFDekosVUFBQyxNQUFNLEVBQUUsZUFBaUQsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQzVGLGNBQXVDLEVBQUUsU0FBNkIsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0I7WUFFdEgsTUFBTSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUM7WUFDcEMsTUFBTSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7WUFDL0IsTUFBTSxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQztZQUNqQyxNQUFNLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQztZQUVsRSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVILE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUVuRSxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFO2dCQUNuQyxVQUFVLEVBQUUsQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsVUFBQyxNQUFNO2dCQUNoQyxVQUFVLEVBQUUsQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1lBRUgsVUFBVSxFQUFFLENBQUM7WUFFYjtnQkFDRSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDbkIsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2QsSUFBSSxHQUFHLEdBQUcsNkJBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN4QyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzt3QkFDWixPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO3dCQUM3QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUNULE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDOzRCQUNyQixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7NEJBQ3hCLDRCQUFpQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQzs0QkFDdEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN6QyxDQUFDO3dCQUNELE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QixDQUFDLENBQUM7d0JBQ0YsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTt3QkFDM0MsY0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7b0JBQ2hFLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ04sTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNWLENBQUMsRUFuRE0sVUFBVSxLQUFWLFVBQVUsUUFtRGhCOztBQ3ZERCx5Q0FBeUM7QUFDekMsNENBQTRDO0FBQzVDLDJDQUEyQztBQUUzQyxJQUFPLFVBQVUsQ0F3YWhCO0FBeGFELFdBQU8sVUFBVSxFQUFDLENBQUM7SUFFTixvQ0FBeUIsR0FBRyxrQkFBTyxDQUFDLFVBQVUsQ0FBQyxzQ0FBc0MsRUFBRSxVQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsZUFBaUQsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsY0FBdUMsRUFBRSxTQUE2QixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQXlDO1FBRXpYLE1BQU0sQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxFQUFFLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRCxNQUFNLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDO1FBRWpDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDO1FBRTFDLGNBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRzFCLElBQUksVUFBVSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsZ0RBQWdELENBQUMsQ0FBQztRQUM1RixJQUFJLGNBQWMsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDL0YsSUFBSSxXQUFXLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ3pGLElBQUksV0FBVyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUN6RixJQUFJLFNBQVMsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFDakcsSUFBSSxRQUFRLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQ3pGLElBQUksUUFBUSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUN4RixJQUFJLGNBQWMsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDcEcsSUFBSSxrQkFBa0IsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7UUFFdkcsSUFBSSxVQUFVLEdBQUc7WUFDZixNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUN4QixDQUFDLENBQUM7UUFHRixJQUFJLGdCQUFnQixHQUFHLHlCQUF5QixDQUFDO1FBQ2pELElBQUksZUFBZSxHQUFHLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQzFELElBQUksb0JBQW9CLEdBQUcsb0NBQW9DLENBQUM7UUFFaEUsSUFBSSxpQkFBaUIsR0FBNkI7WUFDaEQsTUFBTSxFQUFFLFFBQVE7WUFDaEIsTUFBTSxFQUFFLFVBQVU7WUFDbEIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBRUYsSUFBSSxZQUFZLEdBQXdDO1lBQ3RELE1BQU0sRUFBRSxRQUFRO1lBQ2hCLFVBQVUsRUFBRTtnQkFDVixNQUFNLEVBQUUsaUJBQWlCO2FBQzFCO1lBQ0QsUUFBUSxFQUFFLG9CQUFvQjtTQUMvQixDQUFDO1FBQ0YsY0FBYyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUV6RCx3Q0FBd0M7UUFDeEMsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMxRCxvQkFBb0I7U0FDckIsRUFBRSxVQUFDLFVBQVU7WUFDWixFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUNmLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDdEMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLGVBQWUsQ0FBQztnQkFDckMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO1lBQ2hELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILHlEQUF5RDtRQUN6RCxrREFBa0Q7UUFDbEQsNEJBQWlCLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQy9DLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUVELE1BQU0sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBRWpDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBRXBCLHFFQUFxRTtRQUNyRSw0RUFBNEU7UUFDNUUsRUFBRTtRQUNGLFVBQVUsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDbEQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHO1lBQ3RELEtBQUssRUFBRSxnQkFBZ0I7U0FDeEIsQ0FBQztRQUVGLGNBQWMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUMvQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNsRCxXQUFXLENBQUMsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFbEUsY0FBYyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNwQyxXQUFXLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLFdBQVcsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDakMsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUMvQixRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzlCLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFOUIsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHO1lBQzVCLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFLENBQUM7b0JBQ0wsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLE9BQU8sRUFBRSxRQUFRO2lCQUNsQixFQUFFO29CQUNELE9BQU8sRUFBRSxRQUFRO29CQUNqQixPQUFPLEVBQUUsUUFBUTtpQkFDbEIsRUFBRTtvQkFDRCxPQUFPLEVBQUUsUUFBUTtvQkFDakIsT0FBTyxFQUFFLFFBQVE7aUJBQ2xCLENBQUM7U0FDSCxDQUFDO1FBQ0YsY0FBYyxDQUFDLDBCQUEwQixDQUFDLEdBQUc7WUFDM0MsU0FBUyxFQUFFLHlCQUF5QjtTQUNyQyxDQUFDO1FBQ0YsUUFBUSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEdBQUc7WUFDbEUsU0FBUyxFQUFFLHlCQUF5QjtTQUNyQyxDQUFDO1FBQ0YsUUFBUSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEdBQUc7WUFDbEUsU0FBUyxFQUFFLHlCQUF5QjtTQUNyQyxDQUFDO1FBRUYsa0JBQWtCLENBQUMsUUFBUSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRztZQUN0QyxJQUFJLEVBQUUsUUFBUTtZQUNkLElBQUksRUFBRSxDQUFDO29CQUNMLE9BQU8sRUFBRSxRQUFRO29CQUNqQixPQUFPLEVBQUUsUUFBUTtpQkFDbEIsRUFBRTtvQkFDRCxPQUFPLEVBQUUsYUFBYTtvQkFDdEIsT0FBTyxFQUFFLGNBQWM7aUJBQ3hCLEVBQUU7b0JBQ0QsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLE9BQU8sRUFBRSxTQUFTO2lCQUNuQixDQUFDO1NBQ0gsQ0FBQztRQUNGLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHO1lBQ3JFLFNBQVMsRUFBRSwwQkFBMEI7U0FDdEMsQ0FBQztRQUNGLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHO1lBQ3BFLFNBQVMsRUFBRSx5QkFBeUI7U0FDckMsQ0FBQztRQUNGLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHO1lBQ3pFLFNBQVMsRUFBRSw4QkFBOEI7U0FDMUMsQ0FBQztRQUVGLDRCQUE0QjtRQUM1Qix3Q0FBd0M7UUFFeEMsT0FBTztRQUNQLFVBQVUsQ0FBQyxJQUFJLEdBQUc7WUFDaEIsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBQ3BCLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQztZQUN4QixRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7WUFDcEIsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQzFCLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQztZQUN4QixVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDeEIsaUJBQWlCLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztTQUN0QyxDQUFDO1FBQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztVQTJCRTtRQUVGLE1BQU0sQ0FBQyxNQUFNLEdBQUc7WUFDZCxZQUFZLEVBQUUsSUFBSTtZQUNsQixNQUFNLEVBQUUsYUFBYTtZQUNyQixVQUFVLEVBQUU7Z0JBQ1YsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsUUFBUSxFQUFFLEVBQ1Q7YUFDRjtZQUNELE1BQU0sRUFBRTtnQkFDTixRQUFRLEVBQUU7b0JBQ1IsTUFBTSxFQUFFLEtBQUs7aUJBQ2Q7Z0JBQ0QsVUFBVSxFQUFFO29CQUNSLE1BQU0sRUFBRSxRQUFRO29CQUNoQixnQkFBZ0IsRUFBRTt3QkFDZCxNQUFNLEVBQUU7NEJBQ0osTUFBTSxFQUFFLGFBQWE7NEJBQ3JCLE1BQU0sRUFBRSx1Q0FBdUM7eUJBQ2xEO3dCQUNELEtBQUssRUFBRTs0QkFDSDtnQ0FDSSxNQUFNLEVBQUUsVUFBVTtnQ0FDbEIsT0FBTyxFQUFFLFVBQVU7NkJBQ3RCOzRCQUNEO2dDQUNJLE1BQU0sRUFBRSxVQUFVO2dDQUNsQixPQUFPLEVBQUUsT0FBTzs2QkFDbkI7eUJBQ0o7cUJBQ0o7aUJBQ0o7YUFDRjtTQUNGLENBQUM7UUFFRixNQUFNLENBQUMsTUFBTSxDQUFDLDRCQUE0QixFQUFFLFVBQUMsR0FBRztZQUM5QyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ1QsTUFBTSxDQUFDO1lBQ1QsQ0FBQztZQUNELElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDWixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDekMsY0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7dUJBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDNUgsTUFBTSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkYsTUFBTSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLCtCQUErQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUxRSxnQkFBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFHaEUsTUFBTSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXJGLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFO1lBQ3RCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFO1lBQ3JCLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztRQUVYOzs7OztVQUtFO1FBQ00sTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsVUFBQyxNQUFNO1lBQ2hDLFVBQVUsRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsSUFBSSxHQUFHO1lBQ1osY0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUdwQixJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQzNCLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFFckMsb0NBQW9DO1lBRXBDLDRCQUE0QjtZQUM1QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNuQyxPQUFPLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFFbEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFekIsSUFBSSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN0RyxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzlFLGNBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztZQUNsRCxjQUFHLENBQUMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLHNCQUFzQixDQUFDLENBQUM7WUFDOUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzdGLENBQUM7WUFFWDs7Ozs7O2NBTUU7WUFFUSxjQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFdkMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsVUFBQyxHQUFHO2dCQUN2QyxjQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBRWxDLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLGtCQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDM0UsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDVCxjQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFFLElBQUksQ0FBQyxDQUFDO29CQUNsQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QixDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLGNBQUcsQ0FBQyxJQUFJLENBQUMsd0NBQXdDLENBQUMsQ0FBQztnQkFDckQsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDO1FBRUYsVUFBVSxFQUFFLENBQUM7UUFHYixJQUFJLFVBQVUsR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekMsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWpCO1lBQ0UsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDbkIsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2QsSUFBSSxHQUFHLEdBQUcsNkJBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztvQkFDWixPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO29CQUM3QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUNULE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO3dCQUVyQixJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNyQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7d0JBQ3hCLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7d0JBQ3hELE1BQU0sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO29CQUNuQyxDQUFDO29CQUNELE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQy9DLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUV0Qix1QkFBdUI7b0JBQ3ZCLE1BQU0sQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUN4RixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0QixDQUFDLENBQUM7b0JBQ0YsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTtvQkFDM0MsY0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7Z0JBQ2hFLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNOLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUV0QixNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO1FBRUQsbUJBQW1CLE9BQU87WUFDeEIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBQyxNQUFNO2dCQUM5QixJQUFJLElBQUksR0FBRyxrQkFBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMzQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNULEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQ1QsS0FBSyxFQUFFLElBQUk7d0JBQ1gsS0FBSyxFQUFFLElBQUk7d0JBQ1gsWUFBWSxFQUFFOzRCQUNaLE9BQU8sRUFBRSxJQUFJO3lCQUNkO3dCQUNELE9BQU8sRUFBRSxNQUFNO3FCQUNoQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUUxQyxJQUFJLHdCQUF3QixHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDMUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUUsSUFBSSxpQkFBaUIsR0FBRywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLHdCQUF3QixFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDM0UsQ0FBQztRQUNILENBQUM7UUFFRCxxQ0FBcUMsT0FBTztZQUMxQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBQyxNQUFNO2dCQUM5QixJQUFJLElBQUksR0FBRyxrQkFBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMzQixFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hELE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ2hCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDWixPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFDLE1BQU07b0JBQzlCLElBQUksSUFBSSxHQUFHLGtCQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDeEQsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDaEIsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2IsS0FBSyxRQUFRO2dCQUNYLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDdkIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFVBQUMsUUFBWSxFQUFFLElBQVc7b0JBQ3hELEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNuQixjQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUNwQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDekIsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBQyxRQUFZLEVBQUUsSUFBVztvQkFDM0QsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ25CLGNBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBQ3BDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUN6QixDQUFDO29CQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNOLFFBQVEsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO3dCQUMzQixRQUFRLENBQUMsa0JBQWtCLENBQUMsR0FBRzs0QkFDN0IsVUFBVSxFQUFFLElBQUk7eUJBQ2pCLENBQUE7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsVUFBQyxRQUFZLEVBQUUsSUFBVztvQkFDdkQsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQ3RCLGNBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBQ3BDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUN6QixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILEtBQUssQ0FBQztZQUNSLEtBQUssTUFBTSxDQUFDO1lBQ1osUUFBUTtRQUNWLENBQUM7UUFFRCxNQUFNLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUNyQyxDQUFDLENBQUMsQ0FBQztBQUVMLENBQUMsRUF4YU0sVUFBVSxLQUFWLFVBQVUsUUF3YWhCOztBQzVhRCx5Q0FBeUM7QUFDekMsMkNBQTJDO0FBRTNDLElBQU8sVUFBVSxDQXFJaEI7QUFySUQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVOLGlDQUFzQixHQUFHLHFCQUFVLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQjtRQUNwUCxVQUFDLE1BQU0sRUFBRSxlQUFpRCxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsU0FBNkIsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0I7WUFFek0sTUFBTSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUM7WUFDcEMsTUFBTSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7WUFFL0IsTUFBTSxDQUFDLFdBQVcsR0FBRztnQkFDbkIsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIscUJBQXFCLEVBQUUsSUFBSTtnQkFDM0IsdUJBQXVCLEVBQUUsS0FBSztnQkFDOUIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixhQUFhLEVBQUU7b0JBQ2IsVUFBVSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO2lCQUMxQztnQkFDRCxVQUFVLEVBQUU7b0JBQ1Y7d0JBQ0UsS0FBSyxFQUFFLGVBQWU7d0JBQ3RCLFdBQVcsRUFBRSxNQUFNO3dCQUNuQixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQztxQkFDakU7b0JBQ1g7Ozs7O3NCQUtFO29CQUNRO3dCQUNFLEtBQUssRUFBRSxxQkFBcUI7d0JBQzVCLFdBQVcsRUFBRSxZQUFZO3FCQUMxQjtvQkFDWDs7Ozs7Ozs7Ozs7OztzQkFhRTtvQkFDUTt3QkFDRSxLQUFLLEVBQUUsbUJBQW1CO3dCQUMxQixXQUFXLEVBQUUsTUFBTTt3QkFDbkIsS0FBSyxFQUFFLEtBQUs7d0JBQ1osUUFBUSxFQUFFLEdBQUc7d0JBQ2IsWUFBWSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsbUNBQW1DLENBQUM7cUJBQ3RFO29CQUNEO3dCQUNFLEtBQUssRUFBRSxvQkFBb0I7d0JBQzNCLFdBQVcsRUFBRSxRQUFRO3dCQUNyQixLQUFLLEVBQUUsS0FBSzt3QkFDWixRQUFRLEVBQUUsR0FBRzt3QkFDYixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQztxQkFDdkU7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLDBCQUEwQjt3QkFDakMsV0FBVyxFQUFFLGNBQWM7d0JBQzNCLEtBQUssRUFBRSxLQUFLO3dCQUNaLFFBQVEsRUFBRSxHQUFHO3dCQUNiLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxDQUFDO3FCQUM3RTtvQkFDRDt3QkFDRSxLQUFLLEVBQUUsbUJBQW1CO3dCQUMxQixXQUFXLEVBQUUsUUFBUTt3QkFDckIsS0FBSyxFQUFFLEtBQUs7d0JBQ1osUUFBUSxFQUFFLEdBQUc7d0JBQ2IsWUFBWSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsbUNBQW1DLENBQUM7cUJBQ3RFO2lCQUNGO2FBQ0YsQ0FBQztZQUVGLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFFNUgsT0FBTztZQUNQLG9EQUFvRDtZQUVwRCxNQUFNLENBQUMsWUFBWSxHQUFHLFVBQUMsUUFBUTtnQkFDN0IsRUFBRSxDQUFDLDRCQUE0QixDQUFtQztvQkFDaEUsVUFBVSxFQUFFLFFBQVE7b0JBQ3BCLEtBQUssRUFBRSxPQUFPO29CQUNkLE9BQU8sRUFBRSxVQUFDLE1BQWM7d0JBQ3RCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7NEJBQ1gsd0JBQXdCLFFBQVEsRUFBRSxJQUFJO2dDQUNwQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29DQUNULFlBQVksQ0FBQyxJQUFJLEVBQUU7d0NBQ2pCLGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7b0NBQzdDLENBQUMsQ0FBQyxDQUFDO2dDQUNMLENBQUM7Z0NBQUMsSUFBSSxDQUFDLENBQUM7b0NBQ04sVUFBVSxFQUFFLENBQUM7Z0NBQ2YsQ0FBQzs0QkFDSCxDQUFDOzRCQUVELGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7d0JBQzdDLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxLQUFLLEVBQUUsdUJBQXVCO29CQUM5QixNQUFNLEVBQUUsOENBQThDO29CQUN0RCxNQUFNLEVBQUUsUUFBUTtvQkFDaEIsT0FBTyxFQUFFLFlBQVk7b0JBQ3JCLE1BQU0sRUFBRSw2Q0FBNkM7b0JBQ3JELFdBQVcsRUFBRSxxQkFBcUI7aUJBQ25DLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLENBQUMsQ0FBQztZQUVGLHNCQUFzQixTQUFTLEVBQUUsWUFBWTtnQkFDM0MsSUFBSSxJQUFJLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBQ3JELElBQUksR0FBRyxHQUFHLDZCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNuQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQzt3QkFDZixPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO3dCQUM3QyxZQUFZLEVBQUUsQ0FBQztvQkFDakIsQ0FBQyxDQUFDO3dCQUNGLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07d0JBQzNDLGNBQUcsQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO29CQUNsRixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUM5RSxDQUFDO1lBQ0gsQ0FBQztZQUVEO1lBQ0EsQ0FBQztZQUVELFVBQVUsRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMsRUFySU0sVUFBVSxLQUFWLFVBQVUsUUFxSWhCOztBQ3hJRCx5Q0FBeUM7QUFDekMsNENBQTRDO0FBQzVDLDJDQUEyQztBQUUzQyxJQUFPLFVBQVUsQ0ErRGhCO0FBL0RELFdBQU8sVUFBVSxFQUFDLENBQUM7SUFFTiw4QkFBbUIsR0FBRyxxQkFBVSxDQUFDLHFCQUFxQixFQUMvRCxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCO1FBQ3pKLFVBQUMsTUFBTSxFQUFFLGVBQWlELEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUM1RixjQUF1QyxFQUFFLFNBQTZCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCO1lBRXRILE1BQU0sQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxFQUFFLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO1lBRTVELFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFFNUgsTUFBTSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRTtnQkFDbkMsVUFBVSxFQUFFLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLFVBQUMsTUFBTTtnQkFDaEMsVUFBVSxFQUFFLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLENBQUM7WUFFcEMsVUFBVSxFQUFFLENBQUM7WUFFYjtnQkFDRSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDbkIsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2QsSUFBSSxHQUFHLEdBQUcsdUJBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2xDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO3dCQUNaLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07d0JBQzdDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7NEJBQ1QsTUFBTSxDQUFDLE1BQU0sR0FBRyxzQkFBVyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNwQyxDQUFDO3dCQUNELE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QixDQUFDLENBQUM7d0JBQ0YsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTt3QkFDM0MsY0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7b0JBQ2hFLENBQUMsQ0FBQyxDQUFDO29CQUVMLEdBQUcsR0FBRywyQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2xDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO3dCQUNaLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNO3dCQUM1QixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzt3QkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEIsQ0FBQyxDQUFDO3dCQUNGLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNO3dCQUMxQixNQUFNLENBQUMsUUFBUSxHQUFHLDRCQUE0QixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLFdBQVcsR0FBRyxNQUFNLENBQUM7d0JBQ3pGLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RCLENBQUMsQ0FBQzt3QkFDRixLQUFLLENBQUMsVUFBVSxLQUFLO3dCQUNuQixNQUFNLENBQUMsUUFBUSxHQUFHLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDVixDQUFDLEVBL0RNLFVBQVUsS0FBVixVQUFVLFFBK0RoQjs7QUNuRUQseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUUzQyxJQUFPLFVBQVUsQ0ErSGhCO0FBL0hELFdBQU8sVUFBVSxFQUFDLENBQUM7SUFFTiwyQkFBZ0IsR0FBRyxxQkFBVSxDQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0I7UUFDeE8sVUFBQyxNQUFNLEVBQUUsZUFBaUQsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFNBQTZCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCO1lBRXpNLE1BQU0sQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsV0FBVyxHQUFHO2dCQUNuQixJQUFJLEVBQUUsY0FBYztnQkFDcEIscUJBQXFCLEVBQUUsSUFBSTtnQkFDM0IsdUJBQXVCLEVBQUUsS0FBSztnQkFDOUIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixhQUFhLEVBQUU7b0JBQ2IsVUFBVSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO2lCQUMxQztnQkFDRCxVQUFVLEVBQUU7b0JBQ1Y7d0JBQ0UsS0FBSyxFQUFFLGVBQWU7d0JBQ3RCLFdBQVcsRUFBRSxNQUFNO3dCQUNuQixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQztxQkFDM0Q7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLGVBQWU7d0JBQ3RCLFdBQVcsRUFBRSxNQUFNO3dCQUNuQixXQUFXLEVBQUUsSUFBSTt3QkFDakIsWUFBWSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUM7cUJBQzNEO29CQUNEO3dCQUNFLEtBQUssRUFBRSxRQUFRO3dCQUNmLFdBQVcsRUFBRSxRQUFRO3dCQUNyQixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQztxQkFDN0Q7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLFdBQVc7d0JBQ2xCLFdBQVcsRUFBRSxNQUFNO3dCQUNuQixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQztxQkFDM0Q7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLFVBQVU7d0JBQ2pCLFdBQVcsRUFBRSxXQUFXO3dCQUN4QixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQztxQkFDMUQ7b0JBQ1g7Ozs7O3NCQUtFO29CQUNRO3dCQUNFLEtBQUssRUFBRSxxQkFBcUI7d0JBQzVCLFdBQVcsRUFBRSxZQUFZO3dCQUN6QixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQztxQkFDakU7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLG9CQUFvQjt3QkFDM0IsV0FBVyxFQUFFLFVBQVU7cUJBQ3hCO29CQUNEO3dCQUNFLEtBQUssRUFBRSx3Q0FBd0M7d0JBQy9DLFdBQVcsRUFBRSxjQUFjO3FCQUM1QjtvQkFDRDt3QkFDRSxLQUFLLEVBQUUscUJBQXFCO3dCQUM1QixXQUFXLEVBQUUsY0FBYztxQkFDNUIsQ0FBQzthQUNMLENBQUM7WUFFRixVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVILE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ25GLE1BQU0sQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRTVGLE1BQU0sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ25DLFVBQVUsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFFSDtnQkFDRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDakIsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7b0JBQ2pDLElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7b0JBRXpDLHVCQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3JCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUV0QixFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3dCQUNsQixNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUNsRSxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBRUQsVUFBVSxFQUFFLENBQUM7WUFHYjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Y0EwQkU7UUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQyxFQS9ITSxVQUFVLEtBQVYsVUFBVSxRQStIaEI7O0FDbElELHlDQUF5QztBQUN6Qyw0Q0FBNEM7QUFDNUMsMkNBQTJDO0FBRTNDLElBQU8sVUFBVSxDQXNCaEI7QUF0QkQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVqQiw4REFBOEQ7SUFDbkQsNEJBQWlCLEdBQUcscUJBQVUsQ0FBQyxtQkFBbUIsRUFBRTtRQUM3RCxRQUFRLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxzQkFBc0IsRUFBRSxVQUFVO1FBQzNFLFVBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsUUFBMkI7WUFFbkYsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFDLE1BQU07Z0JBQ3hCLElBQUksVUFBVSxHQUFPLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztnQkFDcEcsSUFBSSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksb0JBQW9CLENBQUM7Z0JBQ3pELElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNwQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDM0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxXQUFXO29CQUM5QixLQUFLLEVBQUUsS0FBSztvQkFDWixRQUFRLEVBQUUsUUFBUTtpQkFDbkIsQ0FBQyxDQUFDO2dCQUNILGNBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQztRQUVKLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDLEVBdEJNLFVBQVUsS0FBVixVQUFVLFFBc0JoQjs7QUMxQkQseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUUzQyxJQUFPLFVBQVUsQ0E0TGhCO0FBNUxELFdBQU8sVUFBVSxFQUFBLENBQUM7SUFDZjtRQUFBO1lBQ1UsZUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNoQixrQkFBYSxHQUFHLEVBQUUsQ0FBQztZQUNuQixjQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ2Ysa0JBQWEsR0FBRyxFQUFFLENBQUM7WUFDbkIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7WUFDakIsa0JBQWEsR0FBRyxFQUFFLENBQUM7WUFDbkIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7WUFDakIsa0JBQWEsR0FBRSxFQUFFLENBQUM7WUFDbEIsbUJBQWMsR0FBRyxFQUFFLENBQUM7WUFVcEIsZUFBVSxHQUFHO2dCQUNoQixNQUFNLEVBQUMsQ0FBQzthQUNYLENBQUM7UUE0SUwsQ0FBQztRQXRKRSxzQkFBVywrQ0FBYTtpQkFBeEI7Z0JBQ0csTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUE7WUFDNUIsQ0FBQztpQkFFRCxVQUF5QixhQUFvQjtnQkFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7WUFDdEMsQ0FBQzs7O1dBSkE7UUFVRCxzQkFBVyw2Q0FBVztpQkFBdEI7Z0JBQ0csTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDM0IsQ0FBQztpQkFFRCxVQUF1QixXQUF1QjtnQkFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7WUFDbEMsQ0FBQzs7O1dBSkE7UUFNRCxzQkFBVyw2Q0FBVztpQkFBdEI7Z0JBQ0csTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDM0IsQ0FBQztpQkFFRCxVQUF1QixXQUF1QjtnQkFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7WUFDbEMsQ0FBQzs7O1dBSkE7UUFNRCxzQkFBVywrQ0FBYTtpQkFBeEI7Z0JBQ0csTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDN0IsQ0FBQztpQkFFRCxVQUF5QixhQUF5QjtnQkFDL0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7WUFDdEMsQ0FBQzs7O1dBSkE7UUFNRCxzQkFBVywrQ0FBYTtpQkFBeEI7Z0JBQ0csTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDN0IsQ0FBQztpQkFFRCxVQUF5QixhQUF5QjtnQkFDL0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7WUFDdEMsQ0FBQzs7O1dBSkE7UUFNTSw4Q0FBZSxHQUF0QixVQUF1QixJQUFZO1lBQ2hDLEdBQUcsQ0FBQSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQSxDQUFDO2dCQUNqQyxFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2xCLENBQUM7WUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2hCLENBQUM7UUFFTSx3Q0FBUyxHQUFoQixVQUFpQixJQUFTO1lBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztZQUNkLEVBQUUsQ0FBQSxDQUFDLE9BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFTLENBQUMsQ0FBQSxDQUFDO2dCQUM1QixFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoQixDQUFDO1lBQUEsSUFBSSxDQUFDLEVBQUUsQ0FBQSxDQUFDLE9BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQSxDQUFDO2dCQUNqQyxFQUFFLEdBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZCLENBQUM7WUFBQSxJQUFJLENBQUMsRUFBRSxDQUFBLENBQUMsT0FBTSxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFBLENBQUM7Z0JBQ2pDLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDYixDQUFDO1lBQUEsSUFBSSxDQUFBLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNmLENBQUM7WUFFRCxHQUFHLENBQUEsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUEsQ0FBQztnQkFDakMsRUFBRSxDQUFBLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO29CQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2xCLENBQUM7WUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2YsQ0FBQztRQUVNLDRDQUFhLEdBQXBCLFVBQXFCLElBQVM7WUFDM0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDWixFQUFFLENBQUEsQ0FBQyxPQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUyxDQUFDLENBQUEsQ0FBQztnQkFDNUIsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEIsQ0FBQztZQUFBLElBQUksQ0FBQyxFQUFFLENBQUEsQ0FBQyxPQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUEsQ0FBQztnQkFDakMsRUFBRSxHQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QixDQUFDO1lBQUEsSUFBSSxDQUFDLEVBQUUsQ0FBQSxDQUFDLE9BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQSxDQUFDO2dCQUNqQyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ2IsQ0FBQztZQUFBLElBQUksQ0FBQSxDQUFDO2dCQUNILE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNiLENBQUM7WUFFRCxHQUFHLENBQUEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUEsQ0FBQztnQkFDL0IsRUFBRSxDQUFBLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO29CQUNqQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2hCLENBQUM7WUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixDQUFDO1FBRU0sK0NBQWdCLEdBQXZCLFVBQXdCLEtBQWEsRUFBRSxRQUFnQjtZQUNwRCxHQUFHLENBQUEsQ0FBQyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUMsQ0FBQztnQkFDaEMsSUFBSSxZQUFZLEdBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFDLFFBQVEsR0FBQyxHQUFHLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQztnQkFDckYsSUFBSSxLQUFLLEdBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbEMsRUFBRSxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUM7b0JBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUM7d0JBQ3hCLE1BQU0sRUFBQyxDQUFDO3FCQUNULENBQUM7b0JBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDM0IsQ0FBQztnQkFDRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ25DLENBQUM7UUFDSixDQUFDO1FBRU0sNkNBQWMsR0FBckIsVUFBc0IsTUFBTSxFQUFDLEdBQUcsRUFBQyxLQUFLO1lBQ25DLEdBQUcsQ0FBQSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQSxDQUFDO2dCQUNqQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFBLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7b0JBQ2xCLEtBQUssQ0FBQztnQkFDVCxDQUFDO1lBQ0osQ0FBQztRQUNKLENBQUM7UUFFRCxzQkFBVyw0Q0FBVTtpQkFBckI7Z0JBQ0csTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDMUIsQ0FBQztpQkFFRCxVQUFzQixVQUFpQjtnQkFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBQyxVQUFVLENBQUM7WUFDOUIsQ0FBQzs7O1dBSkE7UUFNRCxzQkFBVywrQ0FBYTtpQkFBeEI7Z0JBQ0csTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDN0IsQ0FBQzs7O1dBQUE7UUFFRCxzQkFBVyx5Q0FBTztpQkFBbEIsVUFBbUIsYUFBb0I7Z0JBQ3BDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1lBQ3RDLENBQUM7OztXQUFBO1FBRUQsc0JBQVcsMkNBQVM7aUJBQXBCO2dCQUNHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3pCLENBQUM7aUJBRUQsVUFBcUIsU0FBZ0I7Z0JBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQzlCLENBQUM7OztXQUpBO1FBTU0sOENBQWUsR0FBdEI7WUFDRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFTLElBQUksRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU07Z0JBQzFELElBQUksQ0FBQyxVQUFVLEdBQUUsSUFBSSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBUyxJQUFJLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxNQUFNO2dCQUN6RCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7UUFDSiwyQkFBQztJQUFELENBaktBLEFBaUtDLElBQUE7SUFqS1ksK0JBQW9CLHVCQWlLaEMsQ0FBQTtJQUNGLGtCQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFDLEtBQUs7WUFDN0MsSUFBSSxNQUFNLEdBQUUsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1lBRXZDLE1BQU0sQ0FBQyxhQUFhLEdBQUMsS0FBSyxDQUFDO2dCQUN4QixHQUFHLEVBQUMsZ0JBQWdCO2dCQUNwQixNQUFNLEVBQUMsTUFBTTthQUNmLENBQUMsQ0FBQztZQUVILG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNO2dCQUMvRCxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztZQUVILDhCQUE4QixJQUFJLEVBQUMsUUFBUTtnQkFDeEMsS0FBSyxDQUFDO29CQUNILEdBQUcsRUFBQyxnQkFBZ0I7b0JBQ3BCLE1BQU0sRUFBQyxNQUFNO2lCQUNmLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBUyxJQUFJLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNO29CQUMzQyxFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUM7d0JBQ04sUUFBUSxDQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBUyxJQUFJLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNO29CQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN6QixDQUFDLENBQUMsQ0FBQztZQUNOLENBQUM7WUFBQSxDQUFDO1lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxFQTVMTSxVQUFVLEtBQVYsVUFBVSxRQTRMaEI7O0FDL0xELHlDQUF5QztBQUN6Qyw0Q0FBNEM7QUFDNUMsMkNBQTJDO0FBRTNDLElBQU8sVUFBVSxDQStDaEI7QUEvQ0QsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVOLHFDQUEwQixHQUFHLHFCQUFVLENBQUMsNEJBQTRCLEVBQzdFLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0I7UUFDekosVUFBQyxNQUFNLEVBQUUsZUFBaUQsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQzVGLGNBQXVDLEVBQUUsU0FBNkIsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0I7WUFFdEgsTUFBTSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUM7WUFDcEMsTUFBTSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7WUFDL0IsTUFBTSxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQztZQUNqQyxNQUFNLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQztZQUV4RSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBRTVILE1BQU0sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ25DLFVBQVUsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxVQUFDLE1BQU07Z0JBQ2hDLFVBQVUsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFFSCxVQUFVLEVBQUUsQ0FBQztZQUViO2dCQUNFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDZCxJQUFJLEdBQUcsR0FBRyxrQ0FBdUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzdDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO3dCQUNaLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07d0JBQzdDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7NEJBQ1QsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7NEJBQ3JCLGlDQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUMvQixDQUFDO3dCQUNELE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QixDQUFDLENBQUM7d0JBQ0YsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTt3QkFDM0MsY0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7b0JBQ2hFLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ04sTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNWLENBQUMsRUEvQ00sVUFBVSxLQUFWLFVBQVUsUUErQ2hCOztBQ25ERCx5Q0FBeUM7QUFDekMsMkNBQTJDO0FBRTNDLElBQU8sVUFBVSxDQXdIaEI7QUF4SEQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVOLHNDQUEyQixHQUFHLHFCQUFVLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQjtRQUM5UCxVQUFDLE1BQU0sRUFBRSxlQUFpRCxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsU0FBNkIsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0I7WUFFek0sTUFBTSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUM7WUFDcEMsTUFBTSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7WUFDL0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sQ0FBQyxVQUFVLEdBQUcsOEJBQW1CLENBQUM7WUFFeEMsTUFBTSxDQUFDLFdBQVcsR0FBRztnQkFDbkIsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIscUJBQXFCLEVBQUUsSUFBSTtnQkFDM0IsdUJBQXVCLEVBQUUsS0FBSztnQkFDOUIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixhQUFhLEVBQUU7b0JBQ2IsVUFBVSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO2lCQUMxQztnQkFDRCxVQUFVLEVBQUU7b0JBQ1Y7d0JBQ0UsS0FBSyxFQUFFLGVBQWU7d0JBQ3RCLFdBQVcsRUFBRSxNQUFNO3dCQUNuQixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsQ0FBQztxQkFDdEU7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLG9CQUFvQjt3QkFDM0IsV0FBVyxFQUFFLFdBQVc7cUJBQ3pCO29CQUNEO3dCQUNFLEtBQUssRUFBRSw4QkFBOEI7d0JBQ3JDLFdBQVcsRUFBRSxXQUFXO3FCQUN6QjtvQkFDRDt3QkFDRSxLQUFLLEVBQUUsb0NBQW9DO3dCQUMzQyxXQUFXLEVBQUUsaUJBQWlCO3FCQUMvQjtvQkFDRDt3QkFDRSxLQUFLLEVBQUUsOEJBQThCO3dCQUNyQyxXQUFXLEVBQUUsWUFBWTtxQkFDMUI7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLHdCQUF3Qjt3QkFDL0IsV0FBVyxFQUFFLEtBQUs7cUJBQ25CO29CQUNEO3dCQUNFLEtBQUssRUFBRSw4Q0FBOEM7d0JBQ3JELFdBQVcsRUFBRSxRQUFRO3dCQUNyQixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQztxQkFDdkU7aUJBQ0Y7YUFDRixDQUFDO1lBRUYsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUU1SCxNQUFNLENBQUMsWUFBWSxHQUFHLFVBQUMsUUFBUTtnQkFDN0IsRUFBRSxDQUFDLDRCQUE0QixDQUFtQztvQkFDaEUsVUFBVSxFQUFFLFFBQVE7b0JBQ3BCLEtBQUssRUFBRSxPQUFPO29CQUNkLE9BQU8sRUFBRSxVQUFDLE1BQWM7d0JBQ3RCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7NEJBQ1gsd0JBQXdCLFFBQVEsRUFBRSxJQUFJO2dDQUNwQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29DQUNULFlBQVksQ0FBQyxJQUFJLEVBQUU7d0NBQ2pCLGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7b0NBQzdDLENBQUMsQ0FBQyxDQUFDO2dDQUNMLENBQUM7Z0NBQUMsSUFBSSxDQUFDLENBQUM7b0NBQ04sVUFBVSxFQUFFLENBQUM7Z0NBQ2YsQ0FBQzs0QkFDSCxDQUFDOzRCQUVELGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7d0JBQzdDLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxLQUFLLEVBQUUsb0JBQW9CO29CQUMzQixNQUFNLEVBQUUsNENBQTRDO29CQUNwRCxNQUFNLEVBQUUsUUFBUTtvQkFDaEIsT0FBTyxFQUFFLFlBQVk7b0JBQ3JCLE1BQU0sRUFBRSw2Q0FBNkM7b0JBQ3JELFdBQVcsRUFBRSxxQkFBcUI7aUJBQ25DLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLENBQUMsQ0FBQztZQUVGLHNCQUFzQixTQUFTLEVBQUUsWUFBWTtnQkFDM0MsSUFBSSxJQUFJLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMscUNBQXFDLEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBQzFELElBQUksR0FBRyxHQUFHLGtDQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN4QyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQzt3QkFDZixPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO3dCQUM3QyxZQUFZLEVBQUUsQ0FBQztvQkFDakIsQ0FBQyxDQUFDO3dCQUNGLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07d0JBQzNDLGNBQUcsQ0FBQyxJQUFJLENBQUMsd0NBQXdDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO29CQUN2RixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUM5RSxDQUFDO1lBQ0gsQ0FBQztZQUVEO2dCQUNFLElBQUksR0FBRyxHQUFHLG1DQUF3QixFQUFFLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO29CQUNaLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07b0JBQzdDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ1Qsd0RBQXdEO3dCQUN4RCxNQUFNLENBQUMsaUJBQWlCLEdBQUcsa0NBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUMvRCxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEIsQ0FBQztnQkFDSCxDQUFDLENBQUM7b0JBQ0YsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTtvQkFDM0MsY0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7Z0JBQ2hFLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUVELFVBQVUsRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMsRUF4SE0sVUFBVSxLQUFWLFVBQVUsUUF3SGhCOztBQzNIRCx5Q0FBeUM7QUFDekMsNENBQTRDO0FBQzVDLDJDQUEyQztBQUUzQyxJQUFPLFVBQVUsQ0EyRGhCO0FBM0RELFdBQU8sVUFBVSxFQUFDLENBQUM7SUFFTiwyQkFBZ0IsR0FBRyxxQkFBVSxDQUFDLGtCQUFrQixFQUN6RCxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCO1FBQzdLLFVBQUMsTUFBTSxFQUFFLGVBQWtELEVBQUUsa0JBQWtELEVBQUUsY0FBOEMsRUFBRSxlQUFlLEVBQy9LLGNBQXVDLEVBQUUsU0FBNkIsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0I7WUFFMUgsTUFBTSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUM7WUFDcEMsTUFBTSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7WUFFL0IsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXBGLE1BQU0sQ0FBQyxXQUFXLEdBQUc7Z0JBQ25CLElBQUksRUFBRSxjQUFjO2dCQUNwQixxQkFBcUIsRUFBRSxJQUFJO2dCQUMzQix1QkFBdUIsRUFBRSxLQUFLO2dCQUM5QixXQUFXLEVBQUUsSUFBSTtnQkFDakIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLGFBQWEsRUFBRTtvQkFDYixVQUFVLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7aUJBQzFDO2dCQUNELFVBQVUsRUFBRTtvQkFDVixFQUFFLEtBQUssRUFBRSxpQkFBaUI7d0JBQ3hCLFdBQVcsRUFBRSxZQUFZO3dCQUN6QixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQztxQkFDaEU7b0JBQ0QsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCO3dCQUN2QixXQUFXLEVBQUUsV0FBVzt3QkFDeEIsWUFBWSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUM7cUJBQy9EO29CQUNELEVBQUUsS0FBSyxFQUFFLE9BQU87d0JBQ2QsV0FBVyxFQUFFLE9BQU87cUJBQ3JCO29CQUNELEVBQUUsS0FBSyxFQUFFLHFCQUFxQjt3QkFDNUIsV0FBVyxFQUFFLE1BQU07d0JBQ25CLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDO3FCQUMzRDtvQkFDRCxFQUFFLEtBQUssRUFBRSxxQkFBcUI7d0JBQzVCLFdBQVcsRUFBRSxNQUFNO3dCQUNuQixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQztxQkFDM0Q7b0JBQ0QsRUFBRSxLQUFLLEVBQUUsMEJBQTBCO3dCQUNqQyxXQUFXLEVBQUUsU0FBUztxQkFDdkI7b0JBQ0QsRUFBRSxLQUFLLEVBQUUsUUFBUTt3QkFDZixXQUFXLEVBQUUsUUFBUTtxQkFDdEI7b0JBQ0QsRUFBRSxLQUFLLEVBQUUsUUFBUTt3QkFDZixXQUFXLEVBQUUsUUFBUTt3QkFDckIsWUFBWSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUM7cUJBQzdEO29CQUNELEVBQUUsS0FBSyxFQUFFLFNBQVM7d0JBQ2hCLFdBQVcsRUFBRSxTQUFTO3FCQUN2QjtpQkFDRjthQUNGLENBQUM7WUFFRixVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzlILENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDLEVBM0RNLFVBQVUsS0FBVixVQUFVLFFBMkRoQjs7QUMvREQseUNBQXlDO0FBQ3pDLDRDQUE0QztBQUM1QywyQ0FBMkM7QUFDM0MsMENBQTBDO0FBRTFDLElBQU8sVUFBVSxDQXVEaEI7QUF2REQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVOLHlCQUFjLEdBQUcscUJBQVUsQ0FBQyxnQkFBZ0IsRUFDckQsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQjtRQUNySSxVQUFDLE1BQU0sRUFBRSxlQUFpRCxFQUFFLGVBQWUsRUFDMUUsY0FBdUMsRUFBRSxTQUE2QixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGdCQUFnQjtZQUV0SCxNQUFNLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQztZQUNwQyxNQUFNLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQztZQUMvQixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUV2QixNQUFNLENBQUMsVUFBVSxHQUFHO2dCQUNsQixVQUFVLEVBQUUsRUFBRTthQUNmLENBQUM7WUFFRixVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBRTVILE1BQU0sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ25DLFVBQVUsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxVQUFDLE1BQU07Z0JBQ2hDLFVBQVUsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsT0FBTyxHQUFHO2dCQUNmLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RCLENBQUMsQ0FBQztZQUVGLFVBQVUsRUFBRSxDQUFDO1lBRWI7Z0JBQ0UsTUFBTSxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDZCxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2hFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO3dCQUNaLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07d0JBQzdDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7NEJBQ1QsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7d0JBQ3JCLENBQUM7d0JBQ0QsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7NEJBQ2hCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsb0JBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzNDLENBQUM7b0JBQ0gsQ0FBQyxDQUFDO3dCQUNKLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07d0JBQzNDLGNBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO29CQUNoRSxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO29CQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDVixDQUFDLEVBdkRNLFVBQVUsS0FBVixVQUFVLFFBdURoQjs7QUM1REQseUNBQXlDO0FBQ3pDLElBQU8sVUFBVSxDQThPaEI7QUE5T0QsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUNOLG9CQUFTLEdBQUUsRUFBRSxDQUFDO0lBRXpCOzs7OztPQUtHO0lBQ0gscUJBQTRCLEVBQUU7UUFDNUIsNkVBQTZFO1FBQzdFLElBQUksS0FBSyxHQUFHLDRDQUE0QyxDQUFDO1FBQ3pELElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUM7SUFDSCxDQUFDO0lBZGUsc0JBQVcsY0FjMUIsQ0FBQTtJQUVEO1FBQ0csSUFBSSxRQUFRLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFDLENBQUMsS0FBSyxHQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0QsT0FBTSxvQkFBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQztZQUN0QyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFDLENBQUMsS0FBSyxHQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELG9CQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxRQUFRLENBQUE7SUFDbEIsQ0FBQztJQVBlLHFCQUFVLGFBT3pCLENBQUE7SUFFRCx5QkFBZ0MsR0FBWTtRQUN4QyxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUNoQixJQUFJLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLGdDQUFnQztRQUNyRSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDM0IsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFUZSwwQkFBZSxrQkFTOUIsQ0FBQTtJQUVEO1FBQUE7WUFFVSxVQUFLLEdBQUMsV0FBVyxDQUFDO1lBQ2xCLFVBQUssR0FBRyxDQUFDLE9BQU8sRUFBQyxhQUFhLEVBQUMsYUFBYSxFQUFDLE1BQU0sRUFBQyxxQkFBcUIsRUFBQyxTQUFTLENBQUMsQ0FBQztRQWdHL0YsQ0FBQztRQTlGUyxxQ0FBUSxHQUFmLFVBQWdCLEdBQUc7WUFDaEIsSUFBSSxNQUFNLEdBQUc7Z0JBQ1YsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLFFBQVEsRUFBRSxHQUFHO2dCQUNiLFdBQVcsRUFBRSxHQUFHO2dCQUNoQixVQUFVLEVBQUUsR0FBRyxDQUFDLFFBQVE7YUFDMUIsQ0FBQztZQUNGLEdBQUcsQ0FBQSxDQUFDLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRW5DLE1BQU0sQ0FBQztnQkFDSixZQUFZLEVBQUksVUFBVSxDQUFDLGlCQUFpQjtnQkFDNUMsTUFBTSxFQUFHLHVCQUF1QjtnQkFDaEMsVUFBVSxFQUFHO29CQUNWLE1BQU0sRUFBRyxHQUFHLENBQUMsSUFBSTtvQkFDakIsUUFBUSxFQUFHLE1BQU07aUJBQ25CO2dCQUNELE1BQU0sRUFBRztvQkFDTixRQUFRLEVBQUcsR0FBRyxDQUFDLFFBQVEsSUFBSSxDQUFDO29CQUM1QixVQUFVLEVBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7aUJBQ3ZDO2FBQ0gsQ0FBQTtRQUNKLENBQUM7UUFFTSwrQ0FBa0IsR0FBekI7WUFDRyxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDdEIsR0FBRyxDQUFBLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBLENBQUM7Z0JBQ3pCLEVBQUUsQ0FBQSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUsscUJBQXFCLENBQUM7b0JBQzNDLFlBQVksQ0FBQyxJQUFJLENBQUM7d0JBQ2YsTUFBTSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO3dCQUN6QixXQUFXLEVBQUcscUNBQXFDO3FCQUNyRCxDQUFDLENBQUM7Z0JBQ04sSUFBSTtvQkFDRCxZQUFZLENBQUMsSUFBSSxDQUFDO3dCQUNmLE1BQU0sRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzt3QkFDekIsV0FBVyxFQUFHLGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO3FCQUNyRCxDQUFDLENBQUM7WUFDVCxDQUFDO1lBQ0QsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUN2QixDQUFDO1FBRU0sMENBQWEsR0FBcEIsVUFBcUIsUUFBZ0I7WUFDbEMsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLEdBQUcsQ0FBQSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDO2dCQUN4QixFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLHFCQUFxQixDQUFDO29CQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNWLE1BQU0sRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzt3QkFDekIsVUFBVSxFQUFFOzRCQUNSLE1BQU0sRUFBRyxRQUFRLEdBQUcscUJBQXFCO3lCQUM1QztxQkFDSCxDQUFDLENBQUM7Z0JBQ04sSUFBSTtvQkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNWLE1BQU0sRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzt3QkFDekIsVUFBVSxFQUFFOzRCQUNSLE1BQU0sRUFBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7eUJBQ3ZDO3FCQUNILENBQUMsQ0FBQztZQUNWLENBQUM7WUFDRCxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ2xCLENBQUM7UUFFTSw2Q0FBZ0IsR0FBdkIsVUFBd0IsR0FBRztZQUN4QixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDcEIsVUFBVSxDQUFDLElBQUksQ0FDZjtnQkFDRyxNQUFNLEVBQUcsUUFBUTtnQkFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNuQixpQkFBaUIsRUFBRSxjQUFjO2dCQUNqQyxTQUFTLEVBQUMsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDbkMsT0FBTyxFQUFFO29CQUNUO3dCQUNFLGVBQWUsRUFBRSxJQUFJO3dCQUNyQixVQUFVLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUU7cUJBQ3JDLENBQUM7Z0JBQ0YsY0FBYyxFQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRTthQUM1QyxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsVUFBVSxDQUFBO1FBQ3BCLENBQUM7UUFFTSwyQ0FBYyxHQUFyQixVQUFzQixHQUFHO1lBQ3RCLE1BQU0sQ0FBQztnQkFDSCxVQUFVLEVBQ1Y7b0JBQ0csbUJBQW1CO29CQUNuQixRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU07aUJBQ3RCO2dCQUNELE1BQU0sRUFBRztvQkFDTCwrQkFBK0IsRUFBRyxDQUFDO29CQUNuQyxZQUFZLEVBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztvQkFDMUMsU0FBUyxFQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztpQkFDNUM7YUFDSixDQUFBO1FBQ0osQ0FBQztRQUNKLHlCQUFDO0lBQUQsQ0FuR0EsQUFtR0MsSUFBQTtJQW5HWSw2QkFBa0IscUJBbUc5QixDQUFBO0lBRUQsd0JBQStCLE1BQU07UUFDbEMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFDLFVBQUMsS0FBSyxFQUFFLEdBQUc7WUFDL0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxNQUFNLENBQUE7SUFDaEIsQ0FBQztJQU5lLHlCQUFjLGlCQU03QixDQUFBO0lBRUQsNENBQW9ELHNCQUFzQixFQUFFLElBQUk7UUFDNUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2Ysc0JBQXNCLENBQUMsT0FBTyxDQUFDLFVBQUMsRUFBRTtZQUM5QixJQUFJLE1BQU0sR0FBRyxrQkFBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLEVBQUUsQ0FBQSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUEsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFBLENBQUM7WUFDbkIsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUFBLElBQUksQ0FBQSxDQUFDO1lBQ0YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ1osS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFDLEtBQUs7Z0JBQ2pCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUIsRUFBRSxDQUFBLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztvQkFDVixHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixDQUFDO0lBQ0wsQ0FBQztJQXBCZ0IsNkNBQWtDLHFDQW9CbEQsQ0FBQTtJQUVELG9CQUEyQixFQUFFO1FBQ3pCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNuQixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUMsVUFBQyxLQUFLLEVBQUUsR0FBRztZQUNoRSxFQUFFLENBQUEsQ0FBQyxHQUFHLEtBQUssVUFBVSxJQUFJLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQSxDQUFDO2dCQUN4QyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQVJlLHFCQUFVLGFBUXpCLENBQUE7SUFFRCxtQkFBMEIsR0FBRyxFQUFFLEVBQUU7UUFDOUIsR0FBRyxDQUFBLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUEsQ0FBQztZQUNkLEVBQUUsQ0FBQSxDQUFDLGtCQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssa0JBQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNuQixDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNoQixDQUFDO0lBTmUsb0JBQVMsWUFNeEIsQ0FBQTtJQUVELDZCQUFvQyxLQUFZLEVBQUUsR0FBVTtRQUMzRCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsTUFBTSxDQUFBLENBQUMsR0FBRyxDQUFDLENBQUEsQ0FBQztZQUNYLEtBQUssTUFBTTtnQkFDUixFQUFFLENBQUEsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDO29CQUNmLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUEsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDO29CQUNwQixTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixJQUFJO29CQUNELFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLEtBQUssQ0FBQztZQUNULEtBQUssT0FBTztnQkFDTixFQUFFLENBQUEsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDO29CQUNkLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxFQUFFLENBQUEsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDO29CQUNuQixTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJO29CQUNELFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBRXhCLEtBQUssQ0FBQztZQUNULEtBQUssUUFBUTtnQkFDVixTQUFTLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUMsS0FBSyxDQUFDO1lBQ1QsS0FBSyxRQUFRO2dCQUNWLFNBQVMsR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELEtBQUssQ0FBQztZQUNULEtBQUssU0FBUztnQkFDWCxJQUFJLEdBQUcsR0FBRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNDLEVBQUUsQ0FBQSxDQUFDLEdBQUcsQ0FBQztvQkFDSCxTQUFTLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUIsSUFBSTtvQkFDQSxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUNuQixLQUFLLENBQUM7WUFDVCxLQUFLLFVBQVU7Z0JBQ1osRUFBRSxDQUFBLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQztvQkFDaEIsU0FBUyxHQUFHLE9BQU8sQ0FBQztnQkFDeEIsSUFBSTtvQkFDQSxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixLQUFLLENBQUM7WUFDVDtnQkFDRyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxNQUFNLENBQUMsU0FBUyxDQUFDO0lBQ2xCLENBQUM7SUEzQ2UsOEJBQW1CLHNCQTJDbEMsQ0FBQTtBQUNILENBQUMsRUE5T00sVUFBVSxLQUFWLFVBQVUsUUE4T2hCOztBQy9PRCx5Q0FBeUM7QUFDekMsMkNBQTJDO0FBQzNDLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFFdEMsSUFBTyxVQUFVLENBb0RoQjtBQXBERCxXQUFPLFVBQVUsRUFBQyxDQUFDO0lBRU4sMEJBQWUsR0FBRyxxQkFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0I7UUFDM1EsVUFBQyxNQUFNLEVBQUUsZUFBa0QsRUFBRSxjQUEyRCxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFNBQTZCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCO1lBRTFSLE1BQU0sQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsV0FBVyxHQUFHO2dCQUNuQixJQUFJLEVBQUUsYUFBYTtnQkFDbkIscUJBQXFCLEVBQUUsS0FBSztnQkFDNUIsdUJBQXVCLEVBQUUsS0FBSztnQkFDOUIsV0FBVyxFQUFFLEtBQUs7Z0JBQ2xCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixhQUFhLEVBQUU7b0JBQ2IsVUFBVSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO2lCQUMxQztnQkFDRCxVQUFVLEVBQUU7b0JBQ1Y7d0JBQ0UsS0FBSyxFQUFFLElBQUk7d0JBQ1gsV0FBVyxFQUFFLE1BQU07d0JBQ25CLFdBQVcsRUFBRSxJQUFJO3dCQUNqQixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztxQkFDcEQ7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLFFBQVE7d0JBQ2YsV0FBVyxFQUFFLElBQUk7d0JBQ2pCLGVBQWUsRUFBRSxVQUFDLEtBQUs7NEJBQ3JCLHVDQUF1Qzs0QkFDdkMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUM5QyxDQUFDO3FCQUNGO29CQUNELEVBQUUsS0FBSyxFQUFFLFdBQVc7d0JBQ2xCLFdBQVcsRUFBRSxNQUFNO3dCQUNuQixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQzt3QkFDakUsZUFBZSxFQUFFLFVBQUMsS0FBSzs0QkFDckIsc0NBQXNDOzRCQUN0QyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7NEJBQzFDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQzs0QkFDMUMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDOzRCQUM5QyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7NEJBQzFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLENBQUM7d0JBQ3pDLENBQUM7cUJBQ0Y7aUJBQ0Y7YUFDRixDQUFDO1lBRUYsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM5SCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxFQXBETSxVQUFVLEtBQVYsVUFBVSxRQW9EaEI7O0FDekRELHlDQUF5QztBQUN6QywyQ0FBMkM7QUFFM0MsSUFBTyxVQUFVLENBc0hoQjtBQXRIRCxXQUFPLFVBQVUsRUFBQyxDQUFDO0lBRU4sc0NBQTJCLEdBQUcscUJBQVUsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCO1FBQzlQLFVBQUMsTUFBTSxFQUFFLGVBQWlELEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxTQUE2QixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGdCQUFnQjtZQUV6TSxNQUFNLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQztZQUNwQyxNQUFNLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQztZQUMvQixNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFO2dCQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLFdBQVcsR0FBRztnQkFDbkIsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIscUJBQXFCLEVBQUUsSUFBSTtnQkFDM0IsdUJBQXVCLEVBQUUsS0FBSztnQkFDOUIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixhQUFhLEVBQUU7b0JBQ2IsVUFBVSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO2lCQUMxQztnQkFDRCxVQUFVLEVBQUU7b0JBQ1Y7d0JBQ0UsS0FBSyxFQUFFLGVBQWU7d0JBQ3RCLFdBQVcsRUFBRSxNQUFNO3FCQUNwQjtvQkFDRDt3QkFDRSxLQUFLLEVBQUUsb0JBQW9CO3dCQUMzQixXQUFXLEVBQUUsV0FBVztxQkFDekI7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLDhCQUE4Qjt3QkFDckMsV0FBVyxFQUFFLGlCQUFpQjtxQkFDL0I7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLE1BQU07d0JBQ2IsV0FBVyxFQUFFLE1BQU07d0JBQ25CLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDO3FCQUNwRTtpQkFDRjthQUNGLENBQUM7WUFFRixJQUFJLFdBQVcsR0FBRztnQkFDaEIsTUFBTSxFQUFFLGlCQUFpQjtnQkFDekIsT0FBTyxFQUFFLHdCQUF3QjtnQkFDakMsTUFBTSxFQUFFLHVCQUF1QjthQUNoQyxDQUFDO1lBQ0YsTUFBTSxDQUFDLFVBQVUsR0FBRyxVQUFDLFNBQWdCO2dCQUNuQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEMsTUFBTSxDQUFDLGVBQWUsQ0FBQztnQkFDekIsQ0FBQztnQkFDRCxJQUFJO29CQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7WUFDeEQsQ0FBQyxDQUFBO1lBRUQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUU1SCxNQUFNLENBQUMsWUFBWSxHQUFHLFVBQUMsUUFBUTtnQkFDN0IsRUFBRSxDQUFDLDRCQUE0QixDQUFtQztvQkFDaEUsVUFBVSxFQUFFLFFBQVE7b0JBQ3BCLEtBQUssRUFBRSxPQUFPO29CQUNkLE9BQU8sRUFBRSxVQUFDLE1BQWM7d0JBQ3RCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7NEJBQ1gsd0JBQXdCLFFBQVEsRUFBRSxJQUFJO2dDQUNwQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29DQUNULFlBQVksQ0FBQyxJQUFJLEVBQUU7d0NBQ2pCLGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7b0NBQzdDLENBQUMsQ0FBQyxDQUFDO2dDQUNMLENBQUM7Z0NBQUMsSUFBSSxDQUFDLENBQUM7b0NBQ04sVUFBVSxFQUFFLENBQUM7Z0NBQ2YsQ0FBQzs0QkFDSCxDQUFDOzRCQUVELGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7d0JBQzdDLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxLQUFLLEVBQUUsMEJBQTBCO29CQUNqQyxNQUFNLEVBQUUsbURBQW1EO29CQUMzRCxNQUFNLEVBQUUsUUFBUTtvQkFDaEIsT0FBTyxFQUFFLFlBQVk7b0JBQ3JCLE1BQU0sRUFBRSw2Q0FBNkM7b0JBQ3JELFdBQVcsRUFBRSxxQkFBcUI7aUJBQ25DLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLENBQUMsQ0FBQztZQUVGLHNCQUFzQixTQUFTLEVBQUUsWUFBWTtnQkFDM0MsSUFBSSxJQUFJLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBQ3pELElBQUksR0FBRyxHQUFHLGlDQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN2QyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQzt3QkFDZixPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO3dCQUM3QyxZQUFZLEVBQUUsQ0FBQztvQkFDakIsQ0FBQyxDQUFDO3dCQUNGLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07d0JBQzNDLGNBQUcsQ0FBQyxJQUFJLENBQUMsdUNBQXVDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO29CQUN0RixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUM5RSxDQUFDO1lBQ0gsQ0FBQztZQUVEO2dCQUNFLElBQUksR0FBRyxHQUFHLG1DQUF3QixFQUFFLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO29CQUNaLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07b0JBQzdDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ1Qsd0RBQXdEO3dCQUN4RCxNQUFNLENBQUMsaUJBQWlCLEdBQUcsa0NBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUMvRCxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEIsQ0FBQztnQkFDSCxDQUFDLENBQUM7b0JBQ0YsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTtvQkFDM0MsY0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7Z0JBQ2hFLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUVELFVBQVUsRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMsRUF0SE0sVUFBVSxLQUFWLFVBQVUsUUFzSGhCOztBQ3pIRCx5Q0FBeUM7QUFDekMsNENBQTRDO0FBQzVDLElBQU8sVUFBVSxDQXFCaEI7QUFyQkQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVqQix5QkFBZ0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxjQUFjO1FBQzdELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztRQUNwQixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsVUFBQyxHQUFHO1lBQ3ZDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNqQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvQyxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoQyxNQUFNLENBQUMsWUFBWSxHQUFHO2dCQUNwQjtvQkFDRSxLQUFLLEVBQUUsY0FBYztpQkFDdEI7YUFDRixDQUFDO1FBQ0osQ0FBQztJQUVILENBQUM7SUFqQmUsMEJBQWUsa0JBaUI5QixDQUFBO0FBRUgsQ0FBQyxFQXJCTSxVQUFVLEtBQVYsVUFBVSxRQXFCaEI7O0FDdkJELHlDQUF5QztBQUV6QyxJQUFPLFVBQVUsQ0F5Mk5oQjtBQXoyTkQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVOLGlCQUFNLEdBQ2pCO1FBQ0UsSUFBSSxFQUFFLHNDQUFzQztRQUM1QyxTQUFTLEVBQUUsZ0NBQWdDO1FBQzNDLGFBQWEsRUFBRTtZQUNiLGVBQWUsRUFBRTtnQkFDZixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLEVBQUU7eUJBQ2xCO3FCQUNGO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwyQ0FBMkM7YUFDeEQ7WUFDRCw2Q0FBNkMsRUFBRTtnQkFDN0MsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsMkJBQTJCO3FCQUMzQztvQkFDRCxXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSxzQ0FBc0M7cUJBQ3REO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLG1CQUFtQjtxQkFDbkM7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsc0hBQXNIO3FCQUN0STtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsa0VBQWtFO2FBQy9FO1lBQ0QseUJBQXlCLEVBQUU7Z0JBQ3pCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsb0JBQW9CO3dCQUNuQyxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSxvQkFBb0I7eUJBQ3BDO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUscUJBQXFCO3dCQUNwQyxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSxxQkFBcUI7eUJBQ3JDO3FCQUNGO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSw4Q0FBOEM7YUFDM0Q7WUFDRCwrQkFBK0IsRUFBRTtnQkFDL0IsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSwrQkFBK0I7d0JBQzlDLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLCtCQUErQjt5QkFDL0M7cUJBQ0Y7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsa0RBQWtEO3FCQUNsRTtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwyRUFBMkU7cUJBQzNGO29CQUNELFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsK0NBQStDO3dCQUN2RCxVQUFVLEVBQUUsc0RBQXNEO3FCQUNuRTtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw2Q0FBNkM7cUJBQzdEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxvREFBb0Q7YUFDakU7WUFDRCxzQkFBc0IsRUFBRTtnQkFDdEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxtUEFBbVA7d0JBQ2xRLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLG1QQUFtUDt5QkFDblE7cUJBQ0Y7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSw2UEFBNlA7d0JBQzVRLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLDZQQUE2UDt5QkFDN1E7cUJBQ0Y7b0JBQ0QsS0FBSyxFQUFFO3dCQUNMLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSwwRUFBMEU7d0JBQ3pGLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsaUNBQWlDOzRCQUN6QyxVQUFVLEVBQUUsd0NBQXdDO3lCQUNyRDtxQkFDRjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw4RUFBOEU7cUJBQzlGO29CQUNELGlCQUFpQixFQUFFO3dCQUNqQixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGtDQUFrQztxQkFDbEQ7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxvQ0FBb0M7d0JBQzVDLFVBQVUsRUFBRSwyQ0FBMkM7cUJBQ3hEO29CQUNELGVBQWUsRUFBRTt3QkFDZixNQUFNLEVBQUUsZ0NBQWdDO3dCQUN4QyxVQUFVLEVBQUUsdUNBQXVDO3FCQUNwRDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx5RkFBeUY7d0JBQ3hHLFdBQVcsRUFBRSxFQUFFO3dCQUNmLFNBQVMsRUFBRSxpQ0FBaUM7cUJBQzdDO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsK0RBQStEO3dCQUM5RSxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLHdDQUF3Qzs0QkFDaEQsVUFBVSxFQUFFLCtDQUErQzt5QkFDNUQ7cUJBQ0Y7b0JBQ0QsZ0JBQWdCLEVBQUU7d0JBQ2hCLE1BQU0sRUFBRSxnQ0FBZ0M7d0JBQ3hDLFVBQVUsRUFBRSx1Q0FBdUM7cUJBQ3BEO29CQUNELFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsK0NBQStDO3dCQUN2RCxVQUFVLEVBQUUsc0RBQXNEO3FCQUNuRTtvQkFDRCxpQkFBaUIsRUFBRTt3QkFDakIsTUFBTSxFQUFFLDBDQUEwQzt3QkFDbEQsVUFBVSxFQUFFLGlEQUFpRDtxQkFDOUQ7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsc0dBQXNHO3FCQUN0SDtvQkFDRCx3QkFBd0IsRUFBRTt3QkFDeEIsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxzTEFBc0w7cUJBQ3RNO29CQUNELEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLHlEQUF5RDtxQkFDekU7b0JBQ0QsY0FBYyxFQUFFO3dCQUNkLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSx3RUFBd0U7d0JBQ3ZGLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsc0NBQXNDOzRCQUM5QyxVQUFVLEVBQUUsNkNBQTZDO3lCQUMxRDtxQkFDRjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwrRUFBK0U7cUJBQy9GO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwyQ0FBMkM7YUFDeEQ7WUFDRCwwQkFBMEIsRUFBRTtnQkFDMUIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osZUFBZSxFQUFFO3dCQUNmLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsa0RBQWtEO3FCQUNsRTtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw2QkFBNkI7cUJBQzdDO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLHdFQUF3RTtxQkFDeEY7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsMkdBQTJHO3FCQUMzSDtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwyREFBMkQ7cUJBQzNFO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwrQ0FBK0M7YUFDNUQ7WUFDRCwyQkFBMkIsRUFBRTtnQkFDM0IsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSxnREFBZ0Q7d0JBQ3hELFVBQVUsRUFBRSx1REFBdUQ7cUJBQ3BFO29CQUNELFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsbURBQW1EO3dCQUMzRCxVQUFVLEVBQUUsMERBQTBEO3FCQUN2RTtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLGdEQUFnRDt3QkFDeEQsVUFBVSxFQUFFLHVEQUF1RDtxQkFDcEU7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLGdEQUFnRDthQUM3RDtZQUNELGtDQUFrQyxFQUFFO2dCQUNsQyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxtREFBbUQ7cUJBQ25FO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSx1REFBdUQ7YUFDcEU7WUFDRCxxQ0FBcUMsRUFBRTtnQkFDckMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osYUFBYSxFQUFFO3dCQUNiLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsa0VBQWtFO3FCQUNsRjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSx3REFBd0Q7cUJBQ3hFO29CQUNELFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDZDQUE2QztxQkFDN0Q7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUseURBQXlEO3FCQUN6RTtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwyREFBMkQ7cUJBQzNFO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLG1EQUFtRDtxQkFDbkU7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsMkRBQTJEO3FCQUMzRTtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsMERBQTBEO2FBQ3ZFO1lBQ0Qsa0NBQWtDLEVBQUU7Z0JBQ2xDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGlEQUFpRDtxQkFDakU7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHVEQUF1RDthQUNwRTtZQUNELDRCQUE0QixFQUFFO2dCQUM1QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixhQUFhLEVBQUU7d0JBQ2IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxrS0FBa0s7cUJBQ2xMO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLG1GQUFtRjtxQkFDbkc7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsNkJBQTZCO3FCQUM3QztvQkFDRCxXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLHlDQUF5Qzt3QkFDakQsVUFBVSxFQUFFLGdEQUFnRDtxQkFDN0Q7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUseUZBQXlGO3dCQUN4RyxXQUFXLEVBQUUsRUFBRTt3QkFDZixTQUFTLEVBQUUsaUNBQWlDO3FCQUM3QztvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSxnRUFBZ0U7cUJBQ2hGO29CQUNELGNBQWMsRUFBRTt3QkFDZCxNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLHNEQUFzRDtxQkFDdEU7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSx5Q0FBeUM7d0JBQ2pELFVBQVUsRUFBRSxnREFBZ0Q7cUJBQzdEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxpREFBaUQ7YUFDOUQ7WUFDRCxpQ0FBaUMsRUFBRTtnQkFDakMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsMkpBQTJKO3FCQUMzSztpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsc0RBQXNEO2FBQ25FO1lBQ0QsNEJBQTRCLEVBQUU7Z0JBQzVCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLElBQUksRUFBRTt3QkFDSixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDRCQUE0QjtxQkFDNUM7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSwwQ0FBMEM7d0JBQ2xELFVBQVUsRUFBRSxpREFBaUQ7cUJBQzlEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxpREFBaUQ7YUFDOUQ7WUFDRCx5QkFBeUIsRUFBRTtnQkFDekIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsbUJBQW1CO3dCQUNsQyxXQUFXLEVBQUUsRUFBRTt3QkFDZixTQUFTLEVBQUUsaUNBQWlDO3FCQUM3QztvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSw2QkFBNkI7cUJBQzdDO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGdFQUFnRTtxQkFDaEY7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDhDQUE4QzthQUMzRDtZQUNELDJCQUEyQixFQUFFO2dCQUMzQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLDRDQUE0Qzt3QkFDM0QsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSwwQ0FBMEM7NEJBQ2xELFVBQVUsRUFBRSxpREFBaUQ7eUJBQzlEO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsb0RBQW9EO3dCQUNuRSxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLHVDQUF1Qzs0QkFDL0MsVUFBVSxFQUFFLDhDQUE4Qzt5QkFDM0Q7cUJBQ0Y7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLGdEQUFnRDthQUM3RDtZQUNELHNCQUFzQixFQUFFO2dCQUN0QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLFdBQVc7d0JBQ3RCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLHFDQUFxQzt3QkFDN0MsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxxREFBcUQ7d0JBQ3BFLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUseUNBQXlDOzRCQUNqRCxVQUFVLEVBQUUsZ0RBQWdEO3lCQUM3RDtxQkFDRjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsMkNBQTJDO2dCQUN2RCxnQkFBZ0IsRUFBRTtvQkFDaEIsNkNBQTZDO2lCQUM5QzthQUNGO1lBQ0QsMEJBQTBCLEVBQUU7Z0JBQzFCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLG1CQUFtQjt3QkFDbEMsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSxvQ0FBb0M7NEJBQzVDLFVBQVUsRUFBRSwyQ0FBMkM7eUJBQ3hEO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxlQUFlO3dCQUMxQixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwrQ0FBK0M7Z0JBQzNELGdCQUFnQixFQUFFO29CQUNoQixvREFBb0Q7b0JBQ3BELHdEQUF3RDtpQkFDekQ7YUFDRjtZQUNELG1CQUFtQixFQUFFO2dCQUNuQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwwREFBMEQ7d0JBQ3pFLFNBQVMsRUFBRSwwQkFBMEI7cUJBQ3RDO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHNQQUFzUDtxQkFDdFE7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSx1Q0FBdUM7d0JBQy9DLFVBQVUsRUFBRSw4Q0FBOEM7cUJBQzNEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSx3Q0FBd0M7YUFDckQ7WUFDRCx5QkFBeUIsRUFBRTtnQkFDekIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSw4Q0FBOEM7d0JBQ3RELFVBQVUsRUFBRSxxREFBcUQ7cUJBQ2xFO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSw4Q0FBOEM7YUFDM0Q7WUFDRCxrQkFBa0IsRUFBRTtnQkFDbEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLDZDQUE2QztxQkFDN0Q7b0JBQ0QsZ0JBQWdCLEVBQUU7d0JBQ2hCLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsZ0RBQWdEO3FCQUNoRTtvQkFDRCxnQkFBZ0IsRUFBRTt3QkFDaEIsTUFBTSxFQUFFLDBDQUEwQzt3QkFDbEQsVUFBVSxFQUFFLGlEQUFpRDtxQkFDOUQ7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLE9BQU87d0JBQ2xCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxlQUFlLEVBQUU7d0JBQ2YsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx5RUFBeUU7cUJBQ3pGO29CQUNELFNBQVMsRUFBRTt3QkFDVCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDREQUE0RDtxQkFDNUU7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLE9BQU87cUJBQ3ZCO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsc0NBQXNDO3dCQUM5QyxVQUFVLEVBQUUsNkNBQTZDO3FCQUMxRDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsdUNBQXVDO2dCQUNuRCxnQkFBZ0IsRUFBRTtvQkFDaEIsNkNBQTZDO2lCQUM5QzthQUNGO1lBQ0Qsc0JBQXNCLEVBQUU7Z0JBQ3RCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLGdCQUFnQjt3QkFDL0IsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSxnQ0FBZ0M7NEJBQ3hDLFVBQVUsRUFBRSx1Q0FBdUM7eUJBQ3BEO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxXQUFXO3dCQUN0QixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwyQ0FBMkM7Z0JBQ3ZELGdCQUFnQixFQUFFO29CQUNoQixvREFBb0Q7b0JBQ3BELHdEQUF3RDtpQkFDekQ7YUFDRjtZQUNELHdCQUF3QixFQUFFO2dCQUN4QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxvQ0FBb0M7cUJBQ3BEO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLCtDQUErQztxQkFDL0Q7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDZDQUE2QzthQUMxRDtZQUNELHVCQUF1QixFQUFFO2dCQUN2QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixTQUFTLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLHFKQUFxSjt3QkFDcEssT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSxRQUFROzRCQUNoQixhQUFhLEVBQUUscUpBQXFKO3lCQUNySztxQkFDRjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsNENBQTRDO2FBQ3pEO1lBQ0QsMENBQTBDLEVBQUU7Z0JBQzFDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDJCQUEyQjtxQkFDM0M7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsc0NBQXNDO3FCQUN0RDtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxxSEFBcUg7cUJBQ3JJO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLG1CQUFtQjtxQkFDbkM7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLCtEQUErRDthQUM1RTtZQUNELGdDQUFnQyxFQUFFO2dCQUNoQyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxnQkFBZ0I7cUJBQ2hDO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHdDQUF3QztxQkFDeEQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHFEQUFxRDthQUNsRTtZQUNELGtDQUFrQyxFQUFFO2dCQUNsQyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx5R0FBeUc7cUJBQ3pIO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLG1HQUFtRztxQkFDbkg7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsc0lBQXNJO3FCQUN0SjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsdURBQXVEO2FBQ3BFO1lBQ0QsMEJBQTBCLEVBQUU7Z0JBQzFCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDRDQUE0QztxQkFDNUQ7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsbUNBQW1DO3FCQUNuRDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLDJDQUEyQzt3QkFDbkQsVUFBVSxFQUFFLDZDQUE2QztxQkFDMUQ7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsd0JBQXdCO3FCQUN4QztpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsK0NBQStDO2FBQzVEO1lBQ0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUscUNBQXFDO3dCQUM3QyxVQUFVLEVBQUUsNENBQTRDO3FCQUN6RDtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLHdDQUF3Qzt3QkFDaEQsVUFBVSxFQUFFLCtDQUErQztxQkFDNUQ7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSwwQ0FBMEM7d0JBQ2xELFVBQVUsRUFBRSxpREFBaUQ7cUJBQzlEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSx5Q0FBeUM7YUFDdEQ7WUFDRCxpQ0FBaUMsRUFBRTtnQkFDakMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsd0dBQXdHO3FCQUN4SDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsc0RBQXNEO2FBQ25FO1lBQ0QsOEJBQThCLEVBQUU7Z0JBQzlCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDJCQUEyQjtxQkFDM0M7b0JBQ0QsS0FBSyxFQUFFO3dCQUNMLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsc0JBQXNCO3FCQUN0QztvQkFDRCxLQUFLLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSx5QkFBeUI7cUJBQ3pDO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLG1CQUFtQjtxQkFDbkM7b0JBQ0QsY0FBYyxFQUFFO3dCQUNkLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUscUJBQXFCO3FCQUNyQztpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsbURBQW1EO2FBQ2hFO1lBQ0Qsc0JBQXNCLEVBQUU7Z0JBQ3RCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsa0NBQWtDO3dCQUMxQyxVQUFVLEVBQUUseUNBQXlDO3FCQUN0RDtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLGtDQUFrQzt3QkFDMUMsVUFBVSxFQUFFLHlDQUF5QztxQkFDdEQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDJDQUEyQzthQUN4RDtZQUNELGlCQUFpQixFQUFFO2dCQUNqQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxpQkFBaUI7d0JBQ2hDLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsK0NBQStDOzRCQUN2RCxVQUFVLEVBQUUsNkNBQTZDO3lCQUMxRDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsTUFBTTt3QkFDakIsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsbUNBQW1DO3dCQUMzQyxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsb0RBQW9EO2dCQUNoRSxnQkFBZ0IsRUFBRTtvQkFDaEIsb0RBQW9EO29CQUNwRCx3REFBd0Q7aUJBQ3pEO2FBQ0Y7WUFDRCxxQkFBcUIsRUFBRTtnQkFDckIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osaUJBQWlCLEVBQUU7d0JBQ2pCLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsd0pBQXdKO3FCQUN4SztvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw2Q0FBNkM7cUJBQzdEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwwQ0FBMEM7YUFDdkQ7WUFDRCxnQ0FBZ0MsRUFBRTtnQkFDaEMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsMkJBQTJCO3FCQUMzQztvQkFDRCxJQUFJLEVBQUU7d0JBQ0osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw2QkFBNkI7cUJBQzdDO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxxREFBcUQ7YUFDbEU7WUFDRCwrQkFBK0IsRUFBRTtnQkFDL0IsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSw4QkFBOEI7d0JBQzdDLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsOENBQThDOzRCQUN0RCxVQUFVLEVBQUUscURBQXFEO3lCQUNsRTtxQkFDRjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsb0RBQW9EO2FBQ2pFO1lBQ0QsaUNBQWlDLEVBQUU7Z0JBQ2pDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDRGQUE0RjtxQkFDNUc7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHNEQUFzRDthQUNuRTtZQUNELHlCQUF5QixFQUFFO2dCQUN6QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLDhDQUE4Qzt3QkFDdEQsVUFBVSxFQUFFLHFEQUFxRDtxQkFDbEU7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsb0NBQW9DO3FCQUNwRDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsOENBQThDO2FBQzNEO1lBQ0QsaUNBQWlDLEVBQUU7Z0JBQ2pDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsd0JBQXdCO3dCQUN2QyxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLHVDQUF1Qzs0QkFDL0MsVUFBVSxFQUFFLDhDQUE4Qzt5QkFDM0Q7cUJBQ0Y7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHNEQUFzRDthQUNuRTtZQUNELDRCQUE0QixFQUFFO2dCQUM1QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw2R0FBNkc7cUJBQzdIO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLGdJQUFnSTtxQkFDaEo7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsOEdBQThHO3FCQUM5SDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsaURBQWlEO2FBQzlEO1lBQ0Qsc0JBQXNCLEVBQUU7Z0JBQ3RCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsV0FBVzt3QkFDdEIsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUscUNBQXFDO3dCQUM3QyxVQUFVLEVBQUUsNENBQTRDO3FCQUN6RDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLHdDQUF3Qzt3QkFDaEQsVUFBVSxFQUFFLCtDQUErQztxQkFDNUQ7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSwwQ0FBMEM7d0JBQ2xELFVBQVUsRUFBRSxpREFBaUQ7cUJBQzlEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwyQ0FBMkM7Z0JBQ3ZELGdCQUFnQixFQUFFO29CQUNoQiw2Q0FBNkM7aUJBQzlDO2FBQ0Y7WUFDRCwwQkFBMEIsRUFBRTtnQkFDMUIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsbUhBQW1IO3dCQUNsSSxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLG9DQUFvQzs0QkFDNUMsVUFBVSxFQUFFLDJDQUEyQzt5QkFDeEQ7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLGVBQWU7d0JBQzFCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLG1DQUFtQzt3QkFDM0MsVUFBVSxFQUFFLDBDQUEwQztxQkFDdkQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLCtDQUErQztnQkFDM0QsZ0JBQWdCLEVBQUU7b0JBQ2hCLG9EQUFvRDtvQkFDcEQsd0RBQXdEO2lCQUN6RDthQUNGO1lBQ0QsMEJBQTBCLEVBQUU7Z0JBQzFCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsNkpBQTZKO3dCQUM1SyxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSw2SkFBNko7eUJBQzdLO3FCQUNGO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwrQ0FBK0M7YUFDNUQ7WUFDRCw0QkFBNEIsRUFBRTtnQkFDNUIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUseUhBQXlIO3FCQUN6STtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsaURBQWlEO2FBQzlEO1lBQ0QsaUJBQWlCLEVBQUU7Z0JBQ2pCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsTUFBTTt3QkFDakIsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUscUNBQXFDO3dCQUM3QyxVQUFVLEVBQUUsNENBQTRDO3FCQUN6RDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLG1DQUFtQzt3QkFDM0MsVUFBVSxFQUFFLDBDQUEwQztxQkFDdkQ7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxzQ0FBc0M7Z0JBQ2xELGdCQUFnQixFQUFFO29CQUNoQiw2Q0FBNkM7aUJBQzlDO2FBQ0Y7WUFDRCx3QkFBd0IsRUFBRTtnQkFDeEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsa0JBQWtCO3FCQUNsQztvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxtQkFBbUI7cUJBQ25DO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSw2Q0FBNkM7YUFDMUQ7WUFDRCwwQkFBMEIsRUFBRTtnQkFDMUIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osbUJBQW1CLEVBQUU7d0JBQ25CLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsaURBQWlEO3FCQUNqRTtvQkFDRCxvQkFBb0IsRUFBRTt3QkFDcEIsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw0REFBNEQ7cUJBQzVFO29CQUNELFNBQVMsRUFBRTt3QkFDVCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGlFQUFpRTtxQkFDakY7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsb0RBQW9EO3FCQUNwRTtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx5QkFBeUI7cUJBQ3pDO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHdCQUF3QjtxQkFDeEM7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLCtDQUErQzthQUM1RDtZQUNELHFCQUFxQixFQUFFO2dCQUNyQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxlQUFlO3dCQUM5QixPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLCtCQUErQjs0QkFDdkMsVUFBVSxFQUFFLHNDQUFzQzt5QkFDbkQ7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLFVBQVU7d0JBQ3JCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLG1DQUFtQzt3QkFDM0MsVUFBVSxFQUFFLDBDQUEwQztxQkFDdkQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDBDQUEwQztnQkFDdEQsZ0JBQWdCLEVBQUU7b0JBQ2hCLG9EQUFvRDtvQkFDcEQsd0RBQXdEO2lCQUN6RDthQUNGO1lBQ0QscUJBQXFCLEVBQUU7Z0JBQ3JCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGtJQUFrSTtxQkFDbEo7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsbUNBQW1DO3FCQUNuRDtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw0SEFBNEg7cUJBQzVJO29CQUNELGVBQWUsRUFBRTt3QkFDZixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLG1IQUFtSDtxQkFDbkk7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDBDQUEwQzthQUN2RDtZQUNELHVCQUF1QixFQUFFO2dCQUN2QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLDRHQUE0Rzt3QkFDM0gsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSxzQ0FBc0M7NEJBQzlDLFVBQVUsRUFBRSw2Q0FBNkM7eUJBQzFEO3FCQUNGO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDZHQUE2Rzt3QkFDNUgsc0JBQXNCLEVBQUU7NEJBQ3RCLE1BQU0sRUFBRSw0Q0FBNEM7NEJBQ3BELFVBQVUsRUFBRSwwQ0FBMEM7eUJBQ3ZEO3dCQUNELFVBQVUsRUFBRSwwRUFBMEU7cUJBQ3ZGO29CQUNELFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUscUdBQXFHO3dCQUNwSCxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLHdDQUF3Qzs0QkFDaEQsVUFBVSxFQUFFLCtDQUErQzt5QkFDNUQ7cUJBQ0Y7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSx5Q0FBeUM7d0JBQ2pELFVBQVUsRUFBRSxnREFBZ0Q7cUJBQzdEO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLG1IQUFtSDtxQkFDbkk7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDRDQUE0QzthQUN6RDtZQUNELDJCQUEyQixFQUFFO2dCQUMzQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw2Q0FBNkM7cUJBQzdEO29CQUNELHlCQUF5QixFQUFFO3dCQUN6QixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGlHQUFpRztxQkFDakg7b0JBQ0QsZUFBZSxFQUFFO3dCQUNmLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsaUZBQWlGO3FCQUNqRztvQkFDRCxrQkFBa0IsRUFBRTt3QkFDbEIsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx5Q0FBeUM7cUJBQ3pEO29CQUNELGdCQUFnQixFQUFFO3dCQUNoQixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHNDQUFzQztxQkFDdEQ7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsaUNBQWlDO3FCQUNqRDtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw0RkFBNEY7cUJBQzVHO29CQUNELFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGtDQUFrQztxQkFDbEQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLGdEQUFnRDthQUM3RDtZQUNELGdDQUFnQyxFQUFFO2dCQUNoQyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw2RUFBNkU7cUJBQzdGO29CQUNELFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDBEQUEwRDtxQkFDMUU7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHFEQUFxRDthQUNsRTtZQUNELHVCQUF1QixFQUFFO2dCQUN2QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixhQUFhLEVBQUU7d0JBQ2IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwyTEFBMkw7d0JBQzFNLHNCQUFzQixFQUFFOzRCQUN0QixNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLDJMQUEyTDt5QkFDM007d0JBQ0QsVUFBVSxFQUFFLHdDQUF3QztxQkFDckQ7b0JBQ0QsbUJBQW1CLEVBQUU7d0JBQ25CLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsaUZBQWlGO3FCQUNqRztvQkFDRCxtQkFBbUIsRUFBRTt3QkFDbkIsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwySEFBMkg7cUJBQzNJO29CQUNELGNBQWMsRUFBRTt3QkFDZCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHNHQUFzRztxQkFDdEg7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsK0dBQStHO3dCQUM5SCxVQUFVLEVBQUUsTUFBTTtxQkFDbkI7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsMk1BQTJNO3dCQUMxTixzQkFBc0IsRUFBRTs0QkFDdEIsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSwyTUFBMk07eUJBQzNOO3dCQUNELFVBQVUsRUFBRSx3Q0FBd0M7cUJBQ3JEO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDhKQUE4Sjt3QkFDN0ssV0FBVyxFQUFFLEVBQUU7d0JBQ2YsU0FBUyxFQUFFLGlDQUFpQztxQkFDN0M7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsZ0lBQWdJO3dCQUMvSSxXQUFXLEVBQUUsR0FBRzt3QkFDaEIsU0FBUyxFQUFFLG9FQUFvRTtxQkFDaEY7b0JBQ0QsaUJBQWlCLEVBQUU7d0JBQ2pCLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsd0pBQXdKO3FCQUN4SztvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw2Q0FBNkM7cUJBQzdEO29CQUNELEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDRJQUE0STtxQkFDNUo7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDRDQUE0QzthQUN6RDtZQUNELDRCQUE0QixFQUFFO2dCQUM1QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw2QkFBNkI7cUJBQzdDO29CQUNELFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGtFQUFrRTtxQkFDbEY7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsaUdBQWlHO3FCQUNqSDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw0RkFBNEY7cUJBQzVHO29CQUNELFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDBGQUEwRjtxQkFDMUc7b0JBQ0QsaUJBQWlCLEVBQUU7d0JBQ2pCLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsMERBQTBEO3FCQUMxRTtvQkFDRCxLQUFLLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwwRkFBMEY7cUJBQzFHO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxpREFBaUQ7YUFDOUQ7WUFDRCw2QkFBNkIsRUFBRTtnQkFDN0IsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxrQkFBa0I7d0JBQzdCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLHFDQUFxQzt3QkFDN0MsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSwrQ0FBK0M7d0JBQ3ZELFVBQVUsRUFBRSxzREFBc0Q7cUJBQ25FO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsaURBQWlEO3dCQUN6RCxVQUFVLEVBQUUsd0RBQXdEO3FCQUNyRTtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsa0RBQWtEO2dCQUM5RCxnQkFBZ0IsRUFBRTtvQkFDaEIsNkNBQTZDO2lCQUM5QzthQUNGO1lBQ0Qsa0NBQWtDLEVBQUU7Z0JBQ2xDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsdUJBQXVCO3dCQUNsQyxVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsb0RBQW9EO3dCQUM1RCxVQUFVLEVBQUUsMkRBQTJEO3FCQUN4RTtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLHNEQUFzRDt3QkFDOUQsVUFBVSxFQUFFLDZEQUE2RDtxQkFDMUU7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHVEQUF1RDtnQkFDbkUsZ0JBQWdCLEVBQUU7b0JBQ2hCLDZDQUE2QztpQkFDOUM7YUFDRjtZQUNELHNDQUFzQyxFQUFFO2dCQUN0QyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxrSUFBa0k7d0JBQ2pKLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsZ0RBQWdEOzRCQUN4RCxVQUFVLEVBQUUsdURBQXVEO3lCQUNwRTtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsMkJBQTJCO3dCQUN0QyxVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwyREFBMkQ7Z0JBQ3ZFLGdCQUFnQixFQUFFO29CQUNoQixvREFBb0Q7b0JBQ3BELHdEQUF3RDtpQkFDekQ7YUFDRjtZQUNELHNDQUFzQyxFQUFFO2dCQUN0QyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixhQUFhLEVBQUU7d0JBQ2IsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLHVJQUF1STt3QkFDdEosT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSxRQUFROzRCQUNoQixhQUFhLEVBQUUsdUlBQXVJO3lCQUN2SjtxQkFDRjtvQkFDRCxXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLCtDQUErQzt3QkFDdkQsVUFBVSxFQUFFLHNEQUFzRDtxQkFDbkU7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsbUVBQW1FO3FCQUNuRjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsMkRBQTJEO2FBQ3hFO1lBQ0Qsd0NBQXdDLEVBQUU7Z0JBQ3hDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLGFBQWEsRUFBRTt3QkFDYixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsOEhBQThIO3dCQUM3SSxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSw4SEFBOEg7eUJBQzlJO3FCQUNGO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHFDQUFxQzt3QkFDcEQsc0JBQXNCLEVBQUU7NEJBQ3RCLE1BQU0sRUFBRSw0Q0FBNEM7NEJBQ3BELFVBQVUsRUFBRSwwQ0FBMEM7eUJBQ3ZEO3dCQUNELFVBQVUsRUFBRSwwRUFBMEU7cUJBQ3ZGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGdDQUFnQztxQkFDaEQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDZEQUE2RDthQUMxRTtZQUNELDhDQUE4QyxFQUFFO2dCQUM5QyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxxS0FBcUs7cUJBQ3JMO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLG9EQUFvRDtxQkFDcEU7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLG1FQUFtRTthQUNoRjtZQUNELGlDQUFpQyxFQUFFO2dCQUNqQyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxtR0FBbUc7d0JBQ2xILE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsMkNBQTJDOzRCQUNuRCxVQUFVLEVBQUUsa0RBQWtEO3lCQUMvRDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsc0JBQXNCO3dCQUNqQyxVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxzREFBc0Q7Z0JBQ2xFLGdCQUFnQixFQUFFO29CQUNoQixvREFBb0Q7b0JBQ3BELHdEQUF3RDtpQkFDekQ7YUFDRjtZQUNELG1DQUFtQyxFQUFFO2dCQUNuQyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixzQkFBc0IsRUFBRTt3QkFDdEIsTUFBTSxFQUFFLDJEQUEyRDt3QkFDbkUsVUFBVSxFQUFFLGtFQUFrRTtxQkFDL0U7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSw2Q0FBNkM7d0JBQ3JELFVBQVUsRUFBRSxvREFBb0Q7cUJBQ2pFO29CQUNELG1CQUFtQixFQUFFO3dCQUNuQixNQUFNLEVBQUUsd0RBQXdEO3dCQUNoRSxVQUFVLEVBQUUsK0RBQStEO3FCQUM1RTtvQkFDRCxXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLGdEQUFnRDt3QkFDeEQsVUFBVSxFQUFFLHVEQUF1RDtxQkFDcEU7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSwrQ0FBK0M7d0JBQ3ZELFVBQVUsRUFBRSxzREFBc0Q7cUJBQ25FO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsNENBQTRDO3dCQUNwRCxVQUFVLEVBQUUsbURBQW1EO3FCQUNoRTtvQkFDRCxLQUFLLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLDBDQUEwQzt3QkFDbEQsVUFBVSxFQUFFLGlEQUFpRDtxQkFDOUQ7b0JBQ0QsS0FBSyxFQUFFO3dCQUNMLE1BQU0sRUFBRSwwQ0FBMEM7d0JBQ2xELFVBQVUsRUFBRSxpREFBaUQ7cUJBQzlEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSx3REFBd0Q7YUFDckU7WUFDRCxpQ0FBaUMsRUFBRTtnQkFDakMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osYUFBYSxFQUFFO3dCQUNiLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSx3SEFBd0g7d0JBQ3ZJLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLHdIQUF3SDt5QkFDeEk7cUJBQ0Y7b0JBQ0Qsc0JBQXNCLEVBQUU7d0JBQ3RCLE1BQU0sRUFBRSwyREFBMkQ7d0JBQ25FLFVBQVUsRUFBRSxrRUFBa0U7cUJBQy9FO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGtKQUFrSjt3QkFDakssc0JBQXNCLEVBQUU7NEJBQ3RCLE1BQU0sRUFBRSw0Q0FBNEM7NEJBQ3BELFVBQVUsRUFBRSwwQ0FBMEM7eUJBQ3ZEO3dCQUNELFVBQVUsRUFBRSwwRUFBMEU7cUJBQ3ZGO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsNkNBQTZDO3dCQUNyRCxVQUFVLEVBQUUsb0RBQW9EO3FCQUNqRTtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLDBDQUEwQzt3QkFDbEQsVUFBVSxFQUFFLGlEQUFpRDtxQkFDOUQ7b0JBQ0QsbUJBQW1CLEVBQUU7d0JBQ25CLE1BQU0sRUFBRSx3REFBd0Q7d0JBQ2hFLFVBQVUsRUFBRSwrREFBK0Q7cUJBQzVFO29CQUNELFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsZ0RBQWdEO3dCQUN4RCxVQUFVLEVBQUUsdURBQXVEO3FCQUNwRTtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLCtDQUErQzt3QkFDdkQsVUFBVSxFQUFFLHNEQUFzRDtxQkFDbkU7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSw0Q0FBNEM7d0JBQ3BELFVBQVUsRUFBRSxtREFBbUQ7cUJBQ2hFO29CQUNELEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsMENBQTBDO3dCQUNsRCxVQUFVLEVBQUUsaURBQWlEO3FCQUM5RDtvQkFDRCwrQkFBK0IsRUFBRTt3QkFDL0IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxtUkFBbVI7cUJBQ25TO29CQUNELEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsMENBQTBDO3dCQUNsRCxVQUFVLEVBQUUsaURBQWlEO3FCQUM5RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsc0RBQXNEO2FBQ25FO1lBQ0QsbUNBQW1DLEVBQUU7Z0JBQ25DLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFNBQVMsRUFBRTt3QkFDVCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGlGQUFpRjtxQkFDakc7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsdUhBQXVIO3FCQUN2STtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxtREFBbUQ7cUJBQ25FO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSx3REFBd0Q7YUFDckU7WUFDRCxnQkFBZ0IsRUFBRTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxLQUFLO3dCQUNoQixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsa0NBQWtDO3dCQUMxQyxVQUFVLEVBQUUseUNBQXlDO3FCQUN0RDtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLG9DQUFvQzt3QkFDNUMsVUFBVSxFQUFFLDJDQUEyQztxQkFDeEQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHFDQUFxQztnQkFDakQsZ0JBQWdCLEVBQUU7b0JBQ2hCLDZDQUE2QztpQkFDOUM7YUFDRjtZQUNELHlCQUF5QixFQUFFO2dCQUN6QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx5QkFBeUI7cUJBQ3pDO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHVCQUF1QjtxQkFDdkM7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDhDQUE4QzthQUMzRDtZQUNELG9CQUFvQixFQUFFO2dCQUNwQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSx1RUFBdUU7d0JBQ3RGLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsOEJBQThCOzRCQUN0QyxVQUFVLEVBQUUscUNBQXFDO3lCQUNsRDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsU0FBUzt3QkFDcEIsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsbUNBQW1DO3dCQUMzQyxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUseUNBQXlDO2dCQUNyRCxnQkFBZ0IsRUFBRTtvQkFDaEIsb0RBQW9EO29CQUNwRCx3REFBd0Q7aUJBQ3pEO2FBQ0Y7WUFDRCxvQkFBb0IsRUFBRTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osdUJBQXVCLEVBQUU7d0JBQ3ZCLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsVUFBVSxFQUFFLE1BQU07cUJBQ25CO29CQUNELFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsMk5BQTJOO3dCQUMxTyxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLG9DQUFvQzs0QkFDNUMsVUFBVSxFQUFFLDJDQUEyQzt5QkFDeEQ7cUJBQ0Y7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsOEVBQThFO3FCQUM5RjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxZQUFZO3FCQUM1QjtvQkFDRCxhQUFhLEVBQUU7d0JBQ2IsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSx3Q0FBd0M7cUJBQ3hEO29CQUNELGtCQUFrQixFQUFFO3dCQUNsQixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsZ01BQWdNO3dCQUMvTSxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLCtDQUErQzs0QkFDdkQsVUFBVSxFQUFFLHNEQUFzRDt5QkFDbkU7cUJBQ0Y7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsNkJBQTZCO3FCQUM3QztvQkFDRCxjQUFjLEVBQUU7d0JBQ2QsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw4SkFBOEo7d0JBQzdLLHNCQUFzQixFQUFFOzRCQUN0QixNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLDhKQUE4Sjt5QkFDOUs7d0JBQ0QsVUFBVSxFQUFFLHdDQUF3QztxQkFDckQ7b0JBQ0QsZUFBZSxFQUFFO3dCQUNmLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsaUVBQWlFO3FCQUNqRjtvQkFDRCxnQkFBZ0IsRUFBRTt3QkFDaEIsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw0Q0FBNEM7cUJBQzVEO29CQUNELG9CQUFvQixFQUFFO3dCQUNwQixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLG9IQUFvSDtxQkFDcEk7b0JBQ0QsK0JBQStCLEVBQUU7d0JBQy9CLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsbU5BQW1OO3dCQUNsTyxVQUFVLEVBQUUsTUFBTTtxQkFDbkI7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxvSUFBb0k7d0JBQ25KLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsaUNBQWlDOzRCQUN6QyxVQUFVLEVBQUUsd0NBQXdDO3lCQUNyRDtxQkFDRjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUseUNBQXlDO2FBQ3REO1lBQ0Qsc0JBQXNCLEVBQUU7Z0JBQ3RCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsNEdBQTRHO3dCQUMzSCxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLHVDQUF1Qzs0QkFDL0MsVUFBVSxFQUFFLDhDQUE4Qzt5QkFDM0Q7cUJBQ0Y7b0JBQ0QsbUJBQW1CLEVBQUU7d0JBQ25CLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSw4R0FBOEc7d0JBQzdILE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsMENBQTBDOzRCQUNsRCxVQUFVLEVBQUUsaURBQWlEO3lCQUM5RDtxQkFDRjtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxpRkFBaUY7cUJBQ2pHO29CQUNELFNBQVMsRUFBRTt3QkFDVCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGtGQUFrRjtxQkFDbEc7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsdUdBQXVHO3FCQUN2SDtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxtR0FBbUc7cUJBQ25IO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLG9GQUFvRjtxQkFDcEc7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsb0pBQW9KO3FCQUNwSztpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsMkNBQTJDO2FBQ3hEO1lBQ0QsNEJBQTRCLEVBQUU7Z0JBQzVCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUscUNBQXFDO3dCQUM3QyxVQUFVLEVBQUUsNENBQTRDO3FCQUN6RDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLGtDQUFrQzt3QkFDMUMsVUFBVSxFQUFFLHlDQUF5QztxQkFDdEQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLGlEQUFpRDthQUM5RDtZQUNELGtCQUFrQixFQUFFO2dCQUNsQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLHFDQUFxQzt3QkFDN0MsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSx3Q0FBd0M7d0JBQ2hELFVBQVUsRUFBRSwrQ0FBK0M7cUJBQzVEO29CQUNELHFCQUFxQixFQUFFO3dCQUNyQixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLHdLQUF3Szt3QkFDdkwsVUFBVSxFQUFFLE1BQU07cUJBQ25CO29CQUNELFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsMENBQTBDO3dCQUNsRCxVQUFVLEVBQUUsaURBQWlEO3FCQUM5RDtvQkFDRCxnQkFBZ0IsRUFBRTt3QkFDaEIsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSw2SkFBNko7d0JBQzVLLFVBQVUsRUFBRSxNQUFNO3FCQUNuQjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsdUNBQXVDO2FBQ3BEO1lBQ0QsNEJBQTRCLEVBQUU7Z0JBQzVCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDJCQUEyQjtxQkFDM0M7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsd0ZBQXdGO3FCQUN4RztvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw4SkFBOEo7cUJBQzlLO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUscUdBQXFHO3dCQUNwSCxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSxxR0FBcUc7eUJBQ3JIO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGlIQUFpSDtxQkFDakk7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsMkhBQTJIO3FCQUMzSTtvQkFDRCxXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLCtDQUErQzt3QkFDdkQsVUFBVSxFQUFFLHNEQUFzRDtxQkFDbkU7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsbUhBQW1IO3FCQUNuSTtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsaURBQWlEO2FBQzlEO1lBQ0Qsa0NBQWtDLEVBQUU7Z0JBQ2xDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsdUJBQXVCO3dCQUNsQyxVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsb0RBQW9EO3dCQUM1RCxVQUFVLEVBQUUsMkRBQTJEO3FCQUN4RTtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLHNEQUFzRDt3QkFDOUQsVUFBVSxFQUFFLDZEQUE2RDtxQkFDMUU7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHVEQUF1RDtnQkFDbkUsZ0JBQWdCLEVBQUU7b0JBQ2hCLDZDQUE2QztpQkFDOUM7YUFDRjtZQUNELHNDQUFzQyxFQUFFO2dCQUN0QyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSw0R0FBNEc7d0JBQzNILE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsZ0RBQWdEOzRCQUN4RCxVQUFVLEVBQUUsdURBQXVEO3lCQUNwRTtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsMkJBQTJCO3dCQUN0QyxVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwyREFBMkQ7Z0JBQ3ZFLGdCQUFnQixFQUFFO29CQUNoQixvREFBb0Q7b0JBQ3BELHdEQUF3RDtpQkFDekQ7YUFDRjtZQUNELHNDQUFzQyxFQUFFO2dCQUN0QyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSx1SkFBdUo7cUJBQ3ZLO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGdHQUFnRzt3QkFDL0csc0JBQXNCLEVBQUU7NEJBQ3RCLE1BQU0sRUFBRSxRQUFROzRCQUNoQixhQUFhLEVBQUUsZ0dBQWdHO3lCQUNoSDt3QkFDRCxVQUFVLEVBQUUsd0NBQXdDO3FCQUNyRDtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLDBDQUEwQzt3QkFDbEQsVUFBVSxFQUFFLGlEQUFpRDtxQkFDOUQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDJEQUEyRDthQUN4RTtZQUNELHdDQUF3QyxFQUFFO2dCQUN4QyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixvQkFBb0IsRUFBRTt3QkFDcEIsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSw4RUFBOEU7d0JBQzdGLFVBQVUsRUFBRSxNQUFNO3FCQUNuQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSxzSkFBc0o7cUJBQ3RLO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSw2REFBNkQ7YUFDMUU7WUFDRCwwQkFBMEIsRUFBRTtnQkFDMUIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxlQUFlO3dCQUMxQixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsNENBQTRDO3dCQUNwRCxVQUFVLEVBQUUsbURBQW1EO3FCQUNoRTtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLDhDQUE4Qzt3QkFDdEQsVUFBVSxFQUFFLHFEQUFxRDtxQkFDbEU7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLCtDQUErQztnQkFDM0QsZ0JBQWdCLEVBQUU7b0JBQ2hCLDZDQUE2QztpQkFDOUM7YUFDRjtZQUNELDhCQUE4QixFQUFFO2dCQUM5QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxpS0FBaUs7d0JBQ2hMLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsd0NBQXdDOzRCQUNoRCxVQUFVLEVBQUUsK0NBQStDO3lCQUM1RDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsbUJBQW1CO3dCQUM5QixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxtREFBbUQ7Z0JBQy9ELGdCQUFnQixFQUFFO29CQUNoQixvREFBb0Q7b0JBQ3BELHdEQUF3RDtpQkFDekQ7YUFDRjtZQUNELDhCQUE4QixFQUFFO2dCQUM5QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx1TEFBdUw7d0JBQ3RNLHNCQUFzQixFQUFFOzRCQUN0QixNQUFNLEVBQUUsNENBQTRDOzRCQUNwRCxVQUFVLEVBQUUsMENBQTBDO3lCQUN2RDt3QkFDRCxVQUFVLEVBQUUsMEVBQTBFO3FCQUN2RjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsbURBQW1EO2FBQ2hFO1lBQ0QsZ0NBQWdDLEVBQUU7Z0JBQ2hDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHdMQUF3TDt3QkFDdk0sc0JBQXNCLEVBQUU7NEJBQ3RCLE1BQU0sRUFBRSw0Q0FBNEM7NEJBQ3BELFVBQVUsRUFBRSwwQ0FBMEM7eUJBQ3ZEO3dCQUNELFVBQVUsRUFBRSwwRUFBMEU7cUJBQ3ZGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDJFQUEyRTt3QkFDMUYsc0JBQXNCLEVBQUU7NEJBQ3RCLE1BQU0sRUFBRSw0Q0FBNEM7NEJBQ3BELFVBQVUsRUFBRSwwQ0FBMEM7eUJBQ3ZEO3dCQUNELFVBQVUsRUFBRSwwRUFBMEU7cUJBQ3ZGO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxxREFBcUQ7YUFDbEU7WUFDRCxpQ0FBaUMsRUFBRTtnQkFDakMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsK0hBQStIO3dCQUM5SSxzQkFBc0IsRUFBRTs0QkFDdEIsTUFBTSxFQUFFLDRDQUE0Qzs0QkFDcEQsVUFBVSxFQUFFLDBDQUEwQzt5QkFDdkQ7d0JBQ0QsVUFBVSxFQUFFLDBFQUEwRTtxQkFDdkY7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsK0VBQStFO3dCQUM5RixzQkFBc0IsRUFBRTs0QkFDdEIsTUFBTSxFQUFFLDRDQUE0Qzs0QkFDcEQsVUFBVSxFQUFFLDBDQUEwQzt5QkFDdkQ7d0JBQ0QsVUFBVSxFQUFFLDBFQUEwRTtxQkFDdkY7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHNEQUFzRDthQUNuRTtZQUNELHFDQUFxQyxFQUFFO2dCQUNyQyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxxQ0FBcUM7cUJBQ3JEO29CQUNELEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLGtEQUFrRDt3QkFDakUsVUFBVSxFQUFFLE1BQU07cUJBQ25CO29CQUNELGFBQWEsRUFBRTt3QkFDYixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLHNDQUFzQzt3QkFDckQsVUFBVSxFQUFFLE1BQU07cUJBQ25CO29CQUNELGFBQWEsRUFBRTt3QkFDYixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLHNDQUFzQzt3QkFDckQsVUFBVSxFQUFFLE1BQU07cUJBQ25CO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwwREFBMEQ7YUFDdkU7WUFDRCwwQ0FBMEMsRUFBRTtnQkFDMUMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osZ0JBQWdCLEVBQUU7d0JBQ2hCLE1BQU0sRUFBRSx5Q0FBeUM7d0JBQ2pELFVBQVUsRUFBRSxnREFBZ0Q7cUJBQzdEO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLCtDQUErQztxQkFDL0Q7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLCtEQUErRDthQUM1RTtZQUNELDJCQUEyQixFQUFFO2dCQUMzQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxzR0FBc0c7cUJBQ3RIO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHFHQUFxRztxQkFDckg7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUscUdBQXFHO3FCQUNySDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxxR0FBcUc7cUJBQ3JIO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxnREFBZ0Q7YUFDN0Q7WUFDRCxtQkFBbUIsRUFBRTtnQkFDbkIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGtPQUFrTzt3QkFDalAsc0JBQXNCLEVBQUU7NEJBQ3RCLE1BQU0sRUFBRSxRQUFROzRCQUNoQixhQUFhLEVBQUUsa09BQWtPO3lCQUNsUDt3QkFDRCxVQUFVLEVBQUUsd0NBQXdDO3FCQUNyRDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsUUFBUTt3QkFDbkIsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUscUNBQXFDO3dCQUM3QyxVQUFVLEVBQUUsNENBQTRDO3FCQUN6RDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx1REFBdUQ7cUJBQ3ZFO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSx3Q0FBd0M7Z0JBQ3BELGdCQUFnQixFQUFFO29CQUNoQiw2Q0FBNkM7aUJBQzlDO2FBQ0Y7WUFDRCx1QkFBdUIsRUFBRTtnQkFDdkIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsK0ZBQStGO3dCQUM5RyxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLGlDQUFpQzs0QkFDekMsVUFBVSxFQUFFLHdDQUF3Qzt5QkFDckQ7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLFlBQVk7d0JBQ3ZCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLG1DQUFtQzt3QkFDM0MsVUFBVSxFQUFFLDBDQUEwQztxQkFDdkQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDRDQUE0QztnQkFDeEQsZ0JBQWdCLEVBQUU7b0JBQ2hCLG9EQUFvRDtvQkFDcEQsd0RBQXdEO2lCQUN6RDthQUNGO1lBQ0QsK0JBQStCLEVBQUU7Z0JBQy9CLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLCtIQUErSDtxQkFDL0k7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLG9EQUFvRDthQUNqRTtZQUNELDRCQUE0QixFQUFFO2dCQUM1QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixjQUFjLEVBQUU7d0JBQ2QsTUFBTSxFQUFFLHVDQUF1Qzt3QkFDL0MsVUFBVSxFQUFFLDhDQUE4QztxQkFDM0Q7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsd0hBQXdIO3FCQUN4STtvQkFDRCxjQUFjLEVBQUU7d0JBQ2QsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSx5SEFBeUg7cUJBQ3pJO29CQUNELFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLDRJQUE0STt3QkFDM0osVUFBVSxFQUFFLE1BQU07cUJBQ25CO29CQUNELGdCQUFnQixFQUFFO3dCQUNoQixNQUFNLEVBQUUseUNBQXlDO3dCQUNqRCxVQUFVLEVBQUUsZ0RBQWdEO3FCQUM3RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsaURBQWlEO2FBQzlEO1lBQ0QsdUNBQXVDLEVBQUU7Z0JBQ3ZDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLDBCQUEwQixFQUFFO3dCQUMxQixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLDZDQUE2QztxQkFDN0Q7b0JBQ0Qsa0JBQWtCLEVBQUU7d0JBQ2xCLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsa0RBQWtEO3FCQUNsRTtvQkFDRCxnQkFBZ0IsRUFBRTt3QkFDaEIsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSxtREFBbUQ7cUJBQ25FO29CQUNELDBCQUEwQixFQUFFO3dCQUMxQixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLHVDQUF1QztxQkFDdkQ7b0JBQ0QscUJBQXFCLEVBQUU7d0JBQ3JCLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSwyQ0FBMkM7d0JBQzFELE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLDJDQUEyQzt5QkFDM0Q7cUJBQ0Y7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsdURBQXVEO3dCQUN0RSxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSx1REFBdUQ7eUJBQ3ZFO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSw0QkFBNEI7d0JBQ3ZDLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLHFDQUFxQzt3QkFDN0MsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxtREFBbUQ7d0JBQzNELFVBQVUsRUFBRSwwREFBMEQ7cUJBQ3ZFO29CQUNELGdCQUFnQixFQUFFO3dCQUNoQixNQUFNLEVBQUUsd0RBQXdEO3dCQUNoRSxVQUFVLEVBQUUsK0RBQStEO3FCQUM1RTtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLHNEQUFzRDt3QkFDckUsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSxRQUFROzRCQUNoQixhQUFhLEVBQUUsc0RBQXNEO3lCQUN0RTtxQkFDRjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsNERBQTREO2dCQUN4RSxnQkFBZ0IsRUFBRTtvQkFDaEIsNkNBQTZDO2lCQUM5QzthQUNGO1lBQ0QsMkNBQTJDLEVBQUU7Z0JBQzNDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUscURBQXFEOzRCQUM3RCxVQUFVLEVBQUUsNERBQTREO3lCQUN6RTtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsZ0NBQWdDO3dCQUMzQyxVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxnRUFBZ0U7Z0JBQzVFLGdCQUFnQixFQUFFO29CQUNoQixvREFBb0Q7b0JBQ3BELHdEQUF3RDtpQkFDekQ7YUFDRjtZQUNELG9CQUFvQixFQUFFO2dCQUNwQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLFNBQVM7d0JBQ3BCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLHFDQUFxQzt3QkFDN0MsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxzQ0FBc0M7d0JBQzlDLFVBQVUsRUFBRSw2Q0FBNkM7cUJBQzFEO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsd0NBQXdDO3dCQUNoRCxVQUFVLEVBQUUsK0NBQStDO3FCQUM1RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUseUNBQXlDO2dCQUNyRCxnQkFBZ0IsRUFBRTtvQkFDaEIsNkNBQTZDO2lCQUM5QzthQUNGO1lBQ0QsMkJBQTJCLEVBQUU7Z0JBQzNCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxrQkFBa0IsRUFBRTt3QkFDbEIsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLCtMQUErTDt3QkFDOU0sT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSwrQ0FBK0M7NEJBQ3ZELFVBQVUsRUFBRSxzREFBc0Q7eUJBQ25FO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxnQkFBZ0I7d0JBQzNCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLHFDQUFxQzt3QkFDN0MsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxzSUFBc0k7d0JBQ3JKLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsMENBQTBDOzRCQUNsRCxVQUFVLEVBQUUsaURBQWlEO3lCQUM5RDtxQkFDRjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsZ0RBQWdEO2dCQUM1RCxnQkFBZ0IsRUFBRTtvQkFDaEIsNkNBQTZDO2lCQUM5QzthQUNGO1lBQ0QsK0JBQStCLEVBQUU7Z0JBQy9CLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLDJHQUEyRzt3QkFDMUgsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSx5Q0FBeUM7NEJBQ2pELFVBQVUsRUFBRSxnREFBZ0Q7eUJBQzdEO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxvQkFBb0I7d0JBQy9CLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLG1DQUFtQzt3QkFDM0MsVUFBVSxFQUFFLDBDQUEwQztxQkFDdkQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLG9EQUFvRDtnQkFDaEUsZ0JBQWdCLEVBQUU7b0JBQ2hCLG9EQUFvRDtvQkFDcEQsd0RBQXdEO2lCQUN6RDthQUNGO1lBQ0Qsd0JBQXdCLEVBQUU7Z0JBQ3hCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLGtCQUFrQjt3QkFDakMsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSxrQ0FBa0M7NEJBQzFDLFVBQVUsRUFBRSx5Q0FBeUM7eUJBQ3REO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxhQUFhO3dCQUN4QixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSw2Q0FBNkM7Z0JBQ3pELGdCQUFnQixFQUFFO29CQUNoQixvREFBb0Q7b0JBQ3BELHdEQUF3RDtpQkFDekQ7YUFDRjtZQUNELHdCQUF3QixFQUFFO2dCQUN4QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw2REFBNkQ7d0JBQzVFLFdBQVcsRUFBRSxFQUFFO3dCQUNmLFNBQVMsRUFBRSxpQ0FBaUM7cUJBQzdDO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLHlJQUF5STtxQkFDeko7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsaUNBQWlDO3FCQUNqRDtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx3RUFBd0U7cUJBQ3hGO29CQUNELFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsMkNBQTJDO3dCQUNuRCxVQUFVLEVBQUUsNkNBQTZDO3FCQUMxRDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsNkNBQTZDO2FBQzFEO1lBQ0Qsd0JBQXdCLEVBQUU7Z0JBQ3hCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHlFQUF5RTtxQkFDekY7b0JBQ0QscUJBQXFCLEVBQUU7d0JBQ3JCLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxpR0FBaUc7d0JBQ2hILE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLGlHQUFpRzt5QkFDakg7cUJBQ0Y7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsWUFBWTtxQkFDNUI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSwySEFBMkg7d0JBQzFJLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsc0NBQXNDOzRCQUM5QyxVQUFVLEVBQUUsNkNBQTZDO3lCQUMxRDtxQkFDRjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw4RkFBOEY7d0JBQzdHLHNCQUFzQixFQUFFOzRCQUN0QixNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLDhGQUE4Rjt5QkFDOUc7d0JBQ0QsVUFBVSxFQUFFLHdDQUF3QztxQkFDckQ7b0JBQ0QsaUJBQWlCLEVBQUU7d0JBQ2pCLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsa0xBQWtMO3FCQUNsTTtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx5Q0FBeUM7cUJBQ3pEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSw2Q0FBNkM7YUFDMUQ7WUFDRCwwQkFBMEIsRUFBRTtnQkFDMUIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osY0FBYyxFQUFFO3dCQUNkLE1BQU0sRUFBRSw2Q0FBNkM7d0JBQ3JELFVBQVUsRUFBRSxvREFBb0Q7cUJBQ2pFO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwrQ0FBK0M7YUFDNUQ7WUFDRCxtQkFBbUIsRUFBRTtnQkFDbkIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLDBEQUEwRDtxQkFDMUU7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSx3Q0FBd0M7d0JBQ2hELFVBQVUsRUFBRSwrQ0FBK0M7cUJBQzVEO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxRQUFRO3dCQUNuQixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsNERBQTREO3FCQUM1RTtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLG1DQUFtQzt3QkFDM0MsVUFBVSxFQUFFLDBDQUEwQztxQkFDdkQ7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsME1BQTBNO3FCQUMxTjtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx5Q0FBeUM7cUJBQ3pEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSx3Q0FBd0M7YUFDckQ7WUFDRCx3QkFBd0IsRUFBRTtnQkFDeEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsa0RBQWtEO3FCQUNsRTtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxxR0FBcUc7cUJBQ3JIO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGtIQUFrSDtxQkFDbEk7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDZDQUE2QzthQUMxRDtZQUNELDBCQUEwQixFQUFFO2dCQUMxQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLG9JQUFvSTt3QkFDbkosT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSxzQ0FBc0M7NEJBQzlDLFVBQVUsRUFBRSw2Q0FBNkM7eUJBQzFEO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHVOQUF1TjtxQkFDdk87b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsaUlBQWlJO3FCQUNqSjtvQkFDRCxtQkFBbUIsRUFBRTt3QkFDbkIsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSxnRkFBZ0Y7cUJBQ2hHO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwrQ0FBK0M7YUFDNUQ7WUFDRCw0QkFBNEIsRUFBRTtnQkFDNUIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSwyQ0FBMkM7d0JBQ25ELFVBQVUsRUFBRSw2Q0FBNkM7cUJBQzFEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxpREFBaUQ7YUFDOUQ7WUFDRCxxQkFBcUIsRUFBRTtnQkFDckIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsdUhBQXVIO3FCQUN2STtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxnQkFBZ0I7cUJBQ2hDO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwwQ0FBMEM7YUFDdkQ7WUFDRCxtQkFBbUIsRUFBRTtnQkFDbkIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osc0JBQXNCLEVBQUU7d0JBQ3RCLE1BQU0sRUFBRSwyREFBMkQ7d0JBQ25FLFVBQVUsRUFBRSxrRUFBa0U7cUJBQy9FO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsNkNBQTZDO3dCQUNyRCxVQUFVLEVBQUUsb0RBQW9EO3FCQUNqRTtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLCtDQUErQzt3QkFDdkQsVUFBVSxFQUFFLHNEQUFzRDtxQkFDbkU7b0JBQ0QsbUJBQW1CLEVBQUU7d0JBQ25CLE1BQU0sRUFBRSx3REFBd0Q7d0JBQ2hFLFVBQVUsRUFBRSwrREFBK0Q7cUJBQzVFO29CQUNELFNBQVMsRUFBRTt3QkFDVCxNQUFNLEVBQUUsOENBQThDO3dCQUN0RCxVQUFVLEVBQUUscURBQXFEO3FCQUNsRTtvQkFDRCxXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLGdEQUFnRDt3QkFDeEQsVUFBVSxFQUFFLHVEQUF1RDtxQkFDcEU7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSwrQ0FBK0M7d0JBQ3ZELFVBQVUsRUFBRSxzREFBc0Q7cUJBQ25FO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsNENBQTRDO3dCQUNwRCxVQUFVLEVBQUUsbURBQW1EO3FCQUNoRTtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLCtDQUErQzt3QkFDdkQsVUFBVSxFQUFFLHNEQUFzRDtxQkFDbkU7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsa0lBQWtJO3dCQUNqSixXQUFXLEVBQUUsRUFBRTt3QkFDZixTQUFTLEVBQUUsaUNBQWlDO3FCQUM3QztvQkFDRCxLQUFLLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLDBDQUEwQzt3QkFDbEQsVUFBVSxFQUFFLGlEQUFpRDtxQkFDOUQ7b0JBQ0QsdUJBQXVCLEVBQUU7d0JBQ3ZCLE1BQU0sRUFBRSw0REFBNEQ7d0JBQ3BFLFVBQVUsRUFBRSxtRUFBbUU7cUJBQ2hGO29CQUNELEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsMENBQTBDO3dCQUNsRCxVQUFVLEVBQUUsaURBQWlEO3FCQUM5RDtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLDZDQUE2Qzt3QkFDckQsVUFBVSxFQUFFLG9EQUFvRDtxQkFDakU7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHdDQUF3QzthQUNyRDtZQUNELHdCQUF3QixFQUFFO2dCQUN4QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxpRUFBaUU7cUJBQ2pGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDZCQUE2QjtxQkFDN0M7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsMkJBQTJCO3FCQUMzQztpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsNkNBQTZDO2FBQzFEO1lBQ0QseUJBQXlCLEVBQUU7Z0JBQ3pCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLHNCQUFzQixFQUFFO3dCQUN0QixNQUFNLEVBQUUsMkRBQTJEO3dCQUNuRSxVQUFVLEVBQUUsa0VBQWtFO3FCQUMvRTtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLDZDQUE2Qzt3QkFDckQsVUFBVSxFQUFFLG9EQUFvRDtxQkFDakU7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSwrQ0FBK0M7d0JBQ3ZELFVBQVUsRUFBRSxzREFBc0Q7cUJBQ25FO29CQUNELG1CQUFtQixFQUFFO3dCQUNuQixNQUFNLEVBQUUsd0RBQXdEO3dCQUNoRSxVQUFVLEVBQUUsK0RBQStEO3FCQUM1RTtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLDhDQUE4Qzt3QkFDdEQsVUFBVSxFQUFFLHFEQUFxRDtxQkFDbEU7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxnREFBZ0Q7d0JBQ3hELFVBQVUsRUFBRSx1REFBdUQ7cUJBQ3BFO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsK0NBQStDO3dCQUN2RCxVQUFVLEVBQUUsc0RBQXNEO3FCQUNuRTtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLDRDQUE0Qzt3QkFDcEQsVUFBVSxFQUFFLG1EQUFtRDtxQkFDaEU7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSwrQ0FBK0M7d0JBQ3ZELFVBQVUsRUFBRSxzREFBc0Q7cUJBQ25FO29CQUNELEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsMENBQTBDO3dCQUNsRCxVQUFVLEVBQUUsaURBQWlEO3FCQUM5RDtvQkFDRCx1QkFBdUIsRUFBRTt3QkFDdkIsTUFBTSxFQUFFLDREQUE0RDt3QkFDcEUsVUFBVSxFQUFFLG1FQUFtRTtxQkFDaEY7b0JBQ0QsS0FBSyxFQUFFO3dCQUNMLE1BQU0sRUFBRSwwQ0FBMEM7d0JBQ2xELFVBQVUsRUFBRSxpREFBaUQ7cUJBQzlEO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsNkNBQTZDO3dCQUNyRCxVQUFVLEVBQUUsb0RBQW9EO3FCQUNqRTtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsOENBQThDO2FBQzNEO1lBQ0QsNEJBQTRCLEVBQUU7Z0JBQzVCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLG9CQUFvQixFQUFFO3dCQUNwQixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7cUJBQ2xCO29CQUNELHlCQUF5QixFQUFFO3dCQUN6QixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7cUJBQ2xCO29CQUNELFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7cUJBQ2xCO29CQUNELGlCQUFpQixFQUFFO3dCQUNqQixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7cUJBQ2xCO29CQUNELFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsRUFBRTt3QkFDakIsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSxnREFBZ0Q7NEJBQ3hELFVBQVUsRUFBRSxnREFBZ0Q7eUJBQzdEO3FCQUNGO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7cUJBQ2xCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7cUJBQ2xCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7cUJBQ2xCO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwwQ0FBMEM7YUFDdkQ7WUFDRCwyQkFBMkIsRUFBRTtnQkFDM0IsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osYUFBYSxFQUFFO3dCQUNiLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTtxQkFDbEI7b0JBQ0QsdUJBQXVCLEVBQUU7d0JBQ3ZCLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTtxQkFDbEI7b0JBQ0QsNEJBQTRCLEVBQUU7d0JBQzVCLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTtxQkFDbEI7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLGdEQUFnRDs0QkFDeEQsVUFBVSxFQUFFLGdEQUFnRDt5QkFDN0Q7cUJBQ0Y7b0JBQ0QsMEJBQTBCLEVBQUU7d0JBQzFCLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsRUFBRTtxQkFDbEI7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTtxQkFDbEI7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHlDQUF5QzthQUN0RDtZQUNELDBCQUEwQixFQUFFO2dCQUMxQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3FCQUNsQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsOENBQThDOzRCQUN0RCxVQUFVLEVBQUUsOENBQThDO3lCQUMzRDtxQkFDRjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsOENBQThDOzRCQUN0RCxVQUFVLEVBQUUsOENBQThDO3lCQUMzRDtxQkFDRjtvQkFDRCxpQkFBaUIsRUFBRTt3QkFDakIsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3FCQUNsQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsZ0RBQWdEOzRCQUN4RCxVQUFVLEVBQUUsZ0RBQWdEO3lCQUM3RDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3FCQUNsQjtvQkFDRCxhQUFhLEVBQUU7d0JBQ2IsTUFBTSxFQUFFLDZDQUE2Qzt3QkFDckQsVUFBVSxFQUFFLDZDQUE2QztxQkFDMUQ7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLCtDQUErQzs0QkFDdkQsVUFBVSxFQUFFLCtDQUErQzt5QkFDNUQ7cUJBQ0Y7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHdDQUF3QzthQUNyRDtZQUNELDJCQUEyQixFQUFFO2dCQUMzQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixTQUFTLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3FCQUNsQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsZ0RBQWdEOzRCQUN4RCxVQUFVLEVBQUUsZ0RBQWdEO3lCQUM3RDtxQkFDRjtvQkFDRCxXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3FCQUNsQjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3FCQUNsQjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUseUNBQXlDO2FBQ3REO1lBQ0QsaUNBQWlDLEVBQUU7Z0JBQ2pDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7cUJBQ2xCO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsMENBQTBDO3dCQUNsRCxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsK0NBQStDO2FBQzVEO1lBQ0QsZ0NBQWdDLEVBQUU7Z0JBQ2hDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFNBQVMsRUFBRTt3QkFDVCxNQUFNLEVBQUUseUNBQXlDO3dCQUNqRCxVQUFVLEVBQUUseUNBQXlDO3FCQUN0RDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3FCQUNsQjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsOENBQThDO2FBQzNEO1lBQ0QsZ0NBQWdDLEVBQUU7Z0JBQ2hDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFNBQVMsRUFBRTt3QkFDVCxNQUFNLEVBQUUseUNBQXlDO3dCQUNqRCxVQUFVLEVBQUUseUNBQXlDO3FCQUN0RDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3FCQUNsQjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsOENBQThDO2FBQzNEO1lBQ0Qsa0NBQWtDLEVBQUU7Z0JBQ2xDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsK0NBQStDO3dCQUN2RCxVQUFVLEVBQUUsNkNBQTZDO3FCQUMxRDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3FCQUNsQjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsZ0RBQWdEO2FBQzdEO1lBQ0QsK0JBQStCLEVBQUU7Z0JBQy9CLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLEVBQUU7cUJBQ2xCO29CQUNELFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsRUFBRTt3QkFDakIsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSxnREFBZ0Q7NEJBQ3hELFVBQVUsRUFBRSxnREFBZ0Q7eUJBQzdEO3FCQUNGO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSw2Q0FBNkM7YUFDMUQ7WUFDRCw4QkFBOEIsRUFBRTtnQkFDOUIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSw4QkFBOEI7d0JBQ3RDLFVBQVUsRUFBRSxvQ0FBb0M7cUJBQ2pEO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7cUJBQ2xCO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwwQ0FBMEM7YUFDdkQ7WUFDRCxpQ0FBaUMsRUFBRTtnQkFDakMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTtxQkFDbEI7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDZDQUE2QzthQUMxRDtZQUNELDZCQUE2QixFQUFFO2dCQUM3QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSxFQUFFO3FCQUNsQjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSxFQUFFO3FCQUNsQjtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3FCQUNsQjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsNkNBQTZDO2FBQzFEO1lBQ0QsNkJBQTZCLEVBQUU7Z0JBQzdCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsK0NBQStDO3dCQUN2RCxVQUFVLEVBQUUsNkNBQTZDO3FCQUMxRDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx1Q0FBdUM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSw0Q0FBNEM7YUFDekQ7WUFDRCwwQ0FBMEMsRUFBRTtnQkFDMUMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSwrQ0FBK0M7d0JBQ3ZELFVBQVUsRUFBRSw2Q0FBNkM7cUJBQzFEO29CQUNELFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHlDQUF5QztxQkFDekQ7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsb0NBQW9DO3FCQUNwRDtvQkFDRCxjQUFjLEVBQUU7d0JBQ2QsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwwREFBMEQ7cUJBQzFFO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLFlBQVk7cUJBQzVCO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSx3REFBd0Q7YUFDckU7WUFDRCxnQ0FBZ0MsRUFBRTtnQkFDaEMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxlQUFlO3dCQUMxQixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsY0FBYyxFQUFFO3dCQUNkLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsOENBQThDO3FCQUM5RDtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLHFDQUFxQzt3QkFDN0MsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxtQ0FBbUM7d0JBQ2xELE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsaURBQWlEOzRCQUN6RCxVQUFVLEVBQUUsaURBQWlEO3lCQUM5RDtxQkFDRjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsOENBQThDO2dCQUMxRCxnQkFBZ0IsRUFBRTtvQkFDaEIsNkNBQTZDO2lCQUM5QzthQUNGO1lBQ0QsdUNBQXVDLEVBQUU7Z0JBQ3ZDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsc0JBQXNCO3dCQUNqQyxVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsY0FBYyxFQUFFO3dCQUNkLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsOENBQThDO3FCQUM5RDtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLHFDQUFxQzt3QkFDN0MsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSwwQ0FBMEM7d0JBQ2xELFVBQVUsRUFBRSxpREFBaUQ7cUJBQzlEO29CQUNELGNBQWMsRUFBRTt3QkFDZCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsMkNBQTJDO3dCQUMxRCxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLHdEQUF3RDs0QkFDaEUsVUFBVSxFQUFFLHdEQUF3RDt5QkFDckU7cUJBQ0Y7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHFEQUFxRDtnQkFDakUsZ0JBQWdCLEVBQUU7b0JBQ2hCLDZDQUE2QztpQkFDOUM7YUFDRjtZQUNELDJDQUEyQyxFQUFFO2dCQUMzQyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxpQ0FBaUM7d0JBQ2hELE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUscURBQXFEOzRCQUM3RCxVQUFVLEVBQUUscURBQXFEO3lCQUNsRTtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsMEJBQTBCO3dCQUNyQyxVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSx5REFBeUQ7Z0JBQ3JFLGdCQUFnQixFQUFFO29CQUNoQixvREFBb0Q7b0JBQ3BELHdEQUF3RDtpQkFDekQ7YUFDRjtZQUNELG9DQUFvQyxFQUFFO2dCQUNwQyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSwwQkFBMEI7d0JBQ3pDLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsOENBQThDOzRCQUN0RCxVQUFVLEVBQUUsOENBQThDO3lCQUMzRDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsbUJBQW1CO3dCQUM5QixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxrREFBa0Q7Z0JBQzlELGdCQUFnQixFQUFFO29CQUNoQixvREFBb0Q7b0JBQ3BELHdEQUF3RDtpQkFDekQ7YUFDRjtZQUNELDhCQUE4QixFQUFFO2dCQUM5QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLGFBQWE7d0JBQ3hCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLHFDQUFxQzt3QkFDN0MsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxzQkFBc0I7d0JBQ3JDLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsMkNBQTJDOzRCQUNuRCxVQUFVLEVBQUUsMkNBQTJDO3lCQUN4RDtxQkFDRjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsNENBQTRDO2dCQUN4RCxnQkFBZ0IsRUFBRTtvQkFDaEIsNkNBQTZDO2lCQUM5QzthQUNGO1lBQ0QscUNBQXFDLEVBQUU7Z0JBQ3JDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLDJDQUEyQzt3QkFDMUQsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSxRQUFROzRCQUNoQixhQUFhLEVBQUUsMkNBQTJDO3lCQUMzRDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsb0JBQW9CO3dCQUMvQixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO29CQUNELFNBQVMsRUFBRTt3QkFDVCxNQUFNLEVBQUUsMENBQTBDO3dCQUNsRCxVQUFVLEVBQUUsaURBQWlEO3FCQUM5RDtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLHNEQUFzRDt3QkFDckUsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSwwQ0FBMEM7NEJBQ2xELFVBQVUsRUFBRSxpREFBaUQ7eUJBQzlEO3FCQUNGO29CQUNELFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsMkNBQTJDO3dCQUMxRCxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSwyQ0FBMkM7eUJBQzNEO3FCQUNGO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxtREFBbUQ7Z0JBQy9ELGdCQUFnQixFQUFFO29CQUNoQiw2Q0FBNkM7aUJBQzlDO2FBQ0Y7WUFDRCx5Q0FBeUMsRUFBRTtnQkFDekMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsK0JBQStCO3dCQUM5QyxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLG1EQUFtRDs0QkFDM0QsVUFBVSxFQUFFLG1EQUFtRDt5QkFDaEU7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLHdCQUF3Qjt3QkFDbkMsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsbUNBQW1DO3dCQUMzQyxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsdURBQXVEO2dCQUNuRSxnQkFBZ0IsRUFBRTtvQkFDaEIsb0RBQW9EO29CQUNwRCx3REFBd0Q7aUJBQ3pEO2FBQ0Y7WUFDRCwyQ0FBMkMsRUFBRTtnQkFDM0MsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO29CQUNELFNBQVMsRUFBRTt3QkFDVCxNQUFNLEVBQUUsK0NBQStDO3dCQUN2RCxVQUFVLEVBQUUsNkNBQTZDO3FCQUMxRDtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLFVBQVU7d0JBQ3pCLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLFVBQVU7eUJBQzFCO3FCQUNGO29CQUNELFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHlDQUF5QztxQkFDekQ7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsb0NBQW9DO3FCQUNwRDtvQkFDRCxjQUFjLEVBQUU7d0JBQ2QsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwwREFBMEQ7cUJBQzFFO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLFVBQVU7cUJBQzFCO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLFlBQVk7cUJBQzVCO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSx5REFBeUQ7YUFDdEU7WUFDRCxtQ0FBbUMsRUFBRTtnQkFDbkMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsMEJBQTBCO3FCQUMxQztvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLDRDQUE0Qzt3QkFDcEQsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLGlEQUFpRDthQUM5RDtZQUNELDBDQUEwQyxFQUFFO2dCQUMxQyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxrQ0FBa0M7cUJBQ2xEO29CQUNELGFBQWEsRUFBRTt3QkFDYixNQUFNLEVBQUUsbURBQW1EO3dCQUMzRCxVQUFVLEVBQUUsbURBQW1EO3FCQUNoRTtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsd0RBQXdEO2FBQ3JFO1lBQ0QsNEJBQTRCLEVBQUU7Z0JBQzVCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGtCQUFrQjtxQkFDbEM7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSxxQ0FBcUM7cUJBQ2xEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwwQ0FBMEM7YUFDdkQ7WUFDRCxtQ0FBbUMsRUFBRTtnQkFDbkMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUseUJBQXlCO3FCQUN6QztvQkFDRCxhQUFhLEVBQUU7d0JBQ2IsTUFBTSxFQUFFLDRDQUE0Qzt3QkFDcEQsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLGlEQUFpRDthQUM5RDtZQUNELHlCQUF5QixFQUFFO2dCQUN6QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLFFBQVE7d0JBQ25CLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxjQUFjLEVBQUU7d0JBQ2QsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxtREFBbUQ7cUJBQ25FO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUscUNBQXFDO3dCQUM3QyxVQUFVLEVBQUUsNENBQTRDO3FCQUN6RDtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLDJCQUEyQjt3QkFDMUMsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSwwQ0FBMEM7NEJBQ2xELFVBQVUsRUFBRSwwQ0FBMEM7eUJBQ3ZEO3FCQUNGO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSx1Q0FBdUM7Z0JBQ25ELGdCQUFnQixFQUFFO29CQUNoQiw2Q0FBNkM7aUJBQzlDO2FBQ0Y7WUFDRCxnQ0FBZ0MsRUFBRTtnQkFDaEMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxlQUFlO3dCQUMxQixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsY0FBYyxFQUFFO3dCQUNkLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsbURBQW1EO3FCQUNuRTtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLHFDQUFxQzt3QkFDN0MsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSwwQ0FBMEM7d0JBQ2xELFVBQVUsRUFBRSxpREFBaUQ7cUJBQzlEO29CQUNELGNBQWMsRUFBRTt3QkFDZCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsNkNBQTZDO3dCQUM1RCxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLGlEQUFpRDs0QkFDekQsVUFBVSxFQUFFLGlEQUFpRDt5QkFDOUQ7cUJBQ0Y7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDhDQUE4QztnQkFDMUQsZ0JBQWdCLEVBQUU7b0JBQ2hCLDZDQUE2QztpQkFDOUM7YUFDRjtZQUNELG9DQUFvQyxFQUFFO2dCQUNwQyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSx5QkFBeUI7d0JBQ3hDLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsOENBQThDOzRCQUN0RCxVQUFVLEVBQUUsOENBQThDO3lCQUMzRDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsbUJBQW1CO3dCQUM5QixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxrREFBa0Q7Z0JBQzlELGdCQUFnQixFQUFFO29CQUNoQixvREFBb0Q7b0JBQ3BELHdEQUF3RDtpQkFDekQ7YUFDRjtZQUNELDZCQUE2QixFQUFFO2dCQUM3QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxrQkFBa0I7d0JBQ2pDLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsdUNBQXVDOzRCQUMvQyxVQUFVLEVBQUUsdUNBQXVDO3lCQUNwRDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsWUFBWTt3QkFDdkIsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsbUNBQW1DO3dCQUMzQyxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsMkNBQTJDO2dCQUN2RCxnQkFBZ0IsRUFBRTtvQkFDaEIsb0RBQW9EO29CQUNwRCx3REFBd0Q7aUJBQ3pEO2FBQ0Y7WUFDRCw2QkFBNkIsRUFBRTtnQkFDN0IsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osdUJBQXVCLEVBQUU7d0JBQ3ZCLE1BQU0sRUFBRSwrQ0FBK0M7d0JBQ3ZELFVBQVUsRUFBRSw2Q0FBNkM7cUJBQzFEO29CQUNELGlCQUFpQixFQUFFO3dCQUNqQixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsdUVBQXVFO3dCQUN0RixPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSx1RUFBdUU7eUJBQ3ZGO3FCQUNGO29CQUNELGVBQWUsRUFBRTt3QkFDZixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsd0dBQXdHO3dCQUN2SCxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSx3R0FBd0c7eUJBQ3hIO3FCQUNGO29CQUNELFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsc0VBQXNFO3dCQUNyRixPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSxzRUFBc0U7eUJBQ3RGO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsdUlBQXVJO3dCQUN0SixPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSx1SUFBdUk7eUJBQ3ZKO3FCQUNGO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwyQ0FBMkM7YUFDeEQ7WUFDRCx1QkFBdUIsRUFBRTtnQkFDdkIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxNQUFNO3dCQUNqQixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsNkJBQTZCO3dCQUM1QyxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLDJDQUEyQzs0QkFDbkQsVUFBVSxFQUFFLDJDQUEyQzt5QkFDeEQ7cUJBQ0Y7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHFDQUFxQztnQkFDakQsZ0JBQWdCLEVBQUU7b0JBQ2hCLDZDQUE2QztpQkFDOUM7YUFDRjtZQUNELDhCQUE4QixFQUFFO2dCQUM5QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSwyQ0FBMkM7d0JBQzFELE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLDJDQUEyQzt5QkFDM0Q7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLGFBQWE7d0JBQ3hCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLHFDQUFxQzt3QkFDN0MsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSwwQ0FBMEM7d0JBQ2xELFVBQVUsRUFBRSxpREFBaUQ7cUJBQzlEO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsc0RBQXNEO3dCQUNyRSxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLDBDQUEwQzs0QkFDbEQsVUFBVSxFQUFFLGlEQUFpRDt5QkFDOUQ7cUJBQ0Y7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSw4Q0FBOEM7d0JBQzdELE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLDhDQUE4Qzt5QkFDOUQ7cUJBQ0Y7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDRDQUE0QztnQkFDeEQsZ0JBQWdCLEVBQUU7b0JBQ2hCLDZDQUE2QztpQkFDOUM7YUFDRjtZQUNELGtDQUFrQyxFQUFFO2dCQUNsQyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSx1QkFBdUI7d0JBQ3RDLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsNENBQTRDOzRCQUNwRCxVQUFVLEVBQUUsNENBQTRDO3lCQUN6RDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsaUJBQWlCO3dCQUM1QixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxnREFBZ0Q7Z0JBQzVELGdCQUFnQixFQUFFO29CQUNoQixvREFBb0Q7b0JBQ3BELHdEQUF3RDtpQkFDekQ7YUFDRjtZQUNELDJCQUEyQixFQUFFO2dCQUMzQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxlQUFlO3dCQUM5QixPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLHFDQUFxQzs0QkFDN0MsVUFBVSxFQUFFLHFDQUFxQzt5QkFDbEQ7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLFVBQVU7d0JBQ3JCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLG1DQUFtQzt3QkFDM0MsVUFBVSxFQUFFLDBDQUEwQztxQkFDdkQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHlDQUF5QztnQkFDckQsZ0JBQWdCLEVBQUU7b0JBQ2hCLG9EQUFvRDtvQkFDcEQsd0RBQXdEO2lCQUN6RDthQUNGO1lBQ0Qsc0NBQXNDLEVBQUU7Z0JBQ3RDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLCtDQUErQzt3QkFDdkQsVUFBVSxFQUFFLDZDQUE2QztxQkFDMUQ7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxVQUFVO3dCQUN6QixPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSxVQUFVO3lCQUMxQjtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUscUJBQXFCO3dCQUNoQyxVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUseUNBQXlDO3FCQUN6RDtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxvQ0FBb0M7cUJBQ3BEO29CQUNELGNBQWMsRUFBRTt3QkFDZCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDBEQUEwRDtxQkFDMUU7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsVUFBVTtxQkFDMUI7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsWUFBWTtxQkFDNUI7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLG9EQUFvRDthQUNqRTtZQUNELDhDQUE4QyxFQUFFO2dCQUM5QyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixTQUFTLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSxxQ0FBcUM7cUJBQ3JEO29CQUNELFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsNkJBQTZCO3dCQUN4QyxVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsMENBQTBDO3FCQUMxRDtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxvQkFBb0I7cUJBQ3BDO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSw0REFBNEQ7YUFDekU7WUFDRCxnQkFBZ0IsRUFBRTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxPQUFPO3dCQUNsQixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsa0NBQWtDO3dCQUMxQyxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLG9DQUFvQzt3QkFDNUMsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHNDQUFzQztnQkFDbEQsZ0JBQWdCLEVBQUU7b0JBQ2hCLDZDQUE2QztpQkFDOUM7YUFDRjtZQUNELHNCQUFzQixFQUFFO2dCQUN0QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLGFBQWE7d0JBQ3hCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLHFDQUFxQzt3QkFDN0MsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSx3Q0FBd0M7d0JBQ2hELFVBQVUsRUFBRSxnREFBZ0Q7cUJBQzdEO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsMENBQTBDO3dCQUNsRCxVQUFVLEVBQUUsa0RBQWtEO3FCQUMvRDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsNENBQTRDO2dCQUN4RCxnQkFBZ0IsRUFBRTtvQkFDaEIsNkNBQTZDO2lCQUM5QzthQUNGO1lBQ0QsMEJBQTBCLEVBQUU7Z0JBQzFCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLHVCQUF1Qjt3QkFDdEMsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSxvQ0FBb0M7NEJBQzVDLFVBQVUsRUFBRSw0Q0FBNEM7eUJBQ3pEO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxpQkFBaUI7d0JBQzVCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLG1DQUFtQzt3QkFDM0MsVUFBVSxFQUFFLDBDQUEwQztxQkFDdkQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLGdEQUFnRDtnQkFDNUQsZ0JBQWdCLEVBQUU7b0JBQ2hCLG9EQUFvRDtvQkFDcEQsd0RBQXdEO2lCQUN6RDthQUNGO1lBQ0QsMEJBQTBCLEVBQUU7Z0JBQzFCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsb0NBQW9DO3dCQUM1QyxVQUFVLEVBQUUsNENBQTRDO3FCQUN6RDtvQkFDRCxXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLCtDQUErQzt3QkFDdkQsVUFBVSxFQUFFLHNEQUFzRDtxQkFDbkU7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSx1Q0FBdUM7d0JBQy9DLFVBQVUsRUFBRSwrQ0FBK0M7cUJBQzVEO29CQUNELGdCQUFnQixFQUFFO3dCQUNoQixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHlFQUF5RTtxQkFDekY7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxvQ0FBb0M7d0JBQzVDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsc0NBQXNDO3dCQUM5QyxVQUFVLEVBQUUsOENBQThDO3FCQUMzRDtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLDRGQUE0Rjt3QkFDM0csT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSwyQ0FBMkM7NEJBQ25ELFVBQVUsRUFBRSxtREFBbUQ7eUJBQ2hFO3FCQUNGO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxnREFBZ0Q7YUFDN0Q7WUFDRCw0QkFBNEIsRUFBRTtnQkFDNUIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osYUFBYSxFQUFFO3dCQUNiLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUscURBQXFEO3FCQUNyRTtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsa0RBQWtEO2FBQy9EO1lBQ0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLGdCQUFnQjt3QkFDL0IsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSw4QkFBOEI7NEJBQ3RDLFVBQVUsRUFBRSxzQ0FBc0M7eUJBQ25EO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxXQUFXO3dCQUN0QixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwwQ0FBMEM7Z0JBQ3RELGdCQUFnQixFQUFFO29CQUNoQixvREFBb0Q7b0JBQ3BELHdEQUF3RDtpQkFDekQ7YUFDRjtZQUNELHNCQUFzQixFQUFFO2dCQUN0QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLCtDQUErQzt3QkFDdkQsVUFBVSxFQUFFLHNEQUFzRDtxQkFDbkU7b0JBQ0QsSUFBSSxFQUFFO3dCQUNKLE1BQU0sRUFBRSwwQ0FBMEM7d0JBQ2xELFVBQVUsRUFBRSxpREFBaUQ7cUJBQzlEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSw0Q0FBNEM7YUFDekQ7WUFDRCx1QkFBdUIsRUFBRTtnQkFDdkIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsMENBQTBDO3dCQUNsRCxVQUFVLEVBQUUsaURBQWlEO3FCQUM5RDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsY0FBYzt3QkFDekIsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELGFBQWEsRUFBRTt3QkFDYixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLDBEQUEwRDtxQkFDMUU7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsdUNBQXVDO3dCQUMvQyxVQUFVLEVBQUUsK0NBQStDO3FCQUM1RDtvQkFDRCxrQkFBa0IsRUFBRTt3QkFDbEIsTUFBTSxFQUFFLDBDQUEwQzt3QkFDbEQsVUFBVSxFQUFFLGlEQUFpRDtxQkFDOUQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDZDQUE2QztnQkFDekQsZ0JBQWdCLEVBQUU7b0JBQ2hCLDZDQUE2QztpQkFDOUM7YUFDRjtZQUNELHNCQUFzQixFQUFFO2dCQUN0QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwwRUFBMEU7cUJBQzFGO29CQUNELEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsdUNBQXVDO3dCQUMvQyxVQUFVLEVBQUUsK0NBQStDO3FCQUM1RDtvQkFDRCxjQUFjLEVBQUU7d0JBQ2QsTUFBTSxFQUFFLCtDQUErQzt3QkFDdkQsVUFBVSxFQUFFLHNEQUFzRDtxQkFDbkU7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsMENBQTBDO3FCQUMxRDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsNENBQTRDO2FBQ3pEO1lBQ0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsb0NBQW9DO3dCQUM1QyxVQUFVLEVBQUUsNENBQTRDO3FCQUN6RDtvQkFDRCxXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLCtDQUErQzt3QkFDdkQsVUFBVSxFQUFFLHNEQUFzRDtxQkFDbkU7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSx1Q0FBdUM7d0JBQy9DLFVBQVUsRUFBRSwrQ0FBK0M7cUJBQzVEO29CQUNELGdCQUFnQixFQUFFO3dCQUNoQixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHlFQUF5RTtxQkFDekY7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxvQ0FBb0M7d0JBQzVDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsc0NBQXNDO3dCQUM5QyxVQUFVLEVBQUUsOENBQThDO3FCQUMzRDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsMENBQTBDO2FBQ3ZEO1lBQ0Qsc0JBQXNCLEVBQUU7Z0JBQ3RCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLDREQUE0RDtxQkFDNUU7b0JBQ0QscUJBQXFCLEVBQUU7d0JBQ3JCLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsNkRBQTZEO3FCQUM3RTtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLDBDQUEwQzt3QkFDbEQsVUFBVSxFQUFFLGlEQUFpRDtxQkFDOUQ7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsMkNBQTJDO3dCQUMxRCxVQUFVLEVBQUUsTUFBTTtxQkFDbkI7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsK0VBQStFO3FCQUMvRjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx1Q0FBdUM7cUJBQ3ZEO29CQUNELGdCQUFnQixFQUFFO3dCQUNoQixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHNEQUFzRDtxQkFDdEU7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDRDQUE0QzthQUN6RDtZQUNELHdCQUF3QixFQUFFO2dCQUN4QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixnQkFBZ0IsRUFBRTt3QkFDaEIsTUFBTSxFQUFFLDRDQUE0Qzt3QkFDcEQsVUFBVSxFQUFFLG9EQUFvRDtxQkFDakU7b0JBQ0QsZ0JBQWdCLEVBQUU7d0JBQ2hCLE1BQU0sRUFBRSw0Q0FBNEM7d0JBQ3BELFVBQVUsRUFBRSxvREFBb0Q7cUJBQ2pFO29CQUNELGdCQUFnQixFQUFFO3dCQUNoQixNQUFNLEVBQUUsNENBQTRDO3dCQUNwRCxVQUFVLEVBQUUsb0RBQW9EO3FCQUNqRTtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx1Q0FBdUM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSw4Q0FBOEM7YUFDM0Q7WUFDRCw2QkFBNkIsRUFBRTtnQkFDN0IsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSx1Q0FBdUM7d0JBQy9DLFVBQVUsRUFBRSwrQ0FBK0M7cUJBQzVEO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsdUNBQXVDO3dCQUMvQyxVQUFVLEVBQUUsK0NBQStDO3FCQUM1RDtvQkFDRCxhQUFhLEVBQUU7d0JBQ2IsTUFBTSxFQUFFLDJDQUEyQzt3QkFDbkQsVUFBVSxFQUFFLG1EQUFtRDtxQkFDaEU7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsdUJBQXVCO3FCQUN2QztpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsbURBQW1EO2FBQ2hFO1lBQ0QsOEJBQThCLEVBQUU7Z0JBQzlCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsNEVBQTRFO3dCQUMzRixPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLGlDQUFpQzs0QkFDekMsVUFBVSxFQUFFLHdDQUF3Qzt5QkFDckQ7cUJBQ0Y7b0JBQ0Qsb0JBQW9CLEVBQUU7d0JBQ3BCLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsbUZBQW1GO3FCQUNuRztvQkFDRCxXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSw4REFBOEQ7cUJBQzlFO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsMENBQTBDO3dCQUNsRCxVQUFVLEVBQUUsaURBQWlEO3FCQUM5RDtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLCtDQUErQzt3QkFDdkQsVUFBVSxFQUFFLHNEQUFzRDtxQkFDbkU7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLG9EQUFvRDthQUNqRTtZQUNELDhCQUE4QixFQUFFO2dCQUM5QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixLQUFLLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLDRFQUE0RTt3QkFDM0YsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSxpQ0FBaUM7NEJBQ3pDLFVBQVUsRUFBRSx3Q0FBd0M7eUJBQ3JEO3FCQUNGO29CQUNELFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLG1EQUFtRDtxQkFDbkU7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSwwQ0FBMEM7d0JBQ2xELFVBQVUsRUFBRSxpREFBaUQ7cUJBQzlEO29CQUNELFNBQVMsRUFBRTt3QkFDVCxNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLFNBQVM7cUJBQ3pCO29CQUNELFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsK0NBQStDO3dCQUN2RCxVQUFVLEVBQUUsc0RBQXNEO3FCQUNuRTtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsb0RBQW9EO2FBQ2pFO1lBQ0QseUJBQXlCLEVBQUU7Z0JBQ3pCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLCtEQUErRDtxQkFDL0U7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsZ0VBQWdFO3FCQUNoRjtvQkFDRCxLQUFLLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx3Q0FBd0M7cUJBQ3hEO29CQUNELEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHlDQUF5QztxQkFDekQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLCtDQUErQzthQUM1RDtZQUNELDRCQUE0QixFQUFFO2dCQUM1QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLDBDQUEwQzt3QkFDbEQsVUFBVSxFQUFFLGtEQUFrRDtxQkFDL0Q7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsb0NBQW9DO3FCQUNwRDtvQkFDRCxXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLDBDQUEwQzt3QkFDbEQsVUFBVSxFQUFFLGtEQUFrRDtxQkFDL0Q7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsa0NBQWtDO3FCQUNsRDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsa0RBQWtEO2FBQy9EO1lBQ0QsNkJBQTZCLEVBQUU7Z0JBQzdCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsMENBQTBDO3dCQUNsRCxVQUFVLEVBQUUsaURBQWlEO3FCQUM5RDtvQkFDRCxzQkFBc0IsRUFBRTt3QkFDdEIsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxzREFBc0Q7cUJBQ3RFO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxtREFBbUQ7YUFDaEU7WUFDRCw4QkFBOEIsRUFBRTtnQkFDOUIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osS0FBSyxFQUFFO3dCQUNMLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSw0RUFBNEU7d0JBQzNGLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsaUNBQWlDOzRCQUN6QyxVQUFVLEVBQUUsd0NBQXdDO3lCQUNyRDtxQkFDRjtvQkFDRCxXQUFXLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSxtREFBbUQ7cUJBQ25FO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsMENBQTBDO3dCQUNsRCxVQUFVLEVBQUUsaURBQWlEO3FCQUM5RDtvQkFDRCxhQUFhLEVBQUU7d0JBQ2IsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSwwREFBMEQ7cUJBQzFFO29CQUNELFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsK0NBQStDO3dCQUN2RCxVQUFVLEVBQUUsc0RBQXNEO3FCQUNuRTtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxnQ0FBZ0M7cUJBQ2hEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxvREFBb0Q7YUFDakU7WUFDRCw0QkFBNEIsRUFBRTtnQkFDNUIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsbUNBQW1DO3FCQUNuRDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxpQ0FBaUM7cUJBQ2pEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxrREFBa0Q7YUFDL0Q7WUFDRCx5QkFBeUIsRUFBRTtnQkFDekIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osS0FBSyxFQUFFO3dCQUNMLE1BQU0sRUFBRSwwQ0FBMEM7d0JBQ2xELFVBQVUsRUFBRSxrREFBa0Q7cUJBQy9EO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDBCQUEwQjtxQkFDMUM7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLCtDQUErQzthQUM1RDtZQUNELHlCQUF5QixFQUFFO2dCQUN6QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxrQ0FBa0M7cUJBQ2xEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwrQ0FBK0M7YUFDNUQ7WUFDRCwwQ0FBMEMsRUFBRTtnQkFDMUMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxnRkFBZ0Y7d0JBQy9GLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLGdGQUFnRjt5QkFDaEc7cUJBQ0Y7b0JBQ0QsYUFBYSxFQUFFO3dCQUNiLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxvRUFBb0U7d0JBQ25GLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsaUNBQWlDOzRCQUN6QyxVQUFVLEVBQUUsd0NBQXdDO3lCQUNyRDtxQkFDRjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxpREFBaUQ7cUJBQ2pFO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwrREFBK0Q7YUFDNUU7WUFDRCwyQkFBMkIsRUFBRTtnQkFDM0IsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osY0FBYyxFQUFFO3dCQUNkLE1BQU0sRUFBRSxxREFBcUQ7d0JBQzdELFVBQVUsRUFBRSw0REFBNEQ7cUJBQ3pFO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHVEQUF1RDtxQkFDdkU7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLGdEQUFnRDthQUM3RDtZQUNELHVDQUF1QyxFQUFFO2dCQUN2QyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLDBDQUEwQzt3QkFDbEQsVUFBVSxFQUFFLGlEQUFpRDtxQkFDOUQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDREQUE0RDthQUN6RTtZQUNELDRCQUE0QixFQUFFO2dCQUM1QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLGtCQUFrQjt3QkFDN0IsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUscUNBQXFDO3dCQUM3QyxVQUFVLEVBQUUsNENBQTRDO3FCQUN6RDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLDhDQUE4Qzt3QkFDdEQsVUFBVSxFQUFFLHFEQUFxRDtxQkFDbEU7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxnREFBZ0Q7d0JBQ3hELFVBQVUsRUFBRSx1REFBdUQ7cUJBQ3BFO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxpREFBaUQ7Z0JBQzdELGdCQUFnQixFQUFFO29CQUNoQiw2Q0FBNkM7aUJBQzlDO2FBQ0Y7WUFDRCxnQ0FBZ0MsRUFBRTtnQkFDaEMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsOEJBQThCO3dCQUM3QyxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLDBDQUEwQzs0QkFDbEQsVUFBVSxFQUFFLGlEQUFpRDt5QkFDOUQ7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLHNCQUFzQjt3QkFDakMsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsbUNBQW1DO3dCQUMzQyxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUscURBQXFEO2dCQUNqRSxnQkFBZ0IsRUFBRTtvQkFDaEIsb0RBQW9EO29CQUNwRCx3REFBd0Q7aUJBQ3pEO2FBQ0Y7WUFDRCxnQ0FBZ0MsRUFBRTtnQkFDaEMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsZ0NBQWdDO3FCQUNoRDtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSw4REFBOEQ7d0JBQzdFLHNCQUFzQixFQUFFOzRCQUN0QixNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLDhEQUE4RDt5QkFDOUU7d0JBQ0QsVUFBVSxFQUFFLHdDQUF3QztxQkFDckQ7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSw0Q0FBNEM7d0JBQ3BELFVBQVUsRUFBRSxtREFBbUQ7cUJBQ2hFO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsMENBQTBDO3dCQUNsRCxVQUFVLEVBQUUsaURBQWlEO3FCQUM5RDtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLG1DQUFtQzt3QkFDbEQsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSxpREFBaUQ7NEJBQ3pELFVBQVUsRUFBRSx3REFBd0Q7eUJBQ3JFO3FCQUNGO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxxREFBcUQ7YUFDbEU7WUFDRCxrQ0FBa0MsRUFBRTtnQkFDbEMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osU0FBUyxFQUFFO3dCQUNULE1BQU0sRUFBRSwyQ0FBMkM7d0JBQ25ELFVBQVUsRUFBRSxrREFBa0Q7cUJBQy9EO29CQUNELGVBQWUsRUFBRTt3QkFDZixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLGlFQUFpRTtxQkFDakY7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHVEQUF1RDthQUNwRTtZQUNELDZCQUE2QixFQUFFO2dCQUM3QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLDRFQUE0RTt3QkFDM0YsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSx5Q0FBeUM7NEJBQ2pELFVBQVUsRUFBRSxnREFBZ0Q7eUJBQzdEO3FCQUNGO29CQUNELFNBQVMsRUFBRTt3QkFDVCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGlDQUFpQztxQkFDakQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLGtEQUFrRDthQUMvRDtZQUNELDhCQUE4QixFQUFFO2dCQUM5QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixjQUFjLEVBQUU7d0JBQ2QsTUFBTSxFQUFFLHdEQUF3RDt3QkFDaEUsVUFBVSxFQUFFLCtEQUErRDtxQkFDNUU7b0JBQ0QsZ0JBQWdCLEVBQUU7d0JBQ2hCLE1BQU0sRUFBRSwwREFBMEQ7d0JBQ2xFLFVBQVUsRUFBRSxpRUFBaUU7cUJBQzlFO29CQUNELFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsK0NBQStDO3dCQUN2RCxVQUFVLEVBQUUsc0RBQXNEO3FCQUNuRTtvQkFDRCxlQUFlLEVBQUU7d0JBQ2YsTUFBTSxFQUFFLHlEQUF5RDt3QkFDakUsVUFBVSxFQUFFLGdFQUFnRTtxQkFDN0U7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsbUNBQW1DO3FCQUNuRDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsbURBQW1EO2FBQ2hFO1lBQ0QsOENBQThDLEVBQUU7Z0JBQzlDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFdBQVcsRUFBRTt3QkFDWCxNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLGtFQUFrRTtxQkFDbEY7b0JBQ0QsZ0JBQWdCLEVBQUU7d0JBQ2hCLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSw4REFBOEQ7d0JBQzdFLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLDhEQUE4RDt5QkFDOUU7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSwwQ0FBMEM7d0JBQ2xELFVBQVUsRUFBRSxpREFBaUQ7cUJBQzlEO29CQUNELG9CQUFvQixFQUFFO3dCQUNwQixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGdDQUFnQztxQkFDaEQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLG1FQUFtRTthQUNoRjtZQUNELG1DQUFtQyxFQUFFO2dCQUNuQyxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixtQkFBbUIsRUFBRTt3QkFDbkIsTUFBTSxFQUFFLDREQUE0RDt3QkFDcEUsVUFBVSxFQUFFLG1FQUFtRTtxQkFDaEY7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUseUJBQXlCO3FCQUN6QztpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsd0RBQXdEO2FBQ3JFO1lBQ0QsMEJBQTBCLEVBQUU7Z0JBQzFCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFNBQVMsRUFBRTt3QkFDVCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsb0NBQW9DO3dCQUNuRCxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSxvQ0FBb0M7eUJBQ3BEO3FCQUNGO29CQUNELGVBQWUsRUFBRTt3QkFDZixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLCtGQUErRjtxQkFDL0c7b0JBQ0QsS0FBSyxFQUFFO3dCQUNMLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxzREFBc0Q7d0JBQ3JFLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsaUNBQWlDOzRCQUN6QyxVQUFVLEVBQUUsd0NBQXdDO3lCQUNyRDtxQkFDRjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsK0NBQStDO2FBQzVEO1lBQ0QseUJBQXlCLEVBQUU7Z0JBQ3pCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsd0NBQXdDO3dCQUNoRCxVQUFVLEVBQUUsK0NBQStDO3FCQUM1RDtvQkFDRCxlQUFlLEVBQUU7d0JBQ2YsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx1Q0FBdUM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSw4Q0FBOEM7YUFDM0Q7WUFDRCw0Q0FBNEMsRUFBRTtnQkFDNUMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSx1Q0FBdUM7d0JBQy9DLFVBQVUsRUFBRSw4Q0FBOEM7cUJBQzNEO29CQUNELEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsdUNBQXVDO3dCQUMvQyxVQUFVLEVBQUUsOENBQThDO3FCQUMzRDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsaUVBQWlFO2FBQzlFO1lBQ0QsMkNBQTJDLEVBQUU7Z0JBQzNDLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLGlCQUFpQixFQUFFO3dCQUNqQixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLGlFQUFpRTt3QkFDaEYsVUFBVSxFQUFFLE1BQU07cUJBQ25CO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsdUNBQXVDO3dCQUMvQyxVQUFVLEVBQUUsOENBQThDO3FCQUMzRDtvQkFDRCxLQUFLLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLHVDQUF1Qzt3QkFDL0MsVUFBVSxFQUFFLDhDQUE4QztxQkFDM0Q7b0JBQ0QsZ0JBQWdCLEVBQUU7d0JBQ2hCLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsK0NBQStDO3dCQUM5RCxVQUFVLEVBQUUsTUFBTTtxQkFDbkI7b0JBQ0QsZUFBZSxFQUFFO3dCQUNmLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsa0lBQWtJO3FCQUNsSjtvQkFDRCxxQkFBcUIsRUFBRTt3QkFDckIsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSxpREFBaUQ7d0JBQ2hFLFVBQVUsRUFBRSxNQUFNO3FCQUNuQjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsZ0VBQWdFO2FBQzdFO1lBQ0QsZ0JBQWdCLEVBQUU7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxxQkFBcUIsRUFBRTt3QkFDckIsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwwQkFBMEI7cUJBQzFDO29CQUNELHFCQUFxQixFQUFFO3dCQUNyQixNQUFNLEVBQUUsK0NBQStDO3dCQUN2RCxVQUFVLEVBQUUsNkNBQTZDO3FCQUMxRDtvQkFDRCw0QkFBNEIsRUFBRTt3QkFDNUIsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwrQkFBK0I7cUJBQy9DO29CQUNELHNCQUFzQixFQUFFO3dCQUN0QixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDRDQUE0QztxQkFDNUQ7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLE9BQU87d0JBQ2xCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLHFDQUFxQzt3QkFDN0MsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHNDQUFzQztnQkFDbEQsZ0JBQWdCLEVBQUU7b0JBQ2hCLDZDQUE2QztpQkFDOUM7YUFDRjtZQUNELG9CQUFvQixFQUFFO2dCQUNwQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSx1QkFBdUI7d0JBQ3RDLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsOEJBQThCOzRCQUN0QyxVQUFVLEVBQUUsc0NBQXNDO3lCQUNuRDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsV0FBVzt3QkFDdEIsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsbUNBQW1DO3dCQUMzQyxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsMENBQTBDO2dCQUN0RCxnQkFBZ0IsRUFBRTtvQkFDaEIsb0RBQW9EO29CQUNwRCx3REFBd0Q7aUJBQ3pEO2FBQ0Y7WUFDRCxzQkFBc0IsRUFBRTtnQkFDdEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxhQUFhO3dCQUN4QixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsd0NBQXdDO3dCQUNoRCxVQUFVLEVBQUUsZ0RBQWdEO3FCQUM3RDtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLDBDQUEwQzt3QkFDbEQsVUFBVSxFQUFFLGtEQUFrRDtxQkFDL0Q7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDRDQUE0QztnQkFDeEQsZ0JBQWdCLEVBQUU7b0JBQ2hCLDZDQUE2QztpQkFDOUM7YUFDRjtZQUNELDBCQUEwQixFQUFFO2dCQUMxQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSw4QkFBOEI7d0JBQzdDLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsb0NBQW9DOzRCQUM1QyxVQUFVLEVBQUUsNENBQTRDO3lCQUN6RDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsaUJBQWlCO3dCQUM1QixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxnREFBZ0Q7Z0JBQzVELGdCQUFnQixFQUFFO29CQUNoQixvREFBb0Q7b0JBQ3BELHdEQUF3RDtpQkFDekQ7YUFDRjtZQUNELDBCQUEwQixFQUFFO2dCQUMxQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWix1QkFBdUIsRUFBRTt3QkFDdkIsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx5RkFBeUY7cUJBQ3pHO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsd0RBQXdEO3dCQUN2RSxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLDBDQUEwQzs0QkFDbEQsVUFBVSxFQUFFLGtEQUFrRDt5QkFDL0Q7cUJBQ0Y7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLGdEQUFnRDthQUM3RDtZQUNELDRCQUE0QixFQUFFO2dCQUM1QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWix1QkFBdUIsRUFBRTt3QkFDdkIsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxrRUFBa0U7cUJBQ2xGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsc0RBQXNEO3dCQUNyRSxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLDBDQUEwQzs0QkFDbEQsVUFBVSxFQUFFLGtEQUFrRDt5QkFDL0Q7cUJBQ0Y7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLGtEQUFrRDthQUMvRDtZQUNELDRCQUE0QixFQUFFO2dCQUM1QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLHVDQUF1Qzt3QkFDdEQsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSxpQ0FBaUM7NEJBQ3pDLFVBQVUsRUFBRSx5Q0FBeUM7eUJBQ3REO3FCQUNGO29CQUNELEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLFNBQVM7cUJBQ3pCO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxrREFBa0Q7YUFDL0Q7WUFDRCw0QkFBNEIsRUFBRTtnQkFDNUIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osYUFBYSxFQUFFO3dCQUNiLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsbURBQW1EO3dCQUNsRSxzQkFBc0IsRUFBRTs0QkFDdEIsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSxtREFBbUQ7eUJBQ25FO3dCQUNELFVBQVUsRUFBRSx3Q0FBd0M7cUJBQ3JEO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsMENBQTBDO3dCQUNsRCxVQUFVLEVBQUUsaURBQWlEO3FCQUM5RDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxhQUFhO3FCQUM3QjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsa0RBQWtEO2FBQy9EO1lBQ0QsbUJBQW1CLEVBQUU7Z0JBQ25CLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFNBQVMsRUFBRTt3QkFDVCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLDRCQUE0QjtxQkFDNUM7b0JBQ0Qsc0JBQXNCLEVBQUU7d0JBQ3RCLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsZ0RBQWdEO3FCQUNoRTtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxXQUFXO3FCQUMzQjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUseUNBQXlDO2FBQ3REO1lBQ0QsMkJBQTJCLEVBQUU7Z0JBQzNCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxnQkFBZ0IsRUFBRTt3QkFDaEIsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwrQ0FBK0M7cUJBQy9EO29CQUNELFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLCtDQUErQztxQkFDL0Q7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsNkRBQTZEO3dCQUM1RSxVQUFVLEVBQUUsTUFBTTtxQkFDbkI7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLGtCQUFrQjt3QkFDN0IsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUscUNBQXFDO3dCQUM3QyxVQUFVLEVBQUUsNENBQTRDO3FCQUN6RDtvQkFDRCxhQUFhLEVBQUU7d0JBQ2IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwyQ0FBMkM7cUJBQzNEO29CQUNELGNBQWMsRUFBRTt3QkFDZCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLG1EQUFtRDtxQkFDbkU7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSwwQkFBMEI7d0JBQ3pDLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLDBCQUEwQjt5QkFDMUM7cUJBQ0Y7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsc0NBQXNDO3FCQUN0RDtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx1Q0FBdUM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxpREFBaUQ7Z0JBQzdELGdCQUFnQixFQUFFO29CQUNoQiw2Q0FBNkM7aUJBQzlDO2FBQ0Y7WUFDRCwrQkFBK0IsRUFBRTtnQkFDL0IsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsNkJBQTZCO3dCQUM1QyxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLHlDQUF5Qzs0QkFDakQsVUFBVSxFQUFFLGlEQUFpRDt5QkFDOUQ7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLHNCQUFzQjt3QkFDakMsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsbUNBQW1DO3dCQUMzQyxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUscURBQXFEO2dCQUNqRSxnQkFBZ0IsRUFBRTtvQkFDaEIsb0RBQW9EO29CQUNwRCx3REFBd0Q7aUJBQ3pEO2FBQ0Y7WUFDRCw4QkFBOEIsRUFBRTtnQkFDOUIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLCtDQUErQztxQkFDL0Q7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixhQUFhLEVBQUUsc0RBQXNEO3dCQUNyRSxVQUFVLEVBQUUsTUFBTTtxQkFDbkI7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLHFCQUFxQjt3QkFDaEMsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUscUNBQXFDO3dCQUM3QyxVQUFVLEVBQUUsNENBQTRDO3FCQUN6RDtvQkFDRCxhQUFhLEVBQUU7d0JBQ2IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwyQ0FBMkM7cUJBQzNEO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsMEJBQTBCO3dCQUN6QyxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSwwQkFBMEI7eUJBQzFDO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHlCQUF5QjtxQkFDekM7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsc0NBQXNDO3FCQUN0RDtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx5R0FBeUc7cUJBQ3pIO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxvREFBb0Q7Z0JBQ2hFLGdCQUFnQixFQUFFO29CQUNoQiw2Q0FBNkM7aUJBQzlDO2FBQ0Y7WUFDRCxrQ0FBa0MsRUFBRTtnQkFDbEMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsb0NBQW9DO3dCQUNuRCxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLDRDQUE0Qzs0QkFDcEQsVUFBVSxFQUFFLG9EQUFvRDt5QkFDakU7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLHlCQUF5Qjt3QkFDcEMsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsbUNBQW1DO3dCQUMzQyxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsd0RBQXdEO2dCQUNwRSxnQkFBZ0IsRUFBRTtvQkFDaEIsb0RBQW9EO29CQUNwRCx3REFBd0Q7aUJBQ3pEO2FBQ0Y7WUFDRCxzQkFBc0IsRUFBRTtnQkFDdEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxhQUFhO3dCQUN4QixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO29CQUNELGNBQWMsRUFBRTt3QkFDZCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsaURBQWlEO3dCQUNoRSxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSxpREFBaUQ7eUJBQ2pFO3FCQUNGO29CQUNELHVCQUF1QixFQUFFO3dCQUN2QixNQUFNLEVBQUUsU0FBUzt3QkFDakIsYUFBYSxFQUFFLHdIQUF3SDtxQkFDeEk7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsd0NBQXdDO3FCQUN4RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsNENBQTRDO2dCQUN4RCxnQkFBZ0IsRUFBRTtvQkFDaEIsNkNBQTZDO2lCQUM5QzthQUNGO1lBQ0QsbUNBQW1DLEVBQUU7Z0JBQ25DLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx1REFBdUQ7cUJBQ3ZFO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSwwQkFBMEI7d0JBQ3JDLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLHFDQUFxQzt3QkFDN0MsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSx3QkFBd0I7d0JBQ3ZDLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLHdCQUF3Qjt5QkFDeEM7cUJBQ0Y7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsdUNBQXVDO3FCQUN2RDtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx3SEFBd0g7cUJBQ3hJO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSx5REFBeUQ7Z0JBQ3JFLGdCQUFnQixFQUFFO29CQUNoQiw2Q0FBNkM7aUJBQzlDO2FBQ0Y7WUFDRCx1Q0FBdUMsRUFBRTtnQkFDdkMsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUscUNBQXFDO3dCQUNwRCxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLGlEQUFpRDs0QkFDekQsVUFBVSxFQUFFLHlEQUF5RDt5QkFDdEU7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLDhCQUE4Qjt3QkFDekMsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsbUNBQW1DO3dCQUMzQyxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsNkRBQTZEO2dCQUN6RSxnQkFBZ0IsRUFBRTtvQkFDaEIsb0RBQW9EO29CQUNwRCx3REFBd0Q7aUJBQ3pEO2FBQ0Y7WUFDRCwwQkFBMEIsRUFBRTtnQkFDMUIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsdUJBQXVCO3dCQUN0QyxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLG9DQUFvQzs0QkFDNUMsVUFBVSxFQUFFLDRDQUE0Qzt5QkFDekQ7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLGlCQUFpQjt3QkFDNUIsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsbUNBQW1DO3dCQUMzQyxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsZ0RBQWdEO2dCQUM1RCxnQkFBZ0IsRUFBRTtvQkFDaEIsb0RBQW9EO29CQUNwRCx3REFBd0Q7aUJBQ3pEO2FBQ0Y7WUFDRCxvQkFBb0IsRUFBRTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxTQUFTO3dCQUNwQixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsc0NBQXNDO3dCQUM5QyxVQUFVLEVBQUUsNENBQTRDO3FCQUN6RDtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLHdDQUF3Qzt3QkFDaEQsVUFBVSxFQUFFLDhDQUE4QztxQkFDM0Q7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHdDQUF3QztnQkFDcEQsZ0JBQWdCLEVBQUU7b0JBQ2hCLDZDQUE2QztpQkFDOUM7YUFDRjtZQUNELHdCQUF3QixFQUFFO2dCQUN4QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxrQkFBa0I7d0JBQ2pDLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsa0NBQWtDOzRCQUMxQyxVQUFVLEVBQUUsd0NBQXdDO3lCQUNyRDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsYUFBYTt3QkFDeEIsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsbUNBQW1DO3dCQUMzQyxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsNENBQTRDO2dCQUN4RCxnQkFBZ0IsRUFBRTtvQkFDaEIsb0RBQW9EO29CQUNwRCx3REFBd0Q7aUJBQ3pEO2FBQ0Y7WUFDRCwyQkFBMkIsRUFBRTtnQkFDM0IsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELGFBQWEsRUFBRTt3QkFDYixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLG1DQUFtQztxQkFDbkQ7b0JBQ0QsYUFBYSxFQUFFO3dCQUNiLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsb0NBQW9DO3FCQUNwRDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsZ0JBQWdCO3dCQUMzQixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwrQ0FBK0M7Z0JBQzNELGdCQUFnQixFQUFFO29CQUNoQiw2Q0FBNkM7aUJBQzlDO2FBQ0Y7WUFDRCx3QkFBd0IsRUFBRTtnQkFDeEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSx1RkFBdUY7d0JBQ3RHLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLHVGQUF1Rjt5QkFDdkc7cUJBQ0Y7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDRDQUE0QzthQUN6RDtZQUNELDBCQUEwQixFQUFFO2dCQUMxQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxxREFBcUQ7cUJBQ3JFO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSw4Q0FBOEM7YUFDM0Q7WUFDRCxnQkFBZ0IsRUFBRTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxPQUFPO3dCQUNsQixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsa0NBQWtDO3dCQUMxQyxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLG9DQUFvQzt3QkFDNUMsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHNDQUFzQztnQkFDbEQsZ0JBQWdCLEVBQUU7b0JBQ2hCLDZDQUE2QztpQkFDOUM7YUFDRjtZQUNELG9CQUFvQixFQUFFO2dCQUNwQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxnQkFBZ0I7d0JBQy9CLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsOEJBQThCOzRCQUN0QyxVQUFVLEVBQUUsc0NBQXNDO3lCQUNuRDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsV0FBVzt3QkFDdEIsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsbUNBQW1DO3dCQUMzQyxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsMENBQTBDO2dCQUN0RCxnQkFBZ0IsRUFBRTtvQkFDaEIsb0RBQW9EO29CQUNwRCx3REFBd0Q7aUJBQ3pEO2FBQ0Y7WUFDRCxvQkFBb0IsRUFBRTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsZ0RBQWdEO3FCQUNoRTtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx3RUFBd0U7cUJBQ3hGO29CQUNELEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsa0NBQWtDO3dCQUMxQyxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtvQkFDRCxJQUFJLEVBQUU7d0JBQ0osTUFBTSxFQUFFLDBDQUEwQzt3QkFDbEQsVUFBVSxFQUFFLGlEQUFpRDtxQkFDOUQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDBDQUEwQzthQUN2RDtZQUNELHNCQUFzQixFQUFFO2dCQUN0QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSw0Q0FBNEM7YUFDekQ7WUFDRCxvQkFBb0IsRUFBRTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osZUFBZSxFQUFFO3dCQUNmLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsa0RBQWtEO3FCQUNsRTtvQkFDRCxhQUFhLEVBQUU7d0JBQ2IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwrQkFBK0I7cUJBQy9DO29CQUNELDBCQUEwQixFQUFFO3dCQUMxQixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGtOQUFrTjtxQkFDbE87b0JBQ0QsS0FBSyxFQUFFO3dCQUNMLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsNEJBQTRCO3FCQUM1QztvQkFDRCxhQUFhLEVBQUU7d0JBQ2IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx5Q0FBeUM7cUJBQ3pEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSwwQ0FBMEM7YUFDdkQ7WUFDRCx1QkFBdUIsRUFBRTtnQkFDdkIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osYUFBYSxFQUFFO3dCQUNiLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsbUNBQW1DO3FCQUNuRDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSwrQkFBK0I7cUJBQy9DO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLG9NQUFvTTtxQkFDcE47b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsdUJBQXVCO3FCQUN2QztvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLGFBQWEsRUFBRSxxRUFBcUU7cUJBQ3JGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLG1EQUFtRDtxQkFDbkU7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDBDQUEwQzthQUN2RDtZQUNELHNCQUFzQixFQUFFO2dCQUN0QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLFVBQVU7d0JBQ3JCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSx3R0FBd0c7d0JBQ3ZILHNCQUFzQixFQUFFOzRCQUN0QixNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLHdHQUF3Rzt5QkFDeEg7d0JBQ0QsVUFBVSxFQUFFLHdDQUF3QztxQkFDckQ7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO29CQUNELFNBQVMsRUFBRTt3QkFDVCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsNENBQTRDO3dCQUMzRCxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLCtDQUErQzs0QkFDdkQsVUFBVSxFQUFFLDZDQUE2Qzt5QkFDMUQ7cUJBQ0Y7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSw0RUFBNEU7d0JBQzNGLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUscUNBQXFDOzRCQUM3QyxVQUFVLEVBQUUsMENBQTBDO3lCQUN2RDtxQkFDRjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUseUNBQXlDO2dCQUNyRCxnQkFBZ0IsRUFBRTtvQkFDaEIsNkNBQTZDO2lCQUM5QzthQUNGO1lBQ0QsMEJBQTBCLEVBQUU7Z0JBQzFCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLE9BQU87d0JBQ2YsYUFBYSxFQUFFLG1CQUFtQjt3QkFDbEMsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSxvQ0FBb0M7NEJBQzVDLFVBQVUsRUFBRSx5Q0FBeUM7eUJBQ3REO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxjQUFjO3dCQUN6QixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSw2Q0FBNkM7Z0JBQ3pELGdCQUFnQixFQUFFO29CQUNoQixvREFBb0Q7b0JBQ3BELHdEQUF3RDtpQkFDekQ7YUFDRjtZQUNELGVBQWUsRUFBRTtnQkFDZixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLE9BQU87d0JBQ2xCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLHFDQUFxQzt3QkFDN0MsVUFBVSxFQUFFLDRDQUE0QztxQkFDekQ7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSw2QkFBNkI7d0JBQzVDLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsUUFBUTs0QkFDaEIsYUFBYSxFQUFFLDZCQUE2Qjt5QkFDN0M7cUJBQ0Y7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLHNDQUFzQztnQkFDbEQsZ0JBQWdCLEVBQUU7b0JBQ2hCLDZDQUE2QztpQkFDOUM7YUFDRjtZQUNELG1CQUFtQixFQUFFO2dCQUNuQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRTtvQkFDWixZQUFZLEVBQUU7d0JBQ1osTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsSUFBSTt3QkFDZixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFOzRCQUNOLElBQUk7eUJBQ0w7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxPQUFPO3dCQUNmLGFBQWEsRUFBRSxnQkFBZ0I7d0JBQy9CLE9BQU8sRUFBRTs0QkFDUCxNQUFNLEVBQUUsNkJBQTZCOzRCQUNyQyxVQUFVLEVBQUUsc0NBQXNDO3lCQUNuRDtxQkFDRjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsV0FBVzt3QkFDdEIsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsbUNBQW1DO3dCQUMzQyxVQUFVLEVBQUUsMENBQTBDO3FCQUN2RDtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsMENBQTBDO2dCQUN0RCxnQkFBZ0IsRUFBRTtvQkFDaEIsb0RBQW9EO29CQUNwRCx3REFBd0Q7aUJBQ3pEO2FBQ0Y7WUFDRCxrQkFBa0IsRUFBRTtnQkFDbEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLHFDQUFxQzt3QkFDcEQsc0JBQXNCLEVBQUU7NEJBQ3RCLE1BQU0sRUFBRSxRQUFROzRCQUNoQixhQUFhLEVBQUUscUNBQXFDO3lCQUNyRDt3QkFDRCxVQUFVLEVBQUUsd0NBQXdDO3FCQUNyRDtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixTQUFTLEVBQUUsVUFBVTt3QkFDckIsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUscUNBQXFDO3dCQUM3QyxVQUFVLEVBQUUsNENBQTRDO3FCQUN6RDtvQkFDRCxjQUFjLEVBQUU7d0JBQ2QsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxnQ0FBZ0M7cUJBQ2hEO29CQUNELGtCQUFrQixFQUFFO3dCQUNsQixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLGdFQUFnRTtxQkFDaEY7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSwwQ0FBMEM7d0JBQ2xELFVBQVUsRUFBRSxpREFBaUQ7cUJBQzlEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSx5Q0FBeUM7Z0JBQ3JELGdCQUFnQixFQUFFO29CQUNoQiw2Q0FBNkM7aUJBQzlDO2FBQ0Y7WUFDRCxzQkFBc0IsRUFBRTtnQkFDdEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsb0JBQW9CO3dCQUNuQyxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLGdDQUFnQzs0QkFDeEMsVUFBVSxFQUFFLHlDQUF5Qzt5QkFDdEQ7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLGNBQWM7d0JBQ3pCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLG1DQUFtQzt3QkFDM0MsVUFBVSxFQUFFLDBDQUEwQztxQkFDdkQ7aUJBQ0Y7Z0JBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLDZDQUE2QztnQkFDekQsZ0JBQWdCLEVBQUU7b0JBQ2hCLG9EQUFvRDtvQkFDcEQsd0RBQXdEO2lCQUN6RDthQUNGO1lBQ0QsY0FBYyxFQUFFO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFO29CQUNaLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUU7NEJBQ04sSUFBSTt5QkFDTDtxQkFDRjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGFBQWEsRUFBRSxtQkFBbUI7cUJBQ25DO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsZ0JBQWdCO3dCQUMvQixPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSxnQkFBZ0I7eUJBQ2hDO3FCQUNGO29CQUNELFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsb0JBQW9CO3dCQUNuQyxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLGFBQWEsRUFBRSxvQkFBb0I7eUJBQ3BDO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxNQUFNO3dCQUNqQixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLFVBQVUsRUFBRSw0Q0FBNEM7cUJBQ3pEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxxQ0FBcUM7Z0JBQ2pELGdCQUFnQixFQUFFO29CQUNoQiw2Q0FBNkM7aUJBQzlDO2FBQ0Y7WUFDRCxrQkFBa0IsRUFBRTtnQkFDbEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFO3dCQUNaLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixJQUFJO3lCQUNMO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsT0FBTzt3QkFDZixhQUFhLEVBQUUsZUFBZTt3QkFDOUIsT0FBTyxFQUFFOzRCQUNQLE1BQU0sRUFBRSw0QkFBNEI7NEJBQ3BDLFVBQVUsRUFBRSxxQ0FBcUM7eUJBQ2xEO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFNBQVMsRUFBRSxVQUFVO3dCQUNyQixVQUFVLEVBQUUsSUFBSTtxQkFDakI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxtQ0FBbUM7d0JBQzNDLFVBQVUsRUFBRSwwQ0FBMEM7cUJBQ3ZEO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSx5Q0FBeUM7Z0JBQ3JELGdCQUFnQixFQUFFO29CQUNoQixvREFBb0Q7b0JBQ3BELHdEQUF3RDtpQkFDekQ7YUFDRjtZQUNELGdCQUFnQixFQUFFO2dCQUNoQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxvQ0FBb0M7YUFDakQ7U0FDRjtRQUNELE1BQU0sRUFBRSxRQUFRO1FBQ2hCLFlBQVksRUFBRTtZQUNaLG9CQUFvQixFQUFFO2dCQUNwQixNQUFNLEVBQUUsK0JBQStCO2dCQUN2QyxVQUFVLEVBQUUsb0RBQW9EO2FBQ2pFO1lBQ0QsaUJBQWlCLEVBQUU7Z0JBQ2pCLE1BQU0sRUFBRSx3Q0FBd0M7Z0JBQ2hELFVBQVUsRUFBRSxnREFBZ0Q7YUFDN0Q7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsTUFBTSxFQUFFLGtDQUFrQztnQkFDMUMsVUFBVSxFQUFFLDBDQUEwQzthQUN2RDtZQUNELGNBQWMsRUFBRTtnQkFDZCxNQUFNLEVBQUUscUNBQXFDO2dCQUM3QyxVQUFVLEVBQUUsNkNBQTZDO2FBQzFEO1lBQ0QsZUFBZSxFQUFFO2dCQUNmLE1BQU0sRUFBRSw4Q0FBOEM7Z0JBQ3RELFVBQVUsRUFBRSw4Q0FBOEM7YUFDM0Q7WUFDRCxzQkFBc0IsRUFBRTtnQkFDdEIsTUFBTSxFQUFFLHFEQUFxRDtnQkFDN0QsVUFBVSxFQUFFLHFEQUFxRDthQUNsRTtZQUNELDBCQUEwQixFQUFFO2dCQUMxQixNQUFNLEVBQUUseURBQXlEO2dCQUNqRSxVQUFVLEVBQUUseURBQXlEO2FBQ3RFO1lBQ0QsbUJBQW1CLEVBQUU7Z0JBQ25CLE1BQU0sRUFBRSxrREFBa0Q7Z0JBQzFELFVBQVUsRUFBRSxrREFBa0Q7YUFDL0Q7WUFDRCxvQkFBb0IsRUFBRTtnQkFDcEIsTUFBTSxFQUFFLG1EQUFtRDtnQkFDM0QsVUFBVSxFQUFFLG1EQUFtRDthQUNoRTtZQUNELHdCQUF3QixFQUFFO2dCQUN4QixNQUFNLEVBQUUsdURBQXVEO2dCQUMvRCxVQUFVLEVBQUUsdURBQXVEO2FBQ3BFO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLE1BQU0sRUFBRSx3Q0FBd0M7Z0JBQ2hELFVBQVUsRUFBRSx3Q0FBd0M7YUFDckQ7WUFDRCxpQkFBaUIsRUFBRTtnQkFDakIsTUFBTSxFQUFFLDBDQUEwQztnQkFDbEQsVUFBVSxFQUFFLGlEQUFpRDthQUM5RDtZQUNELHNCQUFzQixFQUFFO2dCQUN0QixNQUFNLEVBQUUsOENBQThDO2dCQUN0RCxVQUFVLEVBQUUscURBQXFEO2FBQ2xFO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLE1BQU0sRUFBRSxvQ0FBb0M7Z0JBQzVDLFVBQVUsRUFBRSwyQ0FBMkM7YUFDeEQ7WUFDRCxlQUFlLEVBQUU7Z0JBQ2YsTUFBTSxFQUFFLHdDQUF3QztnQkFDaEQsVUFBVSxFQUFFLCtDQUErQzthQUM1RDtZQUNELFFBQVEsRUFBRTtnQkFDUixNQUFNLEVBQUUsaUNBQWlDO2dCQUN6QyxVQUFVLEVBQUUsd0NBQXdDO2FBQ3JEO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLE1BQU0sRUFBRSxvQ0FBb0M7Z0JBQzVDLFVBQVUsRUFBRSwyQ0FBMkM7YUFDeEQ7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsTUFBTSxFQUFFLDZCQUE2QjtnQkFDckMsVUFBVSxFQUFFLHNDQUFzQzthQUNuRDtZQUNELFdBQVcsRUFBRTtnQkFDWCxNQUFNLEVBQUUsaUNBQWlDO2dCQUN6QyxVQUFVLEVBQUUsMENBQTBDO2FBQ3ZEO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLE1BQU0sRUFBRSxnQ0FBZ0M7Z0JBQ3hDLFVBQVUsRUFBRSx5Q0FBeUM7YUFDdEQ7WUFDRCxjQUFjLEVBQUU7Z0JBQ2QsTUFBTSxFQUFFLG9DQUFvQztnQkFDNUMsVUFBVSxFQUFFLDZDQUE2QzthQUMxRDtZQUNELFdBQVcsRUFBRTtnQkFDWCxNQUFNLEVBQUUsa0NBQWtDO2dCQUMxQyxVQUFVLEVBQUUsMENBQTBDO2FBQ3ZEO1lBQ0QsaUJBQWlCLEVBQUU7Z0JBQ2pCLE1BQU0sRUFBRSx3Q0FBd0M7Z0JBQ2hELFVBQVUsRUFBRSxnREFBZ0Q7YUFDN0Q7WUFDRCwwQkFBMEIsRUFBRTtnQkFDMUIsTUFBTSxFQUFFLHlEQUF5RDtnQkFDakUsVUFBVSxFQUFFLHlEQUF5RDthQUN0RTtZQUNELFdBQVcsRUFBRTtnQkFDWCxNQUFNLEVBQUUsb0NBQW9DO2dCQUM1QyxVQUFVLEVBQUUsMkNBQTJDO2FBQ3hEO1lBQ0QsZUFBZSxFQUFFO2dCQUNmLE1BQU0sRUFBRSx3Q0FBd0M7Z0JBQ2hELFVBQVUsRUFBRSwrQ0FBK0M7YUFDNUQ7WUFDRCxNQUFNLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLCtCQUErQjtnQkFDdkMsVUFBVSxFQUFFLHNDQUFzQzthQUNuRDtZQUNELFVBQVUsRUFBRTtnQkFDVixNQUFNLEVBQUUsbUNBQW1DO2dCQUMzQyxVQUFVLEVBQUUsMENBQTBDO2FBQ3ZEO1lBQ0Qsa0JBQWtCLEVBQUU7Z0JBQ2xCLE1BQU0sRUFBRSx5Q0FBeUM7Z0JBQ2pELFVBQVUsRUFBRSxpREFBaUQ7YUFDOUQ7WUFDRCxzQkFBc0IsRUFBRTtnQkFDdEIsTUFBTSxFQUFFLDZDQUE2QztnQkFDckQsVUFBVSxFQUFFLHFEQUFxRDthQUNsRTtZQUNELHFCQUFxQixFQUFFO2dCQUNyQixNQUFNLEVBQUUsNENBQTRDO2dCQUNwRCxVQUFVLEVBQUUsb0RBQW9EO2FBQ2pFO1lBQ0QseUJBQXlCLEVBQUU7Z0JBQ3pCLE1BQU0sRUFBRSxnREFBZ0Q7Z0JBQ3hELFVBQVUsRUFBRSx3REFBd0Q7YUFDckU7WUFDRCxhQUFhLEVBQUU7Z0JBQ2IsTUFBTSxFQUFFLG9DQUFvQztnQkFDNUMsVUFBVSxFQUFFLDRDQUE0QzthQUN6RDtZQUNELDBCQUEwQixFQUFFO2dCQUMxQixNQUFNLEVBQUUsaURBQWlEO2dCQUN6RCxVQUFVLEVBQUUseURBQXlEO2FBQ3RFO1lBQ0QsOEJBQThCLEVBQUU7Z0JBQzlCLE1BQU0sRUFBRSxxREFBcUQ7Z0JBQzdELFVBQVUsRUFBRSw2REFBNkQ7YUFDMUU7WUFDRCxpQkFBaUIsRUFBRTtnQkFDakIsTUFBTSxFQUFFLHdDQUF3QztnQkFDaEQsVUFBVSxFQUFFLGdEQUFnRDthQUM3RDtZQUNELFlBQVksRUFBRTtnQkFDWixNQUFNLEVBQUUscUNBQXFDO2dCQUM3QyxVQUFVLEVBQUUsNENBQTRDO2FBQ3pEO1lBQ0Qsa0JBQWtCLEVBQUU7Z0JBQ2xCLE1BQU0sRUFBRSwyQ0FBMkM7Z0JBQ25ELFVBQVUsRUFBRSxrREFBa0Q7YUFDL0Q7WUFDRCx1QkFBdUIsRUFBRTtnQkFDdkIsTUFBTSxFQUFFLGdEQUFnRDtnQkFDeEQsVUFBVSxFQUFFLHVEQUF1RDthQUNwRTtZQUNELDJCQUEyQixFQUFFO2dCQUMzQixNQUFNLEVBQUUsb0RBQW9EO2dCQUM1RCxVQUFVLEVBQUUsMkRBQTJEO2FBQ3hFO1lBQ0Qsc0JBQXNCLEVBQUU7Z0JBQ3RCLE1BQU0sRUFBRSwrQ0FBK0M7Z0JBQ3ZELFVBQVUsRUFBRSxzREFBc0Q7YUFDbkU7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsTUFBTSxFQUFFLGtDQUFrQztnQkFDMUMsVUFBVSxFQUFFLHlDQUF5QzthQUN0RDtZQUNELFFBQVEsRUFBRTtnQkFDUixNQUFNLEVBQUUsdUNBQXVDO2dCQUMvQyxVQUFVLEVBQUUsdUNBQXVDO2FBQ3BEO1lBQ0QsZUFBZSxFQUFFO2dCQUNmLE1BQU0sRUFBRSw4Q0FBOEM7Z0JBQ3RELFVBQVUsRUFBRSw4Q0FBOEM7YUFDM0Q7WUFDRCxtQkFBbUIsRUFBRTtnQkFDbkIsTUFBTSxFQUFFLGtEQUFrRDtnQkFDMUQsVUFBVSxFQUFFLGtEQUFrRDthQUMvRDtZQUNELFlBQVksRUFBRTtnQkFDWixNQUFNLEVBQUUsMkNBQTJDO2dCQUNuRCxVQUFVLEVBQUUsMkNBQTJDO2FBQ3hEO1lBQ0QsU0FBUyxFQUFFO2dCQUNULE1BQU0sRUFBRSxrQ0FBa0M7Z0JBQzFDLFVBQVUsRUFBRSx3Q0FBd0M7YUFDckQ7WUFDRCxhQUFhLEVBQUU7Z0JBQ2IsTUFBTSxFQUFFLHNDQUFzQztnQkFDOUMsVUFBVSxFQUFFLDRDQUE0QzthQUN6RDtZQUNELGdCQUFnQixFQUFFO2dCQUNoQixNQUFNLEVBQUUseUNBQXlDO2dCQUNqRCxVQUFVLEVBQUUsK0NBQStDO2FBQzVEO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLE1BQU0sRUFBRSw0Q0FBNEM7Z0JBQ3BELFVBQVUsRUFBRSwwQ0FBMEM7YUFDdkQ7WUFDRCwyQkFBMkIsRUFBRTtnQkFDM0IsTUFBTSxFQUFFLG9EQUFvRDtnQkFDNUQsVUFBVSxFQUFFLDJEQUEyRDthQUN4RTtZQUNELGVBQWUsRUFBRTtnQkFDZixNQUFNLEVBQUUsd0NBQXdDO2dCQUNoRCxVQUFVLEVBQUUsK0NBQStDO2FBQzVEO1lBQ0QsbUJBQW1CLEVBQUU7Z0JBQ25CLE1BQU0sRUFBRSw0Q0FBNEM7Z0JBQ3BELFVBQVUsRUFBRSxtREFBbUQ7YUFDaEU7WUFDRCxNQUFNLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLHFDQUFxQztnQkFDN0MsVUFBVSxFQUFFLHFDQUFxQzthQUNsRDtZQUNELGFBQWEsRUFBRTtnQkFDYixNQUFNLEVBQUUsNENBQTRDO2dCQUNwRCxVQUFVLEVBQUUsNENBQTRDO2FBQ3pEO1lBQ0QsaUJBQWlCLEVBQUU7Z0JBQ2pCLE1BQU0sRUFBRSxnREFBZ0Q7Z0JBQ3hELFVBQVUsRUFBRSxnREFBZ0Q7YUFDN0Q7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsTUFBTSxFQUFFLHlDQUF5QztnQkFDakQsVUFBVSxFQUFFLHlDQUF5QzthQUN0RDtZQUNELFdBQVcsRUFBRTtnQkFDWCxNQUFNLEVBQUUsNkJBQTZCO2dCQUNyQyxVQUFVLEVBQUUsMkNBQTJDO2FBQ3hEO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLE1BQU0sRUFBRSxrQ0FBa0M7Z0JBQzFDLFVBQVUsRUFBRSwwQ0FBMEM7YUFDdkQ7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsTUFBTSxFQUFFLGlDQUFpQztnQkFDekMsVUFBVSxFQUFFLHdDQUF3QzthQUNyRDtZQUNELFlBQVksRUFBRTtnQkFDWixNQUFNLEVBQUUscUNBQXFDO2dCQUM3QyxVQUFVLEVBQUUsNENBQTRDO2FBQ3pEO1lBQ0QsNEJBQTRCLEVBQUU7Z0JBQzVCLE1BQU0sRUFBRSxxREFBcUQ7Z0JBQzdELFVBQVUsRUFBRSw0REFBNEQ7YUFDekU7WUFDRCxnQ0FBZ0MsRUFBRTtnQkFDaEMsTUFBTSxFQUFFLHlEQUF5RDtnQkFDakUsVUFBVSxFQUFFLGdFQUFnRTthQUM3RTtZQUNELGdCQUFnQixFQUFFO2dCQUNoQixNQUFNLEVBQUUseUNBQXlDO2dCQUNqRCxVQUFVLEVBQUUsZ0RBQWdEO2FBQzdEO1lBQ0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLE1BQU0sRUFBRSw2Q0FBNkM7Z0JBQ3JELFVBQVUsRUFBRSxvREFBb0Q7YUFDakU7WUFDRCxhQUFhLEVBQUU7Z0JBQ2IsTUFBTSxFQUFFLHNDQUFzQztnQkFDOUMsVUFBVSxFQUFFLDZDQUE2QzthQUMxRDtZQUNELFFBQVEsRUFBRTtnQkFDUixNQUFNLEVBQUUsaUNBQWlDO2dCQUN6QyxVQUFVLEVBQUUsd0NBQXdDO2FBQ3JEO1lBQ0QscUJBQXFCLEVBQUU7Z0JBQ3JCLE1BQU0sRUFBRSxvREFBb0Q7Z0JBQzVELFVBQVUsRUFBRSxvREFBb0Q7YUFDakU7WUFDRCw2QkFBNkIsRUFBRTtnQkFDN0IsTUFBTSxFQUFFLDREQUE0RDtnQkFDcEUsVUFBVSxFQUFFLDREQUE0RDthQUN6RTtZQUNELFVBQVUsRUFBRTtnQkFDVixNQUFNLEVBQUUsaUNBQWlDO2dCQUN6QyxVQUFVLEVBQUUseUNBQXlDO2FBQ3REO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLE1BQU0sRUFBRSxvQ0FBb0M7Z0JBQzVDLFVBQVUsRUFBRSx5Q0FBeUM7YUFDdEQ7WUFDRCxjQUFjLEVBQUU7Z0JBQ2QsTUFBTSxFQUFFLHdDQUF3QztnQkFDaEQsVUFBVSxFQUFFLDZDQUE2QzthQUMxRDtZQUNELE1BQU0sRUFBRTtnQkFDTixNQUFNLEVBQUUsNEJBQTRCO2dCQUNwQyxVQUFVLEVBQUUscUNBQXFDO2FBQ2xEO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLE1BQU0sRUFBRSxnQ0FBZ0M7Z0JBQ3hDLFVBQVUsRUFBRSx5Q0FBeUM7YUFDdEQ7WUFDRCxZQUFZLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLDJDQUEyQztnQkFDbkQsVUFBVSxFQUFFLDRDQUE0QzthQUN6RDtTQUNGO1FBQ0Qsc0JBQXNCLEVBQUUsSUFBSTtLQUM3QixDQUFBO0FBR0gsQ0FBQyxFQXoyTk0sVUFBVSxLQUFWLFVBQVUsUUF5Mk5oQjs7QUMzMk5ELGlDQUFpQztBQUNqQywyQ0FBMkM7QUFDM0MsSUFBTyxVQUFVLENBMEVoQjtBQTFFRCxXQUFPLFVBQVUsRUFBQyxDQUFDO0lBR2pCLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUV2RCxzQkFBc0IsTUFBVSxFQUFFLElBQVcsRUFBRSxNQUFvQjtRQUNqRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsd0JBQXdCLE1BQU07UUFDNUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxVQUFDLFFBQVE7WUFDbkMsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBQyxRQUFRO2dCQUN0QyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFPLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsZ0JBQWdCLEVBQUUsVUFBQyxPQUFrQztZQUN4RiwwQkFBZSxFQUFFLENBQUM7WUFFbEIsT0FBTyxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsRUFBRSxVQUFDLElBQUksRUFBRSxNQUFNO2dCQUN4RCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztvQkFDdEIsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUMzQixNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNsQyxDQUFDO29CQUNELFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQUMsUUFBUTt3QkFDeEMsUUFBUSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUE7b0JBQzlCLENBQUMsQ0FBQyxDQUFDO29CQUNILFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQUMsUUFBUTt3QkFDekMsUUFBUSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUE7b0JBQy9CLENBQUMsQ0FBQyxDQUFDO29CQUNILFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQUMsUUFBUTt3QkFDcEMsUUFBUSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7b0JBQzNCLENBQUMsQ0FBQyxDQUFDO29CQUNILFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQUMsUUFBUTt3QkFDeEMsUUFBUSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7b0JBQzNCLENBQUMsQ0FBQyxDQUFDO29CQUNILGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekIsQ0FBQztnQkFFRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxVQUFVLEVBQUUsNEJBQTRCLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3ZILFlBQVksQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsVUFBQyxRQUFRO3dCQUMvQyxjQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQzt3QkFDOUIsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQzt3QkFDckMsUUFBUSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7b0JBQzVCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNoQyxNQUFNLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztvQkFDNUIsTUFBTSxDQUFDLElBQUksR0FBRzt3QkFDWixtQkFBbUIsRUFBRSxDQUFDLFVBQVUsQ0FBQzt3QkFDakMsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO3FCQUNqQixDQUFBO29CQUNELGNBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2pELENBQUM7WUFFSCxDQUFDLENBQUMsQ0FBQztZQUdILE9BQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFRLGlCQUFNLENBQUMsQ0FBQztZQUM5QyxtREFBbUQ7WUFDbkQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBTSxDQUFDLFdBQVcsRUFBRSxVQUFDLFVBQVUsRUFBRSxRQUFRO2dCQUN2RCwwQ0FBMEM7Z0JBQzFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzdELENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLGlCQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUlOLENBQUMsRUExRU0sVUFBVSxLQUFWLFVBQVUsUUEwRWhCOztBQzVFRCwyQ0FBMkM7QUFFM0MsSUFBTyxVQUFVLENBOENoQjtBQTlDRCxXQUFPLFVBQVUsRUFBQyxDQUFDO0lBRWpCLHFDQUFxQztJQUNyQztRQUNFLDZCQUFvQixPQUFzQjtZQUF0QixZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQzFDLENBQUM7UUFDRCxzQkFBSSwyQ0FBVTtpQkFBZDtnQkFDRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQUMsU0FBUztvQkFDckUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNqQyxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7OztXQUFBO1FBQ0Qsc0JBQUksa0RBQWlCO2lCQUFyQjtnQkFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNyQyxDQUFDO2lCQUNELFVBQXNCLFNBQWdCO2dCQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2QyxDQUFDOzs7V0FIQTtRQUlILDBCQUFDO0lBQUQsQ0FkQSxBQWNDLElBQUE7SUFFRCxrQkFBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLGdCQUFnQixFQUFFLFVBQUMsT0FBc0I7WUFDM0UsTUFBTSxDQUFDLElBQUksbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVKLGdEQUFnRDtJQUNoRCxrQkFBTyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxjQUFNLE9BQUEsMkJBQWdCLEVBQUUsRUFBbEIsQ0FBa0IsQ0FBQyxDQUFDO0lBRTlELGdDQUFnQztJQUNoQyxrQkFBTyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQztnQkFDTCxLQUFLLEVBQUUsY0FBTSxPQUFBLElBQUksRUFBSixDQUFJO2FBQ2xCLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUosaUdBQWlHO0lBQ2pHLGtCQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUMsaUJBQWlCLEVBQUUsVUFBQyxlQUFlO1lBQ3BFLE1BQU0sQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVKLGtCQUFPLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsVUFBQyxlQUFlO1lBQ3RGLE1BQU0sQ0FBQyxlQUFlLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUosa0JBQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxVQUFDLGVBQWU7WUFDeEUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFTixDQUFDLEVBOUNNLFVBQVUsS0FBVixVQUFVLFFBOENoQjs7QUNoREQseUNBQXlDO0FBQ3pDLDRDQUE0QztBQUM1QywyQ0FBMkM7QUFDM0MsMENBQTBDO0FBRTFDLElBQU8sVUFBVSxDQWtKaEI7QUFsSkQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVOLDZCQUFrQixHQUFHLHFCQUFVLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxVQUFDLE1BQU0sRUFBRSxLQUE0QixFQUFFLFlBQVksRUFBRSxLQUFxQjtZQUU5TCxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFFakQsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsR0FBNkIsSUFBSSxZQUFZLENBQXNCO2dCQUMvRixVQUFVLEVBQUUsS0FBSztnQkFDakIsaUJBQWlCLEVBQUUsSUFBSTtnQkFDdkIsR0FBRyxFQUFFLDJCQUFnQixFQUFFO2FBQ3hCLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsVUFBQyxJQUFJO2dCQUN2QyxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM5QixNQUFNLENBQUMsTUFBTSxHQUFHO29CQUNkLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDNUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBQ2hDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7d0JBQ3pCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQzt3QkFDZixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDekMsR0FBRyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDOzRCQUMvQixJQUFJLENBQUM7Z0NBQ0gsR0FBRyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQy9CLENBQUU7NEJBQUEsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQ0FDYixHQUFHLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztnQ0FDdEUsTUFBTSxDQUFDOzRCQUNULENBQUM7d0JBQ0gsQ0FBQzt3QkFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ2hELEdBQUcsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQzs0QkFDL0IsSUFBSSxDQUFDO2dDQUNILEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUMxQixDQUFFOzRCQUFBLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0NBQ2IsR0FBRyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0NBQ3RFLE1BQU0sQ0FBQzs0QkFDVCxDQUFDO3dCQUNILENBQUM7d0JBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ04sR0FBRyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUMzRCxNQUFNLENBQUM7d0JBQ1QsQ0FBQzt3QkFDRCxHQUFHLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUNuQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNyQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDcEQsQ0FBQzt3QkFDRCxhQUFhLENBQUMsR0FBRyxDQUFDOzRCQUNoQixNQUFNLEVBQUUsR0FBRzs0QkFDWCxPQUFPLEVBQUUsVUFBQyxJQUFJO2dDQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUM3RCxDQUFDOzRCQUNELEtBQUssRUFBRSxVQUFDLEdBQUc7Z0NBQ1QsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0NBQzNELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFdBQVcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQ2pHLENBQUM7eUJBQ0YsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQyxDQUFBO2dCQUNELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQztZQUVGLE1BQU0sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsVUFBQyxJQUFJO2dCQUN4QyxHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDL0IsaURBQWlEO1lBQ25ELENBQUMsQ0FBQztZQUVGLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLFVBQUMsSUFBeUI7Z0JBQ3hELEdBQUcsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDckMsQ0FBQyxDQUFDO1lBRUYsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsVUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU07Z0JBQ25ELEdBQUcsQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxRSxDQUFDLENBQUE7UUFFTCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRU0sOEJBQW1CLEdBQUcscUJBQVUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxVQUFDLE1BQU0sRUFBRSxPQUFzQjtZQUM5SCxNQUFNLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxVQUFDLFFBQVEsRUFBRSxRQUFRO2dCQUN4RCxFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDM0IsTUFBTSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzNDLENBQUM7WUFDRixDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLFVBQUMsUUFBUSxFQUFFLFFBQVE7Z0JBQzdDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUMzQixFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDM0IsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDaEMsQ0FBQztnQkFDRixDQUFDO1lBQ0YsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRVEsbUJBQVEsR0FBRyxxQkFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxVQUFDLE1BQU0sRUFBRSxpQkFBaUQsRUFBRSxlQUFlO1lBRXpLLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1lBRTNCLE1BQU0sQ0FBQyxXQUFXLEdBQUcsb0JBQVMsRUFBRSxDQUFDO1lBRWpDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsVUFBQyxJQUFJO2dCQUNyQixNQUFNLENBQUMsdUJBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUM7WUFFRixNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztZQUNyQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUN0QixNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNyQixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUN2QixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUV2QixNQUFNLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFFLFVBQUMsTUFBTSxFQUFFLEtBQUs7Z0JBQ3JELE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLElBQUksR0FBRyxVQUFDLFFBQVE7Z0JBQ3JCLElBQUksR0FBRyxHQUFPLElBQUksQ0FBQztnQkFDbkIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQztvQkFDSCxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekIsQ0FBRTtnQkFBQSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLGtDQUFrQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztnQkFDaEYsQ0FBQztnQkFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ1QsTUFBTSxDQUFDO2dCQUNULENBQUM7Z0JBQ0QsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLGFBQWEsQ0FBQyxHQUFHLENBQUM7b0JBQ2hCLE1BQU0sRUFBRSxHQUFHO29CQUNYLE9BQU8sRUFBRSxVQUFDLElBQUk7d0JBQ1osTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7d0JBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLGVBQWUsR0FBRyxrQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQzdELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RCLENBQUM7b0JBQ0QsS0FBSyxFQUFFLFVBQUMsR0FBRzt3QkFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsa0NBQWtDLEdBQUcsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQzt3QkFDdEYsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7d0JBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RCLENBQUM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDO1lBR0YsTUFBTSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUM7WUFFcEMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFVBQUMsUUFBUTtnQkFDL0IsTUFBTSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFTCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRU4sQ0FBQyxFQWxKTSxVQUFVLEtBQVYsVUFBVSxRQWtKaEI7O0FDdkpELDJDQUEyQztBQUMzQyxJQUFPLFVBQVUsQ0FzQmhCO0FBdEJELFdBQU8sVUFBVSxFQUFDLENBQUM7SUFFUCw4QkFBbUIsR0FBRyxxQkFBVSxDQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFVBQUMsTUFBTSxFQUFFLE9BQXNCO1lBQzlILE1BQU0sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLFVBQUMsUUFBUSxFQUFFLFFBQVE7Z0JBQzdDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUMzQixPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO1lBQ0YsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLHdCQUF3QixFQUFFLFVBQUMsUUFBUSxFQUFFLFFBQVE7Z0JBQzFELEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUMzQixNQUFNLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztnQkFDN0IsQ0FBQztZQUNGLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLFVBQUMsZ0JBQWdCO2dCQUM1RCxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsVUFBQyxTQUFhLElBQUssT0FBQSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBdkIsQ0FBdUIsQ0FBQyxDQUFDO1lBQ3pGLENBQUMsQ0FBQyxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVMLENBQUMsRUF0Qk0sVUFBVSxLQUFWLFVBQVUsUUFzQmhCOztBQ3ZCRCx5Q0FBeUM7QUFDekMsNENBQTRDO0FBQzVDLDJDQUEyQztBQUUzQyxJQUFPLFVBQVUsQ0FzUmhCO0FBdFJELFdBQU8sVUFBVSxFQUFDLENBQUM7SUFFakIsSUFBSSxpQkFBaUIsR0FBRyxrQkFBTyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxVQUFDLGNBQXVDLEVBQUUsUUFBMkIsRUFBRSxZQUFtQyxFQUFFLFFBQTJCLEVBQUUsT0FBeUIsRUFBRSxlQUFlLEVBQUUsZUFBZTtZQUU5VyxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDNUMsSUFBSSxLQUFLLEdBQUcsZUFBZSxDQUFDO1lBQzVCLElBQUksS0FBSyxHQUFHLGVBQWUsQ0FBQztZQUU1QixNQUFNLENBQUM7Z0JBQ0wsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsSUFBSSxFQUFFLFVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJO29CQUN6QixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztvQkFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO29CQUNwQyxLQUFLLENBQUMsU0FBUyxHQUFHLFVBQUMsSUFBVyxFQUFFLEdBQVU7d0JBQ3hDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7NEJBQ2IsS0FBSyxNQUFNO2dDQUNULE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUMvQixLQUFLLEtBQUs7Z0NBQ1IsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzlCLEtBQUssdUJBQXVCO2dDQUMxQixNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUNoRCxLQUFLLFNBQVM7Z0NBQ1osTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ2xDO2dDQUNFLE1BQU0sQ0FBQyxTQUFTLENBQUM7d0JBQ3JCLENBQUM7b0JBQ0gsQ0FBQyxDQUFDO29CQUVGLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO29CQUV6QixLQUFLLENBQUMsdUJBQXVCLEdBQUcsVUFBQyxPQUFPO3dCQUN0QyxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNuQyxDQUFDLENBQUM7b0JBQ0YsS0FBSyxDQUFDLFVBQVUsR0FBRyxVQUFDLE1BQU07d0JBQ3hCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOzRCQUNsQixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7NEJBQzFELEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxRQUFRO2dDQUNoRSxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFDLFVBQVU7b0NBQ3RDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQzt3Q0FDMUIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3Q0FDMUIsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBQyxDQUFDOzRDQUM3QixLQUFLLENBQUMsVUFBVSxDQUFDO2dEQUNmLGFBQWEsRUFBRSxDQUFDLENBQUMsT0FBTzs2Q0FDekIsQ0FBQyxDQUFDO3dDQUNMLENBQUMsQ0FBQyxDQUFDO29DQUNMLENBQUM7Z0NBQ0gsQ0FBQyxDQUFDLENBQUM7NEJBQ0wsQ0FBQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQztvQkFDSCxDQUFDLENBQUE7b0JBQ0QsS0FBSyxDQUFDLFVBQVUsR0FBRyxVQUFDLE1BQU07d0JBQ3hCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOzRCQUNsQixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7NEJBQzdELEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxRQUFRO2dDQUNoRSxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFDLFVBQVU7b0NBQ3RDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0NBQ3pCLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7d0NBQzNCLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQUMsQ0FBQzs0Q0FDN0IsS0FBSyxDQUFDLFVBQVUsQ0FBQztnREFDZixhQUFhLEVBQUUsQ0FBQyxDQUFDLE9BQU87NkNBQ3pCLENBQUMsQ0FBQzt3Q0FDTCxDQUFDLENBQUMsQ0FBQztvQ0FDTCxDQUFDO2dDQUNILENBQUMsQ0FBQyxDQUFDOzRCQUNMLENBQUMsQ0FBQyxDQUFDO3dCQUNMLENBQUM7b0JBQ0gsQ0FBQyxDQUFBO29CQUNEOzs7Ozs7Ozs7Ozs7O3NCQWFFO29CQUNGLEtBQUssQ0FBQywwQkFBMEIsR0FBRyxVQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU87d0JBQ2hFLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDNUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFFLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsQ0FBRSxDQUFDO3dCQUN4RixNQUFNLENBQUMsVUFBVSxHQUFHOzRCQUNsQixTQUFTLEVBQUUsQ0FBQzs0QkFDWixXQUFXLEVBQUUsU0FBUzt5QkFDdkIsQ0FBQzt3QkFDRixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUNiLEtBQUssS0FBSztnQ0FDUixLQUFLLENBQUM7NEJBQ1IsS0FBSyxTQUFTO2dDQUNaLE1BQU0sQ0FBQyxPQUFPLEdBQUc7b0NBQ2YsQ0FBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFFO29DQUN0QyxDQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUU7aUNBS3RDLENBQUM7Z0NBQ0YsS0FBSyxDQUFDOzRCQUNSLEtBQUssdUJBQXVCO2dDQUMxQixNQUFNLENBQUMsT0FBTyxHQUFHO29DQUNmLENBQUUsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFFO29DQUNwQyxDQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUU7aUNBS3ZDLENBQUM7Z0NBQ0YsS0FBSyxDQUFDO3dCQUNWLENBQUM7d0JBQ0QsOENBQThDO3dCQUM5QyxNQUFNLENBQUMsT0FBTyxDQUFDO29CQUNqQixDQUFDLENBQUM7b0JBQ0YscUJBQXFCLFFBQVEsRUFBRSxNQUFNO3dCQUNuQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN4QyxDQUFDO29CQUNELHVCQUF1QixRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUs7d0JBQy9DLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQzt3QkFDaEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQzt3QkFDMUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ3ZDLENBQUM7b0JBQ0Qsd0JBQXdCLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTTt3QkFDakQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBQyxLQUFLOzRCQUN0QixNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ25ELENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7b0JBQ0QsMkJBQTJCLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU07d0JBQzlELE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBQyxLQUFLOzRCQUNuQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTs0QkFDNUQsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFFLENBQUM7NEJBQ3pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0NBQ3JCLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0NBQ2pELFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzs0QkFDOUUsQ0FBQzt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUNELHlCQUF5QixJQUFJO3dCQUN6QixNQUFNLENBQUMsdUJBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDO29CQUNyRSxDQUFDO29CQUNEO3dCQUNFLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQ3hCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDaEIsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQzt3QkFDOUIsSUFBSSxzQkFBc0IsR0FBRyxLQUFLLENBQUMsc0JBQXNCLENBQUM7d0JBQzFELElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQ3RCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7d0JBQ3hCLHFDQUFxQzt3QkFDckMsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQzt3QkFDNUUsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDNUMsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDdEMsSUFBSSx3QkFBd0IsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7d0JBRXhFLFVBQVUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzNILHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBRW5MLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBQyxJQUFJOzRCQUNqQixJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7NEJBQzNHLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7NEJBQ2xFLFlBQVksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7NEJBQzlGLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ3pCLENBQUMsQ0FBQyxDQUFDO3dCQUNILHVGQUF1Rjt3QkFDdkYsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDMUMsUUFBUSxDQUFDLGNBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNqRSxDQUFDO29CQUVEO3dCQUNFLEtBQUssQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUU7NEJBQ3JDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7NEJBQ3BCLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7NEJBQzlCLElBQUksc0JBQXNCLEdBQUcsS0FBSyxDQUFDLHNCQUFzQixDQUFDOzRCQUMxRCxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDOzRCQUN0QixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDOzRCQUN4QixJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7NEJBQ2hELElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7NEJBQzlDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBQyxLQUFLLEVBQUUsQ0FBQztnQ0FDckIsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDL0IsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FDM0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0NBQ3hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUN0QixNQUFNLENBQUM7Z0NBQ1QsQ0FBQztnQ0FDRCxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dDQUNuQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29DQUNiLEtBQUssTUFBTTt3Q0FDVCxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7NENBQzVCLE1BQU0sQ0FBQzt3Q0FDVCxDQUFDO3dDQUNELEtBQUssQ0FBQztvQ0FDUixLQUFLLFNBQVM7d0NBQ1osRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLElBQUksdUJBQVksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7NENBQy9HLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7NENBQ3ZDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzs0Q0FDNUMsTUFBTSxDQUFDO3dDQUNULENBQUM7d0NBQ0QsS0FBSyxDQUFDO29DQUNSLEtBQUssS0FBSzt3Q0FDUjs7OzswQ0FJRTt3Q0FDRixFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7NENBQzNCLE1BQU0sQ0FBQzt3Q0FDVCxDQUFDO3dDQUNELEtBQUssQ0FBQztvQ0FDUixLQUFLLHVCQUF1Qjt3Q0FDMUIsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7NENBQzdDLElBQUkscUJBQXFCLEdBQUcsS0FBSyxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxDQUFDOzRDQUNuRSxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQzs0Q0FDMUQsTUFBTSxDQUFDO3dDQUNULENBQUM7d0NBQ0QsS0FBSyxDQUFDO29DQUNSO3dDQUNFLEdBQUcsQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQzt3Q0FDaEQsTUFBTSxDQUFDO2dDQUNYLENBQUM7Z0NBQ0QsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0NBQzdCLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQzs0QkFDakIsQ0FBQyxDQUFDLENBQUM7NEJBQ0gsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzs0QkFDM0MsSUFBSSx3QkFBd0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7NEJBQ3ZFLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7NEJBRXJDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDOzRCQUMvRixpQkFBaUIsQ0FBQyx3QkFBd0IsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDLEVBQUUsdUJBQXVCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQzs0QkFDdkosaUJBQWlCLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7NEJBQzNGLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBQyxJQUFJO2dDQUNqQixJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dDQUNqRSxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dDQUNsRSxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzVGLENBQUMsQ0FBQyxDQUFDO3dCQUNMLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7b0JBRUQ7d0JBQ0UsR0FBRyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO3dCQUNoQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3BDLFNBQVMsRUFBRSxDQUFDO3dCQUNkLENBQUM7d0JBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ04sTUFBTSxFQUFFLENBQUM7d0JBQ1gsQ0FBQzt3QkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNyQixDQUFDO29CQUVELEtBQUssQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQztvQkFDeEYsVUFBVSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbEMsQ0FBQzthQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUosSUFBSSxxQkFBcUIsR0FBRyxxQkFBVSxDQUFDLHVCQUF1QixFQUFFLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFDLE1BQU0sRUFBRSxTQUE2QjtZQUM1SCxNQUFNLENBQUMsV0FBVyxHQUFHLFVBQUMsTUFBTSxFQUFFLElBQVc7Z0JBQ3ZDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ1gsSUFBSSxTQUFTLEdBQUcsdUJBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDckMsSUFBSSxFQUFFLEdBQUcsa0JBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDekIsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEYsQ0FBQztnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDTixjQUFHLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7Z0JBQ3pDLENBQUM7WUFDSCxDQUFDLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUosSUFBSSxTQUFTLEdBQUcsb0JBQW9CLENBQUM7SUFFckMsSUFBSSxrQkFBa0IsR0FBRyxxQkFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsVUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCO1lBQ3hRLE1BQU0sQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDO1lBRS9CLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFFNUgsMkJBQTJCO1FBQzdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFTixDQUFDLEVBdFJNLFVBQVUsS0FBVixVQUFVLFFBc1JoQjs7QUMxUkQseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUUzQyxJQUFPLFVBQVUsQ0EwS2hCO0FBMUtELFdBQU8sVUFBVSxFQUFDLENBQUM7SUFFTiw4QkFBbUIsR0FBRyxxQkFBVSxDQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0I7UUFDOU8sVUFBQyxNQUFNLEVBQUUsZUFBaUQsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFNBQTZCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCO1lBRXpNLE1BQU0sQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDO1lBRS9CLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFFNUg7O2VBRUc7WUFDSDtnQkFDRSxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7Z0JBQ3ZCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO29CQUNyRSw2QkFBa0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdkQsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBRXRCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxVQUFDLFdBQVc7d0JBQy9DLElBQUksV0FBVyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUNqRCxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDOzRCQUNoQixhQUFhLENBQUMsV0FBVyxDQUFDLEdBQUc7Z0NBQzNCLFdBQVcsRUFBRSxXQUFXO2dDQUN4QixNQUFNLEVBQUUsRUFBRTtnQ0FDVixXQUFXLEVBQUUsSUFBSTtnQ0FDakIsYUFBYSxFQUFFLEVBQUU7Z0NBQ2pCLE1BQU0sRUFBRSxnQkFBZ0I7NkJBQ3pCLENBQUE7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDSCxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBQyxLQUFLO3dCQUNuQyxJQUFJLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDM0MsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzs0QkFDaEIsSUFBSSxRQUFRLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDOzRCQUMxQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0NBQ2Qsb0lBQW9JO2dDQUNwSSxPQUFPLENBQUMsR0FBRyxDQUFDLHdEQUF3RCxHQUFHLFdBQVcsR0FBRyxhQUFhLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUNwSCxDQUFDOzRCQUFDLElBQUksQ0FBQyxDQUFDO2dDQUNOLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUM5QixDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBRUgsd0dBQXdHO29CQUd4Ryx5R0FBeUc7b0JBRXpHLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztvQkFDbkIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsVUFBQyxZQUFZLEVBQUUsR0FBRzt3QkFDL0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzs0QkFDOUIseUJBQXlCOzRCQUN6QixTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDOzRCQUM3Qiw2Q0FBNkM7NEJBQzdDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDOzRCQUM5QyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFDLElBQUk7Z0NBQ2xDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztvQ0FDN0IsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0NBQ3hDLENBQUM7NEJBQ0gsQ0FBQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztvQkFFSCxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxVQUFDLGdCQUFnQjt3QkFDekQsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUMzQixnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7d0JBQzdDLENBQUM7d0JBQ0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsVUFBQyxPQUFPOzRCQUNqRCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDOzRCQUN4QixJQUFJLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQzs0QkFDbEQsRUFBRSxDQUFDLENBQUMsaUJBQWlCLElBQUksSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0NBQ2hELElBQUksSUFBSSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQztnQ0FDbEMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQ0FDVCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO29DQUNyQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGlCQUFpQixDQUFDLENBQUMsQ0FBQzt3Q0FDcEMsSUFBSSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQzt3Q0FDNUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs0Q0FDVCxzREFBc0Q7NENBQ3RELE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFVBQUMsWUFBWSxFQUFFLEdBQUc7Z0RBQy9DLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnREFDbkYsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvREFDdkUsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztvREFDckIsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7d0RBQ3BCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQzt3REFDOUYsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO3dEQUNkLElBQUksWUFBWSxHQUFHLFFBQVEsR0FBRyw0QkFBaUIsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO3dEQUMzRyxJQUFJLGtCQUFrQixHQUFHOzREQUN2QixXQUFXLEVBQUUsZ0JBQWdCOzREQUM3QixNQUFNLEVBQUUsaUJBQWlCOzREQUN6QixZQUFZLEVBQUUsWUFBWTs0REFDMUIsS0FBSyxFQUFFLElBQUk7eURBQ1osQ0FBQzt3REFDRixZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO29EQUN0RCxDQUFDO2dEQUNILENBQUM7NENBQ0gsQ0FBQyxDQUFDLENBQUM7d0NBQ0wsQ0FBQztvQ0FDSCxDQUFDO2dDQUNILENBQUM7NEJBQ0gsQ0FBQzt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztvQkFDSCxNQUFNLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFDL0IsQ0FBQztZQUNILENBQUM7WUFFRDs7ZUFFRztZQUNILDJCQUEyQixXQUFXO2dCQUNwQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzNFLENBQUM7WUFFRCxNQUFNLENBQUMsWUFBWSxHQUFHLGNBQU0sT0FBQSwyQkFBZ0IsRUFBaEIsQ0FBZ0IsQ0FBQztZQUM3QyxNQUFNLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQUMsSUFBZTtnQkFDOUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNkLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztnQkFFcEI7b0JBQ0UsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQzt3QkFDM0IsSUFBSSxFQUFFLENBQUM7b0JBQ1QsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQUksR0FBRyxHQUFHLHdCQUFhLEVBQUUsQ0FBQztnQkFDMUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7b0JBQ1osT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTtvQkFDN0MsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDVCxNQUFNLENBQUMsTUFBTSxHQUFHLHVCQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUN6QyxVQUFVLEVBQUUsQ0FBQztvQkFDZixDQUFDO29CQUNELFNBQVMsRUFBRSxDQUFDO2dCQUNkLENBQUMsQ0FBQztvQkFDRixLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO29CQUMzQyxjQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztvQkFDOUQsU0FBUyxFQUFFLENBQUM7Z0JBRWQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsR0FBRyxHQUFHLDhCQUFtQixFQUFFLENBQUM7Z0JBQzVCLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO29CQUNaLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07b0JBQzdDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ1QsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNqQyxVQUFVLEVBQUUsQ0FBQztvQkFDZixDQUFDO29CQUNELFNBQVMsRUFBRSxDQUFDO2dCQUNkLENBQUMsQ0FBQztvQkFDRixLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO29CQUMzQyxjQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztvQkFDOUQsU0FBUyxFQUFFLENBQUM7Z0JBQ2QsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsR0FBRyxHQUFHLG1DQUF3QixFQUFFLENBQUM7Z0JBQ2pDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO29CQUNaLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07b0JBQzdDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ1QsTUFBTSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7d0JBQ3RDLFVBQVUsRUFBRSxDQUFDO29CQUNmLENBQUM7b0JBQ0QsU0FBUyxFQUFFLENBQUM7Z0JBQ2QsQ0FBQyxDQUFDO29CQUNGLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07b0JBQzNDLGNBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO29CQUM5RCxTQUFTLEVBQUUsQ0FBQztnQkFDZCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFUixDQUFDLEVBMUtNLFVBQVUsS0FBVixVQUFVLFFBMEtoQjs7QUM3S0QseUNBQXlDO0FBQ3pDLDRDQUE0QztBQUM1QywyQ0FBMkM7QUFFM0MsSUFBTyxVQUFVLENBa0VoQjtBQWxFRCxXQUFPLFVBQVUsRUFBQyxDQUFDO0lBRU4sd0JBQWEsR0FBRyxxQkFBVSxDQUFDLGVBQWUsRUFDbkQsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxrQkFBa0I7UUFDbkssVUFBQyxNQUFNLEVBQUUsZUFBa0QsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUM1RixjQUF1QyxFQUFFLFNBQTZCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGdCQUFnQjtZQUVuSSxNQUFNLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQztZQUNwQyxNQUFNLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQztZQUMvQixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUV2QixNQUFNLENBQUMsVUFBVSxHQUFHO2dCQUNsQixVQUFVLEVBQUU7b0JBQ1YsbUJBQW1CLEVBQUU7d0JBQ25CLFFBQVEsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO3FCQUNuRDtvQkFDRCxjQUFjLEVBQUU7d0JBQ2QsUUFBUSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUM7cUJBQ3BEO29CQUNELFdBQVcsRUFBRTt3QkFDWCxRQUFRLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQztxQkFDckQ7b0JBQ0QsYUFBYSxFQUFFO3dCQUNiLFFBQVEsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO3FCQUNuRDtvQkFDRCxlQUFlLEVBQUU7d0JBQ2YsTUFBTSxFQUFFLElBQUk7cUJBQ2I7aUJBQ0Y7YUFDRixDQUFDO1lBRUYsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUU1SCxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFO2dCQUNuQyxVQUFVLEVBQUUsQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsVUFBQyxNQUFNO2dCQUNoQyxVQUFVLEVBQUUsQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsVUFBQyxRQUFRLEVBQUUsUUFBUTtnQkFDN0MsVUFBVSxFQUFFLENBQUM7WUFDZixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFVCxNQUFNLENBQUMsT0FBTyxHQUFHO2dCQUNmLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RCLENBQUMsQ0FBQztZQUVGLE1BQU0sQ0FBQyxRQUFRLEdBQUc7Z0JBQ2hCLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QiwwQkFBZSxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEYsQ0FBQyxDQUFDO1lBRUYsVUFBVSxFQUFFLENBQUM7WUFFYjtnQkFDRSxNQUFNLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDaEIsTUFBTSxDQUFDLFFBQVEsR0FBRyxvQkFBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztnQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxFQWxFTSxVQUFVLEtBQVYsVUFBVSxRQWtFaEI7O0FDdEVELHlDQUF5QztBQUN6Qyw0Q0FBNEM7QUFDNUMsMkNBQTJDO0FBRTNDLElBQU8sVUFBVSxDQW9DaEI7QUFwQ0QsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVOLDRCQUFpQixHQUFHLHFCQUFVLENBQUMsbUJBQW1CLEVBQzNELENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0I7UUFDM0ssVUFBQyxNQUFNLEVBQUUsZUFBa0QsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQzdGLGNBQXVDLEVBQUUsU0FBNkIsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxPQUFrQztZQUU5SixNQUFNLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQztZQUNwQyxNQUFNLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQztZQUMvQixNQUFNLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1lBQzNFLHNFQUFzRTtZQUV0RSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBRTVILE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLFVBQUMsTUFBTTtnQkFDaEMsVUFBVSxFQUFFLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztZQUVILFVBQVUsRUFBRSxDQUFDO1lBRWI7Z0JBQ0UsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2QsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNsRixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNwQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDeEIsQ0FBQztnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDTixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDeEIsQ0FBQztZQUNILENBQUM7WUFFRCxNQUFNLENBQUMsSUFBSSxHQUFHO2dCQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDLEVBcENNLFVBQVUsS0FBVixVQUFVLFFBb0NoQjs7QUN4Q0QsMkNBQTJDO0FBRTNDLElBQU8sVUFBVSxDQWlSaEI7QUFqUkQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUNqQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFM0MsSUFBSSxRQUFRLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7SUFDdEQsSUFBSSxPQUFPLEdBQUksYUFBYSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUM7SUFFckQsSUFBSSxJQUFJLEdBQVMsRUFBRSxDQUFDO0lBRXBCLElBQUksY0FBYyxHQUFHO1FBRW5CLEdBQUcsQ0FBQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUMvQyxJQUFJLE9BQU8sR0FBYyxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBQyxJQUFXO1lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQUMsUUFBNEI7WUFDckQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBQ0YsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFekUsSUFBSSxjQUFjLEdBQUc7UUFDbkIsUUFBUSxFQUFFLFNBQVM7UUFDbkIsS0FBSyxFQUFFLFNBQVM7UUFDaEIsT0FBTyxFQUFFLEVBQUU7UUFDWCxTQUFTLEVBQUUsRUFBRTtRQUNiLE9BQU8sRUFBRSxFQUFFO0tBQ1osQ0FBQztJQUVGLGtCQUFrQixDQUFDLHdCQUF3QixDQUFDO1FBQzFDLElBQUksRUFBRSx1QkFBdUI7UUFDN0IsT0FBTyxFQUFFLENBQUMsd0JBQXdCLENBQUM7UUFDbkMsSUFBSSxFQUFFLFVBQUMsSUFBSTtZQUNULElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNuQixFQUFFLENBQUMsQ0FBQyxzQkFBVyxDQUFDLENBQUMsQ0FBQztnQkFDaEIsR0FBRyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixHQUFHLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7WUFDdkQsQ0FBQztZQUNELGNBQWMsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQztnQkFDekMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsVUFBVTtnQkFDekMsT0FBTyxFQUFFLFVBQUMsT0FBTztvQkFDZixjQUFjLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztvQkFDakMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNaLE1BQU0sR0FBRyxJQUFJLENBQUM7d0JBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsb0JBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLDJCQUFnQixDQUFDLENBQUM7d0JBQ3JGLElBQUksRUFBRSxDQUFDO29CQUNULENBQUM7b0JBQ0QsR0FBRyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3hELENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBQyxLQUFTO29CQUNsQixHQUFHLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUMvQywwQkFBMEI7b0JBQzFCLHlCQUF5QjtvQkFDekIsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNaLE1BQU0sR0FBRyxJQUFJLENBQUM7d0JBQ2QsSUFBSSxFQUFFLENBQUM7b0JBQ1QsQ0FBQztnQkFDSCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUVILGtCQUFrQixDQUFDLHdCQUF3QixDQUFDO1FBQzFDLElBQUksRUFBRSx3QkFBd0I7UUFDOUIsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO1FBQ3pCLElBQUksRUFBRSxVQUFDLElBQUk7WUFDVCxzQkFBVyxHQUFHLEtBQUssQ0FBQztZQUVwQixJQUFJLFdBQVcsR0FBRyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDL0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN6QyxFQUFFLENBQUMsQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLFFBQVEsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xFLEdBQUcsQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFDckMsdUJBQXVCO2dCQUN2QixDQUFDLENBQUMsSUFBSSxDQUFDO29CQUNMLEdBQUcsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLHVCQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQztvQkFDL0QsUUFBUSxFQUFFLFVBQUMsS0FBSyxFQUFFLFVBQVU7d0JBQzFCLEVBQUUsQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDOzRCQUM3QixHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQzs0QkFDNUIsV0FBVyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDOzRCQUN6QyxXQUFXLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQzs0QkFDOUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQ0FDVixVQUFVLEVBQUUsVUFBQyxPQUFPO2dDQUVwQixDQUFDOzZCQUNGLENBQUMsQ0FBQzt3QkFDTCxDQUFDO3dCQUNELElBQUksRUFBRSxDQUFDO29CQUNULENBQUM7b0JBQ0QsVUFBVSxFQUFFLFVBQUMsT0FBTztvQkFFcEIsQ0FBQztpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sR0FBRyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNoQyxvREFBb0Q7Z0JBQ3BELElBQUksT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLHVCQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3pFLEdBQUcsQ0FBQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztnQkFDL0MsV0FBVyxDQUFDLHdCQUF3QixDQUFDO29CQUNuQyxHQUFHLEVBQUUsT0FBTztvQkFDWixPQUFPLEVBQUUsVUFBQyxJQUFJO3dCQUNaLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7NEJBQ1Qsc0JBQVcsR0FBRyxJQUFJLENBQUM7d0JBQ3JCLENBQUM7d0JBQ0QsSUFBSSxFQUFFLENBQUM7b0JBQ1QsQ0FBQztvQkFDRCxLQUFLLEVBQUUsVUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVc7d0JBQ3BDLElBQUksS0FBSyxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2hELEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzs0QkFDWCxHQUFHLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7d0JBQzFFLENBQUM7d0JBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ04sR0FBRyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDbEQsQ0FBQzt3QkFDRCxzQkFBVyxHQUFHLEtBQUssQ0FBQzt3QkFDcEIsSUFBSSxFQUFFLENBQUM7b0JBQ1QsQ0FBQztpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUVILElBQUksaUJBQWlCLEdBQUcsRUFBRSxDQUFDO0lBRTNCLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBQyxTQUFpQjtRQUNwQyxFQUFFLENBQUMsQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDMUMsTUFBTSxDQUFDO1FBQ1QsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzVCLEdBQUcsQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBQyxLQUFLLEVBQUUsR0FBRztnQkFDMUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbkMsTUFBTSxDQUFDO2dCQUNULENBQUM7Z0JBQ0QsR0FBRyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDeEMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFDLEdBQUc7Z0JBQzVDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ25DLE1BQU0sQ0FBQztnQkFDVCxDQUFDO2dCQUNELEdBQUcsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxjQUFjLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztRQUNwQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBQyxJQUFXO2dCQUNyQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUNqRCxNQUFNLENBQUM7Z0JBQ1QsQ0FBQztnQkFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxHQUFHLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxDQUFDO29CQUM3QyxJQUFJLE1BQU0sR0FBUzt3QkFDakIsSUFBSSxFQUFFLElBQUk7d0JBQ1YsU0FBUyxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxHQUFHLFNBQVM7d0JBQ2pFLE9BQU8sRUFBRSxVQUFDLE9BQU87NEJBQ2YsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7NEJBQ3hCLGVBQWUsRUFBRSxDQUFDO3dCQUNwQixDQUFDO3FCQUNGLENBQUM7b0JBQ0YsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQzt3QkFDOUIsTUFBTSxDQUFDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0MsQ0FBQztvQkFDRCxJQUFJLEtBQUssR0FBUyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM5QyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztvQkFDdEIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUV6QixJQUFJLENBQUMsWUFBWSxHQUFHLGNBQU0sT0FBQSxjQUFjLENBQUMsUUFBUSxFQUF2QixDQUF1QixDQUFDO0lBRWxELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxVQUFDLElBQVcsRUFBRSxHQUFnRDtRQUM3RixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDOUIsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ25DLElBQUksS0FBSyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUMxQixNQUFNLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztZQUN6QixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkIsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsVUFBQyxPQUFPO2dCQUN2QixLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztnQkFDeEIsZUFBZSxFQUFFLENBQUM7WUFDcEIsQ0FBQyxDQUFBO1lBQ0QsS0FBSyxHQUFTLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDdEIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELElBQUksQ0FBQyxRQUFRLEdBQUc7UUFDZCxJQUFJLE1BQU0sR0FBRyxVQUFDLElBQVc7WUFDdkIsMkNBQTJDO1lBQzNDLE1BQU0sQ0FBQSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ1osS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztnQkFDNUMsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztnQkFDNUMsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDdkMsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztnQkFDcEMsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztnQkFDNUMsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQztnQkFDOUMsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDO2dCQUN2RCxLQUFLLGFBQWEsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2pELEtBQUssYUFBYSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7Z0JBQ3hDLEtBQUssYUFBYSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUM7Z0JBQzlDLEtBQUssYUFBYSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0I7b0JBQzVDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBRWY7b0JBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNoQixDQUFDO1FBQ0gsQ0FBQyxDQUFBO1FBQ0QsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLHFCQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN0RCxFQUFFLENBQUMsQ0FBQyxzQkFBVyxDQUFDLENBQUMsQ0FBQztZQUNoQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUE7SUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQUMsSUFBWTtRQUM3QixFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUsscUJBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzlDLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELElBQUksQ0FBQyxTQUFTLEdBQWdDLEVBQUUsQ0FBQztJQUVqRCxnRUFBZ0U7SUFDaEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFVBQUMsRUFBOEI7UUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQyxDQUFBO0lBRUQsSUFBSSxjQUFjLEdBQVMsU0FBUyxDQUFDO0lBRXJDLGlEQUFpRDtJQUNqRCxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQztRQUMxQyxJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCLE9BQU8sRUFBRSxDQUFDLHdCQUF3QixDQUFDO1FBQ25DLElBQUksRUFBRSxVQUFDLElBQUk7WUFDVCxFQUFFLENBQUMsQ0FBQyxzQkFBVyxDQUFDLENBQUMsQ0FBQztnQkFFaEIsY0FBYyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUM7b0JBQ25DLElBQUksRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVE7b0JBQ3ZDLFNBQVMsRUFBRSxTQUFTO29CQUNwQixPQUFPLEVBQUUsVUFBQyxPQUFPO3dCQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzRCQUM1QyxHQUFHLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDOzRCQUNyQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBQyxRQUFvQztnQ0FDN0QsUUFBUSxDQUFDO29DQUNQLFFBQVEsRUFBRSxPQUFPO2lDQUNsQixDQUFDLENBQUM7NEJBQ0wsQ0FBQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQztvQkFDSCxDQUFDO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLEVBQUUsQ0FBQztRQUNULENBQUM7S0FDRixDQUFDLENBQUM7SUFHTCxrQkFBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRO1lBQzFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMsRUFqUk0sVUFBVSxLQUFWLFVBQVUsUUFpUmhCOztBQ25SRCwyQ0FBMkM7QUFDM0Msa0NBQWtDO0FBRWxDLElBQU8sVUFBVSxDQThUaEI7QUE5VEQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVqQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFFaEQsa0JBQU8sQ0FBQyxNQUFNLENBQUMsVUFBQyxpQ0FBaUM7UUFDL0MsaUNBQWlDLENBQUMsZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUM7SUFDMUUsQ0FBQyxDQUFDLENBQUM7SUFFSCxrQkFBTyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxVQUFDLFdBQWU7UUFDbEQsTUFBTSxDQUFDLHlCQUF5QixHQUFHLEVBQUUsU0FBUztZQUM1QyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsdUJBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyx1QkFBWSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsQ0FBQztZQUNELEdBQUcsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RCxHQUFHLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxrQkFBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxVQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxjQUFjO1FBQzVGLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsMkJBQTJCLFNBQVM7WUFDbEMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDckMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3hDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNqQixPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFDLEtBQUssRUFBRSxHQUFHO2dCQUNwQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDeEIsTUFBTSxDQUFDO2dCQUNULENBQUM7Z0JBQ0QsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztnQkFDdEMsUUFBUSxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxlQUFlLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHVCQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQzFGLElBQUksSUFBSSxHQUFHO1lBQ1QsaUJBQWlCLEVBQUU7Z0JBQ2pCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBQ0QsU0FBUyxFQUFFLEVBQUU7WUFDYixRQUFRLEVBQUUsRUFBRTtZQUNaLFdBQVcsRUFBRSxVQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxRQUEwQjtnQkFBMUIsd0JBQTBCLEdBQTFCLDBCQUEwQjtnQkFDakYsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQ3pELEVBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDakMsR0FBRyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDL0IsTUFBTSxDQUFDLFVBQVUsQ0FBQztnQkFDcEIsQ0FBQztnQkFDRCxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZCLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO2dCQUN4QixLQUFLLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztnQkFDcEMsS0FBSyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixFQUFFLENBQUEsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBLENBQUM7b0JBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQy9CLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQ3JCLENBQUM7Z0JBQUEsSUFBSSxDQUFBLENBQUM7b0JBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUM7d0JBQ25DLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzFCLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDWCxDQUFDO2dCQUNELElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxJQUFJLEdBQUc7b0JBQ1QsS0FBSyxFQUFFLEtBQUs7b0JBQ1osRUFBRSxFQUFFLEVBQUU7aUJBQ1AsQ0FBQztnQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDbEMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLENBQUMsVUFBVSxDQUFDO1lBQ3BCLENBQUM7WUFDRCxhQUFhLEVBQUUsVUFBQyxFQUFFO2dCQUNoQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QixFQUFFLENBQUEsQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDO29CQUNSLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDM0IsQ0FBQztnQkFDRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNULElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDMUIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwQyxDQUFDO1lBQ0gsQ0FBQztZQUNELGFBQWEsRUFBRSxVQUFDLEVBQUU7Z0JBQ2hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFDLEtBQUssRUFBRSxHQUFHO29CQUN6QyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDZixLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7d0JBQ2hDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNyQyxDQUFDO29CQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNOLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDbEMsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7U0FDRixDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0lBRUgsMEJBQWlDLEtBQUssRUFBRSxPQUFPLEVBQUUsZUFBZTtRQUM5RCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRTtZQUNyQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDakIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNWLE1BQU0sRUFBRSxNQUFNO1lBQ2QsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQ1QsTUFBTSxFQUFFLFlBQVk7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNQLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLEdBQUcsRUFBRSxFQUFFO1lBQ1AsSUFBSSxFQUFFLENBQUM7WUFDUCxLQUFLLEVBQUUsQ0FBQztZQUNSLE1BQU0sRUFBRSxDQUFDO1NBQ1YsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLEtBQUssR0FBRztZQUNaLGVBQWUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQztRQUNGLEtBQUssQ0FBQyxLQUFLLEdBQUc7WUFDWixlQUFlLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUM7UUFDRixLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFDLE1BQU07WUFDNUIsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQixFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNuQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN6QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLFdBQVcsR0FBRyxVQUFDLENBQUM7WUFDcEIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25CLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDMUIsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDdEIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDO1FBQ0YsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFDLENBQUM7WUFDakIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLEdBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ1gsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO29CQUNsQixLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUNiLE1BQU0sQ0FBQztnQkFDVCxDQUFDO2dCQUNELElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM1QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDL0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQy9CLElBQUksU0FBUyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7Z0JBQ2hDLElBQUksUUFBUSxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7Z0JBQzlCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDO29CQUNoQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQztnQkFDaEMsQ0FBQztnQkFDRCxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDbEIsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDcEIsQ0FBQztRQUNILENBQUMsQ0FBQztRQUNGLEtBQUssQ0FBQyxVQUFVLEdBQUcsVUFBQyxDQUFDO1lBQ25CLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUE7UUFDRCxLQUFLLENBQUMsU0FBUyxHQUFHLFVBQUMsQ0FBQztZQUNsQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkUsTUFBTSxDQUFDO1lBQ1QsQ0FBQztZQUNELEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQztRQUNGLEtBQUssQ0FBQyxPQUFPLEdBQUcsVUFBQyxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNuQixLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN2QixLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ2QsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM5QixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztnQkFDakQsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RDLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN2QixDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDO1FBQ0YsS0FBSyxDQUFDLFNBQVMsR0FBRyxVQUFDLENBQUM7WUFDbEIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDWCxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztvQkFDbEIsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLEtBQUssR0FBRyxJQUFJLENBQUM7b0JBQ2IsTUFBTSxDQUFDO2dCQUNULENBQUM7Z0JBQ0QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQy9CLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUMvQixJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDN0UsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2xCLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDLENBQUE7UUFFRCx1QkFBdUIsS0FBSyxFQUFFLE9BQU87WUFDbkMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM3QixLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN2QixDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLENBQUM7WUFDRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsQ0FBQztRQUNILENBQUM7UUFFRCxvQkFBb0IsS0FBSyxFQUFFLE9BQU87WUFDaEMsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUVELEtBQUssQ0FBQyxTQUFTLEdBQUc7WUFDaEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFBO1FBRUQsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFDLEVBQUU7WUFDbEIsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsQ0FBQztZQUNELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM5QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDekMsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNOLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQztvQkFDVixNQUFNLEVBQUUsU0FBUztvQkFDakIsTUFBTSxFQUFFLENBQUM7b0JBQ1QsS0FBSyxFQUFFLE1BQU07b0JBQ2IsR0FBRyxFQUFFLFVBQVU7b0JBQ2YsSUFBSSxFQUFFLENBQUM7aUJBQ1IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFBO1FBQ0QsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFDLEVBQUU7WUFDbEIsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsQ0FBQztZQUNELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hDLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMzQixLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztnQkFDdkUsZUFBZSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDdEMsQ0FBQztZQUNELE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQXpMZSwyQkFBZ0IsbUJBeUwvQixDQUFBO0lBRUQsa0JBQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsVUFBQyxRQUFRLEVBQUUsZUFBZTtRQUM1RCxNQUFNLENBQUM7WUFDTCxRQUFRLEVBQUUsR0FBRztZQUNiLEtBQUssRUFBRSxLQUFLO1lBQ1osSUFBSSxFQUFFLFVBQUMsS0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJO2dCQUM3QixnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHdIQUF3SCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN6SixDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsaUJBQWlCLEVBQUUsRUFBRSxLQUFLO1FBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsSUFBSSxHQUFHLEdBQUUsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUM5QixHQUFHLENBQUMsa0JBQWtCLEdBQUc7WUFDdEIsRUFBRSxDQUFBLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQSxDQUFDO2dCQUNyQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFBLENBQUM7b0JBQ25CLElBQUksR0FBRyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNyQyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ3BELEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUd0QixDQUFDO2dCQUFBLElBQUksQ0FBQSxDQUFDO2dCQUVOLENBQUM7WUFDSixDQUFDO1FBQ0osQ0FBQyxDQUFBO1FBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLEdBQUcsa0JBQU8sQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUNsRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLEVBOVRNLFVBQVUsS0FBVixVQUFVLFFBOFRoQjs7QUNqVUQsMkNBQTJDO0FBQzNDLCtCQUErQjtBQUUvQixJQUFPLFVBQVUsQ0FnS2hCO0FBaEtELFdBQU8sVUFBVSxFQUFDLENBQUM7SUFFakIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRTVDLGtCQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFO1FBQ3BDLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDWixDQUFDLENBQUMsQ0FBQztJQUVILGtCQUFPLENBQUMsR0FBRyxDQUFDLFVBQUMsa0JBQWtCO1FBQzdCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMxQyxxQ0FBcUM7UUFDckMsb0RBQW9EO1FBQ3BELElBQUksTUFBTSxHQUFHO1lBQ1gsSUFBSSxFQUFFLE9BQU87WUFDYixJQUFJLEVBQUUsS0FBSztZQUNYLElBQUksRUFBRSxPQUFPO1lBQ2IsSUFBSSxFQUFFLFFBQVE7WUFDZCxJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsT0FBTztTQUNkLENBQUE7UUFDRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBQyxHQUFHO1lBQzFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDVCxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQ2IsQ0FBQztZQUNELElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQztZQUNwQixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFDLEtBQUssRUFBRSxJQUFJO2dCQUMzQixJQUFJLEtBQUssR0FBRyxnQkFBZSxHQUFHLEtBQUssR0FBRyxLQUFJLENBQUM7Z0JBQzNDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUNqRSxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0RSxDQUFDLENBQUMsQ0FBQztZQUNILEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3BFLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3BFLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNuQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDcEMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN6QyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdkMsR0FBRyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNuRCxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILGtCQUFPLENBQUMsVUFBVSxDQUFDLGlDQUFpQyxFQUFFLFVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsY0FBYztRQUV2RyxNQUFNLENBQUMsUUFBUSxHQUFHLFVBQUMsTUFBTTtZQUN2QixHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNqQyxlQUFlLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsdUJBQVksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEssQ0FBQyxDQUFBO0lBRUgsQ0FBQyxDQUFDLENBQUM7SUFFSCxrQkFBTyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsVUFBQyxXQUFXLEVBQUUsa0JBQWtCO1FBQ2pFLE1BQU0sQ0FBQztZQUNMLFFBQVEsRUFBRSxHQUFHO1lBQ2IsUUFBUSxFQUFFLDRXQU1UO1lBQ0QsSUFBSSxFQUFFLFVBQUMsS0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJO2dCQUM3QixJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUV4QyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ1YsTUFBTSxDQUFDO2dCQUNULENBQUM7Z0JBRUQsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixLQUFLLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFFcEIsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsdUJBQVksRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBQ1YsTUFBTSxFQUFFLElBQUk7b0JBQ1osU0FBUyxFQUFFLElBQUk7b0JBQ2YsWUFBWSxFQUFFLFdBQVcsQ0FBQyxLQUFLO2lCQUNoQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUVsQixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO29CQUM1QixLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGNBQU0sT0FBQSxJQUFJLEVBQUosQ0FBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQUMsR0FBRzt3QkFDNUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFVBQUMsUUFBWTs0QkFDdEMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ2pDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ3RCLENBQUM7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQztvQkFDYixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNKLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7d0JBQ25CLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUN2QixDQUFDO29CQUNELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFVCxvQkFBb0IsSUFBSTtvQkFDdEIsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3RCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUNwQixLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQzFCLElBQUksRUFBRSxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO29CQUNoRSxFQUFFLENBQUMsU0FBUyxHQUFHLFVBQUMsS0FBSzt3QkFDbkIsSUFBSSxDQUFDOzRCQUNILElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUN0QyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDOzRCQUN2QixZQUFZLEVBQUUsQ0FBQzt3QkFDakIsQ0FBRTt3QkFBQSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUdmLENBQUM7b0JBQ0gsQ0FBQyxDQUFBO29CQUNELE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ1osQ0FBQztnQkFFRCxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRTFCLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQUMsS0FBSyxFQUFFLEdBQUc7b0JBQ2xDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUNsQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDdEUsQ0FBQzt3QkFBQyxJQUFJLENBQUMsQ0FBQzs0QkFDTixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQzdDLENBQUM7d0JBQ0QsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNYLEVBQUUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3hCLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUU7b0JBQ3JCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ1AsSUFBSSxDQUFDOzRCQUNILEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDYixDQUFFO3dCQUFBLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBRWYsQ0FBQzt3QkFDRCxPQUFPLEVBQUUsQ0FBQztvQkFDWixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztTQUNGLENBQUE7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILGtCQUFPLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxVQUFDLFFBQVEsRUFBRSxlQUFlO1FBQzFELE1BQU0sQ0FBQztZQUNMLFFBQVEsRUFBRSxHQUFHO1lBQ2IsS0FBSyxFQUFFLEtBQUs7WUFDWixJQUFJLEVBQUUsVUFBQyxLQUFTLEVBQUUsT0FBTyxFQUFFLElBQUk7Z0JBQzdCLDJCQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBQ2xELEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFDLEdBQUc7b0JBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFFTCxDQUFDLEVBaEtNLFVBQVUsS0FBVixVQUFVLFFBZ0toQjs7QUNuS0QseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUMzQyxzQ0FBc0M7QUFFdEMsSUFBTyxVQUFVLENBNkpoQjtBQTdKRCxXQUFPLFVBQVUsRUFBQyxDQUFDO0lBRU4sa0JBQU8sR0FBRyxxQkFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxVQUFDLE1BQU07WUFDM0QsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFSiwrQkFBK0I7SUFDcEIsZUFBSSxHQUFHLHFCQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0I7UUFDclAsVUFBQyxNQUFNLEVBQUUsZUFBa0QsRUFBRSxjQUE4QyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFNBQTZCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCO1lBRTdRLE1BQU0sQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBRXBELE1BQU0sQ0FBQyxXQUFXLEdBQUc7Z0JBQ25CLElBQUksRUFBRSxZQUFZO2dCQUNsQixxQkFBcUIsRUFBRSxJQUFJO2dCQUMzQix1QkFBdUIsRUFBRSxLQUFLO2dCQUM5QixXQUFXLEVBQUUsSUFBSTtnQkFDakIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLGFBQWEsRUFBRTtvQkFDYixVQUFVLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7aUJBQzFDO2dCQUNELFVBQVUsRUFBRTtvQkFDVjt3QkFDRSxLQUFLLEVBQUUsTUFBTTt3QkFDYixXQUFXLEVBQUUsTUFBTTt3QkFDbkIsV0FBVyxFQUFFLElBQUk7d0JBQ2pCLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO3FCQUNwRDtvQkFDRDt3QkFDRSxLQUFLLEVBQUUsWUFBWTt3QkFDbkIsV0FBVyxFQUFFLFFBQVE7d0JBQ3JCLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO3FCQUN4RDtvQkFDRCxFQUFFLEtBQUssRUFBRSxhQUFhO3dCQUNwQixXQUFXLEVBQUUsUUFBUTt3QkFDckIsWUFBWSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUM7cUJBQzlEO29CQUNEO3dCQUNFLEtBQUssRUFBRSxlQUFlO3dCQUN0QixXQUFXLEVBQUUsVUFBVTtxQkFDeEI7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLGNBQWM7d0JBQ3JCLFdBQVcsRUFBRSxLQUFLO3dCQUNsQixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQztxQkFDckQ7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLGFBQWE7d0JBQ3BCLFdBQVcsRUFBRSxRQUFRO3dCQUNyQixZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQztxQkFDdkQ7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLE9BQU87d0JBQ2QsV0FBVyxFQUFFLE1BQU07d0JBQ25CLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDO3FCQUN0RDtvQkFDRDt3QkFDRSxLQUFLLEVBQUUsYUFBYTt3QkFDcEIsV0FBVyxFQUFFLFFBQVE7d0JBQ3JCLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO3FCQUN2RDtvQkFDRDt3QkFDRSxLQUFLLEVBQUUsUUFBUTt3QkFDZixXQUFXLEVBQUUsUUFBUTt3QkFDckIsZUFBZSxFQUFFLFVBQUMsS0FBSzs0QkFDckIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUM5QyxDQUFDO3FCQUNGO2lCQUNGO2FBQ0YsQ0FBQztZQUVGLE1BQU0sQ0FBQyxRQUFRLEdBQUc7Z0JBQ2hCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDO2dCQUM1QyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUMxQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDZCxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO3dCQUN2QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUNULElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNoQixDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCwwQkFBZSxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEYsQ0FBQyxDQUFDO1lBRUYsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUU1SCxNQUFNLENBQUMsWUFBWSxHQUFHLFVBQUMsUUFBUTtnQkFDN0IsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9CLFFBQVEsR0FBRyxDQUFDOzRCQUNWLEVBQUUsRUFBRSxRQUFRO3lCQUNiLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELEVBQUUsQ0FBQyw0QkFBNEIsQ0FBbUM7b0JBQ2hFLFVBQVUsRUFBRSxRQUFRO29CQUNwQixLQUFLLEVBQUUsZUFBZTtvQkFDdEIsT0FBTyxFQUFFLFVBQUMsTUFBYzt3QkFDdEIsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzs0QkFDWCx3QkFBd0IsUUFBdUIsRUFBRSxJQUFZO2dDQUMzRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29DQUNULGNBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLGtCQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQ0FDdkMsY0FBYyxDQUFDLE1BQU0sQ0FBQzt3Q0FDcEIsRUFBRSxFQUFFLGtCQUFPLENBQUMsSUFBSSxDQUFDO3FDQUNsQixFQUFFLFNBQVMsRUFBRTt3Q0FDWixjQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxrQkFBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0NBQ3RDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7b0NBQzdDLENBQUMsRUFBRSxVQUFDLEtBQUs7d0NBQ1AsY0FBRyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsQ0FBQzt3Q0FDckMsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztvQ0FDN0MsQ0FBQyxDQUFDLENBQUM7Z0NBQ0wsQ0FBQzs0QkFDSCxDQUFDOzRCQUNELGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7d0JBQzdDLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxLQUFLLEVBQUUsY0FBYztvQkFDckIsTUFBTSxFQUFFLHFDQUFxQztvQkFDN0MsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLE9BQU8sRUFBRSxZQUFZO29CQUNyQixNQUFNLEVBQUUsNkNBQTZDO29CQUNyRCxXQUFXLEVBQUUscUJBQXFCO2lCQUNuQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixDQUFDLENBQUM7WUFFRixNQUFNLENBQUMsVUFBVSxHQUFFO2dCQUNqQixJQUFJLEdBQUcsR0FBRSxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUM5QixHQUFHLENBQUMsa0JBQWtCLEdBQUc7b0JBQ3ZCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDeEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUN0QixJQUFJLEdBQUcsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDckMsSUFBSSxNQUFNLEdBQUc7Z0NBQ1YsTUFBTSxFQUFFLFFBQVE7Z0NBQ2hCLFFBQVEsRUFBRTtvQ0FDUixLQUFLLEVBQUUsTUFBTTtvQ0FDYixLQUFLLEVBQUUsUUFBUTtpQ0FDaEI7Z0NBQ0QsTUFBTSxFQUFFLFFBQVE7Z0NBQ2hCLE1BQU0sRUFBRSxJQUFJOzZCQUNkLENBQUE7NEJBQ0QsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFFOUIsQ0FBQzt3QkFBQSxJQUFJLENBQUEsQ0FBQzt3QkFFTixDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQyxDQUFDO2dCQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUEsV0FBVztnQkFDckQsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQixDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxFQTdKTSxVQUFVLEtBQVYsVUFBVSxRQTZKaEI7O0FDaktEOzs7R0FHRztBQUNILElBQU8sVUFBVSxDQStmaEI7QUEvZkQsV0FBTyxVQUFVLEVBQUEsQ0FBQztJQUNWLElBQUksVUFBVSxHQUFHLENBQUMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLEdBQUcsRUFBQztRQUMvRixFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsR0FBRyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFFBQVEsRUFBQyxHQUFHLEVBQUM7UUFDOUcsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxRQUFRLEVBQUMsR0FBRyxFQUFDO1FBQy9HLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxRQUFRLEVBQUMsR0FBRyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUMvRyxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDdEgsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ2hILEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUM5RyxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDbEgsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQzVHLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUNqSCxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsb0JBQW9CLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUMxSCxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsaUJBQWlCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQy9ILEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUN4SCxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsbUJBQW1CLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUNoSSxFQUFDLFVBQVUsRUFBQyxrQkFBa0IsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUN6SCxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUNoSixFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUN0SixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUM3SSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUN4SixFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDbEssRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDOUosRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUM1TCxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3RKLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUN2SCxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDbkgsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3ZILEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUN0SCxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQzFILEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsa0JBQWtCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUN0SSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDcEksRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDakssRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDN0ksRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDbEosRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ3pILEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMs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QUMsaUJBQWlCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQzFILEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNsSCxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDdEksRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxrQkFBa0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ3hJLEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQzFGLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQzFGLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ3pGLEVBQUMsVUFBVSxFQUFDLG1CQUFtQixFQUFDLFFB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QVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDbEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNuSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzVHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ25ILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDekcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNuSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUM7UUFDdkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzVHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFB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QUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM1RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNySCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDckgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2hILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNuSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLE1BQU0sRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUN6RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUM7UUFDdEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3BILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQztRQUNySCxFQUFD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VUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ3pHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLEVBQUUsRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNsSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGtCQUFrQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDdkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNuSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDckgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsb0JBQW9CLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN6SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ25ILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDckgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxtQkFBbUIsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3hILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsbUJBQW1CLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN4SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGtCQUFrQixFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDdEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3RILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNySCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtB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LE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNwSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNySCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFB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TUFBTSxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsa0JBQWtCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN2SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2hILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3BILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDekgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxhQUFhLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNwSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3ZILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsYUFBYSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDcEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLE1BQU0sRUFBQyxhQUFhLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLGFBQWEsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3BILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsYUFBYSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDdEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNySCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFB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Q2QsTUFBTSxDQUFDLFdBQVcsQ0FBQzt3QkFDckIsQ0FBQzt3QkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUNaLENBQUMsQ0FBQTtvQkFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFO3dCQUM3QixTQUFTLEdBQUcsQ0FBQyxTQUFTLENBQUM7b0JBQ3pCLENBQUMsQ0FBQyxDQUFDO29CQUNILEtBQUssQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsVUFBQyxZQUFZO3dCQUMvQyxLQUFLLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztvQkFDcEMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQzthQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUosa0JBQU8sQ0FBQyxTQUFTLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxVQUFDLGlCQUFpQjtZQUNuRixNQUFNLENBQUM7Z0JBQ0wsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsUUFBUSxFQUFFLGdvQkFXVDtnQkFDRCxJQUFJLEVBQUUsVUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUs7b0JBQzFCLEtBQUssQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUM7b0JBQ3RDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxVQUFDLGdCQUFnQjt3QkFDM0QsS0FBSyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO29CQUM1QyxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2FBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFSiw2Q0FBNkM7SUFDN0Msa0JBQWtCLENBQUMsU0FBUyxDQUFDLHFCQUFVLENBQUMsQ0FBQztBQUUzQyxDQUFDLEVBcktNLFVBQVUsS0FBVixVQUFVLFFBcUtoQiIsImZpbGUiOiJjb21waWxlZC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9saWJzL2hhd3Rpby1mb3Jtcy9kZWZzLmQudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vbGlicy9oYXd0aW8ta3ViZXJuZXRlcy1hcGkvZGVmcy5kLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL2xpYnMvaGF3dGlvLW9hdXRoL2RlZnMuZC50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9saWJzL2hhd3Rpby11aS9kZWZzLmQudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vbGlicy9oYXd0aW8tdXRpbGl0aWVzL2RlZnMuZC50c1wiLz5cblxuZGVjbGFyZSB2YXIgaHVtYW5kYXRlO1xuZGVjbGFyZSB2YXIganN5YW1sOmFueTtcblxuIiwibW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCBjbGFzcyBjb25zdHMge1xuICAgIGdldCBOQU1FU1BBQ0VfU1RPUkFHRV9LRVkoKTpzdHJpbmcgeyByZXR1cm4gXCJrOHNTZWxlY3RlZE5hbWVzcGFjZVwiOyB9XG4gIH1cblxuICBleHBvcnQgdmFyIENvbnN0YW50cyA9IG5ldyBjb25zdHMoKTtcblx0XG4gIGV4cG9ydCBpbnRlcmZhY2UgQXBpTG9jYXRpb24ge1xuICAgIHByb3RvPzpzdHJpbmc7XG4gICAgaG9zdFBvcnQ6c3RyaW5nO1xuICAgIHByZWZpeDpzdHJpbmc7XG4gIH1cbiAgXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXBpTG9jYXRpb25zIHtcbiAgICBvcGVuc2hpZnQ/OiBBcGlMb2NhdGlvbjtcbiAgICBrOHM/OiBBcGlMb2NhdGlvbjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgS3ViZXJuZXRlc0NvbmZpZyB7XG4gICAgbWFzdGVyX3VyaT86IHN0cmluZztcbiAgICBhcGk/OiBBcGlMb2NhdGlvbnM7XG4gICAgb3BlbnNoaWZ0PzogT3BlblNoaWZ0T0F1dGhDb25maWc7XG4gICAgZ29vZ2xlPzogR29vZ2xlT0F1dGhDb25maWc7XG4gICAga2V5Y2xvYWs/OiBLZXlDbG9ha0F1dGhDb25maWc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE9wZW5TaGlmdE9BdXRoQ29uZmlnIHtcbiAgICBvYXV0aF9hdXRob3JpemVfdXJpOnN0cmluZztcbiAgICBvYXV0aF9jbGllbnRfaWQ6c3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBHb29nbGVPQXV0aENvbmZpZyB7XG4gICAgYXV0aGVudGljYXRpb25VUkk6c3RyaW5nO1xuICAgIGF1dGhvcml6YXRpb25VUkk6c3RyaW5nO1xuICAgIGNsaWVudElkOnN0cmluZztcbiAgICBjbGllbnRTZWNyZXQ6c3RyaW5nO1xuICAgIHJlZGlyZWN0VVJJOnN0cmluZztcbiAgICBzY29wZTpzdHJpbmc7XG4gICAgdG9rZW5VUkk/OnN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgS2V5Q2xvYWtBdXRoQ29uZmlnIHtcbiAgICBvYXV0aF9hdXRob3JpemVfdXJpOnN0cmluZztcbiAgICBvYXV0aF9jbGllbnRfaWQ6c3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBLdWJlcm5ldGVzU3RhdGUge1xuICAgIG5hbWVzcGFjZXM6IEFycmF5PHN0cmluZz47XG4gICAgc2VsZWN0ZWROYW1lc3BhY2U6IHN0cmluZztcbiAgfVxuXG5cdGV4cG9ydCBjbGFzcyBXYXRjaFR5cGVzIHtcblx0XHRwdWJsaWMgc3RhdGljIGdldCBFTkRQT0lOVFMoKTpzdHJpbmcgeyByZXR1cm4gXCJlbmRwb2ludHNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEVWRU5UUygpOnN0cmluZyB7IHJldHVybiBcImV2ZW50c1wiOyB9XG4gICAgcHVibGljIHN0YXRpYyBnZXQgTkFNRVNQQUNFUygpOnN0cmluZyB7IHJldHVybiBcIm5hbWVzcGFjZXNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IE5PREVTKCk6c3RyaW5nIHsgcmV0dXJuIFwibm9kZXNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFBFUlNJU1RFTlRfVk9MVU1FUygpOnN0cmluZyB7IHJldHVybiBcInBlcnNpc3RlbnR2b2x1bWVzXCI7IH1cblx0XHRwdWJsaWMgc3RhdGljIGdldCBQRVJTSVNURU5UX1ZPTFVNRV9DTEFJTVMoKTpzdHJpbmcgeyByZXR1cm4gXCJwZXJzaXN0ZW50dm9sdW1lY2xhaW1zXCI7IH1cblx0XHRwdWJsaWMgc3RhdGljIGdldCBQT0RTKCk6c3RyaW5nIHsgcmV0dXJuIFwicG9kc1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgUkVQTElDQVRJT05fQ09OVFJPTExFUlMoKTpzdHJpbmcgeyByZXR1cm4gXCJyZXBsaWNhdGlvbmNvbnRyb2xsZXJzXCI7IH1cblx0XHRwdWJsaWMgc3RhdGljIGdldCBSRVNPVVJDRV9RVU9UQVMoKTpzdHJpbmcgeyByZXR1cm4gXCJyZXNvdXJjZXF1b3Rhc1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgT0FVVEhfQ0xJRU5UUygpOnN0cmluZyB7IHJldHVybiBcIm9hdXRoY2xpZW50c1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgU0VDUkVUUygpOnN0cmluZyB7IHJldHVybiBcInNlY3JldHNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFNFUlZJQ0VTKCk6c3RyaW5nIHsgcmV0dXJuIFwic2VydmljZXNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFNFUlZJQ0VfQUNDT1VOVFMoKTpzdHJpbmcgeyByZXR1cm4gXCJzZXJ2aWNlYWNjb3VudHNcIjsgfVxuXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgVEVNUExBVEVTKCk6c3RyaW5nIHsgcmV0dXJuIFwidGVtcGxhdGVzXCI7IH1cblx0XHRwdWJsaWMgc3RhdGljIGdldCBST1VURVMoKTpzdHJpbmcgeyByZXR1cm4gXCJyb3V0ZXNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEJVSUxEX0NPTkZJR1MoKTpzdHJpbmcgeyByZXR1cm4gXCJidWlsZGNvbmZpZ3NcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEJVSUxEUygpOnN0cmluZyB7IHJldHVybiBcImJ1aWxkc1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgREVQTE9ZTUVOVF9DT05GSUdTKCk6c3RyaW5nIHsgcmV0dXJuIFwiZGVwbG95bWVudGNvbmZpZ3NcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IElNQUdFX1NUUkVBTVMoKTpzdHJpbmcgeyByZXR1cm4gXCJpbWFnZXN0cmVhbXNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFBPTElDSUVTKCk6c3RyaW5nIHsgcmV0dXJuIFwicG9saWNpZXNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFBPTElDWV9CSU5ESU5HUygpOnN0cmluZyB7IHJldHVybiBcInBvbGljeWJpbmRpbmdzXCI7IH1cbiAgICBwdWJsaWMgc3RhdGljIGdldCBQUk9KRUNUUygpOnN0cmluZyB7IHJldHVybiBcInByb2plY3RzXCI7IH1cblx0XHRwdWJsaWMgc3RhdGljIGdldCBST0xFX0JJTkRJTkdTKCk6c3RyaW5nIHsgcmV0dXJuIFwicm9sZWJpbmRpbmdzXCI7IH1cblx0XHRwdWJsaWMgc3RhdGljIGdldCBST0xFUygpOnN0cmluZyB7IHJldHVybiBcInJvbGVzXCI7IH1cblx0fVxuXG4gIGV4cG9ydCBjbGFzcyBOYW1lc3BhY2VkVHlwZXMge1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGs4c1R5cGVzKCk6QXJyYXk8c3RyaW5nPiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBXYXRjaFR5cGVzLkVORFBPSU5UUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5FVkVOVFMsXG4gICAgICAgIFdhdGNoVHlwZXMuTk9ERVMsXG4gICAgICAgIFdhdGNoVHlwZXMuUEVSU0lTVEVOVF9WT0xVTUVTLFxuICAgICAgICBXYXRjaFR5cGVzLlBFUlNJU1RFTlRfVk9MVU1FX0NMQUlNUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5QT0RTLFxuICAgICAgICBXYXRjaFR5cGVzLlJFUExJQ0FUSU9OX0NPTlRST0xMRVJTLFxuICAgICAgICBXYXRjaFR5cGVzLlJFU09VUkNFX1FVT1RBUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRVMsXG4gICAgICAgIFdhdGNoVHlwZXMuU0VDUkVUUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5TRVJWSUNFUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5TRVJWSUNFX0FDQ09VTlRTXG4gICAgICBdO1xuICAgIH1cbiAgICBwdWJsaWMgc3RhdGljIGdldCBvc1R5cGVzKCk6QXJyYXk8c3RyaW5nPiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBXYXRjaFR5cGVzLlRFTVBMQVRFUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5CVUlMRF9DT05GSUdTLFxuICAgICAgICBXYXRjaFR5cGVzLlJPVVRFUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5CVUlMRFMsXG4gICAgICAgIFdhdGNoVHlwZXMuQlVJTERfQ09ORklHUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5ERVBMT1lNRU5UX0NPTkZJR1MsXG4gICAgICAgIFdhdGNoVHlwZXMuSU1BR0VfU1RSRUFNUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5PQVVUSF9DTElFTlRTLFxuICAgICAgICBXYXRjaFR5cGVzLlBPTElDSUVTLFxuICAgICAgICBXYXRjaFR5cGVzLlBPTElDWV9CSU5ESU5HUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5QUk9KRUNUUyxcbiAgICAgICAgLy9XYXRjaFR5cGVzLlJPTEVfQklORElOR1MsXG4gICAgICAgIC8vV2F0Y2hUeXBlcy5ST0xFU1xuICAgICAgXTtcbiAgICB9XG4gIH1cblx0XG5cdGV4cG9ydCBjbGFzcyBXYXRjaEFjdGlvbnMge1xuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEFOWSgpOnN0cmluZyB7IHJldHVybiBcIipcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEFEREVEKCk6c3RyaW5nIHsgcmV0dXJuIFwiQURERURcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IE1PRElGSUVEKCk6c3RyaW5nIHsgcmV0dXJuIFwiTU9ESUZJRURcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IERFTEVURUQoKTpzdHJpbmcgeyByZXR1cm4gXCJERUxFVEVEXCI7IH1cblx0fVxuXHRcblx0ZXhwb3J0IGludGVyZmFjZSBPYmplY3RNYXAge1xuXHRcdFt1aWQ6c3RyaW5nXTogYW55O1x0XHRcblx0fVxuXHRcblx0ZXhwb3J0IGludGVyZmFjZSBXYXRjaGVyU2VydmljZSB7XG5cdFx0aGFzV2ViU29ja2V0OiBib29sZWFuO1xuXHRcdGFkZEN1c3RvbWl6ZXI6ICh0eXBlOiBzdHJpbmcsIGN1c3RvbWl6ZXI6IChvYmo6YW55KSA9PiB2b2lkKSA9PiB2b2lkO1xuXHRcdGdldFR5cGVzOiAoKSA9PiBBcnJheTxzdHJpbmc+O1xuXHRcdGdldE5hbWVzcGFjZTogKCkgPT4gc3RyaW5nO1xuXHRcdHNldE5hbWVzcGFjZTogKG5hbWVzcGFjZTogc3RyaW5nKSA9PiB2b2lkO1xuXHRcdGdldE9iamVjdHM6ICh0eXBlOiBzdHJpbmcpID0+IEFycmF5PGFueT47XG5cdFx0Z2V0T2JqZWN0TWFwOiAodHlwZTogc3RyaW5nKSA9PiBPYmplY3RNYXA7XG5cdFx0YWRkQWN0aW9uOiAodHlwZTogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgZm46IChvYmo6YW55KSA9PiB2b2lkKSA9PiB2b2lkO1xuXHRcdHJlZ2lzdGVyTGlzdGVuZXI6IChmbjoob2JqZWN0czpPYmplY3RNYXApID0+IHZvaWQpID0+IHZvaWQ7XG4gICAgcmVnaXN0ZXJDdXN0b21VcmxGdW5jdGlvbjogKGtpbmQ6c3RyaW5nLCB1cmw6KGtpbmQ6c3RyaW5nKSA9PiBzdHJpbmcpID0+IHZvaWQ7XG5cdH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEt1YmVQb2Qge1xuICAgIGlkOnN0cmluZztcbiAgICBuYW1lc3BhY2U6c3RyaW5nO1xuICB9XG5cblx0XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0ludGVyZmFjZXMudHNcIi8+XG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBjb250ZXh0ID0gJy9rdWJlcm5ldGVzJztcbiAgZXhwb3J0IHZhciBoYXNoID0gJyMnICsgY29udGV4dDtcbiAgZXhwb3J0IHZhciBkZWZhdWx0Um91dGUgPSBoYXNoICsgJy9hcHBzJztcbiAgZXhwb3J0IHZhciBwbHVnaW5OYW1lID0gJ0t1YmVybmV0ZXMnO1xuICBleHBvcnQgdmFyIHBsdWdpblBhdGggPSAncGx1Z2lucy9rdWJlcm5ldGVzLyc7XG4gIGV4cG9ydCB2YXIgdGVtcGxhdGVQYXRoID0gcGx1Z2luUGF0aCArICdodG1sLyc7XG4gIGV4cG9ydCB2YXIgbG9nOkxvZ2dpbmcuTG9nZ2VyID0gTG9nZ2VyLmdldChwbHVnaW5OYW1lKTtcblxuICBleHBvcnQgdmFyIGtlZXBQb2xsaW5nTW9kZWwgPSB0cnVlO1xuXG4gIGV4cG9ydCB2YXIgZGVmYXVsdEljb25VcmwgPSBDb3JlLnVybChcIi9pbWcva3ViZXJuZXRlcy5zdmdcIik7XG4gIGV4cG9ydCB2YXIgaG9zdEljb25VcmwgPSBDb3JlLnVybChcIi9pbWcvaG9zdC5zdmdcIik7XG5cbiAgLy8gdGhpcyBnZXRzIHNldCBhcyBhIHByZS1ib290c3RyYXAgdGFza1xuICBleHBvcnQgdmFyIG9zQ29uZmlnOkt1YmVybmV0ZXNDb25maWcgPSB1bmRlZmluZWQ7XG4gIGV4cG9ydCB2YXIgbWFzdGVyVXJsID0gXCJcIjtcblxuICBleHBvcnQgdmFyIGRlZmF1bHRBcGlWZXJzaW9uID0gXCJ2MVwiO1xuICBleHBvcnQgdmFyIGRlZmF1bHRPU0FwaVZlcnNpb24gPSBcInYxXCI7XG4gIGV4cG9ydCB2YXIgbGFiZWxGaWx0ZXJUZXh0U2VwYXJhdG9yID0gXCIsXCI7XG5cbiAgZXhwb3J0IHZhciBkZWZhdWx0TmFtZXNwYWNlID0gXCJkZWZhdWx0XCI7XG5cbiAgZXhwb3J0IHZhciBhcHBTdWZmaXggPSBcIi5hcHBcIjtcblxuICAvLyBrdWJlcm5ldGVzIHNlcnZpY2UgbmFtZXNcbiAgZXhwb3J0IHZhciBraWJhbmFTZXJ2aWNlTmFtZSA9IFwia2liYW5hXCI7XG4gIGV4cG9ydCB2YXIgZmFicmljOEZvcmdlU2VydmljZU5hbWUgPSBcImZhYnJpYzgtZm9yZ2VcIjtcbiAgZXhwb3J0IHZhciBnb2dzU2VydmljZU5hbWUgPSBcImdvZ3NcIjtcbiAgZXhwb3J0IHZhciBqZW5raW5zU2VydmljZU5hbWUgPSBcImplbmtpbnNcIjtcbiAgZXhwb3J0IHZhciBhcGltYW5TZXJ2aWNlTmFtZSA9ICdhcGltYW4nO1xuICBleHBvcnQgdmFyIGlzT3BlblNoaWZ0ID0gdHJ1ZTtcblxuICBleHBvcnQgdmFyIHNzaFNlY3JldERhdGFLZXlzID0gW1wic3NoLWtleVwiLCBcInNzaC1rZXkucHViXCJdO1xuICBleHBvcnQgdmFyIGh0dHBzU2VjcmV0RGF0YUtleXMgPSBbXCJ1c2VybmFtZVwiLCBcInBhc3N3b3JkXCJdO1xuXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCkge1xuICAgIHZhciBucyA9IGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgaWYgKG5zKSB7XG4gICAgICByZXR1cm4gXCIvbmFtZXNwYWNlcy9cIiArIG5zO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYXBpUHJlZml4KCkge1xuICAgIHZhciBwcmVmaXggPSBDb3JlLnBhdGhHZXQob3NDb25maWcsIFsnYXBpJywgJ2s4cycsICdwcmVmaXgnXSk7XG4gICAgaWYgKCFwcmVmaXgpIHtcbiAgICAgIHByZWZpeCA9ICdhcGknO1xuICAgIH1cbiAgICByZXR1cm4gQ29yZS50cmltTGVhZGluZyhwcmVmaXgsICcvJyk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gb3NBcGlQcmVmaXgoKSB7XG4gICAgdmFyIHByZWZpeCA9IENvcmUucGF0aEdldChvc0NvbmZpZywgWydhcGknLCAnb3BlbnNoaWZ0JywgJ3ByZWZpeCddKTtcbiAgICBpZiAoIXByZWZpeCkge1xuICAgICAgcHJlZml4ID0gJ29hcGknO1xuICAgIH1cbiAgICB2YXIgYW5zd2VyID0gQ29yZS50cmltTGVhZGluZyhwcmVmaXgsICcvJyk7XG4gICAgaWYgKCFpc09wZW5TaGlmdCkge1xuICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihhcGlQcmVmaXgoKSwgZGVmYXVsdE9TQXBpVmVyc2lvbiwgXCJwcm94eVwiLCBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcInNlcnZpY2VzL3RlbXBsYXRlc1wiLCBhbnN3ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gYW5zd2VyO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIG1hc3RlckFwaVVybCgpIHtcbiAgICByZXR1cm4gbWFzdGVyVXJsIHx8IFwiXCI7XG4gIH1cblxuICAvKiogV0FSTklORyAtIHRoaXMgZXhjbHVkZXMgdGhlIGhvc3QgbmFtZSAtIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZToga3ViZXJuZXRlc0FwaVVybCgpIGluc3RlYWQhISAqL1xuICBleHBvcnQgZnVuY3Rpb24ga3ViZXJuZXRlc0FwaVByZWZpeCgpIHtcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGFwaVByZWZpeCgpLCBkZWZhdWx0QXBpVmVyc2lvbik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gb3BlbnNoaWZ0QXBpUHJlZml4KCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3NBcGlQcmVmaXgoKSwgZGVmYXVsdE9TQXBpVmVyc2lvbik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcHJlZml4Rm9yVHlwZSh0eXBlOnN0cmluZykge1xuICAgIGlmICh0eXBlID09PSBXYXRjaFR5cGVzLk5BTUVTUEFDRVMpIHtcbiAgICAgIHJldHVybiBrdWJlcm5ldGVzQXBpUHJlZml4KCk7XG4gICAgfVxuICAgIGlmIChfLmFueShOYW1lc3BhY2VkVHlwZXMuazhzVHlwZXMsICh0KSA9PiB0ID09PSB0eXBlKSkge1xuICAgICAgcmV0dXJuIGt1YmVybmV0ZXNBcGlQcmVmaXgoKTtcbiAgICB9XG4gICAgaWYgKF8uYW55KE5hbWVzcGFjZWRUeXBlcy5vc1R5cGVzLCAodCkgPT4gdCA9PT0gdHlwZSkpIHtcbiAgICAgIHJldHVybiBvcGVuc2hpZnRBcGlQcmVmaXgoKTtcbiAgICB9XG4gICAgLy8gbGV0cyBhc3N1bWUgaXRzIGFuIE9wZW5TaGlmdCBleHRlbnNpb24gdHlwZVxuICAgIHJldHVybiBvcGVuc2hpZnRBcGlQcmVmaXgoKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzQXBpVXJsKCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIGt1YmVybmV0ZXNBcGlQcmVmaXgoKSk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gb3BlbnNoaWZ0QXBpVXJsKCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIG9wZW5zaGlmdEFwaVByZWZpeCgpKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZXNvdXJjZXNVcmlGb3JLaW5kKHR5cGUsIG5zID0gbnVsbCkge1xuICAgIGlmICghbnMpIHtcbiAgICAgIG5zID0gY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihtYXN0ZXJBcGlVcmwoKSwgcHJlZml4Rm9yVHlwZSh0eXBlKSwgbmFtZXNwYWNlUGF0aEZvcktpbmQodHlwZSwgbnMpKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiB1cmlUZW1wbGF0ZUZvckt1YmVybmV0ZXNLaW5kKHR5cGUpIHtcbiAgICB2YXIgdXJsVGVtcGxhdGUgPSAnJztcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5OQU1FU1BBQ0VTOlxuICAgICAgY2FzZSBcIk5hbWVzcGFjZXNcIjpcbiAgICAgICAgdXJsVGVtcGxhdGUgPSBVcmxIZWxwZXJzLmpvaW4oJ25hbWVzcGFjZXMnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFdhdGNoVHlwZXMuT0FVVEhfQ0xJRU5UUzpcbiAgICAgIGNhc2UgXCJPQXV0aENsaWVudHNcIjpcbiAgICAgIGNhc2UgXCJPQXV0aENsaWVudFwiOlxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdvYXV0aGNsaWVudHMnKTtcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5QUk9KRUNUUzpcbiAgICAgIGNhc2UgXCJQcm9qZWN0c1wiOlxuICAgICAgICB1cmxUZW1wbGF0ZSA9IFVybEhlbHBlcnMuam9pbigncHJvamVjdHMnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB1cmxUZW1wbGF0ZSA9IFVybEhlbHBlcnMuam9pbignbmFtZXNwYWNlcy86bmFtZXNwYWNlJywgdHlwZSwgJzppZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdXJsVGVtcGxhdGU7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gbmFtZXNwYWNlUGF0aEZvcktpbmQodHlwZSwgbnMpIHtcbiAgICB2YXIgdXJsVGVtcGxhdGUgPSAnJztcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5OQU1FU1BBQ0VTOlxuICAgICAgY2FzZSBcIk5hbWVzcGFjZXNcIjpcbiAgICAgIGNhc2UgXCJOYW1lc3BhY2VcIjpcbiAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbignbmFtZXNwYWNlcycpO1xuICAgICAgY2FzZSBXYXRjaFR5cGVzLk5PREVTOlxuICAgICAgY2FzZSBcIk5vZGVzXCI6XG4gICAgICBjYXNlIFwibm9kZVwiOlxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdub2RlcycpO1xuICAgICAgY2FzZSBXYXRjaFR5cGVzLlBST0pFQ1RTOlxuICAgICAgY2FzZSBcIlByb2plY3RzXCI6XG4gICAgICBjYXNlIFwiUHJvamVjdFwiOlxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdwcm9qZWN0cycpO1xuICAgICAgY2FzZSBXYXRjaFR5cGVzLk9BVVRIX0NMSUVOVFM6XG4gICAgICBjYXNlIFwiT0F1dGhDbGllbnRzXCI6XG4gICAgICBjYXNlIFwiT0F1dGhDbGllbnRcIjpcbiAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbignb2F1dGhjbGllbnRzJyk7XG4gICAgICBjYXNlIFdhdGNoVHlwZXMuUEVSU0lTVEVOVF9WT0xVTUVTOlxuICAgICAgY2FzZSBcIlBlcnNpc3RlbnRWb2x1bWVzXCI6XG4gICAgICBjYXNlIFwiUGVyc2lzdGVudFZvbHVtZVwiOlxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdwZXJzaXN0ZW50dm9sdW1lcycpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbignbmFtZXNwYWNlcycsIG5zLCB0eXBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGV2YWx1ZSBmcm9tIHRoZSBpbmplY3RvciBpZiBpdHMgYXZhaWxhYmxlIG9yIG51bGxcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBpbmplY3Q8VD4obmFtZSk6VCB7XG4gICAgdmFyIGluamVjdG9yID0gSGF3dGlvQ29yZS5pbmplY3RvcjtcbiAgICByZXR1cm4gaW5qZWN0b3IgPyBpbmplY3Rvci5nZXQ8VD4obmFtZSkgOiBudWxsO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc291cmNlKHRoaW5nOnN0cmluZywgdXJsVGVtcGxhdGU6c3RyaW5nLCAkcmVzb3VyY2U6IG5nLnJlc291cmNlLklSZXNvdXJjZVNlcnZpY2UsIEt1YmVybmV0ZXNNb2RlbCkge1xuICAgIHZhciBwcmVmaXggPSBwcmVmaXhGb3JUeXBlKHRoaW5nKTtcbiAgICBpZiAoIXByZWZpeCkge1xuICAgICAgbG9nLmRlYnVnKFwiSW52YWxpZCB0eXBlIGdpdmVuOiBcIiwgdGhpbmcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHBhcmFtcyA9IDxhbnk+IHtcbiAgICAgIG5hbWVzcGFjZTogY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2VcbiAgICB9XG4gICAgc3dpdGNoICh0aGluZykge1xuICAgICAgY2FzZSBXYXRjaFR5cGVzLk5BTUVTUEFDRVM6XG4gICAgICBjYXNlIFdhdGNoVHlwZXMuT0FVVEhfQ0xJRU5UUzpcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5OT0RFUzpcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5QUk9KRUNUUzpcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5PQVVUSF9DTElFTlRTOlxuICAgICAgY2FzZSBXYXRjaFR5cGVzLlBFUlNJU1RFTlRfVk9MVU1FUzpcbiAgICAgIHBhcmFtcyA9IHt9O1xuICAgIH1cblxuICAgIHZhciB1cmwgPSBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIHByZWZpeCwgdXJsVGVtcGxhdGUpO1xuICAgIGxvZy5kZWJ1ZyhcIlVybCBmb3IgXCIsIHRoaW5nLCBcIjogXCIsIHVybCk7XG4gICAgdmFyIHJlc291cmNlID0gJHJlc291cmNlKHVybCwgbnVsbCwge1xuICAgICAgcXVlcnk6IHsgbWV0aG9kOiAnR0VUJywgaXNBcnJheTogZmFsc2UsIHBhcmFtczogcGFyYW1zfSxcbiAgICAgIGNyZWF0ZTogeyBtZXRob2Q6ICdQT1NUJywgcGFyYW1zOiBwYXJhbXN9LFxuICAgICAgc2F2ZTogeyBtZXRob2Q6ICdQVVQnLCBwYXJhbXM6IHBhcmFtc30sXG4gICAgICBkZWxldGU6IHsgbWV0aG9kOiAnREVMRVRFJywgcGFyYW1zOiBfLmV4dGVuZCh7XG4gICAgICAgIGlkOiAnQGlkJ1xuICAgICAgfSwgcGFyYW1zKX1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzb3VyY2U7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaW1hZ2VSZXBvc2l0b3JpZXNSZXN0VVJMKCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3BlbnNoaWZ0QXBpVXJsKCksIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL2ltYWdlc3RyZWFtc1wiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBkZXBsb3ltZW50Q29uZmlnc1Jlc3RVUkwoKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvcGVuc2hpZnRBcGlVcmwoKSwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvZGVwbG95bWVudGNvbmZpZ3NcIik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYnVpbGRzUmVzdFVSTCgpIHtcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKG9wZW5zaGlmdEFwaVVybCgpLCBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcIi9idWlsZHNcIik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYnVpbGRDb25maWdIb29rc1Jlc3RVUkwoKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvcGVuc2hpZnRBcGlVcmwoKSwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvYnVpbGRjb25maWdob29rc1wiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBidWlsZENvbmZpZ3NSZXN0VVJMKCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3BlbnNoaWZ0QXBpVXJsKCksIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL2J1aWxkY29uZmlnc1wiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiByb3V0ZXNSZXN0VVJMKCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3BlbnNoaWZ0QXBpVXJsKCksIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL3JvdXRlc1wiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiB0ZW1wbGF0ZXNSZXN0VVJMKCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3BlbnNoaWZ0QXBpVXJsKCksIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL3RlbXBsYXRlc1wiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXROYW1lc3BhY2UoZW50aXR5KSB7XG4gICAgdmFyIGFuc3dlciA9IENvcmUucGF0aEdldChlbnRpdHksIFtcIm1ldGFkYXRhXCIsIFwibmFtZXNwYWNlXCJdKTtcbiAgICByZXR1cm4gYW5zd2VyID8gYW5zd2VyIDogY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRMYWJlbHMoZW50aXR5KSB7XG4gICAgdmFyIGFuc3dlciA9IENvcmUucGF0aEdldChlbnRpdHksIFtcIm1ldGFkYXRhXCIsIFwibGFiZWxzXCJdKTtcbiAgICByZXR1cm4gYW5zd2VyID8gYW5zd2VyIDoge307XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0TmFtZShlbnRpdHkpIHtcbiAgICBpZiAoYW5ndWxhci5pc1N0cmluZyhlbnRpdHkpKSB7XG4gICAgICByZXR1cm4gZW50aXR5O1xuICAgIH1cbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KGVudGl0eSwgW1wibWV0YWRhdGFcIiwgXCJuYW1lXCJdKSB8fCBDb3JlLnBhdGhHZXQoZW50aXR5LCBcIm5hbWVcIikgfHwgQ29yZS5wYXRoR2V0KGVudGl0eSwgXCJpZFwiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRLaW5kKGVudGl0eSkge1xuICAgIHJldHVybiBDb3JlLnBhdGhHZXQoZW50aXR5LCBbXCJtZXRhZGF0YVwiLCBcImtpbmRcIl0pIHx8IENvcmUucGF0aEdldChlbnRpdHksIFwia2luZFwiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RvcihlbnRpdHkpIHtcbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KGVudGl0eSwgW1wic3BlY1wiLCBcInNlbGVjdG9yXCJdKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRIb3N0KHBvZCkge1xuICAgIHJldHVybiBDb3JlLnBhdGhHZXQocG9kLCBbXCJzcGVjXCIsIFwiaG9zdFwiXSkgfHwgQ29yZS5wYXRoR2V0KHBvZCwgW1wic3BlY1wiLCBcIm5vZGVOYW1lXCJdKSB8fCBDb3JlLnBhdGhHZXQocG9kLCBbXCJzdGF0dXNcIiwgXCJob3N0SVBcIl0pO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXR1cyhwb2QpIHtcbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KHBvZCwgW1wic3RhdHVzXCIsIFwicGhhc2VcIl0pO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFBvcnRzKHNlcnZpY2UpIHtcbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KHNlcnZpY2UsIFtcInNwZWNcIiwgXCJwb3J0c1wiXSk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25UaW1lc3RhbXAoZW50aXR5KSB7XG4gICAgcmV0dXJuIENvcmUucGF0aEdldChlbnRpdHksIFtcIm1ldGFkYXRhXCIsIFwiY3JlYXRpb25UaW1lc3RhbXBcIl0pO1xuICB9O1xuXG4gIC8vdmFyIGZhYnJpY0RvbWFpbiA9IEZhYnJpYy5qbXhEb21haW47XG4gIHZhciBmYWJyaWNEb21haW4gPSBcImlvLmZhYnJpYzhcIjtcbiAgZXhwb3J0IHZhciBtYmVhbiA9IGZhYnJpY0RvbWFpbiArIFwiOnR5cGU9S3ViZXJuZXRlc1wiO1xuICBleHBvcnQgdmFyIG1hbmFnZXJNQmVhbiA9IGZhYnJpY0RvbWFpbiArIFwiOnR5cGU9S3ViZXJuZXRlc01hbmFnZXJcIjtcbiAgZXhwb3J0IHZhciBhcHBWaWV3TUJlYW4gPSBmYWJyaWNEb21haW4gKyBcIjp0eXBlPUFwcFZpZXdcIjtcblxuICBleHBvcnQgZnVuY3Rpb24gaXNLdWJlcm5ldGVzKHdvcmtzcGFjZT8pIHtcbiAgICAvLyByZXR1cm4gd29ya3NwYWNlLnRyZWVDb250YWluc0RvbWFpbkFuZFByb3BlcnRpZXMoZmFicmljRG9tYWluLCB7dHlwZTogXCJLdWJlcm5ldGVzXCJ9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0t1YmVybmV0ZXNUZW1wbGF0ZU1hbmFnZXIod29ya3NwYWNlPykge1xuICAgIC8vIHJldHVybiB3b3Jrc3BhY2UudHJlZUNvbnRhaW5zRG9tYWluQW5kUHJvcGVydGllcyhmYWJyaWNEb21haW4sIHt0eXBlOiBcIkt1YmVybmV0ZXNUZW1wbGF0ZU1hbmFnZXJcIn0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzQXBwVmlldyh3b3Jrc3BhY2U/KSB7XG4gICAgLy8gcmV0dXJuIHdvcmtzcGFjZS50cmVlQ29udGFpbnNEb21haW5BbmRQcm9wZXJ0aWVzKGZhYnJpY0RvbWFpbiwge3R5cGU6IFwiQXBwVmlld1wifSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0U3RyaXBwZWRQYXRoTmFtZSgpOnN0cmluZyB7XG4gICAgdmFyIHBhdGhOYW1lID0gQ29yZS50cmltTGVhZGluZygodGhpcy4kbG9jYXRpb24ucGF0aCgpIHx8ICcvJyksIFwiI1wiKTtcbiAgICBwYXRoTmFtZSA9IHBhdGhOYW1lLnJlcGxhY2UoL15cXC8vLCAnJyk7XG4gICAgcmV0dXJuIHBhdGhOYW1lO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGxpbmtDb250YWlucyguLi53b3JkczpTdHJpbmdbXSk6Ym9vbGVhbiB7XG4gICAgdmFyIHBhdGhOYW1lID0gdGhpcy5nZXRTdHJpcHBlZFBhdGhOYW1lKCk7XG4gICAgcmV0dXJuIF8uZXZlcnkod29yZHMsICh3b3JkOnN0cmluZykgPT4gcGF0aE5hbWUuaW5kZXhPZih3b3JkKSAhPT0gMCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGxpbmsgaXMgYWN0aXZlLiBUaGUgbGluayBjYW4gb21pdCB0aGUgbGVhZGluZyAjIG9yIC8gaWYgbmVjZXNzYXJ5LlxuICAgKiBUaGUgcXVlcnkgcGFyYW1ldGVycyBvZiB0aGUgVVJMIGFyZSBpZ25vcmVkIGluIHRoZSBjb21wYXJpc29uLlxuICAgKiBAbWV0aG9kIGlzTGlua0FjdGl2ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gaHJlZlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIHRoZSBnaXZlbiBsaW5rIGlzIGFjdGl2ZVxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzTGlua0FjdGl2ZShocmVmOnN0cmluZyk6Ym9vbGVhbiB7XG4gICAgLy8gbGV0cyB0cmltIHRoZSBsZWFkaW5nIHNsYXNoXG4gICAgdmFyIHBhdGhOYW1lID0gZ2V0U3RyaXBwZWRQYXRoTmFtZSgpO1xuXG4gICAgdmFyIGxpbmsgPSBDb3JlLnRyaW1MZWFkaW5nKGhyZWYsIFwiI1wiKTtcbiAgICBsaW5rID0gbGluay5yZXBsYWNlKC9eXFwvLywgJycpO1xuICAgIC8vIHN0cmlwIGFueSBxdWVyeSBhcmd1bWVudHNcbiAgICB2YXIgaWR4ID0gbGluay5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBsaW5rID0gbGluay5zdWJzdHJpbmcoMCwgaWR4KTtcbiAgICB9XG4gICAgaWYgKCFwYXRoTmFtZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBsaW5rID09PSBwYXRoTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIF8uc3RhcnRzV2l0aChwYXRoTmFtZSwgbGluayk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHNldEpzb24oJHNjb3BlLCBpZCwgY29sbGVjdGlvbikge1xuICAgICRzY29wZS5pZCA9IGlkO1xuICAgIGlmICghJHNjb3BlLmZldGNoZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpZCkge1xuICAgICAgJHNjb3BlLmpzb24gPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFjb2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpdGVtID0gY29sbGVjdGlvbi5maW5kKChpdGVtKSA9PiB7IHJldHVybiBnZXROYW1lKGl0ZW0pID09PSBpZDsgfSk7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgICRzY29wZS5qc29uID0gYW5ndWxhci50b0pzb24oaXRlbSwgdHJ1ZSk7XG4gICAgICAkc2NvcGUuaXRlbSA9IGl0ZW07XG4gICAgfSBlbHNlIHtcbiAgICAgICRzY29wZS5pZCA9IHVuZGVmaW5lZDtcbiAgICAgICRzY29wZS5qc29uID0gJyc7XG4gICAgICAkc2NvcGUuaXRlbSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGFiZWxzIHRleHQgc3RyaW5nIHVzaW5nIHRoZSA8Y29kZT5rZXkxPXZhbHVlMSxrZXkyPXZhbHVlMiwuLi4uPC9jb2RlPiBmb3JtYXRcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBsYWJlbHNUb1N0cmluZyhsYWJlbHMsIHNlcGVyYXRvclRleHQgPSBsYWJlbEZpbHRlclRleHRTZXBhcmF0b3IpIHtcbiAgICB2YXIgYW5zd2VyID0gXCJcIjtcbiAgICBhbmd1bGFyLmZvckVhY2gobGFiZWxzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgdmFyIHNlcGFyYXRvciA9IGFuc3dlciA/IHNlcGVyYXRvclRleHQgOiBcIlwiO1xuXG4gICAgICBhbnN3ZXIgKz0gc2VwYXJhdG9yICsga2V5ICsgXCI9XCIgKyB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gYW5zd2VyO1xuICB9XG5cblxuICBleHBvcnQgZnVuY3Rpb24gaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKSB7XG4gICAgJHNjb3BlLmJhc2VVcmkgPSBDb3JlLnRyaW1UcmFpbGluZyhDb3JlLnVybChcIi9cIikgfHwgXCJcIiwgXCIvXCIpIHx8IFwiXCI7XG5cbiAgICB2YXIgaW5qZWN0b3IgPSBIYXd0aW9Db3JlLmluamVjdG9yO1xuXG4gICAgZnVuY3Rpb24gaGFzU2VydmljZShuYW1lKSB7XG4gICAgICBpZiAoaW5qZWN0b3IpIHtcbiAgICAgICAgdmFyIFNlcnZpY2VSZWdpc3RyeSA9IGluamVjdG9yLmdldDxhbnk+KFwiU2VydmljZVJlZ2lzdHJ5XCIpO1xuICAgICAgICBpZiAoU2VydmljZVJlZ2lzdHJ5KSB7XG4gICAgICAgICAgcmV0dXJuIFNlcnZpY2VSZWdpc3RyeS5oYXNTZXJ2aWNlKG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgJHNjb3BlLmhhc1NlcnZpY2VLaWJhbmEgPSAoKSA9PiBoYXNTZXJ2aWNlKGtpYmFuYVNlcnZpY2VOYW1lKTtcbiAgICAkc2NvcGUuaGFzU2VydmljZUdvZ3MgPSAoKSA9PiBoYXNTZXJ2aWNlKGdvZ3NTZXJ2aWNlTmFtZSk7XG4gICAgJHNjb3BlLmhhc1NlcnZpY2VGb3JnZSA9ICgpID0+IGhhc1NlcnZpY2UoZmFicmljOEZvcmdlU2VydmljZU5hbWUpO1xuICAgICRzY29wZS5oYXNTZXJ2aWNlQXBpbWFuID0gKCkgPT4gaGFzU2VydmljZShhcGltYW5TZXJ2aWNlTmFtZSk7XG5cbiAgICAkc2NvcGUudmlld1RlbXBsYXRlcyA9ICgpID0+IHtcbiAgICAgIHZhciByZXR1cm5UbyA9ICRsb2NhdGlvbi51cmwoKTtcbiAgICAgICRsb2NhdGlvbi5wYXRoKCcva3ViZXJuZXRlcy90ZW1wbGF0ZXMnKS5zZWFyY2goeydyZXR1cm5Ubyc6IHJldHVyblRvfSk7XG4gICAgfTtcblxuICAgICRzY29wZS5uYW1lc3BhY2UgPSAkcm91dGVQYXJhbXMubmFtZXNwYWNlIHx8ICRzY29wZS5uYW1lc3BhY2UgfHwgS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlIHx8IGRlZmF1bHROYW1lc3BhY2U7XG4gICAgaWYgKCRzY29wZS5uYW1lc3BhY2UgIT0gS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlKSB7XG4gICAgICBLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UgPSAkc2NvcGUubmFtZXNwYWNlO1xuXG4gICAgICAvLyBsZXRzIHNob3cgcGFnZSBpcyBnb2luZyB0byByZWxvYWRcbiAgICAgIGlmICgkc2NvcGUubW9kZWwpIHtcbiAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgS3ViZXJuZXRlcy5zZXRDdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgkc2NvcGUubmFtZXNwYWNlKTtcblxuICAgICRzY29wZS5mb3JnZUVuYWJsZWQgPSBpc0ZvcmdlRW5hYmxlZCgpO1xuXG4gICAgJHNjb3BlLnByb2plY3RJZCA9ICRyb3V0ZVBhcmFtc1tcInByb2plY3RcIl0gfHwgJHNjb3BlLnByb2plY3RJZCB8fCAkc2NvcGUuaWQ7XG4gICAgdmFyIHNob3dQcm9qZWN0TmF2QmFycyA9IGZhbHNlO1xuICAgIGlmICgkc2NvcGUucHJvamVjdElkICYmIHNob3dQcm9qZWN0TmF2QmFycykge1xuICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5wcm9qZWN0SWQpO1xuICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUucHJvamVjdElkLCBudWxsLCAkc2NvcGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVFbnZpcm9ubWVudEJyZWFkY3J1bWJzKCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpO1xuICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVFbnZpcm9ubWVudFN1Yk5hdkJhcnMoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyk7XG4gICAgfVxuXG4gICAgaWYgKCRzY29wZS5wcm9qZWN0SWQpIHtcbiAgICAgICRzY29wZS4kcHJvamVjdExpbmsgPSBEZXZlbG9wZXIucHJvamVjdExpbmsoJHNjb3BlLnByb2plY3RJZCk7XG4gICAgfVxuXG4gICAgJHNjb3BlLmxpbmsgPSAoaHJlZikgPT4ge1xuICAgICAgaWYgKCFocmVmKSB7XG4gICAgICAgIHJldHVybiBocmVmO1xuICAgICAgfVxuICAgICAgaWYgKCRzY29wZS4kcHJvamVjdExpbmspIHtcbiAgICAgICAgcmV0dXJuIERldmVsb3Blci5uYW1lc3BhY2VMaW5rKCRzY29wZSwgJHJvdXRlUGFyYW1zLCBocmVmLnJlcGxhY2UoL15cXC9rdWJlcm5ldGVzLywgJycpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBocmVmO1xuICAgICAgfVxuICAgIH1cblxuICAgICRzY29wZS5jb2RlTWlycm9yT3B0aW9ucyA9IHtcbiAgICAgIGxpbmVXcmFwcGluZyA6IHRydWUsXG4gICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcbiAgICAgIHJlYWRPbmx5OiAnbm9jdXJzb3InLFxuICAgICAgbW9kZToge25hbWU6IFwiamF2YXNjcmlwdFwiLCBqc29uOiB0cnVlfVxuICAgIH07XG5cbiAgICAkc2NvcGUucmVzaXplRGlhbG9nID0ge1xuICAgICAgY29udHJvbGxlcjogbnVsbCxcbiAgICAgIG5ld1JlcGxpY2FzOiAwLFxuICAgICAgZGlhbG9nOiBuZXcgVUkuRGlhbG9nKCksXG4gICAgICBvbk9rOiAoKSA9PiB7XG4gICAgICAgIHZhciByZXNpemVEaWFsb2cgPSAkc2NvcGUucmVzaXplRGlhbG9nO1xuICAgICAgICByZXNpemVEaWFsb2cuZGlhbG9nLmNsb3NlKCk7XG4gICAgICAgIHJlc2l6ZUNvbnRyb2xsZXIoJGh0dHAsIEt1YmVybmV0ZXNBcGlVUkwsIHJlc2l6ZURpYWxvZy5jb250cm9sbGVyLCByZXNpemVEaWFsb2cubmV3UmVwbGljYXMsICgpID0+IHsgbG9nLmRlYnVnKFwidXBkYXRlZCBudW1iZXIgb2YgcmVwbGljYXNcIik7IH0pXG4gICAgICB9LFxuICAgICAgb3BlbjogKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgdmFyIHJlc2l6ZURpYWxvZyA9ICRzY29wZS5yZXNpemVEaWFsb2c7XG4gICAgICAgIHJlc2l6ZURpYWxvZy5jb250cm9sbGVyID0gY29udHJvbGxlcjtcbiAgICAgICAgcmVzaXplRGlhbG9nLm5ld1JlcGxpY2FzID0gQ29yZS5wYXRoR2V0KGNvbnRyb2xsZXIsIFtcInN0YXR1c1wiLCBcInJlcGxpY2FzXCJdKTtcbiAgICAgICAgcmVzaXplRGlhbG9nLmRpYWxvZy5vcGVuKCk7XG5cbiAgICAgICAgJHRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICQoJyNyZXBsaWNhcycpLmZvY3VzKCk7XG4gICAgICAgIH0sIDUwKTtcbiAgICAgIH0sXG4gICAgICBjbG9zZTogKCkgPT4ge1xuICAgICAgICAkc2NvcGUucmVzaXplRGlhbG9nLmRpYWxvZy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAkc2NvcGUudHJpZ2dlckJ1aWxkID0gKGJ1aWxkQ29uZmlnKSA9PiB7XG4gICAgICB2YXIgdXJsID0gYnVpbGRDb25maWcuJHRyaWdnZXJVcmw7XG4gICAgICBjb25zb2xlLmxvZyhcInRyaWdnZXJpbmcgYnVpbGQgYXQgdXJsOiBcIiArIHVybCk7XG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIC8vdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgdmFyIGRhdGEgPSBudWxsO1xuICAgICAgICB2YXIgY29uZmlnID0ge1xuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG5hbWUgPSBDb3JlLnBhdGhHZXQoYnVpbGRDb25maWcsIFtcIm1ldGFkYXRhXCIsIFwibmFtZVwiXSk7XG4gICAgICAgIENvcmUubm90aWZpY2F0aW9uKCdpbmZvJywgXCJUcmlnZ2VyaW5nIGJ1aWxkIFwiICsgbmFtZSk7XG4gICAgICAgICRodHRwLnBvc3QodXJsLCBkYXRhLCBjb25maWcpLlxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInRyaWdnZXIgd29ya2VkISBnb3QgZGF0YSBcIiArIGFuZ3VsYXIudG9Kc29uKGRhdGEsIHRydWUpKTtcbiAgICAgICAgICAgIC8vIFRPRE8gc2hvdWxkIHdlIHNob3cgc29tZSBsaW5rIHRvIHRoZSBidWlsZFxuICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2luZm8nLCBcIkJ1aWxkaW5nIFwiICsgbmFtZSk7XG4gICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2Vycm9yJywgXCJGYWlsZWQgdG8gdHJpZ2dlciBidWlsZCBmb3IgXCIgKyBuYW1lICsgXCIuIFJldHVybmVkIGNvZGU6IFwiICsgc3RhdHVzICsgXCIgXCIgKyBkYXRhKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHRoZSBVUkwgaWYgdGhlIGZpbHRlciBpcyBjaGFuZ2VkXG4gICAgJHNjb3BlLiR3YXRjaChcInRhYmxlQ29uZmlnLmZpbHRlck9wdGlvbnMuZmlsdGVyVGV4dFwiLCAodGV4dCkgPT4ge1xuICAgICAgLy92YXIgZmlsdGVyVGV4dCA9IEt1YmVybmV0ZXMuZmluZFZhbGVPZkxhYmVscyh0ZXh0KTtcbiAgICAgICRsb2NhdGlvbi5zZWFyY2goXCJxXCIsIHRleHQpO1xuICAgIH0pO1xuXG4gICAgJHNjb3BlLiRvbihcImxhYmVsRmlsdGVyVXBkYXRlXCIsICgkZXZlbnQsIHRleHQpID0+IHtcbiAgICAgIHZhciBmaWx0ZXJPcHRpb25zID0gKCRzY29wZS50YWJsZUNvbmZpZyB8fCB7fSkuZmlsdGVyT3B0aW9ucyB8fCB7fTtcbiAgICAgIHZhciBjdXJyZW50RmlsdGVyID0gZmlsdGVyT3B0aW9ucy5maWx0ZXJUZXh0O1xuICAgICAgaWYgKENvcmUuaXNCbGFuayhjdXJyZW50RmlsdGVyKSkge1xuICAgICAgICBmaWx0ZXJPcHRpb25zLmZpbHRlclRleHQgPSB0ZXh0O1xuICAgICAgfWVsc2V7XG4gICAgICAgIHZhciBleHByZXNzaW9ucyA9IGN1cnJlbnRGaWx0ZXIuc3BsaXQoL1xccysvKTtcbiAgICAgICAgaWYgKGV4cHJlc3Npb25zLmluZGV4T2YodGV4dCkgIT09IC0xKSB7XG4gICAgICAgICAgLy8gbGV0cyBleGNsdWRlIHRoaXMgZmlsdGVyIGV4cHJlc3Npb25cbiAgICAgICAgICBleHByZXNzaW9ucyA9IGV4cHJlc3Npb25zLnJlbW92ZSh0ZXh0KTtcbiAgICAgICAgICBmaWx0ZXJPcHRpb25zLmZpbHRlclRleHQgPSBleHByZXNzaW9ucy5qb2luKFwiIFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXJPcHRpb25zLmZpbHRlclRleHQgPSBjdXJyZW50RmlsdGVyICsgXCIgXCIgKyB0ZXh0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAkc2NvcGUuaWQgPSB1bmRlZmluZWQ7XG4gICAgfSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcG9kcyB0aGF0IGFyZSByZWFkeVxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHJlYWR5UG9kQ291bnQoc2VydmljZSkge1xuICAgIHZhciBjb3VudCA9IDA7XG4gICAgYW5ndWxhci5mb3JFYWNoKChzZXJ2aWNlIHx8IHt9KS4kcG9kcywgKHBvZCk9PiB7XG4gICAgICBpZiAocG9kLiRyZWFkeSkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzZXJ2aWNlIGxpbmsgVVJMIGZvciBlaXRoZXIgdGhlIHNlcnZpY2UgbmFtZSBvciB0aGUgc2VydmljZSBvYmplY3RcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlTGlua1VybChzZXJ2aWNlLCBodHRwT25seSA9IGZhbHNlKSB7XG4gICAgaWYgKGFuZ3VsYXIuaXNPYmplY3Qoc2VydmljZSkpIHtcbiAgICAgIHZhciBwb3J0YWxJUCA9IHNlcnZpY2UuJGhvc3Q7XG4gICAgICAvLyBsZXRzIGFzc3VtZSBubyBjdXN0b20gcG9ydCBmb3Igbm93IGZvciBleHRlcm5hbCByb3V0ZXNcbiAgICAgIHZhciBwb3J0ID0gbnVsbDtcbiAgICAgIHZhciBwcm90b2NvbCA9IFwiaHR0cDovL1wiO1xuICAgICAgdmFyIHNwZWMgPSBzZXJ2aWNlLnNwZWM7XG4gICAgICBpZiAoc3BlYykge1xuICAgICAgICBpZiAoIXBvcnRhbElQKSB7XG4gICAgICAgICAgcG9ydGFsSVAgPSBzcGVjLnBvcnRhbElQO1xuICAgICAgICB9XG4gICAgICAgIHZhciBoYXNIdHRwcyA9IGZhbHNlO1xuICAgICAgICB2YXIgaGFzSHR0cCA9IGZhbHNlO1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goc3BlYy5wb3J0cywgKHBvcnRTcGVjKSA9PiB7XG4gICAgICAgICAgdmFyIHAgPSBwb3J0U3BlYy5wb3J0O1xuICAgICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBpZiAocCA9PT0gNDQzKSB7XG4gICAgICAgICAgICAgIGhhc0h0dHBzID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocCA9PT0gODApIHtcbiAgICAgICAgICAgICAgaGFzSHR0cCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXBvcnQpIHtcbiAgICAgICAgICAgICAgcG9ydCA9IHA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFoYXNIdHRwcyAmJiAhaGFzSHR0cCAmJiBwb3J0KSB7XG4gICAgICAgICAgLy8gbGV0cyB0cmVhdCA4MDgwIGFzIGh0dHAgd2hpY2ggaXMgYSBjb21tb24gc2VydmljZSB0byBleHBvcnRcbiAgICAgICAgICBpZiAocG9ydCA9PT0gODA4MCkge1xuICAgICAgICAgICAgaGFzSHR0cCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwb3J0ID09PSA4NDQzKSB7XG4gICAgICAgICAgICBoYXNIdHRwcyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocG9ydGFsSVApIHtcbiAgICAgICAgaWYgKGhhc0h0dHBzKSB7XG4gICAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9cIiArIHBvcnRhbElQO1xuICAgICAgICB9IGVsc2UgaWYgKGhhc0h0dHApIHtcbiAgICAgICAgICByZXR1cm4gXCJodHRwOi8vXCIgKyBwb3J0YWxJUDtcbiAgICAgICAgfSBlbHNlIGlmICghaHR0cE9ubHkpIHtcbiAgICAgICAgICBpZiAocG9ydCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb3RvY29sICsgcG9ydGFsSVAgKyBcIjpcIiArIHBvcnQgKyBcIi9cIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHByb3RvY29sICsgcG9ydGFsSVA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzZXJ2aWNlKSB7XG4gICAgICB2YXIgc2VydmljZUlkID0gc2VydmljZS50b1N0cmluZygpO1xuICAgICAgaWYgKHNlcnZpY2VJZCkge1xuICAgICAgICB2YXIgU2VydmljZVJlZ2lzdHJ5ID0gZ2V0U2VydmljZVJlZ2lzdHJ5KCk7XG4gICAgICAgIGlmIChTZXJ2aWNlUmVnaXN0cnkpIHtcbiAgICAgICAgICByZXR1cm4gU2VydmljZVJlZ2lzdHJ5LnNlcnZpY2VMaW5rKHNlcnZpY2VJZCkgfHwgXCJcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBjb3VudGVycyBmb3IgdGhlIHBvZENvdW50ZXJzIG9iamVjdFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHBvZENvdW50ZXJUb3RhbCgkcG9kQ291bnRlcnMpIHtcbiAgICB2YXIgYW5zd2VyID0gMDtcbiAgICBpZiAoJHBvZENvdW50ZXJzKSB7XG4gICAgICBhbmd1bGFyLmZvckVhY2goW1wicmVhZHlcIiwgXCJ2YWxpZFwiLCBcIndhaXRpbmdcIiwgXCJlcnJvclwiXSwgKG5hbWUpID0+IHtcbiAgICAgICAgdmFyIHZhbHVlID0gJHBvZENvdW50ZXJzW25hbWVdIHx8IDA7XG4gICAgICAgIGFuc3dlciArPSB2YWx1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYW5zd2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIHRoZSBsaXN0IG9mIHBvZHMgbGV0cyBpdGVyYXRlIHRocm91Z2ggdGhlbSBhbmQgZmluZCBhbGwgcG9kcyBtYXRjaGluZyB0aGUgc2VsZWN0b3JcbiAgICogYW5kIHJldHVybiBjb3VudGVycyBiYXNlZCBvbiB0aGUgc3RhdHVzIG9mIHRoZSBwb2RcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQb2RDb3VudGVycyhzZWxlY3RvciwgcG9kcywgb3V0cHV0UG9kcyA9IFtdLCBwb2RMaW5rUXVlcnkgPSBudWxsLCBwb2RMaW5rVXJsID0gbnVsbCkge1xuICAgIGlmICghcG9kTGlua1VybCkge1xuICAgICAgcG9kTGlua1VybCA9IFwiL2t1YmVybmV0ZXMvcG9kc1wiO1xuICAgIH1cbiAgICB2YXIgZmlsdGVyRm47XG4gICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihzZWxlY3RvcikpIHtcbiAgICAgIGZpbHRlckZuID0gc2VsZWN0b3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlckZuID0gKHBvZCkgPT4gc2VsZWN0b3JNYXRjaGVzKHNlbGVjdG9yLCBnZXRMYWJlbHMocG9kKSk7XG4gICAgfVxuICAgIHZhciBhbnN3ZXIgPSB7XG4gICAgICBwb2RzTGluazogXCJcIixcbiAgICAgIHJlYWR5OiAwLFxuICAgICAgdmFsaWQ6IDAsXG4gICAgICB3YWl0aW5nOiAwLFxuICAgICAgZXJyb3I6IDBcbiAgICB9O1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgaWYgKCFwb2RMaW5rUXVlcnkpIHtcbiAgICAgICAgcG9kTGlua1F1ZXJ5ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhzZWxlY3RvciwgXCIgXCIpO1xuICAgICAgfVxuICAgICAgYW5zd2VyLnBvZHNMaW5rID0gcG9kTGlua1VybCArIFwiP3E9XCIgKyBlbmNvZGVVUklDb21wb25lbnQocG9kTGlua1F1ZXJ5KTtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChwb2RzLCBwb2QgPT4ge1xuICAgICAgICBpZiAoZmlsdGVyRm4ocG9kKSkge1xuICAgICAgICAgIG91dHB1dFBvZHMucHVzaChwb2QpO1xuICAgICAgICAgIHZhciBzdGF0dXMgPSBnZXRTdGF0dXMocG9kKTtcbiAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICB2YXIgbG93ZXIgPSBzdGF0dXMudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChsb3dlci5zdGFydHNXaXRoKFwicnVuXCIpKSB7XG4gICAgICAgICAgICAgIGlmIChpc1JlYWR5KHBvZCkpIHtcbiAgICAgICAgICAgICAgICBhbnN3ZXIucmVhZHkgKz0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbnN3ZXIudmFsaWQgKz0gMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChsb3dlci5zdGFydHNXaXRoKFwid2FpdFwiKSB8fCBsb3dlci5zdGFydHNXaXRoKFwicGVuZFwiKSkge1xuICAgICAgICAgICAgICBhbnN3ZXIud2FpdGluZyArPSAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsb3dlci5zdGFydHNXaXRoKFwidGVybVwiKSB8fCBsb3dlci5zdGFydHNXaXRoKFwiZXJyb3JcIikgfHwgbG93ZXIuc3RhcnRzV2l0aChcImZhaWxcIikpIHtcbiAgICAgICAgICAgICAgYW5zd2VyLmVycm9yICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFuc3dlci5lcnJvciArPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhbnN3ZXI7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGdpdmVuIGpzb24gaW50byBhbiBhcnJheSBvZiBpdGVtcy4gSWYgdGhlIGpzb24gY29udGFpbnMgYSBuZXN0ZWQgc2V0IG9mIGl0ZW1zIHRoZW4gdGhhdCBpcyBzb3J0ZWQ7IHNvIHRoYXQgc2VydmljZXNcbiAgICogYXJlIHByb2Nlc3NlZCBmaXJzdDsgdGhlbiB0dXJuZWQgaW50byBhbiBhcnJheS4gT3RoZXJ3aXNlIHRoZSBqc29uIGlzIHB1dCBpbnRvIGFuIGFycmF5IHNvIGl0IGNhbiBiZSBwcm9jZXNzZWQgcG9seW1vcnBoaWNhbGx5XG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gY29udmVydEt1YmVybmV0ZXNKc29uVG9JdGVtcyhqc29uKSB7XG4gICAgdmFyIGl0ZW1zID0ganNvbi5pdGVtcztcbiAgICBpZiAoYW5ndWxhci5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgLy8gVE9ETyB3ZSBjb3VsZCBjaGVjayBmb3IgTGlzdCBvciBDb25maWcgdHlwZXMgaGVyZSBhbmQgd2FybiBpZiBub3RcblxuICAgICAgLy8gc29ydCB0aGUgc2VydmljZXMgZmlyc3RcbiAgICAgIHZhciBhbnN3ZXIgPSBbXTtcbiAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0ua2luZCA9PT0gXCJTZXJ2aWNlXCIpIHtcbiAgICAgICAgICBhbnN3ZXIucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpdGVtLmtpbmQgIT09IFwiU2VydmljZVwiKSB7XG4gICAgICAgICAgYW5zd2VyLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFuc3dlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtqc29uXTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNWMWJldGExT3IyKCkge1xuICAgIHJldHVybiBkZWZhdWx0QXBpVmVyc2lvbiA9PT0gXCJ2MWJldGExXCIgfHwgZGVmYXVsdEFwaVZlcnNpb24gPT09IFwidjFiZXRhMlwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaW5rIHRvIHRoZSBkZXRhaWwgcGFnZSBmb3IgdGhlIGdpdmVuIGVudGl0eVxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGVudGl0eVBhZ2VMaW5rKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGZ1bmN0aW9uIGdldExpbmsoZW50aXR5KSB7XG4gICAgICAgIHZhciB2aWV3TGluayA9IGVudGl0eVtcIiR2aWV3TGlua1wiXTtcbiAgICAgICAgaWYgKHZpZXdMaW5rKSB7XG4gICAgICAgICAgcmV0dXJuIHZpZXdMaW5rO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpZCA9IGdldE5hbWUoZW50aXR5KTtcbiAgICAgICAgdmFyIGtpbmQgPSBnZXRLaW5kKGVudGl0eSk7XG4gICAgICAgIGlmIChraW5kICYmIGlkKSB7XG4gICAgICAgICAgdmFyIHBhdGggPSBraW5kLnN1YnN0cmluZygwLCAxKS50b0xvd2VyQ2FzZSgpICsga2luZC5zdWJzdHJpbmcoMSkgKyBcInNcIjtcbiAgICAgICAgICB2YXIgbmFtZXNwYWNlID0gZ2V0TmFtZXNwYWNlKGVudGl0eSk7XG4gICAgICAgICAgaWYgKG5hbWVzcGFjZSAmJiAhaXNJZ25vcmVOYW1lc3BhY2VLaW5kKGtpbmQpKSB7XG4gICAgICAgICAgICByZXR1cm4gQ29yZS51cmwoVXJsSGVscGVycy5qb2luKCcva3ViZXJuZXRlcy9uYW1lc3BhY2UnLCBuYW1lc3BhY2UsIHBhdGgsIGlkKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBDb3JlLnVybChVcmxIZWxwZXJzLmpvaW4oJy9rdWJlcm5ldGVzJywgcGF0aCwgaWQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBiYXNlTGluayA9IGdldExpbmsob2JqKTtcbiAgICAgIGlmICghSGF3dGlvQ29yZS5pbmplY3RvciB8fCAhYmFzZUxpbmspIHtcbiAgICAgICAgcmV0dXJuIGJhc2VMaW5rO1xuICAgICAgfVxuICAgICAgdmFyICRyb3V0ZVBhcmFtcyA9IEhhd3Rpb0NvcmUuaW5qZWN0b3IuZ2V0PG5nLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2U+KCckcm91dGVQYXJhbXMnKTtcbiAgICAgIHZhciBwcm9qZWN0SWQgPSAkcm91dGVQYXJhbXNbJ3Byb2plY3QnXSB8fCAkcm91dGVQYXJhbXNbJ3Byb2plY3QnXTtcbiAgICAgIGlmICghcHJvamVjdElkKSB7XG4gICAgICAgIHJldHVybiBiYXNlTGluaztcbiAgICAgIH1cbiAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oRGV2ZWxvcGVyLnByb2plY3RMaW5rKHByb2plY3RJZCksIGJhc2VMaW5rLnJlcGxhY2UoL15cXC9rdWJlcm5ldGVzXFwvLywgJycpKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZXNvdXJjZUtpbmRUb1VyaVBhdGgoa2luZCkge1xuICAgIHZhciBraW5kUGF0aCA9IGtpbmQudG9Mb3dlckNhc2UoKSArIFwic1wiO1xuICAgIGlmIChraW5kUGF0aCA9PT0gXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIgJiYgIWlzVjFiZXRhMU9yMigpKSB7XG4gICAgICBraW5kUGF0aCA9IFwicmVwbGljYXRpb25jb250cm9sbGVyc1wiO1xuICAgIH1cbiAgICByZXR1cm4ga2luZFBhdGg7XG4gIH1cblxuICBmdW5jdGlvbiBpc0lnbm9yZU5hbWVzcGFjZUtpbmQoa2luZCkge1xuICAgIHJldHVybiBraW5kID09PSBcIkhvc3RcIiB8fCBraW5kID09PSBcIk1pbmlvblwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHJvb3QgVVJMIGZvciB0aGUga2luZFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGt1YmVybmV0ZXNVcmxGb3JLaW5kKEt1YmVybmV0ZXNBcGlVUkwsIGtpbmQsIG5hbWVzcGFjZSA9IG51bGwsIHBhdGggPSBudWxsKSB7XG4gICAgdmFyIHBhdGhTZWdtZW50ID0gXCJcIjtcbiAgICBpZiAocGF0aCkge1xuICAgICAgcGF0aFNlZ21lbnQgPSBcIi9cIiArIENvcmUudHJpbUxlYWRpbmcocGF0aCwgXCIvXCIpO1xuICAgIH1cbiAgICB2YXIga2luZFBhdGggPSByZXNvdXJjZUtpbmRUb1VyaVBhdGgoa2luZCk7XG4gICAgdmFyIGlnbm9yZU5hbWVzcGFjZSA9IGlzSWdub3JlTmFtZXNwYWNlS2luZChraW5kKTtcbiAgICBpZiAoaXNWMWJldGExT3IyKCkgfHwgaWdub3JlTmFtZXNwYWNlKSB7XG4gICAgICB2YXIgcG9zdGZpeCA9IFwiXCI7XG4gICAgICBpZiAobmFtZXNwYWNlICYmICFpZ25vcmVOYW1lc3BhY2UpIHtcbiAgICAgICAgcG9zdGZpeCA9IFwiP25hbWVzcGFjZT1cIiArIG5hbWVzcGFjZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oS3ViZXJuZXRlc0FwaVVSTCwga2luZFBhdGgsIHBhdGhTZWdtZW50LCBwb3N0Zml4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihLdWJlcm5ldGVzQXBpVVJMLCBcIi9uYW1lc3BhY2VzL1wiLCBuYW1lc3BhY2UgLCBraW5kUGF0aCwgcGF0aFNlZ21lbnQpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYmFzZSBVUkwgZm9yIHRoZSBraW5kIG9mIGt1YmVybmV0ZXMgcmVzb3VyY2Ugb3IgbnVsbCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzVXJsRm9ySXRlbUtpbmQoS3ViZXJuZXRlc0FwaVVSTCwganNvbikge1xuICAgIHZhciBraW5kID0ganNvbi5raW5kO1xuICAgIGlmIChraW5kKSB7XG4gICAgICByZXR1cm4ga3ViZXJuZXRlc1VybEZvcktpbmQoS3ViZXJuZXRlc0FwaVVSTCwga2luZCwganNvbi5uYW1lc3BhY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cud2FybihcIklnbm9yaW5nIG1pc3Npbmcga2luZCBcIiArIGtpbmQgKyBcIiBmb3Iga3ViZXJuZXRlcyBqc29uOiBcIiArIGFuZ3VsYXIudG9Kc29uKGpzb24pKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlKEt1YmVybmV0ZXNBcGlVUkwsIHNlcnZpY2UsIHBhdGggPSBudWxsKSB7XG4gICAgdmFyIHBhdGhTZWdtZW50ID0gXCJcIjtcbiAgICBpZiAocGF0aCkge1xuICAgICAgcGF0aFNlZ21lbnQgPSBcIi9cIiArIENvcmUudHJpbUxlYWRpbmcocGF0aCwgXCIvXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXRoU2VnbWVudCA9IFwiL1wiO1xuICAgIH1cbiAgICB2YXIgbmFtZXNwYWNlID0gZ2V0TmFtZXNwYWNlKHNlcnZpY2UpO1xuICAgIGlmIChpc1YxYmV0YTFPcjIoKSkge1xuICAgICAgdmFyIHBvc3RmaXggPSBcIj9uYW1lc3BhY2U9XCIgKyBuYW1lc3BhY2U7XG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXNBcGlVUkwsIFwiL3Byb3h5XCIsICBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcIi9zZXJ2aWNlcy9cIiArIGdldE5hbWUoc2VydmljZSkgKyBwYXRoU2VnbWVudCArIHBvc3RmaXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXNBcGlVUkwsIFwiL3Byb3h5L25hbWVzcGFjZXMvXCIsIG5hbWVzcGFjZSwgXCIvc2VydmljZXMvXCIgKyBnZXROYW1lKHNlcnZpY2UpICsgcGF0aFNlZ21lbnQpO1xuICAgIH1cbiAgfVxuXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2VDdXJyZW50TmFtZXNwYWNlKHNlcnZpY2UsIHBhdGggPSBudWxsKSB7XG4gICAgdmFyIGFwaVByZWZpeCA9IFVybEhlbHBlcnMuam9pbihrdWJlcm5ldGVzQXBpVXJsKCkpO1xuICAgIHJldHVybiBrdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlKGFwaVByZWZpeCwgc2VydmljZSwgcGF0aCk7XG5cbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gYnVpbGRDb25maWdSZXN0VXJsKGlkKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihidWlsZENvbmZpZ3NSZXN0VVJMKCksIGlkKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBkZXBsb3ltZW50Q29uZmlnUmVzdFVybChpZCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oZGVwbG95bWVudENvbmZpZ3NSZXN0VVJMKCksIGlkKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpbWFnZVJlcG9zaXRvcnlSZXN0VXJsKGlkKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihpbWFnZVJlcG9zaXRvcmllc1Jlc3RVUkwoKSwgaWQpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUmVzdFVybChpZCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oYnVpbGRzUmVzdFVSTCgpLCBpZCk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYnVpbGRMb2dzUmVzdFVybChpZCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oYnVpbGRzUmVzdFVSTCgpLCBpZCwgXCJsb2dcIik7XG4gIH1cblxuICAvKipcbiAgICogUnVucyB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gSlNPTlxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHJ1bkFwcCgkbG9jYXRpb24sICRzY29wZSwgJGh0dHAsIEt1YmVybmV0ZXNBcGlVUkwsIGpzb24sIG5hbWUgPSBcIkFwcFwiLCBvblN1Y2Nlc3NGbiA9IG51bGwsIG5hbWVzcGFjZSA9IG51bGwsIG9uQ29tcGxldGVGbiA9IG51bGwpIHtcbiAgICBpZiAoanNvbikge1xuICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoanNvbikpIHtcbiAgICAgICAganNvbiA9IGFuZ3VsYXIuZnJvbUpzb24oanNvbik7XG4gICAgICB9XG4gICAgICBuYW1lID0gbmFtZSB8fCBcIkFwcFwiO1xuICAgICAgdmFyIHBvc3RmaXggPSBuYW1lc3BhY2UgPyBcIiBpbiBuYW1lc3BhY2UgXCIgKyBuYW1lc3BhY2UgOiBcIlwiO1xuICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2luZm8nLCBcIlJ1bm5pbmcgXCIgKyBuYW1lICsgcG9zdGZpeCk7XG5cbiAgICAgIHZhciBpdGVtcyA9IGNvbnZlcnRLdWJlcm5ldGVzSnNvblRvSXRlbXMoanNvbik7XG4gICAgICBhbmd1bGFyLmZvckVhY2goaXRlbXMsIChpdGVtKSA9PiB7XG4gICAgICAgIHZhciB1cmwgPSBrdWJlcm5ldGVzVXJsRm9ySXRlbUtpbmQoS3ViZXJuZXRlc0FwaVVSTCwgaXRlbSk7XG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAkaHR0cC5wb3N0KHVybCwgaXRlbSkuXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJHb3Qgc3RhdHVzOiBcIiArIHN0YXR1cyArIFwiIG9uIHVybDogXCIgKyB1cmwgKyBcIiBkYXRhOiBcIiArIGRhdGEgKyBcIiBhZnRlciBwb3N0aW5nOiBcIiArIGFuZ3VsYXIudG9Kc29uKGl0ZW0pKTtcbiAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihvbkNvbXBsZXRlRm4pKSB7XG4gICAgICAgICAgICAgICAgb25Db21wbGV0ZUZuKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgIH0pLlxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IGRhdGEubWVzc2FnZTtcbiAgICAgICAgICAgICAgdmFyIHJlYXNvbiA9IGRhdGEucmVhc29uO1xuICAgICAgICAgICAgICBpZiAocmVhc29uID09PSBcIkFscmVhZHlFeGlzdHNcIikge1xuICAgICAgICAgICAgICAgIC8vIGxldHMgaWdub3JlIGR1cGxpY2F0ZXNcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJlbnRpdHkgYWxyZWFkeSBleGlzdHMgYXQgXCIgKyB1cmwpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkZhaWxlZCB0byBQT1NUIHRvIFwiICsgdXJsICsgXCIgZ290IHN0YXR1czogXCIgKyBzdGF0dXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBzYXZlIFwiICsgdXJsICsgXCIgc3RhdHVzOiBcIiArIHN0YXR1cyArIFwiIHJlc3BvbnNlOiBcIiArIGFuZ3VsYXIudG9Kc29uKGRhdGEsIHRydWUpKTtcbiAgICAgICAgICAgIENvcmUubm90aWZpY2F0aW9uKCdlcnJvcicsIG1lc3NhZ2UpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBwb2QgaXMgcnVubmluZ1xuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUnVubmluZyhwb2RDdXJyZW50U3RhdGUpIHtcbiAgICB2YXIgc3RhdHVzID0gKHBvZEN1cnJlbnRTdGF0ZSB8fCB7fSkucGhhc2U7XG4gICAgaWYgKHN0YXR1cykge1xuICAgICAgdmFyIGxvd2VyID0gc3RhdHVzLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gbG93ZXIuc3RhcnRzV2l0aChcInJ1blwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGxhYmVscyBvYmplY3QgaGFzIGFsbCBvZiB0aGUga2V5L3ZhbHVlIHBhaXJzIGZyb20gdGhlIHNlbGVjdG9yXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gc2VsZWN0b3JNYXRjaGVzKHNlbGVjdG9yLCBsYWJlbHMpIHtcbiAgICBpZiAoYW5ndWxhci5pc09iamVjdChsYWJlbHMpKSB7XG4gICAgICB2YXIgYW5zd2VyID0gdHJ1ZTtcbiAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICBhbmd1bGFyLmZvckVhY2goc2VsZWN0b3IsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChhbnN3ZXIgJiYgbGFiZWxzW2tleV0gIT09IHZhbHVlKSB7XG4gICAgICAgICAgYW5zd2VyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFuc3dlciAmJiBjb3VudCA+IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2VydmljZSByZWdpc3RyeVxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFNlcnZpY2VSZWdpc3RyeSgpIHtcbiAgICB2YXIgaW5qZWN0b3IgPSBIYXd0aW9Db3JlLmluamVjdG9yO1xuICAgIHJldHVybiBpbmplY3RvciA/IGluamVjdG9yLmdldDxhbnk+KFwiU2VydmljZVJlZ2lzdHJ5XCIpIDogbnVsbDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaW5rIHRvIHRoZSBraWJhbmEgbG9ncyB3ZWIgYXBwbGljYXRpb25cbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBraWJhbmFMb2dzTGluayhTZXJ2aWNlUmVnaXN0cnkpIHtcbiAgICB2YXIgbGluayA9IFNlcnZpY2VSZWdpc3RyeS5zZXJ2aWNlTGluayhraWJhbmFTZXJ2aWNlTmFtZSk7XG4gICAgaWYgKGxpbmspIHtcbiAgICAgIGlmICghbGluay5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgbGluayArPSBcIi9cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsaW5rICsgXCIjL2Rhc2hib2FyZC9GYWJyaWM4XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBvcGVuTG9nc0ZvclBvZHMoU2VydmljZVJlZ2lzdHJ5LCAkd2luZG93LCBuYW1lc3BhY2UsIHBvZHMpIHtcbiAgICB2YXIgbGluayA9IGtpYmFuYUxvZ3NMaW5rKFNlcnZpY2VSZWdpc3RyeSk7XG4gICAgaWYgKGxpbmspIHtcbiAgICAgIHZhciBxdWVyeSA9IFwiXCI7XG4gICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIChpdGVtKSA9PiB7XG4gICAgICAgIHZhciBpZCA9IGdldE5hbWUoaXRlbSk7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgIHZhciBzcGFjZSA9IHF1ZXJ5ID8gXCIgT1IgXCIgOiBcIlwiO1xuICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgcXVlcnkgKz0gc3BhY2UgKyAnXCInICsgaWQgKyAnXCInO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICBpZiAoY291bnQgPiAxKSB7XG4gICAgICAgICAgcXVlcnkgPSBcIihcIiArIHF1ZXJ5ICsgXCIpXCI7XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnkgPSAna3ViZXJuZXRlcy5uYW1lc3BhY2VfbmFtZTpcIicgKyBuYW1lc3BhY2UgKyAnXCIgQU5EIGt1YmVybmV0ZXMucG9kX25hbWU6JyArIHF1ZXJ5O1xuICAgICAgICBsaW5rICs9IFwiP19hPShxdWVyeToocXVlcnlfc3RyaW5nOihxdWVyeTonXCIgKyBxdWVyeSArIFwiJykpKVwiO1xuICAgICAgICB2YXIgbmV3V2luZG93ID0gJHdpbmRvdy5vcGVuKGxpbmssIFwidmlld0xvZ3NcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHJlc2l6ZUNvbnRyb2xsZXIoJGh0dHAsIEt1YmVybmV0ZXNBcGlVUkwsIHJlcGxpY2F0aW9uQ29udHJvbGxlciwgbmV3UmVwbGljYXMsIG9uQ29tcGxldGVGbiA9IG51bGwpIHtcbiAgICB2YXIgaWQgPSBnZXROYW1lKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XG4gICAgdmFyIG5hbWVzcGFjZSA9IGdldE5hbWVzcGFjZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpIHx8IFwiXCI7XG4gICAgdmFyIHVybCA9IGt1YmVybmV0ZXNVcmxGb3JLaW5kKEt1YmVybmV0ZXNBcGlVUkwsIFwiUmVwbGljYXRpb25Db250cm9sbGVyXCIsIG5hbWVzcGFjZSwgaWQpO1xuICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB2YXIgZGVzaXJlZFN0YXRlID0gZGF0YS5zcGVjO1xuICAgICAgICAgIGlmICghZGVzaXJlZFN0YXRlKSB7XG4gICAgICAgICAgICBkZXNpcmVkU3RhdGUgPSB7fTtcbiAgICAgICAgICAgIGRhdGEuc3BlYyA9IGRlc2lyZWRTdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVzaXJlZFN0YXRlLnJlcGxpY2FzID0gbmV3UmVwbGljYXM7XG4gICAgICAgICAgJGh0dHAucHV0KHVybCwgZGF0YSkuXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJ1cGRhdGVkIGNvbnRyb2xsZXIgXCIgKyB1cmwpO1xuICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKG9uQ29tcGxldGVGbikpIHtcbiAgICAgICAgICAgICAgICBvbkNvbXBsZXRlRm4oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBzYXZlIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KS5cbiAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgfSk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzVGV4dFRvQ3NzQ2xhc3ModGV4dCwgcmVhZHkgPSBmYWxzZSkge1xuICAgIGlmICh0ZXh0KSB7XG4gICAgICB2YXIgbG93ZXIgPSB0ZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobG93ZXIuc3RhcnRzV2l0aChcInJ1blwiKSB8fCBsb3dlci5zdGFydHNXaXRoKFwib2tcIikpIHtcbiAgICAgICAgaWYgKCFyZWFkeSkge1xuICAgICAgICAgIHJldHVybiBcImZhIGZhLXNwaW5uZXIgZmEtc3BpbiBncmVlblwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnZmEgZmEtcGxheS1jaXJjbGUgZ3JlZW4nO1xuICAgICAgfSBlbHNlIGlmIChsb3dlci5zdGFydHNXaXRoKFwid2FpdFwiKSB8fCBsb3dlci5zdGFydHNXaXRoKFwicGVuZFwiKSkge1xuICAgICAgICByZXR1cm4gJ2ZhIGZhLWRvd25sb2FkJztcbiAgICAgIH0gZWxzZSBpZiAobG93ZXIuc3RhcnRzV2l0aChcInRlcm1cIikgfHwgbG93ZXIuc3RhcnRzV2l0aChcImVycm9yXCIpIHx8IGxvd2VyLnN0YXJ0c1dpdGgoXCJmYWlsXCIpKSB7XG4gICAgICAgIHJldHVybiAnZmEgZmEtb2ZmIG9yYW5nZSc7XG4gICAgICB9IGVsc2UgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoXCJzdWNjZWVkZWRcIikpIHtcbiAgICAgICAgcmV0dXJuICdmYSBmYS1jaGVjay1jaXJjbGUtbyBncmVlbic7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnZmEgZmEtcXVlc3Rpb24gcmVkJztcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBwb2RTdGF0dXMocG9kKSB7XG4gICAgcmV0dXJuIGdldFN0YXR1cyhwb2QpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUmVhZHkocG9kKSB7XG4gICAgdmFyIHN0YXR1cyA9IHBvZC5zdGF0dXMgfHwge307XG4gICAgdmFyIGFuc3dlciA9IGZhbHNlO1xuICAgIGFuZ3VsYXIuZm9yRWFjaChzdGF0dXMuY29uZGl0aW9ucywgKGNvbmRpdGlvbikgPT4ge1xuICAgICAgdmFyIHQgPSBjb25kaXRpb24udHlwZTtcbiAgICAgIGlmICh0ICYmIHQgPT09IFwiUmVhZHlcIikge1xuICAgICAgICB2YXIgc3RhdHVzID0gY29uZGl0aW9uLnN0YXR1cztcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJUcnVlXCIpIHtcbiAgICAgICAgICBhbnN3ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFuc3dlcjtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBcHBWaWV3UG9kQ291bnRlcnMoYXBwVmlldykge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBtYXAgPSB7fTtcbiAgICB2YXIgcG9kcyA9IGFwcFZpZXcucG9kcztcbiAgICB2YXIgbG93ZXN0RGF0ZSA9IG51bGw7XG4gICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIHBvZCA9PiB7XG4gICAgICB2YXIgc2VsZWN0b3IgPSBnZXRMYWJlbHMocG9kKTtcbiAgICAgIHZhciBzZWxlY3RvclRleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKHNlbGVjdG9yLCBcIiBcIik7XG4gICAgICB2YXIgYW5zd2VyID0gbWFwW3NlbGVjdG9yXTtcbiAgICAgIGlmICghYW5zd2VyKSB7XG4gICAgICAgIGFuc3dlciA9IHtcbiAgICAgICAgICBsYWJlbFRleHQ6IHNlbGVjdG9yVGV4dCxcbiAgICAgICAgICBwb2RzTGluazogVXJsSGVscGVycy5qb2luKFwiL2t1YmVybmV0ZXMvbmFtZXNwYWNlL1wiLCBwb2QubWV0YWRhdGEubmFtZXNwYWNlLCBcInBvZHM/cT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChzZWxlY3RvclRleHQpKSxcbiAgICAgICAgICB2YWxpZDogMCxcbiAgICAgICAgICB3YWl0aW5nOiAwLFxuICAgICAgICAgIGVycm9yOiAwXG4gICAgICAgIH07XG4gICAgICAgIG1hcFtzZWxlY3Rvcl0gPSBhbnN3ZXI7XG4gICAgICAgIGFycmF5LnB1c2goYW5zd2VyKTtcbiAgICAgIH1cbiAgICAgIHZhciBzdGF0dXMgPSAocG9kU3RhdHVzKHBvZCkgfHwgXCJFcnJvclwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHN0YXR1cy5zdGFydHNXaXRoKFwicnVuXCIpIHx8IHN0YXR1cy5zdGFydHNXaXRoKFwib2tcIikpIHtcbiAgICAgICAgYW5zd2VyLnZhbGlkICs9IDE7XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cy5zdGFydHNXaXRoKFwid2FpdFwiKSB8fCBzdGF0dXMuc3RhcnRzV2l0aChcInB3bmRcIikpIHtcbiAgICAgICAgYW5zd2VyLndhaXRpbmcgKz0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFuc3dlci5lcnJvciArPSAxO1xuICAgICAgfVxuICAgICAgdmFyIGNyZWF0aW9uVGltZXN0YW1wID0gZ2V0Q3JlYXRpb25UaW1lc3RhbXAocG9kKTtcbiAgICAgIGlmIChjcmVhdGlvblRpbWVzdGFtcCkge1xuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGNyZWF0aW9uVGltZXN0YW1wKTtcbiAgICAgICAgaWYgKCFsb3dlc3REYXRlIHx8IGQgPCBsb3dlc3REYXRlKSB7XG4gICAgICAgICAgbG93ZXN0RGF0ZSA9IGQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBhcHBWaWV3LiRjcmVhdGlvbkRhdGUgPSBsb3dlc3REYXRlO1xuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBcHBWaWV3U2VydmljZVZpZXdzKGFwcFZpZXcpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgcG9kcyA9IGFwcFZpZXcucG9kcztcbiAgICBhbmd1bGFyLmZvckVhY2gocG9kcywgcG9kID0+IHtcbiAgICAgIHZhciBpZCA9IGdldE5hbWUocG9kKTtcbiAgICAgIGlmIChpZCkge1xuICAgICAgICB2YXIgYWJicmV2ID0gaWQ7XG4gICAgICAgIHZhciBpZHggPSBpZC5pbmRleE9mKFwiLVwiKTtcbiAgICAgICAgaWYgKGlkeCA+IDEpIHtcbiAgICAgICAgICBhYmJyZXYgPSBpZC5zdWJzdHJpbmcoMCwgaWR4KTtcbiAgICAgICAgfVxuICAgICAgICBwb2QuaWRBYmJyZXYgPSBhYmJyZXY7XG4gICAgICB9XG4gICAgICBwb2Quc3RhdHVzQ2xhc3MgPSBzdGF0dXNUZXh0VG9Dc3NDbGFzcyhwb2RTdGF0dXMocG9kKSwgaXNSZWFkeShwb2QpKTtcbiAgICB9KTtcblxuICAgIHZhciBzZXJ2aWNlcyA9IGFwcFZpZXcuc2VydmljZXMgfHwgW107XG4gICAgdmFyIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMgPSBhcHBWaWV3LnJlcGxpY2F0aW9uQ29udHJvbGxlcnMgfHwgW107XG4gICAgdmFyIHNpemUgPSBNYXRoLm1heChzZXJ2aWNlcy5sZW5ndGgsIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMubGVuZ3RoLCAxKTtcbiAgICB2YXIgYXBwTmFtZSA9IGFwcFZpZXcuJGluZm8ubmFtZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgdmFyIHNlcnZpY2UgPSBzZXJ2aWNlc1tpXTtcbiAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXIgPSByZXBsaWNhdGlvbkNvbnRyb2xsZXJzW2ldO1xuICAgICAgdmFyIGNvbnRyb2xsZXJJZCA9IGdldE5hbWUocmVwbGljYXRpb25Db250cm9sbGVyKTtcbiAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShzZXJ2aWNlKSB8fCBjb250cm9sbGVySWQ7XG4gICAgICB2YXIgYWRkcmVzcyA9IENvcmUucGF0aEdldChzZXJ2aWNlLCBbXCJzcGVjXCIsIFwicG9ydGFsSVBcIl0pO1xuICAgICAgaWYgKCFuYW1lICYmIHBvZHMubGVuZ3RoKSB7XG4gICAgICAgIG5hbWUgPSBwb2RzWzBdLmlkQWJicmV2O1xuICAgICAgfVxuICAgICAgaWYgKCFhcHBWaWV3LiRpbmZvLm5hbWUpIHtcbiAgICAgICAgYXBwVmlldy4kaW5mby5uYW1lID0gbmFtZTtcbiAgICAgIH1cbiAgICAgIGlmICghYXBwVmlldy5pZCAmJiBwb2RzLmxlbmd0aCkge1xuICAgICAgICBhcHBWaWV3LmlkID0gZ2V0TmFtZShwb2RzWzBdKTtcbiAgICAgIH1cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBhcHBOYW1lID0gbmFtZTtcbiAgICAgIH1cbiAgICAgIHZhciBwb2RDb3VudCA9IHBvZHMubGVuZ3RoO1xuICAgICAgdmFyIHBvZENvdW50VGV4dCA9IHBvZENvdW50ICsgXCIgcG9kXCIgKyAocG9kQ291bnQgPiAxID8gXCJzXCIgOiBcIlwiKTtcbiAgICAgIHZhciB2aWV3ID0ge1xuICAgICAgICBhcHBOYW1lOiBhcHBOYW1lIHx8IG5hbWUsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIGNyZWF0ZWREYXRlOiBhcHBWaWV3LiRjcmVhdGlvbkRhdGUsXG4gICAgICAgIHBvZENvdW50OiBwb2RDb3VudCxcbiAgICAgICAgcG9kQ291bnRUZXh0OiBwb2RDb3VudFRleHQsXG4gICAgICAgIGFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgIGNvbnRyb2xsZXJJZDogY29udHJvbGxlcklkLFxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlLFxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXI6IHJlcGxpY2F0aW9uQ29udHJvbGxlcixcbiAgICAgICAgcG9kczogcG9kc1xuICAgICAgfTtcbiAgICAgIGFycmF5LnB1c2godmlldyk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb252ZXJ0cyBhIGdpdCBwYXRoIGludG8gYW4gYWNjZXNzaWJsZSBVUkwgZm9yIHRoZSBicm93c2VyXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gZ2l0UGF0aFRvVXJsKGljb25QYXRoLCBicmFuY2ggPSBcIm1hc3RlclwiKSB7XG4gICAgcmV0dXJuIChIYXd0aW9Db3JlLmluamVjdG9yLmdldDxzdHJpbmc+KCdBcHBMaWJyYXJ5VVJMJykgfHwgJycpICsgXCIvZ2l0L1wiICsgYnJhbmNoICsgaWNvblBhdGg7XG4gIH1cblxuICBmdW5jdGlvbiBhc0RhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiBudWxsO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEJ1aWxkQ29uZmlnKGJ1aWxkQ29uZmlnLCBzb3J0ZWRCdWlsZHMpIHtcbiAgICBpZiAoYnVpbGRDb25maWcpIHtcbiAgICAgIHZhciB0cmlnZ2VyVXJsOnN0cmluZyA9IG51bGw7XG4gICAgICB2YXIgbWV0YWRhdGEgPSBidWlsZENvbmZpZy5tZXRhZGF0YSB8fCB7fTtcbiAgICAgIHZhciBuYW1lID0gbWV0YWRhdGEubmFtZTtcbiAgICAgIGJ1aWxkQ29uZmlnLiRuYW1lID0gbmFtZTtcbiAgICAgIHZhciBwcm9qZWN0TGluayA9IERldmVsb3Blci5wcm9qZWN0TGluayhuYW1lKTtcbiAgICAgIHZhciBucyA9IG1ldGFkYXRhLm5hbWVzcGFjZSB8fCBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgICAgYnVpbGRDb25maWcuJG5hbWVzcGFjZSA9IG5zO1xuICAgICAgYnVpbGRDb25maWcuZW52aXJvbm1lbnRzID0gW107XG4gICAgICBidWlsZENvbmZpZy4kY3JlYXRpb25EYXRlID0gYXNEYXRlKEt1YmVybmV0ZXMuZ2V0Q3JlYXRpb25UaW1lc3RhbXAoYnVpbGRDb25maWcpKTtcbiAgICAgIGJ1aWxkQ29uZmlnLiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhnZXRMYWJlbHMoYnVpbGRDb25maWcpKTtcblxuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgYnVpbGRDb25maWcuJHZpZXdMaW5rID0gVXJsSGVscGVycy5qb2luKFwid29ya3NwYWNlc1wiLCBucywgXCJwcm9qZWN0c1wiLCBuYW1lLCBcImVudmlyb25tZW50c1wiKTtcbiAgICAgICAgYnVpbGRDb25maWcuJGVkaXRMaW5rID0gVXJsSGVscGVycy5qb2luKFwid29ya3NwYWNlc1wiLCBucywgXCJwcm9qZWN0c1wiLCBuYW1lLCBcImJ1aWxkQ29uZmlnRWRpdFwiKTtcblxuICAgICAgICBhbmd1bGFyLmZvckVhY2goW2ZhbHNlLCB0cnVlXSwgKGZsYWcpID0+IHtcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goYnVpbGRDb25maWcudHJpZ2dlcnMsICh0cmlnZ2VyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRyaWdnZXJVcmwpIHtcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSB0cmlnZ2VyLnR5cGU7XG4gICAgICAgICAgICAgIGlmICh0eXBlID09PSBcImdlbmVyaWNcIiB8fCBmbGFnKSB7XG4gICAgICAgICAgICAgICAgdmFyIGdlbmVyaWMgPSB0cmlnZ2VyW3R5cGVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIGdlbmVyaWMpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBzZWNyZXQgPSBnZW5lcmljLnNlY3JldDtcbiAgICAgICAgICAgICAgICAgIGlmIChzZWNyZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlclVybCA9IFVybEhlbHBlcnMuam9pbihidWlsZENvbmZpZ0hvb2tzUmVzdFVSTCgpLCBuYW1lLCBzZWNyZXQsIHR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBidWlsZENvbmZpZy4kdHJpZ2dlclVybCA9IHRyaWdnZXJVcmw7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGxldHMgZmluZCB0aGUgbGF0ZXN0IGJ1aWxkLi4uXG4gICAgICAgIGlmIChzb3J0ZWRCdWlsZHMpIHtcbiAgICAgICAgICBidWlsZENvbmZpZy4kbGFzdEJ1aWxkID0gXy5maW5kKHNvcnRlZEJ1aWxkcywge1xuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgYnVpbGRjb25maWc6IG5hbWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgJGZhYnJpYzhWaWV3cyA9IHt9O1xuXG4gICAgICBmdW5jdGlvbiBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QobmFtZSwgb2JqZWN0LCBhdXRvQ3JlYXRlID0gZmFsc2UpIHtcbiAgICAgICAgdmFyIHZpZXcgPSAkZmFicmljOFZpZXdzW25hbWVdO1xuICAgICAgICBpZiAoYXV0b0NyZWF0ZSAmJiAhdmlldykge1xuICAgICAgICAgIHZpZXcgPSB7fVxuICAgICAgICAgICRmYWJyaWM4Vmlld3NbbmFtZV0gPSB2aWV3O1xuICAgICAgICB9XG4gICAgICAgIGlmICh2aWV3KSB7XG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKG9iamVjdCwgKHZhbHVlLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB2aWV3W3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICAgICAgICB2aWV3W3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdFN0YXJ0c1dpdGgocHJlZml4LCBvYmplY3QsIGF1dG9DcmVhdGUgPSBmYWxzZSkge1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goJGZhYnJpYzhWaWV3cywgKHZpZXcsIG5hbWUpID0+IHtcbiAgICAgICAgICBpZiAodmlldyAmJiBuYW1lLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKG9iamVjdCwgKHZhbHVlLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHZpZXdbcHJvcGVydHldO1xuICAgICAgICAgICAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICB2aWV3W3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGFiZWxzID0gbWV0YWRhdGEubGFiZWxzIHx8IHt9O1xuICAgICAgdmFyIGFubm90YXRpb25zID0gbWV0YWRhdGEuYW5ub3RhdGlvbnMgfHwge307XG5cbiAgICAgIC8vIGxldHMgZGVmYXVsdCB0aGUgcmVwbyBhbmQgdXNlclxuICAgICAgYnVpbGRDb25maWcuJHVzZXIgPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguamVua2lucy91c2VyXCJdIHx8IGxhYmVsc1tcInVzZXJcIl07XG4gICAgICBidWlsZENvbmZpZy4kcmVwbyA9IGFubm90YXRpb25zW1wiZmFicmljOC5qZW5raW5zL3JlcG9cIl0gfHwgbGFiZWxzW1wicmVwb1wiXTtcblxuICAgICAgYW5ndWxhci5mb3JFYWNoKGFubm90YXRpb25zLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICB2YXIgcGFydHMgPSBrZXkuc3BsaXQoJy8nLCAyKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB2YXIgbGlua0lkID0gcGFydHNbMF07XG4gICAgICAgICAgdmFyIHByb3BlcnR5ID0gcGFydHNbMV07XG4gICAgICAgICAgaWYgKGxpbmtJZCAmJiBwcm9wZXJ0eSAmJiBsaW5rSWQuc3RhcnRzV2l0aChcImZhYnJpYzgubGlua1wiKSkge1xuICAgICAgICAgICAgdmFyIGxpbmsgPSAkZmFicmljOFZpZXdzW2xpbmtJZF07XG4gICAgICAgICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgICAgICAgbGluayA9IHtcbiAgICAgICAgICAgICAgICBjbGFzczogbGlua0lkXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICRmYWJyaWM4Vmlld3NbbGlua0lkXSA9IGxpbms7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5rW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChidWlsZENvbmZpZy4kdXNlciAmJiBidWlsZENvbmZpZy4kcmVwbykge1xuICAgICAgICAvLyBicm93c2UgZ29ncyByZXBvIHZpZXdcbiAgICAgICAgdmFyIGdvZ3NVcmwgPSBzZXJ2aWNlTGlua1VybChnb2dzU2VydmljZU5hbWUpO1xuICAgICAgICBpZiAoZ29nc1VybCkge1xuICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5icm93c2VHb2dzLnZpZXdcIiwge1xuICAgICAgICAgICAgbGFiZWw6IFwiQnJvd3NlLi4uXCIsXG4gICAgICAgICAgICB1cmw6IFVybEhlbHBlcnMuam9pbihnb2dzVXJsLCBidWlsZENvbmZpZy4kdXNlciwgYnVpbGRDb25maWcuJHJlcG8pLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQnJvd3NlIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIHJlcG9zaXRvcnlcIixcbiAgICAgICAgICAgIGljb25DbGFzczogXCJmYSBmYS1leHRlcm5hbC1saW5rXCJcbiAgICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJ1biBmb3JnZSBjb21tYW5kcyB2aWV3XG4gICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5mb3JnZUNvbW1hbmQudmlld1wiLCB7XG4gICAgICAgICAgbGFiZWw6IFwiQ29tbWFuZC4uLlwiLFxuICAgICAgICAgIHVybDogVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcIi9mb3JnZS9jb21tYW5kcy91c2VyXCIsIGJ1aWxkQ29uZmlnLiR1c2VyLCBidWlsZENvbmZpZy4kcmVwbyksXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiUGVyZm9ybSBhbiBhY3Rpb24gb24gdGhpcyBwcm9qZWN0XCIsXG4gICAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLXBsYXktY2lyY2xlXCJcbiAgICAgICAgfSwgdHJ1ZSk7XG5cblxuICAgICAgICAvLyBjb25maWd1cmUgZGV2b3BzIHZpZXdcbiAgICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmZvcmdlQ29tbWFuZC5kZXZvcHMuc2V0dGluZ3NcIiwge1xuICAgICAgICAgIGxhYmVsOiBcIlNldHRpbmdzXCIsXG4gICAgICAgICAgdXJsOiBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwiL2ZvcmdlL2NvbW1hbmQvZGV2b3BzLWVkaXQvdXNlclwiLCBidWlsZENvbmZpZy4kdXNlciwgYnVpbGRDb25maWcuJHJlcG8pLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbmZpZ3VyZSB0aGUgRGV2T3BzIHNldHRpbmdzIGZvciB0aGlzIHByb2plY3RcIixcbiAgICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtcGVuY2lsLXNxdWFyZS1vXCJcbiAgICAgICAgfSwgdHJ1ZSk7XG5cbiAgICAgIH1cblxuICAgICAgLy8gYWRkIHNvbWUgaWNvbnMgYW5kIGRlc2NyaXB0aW9uc1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLnJlcG9zaXRvcnkuYnJvd3NlXCIsIHtcbiAgICAgICAgbGFiZWw6IFwiQnJvd3NlLi4uXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkJyb3dzZSB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyByZXBvc2l0b3J5XCIsXG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS1leHRlcm5hbC1saW5rXCJcbiAgICAgIH0pO1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmplbmtpbnMuam9iXCIsIHtcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLXRhc2tzXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlZpZXcgdGhlIEplbmtpbnMgSm9iIGZvciB0aGlzIGJ1aWxkXCJcbiAgICAgIH0pO1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmplbmtpbnMubW9uaXRvclwiLCB7XG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS10YWNob21ldGVyXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlZpZXcgdGhlIEplbmtpbnMgTW9uaXRvciBkYXNoYm9hcmQgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9KTtcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5qZW5raW5zLnBpcGVsaW5lXCIsIHtcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWFycm93LWNpcmNsZS1vLXJpZ2h0XCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlZpZXcgdGhlIEplbmtpbnMgUGlwZWxpbmUgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9KTtcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5sZXRzY2hhdC5yb29tXCIsIHtcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWNvbW1lbnRcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiQ2hhdCByb29tIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSk7XG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsubGV0c2NoYXQucm9vbVwiLCB7XG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS1jb21tZW50XCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkNoYXQgcm9vbSBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0pO1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLnRhaWdhXCIsIHtcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWNoZWNrLXNxdWFyZS1vXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIklzc3VlIHRyYWNrZXIgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9KTtcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5pc3N1ZXNcIiwge1xuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtY2hlY2stc3F1YXJlLW9cIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiSXNzdWVzIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSk7XG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsucmVsZWFzZXNcIiwge1xuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtdGFnXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIklzc3VlcyBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0pO1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLnRhaWdhLnRlYW1cIiwge1xuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtdXNlcnNcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVGVhbSBtZW1iZXJzIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSk7XG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsudGVhbVwiLCB7XG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS11c2Vyc1wiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJUZWFtIG1lbWJlcnMgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9KTtcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdFN0YXJ0c1dpdGgoXCJmYWJyaWM4LmxpbmsuZW52aXJvbm1lbnQuXCIsIHtcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWNsb3VkXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBrdWJlcm5ldGVzIG5hbWVzcGFjZSBmb3IgdGhpcyBlbnZpcm9ubWVudFwiXG4gICAgICB9KTtcblxuXG4gICAgICAvLyBsZXRzIHB1dCB0aGUgdmlld3MgaW50byBzZWN0aW9ucy4uLlxuICAgICAgdmFyICRmYWJyaWM4Q29kZVZpZXdzID0ge307XG4gICAgICB2YXIgJGZhYnJpYzhCdWlsZFZpZXdzID0ge307XG4gICAgICB2YXIgJGZhYnJpYzhUZWFtVmlld3MgPSB7fTtcbiAgICAgIHZhciAkZmFicmljOEVudmlyb25tZW50Vmlld3MgPSB7fTtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkZmFicmljOFZpZXdzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICB2YXIgdmlldztcbiAgICAgICAgaWYgKGtleS5pbmRleE9mKFwidGFpZ2FcIikgPiAwIHx8IGtleS5pbmRleE9mKFwiLmlzc3VlXCIpID4gMCB8fCBrZXkuaW5kZXhPZihcImxldHNjaGF0XCIpID4gMHx8IGtleS5pbmRleE9mKFwiLnRlYW1cIikgPiAwKSB7XG4gICAgICAgICAgdmlldyA9ICRmYWJyaWM4VGVhbVZpZXdzO1xuICAgICAgICB9IGVsc2UgaWYgKGtleS5pbmRleE9mKFwiamVua2luc1wiKSA+IDApIHtcbiAgICAgICAgICB2aWV3ID0gJGZhYnJpYzhCdWlsZFZpZXdzO1xuICAgICAgICB9IGVsc2UgaWYgKGtleS5pbmRleE9mKFwiLmVudmlyb25tZW50LlwiKSA+IDApIHtcbiAgICAgICAgICB2aWV3ID0gJGZhYnJpYzhFbnZpcm9ubWVudFZpZXdzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpZXcgPSAkZmFicmljOENvZGVWaWV3cztcbiAgICAgICAgfVxuICAgICAgICB2aWV3W2tleV0gPSB2YWx1ZTtcbiAgICAgIH0pO1xuXG5cbiAgICAgIGJ1aWxkQ29uZmlnLiRmYWJyaWM4Vmlld3MgPSAkZmFicmljOFZpZXdzO1xuICAgICAgYnVpbGRDb25maWcuJGZhYnJpYzhDb2RlVmlld3MgPSAkZmFicmljOENvZGVWaWV3cztcbiAgICAgIGJ1aWxkQ29uZmlnLiRmYWJyaWM4QnVpbGRWaWV3cyA9ICRmYWJyaWM4QnVpbGRWaWV3cztcbiAgICAgIGJ1aWxkQ29uZmlnLiRmYWJyaWM4RW52aXJvbm1lbnRWaWV3cyA9ICRmYWJyaWM4RW52aXJvbm1lbnRWaWV3cztcbiAgICAgIGJ1aWxkQ29uZmlnLiRmYWJyaWM4VGVhbVZpZXdzID0gJGZhYnJpYzhUZWFtVmlld3M7XG5cbiAgICAgIHZhciAkamVua2luc0pvYiA9IGFubm90YXRpb25zW1wiZmFicmljOC5pby9qZW5raW5zLWpvYlwiXTtcbiAgICAgIGlmICghJGplbmtpbnNKb2IgJiYgJGZhYnJpYzhWaWV3c1tcImZhYnJpYzgubGluay5qZW5raW5zLmpvYlwiXSkge1xuICAgICAgICAkamVua2luc0pvYiA9IG5hbWU7XG4gICAgICB9XG4gICAgICBidWlsZENvbmZpZy4kamVua2luc0pvYiA9ICRqZW5raW5zSm9iO1xuXG4gICAgICBhbmd1bGFyLmZvckVhY2goJGZhYnJpYzhFbnZpcm9ubWVudFZpZXdzLCAoZW52KSA9PiB7XG4gICAgICAgIHZhciBjID0gZW52LmNsYXNzO1xuICAgICAgICB2YXIgcHJlZml4ID0gXCJmYWJyaWM4LmxpbmsuZW52aXJvbm1lbnQuXCI7XG4gICAgICAgIGlmIChjICYmIGMuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgICAgdmFyIGVucyA9IGMuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpO1xuICAgICAgICAgIGVudi5uYW1lc3BhY2UgPSBlbnM7XG4gICAgICAgICAgZW52LnVybCA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIG5zLCBcInByb2plY3RzXCIsIG5hbWUsIFwibmFtZXNwYWNlXCIsIGVucyk7XG4gICAgICAgIH1cbiAgICAgICAgYnVpbGRDb25maWcuZW52aXJvbm1lbnRzLnB1c2goZW52KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFidWlsZENvbmZpZy5lbnZpcm9ubWVudHMubGVuZ3RoKSB7XG4gICAgICAgIC8vIGxldHMgY3JlYXRlIGEgc2luZ2xlIGVudmlyb25tZW50XG4gICAgICAgIHZhciBlbnMgPSBucztcbiAgICAgICAgdmFyIGVudiA9IHtcbiAgICAgICAgICBuYW1lc3BhY2U6IGVucyxcbiAgICAgICAgICBsYWJlbDogXCJDdXJyZW50XCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlIGVudmlyb25lbW50IHRoYXQgdGhpcyBwcm9qZWN0IGlzIGJ1aWx0IGFuZCBydW4gaW5zaWRlXCIsXG4gICAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWNsb3VkXCIsXG4gICAgICAgICAgdXJsOiBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCBucywgXCJwcm9qZWN0c1wiLCBuYW1lLCBcIm5hbWVzcGFjZVwiLCBlbnMpXG4gICAgICAgIH07XG4gICAgICAgIGJ1aWxkQ29uZmlnLmVudmlyb25tZW50cy5wdXNoKGVudik7XG5cbiAgICAgIH1cblxuICAgICAgYnVpbGRDb25maWcuZW52aXJvbm1lbnRzID0gYnVpbGRDb25maWcuZW52aXJvbm1lbnRzLnJldmVyc2UoKTtcblxuICAgICAgYnVpbGRDb25maWcudG9vbHMgPSBbXTtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkZmFicmljOENvZGVWaWV3cywgKGVudikgPT4ge1xuICAgICAgICBidWlsZENvbmZpZy50b29scy5wdXNoKGVudik7XG4gICAgICB9KTtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkZmFicmljOFRlYW1WaWV3cywgKGVudikgPT4ge1xuICAgICAgICBidWlsZENvbmZpZy50b29scy5wdXNoKGVudik7XG4gICAgICB9KTtcblxuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hCdWlsZENvbmZpZ3MoYnVpbGRDb25maWdzLCBzb3J0ZWRCdWlsZHMgPSBudWxsKSB7XG4gICAgYW5ndWxhci5mb3JFYWNoKGJ1aWxkQ29uZmlncywgKGJ1aWxkQ29uZmlnKSA9PiB7XG4gICAgICBlbnJpY2hCdWlsZENvbmZpZyhidWlsZENvbmZpZywgc29ydGVkQnVpbGRzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRDb25maWdzO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEJ1aWxkcyhidWlsZHMpIHtcbiAgICBhbmd1bGFyLmZvckVhY2goYnVpbGRzLCAoYnVpbGQpID0+IHtcbiAgICAgIGVucmljaEJ1aWxkKGJ1aWxkKTtcbiAgICB9KTtcbiAgICByZXR1cm4gXy5zb3J0QnkoYnVpbGRzLCBcIiRjcmVhdGlvbkRhdGVcIikucmV2ZXJzZSgpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEJ1aWxkKGJ1aWxkKSB7XG4gICAgaWYgKGJ1aWxkKSB7XG4gICAgICB2YXIgbWV0YWRhdGEgPSBidWlsZC5tZXRhZGF0YSB8fCB7fTtcbiAgICAgIHZhciBhbm5vdGF0aW9ucyA9IG1ldGFkYXRhLmFubm90YXRpb25zIHx8IHt9O1xuICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKGJ1aWxkKTtcbiAgICAgIHZhciBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2UoYnVpbGQpO1xuICAgICAgYnVpbGQuJG5hbWUgPSBuYW1lO1xuICAgICAgYnVpbGQuJG5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblxuICAgICAgdmFyIG5hbWVBcnJheSA9IG5hbWUuc3BsaXQoXCItXCIpO1xuICAgICAgdmFyIG5hbWVBcnJheUxlbmd0aCA9IG5hbWVBcnJheS5sZW5ndGg7XG4gICAgICBidWlsZC4kc2hvcnROYW1lID0gKG5hbWVBcnJheUxlbmd0aCA+IDQpID8gbmFtZUFycmF5LnNsaWNlKDAsIG5hbWVBcnJheUxlbmd0aCAtIDQpLmpvaW4oXCItXCIpIDogbmFtZS5zdWJzdHJpbmcoMCwgMzApO1xuXG4gICAgICB2YXIgbGFiZWxzID0gZ2V0TGFiZWxzKGJ1aWxkKTtcbiAgICAgIHZhciBjb25maWdJZCA9IGxhYmVscy5idWlsZGNvbmZpZztcbiAgICAgIGJ1aWxkLiRjb25maWdJZCA9IGNvbmZpZ0lkO1xuICAgICAgaWYgKGNvbmZpZ0lkKSB7XG4gICAgICAgIC8vYnVpbGQuJGNvbmZpZ0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJrdWJlcm5ldGVzL2J1aWxkQ29uZmlnc1wiLCBjb25maWdJZCk7XG4gICAgICAgIGJ1aWxkLiRjb25maWdMaW5rID0gVXJsSGVscGVycy5qb2luKFwid29ya3NwYWNlc1wiLCBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpLCBcInByb2plY3RzXCIsIGNvbmZpZ0lkKTtcbiAgICAgIH1cbiAgICAgIHZhciBjcmVhdGlvblRpbWVzdGFtcCA9IGdldENyZWF0aW9uVGltZXN0YW1wKGJ1aWxkKTtcbiAgICAgIGlmIChjcmVhdGlvblRpbWVzdGFtcCkge1xuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGNyZWF0aW9uVGltZXN0YW1wKTtcbiAgICAgICAgYnVpbGQuJGNyZWF0aW9uRGF0ZSA9IGQ7XG4gICAgICB9XG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICAvL2J1aWxkLiR2aWV3TGluayA9IFVybEhlbHBlcnMuam9pbihcImt1YmVybmV0ZXMvYnVpbGRzXCIsIG5hbWUpO1xuICAgICAgICB2YXIgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJ3b3Jrc3BhY2VzXCIsIGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCksIFwicHJvamVjdHNcIiwgY29uZmlnSWQpO1xuICAgICAgICBidWlsZC4kdmlld0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwiYnVpbGRzXCIsIG5hbWUpO1xuICAgICAgICAvL2J1aWxkLiRsb2dzTGluayA9IFVybEhlbHBlcnMuam9pbihcImt1YmVybmV0ZXMvYnVpbGRMb2dzXCIsIG5hbWUpO1xuICAgICAgICBidWlsZC4kbG9nc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwiYnVpbGRMb2dzXCIsIG5hbWUpO1xuICAgICAgfVxuICAgICAgYnVpbGQucG9kTmFtZSA9IGJ1aWxkLnBvZE5hbWUgfHwgYW5ub3RhdGlvbnNbXCJvcGVuc2hpZnQuaW8vYnVpbGQucG9kLW5hbWVcIl07XG4gICAgICB2YXIgcG9kTmFtZSA9IGJ1aWxkLnBvZE5hbWU7XG4gICAgICBpZiAocG9kTmFtZSAmJiBuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyIHBvZE5hbWVBcnJheSA9IHBvZE5hbWUuc3BsaXQoXCItXCIpO1xuICAgICAgICB2YXIgcG9kTmFtZUFycmF5TGVuZ3RoID0gcG9kTmFtZUFycmF5Lmxlbmd0aDtcbiAgICAgICAgYnVpbGQuJHBvZFNob3J0TmFtZSA9IChwb2ROYW1lQXJyYXlMZW5ndGggPiA1KSA/IHBvZE5hbWVBcnJheVtwb2ROYW1lQXJyYXlMZW5ndGggLSA1XSA6IHBvZE5hbWUuc3Vic3RyaW5nKDAsIDMwKTtcbiAgICAgICAgYnVpbGQuJHBvZExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJrdWJlcm5ldGVzL25hbWVzcGFjZVwiLCBuYW1lc3BhY2UsIFwicG9kc1wiLCBwb2ROYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkO1xuICB9XG5cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoRGVwbG95bWVudENvbmZpZyhkZXBsb3ltZW50Q29uZmlnKSB7XG4gICAgaWYgKGRlcGxveW1lbnRDb25maWcpIHtcbiAgICAgIHZhciB0cmlnZ2VyVXJsOnN0cmluZyA9IG51bGw7XG4gICAgICB2YXIgbmFtZSA9IENvcmUucGF0aEdldChkZXBsb3ltZW50Q29uZmlnLCBbXCJtZXRhZGF0YVwiLCBcIm5hbWVcIl0pO1xuICAgICAgZGVwbG95bWVudENvbmZpZy4kbmFtZSA9IG5hbWU7XG4gICAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChkZXBsb3ltZW50Q29uZmlnLnRyaWdnZXJzLCAodHJpZ2dlcikgPT4ge1xuICAgICAgICB2YXIgdHlwZSA9IHRyaWdnZXIudHlwZTtcbiAgICAgICAgaWYgKCFkZXBsb3ltZW50Q29uZmlnLiRpbWFnZUNoYW5nZVBhcmFtcyAmJiB0eXBlID09PSBcIkltYWdlQ2hhbmdlXCIpIHtcbiAgICAgICAgICB2YXIgaW1hZ2VDaGFuZ2VQYXJhbXMgPSB0cmlnZ2VyLmltYWdlQ2hhbmdlUGFyYW1zO1xuICAgICAgICAgIGlmIChpbWFnZUNoYW5nZVBhcmFtcykge1xuICAgICAgICAgICAgdmFyIGNvbnRhaW5lck5hbWVzID0gaW1hZ2VDaGFuZ2VQYXJhbXMuY29udGFpbmVyTmFtZXMgfHwgW107XG4gICAgICAgICAgICBpbWFnZUNoYW5nZVBhcmFtcy4kY29udGFpbmVyTmFtZXMgPSBjb250YWluZXJOYW1lcy5qb2luKFwiIFwiKTtcbiAgICAgICAgICAgIGRlcGxveW1lbnRDb25maWcuJGltYWdlQ2hhbmdlUGFyYW1zID0gaW1hZ2VDaGFuZ2VQYXJhbXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoRGVwbG95bWVudENvbmZpZ3MoZGVwbG95bWVudENvbmZpZ3MpIHtcbiAgICBhbmd1bGFyLmZvckVhY2goZGVwbG95bWVudENvbmZpZ3MsIChkZXBsb3ltZW50Q29uZmlnKSA9PiB7XG4gICAgICBlbnJpY2hEZXBsb3ltZW50Q29uZmlnKGRlcGxveW1lbnRDb25maWcpO1xuICAgIH0pO1xuICAgIHJldHVybiBkZXBsb3ltZW50Q29uZmlncztcbiAgfVxuXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEV2ZW50KGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB2YXIgbWV0YWRhdGEgPSBldmVudC5tZXRhZGF0YSB8fCB7fTtcblxuICAgICAgdmFyIGZpcnN0VGltZXN0YW1wID0gZXZlbnQuZmlyc3RUaW1lc3RhbXA7XG4gICAgICBpZiAoZmlyc3RUaW1lc3RhbXApIHtcbiAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShmaXJzdFRpbWVzdGFtcCk7XG4gICAgICAgIGV2ZW50LiRmaXJzdFRpbWVzdGFtcCA9IGQ7XG4gICAgICB9XG4gICAgICB2YXIgbGFzdFRpbWVzdGFtcCA9IGV2ZW50Lmxhc3RUaW1lc3RhbXA7XG4gICAgICBpZiAobGFzdFRpbWVzdGFtcCkge1xuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGxhc3RUaW1lc3RhbXApO1xuICAgICAgICBldmVudC4kbGFzdFRpbWVzdGFtcCA9IGQ7XG4gICAgICB9XG4gICAgICB2YXIgbGFiZWxzID0gYW5ndWxhci5jb3B5KGV2ZW50LnNvdXJjZSB8fCB7fSk7XG4gICAgICB2YXIgaW52b2x2ZWRPYmplY3QgPSBldmVudC5pbnZvbHZlZE9iamVjdCB8fCB7fTtcbiAgICAgIHZhciBuYW1lID0gaW52b2x2ZWRPYmplY3QubmFtZTtcbiAgICAgIHZhciBraW5kID0gaW52b2x2ZWRPYmplY3Qua2luZDtcbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIGxhYmVsc1snbmFtZSddID0gbmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChraW5kKSB7XG4gICAgICAgIGxhYmVsc1sna2luZCddID0ga2luZDtcbiAgICAgIH1cbiAgICAgIGV2ZW50LiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhsYWJlbHMpO1xuXG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEV2ZW50cyhldmVudHMsIG1vZGVsID0gbnVsbCkge1xuICAgIGFuZ3VsYXIuZm9yRWFjaChldmVudHMsIChldmVudCkgPT4ge1xuICAgICAgZW5yaWNoRXZlbnQoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgLy8gbGV0cyB1cGRhdGUgbGlua3MgdG8gdGhlIGV2ZW50cyBmb3IgZWFjaCBwb2QgYW5kIFJDXG4gICAgaWYgKG1vZGVsKSB7XG4gICAgICBmdW5jdGlvbiBjbGVhckV2ZW50cyhlbnRpdHkpIHtcbiAgICAgICAgZW50aXR5LiRldmVudHMgPSBbXTtcbiAgICAgICAgZW50aXR5LiRldmVudHNMaW5rID0gbnVsbDtcbiAgICAgICAgZW50aXR5LiRldmVudENvdW50ID0gMDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlRXZlbnQoZW50aXR5LCBldmVudCkge1xuICAgICAgICBpZiAoZW50aXR5KSB7XG4gICAgICAgICAgZW50aXR5LiRldmVudHMucHVzaChldmVudCk7XG4gICAgICAgICAgaWYgKCFlbnRpdHkuJGV2ZW50c0xpbmspIHtcbiAgICAgICAgICAgIGVudGl0eS4kZXZlbnRzTGluayA9IFVybEhlbHBlcnMuam9pbihcIi9rdWJlcm5ldGVzL25hbWVzcGFjZS9cIiwgY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSwgXCJldmVudHNcIikgKyBcIj9xPWtpbmQlM0RcIiArIGVudGl0eS5raW5kICsgXCIlMjBuYW1lJTNEXCIgKyBlbnRpdHkubWV0YWRhdGEubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZW50aXR5LiRldmVudENvdW50ID0gZW50aXR5LiRldmVudHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBwb2RzID0gbW9kZWwucG9kcyB8fCBbXTtcbiAgICAgIHZhciByY3MgPSBtb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzIHx8IFtdO1xuICAgICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIGNsZWFyRXZlbnRzKTtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChyY3MsIGNsZWFyRXZlbnRzKTtcblxuICAgICAgYW5ndWxhci5mb3JFYWNoKGV2ZW50cywgKGV2ZW50KSA9PiB7XG4gICAgICAgIHZhciBpbnZvbHZlZE9iamVjdCA9IGV2ZW50Lmludm9sdmVkT2JqZWN0IHx8IHt9O1xuICAgICAgICB2YXIgbmFtZSA9IGludm9sdmVkT2JqZWN0Lm5hbWU7XG4gICAgICAgIHZhciBraW5kID0gaW52b2x2ZWRPYmplY3Qua2luZDtcbiAgICAgICAgdmFyIG5zID0gbW9kZWwuY3VycmVudE5hbWVzcGFjZSgpO1xuICAgICAgICBpZiAobmFtZSAmJiBraW5kICYmIG5zKSB7XG4gICAgICAgICAgdmFyIGVudGl0eSA9IG51bGw7XG4gICAgICAgICAgaWYgKGtpbmQgPT09IFwiUmVwbGljYXRpb25Db250cm9sbGVyXCIpIHtcbiAgICAgICAgICAgIGVudGl0eSA9IG1vZGVsLmdldFJlcGxpY2F0aW9uQ29udHJvbGxlcihucywgbmFtZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSBcIlBvZFwiKSB7XG4gICAgICAgICAgICBlbnRpdHkgPSBtb2RlbC5nZXRQb2QobnMsIG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZW50aXR5KSB7XG4gICAgICAgICAgICB1cGRhdGVFdmVudChlbnRpdHksIGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZXZlbnRzO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEltYWdlUmVwb3NpdG9yeShpbWFnZVJlcG9zaXRvcnkpIHtcbiAgICBpZiAoaW1hZ2VSZXBvc2l0b3J5KSB7XG4gICAgICB2YXIgdHJpZ2dlclVybDpzdHJpbmcgPSBudWxsO1xuICAgICAgdmFyIG5hbWUgPSBDb3JlLnBhdGhHZXQoaW1hZ2VSZXBvc2l0b3J5LCBbXCJtZXRhZGF0YVwiLCBcIm5hbWVcIl0pO1xuICAgICAgaW1hZ2VSZXBvc2l0b3J5LiRuYW1lID0gbmFtZTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSW1hZ2VSZXBvc2l0b3JpZXMoaW1hZ2VSZXBvc2l0b3JpZXMpIHtcbiAgICBhbmd1bGFyLmZvckVhY2goaW1hZ2VSZXBvc2l0b3JpZXMsIChpbWFnZVJlcG9zaXRvcnkpID0+IHtcbiAgICAgIGVucmljaEltYWdlUmVwb3NpdG9yeShpbWFnZVJlcG9zaXRvcnkpO1xuICAgIH0pO1xuICAgIHJldHVybiBpbWFnZVJlcG9zaXRvcmllcztcbiAgfVxuXG5cbiAgdmFyIGxhYmVsQ29sb3JzID0ge1xuICAgICdiYXRjaCc6ICdrOHMtYmFkZ2UtYmF0Y2gnLFxuICAgICdyZWdpb24nOiAnazhzLWJhZGdlLXJlZ2lvbicsXG4gICAgJ3R5cGUnOiAnazhzLWJhZGdlLXR5cGUnLFxuICAgICdzeXN0ZW0nOiAnazhzLWJhZGdlLXN5c3RlbScsXG4gICAgJ2lzVGFyZ2V0JzogJ2s4cy1iYWRnZS10YXJnZXQnXG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5lckxhYmVsQ2xhc3MobGFiZWxUeXBlOnN0cmluZykge1xuICAgIGlmICghKGxhYmVsVHlwZSBpbiBsYWJlbENvbG9ycykpIHtcbiAgICAgIHJldHVybiAnbW91c2UtcG9pbnRlcic7XG4gICAgfVxuICAgIGVsc2UgcmV0dXJuIGxhYmVsQ29sb3JzW2xhYmVsVHlwZV0gKyAnIG1vdXNlLXBvaW50ZXInO1xuICB9XG5cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBmYWJyaWM4IGZvcmdlIHBsdWdpbiBpcyBlbmFibGVkXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gaXNGb3JnZUVuYWJsZWQoKSB7XG4gICAgLy8gVE9ETyBzaG91bGQgcmV0dXJuIHRydWUgaWYgdGhlIHNlcnZpY2UgXCJmYWJyaWM4LWZvcmdlXCIgaXMgdmFsaWRcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGt1YmVybmV0ZXMgc2VsZWN0ZWQgbmFtZXNwYWNlIG9yIHRoZSBkZWZhdWx0IG9uZVxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCkge1xuICAgIHZhciBpbmplY3RvciA9IEhhd3Rpb0NvcmUuaW5qZWN0b3I7XG4gICAgaWYgKGluamVjdG9yKSB7XG4gICAgICB2YXIgS3ViZXJuZXRlc1N0YXRlID0gaW5qZWN0b3IuZ2V0PGFueT4oXCJLdWJlcm5ldGVzU3RhdGVcIikgfHwge307XG4gICAgICByZXR1cm4gS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlIHx8IGRlZmF1bHROYW1lc3BhY2U7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0TmFtZXNwYWNlO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHNldEN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKG5zKSB7XG4gICAgaWYgKG5zKSB7XG4gICAgICB2YXIgS3ViZXJuZXRlc1N0YXRlID0gaW5qZWN0PGFueT4oXCJLdWJlcm5ldGVzU3RhdGVcIikgfHwge307XG4gICAgICBLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UgPSBucztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlcyB0aGUganNvbiBzY2hlbWFcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBjb25maWd1cmVTY2hlbWEoKSB7XG4gICAgYW5ndWxhci5mb3JFYWNoKHNjaGVtYS5kZWZpbml0aW9ucywgKGRlZmluaXRpb24sIG5hbWUpID0+IHtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0gZGVmaW5pdGlvbi5wcm9wZXJ0aWVzO1xuICAgICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgICAgdmFyIGhpZGVQcm9wZXJ0aWVzID0gW1wiY3JlYXRpb25UaW1lc3RhbXBcIiwgXCJraW5kXCIsIFwiYXBpVmVyc2lvblwiLCBcImFubm90YXRpb25zXCIsIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIiwgXCJuYW1lc3BhY2VcIiwgXCJyZXNvdXJjZVZlcnNpb25cIiwgXCJzZWxmTGlua1wiLCBcInVpZFwiXTtcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKGhpZGVQcm9wZXJ0aWVzLCAocHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgcHJvcGVydHlbXCJoaWRkZW5cIl0gID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhbmd1bGFyLmZvckVhY2gocHJvcGVydGllcywgKHByb3BlcnR5LCBwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgICB2YXIgcmVmID0gcHJvcGVydHlbXCIkcmVmXCJdO1xuICAgICAgICAgIHZhciB0eXBlID0gcHJvcGVydHlbXCJ0eXBlXCJdO1xuICAgICAgICAgIGlmIChyZWYgJiYgKCF0eXBlIHx8IHR5cGUgPT09IFwib2JqZWN0XCIpKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eVtcInR5cGVcIl0gPSByZWY7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlID09PSBcImFycmF5XCIpIHtcbiAgICAgICAgICAgIHZhciBpdGVtcyA9IHByb3BlcnR5W1wiaXRlbXNcIl07XG4gICAgICAgICAgICBpZiAoaXRlbXMpIHtcbiAgICAgICAgICAgICAgdmFyIHJlZiA9IGl0ZW1zW1wiJHJlZlwiXTtcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSBpdGVtc1tcInR5cGVcIl07XG4gICAgICAgICAgICAgIGlmIChyZWYgJiYgKCF0eXBlIHx8IHR5cGUgPT09IFwib2JqZWN0XCIpKSB7XG4gICAgICAgICAgICAgICAgaXRlbXNbXCJ0eXBlXCJdID0gcmVmO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgc2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX1dlYkhvb2tUcmlnZ2VyLnByb3BlcnRpZXMuc2VjcmV0LnR5cGUgPSBcInBhc3N3b3JkXCI7XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBMZXRzIHJlbW92ZSBhbnkgZW5yaWNoZWQgZGF0YSB0byBsZWF2ZSB0aGUgb3JpZ2luYWwganNvbiBpbnRhY3RcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiB1bmVucmljaChpdGVtKSB7XG4gICAgdmFyIG8gPSBfLmNsb25lRGVlcChpdGVtKTtcbiAgICBhbmd1bGFyLmZvckVhY2gobywgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChcIiRcIikgfHwga2V5LnN0YXJ0c1dpdGgoXCJfXCIpKSB7XG4gICAgICAgIGRlbGV0ZSBvW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVsZXRlIG9bJ2Nvbm5lY3RUbyddO1xuICAgIHJldHVybiBvO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHVuZW5yaWNoZWQgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3RcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiB0b1Jhd0pzb24oaXRlbSkge1xuICAgIHZhciBvID0gdW5lbnJpY2goaXRlbSk7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG8sIG51bGwsIDIpOyAvLyBzcGFjaW5nIGxldmVsID0gMlxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHVuZW5yaWNoZWQgWUFNTCByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3RcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiB0b1Jhd1lhbWwoaXRlbSkge1xuICAgIHZhciBvID0gdW5lbnJpY2goaXRlbSk7XG4gICAgcmV0dXJuIGpzeWFtbC5kdW1wKG8sIHsgaW5kZW50OiAyIH0pO1xuICB9XG5cblxuICBleHBvcnQgZnVuY3Rpb24gd2F0Y2goJHNjb3BlOiBhbnksICRlbGVtZW50OiBhbnksIGtpbmQsIG5zLCBmbiwgbGFiZWxTZWxlY3RvciA9IG51bGwpIHtcbiAgICAgdmFyIGNvbm5lY3Rpb24gPSBLdWJlcm5ldGVzQVBJLndhdGNoKHtcbiAgICAgICAga2luZDoga2luZCxcbiAgICAgICAgbmFtZXNwYWNlOiBucyxcbiAgICAgICAgbGFiZWxTZWxlY3RvcjogbGFiZWxTZWxlY3RvcixcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKG9iamVjdHMpIHtcbiAgICAgICAgICBmbihvYmplY3RzKTtcbiAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgICRlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTdGF0aWMgY29udHJvbGxlcltcIiArIGtpbmQgKyBcIiwgXCIgKyBucyArIFwiXSBlbGVtZW50IGRlc3Ryb3llZFwiKTtcbiAgICAgICAgJHNjb3BlLiRkZXN0cm95KCk7XG4gICAgICB9KTtcbiAgICAgICRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlN0YXRpYyBjb250cm9sbGVyW1wiICsga2luZCArIFwiLCBcIiArIG5zICsgXCJdIHNjb3BlIGRlc3Ryb3llZFwiKTtcbiAgICAgICAgY29ubmVjdGlvbi5kaXNjb25uZWN0KCk7XG4gICAgICB9KTtcbiAgICAgIHZhciBvbGREZWxldGVTY29wZUZuID0gJHNjb3BlLmRlbGV0ZVNjb3BlO1xuICAgICAgJHNjb3BlLmRlbGV0ZVNjb3BlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAkZWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihvbGREZWxldGVTY29wZUZuKSkge1xuICAgICAgICAgIG9sZERlbGV0ZVNjb3BlRm4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUt1YmVybmV0ZXNDbGllbnQoa2luZCwgbnMgPSBudWxsKSB7XG4gICAgdmFyIEs4U0NsaWVudEZhY3RvcnkgPSBpbmplY3Q8YW55PihcIks4U0NsaWVudEZhY3RvcnlcIik7XG4gICAgaWYgKCFLOFNDbGllbnRGYWN0b3J5KSB7XG4gICAgICBsb2cud2FybihcIkNvdWxkIG5vdCBmaW5kIGluamVjdGVkIEs4U0NsaWVudEZhY3RvcnkhXCIpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChraW5kID09PSBcInByb2plY3RzXCIgfHwga2luZCA9PT0gXCJuYW1lc3BhY2VzXCIpIHtcbiAgICAgIG5zID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgbnMgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBLOFNDbGllbnRGYWN0b3J5LmNyZWF0ZShraW5kLCBucyk7XG4gIH1cblxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjdXJyZW50VXNlck5hbWUoKSB7XG4gICAgdmFyIHVzZXJEZXRhaWxzID0gSGF3dGlvT0F1dGguZ2V0VXNlclByb2ZpbGUoKTtcbiAgICB2YXIgYW5zd2VyID0gbnVsbDtcbiAgICBpZiAodXNlckRldGFpbHMpIHtcbiAgICAgIGFuc3dlciA9IGdldE5hbWUodXNlckRldGFpbHMpO1xuICAgIH1cbiAgICByZXR1cm4gYW5zd2VyIHx8IFwiYWRtaW5cIjtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOYW1lc3BhY2UobnMsIGNsaWVudD8pIHtcbiAgICBpZiAoIWNsaWVudCkge1xuICAgICAgY2xpZW50ID0gaXNPcGVuU2hpZnQgPyBLdWJlcm5ldGVzLmNyZWF0ZUt1YmVybmV0ZXNDbGllbnQoJ3Byb2plY3RzJykgOiBLdWJlcm5ldGVzLmNyZWF0ZUt1YmVybmV0ZXNDbGllbnQoJ25hbWVzcGFjZXMnKTtcbiAgICB9XG4gICAgaWYgKG5zICYmIG5zICE9PSBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpKSB7XG4gICAgICB2YXIgb2JqZWN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uOiBLdWJlcm5ldGVzLmRlZmF1bHRBcGlWZXJzaW9uLFxuICAgICAgICBraW5kOiBpc09wZW5TaGlmdCA/ICdQcm9qZWN0JyA6ICdOYW1lc3BhY2UnLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIG5hbWU6IG5zLFxuICAgICAgICAgIGxhYmVsczoge1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNsaWVudC5wdXQob2JqZWN0LFxuICAgICAgICAoZGF0YSkgPT4ge1xuICAgICAgICAgIGxvZy5pbmZvKFwiQ3JlYXRlZCBuYW1lc3BhY2U6IFwiICsgbnMpXG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBjcmVhdGUgbmFtZXNwYWNlOiBcIiArIG5zICsgXCI6IFwiICsgYW5ndWxhci50b0pzb24oZXJyKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSQyhvYmosIG9uQ29tcGxldGVGbiA9IG51bGwpe1xuICAgIHZhciBjbGllbnQgPSAgS3ViZXJuZXRlcy5jcmVhdGVLdWJlcm5ldGVzQ2xpZW50KCdyZXBsaWNhdGlvbmNvbnRyb2xsZXJzJywnZGVmYXVsdCcpO1xuICAgIHZhciBSQ1RlbXBsYXRlID0gbmV3IHJlc291cmNlUkNUZW1wbGF0ZSgpO1xuICAgIHZhciByY1RlbXBsYXRlID0gUkNUZW1wbGF0ZS5jcmVhdGVSQyhvYmopO1xuICAgIC8vY29uc29sZS5sb2cocmNUZW1wbGF0ZSk7XG4gICAgY2xpZW50LnB1dChyY1RlbXBsYXRlLCBmdW5jdGlvbihvYmopIHtcbiAgICAgICAvL2NvbnNvbGUubG9nKFwiQ3JlYXRlZDogXCIsIG9iaik7XG4gICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihvbkNvbXBsZXRlRm4pKSB7XG4gICAgICAgICAgIG9uQ29tcGxldGVGbihvYmopO1xuICAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gICBleHBvcnQgZnVuY3Rpb24gY29ubmVjdE9yYWNsZSgkaHR0cCwgJHRpbWVvdXQsIHVybCwgb3BlcmF0aW9uLCByY05hbWUsIGRlbGF5VGltZSl7XG4gICAgICAgJHRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAkaHR0cCh7XG4gICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgIG1ldGhvZDonUE9TVCcsXG4gICAgICAgICAgICAgICBwYXJhbXM6e29yYWNsZU5hbWU6IHJjTmFtZSwgb3BlcmF0aW9uOiBvcGVyYXRpb259XG4gICAgICAgICAgIH0pLnN1Y2Nlc3MoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XG4gICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInN1Y2Nlc3NcIik7XG4gICAgICAgICAgIH0pLmVycm9yKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xuICAgICAgICAgICAgICAgLy9sb2cud2FybihcIkZhaWxlZCB0byBjb25uZWN0IFwiICsgY29ubmVjdFBhcmFtICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICB9KTtcbiAgICAgIH0sIGRlbGF5VGltZSk7XG4gICB9XG5cbiAgIGV4cG9ydCBmdW5jdGlvbiBnZXRPcmFjbGVTdGF0dXMobGFiZWxzKXtcbiAgICAgICB2YXIgYW5zd2VyID0gLTE7XG4gICAgICAgaWYodHlwZW9mKGxhYmVscykgPT09ICdvYmplY3QnICYmIGxhYmVscy5oYXNPd25Qcm9wZXJ0eShcInN0YXR1c1wiKSl7XG4gICAgICAgICAgIHN3aXRjaChsYWJlbHMuc3RhdHVzKXtcbiAgICAgICAgICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgICAgICAgICAgYW5zd2VyID0gMDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgY2FzZSAnMSc6XG4gICAgICAgICAgICAgICAgICBhbnN3ZXIgPSAxO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICBjYXNlICcyJzpcbiAgICAgICAgICAgICAgICAgIGFuc3dlciA9IDI7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBhbnN3ZXIgPSAtMTtcbiAgICAgICAgICAgfVxuICAgICAgIH1cbiAgICAgICByZXR1cm4gYW5zd2VyO1xuICAgfVxuXG4gICBleHBvcnQgZnVuY3Rpb24gZ2V0RXh0cmFjdFN0YXR1cyhsYWJlbHMpe1xuICAgICAgIGlmKGxhYmVscy5pc1RhcmdldCA9PT0gJ2ZhbHNlJyl7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUludChsYWJlbHMuaXNFeHRyYWN0KTtcbiAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgIH1cbiAgIH1cblxuICAgZXhwb3J0IGZ1bmN0aW9uIGdldE9yYWNsZU5hbWUobmFtZTpzdHJpbmcpOnN0cmluZyB7XG4gICAgICAgdmFyIHJlc3VsdHMgPSBuYW1lLnNwbGl0KFwiLVwiKTtcbiAgICAgICBpZihyZXN1bHRzLmxlbmd0aCA9PT0gMil7XG4gICAgICAgICAgcmV0dXJuIFwi5rGH5oC75pWw5o2u5bqTXCIgKyBcIihcIiArcmVzdWx0c1sxXSArIFwiKVwiO1xuICAgICAgIH1lbHNlIGlmKHJlc3VsdHMubGVuZ3RoID09PSAzKXtcbiAgICAgICAgICByZXR1cm4gS3ViZXJuZXRlcy5nZXRDb3VudHlCeUNvZGUocmVzdWx0c1swXSkgKyBcIl9cIiArIEt1YmVybmV0ZXMuZ2V0U3lzdGVtTmFtZUJ5SWQocmVzdWx0c1sxXSk7XG4gICAgICAgfWVsc2V7XG4gICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgfVxuICAgfVxuXG4gICBleHBvcnQgZnVuY3Rpb24gZXh0cmFjdERhdGFUb09yYWNsZSgkaHR0cCwgc2VsZWN0ZWRSZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCB0YXJnZXRSZXBsaWNhdGlvbkNvbnRyb2xsZXIpe1xuICAgICAgIC8vY29uc29sZS5sb2codGFyZ2V0UmVwbGljYXRpb25Db250cm9sbGVyLmxlbmd0aCk7XG4gICAgICAgaWYoc2VsZWN0ZWRSZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmxlbmd0aCA9PT0xICYmIChnZXROYW1lKHNlbGVjdGVkUmVwbGljYXRpb25Db250cm9sbGVyc1swXSkgPT09IGdldE5hbWUodGFyZ2V0UmVwbGljYXRpb25Db250cm9sbGVyKSkpe1xuICAgICAgICAgICBhbGVydChcIuaCqOmAieaLqeeahOaVsOaNruW6k+S4reS4jeWMheWQq+mcgOimgeaxh+aAu+eahOaVsOaNruW6k++8jOWvvOiHtOaxh+aAu+aTjeS9nOWksei0pe+8jOivt+mHjeaWsOmAieaLqSFcIik7XG4gICAgICAgICAgIHJldHVybjtcbiAgICAgICB9XG4gICAgICAgdmFyIGFuc3dlciA9IGNoZWNrb3V0T3JhY2xlUkNJc1J1bm5pbmcodGFyZ2V0UmVwbGljYXRpb25Db250cm9sbGVyKSAmJiB0YXJnZXRSZXBsaWNhdGlvbkNvbnRyb2xsZXI7XG4gICAgICAgdmFyIG9yYWNsZUNvbm5lY3RQYXJhbSA9IFt7XG4gICAgICAgICAgIE9yYWNsZU5hbWU6IGdldE5hbWUodGFyZ2V0UmVwbGljYXRpb25Db250cm9sbGVyKSxcbiAgICAgICAgICAgY29ubmVjdEhvc3Q6IGdldEhvc3QodGFyZ2V0UmVwbGljYXRpb25Db250cm9sbGVyLiRwb2RzWzBdKSxcbiAgICAgICAgICAgY29ubmVjdFBvcnQ6IHRhcmdldFJlcGxpY2F0aW9uQ29udHJvbGxlci4kcG9kc1swXS5zcGVjLmNvbnRhaW5lcnNbMF0ucG9ydHNbMF0uaG9zdFBvcnQsXG4gICAgICAgICAgIGlzVGFyZ2V0OiB0cnVlXG4gICAgICAgfV07XG4gICAgICAgc2VsZWN0ZWRSZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmZvckVhY2goKHJjKSA9PiB7XG4gICAgICAgICAgIGlmKGdldE5hbWUocmMpICE9PSBnZXROYW1lKHRhcmdldFJlcGxpY2F0aW9uQ29udHJvbGxlcikpe1xuICAgICAgICAgICAgICAgYW5zd2VyID0gYW5zd2VyICYmIGNoZWNrb3V0T3JhY2xlUkNJc1J1bm5pbmcocmMpO1xuICAgICAgICAgICAgICAgICAgb3JhY2xlQ29ubmVjdFBhcmFtLnB1c2goe1xuICAgICAgICAgICAgICAgICAgXCJPcmFjbGVOYW1lXCI6IGdldE5hbWUocmMpLFxuICAgICAgICAgICAgICAgICAgXCJjb25uZWN0SG9zdFwiOiBnZXRIb3N0KHJjLiRwb2RzWzBdKSxcbiAgICAgICAgICAgICAgICAgIFwiY29ubmVjdFBvcnRcIjogcmMuJHBvZHNbMF0uc3BlYy5jb250YWluZXJzWzBdLnBvcnRzWzBdLmhvc3RQb3J0LFxuICAgICAgICAgICAgICAgICAgXCJpc1RhcmdldFwiOiBmYWxzZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgfVxuICAgICAgIH0pO1xuXG4gICAgICAgaWYoYW5zd2VyKXtcbiAgICAgICAgICAgJGh0dHAoe1xuICAgICAgICAgICAgICAgdXJsOiAnL2V4dHJhY3RPcmFjbGVEYXRhJyxcbiAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICBtZXRob2Q6J1BPU1QnLFxuICAgICAgICAgICAgICAgcGFyYW1zOntwYXJhbTogb3JhY2xlQ29ubmVjdFBhcmFtfVxuICAgICAgICAgICB9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xuICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJzdWNjZXNzXCIpO1xuICAgICAgICAgICB9KS5lcnJvcihmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcbiAgICAgICAgICAgICAgIC8vbG9nLndhcm4oXCJGYWlsZWQgdG8gY29ubmVjdCBcIiArIGNvbm5lY3RQYXJhbSArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgfSk7XG4gICAgICAgfWVsc2V7XG4gICAgICAgICAgIGFsZXJ0KFwi5oKo6YCJ5oup55qE5rGH5oC75pWw5o2u5bqT5oiW6ZyA6KaB5rGH5oC755qE5pWw5o2u5bqT5Lit5a2Y5Zyo5pyq5ZCv5Yqo5oiQ5Yqf55qE5pWw5o2u5bqT77yM5a+86Ie05rGH5oC75pON5L2c5aSx6LSl77yM6K+36YeN5paw6YCJ5oup77yBXCIpO1xuICAgICAgIH1cbiAgIH1cblxuICAgZXhwb3J0IGZ1bmN0aW9uIGNoZWNrb3V0T3JhY2xlUkNJc1J1bm5pbmcocmMpe1xuICAgICAgIGlmKHJjLiRwb2RDb3VudGVycy5yZWFkeSAmJiByYy4kb3JhY2xlU3RhdHVzID09IDIpe1xuICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgIH1lbHNle1xuICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgfVxuICAgfVxufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaFdvcmtzcGFjZXMocHJvamVjdHMpIHtcbiAgICBhbmd1bGFyLmZvckVhY2gocHJvamVjdHMsIChwcm9qZWN0KSA9PiB7XG4gICAgICBlbnJpY2hXb3Jrc3BhY2UocHJvamVjdCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb2plY3RzO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaFdvcmtzcGFjZShidWlsZCkge1xuICAgIGlmIChidWlsZCkge1xuICAgICAgdmFyIG5hbWUgPSBLdWJlcm5ldGVzLmdldE5hbWUoYnVpbGQpO1xuICAgICAgYnVpbGQuJG5hbWUgPSBuYW1lO1xuICAgICAgYnVpbGQuJHNvcnRPcmRlciA9IDAgLSBidWlsZC5udW1iZXI7XG5cbiAgICAgIHZhciBuYW1lQXJyYXkgPSBuYW1lLnNwbGl0KFwiLVwiKTtcbiAgICAgIHZhciBuYW1lQXJyYXlMZW5ndGggPSBuYW1lQXJyYXkubGVuZ3RoO1xuICAgICAgYnVpbGQuJHNob3J0TmFtZSA9IChuYW1lQXJyYXlMZW5ndGggPiA0KSA/IG5hbWVBcnJheS5zbGljZSgwLCBuYW1lQXJyYXlMZW5ndGggLSA0KS5qb2luKFwiLVwiKSA6IG5hbWUuc3Vic3RyaW5nKDAsIDMwKTtcblxuICAgICAgdmFyIGxhYmVscyA9IEt1YmVybmV0ZXMuZ2V0TGFiZWxzKGJ1aWxkKTtcbiAgICAgIGJ1aWxkLiRjcmVhdGlvbkRhdGUgPSBhc0RhdGUoS3ViZXJuZXRlcy5nZXRDcmVhdGlvblRpbWVzdGFtcChidWlsZCkpO1xuICAgICAgYnVpbGQuJGxhYmVsc1RleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKGxhYmVscyk7XG5cbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIGJ1aWxkLiRwcm9qZWN0c0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJ3b3Jrc3BhY2VzXCIsIG5hbWUpO1xuICAgICAgICBidWlsZC4kcnVudGltZUxpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJrdWJlcm5ldGVzL25hbWVzcGFjZS9cIiwgbmFtZSwgXCIvYXBwc1wiKTtcbiAgICAgICAgYnVpbGQuJHZpZXdMaW5rID0gYnVpbGQuJHByb2plY3RzTGluaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGFzRGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IG51bGw7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSmVua2luc0pvYnMoam9ic0RhdGEsIHByb2plY3RJZCwgam9iTmFtZSkge1xuICAgIGlmIChqb2JzRGF0YSkge1xuICAgICAgYW5ndWxhci5mb3JFYWNoKGpvYnNEYXRhLmpvYnMsIChqb2IpID0+IHtcbiAgICAgICAgZW5yaWNoSmVua2luc0pvYihqb2IsIHByb2plY3RJZCwgam9iTmFtZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGpvYnNEYXRhO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEplbmtpbnNKb2Ioam9iLCBwcm9qZWN0SWQsIGpvYk5hbWUpIHtcbiAgICBpZiAoam9iKSB7XG4gICAgICBqb2JOYW1lID0gam9iTmFtZSB8fCBqb2IubmFtZSB8fCBwcm9qZWN0SWQ7XG4gICAgICBqb2IuJGpvYklkID0gam9iTmFtZTtcbiAgICAgIGpvYi4kcHJvamVjdCA9IHByb2plY3RJZCB8fCBqb2JOYW1lO1xuICAgICAgdmFyIGxhc3RCdWlsZCA9IGpvYi5sYXN0QnVpbGQ7XG4gICAgICB2YXIgbGFzdEJ1aWxkUmVzdWx0ID0gbGFzdEJ1aWxkID8gbGFzdEJ1aWxkLnJlc3VsdCA6IFwiTk9UX1NUQVJURURcIjtcbiAgICAgIHZhciAkaWNvbkNsYXNzID0gY3JlYXRlQnVpbGRTdGF0dXNJY29uQ2xhc3MobGFzdEJ1aWxkUmVzdWx0KTtcblxuICAgICAgam9iLiRsYXN0QnVpbGROdW1iZXIgPSBlbnJpY2hKZW5raW5zQnVpbGQoam9iLCBsYXN0QnVpbGQpO1xuICAgICAgam9iLiRsYXN0U3VjY2Vzc2Z1bEJ1aWxkTnVtYmVyID0gZW5yaWNoSmVua2luc0J1aWxkKGpvYiwgam9iLmxhc3RTdWNjZXNzZnVsQnVpbGQpO1xuICAgICAgam9iLiRsYXN0RmFpbGVkbEJ1aWxkTnVtYmVyID0gZW5yaWNoSmVua2luc0J1aWxkKGpvYiwgam9iLmxhc3RGYWlsZWRsQnVpbGQpO1xuXG4gICAgICBpZiAobGFzdEJ1aWxkKSB7XG4gICAgICAgIGpvYi4kZHVyYXRpb24gPSBsYXN0QnVpbGQuZHVyYXRpb247XG4gICAgICAgIGpvYi4kdGltZXN0YW1wID0gYXNEYXRlKGxhc3RCdWlsZC50aW1lc3RhbXApO1xuICAgICAgfVxuICAgICAgdmFyIGpvYlVybCA9IChqb2IgfHwge30pLnVybDtcbiAgICAgIGlmICgham9iVXJsIHx8ICFqb2JVcmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICAgICAgdmFyIGplbmtpbnNVcmwgPSBqZW5raW5zTGluaygpO1xuICAgICAgICBpZiAoamVua2luc1VybCkge1xuICAgICAgICAgIGpvYlVybCA9IFVybEhlbHBlcnMuam9pbihqZW5raW5zVXJsLCBcImpvYlwiLCBqb2JOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoam9iVXJsKSB7XG4gICAgICAgIGpvYi4kam9iTGluayA9IGpvYlVybDtcbiAgICAgICAgdmFyIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgICAgIGpvYi4kcGlwZWxpbmVzTGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgam9iLiRwcm9qZWN0LCBcImplbmtpbnNKb2JcIiwgam9iTmFtZSwgXCJwaXBlbGluZXNcIik7XG4gICAgICAgIGpvYi4kYnVpbGRzTGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgam9iLiRwcm9qZWN0LCBcImplbmtpbnNKb2JcIiwgam9iTmFtZSk7XG4gICAgICB9XG4gICAgICBqb2IuJGljb25DbGFzcyA9ICRpY29uQ2xhc3M7XG5cbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChqb2IuYnVpbGRzLCAoYnVpbGQpID0+IHtcbiAgICAgICAgZW5yaWNoSmVua2luc0J1aWxkKGpvYiwgYnVpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBqb2I7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlQnVpbGRTdGF0dXNJY29uQ2xhc3MocmVzdWx0KSB7XG4gICAgdmFyICRpY29uQ2xhc3MgPSBcImZhIGZhLXNwaW5uZXIgZmEtc3BpblwiO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGlmIChyZXN1bHQgPT09IFwiRkFJTFVSRVwiIHx8IHJlc3VsdCA9PT0gXCJGQUlMRURcIikge1xuICAgICAgICAvLyBUT0RPIG5vdCBhdmFpbGFibGUgeWV0XG4gICAgICAgICRpY29uQ2xhc3MgPSBcImZhIGZhLWV4Y2xhbWF0aW9uLWNpcmNsZSByZWRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIkFCT1JURURcIiB8fCByZXN1bHQgPT09IFwiSU5URVJVUFRFRFwiKSB7XG4gICAgICAgICRpY29uQ2xhc3MgPSBcImZhIGZhLWNpcmNsZSBncmV5XCI7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJTVUNDRVNTXCIgfHwgcmVzdWx0ID09PSBcIkNPTVBMRVRFXCIgfHwgcmVzdWx0ID09PSBcIkNPTVBMRVRFRFwiKSB7XG4gICAgICAgICRpY29uQ2xhc3MgPSBcImZhIGZhLWNoZWNrLWNpcmNsZSBncmVlblwiO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiTk9UX1NUQVJURURcIikge1xuICAgICAgICAkaWNvbkNsYXNzID0gXCJmYSBmYS1jaXJjbGUtdGhpbiBncmV5XCI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAkaWNvbkNsYXNzO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJ1aWxkU3RhdHVzQmFja2dyb3VuZENsYXNzKHJlc3VsdCkge1xuICAgIHZhciAkaWNvbkNsYXNzID0gXCJidWlsZC1wZW5kaW5nXCI7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gXCJGQUlMVVJFXCIgfHwgcmVzdWx0ID09PSBcIkZBSUxFRFwiKSB7XG4gICAgICAgICRpY29uQ2xhc3MgPSBcImJ1aWxkLWZhaWxcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIkFCT1JURURcIiB8fCByZXN1bHQgPT09IFwiSU5URVJVUFRFRFwiKSB7XG4gICAgICAgICRpY29uQ2xhc3MgPSBcImJ1aWxkLWFib3J0ZWRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIlNVQ0NFU1NcIiB8fCByZXN1bHQgPT09IFwiQ09NUExFVEVcIiB8fCByZXN1bHQgPT09IFwiQ09NUExFVEVEXCIpIHtcbiAgICAgICAgJGljb25DbGFzcyA9IFwiYnVpbGQtc3VjY2Vzc1wiO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiTk9UX1NUQVJURURcIikge1xuICAgICAgICAkaWNvbkNsYXNzID0gXCJidWlsZC1ub3Qtc3RhcnRlZFwiO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJGljb25DbGFzcztcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hKZW5raW5zQnVpbGQoam9iLCBidWlsZCkge1xuICAgIHZhciBudW1iZXIgPSBudWxsO1xuICAgIGlmIChidWlsZCkge1xuICAgICAgYnVpbGQuJGR1cmF0aW9uID0gYnVpbGQuZHVyYXRpb247XG4gICAgICBidWlsZC4kdGltZXN0YW1wID0gYXNEYXRlKGJ1aWxkLnRpbWVzdGFtcCk7XG4gICAgICB2YXIgcHJvamVjdElkID0gam9iLiRwcm9qZWN0O1xuICAgICAgdmFyIGpvYk5hbWUgPSBqb2IuJGpvYklkIHx8IHByb2plY3RJZDtcbiAgICAgIHZhciBidWlsZElkID0gYnVpbGQuaWQ7XG4gICAgICBudW1iZXIgPSBidWlsZC5udW1iZXI7XG4gICAgICB2YXIgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcblxuICAgICAgdmFyICRpY29uQ2xhc3MgPSBjcmVhdGVCdWlsZFN0YXR1c0ljb25DbGFzcyhidWlsZC5yZXN1bHQpO1xuICAgICAgdmFyIGpvYlVybCA9IChqb2IgfHwge30pLnVybDtcbiAgICAgIGlmICgham9iVXJsIHx8ICFqb2JVcmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICAgICAgdmFyIGplbmtpbnNVcmwgPSBqZW5raW5zTGluaygpO1xuICAgICAgICBpZiAoamVua2luc1VybCkge1xuICAgICAgICAgIGpvYlVybCA9IFVybEhlbHBlcnMuam9pbihqZW5raW5zVXJsLCBcImpvYlwiLCBqb2JOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoam9iVXJsKSB7XG4gICAgICAgIGJ1aWxkLiRqb2JMaW5rID0gam9iVXJsO1xuICAgICAgICBpZiAoYnVpbGRJZCkge1xuICAgICAgICAgIC8vYnVpbGQuJGxvZ3NMaW5rID0gVXJsSGVscGVycy5qb2luKGJ1aWxkLiRidWlsZExpbmssIFwiY29uc29sZVwiKTtcbiAgICAgICAgICBidWlsZC4kbG9nc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3RJZCwgXCJqZW5raW5zSm9iXCIsIGpvYk5hbWUsIFwibG9nXCIsIGJ1aWxkSWQpO1xuICAgICAgICAgIGJ1aWxkLiRwaXBlbGluZUxpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3RJZCwgXCJqZW5raW5zSm9iXCIsIGpvYk5hbWUsIFwicGlwZWxpbmVcIiwgYnVpbGRJZCk7XG4gICAgICAgICAgYnVpbGQuJGJ1aWxkc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3RJZCwgXCJqZW5raW5zSm9iXCIsIGpvYk5hbWUpO1xuICAgICAgICAgIC8vYnVpbGQuJGJ1aWxkTGluayA9IFVybEhlbHBlcnMuam9pbihqb2JVcmwsIGJ1aWxkLmlkKTtcbiAgICAgICAgICBidWlsZC4kYnVpbGRMaW5rID0gYnVpbGQuJGxvZ3NMaW5rO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBidWlsZC4kaWNvbkNsYXNzID0gJGljb25DbGFzcztcbiAgICB9XG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGplbmtpbnNMaW5rKCkge1xuICAgIHZhciBTZXJ2aWNlUmVnaXN0cnkgPSBLdWJlcm5ldGVzLmluamVjdDxhbnk+KFwiU2VydmljZVJlZ2lzdHJ5XCIpO1xuICAgIGlmIChTZXJ2aWNlUmVnaXN0cnkpIHtcbiAgICAgIHJldHVybiBTZXJ2aWNlUmVnaXN0cnkuc2VydmljZUxpbmsoamVua2luc1NlcnZpY2VOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZm9yZ2VSZWFkeUxpbmsoKSB7XG4gICAgdmFyIFNlcnZpY2VSZWdpc3RyeSA9IEt1YmVybmV0ZXMuaW5qZWN0PGFueT4oXCJTZXJ2aWNlUmVnaXN0cnlcIik7XG4gICAgaWYgKFNlcnZpY2VSZWdpc3RyeSkge1xuICAgICAgcmV0dXJuIFNlcnZpY2VSZWdpc3RyeS5zZXJ2aWNlUmVhZHlMaW5rKEt1YmVybmV0ZXMuZmFicmljOEZvcmdlU2VydmljZU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hKZW5raW5zUGlwZWxpbmVKb2Ioam9iLCBwcm9qZWN0SWQsIGpvYklkKSB7XG4gICAgaWYgKGpvYikge1xuICAgICAgam9iLiRwcm9qZWN0ID0gcHJvamVjdElkO1xuICAgICAgam9iLiRqb2JJZCA9IGpvYklkO1xuICAgICAgYW5ndWxhci5mb3JFYWNoKGpvYi5idWlsZHMsIChidWlsZCkgPT4ge1xuICAgICAgICBlbnJpY2hKZW5raW5zU3RhZ2VzKGJ1aWxkLCBwcm9qZWN0SWQsIGpvYklkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hKZW5raW5zU3RhZ2VzKGJ1aWxkLCBwcm9qZWN0SWQsIGpvYk5hbWUpIHtcbiAgICBpZiAoYnVpbGQpIHtcbiAgICAgIGJ1aWxkLiRwcm9qZWN0ID0gcHJvamVjdElkO1xuICAgICAgYnVpbGQuJGpvYklkID0gam9iTmFtZTtcbiAgICAgIGJ1aWxkLiR0aW1lc3RhbXAgPSBhc0RhdGUoYnVpbGQudGltZUluTWlsbGlzKTtcbiAgICAgIGJ1aWxkLiRpY29uQ2xhc3MgPSBjcmVhdGVCdWlsZFN0YXR1c0ljb25DbGFzcyhidWlsZC5yZXN1bHQgfHwgXCJOT1RfU1RBUlRFRFwiKTtcblxuICAgICAgdmFyIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgICB2YXIgcGFyYW1ldGVycyA9IGJ1aWxkLnBhcmFtZXRlcnM7XG4gICAgICB2YXIgJHBhcmFtZXRlckNvdW50ID0gMDtcbiAgICAgIHZhciAkcGFyYW1ldGVyVGV4dCA9IFwiTm8gcGFyYW1ldGVyc1wiO1xuICAgICAgaWYgKHBhcmFtZXRlcnMpIHtcbiAgICAgICAgJHBhcmFtZXRlckNvdW50ID0gXy5rZXlzKHBhcmFtZXRlcnMpLmxlbmd0aCB8fCAwO1xuICAgICAgICAkcGFyYW1ldGVyVGV4dCA9IEt1YmVybmV0ZXMubGFiZWxzVG9TdHJpbmcocGFyYW1ldGVycywgXCIgXCIpO1xuICAgICAgfVxuICAgICAgYnVpbGQuJHBhcmFtZXRlckNvdW50ID0gJHBhcmFtZXRlckNvdW50O1xuICAgICAgYnVpbGQuJHBhcmFtZXRlclRleHQgPSAkcGFyYW1ldGVyVGV4dDtcbiAgICAgIHZhciBqZW5raW5zVXJsID0gamVua2luc0xpbmsoKTtcbiAgICAgIGlmIChqZW5raW5zVXJsKSB7XG4gICAgICAgIHZhciB1cmwgPSBidWlsZC51cmw7XG4gICAgICAgIGlmICh1cmwpIHtcbi8qXG4gICAgICAgICAgYnVpbGQuJHZpZXdMaW5rID0gVXJsSGVscGVycy5qb2luKGplbmtpbnNVcmwsIHVybCk7XG4gICAgICAgICAgYnVpbGQuJGxvZ0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oYnVpbGQuJHZpZXdMaW5rLCBcImxvZ1wiKTtcbiovXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJ1aWxkLiRsb2dMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0SWQsIFwiamVua2luc0pvYlwiLCBqb2JOYW1lLCBcImxvZ1wiLCBidWlsZC5pZCk7XG4gICAgICBidWlsZC4kdmlld0xpbmsgPSBidWlsZC4kbG9nTGluaztcblxuICAgICAgYW5ndWxhci5mb3JFYWNoKGJ1aWxkLnN0YWdlcywgKHN0YWdlKSA9PiB7XG4gICAgICAgIGVucmljaEplbmtpbnNTdGFnZShzdGFnZSwgYnVpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBidWlsZDtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hKZW5raW5zU3RhZ2Uoc3RhZ2UsIGJ1aWxkID0gbnVsbCkge1xuICAgIGlmIChzdGFnZSkge1xuICAgICAgaWYgKGJ1aWxkKSB7XG4gICAgICAgIHN0YWdlLiRidWlsZElkID0gYnVpbGQuaWQ7XG4gICAgICAgIHN0YWdlLiRwcm9qZWN0ID0gYnVpbGQuJHByb2plY3Q7XG4gICAgICB9XG4gICAgICB2YXIgcHJvamVjdElkID0gYnVpbGQuJHByb2plY3Q7XG4gICAgICB2YXIgam9iTmFtZSA9IGJ1aWxkLiRqb2JJZCB8fCBwcm9qZWN0SWQ7XG4gICAgICB2YXIgYnVpbGRJZCA9IGJ1aWxkLmlkO1xuICAgICAgdmFyIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgICBzdGFnZS4kYmFja2dyb3VuZENsYXNzID0gIGNyZWF0ZUJ1aWxkU3RhdHVzQmFja2dyb3VuZENsYXNzKHN0YWdlLnN0YXR1cyk7XG4gICAgICBzdGFnZS4kaWNvbkNsYXNzID0gY3JlYXRlQnVpbGRTdGF0dXNJY29uQ2xhc3Moc3RhZ2Uuc3RhdHVzKTtcbiAgICAgIHN0YWdlLiRzdGFydFRpbWUgPSBhc0RhdGUoc3RhZ2Uuc3RhcnRUaW1lKTtcbiAgICAgIGlmICghc3RhZ2UuZHVyYXRpb24pIHtcbiAgICAgICAgc3RhZ2UuZHVyYXRpb24gPSAwO1xuICAgICAgfVxuICAgICAgdmFyIGplbmtpbnNVcmwgPSBqZW5raW5zTGluaygpO1xuICAgICAgaWYgKGplbmtpbnNVcmwpIHtcbiAgICAgICAgdmFyIHVybCA9IHN0YWdlLnVybDtcbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHN0YWdlLiR2aWV3TGluayA9IFVybEhlbHBlcnMuam9pbihqZW5raW5zVXJsLCB1cmwpO1xuICAgICAgICAgIHN0YWdlLiRsb2dMaW5rID0gVXJsSGVscGVycy5qb2luKHN0YWdlLiR2aWV3TGluaywgXCJsb2dcIik7XG4gICAgICAgICAgaWYgKHByb2plY3RJZCAmJiBidWlsZElkKSB7XG4gICAgICAgICAgICBzdGFnZS4kbG9nTGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdElkLCBcImplbmtpbnNKb2JcIiwgam9iTmFtZSwgXCJsb2dcIiwgYnVpbGRJZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG5tb2R1bGUgRGV2ZWxvcGVyIHtcblxuICBleHBvcnQgdmFyIGNvbnRleHQgPSAnL3dvcmtzcGFjZXMnO1xuICBleHBvcnQgdmFyIGhhc2ggPSAnIycgKyBjb250ZXh0O1xuICBleHBvcnQgdmFyIHBsdWdpbk5hbWUgPSAnRGV2ZWxvcGVyJztcbiAgZXhwb3J0IHZhciBwbHVnaW5QYXRoID0gJ3BsdWdpbnMvZGV2ZWxvcGVyLyc7XG4gIGV4cG9ydCB2YXIgdGVtcGxhdGVQYXRoID0gcGx1Z2luUGF0aCArICdodG1sLyc7XG4gIGV4cG9ydCB2YXIgbG9nOkxvZ2dpbmcuTG9nZ2VyID0gTG9nZ2VyLmdldChwbHVnaW5OYW1lKTtcblxuICBleHBvcnQgdmFyIGplbmtpbnNTZXJ2aWNlTmFtZSA9IFwiamVua2luc1wiO1xuICBleHBvcnQgdmFyIGplbmtpbnNTZXJ2aWNlTmFtZUFuZFBvcnQgPSBqZW5raW5zU2VydmljZU5hbWUgKyBcIjpodHRwXCI7XG5cbiAgZXhwb3J0IHZhciBqZW5raW5zSHR0cENvbmZpZyA9IHtcbiAgICBoZWFkZXJzOiB7XG4gICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC94LWpzb24sIHRleHQvcGxhaW5cIlxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSBoYXNuJ3QgY2hhbmdlZCBmcm9tIHRoZSBsYXN0IGNhY2hlZCBKU09OIHZlcnNpb24gb2YgdGhpcyBvYmplY3RcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBoYXNPYmplY3RDaGFuZ2VkKHZhbHVlLCBzdGF0ZSkge1xuICAgIHZhciBqc29uID0gYW5ndWxhci50b0pzb24odmFsdWUgfHwgXCJcIik7XG4gICAgdmFyIG9sZEpzb24gPSBzdGF0ZS5qc29uO1xuICAgIHN0YXRlLmpzb24gPSBqc29uO1xuICAgIHJldHVybiAhb2xkSnNvbiB8fCBqc29uICE9PSBvbGRKc29uO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHByb2plY3RGb3JTY29wZSgkc2NvcGUpIHtcbiAgICBpZiAoJHNjb3BlKSB7XG4gICAgICByZXR1cm4gJHNjb3BlLmJ1aWxkQ29uZmlnIHx8ICRzY29wZS5lbnRpdHkgfHwgKCRzY29wZS5tb2RlbCB8fCB7fSkucHJvamVjdDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIExldHMgbG9hZCB0aGUgcHJvamVjdCB2ZXJzaW9ucyBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZVxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGxvYWRQcm9qZWN0VmVyc2lvbnMoJHNjb3BlLCAkZWxlbWVudCwgcHJvamVjdCwgZW52LCBucywgYW5zd2VyLCBjYWNoZXMpIHtcbiAgICB2YXIgcHJvamVjdEFubm90YXRpb24gPSBcInByb2plY3RcIjtcbiAgICB2YXIgdmVyc2lvbkFubm90YXRpb24gPSBcInZlcnNpb25cIjtcblxuICAgIHZhciBwcm9qZWN0TmFtZXNwYWNlID0gcHJvamVjdC4kbmFtZXNwYWNlO1xuICAgIHZhciBwcm9qZWN0TmFtZSA9IHByb2plY3QuJG5hbWU7XG5cbiAgICB2YXIgY2FjaGUgPSBjYWNoZXNbbnNdO1xuICAgIGlmICghY2FjaGUpIHtcbiAgICAgIGNhY2hlID0ge307XG4gICAgICBjYWNoZXNbbnNdID0gY2FjaGU7XG4gICAgfVxuXG4gICAgdmFyIHN0YXR1cyA9IHtcbiAgICAgIHJjczogW10sXG4gICAgICBwb2RzOiBbXSxcbiAgICAgIHJvdXRlczogW10sXG4gICAgICBzZXJ2aWNlczogW11cbiAgICB9O1xuXG4gICAgdmFyIGltYWdlU3RyZWFtVGFncyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlTW9kZWwoKSB7XG4gICAgICB2YXIgcHJvamVjdEluZm9zID0ge307XG4gICAgICB2YXIgbW9kZWwgPSAkc2NvcGUubW9kZWwgfHwge307XG5cbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChzdGF0dXMucmNzLCAoaXRlbSkgPT4ge1xuICAgICAgICB2YXIgbWV0YWRhdGEgPSBpdGVtLm1ldGFkYXRhIHx8IHt9O1xuICAgICAgICB2YXIgbmFtZSA9IG1ldGFkYXRhLm5hbWU7XG4gICAgICAgIHZhciBsYWJlbHMgPSBtZXRhZGF0YS5sYWJlbHMgfHwge307XG4gICAgICAgIHZhciBhbm5vdGF0aW9ucyA9IG1ldGFkYXRhLmFubm90YXRpb25zIHx8IHt9O1xuICAgICAgICB2YXIgc3BlYyA9IGl0ZW0uc3BlYyB8fCB7fTtcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gc3BlYy5zZWxlY3RvcjtcblxuICAgICAgICB2YXIgcHJvamVjdCA9IGxhYmVsc1twcm9qZWN0QW5ub3RhdGlvbl07XG4gICAgICAgIHZhciB2ZXJzaW9uID0gbGFiZWxzW3ZlcnNpb25Bbm5vdGF0aW9uXTtcblxuICAgICAgICAvLyBsZXRzIHRyeSB0aGUgUzJJIGRlZmF1bHRzLi4uXG4gICAgICAgIGlmICghcHJvamVjdCkge1xuICAgICAgICAgIHByb2plY3QgPSBsYWJlbHNbXCJhcHBcIl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgICAgICAgdmVyc2lvbiA9IGFubm90YXRpb25zW1wib3BlbnNoaWZ0LmlvL2RlcGxveW1lbnQtY29uZmlnLmxhdGVzdC12ZXJzaW9uXCJdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2plY3QgJiYgdmVyc2lvbiAmJiBwcm9qZWN0ID09PSBwcm9qZWN0TmFtZSkge1xuICAgICAgICAgIHZhciBwcm9qZWN0cyA9IHByb2plY3RJbmZvc1twcm9qZWN0XTtcbiAgICAgICAgICBpZiAoIXByb2plY3RzKSB7XG4gICAgICAgICAgICBwcm9qZWN0cyA9IHtcbiAgICAgICAgICAgICAgcHJvamVjdDogcHJvamVjdCxcbiAgICAgICAgICAgICAgdmVyc2lvbnM6IHt9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcHJvamVjdEluZm9zW3Byb2plY3RdID0gcHJvamVjdHM7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciB2ZXJzaW9uSW5mbyA9IHByb2plY3RzLnZlcnNpb25zW3ZlcnNpb25dO1xuICAgICAgICAgIGlmICghdmVyc2lvbkluZm8pIHtcbiAgICAgICAgICAgIHZlcnNpb25JbmZvID0ge1xuICAgICAgICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXJzOiB7fVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHByb2plY3RzLnZlcnNpb25zW3ZlcnNpb25dID0gdmVyc2lvbkluZm87XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICB2ZXJzaW9uSW5mby5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzW25hbWVdID0gaXRlbTtcbiAgICAgICAgICAgIGl0ZW0uJG5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgaWYgKHByb2plY3ROYW1lc3BhY2UgJiYgcHJvamVjdE5hbWUpIHtcbiAgICAgICAgICAgICAgaXRlbS4kdmlld0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlcy9cIiwgcHJvamVjdE5hbWVzcGFjZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgXCJuYW1lc3BhY2VcIiwgbnMsIFwicmVwbGljYXRpb25Db250cm9sbGVyc1wiLCBuYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiTWlzc2luZyBwcm9qZWN0IGRhdGEhIFwiICsgcHJvamVjdE5hbWVzcGFjZSArIFwiIG5hbWUgXCIgKyBwcm9qZWN0TmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0ZW0uJHNlcnZpY2VzID0gW107XG4gICAgICAgICAgICB2YXIgcmNMaW5rID0gbnVsbDtcbiAgICAgICAgICAgIHN0YXR1cy5zZXJ2aWNlcy5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XG4gICAgICAgICAgICAgIHZhciByZXBTZWxlY3RvciA9IEt1YmVybmV0ZXMuZ2V0U2VsZWN0b3IoaXRlbSk7XG4gICAgICAgICAgICAgIHZhciBzZXJ2aWNlU2VsZWN0b3IgPSBLdWJlcm5ldGVzLmdldFNlbGVjdG9yKHNlcnZpY2UpO1xuICAgICAgICAgICAgICBpZiAoc2VydmljZVNlbGVjdG9yICYmIHJlcFNlbGVjdG9yICYmXG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5zZWxlY3Rvck1hdGNoZXMoc2VydmljZVNlbGVjdG9yLCByZXBTZWxlY3RvcikgJiZcbiAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLmdldE5hbWVzcGFjZShzZXJ2aWNlKSA9PT0gS3ViZXJuZXRlcy5nZXROYW1lc3BhY2UoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMucm91dGVzLmZvckVhY2goKHJvdXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICB2YXIgc2VydmljZU5hbWUgPSBLdWJlcm5ldGVzLmdldE5hbWUoc2VydmljZSk7XG4gICAgICAgICAgICAgICAgICBpZiAoc2VydmljZU5hbWUgPT09IEt1YmVybmV0ZXMuZ2V0TmFtZShyb3V0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZVtcIiRyb3V0ZVwiXSA9IHJvdXRlO1xuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlW1wiJGhvc3RcIl0gPSBDb3JlLnBhdGhHZXQocm91dGUsIFtcInNwZWNcIiwgXCJob3N0XCJdKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS4kc2VydmljZXMucHVzaChzZXJ2aWNlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyY0xpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5zZXJ2aWNlTGlua1VybChzZXJ2aWNlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIGZpbmQgaWNvbiBldGM/XG4gICAgICAgICAgICAgICAgICAgICAgICByY0xpbmsgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHNlcnZpY2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOiB1cmxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlbVtcIiRzZXJ2aWNlTGlua1wiXSA9IHJjTGluaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaXRlbS4kYnVpbGRJZCA9IGFubm90YXRpb25zW1wiZmFicmljOC5pby9idWlsZC1pZFwiXSB8fCBpdGVtLiRidWlsZElkO1xuICAgICAgICAgIGl0ZW0uJGJ1aWxkVXJsID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LmlvL2J1aWxkLXVybFwiXSB8fCBpdGVtLiRidWlsZFVybDtcbiAgICAgICAgICBpdGVtLiRnaXRDb21taXQgPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguaW8vZ2l0LWNvbW1pdFwiXSB8fCBpdGVtLiRnaXRDb21taXQ7XG4gICAgICAgICAgaXRlbS4kZ2l0VXJsID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LmlvL2dpdC11cmxcIl0gfHwgaXRlbS4kZ2l0VXJsO1xuICAgICAgICAgIGl0ZW0uJGdpdEJyYW5jaCA9IGFubm90YXRpb25zW1wiZmFicmljOC5pby9naXQtYnJhbmNoXCJdIHx8IGl0ZW0uJGdpdEJyYW5jaDtcbiAgICAgICAgICBpZiAoIWl0ZW0uJGdpdENvbW1pdCkge1xuICAgICAgICAgICAgdmFyIGltYWdlID0gZ2V0SW1hZ2UoaXRlbSk7XG4gICAgICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgICAgaWYgKCEkc2NvcGUuJGlzV2F0Y2hJbWFnZXMpIHtcbiAgICAgICAgICAgICAgICAkc2NvcGUuJGlzV2F0Y2hJbWFnZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMud2F0Y2goJHNjb3BlLCAkZWxlbWVudCwgXCJpbWFnZXNcIiwgbnVsbCwgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgIGltYWdlU3RyZWFtVGFncyA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICBjaGVja0Zvck1pc3NpbmdNZXRhZGF0YSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNoZWNrRm9yTWlzc2luZ01ldGFkYXRhKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0SW1hZ2UoaXRlbSkge1xuICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBcIlwiO1xuICAgICAgICAgICAgICAvLyBsZXRzIHNlZSBpZiB3ZSBjYW4gZmluZCB0aGUgY29tbWl0IGlkIGZyb20gYSBTMkkgaW1hZ2UgbmFtZVxuICAgICAgICAgICAgICAvLyBUT0RPIG5lZWRzIHRoaXMgaXNzdWUgZml4ZWQgdG8gZmluZCBpdCB2aWEgYW4gT3BlblNoaWZ0IGFubm90YXRpb246XG4gICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuc2hpZnQvb3JpZ2luL2lzc3Vlcy82MjQxXG4gICAgICAgICAgICAgIHZhciBjb250YWluZXJzID0gQ29yZS5wYXRoR2V0KGl0ZW0sIFtcInNwZWNcIiwgXCJ0ZW1wbGF0ZVwiLCBcInNwZWNcIiwgXCJjb250YWluZXJzXCJdKTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lcnMgJiYgY29udGFpbmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gY29udGFpbmVyc1swXTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICBpbWFnZSA9IGNvbnRhaW5lci5pbWFnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGltYWdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBjaGVja0Zvck1pc3NpbmdNZXRhZGF0YSgpIHtcbiAgICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHByb2plY3RzLnZlcnNpb25zLCAodmkpID0+IHtcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2godmkucmVwbGljYXRpb25Db250cm9sbGVycywgKGl0ZW0sIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICghaXRlbS4kZ2l0Q29tbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IGdldEltYWdlKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goaW1hZ2VTdHJlYW1UYWdzLCAoaW1hZ2VTdHJlYW1UYWcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZU5hbWUgPSBpbWFnZVN0cmVhbVRhZy5kb2NrZXJJbWFnZVJlZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZU5hbWUgJiYgaW1hZ2VOYW1lID09PSBpbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmRJU1RhZyA9IGltYWdlU3RyZWFtVGFnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFuaWZlc3RKU09OID0gaW1hZ2VTdHJlYW1UYWcuZG9ja2VySW1hZ2VNYW5pZmVzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hbmlmZXN0SlNPTikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYW5pZmVzdCA9IGFuZ3VsYXIuZnJvbUpzb24obWFuaWZlc3RKU09OKSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGlzdG9yeSA9IG1hbmlmZXN0Lmhpc3Rvcnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpc3RvcnkgJiYgaGlzdG9yeS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2MSA9IGhpc3RvcnlbMF0udjFDb21wYXRpYmlsaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gYW5ndWxhci5mcm9tSnNvbih2MSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnYgPSBDb3JlLnBhdGhHZXQoZGF0YSwgW1wiY29uZmlnXCIsIFwiRW52XCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGVudiwgKGVudkV4cCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnZFeHApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBlbnZFeHAuc3BsaXQoXCI9XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDIgJiYgdmFsdWVzWzBdID09IFwiT1BFTlNISUZUX0JVSUxEX05BTUVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVpbGROYW1lID0gdmFsdWVzWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVpbGROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS4kYnVpbGRJZCA9IGJ1aWxkTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRidWlsZFVybCA9IERldmVsb3Blci5wcm9qZWN0V29ya3NwYWNlTGluayhucywgcHJvamVjdE5hbWUsIFwiYnVpbGRMb2dzL1wiICsgYnVpbGROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYWJlbHMgPSBDb3JlLnBhdGhHZXQoZGF0YSwgW1wiY29uZmlnXCIsIFwiTGFiZWxzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhYmVscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uJGdpdENvbW1pdCA9IGxhYmVsc1tcImlvLm9wZW5zaGlmdC5idWlsZC5jb21taXQuaWRcIl0gfHwgaXRlbS4kZ2l0Q29tbWl0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uJGdpdENvbW1pdEF1dGhvciA9IGxhYmVsc1tcImlvLm9wZW5zaGlmdC5idWlsZC5jb21taXQuYXV0aG9yXCJdIHx8IGl0ZW0uJGdpdENvbW1pdEF1dGhvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRnaXRDb21taXREYXRlID0gbGFiZWxzW1wiaW8ub3BlbnNoaWZ0LmJ1aWxkLmNvbW1pdC5kYXRlXCJdIHx8IGl0ZW0uJGdpdENvbW1pdERhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS4kZ2l0Q29tbWl0TWVzc2FnZSA9IGxhYmVsc1tcImlvLm9wZW5zaGlmdC5idWlsZC5jb21taXQubWVzc2FnZVwiXSB8fCBpdGVtLiRnaXRDb21taXRNZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uJGdpdEJyYW5jaCA9IGxhYmVsc1tcImlvLm9wZW5zaGlmdC5idWlsZC5jb21taXQucmVmXCJdIHx8IGl0ZW0uJGdpdEJyYW5jaDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbS4kZ2l0VXJsICYmIGl0ZW0uJGdpdENvbW1pdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS4kZ2l0VXJsID0gRGV2ZWxvcGVyLnByb2plY3RXb3Jrc3BhY2VMaW5rKG5zLCBwcm9qZWN0TmFtZSwgXCJ3aWtpL2NvbW1pdERldGFpbC8vL1wiICsgaXRlbS4kZ2l0Q29tbWl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgICAgIHZhciBzZWxlY3RvclRleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKHNlbGVjdG9yLCBcIixcIik7XG4gICAgICAgICAgICB2YXIgcG9kTGlua1VybCA9IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluayhwcm9qZWN0TmFtZSksIFwibmFtZXNwYWNlXCIsIG5zLCBcInBvZHNcIik7XG4gICAgICAgICAgICBpdGVtLnBvZHMgPSBbXTtcbiAgICAgICAgICAgIGl0ZW0uJHBvZENvdW50ZXJzID0gS3ViZXJuZXRlcy5jcmVhdGVQb2RDb3VudGVycyhzZWxlY3Rvciwgc3RhdHVzLnBvZHMsIGl0ZW0ucG9kcywgc2VsZWN0b3JUZXh0LCBwb2RMaW5rVXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBsZXRzIGNoZWNrIGZvciBhIHByb2plY3QgbmFtZSBpZiB3ZSBoYXZlIGxvdHMgb2YgUkNzIHdpdGggbm8gcG9kcywgbGV0cyByZW1vdmUgdGhlbSFcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChwcm9qZWN0SW5mb3MsIChwcm9qZWN0LCBwcm9qZWN0TmFtZSkgPT4ge1xuICAgICAgICB2YXIgcmNzTm9Qb2RzID0gW107XG4gICAgICAgIHZhciByY3NXaXRoUG9kcyA9IFtdO1xuICAgICAgICBhbmd1bGFyLmZvckVhY2gocHJvamVjdC52ZXJzaW9ucywgKHZlcnNpb25JbmZvKSA9PiB7XG4gICAgICAgICAgdmFyIHJjcyA9IHZlcnNpb25JbmZvLnJlcGxpY2F0aW9uQ29udHJvbGxlcnM7XG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHJjcywgKGl0ZW0sIG5hbWUpID0+IHtcbiAgICAgICAgICAgIHZhciBjb3VudCA9IEt1YmVybmV0ZXMucG9kQ291bnRlclRvdGFsKGl0ZW0uJHBvZENvdW50ZXJzKTtcbiAgICAgICAgICAgIGlmIChjb3VudCkge1xuICAgICAgICAgICAgICByY3NXaXRoUG9kcy5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmNzTm9Qb2RzLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSByY3NbbmFtZV07XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJjc1dpdGhQb2RzLmxlbmd0aCkge1xuICAgICAgICAgIC8vIGxldHMgcmVtb3ZlIGFsbCB0aGUgZW1wdHkgUkNzXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHJjc05vUG9kcywgKGZuKSA9PiB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGhhc09iamVjdENoYW5nZWQocHJvamVjdEluZm9zLCBjYWNoZSkpIHtcbiAgICAgICAgbG9nLmRlYnVnKFwicHJvamVjdCB2ZXJzaW9ucyBoYXMgY2hhbmdlZCFcIik7XG4gICAgICAgIGFuc3dlcltuc10gPSBwcm9qZWN0SW5mb3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgS3ViZXJuZXRlcy53YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcInJlcGxpY2F0aW9uY29udHJvbGxlcnNcIiwgbnMsIChkYXRhKSA9PiB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBzdGF0dXMucmNzID0gZGF0YTtcbiAgICAgICAgdXBkYXRlTW9kZWwoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBLdWJlcm5ldGVzLndhdGNoKCRzY29wZSwgJGVsZW1lbnQsIFwic2VydmljZXNcIiwgbnMsIChkYXRhKSA9PiB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBzdGF0dXMuc2VydmljZXMgPSBkYXRhO1xuICAgICAgICB1cGRhdGVNb2RlbCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIEt1YmVybmV0ZXMud2F0Y2goJHNjb3BlLCAkZWxlbWVudCwgXCJyb3V0ZXNcIiwgbnMsIChkYXRhKSA9PiB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBzdGF0dXMucm91dGVzID0gZGF0YTtcbiAgICAgICAgdXBkYXRlTW9kZWwoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBLdWJlcm5ldGVzLndhdGNoKCRzY29wZSwgJGVsZW1lbnQsIFwicG9kc1wiLCBucywgKGRhdGEpID0+IHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHN0YXR1cy5wb2RzID0gZGF0YTtcbiAgICAgICAgdXBkYXRlTW9kZWwoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG5tb2R1bGUgRGV2ZWxvcGVyIHtcblxuLypcbiAgZnVuY3Rpb24gaG9tZUJyZWFkY3J1bWIoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhyZWY6IFwiL2hvbWVcIixcbiAgICAgIGxhYmVsOiBcIkhvbWVcIixcbiAgICAgIHRpdGxlOiBcIkdvIHRvIHRoZSBob21lIHBhZ2VcIlxuICAgIH1cbiAgfVxuKi9cbiAgZnVuY3Rpb24gZGV2ZWxvcEJyZWFkY3J1bWIoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIpLFxuICAgICAgbGFiZWw6IFwiRGV2ZWxvcFwiLFxuICAgICAgdGl0bGU6IFwiVmlldyBhbGwgdGhlIGFwcHMgZm9yIGEgcHJvamVjdFwiXG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBvcGVyYXRlQnJlYWRjcnVtYigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL25hbWVzcGFjZXNcIiksXG4gICAgICBsYWJlbDogXCJNYW5hZ2VcIixcbiAgICAgIHRpdGxlOiBcIk1hbmFnZSB0aGUgcHJvamVjdHMgYW5kIHJlc291cmNlcyBpbnNpZGUgdGhlbVwiXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiB3b3Jrc3BhY2VMaW5rKCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCkpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHByb2plY3RMaW5rKHByb2plY3RJZCkge1xuICAgIHZhciBsaW5rID0gd29ya3NwYWNlTGluaygpO1xuICAgIGlmIChwcm9qZWN0SWQpIHtcbiAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4obGluaywgXCIvcHJvamVjdHNcIiwgcHJvamVjdElkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxpbms7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZXNCcmVhZGNydW1icyhkZXZlbG9wUGVyc3BlY3RpdmUpIHtcbi8qXG4gICAgaWYgKGRldmVsb3BQZXJzcGVjdGl2ZSkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLy9ob21lQnJlYWRjcnVtYigpLFxuICAgICAgICBkZXZlbG9wQnJlYWRjcnVtYigpXG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICAvL2hvbWVCcmVhZGNydW1iKCksXG4gICAgICAgIG9wZXJhdGVCcmVhZGNydW1iKClcbiAgICAgIF07XG4gICAgfVxuKi9cbiAgICByZXR1cm4gW107XG4gIH1cblxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3Jrc3BhY2VzU3ViTmF2QmFycyhkZXZlbG9wUGVyc3BlY3RpdmUpIHtcbiAgICAgIHJldHVybiBhY3RpdmF0ZUN1cnJlbnQoW1xuICAgICAgICBkZXZlbG9wQnJlYWRjcnVtYigpLFxuICAgICAgICBvcGVyYXRlQnJlYWRjcnVtYigpXG4gICAgICBdKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3Jrc3BhY2VCcmVhZGNydW1icyhjaGlsZHJlbiA9IG51bGwsIHdvcmtzcGFjZU5hbWUgPSBudWxsKSB7XG4gICAgdmFyIGFuc3dlciA9IFtcbiAgICAgIC8vaG9tZUJyZWFkY3J1bWIoKSxcbiAgICAgIGRldmVsb3BCcmVhZGNydW1iKClcbiAgICBdO1xuICAgIGlmICghd29ya3NwYWNlTmFtZSkge1xuICAgICAgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICB9XG4gICAgaWYgKHdvcmtzcGFjZU5hbWUpIHtcbiAgICAgIGFuc3dlci5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXMvXCIsIHdvcmtzcGFjZU5hbWUpLFxuICAgICAgICAgIGxhYmVsOiB3b3Jrc3BhY2VOYW1lLFxuICAgICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHByb2plY3Q6IFwiICsgd29ya3NwYWNlTmFtZVxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgcmV0dXJuIHByb2Nlc3NDaGlsZHJlbihhbnN3ZXIsIGNoaWxkcmVuKTtcbiAgICB9XG4gICAgcmV0dXJuIGFuc3dlcjtcbiAgfVxuXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudmlyb25tZW50QnJlYWRjcnVtYnMoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcykge1xuICAgIHZhciBucyA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICB2YXIgbmFtZXNwYWNlc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIva3ViZXJuZXRlcy9uYW1lc3BhY2VcIik7XG4gICAgdmFyIHdvcmtzcGFjZU5hbWUgPSAkcm91dGVQYXJhbXMud29ya3NwYWNlO1xuICAgIHZhciBwcm9qZWN0ID0gJHJvdXRlUGFyYW1zLnByb2plY3Q7XG4gICAgaWYgKHdvcmtzcGFjZU5hbWUgJiYgcHJvamVjdCkge1xuICAgICAgdmFyIHByb2plY3RMaW5rID0gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0KTtcbiAgICAgICRzY29wZS4kcHJvamVjdExpbmsgPSBwcm9qZWN0TGluaztcbiAgICAgICRzY29wZS4kcHJvamVjdE5hbWVzcGFjZUxpbmsgPSBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwibmFtZXNwYWNlXCIsIG5zKTtcbiAgICAgIG5hbWVzcGFjZXNMaW5rID0gVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcIm5hbWVzcGFjZVwiKTtcbiAgICAgIC8vIFRPRE8gdXNlIHRoZSBsb2dpY2FsIG5hbWU/XG4gICAgICB2YXIgZW52TmFtZSA9IG5zO1xuICAgICAgdmFyIGJ1aWxkQ29uZmlnID0gbnVsbDtcbiAgICAgIGlmICgkc2NvcGUubW9kZWwpIHtcbiAgICAgICAgYnVpbGRDb25maWcgPSAkc2NvcGUubW9kZWwuZ2V0UHJvamVjdChwcm9qZWN0LCB3b3Jrc3BhY2VOYW1lKTtcbiAgICAgICAgaWYgKGJ1aWxkQ29uZmlnKSB7XG4gICAgICAgICAgLy8gbGV0cyBmaW5kIHRoZSBsYWJlbCBmb3IgdGhlIG5hbWVzcGFjZVxuICAgICAgICAgIHZhciBlbnYgPSBfLmZpbmQoYnVpbGRDb25maWcuZW52aXJvbm1lbnRzLCB7IG5hbWVzcGFjZTogbnN9KTtcbiAgICAgICAgICBpZiAoZW52KSB7XG4gICAgICAgICAgICBlbnZOYW1lID0gZW52WydsYWJlbCddIHx8IGVudk5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5pbmZvKFwiZW52IGZvdW5kOiBcIiArIGVudiArIFwiIGZvciBuYW1lcHBhY2UgXCIgKyBucyArIFwiIG9uIGJ1aWxkQ29uZmlnOiBcIiArIGJ1aWxkQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGNoaWxkcmVuID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJlbnZpcm9ubWVudHNcIiksXG4gICAgICAgICAgICBsYWJlbDogXCJFbnZpcm9ubWVudHNcIixcbiAgICAgICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGVudmlyb25tZW50cyBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihuYW1lc3BhY2VzTGluaywgbnMsIFwiYXBwc1wiKSxcbiAgICAgICAgICAgIGxhYmVsOiBlbnZOYW1lLFxuICAgICAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcnVudGltZSBvZiB0aGUgd29ya3NwYWNlOiBcIiArIG5zXG4gICAgICAgICAgfVxuICAgICAgICAgIF07XG4gICAgICByZXR1cm4gY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKHByb2plY3QsIGNoaWxkcmVuLCB3b3Jrc3BhY2VOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF3b3Jrc3BhY2VOYW1lKSB7XG4gICAgICAgIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWN0aXZhdGVDdXJyZW50KFtcbiAgICAgICAgLy9ob21lQnJlYWRjcnVtYigpLFxuICAgICAgICBvcGVyYXRlQnJlYWRjcnVtYigpLFxuICAgICAgICB7XG4gICAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKG5hbWVzcGFjZXNMaW5rLCBucywgXCJhcHBzXCIpLFxuICAgICAgICAgIGxhYmVsOiB3b3Jrc3BhY2VOYW1lLFxuICAgICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHJ1bnRpbWUgb2YgdGhlIHdvcmtzcGFjZTogXCIgKyBuc1xuICAgICAgICB9XG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKHByb2plY3ROYW1lID0gbnVsbCwgY2hpbGRyZW4gPSBudWxsLCB3b3Jrc3BhY2VOYW1lID0gbnVsbCkge1xuICAgIGlmICghd29ya3NwYWNlTmFtZSkge1xuICAgICAgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICB9XG4gICAgdmFyIGFuc3dlciA9IGNyZWF0ZVdvcmtzcGFjZUJyZWFkY3J1bWJzKG51bGwsIHdvcmtzcGFjZU5hbWUpO1xuICAgIGlmICh3b3Jrc3BhY2VOYW1lKSB7XG4gICAgICBpZiAocHJvamVjdE5hbWUpIHtcbiAgICAgICAgYW5zd2VyLnB1c2goXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiKSxcbiAgICAgICAgICAgIGxhYmVsOiBcIkFwcHNcIixcbiAgICAgICAgICAgIHRpdGxlOiBcIlZpZXcgYWxsIHRoZSBhcHBzIGluIHRoaXMgcHJvamVjdFwiXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGFuc3dlci5wdXNoKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUpLFxuICAgICAgICAgICAgbGFiZWw6IHByb2plY3ROYW1lLFxuICAgICAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcHJvamVjdDogXCIgKyBwcm9qZWN0TmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9jZXNzQ2hpbGRyZW4oYW5zd2VyLCBjaGlsZHJlbik7XG4gICAgfVxuICAgIHJldHVybiBhbnN3ZXI7XG4gIH1cblxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9qZWN0U2V0dGluZ3NCcmVhZGNydW1icyhwcm9qZWN0TmFtZSwgd29ya3NwYWNlTmFtZSA9IG51bGwpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBbe1xuICAgICAgbGFiZWw6IFwiU2V0dGluZ3NcIixcbiAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHNldHRpbmdzIG9mIHRoaXMgYXBwXCJcbiAgICB9XTtcbiAgICBpZiAoIXByb2plY3ROYW1lKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBbe1xuICAgICAgICBsYWJlbDogXCJOZXcgQXBwXCIsXG4gICAgICAgIHRpdGxlOiBcIkxldHMgbWFrZSBhIG5ldyBhcHBcIlxuICAgICAgfV07XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMocHJvamVjdE5hbWUsIGNoaWxkcmVuLCB3b3Jrc3BhY2VOYW1lKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3Jrc3BhY2VTdWJOYXZCYXJzKCkge1xuICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgIHJldHVybiBhY3RpdmF0ZUN1cnJlbnQoW1xuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lKSxcbiAgICAgICAgbGFiZWw6IFwiQXBwc1wiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1yb2NrZXRcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgYXBwcyBpbiB0aGlzIHByb2plY3RcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaXNWYWxpZDogKCkgPT4gamVua2luc0xpbmsoKSxcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJqZW5raW5zSm9iXCIpLFxuICAgICAgICBsYWJlbDogXCJCdWlsZHNcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtY29kZVwiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBidWlsZHMgaW4gdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi9rdWJlcm5ldGVzL25hbWVzcGFjZVwiLCB3b3Jrc3BhY2VOYW1lLCBcImFwcHNcIiksXG4gICAgICAgIGxhYmVsOiBcIlJ1bnRpbWVcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtZ2VhcnNcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcnVudGltZSByZXNvdXJjZXMgaW4gdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwiZGV0YWlsXCIpLFxuICAgICAgICBsYWJlbDogXCJEZXRhaWxzXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWdlYXJcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcHJvamVjdCBkZXRhaWxzXCJcbiAgICAgIH1cbiAgICBdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUJ1aWxkc0xpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIGplbmtpbnNKb2JJZCkge1xuICAgIHdvcmtzcGFjZU5hbWUgPSB3b3Jrc3BhY2VOYW1lIHx8IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgXCJqZW5raW5zSm9iXCIsIGplbmtpbnNKb2JJZCk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMocHJvamVjdE5hbWUsIGplbmtpbnNKb2JJZCA9IG51bGwsICRzY29wZSA9IG51bGwpIHtcbiAgICB2YXIgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICB2YXIgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lKTtcbiAgICB2YXIgYnVpbGRzTGluayA9IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJidWlsZHNcIik7XG4gICAgaWYgKCFqZW5raW5zSm9iSWQpIHtcbiAgICAgIGplbmtpbnNKb2JJZCA9IHByb2plY3ROYW1lO1xuICAgIH1cbiAgICB2YXIgamVua2luc0J1aWxkTGluayA9IG51bGw7XG4gICAgdmFyIHBpcGVsaW5lc0xpbmsgPSBudWxsO1xuICAgIGlmIChwcm9qZWN0TmFtZSAmJiBqZW5raW5zSm9iSWQpIHtcbiAgICAgIGplbmtpbnNCdWlsZExpbmsgPSBjcmVhdGVCdWlsZHNMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lLCBqZW5raW5zSm9iSWQpO1xuICAgICAgcGlwZWxpbmVzTGluayA9IFVybEhlbHBlcnMuam9pbihqZW5raW5zQnVpbGRMaW5rLCBcInBpcGVsaW5lc1wiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0plbmtpbnNCdWlsZCgpIHtcbiAgICAgIHZhciBhbnN3ZXIgPSBqZW5raW5zTGluaygpICYmIGplbmtpbnNCdWlsZExpbms7XG4gICAgICBpZiAoYW5zd2VyICYmICRzY29wZSkge1xuICAgICAgICB2YXIgZW50aXR5ID0gRGV2ZWxvcGVyLnByb2plY3RGb3JTY29wZSgkc2NvcGUpO1xuICAgICAgICBpZiAoZW50aXR5KSB7XG4gICAgICAgICAgcmV0dXJuIGFuc3dlciAmJiBlbnRpdHkuJGplbmtpbnNKb2I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhbnN3ZXI7XG4gICAgfVxuXG4gICAgdmFyIGFuc3dlciA9IFtcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSksXG4gICAgICAgIGxhYmVsOiBcIkFsbCBBcHBzXCIsXG4gICAgICAgIGNsYXNzOiAnZmEgZmEtYW5nbGUtZG91YmxlLWxlZnQnLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBhcHBzIGluIHRoaXMgcHJvamVjdFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0ZW1wbGF0ZTogYDxkaXYgbmctaW5jbHVkZT1cIidwbHVnaW5zL2RldmVsb3Blci9odG1sL3Byb2plY3RTZWxlY3Rvci5odG1sJ1wiPjwvZGl2PmBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUsIFwiZW52aXJvbm1lbnRzXCIpLFxuICAgICAgICBpc0FjdGl2ZTogKHN1YlRhYiwgcGF0aCkgPT4ge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJzdWJUYWI6IFwiLCBzdWJUYWIsIFwiIHBhdGg6IFwiLCBwYXRoKTtcbiAgICAgICAgICBpZiAocGF0aCA9PT0gc3ViVGFiLmhyZWYpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgcm9vdFBhdGggPSBzdWJUYWIuaHJlZi5yZXBsYWNlKC9cXC9lbnZpcm9ubWVudHMvLCAnJyk7XG4gICAgICAgICAgaWYgKHBhdGggPT09IHJvb3RQYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICAvL2hyZWY6IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUpLFxuICAgICAgICBsYWJlbDogXCJEYXNoYm9hcmRcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtdGFjaG9tZXRlclwiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBhcHAgZGFzaGJvYXJkIGZvciB0aGUgYWN0aXZpdHksIGVudmlyb25tZW50cyBhbmQgcGlwZWxpbmVzXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlzVmFsaWQ6ICgpID0+IGlzSmVua2luc0J1aWxkKCkgJiYgcGlwZWxpbmVzTGluayxcbiAgICAgICAgaWQ6IFwicGlwZWxpbmVzXCIsXG4gICAgICAgIGhyZWY6IHBpcGVsaW5lc0xpbmssXG4gICAgICAgIGxhYmVsOiBcIlBpcGVsaW5lc1wiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1lbGxpcHNpcy1oXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHBpcGVsaW5lIGJ1aWxkcyBmb3IgdGhpcyBhcHBcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaXNWYWxpZDogKCkgPT4gIWlzSmVua2luc0J1aWxkKCksXG4gICAgICAgIGhyZWY6IGJ1aWxkc0xpbmssXG4gICAgICAgIGxhYmVsOiBcIkJ1aWxkc1wiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1iYXJzXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGJ1aWxkcyBmb3IgdGhpcyBhcHBcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaXNWYWxpZDogKCkgPT4gaXNKZW5raW5zQnVpbGQoKSxcbiAgICAgICAgaWQ6IFwiYnVpbGRzXCIsXG4gICAgICAgIGhyZWY6IGplbmtpbnNCdWlsZExpbmssXG4gICAgICAgIGxhYmVsOiBcIkJ1aWxkc1wiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1iYXJzXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIEplbmtpbnMgYnVpbGRzIGZvciB0aGlzIGFwcFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpc1ZhbGlkOiAoKSA9PiBpc0plbmtpbnNCdWlsZCgpLFxuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcImplbmtpbnNKb2JcIiwgamVua2luc0pvYklkLCBcIm1ldHJpY3NcIiksXG4gICAgICAgIGxhYmVsOiBcIk1ldHJpY3NcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtYmFyLWNoYXJ0XCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIG1ldHJpY3MgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9LFxuLypcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgXCJ0b29sc1wiKSxcbiAgICAgICAgbGFiZWw6IFwiVG9vbHNcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgdG9vbHMgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9LFxuKi9cbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgXCJidWlsZENvbmZpZ0VkaXRcIiksXG4gICAgICAgIGxhYmVsOiBcIlNldHRpbmdzXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWNvZ1wiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBhcHAgY29uZmlndXJhdGlvblwiLFxuICAgICAgICBpc0FjdGl2ZTogKHN1YlRhYiwgcGF0aCkgPT4ge1xuICAgICAgICAgIGlmIChfLmVuZHNXaXRoKHBhdGgsICcvYnVpbGRDb25maWdFZGl0JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXy5lbmRzV2l0aChwYXRoLCAnL2ZvcmdlL3NlY3JldHMnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChfLmVuZHNXaXRoKHBhdGgsICcvZm9yZ2UvY29tbWFuZC9kZXZvcHMtZWRpdCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXTtcblxuICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgd29ya3NwYWNlTmFtZTogd29ya3NwYWNlTmFtZSxcbiAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0TmFtZSxcbiAgICAgIHByb2plY3RMaW5rOiBwcm9qZWN0TGluayxcbiAgICAgIGplbmtpbnNKb2JJZDogamVua2luc0pvYklkLFxuICAgICAgJHNjb3BlOiAkc2NvcGVcbiAgICB9O1xuICAgIGFuZ3VsYXIuZm9yRWFjaChjdXN0b21Qcm9qZWN0U3ViVGFiRmFjdG9yaWVzLCAoZm4pID0+IHtcbiAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24oZm4pKSB7XG4gICAgICAgIHZhciBzdWJ0YWIgPSBmbihjb250ZXh0KTtcbiAgICAgICAgaWYgKHN1YnRhYikge1xuICAgICAgICAgIGlmIChhbmd1bGFyLmlzQXJyYXkoc3VidGFiKSkge1xuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHN1YnRhYiwgKHQpID0+IHtcbiAgICAgICAgICAgICAgYW5zd2VyLnB1c2godCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5zd2VyLnB1c2goc3VidGFiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhY3RpdmF0ZUN1cnJlbnQoYW5zd2VyKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9qZWN0U2V0dGluZ3NTdWJOYXZCYXJzKHByb2plY3ROYW1lLCBqZW5raW5zSm9iSWQgPSBudWxsKSB7XG4gICAgaWYgKCFwcm9qZWN0TmFtZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICB2YXIgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICB2YXIgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lKTtcbiAgICBpZiAoIWplbmtpbnNKb2JJZCkge1xuICAgICAgamVua2luc0pvYklkID0gcHJvamVjdE5hbWU7XG4gICAgfVxuICAgIHZhciBhbnN3ZXIgPSBbXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUsIFwiYnVpbGRDb25maWdFZGl0XCIpLFxuICAgICAgICBsYWJlbDogXCJDb3JlXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGNvcmUgYnVpbGQgY29uZmlndXJhdGlvblwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBocmVmOiBwcm9qZWN0U2VjcmV0c0xpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUpLFxuICAgICAgICBsYWJlbDogXCJTZWNyZXRzXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgb3IgY2hhbmdlIHRoZSBzZWNyZXRzIHVzZWQgdG8gZWRpdCBzb3VyY2UgY29kZSBpbiB0aGUgc291cmNlIGNvbnRyb2wgc3lzdGVtXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhyZWY6IGVkaXRQaXBlbGluZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUpLFxuICAgICAgICBsYWJlbDogXCJQaXBlbGluZVwiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBEZXZPcHMgYW5kIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb25cIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaXNWYWxpZDogKCkgPT4gZm9yZ2VQcm9qZWN0SGFzQnVpbGRlcihcIm1hdmVuXCIpLFxuICAgICAgICBocmVmOiBlZGl0TWF2ZW5CdWlsZExpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUpLFxuICAgICAgICBsYWJlbDogXCJNYXZlblwiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBNYXZlbiBidWlsZCBjb25maWd1cmF0aW9uXCJcbiAgICAgIH1cbiAgICBdO1xuICAgIHJldHVybiBhY3RpdmF0ZUN1cnJlbnQoYW5zd2VyKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBmb3JnZVByb2plY3RIYXNCdWlsZGVyKG5hbWUpIHtcbiAgICB2YXIgZm9yZ2VQcm9qZWN0ID0gS3ViZXJuZXRlcy5pbmplY3Q8YW55PihcIkZvcmdlUHJvamVjdFwiKTtcbiAgICBpZiAoZm9yZ2VQcm9qZWN0KSB7XG4gICAgICByZXR1cm4gZm9yZ2VQcm9qZWN0Lmhhc0J1aWxkZXIobmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBmb3JnZVByb2plY3RIYXNQZXJzcGVjdGl2ZShuYW1lKSB7XG4gICAgdmFyIGZvcmdlUHJvamVjdCA9IEt1YmVybmV0ZXMuaW5qZWN0PGFueT4oXCJGb3JnZVByb2plY3RcIik7XG4gICAgaWYgKGZvcmdlUHJvamVjdCkge1xuICAgICAgcmV0dXJuIGZvcmdlUHJvamVjdC5oYXNQZXJzcGVjdGl2ZShuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVkaXRQaXBlbGluZUxpbmtTY29wZSgkc2NvcGUpIHtcbiAgICByZXR1cm4gZWRpdFBpcGVsaW5lTGluaygkc2NvcGUubmFtZXNwYWNlLCAkc2NvcGUucHJvamVjdElkIHx8ICRzY29wZS5wcm9qZWN0TmFtZSB8fCAkc2NvcGUucHJvamVjdCk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvamVjdExpbmsod29ya3NwYWNlTmFtZSA9IG51bGwpIHtcbiAgICBpZiAoIXdvcmtzcGFjZU5hbWUpIHtcbiAgICAgIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcIi9mb3JnZS9jcmVhdGVQcm9qZWN0XCIpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVkaXRQaXBlbGluZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUpIHtcbiAgICByZXR1cm4gcHJvamVjdFdvcmtzcGFjZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIFwiZm9yZ2UvY29tbWFuZC9kZXZvcHMtZWRpdFwiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlZGl0TWF2ZW5CdWlsZExpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUpIHtcbiAgICByZXR1cm4gcHJvamVjdFdvcmtzcGFjZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIFwiZm9yZ2UvY29tbWFuZC9mYWJyaWM4LXNldHVwXCIpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHByb2plY3RTZWNyZXRzTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSkge1xuICAgIHJldHVybiBwcm9qZWN0V29ya3NwYWNlTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgXCJmb3JnZS9zZWNyZXRzXCIsIGZhbHNlKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBzZWNyZXRzTmFtZXNwYWNlTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgc2VjcmV0c05hbWVzcGFjZSkge1xuICAgIHZhciBwcmVmaXggPSBwcm9qZWN0V29ya3NwYWNlTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgXCJcIikgfHwgXCJrdWJlcm5ldGVzXCI7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihwcmVmaXgsIFwibmFtZXNwYWNlXCIsIHNlY3JldHNOYW1lc3BhY2UsIFwic2VjcmV0c1wiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0V29ya3NwYWNlTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgcGF0aCwgaWdub3JlQmxhbmtQcm9qZWN0ID0gdHJ1ZSkge1xuICAgIGlmIChpZ25vcmVCbGFua1Byb2plY3QgJiYgIXByb2plY3ROYW1lKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgaWYgKCF3b3Jrc3BhY2VOYW1lKSB7XG4gICAgICB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgIH1cbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgcGF0aCk7XG4gIH1cblxuICBleHBvcnQgdmFyIGN1c3RvbVByb2plY3RTdWJUYWJGYWN0b3JpZXMgPSBbXTtcblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlSmVua2luc0JyZWFkY3J1bWJzKHByb2plY3ROYW1lLCBqb2JJZCwgYnVpbGRJZCkge1xuICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgIHZhciBjaGlsZHJlbiA9IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwiYnVpbGRzXCIsXG4gICAgICAgIGhyZWY6IGNyZWF0ZUJ1aWxkc0xpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIGpvYklkKSxcbiAgICAgICAgbGFiZWw6IFwiQnVpbGRzXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGJ1aWxkcyBmb3IgdGhpcyBhcHBcIlxuICAgICAgfVxuICAgIF07XG4gICAgaWYgKGJ1aWxkSWQpIHtcbiAgICAgIGNoaWxkcmVuLnB1c2goe1xuICAgICAgICBpZDogXCJcIixcbiAgICAgICAgaHJlZjogXCJcIixcbiAgICAgICAgbGFiZWw6IFwiI1wiICsgYnVpbGRJZCxcbiAgICAgICAgdGl0bGU6IFwiQnVpbGQgI1wiICsgYnVpbGRJZFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMocHJvamVjdE5hbWUsIGNoaWxkcmVuKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVKZW5raW5zU3ViTmF2QmFycyhwcm9qZWN0TmFtZSwgamVua2luc0pvYklkLCBidWlsZElkLCBleHRyYU9wdGlvbjogYW55ID0gbnVsbCkge1xuICAgIHZhciBhbnN3ZXIgPSBjcmVhdGVQcm9qZWN0U3ViTmF2QmFycyhwcm9qZWN0TmFtZSwgamVua2luc0pvYklkKTtcbiAgICBpZiAoZXh0cmFPcHRpb24pIHtcbiAgICAgIGV4dHJhT3B0aW9uLmFjdGl2ZSA9IHRydWU7XG4gICAgICBhbnN3ZXIucHVzaChleHRyYU9wdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBhbnN3ZXI7XG4gIH1cblxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnZpcm9ubWVudFN1Yk5hdkJhcnMoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcykge1xuICAgIHZhciBucyA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICB2YXIgd29ya3NwYWNlTmFtZSA9ICRyb3V0ZVBhcmFtcy53b3Jrc3BhY2U7XG4gICAgdmFyIHByb2plY3QgPSAkcm91dGVQYXJhbXMucHJvamVjdDtcbiAgICB2YXIgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIva3ViZXJuZXRlc1wiKTtcbiAgICBpZiAod29ya3NwYWNlTmFtZSAmJiBwcm9qZWN0KSB7XG4gICAgICBwcm9qZWN0TGluayA9IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdCk7XG4gICAgfVxuICAgIHZhciBuYW1lc3BhY2VzTGluayA9IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJuYW1lc3BhY2VcIik7XG4gICAgcmV0dXJuIGFjdGl2YXRlQ3VycmVudChbXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJlbnZpcm9ubWVudHNcIiksXG4gICAgICAgIGxhYmVsOiBcIjw8IEJhY2sgVG8gQXBwXCIsXG4gICAgICAgIHRpdGxlOiBcIkdvIGJhY2sgdG8gdGhlIERhc2hib2FyZCBmb3IgdGhpcyBBcHBcIixcbiAgICAgICAgaXNWYWxpZDogKCkgPT4gcHJvamVjdFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKG5hbWVzcGFjZXNMaW5rLCBucywgXCJhcHBzXCIpLFxuICAgICAgICBsYWJlbDogXCJPdmVydmlld1wiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1saXN0XCIsXG4gICAgICAgIHRpdGxlOiBcIk92ZXJ2aWV3IG9mIGFsbCB0aGUgYXBwcyBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihuYW1lc3BhY2VzTGluaywgbnMsIFwic2VydmljZXNcIiksXG4gICAgICAgIGxhYmVsOiBcIlNlcnZpY2VzXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLXBsdWdcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgYXBwcyBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihuYW1lc3BhY2VzTGluaywgbnMsIFwicmVwbGljYXRpb25Db250cm9sbGVyc1wiKSxcbiAgICAgICAgbGFiZWw6IFwiQ29udHJvbGxlcnNcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtY2xvbmVcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgUmVwbGljYXRpb24gQ29udHJvbGxlcnMgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4obmFtZXNwYWNlc0xpbmssIG5zLCBcInBvZHNcIiksXG4gICAgICAgIGxhYmVsOiBcIlBvZHNcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtcHV6emxlLXBpZWNlXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHBvZHMgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4obmFtZXNwYWNlc0xpbmssIG5zLCBcImV2ZW50c1wiKSxcbiAgICAgICAgbGFiZWw6IFwiRXZlbnRzXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLW5ld3NwYXBlci1vXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGV2ZW50cyBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihuYW1lc3BhY2VzTGluaywgbnMsIFwic2VjcmV0c1wiKSxcbiAgICAgICAgbGFiZWw6IFwiU2VjcmV0c1wiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1rZXlcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgc2VjcmV0cyBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi9rdWJlcm5ldGVzL2hvc3RzXCIpLFxuICAgICAgICBsYWJlbDogXCJOb2Rlc1wiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1zZXJ2ZXJcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgbm9kZXMgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4obmFtZXNwYWNlc0xpbmssIG5zLCBcIm92ZXJ2aWV3XCIpLFxuICAgICAgICBsYWJlbDogXCJEaWFncmFtXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLXNpdGVtYXBcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyBhbGwgdGhlIG9iamVjdHMgaW4gdGhpcyBwcm9qZWN0IGFuZCB0aGVpciByZWxhdGlvbnNoaXBcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKG5hbWVzcGFjZXNMaW5rLCBucywgXCJhbmdyeVBvZHNcIiksXG4gICAgICAgIGxhYmVsOiBcIkFuZ3J5IFBvZHNcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtZ2FtZXBhZFwiLFxuICAgICAgICB0aXRsZTogXCJUcnkgdGhlIEFuZ3J5IFBvZHMgZ2FtZSFcIlxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIG5hbWVzcGFjZUxpbmsoJHNjb3BlLCAkcm91dGVQYXJhbXMsIHBhdGggPSBudWxsKSB7XG4gICAgdmFyIG5zID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gJHJvdXRlUGFyYW1zLndvcmtzcGFjZTtcbiAgICB2YXIgcHJvamVjdCA9ICRyb3V0ZVBhcmFtcy5wcm9qZWN0O1xuICAgIHZhciBwcm9qZWN0TGluayA9IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi9rdWJlcm5ldGVzXCIpO1xuICAgIGlmICh3b3Jrc3BhY2VOYW1lICYmIHByb2plY3QpIHtcbiAgICAgIHByb2plY3RMaW5rID0gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0KTtcbiAgICB9XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJuYW1lc3BhY2VcIiwgbnMsIHBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIFVSTCBxdWVyeSBzdHJpbmcgaWYgaXRzIGluc2lkZSB0aGUgZ2l2ZW4gdGV4dFxuICAgKi9cbiAgZnVuY3Rpb24gdHJpbVF1ZXJ5KHRleHQpIHtcbiAgICBpZiAodGV4dCkge1xuICAgICAgdmFyIGlkeCA9IHRleHQuaW5kZXhPZihcIj9cIik7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIHRleHQuc3Vic3RyaW5nKDAsIGlkeCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgZnVuY3Rpb24gYWN0aXZhdGVDdXJyZW50KG5hdkJhckl0ZW1zKSB7XG4gICAgbmF2QmFySXRlbXMgPSBfLmNvbXBhY3QobmF2QmFySXRlbXMpO1xuICAgIHZhciBpbmplY3RvciA9IEhhd3Rpb0NvcmUuaW5qZWN0b3I7XG4gICAgdmFyICRsb2NhdGlvbiA9IGluamVjdG9yID8gaW5qZWN0b3IuZ2V0PG5nLklMb2NhdGlvblNlcnZpY2U+KFwiJGxvY2F0aW9uXCIpIDogbnVsbDtcbiAgICBpZiAoJGxvY2F0aW9uKSB7XG4gICAgICB2YXIgcGF0aCA9IHRyaW1RdWVyeSgkbG9jYXRpb24ucGF0aCgpKTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgZnVuY3Rpb24gbWFrZUFjdGl2ZShpdGVtKSB7XG4gICAgICAgIGl0ZW0uYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgYW5ndWxhci5mb3JFYWNoKG5hdkJhckl0ZW1zLCAoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24oaXRlbS5pc0FjdGl2ZSkpIHtcbiAgICAgICAgICAgIGlmICghZm91bmQgJiYgaXRlbS5pc0FjdGl2ZShpdGVtLCBwYXRoKSkge1xuICAgICAgICAgICAgICBtYWtlQWN0aXZlKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaHJlZiA9IGl0ZW0uaHJlZjtcbiAgICAgICAgICAgIHZhciB0cmltSHJlZiA9IHRyaW1RdWVyeShocmVmKTtcbiAgICAgICAgICAgIGlmICghZm91bmQgJiYgdHJpbUhyZWYgJiYgdHJpbUhyZWYgPT09IHBhdGgpIHtcbiAgICAgICAgICAgICAgbWFrZUFjdGl2ZShpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmF2QmFySXRlbXM7XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzQ2hpbGRyZW4oYW5zd2VyLCBjaGlsZHJlbikge1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgaWYgKGFuZ3VsYXIuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgYW5zd2VyID0gYW5zd2VyLmNvbmNhdChjaGlsZHJlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbnN3ZXIucHVzaChjaGlsZHJlbik7XG4gICAgICB9XG4gICAgfVxuICAgIGFjdGl2YXRlQ3VycmVudChhbnN3ZXIpO1xuICAgIHJldHVybiBhbnN3ZXI7XG4gIH1cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG4gICAvKiBleHBvcnQgdmFyIERhdGFPdmVyVmlldyA9IGNvbnRyb2xsZXIoXCJEYXRhT3ZlclZpZXdcIixcclxuICAgICAgICBbXCIkc2NvcGVcIiwgIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCAoJHNjb3BlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQpID0+IHtcclxuICAgICAgICAgICAgJHNjb3BlLnRyZWVPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgbm9kZUNoaWxkcmVuOiBcImNoaWxkcmVuXCIsXHJcbiAgICAgICAgICAgICAgICBkaXJTZWxlY3RhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaW5qZWN0Q2xhc3Nlczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHVsOiBcImExXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbGk6IFwiYTJcIixcclxuICAgICAgICAgICAgICAgICAgICBsaVNlbGVjdGVkOiBcImE3XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaUV4cGFuZGVkOiBcImEzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaUNvbGxhcHNlZDogXCJhNFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGlMZWFmOiBcImE1XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiYTZcIixcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbFNlbGVjdGVkOiBcImE4XCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgJHNjb3BlLmRhdGFGb3JUaGVUcmVlID1cclxuICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICB7IFwibmFtZVwiIDogXCJKb2VcIiwgXCJhZ2VcIiA6IFwiMjFcIiwgXCJjaGlsZHJlblwiIDogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IFwibmFtZVwiIDogXCJTbWl0aFwiLCBcImFnZVwiIDogXCI0MlwiLCBcImNoaWxkcmVuXCIgOiBbXSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IFwibmFtZVwiIDogXCJHYXJ5XCIsIFwiYWdlXCIgOiBcIjIxXCIsIFwiY2hpbGRyZW5cIiA6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJuYW1lXCIgOiBcIkplbmlmZXJcIiwgXCJhZ2VcIiA6IFwiMjNcIiwgXCJjaGlsZHJlblwiIDogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJuYW1lXCIgOiBcIkRhbmlcIiwgXCJhZ2VcIiA6IFwiMzJcIiwgXCJjaGlsZHJlblwiIDogW10gfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFwibmFtZVwiIDogXCJNYXhcIiwgXCJhZ2VcIiA6IFwiMzRcIiwgXCJjaGlsZHJlblwiIDogW10gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXX1cclxuICAgICAgICAgICAgICAgICAgICBdfSxcclxuICAgICAgICAgICAgICAgICAgICB7IFwibmFtZVwiIDogXCJBbGJlcnRcIiwgXCJhZ2VcIiA6IFwiMzNcIiwgXCJjaGlsZHJlblwiIDogW10gfSxcclxuICAgICAgICAgICAgICAgICAgICB7IFwibmFtZVwiIDogXCJSb25cIiwgXCJhZ2VcIiA6IFwiMjlcIiwgXCJjaGlsZHJlblwiIDogW10gfVxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICB9XSk7Ki9cclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBfbW9kdWxlID0gYW5ndWxhci5tb2R1bGUocGx1Z2luTmFtZSwgWydoYXd0aW8tY29yZScsICdoYXd0aW8tdWknLCAndWkuY29kZW1pcnJvcicsICdudmQzJywgJ3RyZWVDb250cm9sJ10pO1xuICBleHBvcnQgdmFyIGNvbnRyb2xsZXIgPSBQbHVnaW5IZWxwZXJzLmNyZWF0ZUNvbnRyb2xsZXJGdW5jdGlvbihfbW9kdWxlLCBwbHVnaW5OYW1lKTtcbiAgZXhwb3J0IHZhciByb3V0ZSA9IFBsdWdpbkhlbHBlcnMuY3JlYXRlUm91dGluZ0Z1bmN0aW9uKHRlbXBsYXRlUGF0aCk7XG5cbiAgX21vZHVsZS5jb25maWcoWyckcm91dGVQcm92aWRlcicsICgkcm91dGVQcm92aWRlcjpuZy5yb3V0ZS5JUm91dGVQcm92aWRlcikgPT4ge1xuICAgICRyb3V0ZVByb3ZpZGVyLndoZW4oY29udGV4dCwgcm91dGUoJ3dvcmtzcGFjZXMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFwiL25hbWVzcGFjZXNcIiwgcm91dGUoJ3dvcmtzcGFjZXMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC8vLndoZW4oXCIvaG9tZVwiLCByb3V0ZSgnaG9tZS5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOm5hbWVzcGFjZScpLCByb3V0ZSgncHJvamVjdHMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzpuYW1lc3BhY2UvZGV0YWlsJyksIHJvdXRlKCd3b3Jrc3BhY2UuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzpuYW1lc3BhY2UvamVua2luc0pvYicpLCByb3V0ZSgnamVua2luc0pvYnMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzpuYW1lc3BhY2UvcHJvamVjdHMnKSwgcm91dGUoJ3Byb2plY3RzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86bmFtZXNwYWNlL3Byb2plY3RzLzppZCcpLCByb3V0ZSgnZW52aXJvbm1lbnRzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86bmFtZXNwYWNlL3Byb2plY3RzLzppZC9kZXRhaWwnKSwgS3ViZXJuZXRlcy5yb3V0ZSgnYnVpbGRDb25maWcuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzpuYW1lc3BhY2UvcHJvamVjdHMvOmlkL2J1aWxkcycpLCBLdWJlcm5ldGVzLnJvdXRlKCdidWlsZHMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzpuYW1lc3BhY2UvcHJvamVjdHMvOmlkL2Vudmlyb25tZW50cycpLCByb3V0ZSgnZW52aXJvbm1lbnRzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86bmFtZXNwYWNlL3Byb2plY3RzLzppZC9qZW5raW5zSm9iLzpqb2InKSwgcm91dGUoJ2plbmtpbnNKb2IuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzpuYW1lc3BhY2UvcHJvamVjdHMvOmlkL2plbmtpbnNKb2IvOmpvYi9sb2cvOmJ1aWxkJyksIHJvdXRlKCdqZW5raW5zTG9nLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86bmFtZXNwYWNlL3Byb2plY3RzLzppZC9qZW5raW5zSm9iLzpqb2IvcGlwZWxpbmVzJyksIHJvdXRlKCdwaXBlbGluZXMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzpuYW1lc3BhY2UvcHJvamVjdHMvOmlkL2plbmtpbnNKb2IvOmpvYi9waXBlbGluZS86YnVpbGQnKSwgcm91dGUoJ3BpcGVsaW5lLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86bmFtZXNwYWNlL3Byb2plY3RzLzppZC9qZW5raW5zSm9iLzpqb2IvbWV0cmljcycpLCByb3V0ZSgnamVua2luc01ldHJpY3MuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzpuYW1lc3BhY2UvcHJvamVjdHMvOmlkL2plbmtpbnNNZXRyaWNzJyksIHJvdXRlKCdqZW5raW5zTWV0cmljcy5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOm5hbWVzcGFjZS9wcm9qZWN0cy86aWQvdG9vbHMnKSwgcm91dGUoJ3Rvb2xzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86d29ya3NwYWNlL3Byb2plY3RzLzpwcm9qZWN0L2Vudmlyb25tZW50cy86bmFtZXNwYWNlJyksIHJvdXRlKCdlbnZpcm9ubWVudC5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOndvcmtzcGFjZS9wcm9qZWN0cy86cHJvamVjdC9lbnZpcm9ubWVudHMvOm5hbWVzcGFjZScpLCByb3V0ZSgnZW52aXJvbm1lbnQuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL0FnZ3JlZ2F0ZS9vdmVydmlldycpLCByb3V0ZSgnYWRkRGF0YUZpbGUuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC5vdGhlcndpc2UoXCIvd29ya3NwYWNlc1wiKTtcbiAgfV0pO1xuICBcblxuICBfbW9kdWxlLnJ1bihbJ3ZpZXdSZWdpc3RyeScsICdTZXJ2aWNlUmVnaXN0cnknLCAnSGF3dGlvTmF2JywgJ0t1YmVybmV0ZXNNb2RlbCcsICckdGVtcGxhdGVDYWNoZScsICdEYXRhSW5mb01vZGVsJywodmlld1JlZ2lzdHJ5LCBTZXJ2aWNlUmVnaXN0cnksIEhhd3Rpb05hdiwgS3ViZXJuZXRlc01vZGVsLCAkdGVtcGxhdGVDYWNoZSwgRGF0YUluZm9Nb2RlbCkgPT4ge1xuICAgIGxvZy5kZWJ1ZyhcIlJ1bm5pbmdcIik7XG4gICAgdmlld1JlZ2lzdHJ5Wyd3b3Jrc3BhY2VzJ10gPSBLdWJlcm5ldGVzLnRlbXBsYXRlUGF0aCArICdsYXlvdXRLdWJlcm5ldGVzLmh0bWwnO1xuICAgIHZpZXdSZWdpc3RyeVsnbmFtZXNwYWNlcyddID0gS3ViZXJuZXRlcy50ZW1wbGF0ZVBhdGggKyAnbGF5b3V0S3ViZXJuZXRlcy5odG1sJztcblxuICAgIHZhciBidWlsZGVyID0gSGF3dGlvTmF2LmJ1aWxkZXIoKTtcbiAgICB2YXIgd29ya3NwYWNlcyA9IGJ1aWxkZXIuaWQoJ3dvcmtzcGFjZXMnKVxuICAgICAgICAgICAgICAgICAgICAgIC5ocmVmKCgpID0+IGNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgLnRpdGxlKCgpID0+ICfmn6XnnIsnKVxuICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpO1xuLypcbiAgICB2YXIgd29ya3NwYWNlT3ZlcnZpZXcgPSBidWlsZGVyLmlkKCd3b3Jrc3BhY2VzJylcbiAgICAgICAgICAgICAgICAgICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ292ZXJ2aWV3JykpXG4gICAgICAgICAgICAgICAgICAgICAgLnRpdGxlKCgpID0+ICdXb3Jrc3BhY2UnKVxuICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpO1xuKi9cbi8qICAgIHZhciBkYXRhYWRkID0gYnVpbGRlci5pZCgnZGF0YWFkZCcpXG4gICAgICAgICAgICAgICAgICAgICAgLmhyZWYoKCkgPT4gY29udGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAudGl0bGUoKCkgPT4gJ+axh+aAuycpXG4gICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7XG4qL1xuICAgIHZhciBBZ2dyZWdhdGUgPSBidWlsZGVyLmlkKCdBZ2dyZWdhdGU7JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAucmFuaygyMDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgLmhyZWYoKCkgPT4gY29udGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgICAudGl0bGUoKCkgPT4gJ+aVsOaNruaxh+aAuycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgLy8uaXNWYWxpZCgoKSA9PiAhQ29yZS5pc1JlbW90ZUNvbm5lY3Rpb24oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAudGFicyh3b3Jrc3BhY2VzKVxuICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpO1xuXG4gICAgSGF3dGlvTmF2LmFkZChBZ2dyZWdhdGUpO1xuICB9XSk7XG5cbiAgX21vZHVsZS5maWx0ZXIoJ2FzVHJ1c3RlZEh0bWwnLCBbJyRzY2UnLCBmdW5jdGlvbiAoJHNjZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgcmV0dXJuICRzY2UudHJ1c3RBc0h0bWwodGV4dCk7XG4gICAgfTtcbiAgfV0pO1xuXG4gIGhhd3Rpb1BsdWdpbkxvYWRlci5hZGRNb2R1bGUocGx1Z2luTmFtZSk7XG5cbiAgLy8gZm9yIHNjcm9sbC1nbHVlIGRpcmVjdGl2ZVxuICBoYXd0aW9QbHVnaW5Mb2FkZXIuYWRkTW9kdWxlKCdsdWVnZy5kaXJlY3RpdmVzJyk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgRGV2ZWxvcGVyIHtcbiAgX21vZHVsZS5jb250cm9sbGVyKCdEZXZlbG9wZXIuRW52aXJvbm1lbnRQYW5lbENvbnRyb2xsZXInLCAoJHNjb3BlLCAkZWxlbWVudCwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAkc2NvcGUuZW52VmVyc2lvbnMgPSB7fTtcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgJHNjb3BlLmVudiA9ICRzY29wZS4kZXZhbCgnZW52Jyk7XG4gICAgJHNjb3BlLmJ1aWxkQ29uZmlnID0gJHNjb3BlLiRldmFsKCdlbnRpdHknKTtcblxuICAgICRzY29wZS5vcGVuID0gdHJ1ZTtcblxuICAgICRzY29wZS50b2dnbGUgPSAoKSA9PiAkc2NvcGUub3BlbiA9ICEkc2NvcGUub3BlbjtcblxuICAgIHZhciBjYWNoZXMgPSB7fTtcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuICAgIGxvYWRQcm9qZWN0VmVyc2lvbnMoJHNjb3BlLCAkZWxlbWVudCwgJHNjb3BlLmJ1aWxkQ29uZmlnLCAkc2NvcGUuZW52LCAkc2NvcGUuZW52Lm5hbWVzcGFjZSwgJHNjb3BlLmVudlZlcnNpb25zLCBjYWNoZXMpO1xuXG4gIH0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBIb21lQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJIb21lQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICAgICAkc2NvcGUubmFtZXNwYWNlID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuXG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxuXG5tb2R1bGUgRGV2ZWxvcGVyIHtcblxuICBleHBvcnQgdmFyIEplbmtpbnNKb2JDb250cm9sbGVyID0gY29udHJvbGxlcihcIkplbmtpbnNKb2JDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgU2VydmljZVJlZ2lzdHJ5KSA9PiB7XG5cbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgICAgICRzY29wZS5qb2JJZCA9ICRyb3V0ZVBhcmFtc1tcImpvYlwiXTtcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUgPSB7fTtcblxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuaWQpO1xuICAgICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5pZCwgJHNjb3BlLmpvYklkKTtcblxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgICAgIGRhdGE6ICdqb2IuYnVpbGRzJyxcbiAgICAgICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXG4gICAgICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxuICAgICAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmllbGQ6ICckc29ydE9yZGVyJyxcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zQnVpbGRJZFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpZWxkOiAnJGJ1aWxkTGluaycsXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVmlld3MnLFxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNCdWlsZEJ1dHRvbnNUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWVsZDogJyRkdXJhdGlvbicsXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRHVyYXRpb24nLFxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNCdWlsZER1cmF0aW9uVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmllbGQ6ICckdGltZXN0YW1wJyxcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdUaW1lIFN0YXJ0ZWQnLFxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNCdWlsZFRpbWVzdGFtcFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICAgIHVwZGF0ZURhdGEoKTtcblxuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgICAgaWYgKCRzY29wZS5qb2JJZCkge1xuICAgICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgVXJsSGVscGVycy5qb2luKFwiam9iXCIsICRzY29wZS5qb2JJZCwgXCJhcGkvanNvbj9kZXB0aD0xXCIpKTtcbiAgICAgICAgICAgIGlmICh1cmwgJiYgKCEkc2NvcGUuam9iIHx8IEt1YmVybmV0ZXMua2VlcFBvbGxpbmdNb2RlbCkpIHtcbiAgICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGVucmljaEplbmtpbnNKb2IoZGF0YSwgJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT2JqZWN0Q2hhbmdlZChkYXRhLCAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKFwiZW50aXR5IGhhcyBjaGFuZ2VkIVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuam9iID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgICB9KS5cbiAgICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxuXG5tb2R1bGUgRGV2ZWxvcGVyIHtcblxuICBleHBvcnQgdmFyIEplbmtpbnNKb2JzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJKZW5raW5zSm9ic0NvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCBcIlNlcnZpY2VSZWdpc3RyeVwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBTZXJ2aWNlUmVnaXN0cnkpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgICAgICRzY29wZS5qZW5raW5zID0gbnVsbDtcbiAgICAgICAgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSA9IHt9O1xuXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBjcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoKTtcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVXb3Jrc3BhY2VTdWJOYXZCYXJzKCk7XG5cbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcbiAgICAgICAgICBkYXRhOiAnamVua2lucy5qb2JzJyxcbiAgICAgICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXG4gICAgICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxuICAgICAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmllbGQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zSm9iTmFtZVRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpZWxkOiAnJGJ1aWxkTGluaycsXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVmlld3MnLFxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNKb2JCdXR0b25zVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmllbGQ6ICckbGFzdFN1Y2Nlc3NmdWxCdWlsZE51bWJlcicsXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTGFzdCBTdWNjZXNzJyxcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zTGFzdFN1Y2Nlc3NUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWVsZDogJyRsYXN0RmFpbGVkbEJ1aWxkTnVtYmVyJyxcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdMYXN0IEZhaWx1cmUnLFxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNMYXN0RmFpbHVyZVRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpZWxkOiAnJGR1cmF0aW9uJyxcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdMYXN0IER1cmF0aW9uJyxcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zQnVpbGREdXJhdGlvblRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpZWxkOiAnJHRpbWVzdGFtcCcsXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVGltZSBTdGFydGVkJyxcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zQnVpbGRUaW1lc3RhbXBUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgICB1cGRhdGVEYXRhKCk7XG5cblxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgICAgIC8vIFRPRE8gb25seSBuZWVkIGRlcHRoIDIgdG8gYmUgYWJsZSB0byBmZXRjaCB0aGUgbGFzdEJ1aWxkXG4gICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgXCJhcGkvanNvbj9kZXB0aD0yXCIpO1xuICAgICAgICAgIGxvZy5pbmZvKFwiXCIpO1xuICAgICAgICAgIGlmICh1cmwgJiYgKCEkc2NvcGUuamVua2lucyB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XG4gICAgICAgICAgICAkaHR0cC5nZXQodXJsLCBqZW5raW5zSHR0cENvbmZpZykuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgIGVucmljaEplbmtpbnNKb2JzKGRhdGEsICRzY29wZS5pZCwgJHNjb3BlLmlkKTtcbiAgICAgICAgICAgICAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKGRhdGEsICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKFwiZW50aXR5IGhhcyBjaGFuZ2VkIVwiKTtcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmplbmtpbnMgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuXG5kZWNsYXJlIHZhciBPU09BdXRoQ29uZmlnOmFueTtcbmRlY2xhcmUgdmFyIEdvb2dsZU9BdXRoQ29uZmlnOmFueTtcbmRlY2xhcmUgdmFyIEtleWNsb2FrQ29uZmlnOmFueTtcblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgX21vZHVsZSA9IGFuZ3VsYXIubW9kdWxlKHBsdWdpbk5hbWUsIFsnaGF3dGlvLWNvcmUnLCAnaGF3dGlvLXVpJywgJ3VpLmNvZGVtaXJyb3InLCAndWkudmFsaWRhdGUnLCdrdWJlcm5ldGVzVUknXSk7XG4gIGV4cG9ydCB2YXIgY29udHJvbGxlciA9IFBsdWdpbkhlbHBlcnMuY3JlYXRlQ29udHJvbGxlckZ1bmN0aW9uKF9tb2R1bGUsIHBsdWdpbk5hbWUpO1xuICBleHBvcnQgdmFyIHJvdXRlID0gUGx1Z2luSGVscGVycy5jcmVhdGVSb3V0aW5nRnVuY3Rpb24odGVtcGxhdGVQYXRoKTtcblxuICBfbW9kdWxlLmNvbmZpZyhbJyRyb3V0ZVByb3ZpZGVyJywgKCRyb3V0ZVByb3ZpZGVyOm5nLnJvdXRlLklSb3V0ZVByb3ZpZGVyKSA9PiB7XG5cbiAgICAkcm91dGVQcm92aWRlclxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvcG9kcycpLCByb3V0ZSgncG9kcy5odG1sJywgZmFsc2UpKVxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdyZXBsaWNhdGlvbkNvbnRyb2xsZXJzJyksIHJvdXRlKCdyZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3NlcnZpY2VzJyksIHJvdXRlKCdzZXJ2aWNlcy5odG1sJywgZmFsc2UpKVxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdldmVudHMnKSwgcm91dGUoJ2V2ZW50cy5odG1sJywgZmFsc2UpKVxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdhcHBzJyksIHJvdXRlKCdhcHBzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2FwcHMvOm5hbWVzcGFjZScpLCByb3V0ZSgnYXBwcy5odG1sJywgZmFsc2UpKVxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICd0ZW1wbGF0ZXMnKSwgcm91dGUoJ3RlbXBsYXRlcy5odG1sJywgZmFsc2UpKVxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdob3N0cycpLCByb3V0ZSgnaG9zdHMuaHRtbCcsIGZhbHNlKSlcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnaG9zdHMvOmlkJyksIHJvdXRlKCdob3N0Lmh0bWwnLCB0cnVlKSlcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAncGlwZWxpbmVzJyksIHJvdXRlKCdwaXBlbGluZXMuaHRtbCcsIGZhbHNlKSlcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnb3ZlcnZpZXcnKSwgcm91dGUoJ292ZXJ2aWV3Lmh0bWwnLCB0cnVlKSlcbiAgICAgIC53aGVuKGNvbnRleHQsIHtyZWRpcmVjdFRvOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcnMnKX0pO1xuXG5cbiAgICBhbmd1bGFyLmZvckVhY2goW2NvbnRleHQsIFwiL3dvcmtzcGFjZXMvOndvcmtzcGFjZS9wcm9qZWN0cy86cHJvamVjdFwiXSwgKGNvbnRleHQpID0+IHtcbiAgICAgICRyb3V0ZVByb3ZpZGVyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3BvZENyZWF0ZScpLCByb3V0ZSgncG9kQ3JlYXRlLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3BvZEVkaXQvOmlkJyksIHJvdXRlKCdwb2RFZGl0Lmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3BvZHMnKSwgcm91dGUoJ3BvZHMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvcG9kcy86aWQnKSwgcm91dGUoJ3BvZC5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9yZXBsaWNhdGlvbkNvbnRyb2xsZXJzJyksIHJvdXRlKCdyZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3JlcGxpY2F0aW9uQ29udHJvbGxlcnMvOmlkJyksIHJvdXRlKCdyZXBsaWNhdGlvbkNvbnRyb2xsZXIuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvcmVwbGljYXRpb25Db250cm9sbGVyQ3JlYXRlJyksIHJvdXRlKCdyZXBsaWNhdGlvbkNvbnRyb2xsZXJDcmVhdGUuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvcmVwbGljYXRpb25Db250cm9sbGVyRWRpdC86aWQnKSwgcm91dGUoJ3JlcGxpY2F0aW9uQ29udHJvbGxlckVkaXQuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2Uvc2VjcmV0cycpLCByb3V0ZSgnc2VjcmV0cy5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9zZWNyZXRzLzppZCcpLCByb3V0ZSgnc2VjcmV0Lmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlY3JldENyZWF0ZScpLCByb3V0ZSgnc2VjcmV0Lmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlcnZpY2VzJyksIHJvdXRlKCdzZXJ2aWNlcy5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9zZXJ2aWNlcy86aWQnKSwgcm91dGUoJ3NlcnZpY2UuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2Uvc2VydmljZUNyZWF0ZScpLCByb3V0ZSgnc2VydmljZUNyZWF0ZS5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9zZXJ2aWNlRWRpdC86aWQnKSwgcm91dGUoJ3NlcnZpY2VFZGl0Lmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL2V2ZW50cycpLCByb3V0ZSgnZXZlbnRzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL2FwcHMnKSwgcm91dGUoJ2FwcHMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2Uvb3ZlcnZpZXcnKSwgcm91dGUoJ292ZXJ2aWV3Lmh0bWwnLCB0cnVlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvdGVtcGxhdGVzLzp0YXJnZXROYW1lc3BhY2UnKSwgcm91dGUoJ3RlbXBsYXRlcy5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZScpLCByb3V0ZSgnYXBwcy5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkcycpLCByb3V0ZSgnYnVpbGRzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRzLzppZCcpLCByb3V0ZSgnYnVpbGQuaHRtbCcsIHRydWUpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkTG9ncy86aWQnKSwgcm91dGUoJ2J1aWxkTG9ncy5odG1sJywgdHJ1ZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRDb25maWdzJyksIHJvdXRlKCdidWlsZENvbmZpZ3MuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZENvbmZpZ3MvOmlkJyksIHJvdXRlKCdidWlsZENvbmZpZy5odG1sJywgdHJ1ZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRDb25maWdFZGl0LzppZCcpLCByb3V0ZSgnYnVpbGRDb25maWdFZGl0Lmh0bWwnLCB0cnVlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdkZXBsb3ltZW50Q29uZmlncycpLCByb3V0ZSgnZGVwbG95bWVudENvbmZpZ3MuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdkZXBsb3ltZW50Q29uZmlncy86aWQnKSwgcm91dGUoJ2RlcGxveW1lbnRDb25maWcuaHRtbCcsIHRydWUpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2ltYWdlUmVwb3NpdG9yaWVzJyksIHJvdXRlKCdpbWFnZVJlcG9zaXRvcmllcy5odG1sJywgZmFsc2UpKVxuICAgIH0pO1xuXG4gICAgYW5ndWxhci5mb3JFYWNoKFtjb250ZXh0LCBcIi93b3Jrc3BhY2VzLzp3b3Jrc3BhY2VcIiwgXCIvd29ya3NwYWNlcy86d29ya3NwYWNlL3Byb2plY3RzLzpwcm9qZWN0XCJdLCAoY29udGV4dCkgPT4ge1xuICAgICAgJHJvdXRlUHJvdmlkZXJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZENvbmZpZ0VkaXQnKSwgcm91dGUoJ2J1aWxkQ29uZmlnRWRpdC5odG1sJywgdHJ1ZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRDb25maWdFZGl0LzppZCcpLCByb3V0ZSgnYnVpbGRDb25maWdFZGl0Lmh0bWwnLCB0cnVlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdpbXBvcnRQcm9qZWN0JyksIHJvdXRlKCdpbXBvcnRQcm9qZWN0Lmh0bWwnLCB0cnVlKSlcbiAgICB9KTtcbiAgfV0pO1xuXG5cbiAgX21vZHVsZS5mYWN0b3J5KCdBcHBMaWJyYXJ5VVJMJywgWyckcm9vdFNjb3BlJywgKCRyb290U2NvcGU6bmcuSVJvb3RTY29wZVNlcnZpY2UpID0+IHtcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGt1YmVybmV0ZXNBcGlVcmwoKSwgXCIvcHJveHlcIiwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvc2VydmljZXMvYXBwLWxpYnJhcnlcIik7XG4gIH1dKTtcblxuICBfbW9kdWxlLmZhY3RvcnkoJ1dpa2lHaXRVcmxQcmVmaXgnLCAoKSA9PiB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihrdWJlcm5ldGVzQXBpVXJsKCksIFwiL3Byb3h5XCIsIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwic2VydmljZXMvYXBwLWxpYnJhcnlcIik7XG4gIH0pO1xuXG4gIF9tb2R1bGUuZmFjdG9yeSgnd2lraVJlcG9zaXRvcnknLCBbXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgKCRsb2NhdGlvbiwgbG9jYWxTdG9yYWdlKSA9PiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XSk7XG5cbiAgX21vZHVsZS5mYWN0b3J5KCdDb25uZWN0RGlhbG9nU2VydmljZScsIFsnJHJvb3RTY29wZScsICgkcm9vdFNjb3BlOm5nLklSb290U2NvcGVTZXJ2aWNlKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpYWxvZzogbmV3IFVJLkRpYWxvZygpLFxuICAgICAgc2F2ZUNyZWRlbnRpYWxzOiBmYWxzZSxcbiAgICAgIHVzZXJOYW1lOiBudWxsLFxuICAgICAgcGFzc3dvcmQ6IG51bGwsXG4gICAgICBqb2xva2lhVXJsOiBudWxsLFxuICAgICAgY29udGFpbmVyTmFtZTogbnVsbCxcbiAgICAgIHZpZXc6IG51bGxcbiAgICB9O1xuICB9XSk7XG5cbiAgX21vZHVsZS5maWx0ZXIoJ2t1YmVybmV0ZXNQYWdlTGluaycsICgpID0+IGVudGl0eVBhZ2VMaW5rKTtcblxuICBfbW9kdWxlLmZpbHRlcigncmVsYXRpdmVUaW1lJywgKCkgPT4ge1xuICAgIHJldHVybiAoZGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIGh1bWFuZGF0ZS5yZWxhdGl2ZVRpbWUoZGF0ZSk7XG4gICAgfVxuICB9KTtcblxuICBfbW9kdWxlLnJ1bihbJ3ZpZXdSZWdpc3RyeScsICdTZXJ2aWNlUmVnaXN0cnknLCAnSGF3dGlvTmF2JywgJ0t1YmVybmV0ZXNNb2RlbCcsICckdGVtcGxhdGVDYWNoZScsICh2aWV3UmVnaXN0cnksIFNlcnZpY2VSZWdpc3RyeSwgSGF3dGlvTmF2LCBLdWJlcm5ldGVzTW9kZWwsICR0ZW1wbGF0ZUNhY2hlKSA9PiB7XG5cbiAgICBsb2cuZGVidWcoXCJSdW5uaW5nXCIpO1xuICAgIHZpZXdSZWdpc3RyeVsna3ViZXJuZXRlcyddID0gdGVtcGxhdGVQYXRoICsgJ2xheW91dEt1YmVybmV0ZXMuaHRtbCc7XG4gICAgdmFyIGJ1aWxkZXIgPSBIYXd0aW9OYXYuYnVpbGRlcigpO1xuICAgIHZhciBhcHBzID0gYnVpbGRlci5pZCgna3ViZS1hcHBzJylcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYXBwcycpKVxuICAgICAgLnRpdGxlKCgpID0+ICdBcHBzJylcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgdmFyIHNlcnZpY2VzID0gYnVpbGRlci5pZCgna3ViZS1zZXJ2aWNlcycpXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3NlcnZpY2VzJykpXG4gICAgICAudGl0bGUoKCkgPT4gJ1NlcnZpY2VzJylcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgdmFyIGNvbnRyb2xsZXJzID0gYnVpbGRlci5pZCgna3ViZS1jb250cm9sbGVycycpXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcnMnKSlcbiAgICAgIC50aXRsZSgoKSA9PiAnb3JhY2xl5pyN5YqhJylcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgdmFyIHBvZHMgPSBidWlsZGVyLmlkKCdrdWJlLXBvZHMnKVxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdwb2RzJykpXG4gICAgICAudGl0bGUoKCkgPT4gJ+a1i+ivlemhtemdoicpXG4gICAgICAuYnVpbGQoKTtcblxuICAgIHZhciBldmVudHMgPSBidWlsZGVyLmlkKCdrdWJlLWV2ZW50cycpXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2V2ZW50cycpKVxuICAgICAgLnRpdGxlKCgpID0+ICfmnI3liqHlkK/liqjml6Xlv5cnKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB2YXIgaG9zdHMgPSBidWlsZGVyLmlkKCdrdWJlLWhvc3RzJylcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnaG9zdHMnKSlcbiAgICAgIC50aXRsZSgoKSA9PiAn6ZuG576k6IqC54K5JylcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgdmFyIG92ZXJ2aWV3ID0gYnVpbGRlci5pZCgna3ViZS1vdmVydmlldycpXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ292ZXJ2aWV3JykpXG4gICAgICAudGl0bGUoKCkgPT4gJ0RpYWdyYW0nKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB2YXIgYnVpbGRzID0gYnVpbGRlci5pZCgna3ViZS1idWlsZHMnKVxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZHMnKSlcbiAgICAgIC50aXRsZSgoKSA9PiAnQnVpbGRzJylcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgdmFyIGJ1aWxkQ29uZmlncyA9IGJ1aWxkZXIuaWQoJ2t1YmUtYnVpbGRDb25maWdzJylcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRDb25maWdzJykpXG4gICAgICAudGl0bGUoKCkgPT4gJ0J1aWxkIENvbmZpZ3MnKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB2YXIgZGVwbG95cyA9IGJ1aWxkZXIuaWQoJ2t1YmUtZGVwbG95cycpXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2RlcGxveW1lbnRDb25maWdzJykpXG4gICAgICAudGl0bGUoKCkgPT4gJ0RlcGxveXMnKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB2YXIgaW1hZ2VSZXBvc2l0b3JpZXMgPSBidWlsZGVyLmlkKCdrdWJlLWltYWdlUmVwb3NpdG9yaWVzJylcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnaW1hZ2VSZXBvc2l0b3JpZXMnKSlcbiAgICAgIC50aXRsZSgoKSA9PiAnUmVnaXN0cmllcycpXG4gICAgICAuYnVpbGQoKTtcblxuICAgIHZhciBwaXBlbGluZXMgPSBidWlsZGVyLmlkKCdrdWJlLXBpcGVsaW5lcycpXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3BpcGVsaW5lcycpKVxuICAgICAgLnRpdGxlKCgpID0+ICdQaXBlbGluZXMnKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB2YXIgcmVwb3MgPSBidWlsZGVyLmlkKCdrdWJlLXJlcG9zJylcbiAgICAgIC5ocmVmKCgpID0+IFwiL2ZvcmdlL3JlcG9zXCIpXG4gICAgICAuaXNWYWxpZCgoKSA9PiBTZXJ2aWNlUmVnaXN0cnkuaGFzU2VydmljZShmYWJyaWM4Rm9yZ2VTZXJ2aWNlTmFtZSkgJiYgU2VydmljZVJlZ2lzdHJ5Lmhhc1NlcnZpY2UoZ29nc1NlcnZpY2VOYW1lKSlcbiAgICAgIC50aXRsZSgoKSA9PiAnUmVwb3NpdG9yaWVzJylcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgdmFyIG1haW5UYWIgPSBidWlsZGVyLmlkKCdrdWJlcm5ldGVzJylcbiAgICAgIC5yYW5rKDEwMClcbiAgICAgIC5kZWZhdWx0UGFnZSh7XG4gICAgICAgIHJhbms6IDIwLFxuICAgICAgICBpc1ZhbGlkOiAoeWVzLCBubykgPT4ge1xuICAgICAgICAgIHllcygpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmhyZWYoKCkgPT4gY29udGV4dClcbiAgICAgIC50aXRsZSgoKSA9PiAn5pyN5Yqh6ZuG576kJylcbiAgICAgIC50YWJzKGNvbnRyb2xsZXJzLCBwb2RzLCBldmVudHMpXG4gICAgICAuYnVpbGQoKTtcbiAgICBIYXd0aW9OYXYuYWRkKG1haW5UYWIpO1xuXG4gICAgLyogdGVzdEt1YmVybmV0ZXNNb2RlbFxuICAgIEhhd3Rpb05hdi5hZGQoe1xuICAgICAgaWQ6ICdrOHNBcHBTd2l0Y2hlcicsXG4gICAgICB0aXRsZTogKCkgPT4gJycsIC8vIG5vdCB1c2VkIGFzICd0ZW1wbGF0ZScgYmVsb3cgb3ZlcnJpZGVzIHRoaXNcbiAgICAgIGlzVmFsaWQ6ICgpID0+IEt1YmVybmV0ZXNNb2RlbC5zZXJ2aWNlQXBwcy5sZW5ndGggPiAwLFxuICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgIHRlbXBsYXRlOiAoKSA9PiAkdGVtcGxhdGVDYWNoZS5nZXQoVXJsSGVscGVycy5qb2luKHRlbXBsYXRlUGF0aCwgJ3NlcnZpY2VBcHBzLmh0bWwnKSlcbiAgICB9KTtcbiAgICAqL1xuXG4gICAgdmFyIHByb2plY3RzVGFiID0gYnVpbGRlci5pZCgnb3BlbnNoaWZ0JylcbiAgICAgIC5yYW5rKDEwMClcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRDb25maWdzJykgKyAnP3N1Yi10YWI9a3ViZS1idWlsZENvbmZpZ3MnKVxuICAgICAgLnRpdGxlKCgpID0+ICdQcm9qZWN0cycpXG4gICAgICAvLyBsZXRzIGRpc2FibGUgdGhlIHBpcGVsaW5lcyB2aWV3IGZvciBub3dcbiAgICAgIC8vIHBpcGVsaW5lcyxcbiAgICAgIC50YWJzKHJlcG9zLCBidWlsZENvbmZpZ3MsIGJ1aWxkcywgZGVwbG95cywgaW1hZ2VSZXBvc2l0b3JpZXMpXG4gICAgICAuYnVpbGQoKTtcblxuICAgIC8vSGF3dGlvTmF2LmFkZChwcm9qZWN0c1RhYik7XG4gIH1dKTtcblxuICBoYXd0aW9QbHVnaW5Mb2FkZXIucmVnaXN0ZXJQcmVCb290c3RyYXBUYXNrKHtcbiAgICBuYW1lOiAnS3ViZXJuZXRlc0luaXQnLFxuICAgIHRhc2s6IChuZXh0KSA9PiB7XG4gICAgICAkLmdldFNjcmlwdCgnb3Njb25zb2xlL2NvbmZpZy5qcycpXG4gICAgICAgIC5kb25lKChzY3JpcHQsIHRleHRTdGF0dXMpID0+IHtcbiAgICAgICAgICB2YXIgY29uZmlnOkt1YmVybmV0ZXNDb25maWcgPSBLdWJlcm5ldGVzLm9zQ29uZmlnID0gd2luZG93WydPUEVOU0hJRlRfQ09ORklHJ107XG4gICAgICAgICAgbG9nLmRlYnVnKFwiRmV0Y2hlZCBPQXV0aCBjb25maWc6IFwiLCBjb25maWcpO1xuICAgICAgICAgIHZhciBtYXN0ZXI6c3RyaW5nID0gY29uZmlnLm1hc3Rlcl91cmk7XG4gICAgICAgICAgaWYgKCFtYXN0ZXIgJiYgY29uZmlnLmFwaSAmJiBjb25maWcuYXBpLms4cykge1xuICAgICAgICAgICAgdmFyIG1hc3RlclVyaSA9IG5ldyBVUkkoKS5ob3N0KGNvbmZpZy5hcGkuazhzLmhvc3RQb3J0KS5wYXRoKFwiXCIpLnF1ZXJ5KFwiXCIpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5hcGkuazhzLnByb3RvKSB7XG4gICAgICAgICAgICAgIG1hc3RlclVyaS5wcm90b2NvbChjb25maWcuYXBpLms4cy5wcm90byk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXN0ZXIgPSBtYXN0ZXJVcmkudG9TdHJpbmcoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBPU09BdXRoQ29uZmlnID0gY29uZmlnLm9wZW5zaGlmdDtcbiAgICAgICAgICBHb29nbGVPQXV0aENvbmZpZyA9IGNvbmZpZy5nb29nbGU7XG4gICAgICAgICAgS2V5Y2xvYWtDb25maWcgPSBjb25maWcua2V5Y2xvYWs7XG5cbiAgICAgICAgICBpZiAoT1NPQXV0aENvbmZpZyAmJiAhbWFzdGVyKSB7XG4gICAgICAgICAgICAvLyBUT0RPIGF1dGgubWFzdGVyX3VyaSBubyBsb25nZXIgdXNlZCByaWdodD9cbiAgICAgICAgICAgIC8vIG1hc3RlciA9IE9TT0F1dGhDb25maWcubWFzdGVyX3VyaTtcbiAgICAgICAgICAgIGlmICghbWFzdGVyKSB7XG4gICAgICAgICAgICAgIHZhciBvYXV0aF9hdXRob3JpemVfdXJpID0gT1NPQXV0aENvbmZpZy5vYXV0aF9hdXRob3JpemVfdXJpO1xuICAgICAgICAgICAgICBpZiAob2F1dGhfYXV0aG9yaXplX3VyaSkge1xuICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gb2F1dGhfYXV0aG9yaXplX3VyaTtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gdGV4dC5pbmRleE9mKFwiOi8vXCIpO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBpZHggKz0gMztcbiAgICAgICAgICAgICAgICAgIGlkeCA9IHRleHQuaW5kZXhPZihcIi9cIiwgaWR4KTtcbiAgICAgICAgICAgICAgICAgIGlmIChpZHggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hc3RlciA9IHRleHQuc3Vic3RyaW5nKDAsICsraWR4KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCghS3ViZXJuZXRlcy5tYXN0ZXJVcmwgfHwgS3ViZXJuZXRlcy5tYXN0ZXJVcmwgPT09IFwiL1wiKSAmJiAoIW1hc3RlciB8fCBtYXN0ZXIgPT09IFwiL1wiKSkge1xuICAgICAgICAgICAgLy8gbGV0cyBkZWZhdWx0IHRoZSBtYXN0ZXIgdG8gdGhlIGN1cnJlbnQgcHJvdG9jb2wgYW5kIGhvc3QvcG9ydFxuICAgICAgICAgICAgLy8gaW4gY2FzZSB0aGUgbWFzdGVyIHVybCBpcyBcIi9cIiBhbmQgd2UgYXJlXG4gICAgICAgICAgICAvLyBzZXJ2aW5nIHVwIHN0YXRpYyBjb250ZW50IGZyb20gaW5zaWRlIC9hcGkvdjEvbmFtZXNwYWNlcy9kZWZhdWx0L3NlcnZpY2VzL2ZhYnJpYzggb3Igc29tZXRoaW5nIGxpa2UgdGhhdFxuICAgICAgICAgICAgdmFyIGhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuICAgICAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICAgICAgbWFzdGVyID0gbmV3IFVSSShocmVmKS5xdWVyeShcIlwiKS5wYXRoKFwiXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXN0ZXIpIHtcbiAgICAgICAgICAgIEt1YmVybmV0ZXMubWFzdGVyVXJsID0gbWFzdGVyO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmZhaWwoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgbG9nLmRlYnVnKFwiRXJyb3IgZmV0Y2hpbmcgT0FVVEggY29uZmlnOiBcIiwgcmVzcG9uc2UpO1xuICAgICAgICB9KVxuICAgICAgICAuYWx3YXlzKCgpID0+IHtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cbiAgaGF3dGlvUGx1Z2luTG9hZGVyLmFkZE1vZHVsZSgnbmdSZXNvdXJjZScpO1xuICBoYXd0aW9QbHVnaW5Mb2FkZXIuYWRkTW9kdWxlKHBsdWdpbk5hbWUpO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIEZBQlJJQzhfUFJPSkVDVF9KU09OID0gXCJmYWJyaWM4UHJvamVjdEpzb25cIjtcblxuICBmdW5jdGlvbiBieUlkKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nLmlkO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlS2V5KG5hbWVzcGFjZSwgaWQsIGtpbmQpIHtcbiAgICByZXR1cm4gKG5hbWVzcGFjZSB8fCBcIlwiKSArIFwiLVwiICsgKGtpbmQgfHwgJ3VuZGVmaW5lZCcpLnRvTG93ZXJDYXNlKCkgKyAnLScgKyAoaWQgfHwgJ3VuZGVmaW5lZCcpLnJlcGxhY2UoL1xcLi9nLCAnLScpO1xuICB9XG5cbiAgZnVuY3Rpb24gcG9wdWxhdGVLZXkoaXRlbSkge1xuICAgIHZhciByZXN1bHQgPSBpdGVtO1xuICAgIHJlc3VsdFsnX2tleSddID0gY3JlYXRlS2V5KGdldE5hbWVzcGFjZShpdGVtKSwgZ2V0TmFtZShpdGVtKSwgZ2V0S2luZChpdGVtKSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvcHVsYXRlS2V5cyhpdGVtczpBcnJheTxhbnk+KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIGFuZ3VsYXIuZm9yRWFjaChpdGVtcywgKGl0ZW0pID0+IHtcbiAgICAgIHJlc3VsdC5wdXNoKHBvcHVsYXRlS2V5KGl0ZW0pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0UG9kcyhwb2RzLCBuYW1lc3BhY2UsIGxhYmVscykge1xuICAgIHJldHVybiBwb2RzLmZpbHRlcigocG9kKSA9PiB7XG4gICAgICByZXR1cm4gZ2V0TmFtZXNwYWNlKHBvZCkgPT09IG5hbWVzcGFjZSAmJiBzZWxlY3Rvck1hdGNoZXMobGFiZWxzLCBnZXRMYWJlbHMocG9kKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG9iamVjdCB3aGljaCBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHBvZHMsIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJzLCBzZXJ2aWNlcyBhbmQgdGhlaXIgYXNzb2NpYXRpb25zXG4gICAqL1xuICBleHBvcnQgY2xhc3MgS3ViZXJuZXRlc01vZGVsU2VydmljZSB7XG4gICAgcHVibGljIGt1YmVybmV0ZXMgPSA8S3ViZXJuZXRlc1N0YXRlPiBudWxsO1xuICAgIHB1YmxpYyBhcHBzID0gW107XG4gICAgcHVibGljIHNlcnZpY2VzID0gW107XG5cbiAgICBwdWJsaWMgcmVwbGljYXRpb25jb250cm9sbGVycyA9IFtdO1xuXG4gICAgcHVibGljIGZpbHRlclJlcGxpY2F0aW9uY29udHJvbGxlcnMgPSBbXTtcblxuICAgIC8qcHVibGljIGdldCBmaWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzKCk6QXJyYXk8YW55PiB7XG4gICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVycztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGZpbHRlclJlcGxpY2F0aW9uY29udHJvbGxlcnMoZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVyczpBcnJheTxhbnk+KSB7XG4gICAgICAgIHRoaXMuZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVycyA9IGZpbHRlclJlcGxpY2F0aW9uY29udHJvbGxlcnM7XG4gICAgfSovXG5cbiAgICBwdWJsaWMgZ2V0IHJlcGxpY2F0aW9uQ29udHJvbGxlcnMoKTpBcnJheTxhbnk+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlcGxpY2F0aW9uY29udHJvbGxlcnM7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgcmVwbGljYXRpb25Db250cm9sbGVycyhyZXBsaWNhdGlvbkNvbnRyb2xsZXJzOkFycmF5PGFueT4pIHtcbiAgICAgIHRoaXMucmVwbGljYXRpb25jb250cm9sbGVycyA9IHJlcGxpY2F0aW9uQ29udHJvbGxlcnM7XG4gICAgfVxuICAgIHB1YmxpYyBwb2RzID0gW107XG4gICAgcHVibGljIGhvc3RzID0gW107XG4gICAgcHVibGljIGdldCBuYW1lc3BhY2VzKCk6QXJyYXk8c3RyaW5nPiB7XG4gICAgICByZXR1cm4gdGhpcy5rdWJlcm5ldGVzLm5hbWVzcGFjZXM7XG4gICAgfVxuICAgIC8vcHVibGljIG5hbWVzcGFjZXMgPSBbXTtcbiAgICBwdWJsaWMgcm91dGVzID0gW107XG4gICAgcHVibGljIHRlbXBsYXRlcyA9IFtdO1xuICAgIHB1YmxpYyByZWRyYXcgPSBmYWxzZTtcbiAgICBwdWJsaWMgcmVzb3VyY2VWZXJzaW9ucyA9IHt9O1xuXG4gICAgLy8gdmFyaW91cyB2aWV3cyBvbiB0aGUgZGF0YVxuICAgIHB1YmxpYyBwb2RzQnlIb3N0ID0ge307XG4gICAgcHVibGljIHNlcnZpY2VzQnlLZXkgPSB7fTtcbiAgICBwdWJsaWMgcmVwbGljYXRpb25Db250cm9sbGVyc0J5S2V5ID0ge307XG4gICAgcHVibGljIHBvZHNCeUtleSA9IHt9O1xuXG4gICAgcHVibGljIGFwcEluZm9zID0gW107XG4gICAgcHVibGljIGFwcFZpZXdzID0gW107XG4gICAgcHVibGljIGFwcEZvbGRlcnMgPSBbXTtcblxuICAgIHB1YmxpYyBmZXRjaGVkID0gZmFsc2U7XG4gICAgcHVibGljIGdldCBzaG93UnVuQnV0dG9uKCk6Ym9vbGVhbiB7XG4gICAgICBpZiAoaXNPcGVuU2hpZnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gXy5hbnkodGhpcy5zZXJ2aWNlcywgKHNlcnZpY2UpID0+IHtcbiAgICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKHNlcnZpY2UpO1xuICAgICAgICBpZiAobmFtZSA9PT0gXCJ0ZW1wbGF0ZXNcIikge1xuICAgICAgICAgIHZhciBwb2RDb3VudGVycyA9IHNlcnZpY2UuJHBvZENvdW50ZXJzO1xuICAgICAgICAgIHJldHVybiBwb2RDb3VudGVycyAmJiAocG9kQ291bnRlcnMudmFsaWQgfHwgcG9kQ291bnRlcnMucmVhZHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGJ1aWxkY29uZmlncyA9IFtdO1xuICAgIHB1YmxpYyBldmVudHMgPSBbXTtcbiAgICBwdWJsaWMgd29ya3NwYWNlcyA9IFtdO1xuICAgIHB1YmxpYyBwcm9qZWN0cyA9IFtdO1xuICAgIHB1YmxpYyBwcm9qZWN0ID0gbnVsbDtcblxuICAgIHB1YmxpYyBnZXQgc2VydmljZUFwcHMoKTpBcnJheTxhbnk+IHtcbiAgICAgIHJldHVybiBfLmZpbHRlcih0aGlzLnNlcnZpY2VzLCAocykgPT4ge1xuICAgICAgICByZXR1cm4gcy4kaG9zdCAmJiBzLiRzZXJ2aWNlVXJsICYmIHMuJHBvZENvdW50XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgJGtlZXBQb2xsaW5nKCkge1xuICAgICAgcmV0dXJuIGtlZXBQb2xsaW5nTW9kZWw7XG4gICAgfVxuXG4gICAgcHVibGljIG9yUmVkcmF3KGZsYWcpIHtcbiAgICAgIHRoaXMucmVkcmF3ID0gdGhpcy5yZWRyYXcgfHwgZmxhZztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2VydmljZShuYW1lc3BhY2UsIGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlc0J5S2V5W2NyZWF0ZUtleShuYW1lc3BhY2UsIGlkLCAnc2VydmljZScpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVwbGljYXRpb25Db250cm9sbGVyKG5hbWVzcGFjZSwgaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNCeUtleVtjcmVhdGVLZXkobmFtZXNwYWNlLCBpZCwgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcicpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UG9kKG5hbWVzcGFjZSwgaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvZHNCeUtleVtjcmVhdGVLZXkobmFtZXNwYWNlLCBpZCwgJ3BvZCcpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcG9kc0Zvck5hbWVzcGFjZShuYW1lc3BhY2UgPSB0aGlzLmN1cnJlbnROYW1lc3BhY2UoKSkge1xuICAgICAgcmV0dXJuIF8uZmlsdGVyKHRoaXMucG9kcywgeyBuYW1lc3BhY2U6IG5hbWVzcGFjZSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnVpbGRDb25maWcobmFtZSkge1xuICAgICAgcmV0dXJuIF8uZmluZCh0aGlzLmJ1aWxkY29uZmlncywgeyAkbmFtZTogbmFtZSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UHJvamVjdChuYW1lLCBucyA9IHRoaXMuY3VycmVudE5hbWVzcGFjZSgpKSB7XG4gICAgICB2YXIgYnVpbGRDb25maWcgPSB0aGlzLnByb2plY3Q7XG4gICAgICBpZiAoIWJ1aWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciB0ZXh0ID0gbG9jYWxTdG9yYWdlW0ZBQlJJQzhfUFJPSkVDVF9KU09OXTtcbiAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYnVpbGRDb25maWcgPSBhbmd1bGFyLmZyb21Kc29uKHRleHQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKFwiQ291bGQgbm90IHBhcnNlIGpzb24gZm9yIFwiICsgRkFCUklDOF9QUk9KRUNUX0pTT04gKyBcIi4gV2FzOiBcIiArIHRleHQgKyBcIi4gXCIgKyBlLCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChidWlsZENvbmZpZyAmJiBucyAhPSBnZXROYW1lc3BhY2UoYnVpbGRDb25maWcpICYmIG5hbWUgIT0gYnVpbGRDb25maWcuJG5hbWUpIHtcbiAgICAgICAgYnVpbGRDb25maWcgPSB0aGlzLmdldEJ1aWxkQ29uZmlnKG5hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJ1aWxkQ29uZmlnO1xuICAgIH1cblxuXG4gICAgcHVibGljIHNldFByb2plY3QoYnVpbGRDb25maWcpIHtcbiAgICAgIHRoaXMucHJvamVjdCA9IGJ1aWxkQ29uZmlnO1xuICAgICAgaWYgKGJ1aWxkQ29uZmlnKSB7XG4gICAgICAgIC8vIGxldHMgc3RvcmUgaW4gbG9jYWwgc3RvcmFnZVxuICAgICAgICB2YXIgbG9jYWxTdG9yYWdlID0gaW5qZWN0KFwibG9jYWxTdG9yYWdlXCIpO1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlKSB7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlW0ZBQlJJQzhfUFJPSkVDVF9KU09OXSA9IGFuZ3VsYXIudG9Kc29uKGJ1aWxkQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgbmFtZXNwYWNlIG9yIHRoZSBkZWZhdWx0IG5hbWVzcGFjZVxuICAgICAqL1xuICAgIHB1YmxpYyBjdXJyZW50TmFtZXNwYWNlKCkge1xuICAgICAgdmFyIGFuc3dlciA9IG51bGw7XG4gICAgICBpZiAodGhpcy5rdWJlcm5ldGVzKSB7XG4gICAgICAgIGFuc3dlciA9IHRoaXMua3ViZXJuZXRlcy5zZWxlY3RlZE5hbWVzcGFjZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhbnN3ZXIgfHwgZGVmYXVsdE5hbWVzcGFjZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlSWNvblVybEFuZEFwcEluZm8oZW50aXR5LCBuYW1lRmllbGQ6IHN0cmluZykge1xuICAgICAgdmFyIGFuc3dlciA9IG51bGw7XG4gICAgICB2YXIgaWQgPSBnZXROYW1lKGVudGl0eSk7XG4gICAgICBlbnRpdHkuJGljb25VcmwgPSBDb3JlLnBhdGhHZXQoZW50aXR5LCBbJ21ldGFkYXRhJywgJ2Fubm90YXRpb25zJywgJ2ZhYnJpYzguJyArIGlkICsgJy9pY29uVXJsJ10pO1xuICAgICAgZW50aXR5LiRpbmZvID0gQ29yZS5wYXRoR2V0KGVudGl0eSwgWydtZXRhZGF0YScsICdhbm5vdGF0aW9ucycsICdmYWJyaWM4LicgKyBpZCArICcvc3VtbWFyeSddKTtcbiAgICAgIGlmIChlbnRpdHkuJGljb25VcmwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlkICYmIG5hbWVGaWVsZCkge1xuICAgICAgICAodGhpcy50ZW1wbGF0ZXMgfHwgW10pLmZvckVhY2goKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgICAgdmFyIG1ldGFkYXRhID0gdGVtcGxhdGUubWV0YWRhdGE7XG4gICAgICAgICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgICAgICB2YXIgYW5ub3RhdGlvbnMgPSBtZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIHZhciBpY29uVXJsID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LlwiICsgaWQgKyBcIi9pY29uVXJsXCJdIHx8IGFubm90YXRpb25zW1wiZmFicmljOC9pY29uVXJsXCJdO1xuICAgICAgICAgICAgaWYgKGljb25VcmwpIHtcbiAgICAgICAgICAgICAgKHRlbXBsYXRlLm9iamVjdHMgfHwgW10pLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgZW50aXR5TmFtZSA9IGdldE5hbWUoaXRlbSk7XG4gICAgICAgICAgICAgICAgaWYgKGlkID09PSBlbnRpdHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICBlbnRpdHkuJGljb25VcmwgPSBpY29uVXJsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgKHRoaXMuYXBwSW5mb3MgfHwgW10pLmZvckVhY2goKGFwcEluZm8pID0+IHtcbiAgICAgICAgICB2YXIgaWNvblBhdGggPSBhcHBJbmZvLmljb25QYXRoO1xuICAgICAgICAgIGlmIChpY29uUGF0aCAmJiAhYW5zd2VyICYmIGljb25QYXRoICE9PSBcIm51bGxcIikge1xuICAgICAgICAgICAgdmFyIGljb25VcmwgPSBnaXRQYXRoVG9VcmwoaWNvblBhdGgpO1xuICAgICAgICAgICAgdmFyIGlkcyA9IENvcmUucGF0aEdldChhcHBJbmZvLCBbXCJuYW1lc1wiLCBuYW1lRmllbGRdKTtcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChpZHMsIChhcHBJZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoYXBwSWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgZW50aXR5LiRpY29uVXJsID0gaWNvblVybDtcbiAgICAgICAgICAgICAgICBlbnRpdHkuYXBwUGF0aCA9IGFwcEluZm8uYXBwUGF0aDtcbiAgICAgICAgICAgICAgICBlbnRpdHkuJGluZm8gPSBhcHBJbmZvO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFlbnRpdHkuJGljb25VcmwpIHtcbiAgICAgICAgZW50aXR5LiRpY29uVXJsID0gZGVmYXVsdEljb25Vcmw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG1heWJlSW5pdCgpIHtcbiAgICAgIHRoaXMuZmV0Y2hlZCA9IHRydWU7XG4gICAgICB0aGlzLnNlcnZpY2VzQnlLZXkgPSB7fTtcbiAgICAgIHRoaXMucG9kc0J5S2V5ID0ge307XG4gICAgICB0aGlzLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNCeUtleSA9IHt9O1xuXG4gICAgICB0aGlzLnBvZHMuZm9yRWFjaCgocG9kKSA9PiB7XG4gICAgICAgIGlmICghcG9kLmtpbmQpIHBvZC5raW5kID0gXCJQb2RcIjtcbiAgICAgICAgdGhpcy5wb2RzQnlLZXlbcG9kLl9rZXldID0gcG9kO1xuICAgICAgICB2YXIgaG9zdCA9IGdldEhvc3QocG9kKTtcbiAgICAgICAgcG9kLiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhnZXRMYWJlbHMocG9kKSk7XG4gICAgICAgIGlmIChob3N0KSB7XG4gICAgICAgICAgcG9kLiRsYWJlbHNUZXh0ICs9IGxhYmVsRmlsdGVyVGV4dFNlcGFyYXRvciArIFwiaG9zdD1cIiArIGhvc3Q7XG4gICAgICAgIH1cbiAgICAgICAgcG9kLiRpY29uVXJsID0gZGVmYXVsdEljb25Vcmw7XG4gICAgICAgIHRoaXMuZGlzY292ZXJQb2RDb25uZWN0aW9ucyhwb2QpO1xuICAgICAgICBwb2QuJGNvbnRhaW5lclBvcnRzID0gW107XG5cbiAgICAgICAgdmFyIHBvZFN0YXR1cyA9IHBvZC5zdGF0dXMgfHwge307XG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBwb2RTdGF0dXMuc3RhcnRUaW1lO1xuICAgICAgICBwb2QuJHN0YXJ0VGltZSA9IG51bGw7XG4gICAgICAgIGlmIChzdGFydFRpbWUpIHtcbiAgICAgICAgICBwb2QuJHN0YXJ0VGltZSA9IG5ldyBEYXRlKHN0YXJ0VGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNyZWF0ZWRUaW1lID0gZ2V0Q3JlYXRpb25UaW1lc3RhbXAocG9kKTtcbiAgICAgICAgcG9kLiRjcmVhdGVkVGltZSA9IG51bGw7XG4gICAgICAgIHBvZC4kYWdlID0gbnVsbDtcbiAgICAgICAgaWYgKGNyZWF0ZWRUaW1lKSB7XG4gICAgICAgICAgcG9kLiRjcmVhdGVkVGltZSA9IG5ldyBEYXRlKGNyZWF0ZWRUaW1lKTtcbiAgICAgICAgICBwb2QuJGFnZSA9IGh1bWFuZGF0ZS5yZWxhdGl2ZVRpbWUocG9kLiRjcmVhdGVkVGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlYWR5ID0gaXNSZWFkeShwb2QpO1xuICAgICAgICBwb2QuJHJlYWR5ID0gcmVhZHk7XG4gICAgICAgIHBvZC4kc3RhdHVzQ3NzID0gc3RhdHVzVGV4dFRvQ3NzQ2xhc3MocG9kU3RhdHVzLnBoYXNlLCByZWFkeSk7XG5cbiAgICAgICAgdmFyIG1heFJlc3RhcnRDb3VudCA9IDA7XG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChDb3JlLnBhdGhHZXQocG9kLCBbXCJzdGF0dXNcIiwgXCJjb250YWluZXJTdGF0dXNlc1wiXSksIChzdGF0dXMpID0+IHtcbiAgICAgICAgICB2YXIgcmVzdGFydENvdW50ID0gc3RhdHVzLnJlc3RhcnRDb3VudDtcbiAgICAgICAgICBpZiAocmVzdGFydENvdW50KSB7XG4gICAgICAgICAgICBpZiAocmVzdGFydENvdW50ID4gbWF4UmVzdGFydENvdW50KSB7XG4gICAgICAgICAgICAgIG1heFJlc3RhcnRDb3VudCA9IHJlc3RhcnRDb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobWF4UmVzdGFydENvdW50ICkge1xuICAgICAgICAgIHBvZC4kcmVzdGFydENvdW50ID0gbWF4UmVzdGFydENvdW50O1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbWFnZU5hbWVzID0gXCJcIjtcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKENvcmUucGF0aEdldChwb2QsIFtcInNwZWNcIiwgXCJjb250YWluZXJzXCJdKSwgKGNvbnRhaW5lcikgPT4ge1xuICAgICAgICAgIHZhciBpbWFnZSA9IGNvbnRhaW5lci5pbWFnZTtcbiAgICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgIGlmICghaW1hZ2VOYW1lcykge1xuICAgICAgICAgICAgICBpbWFnZU5hbWVzID0gaW1hZ2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpbWFnZU5hbWVzID0gaW1hZ2VOYW1lcyArIFwiIFwiICsgaW1hZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaWR4ID0gaW1hZ2UubGFzdEluZGV4T2YoXCI6XCIpO1xuICAgICAgICAgICAgaWYgKGlkeCA+IDApIHtcbiAgICAgICAgICAgICAgaW1hZ2UgPSBpbWFnZS5zdWJzdHJpbmcoMCwgaWR4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwYXRocyA9IGltYWdlLnNwbGl0KFwiL1wiLCAzKTtcbiAgICAgICAgICAgIGlmIChwYXRocy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdmFyIGFuc3dlciA9IG51bGw7XG4gICAgICAgICAgICAgIGlmIChwYXRocy5sZW5ndGggPT0gMykge1xuICAgICAgICAgICAgICAgIGFuc3dlciA9IHBhdGhzWzFdICsgXCIvXCIgKyBwYXRoc1syXTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXRocy5sZW5ndGggPT0gMikge1xuICAgICAgICAgICAgICAgIGFuc3dlciA9IHBhdGhzWzBdICsgXCIvXCIgKyBwYXRoc1sxXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbnN3ZXIgPSBwYXRoc1swXSArIFwiL1wiICsgcGF0aHNbMV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29udGFpbmVyLiRpbWFnZUxpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJodHRwczovL3JlZ2lzdHJ5Lmh1Yi5kb2NrZXIuY29tL3UvXCIsIGFuc3dlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChjb250YWluZXIucG9ydHMsIChwb3J0KSA9PiB7XG4gICAgICAgICAgICB2YXIgY29udGFpbmVyUG9ydCA9IHBvcnQuY29udGFpbmVyUG9ydDtcbiAgICAgICAgICAgIGlmIChjb250YWluZXJQb3J0KSB7XG4gICAgICAgICAgICAgIHBvZC4kY29udGFpbmVyUG9ydHMucHVzaChjb250YWluZXJQb3J0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBvZC4kaW1hZ2VOYW1lcyA9IGltYWdlTmFtZXM7XG4gICAgICAgIHZhciBwb2RTdGF0dXMgPSBwb2RTdGF0dXM7XG4gICAgICAgIHZhciBwb2RTcGVjID0gKHBvZC5zcGVjIHx8IHt9KTtcbiAgICAgICAgcG9kLiRwb2RJUCA9IHBvZFN0YXR1cy5wb2RJUDtcbiAgICAgICAgcG9kLiRob3N0ID0gcG9kU3BlYy5ob3N0IHx8IHBvZFNwZWMubm9kZU5hbWUgfHwgcG9kU3RhdHVzLmhvc3RJUDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNlcnZpY2VzLmZvckVhY2goKHNlcnZpY2UpID0+IHtcbiAgICAgICAgaWYgKCFzZXJ2aWNlLmtpbmQpIHNlcnZpY2Uua2luZCA9IFwiU2VydmljZVwiO1xuICAgICAgICB0aGlzLnNlcnZpY2VzQnlLZXlbc2VydmljZS5fa2V5XSA9IHNlcnZpY2U7XG4gICAgICAgIHZhciBzZWxlY3RvciA9IGdldFNlbGVjdG9yKHNlcnZpY2UpO1xuICAgICAgICBzZXJ2aWNlLiRwb2RzID0gW107XG4gICAgICAgIGlmICghc2VydmljZS4kcG9kQ291bnRlcnMpIHtcbiAgICAgICAgICBzZXJ2aWNlLiRwb2RDb3VudGVycyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHZhciBwb2RMaW5rVXJsID0gVXJsSGVscGVycy5qb2luKFwiL2t1YmVybmV0ZXMvbmFtZXNwYWNlXCIsIHNlcnZpY2UubWV0YWRhdGEubmFtZXNwYWNlLCBcInBvZHNcIik7XG4gICAgICAgIF8uYXNzaWduKHNlcnZpY2UuJHBvZENvdW50ZXJzLCBzZWxlY3RvciA/IGNyZWF0ZVBvZENvdW50ZXJzKHNlbGVjdG9yLCB0aGlzLnBvZHMsIHNlcnZpY2UuJHBvZHMsIEt1YmVybmV0ZXMubGFiZWxzVG9TdHJpbmcoc2VsZWN0b3IsIFwiLFwiKSwgcG9kTGlua1VybCkgOiB7fSk7XG4gICAgICAgIHNlcnZpY2UuJHBvZENvdW50ID0gc2VydmljZS4kcG9kcy5sZW5ndGg7XG5cbiAgICAgICAgdmFyIHNlbGVjdGVkUG9kcyA9IHNlcnZpY2UuJHBvZHM7XG4gICAgICAgIHNlcnZpY2UuY29ubmVjdFRvID0gc2VsZWN0ZWRQb2RzLm1hcCgocG9kKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBvZC5fa2V5O1xuICAgICAgICB9KS5qb2luKCcsJyk7XG4gICAgICAgIHNlcnZpY2UuJGxhYmVsc1RleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKGdldExhYmVscyhzZXJ2aWNlKSk7XG4gICAgICAgIHRoaXMudXBkYXRlSWNvblVybEFuZEFwcEluZm8oc2VydmljZSwgXCJzZXJ2aWNlTmFtZXNcIik7XG4gICAgICAgIHZhciBzcGVjID0gc2VydmljZS5zcGVjIHx8IHt9O1xuICAgICAgICBzZXJ2aWNlLiRwb3J0YWxJUCA9IHNwZWMucG9ydGFsSVA7XG4gICAgICAgIHNlcnZpY2UuJHNlbGVjdG9yVGV4dCA9IEt1YmVybmV0ZXMubGFiZWxzVG9TdHJpbmcoc3BlYy5zZWxlY3Rvcik7XG4gICAgICAgIHZhciBwb3J0cyA9IF8ubWFwKHNwZWMucG9ydHMgfHwgW10sIFwicG9ydFwiKTtcbiAgICAgICAgc2VydmljZS4kcG9ydHMgPSBwb3J0cztcbiAgICAgICAgc2VydmljZS4kcG9ydHNUZXh0ID0gcG9ydHMuam9pbihcIiwgXCIpO1xuICAgICAgICB2YXIgaWNvblVybCA9IHNlcnZpY2UuJGljb25Vcmw7XG4gICAgICAgIGlmIChpY29uVXJsICYmIHNlbGVjdGVkUG9kcykge1xuICAgICAgICAgIHNlbGVjdGVkUG9kcy5mb3JFYWNoKChwb2QpID0+IHtcbiAgICAgICAgICAgIHBvZC4kaWNvblVybCA9IGljb25Vcmw7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2VydmljZS4kc2VydmljZVVybCA9IHNlcnZpY2VMaW5rVXJsKHNlcnZpY2UpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucmVwbGljYXRpb25Db250cm9sbGVycy5mb3JFYWNoKChyZXBsaWNhdGlvbkNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgaWYgKCFyZXBsaWNhdGlvbkNvbnRyb2xsZXIua2luZCkgcmVwbGljYXRpb25Db250cm9sbGVyLmtpbmQgPSBcIlJlcGxpY2F0aW9uQ29udHJvbGxlclwiO1xuICAgICAgICB0aGlzLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNCeUtleVtyZXBsaWNhdGlvbkNvbnRyb2xsZXIuX2tleV0gPSByZXBsaWNhdGlvbkNvbnRyb2xsZXJcbiAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihyZXBsaWNhdGlvbkNvbnRyb2xsZXIpO1xuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHMgPSBbXTtcblxuICAgICAgICBpZihpc0ZpbHRlclJDKHJlcGxpY2F0aW9uQ29udHJvbGxlcikgJiYgIWlzSW5jbHVkZSh0aGlzLmZpbHRlclJlcGxpY2F0aW9uY29udHJvbGxlcnMsIHJlcGxpY2F0aW9uQ29udHJvbGxlcikpXG4gICAgICAgICAgIHRoaXMuZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVycy5wdXNoKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XG5cbiAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyLiRwb2RDb3VudGVycyA9IHNlbGVjdG9yID8gY3JlYXRlUG9kQ291bnRlcnMoc2VsZWN0b3IsIHRoaXMucG9kcywgcmVwbGljYXRpb25Db250cm9sbGVyLiRwb2RzKSA6IG51bGw7XG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kcG9kQ291bnQgPSByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHMubGVuZ3RoO1xuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHJlcGxpY2FzID0gKHJlcGxpY2F0aW9uQ29udHJvbGxlci5zcGVjIHx8IHt9KS5yZXBsaWNhcztcblxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJG9yYWNsZU5hbWUgPSBnZXRPcmFjbGVOYW1lKGdldE5hbWUocmVwbGljYXRpb25Db250cm9sbGVyKSk7XG4gICAgICAgIC8vY29uc29sZS5sb2coZ2V0TmFtZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcbiAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyLiRvcmFjbGVTdGF0dXMgPSBnZXRPcmFjbGVTdGF0dXMoZ2V0TGFiZWxzKHJlcGxpY2F0aW9uQ29udHJvbGxlcikpO1xuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJGV4dHJhY3RTdGF0dXMgPSBnZXRFeHRyYWN0U3RhdHVzKGdldExhYmVscyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcblxuXG4gICAgICAgIHZhciBzZWxlY3RlZFBvZHMgPSByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHM7XG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci5jb25uZWN0VG8gPSBzZWxlY3RlZFBvZHMubWFwKChwb2QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcG9kLl9rZXk7XG4gICAgICAgIH0pLmpvaW4oJywnKTtcbiAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyLiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhnZXRMYWJlbHMocmVwbGljYXRpb25Db250cm9sbGVyKSk7XG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci5tZXRhZGF0YS5sYWJlbHMgPSBLdWJlcm5ldGVzLmxhYmVsVG9DaGluZXNlKGdldExhYmVscyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcbiAgICAgICAgdGhpcy51cGRhdGVJY29uVXJsQW5kQXBwSW5mbyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIsIFwicmVwbGljYXRpb25Db250cm9sbGVyTmFtZXNcIik7XG4gICAgICAgIHZhciBpY29uVXJsID0gIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kaWNvblVybDtcbiAgICAgICAgaWYgKGljb25VcmwgJiYgc2VsZWN0ZWRQb2RzKSB7XG4gICAgICAgICAgc2VsZWN0ZWRQb2RzLmZvckVhY2goKHBvZCkgPT4ge1xuICAgICAgICAgICAgcG9kLiRpY29uVXJsID0gaWNvblVybDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHNlcnZpY2VzIG1heSBub3QgbWFwIHRvIGFuIGljb24gYnV0IHRoZWlyIHBvZHMgbWF5IGRvIHZpYSB0aGUgUkNcbiAgICAgIC8vIHNvIGxldHMgZGVmYXVsdCBpdC4uLlxuICAgICAgdGhpcy5zZXJ2aWNlcy5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XG4gICAgICAgIHZhciBpY29uVXJsID0gc2VydmljZS4kaWNvblVybDtcbiAgICAgICAgdmFyIHNlbGVjdGVkUG9kcyA9IHNlcnZpY2UuJHBvZHM7XG4gICAgICAgIGlmIChzZWxlY3RlZFBvZHMpIHtcbiAgICAgICAgICBpZiAoIWljb25VcmwgfHwgaWNvblVybCA9PT0gZGVmYXVsdEljb25VcmwpIHtcbiAgICAgICAgICAgIGljb25VcmwgPSBudWxsO1xuICAgICAgICAgICAgc2VsZWN0ZWRQb2RzLmZvckVhY2goKHBvZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWljb25VcmwpIHtcbiAgICAgICAgICAgICAgICBpY29uVXJsID0gcG9kLiRpY29uVXJsO1xuICAgICAgICAgICAgICAgIGlmIChpY29uVXJsKSB7XG4gICAgICAgICAgICAgICAgICBzZXJ2aWNlLiRpY29uVXJsID0gaWNvblVybDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudXBkYXRlQXBwcygpO1xuXG4gICAgICB2YXIgcG9kc0J5SG9zdCA9IHt9O1xuICAgICAgdGhpcy5wb2RzLmZvckVhY2goKHBvZCkgPT4ge1xuICAgICAgICB2YXIgaG9zdCA9IGdldEhvc3QocG9kKTtcbiAgICAgICAgdmFyIHBvZHNGb3JIb3N0ID0gcG9kc0J5SG9zdFtob3N0XTtcbiAgICAgICAgaWYgKCFwb2RzRm9ySG9zdCkge1xuICAgICAgICAgIHBvZHNGb3JIb3N0ID0gW107XG4gICAgICAgICAgcG9kc0J5SG9zdFtob3N0XSA9IHBvZHNGb3JIb3N0O1xuICAgICAgICB9XG4gICAgICAgIHBvZHNGb3JIb3N0LnB1c2gocG9kKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wb2RzQnlIb3N0ID0gcG9kc0J5SG9zdDtcblxuICAgICAgdmFyIHRtcEhvc3RzID0gW107XG4gICAgICBmb3IgKHZhciBob3N0S2V5IGluIHBvZHNCeUhvc3QpIHtcbiAgICAgICAgdmFyIGhvc3RQb2RzID0gW107XG4gICAgICAgIHZhciBwb2RDb3VudGVycyA9IGNyZWF0ZVBvZENvdW50ZXJzKChwb2QpID0+IGdldEhvc3QocG9kKSA9PT0gaG9zdEtleSwgdGhpcy5wb2RzLCBob3N0UG9kcywgXCJob3N0PVwiICsgaG9zdEtleSk7XG4gICAgICAgIHZhciBob3N0SVAgPSBudWxsO1xuICAgICAgICBpZiAoaG9zdFBvZHMubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIHBvZCA9IGhvc3RQb2RzWzBdO1xuICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBwb2Quc3RhdHVzO1xuICAgICAgICAgIGlmIChjdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICAgIGhvc3RJUCA9IGN1cnJlbnRTdGF0ZS5ob3N0SVA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBob3N0RGV0YWlscyA9IHtcbiAgICAgICAgICBuYW1lOiBob3N0S2V5LFxuICAgICAgICAgIGlkOiBob3N0S2V5LFxuICAgICAgICAgIGVsZW1lbnRJZDogaG9zdEtleS5yZXBsYWNlKC9cXC4vZywgJ18nKSxcbiAgICAgICAgICBob3N0SVA6IGhvc3RJUCxcbiAgICAgICAgICBwb2RzOiBob3N0UG9kcyxcbiAgICAgICAgICBraW5kOiBcIkhvc3RcIixcbiAgICAgICAgICAgICRwb2RDb3VudGVyczogcG9kQ291bnRlcnMsXG4gICAgICAgICAgICAkaWNvblVybDogaG9zdEljb25VcmxcbiAgICAgICAgfTtcbiAgICAgICAgdG1wSG9zdHMucHVzaChob3N0RGV0YWlscyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaG9zdHMgPSB0bXBIb3N0cztcblxuICAgICAgZW5yaWNoQnVpbGRDb25maWdzKHRoaXMuYnVpbGRjb25maWdzKTtcbiAgICAgIGVucmljaEV2ZW50cyh0aGlzLmV2ZW50cywgdGhpcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUFwcHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBsZXRzIGNyZWF0ZSB0aGUgYXBwIHZpZXdzIGJ5IHRyeWluZyB0byBqb2luIGNvbnRyb2xsZXJzIC8gc2VydmljZXMgLyBwb2RzIHRoYXQgYXJlIHJlbGF0ZWRcbiAgICAgICAgdmFyIGFwcFZpZXdzID0gW107XG5cbiAgICAgICAgdGhpcy5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmZvckVhY2goKHJlcGxpY2F0aW9uQ29udHJvbGxlcikgPT4ge1xuICAgICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpO1xuICAgICAgICAgIHZhciAkaWNvblVybCA9IHJlcGxpY2F0aW9uQ29udHJvbGxlci4kaWNvblVybDtcbiAgICAgICAgICBhcHBWaWV3cy5wdXNoKHtcbiAgICAgICAgICAgIGFwcFBhdGg6IFwiL2R1bW15UGF0aC9cIiArIG5hbWUsXG4gICAgICAgICAgICAkbmFtZTogbmFtZSxcbiAgICAgICAgICAgICRpbmZvOiB7XG4gICAgICAgICAgICAgICRpY29uVXJsOiAkaWNvblVybFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICRpY29uVXJsOiAkaWNvblVybCxcbiAgICAgICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcnM6IFtyZXBsaWNhdGlvbkNvbnRyb2xsZXJdLFxuICAgICAgICAgICAgcG9kczogcmVwbGljYXRpb25Db250cm9sbGVyLiRwb2RzIHx8IFtdLFxuICAgICAgICAgICAgc2VydmljZXM6IFtdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBub01hdGNoZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlcy5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XG4gICAgICAgICAgLy8gbm93IGxldHMgc2VlIGlmIHdlIGNhbiBmaW5kIGFuIGFwcCB3aXRoIGFuIFJDIG9mIHRoZSBzYW1lIHNlbGVjdG9yXG4gICAgICAgICAgdmFyIG1hdGNoZXNBcHAgPSBudWxsO1xuICAgICAgICAgIGFwcFZpZXdzLmZvckVhY2goKGFwcFZpZXcpID0+IHtcbiAgICAgICAgICAgIGFwcFZpZXcucmVwbGljYXRpb25Db250cm9sbGVycy5mb3JFYWNoKChyZXBsaWNhdGlvbkNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgdmFyIHJlcFNlbGVjdG9yID0gZ2V0U2VsZWN0b3IocmVwbGljYXRpb25Db250cm9sbGVyKTtcbiAgICAgICAgICAgICAgaWYgKHJlcFNlbGVjdG9yICYmXG4gICAgICAgICAgICAgICAgICBzZWxlY3Rvck1hdGNoZXMocmVwU2VsZWN0b3IsIGdldFNlbGVjdG9yKHNlcnZpY2UpKSAmJlxuICAgICAgICAgICAgICAgICAgZ2V0TmFtZXNwYWNlKHNlcnZpY2UpID09PSBnZXROYW1lc3BhY2UocmVwbGljYXRpb25Db250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZXNBcHAgPSBhcHBWaWV3O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChtYXRjaGVzQXBwKSB7XG4gICAgICAgICAgICBtYXRjaGVzQXBwLnNlcnZpY2VzLnB1c2goc2VydmljZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vTWF0Y2hlcy5wdXNoKHNlcnZpY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvZy5kZWJ1ZyhcIm5vIG1hdGNoZXM6IFwiLCBub01hdGNoZXMpO1xuICAgICAgICBub01hdGNoZXMuZm9yRWFjaCgoc2VydmljZSkgPT4ge1xuICAgICAgICAgIHZhciBhcHBWaWV3ID0gXy5maW5kKGFwcFZpZXdzLCAoYXBwVmlldykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIF8uYW55KGFwcFZpZXcucmVwbGljYXRpb25Db250cm9sbGVycywgKHJjKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBfLnN0YXJ0c1dpdGgoZ2V0TmFtZShyYyksIGdldE5hbWUoc2VydmljZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGFwcFZpZXcpIHtcbiAgICAgICAgICAgIGFwcFZpZXcuc2VydmljZXMucHVzaChzZXJ2aWNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyICRpY29uVXJsID0gc2VydmljZS4kaWNvblVybDtcbiAgICAgICAgICAgIGFwcFZpZXdzLnB1c2goe1xuICAgICAgICAgICAgICBhcHBQYXRoOiBcIi9kdW1teVBhdGgvXCIgKyBuYW1lLFxuICAgICAgICAgICAgICAkbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgJGluZm86IHtcbiAgICAgICAgICAgICAgICAkaWNvblVybDogJGljb25VcmxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAkaWNvblVybDogJGljb25VcmwsXG4gICAgICAgICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcnM6IFtdLFxuICAgICAgICAgICAgICBwb2RzOiBzZXJ2aWNlLiRwb2RzIHx8IFtdLFxuICAgICAgICAgICAgICBzZXJ2aWNlczogW3NlcnZpY2VdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaCh0aGlzLnJvdXRlcywgKHJvdXRlKSA9PiB7XG4gICAgICAgICAgdmFyIG1ldGFkYXRhID0gcm91dGUubWV0YWRhdGEgfHwge307XG4gICAgICAgICAgdmFyIHNwZWMgPSByb3V0ZS5zcGVjIHx8IHt9O1xuICAgICAgICAgIHZhciBzZXJ2aWNlTmFtZSA9IENvcmUucGF0aEdldChzcGVjLCBbXCJ0b1wiLCBcIm5hbWVcIl0pO1xuICAgICAgICAgIHZhciBob3N0ID0gc3BlYy5ob3N0O1xuICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2Uocm91dGUpO1xuICAgICAgICAgIGlmIChzZXJ2aWNlTmFtZSAmJiBob3N0KSB7XG4gICAgICAgICAgICB2YXIgc2VydmljZSA9IHRoaXMuZ2V0U2VydmljZShuYW1lc3BhY2UsIHNlcnZpY2VOYW1lKTtcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlKSB7XG4gICAgICAgICAgICAgIHNlcnZpY2UuJGhvc3QgPSBob3N0O1xuXG4gICAgICAgICAgICAgIC8vIFRPRE8gd2UgY291bGQgdXNlIHNvbWUgYW5ub3RhdGlvbnMgLyBtZXRhZGF0YSB0byBkZWR1Y2Ugd2hhdCBVUkwgd2Ugc2hvdWxkIHVzZSB0byBvcGVuIHRoaXNcbiAgICAgICAgICAgICAgLy8gc2VydmljZSBpbiB0aGUgY29uc29sZS4gRm9yIG5vdyBqdXN0IGFzc3VtZSBpdHMgaHR0cDpcblxuICAgICAgICAgICAgICBpZiAoaG9zdCkge1xuICAgICAgICAgICAgICAgIHZhciBob3N0VXJsID0gIGhvc3Q7XG4gICAgICAgICAgICAgICAgaWYgKGhvc3RVcmwuaW5kZXhPZihcIjovL1wiKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgIGhvc3RVcmwgPSBcImh0dHA6Ly9cIiArIGhvc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlcnZpY2UuJGNvbm5lY3RVcmwgPSBVcmxIZWxwZXJzLmpvaW4oaG9zdFVybCwgIFwiL1wiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIFRPRE8gZGVmaW5pdGVseSBuZWVkIHRoYXQgYW5ub3RhdGlvbiwgdGVtcCBoYWNrIGZvciBhcGltYW4gbGlua1xuICAgICAgICAgICAgICBpZiAoZ2V0TmFtZShzZXJ2aWNlKSA9PT0gJ2FwaW1hbicgJiYgaG9zdCkge1xuICAgICAgICAgICAgICAgIHNlcnZpY2UuJGNvbm5lY3RVcmwgPSAoPGFueT4gbmV3IFVSSSgpLmhvc3Qoc2VydmljZS4kaG9zdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGF0aCgnYXBpbWFudWkvaW5kZXguaHRtbCcpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5xdWVyeSh7fSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaGFzaChVUkkuZW5jb2RlKGFuZ3VsYXIudG9Kc29uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tUbzogbmV3IFVSSSgpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogSGF3dGlvT0F1dGguZ2V0T0F1dGhUb2tlbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpKS50b1N0cmluZygpO1xuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkNvdWxkIG5vdCBmaW5kIHNlcnZpY2UgXCIgKyBzZXJ2aWNlTmFtZSArIFwiIG5hbWVzcGFjZSBcIiArIG5hbWVzcGFjZSArIFwiIGZvciByb3V0ZTogXCIgKyBtZXRhZGF0YS5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFwcFZpZXdzID0gXy5zb3J0QnkocG9wdWxhdGVLZXlzKGFwcFZpZXdzKSwgKGFwcFZpZXcpID0+IGFwcFZpZXcuX2tleSk7XG5cbiAgICAgICAgQXJyYXlIZWxwZXJzLnN5bmModGhpcy5hcHBWaWV3cywgYXBwVmlld3MsICckbmFtZScpO1xuXG4gICAgICAgIGlmICh0aGlzLmFwcEluZm9zICYmIHRoaXMuYXBwVmlld3MpIHtcbiAgICAgICAgICB2YXIgZm9sZGVyTWFwID0ge307XG4gICAgICAgICAgdmFyIGZvbGRlcnMgPSBbXTtcbiAgICAgICAgICB2YXIgYXBwTWFwID0ge307XG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHRoaXMuYXBwSW5mb3MsIChhcHBJbmZvKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWFwcEluZm8uJGljb25VcmwgJiYgYXBwSW5mby5pY29uUGF0aCAmJiBhcHBJbmZvLmljb25QYXRoICE9PSBcIm51bGxcIikge1xuICAgICAgICAgICAgICBhcHBJbmZvLiRpY29uVXJsID0gZ2l0UGF0aFRvVXJsKGFwcEluZm8uaWNvblBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGFwcFBhdGggPSBhcHBJbmZvLmFwcFBhdGg7XG4gICAgICAgICAgICBpZiAoYXBwUGF0aCkge1xuICAgICAgICAgICAgICBhcHBNYXBbYXBwUGF0aF0gPSBhcHBJbmZvO1xuICAgICAgICAgICAgICB2YXIgaWR4ID0gYXBwUGF0aC5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgICAgICAgICAgIHZhciBmb2xkZXJQYXRoID0gXCJcIjtcbiAgICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZm9sZGVyUGF0aCA9IGFwcFBhdGguc3Vic3RyaW5nKDAsIGlkeCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZm9sZGVyUGF0aCA9IENvcmUudHJpbUxlYWRpbmcoZm9sZGVyUGF0aCwgXCIvXCIpO1xuICAgICAgICAgICAgICB2YXIgZm9sZGVyID0gZm9sZGVyTWFwW2ZvbGRlclBhdGhdO1xuICAgICAgICAgICAgICBpZiAoIWZvbGRlcikge1xuICAgICAgICAgICAgICAgIGZvbGRlciA9IHtcbiAgICAgICAgICAgICAgICAgIHBhdGg6IGZvbGRlclBhdGgsXG4gICAgICAgICAgICAgICAgICBleHBhbmRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGFwcHM6IFtdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBmb2xkZXJzLnB1c2goZm9sZGVyKTtcbiAgICAgICAgICAgICAgICBmb2xkZXJNYXBbZm9sZGVyUGF0aF0gPSBmb2xkZXI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZm9sZGVyLmFwcHMucHVzaChhcHBJbmZvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmFwcEZvbGRlcnMgPSBfLnNvcnRCeShmb2xkZXJzLCBcInBhdGhcIik7XG5cbiAgICAgICAgICB2YXIgYXBwcyA9IFtdO1xuICAgICAgICAgIHZhciBkZWZhdWx0SW5mbyA9IHtcbiAgICAgICAgICAgICRpY29uVXJsOiBkZWZhdWx0SWNvblVybFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2godGhpcy5hcHBWaWV3cywgKGFwcFZpZXc6YW55KSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YXIgYXBwUGF0aCA9IGFwcFZpZXcuYXBwUGF0aDtcblxuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgVE9ET1xuICAgICAgICAgICAgICAgYXBwVmlldy4kc2VsZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5zZXRKc29uKCRzY29wZSwgYXBwVmlldy5pZCwgJHNjb3BlLm1vZGVsLmFwcHMpO1xuICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgICAgdmFyIGFwcEluZm86YW55ID0gYW5ndWxhci5jb3B5KGRlZmF1bHRJbmZvKTtcbiAgICAgICAgICAgICAgaWYgKGFwcFBhdGgpIHtcbiAgICAgICAgICAgICAgICBhcHBJbmZvID0gYXBwTWFwW2FwcFBhdGhdIHx8IGFwcEluZm87XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFhcHBWaWV3LiRpbmZvKSB7XG4gICAgICAgICAgICAgICAgYXBwVmlldy4kaW5mbyA9IGRlZmF1bHRJbmZvO1xuICAgICAgICAgICAgICAgIGFwcFZpZXcuJGluZm8gPSBhcHBJbmZvO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFwcFZpZXcuaWQgPSBhcHBQYXRoO1xuICAgICAgICAgICAgICBpZiAoIWFwcFZpZXcuJG5hbWUpIHtcbiAgICAgICAgICAgICAgICBhcHBWaWV3LiRuYW1lID0gYXBwSW5mby5uYW1lIHx8IGFwcFZpZXcuJG5hbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFhcHBWaWV3LiRpY29uVXJsKSB7XG4gICAgICAgICAgICAgICAgYXBwVmlldy4kaWNvblVybCA9IGFwcEluZm8uJGljb25Vcmw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXBwcy5wdXNoKGFwcFZpZXcpO1xuICAgICAgICAgICAgICBhcHBWaWV3LiRwb2RDb3VudGVycyA9IGNyZWF0ZUFwcFZpZXdQb2RDb3VudGVycyhhcHBWaWV3KTtcbiAgICAgICAgICAgICAgYXBwVmlldy4kcG9kQ291bnQgPSAoYXBwVmlldy5wb2RzIHx8IFtdKS5sZW5ndGg7XG4gICAgICAgICAgICAgIGFwcFZpZXcuJHJlcGxpY2F0aW9uQ29udHJvbGxlcnNUZXh0ID0gKGFwcFZpZXcucmVwbGljYXRpb25Db250cm9sbGVycyB8fCBbXSkubWFwKChpKSA9PiBpW1wiX2tleVwiXSkuam9pbihcIiBcIik7XG4gICAgICAgICAgICAgIGFwcFZpZXcuJHNlcnZpY2VzVGV4dD0gKGFwcFZpZXcuc2VydmljZXMgfHwgW10pLm1hcCgoaSkgPT4gaVtcIl9rZXlcIl0pLmpvaW4oXCIgXCIpO1xuICAgICAgICAgICAgICBhcHBWaWV3LiRzZXJ2aWNlVmlld3MgPSBjcmVhdGVBcHBWaWV3U2VydmljZVZpZXdzKGFwcFZpZXcpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byB1cGRhdGUgYXBwVmlld3M6IFwiICsgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy90aGlzLmFwcHMgPSBhcHBzO1xuICAgICAgICAgIHRoaXMuYXBwcyA9IHRoaXMuYXBwVmlld3M7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLndhcm4oXCJDYXVnaHQgZXJyb3I6IFwiICsgZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGRpc2NvdmVyUG9kQ29ubmVjdGlvbnMoZW50aXR5KSB7XG4gICAgICB2YXIgaW5mbyA9IENvcmUucGF0aEdldChlbnRpdHksIFtcInN0YXR1c1wiLCBcImluZm9cIl0pO1xuICAgICAgdmFyIGhvc3RQb3J0ID0gbnVsbDtcbiAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBlbnRpdHkuc3RhdHVzIHx8IHt9O1xuICAgICAgdmFyIGRlc2lyZWRTdGF0ZSA9IGVudGl0eS5zcGVjIHx8IHt9O1xuICAgICAgdmFyIHBvZElkID0gZ2V0TmFtZShlbnRpdHkpO1xuICAgICAgdmFyIGhvc3QgPSBjdXJyZW50U3RhdGVbXCJob3N0SVBcIl07XG4gICAgICB2YXIgcG9kSVAgPSBjdXJyZW50U3RhdGVbXCJwb2RJUFwiXTtcbiAgICAgIHZhciBoYXNEb2NrZXIgPSBmYWxzZTtcbiAgICAgIHZhciBmb3VuZENvbnRhaW5lclBvcnQgPSBudWxsO1xuICAgICAgaWYgKGRlc2lyZWRTdGF0ZSkge1xuICAgICAgICB2YXIgY29udGFpbmVycyA9IGRlc2lyZWRTdGF0ZS5jb250YWluZXJzO1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goY29udGFpbmVycywgKGNvbnRhaW5lcikgPT4ge1xuICAgICAgICAgIGlmICghaG9zdFBvcnQpIHtcbiAgICAgICAgICAgIHZhciBwb3J0cyA9IGNvbnRhaW5lci5wb3J0cztcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChwb3J0cywgKHBvcnQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFob3N0UG9ydCkge1xuICAgICAgICAgICAgICAgIHZhciBjb250YWluZXJQb3J0ID0gcG9ydC5jb250YWluZXJQb3J0O1xuICAgICAgICAgICAgICAgIHZhciBwb3J0TmFtZSA9IHBvcnQubmFtZTtcbiAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVySG9zdFBvcnQgPSBwb3J0Lmhvc3RQb3J0O1xuICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJQb3J0ID09PSA4Nzc4IHx8IFwiam9sb2tpYVwiID09PSBwb3J0TmFtZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lclBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvZElQKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm91bmRDb250YWluZXJQb3J0ID0gY29udGFpbmVyUG9ydDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVySG9zdFBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBob3N0UG9ydCA9IGNvbnRhaW5lckhvc3RQb3J0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGZvdW5kQ29udGFpbmVyUG9ydCAmJiBwb2RJZCAmJiBpc1J1bm5pbmcoY3VycmVudFN0YXRlKSkge1xuICAgICAgICBpZiAoIUt1YmVybmV0ZXMuaXNPcGVuU2hpZnQpIHtcbiAgICAgICAgICAvLyBUT0RPIHRlbXAgd29ya2Fyb3VuZCBmb3IgazhzIG9uIEdLRSBodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9rdWJlcm5ldGVzL2lzc3Vlcy8xNzE3MlxuICAgICAgICAgIGVudGl0eS4kam9sb2tpYVVybCA9IFVybEhlbHBlcnMuam9pbihLdWJlcm5ldGVzLm1hc3RlckFwaVVybCgpLFxuICAgICAgICAgICAgICBcImFwaVwiLFxuICAgICAgICAgICAgICBLdWJlcm5ldGVzLmRlZmF1bHRBcGlWZXJzaW9uLFxuICAgICAgICAgICAgICBcInByb3h5XCIsXG4gICAgICAgICAgICAgIFwibmFtZXNwYWNlc1wiLFxuICAgICAgICAgICAgICBlbnRpdHkubWV0YWRhdGEubmFtZXNwYWNlICxcbiAgICAgICAgICAgICAgXCJwb2RzXCIsXG4gICAgICAgICAgICAgIC8vXCJodHRwczpcIiArIHBvZElkICsgXCI6XCIgKyBmb3VuZENvbnRhaW5lclBvcnQsXG4gICAgICAgICAgICAgIHBvZElkICsgXCI6XCIgKyBmb3VuZENvbnRhaW5lclBvcnQsXG4gICAgICAgICAgICAgIFwiam9sb2tpYS9cIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW50aXR5LiRqb2xva2lhVXJsID0gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXMubWFzdGVyQXBpVXJsKCksXG4gICAgICAgICAgICAgIFwiYXBpXCIsXG4gICAgICAgICAgICAgIEt1YmVybmV0ZXMuZGVmYXVsdEFwaVZlcnNpb24sXG4gICAgICAgICAgICAgIFwibmFtZXNwYWNlc1wiLFxuICAgICAgICAgICAgICBlbnRpdHkubWV0YWRhdGEubmFtZXNwYWNlICxcbiAgICAgICAgICAgICAgXCJwb2RzXCIsXG4gICAgICAgICAgICAgIFwiaHR0cHM6XCIgKyBwb2RJZCArIFwiOlwiICsgZm91bmRDb250YWluZXJQb3J0LFxuICAgICAgICAgICAgICBcInByb3h5L2pvbG9raWEvXCIpO1xuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUZW1wbGF0ZVNlcnZpY2UobW9kZWwpIHtcbiAgICB2YXIga2V5ID0gY3JlYXRlS2V5KCdkZWZhdWx0JywgJ3RlbXBsYXRlcycsICdzZXJ2aWNlJyk7XG4gICAgdmFyIGFuc3dlciA9IG1vZGVsLnNlcnZpY2VzQnlLZXlba2V5XTtcbiAgICBsb2cuZGVidWcoXCJmb3VuZCB0ZW1wbGF0ZSBzZXJ2aWNlOiBcIiwgYW5zd2VyKTtcbiAgICByZXR1cm4gYW5zd2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBtb2RlbCBzZXJ2aWNlIHdoaWNoIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgcG9kcywgcmVwbGljYXRpb24gY29udHJvbGxlcnMgYW5kIHNlcnZpY2VzIGFsb25nXG4gICAqIHdpdGggdGhlaXIgYXNzb2NpYXRpb25zIGFuZCBzdGF0dXNcbiAgICovXG4gIF9tb2R1bGUuZmFjdG9yeSgnS3ViZXJuZXRlc01vZGVsJywgWyckcm9vdFNjb3BlJywgJyRodHRwJywgJ0t1YmVybmV0ZXNBcGlVUkwnLCAnS3ViZXJuZXRlc1N0YXRlJywgJ1dhdGNoZXJTZXJ2aWNlJywgJyRsb2NhdGlvbicsICckcmVzb3VyY2UnLCAoJHJvb3RTY29wZSwgJGh0dHAsIEFwcExpYnJhcnlVUkwsIEt1YmVybmV0ZXNTdGF0ZSwgd2F0Y2hlcjpXYXRjaGVyU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyZXNvdXJjZTpuZy5yZXNvdXJjZS5JUmVzb3VyY2VTZXJ2aWNlKSA9PiB7XG5cbiAgICB2YXIgJHNjb3BlID0gbmV3IEt1YmVybmV0ZXNNb2RlbFNlcnZpY2UoKTtcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcblxuICAgIC8vIGNyZWF0ZSBhbGwgb2Ygb3VyIHJlc291cmNlIGNsYXNzZXNcbiAgICB2YXIgdHlwZU5hbWVzID0gd2F0Y2hlci5nZXRUeXBlcygpO1xuICAgIF8uZm9yRWFjaCh0eXBlTmFtZXMsICh0eXBlOnN0cmluZykgPT4ge1xuICAgICAgdmFyIHVybFRlbXBsYXRlID0gdXJpVGVtcGxhdGVGb3JLdWJlcm5ldGVzS2luZCh0eXBlKTtcbiAgICAgICRzY29wZVt0eXBlICsgJ1Jlc291cmNlJ10gPSBjcmVhdGVSZXNvdXJjZSh0eXBlLCB1cmxUZW1wbGF0ZSwgJHJlc291cmNlLCAkc2NvcGUpO1xuICAgIH0pO1xuXG4gICAgaWYgKCFpc09wZW5TaGlmdCkge1xuICAgICAgLy8gcmVnaXN0ZXIgY3VzdG9tIFVSTCBmYWN0b3JpZXMgZm9yIHRlbXBsYXRlcy9wcm9qZWN0c1xuICAgICAgd2F0Y2hlci5yZWdpc3RlckN1c3RvbVVybEZ1bmN0aW9uKEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5CVUlMRF9DT05GSUdTLCAob3B0aW9uczpLdWJlcm5ldGVzQVBJLks4U09wdGlvbnMpID0+IHtcbiAgICAgICAgdmFyIHRlbXBsYXRlU2VydmljZSA9IGdldFRlbXBsYXRlU2VydmljZSgkc2NvcGUpO1xuICAgICAgICBpZiAodGVtcGxhdGVTZXJ2aWNlKSB7XG4gICAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVNlcnZpY2UucHJveHlVcmwsICcvb2FwaS92MS9uYW1lc3BhY2VzL2RlZmF1bHQvYnVpbGRjb25maWdzLycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG4gICAgICAvLyByZWdpc3RlciBjdXN0b20gVVJMIGZhY3RvcmllcyBmb3IgdGVtcGxhdGVzL3Byb2plY3RzXG4gICAgICB3YXRjaGVyLnJlZ2lzdGVyQ3VzdG9tVXJsRnVuY3Rpb24oS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlRFTVBMQVRFUywgKG9wdGlvbnM6S3ViZXJuZXRlc0FQSS5LOFNPcHRpb25zKSA9PiB7XG4gICAgICAgIHZhciB0ZW1wbGF0ZVNlcnZpY2UgPSBnZXRUZW1wbGF0ZVNlcnZpY2UoJHNjb3BlKTtcbiAgICAgICAgaWYgKHRlbXBsYXRlU2VydmljZSkge1xuICAgICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVTZXJ2aWNlLnByb3h5VXJsLCAnL29hcGkvdjEvbmFtZXNwYWNlcy9kZWZhdWx0L3RlbXBsYXRlcy8nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHJlZ2lzdGVyIGZvciBhbGwgdXBkYXRlcyBvbiBvYmplY3RzXG5cdFx0d2F0Y2hlci5yZWdpc3Rlckxpc3RlbmVyKChvYmplY3RzOk9iamVjdE1hcCkgPT4ge1xuXHRcdFx0dmFyIHR5cGVzID0gd2F0Y2hlci5nZXRUeXBlcygpO1xuXHRcdFx0Xy5mb3JFYWNoKHR5cGVzLCAodHlwZTpzdHJpbmcpID0+IHtcblx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBXYXRjaFR5cGVzLlNFUlZJQ0VTOlxuXHRcdFx0XHRcdFx0dmFyIGl0ZW1zID0gcG9wdWxhdGVLZXlzKG9iamVjdHNbdHlwZV0pO1xuXHRcdFx0XHRcdFx0YW5ndWxhci5mb3JFYWNoKGl0ZW1zLCAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICBpdGVtLnByb3h5VXJsID0ga3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZShrdWJlcm5ldGVzQXBpVXJsKCksIGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG5cdFx0XHRcdFx0XHQkc2NvcGVbdHlwZV0gPSBpdGVtcztcblx0XHRcdFx0XHRcdGJyZWFrO1xuICAgICAgICAgIGNhc2UgV2F0Y2hUeXBlcy5URU1QTEFURVM6XG4gICAgICAgICAgY2FzZSBXYXRjaFR5cGVzLlJPVVRFUzpcbiAgICAgICAgICBjYXNlIFdhdGNoVHlwZXMuQlVJTERTOlxuICAgICAgICAgIGNhc2UgV2F0Y2hUeXBlcy5CVUlMRF9DT05GSUdTOlxuICAgICAgICAgIGNhc2UgV2F0Y2hUeXBlcy5JTUFHRV9TVFJFQU1TOlxuICAgICAgICAgICAgLy8gZG9uJ3QgcHV0IGEgYnJlYWsgaGVyZSA6LSlcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0JHNjb3BlW3R5cGVdID0gcG9wdWxhdGVLZXlzKG9iamVjdHNbdHlwZV0pO1xuXHRcdFx0XHR9XG4gICAgICAgIGxvZy5kZWJ1ZyhcIlR5cGU6IFwiLCB0eXBlLCBcIiBvYmplY3Q6IFwiLCAkc2NvcGVbdHlwZV0pO1xuXHRcdFx0fSk7XG5cdFx0XHQkc2NvcGUubWF5YmVJbml0KCk7XG4gICAgICAkcm9vdFNjb3BlLiRicm9hZGNhc3QoJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCAkc2NvcGUpO1xuICAgICAgQ29yZS4kYXBwbHkoJHJvb3RTY29wZSk7XG5cdFx0fSk7XG5cbiAgICAvLyBzZXQgdGhlIHNlbGVjdGVkIG5hbWVzcGFjZSBpZiBzZXQgaW4gdGhlIGxvY2F0aW9uIGJhclxuICAgIC8vIG90aGVyd2lzZSB1c2Ugd2hhdGV2ZXIgcHJldmlvdXNseSBzZWxlY3RlZCBuYW1lc3BhY2UgaXNcbiAgICAvLyBhdmFpbGFibGVcbiAgICB2YXIgc2VhcmNoID0gJGxvY2F0aW9uLnNlYXJjaCgpO1xuICAgIGlmICgnbmFtZXNwYWNlJyBpbiBzZWFyY2gpIHtcbiAgICAgIHdhdGNoZXIuc2V0TmFtZXNwYWNlKHNlYXJjaFsnbmFtZXNwYWNlJ10pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNlbGVjdFBvZHMocG9kcywgbmFtZXNwYWNlLCBsYWJlbHMpIHtcbiAgICAgIHJldHVybiBwb2RzLmZpbHRlcigocG9kKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXROYW1lc3BhY2UocG9kKSA9PT0gbmFtZXNwYWNlICYmIHNlbGVjdG9yTWF0Y2hlcyhsYWJlbHMsIGdldExhYmVscyhwb2QpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gJHNjb3BlO1xuICB9XSk7XG5cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0ludGVyZmFjZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzTW9kZWwudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyUGx1Z2luLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XG5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjbGlja0FwcHJvdmUoZWxlbWVudCwgdXJsKSB7XG4gICAgdmFyICRzY29wZTogYW55ID0gYW5ndWxhci5lbGVtZW50KGVsZW1lbnQpLnNjb3BlKCk7XG4gICAgaWYgKCRzY29wZSkge1xuICAgICAgJHNjb3BlLmFwcHJvdmUodXJsLCBlbGVtZW50LnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCB2YXIgSmVua2luc0xvZ0NvbnRyb2xsZXIgPSBfbW9kdWxlLmNvbnRyb2xsZXIoXCJEZXZlbG9wZXIuSmVua2luc0xvZ0NvbnRyb2xsZXJcIiwgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgJG1vZGFsLCBLdWJlcm5ldGVzQXBpVVJMLCBTZXJ2aWNlUmVnaXN0cnksICRlbGVtZW50KSA9PiB7XG5cbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG5cbiAgICAkc2NvcGUuc2VsZWN0ZWRCdWlsZCA9ICRzY29wZS4kZXZhbCgnYnVpbGQnKSB8fCAkc2NvcGUuJGV2YWwoJ3NlbGVjdGVkQnVpbGQnKTtcblxuICAgICRzY29wZS5pZCA9ICRzY29wZS4kZXZhbCgnYnVpbGQuaWQnKSB8fCAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcbiAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XG5cbiAgICAkZWxlbWVudC5vbignJGRlc3Ryb3knLCAoKSA9PiB7XG4gICAgICAkc2NvcGUuJGRlc3Ryb3koKTtcbiAgICB9KTtcblxuICAgICRzY29wZS5sb2cgPSB7XG4gICAgICBodG1sOiBcIlwiLFxuICAgICAgc3RhcnQ6IDAsXG4gICAgICBmaXJzdElkeDogbnVsbFxuICAgIH07XG5cbiAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlSmVua2luc0xpbmsoKTtcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuJG9uKCdqZW5raW5zU2VsZWN0ZWRCdWlsZCcsIChldmVudCwgYnVpbGQpID0+IHtcbiAgICAgIGxvZy5pbmZvKFwiPT09PSBqZW5raW5zIGJ1aWxkIHNlbGVjdGVkISBcIiArIGJ1aWxkLmlkICsgXCIgXCIgKyBidWlsZC4kam9iSWQpO1xuICAgICAgJHNjb3BlLnNlbGVjdGVkQnVpbGQgPSBidWlsZDtcbiAgICB9KTtcblxuXG4gICAgJHNjb3BlLiR3YXRjaCgnc2VsZWN0ZWRCdWlsZCcsIChzZWxlY3RlZEJ1aWxkKSA9PiB7XG4gICAgICBsb2cuaW5mbyhcIlNlbGVjdGVkIGJ1aWxkIHVwZGF0ZWQ6IFwiLCBzZWxlY3RlZEJ1aWxkKTtcbiAgICAgICRzY29wZS5mZXRjaCgpO1xuICAgIH0pO1xuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gY3JlYXRlSmVua2luc0JyZWFkY3J1bWJzKCRzY29wZS5pZCwgZ2V0Sm9iSWQoKSwgZ2V0QnVpbGRJZCgpKTtcbiAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gY3JlYXRlSmVua2luc1N1Yk5hdkJhcnMoJHNjb3BlLmlkLCBnZXRKb2JJZCgpLCBnZXRCdWlsZElkKCksIHtcbiAgICAgIGxhYmVsOiBcIkxvZ1wiLFxuICAgICAgdGl0bGU6IFwiVmlld3MgdGhlIGxvZ3Mgb2YgdGhpcyBidWlsZFwiXG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBnZXRKb2JJZCgpIHtcbiAgICAgIC8vIGxldHMgYWxsb3cgdGhlIHBhcmVudCBzY29wZSB0byBiZSB1c2VkIHRvbyBmb3Igd2hlbiB0aGlzIGlzIHVzZWQgYXMgYSBwYW5lbFxuICAgICAgcmV0dXJuICRyb3V0ZVBhcmFtc1tcImpvYlwiXSB8fCAoJHNjb3BlLnNlbGVjdGVkQnVpbGQgfHwge30pLiRqb2JJZDtcbiAgICB9XG4gICAgJHNjb3BlLmdldEpvYklkID0gZ2V0Sm9iSWQ7XG5cbiAgICBmdW5jdGlvbiBnZXRCdWlsZElkKCkge1xuICAgICAgLy8gbGV0cyBhbGxvdyB0aGUgcGFyZW50IHNjb3BlIHRvIGJlIHVzZWQgdG9vIGZvciB3aGVuIHRoaXMgaXMgdXNlZCBhcyBhIHBhbmVsXG4gICAgICByZXR1cm4gJHJvdXRlUGFyYW1zW1wiYnVpbGRcIl0gfHwgKCRzY29wZS5zZWxlY3RlZEJ1aWxkIHx8IHt9KS5pZDtcbiAgICB9XG4gICAgJHNjb3BlLmdldEJ1aWxkSWQgPSBnZXRCdWlsZElkO1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlSmVua2luc0xpbmsoKSB7XG4gICAgICB2YXIgamVua2luc1VybCA9IGplbmtpbnNMaW5rKCk7XG4gICAgICBpZiAoamVua2luc1VybCkge1xuICAgICAgICAkc2NvcGUuJHZpZXdKZW5raW5zQnVpbGRMaW5rID0gVXJsSGVscGVycy5qb2luKGplbmtpbnNVcmwsIFwiam9iXCIsIGdldEpvYklkKCksIGdldEJ1aWxkSWQoKSk7XG4gICAgICAgICRzY29wZS4kdmlld0plbmtpbnNMb2dMaW5rID0gVXJsSGVscGVycy5qb2luKCRzY29wZS4kdmlld0plbmtpbnNCdWlsZExpbmssIFwiY29uc29sZVwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcXVlcnlTaXplID0gNTAwMDA7XG5cbiAgICAkc2NvcGUuYXBwcm92ZSA9ICh1cmwsIG9wZXJhdGlvbikgPT4ge1xuICAgICAgdmFyIG1vZGFsID0gJG1vZGFsLm9wZW4oe1xuICAgICAgdGVtcGxhdGVVcmw6IFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsICdqZW5raW5zQXBwcm92ZU1vZGFsLmh0bWwnKSxcbiAgICAgIGNvbnRyb2xsZXI6IFsnJHNjb3BlJywgJyRtb2RhbEluc3RhbmNlJywgKCRzY29wZSwgJG1vZGFsSW5zdGFuY2UpID0+IHtcbiAgICAgICAgJHNjb3BlLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcbiAgICAgICAgJHNjb3BlLmhlYWRlciA9IG9wZXJhdGlvbiArIFwiP1wiO1xuICAgICAgICAkc2NvcGUub2sgPSAoKSA9PiB7XG4gICAgICAgICAgbW9kYWwuY2xvc2UoKTtcbiAgICAgICAgICBwb3N0VG9KZW5raW5zKHVybCwgb3BlcmF0aW9uKTtcbiAgICAgICAgfTtcbiAgICAgICAgJHNjb3BlLmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICBtb2RhbC5kaXNtaXNzKCk7XG4gICAgICAgIH07XG4gICAgICB9XVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHBvc3RUb0plbmtpbnModXJpLCBvcGVyYXRpb24pIHtcbiAgICAgIHZhciB1cmwgPSAgS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCB1cmkpO1xuICAgICAgaWYgKHVybCkge1xuICAgICAgICB2YXIgYm9keSA9IG51bGw7XG4gICAgICAgIHZhciBjb25maWcgPSB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBsb2cuaW5mbyhcInBvc3RpbmcgdG8gamVua2luc1VybDogXCIgKyB1cmwpO1xuICAgICAgICAkaHR0cC5wb3N0KHVybCwgYm9keSwgY29uZmlnKS5cbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgbG9nLmluZm8oXCJNYW5hZ2VkIHRvIFwiICsgb3BlcmF0aW9uICsgXCIgYXQgXCIgKyB1cmwpO1xuICAgICAgICAgIH0pLlxuICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCBcIiArIG9wZXJhdGlvbiArIFwiIGpvYiBhdCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cud2FybihcIkNhbm5vdCBwb3N0IHRvIGplbmtpbnMgVVJJOiBcIiArIHVyaSArIFwiIGFzIG5vIGplbmtpbnMgZm91bmQhXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgICRzY29wZS4ka2VlcFBvbGxpbmcgPSAoKSA9PiBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWw7XG5cbiAgICAkc2NvcGUuZmV0Y2ggPSBQb2xsSGVscGVycy5zZXR1cFBvbGxpbmcoJHNjb3BlLCAobmV4dDooKSA9PiB2b2lkKSA9PiB7XG4gICAgICBpZiAoJHNjb3BlLiRldmFsKCdoaWRlTG9ncyAmJiAhYnVpbGQuYnVpbGRpbmcnKSkge1xuICAgICAgICBsb2cuZGVidWcoXCJMb2cgaGlkZGVuLCBub3QgZmV0Y2hpbmcgbG9nc1wiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmRlYnVnKFwiRmV0Y2hpbmcgbG9ncyBmb3IgYnVpbGQ6IFwiLCAkc2NvcGUuJGV2YWwoJ2J1aWxkJykpO1xuICAgICAgfVxuICAgICAgdmFyIGJ1aWxkSWQgPSBnZXRCdWlsZElkKCk7XG4gICAgICB2YXIgam9iSWQgPSBnZXRKb2JJZCgpO1xuICAgICAgLy9sb2cuaW5mbyhcIj09PSBqZW5raW5zIGxvZyBxdWVyeWluZyBqb2IgXCIgKyBqb2JJZCArIFwiIGJ1aWxkIFwiICsgYnVpbGRJZCArIFwiIHNlbGVjdGVkIGJ1aWxkIFwiICsgICRzY29wZS5zZWxlY3RlZEJ1aWxkKTtcbiAgICAgIGlmIChqb2JJZCAmJiBidWlsZElkKSB7XG4gICAgICAgIGlmICgkc2NvcGUuYnVpbGRJZCAhPT0gYnVpbGRJZCB8fCAkc2NvcGUuam9iSWQgIT09IGpvYklkKSB7XG4gICAgICAgICAgLy8gbGV0cyBjbGVhciB0aGUgcXVlcnlcbiAgICAgICAgICAkc2NvcGUubG9nID0ge1xuICAgICAgICAgICAgaHRtbDogXCJcIixcbiAgICAgICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICAgICAgZmlyc3RJZHg6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgICRzY29wZS5idWlsZElkID0gYnVpbGRJZDtcbiAgICAgICAgJHNjb3BlLmpvYklkID0gam9iSWQ7XG5cbiAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgVXJsSGVscGVycy5qb2luKFwiam9iXCIsIGpvYklkLCBidWlsZElkLCBcImZhYnJpYzgvbG9nSHRtbD90YWlsPTEmc3RhcnQ9XCIgKyAkc2NvcGUubG9nLnN0YXJ0ICsgXCImc2l6ZT1cIiArIHF1ZXJ5U2l6ZSkpO1xuICAgICAgICBpZiAoJHNjb3BlLmxvZy5maXJzdElkeCAhPT0gbnVsbCkge1xuICAgICAgICAgIHVybCArPSBcIiZmaXJzdD1cIiArICRzY29wZS5sb2cuZmlyc3RJZHg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVybCAmJiAoISRzY29wZS5sb2cuZmV0Y2hlZCB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XG4gICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIHZhciByZXBsYWNlQ2x1c3RlcklQc0luSHRtbCA9IHJlcGxhY2VDbHVzdGVySXBGdW5jdGlvbigpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCEkc2NvcGUubG9nLmxvZ3MpIHtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cubG9ncyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSBkYXRhLmxpbmVzO1xuICAgICAgICAgICAgICAgIHZhciByZXR1cm5lZExlbmd0aCA9IGRhdGEucmV0dXJuZWRMZW5ndGg7XG4gICAgICAgICAgICAgICAgdmFyIGxvZ0xlbmd0aCA9IGRhdGEubG9nTGVuZ3RoO1xuICAgICAgICAgICAgICAgIHZhciByZXR1cm5lZFN0YXJ0ID0gZGF0YS5zdGFydDtcbiAgICAgICAgICAgICAgICB2YXIgZWFybGllckxvZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChyZXR1cm5lZFN0YXJ0KSkge1xuICAgICAgICAgICAgICAgICAgZWFybGllckxvZyA9IHJldHVybmVkU3RhcnQgPCAkc2NvcGUubG9nLnN0YXJ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgbGluZVNwbGl0ID0gZGF0YS5saW5lU3BsaXQ7XG4gICAgICAgICAgICAgICAgLy8gbG9nLmluZm8oXCJzdGFydCB3YXM6IFwiICsgJHNjb3BlLmxvZy5zdGFydCArIFwiIGZpcnN0OiBcIiArICRzY29wZS5sb2cuZmlyc3RJZHggKyBcIiA9PiByZXR1cm5lZExlbmd0aDogXCIgKyByZXR1cm5lZExlbmd0aCArIFwiIGxvZ0xlbmd0aDogXCIgKyBsb2dMZW5ndGggKyAgXCIgcmV0dXJuZWRTdGFydDogXCIgKyByZXR1cm5lZFN0YXJ0ICsgXCIgZWFybGllckxvZzogXCIgKyBlYXJsaWVyTG9nICsgXCIgbGluZVNwbGl0OiBcIiArIGxpbmVTcGxpdCk7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY3VycmVudExvZ3MgPSAkc2NvcGUubG9nLmxvZ3M7XG5cbiAgICAgICAgICAgICAgICAgIC8vIGxldHMgcmUtam9pbiBzcGxpdCBsaW5lc1xuICAgICAgICAgICAgICAgICAgaWYgKGxpbmVTcGxpdCAmJiBjdXJyZW50TG9ncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3RPZkxpbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlYXJsaWVyTG9nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICByZXN0T2ZMaW5lID0gbGluZXMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3RPZkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMb2dzW2xhc3RJbmRleF0gPSByZXBsYWNlQ2x1c3RlcklQc0luSHRtbChyZXN0T2ZMaW5lICsgY3VycmVudExvZ3NbbGFzdEluZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IGN1cnJlbnRMb2dzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzdE9mTGluZSA9IGxpbmVzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3RPZkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMb2dzW2xhc3RJbmRleF0gPSByZXBsYWNlQ2x1c3RlcklQc0luSHRtbChjdXJyZW50TG9nc1tsYXN0SW5kZXhdICsgcmVzdE9mTGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVzW2ldID0gcmVwbGFjZUNsdXN0ZXJJUHNJbkh0bWwobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKGVhcmxpZXJMb2cpIHtcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5sb2dzID0gbGluZXMuY29uY2F0KGN1cnJlbnRMb2dzKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cubG9ncyA9IGN1cnJlbnRMb2dzLmNvbmNhdChsaW5lcyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtb3ZlRm9yd2FyZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKHJldHVybmVkU3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgICBpZiAocmV0dXJuZWRTdGFydCA+ICRzY29wZS5sb2cuc3RhcnQgJiYgJHNjb3BlLmxvZy5zdGFydCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB3ZSd2ZSBqdW1wZWQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSB0byByZWFkIHRoZSB0YWlsIG9mIGl0XG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cuc3RhcnQgPSByZXR1cm5lZFN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAkc2NvcGUubG9nLmZpcnN0SWR4ID0gcmV0dXJuZWRTdGFydDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJHNjb3BlLmxvZy5maXJzdElkeCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIHJlbWVtYmVyIHdoZXJlIHRoZSBmaXJzdCByZXF1ZXN0IHN0YXJ0ZWRcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5maXJzdElkeCA9IHJldHVybmVkU3RhcnQ7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHVybmVkU3RhcnQgPCAkc2NvcGUubG9nLmZpcnN0SWR4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlJ3ZlIGdvdCBhbiBlYXJsaWVyIGJpdCBvZiB0aGUgbG9nXG4gICAgICAgICAgICAgICAgICAgIC8vIGFmdGVyIHN0YXJ0aW5nIGF0IHRoZSB0YWlsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIGxldHMgbW92ZSBmaXJzdElkeCBiYWNrd2FyZHMgYW5kIGxlYXZlIHN0YXJ0IGFzIGl0IGlzIChhdCB0aGUgZW5kIG9mIHRoZSBmaWxlKVxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUubG9nLmZpcnN0SWR4ID0gcmV0dXJuZWRTdGFydDtcbiAgICAgICAgICAgICAgICAgICAgbW92ZUZvcndhcmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1vdmVGb3J3YXJkICYmIHJldHVybmVkTGVuZ3RoICYmICFlYXJsaWVyTG9nKSB7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUubG9nLnN0YXJ0ICs9IHJldHVybmVkTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgaWYgKGxvZ0xlbmd0aCAmJiAkc2NvcGUubG9nLnN0YXJ0ID4gbG9nTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cuc3RhcnQgPSBsb2dMZW5ndGg7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVwZGF0ZUplbmtpbnNMaW5rKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgJHNjb3BlLmxvZy5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgLy8gQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkc2NvcGUubG9nLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKCRzY29wZS5mZXRjaCkpIHtcbiAgICAgICRzY29wZS5mZXRjaCgpO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gcmVwbGFjZUNsdXN0ZXJJcEZ1bmN0aW9uKCkge1xuICAgICAgZnVuY3Rpb24gY3JlYXRlUmVwbGFjZUZ1bmN0aW9uKGZyb20sIHRvKSB7XG4gICAgICAgIHJldHVybiAodGV4dCkgPT4gcmVwbGFjZVRleHQodGV4dCwgZnJvbSwgdG8pO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVwbGFjZW1lbnRzID0gW107XG4gICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLm1vZGVsLnNlcnZpY2VzLCAoc2VydmljZSkgPT4ge1xuICAgICAgICB2YXIgJHBvcnRhbElQID0gc2VydmljZS4kcG9ydGFsSVA7XG4gICAgICAgIHZhciAkc2VydmljZVVybCA9IHNlcnZpY2UuJHNlcnZpY2VVcmw7XG4gICAgICAgIHZhciAkcG9ydHNUZXh0ID0gc2VydmljZS4kcG9ydHNUZXh0O1xuICAgICAgICBpZiAoJHBvcnRhbElQICYmICRzZXJ2aWNlVXJsKSB7XG4gICAgICAgICAgdmFyIGlkeCA9ICRzZXJ2aWNlVXJsLmluZGV4T2YoXCI6Ly9cIik7XG4gICAgICAgICAgaWYgKGlkeCA+IDApIHtcbiAgICAgICAgICAgIHZhciByZXBsYWNlV2l0aCA9ICRzZXJ2aWNlVXJsLnN1YnN0cmluZyhpZHgsICRzZXJ2aWNlVXJsLmxlbmd0aCk7XG4gICAgICAgICAgICBpZiAoIXJlcGxhY2VXaXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICAgICAgICByZXBsYWNlV2l0aCArPSBcIi9cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXBsYWNlV2l0aC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5wdXNoKGNyZWF0ZVJlcGxhY2VGdW5jdGlvbihcbiAgICAgICAgICAgICAgICAgICAgXCI6Ly9cIiArICRwb3J0YWxJUCArIFwiL1wiLFxuICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aFxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgaWYgKCRwb3J0c1RleHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3VmZml4ID0gXCI6XCIgKyAkcG9ydHNUZXh0O1xuICAgICAgICAgICAgICAgIHZhciBzZXJ2aWNlV2l0aFBvcnQgPSByZXBsYWNlV2l0aC5zdWJzdHJpbmcoMCwgcmVwbGFjZVdpdGgubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzZXJ2aWNlV2l0aFBvcnQuZW5kc1dpdGgoc3VmZml4KSkge1xuICAgICAgICAgICAgICAgICAgc2VydmljZVdpdGhQb3J0ICs9IHN1ZmZpeDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VydmljZVdpdGhQb3J0ICs9IFwiL1wiO1xuICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5wdXNoKGNyZWF0ZVJlcGxhY2VGdW5jdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICBcIjovL1wiICsgJHBvcnRhbElQICsgXCI6XCIgKyAkcG9ydHNUZXh0ICsgXCIvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgc2VydmljZVdpdGhQb3J0XG4gICAgICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmdW5jdGlvbiBhZGRSZXBsYWNlRm4oZnJvbSwgdG8pIHtcbiAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2goKHRleHQpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZVRleHQodGV4dCwgZnJvbSwgdG8pO1xuICAgICAgICB9KTtcblxuICAgICAgfVxuICAgICAgYWRkUmVwbGFjZUZuKFwiW0lORk9dXCIsIFwiPHNwYW4gY2xhc3M9J2xvZy1zdWNjZXNzJz5bSU5GT108L3NwYW4+XCIpO1xuICAgICAgYWRkUmVwbGFjZUZuKFwiW1dBUk5dXCIsIFwiPHNwYW4gY2xhc3M9J2xvZy13YXJuJz5bV0FSTl08L3NwYW4+XCIpO1xuICAgICAgYWRkUmVwbGFjZUZuKFwiW1dBUk5JTkddXCIsIFwiPHNwYW4gY2xhc3M9J2xvZy13YXJuJz5bV0FSTklOR108L3NwYW4+XCIpO1xuICAgICAgYWRkUmVwbGFjZUZuKFwiW0VSUk9SXVwiLCBcIjxzcGFuIGNsYXNzPSdsb2ctZXJyb3InPltFUlJPUl08L3NwYW4+XCIpO1xuICAgICAgYWRkUmVwbGFjZUZuKFwiRkFJTFVSRVwiLCBcIjxzcGFuIGNsYXNzPSdsb2ctZXJyb3InPkZBSUxVUkU8L3NwYW4+XCIpO1xuICAgICAgYWRkUmVwbGFjZUZuKFwiU1VDQ0VTU1wiLCBcIjxzcGFuIGNsYXNzPSdsb2ctc3VjY2Vzcyc+U1VDQ0VTUzwvc3Bhbj5cIik7XG5cbiAgICAgIC8vIGxldHMgdHJ5IGNvbnZlcnQgdGhlIFByb2NlZWQgLyBBYm9ydCBsaW5rc1xuICAgICAgcmVwbGFjZW1lbnRzLnB1c2goKHRleHQpID0+IHtcbiAgICAgICAgdmFyIHByZWZpeCA9IFwiPGEgaHJlZj0nIycgb25jbGljaz1cXFwibmV3IEFqYXguUmVxdWVzdCgnXCI7XG4gICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICB3aGlsZSAoaWR4ID49IDApIHtcbiAgICAgICAgICBpZHggPSB0ZXh0LmluZGV4T2YocHJlZml4LCBpZHgpO1xuICAgICAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gaWR4ICsgcHJlZml4Lmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBlbmRRdW90ZSA9IHRleHQuaW5kZXhPZihcIidcIiwgc3RhcnQgKyAxKTtcbiAgICAgICAgICAgIGlmIChlbmRRdW90ZSA8PSAwKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGVuZERvdWJsZVF1b3RlID0gdGV4dC5pbmRleE9mKCdcIicsIGVuZFF1b3RlICsgMSk7XG4gICAgICAgICAgICBpZiAoZW5kRG91YmxlUXVvdGUgPD0gMCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB1cmwgPSB0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kUXVvdGUpO1xuICAgICAgICAgICAgLy8gVE9ETyB1c2luZyAkY29tcGlsZSBpcyBhIHRhZCBjb21wbGV4LCBmb3Igbm93IGxldHMgY2hlYXQgd2l0aCBhIGxpdHRsZSBvbmNsaWNrIDspXG4gICAgICAgICAgICAvL3RleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBpZHgpICsgXCI8YSBjbGFzcz0nYnRuIGJ0bi1kZWZhdWx0IGJ0bi1sZycgbmctY2xpY2s9XFxcImFwcHJvdmUoJ1wiICsgdXJsICsgXCInKVxcXCJcIiArIHRleHQuc3Vic3RyaW5nKGVuZERvdWJsZVF1b3RlICsgMSk7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgaWR4KSArIFwiPGEgY2xhc3M9J2J0biBidG4tZGVmYXVsdCBidG4tbGcnIG9uY2xpY2s9XFxcIkRldmVsb3Blci5jbGlja0FwcHJvdmUodGhpcywgJ1wiICsgdXJsICsgXCInKVxcXCJcIiArIHRleHQuc3Vic3RyaW5nKGVuZERvdWJsZVF1b3RlICsgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odGV4dCkge1xuICAgICAgICB2YXIgYW5zd2VyID0gdGV4dDtcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKHJlcGxhY2VtZW50cywgKGZuKSA9PiB7XG4gICAgICAgICAgYW5zd2VyID0gZm4oYW5zd2VyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhbnN3ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwbGFjZVRleHQodGV4dCwgZnJvbSwgdG8pIHtcbiAgICAgIGlmIChmcm9tICYmIHRvICYmIHRleHQpIHtcbiAgICAgICAgLy9sb2cuaW5mbyhcIlJlcGxhY2luZyAnXCIgKyBmcm9tICsgXCInID0+ICdcIiArIHRvICsgXCInXCIpO1xuICAgICAgICB2YXIgaWR4ID0gMDtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBpZHggPSB0ZXh0LmluZGV4T2YoZnJvbSwgaWR4KTtcbiAgICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBpZHgpICsgdG8gKyB0ZXh0LnN1YnN0cmluZyhpZHggKyBmcm9tLmxlbmd0aCk7XG4gICAgICAgICAgICBpZHggKz0gdG8ubGVuZ3RoO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgfSk7XG5cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XG5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4gIGV4cG9ydCB2YXIgSmVua2luc01ldHJpY3NDb250cm9sbGVyID0gY29udHJvbGxlcihcIkplbmtpbnNNZXRyaWNzQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiU2VydmljZVJlZ2lzdHJ5XCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIFNlcnZpY2VSZWdpc3RyeSkgPT4ge1xuXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICAgICAkc2NvcGUuam9iSWQgPSAkcm91dGVQYXJhbXNbXCJqb2JcIl07XG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xuICAgICAgICAkc2NvcGUuamVua2lucyA9IG51bGw7XG4gICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUgPSB7fTtcblxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuaWQpO1xuICAgICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5pZCwgJHNjb3BlLmpvYklkKTtcblxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLm9wdGlvbnMgPSB7XG4gICAgICAgICAgY2hhcnQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdkaXNjcmV0ZUJhckNoYXJ0JyxcbiAgICAgICAgICAgIGF1dG9yZWZyZXNoOiBmYWxzZSxcbiAgICAgICAgICAgIGhlaWdodDogNDUwLFxuICAgICAgICAgICAgbWFyZ2luOiB7XG4gICAgICAgICAgICAgIHRvcDogMjAsXG4gICAgICAgICAgICAgIHJpZ2h0OiAyMCxcbiAgICAgICAgICAgICAgYm90dG9tOiA2MCxcbiAgICAgICAgICAgICAgbGVmdDogNDVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGlwRWRnZTogdHJ1ZSxcbiAgICAgICAgICAgIHN0YWdnZXJMYWJlbHM6IGZhbHNlLFxuICAgICAgICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uOiA1MDAsXG4gICAgICAgICAgICBzdGFja2VkOiBmYWxzZSxcbiAgICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICBjb250ZW50R2VuZXJhdG9yOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gYXJncy5kYXRhIHx8IHt9O1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnRvb2x0aXA7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29sb3I6IChkLCBpKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBkLmNvbG9yO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhBeGlzOiB7XG4gICAgICAgICAgICAgIGF4aXNMYWJlbDogJ0J1aWxkcycsXG4gICAgICAgICAgICAgIHNob3dNYXhNaW46IGZhbHNlLFxuICAgICAgICAgICAgICB0aWNrRm9ybWF0OiBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIiNcIiArIGQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5QXhpczoge1xuICAgICAgICAgICAgICBheGlzTGFiZWw6ICdCdWlsZCBEdXJhdGlvbiAoc2Vjb25kcyknLFxuICAgICAgICAgICAgICB0aWNrRm9ybWF0OiBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkMy5mb3JtYXQoJywuMWYnKShkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAkc2NvcGUuZGF0YSA9IFtdO1xuXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcblxuICAgICAgICBmdW5jdGlvbiBiYXJDb2xvdXJGb3JCdWlsZFJlc3VsdChyZXN1bHQpIHtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBcIkZBSUxVUkVcIiB8fCByZXN1bHQgPT09IFwiRkFJTEVEXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFwicmVkXCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJBQk9SVEVEXCIgfHwgcmVzdWx0ID09PSBcIklOVEVSVVBURURcIikge1xuICAgICAgICAgICAgICByZXR1cm4gXCJ0YW5cIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIlNVQ0NFU1NcIikge1xuICAgICAgICAgICAgICByZXR1cm4gXCJncmVlblwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiTk9UX1NUQVJURURcIikge1xuICAgICAgICAgICAgICByZXR1cm4gXCJsaWdodGdyZXlcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCJkYXJrZ3JleVwiO1xuICAgICAgICB9XG5cblxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVDaGFydERhdGEoKSB7XG4gICAgICAgICAgdmFyIHVzZVNpbmdsZVNldCA9IHRydWU7XG4gICAgICAgICAgdmFyIGJ1aWxkc1N1Y2NlZWRlZCA9IFtdO1xuICAgICAgICAgIHZhciBidWlsZHNGYWlsZWQgPSBbXTtcbiAgICAgICAgICB2YXIgc3VjY2Vzc0J1aWxkS2V5ID0gXCJTdWNjZWVkZWQgYnVpbGRzXCI7XG4gICAgICAgICAgdmFyIGZhaWxlZEJ1aWxkS2V5ID0gXCJGYWlsZWQgYnVpbGRzXCI7XG5cbiAgICAgICAgICBpZiAodXNlU2luZ2xlU2V0KSB7XG4gICAgICAgICAgICBzdWNjZXNzQnVpbGRLZXkgPSBcIkJ1aWxkc1wiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgICAgdmFyIGJ1aWxkcyA9IF8uc29ydEJ5KCRzY29wZS5tZXRyaWNzLmJ1aWxkcyB8fCBbXSwgXCJudW1iZXJcIik7XG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGJ1aWxkcywgKGJ1aWxkOmFueSkgPT4ge1xuICAgICAgICAgICAgdmFyIHggPSBidWlsZC5udW1iZXI7XG4gICAgICAgICAgICB2YXIgeSA9IGJ1aWxkLmR1cmF0aW9uIC8gMTAwMDtcbiAgICAgICAgICAgIHZhciBkYXRlID0gRGV2ZWxvcGVyLmFzRGF0ZShidWlsZC50aW1lSW5NaWxsaXMpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJ1aWxkLnJlc3VsdCB8fCBcIk5PVF9TVEFSVEVEXCI7XG4gICAgICAgICAgICB2YXIgY29sb3IgPSBiYXJDb2xvdXJGb3JCdWlsZFJlc3VsdChyZXN1bHQpO1xuICAgICAgICAgICAgdmFyIGljb25DbGFzcyA9IGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKHJlc3VsdCk7XG4gICAgICAgICAgICB2YXIgdG9vbHRpcCA9ICc8aDM+PGkgY2xhc3M9XCInICsgaWNvbkNsYXNzICsgJ1wiPjwvaT4gJyArIGJ1aWxkLmRpc3BsYXlOYW1lICsgJzwvaDM+JyArXG4gICAgICAgICAgICAgICc8cD5kdXJhdGlvbjogPGI+JyArIHkgKyAnPC9iPiBzZWNvbmRzPC9wPic7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICB0b29sdGlwICs9ICc8cD5zdGFydGVkOiA8Yj4nICsgZGF0ZSArICc8L2I+PC9wPic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgIHRvb2x0aXAgKz0gJzxwPnJlc3VsdDogPGI+JyArIHJlc3VsdCArICc8L2I+PC9wPic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh4KSB7XG4gICAgICAgICAgICAgIHZhciBkYXRhID0gYnVpbGRzU3VjY2VlZGVkO1xuICAgICAgICAgICAgICB2YXIga2V5ID0gc3VjY2Vzc0J1aWxkS2V5O1xuICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3NCdWlsZEtleSAmJiAoIXJlc3VsdCB8fCAhcmVzdWx0LnN0YXJ0c1dpdGgoXCJTVUNDXCIpKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBidWlsZHNGYWlsZWQ7XG4gICAgICAgICAgICAgICAga2V5ID0gZmFpbGVkQnVpbGRLZXk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICB0b29sdGlwOiB0b29sdGlwLFxuICAgICAgICAgICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgICAgICAgICB4OiB4LCB5OiB5fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgJHNjb3BlLmRhdGEgPSBbXTtcbiAgICAgICAgICBpZiAoYnVpbGRzU3VjY2VlZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgJHNjb3BlLmRhdGEucHVzaCh7XG4gICAgICAgICAgICAgIGtleTogc3VjY2Vzc0J1aWxkS2V5LFxuICAgICAgICAgICAgICB2YWx1ZXM6IGJ1aWxkc1N1Y2NlZWRlZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChidWlsZHNGYWlsZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAkc2NvcGUuZGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAga2V5OiBmYWlsZWRCdWlsZEtleSxcbiAgICAgICAgICAgICAgdmFsdWVzOiBidWlsZHNGYWlsZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAkc2NvcGUuYXBpLnVwZGF0ZVdpdGhEYXRhKCRzY29wZS5kYXRhKTtcblxuICAgICAgICAgICR0aW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICRzY29wZS5hcGkudXBkYXRlKCk7XG4gICAgICAgICAgfSwgNTApO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgICB2YXIgbWV0cmljc1BhdGggPSAkc2NvcGUuam9iSWQgPyBVcmxIZWxwZXJzLmpvaW4oXCJqb2JcIiwgJHNjb3BlLmpvYklkLCBcImZhYnJpYzgvbWV0cmljc1wiKSA6IFwiZmFicmljOC9tZXRyaWNzXCI7XG4gICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgbWV0cmljc1BhdGgpO1xuICAgICAgICAgIGxvZy5pbmZvKFwiXCIpO1xuICAgICAgICAgIGlmICh1cmwgJiYgKCEkc2NvcGUuamVua2lucyB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XG4gICAgICAgICAgICAkaHR0cC5nZXQodXJsLCBqZW5raW5zSHR0cENvbmZpZykuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKGRhdGEsICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKFwiZW50aXR5IGhhcyBjaGFuZ2VkIVwiKTtcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLm1ldHJpY3MgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVDaGFydERhdGEoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XG5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4gIGV4cG9ydCB2YXIgTmF2QmFyQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJOYXZCYXJDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkdGltZW91dCkgPT4ge1xuXG4gICAgICAgICRzY29wZS5pc1ZhbGlkID0gKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlbS5pc1ZhbGlkO1xuICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlKGl0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gYW5ndWxhci5pc1VuZGVmaW5lZCh2YWx1ZSkgfHwgdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBQaXBlbGluZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUGlwZWxpbmVDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgU2VydmljZVJlZ2lzdHJ5KSA9PiB7XG5cbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAgICRzY29wZS5rdWJlTW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICAgICAkc2NvcGUuam9iSWQgPSAkcm91dGVQYXJhbXNbXCJqb2JcIl07XG4gICAgICAgICRzY29wZS5idWlsZElkID0gJHJvdXRlUGFyYW1zW1wiYnVpbGRcIl07XG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xuICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XG5cbiAgICAgICAgJHNjb3BlLm1vZGVsID0ge1xuICAgICAgICAgIHN0YWdlczogbnVsbFxuICAgICAgICB9O1xuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuaWQpO1xuICAgICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5pZCwgJHNjb3BlLmpvYklkKTtcblxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdXBkYXRlRGF0YSgpO1xuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgICAgaWYgKCRzY29wZS5qb2JJZCkge1xuICAgICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgVXJsSGVscGVycy5qb2luKFwiam9iXCIsICRzY29wZS5qb2JJZCwgJHNjb3BlLmJ1aWxkSWQsIFwiZmFicmljOC9zdGFnZXMvXCIpKTtcbiAgICAgICAgICAgIGlmICh1cmwgJiYgKCEkc2NvcGUubW9kZWwuc3RhZ2VzIHx8IEt1YmVybmV0ZXMua2VlcFBvbGxpbmdNb2RlbCkpIHtcbiAgICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGVucmljaEplbmtpbnNTdGFnZXMoZGF0YSwgJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT2JqZWN0Q2hhbmdlZChkYXRhLCAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKFwiZW50aXR5IGhhcyBjaGFuZ2VkIVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuYnVpbGQgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5zdGFnZXMgPSBkYXRhLnN0YWdlcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgICB9KS5cbiAgICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxuXG5tb2R1bGUgRGV2ZWxvcGVyIHtcbiAgX21vZHVsZS5kaXJlY3RpdmUoXCJwaXBlbGluZVZpZXdcIiwgKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB0ZW1wbGF0ZVVybDogdGVtcGxhdGVQYXRoICsgJ3BpcGVsaW5lVmlldy5odG1sJ1xuICAgIH07XG4gIH0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyUGx1Z2luLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XG5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4gIGV4cG9ydCB2YXIgUGlwZWxpbmVzQ29udHJvbGxlciA9IF9tb2R1bGUuY29udHJvbGxlcihcIkRldmVsb3Blci5QaXBlbGluZXNDb250cm9sbGVyXCIsICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcbiAgICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIFNlcnZpY2VSZWdpc3RyeSwgJGVsZW1lbnQpID0+IHtcblxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICRzY29wZS5rdWJlTW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgJHNjb3BlLmpvYklkID0gJHNjb3BlLmpvYklkIHx8ICRyb3V0ZVBhcmFtc1tcImpvYlwiXTtcbiAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcbiAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XG5cbiAgICAkZWxlbWVudC5vbignJGRlc3Ryb3knLCAoKSA9PiB7XG4gICAgICAkc2NvcGUuJGRlc3Ryb3koKTtcbiAgICB9KTtcblxuICAgICRzY29wZS5tb2RlbCA9IHtcbiAgICAgIGpvYjogbnVsbCxcbiAgICAgIHBlbmRpbmdPbmx5OiAkc2NvcGUucGVuZGluZ1BpcGVsaW5lc09ubHlcbiAgICB9O1xuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoJHNjb3BlLmlkKTtcbiAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5pZCwgJHNjb3BlLmpvYklkKTtcblxuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuJHdhdGNoKCdtb2RlbC5wZW5kaW5nT25seScsICgkZXZlbnQpID0+IHtcbiAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICB9KTtcblxuICAgICRzY29wZS5zZWxlY3RCdWlsZCA9IChidWlsZCkgPT4ge1xuICAgICAgdmFyIGlkID0gYnVpbGQuaWQ7XG4gICAgICBpZiAoaWQpIHtcbiAgICAgICAgaWYgKGlkICE9PSAkc2NvcGUuc2VsZWN0ZWRCdWlsZElkKSB7XG4gICAgICAgICAgJHNjb3BlLnNlbGVjdGVkQnVpbGRJZCA9IGlkO1xuICAgICAgICAgICRzY29wZS4kYnJvYWRjYXN0KFwiamVua2luc1NlbGVjdGVkQnVpbGRcIiwgYnVpbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciB1cGRhdGVEYXRhID0gXy5kZWJvdW5jZSgoKSA9PiB7XG4gICAgICB2YXIgZW50aXR5ID0gJHNjb3BlLmVudGl0eTtcbiAgICAgIGlmICgkc2NvcGUuam9iSWQpIHtcbiAgICAgICAgaWYgKCghZW50aXR5IHx8IGVudGl0eS4kamVua2luc0pvYikpIHtcbiAgICAgICAgICB2YXIgcXVlcnlQYXRoID0gXCJmYWJyaWM4L3N0YWdlcy9cIjtcbiAgICAgICAgICBpZiAoJHNjb3BlLm1vZGVsLnBlbmRpbmdPbmx5KSB7XG4gICAgICAgICAgICBxdWVyeVBhdGggPSBcImZhYnJpYzgvcGVuZGluZ1N0YWdlcy9cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgVXJsSGVscGVycy5qb2luKFwiam9iXCIsICRzY29wZS5qb2JJZCwgcXVlcnlQYXRoKSk7XG4gICAgICAgICAgaWYgKHVybCAmJiAoISRzY29wZS5tb2RlbC5qb2IgfHwgS3ViZXJuZXRlcy5rZWVwUG9sbGluZ01vZGVsKSkge1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGVucmljaEplbmtpbnNQaXBlbGluZUpvYihkYXRhLCAkc2NvcGUuaWQsICRzY29wZS5qb2JJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGhhc09iamVjdENoYW5nZWQoZGF0YSwgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSkpIHtcbiAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKFwiZW50aXR5IGhhcyBjaGFuZ2VkIVwiKTtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5qb2IgPSBkYXRhO1xuXG4gICAgICAgICAgICAgICAgICB2YXIgYnVpbGRzID0gZGF0YS5idWlsZHM7XG4gICAgICAgICAgICAgICAgICBpZiAoYnVpbGRzICYmIGJ1aWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNlbGVjdEJ1aWxkKGJ1aWxkc1swXSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoJHNjb3BlLm1vZGVsKSB7XG4gICAgICAgICAgICBLdWJlcm5ldGVzLmVucmljaEJ1aWxkcygkc2NvcGUua3ViZU1vZGVsLmJ1aWxkcyk7XG5cbiAgICAgICAgICAgIHZhciBidWlsZHMgPSBbXTtcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUua3ViZU1vZGVsLmJ1aWxkcywgKGJ1aWxkKSA9PiB7XG4gICAgICAgICAgICAgIHZhciBsYWJlbHMgPSBLdWJlcm5ldGVzLmdldExhYmVscyhidWlsZCk7XG4gICAgICAgICAgICAgIHZhciBhcHAgPSBsYWJlbHNbXCJhcHBcIl07XG4gICAgICAgICAgICAgIGlmIChhcHAgPT09ICRzY29wZS5wcm9qZWN0SWQpIHtcbiAgICAgICAgICAgICAgICBidWlsZHMucHVzaChidWlsZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnVpbGRzID0gXy5zb3J0QnkoYnVpbGRzLCBcIiRjcmVhdGlvbkRhdGVcIikucmV2ZXJzZSgpO1xuICAgICAgICAgICAgdmFyIGFsbEJ1aWxkcyA9IGJ1aWxkcztcbiAgICAgICAgICAgIGlmIChhbGxCdWlsZHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBidWlsZHMgPSBfLmZpbHRlcihhbGxCdWlsZHMsIChiKSA9PiAhYi4kY3JlYXRpb25EYXRlKTtcbiAgICAgICAgICAgICAgaWYgKCFidWlsZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYnVpbGRzID0gW2FsbEJ1aWxkc1swXV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwaXBlbGluZXMgPSBbXTtcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChidWlsZHMsIChidWlsZCkgPT4ge1xuICAgICAgICAgICAgICB2YXIgYnVpbGRTdGF0dXMgPSBidWlsZC5zdGF0dXMgfHwge307XG4gICAgICAgICAgICAgIHZhciByZXN1bHQgPSBidWlsZFN0YXR1cy5waGFzZSB8fCBcIlwiO1xuICAgICAgICAgICAgICB2YXIgcmVzdWx0VXBwZXJDYXNlID0gcmVzdWx0LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gXCJcIjtcbiAgICAgICAgICAgICAgdmFyICR2aWV3TGluayA9IGJ1aWxkLiR2aWV3TGluaztcbiAgICAgICAgICAgICAgdmFyICRsb2dMaW5rID0gYnVpbGQuJGxvZ3NMaW5rO1xuICAgICAgICAgICAgICB2YXIgJHRpbWVzdGFtcCA9IGJ1aWxkLiRjcmVhdGlvbkRhdGU7XG4gICAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IGJ1aWxkU3RhdHVzLmR1cmF0aW9uO1xuICAgICAgICAgICAgICBpZiAoZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICAvLyAxN3MgPSAxNywwMDAsMDAwLDAwMCBvbiBvcGVuc2hpZnRcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IGR1cmF0aW9uIC8gMTAwMDAwMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgZGlzcGxheU5hbWUgPSBLdWJlcm5ldGVzLmdldE5hbWUoYnVpbGQpO1xuICAgICAgICAgICAgICB2YXIgJGljb25DbGFzcyA9IGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKHJlc3VsdFVwcGVyQ2FzZSk7XG4gICAgICAgICAgICAgIHZhciAkYmFja2dyb3VuZENsYXNzID0gY3JlYXRlQnVpbGRTdGF0dXNCYWNrZ3JvdW5kQ2xhc3MocmVzdWx0VXBwZXJDYXNlKTtcbiAgICAgICAgICAgICAgdmFyIHN0YWdlID0ge1xuICAgICAgICAgICAgICAgIHN0YWdlTmFtZTogXCJPcGVuU2hpZnQgQnVpbGRcIixcbiAgICAgICAgICAgICAgICAkdmlld0xpbms6ICR2aWV3TGluayxcbiAgICAgICAgICAgICAgICAkbG9nTGluazogJGxvZ0xpbmssXG4gICAgICAgICAgICAgICAgJHN0YXJ0VGltZTogJHRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24sXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgJGljb25DbGFzczogJGljb25DbGFzcyxcbiAgICAgICAgICAgICAgICAkYmFja2dyb3VuZENsYXNzOiAkYmFja2dyb3VuZENsYXNzXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHZhciBwaXBlbGluZSA9IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IGRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICR2aWV3TGluazogJHZpZXdMaW5rLFxuICAgICAgICAgICAgICAgICRsb2dMaW5rOiAkbG9nTGluayxcbiAgICAgICAgICAgICAgICAkdGltZXN0YW1wOiAkdGltZXN0YW1wLFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcbiAgICAgICAgICAgICAgICBzdGFnZXM6IFtzdGFnZV1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcGlwZWxpbmVzLnB1c2gocGlwZWxpbmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGxldHMgZmlsdGVyIHRoZSBPcGVuU2hpZnQgYnVpbGRzIGFuZCBtYWtlIGEgcGlwZWxpbmUgZnJvbSB0aGF0XG4gICAgICAgICAgICAkc2NvcGUubW9kZWwuam9iID0ge1xuICAgICAgICAgICAgICAkam9iSWQ6ICRzY29wZS5qb2JJZCxcbiAgICAgICAgICAgICAgJHByb2plY3Q6ICRzY29wZS5wcm9qZWN0SWQsXG4gICAgICAgICAgICAgIGJ1aWxkczogcGlwZWxpbmVzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgfVxuICAgIH0sIDUwKTtcblxuICAgIHVwZGF0ZURhdGEoKTtcblxuICB9KTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XG5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4gIGV4cG9ydCB2YXIgUHJvamVjdENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUHJvamVjdENvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCAkZWxlbWVudCwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG5cbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgICAgICRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX0J1aWxkQ29uZmlnO1xuICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XG4gICAgICAgICRzY29wZS5lbnZWZXJzaW9uc0NhY2hlID0ge307XG4gICAgICAgICRzY29wZS5lbnZOU0NhY2hlcyA9IHt9O1xuICAgICAgICAkc2NvcGUuZW52VmVyc2lvbnMgPSB7fTtcblxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gW107IC8vRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuaWQpO1xuICAgICAgICB1cGRhdGVUYWJzKCk7XG4gICAgICAgIC8vIHRoaXMgaXMgdXNlZCBmb3IgdGhlIHBlbmRpbmdQaXBlbGluZXMgdmlld1xuICAgICAgICAkc2NvcGUuam9iSWQgPSAkc2NvcGUuaWQ7XG4gICAgICAgICRzY29wZS5wZW5kaW5nUGlwZWxpbmVzT25seSA9IHRydWU7XG5cbiAgICAgICAgJHNjb3BlLiRvbignamVua2luc1NlbGVjdGVkQnVpbGQnLCAoZXZlbnQsIGJ1aWxkKSA9PiB7XG4gICAgICAgICAgJHNjb3BlLnNlbGVjdGVkQnVpbGQgPSBidWlsZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVE9ETyB0aGlzIHNob3VsZCBiZSB1bm5lY2Vzc2FyeSBidXQgc2VlbXMgc29tZXRpZW1zIHRoaXMgd2F0Y2ggZG9lc24ndCBhbHdheXMgdHJpZ2dlciB1bmxlc3MgeW91IGhpdCByZWxvYWQgb24gdGhpcyBwYWdlXG4gICAgICAgIGlmICgkc2NvcGUubW9kZWwuYnVpbGRjb25maWdzKSB7XG4gICAgICAgICAgb25CdWlsZENvbmZpZ3MoJHNjb3BlLm1vZGVsLmJ1aWxkY29uZmlncyk7XG4gICAgICAgIH1cbiAgICAgICAgS3ViZXJuZXRlcy53YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcImJ1aWxkY29uZmlnc1wiLCAkc2NvcGUubmFtZXNwYWNlLCBvbkJ1aWxkQ29uZmlncyk7XG5cbiAgICAgICAgZnVuY3Rpb24gb25CdWlsZENvbmZpZ3MoYnVpbGRDb25maWdzKSB7XG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGJ1aWxkQ29uZmlncywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gS3ViZXJuZXRlcy5nZXROYW1lKGRhdGEpO1xuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICRzY29wZS5pZCkge1xuICAgICAgICAgICAgICB2YXIgc29ydGVkQnVpbGRzID0gbnVsbDtcbiAgICAgICAgICAgICAgS3ViZXJuZXRlcy5lbnJpY2hCdWlsZENvbmZpZyhkYXRhLCBzb3J0ZWRCdWlsZHMpO1xuICAgICAgICAgICAgICBpZiAoaGFzT2JqZWN0Q2hhbmdlZChkYXRhLCAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlKSkge1xuICAgICAgICAgICAgICAgIGxvZy5pbmZvKFwiZW50aXR5IGhhcyBjaGFuZ2VkIVwiKTtcbiAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5ID0gZGF0YTtcbiAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5LiRidWlsZCA9IChkYXRhLiRmYWJyaWM4Q29kZVZpZXdzIHx8IHt9KVsnZmFicmljOC5saW5rLmJyb3dzZUdvZ3MudmlldyddO1xuICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5zZXRQcm9qZWN0KCRzY29wZS5lbnRpdHkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHVwZGF0ZUVudmlyb25tZW50V2F0Y2goKTtcbiAgICAgICAgICAgICAgdXBkYXRlVGFicygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICB9XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogV2UgaGF2ZSB1cGRhdGVkIHRoZSBlbnRpdHkgc28gbGV0cyBtYWtlIHN1cmUgd2UgYXJlIHdhdGNoaW5nIGFsbCB0aGUgZW52aXJvbm1lbnRzIHRvIGZpbmRcbiAgICAgICAgICogdGhlIHByb2plY3QgdmVyc2lvbnMgZm9yIGVhY2ggbmFtZXNwYWNlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiB1cGRhdGVFbnZpcm9ubWVudFdhdGNoKCkge1xuICAgICAgICAgIHZhciBwcm9qZWN0ID0gJHNjb3BlLmVudGl0eTtcbiAgICAgICAgICBpZiAocHJvamVjdCkge1xuICAgICAgICAgICAgdmFyIGplbmtpbnNKb2IgPSBwcm9qZWN0LiRqZW5raW5zSm9iO1xuICAgICAgICAgICAgaWYgKGplbmtpbnNKb2IpIHtcbiAgICAgICAgICAgICAgdmFyIGJ1aWxkc1RhYiA9IF8uZmluZCgkc2NvcGUuc3ViVGFiQ29uZmlnLCB7aWQ6IFwiYnVpbGRzXCJ9KTtcbiAgICAgICAgICAgICAgaWYgKGJ1aWxkc1RhYikge1xuICAgICAgICAgICAgICAgIGJ1aWxkc1RhYltcImhyZWZcIl0gPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCksIFwicHJvamVjdHNcIiwgJHNjb3BlLmlkLCBcImplbmtpbnNKb2JcIiwgamVua2luc0pvYik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHByb2plY3QuZW52aXJvbm1lbnRzLCAoZW52KSA9PiB7XG4gICAgICAgICAgICAgIHZhciBucyA9IGVudi5uYW1lc3BhY2U7XG4gICAgICAgICAgICAgIHZhciBjYWNoZXMgPSAkc2NvcGUuZW52TlNDYWNoZXNbbnNdO1xuICAgICAgICAgICAgICBpZiAoIWNhY2hlcykge1xuICAgICAgICAgICAgICAgIGNhY2hlcyA9IHt9O1xuICAgICAgICAgICAgICAgICRzY29wZS5lbnZOU0NhY2hlc1tuc10gPSBjYWNoZXM7XG4gICAgICAgICAgICAgICAgbG9hZFByb2plY3RWZXJzaW9ucygkc2NvcGUsICRlbGVtZW50LCBwcm9qZWN0LCBlbnYsIG5zLCAkc2NvcGUuZW52VmVyc2lvbnMsIGNhY2hlcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVRhYnMoKSB7XG4gICAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUuaWQsIG51bGwsICRzY29wZSk7XG4gICAgICAgIH1cblxuICAgICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlclBsdWdpbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgX21vZHVsZS5jb250cm9sbGVyKCdEZXZlbG9wZXIuUHJvamVjdFNlbGVjdG9yJywgWyckc2NvcGUnLCAnJHJvdXRlUGFyYW1zJywgJ0t1YmVybmV0ZXNNb2RlbCcsICgkc2NvcGUsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsKSA9PiB7XG4gICAgdmFyIHByb2plY3RJZCA9ICRyb3V0ZVBhcmFtc1sncHJvamVjdElkJ10gfHwgJHJvdXRlUGFyYW1zWydwcm9qZWN0J10gfHwgJHJvdXRlUGFyYW1zWydpZCddO1xuICAgIGlmIChwcm9qZWN0SWQpIHtcbiAgICAgICRzY29wZS5wcm9qZWN0SWQgPSBwcm9qZWN0SWQ7XG4gICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWxcbiAgICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLmJ1aWxkY29uZmlncycsIChidWlsZGNvbmZpZ3MpID0+IHtcbiAgICAgICAgJHNjb3BlLnByb2plY3RzID0gYnVpbGRjb25maWdzO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5pbmZvKFwibm8gcHJvamVjdCBJRCBpbiByb3V0ZVBhcmFtczogXCIsICRyb3V0ZVBhcmFtcyk7XG4gICAgfVxuICB9XSk7XG5cbn1cblxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBQcm9qZWN0c0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUHJvamVjdHNDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiRkaWFsb2dcIiwgXCIkd2luZG93XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgJGRpYWxvZywgJHdpbmRvdywgJHRlbXBsYXRlQ2FjaGUsICRyb3V0ZVBhcmFtcywgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsIGxvY2FsU3RvcmFnZSwgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuXG4gICAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XG4gICAgICAgIGRhdGE6ICdtb2RlbC5idWlsZGNvbmZpZ3MnLFxuICAgICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXG4gICAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxuICAgICAgICBmaWx0ZXJPcHRpb25zOiB7XG4gICAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgICB9LFxuICAgICAgICBjb2x1bW5EZWZzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICckbmFtZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpZFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICB9LFxuLypcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc291cmNlLnR5cGUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTb3VyY2UnXG4gICAgICAgICAgfSxcbiovXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLnNvdXJjZS5naXQudXJpJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnUmVwb3NpdG9yeSdcbiAgICAgICAgICB9LFxuLypcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc3RyYXRlZ3kudHlwZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1N0cmF0ZWd5J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLnN0cmF0ZWd5LnN0aVN0cmF0ZWd5LmltYWdlJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU291cmNlIEltYWdlJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLm91dHB1dC5pbWFnZVRhZycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ091dHB1dCBJbWFnZSdcbiAgICAgICAgICB9LFxuKi9cbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ21ldGFkYXRhLmRlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRGVzY3JpcHRpb24nXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRjcmVhdGlvbkRhdGUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdDcmVhdGVkJyxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiY3JlYXRpb25UaW1lVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICckbGFiZWxzVGV4dCcsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhYmVscycsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImxhYmVsVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcblxuICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IGNyZWF0ZVByb2plY3RCcmVhZGNydW1icygpO1xuICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVXb3Jrc3BhY2VTdWJOYXZCYXJzKCk7XG5cbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vJHNjb3BlLmlzTG9nZ2VkSW50b0dvZ3MgPSBGb3JnZS5pc0xvZ2dlZEludG9Hb2dzO1xuXG4gICAgICAkc2NvcGUuZGVsZXRlUHJvbXB0ID0gKHNlbGVjdGVkKSA9PiB7XG4gICAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcbiAgICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcbiAgICAgICAgICBpbmRleDogJyRuYW1lJyxcbiAgICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIG5leHQpIHtcbiAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgZGVsZXRlRW50aXR5KG5leHQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZTogJ0RlbGV0ZSBBcHBzJyxcbiAgICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIEFwcHMgd2lsbCBiZSBkZWxldGVkOicsXG4gICAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcbiAgICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcbiAgICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcbiAgICAgICAgfSkub3BlbigpO1xuICAgICAgfTtcblxuICAgICAgZnVuY3Rpb24gZGVsZXRlRW50aXR5KHNlbGVjdGlvbiwgbmV4dENhbGxiYWNrKSB7XG4gICAgICAgIHZhciBuYW1lID0gKHNlbGVjdGlvbiB8fCB7fSkuJG5hbWU7XG4gICAgICAgIHZhciBqZW5raW5zSm9iID0gc2VsZWN0aW9uLiRqZW5raW5zSm9iO1xuICAgICAgICB2YXIgcHVibGljSmVua2luc1VybCA9IGplbmtpbnNMaW5rKCk7XG4gICAgICAgIC8vdmFyIGplbmtpbnNVcmwgPSBDb3JlLnBhdGhHZXQoc2VsZWN0aW9uLCBbXCIkZmFicmljOFZpZXdzXCIsIFwiZmFicmljOC5saW5rLmplbmtpbnMuam9iXCIsIFwidXJsXCJdKTtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkFib3V0IHRvIGRlbGV0ZSBidWlsZCBjb25maWc6IFwiICsgbmFtZSk7XG4gICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMuYnVpbGRDb25maWdSZXN0VXJsKG5hbWUpO1xuICAgICAgICAgICRodHRwLmRlbGV0ZSh1cmwpLlxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgbmV4dENhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KS5cbiAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBkZWxldGUgYnVpbGQgY29uZmlnIG9uIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgICBuZXh0Q2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwid2FybmluZzogbm8gbmFtZSBmb3Igc2VsZWN0aW9uOiBcIiArIGFuZ3VsYXIudG9Kc29uKHNlbGVjdGlvbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGplbmtpbnNKb2IgJiYgcHVibGljSmVua2luc1VybCkge1xuICAgICAgICAgIHZhciB1cmwgPSBLdWJlcm5ldGVzLmt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2VDdXJyZW50TmFtZXNwYWNlKGplbmtpbnNTZXJ2aWNlTmFtZUFuZFBvcnQsIFVybEhlbHBlcnMuam9pbihcImpvYlwiLCBqZW5raW5zSm9iLCBcImRvRGVsZXRlXCIpKTtcbiAgICAgICAgICB2YXIgYm9keSA9IFwiXCI7XG4gICAgICAgICAgdmFyIGNvbmZpZyA9IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBsb2cuaW5mbyhcInBvc3RpbmcgdG8gamVua2luc1VybDogXCIgKyB1cmwpO1xuICAgICAgICAgICRodHRwLnBvc3QodXJsLCBib2R5LCBjb25maWcpLlxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgbG9nLmluZm8oXCJNYW5hZ2VkIHRvIGRlbGV0ZSBcIiArIHVybCk7XG4gICAgICAgICAgICB9KS5cbiAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBkZWxldGUgamVua2lucyBqb2IgYXQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4vKlxuICAgICAgJHNjb3BlLiRrZWVwUG9sbGluZyA9ICgpID0+IEt1YmVybmV0ZXMua2VlcFBvbGxpbmdNb2RlbDtcbiAgICAgICRzY29wZS5mZXRjaCA9IFBvbGxIZWxwZXJzLnNldHVwUG9sbGluZygkc2NvcGUsIChuZXh0OigpID0+IHZvaWQpID0+IHtcbiAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMuYnVpbGRDb25maWdzUmVzdFVSTCgpO1xuICAgICAgICAkaHR0cC5nZXQodXJsKS5cbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcImdvdCBkYXRhIFwiICsgYW5ndWxhci50b0pzb24oZGF0YSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICB2YXIgc29ydGVkQnVpbGRzID0gbnVsbDtcbiAgICAgICAgICAgICAgJHNjb3BlLmJ1aWxkQ29uZmlncyA9IEt1YmVybmV0ZXMuZW5yaWNoQnVpbGRDb25maWdzKGRhdGEuaXRlbXMsIHNvcnRlZEJ1aWxkcyk7XG4gICAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLlxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAkc2NvcGUuZmV0Y2goKTtcbiovXG4gICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBXb3Jrc3BhY2VDb250cm9sbGVyID0gY29udHJvbGxlcihcIldvcmtzcGFjZUNvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wibmFtZXNwYWNlXCJdO1xuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcbiAgICAgICAgJHNjb3BlLmNvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMua3ViZXJuZXRlc19OYW1lc3BhY2U7XG5cbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuICAgICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IGNyZWF0ZVdvcmtzcGFjZUJyZWFkY3J1bWJzKCk7XG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlV29ya3NwYWNlU3ViTmF2QmFycygpO1xuXG4gICAgICAgICRzY29wZS4ka2VlcFBvbGxpbmcgPSAoKSA9PiBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWw7XG4gICAgICAgICRzY29wZS5mZXRjaCA9IFBvbGxIZWxwZXJzLnNldHVwUG9sbGluZygkc2NvcGUsIChuZXh0OigpID0+IHZvaWQpID0+IHtcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xuICAgICAgICAgICAgdmFyIHVybCA9IFVybEhlbHBlcnMuam9pbihLdWJlcm5ldGVzLnJlc291cmNlc1VyaUZvcktpbmQoXCJQcm9qZWN0c1wiKSwgJHNjb3BlLmlkKTtcbiAgICAgICAgICAgIGxvZy5pbmZvKFwiTG9hZGluZyB1cmw6IFwiICsgdXJsKTtcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5ID0gZW5yaWNoV29ya3NwYWNlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICBuZXh0KCk7XG5cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzY29wZS5mZXRjaCgpO1xuICAgICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBXb3Jrc3BhY2VzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJXb3Jrc3BhY2VzQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCAgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiRGF0YUluZm9Nb2RlbFwiLCBcIiRpbnRlcnZhbFwiLFxuICAgICAgKCRzY29wZSwgIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIERhdGFJbmZvTW9kZWwsJGludGVydmFsKSA9PiB7XG4gICAgICAgICRzY29wZS5tb2RlbCA9IERhdGFJbmZvTW9kZWw7XG4gICAgICAgICRzY29wZS5pdGVtcz1bXTtcblxuICAgICAgICAkc2NvcGUubG9jYWxpdGVtcz1bXTtcbiAgICAgICAgdmFyIHJvb3RQYXRoPVwiXCI7XG4gICAgICAgIHZhciBGaWx0ZXJMaXN0ID17XG4gICAgICAgICAgICBsZW5ndGg6MFxuICAgICAgICB9O1xuXG4gICAgICAgIHVwZGF0ZSgpO1xuXG4gICAgICAgICRzY29wZS50cmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBub2RlQ2hpbGRyZW46IFwiY2hpbGRyZW5cIixcbiAgICAgICAgICBkaXJTZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICAgIG11bHRpU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICBpbmplY3RDbGFzc2VzOiB7XG4gICAgICAgICAgICB1bDogXCJhMVwiLFxuICAgICAgICAgICAgbGk6IFwiYTJcIixcbiAgICAgICAgICAgIGxpU2VsZWN0ZWQ6IFwiYTdcIixcbiAgICAgICAgICAgIGlFeHBhbmRlZDogXCJhM1wiLFxuICAgICAgICAgICAgaUNvbGxhcHNlZDogXCJhNFwiLFxuICAgICAgICAgICAgaUxlYWY6IFwiYTVcIixcbiAgICAgICAgICAgIGxhYmVsOiBcImE2XCIsXG4gICAgICAgICAgICBsYWJlbFNlbGVjdGVkOiBcImE4XCJcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLnRyZWVPcHRpb25zcyA9IHtcbiAgICAgICAgICBub2RlQ2hpbGRyZW46IFwiY2hpbGRyZW5cIixcbiAgICAgICAgICBkaXJTZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICAgIG11bHRpU2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICAgIGluamVjdENsYXNzZXM6IHtcbiAgICAgICAgICAgIHVsOiBcImExXCIsXG4gICAgICAgICAgICBsaTogXCJhMlwiLFxuICAgICAgICAgICAgbGlTZWxlY3RlZDogXCJhN1wiLFxuICAgICAgICAgICAgaUV4cGFuZGVkOiBcImEzXCIsXG4gICAgICAgICAgICBpQ29sbGFwc2VkOiBcImE0XCIsXG4gICAgICAgICAgICBpTGVhZjogXCJhNVwiLFxuICAgICAgICAgICAgbGFiZWw6IFwiYTZcIixcbiAgICAgICAgICAgIGxhYmVsU2VsZWN0ZWQ6IFwiYThcIlxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAkc2NvcGUuc2hvd1NlbGVjdGVkID0gKG5vZGUsc2VsZWN0ZWQpPT57XG5cbiAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNlcnZlcml0ZW1zID0gW107XG4gICAgICAgICAgIHZhciBhcnJheSA9IG5ldyBBcnJheSgpO1xuICAgICAgICAgICBpZihzZWxlY3RlZCl7XG4gICAgICAgICAgICAgIGlmKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgIGFycmF5LnVuc2hpZnQobm9kZSk7XG4gICAgICAgICAgICAgICAgIHdoaWxlKGFycmF5Lmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlPWFycmF5LnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBpZihjaGlsZE5vZGUuY2hpbGRyZW4ubGVuZ3RoPjApe1xuICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGk9MDtpPGNoaWxkTm9kZS5jaGlsZHJlbi5sZW5ndGg7aSsrKVxuICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnVuc2hpZnQoY2hpbGROb2RlLmNoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkTm9kZS5oYXNPd25Qcm9wZXJ0eShcInBhdGhcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5zZXJ2ZXJpdGVtcy5wdXNoKGNoaWxkTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgaWYobm9kZS5oYXNPd25Qcm9wZXJ0eShcInBhdGhcIikpXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5zZXJ2ZXJpdGVtcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAkc2NvcGUuZGF0YUZvclRoZVRyZWUgPSAkc2NvcGUubW9kZWwuc2VydmVyZGF0YTtcbiAgICAgICAgJHNjb3BlLmRhdGFGb3JUaGVUcmVlTG9jYWwgPSAkc2NvcGUubW9kZWwubG9jYWxkYXRhO1xuXG4gICAgICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLnNlcnZlcmRhdGEnLCBmdW5jdGlvbihuZXdWYWx1ZSxvbGRWYWx1ZSl7XG4gICAgICAgICAgIGlmKG5ld1ZhbHVlKXtcbiAgICAgICAgICAgICAgJHNjb3BlLmRhdGFGb3JUaGVUcmVlID0gJHNjb3BlLm1vZGVsLnNlcnZlcmRhdGE7XG4gICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLiR3YXRjaCgnbW9kZWwubG9jYWxkYXRhJywgZnVuY3Rpb24obmV3VmFsdWUsb2xkVmFsdWUpe1xuICAgICAgICAgICBpZihuZXdWYWx1ZSl7XG4gICAgICAgICAgICAgICRzY29wZS5kYXRhRm9yVGhlVHJlZUxvY2FsID0gJHNjb3BlLm1vZGVsLmxvY2FsZGF0YTtcbiAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUudXBMb2FkWE1MRmlsZSA9IChmaWxlcykgPT4ge1xuICAgICAgICAgICBGaWx0ZXJMaXN0Lmxlbmd0aD0wO1xuICAgICAgICAgICBpZihmaWxlcy5sZW5ndGg+MCl7XG4gICAgICAgICAgICAgdmFyIGo9MDtcbiAgICAgICAgICAgICBmb3IodmFyIGk9MDtpPGZpbGVzLmxlbmd0aDtpKyspe1xuICAgICAgICAgICAgICAgaWYoZmlsZXNbaV0ubmFtZS5pbmRleE9mKFwiZGF0YS54bWxcIikhPS0xKXtcbiAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coZmlsZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgcm9vdFBhdGg9ZmlsZXNbaV0ud2Via2l0UmVsYXRpdmVQYXRoLnJlcGxhY2UoL1xcL2RhdGEueG1sJC8sXCJcIik7XG4gICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdFN0cmluZyA9IFwie1xcXCJuYW1lXFxcIjogXFxcIuaVsOaNrlxcXCIsIFxcXCJjaGlsZHJlblxcXCI6W1wiO1xuICAgICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgIC8vICAgICBhbGVydChzdHIpO1xuICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBcIjxEYXRhPlwiO1xuICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1FbmQgPSBcIjwvRGF0YT5cIjtcbiAgICAgICAgICAgICAgICAgICAgIC8vIMK0w73Ct8K1wrvDmMK1w4TCvcOhwrnDu8KjwrpcbiAgICAgICAgICAgICAgICAgICAgIGlmKHN0ciAhPSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gw5XDu8K4w7Z4bWwgw43DqsOVw7vDisO9wr7DncKjwrp4bWxkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeG1sZGF0YSA9IHN0ci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gwrDCtMK2w5TDj8OzwrfDlsK1w4TDisO9wr7DncKjwrpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtQXJyYXkgPSB4bWxkYXRhLnNwbGl0KGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zaXplID0gaXRlbUFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgayA9IDE7IGsgPCBpdGVtc2l6ZTsgaysrKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXZhbHVlID0gaXRlbUFycmF5W2tdLnNwbGl0KGl0ZW1FbmQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3ZpbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3ZpbmNlVmFsdWVUZW1wID0gaXRlbXZhbHVlWzBdLnNwbGl0KFwiPHByb3ZpbmNlPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdmluY2VWYWx1ZSA9IHByb3ZpbmNlVmFsdWVUZW1wW3Byb3ZpbmNlVmFsdWVUZW1wLmxlbmd0aC0xXS5zcGxpdChcIjwvcHJvdmluY2U+XCIpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2l0eVZhbHVlVGVtcCA9IGl0ZW12YWx1ZVswXS5zcGxpdChcIjxjaXR5PlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2l0eVZhbHVlID0gY2l0eVZhbHVlVGVtcFtjaXR5VmFsdWVUZW1wLmxlbmd0aC0xXS5zcGxpdChcIjwvY2l0eT5cIilbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvdW50eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudHlWYWx1ZVRlbXAgPSBpdGVtdmFsdWVbMF0uc3BsaXQoXCI8Y291bnR5PlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnR5VmFsdWUgPSBjb3VudHlWYWx1ZVRlbXBbY291bnR5VmFsdWVUZW1wLmxlbmd0aC0xXS5zcGxpdChcIjwvY291bnR5PlwiKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGNvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVWYWx1ZVRlbXAgPSBpdGVtdmFsdWVbMF0uc3BsaXQoXCI8Y29kZT5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVWYWx1ZSA9IGNvZGVWYWx1ZVRlbXBbY29kZVZhbHVlVGVtcC5sZW5ndGgtMV0uc3BsaXQoXCI8L2NvZGU+XCIpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPHN5c19uYW1lPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeXNfbmFtZVZhbHVlVGVtcCA9IGl0ZW12YWx1ZVswXS5zcGxpdChcIjxzeXNfbmFtZT5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5c19uYW1lVmFsdWUgPSBzeXNfbmFtZVZhbHVlVGVtcFtzeXNfbmFtZVZhbHVlVGVtcC5sZW5ndGgtMV0uc3BsaXQoXCI8L3N5c19uYW1lPlwiKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGNoYXJhY3Rlcl9zZXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJhY3Rlcl9zZXRWYWx1ZVRlbXAgPSBpdGVtdmFsdWVbMF0uc3BsaXQoXCI8Y2hhcmFjdGVyX3NldD5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJhY3Rlcl9zZXRWYWx1ZSA9IGNoYXJhY3Rlcl9zZXRWYWx1ZVRlbXBbY2hhcmFjdGVyX3NldFZhbHVlVGVtcC5sZW5ndGgtMV0uc3BsaXQoXCI8L2NoYXJhY3Rlcl9zZXQ+XCIpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPHN5c19uYW1lX2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5c19uYW1lX2NvZGVWYWx1ZVRlbXAgPSBpdGVtdmFsdWVbMF0uc3BsaXQoXCI8c3lzX25hbWVfY29kZT5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5c19uYW1lX2NvZGVWYWx1ZSA9IHN5c19uYW1lX2NvZGVWYWx1ZVRlbXBbc3lzX25hbWVfY29kZVZhbHVlVGVtcC5sZW5ndGgtMV0uc3BsaXQoXCI8L3N5c19uYW1lX2NvZGU+XCIpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxjb250YWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250YWN0VmFsdWVUZW1wID0gaXRlbXZhbHVlWzBdLnNwbGl0KFwiPGNvbnRhY3Q+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250YWN0VmFsdWUgPSBjb250YWN0VmFsdWVUZW1wW2NvbnRhY3RWYWx1ZVRlbXAubGVuZ3RoLTFdLnNwbGl0KFwiPC9jb250YWN0PlwiKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxwaG9uZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGhvbmVWYWx1ZVRlbXAgPSBpdGVtdmFsdWVbMF0uc3BsaXQoXCI8cGhvbmU+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwaG9uZVZhbHVlID0gcGhvbmVWYWx1ZVRlbXBbcGhvbmVWYWx1ZVRlbXAubGVuZ3RoLTFdLnNwbGl0KFwiPC9waG9uZT5cIilbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8ZGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZVZhbHVlVGVtcCA9IGl0ZW12YWx1ZVswXS5zcGxpdChcIjxkYXRlPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZVZhbHVlID0gZGF0ZVZhbHVlVGVtcFtkYXRlVmFsdWVUZW1wLmxlbmd0aC0xXS5zcGxpdChcIjwvZGF0ZT5cIilbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lkIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbUlkID0gY29kZVZhbHVlICsgXCJfXCIgKyBzeXNfbmFtZV9jb2RlVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cCBnZXQgdmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByaWQgPSBpdGVtSWQvLy5yZXBsYWNlKC9cXFwiL2csIFwiXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyB0eXBlVmFsdWUg6YCa6L+H5YmN56uv6aG16Z2i6I635Y+W5oiW6ICF77yf77yf77yM6LSi5pS/MDHmiJbnpL7kv50wMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlVmFsdWUgPSBcIjAxXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBiYXRjaFZhbHVlIOmAmui/h+WJjeerr+mhtemdouiOt+WPluaIluiAhe+8n++8n++8jOaJueasoUEg77ya5aSn5YaZ55qEQe+8jOaJueasoUIg77ya5aSn5YaZ55qEQu+8jFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYXRjaFZhbHVlID0gXCJBXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbW5hbWUgPSBjaXR5VmFsdWUgKyBjb3VudHlWYWx1ZSArIHN5c19uYW1lVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnNpb25pZCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih4aHIucmVhZHlTdGF0ZT09NCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih4aHIuc3RhdHVzPT0yMDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbmlkID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub3BlbihcImdldFwiLFwiL2dldHZlcnNpb24/aWQ9XCIrcmlkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnNlbmQobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNvYmogPSBKU09OLnBhcnNlKHZlcnNpb25pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhtbHZlcnNpb24gPSBqc29iai5pZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9wZXJWYWx1ZSA9IFwie1xcXCJpZFxcXCI6XFxcIlwiK2l0ZW1JZCtcIlxcXCIsIFxcXCJuYW1lXFxcIjpcXFwiXCIraXRlbW5hbWUrXCJcXFwiLCBcXFwiY2l0eVxcXCI6XFxcIlwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXR5VmFsdWUgKyBcIlxcXCIsIFxcXCJjb3VudHlcXFwiOlxcXCJcIitjb3VudHlWYWx1ZStcIlxcXCIsIFxcXCJzeXN0ZW1cXFwiOlxcXCJcIitcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX25hbWVWYWx1ZStcIlxcXCIsIFxcXCJ0eXBlXFxcIjpcXFwiXCIgKyB0eXBlVmFsdWUgKyBcIlxcXCIsXFxcImJhdGNoXFxcIjpcXFwiXCIrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoVmFsdWUrXCJcXFwiLFxcXCJ2ZXJzaW9uXFxcIjpcXFwiXCIreG1sdmVyc2lvbitcIlxcXCIsIFxcXCJwcm92aW5jZVxcXCI6XFxcIlwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aW5jZVZhbHVlICtcIlxcXCIsIFxcXCJjb2RlXFxcIjpcXFwiXCIrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVWYWx1ZSArXCJcXFwiLCBcXFwiY2hhcmFjdGVyX3NldFxcXCI6XFxcIlwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJfc2V0VmFsdWUgK1wiXFxcIiwgXFxcInN5c19uYW1lX2NvZGVcXFwiOlxcXCJcIitcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX25hbWVfY29kZVZhbHVlICtcIlxcXCIsIFxcXCJjb250YWN0XFxcIjpcXFwiXCIrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhY3RWYWx1ZSArXCJcXFwiLCBcXFwicGhvbmVcXFwiOlxcXCJcIitcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmVWYWx1ZSArXCJcXFwiLCBcXFwiZGF0ZVxcXCI6XFxcIlwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlVmFsdWUgK1wiXFxcIn1cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTdHJpbmcgPSByZXN1bHRTdHJpbmcgKyBwcm9wZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihrIDwgaXRlbXNpemUtMSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFN0cmluZyA9cmVzdWx0U3RyaW5nK1wiLCBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFN0cmluZyA9IHJlc3VsdFN0cmluZytcIl19XCI7XG4gICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5sb2NhbGRhdGEgPSBKU09OLnBhcnNlKHJlc3VsdFN0cmluZy50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlc1tpXSxcInV0Zi04XCIpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICAgICBGaWx0ZXJMaXN0Lmxlbmd0aCs9MTtcbiAgICAgICAgICAgICAgICAgICB2YXIgZmlsZV9pZD1maWxlc1tpXS5uYW1lLnJlcGxhY2UoL1xcLlxcdyokLywnJyk7XG4gICAgICAgICAgICAgICAgICAgLy8gdmFyIGZpbGVfaWQ9ZmlsZVtpXS53ZWJraXRSZWxhdGl2ZVBhdGgucmVwbGFjZSgvXlthLXpdKlxcLyQvLCcnKTtcbiAgICAgICAgICAgICAgICAgICAvL1x0ICBmaWxlX2lkID0gZmlsZV9pZC5yZXBsYWNlKC9cXC9cXHcrJC8sJycpO1xuICAgICAgICAgICAgICAgICAgRmlsdGVyTGlzdFtqKytdPWZpbGVzW2ldO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgfVxuICAgICAgICAgICAkc2NvcGUubW9kZWwudXBsb2FkcHJvY2VzcyA9IHt9O1xuICAgICAgICB9XG5cdFxuICAgICAgJHNjb3BlLnVwTG9hZEZpbGVzID0gKCk9PntcbiAgICAgICAgIGlmKCRzY29wZS5tb2RlbC51cGxvYWRlZFN0YXR1cyA9PSBcIm9uY2VcIil7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICB9XG4gICAgICAgICAkc2NvcGUubW9kZWwudXBsb2FkZWRTdGF0dXMgPSBcIm9uY2VcIjtcbiAgICAgICAgICRzY29wZS5tb2RlbC5jcmVhdGVGb2xkZXJMaXN0KEZpbHRlckxpc3Qscm9vdFBhdGgpO1xuICAgICAgICAgaWYoJHNjb3BlLm1vZGVsLmZvbGRlckxpc3QubGVuZ3RoID4wICYmICRzY29wZS5tb2RlbC5zZWxlY3RlZG5vZGVzLmxlbmd0aCA+MCl7XG4gICAgICAgICAgICB2YXIgaXNOb3RFeGl0ZWQgPSBbXTtcbiAgICAgICAgICAgIHZhciBpc0V4aXRlZCA9IFtdO1xuICAgICAgICAgICAgZm9yKHZhciBub2RlIGluICRzY29wZS5tb2RlbC5zZWxlY3RlZG5vZGVzKXtcbiAgICAgICAgICAgICAgIGlmKCEkc2NvcGUubW9kZWwuZm9sZGVyTGlzdC5oYXNPd25Qcm9wZXJ0eSgkc2NvcGUubW9kZWwuc2VsZWN0ZWRub2Rlc1tub2RlXS5pZCkpe1xuICAgICAgICAgICAgICAgICAgaXNOb3RFeGl0ZWQucHVzaCgkc2NvcGUubW9kZWwuc2VsZWN0ZWRub2Rlc1tub2RlXSk7XG4gICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgIGlmKCRzY29wZS5tb2RlbC51cGxvYWRwcm9jZXNzWyRzY29wZS5tb2RlbC5zZWxlY3RlZG5vZGVzW25vZGVdLmlkXSA9PT0gJ3VuZGVmaW5lZCcgfHwgJHNjb3BlLm1vZGVsLnVwbG9hZHByb2Nlc3NbJHNjb3BlLm1vZGVsLnNlbGVjdGVkbm9kZXNbbm9kZV0uaWRdID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgaXNFeGl0ZWQucHVzaCgkc2NvcGUubW9kZWwuc2VsZWN0ZWRub2Rlc1tub2RlXSk7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihpc05vdEV4aXRlZC5sZW5ndGggPjAgKXtcbiAgICAgICAgICAgICAgIHZhciBzdHIgPSBcIuS7peS4i+aVsOaNruaWh+S7tuS4jeWtmOWcqDpcXG5cXHLmlofku7blkI06XFxuXCI7XG4gICAgICAgICAgICAgICBmb3IodmFyIGl0ZW0gaW4gaXNOb3RFeGl0ZWQpXG4gICAgICAgICAgICAgICAgICBzdHIgKz0gaXNOb3RFeGl0ZWRbaXRlbV0uaWQrXCJcXG5cIjtcbiAgICAgICAgICAgICAgIGFsZXJ0KHN0cik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGlzRXhpdGVkLmxlbmd0aCA8PTApe1xuICAgICAgICAgICAgICAgYWxlcnQoXCLmlbDmja7mlofku7bkuK3msqHmnInlj6/nlKjkuIrkvKDnmoTmlofku7YhXCIpO1xuICAgICAgICAgICAgfWVsc2V7XG5cdFx0XHQgICB2YXIgaXN1cGxvYWFkID0gMSxpID0gMDtcblx0XHRcdCBcblx0XHRcdCAgIHZhciB0aW1lckZvclVwbG9hZCA9ICRpbnRlcnZhbChmdW5jdGlvbigpe1xuXHRcdFx0XHQgIGlmKGkgPj0gaXNFeGl0ZWQubGVuZ3RoKXtcbi8vXHRcdFx0XHRcdCBjbGVhckludGVydmFsKHRpbWVyRm9yVXBsb2FkKTtcblx0XHRcdFx0XHQgJGludGVydmFsLmNhbmNlbCh0aW1lckZvclVwbG9hZCk7XG5cdFx0XHRcdCAgfVxuXHRcdFx0XHQgIGlmKGlzdXBsb2FhZCA9PSAxKXtcblx0XHRcdFx0XHQgdmFyIHIgPSBuZXcgUmVzdW1hYmxlKHtcblx0XHRcdFx0XHRcdHRhcmdldDonL3VwbG9hZGZpbGVzJyxcblx0XHRcdFx0XHRcdGNodW5rU2l6ZTo1MCoxMDI0KjEwMjQsXG5cdFx0XHRcdFx0XHRzaW11bHRhbmVvdXNVcGxvYWRzOjQwMCxcblx0XHRcdFx0XHRcdHRlc3RDaHVua3M6dHJ1ZSxcblx0XHRcdFx0XHRcdHRocm90dGxlUHJvZ3Jlc3NDYWxsYmFja3M6MVxuXHRcdFx0XHRcdH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIixcIi9nZXRjbGllbnRpcFwiLHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgaWYoeGhyLnJlYWR5U3RhdGU9PTQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoeGhyLnN0YXR1cz09MjAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRpcCh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeGhyLnNlbmQobnVsbCk7XG5cblx0XHRcdFx0XHRyLm9uKCdmaWxlQWRkZWQnLCBmdW5jdGlvbihmaWxlKXtcblx0XHRcdFx0XHRcdHIudXBsb2FkKCk7XG5cdFx0XHRcdFx0XHR1cGRhdGUoKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdCRzY29wZS5tb2RlbC5yZXN1bWFibGVqcy5wdXNoKHtcblx0XHRcdFx0XHQgICBkaXJuYW1lIDogaXNFeGl0ZWRbaV0uaWQsXG5cdFx0XHRcdFx0ICAgcmVzdW1hYmxlIDogclxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHIuc2V0Um9vdFBhdGgoaXNFeGl0ZWRbaV0udHlwZStcIi9cIitpc0V4aXRlZFtpXS5iYXRjaCtcIi9cIitpc0V4aXRlZFtpXS5pZCtcIi9cIitpc0V4aXRlZFtpXS52ZXJzaW9uK1wiL1wiKTtcblx0XHRcdFx0XHRyLm15TG9hZEZpbGVzKCRzY29wZS5tb2RlbC5mb2xkZXJMaXN0W2lzRXhpdGVkW2ldLmlkXSk7XG5cdFx0XHRcdFx0ci51cGxvYWQoKTtcblx0XHRcdFx0XHRyLm9uKCdmaWxlUHJvZ3Jlc3MnLGZ1bmN0aW9uKGZpbGUpe1xuXHRcdFx0XHRcdFx0dmFyIGZpbGVfaWQ9ZmlsZS5yZWxhdGl2ZVBhdGgucmVwbGFjZSgvXlthLXpdKlxcLyQvLCcnKTtcblx0XHRcdFx0XHRcdHZhciBmaWxlc3RyID0gXCJcIjtcblx0XHRcdFx0XHRcdHZhciByZWcgPSAvXFwvWzAtOV0qXypbMC05XSpcXC8vZztcblx0XHRcdFx0XHRcdHZhciByZXN1bHRzdHI7XG5cdFx0XHRcdFx0XHR3aGlsZSggKHJlc3VsdHN0ciA9IHJlZy5leGVjKGZpbGVfaWQpKSAhPSBudWxsKXtcblx0XHRcdFx0XHRcdFx0ZmlsZXN0ciA9IHJlc3VsdHN0clswXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZpbGVfaWQgPSBmaWxlc3RyLnJlcGxhY2UoL1xcLyovZywnJyk7XG5cdFx0XHRcdFx0XHRyLnNldEZpbGVJZChmaWxlX2lkKTtcbi8vXHRcdFx0XHRcdFx0JHNjb3BlLiRhcHBseShmdW5jdGlvbigpe1xuXHRcdFx0XHRcdFx0XHQkc2NvcGUubW9kZWwudXBsb2FkcHJvY2Vzc1tmaWxlX2lkXSA9IE1hdGguZmxvb3Ioci5wcm9ncmVzcygpKjk4KTtcbi8vXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFxuXHRcdFx0XHRcdHIub24oJ2NvbXBsZXRlJywgZnVuY3Rpb24oKXtcblx0XHRcdFx0XHRcdHZhciB0aW1lckZvcmNobW9kID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtcblx0XHRcdFx0XHRcdFx0dmFyIHBhdGhqc29uID0gXCJcXFwicGF0aFxcXCI6XFxcIlwiK3IuZ2V0cm9vdFBhdGgoKStcIlxcXCJcIlxuXHRcdFx0XHRcdFx0XHR2YXIgZGF0YW1lc3NhZ2UgPSB7XCJwYXRoXCI6ci5nZXRyb290UGF0aCgpLFwiZmlsZW51bVwiOiRzY29wZS5tb2RlbC5mb2xkZXJMaXN0W2lzRXhpdGVkW2ktMV0uaWRdLmxlbmd0aH07XG5cdFx0XHRcdFx0XHRcdCRzY29wZS5tb2RlbC51cGxvYWRwcm9jZXNzW3IuZ2V0RmlsZUlkKCldID0gTWF0aC5yb3VuZChyLnByb2dyZXNzKCkqOTkpO1xuXG5cdFx0XHRcdFx0XHRcdCRodHRwKHtcblx0XHRcdFx0XHRcdFx0ICB1cmw6Jy9zZXRjaG1vZDJkaXInLFxuXHRcdFx0XHRcdFx0XHQgIG1ldGhvZDonR0VUJyxcblx0XHRcdFx0XHRcdFx0ICBwYXJhbXM6ZGF0YW1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0fSkuc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcblx0XHRcdFx0XHRcdFx0ICBpZihkYXRhKXtcblx0XHRcdFx0XHRcdFx0XHRcdC8vY29uc29sZS5sb2coZGF0YSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgY2xpZW50ZGF0YSA9IGRhdGE7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihjbGllbnRkYXRhID09IFwiY2htb2RcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZERhdGVNZXNzYWdlKGlzRXhpdGVkW2ktMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0aXNub3djaGVjayhcIjFcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5ta1JldGZpbGVVcGxvYWRTdWNjZWVkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lckZvcmNobW9kKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCAgfVxuXG5cdFx0XHRcdFx0XHRcdH0pLmVycm9yKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKFwiLS0tLS1zZW5kRGF0ZU1lc3NhZ2UtLS0tLS0tLS0tLS0tXCIrc3RhdHVzKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdH0sNTAwMCk7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRpKys7XG5cdFx0XHRcdFx0aXN1cGxvYWFkID0gMDtcblxuICAgICAgICAgICAgICAgICAgICByLm9uKCdmaWxldXBsb2FkZW5kc3VjY2VlZCcsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC51cGxvYWRwcm9jZXNzW3IuZ2V0RmlsZUlkKCldID0gTWF0aC5mbG9vcihyLnByb2dyZXNzKCkqMTAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgJHRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAkaHR0cCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDonL3htbGZvcm1zZXJ2ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6J1Bvc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnN1Y2Nlc3MoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNlcnZlcmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImVycm9yXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgfSwyMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgaXN1cGxvYWFkID0gMTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cdFx0XHRcdFx0XG4gICAgICAgICAgICAgICAgICB9XG5cdFx0XHQgICB9LDIwMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBhbGVydChcIuaCqOayoeaciemAieaLqemcgOimgeS4iuS8oOeahOaVsOaNruaWh+S7tu+8jOaIluS9oOmAieaLqeeahOaWh+S7tuS4reS4jeWtmOWcqOaMh+WumuagvOW8j+eahOaVsOaNruaWh+S7tiFcIik7XG4gICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gc2VuZERhdGVNZXNzYWdlKGRhdGFtZXNzYWdlKXtcbiAgICAgICAgICAkaHR0cCh7XG4gICAgICAgICAgICAgdXJsOicvc2VuZERhdGVNZXNzYWdlJyxcbiAgICAgICAgICAgICBtZXRob2Q6J0dFVCcsXG4gICAgICBcdCAgICAgcGFyYW1zOmRhdGFtZXNzYWdlXG4gICAgICAgICAgfSkuc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcbiAgICAgICAgICAgICBpZihkYXRhKVxuICAgICAgICAgICAgIHZhciBjbGllbnRkYXRhID0gZGF0YTtcbiAgICAgICAgICB9KS5lcnJvcihmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcblxuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAkc2NvcGUuZG93bkxvYWRGaWxlcyA9ICgpPT57XG4gICAgICAgICAgLy9LdWJlcm5ldGVzLmNvbm5lY3RPcmFjbGUoJGh0dHAsICR0aW1lb3V0LCBcIjE5Mi4xNjguMC4xMDM6NjQxODJcIiwgXCIzMjA2MTQtNTQtMVwiLCA1MDApO1xuICAgICAgfVxuXG4gICAgICAkc2NvcGUuaXNTZWxlY3RlZD0gKG5vZGUpPT57XG4gICAgICAgICB2YXIgaW5kZXggPSAkc2NvcGUubW9kZWwuZmluZEl0ZW1JbmRleChub2RlKTtcbiAgICAgICAgIGlmKGluZGV4ICE9PSAtMSl7XG4gICAgICAgICAgICAkc2NvcGUubW9kZWwuc2VsZWN0ZWRpdGVtcy5zcGxpY2UoaW5kZXgsMSk7XG4gICAgICAgICB9XG4gICAgICAgICBlbHNle1xuICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNlbGVjdGVkaXRlbXMucHVzaChub2RlKTtcbiAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJHNjb3BlLnNob3dTZWxlY3RlZExvY2FsID0gKG5vZGUsc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgIHZhciBpbmRleCA9ICRzY29wZS5tb2RlbC5maW5kTm9kZXMobm9kZSk7XG4gICAgICAgICBpZihpbmRleCAhPT0gXCItMVwiKXtcbiAgICAgICAgICAgIGlmKCRzY29wZS5tb2RlbC51cGxvYWRwcm9jZXNzW25vZGUuaWRdID09PTApXG4gICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuc2VsZWN0ZWRub2Rlcy5zcGxpY2UoaW5kZXgsMSk7XG4gICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICRzY29wZS5tb2RlbC51cGxvYWRwcm9jZXNzW25vZGUuaWRdID0wO1xuICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNlbGVjdGVkbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJHNjb3BlLnN0YXJ0T3JhY2xlID0gKCk9PiB7XG4gICAgICAgICBpZigkc2NvcGUubW9kZWwuc2VsZWN0ZWRpdGVtcy5sZW5ndGggPjApe1xuICAgICAgICAgICAgZm9yKHZhciBpZCBpbiAkc2NvcGUubW9kZWwuc2VsZWN0ZWRpdGVtcyl7XG4gICAgICAgICAgICAgICB2YXIgT2JqID0gY3JlYXRlUkNPYmooJHNjb3BlLm1vZGVsLnNlbGVjdGVkaXRlbXNbaWRdKTtcbiAgICAgICAgICAgICAgIGlmKCFjaGVja0lzUnVubmluZyhLdWJlcm5ldGVzTW9kZWwucmVwbGljYXRpb25Db250cm9sbGVycyxPYmopKXtcbiAgICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuY3JlYXRlUkMoT2JqLCAocmMpID0+e1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJjKTtcbiAgICAgICAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLmNvbm5lY3RPcmFjbGUoJGh0dHAsICR0aW1lb3V0LCBcIi9jb25uZWN0VG9PcmFjbGVcIiwgXCJjcmVhdGVcIiwgcmMubWV0YWRhdGEubmFtZSwgMCk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gY2hlY2tJc1J1bm5pbmcocmVwbGljYXRpb25Db250cm9sbGVycyxpdGVtKXtcbiAgICAgICAgIGZvcih2YXIgcmMgaW4gcmVwbGljYXRpb25Db250cm9sbGVycyl7XG4gICAgICAgICAgICBpZihpdGVtLm5hbWUgPT09IHJlcGxpY2F0aW9uQ29udHJvbGxlcnNbcmNdLm1ldGFkYXRhLm5hbWUpXG4gICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgIH1cbiAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gY3JlYXRlUkNPYmooaXRlbTogT2JqZWN0KXtcbiAgICAgICAgIHZhciBhcnJheSA9aXRlbS5pZC5zcGxpdChcIl9cIik7XG4gICAgICAgICBpZihhcnJheVswXSA9PT0gXCIxMFwiKXtcbiAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGl0ZW0pO1xuICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgIFwibmFtZVwiOiBpdGVtLmZha2VuYW1lLFxuICAgICAgICAgICAgICAgICBcImxhYmVsc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBpdGVtLmZha2VuYW1lXG4gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgIFwicGF0aFwiOiBpdGVtLnBhdGggK1wiYXBwL1wiLFxuICAgICAgICAgICAgICAgICBcImlzVGFyZ2V0XCIgOiAgXCJ0cnVlXCJcbiAgICAgICAgICAgICB9XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogYXJyYXlbMl0gKyBcIi1cIiArIGFycmF5WzNdICsgXCItXCIgKyBhcnJheVs0XSxcbiAgICAgICAgICAgICAgICBcImxhYmVsc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IGFycmF5WzBdLFxuICAgICAgICAgICAgICAgICAgIFwiYmF0Y2hcIjogYXJyYXlbMV0sXG4gICAgICAgICAgICAgICAgICAgXCJyZWdpb25cIjogYXJyYXlbMl0sXG4gICAgICAgICAgICAgICAgICAgXCJzeXN0ZW1cIjogYXJyYXlbM10sXG4gICAgICAgICAgICAgICAgICAgXCJ2ZXJzaW9uXCI6IGFycmF5WzRdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcInBhdGhcIjogaXRlbS5wYXRoICtcImFwcC9cIixcbiAgICAgICAgICAgICAgICBcImlzVGFyZ2V0XCI6IFwiZmFsc2VcIlxuICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNldGNobW9kMmRpcihkYXRhbWVzc2FnZSl7XG4gICAgICAgICAkaHR0cCh7XG4gICAgICAgICAgICB1cmw6Jy9zZXRjaG1vZDJkaXInLFxuICAgICAgICAgICAgbWV0aG9kOidHRVQnLFxuICAgICAgICAgICAgcGFyYW1zOmRhdGFtZXNzYWdlXG4gICAgICAgICB9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xuICAgICAgICAgICAgaWYoZGF0YSlcbiAgICAgICAgICAgICAgdmFyIGNsaWVudGRhdGEgPSBkYXRhO1xuICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XG4gICAgICAgICAgICAgY29uc29sZS5sb2coXCItLS0tLXNlbmREYXRlTWVzc2FnZS0tLS0tLS0tLS0tLS1cIitzdGF0dXMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlKCl7XG4gICAgICAgICBmb3IodmFyIGk9MDsgaTwkc2NvcGUubW9kZWwucmVzdW1hYmxlanMubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgdmFyIGRpcklkID0gJHNjb3BlLm1vZGVsLnJlc3VtYWJsZWpzW2ldLmRpcm5hbWU7XG4gICAgICAgICAgICB2YXIgciA9ICRzY29wZS5tb2RlbC5yZXN1bWFibGVqc1tpXS5yZXN1bWFibGU7XG4gICAgICAgICAgICByLm9uKCdmaWxlUHJvZ3Jlc3MnLCAoZmlsZSkgPT57XG5cdFx0XHRcdGlmKHIuZ2V0aXNub3djaGVjaygpLmluZGV4T2YoXCIwXCIpID09IC0xKXtcblx0XHRcdFx0XHQkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0XHQkc2NvcGUubW9kZWwudXBsb2FkcHJvY2Vzc1tkaXJJZF0gPSBNYXRoLmZsb29yKHIucHJvZ3Jlc3MoKSoxMDApO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0JHNjb3BlLiRhcHBseShmdW5jdGlvbigpe1xuXHRcdFx0XHRcdFx0JHNjb3BlLm1vZGVsLnVwbG9hZHByb2Nlc3NbZGlySWRdID0gTWF0aC5mbG9vcihyLnByb2dyZXNzKCkqOTgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgIH1cbiAgICAgIH1cbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcbiAgXG4gIGV4cG9ydCB2YXIgQXBwcyA9IGNvbnRyb2xsZXIoXCJBcHBzXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1NlcnZpY2VzXCIsIFwiS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnNcIiwgXCJLdWJlcm5ldGVzUG9kc1wiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJGRpYWxvZ1wiLCBcIiR0aW1lb3V0XCIsIFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTZXJ2aWNlczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzUmVwbGljYXRpb25Db250cm9sbGVyczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzUG9kczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJGRpYWxvZywgJHRpbWVvdXQpID0+IHtcblxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcblxuICAgICRzY29wZS5hcHBzID0gW107XG4gICAgJHNjb3BlLmFsbEFwcHMgPSBbXTtcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUuZmV0Y2hlZCA9IGZhbHNlO1xuICAgICRzY29wZS5qc29uID0gJyc7XG4gICAgQ29udHJvbGxlckhlbHBlcnMuYmluZE1vZGVsVG9TZWFyY2hQYXJhbSgkc2NvcGUsICRsb2NhdGlvbiwgJ2lkJywgJ19pZCcsIHVuZGVmaW5lZCk7XG4gICAgQ29udHJvbGxlckhlbHBlcnMuYmluZE1vZGVsVG9TZWFyY2hQYXJhbSgkc2NvcGUsICRsb2NhdGlvbiwgJ2FwcFNlbGVjdG9yU2hvdycsICdvcGVuQXBwJywgdW5kZWZpbmVkKTtcbiAgICBDb250cm9sbGVySGVscGVycy5iaW5kTW9kZWxUb1NlYXJjaFBhcmFtKCRzY29wZSwgJGxvY2F0aW9uLCAnbW9kZScsICdtb2RlJywgJ2RldGFpbCcpO1xuXG4gICAgdmFyIGJyYW5jaCA9ICRzY29wZS5icmFuY2ggfHwgXCJtYXN0ZXJcIjtcbiAgICB2YXIgbmFtZXNwYWNlID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGFwcE1hdGNoZXMoYXBwKSB7XG4gICAgICB2YXIgZmlsdGVyVGV4dCA9ICRzY29wZS5hcHBTZWxlY3Rvci5maWx0ZXJUZXh0O1xuICAgICAgaWYgKGZpbHRlclRleHQpIHtcbiAgICAgICAgcmV0dXJuIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5ncm91cElkLCBmaWx0ZXJUZXh0KSB8fFxuICAgICAgICAgIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5hcnRpZmFjdElkLCBmaWx0ZXJUZXh0KSB8fFxuICAgICAgICAgIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5uYW1lLCBmaWx0ZXJUZXh0KSB8fFxuICAgICAgICAgIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5kZXNjcmlwdGlvbiwgZmlsdGVyVGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBSdW5uaW5nKGFwcCkge1xuICAgICAgcmV0dXJuICRzY29wZS5tb2RlbC5hcHBzLmFueSgocnVubmluZykgPT4gcnVubmluZy5hcHBQYXRoID09PSBhcHAuYXBwUGF0aCk7XG4gICAgfVxuXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgZGF0YTogJ21vZGVsLmFwcHMnLFxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgfSxcbiAgICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAgeyBmaWVsZDogJyRuYW1lJywgZGlzcGxheU5hbWU6ICdBcHAnLCBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCBcImFwcEljb25UZW1sYXRlLmh0bWxcIikpIH0sXG4gICAgICAgIHsgZmllbGQ6ICckc2VydmljZXNUZXh0JywgZGlzcGxheU5hbWU6ICdTZXJ2aWNlcycsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwU2VydmljZXNUZW1wbGF0ZS5odG1sXCIpKSB9LFxuICAgICAgICB7IGZpZWxkOiAnJHJlcGxpY2F0aW9uQ29udHJvbGxlcnNUZXh0JywgZGlzcGxheU5hbWU6ICdDb250cm9sbGVycycsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwUmVwbGljYXRpb25Db250cm9sbGVyVGVtcGxhdGUuaHRtbFwiKSkgfSxcbiAgICAgICAgeyBmaWVsZDogJyRwb2RDb3VudCcsIGRpc3BsYXlOYW1lOiAnUG9kcycsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwUG9kQ291bnRzQW5kTGlua1RlbXBsYXRlLmh0bWxcIikpIH0sXG4gICAgICAgIHsgZmllbGQ6ICckY3JlYXRpb25EYXRlJywgZGlzcGxheU5hbWU6ICdEZXBsb3llZCcsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwRGVwbG95ZWRUZW1wbGF0ZS5odG1sXCIpKSB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuXG4gICAgJHNjb3BlLmV4cGFuZGVkUG9kcyA9IFtdO1xuXG4gICAgJHNjb3BlLiRvbignZG8tcmVzaXplJywgKCRldmVudCwgY29udHJvbGxlcikgPT4ge1xuICAgICAgJHNjb3BlLnJlc2l6ZURpYWxvZy5vcGVuKGNvbnRyb2xsZXIpO1xuICAgIH0pO1xuXG4gICAgICAgIFxuICAgICRzY29wZS5wb2RFeHBhbmRlZCA9IChwb2QpID0+IHtcbiAgICAgIHZhciBpZCA9IGdldE5hbWUocG9kKVxuICAgICAgcmV0dXJuIGlkICYmICgkc2NvcGUuZXhwYW5kZWRQb2RzIHx8IFtdKS5pbmRleE9mKGlkKSA+PSAwO1xuICAgIH07XG5cbiAgICAkc2NvcGUuZXhwYW5kUG9kID0gKHBvZCkgPT4ge1xuICAgICAgdmFyIGlkID0gZ2V0TmFtZShwb2QpO1xuICAgICAgaWYgKGlkKSB7XG4gICAgICAgICRzY29wZS5leHBhbmRlZFBvZHMucHVzaChpZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgICRzY29wZS5jb2xsYXBzZVBvZCA9IChwb2QpID0+IHtcbiAgICAgIHZhciBpZCA9IGdldE5hbWUocG9kKTtcbiAgICAgIGlmIChpZCkge1xuICAgICAgICBfLnJlbW92ZSgkc2NvcGUuZXhwYW5kZWRQb2RzLCAodikgPT4gaWQgPT09IHYpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICBLdWJlcm5ldGVzLnNldEpzb24oJHNjb3BlLCAkbG9jYXRpb24uc2VhcmNoKClbJ19pZCddLCAkc2NvcGUubW9kZWwuYXBwcyk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVBcHAoYXBwLCBvbkNvbXBsZXRlRm4pIHtcbiAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlcnZpY2VzKHNlcnZpY2VzLCBzZXJ2aWNlLCBvbkNvbXBsZXRlZEZuKSB7XG4gICAgICAgIGlmICghc2VydmljZSB8fCAhc2VydmljZXMpIHtcbiAgICAgICAgICByZXR1cm4gb25Db21wbGV0ZWRGbigpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpZCA9IGdldE5hbWUoc2VydmljZSk7XG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICBsb2cud2FybihcIk5vIElEIGZvciBzZXJ2aWNlIFwiICsgYW5ndWxhci50b0pzb24oc2VydmljZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEt1YmVybmV0ZXNTZXJ2aWNlcy5kZWxldGUoe1xuICAgICAgICAgICAgaWQ6IGlkXG4gICAgICAgICAgfSwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJEZWxldGVkIHNlcnZpY2U6IFwiLCBpZCk7XG4gICAgICAgICAgICBkZWxldGVTZXJ2aWNlcyhzZXJ2aWNlcywgc2VydmljZXMuc2hpZnQoKSwgb25Db21wbGV0ZWRGbik7XG4gICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZyBzZXJ2aWNlOiBcIiwgZXJyb3IpO1xuICAgICAgICAgICAgZGVsZXRlU2VydmljZXMoc2VydmljZXMsIHNlcnZpY2VzLnNoaWZ0KCksIG9uQ29tcGxldGVkRm4pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGRlbGV0ZVJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVycywgcmVwbGljYXRpb25Db250cm9sbGVyLCBvbkNvbXBsZXRlZEZuKSB7XG4gICAgICAgIGlmICghcmVwbGljYXRpb25Db250cm9sbGVyIHx8ICFyZXBsaWNhdGlvbkNvbnRyb2xsZXJzKSB7XG4gICAgICAgICAgcmV0dXJuIG9uQ29tcGxldGVkRm4oKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaWQgPSBnZXROYW1lKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICBsb2cud2FybihcIk5vIElEIGZvciByZXBsaWNhdGlvbkNvbnRyb2xsZXIgXCIgKyBhbmd1bGFyLnRvSnNvbihyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBLdWJlcm5ldGVzUmVwbGljYXRpb25Db250cm9sbGVycy5kZWxldGUoe1xuICAgICAgICAgICAgaWQ6IGlkXG4gICAgICAgICAgfSwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJEZWxldGVkIHJlcGxpY2F0aW9uQ29udHJvbGxlcjogXCIsIGlkKTtcbiAgICAgICAgICAgIGRlbGV0ZVJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVycywgcmVwbGljYXRpb25Db250cm9sbGVycy5zaGlmdCgpLCBvbkNvbXBsZXRlZEZuKTtcbiAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGRlbGV0aW5nIHJlcGxpY2F0aW9uQ29udHJvbGxlcjogXCIsIGVycm9yKTtcbiAgICAgICAgICAgIGRlbGV0ZVJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVycywgcmVwbGljYXRpb25Db250cm9sbGVycy5zaGlmdCgpLCBvbkNvbXBsZXRlZEZuKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkZWxldGVQb2RzKHBvZHMsIHBvZCwgb25Db21wbGV0ZWRGbikge1xuICAgICAgICBpZiAoIXBvZCB8fCAhcG9kcykge1xuICAgICAgICAgIHJldHVybiBvbkNvbXBsZXRlZEZuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlkID0gZ2V0TmFtZShwb2QpO1xuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgbG9nLndhcm4oXCJObyBJRCBmb3IgcG9kIFwiICsgYW5ndWxhci50b0pzb24ocG9kKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgS3ViZXJuZXRlc1BvZHMuZGVsZXRlKHtcbiAgICAgICAgICAgIGlkOiBpZFxuICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4ge1xuICAgICAgICAgICAgbG9nLmRlYnVnKFwiRGVsZXRlZCBwb2Q6IFwiLCBpZCk7XG4gICAgICAgICAgICBkZWxldGVQb2RzKHBvZHMsIHBvZHMuc2hpZnQoKSwgb25Db21wbGV0ZWRGbik7XG4gICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZyBwb2Q6IFwiLCBlcnJvcik7XG4gICAgICAgICAgICBkZWxldGVQb2RzKHBvZHMsIHBvZHMuc2hpZnQoKSwgb25Db21wbGV0ZWRGbik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHNlcnZpY2VzID0gW10uY29uY2F0KGFwcC5zZXJ2aWNlcyk7XG4gICAgICBkZWxldGVTZXJ2aWNlcyhzZXJ2aWNlcywgc2VydmljZXMuc2hpZnQoKSwgKCkgPT4ge1xuXG4gICAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXJzID0gW10uY29uY2F0KGFwcC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzKTtcbiAgICAgICAgZGVsZXRlUmVwbGljYXRpb25Db250cm9sbGVycyhyZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCByZXBsaWNhdGlvbkNvbnRyb2xsZXJzLnNoaWZ0KCksICgpID0+IHtcblxuICAgICAgICAgIHZhciBwb2RzID0gW10uY29uY2F0KGFwcC5wb2RzKTtcbiAgICAgICAgICBkZWxldGVQb2RzKHBvZHMsIHBvZHMuc2hpZnQoKSwgb25Db21wbGV0ZUZuKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAkc2NvcGUuZGVsZXRlU2luZ2xlQXBwID0gKGFwcCkgPT4ge1xuICAgICAgJHNjb3BlLmRlbGV0ZVByb21wdChbYXBwXSk7XG4gICAgfVxuXG4gICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xuICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoc2VsZWN0ZWQpKSB7XG4gICAgICAgIHNlbGVjdGVkID0gW3tcbiAgICAgICAgICBpZDogc2VsZWN0ZWRcbiAgICAgICAgfV07XG4gICAgICB9XG4gICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XG4gICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxuICAgICAgICBpbmRleDogJyRuYW1lJyxcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIG5leHQpIHtcbiAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSBuZXh0Lm5hbWU7XG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZGVsZXRpbmc6IFwiLCBpZCk7XG4gICAgICAgICAgICAgICAgZGVsZXRlQXBwKG5leHQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImRlbGV0ZWQ6IFwiLCBpZCk7XG4gICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6ICdEZWxldGUgQXBwcz8nLFxuICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIEFwcHMgd2lsbCBiZSBkZWxldGVkOicsXG4gICAgICAgIG9rVGV4dDogJ0RlbGV0ZScsXG4gICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcbiAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcbiAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXG4gICAgICB9KS5vcGVuKCk7XG4gICAgfTtcblxuICAgICRzY29wZS5hcHBTZWxlY3RvciA9IHtcbiAgICAgIGZpbHRlclRleHQ6IFwiXCIsXG4gICAgICBmb2xkZXJzOiBbXSxcbiAgICAgIHNlbGVjdGVkQXBwczogW10sXG5cbiAgICAgIGlzT3BlbjogKGZvbGRlcikgPT4ge1xuICAgICAgICBpZiAoJHNjb3BlLmFwcFNlbGVjdG9yLmZpbHRlclRleHQgIT09ICcnIHx8IGZvbGRlci5leHBhbmRlZCkge1xuICAgICAgICAgIHJldHVybiBcIm9wZW5lZFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcImNsb3NlZFwiO1xuICAgICAgfSxcblxuICAgICAgZ2V0U2VsZWN0ZWRDbGFzczogKGFwcCkgPT4ge1xuICAgICAgICBpZiAoYXBwLmFic3RyYWN0KSB7XG4gICAgICAgICAgcmV0dXJuIFwiYWJzdHJhY3RcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXBwLnNlbGVjdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIFwic2VsZWN0ZWRcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH0sXG5cbiAgICAgIHNob3dBcHA6IChhcHApID0+IHtcbiAgICAgICAgcmV0dXJuIGFwcE1hdGNoZXMoYXBwKSAmJiAhYXBwUnVubmluZyhhcHApO1xuICAgICAgfSxcblxuICAgICAgc2hvd0ZvbGRlcjogKGZvbGRlcikgPT4ge1xuICAgICAgICByZXR1cm4gISRzY29wZS5hcHBTZWxlY3Rvci5maWx0ZXJUZXh0IHx8IGZvbGRlci5hcHBzLnNvbWUoKGFwcCkgPT4gYXBwTWF0Y2hlcyhhcHApICYmICFhcHBSdW5uaW5nKGFwcCkpO1xuICAgICAgfSxcblxuICAgICAgY2xlYXJTZWxlY3RlZDogKCkgPT4ge1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLm1vZGVsLmFwcEZvbGRlcnMsIChmb2xkZXIpID0+IHtcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZm9sZGVyLmFwcHMsIChhcHApID0+IHtcbiAgICAgICAgICAgIGFwcC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgJHNjb3BlLmFwcFNlbGVjdG9yLnNlbGVjdGVkQXBwcyA9IFtdO1xuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlU2VsZWN0ZWQ6ICgpID0+IHtcbiAgICAgICAgLy8gbGV0cyB1cGRhdGUgdGhlIHNlbGVjdGVkIGFwcHNcbiAgICAgICAgdmFyIHNlbGVjdGVkQXBwcyA9IFtdO1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLm1vZGVsLmFwcEZvbGRlcnMsIChmb2xkZXIpID0+IHtcbiAgICAgICAgICB2YXIgYXBwcyA9IGZvbGRlci5hcHBzLmZpbHRlcigoYXBwKSA9PiBhcHAuc2VsZWN0ZWQpO1xuICAgICAgICAgIGlmIChhcHBzKSB7XG4gICAgICAgICAgICBzZWxlY3RlZEFwcHMgPSBzZWxlY3RlZEFwcHMuY29uY2F0KGFwcHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICRzY29wZS5hcHBTZWxlY3Rvci5zZWxlY3RlZEFwcHMgPSBfLnNvcnRCeShzZWxlY3RlZEFwcHMsIFwibmFtZVwiKTtcbiAgICAgIH0sXG5cbiAgICAgIHNlbGVjdDogKGFwcCwgZmxhZykgPT4ge1xuICAgICAgICBhcHAuc2VsZWN0ZWQgPSBmbGFnO1xuICAgICAgICAkc2NvcGUuYXBwU2VsZWN0b3IudXBkYXRlU2VsZWN0ZWQoKTtcbiAgICAgIH0sXG5cbiAgICAgIGhhc1NlbGVjdGlvbjogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJHNjb3BlLm1vZGVsLmFwcEZvbGRlcnMuYW55KChmb2xkZXIpID0+IGZvbGRlci5hcHBzLmFueSgoYXBwKSA9PiBhcHAuc2VsZWN0ZWQpKTtcbiAgICAgIH0sXG5cblxuICAgICAgcnVuU2VsZWN0ZWRBcHBzOiAoKSA9PiB7XG4gICAgICAgIC8vIGxldHMgcnVuIGFsbCB0aGUgc2VsZWN0ZWQgYXBwc1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLmFwcFNlbGVjdG9yLnNlbGVjdGVkQXBwcywgKGFwcCkgPT4ge1xuICAgICAgICAgIHZhciBuYW1lID0gYXBwLm5hbWU7XG4gICAgICAgICAgdmFyIG1ldGFkYXRhUGF0aCA9IGFwcC5tZXRhZGF0YVBhdGg7XG4gICAgICAgICAgaWYgKG1ldGFkYXRhUGF0aCkge1xuICAgICAgICAgICAgLy8gbGV0cyBsb2FkIHRoZSBqc29uL3lhbWxcbiAgICAgICAgICAgIC8vdmFyIHVybCA9IGdpdFBhdGhUb1VybChXaWtpLmdpdFJlbGF0aXZlVVJMKGJyYW5jaCwgbWV0YWRhdGFQYXRoKSk7XG4gICAgICAgICAgICB2YXIgdXJsID0gZ2l0UGF0aFRvVXJsKG1ldGFkYXRhUGF0aCwgYnJhbmNoKTtcbiAgICAgICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGxldHMgY29udmVydCB0aGUganNvbiBvYmplY3Qgc3RydWN0dXJlIGludG8gYSBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgdmFyIGpzb24gPSBhbmd1bGFyLnRvSnNvbihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gKCkgPT4ge307XG4gICAgICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMucnVuQXBwKCRsb2NhdGlvbiwgJHNjb3BlLCAkaHR0cCwgS3ViZXJuZXRlc0FwaVVSTCwganNvbiwgbmFtZSwgZm4sIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUuc3VtbWFyeUh0bWwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBsZXRzIGdvIGJhY2sgdG8gdGhlIGFwcHMgdmlld1xuICAgICAgICAkc2NvcGUuYXBwU2VsZWN0b3IuY2xlYXJTZWxlY3RlZCgpO1xuICAgICAgICAkc2NvcGUuYXBwU2VsZWN0b3JTaG93ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcblxuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIF9tb2R1bGUuZGlyZWN0aXZlKFwiaGF3dGlvQnJlYWRjcnVtYnNcIiwgWydIYXd0aW9CcmVhZGNydW1icycsIChIYXd0aW9CcmVhZGNydW1icykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAvKlxuICAgICAgdGVtcGxhdGVVcmw6IEt1YmVybmV0ZXMudGVtcGxhdGVQYXRoICsgJ2JyZWFkY3J1bWJzLmh0bWwnXG4gICAgICAqL1xuICAgICAgbGluazogKHNjb3BlLCBlbGVtZW50LCBhdHRycykgPT4ge1xuICAgICAgICBIYXd0aW9CcmVhZGNydW1icy5hcHBseShzY29wZS4kZXZhbCgnYnJlYWRjcnVtYkNvbmZpZycpKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgQnVpbGRDb250cm9sbGVyID0gY29udHJvbGxlcihcIkJ1aWxkQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgICAgICRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX0J1aWxkO1xuXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5pZCk7XG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLmlkLCBudWxsLCAkc2NvcGUpO1xuXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xuICAgICAgICAgICAgdmFyIHVybCA9IGJ1aWxkUmVzdFVybCgkc2NvcGUuaWQpO1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkgPSBlbnJpY2hCdWlsZChkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBCdWlsZENvbmZpZ0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiQnVpbGRDb25maWdDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcbiAgICAgICAgJHNjb3BlLmNvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMub3NfYnVpbGRfQnVpbGRDb25maWc7XG5cbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuICAgICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoJHNjb3BlLmlkKTtcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUuaWQpO1xuXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xuICAgICAgICAgICAgdmFyIHVybCA9IGJ1aWxkQ29uZmlnUmVzdFVybCgkc2NvcGUuaWQpO1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgdmFyIHNvcnRlZEJ1aWxkcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICBlbnJpY2hCdWlsZENvbmZpZyhkYXRhLCBzb3J0ZWRCdWlsZHMpO1xuICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNldFByb2plY3QoJHNjb3BlLmVudGl0eSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgICAgICB9KS5cbiAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgQnVpbGRDb25maWdFZGl0Q29udHJvbGxlciA9IF9tb2R1bGUuY29udHJvbGxlcihcIkt1YmVybmV0ZXMuQnVpbGRDb25maWdFZGl0Q29udHJvbGxlclwiLCAoJHNjb3BlLCAkZWxlbWVudCwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLCAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgSzhTQ2xpZW50RmFjdG9yeSwgU2NoZW1hUmVnaXN0cnk6SGF3dGlvRm9ybXMuU2NoZW1hUmVnaXN0cnkpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJwcm9qZWN0XCJdIHx8ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcblxuICAgICAgICB2YXIgbW9kZSA9ICRzY29wZS4kZXZhbCgnbW9kZScpIHx8ICdlZGl0JztcblxuICAgICAgICBsb2cuZGVidWcoXCJNb2RlOiBcIiwgbW9kZSk7XG5cblxuICAgICAgICB2YXIgc3BlY0NvbmZpZyA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkQ29uZmlnU3BlYycpO1xuICAgICAgICB2YXIgZ2l0QnVpbGRTb3VyY2UgPSBTY2hlbWFSZWdpc3RyeS5nZXRTY2hlbWEoJ2lvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5HaXRCdWlsZFNvdXJjZScpO1xuICAgICAgICB2YXIgYnVpbGRTb3VyY2UgPSBTY2hlbWFSZWdpc3RyeS5nZXRTY2hlbWEoJ2lvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFNvdXJjZScpO1xuICAgICAgICB2YXIgYnVpbGRPdXRwdXQgPSBTY2hlbWFSZWdpc3RyeS5nZXRTY2hlbWEoJ2lvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZE91dHB1dCcpO1xuICAgICAgICB2YXIgcmVzb3VyY2VzID0gU2NoZW1hUmVnaXN0cnkuZ2V0U2NoZW1hKCdpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUmVxdWlyZW1lbnRzJyk7XG4gICAgICAgIHZhciByZXZpc2lvbiA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZVJldmlzaW9uJyk7XG4gICAgICAgIHZhciBzdHJhdGVneSA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3RyYXRlZ3knKTtcbiAgICAgICAgdmFyIGN1c3RvbVN0cmF0ZWd5ID0gU2NoZW1hUmVnaXN0cnkuZ2V0U2NoZW1hKCdpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ3VzdG9tQnVpbGRTdHJhdGVneScpO1xuICAgICAgICB2YXIgYnVpbGRUcmlnZ2VyUG9saWN5ID0gU2NoZW1hUmVnaXN0cnkuZ2V0U2NoZW1hKCdpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRUcmlnZ2VyUG9saWN5Jyk7XG5cbiAgICAgICAgdmFyIGdldFNlY3JldHMgPSAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICRzY29wZS5zZWNyZXRzO1xuICAgICAgICB9O1xuXG5cbiAgICAgICAgdmFyIHNlY3JldFNjaGVtYVR5cGUgPSBcImZhYnJpYzhfU2VjcmV0UmVmZXJlbmNlXCI7XG4gICAgICAgIHZhciBzZWNyZXRTY2hlbWFSZWYgPSBcIiMvZGVmaW5pdGlvbnMvXCIgKyBzZWNyZXRTY2hlbWFUeXBlO1xuICAgICAgICB2YXIgc2VjcmV0U2NoZW1hSmF2YVR5cGUgPSBcImlvLmZhYnJpYzguY29uc29sZS5TZWNyZXRSZWZlcmVuY2VcIjtcblxuICAgICAgICB2YXIgc2VjcmV0TmFtZUVsZW1lbnQgPSA8SGF3dGlvRm9ybXMuRm9ybUVsZW1lbnQ+IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogZ2V0U2VjcmV0cyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBzZWNyZXRTY2hlbWE6IEhhd3Rpb0Zvcm1zLkZvcm1Db25maWd1cmF0aW9uID0gPGFueT4ge1xuICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIFwibmFtZVwiOiBzZWNyZXROYW1lRWxlbWVudFxuICAgICAgICAgIH0sXG4gICAgICAgICAgamF2YVR5cGU6IHNlY3JldFNjaGVtYUphdmFUeXBlXG4gICAgICAgIH07XG4gICAgICAgIFNjaGVtYVJlZ2lzdHJ5LmFkZFNjaGVtYShzZWNyZXRTY2hlbWFUeXBlLCBzZWNyZXRTY2hlbWEpO1xuXG4gICAgICAgIC8vIGxldHMgc3dpdGNoIHRvIHRoZSBuZXcgc2VjcmV0cyB0eXBlczpcbiAgICAgICAgdmFyIHNvdXJjZVNlY3JldFByb3BlcnR5ID0gQ29yZS5wYXRoR2V0KGJ1aWxkU291cmNlLCBbXCJwcm9wZXJ0aWVzXCIsIFwic291cmNlU2VjcmV0XCJdKTtcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKFtcbiAgICAgICAgICBDb3JlLnBhdGhHZXQoY3VzdG9tU3RyYXRlZ3ksIFtcInByb3BlcnRpZXNcIiwgXCJwdWxsU2VjcmV0XCJdKSxcbiAgICAgICAgICBzb3VyY2VTZWNyZXRQcm9wZXJ0eSxcbiAgICAgICAgXSwgKHNjaGVtYVR5cGUpID0+IHtcbiAgICAgICAgICBpZiAoc2NoZW1hVHlwZSkge1xuICAgICAgICAgICAgc2NoZW1hVHlwZVtcInR5cGVcIl0gPSBzZWNyZXRTY2hlbWFUeXBlO1xuICAgICAgICAgICAgc2NoZW1hVHlwZVtcIiRyZWZcIl0gPSBzZWNyZXRTY2hlbWFSZWY7XG4gICAgICAgICAgICBzY2hlbWFUeXBlW1wiamF2YVR5cGVcIl0gPSBzZWNyZXRTY2hlbWFKYXZhVHlwZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGxldHMgdHJ5IG1ha2UgdGhlIGJ1aWxkU291cmNlJ3Mgc291cmNlU2VjcmV0IG1hbmRhdG9yeVxuICAgICAgICAvL3NjaGVtYVNldFJlcXVpcmVkKGN1c3RvbVN0cmF0ZWd5LCAncHVsbFNlY3JldCcpO1xuICAgICAgICBzY2hlbWFTZXRSZXF1aXJlZChidWlsZFNvdXJjZSwgJ3NvdXJjZVNlY3JldCcpO1xuICAgICAgICBpZiAoc291cmNlU2VjcmV0UHJvcGVydHkpIHtcbiAgICAgICAgICBDb3JlLnBhdGhTZXQoc291cmNlU2VjcmV0UHJvcGVydHksIFsncHJvcGVydGllcycsICdyZXF1aXJlZCddLCB0cnVlKTtcbiAgICAgICAgICBDb3JlLnBhdGhTZXQoc291cmNlU2VjcmV0UHJvcGVydHksIFsncHJvcGVydGllcycsICdpbnB1dC1hdHRyaWJ1dGVzJywgJ3JlcXVpcmVkJ10sIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgJHNjb3BlLmN1c3RvbVN0cmF0ZWd5ID0gY3VzdG9tU3RyYXRlZ3k7XG4gICAgICAgICRzY29wZS5idWlsZFNvdXJjZSA9IGJ1aWxkU291cmNlO1xuXG4gICAgICAgICRzY29wZS5zZWNyZXRzID0gW107XG5cbiAgICAgICAgLy8gJHNjb3BlLmNvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMub3NfYnVpbGRfQnVpbGRDb25maWc7XG4gICAgICAgIC8vJHNjb3BlLnNwZWNDb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX0J1aWxkQ29uZmlnU3BlYztcbiAgICAgICAgLy9cbiAgICAgICAgc3BlY0NvbmZpZy5zdHlsZSA9IEhhd3Rpb0Zvcm1zLkZvcm1TdHlsZS5TVEFOREFSRDtcbiAgICAgICAgc3BlY0NvbmZpZy5wcm9wZXJ0aWVzWyd0cmlnZ2VycyddWydsYWJlbC1hdHRyaWJ1dGVzJ10gPSB7XG4gICAgICAgICAgc3R5bGU6ICdkaXNwbGF5OiBub25lOydcbiAgICAgICAgfTtcblxuICAgICAgICBnaXRCdWlsZFNvdXJjZS5jb250cm9scyA9IFsndXJpJywgJ3JlZicsICcqJ107XG4gICAgICAgIGJ1aWxkU291cmNlLnByb3BlcnRpZXNbJ3R5cGUnXS50eXBlID0gJ2hpZGRlbic7XG4gICAgICAgIGJ1aWxkU291cmNlLnByb3BlcnRpZXNbJ3R5cGUnXVsnZGVmYXVsdCddID0gJ0dpdCc7XG4gICAgICAgIGJ1aWxkU291cmNlLmNvbnRyb2xzID0gWydnaXQnLCAnY29udGV4dERpcicsICdzb3VyY2VTZWNyZXQnLCAnKiddO1xuXG4gICAgICAgIGdpdEJ1aWxkU291cmNlWydoaWRlTGVnZW5kJ10gPSB0cnVlO1xuICAgICAgICBidWlsZFNvdXJjZVsnaGlkZUxlZ2VuZCddID0gdHJ1ZTtcbiAgICAgICAgYnVpbGRPdXRwdXRbJ2hpZGVMZWdlbmQnXSA9IHRydWU7XG4gICAgICAgIHJlc291cmNlc1snaGlkZUxlZ2VuZCddID0gdHJ1ZTtcbiAgICAgICAgcmV2aXNpb25bJ2hpZGVMZWdlbmQnXSA9IHRydWU7XG4gICAgICAgIHN0cmF0ZWd5WydoaWRlTGVnZW5kJ10gPSB0cnVlO1xuXG4gICAgICAgIHN0cmF0ZWd5LmNvbnRyb2xzID0gWyd0eXBlJywgJyonXTtcbiAgICAgICAgc3RyYXRlZ3kucHJvcGVydGllc1sndHlwZSddID0ge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICBlbnVtOiBbe1xuICAgICAgICAgICAgJ3ZhbHVlJzogJ0N1c3RvbScsXG4gICAgICAgICAgICAnbGFiZWwnOiAnQ3VzdG9tJ1xuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICd2YWx1ZSc6ICdEb2NrZXInLFxuICAgICAgICAgICAgJ2xhYmVsJzogJ0RvY2tlcidcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAndmFsdWUnOiAnU291cmNlJyxcbiAgICAgICAgICAgICdsYWJlbCc6ICdTb3VyY2UnXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgICAgY3VzdG9tU3RyYXRlZ3lbJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyddID0ge1xuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnQ3VzdG9tJ1wiXG4gICAgICAgIH07XG4gICAgICAgIHN0cmF0ZWd5LnByb3BlcnRpZXNbJ2RvY2tlclN0cmF0ZWd5J11bJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyddID0ge1xuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnRG9ja2VyJ1wiXG4gICAgICAgIH07XG4gICAgICAgIHN0cmF0ZWd5LnByb3BlcnRpZXNbJ3NvdXJjZVN0cmF0ZWd5J11bJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyddID0ge1xuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnU291cmNlJ1wiXG4gICAgICAgIH07XG5cbiAgICAgICAgYnVpbGRUcmlnZ2VyUG9saWN5LmNvbnRyb2xzID0gWyd0eXBlJywgJyonXTtcbiAgICAgICAgYnVpbGRUcmlnZ2VyUG9saWN5LnByb3BlcnRpZXNbJ3R5cGUnXSA9IHtcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICBlbnVtOiBbe1xuICAgICAgICAgICAgJ3ZhbHVlJzogJ0dpdGh1YicsXG4gICAgICAgICAgICAnbGFiZWwnOiAnR2l0aHViJ1xuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICd2YWx1ZSc6ICdJbWFnZUNoYW5nZScsXG4gICAgICAgICAgICAnbGFiZWwnOiAnSW1hZ2UgQ2hhbmdlJ1xuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICd2YWx1ZSc6ICdHZW5lcmljJyxcbiAgICAgICAgICAgICdsYWJlbCc6ICdHZW5lcmljJ1xuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICAgIGJ1aWxkVHJpZ2dlclBvbGljeS5wcm9wZXJ0aWVzWydnZW5lcmljJ11bJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyddID0ge1xuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnR2VuZXJpYydcIlxuICAgICAgICB9O1xuICAgICAgICBidWlsZFRyaWdnZXJQb2xpY3kucHJvcGVydGllc1snZ2l0aHViJ11bJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyddID0ge1xuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnR2l0aHViJ1wiXG4gICAgICAgIH07XG4gICAgICAgIGJ1aWxkVHJpZ2dlclBvbGljeS5wcm9wZXJ0aWVzWydpbWFnZUNoYW5nZSddWydjb250cm9sLWdyb3VwLWF0dHJpYnV0ZXMnXSA9IHtcbiAgICAgICAgICAnbmctc2hvdyc6IFwiZW50aXR5LnR5cGUgPT0gJ0ltYWdlQ2hhbmdlJ1wiXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gcmUtYXJyYW5naW5nIHRoZSBjb250cm9sc1xuICAgICAgICAvL3NwZWNDb25maWcuY29udHJvbHMgPSBbJ3NvdXJjZScsICcqJ107XG4gICAgICAgIFxuICAgICAgICAvLyB0YWJzXG4gICAgICAgIHNwZWNDb25maWcudGFicyA9IHtcbiAgICAgICAgICBcIlNvdXJjZVwiOiBbXCJzb3VyY2VcIl0sXG4gICAgICAgICAgXCJSZXZpc2lvblwiOiBbXCJyZXZpc2lvblwiXSxcbiAgICAgICAgICBcIk91dHB1dFwiOiBbXCJvdXRwdXRcIl0sXG4gICAgICAgICAgXCJSZXNvdXJjZXNcIjogW1wicmVzb3VyY2VzXCJdLFxuICAgICAgICAgIFwiU3RyYXRlZ3lcIjogW1wic3RyYXRlZ3lcIl0sXG4gICAgICAgICAgXCJUcmlnZ2Vyc1wiOiBbXCJ0cmlnZ2Vyc1wiXSxcbiAgICAgICAgICBcIlNlcnZpY2UgQWNjb3VudFwiOiBbXCJzZXJ2aWNlQWNjb3VudFwiXVxuICAgICAgICB9O1xuICAgICAgICAvKlxuICAgICAgICAgKiB3aXphcmQsIG5lZWRzIGFuICdvbkZpbmlzaCcgZnVuY3Rpb24gaW4gdGhlIHNjb3BlXG4gICAgICAgIHNwZWNDb25maWcud2l6YXJkID0gPGFueT57XG4gICAgICAgICAgcGFnZXM6IHtcbiAgICAgICAgICAgIFNvdXJjZToge1xuICAgICAgICAgICAgICBjb250cm9sczogW1wic291cmNlXCJdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgUmV2aXNpb246IHtcbiAgICAgICAgICAgICAgY29udHJvbHM6IFtcInJldmlzaW9uXCJdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgT3V0cHV0OiB7XG4gICAgICAgICAgICAgIGNvbnRyb2xzOiBbXCJvdXRwdXRcIl1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgY29udHJvbHM6IFtcInJlc291cmNlc1wiXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFN0cmF0ZWd5OiB7XG4gICAgICAgICAgICAgIGNvbnRyb2xzOiBbXCJzdHJhdGVneVwiXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFRyaWdnZXJzOiB7XG4gICAgICAgICAgICAgIGNvbnRyb2xzOiBbXCJ0cmlnZ2Vyc1wiXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiU2VydmljZSBBY2NvdW50XCI6IHtcbiAgICAgICAgICAgICAgY29udHJvbHM6IFtcInNlcnZpY2VBY2NvdW50XCJdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAqL1xuXG4gICAgICAgICRzY29wZS5lbnRpdHkgPSB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IFwidjFcIixcbiAgICAgICAgICBcImtpbmRcIjogXCJCdWlsZENvbmZpZ1wiLFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCJuYW1lXCI6IFwiXCIsXG4gICAgICAgICAgICBcImxhYmVsc1wiOiB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJHaXRcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwic3RyYXRlZ3lcIjoge1xuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIkN1c3RvbVwiLFxuICAgICAgICAgICAgICAgIFwiY3VzdG9tU3RyYXRlZ3lcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImZyb21cIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwiRG9ja2VySW1hZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImZhYnJpYzgvb3BlbnNoaWZ0LXMyaS1qZW5raW5zLXRyaWdnZXJcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcImVudlwiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiQkFTRV9VUklcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IGplbmtpbnNVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiSk9CX05BTUVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IGpvYk5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLiR3YXRjaCgnZW50aXR5LnNwZWMuc291cmNlLmdpdC51cmknLCAodmFsKSA9PiB7XG4gICAgICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGxhc3RCaXQgPSB2YWwubWF0Y2goL1teXFwvXSskLylbMF07XG4gICAgICAgICAgaWYgKGxhc3RCaXQpIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gbGFzdEJpdC5yZXBsYWNlKC9cXC5naXQkLywgJycpO1xuICAgICAgICAgICAgbG9nLmRlYnVnKFwibmFtZTogXCIsIG5hbWUpO1xuICAgICAgICAgICAgaWYgKCFDb3JlLmlzQmxhbmsobmFtZSkgXG4gICAgICAgICAgICAgICYmIENvcmUuaXNCbGFuayhDb3JlLnBhdGhHZXQoJHNjb3BlLmVudGl0eSwgWydtZXRhZGF0YScsICduYW1lJ10pKSkge1xuICAgICAgICAgICAgICBDb3JlLnBhdGhTZXQoJHNjb3BlLmVudGl0eSwgWydtZXRhZGF0YScsICduYW1lJ10sIG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuICAgICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U2V0dGluZ3NCcmVhZGNydW1icygkc2NvcGUucHJvamVjdElkKTtcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUucHJvamVjdElkKTtcbiAgICAgICAgJHNjb3BlLnRhYnMgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFNldHRpbmdzU3ViTmF2QmFycygkc2NvcGUucHJvamVjdElkKTtcblxuICAgICAgICB3YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcInNlY3JldHNcIiwgJHNjb3BlLm5hbWVzcGFjZSwgb25TZWNyZXRzKTtcblxuXG4gICAgICAgICRzY29wZS5idWlsZENvbmZpZ0NsaWVudCA9IEs4U0NsaWVudEZhY3RvcnkuY3JlYXRlKFwiYnVpbGRjb25maWdzXCIsICRzY29wZS5uYW1lc3BhY2UpO1xuXG4gICAgICAgICRlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcbiAgICAgICAgICAkc2NvcGUuJGRlc3Ryb3koKTtcbiAgICAgICAgfSk7XG4gICAgICAgICRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4ge1xuICAgICAgICAgIEs4U0NsaWVudEZhY3RvcnkuZGVzdHJveSgkc2NvcGUuYnVpbGRDb25maWdDbGllbnQpO1xuICAgICAgICB9KTtcblxuLypcbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4qL1xuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUuc2F2ZSA9ICgpID0+IHtcbiAgICAgICAgICBsb2cuaW5mbyhcIlNhdmluZyFcIik7XG5cblxuICAgICAgICAgIHZhciBlbnRpdHkgPSAkc2NvcGUuZW50aXR5O1xuICAgICAgICAgIHZhciBzcGVjID0gKGVudGl0eSB8fCB7fSkuc3BlYyB8fCB7fTtcblxuICAgICAgICAgIC8vIFRPRE8gdXBkYXRlIHRoZSBqZW5raW5zIGpvYiBuYW1lIVxuXG4gICAgICAgICAgLy8gbGV0cyBkZWxldGUgbG90cyBvZiBjcnVmdFxuICAgICAgICAgIHZhciBzdHJhdGVneSA9IHNwZWMuc3RyYXRlZ3kgfHwge307XG4gICAgICAgICAgZGVsZXRlIHN0cmF0ZWd5W1wiZG9ja2VyU3RyYXRlZ3lcIl07XG4gICAgICAgICAgZGVsZXRlIHN0cmF0ZWd5W1wic291cmNlU3RyYXRlZ3lcIl07XG5cbiAgICAgICAgICBkZWxldGUgc3BlY1tcInJldmlzaW9uXCJdO1xuICAgICAgICAgIGRlbGV0ZSBzcGVjW1wib3V0cHV0XCJdO1xuICAgICAgICAgIGRlbGV0ZSBzcGVjW1wicmVzb3VyY2VzXCJdO1xuXG4gICAgICAgICAgdmFyIHN0cmF0ZWd5UHVsbFNlY3JldE5hbWUgPSBDb3JlLnBhdGhHZXQoc3BlYywgW1wic3RyYXRlZ3lcIiwgXCJjdXN0b21TdHJhdGVneVwiLCBcInB1bGxTZWNyZXRcIiwgXCJuYW1lXCJdKTtcbiAgICAgICAgICB2YXIgc291cmNlU2VjcmV0TmFtZSA9IENvcmUucGF0aEdldChzcGVjLCBbXCJzb3VyY2VcIiwgXCJzb3VyY2VTZWNyZXRcIiwgXCJuYW1lXCJdKTtcbiAgICAgICAgICBsb2cuaW5mbyhcInNvdXJjZVNlY3JldE5hbWU6IFwiICsgc291cmNlU2VjcmV0TmFtZSk7XG4gICAgICAgICAgbG9nLmluZm8oXCJzdHJhdGVneVB1bGxTZWNyZXROYW1lOiBcIiArIHN0cmF0ZWd5UHVsbFNlY3JldE5hbWUpO1xuICAgICAgICAgIGlmICghc3RyYXRlZ3lQdWxsU2VjcmV0TmFtZSAmJiBzb3VyY2VTZWNyZXROYW1lKSB7XG4gICAgICAgICAgICBDb3JlLnBhdGhTZXQoc3BlYywgW1wic3RyYXRlZ3lcIiwgXCJjdXN0b21TdHJhdGVneVwiLCBcInB1bGxTZWNyZXRcIiwgXCJuYW1lXCJdLCBzb3VyY2VTZWNyZXROYW1lKTtcbiAgICAgICAgICB9XG5cbi8qXG4gICAgICAgICAgLy8gVE9ETyBoYWNrIHVudGlsIHRoZSBwdXQgZGVhbHMgd2l0aCB1cGRhdGVzXG4gICAgICAgICAgdmFyIG1ldGFkYXRhID0gZW50aXR5Lm1ldGFkYXRhO1xuICAgICAgICAgIGlmIChtZXRhZGF0YSkge1xuICAgICAgICAgICAgZGVsZXRlIG1ldGFkYXRhW1wicmVzb3VyY2VWZXJzaW9uXCJdO1xuICAgICAgICAgIH1cbiovXG5cbiAgICAgICAgICBsb2cuaW5mbyhhbmd1bGFyLnRvSnNvbihlbnRpdHksIHRydWUpKTtcblxuICAgICAgICAgICRzY29wZS5idWlsZENvbmZpZ0NsaWVudC5wdXQoZW50aXR5LCAob2JqKSA9PiB7XG4gICAgICAgICAgICBsb2cuaW5mbyhcImJ1aWxkIGNvbmZpZyBjcmVhdGVkIVwiKTtcblxuICAgICAgICAgICAgdmFyIGxpbmsgPSBEZXZlbG9wZXIucHJvamVjdFNlY3JldHNMaW5rKCRzY29wZS5uYW1lc3BhY2UsIGdldE5hbWUoZW50aXR5KSk7XG4gICAgICAgICAgICBpZiAobGluaykge1xuICAgICAgICAgICAgICBsb2cuaW5mbyhcIk5hdmlnYXRpbmcgdG86IFwiKyBsaW5rKTtcbiAgICAgICAgICAgICAgJGxvY2F0aW9uLnBhdGgobGluayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2cud2FybihcIkNvdWxkIG5vdCBmaW5kIHRoZSBlZGl0IHBpcGVsaW5lIGxpbmshXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgdXBkYXRlRGF0YSgpO1xuXG5cbiAgICAgICAgdmFyIGplbmtpbnNVcmwgPSBEZXZlbG9wZXIuamVua2luc0xpbmsoKTtcbiAgICAgICAgdmFyIGpvYk5hbWUgPSBcIlwiO1xuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgICAgJHNjb3BlLml0ZW0gPSBudWxsO1xuICAgICAgICAgIGlmICgkc2NvcGUuaWQpIHtcbiAgICAgICAgICAgIHZhciB1cmwgPSBidWlsZENvbmZpZ1Jlc3RVcmwoJHNjb3BlLmlkKTtcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5ID0gZGF0YTtcblxuICAgICAgICAgICAgICAgICAgdmFyIGJ1aWxkQ29uZmlnID0gYW5ndWxhci5jb3B5KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgdmFyIHNvcnRlZEJ1aWxkcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLmVucmljaEJ1aWxkQ29uZmlnKGJ1aWxkQ29uZmlnLCBzb3J0ZWRCdWlsZHMpO1xuICAgICAgICAgICAgICAgICAgJHNjb3BlLmJ1aWxkQ29uZmlnID0gYnVpbGRDb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRzY29wZS5zcGVjID0gKCRzY29wZS5lbnRpdHkgfHwge30pLnNwZWMgfHwge307XG4gICAgICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gbGV0cyB1cGRhdGUgdGhlIHRhYnNcbiAgICAgICAgICAgICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5wcm9qZWN0SWQsIG51bGwsICRzY29wZSk7XG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICRzY29wZS5zcGVjID0gJHNjb3BlLmVudGl0eS5zcGVjO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvblNlY3JldHMoc2VjcmV0cykge1xuICAgICAgICAgIHZhciBhcnJheSA9IFtdO1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzZWNyZXRzLCAoc2VjcmV0KSA9PiB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VjcmV0KTtcbiAgICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgIGFycmF5LnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiBuYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgICAgIFwiYXR0cmlidXRlc1wiOiB7XG4gICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IG5hbWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICRzZWNyZXQ6IHNlY3JldFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICAkc2NvcGUuc2VjcmV0cyA9IF8uc29ydEJ5KGFycmF5LCBcImxhYmVsXCIpO1xuXG4gICAgICAgICAgdmFyIHNwZWNTb3VyY2VTZWNyZXROYW1lUGF0aCA9IFsnc3BlYycsICdzb3VyY2UnLCAnc291cmNlU2VjcmV0JywgJ25hbWUnXTtcbiAgICAgICAgICBpZiAoJHNjb3BlLmVudGl0eSAmJiAhQ29yZS5wYXRoR2V0KCRzY29wZS5lbnRpdHksIHNwZWNTb3VyY2VTZWNyZXROYW1lUGF0aCkpIHtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0U2VjcmV0TmFtZSA9IGZpbmREZWZhdWx0SW1wb3J0U2VjcmV0TmFtZShzZWNyZXRzKTtcbiAgICAgICAgICAgIENvcmUucGF0aFNldCgkc2NvcGUuZW50aXR5LCBzcGVjU291cmNlU2VjcmV0TmFtZVBhdGgsIGRlZmF1bHRTZWNyZXROYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBmaW5kRGVmYXVsdEltcG9ydFNlY3JldE5hbWUoc2VjcmV0cykge1xuICAgICAgICAgIHZhciBhbnN3ZXIgPSBudWxsO1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzZWNyZXRzLCAoc2VjcmV0KSA9PiB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VjcmV0KTtcbiAgICAgICAgICAgIGlmICghYW5zd2VyICYmIG5hbWUgJiYgbmFtZS5zdGFydHNXaXRoKFwiamVua2lucy1sb2dpblwiKSkge1xuICAgICAgICAgICAgICBhbnN3ZXIgPSBuYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICghYW5zd2VyKSB7XG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goc2VjcmV0cywgKHNlY3JldCkgPT4ge1xuICAgICAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VjcmV0KTtcbiAgICAgICAgICAgICAgaWYgKCFhbnN3ZXIgJiYgbmFtZSAmJiBuYW1lLnN0YXJ0c1dpdGgoXCJqZW5raW5zLXRva2VuXCIpKSB7XG4gICAgICAgICAgICAgICAgYW5zd2VyID0gbmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhbnN3ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICBjYXNlICdjcmVhdGUnOlxuICAgICAgICAgICAgZGVsZXRlIHNwZWNDb25maWcudGFicztcbiAgICAgICAgICAgIF8uZm9ySW4oYnVpbGRTb3VyY2UucHJvcGVydGllcywgKHByb3BlcnR5OmFueSwgbmFtZTpzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG5hbWUgIT09ICdnaXQnKSB7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJIaWRpbmcgcHJvcGVydHk6IFwiLCBuYW1lKTtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF8uZm9ySW4oZ2l0QnVpbGRTb3VyY2UucHJvcGVydGllcywgKHByb3BlcnR5OmFueSwgbmFtZTpzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG5hbWUgIT09ICd1cmknKSB7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJIaWRpbmcgcHJvcGVydHk6IFwiLCBuYW1lKTtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5LmxhYmVsID0gXCJHaXQgVVJMXCI7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlbJ2lucHV0LWF0dHJpYnV0ZXMnXSA9IHtcbiAgICAgICAgICAgICAgICAgICdyZXF1aXJlZCc6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pOyBcbiAgICAgICAgICAgIF8uZm9ySW4oc3BlY0NvbmZpZy5wcm9wZXJ0aWVzLCAocHJvcGVydHk6YW55LCBuYW1lOnN0cmluZykgPT4ge1xuICAgICAgICAgICAgICBpZiAobmFtZSAhPT0gJ3NvdXJjZScpIHtcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhcIkhpZGluZyBwcm9wZXJ0eTogXCIsIG5hbWUpO1xuICAgICAgICAgICAgICAgIHByb3BlcnR5LmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZWRpdCc6XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuXG4gICAgICAgICRzY29wZS5zcGVjQ29uZmlnID0gc3BlY0NvbmZpZztcbiAgfSk7XG5cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBCdWlsZENvbmZpZ3NDb250cm9sbGVyID0gY29udHJvbGxlcihcIkJ1aWxkQ29uZmlnc0NvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCAkZGlhbG9nLCAkd2luZG93LCAkdGVtcGxhdGVDYWNoZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgbG9jYWxTdG9yYWdlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG5cbiAgICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcbiAgICAgICAgZGF0YTogJ21vZGVsLmJ1aWxkY29uZmlncycsXG4gICAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcbiAgICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcbiAgICAgICAgc2VsZWN0ZWRJdGVtczogW10sXG4gICAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXG4gICAgICAgIH0sXG4gICAgICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ21ldGFkYXRhLm5hbWUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRDb25maWdMaW5rVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4vKlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zb3VyY2UudHlwZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NvdXJjZSdcbiAgICAgICAgICB9LFxuKi9cbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc291cmNlLmdpdC51cmknLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdSZXBvc2l0b3J5J1xuICAgICAgICAgIH0sXG4vKlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zdHJhdGVneS50eXBlJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU3RyYXRlZ3knXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc3RyYXRlZ3kuc3RpU3RyYXRlZ3kuaW1hZ2UnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTb3VyY2UgSW1hZ2UnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMub3V0cHV0LmltYWdlVGFnJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnT3V0cHV0IEltYWdlJ1xuICAgICAgICAgIH0sXG4qL1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnJGZhYnJpYzhDb2RlVmlld3MnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdDb2RlJyxcbiAgICAgICAgICAgIHdpZHRoOiBcIioqKlwiLFxuICAgICAgICAgICAgbWluV2lkdGg6IDUwMCxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRDb25maWdDb2RlVmlld3NUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRmYWJyaWM4QnVpbGRWaWV3cycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0J1aWxkcycsXG4gICAgICAgICAgICB3aWR0aDogXCIqKipcIixcbiAgICAgICAgICAgIG1pbldpZHRoOiA1MDAsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkQ29uZmlnQnVpbGRWaWV3c1RlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnJGZhYnJpYzhFbnZpcm9ubWVudFZpZXdzJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRW52aXJvbm1lbnRzJyxcbiAgICAgICAgICAgIHdpZHRoOiBcIioqKlwiLFxuICAgICAgICAgICAgbWluV2lkdGg6IDUwMCxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRDb25maWdFbnZpcm9ubWVudFZpZXdzVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICckZmFicmljOFRlYW1WaWV3cycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1Blb3BsZScsXG4gICAgICAgICAgICB3aWR0aDogXCIqKipcIixcbiAgICAgICAgICAgIG1pbldpZHRoOiA1MDAsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkQ29uZmlnVGVhbVZpZXdzVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcblxuICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAkc2NvcGUuaXNMb2dnZWRJbnRvR29ncyA9IEZvcmdlLmlzTG9nZ2VkSW50b0dvZ3M7XG5cbiAgICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xuICAgICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxuICAgICAgICAgIGluZGV4OiAnJG5hbWUnLFxuICAgICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgbmV4dCkge1xuICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGVFbnRpdHkobmV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiAnRGVsZXRlIEJ1aWxkIENvbmZpZ3M/JyxcbiAgICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIEJ1aWxkIENvbmZpZ3Mgd2lsbCBiZSBkZWxldGVkOicsXG4gICAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcbiAgICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcbiAgICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcbiAgICAgICAgfSkub3BlbigpO1xuICAgICAgfTtcblxuICAgICAgZnVuY3Rpb24gZGVsZXRlRW50aXR5KHNlbGVjdGlvbiwgbmV4dENhbGxiYWNrKSB7XG4gICAgICAgIHZhciBuYW1lID0gKHNlbGVjdGlvbiB8fCB7fSkuJG5hbWU7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJBYm91dCB0byBkZWxldGUgYnVpbGQgY29uZmlnOiBcIiArIG5hbWUpO1xuICAgICAgICAgIHZhciB1cmwgPSBidWlsZENvbmZpZ1Jlc3RVcmwobmFtZSk7XG4gICAgICAgICAgJGh0dHAuZGVsZXRlKHVybCkuXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBuZXh0Q2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGRlbGV0ZSBidWlsZCBjb25maWcgb24gXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIndhcm5pbmc6IG5vIG5hbWUgZm9yIHNlbGVjdGlvbjogXCIgKyBhbmd1bGFyLnRvSnNvbihzZWxlY3Rpb24pKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIEJ1aWxkTG9nc0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiQnVpbGRMb2dzQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgICAgICRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX0J1aWxkO1xuXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLmxvZ3NUZXh0ID0gXCJMb2FkaW5nIGxvZ3MuLi5cIjtcblxuICAgICAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xuICAgICAgICAgICAgdmFyIHVybCA9IGJ1aWxkUmVzdFVybCgkc2NvcGUuaWQpO1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkgPSBlbnJpY2hCdWlsZChkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdXJsID0gYnVpbGRMb2dzUmVzdFVybCgkc2NvcGUuaWQpO1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cykge1xuICAgICAgICAgICAgICAgICRzY29wZS5sb2dzVGV4dCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAkc2NvcGUubG9nc1RleHQgPSBcIkZhaWxlZCB0byBsb2FkIGxvZ3MgZnJvbTogXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBzdGF0dXM6IFwiICsgc3RhdHVzO1xuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgICBjYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAkc2NvcGUubG9nc1RleHQgPSBcIkZhaWxlZCB0byBsb2FkIGxvZ3M6IFwiICsgYW5ndWxhci50b0pzb24oZXJyb3IsIHRydWUpO1xuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIEJ1aWxkc0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiQnVpbGRzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkZGlhbG9nXCIsIFwiJHdpbmRvd1wiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGxvY2F0aW9uXCIsIFwibG9jYWxTdG9yYWdlXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICRzY29wZS5idWlsZENvbmZpZ0lkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG5cbiAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICB9KTtcblxuICAgICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgICBkYXRhOiAnbW9kZWwuYnVpbGRzJyxcbiAgICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXG4gICAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxuICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgICAgZmlsdGVyT3B0aW9uczoge1xuICAgICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcbiAgICAgICAgfSxcbiAgICAgICAgY29sdW1uRGVmczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnbWV0YWRhdGEubmFtZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJidWlsZExpbmtUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRjcmVhdGlvbkRhdGUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdUaW1lJyxcbiAgICAgICAgICAgIGRlZmF1bHRTb3J0OiB0cnVlLFxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJidWlsZFRpbWVUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3N0YXR1cycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1N0YXR1cycsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkU3RhdHVzVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICckbG9nc0xpbmsnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdMb2dzJyxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRMb2dzVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICckcG9kTGluaycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0J1aWxkIFBvZCcsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkUG9kVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4vKlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAncGFyYW1ldGVycy5zb3VyY2UudHlwZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NvdXJjZSdcbiAgICAgICAgICB9LFxuKi9cbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc291cmNlLmdpdC51cmknLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdSZXBvc2l0b3J5JyxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRSZXBvc2l0b3J5VGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLnN0cmF0ZWd5LnR5cGUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTdHJhdGVneSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zdHJhdGVneS5zb3VyY2VTdHJhdGVneS5mcm9tLm5hbWUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTb3VyY2UgSW1hZ2UnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMub3V0cHV0LnRvLm5hbWUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdPdXRwdXQgSW1hZ2UnXG4gICAgICAgICAgfV1cbiAgICAgIH07XG5cbiAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuYnVpbGRDb25maWdJZCk7XG4gICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5idWlsZENvbmZpZ0lkLCBudWxsLCAkc2NvcGUpO1xuXG4gICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICB9KTtcblxuICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgaWYgKCRzY29wZS5tb2RlbCkge1xuICAgICAgICAgIHZhciBidWlsZHMgPSAkc2NvcGUubW9kZWwuYnVpbGRzO1xuICAgICAgICAgIHZhciBidWlsZENvbmZpZ0lkID0gJHNjb3BlLmJ1aWxkQ29uZmlnSWQ7XG5cbiAgICAgICAgICBlbnJpY2hCdWlsZHMoYnVpbGRzKTtcbiAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoYnVpbGRDb25maWdJZCkge1xuICAgICAgICAgICAgJHNjb3BlLmJ1aWxkQ29uZmlnID0gJHNjb3BlLm1vZGVsLmdldEJ1aWxkQ29uZmlnKGJ1aWxkQ29uZmlnSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGVEYXRhKCk7XG5cblxuICAgICAgLypcbiAgICAgICRzY29wZS4ka2VlcFBvbGxpbmcgPSAoKSA9PiBrZWVwUG9sbGluZ01vZGVsO1xuICAgICAgJHNjb3BlLmZldGNoID0gUG9sbEhlbHBlcnMuc2V0dXBQb2xsaW5nKCRzY29wZSwgKG5leHQ6KCkgPT4gdm9pZCkgPT4ge1xuICAgICAgICB2YXIgdXJsID0gYnVpbGRzUmVzdFVSTCgpO1xuICAgICAgICAkaHR0cC5nZXQodXJsKS5cbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcImdvdCBkYXRhIFwiICsgYW5ndWxhci50b0pzb24oZGF0YSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAkc2NvcGUuYnVpbGRzID0gZW5yaWNoQnVpbGRzKGRhdGEuaXRlbXMpO1xuICAgICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgaWYgKCRzY29wZS5tb2RlbCkge1xuICAgICAgICAgICAgICAgICRzY29wZS5idWlsZENvbmZpZyA9ICRzY29wZS5tb2RlbC5nZXRCdWlsZENvbmZpZygkc2NvcGUuYnVpbGRDb25maWdJZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAkc2NvcGUuZmV0Y2goKTtcbiAgICAgICovXG4gICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICAvLyBjb250cm9sbGVyIGZvciBjb25uZWN0aW5nIHRvIGEgcmVtb3RlIGNvbnRhaW5lciB2aWEgam9sb2tpYVxuICBleHBvcnQgdmFyIENvbm5lY3RDb250cm9sbGVyID0gY29udHJvbGxlcihcIkNvbm5lY3RDb250cm9sbGVyXCIsIFtcbiAgICBcIiRzY29wZVwiLCBcImxvY2FsU3RvcmFnZVwiLCBcInVzZXJEZXRhaWxzXCIsIFwiQ29ubmVjdERpYWxvZ1NlcnZpY2VcIiwgXCIkYnJvd3NlclwiLFxuICAgICgkc2NvcGUsIGxvY2FsU3RvcmFnZSwgdXNlckRldGFpbHMsIENvbm5lY3REaWFsb2dTZXJ2aWNlLCAkYnJvd3NlcjpuZy5JQnJvd3NlclNlcnZpY2UpID0+IHtcblxuICAgICAgJHNjb3BlLmRvQ29ubmVjdCA9IChlbnRpdHkpID0+IHtcbiAgICAgICAgdmFyIGNvbm5lY3RVcmw6YW55ID0gbmV3IFVSSSgpLnBhdGgoVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksICcvamF2YS9pbmRleC5odG1sJykpO1xuICAgICAgICB2YXIgcmV0dXJuVG8gPSBuZXcgVVJJKCkudG9TdHJpbmcoKTtcbiAgICAgICAgdmFyIHRpdGxlID0gZW50aXR5Lm1ldGFkYXRhLm5hbWUgfHwgJ1VudGl0bGVkIENvbnRhaW5lcic7XG4gICAgICAgIHZhciB0b2tlbiA9IHVzZXJEZXRhaWxzLnRva2VuIHx8ICcnO1xuICAgICAgICBjb25uZWN0VXJsLmhhc2godG9rZW4pLnF1ZXJ5KHtcbiAgICAgICAgICBqb2xva2lhVXJsOiBlbnRpdHkuJGpvbG9raWFVcmwsXG4gICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgIHJldHVyblRvOiByZXR1cm5Ub1xuICAgICAgICB9KTtcbiAgICAgICAgbG9nLmRlYnVnKFwiQ29ubmVjdCBVUkk6IFwiLCBjb25uZWN0VXJsLnRvU3RyaW5nKCkpO1xuICAgICAgICB3aW5kb3cub3Blbihjb25uZWN0VXJsLnRvU3RyaW5nKCkpO1xuICAgICAgfTtcblxuICAgIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlc3tcbiAgIGV4cG9ydCBjbGFzcyBkYXRhSW5mb01vZGVsU2VydmljZXtcbiAgICAgIHB1YmxpYyBzZXJ2ZXJkYXRhID0ge307XG4gICAgICBwdWJsaWMgcHJvbWlzZW9iamVjdCA9IHt9O1xuICAgICAgcHVibGljIGxvY2FsZGF0YSA9IHt9O1xuICAgICAgcHVibGljIHNlbGVjdGVkbm9kZXMgPSBbXTtcbiAgICAgIHB1YmxpYyByZXN1bWFibGVqcyA9IFtdO1xuICAgICAgcHVibGljIHNlbGVjdGVkaXRlbXMgPSBbXTtcbiAgICAgIHB1YmxpYyBzZXJ2ZXJpdGVtcyA9IFtdO1xuICAgICAgcHVibGljIHVwbG9hZHByb2Nlc3MgPXt9O1xuICAgICAgcHVibGljIHVwbG9hZGVkU3RhdHVzID0gXCJcIjtcblxuICAgICAgcHVibGljIGdldCB1cGxvYWRQcm9jZXNzKCk6T2JqZWN0IHtcbiAgICAgICAgIHJldHVybiB0aGlzLnVwbG9hZHByb2Nlc3NcbiAgICAgIH1cblxuICAgICAgcHVibGljIHNldCB1cGxvYWRQcm9jZXNzKHVwbG9hZFByb2Nlc3M6T2JqZWN0KXtcbiAgICAgICAgIHRoaXMudXBsb2FkcHJvY2VzcyA9IHVwbG9hZFByb2Nlc3M7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBmb2xkZXJMaXN0ID0ge1xuICAgICAgICAgIGxlbmd0aDowXG4gICAgICB9O1xuXG4gICAgICBwdWJsaWMgZ2V0IHNlcnZlckl0ZW1zKCk6QXJyYXk8YW55PiB7XG4gICAgICAgICByZXR1cm4gdGhpcy5zZXJ2ZXJpdGVtcztcbiAgICAgIH1cblxuICAgICAgcHVibGljIHNldCBzZXJ2ZXJJdGVtcyhzZXJ2ZXJJdGVtczogQXJyYXk8YW55Pil7XG4gICAgICAgICB0aGlzLnNlcnZlcml0ZW1zID0gc2VydmVySXRlbXM7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBnZXQgcmVzdW1hYmxlSnMoKTpBcnJheTxhbnk+IHtcbiAgICAgICAgIHJldHVybiB0aGlzLnJlc3VtYWJsZUpzO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2V0IHJlc3VtYWJsZUpzKHJlc3VtYWJsZUpzOiBBcnJheTxhbnk+KXtcbiAgICAgICAgIHRoaXMucmVzdW1hYmxlanMgPSByZXN1bWFibGVKcztcbiAgICAgIH1cblxuICAgICAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW1zKCk6QXJyYXk8YW55PiB7XG4gICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZGl0ZW1zO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2V0IHNlbGVjdGVkSXRlbXMoc2VsZWN0ZWRJdGVtczogQXJyYXk8YW55Pil7XG4gICAgICAgICB0aGlzLnNlbGVjdGVkaXRlbXMgPSBzZWxlY3RlZEl0ZW1zO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkTm9kZXMoKTpBcnJheTxhbnk+IHtcbiAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkbm9kZXM7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBzZXQgc2VsZWN0ZWROb2RlcyhzZWxlY3RlZE5vZGVzOiBBcnJheTxhbnk+KXtcbiAgICAgICAgIHRoaXMuc2VsZWN0ZWRub2RlcyA9IHNlbGVjdGVkTm9kZXM7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBpc0NvbnRhaW5zTm9kZXMobm9kZTogT2JqZWN0KXtcbiAgICAgICAgIGZvcih2YXIgaXRlbSBpbiB0aGlzLnNlbGVjdGVkbm9kZXMpe1xuICAgICAgICAgICAgaWYodGhpcy5zZWxlY3RlZG5vZGVzW2l0ZW1dLmlkID09PSBub2RlLmlkKVxuICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICB9XG4gICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBmaW5kTm9kZXMobm9kZTogYW55KSB7XG4gICAgICAgICB2YXIgaWQgPSBcIi0xXCI7XG4gICAgICAgICBpZih0eXBlb2Yobm9kZSkgPT09IFwib2JqZWN0XCIgKXtcbiAgICAgICAgICAgIGlkID0gbm9kZS5pZDtcbiAgICAgICAgIH1lbHNlIGlmKHR5cGVvZihub2RlKSA9PT0gXCJudW1iZXJcIil7XG4gICAgICAgICAgICBpZCA9bm9kZS50b1N0cmluZygpO1xuICAgICAgICAgfWVsc2UgaWYodHlwZW9mKG5vZGUpID09PSBcInN0cmluZ1wiKXtcbiAgICAgICAgICAgIGlkID0gbm9kZTtcbiAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcmV0dXJuIFwiLTFcIjtcbiAgICAgICAgIH1cblxuICAgICAgICAgZm9yKHZhciBpdGVtIGluIHRoaXMuc2VsZWN0ZWRub2Rlcyl7XG4gICAgICAgICAgICBpZih0aGlzLnNlbGVjdGVkbm9kZXNbaXRlbV0uaWQgPT09IGlkKVxuICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICB9XG4gICAgICAgICByZXR1cm4gXCItMVwiO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgZmluZEl0ZW1JbmRleChpdGVtOiBhbnkpe1xuICAgICAgICAgdmFyIGlkID0gLTE7XG4gICAgICAgICBpZih0eXBlb2YoaXRlbSkgPT09IFwib2JqZWN0XCIgKXtcbiAgICAgICAgICAgIGlkID0gaXRlbS5pZDtcbiAgICAgICAgIH1lbHNlIGlmKHR5cGVvZihpdGVtKSA9PT0gXCJudW1iZXJcIil7XG4gICAgICAgICAgICBpZCA9aXRlbS50b1N0cmluZygpO1xuICAgICAgICAgfWVsc2UgaWYodHlwZW9mKGl0ZW0pID09PSBcInN0cmluZ1wiKXtcbiAgICAgICAgICAgIGlkID0gaXRlbTtcbiAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgfVxuXG4gICAgICAgICBmb3IodmFyIGl0IGluIHRoaXMuc2VsZWN0ZWRpdGVtcyl7XG4gICAgICAgICAgICBpZih0aGlzLnNlbGVjdGVkaXRlbXNbaXRdLmlkID09PSBpZClcbiAgICAgICAgICAgICAgIHJldHVybiBpdDtcbiAgICAgICAgIH1cbiAgICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIGNyZWF0ZUZvbGRlckxpc3QoZmlsZXM6IE9iamVjdCAscm9vdFBhdGg6IHN0cmluZyl7XG4gICAgICAgICBmb3IodmFyIGk9MDsgaTwgZmlsZXMubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgdmFyIHJlbGF0aXZlUGF0aCA9ICBmaWxlc1tpXS53ZWJraXRSZWxhdGl2ZVBhdGgucmVwbGFjZShSZWdFeHAoXCJeXCIrcm9vdFBhdGgrXCIvXCIpLFwiXCIpO1xuICAgICAgICAgICAgdmFyIHBhdGhzPXJlbGF0aXZlUGF0aC5zcGxpdChcIi9cIik7XG4gICAgICAgICAgICBpZighdGhpcy5mb2xkZXJMaXN0Lmhhc093blByb3BlcnR5KHBhdGhzWzBdKSl7XG4gICAgICAgICAgICAgICB0aGlzLmZvbGRlckxpc3RbcGF0aHNbMF1dPXtcbiAgICAgICAgICAgICAgICAgbGVuZ3RoOjBcbiAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHRoaXMuZm9sZGVyTGlzdC5sZW5ndGgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBPYmogPSB0aGlzLmZvbGRlckxpc3RbcGF0aHNbMF1dO1xuICAgICAgICAgICAgT2JqW09iai5sZW5ndGhdID0gZmlsZXNbaV07XG4gICAgICAgICAgICBPYmoubGVuZ3RoKys7XG4gICAgICAgICAgICB0aGlzLmZvbGRlckxpc3RbcGF0aHNbMF1dID0gT2JqO1xuICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwdWJsaWMgdXBkYXRlTm9kZUJ5SWQobm9kZUlkLGtleSx2YWx1ZSl7XG4gICAgICAgICBmb3IodmFyIGl0ZW0gaW4gdGhpcy5zZWxlY3RlZG5vZGVzKXtcbiAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5zZWxlY3RlZG5vZGVzW2l0ZW1dO1xuICAgICAgICAgICAgaWYobm9kZS5pZCA9PT0gbm9kZUlkKXtcbiAgICAgICAgICAgICAgIG5vZGVba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBnZXQgc2VydmVyRGF0YSgpOk9iamVjdCB7XG4gICAgICAgICByZXR1cm4gdGhpcy5zZXJ2ZXJEYXRhO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2V0IHNlcnZlckRhdGEoc2VydmVyRGF0YTpPYmplY3Qpe1xuICAgICAgICAgdGhpcy5zZXJ2ZXJkYXRhPXNlcnZlckRhdGE7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBnZXQgcHJvbWlzZU9iamVjdCgpOk9iamVjdCB7XG4gICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlb2JqZWN0O1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2V0IHByb21pc2UocHJvbWlzZU9iamVjdDpPYmplY3Qpe1xuICAgICAgICAgdGhpcy5wcm9taXNlb2JqZWN0ID0gcHJvbWlzZU9iamVjdDtcbiAgICAgIH1cblxuICAgICAgcHVibGljIGdldCBsb2NhbERhdGEoKTpPYmplY3Qge1xuICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxkYXRhO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2V0IGxvY2FsRGF0YShsb2NhbERhdGE6T2JqZWN0KXtcbiAgICAgICAgIHRoaXMubG9jYWxkYXRhID0gbG9jYWxEYXRhO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgdXBkYXRhRGF0YU1vZGVsKCl7XG4gICAgICAgICB0aGlzLnByb21pc2VvYmplY3Quc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcbiAgICAgICAgICAgIHRoaXMuc2VydmVyZGF0YSA9ZGF0YTtcbiAgICAgICAgIH0pO1xuXG4gICAgICAgICB0aGlzLnByb21pc2VvYmplY3QuZXJyb3IoZnVuY3Rpb24oZGF0YSxzdGF0dXMsaGVkYWVycyxjb25maWcpe1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJkYXRhID0ge307XG4gICAgICAgICB9KTtcbiAgICAgIH1cbiAgIH1cbiAgX21vZHVsZS5mYWN0b3J5KCdEYXRhSW5mb01vZGVsJywgWyckaHR0cCcsICgkaHR0cCkgPT4ge1xuICAgICAgdmFyICRzY29wZSA9bmV3IGRhdGFJbmZvTW9kZWxTZXJ2aWNlKCk7XG5cbiAgICAgICRzY29wZS5wcm9taXNlb2JqZWN0PSRodHRwKHtcbiAgICAgICAgIHVybDonL3htbGZvcm1zZXJ2ZXInLFxuICAgICAgICAgbWV0aG9kOidQT1NUJ1xuICAgICAgfSk7XG5cbiAgICAgIHVwZGF0ZURhdGFGcm9tU2VydmVyKCRzY29wZS5zZXJ2ZXJkYXRhLCAoZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cykgPT4ge1xuICAgICAgICAgJHNjb3BlLnNlcnZlcmRhdGEgPSBkYXRhO1xuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGFGcm9tU2VydmVyKGRhdGEsY2FsbGJhY2spe1xuICAgICAgICAgJGh0dHAoe1xuICAgICAgICAgICAgdXJsOicveG1sZm9ybXNlcnZlcicsXG4gICAgICAgICAgICBtZXRob2Q6J1BPU1QnXG4gICAgICAgICB9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xuICAgICAgICAgICBpZihkYXRhKVxuICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpO1xuICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XG4gICAgICAgICAgICAgY29uc29sZS5sb2coXCJlcnJvclwiKTtcbiAgICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiAkc2NvcGU7XG4gIH1dKTtcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgRGVwbG95bWVudENvbmZpZ0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiRGVwbG95bWVudENvbmZpZ0NvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xuICAgICAgICAkc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5vc19kZXBsb3lfRGVwbG95bWVudENvbmZpZztcblxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcblxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgICAgICRzY29wZS5pdGVtID0gbnVsbDtcbiAgICAgICAgICBpZiAoJHNjb3BlLmlkKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gZGVwbG95bWVudENvbmZpZ1Jlc3RVcmwoJHNjb3BlLmlkKTtcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5ID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgIGVucmljaERlcGxveW1lbnRDb25maWcoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgICAgICB9KS5cbiAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgRGVwbG95bWVudENvbmZpZ3NDb250cm9sbGVyID0gY29udHJvbGxlcihcIkRlcGxveW1lbnRDb25maWdzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkZGlhbG9nXCIsIFwiJHdpbmRvd1wiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGxvY2F0aW9uXCIsIFwibG9jYWxTdG9yYWdlXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICB9KTtcbiAgICAgICRzY29wZS5sYWJlbENsYXNzID0gY29udGFpbmVyTGFiZWxDbGFzcztcblxuICAgICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgICBkYXRhOiAnZGVwbG95bWVudENvbmZpZ3MnLFxuICAgICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXG4gICAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxuICAgICAgICBmaWx0ZXJPcHRpb25zOiB7XG4gICAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgICB9LFxuICAgICAgICBjb2x1bW5EZWZzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdtZXRhZGF0YS5uYW1lJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImRlcGxveW1lbnRDb25maWdMaW5rVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdtZXRhZGF0YS5uYW1lc3BhY2UnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lc3BhY2UnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRpbWFnZUNoYW5nZVBhcmFtcy5hdXRvbWF0aWMnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdBdXRvbWF0aWMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRpbWFnZUNoYW5nZVBhcmFtcy4kY29udGFpbmVyTmFtZXMnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdDb250YWluZXIgTmFtZXMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRpbWFnZUNoYW5nZVBhcmFtcy5mcm9tLm5hbWUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdGcm9tIGltYWdlJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICckaW1hZ2VDaGFuZ2VQYXJhbXMudGFnJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVGFnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICd0ZW1wbGF0ZS5jb250cm9sbGVyVGVtcGxhdGUucG9kVGVtcGxhdGUudGFncycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhYmVscycsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImRlcGxveW1lbnRDb25maWdMYWJlbFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG5cbiAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuICAgICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xuICAgICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XG4gICAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXG4gICAgICAgICAgaW5kZXg6ICckbmFtZScsXG4gICAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBuZXh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZUVudGl0eShuZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6ICdEZWxldGUgRGVwbG95bWVudD8nLFxuICAgICAgICAgIGFjdGlvbjogJ1RoZSBmb2xsb3dpbmcgRGVwbG95bWVudHMgd2lsbCBiZSBkZWxldGVkOicsXG4gICAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcbiAgICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcbiAgICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcbiAgICAgICAgfSkub3BlbigpO1xuICAgICAgfTtcblxuICAgICAgZnVuY3Rpb24gZGVsZXRlRW50aXR5KHNlbGVjdGlvbiwgbmV4dENhbGxiYWNrKSB7XG4gICAgICAgIHZhciBuYW1lID0gKHNlbGVjdGlvbiB8fCB7fSkuJG5hbWU7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJBYm91dCB0byBkZWxldGUgZGVwbG95bWVudCBjb25maWc6IFwiICsgbmFtZSk7XG4gICAgICAgICAgdmFyIHVybCA9IGRlcGxveW1lbnRDb25maWdSZXN0VXJsKG5hbWUpO1xuICAgICAgICAgICRodHRwLmRlbGV0ZSh1cmwpLlxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgbmV4dENhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KS5cbiAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBkZWxldGUgZGVwbG95bWVudCBjb25maWcgb24gXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIndhcm5pbmc6IG5vIG5hbWUgZm9yIHNlbGVjdGlvbjogXCIgKyBhbmd1bGFyLnRvSnNvbihzZWxlY3Rpb24pKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgICB2YXIgdXJsID0gZGVwbG95bWVudENvbmZpZ3NSZXN0VVJMKCk7XG4gICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiZ290IGRhdGEgXCIgKyBhbmd1bGFyLnRvSnNvbihkYXRhLCB0cnVlKSk7XG4gICAgICAgICAgICAgICRzY29wZS5kZXBsb3ltZW50Q29uZmlncyA9IGVucmljaERlcGxveW1lbnRDb25maWdzKGRhdGEuaXRlbXMpO1xuICAgICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIEV2ZW50c0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiRXZlbnRzQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTZXJ2aWNlc1wiLCBcIkt1YmVybmV0ZXNQb2RzXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTZXJ2aWNlczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzUG9kczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzU3RhdGUsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcblxuICAgIENvbnRyb2xsZXJIZWxwZXJzLmJpbmRNb2RlbFRvU2VhcmNoUGFyYW0oJHNjb3BlLCAkbG9jYXRpb24sICdtb2RlJywgJ21vZGUnLCAnbGlzdCcpO1xuXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgZGF0YTogJ21vZGVsLmV2ZW50cycsXG4gICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXG4gICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXG4gICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcbiAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxuICAgICAgZmlsdGVyT3B0aW9uczoge1xuICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXG4gICAgICB9LFxuICAgICAgY29sdW1uRGVmczogW1xuICAgICAgICB7IGZpZWxkOiAnJGZpcnN0VGltZXN0YW1wJyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0ZpcnN0IFNlZW4nLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiZmlyc3RUaW1lc3RhbXBUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHsgZmllbGQ6ICckbGFzdFRpbWVzdGFtcCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdMYXN0IFNlZW4nLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFzdFRpbWVzdGFtcFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAgeyBmaWVsZDogJ2NvdW50JyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0NvdW50J1xuICAgICAgICB9LFxuICAgICAgICB7IGZpZWxkOiAnaW52b2x2ZWRPYmplY3QubmFtZScsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImV2ZW50TmFtZVRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAgeyBmaWVsZDogJ2ludm9sdmVkT2JqZWN0LmtpbmQnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnS2luZCcsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJldmVudEtpbmRUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHsgZmllbGQ6ICdpbnZvbHZlZE9iamVjdC5maWVsZFBhdGgnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU3ViamVjdCdcbiAgICAgICAgfSxcbiAgICAgICAgeyBmaWVsZDogJ3JlYXNvbicsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdSZWFzb24nXG4gICAgICAgIH0sXG4gICAgICAgIHsgZmllbGQ6ICdzb3VyY2UnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU291cmNlJyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImV2ZW50U291cmNlVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICB9LFxuICAgICAgICB7IGZpZWxkOiAnbWVzc2FnZScsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdNZXNzYWdlJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc01vZGVsLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBIb3N0Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJIb3N0Q29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgICAgICRzY29wZS5yYXdNb2RlbCA9IG51bGw7XG5cbiAgICAgICAgJHNjb3BlLml0ZW1Db25maWcgPSB7XG4gICAgICAgICAgcHJvcGVydGllczoge31cbiAgICAgICAgfTtcblxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzY29wZS5mbGlwUmF3ID0gKCkgPT4ge1xuICAgICAgICAgICRzY29wZS5yYXdNb2RlID0gISRzY29wZS5yYXdNb2RlO1xuICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdXBkYXRlRGF0YSgpO1xuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgICAgICAgJHNjb3BlLml0ZW0gPSBudWxsO1xuICAgICAgICAgIGlmICgkc2NvcGUuaWQpIHtcbiAgICAgICAgICAgIHZhciB1cmwgPSBVcmxIZWxwZXJzLmpvaW4oS3ViZXJuZXRlc0FwaVVSTCwgXCJub2Rlc1wiLCAkc2NvcGUuaWQpO1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5pdGVtID0gZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRzY29wZS5pdGVtKSB7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUucmF3TW9kZWwgPSB0b1Jhd1lhbWwoJHNjb3BlLml0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkc2NvcGUucmF3TW9kZWwgPSBudWxsO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcbiAgZXhwb3J0IHZhciBob3N0UG9ydHMgPVtdO1xuXG4gIC8qKlxuICAgKiBTb3J0cyB0aGUgdGhlIGlwIGZpZWxkXG4gICAqXG4gICAqIEBwYXJhbSBpcCB0aGUgaXAgc3VjaCBhcyAnMTAuMS4yLjEzJ1xuICAgKiBAcmV0dXJucyB7YW55fVxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHNvcnRCeVBvZElwKGlwKSA6IGFueSB7XG4gICAgLy8gaSBndWVzcyB0aGVyZSBpcyBtYXliZSBuaWNlciB3YXlzIG9mIHNvcnQgdGhpcyB3aXRob3V0IHBhcnNpbmcgYW5kIHNsaWNpbmdcbiAgICB2YXIgcmVnZXggPSAvKFxcZHsxLDN9KVxcLihcXGR7MSwzfSlcXC4oXFxkezEsM30pXFwuKFxcZHsxLDN9KS87XG4gICAgdmFyIGdyb3VwcyA9IHJlZ2V4LmV4ZWMoaXApO1xuICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChncm91cHMpKSB7XG4gICAgICB2YXIgZzEgPSAoXCIwMFwiICsgZ3JvdXBzWzFdKS5zbGljZSgtMyk7XG4gICAgICB2YXIgZzIgPSAoXCIwMFwiICsgZ3JvdXBzWzJdKS5zbGljZSgtMyk7XG4gICAgICB2YXIgZzMgPSAoXCIwMFwiICsgZ3JvdXBzWzNdKS5zbGljZSgtMyk7XG4gICAgICB2YXIgZzQgPSAoXCIwMFwiICsgZ3JvdXBzWzRdKS5zbGljZSgtMyk7XG4gICAgICB2YXIgYW5zd2VyID0gZzEgKyBnMiArIGczICsgZzQ7XG4gICAgICByZXR1cm4gYW5zd2VyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcmFtZG9tUG9ydCgpOiBudW1iZXJ7XG4gICAgIHZhciBob3N0UG9ydD1NYXRoLmZsb29yKDMwMDAwK01hdGgucmFuZG9tKCkqKDY1NTM1LTMwMDAwKSk7XG4gICAgIHdoaWxlKGhvc3RQb3J0cy5pbmRleE9mKGhvc3RQb3J0KSA9PT0gMCl7XG4gICAgICAgIGhvc3RQb3J0ID0gTWF0aC5mbG9vcigzMDAwMCtNYXRoLnJhbmRvbSgpKig2NTUzNS0zMDAwMCkpO1xuICAgICB9XG4gICAgIGhvc3RQb3J0cy5wdXNoKGhvc3RQb3J0KTtcbiAgICAgcmV0dXJuIGhvc3RQb3J0XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tU3RyaW5nKGxlbiA6IG51bWJlcikgOiBzdHJpbmd7XG4gICAgICBsZW4gPSBsZW4gfHwgMzI7XG4gICAgICB2YXIgJGNoYXJzID0gJ2FiY2RlZmhpamttbnByc3R3eHl6JzsgLy8g6buY6K6k5Y675o6J5LqG5a655piT5re35reG55qE5a2X56ymb09MbCw5Z3EsVnYsVXUsSTFcbiAgICAgIHZhciBtYXhQb3MgPSAkY2hhcnMubGVuZ3RoO1xuICAgICAgdmFyIHB3ZCA9ICcnO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIHB3ZCArPSAkY2hhcnMuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1heFBvcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHB3ZDtcbiAgfVxuXG4gIGV4cG9ydCBjbGFzcyByZXNvdXJjZVJDVGVtcGxhdGV7XG5cbiAgICAgcHVibGljIGltYWdlPVwiczE6bGF0ZXN0XCI7XG4gICAgIHB1YmxpYyBuYW1lcyA9IFtcImFkbWluXCIsXCJjZmd0b29sbG9nc1wiLFwiY2hlY2twb2ludHNcIixcImRpYWdcIixcImZsYXNoLXJlY292ZXJ5LWFyZWFcIixcIm9yYWRhdGFcIl07XG5cbiAgICAgcHVibGljIGNyZWF0ZVJDKE9iail7XG4gICAgICAgIHZhciBsYWJlbHMgPSB7XG4gICAgICAgICAgIFwic3R5bGVcIjogXCJvcmFjbGVcIixcbiAgICAgICAgICAgXCJzdGF0dXNcIjogXCIwXCIsXG4gICAgICAgICAgIFwiaXNFeHRyYWN0XCI6IFwiMFwiLFxuICAgICAgICAgICBcImlzVGFyZ2V0XCI6IE9iai5pc1RhcmdldFxuICAgICAgICB9O1xuICAgICAgICBmb3IodmFyIGl0ZW0gaW4gT2JqLmxhYmVscylcbiAgICAgICAgICAgbGFiZWxzW2l0ZW1dID0gT2JqLmxhYmVsc1tpdGVtXTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICBcImFwaVZlcnNpb25cIiA6ICBLdWJlcm5ldGVzLmRlZmF1bHRBcGlWZXJzaW9uLFxuICAgICAgICAgICBcImtpbmRcIiA6IFwiUmVwbGljYXRpb25Db250cm9sbGVyXCIsXG4gICAgICAgICAgIFwibWV0YWRhdGFcIiA6IHtcbiAgICAgICAgICAgICAgXCJuYW1lXCIgOiBPYmoubmFtZSxcbiAgICAgICAgICAgICAgXCJsYWJlbHNcIiA6IGxhYmVsc1xuICAgICAgICAgICB9LFxuICAgICAgICAgICBcInNwZWNcIiA6IHtcbiAgICAgICAgICAgICAgcmVwbGljYXMgOiBPYmoucmVwbGljYXMgfHwgMSxcbiAgICAgICAgICAgICAgXCJ0ZW1wbGF0ZVwiIDogdGhpcy5jcmVhdGVUZW1wbGF0ZShPYmopXG4gICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICB9XG5cbiAgICAgcHVibGljIGNyZWF0ZVZvbHVtZU1vdW50cygpe1xuICAgICAgICB2YXIgdm9sdW1lTW91bnRzID0gW107XG4gICAgICAgIGZvcih2YXIgaXRlbSBpbiB0aGlzLm5hbWVzKXtcbiAgICAgICAgICAgaWYodGhpcy5uYW1lc1tpdGVtXSA9PT0gJ2ZsYXNoLXJlY292ZXJ5LWFyZWEnKVxuICAgICAgICAgICAgICB2b2x1bWVNb3VudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgIFwibmFtZVwiIDogdGhpcy5uYW1lc1tpdGVtXSxcbiAgICAgICAgICAgICAgICAgXCJtb3VudFBhdGhcIiA6IFwiL29wdC9vcmFjbGUvYXBwL2ZsYXNoX3JlY292ZXJ5X2FyZWFcIlxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICB2b2x1bWVNb3VudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgIFwibmFtZVwiIDogdGhpcy5uYW1lc1tpdGVtXSxcbiAgICAgICAgICAgICAgICAgXCJtb3VudFBhdGhcIiA6IFwiL29wdC9vcmFjbGUvYXBwL1wiICsgdGhpcy5uYW1lc1tpdGVtXVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdm9sdW1lTW91bnRzO1xuICAgICB9XG5cbiAgICAgcHVibGljIGNyZWF0ZVZvbHVtZXMocm9vdFBhdGggOnN0cmluZyl7XG4gICAgICAgIHZhciB2b2x1bWVzID0gW107XG4gICAgICAgIGZvcih2YXIgaXRlbSBpbiB0aGlzLm5hbWVzKXtcbiAgICAgICAgICAgIGlmKHRoaXMubmFtZXNbaXRlbV0gPT09ICdmbGFzaC1yZWNvdmVyeS1hcmVhJylcbiAgICAgICAgICAgICAgIHZvbHVtZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBcIm5hbWVcIiA6IHRoaXMubmFtZXNbaXRlbV0sXG4gICAgICAgICAgICAgICAgICBcImhvc3RQYXRoXCIgOntcbiAgICAgICAgICAgICAgICAgICAgICBcInBhdGhcIiA6IHJvb3RQYXRoICsgXCJmbGFzaF9yZWNvdmVyeV9hcmVhXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgdm9sdW1lcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIFwibmFtZVwiIDogdGhpcy5uYW1lc1tpdGVtXSxcbiAgICAgICAgICAgICAgICAgIFwiaG9zdFBhdGhcIiA6e1xuICAgICAgICAgICAgICAgICAgICAgIFwicGF0aFwiIDogcm9vdFBhdGggKyB0aGlzLm5hbWVzW2l0ZW1dXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdm9sdW1lcztcbiAgICAgfVxuXG4gICAgIHB1YmxpYyBjcmVhdGVDb250YWluZXJzKE9iail7XG4gICAgICAgIHZhciBjb250YWluZXJzID0gW107XG4gICAgICAgIGNvbnRhaW5lcnMucHVzaChcbiAgICAgICAge1xuICAgICAgICAgICBcIm5hbWVcIiA6IFwib3JhY2xlXCIsXG4gICAgICAgICAgIFwiaW1hZ2VcIjogdGhpcy5pbWFnZSxcbiAgICAgICAgICAgXCJpbWFnZVB1bGxQb2xpY3lcIjogXCJJZk5vdFByZXNlbnRcIixcbiAgICAgICAgICAgXCJjb21tYW5kXCI6W1wiL2Fzc2V0cy9lbnRyeXBvaW50LnNoXCJdLFxuICAgICAgICAgICBcInBvcnRzXCI6IFtcbiAgICAgICAgICAge1xuICAgICAgICAgICAgIFwiY29udGFpbmVyUG9ydFwiOiAxNTIxLFxuICAgICAgICAgICAgIFwiaG9zdFBvcnRcIjogT2JqLnBvcnQgfHwgcmFtZG9tUG9ydCgpXG4gICAgICAgICAgIH1dLFxuICAgICAgICAgICBcInZvbHVtZU1vdW50c1wiIDogdGhpcy5jcmVhdGVWb2x1bWVNb3VudHMoKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lcnNcbiAgICAgfVxuXG4gICAgIHB1YmxpYyBjcmVhdGVUZW1wbGF0ZShPYmope1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgXCJtZXRhZGF0YVwiOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgLy9cIm5hbWVcIjogT2JqLm5hbWUsXG4gICAgICAgICAgICAgICBcImxhYmVsc1wiOiBPYmoubGFiZWxzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJzcGVjXCIgOiB7XG4gICAgICAgICAgICAgICAgXCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kc1wiIDogMCxcbiAgICAgICAgICAgICAgICBcImNvbnRhaW5lcnNcIiA6ICB0aGlzLmNyZWF0ZUNvbnRhaW5lcnMoT2JqKSxcbiAgICAgICAgICAgICAgICBcInZvbHVtZXNcIiA6ICB0aGlzLmNyZWF0ZVZvbHVtZXMoT2JqLnBhdGgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGxhYmVsVG9DaGluZXNlKGxhYmVscyl7XG4gICAgIHZhciBhbnN3ZXIgPSB7fTtcbiAgICAgYW5ndWxhci5mb3JFYWNoKGxhYmVscywodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBhbnN3ZXJba2V5XSA9IGxhYmVsQ2hhbmdlVG9DaGluZXModmFsdWUsIGtleSk7XG4gICAgIH0pO1xuICAgICByZXR1cm4gYW5zd2VyXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gIGZpbmRTYW1lTmFtZVJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVycywgbmFtZSl7XG4gICAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMuZm9yRWFjaCgocmMpID0+IHtcbiAgICAgICAgICB2YXIgcmNOYW1lID0gZ2V0TmFtZShyYyk7XG4gICAgICAgICAgaWYocmNOYW1lLmluZGV4b2YobmFtZSkgIT09IC0xKVxuICAgICAgICAgICAgICBuYW1lcy5wdXNoKHJjTmFtZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYobmFtZXMubGVuZ3RoID09PSAwKXtcbiAgICAgICAgICByZXR1cm4gbmFtZSArIFwiXzFcIjtcbiAgICAgIH1lbHNle1xuICAgICAgICAgIHZhciBtYXggPSAwO1xuICAgICAgICAgIG5hbWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgdmFyIGFuc3dlciA9IHZhbHVlLnNwbGl0KFwiX1wiKTtcbiAgICAgICAgICAgICB2YXIga2V5ID0gcGFyc2VJbnQoYW5zd2VyWzFdKTtcbiAgICAgICAgICAgICBpZihtYXggPCBrZXkpXG4gICAgICAgICAgICAgICAgbWF4ID0ga2V5O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBuYW1lICsgKG1heCsxKTtcbiAgICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlclJDKHJjKXtcbiAgICAgIHZhciBhbnN3ZXIgPSBmYWxzZTtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChDb3JlLnBhdGhHZXQocmMsIFtcIm1ldGFkYXRhXCIsIFwibGFiZWxzXCJdKSwodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGlmKGtleSA9PT0gJ2lzVGFyZ2V0JyAmJiB2YWx1ZSA9PT0gJ3RydWUnKXtcbiAgICAgICAgICAgICBhbnN3ZXIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFuc3dlcjtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0luY2x1ZGUocmNzLCByYyl7XG4gICAgIGZvcih2YXIgaSBpbiByY3Mpe1xuICAgICAgICAgaWYoZ2V0TmFtZShyY3NbaV0pID09PSBnZXROYW1lKHJjKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICB9XG4gICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBsYWJlbENoYW5nZVRvQ2hpbmVzKHZhbHVlOnN0cmluZywga2V5OnN0cmluZyl7XG4gIFx0dmFyIHRydWVWYWx1ZSA9ICcnO1xuICBcdHN3aXRjaChrZXkpe1xuICBcdFx0Y2FzZSAndHlwZSc6XG4gIFx0XHQgICBpZih2YWx1ZSA9PT0gJzAxJylcbiAgXHRcdCAgIFx0ICB0cnVlVmFsdWUgPSAn6LSi5pS/JztcbiAgXHRcdCAgIGVsc2UgaWYodmFsdWUgPT09ICcwMicpXG4gIFx0XHQgICAgICB0cnVlVmFsdWUgPSAn56S+5L+dJztcbiAgXHRcdCAgIGVsc2VcbiAgXHRcdCAgIFx0ICB0cnVlVmFsdWUgPSB2YWx1ZTtcbiAgXHRcdCAgIGJyZWFrO1xuICBcdFx0Y2FzZSAnYmF0Y2gnOlxuICBcdCAgICAgICBpZih2YWx1ZSA9PT0gJ0EnKVxuICBcdCAgICAgICBcdCAgdHJ1ZVZhbHVlID0gJ+aJueasoUEnO1xuICBcdCAgICAgICBlbHNlIGlmKHZhbHVlID09PSAnQicpXG4gIFx0ICAgICAgIFx0ICB0cnVlVmFsdWUgPSAn5om55qyhQic7XG4gIFx0ICAgICAgIGVsc2VcbiAgXHQgICAgICAgXHQgIHRydWVWYWx1ZSA9IHZhbHVlO1xuXG4gIFx0XHQgICBicmVhaztcbiAgXHRcdGNhc2UgJ3JlZ2lvbic6XG4gIFx0XHQgICB0cnVlVmFsdWUgPSBLdWJlcm5ldGVzLmdldENvdW50eUJ5Q29kZSh2YWx1ZSk7XG4gIFx0XHQgICBicmVhaztcbiAgXHRcdGNhc2UgJ3N5c3RlbSc6XG4gIFx0XHQgICB0cnVlVmFsdWUgPSBLdWJlcm5ldGVzLmdldFN5c3RlbU5hbWVCeUlkKHZhbHVlKTtcbiAgXHRcdCAgIGJyZWFrO1xuICBcdFx0Y2FzZSAndmVyc2lvbic6XG4gIFx0XHQgICB2YXIgcmVnPSBuZXcgUmVnRXhwKCdeWzAtOV0kJykuZXhlYyh2YWx1ZSk7XG4gIFx0XHQgICBpZihyZWcpXG4gIFx0XHQgICAgICAgdHJ1ZVZhbHVlID0gJ+eJiOacrCcgKyByZWdbMF07XG4gIFx0XHQgICBlbHNlXG4gIFx0XHQgICBcdCAgIHRydWVWYWx1ZSA9IHZhbHVlO1xuICBcdCAgICAgICBicmVhaztcbiAgXHQgICAgY2FzZSAnaXNUYXJnZXQnOlxuICBcdCAgICAgICBpZih2YWx1ZSA9PT0gJ3RydWUnKVxuICBcdCAgICAgICBcdCAgIHRydWVWYWx1ZSA9ICfmsYfmgLvmlbDmja7lupMnO1xuICBcdCAgICAgICBlbHNlXG4gIFx0ICAgICAgICAgICB0cnVlVmFsdWUgPSB2YWx1ZTtcbiAgXHQgICAgICAgYnJlYWs7XG4gIFx0ICAgIGRlZmF1bHQ6XG4gIFx0ICAgICAgIHRydWVWYWx1ZSA9IHZhbHVlO1xuICBcdH1cbiAgXHRyZXR1cm4gdHJ1ZVZhbHVlO1xuICB9XG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc01vZGVsLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInV0aWxIZWxwZXJzLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBIb3N0c0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiSG9zdHNDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNQb2RzXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiU2VydmljZVJlZ2lzdHJ5XCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNQb2RzOm5nLklQcm9taXNlPG5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4+LCBLdWJlcm5ldGVzU3RhdGUsIFNlcnZpY2VSZWdpc3RyeSwgJGRpYWxvZywgJHdpbmRvdywgJHRlbXBsYXRlQ2FjaGUsICRyb3V0ZVBhcmFtcywgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsIGxvY2FsU3RvcmFnZSwgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XG4gICAgICBkYXRhOiAnbW9kZWwuaG9zdHMnLFxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiBmYWxzZSxcbiAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcbiAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxuICAgICAgZmlsdGVyT3B0aW9uczoge1xuICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXG4gICAgICB9LFxuICAgICAgY29sdW1uRGVmczogW1xuICAgICAgICB7XG4gICAgICAgICAgZmllbGQ6ICdpZCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcbiAgICAgICAgICBkZWZhdWx0U29ydDogdHJ1ZSxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImlkVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmllbGQ6ICdob3N0SVAnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnSVAnLFxuICAgICAgICAgIGN1c3RvbVNvcnRGaWVsZDogKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAvLyB1c2UgYSBjdXN0b20gc29ydCB0byBzb3J0IGlwIGFkZHJlc3NcbiAgICAgICAgICAgIHJldHVybiBLdWJlcm5ldGVzLnNvcnRCeVBvZElwKGZpZWxkLmhvc3RJUCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IGZpZWxkOiAnJHBvZHNMaW5rJyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ1BvZHMnLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicG9kQ291bnRzQW5kTGlua1RlbXBsYXRlLmh0bWxcIiksXG4gICAgICAgICAgY3VzdG9tU29ydEZpZWxkOiAoZmllbGQpID0+IHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gY29uY2F0IGFsbCB0aGUgcG9kIGNvdW50ZXJzXG4gICAgICAgICAgICB2YXIgcmVhZHkgPSBmaWVsZC4kcG9kQ291bnRlcnMucmVhZHkgfHwgMDtcbiAgICAgICAgICAgIHZhciB2YWxpZCA9IGZpZWxkLiRwb2RDb3VudGVycy52YWxpZCB8fCAwO1xuICAgICAgICAgICAgdmFyIHdhaXRpbmcgPSBmaWVsZC4kcG9kQ291bnRlcnMud2FpdGluZyB8fCAwO1xuICAgICAgICAgICAgdmFyIGVycm9yID0gZmllbGQuJHBvZENvdW50ZXJzLmVycm9yIHx8IDA7XG4gICAgICAgICAgICByZXR1cm4gcmVhZHkgKyB2YWxpZCArIHdhaXRpbmcgKyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgSW1hZ2VSZXBvc2l0b3JpZXNDb250cm9sbGVyID0gY29udHJvbGxlcihcIkltYWdlUmVwb3NpdG9yaWVzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkZGlhbG9nXCIsIFwiJHdpbmRvd1wiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGxvY2F0aW9uXCIsIFwibG9jYWxTdG9yYWdlXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICB9KTtcblxuICAgICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgICBkYXRhOiAnaW1hZ2VSZXBvc2l0b3JpZXMnLFxuICAgICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXG4gICAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxuICAgICAgICBmaWx0ZXJPcHRpb25zOiB7XG4gICAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgICB9LFxuICAgICAgICBjb2x1bW5EZWZzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdtZXRhZGF0YS5uYW1lJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnbWV0YWRhdGEubmFtZXNwYWNlJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZXNwYWNlJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdzdGF0dXMuZG9ja2VySW1hZ2VSZXBvc2l0b3J5JyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRG9ja2VyIFJlZ2lzdHJ5J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICd0YWdzJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVGFncycsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldCgnaW1hZ2VSZWdpc3RyeUxhYmVsVGVtcGxhdGUuaHRtbCcpXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9O1xuXG4gICAgICB2YXIgbGFiZWxDb2xvcnMgPSB7XG4gICAgICAgICdwcm9kJzogJ2JhY2tncm91bmQtYmx1ZScsXG4gICAgICAgICd2YWxpZCc6ICdiYWNrZ3JvdW5kLWxpZ2h0LWdyZWVuJyxcbiAgICAgICAgJ3Rlc3QnOiAnYmFja2dyb3VuZC1saWdodC1ncmV5J1xuICAgICAgfTtcbiAgICAgICRzY29wZS5sYWJlbENsYXNzID0gKGxhYmVsVHlwZTpzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCEobGFiZWxUeXBlIGluIGxhYmVsQ29sb3JzKSkge1xuICAgICAgICAgIHJldHVybiAnbW91c2UtcG9pbnRlcic7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSByZXR1cm4gbGFiZWxDb2xvcnNbbGFiZWxUeXBlXSArICcgbW91c2UtcG9pbnRlcic7XG4gICAgICB9XG5cbiAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuICAgICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xuICAgICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XG4gICAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXG4gICAgICAgICAgaW5kZXg6ICckbmFtZScsXG4gICAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBuZXh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZUVudGl0eShuZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6ICdEZWxldGUgSW1hZ2UgUmVwb3NpdG9yeT8nLFxuICAgICAgICAgIGFjdGlvbjogJ1RoZSBmb2xsb3dpbmcgSW1hZ2UgUmVwb3NpdG9yaWVzIHdpbGwgYmUgZGVsZXRlZDonLFxuICAgICAgICAgIG9rVGV4dDogJ0RlbGV0ZScsXG4gICAgICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXInLFxuICAgICAgICAgIGN1c3RvbTogXCJUaGlzIG9wZXJhdGlvbiBpcyBwZXJtYW5lbnQgb25jZSBjb21wbGV0ZWQhXCIsXG4gICAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXG4gICAgICAgIH0pLm9wZW4oKTtcbiAgICAgIH07XG5cbiAgICAgIGZ1bmN0aW9uIGRlbGV0ZUVudGl0eShzZWxlY3Rpb24sIG5leHRDYWxsYmFjaykge1xuICAgICAgICB2YXIgbmFtZSA9IChzZWxlY3Rpb24gfHwge30pLiRuYW1lO1xuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWJvdXQgdG8gZGVsZXRlIGltYWdlIHJlcG9zaXRvcnk6IFwiICsgbmFtZSk7XG4gICAgICAgICAgdmFyIHVybCA9IGltYWdlUmVwb3NpdG9yeVJlc3RVcmwobmFtZSk7XG4gICAgICAgICAgJGh0dHAuZGVsZXRlKHVybCkuXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBuZXh0Q2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGRlbGV0ZSBpbWFnZSByZXBvc2l0b3J5IG9uIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJ3YXJuaW5nOiBubyBuYW1lIGZvciBzZWxlY3Rpb246IFwiICsgYW5ndWxhci50b0pzb24oc2VsZWN0aW9uKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgdmFyIHVybCA9IGltYWdlUmVwb3NpdG9yaWVzUmVzdFVSTCgpO1xuICAgICAgICAkaHR0cC5nZXQodXJsKS5cbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcImdvdCBkYXRhIFwiICsgYW5ndWxhci50b0pzb24oZGF0YSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAkc2NvcGUuaW1hZ2VSZXBvc2l0b3JpZXMgPSBlbnJpY2hJbWFnZVJlcG9zaXRvcmllcyhkYXRhLml0ZW1zKTtcbiAgICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLlxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgZnVuY3Rpb24gc2VsZWN0U3ViTmF2QmFyKCRzY29wZSwgdGFiTmFtZSwgbmV3U3ViVGFiTGFiZWwpIHtcbiAgICB2YXIgZm91bmRUYWIgPSBudWxsO1xuICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUuc3ViVGFiQ29uZmlnLCAodGFiKSA9PiB7XG4gICAgICBpZiAodGFiTmFtZSA9PT0gdGFiLmxhYmVsIHx8IHRhYk5hbWUgPT09IHRhYi5pZCkge1xuICAgICAgICBmb3VuZFRhYiA9IHRhYjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB2YXIgYnJlYWRjcnVtYkNvbmZpZyA9ICRzY29wZS5icmVhZGNydW1iQ29uZmlnO1xuICAgIGlmIChmb3VuZFRhYiAmJiBicmVhZGNydW1iQ29uZmlnKSB7XG4gICAgICBicmVhZGNydW1iQ29uZmlnLnB1c2goZm91bmRUYWIpO1xuICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiBuZXdTdWJUYWJMYWJlbFxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cblxuICB9XG5cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuIFxuICBleHBvcnQgdmFyIHNjaGVtYSA9IFxuICB7XG4gICAgXCJpZFwiOiBcImh0dHA6Ly9mYWJyaWM4LmlvL2ZhYnJpYzgvdjIvU2NoZW1hI1wiLFxuICAgIFwiJHNjaGVtYVwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hI1wiLFxuICAgIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgICAgXCJhcGlfUm9vdFBhdGhzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInBhdGhzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Sb290UGF0aHNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19BV1NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZVNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJmc1R5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZmlsZSBzeXN0ZW0gdHlwZSB0byBtb3VudFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhcnRpdGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicGFydGl0aW9uIG9uIHRoZSBkaXNrIHRvIG1vdW50IChlLmcuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhZE9ubHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlYWQtb25seSBpZiB0cnVlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidm9sdW1lSURcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidW5pcXVlIGlkIG9mIHRoZSBQRCByZXNvdXJjZSBpbiBBV1M7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3ZvbHVtZXMubWQjYXdzZWxhc3RpY2Jsb2Nrc3RvcmVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5BV1NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0NhcGFiaWxpdGllc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhZGRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhZGRlZCBjYXBhYmlsaXRpZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFkZGVkIGNhcGFiaWxpdGllc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRyb3BcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkcm9wZWQgY2FwYWJpbGl0aWVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkcm9wZWQgY2FwYWJpbGl0aWVzXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ2FwYWJpbGl0aWVzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfQ2VwaEZTVm9sdW1lU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm1vbml0b3JzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBjb2xsZWN0aW9uIG9mIENlcGggbW9uaXRvcnNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgY29sbGVjdGlvbiBvZiBDZXBoIG1vbml0b3JzXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhZE9ubHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNlcGggZnMgdG8gYmUgbW91bnRlZCB3aXRoIHJlYWQtb25seSBwZXJtaXNzaW9uc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlY3JldEZpbGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicGF0aCB0byBzZWNyZXQgZm9yIHJhZG9zIHVzZXI7IGRlZmF1bHQgaXMgL2V0Yy9jZXBoL3VzZXIuc2VjcmV0OyBvcHRpb25hbFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlY3JldFJlZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9jYWxPYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyYWRvcyB1c2VyIG5hbWU7IGRlZmF1bHQgaXMgYWRtaW47IG9wdGlvbmFsXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ2VwaEZTVm9sdW1lU291cmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfQ29udGFpbmVyXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFyZ3NcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb21tYW5kIGFycmF5OyB0aGUgZG9ja2VyIGltYWdlJ3MgY21kIGlzIHVzZWQgaWYgdGhpcyBpcyBub3QgcHJvdmlkZWQ7IGFyZ3VtZW50cyB0byB0aGUgZW50cnlwb2ludDsgY2Fubm90IGJlIHVwZGF0ZWQ7IHZhcmlhYmxlIHJlZmVyZW5jZXMgJChWQVJfTkFNRSkgYXJlIGV4cGFuZGVkIHVzaW5nIHRoZSBjb250YWluZXIncyBlbnZpcm9ubWVudCB2YXJpYWJsZXM7IGlmIGEgdmFyaWFibGUgY2Fubm90IGJlIHJlc29sdmVkXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb21tYW5kIGFycmF5OyB0aGUgZG9ja2VyIGltYWdlJ3MgY21kIGlzIHVzZWQgaWYgdGhpcyBpcyBub3QgcHJvdmlkZWQ7IGFyZ3VtZW50cyB0byB0aGUgZW50cnlwb2ludDsgY2Fubm90IGJlIHVwZGF0ZWQ7IHZhcmlhYmxlIHJlZmVyZW5jZXMgJChWQVJfTkFNRSkgYXJlIGV4cGFuZGVkIHVzaW5nIHRoZSBjb250YWluZXIncyBlbnZpcm9ubWVudCB2YXJpYWJsZXM7IGlmIGEgdmFyaWFibGUgY2Fubm90IGJlIHJlc29sdmVkXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY29tbWFuZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImVudHJ5cG9pbnQgYXJyYXk7IG5vdCBleGVjdXRlZCB3aXRoaW4gYSBzaGVsbDsgdGhlIGRvY2tlciBpbWFnZSdzIGVudHJ5cG9pbnQgaXMgdXNlZCBpZiB0aGlzIGlzIG5vdCBwcm92aWRlZDsgY2Fubm90IGJlIHVwZGF0ZWQ7IHZhcmlhYmxlIHJlZmVyZW5jZXMgJChWQVJfTkFNRSkgYXJlIGV4cGFuZGVkIHVzaW5nIHRoZSBjb250YWluZXIncyBlbnZpcm9ubWVudCB2YXJpYWJsZXM7IGlmIGEgdmFyaWFibGUgY2Fubm90IGJlIHJlc29sdmVkXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJlbnRyeXBvaW50IGFycmF5OyBub3QgZXhlY3V0ZWQgd2l0aGluIGEgc2hlbGw7IHRoZSBkb2NrZXIgaW1hZ2UncyBlbnRyeXBvaW50IGlzIHVzZWQgaWYgdGhpcyBpcyBub3QgcHJvdmlkZWQ7IGNhbm5vdCBiZSB1cGRhdGVkOyB2YXJpYWJsZSByZWZlcmVuY2VzICQoVkFSX05BTUUpIGFyZSBleHBhbmRlZCB1c2luZyB0aGUgY29udGFpbmVyJ3MgZW52aXJvbm1lbnQgdmFyaWFibGVzOyBpZiBhIHZhcmlhYmxlIGNhbm5vdCBiZSByZXNvbHZlZFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImVudlwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiB0aGUgY29udGFpbmVyOyBjYW5ub3QgYmUgdXBkYXRlZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbnZWYXJcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW52VmFyXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaW1hZ2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRG9ja2VyIGltYWdlIG5hbWU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2ltYWdlcy5tZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImltYWdlUHVsbFBvbGljeVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpbWFnZSBwdWxsIHBvbGljeTsgb25lIG9mIEFsd2F5c1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImxpZmVjeWNsZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlmZWN5Y2xlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaWZlY3ljbGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsaXZlbmVzc1Byb2JlXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qcm9iZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUHJvYmVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIGNvbnRhaW5lcjsgbXVzdCBiZSBhIEROU19MQUJFTCBhbmQgdW5pcXVlIHdpdGhpbiB0aGUgcG9kOyBjYW5ub3QgYmUgdXBkYXRlZFwiLFxuICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogNjMsXG4gICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicG9ydHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHBvcnRzIHRvIGV4cG9zZSBmcm9tIHRoZSBjb250YWluZXI7IGNhbm5vdCBiZSB1cGRhdGVkXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NvbnRhaW5lclBvcnRcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyUG9ydFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYWRpbmVzc1Byb2JlXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qcm9iZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUHJvYmVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXNvdXJjZXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1Jlc291cmNlUmVxdWlyZW1lbnRzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVJlcXVpcmVtZW50c1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlY3VyaXR5Q29udGV4dFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VjdXJpdHlDb250ZXh0XCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWN1cml0eUNvbnRleHRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGRpblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiV2hldGhlciB0aGlzIGNvbnRhaW5lciBzaG91bGQgYWxsb2NhdGUgYSBidWZmZXIgZm9yIHN0ZGluIGluIHRoZSBjb250YWluZXIgcnVudGltZTsgZGVmYXVsdCBpcyBmYWxzZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRlcm1pbmF0aW9uTWVzc2FnZVBhdGhcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicGF0aCBhdCB3aGljaCB0aGUgZmlsZSB0byB3aGljaCB0aGUgY29udGFpbmVyJ3MgdGVybWluYXRpb24gbWVzc2FnZSB3aWxsIGJlIHdyaXR0ZW4gaXMgbW91bnRlZCBpbnRvIHRoZSBjb250YWluZXIncyBmaWxlc3lzdGVtOyBtZXNzYWdlIHdyaXR0ZW4gaXMgaW50ZW5kZWQgdG8gYmUgYnJpZWYgZmluYWwgc3RhdHVzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHR5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJXaGV0aGVyIHRoaXMgY29udGFpbmVyIHNob3VsZCBhbGxvY2F0ZSBhIFRUWSBmb3IgaXRzZWxmXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidm9sdW1lTW91bnRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicG9kIHZvbHVtZXMgdG8gbW91bnQgaW50byB0aGUgY29udGFpbmVyJ3MgZmlsZXN5c3RlOyBjYW5ub3QgYmUgdXBkYXRlZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Wb2x1bWVNb3VudFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Wb2x1bWVNb3VudFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIndvcmtpbmdEaXJcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29udGFpbmVyJ3Mgd29ya2luZyBkaXJlY3Rvcnk7IGRlZmF1bHRzIHRvIGltYWdlJ3MgZGVmYXVsdDsgY2Fubm90IGJlIHVwZGF0ZWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Db250YWluZXJQb3J0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNvbnRhaW5lclBvcnRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm51bWJlciBvZiBwb3J0IHRvIGV4cG9zZSBvbiB0aGUgcG9kJ3MgSVAgYWRkcmVzc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImhvc3RJUFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJob3N0IElQIHRvIGJpbmQgdGhlIHBvcnQgdG9cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJob3N0UG9ydFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibnVtYmVyIG9mIHBvcnQgdG8gZXhwb3NlIG9uIHRoZSBob3N0OyBtb3N0IGNvbnRhaW5lcnMgZG8gbm90IG5lZWQgdGhpc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBmb3IgdGhlIHBvcnQgdGhhdCBjYW4gYmUgcmVmZXJyZWQgdG8gYnkgc2VydmljZXM7IG11c3QgYmUgYW4gSUFOQV9TVkNfTkFNRSBhbmQgdW5pcXVlIHdpdGhpbiB0aGUgcG9kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicHJvdG9jb2xcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicHJvdG9jb2wgZm9yIHBvcnQ7IG11c3QgYmUgVURQIG9yIFRDUDsgVENQIGlmIHVuc3BlY2lmaWVkXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyUG9ydFwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInJ1bm5pbmdcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlUnVubmluZ1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdGVSdW5uaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidGVybWluYXRlZFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ29udGFpbmVyU3RhdGVUZXJtaW5hdGVkXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVRlcm1pbmF0ZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ3YWl0aW5nXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Db250YWluZXJTdGF0ZVdhaXRpbmdcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXRlV2FpdGluZ1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXRlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfQ29udGFpbmVyU3RhdGVSdW5uaW5nXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInN0YXJ0ZWRBdFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aW1lIGF0IHdoaWNoIHRoZSBjb250YWluZXIgd2FzIGxhc3QgKHJlLSlzdGFydGVkXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdGVSdW5uaW5nXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfQ29udGFpbmVyU3RhdGVUZXJtaW5hdGVkXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNvbnRhaW5lcklEXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbnRhaW5lcidzIElEIGluIHRoZSBmb3JtYXQgJ2RvY2tlcjovL1xcdTAwM2Njb250YWluZXJfaWRcXHUwMDNlJ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImV4aXRDb2RlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJleGl0IHN0YXR1cyBmcm9tIHRoZSBsYXN0IHRlcm1pbmF0aW9uIG9mIHRoZSBjb250YWluZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmaW5pc2hlZEF0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRpbWUgYXQgd2hpY2ggdGhlIGNvbnRhaW5lciBsYXN0IHRlcm1pbmF0ZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1lc3NhZ2UgcmVnYXJkaW5nIHRoZSBsYXN0IHRlcm1pbmF0aW9uIG9mIHRoZSBjb250YWluZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWFzb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiKGJyaWVmKSByZWFzb24gZnJvbSB0aGUgbGFzdCB0ZXJtaW5hdGlvbiBvZiB0aGUgY29udGFpbmVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2lnbmFsXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzaWduYWwgZnJvbSB0aGUgbGFzdCB0ZXJtaW5hdGlvbiBvZiB0aGUgY29udGFpbmVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhcnRlZEF0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRpbWUgYXQgd2hpY2ggcHJldmlvdXMgZXhlY3V0aW9uIG9mIHRoZSBjb250YWluZXIgc3RhcnRlZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXRlVGVybWluYXRlZFwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlV2FpdGluZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJyZWFzb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiKGJyaWVmKSByZWFzb24gdGhlIGNvbnRhaW5lciBpcyBub3QgeWV0IHJ1bm5pbmdcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVdhaXRpbmdcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Db250YWluZXJTdGF0dXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY29udGFpbmVySURcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29udGFpbmVyJ3MgSUQgaW4gdGhlIGZvcm1hdCAnZG9ja2VyOi8vXFx1MDAzY2NvbnRhaW5lcl9pZFxcdTAwM2UnOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9jb250YWluZXItZW52aXJvbm1lbnQubWQjY29udGFpbmVyLWluZm9ybWF0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaW1hZ2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaW1hZ2Ugb2YgdGhlIGNvbnRhaW5lcjsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvaW1hZ2VzLm1kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaW1hZ2VJRFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJRCBvZiB0aGUgY29udGFpbmVyJ3MgaW1hZ2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsYXN0U3RhdGVcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgY29udGFpbmVyOyBtdXN0IGJlIGEgRE5TX0xBQkVMIGFuZCB1bmlxdWUgd2l0aGluIHRoZSBwb2Q7IGNhbm5vdCBiZSB1cGRhdGVkXCIsXG4gICAgICAgICAgICBcIm1heExlbmd0aFwiOiA2MyxcbiAgICAgICAgICAgIFwicGF0dGVyblwiOiBcIl5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWFkeVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3BlY2lmaWVzIHdoZXRoZXIgdGhlIGNvbnRhaW5lciBoYXMgcGFzc2VkIGl0cyByZWFkaW5lc3MgcHJvYmVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXN0YXJ0Q291bnRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGNvbnRhaW5lciBoYXMgYmVlbiByZXN0YXJ0ZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0ZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ29udGFpbmVyU3RhdGVcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXRlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfRW1wdHlEaXJWb2x1bWVTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibWVkaXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInR5cGUgb2Ygc3RvcmFnZSB1c2VkIHRvIGJhY2sgdGhlIHZvbHVtZTsgbXVzdCBiZSBhbiBlbXB0eSBzdHJpbmcgKGRlZmF1bHQpIG9yIE1lbW9yeTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvdm9sdW1lcy5tZCNlbXB0eWRpclwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVtcHR5RGlyVm9sdW1lU291cmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfRW5kcG9pbnRBZGRyZXNzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImlwXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklQIGFkZHJlc3Mgb2YgdGhlIGVuZHBvaW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidGFyZ2V0UmVmXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50QWRkcmVzc1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0VuZHBvaW50UG9ydFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhpcyBwb3J0XCIsXG4gICAgICAgICAgICBcIm1heExlbmd0aFwiOiA2MyxcbiAgICAgICAgICAgIFwicGF0dGVyblwiOiBcIl5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwb3J0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwb3J0IG51bWJlciBvZiB0aGUgZW5kcG9pbnRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwcm90b2NvbFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwcm90b2NvbCBmb3IgdGhpcyBwb3J0OyBtdXN0IGJlIFVEUCBvciBUQ1A7IFRDUCBpZiB1bnNwZWNpZmllZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50UG9ydFwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0VuZHBvaW50U3Vic2V0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFkZHJlc3Nlc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklQIGFkZHJlc3NlcyB3aGljaCBvZmZlciB0aGUgcmVsYXRlZCBwb3J0c1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbmRwb2ludEFkZHJlc3NcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW5kcG9pbnRBZGRyZXNzXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicG9ydHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwb3J0IG51bWJlcnMgYXZhaWxhYmxlIG9uIHRoZSByZWxhdGVkIElQIGFkZHJlc3Nlc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbmRwb2ludFBvcnRcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW5kcG9pbnRQb3J0XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW5kcG9pbnRTdWJzZXRcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19FbmRwb2ludHNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkVuZHBvaW50c1wiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3Vic2V0c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNldHMgb2YgYWRkcmVzc2VzIGFuZCBwb3J0cyB0aGF0IGNvbXByaXNlIGEgc2VydmljZVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbmRwb2ludFN1YnNldFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludFN1YnNldFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50c1wiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0VuZHBvaW50c0xpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGVuZHBvaW50c1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbmRwb2ludHNcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW5kcG9pbnRzXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkVuZHBvaW50c0xpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW5kcG9pbnRzTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0VudlZhclwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlOyBtdXN0IGJlIGEgQ19JREVOVElGSUVSXCIsXG4gICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeW0EtWmEtel9dW0EtWmEtejAtOV9dKiRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ2YWx1ZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGU7IGRlZmF1bHRzIHRvIGVtcHR5IHN0cmluZzsgdmFyaWFibGUgcmVmZXJlbmNlcyAkKFZBUl9OQU1FKSBhcmUgZXhwYW5kZWQgdXNpbmcgdGhlIHByZXZpb3VzbHkgZGVmaW5lZCBlbnZpcm9ubWVudCB2YXJpYmxlcyBpbiB0aGUgY29udGFpbmVyIGFuZCBhbnkgc2VydmljZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM7IGlmIGEgdmFyaWFibGUgY2Fubm90IGJlIHJlc29sdmVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidmFsdWVGcm9tXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbnZWYXJTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclNvdXJjZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0VudlZhclNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJmaWVsZFJlZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0RmllbGRTZWxlY3RvclwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0RmllbGRTZWxlY3RvclwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0V2ZW50XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvdW50XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMgZXZlbnQgaGFzIG9jY3VycmVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZmlyc3RUaW1lc3RhbXBcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHRpbWUgYXQgd2hpY2ggdGhlIGV2ZW50IHdhcyBmaXJzdCByZWNvcmRlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImludm9sdmVkT2JqZWN0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJFdmVudFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImxhc3RUaW1lc3RhbXBcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHRpbWUgYXQgd2hpY2ggdGhlIG1vc3QgcmVjZW50IG9jY3VycmVuY2Ugb2YgdGhpcyBldmVudCB3YXMgcmVjb3JkZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBzdGF0dXMgb2YgdGhpcyBvcGVyYXRpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYXNvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzaG9ydFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNvdXJjZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRXZlbnRTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkV2ZW50U291cmNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRXZlbnRcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19FdmVudExpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGV2ZW50c1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FdmVudFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FdmVudFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJFdmVudExpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRXZlbnRMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfRXZlbnRTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY29tcG9uZW50XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbXBvbmVudCB0aGF0IGdlbmVyYXRlZCB0aGUgZXZlbnRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJob3N0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIGhvc3Qgd2hlcmUgdGhlIGV2ZW50IGlzIGdlbmVyYXRlZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkV2ZW50U291cmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfRXhlY0FjdGlvblwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjb21tYW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29tbWFuZCBsaW5lIHRvIGV4ZWN1dGUgaW5zaWRlIHRoZSBjb250YWluZXI7IHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgY29tbWFuZCBpcyByb290ICgnLycpIGluIHRoZSBjb250YWluZXIncyBmaWxlIHN5c3RlbTsgdGhlIGNvbW1hbmQgaXMgZXhlYydkXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb21tYW5kIGxpbmUgdG8gZXhlY3V0ZSBpbnNpZGUgdGhlIGNvbnRhaW5lcjsgd29ya2luZyBkaXJlY3RvcnkgZm9yIHRoZSBjb21tYW5kIGlzIHJvb3QgKCcvJykgaW4gdGhlIGNvbnRhaW5lcidzIGZpbGUgc3lzdGVtOyB0aGUgY29tbWFuZCBpcyBleGVjJ2RcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FeGVjQWN0aW9uXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfR0NFUGVyc2lzdGVudERpc2tWb2x1bWVTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZnNUeXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZpbGUgc3lzdGVtIHR5cGUgdG8gbW91bnRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXJ0aXRpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhcnRpdGlvbiBvbiB0aGUgZGlzayB0byBtb3VudCAoZS5nLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBkTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1bmlxdWUgbmFtZSBvZiB0aGUgUEQgcmVzb3VyY2UgaW4gR0NFOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS92b2x1bWVzLm1kI2djZXBlcnNpc3RlbnRkaXNrXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhZE9ubHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlYWQtb25seSBpZiB0cnVlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR0NFUGVyc2lzdGVudERpc2tWb2x1bWVTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19HaXRSZXBvVm9sdW1lU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInJlcG9zaXRvcnlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVwb3NpdG9yeSBVUkxcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXZpc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb21taXQgaGFzaCBmb3IgdGhlIHNwZWNpZmllZCByZXZpc2lvblwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdpdFJlcG9Wb2x1bWVTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19HbHVzdGVyZnNWb2x1bWVTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZW5kcG9pbnRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImdsdXN0ZXIgaG9zdHMgZW5kcG9pbnRzIG5hbWU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvZ2x1c3RlcmZzL1JFQURNRS5tZCNjcmVhdGUtYS1wb2RcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXRoXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhdGggdG8gZ2x1c3RlciB2b2x1bWU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvZ2x1c3RlcmZzL1JFQURNRS5tZCNjcmVhdGUtYS1wb2RcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWFkT25seVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZ2x1c3RlcmZzIHZvbHVtZSB0byBiZSBtb3VudGVkIHdpdGggcmVhZC1vbmx5IHBlcm1pc3Npb25zOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL2dsdXN0ZXJmcy9SRUFETUUubWQjY3JlYXRlLWEtcG9kXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR2x1c3RlcmZzVm9sdW1lU291cmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfSFRUUEdldEFjdGlvblwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJob3N0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImhvc3RuYW1lIHRvIGNvbm5lY3QgdG87IGRlZmF1bHRzIHRvIHBvZCBJUFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhdGhcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicGF0aCB0byBhY2Nlc3Mgb24gdGhlIEhUVFAgc2VydmVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicG9ydFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfdXRpbF9JbnRPclN0cmluZ1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSW50T3JTdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzY2hlbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2NoZW1lIHRvIGNvbm5lY3Qgd2l0aFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhUVFBHZXRBY3Rpb25cIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19IYW5kbGVyXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImV4ZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0V4ZWNBY3Rpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkV4ZWNBY3Rpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJodHRwR2V0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19IVFRQR2V0QWN0aW9uXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IVFRQR2V0QWN0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidGNwU29ja2V0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19UQ1BTb2NrZXRBY3Rpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlRDUFNvY2tldEFjdGlvblwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhbmRsZXJcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJwYXRoXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhdGggb2YgdGhlIGRpcmVjdG9yeSBvbiB0aGUgaG9zdDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvdm9sdW1lcy5tZCNob3N0cGF0aFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhvc3RQYXRoVm9sdW1lU291cmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfSVNDU0lWb2x1bWVTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZnNUeXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZpbGUgc3lzdGVtIHR5cGUgdG8gbW91bnRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpcW5cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaVNDU0kgUXVhbGlmaWVkIE5hbWVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsdW5cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImlzY3NpIHRhcmdldCBsdW4gbnVtYmVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhZE9ubHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlYWQtb25seSBpZiB0cnVlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidGFyZ2V0UG9ydGFsXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImlTQ1NJIHRhcmdldCBwb3J0YWxcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5JU0NTSVZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0xpZmVjeWNsZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJwb3N0U3RhcnRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0hhbmRsZXJcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhbmRsZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwcmVTdG9wXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19IYW5kbGVyXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYW5kbGVyXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlmZWN5Y2xlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygb2JqZWN0c1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkJhc2VLdWJlcm5ldGVzTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0xpc3RNZXRhXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInJlc291cmNlVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdHJpbmcgdGhhdCBpZGVudGlmaWVzIHRoZSBpbnRlcm5hbCB2ZXJzaW9uIG9mIHRoaXMgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgYnkgY2xpZW50cyB0byBkZXRlcm1pbmUgd2hlbiBvYmplY3RzIGhhdmUgY2hhbmdlZDsgcG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWxmTGlua1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVUkwgZm9yIHRoZSBvYmplY3Q7IHBvcHVsYXRlZCBieSB0aGUgc3lzdGVtXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Mb2FkQmFsYW5jZXJJbmdyZXNzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImhvc3RuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImhvc3RuYW1lIG9mIGluZ3Jlc3MgcG9pbnRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpcFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJUCBhZGRyZXNzIG9mIGluZ3Jlc3MgcG9pbnRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2FkQmFsYW5jZXJJbmdyZXNzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTG9hZEJhbGFuY2VyU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImluZ3Jlc3NcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsb2FkLWJhbGFuY2VyIGluZ3Jlc3MgcG9pbnRzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvYWRCYWxhbmNlckluZ3Jlc3NcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9hZEJhbGFuY2VySW5ncmVzc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvYWRCYWxhbmNlclN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgcmVmZXJlbnQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2lkZW50aWZpZXJzLm1kI25hbWVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19NZXRhZGF0YUZpbGVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZmllbGRSZWZcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdEZpZWxkU2VsZWN0b3JcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdEZpZWxkU2VsZWN0b3JcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGNyZWF0ZWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5NZXRhZGF0YUZpbGVcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19NZXRhZGF0YVZvbHVtZVNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgbWV0YWRhdGEgZmlsZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTWV0YWRhdGFGaWxlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk1ldGFkYXRhRmlsZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk1ldGFkYXRhVm9sdW1lU291cmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTkZTVm9sdW1lU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInBhdGhcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHBhdGggdGhhdCBpcyBleHBvcnRlZCBieSB0aGUgTkZTIHNlcnZlcjsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvdm9sdW1lcy5tZCNuZnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWFkT25seVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZm9yY2VzIHRoZSBORlMgZXhwb3J0IHRvIGJlIG1vdW50ZWQgd2l0aCByZWFkLW9ubHkgcGVybWlzc2lvbnM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3ZvbHVtZXMubWQjbmZzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VydmVyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBob3N0bmFtZSBvciBJUCBhZGRyZXNzIG9mIHRoZSBORlMgc2VydmVyOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS92b2x1bWVzLm1kI25mc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5GU1ZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX05hbWVzcGFjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiTmFtZXNwYWNlXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzcGVjXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19OYW1lc3BhY2VTcGVjXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lc3BhY2VTcGVjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19OYW1lc3BhY2VTdGF0dXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVzcGFjZVN0YXR1c1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVzcGFjZVwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX05hbWVzcGFjZUxpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpdGVtcyBpcyB0aGUgbGlzdCBvZiBOYW1lc3BhY2Ugb2JqZWN0cyBpbiB0aGUgbGlzdDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbmFtZXNwYWNlcy5tZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19OYW1lc3BhY2VcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZXNwYWNlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk5hbWVzcGFjZUxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZXNwYWNlTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX05hbWVzcGFjZVNwZWNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZmluYWxpemVyc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFuIG9wYXF1ZSBsaXN0IG9mIHZhbHVlcyB0aGF0IG11c3QgYmUgZW1wdHkgdG8gcGVybWFuZW50bHkgcmVtb3ZlIG9iamVjdCBmcm9tIHN0b3JhZ2U7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vbmFtZXNwYWNlcy5tZCNmaW5hbGl6ZXJzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbiBvcGFxdWUgbGlzdCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGVtcHR5IHRvIHBlcm1hbmVudGx5IHJlbW92ZSBvYmplY3QgZnJvbSBzdG9yYWdlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL25hbWVzcGFjZXMubWQjZmluYWxpemVyc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVzcGFjZVNwZWNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19OYW1lc3BhY2VTdGF0dXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwicGhhc2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicGhhc2UgaXMgdGhlIGN1cnJlbnQgbGlmZWN5Y2xlIHBoYXNlIG9mIHRoZSBuYW1lc3BhY2U7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vbmFtZXNwYWNlcy5tZCNwaGFzZXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lc3BhY2VTdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Ob2RlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJOb2RlXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzcGVjXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ob2RlU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZVNwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05vZGVTdGF0dXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTm9kZUFkZHJlc3NcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYWRkcmVzc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbm9kZSBhZGRyZXNzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJub2RlIGFkZHJlc3MgdHlwZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVBZGRyZXNzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTm9kZUNvbmRpdGlvblwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJsYXN0SGVhcnRiZWF0VGltZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsYXN0IHRpbWUgd2UgZ290IGFuIHVwZGF0ZSBvbiBhIGdpdmVuIGNvbmRpdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImxhc3RUcmFuc2l0aW9uVGltZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsYXN0IHRpbWUgdGhlIGNvbmRpdGlvbiB0cmFuc2l0IGZyb20gb25lIHN0YXR1cyB0byBhbm90aGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJodW1hbiByZWFkYWJsZSBtZXNzYWdlIGluZGljYXRpbmcgZGV0YWlscyBhYm91dCBsYXN0IHRyYW5zaXRpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWFzb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiKGJyaWVmKSByZWFzb24gZm9yIHRoZSBjb25kaXRpb24ncyBsYXN0IHRyYW5zaXRpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RhdHVzIG9mIHRoZSBjb25kaXRpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInR5cGUgb2Ygbm9kZSBjb25kaXRpb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlQ29uZGl0aW9uXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTm9kZUxpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIG5vZGVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05vZGVcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJOb2RlTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX05vZGVTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImV4dGVybmFsSURcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVwcmVjYXRlZC4gRXh0ZXJuYWwgSUQgYXNzaWduZWQgdG8gdGhlIG5vZGUgYnkgc29tZSBtYWNoaW5lIGRhdGFiYXNlIChlLmcuIGEgY2xvdWQgcHJvdmlkZXIpLiBEZWZhdWx0cyB0byBub2RlIG5hbWUgd2hlbiBlbXB0eS5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwb2RDSURSXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBvZCBJUCByYW5nZSBhc3NpZ25lZCB0byB0aGUgbm9kZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInByb3ZpZGVySURcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSUQgb2YgdGhlIG5vZGUgYXNzaWduZWQgYnkgdGhlIGNsb3VkIHByb3ZpZGVyIGluIHRoZSBmb3JtYXQ6IFxcdTAwM2NQcm92aWRlck5hbWVcXHUwMDNlOi8vXFx1MDAzY1Byb3ZpZGVyU3BlY2lmaWNOb2RlSURcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidW5zY2hlZHVsYWJsZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGlzYWJsZSBwb2Qgc2NoZWR1bGluZyBvbiB0aGUgbm9kZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2FkbWluL25vZGUubWQjbWFudWFsLW5vZGUtYWRtaW5pc3RyYXRpb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlU3BlY1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX05vZGVTdGF0dXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYWRkcmVzc2VzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBhZGRyZXNzZXMgcmVhY2hhYmxlIHRvIHRoZSBub2RlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvYWRtaW4vbm9kZS5tZCNub2RlLWFkZHJlc3Nlc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ob2RlQWRkcmVzc1wiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlQWRkcmVzc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNhcGFjaXR5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbXB1dGUgcmVzb3VyY2UgY2FwYWNpdHkgb2YgdGhlIG5vZGU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2NvbXB1dGUtcmVzb3VyY2VzLm1kXCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjb25kaXRpb25zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBub2RlIGNvbmRpdGlvbnMgb2JzZXJ2ZWQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9hZG1pbi9ub2RlLm1kI25vZGUtY29uZGl0aW9uXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05vZGVDb25kaXRpb25cIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZUNvbmRpdGlvblwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5vZGVJbmZvXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ob2RlU3lzdGVtSW5mb1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZVN5c3RlbUluZm9cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwaGFzZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtb3N0IHJlY2VudGx5IG9ic2VydmVkIGxpZmVjeWNsZSBwaGFzZSBvZiB0aGUgbm9kZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2FkbWluL25vZGUubWQjbm9kZS1waGFzZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVTdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Ob2RlU3lzdGVtSW5mb1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJib290SURcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYm9vdCBpZCBpcyB0aGUgYm9vdC1pZCByZXBvcnRlZCBieSB0aGUgbm9kZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvbnRhaW5lclJ1bnRpbWVWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbnRhaW5lciBydW50aW1lIHZlcnNpb24gcmVwb3J0ZWQgYnkgdGhlIG5vZGUgdGhyb3VnaCBydW50aW1lIHJlbW90ZSBBUEkgKGUuZy4gZG9ja2VyOi8vMS41LjApXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2VybmVsVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJLZXJuZWwgdmVyc2lvbiByZXBvcnRlZCBieSB0aGUgbm9kZSBmcm9tICd1bmFtZSAtcicgKGUuZy4gMy4xNi4wLTAuYnBvLjQtYW1kNjQpXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia3ViZVByb3h5VmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJLdWJlLXByb3h5IHZlcnNpb24gcmVwb3J0ZWQgYnkgdGhlIG5vZGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrdWJlbGV0VmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJLdWJlbGV0IHZlcnNpb24gcmVwb3J0ZWQgYnkgdGhlIG5vZGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtYWNoaW5lSURcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWFjaGluZS1pZCByZXBvcnRlZCBieSB0aGUgbm9kZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm9zSW1hZ2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT1MgaW1hZ2UgdXNlZCByZXBvcnRlZCBieSB0aGUgbm9kZSBmcm9tIC9ldGMvb3MtcmVsZWFzZSAoZS5nLiBEZWJpYW4gR05VL0xpbnV4IDcgKHdoZWV6eSkpXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3lzdGVtVVVJRFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzeXN0ZW0tdXVpZCByZXBvcnRlZCBieSB0aGUgbm9kZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVTeXN0ZW1JbmZvXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfT2JqZWN0RmllbGRTZWxlY3RvclwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInZlcnNpb24gb2YgdGhlIHNjaGVtYSB0aGF0IGZpZWxkUGF0aCBpcyB3cml0dGVuIGluIHRlcm1zIG9mOyBkZWZhdWx0cyB0byB2MVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImZpZWxkUGF0aFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwYXRoIG9mIHRoZSBmaWVsZCB0byBzZWxlY3QgaW4gdGhlIHNwZWNpZmllZCBBUEkgdmVyc2lvblwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdEZpZWxkU2VsZWN0b3JcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19PYmplY3RNZXRhXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFubm90YXRpb25zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1hcCBvZiBzdHJpbmcga2V5cyBhbmQgdmFsdWVzIHRoYXQgY2FuIGJlIHVzZWQgYnkgZXh0ZXJuYWwgdG9vbGluZyB0byBzdG9yZSBhbmQgcmV0cmlldmUgYXJiaXRyYXJ5IG1ldGFkYXRhIGFib3V0IG9iamVjdHM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2Fubm90YXRpb25zLm1kXCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtYXAgb2Ygc3RyaW5nIGtleXMgYW5kIHZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IGV4dGVybmFsIHRvb2xpbmcgdG8gc3RvcmUgYW5kIHJldHJpZXZlIGFyYml0cmFyeSBtZXRhZGF0YSBhYm91dCBvYmplY3RzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9hbm5vdGF0aW9ucy5tZFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjcmVhdGlvblRpbWVzdGFtcFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSRkMgMzMzOSBkYXRlIGFuZCB0aW1lIGF0IHdoaWNoIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWQ7IHBvcHVsYXRlZCBieSB0aGUgc3lzdGVtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZGVsZXRpb25UaW1lc3RhbXBcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUkZDIDMzMzkgZGF0ZSBhbmQgdGltZSBhdCB3aGljaCB0aGUgb2JqZWN0IHdpbGwgYmUgZGVsZXRlZDsgcG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW0gd2hlbiBhIGdyYWNlZnVsIGRlbGV0aW9uIGlzIHJlcXVlc3RlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdlbmVyYXRlTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbiBvcHRpb25hbCBwcmVmaXggdG8gdXNlIHRvIGdlbmVyYXRlIGEgdW5pcXVlIG5hbWU7IGhhcyB0aGUgc2FtZSB2YWxpZGF0aW9uIHJ1bGVzIGFzIG5hbWU7IG9wdGlvbmFsXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2VuZXJhdGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBzZXF1ZW5jZSBudW1iZXIgcmVwcmVzZW50aW5nIGEgc3BlY2lmaWMgZ2VuZXJhdGlvbiBvZiB0aGUgZGVzaXJlZCBzdGF0ZTsgcG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW07IHJlYWQtb25seVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsYWJlbHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWFwIG9mIHN0cmluZyBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBvcmdhbml6ZSBhbmQgY2F0ZWdvcml6ZSBvYmplY3RzOyBtYXkgbWF0Y2ggc2VsZWN0b3JzIG9mIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJzIGFuZCBzZXJ2aWNlczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbGFiZWxzLm1kXCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtYXAgb2Ygc3RyaW5nIGtleXMgYW5kIHZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIG9yZ2FuaXplIGFuZCBjYXRlZ29yaXplIG9iamVjdHM7IG1heSBtYXRjaCBzZWxlY3RvcnMgb2YgcmVwbGljYXRpb24gY29udHJvbGxlcnMgYW5kIHNlcnZpY2VzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9sYWJlbHMubWRcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGFuIG9iamVjdC4gTXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgbmFtZXNwYWNlOyBjYW5ub3QgYmUgdXBkYXRlZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvaWRlbnRpZmllcnMubWQjbmFtZXNcIixcbiAgICAgICAgICAgIFwibWF4TGVuZ3RoXCI6IDYzLFxuICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IFwiXlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/JFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVzcGFjZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lc3BhY2Ugb2YgdGhlIG9iamVjdDsgbXVzdCBiZSBhIEROU19MQUJFTDsgY2Fubm90IGJlIHVwZGF0ZWQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL25hbWVzcGFjZXMubWRcIixcbiAgICAgICAgICAgIFwibWF4TGVuZ3RoXCI6IDI1MyxcbiAgICAgICAgICAgIFwicGF0dGVyblwiOiBcIl5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyhcXFxcLlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/KSokXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInN0cmluZyB0aGF0IGlkZW50aWZpZXMgdGhlIGludGVybmFsIHZlcnNpb24gb2YgdGhpcyBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBieSBjbGllbnRzIHRvIGRldGVybWluZSB3aGVuIG9iamVjdHMgaGF2ZSBjaGFuZ2VkOyBwb3B1bGF0ZWQgYnkgdGhlIHN5c3RlbVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlbGZMaW5rXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlVSTCBmb3IgdGhlIG9iamVjdDsgcG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1aWRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidW5pcXVlIFVVSUQgYWNyb3NzIHNwYWNlIGFuZCB0aW1lOyBwb3B1bGF0ZWQgYnkgdGhlIHN5c3RlbTsgcmVhZC1vbmx5OyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pZGVudGlmaWVycy5tZCN1aWRzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkFQSSB2ZXJzaW9uIG9mIHRoZSByZWZlcmVudFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImZpZWxkUGF0aFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpZiByZWZlcnJpbmcgdG8gYSBwaWVjZSBvZiBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBlbnRpcmUgb2JqZWN0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJraW5kIG9mIHRoZSByZWZlcmVudDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgcmVmZXJlbnQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2lkZW50aWZpZXJzLm1kI25hbWVzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZXNwYWNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWVzcGFjZSBvZiB0aGUgcmVmZXJlbnQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL25hbWVzcGFjZXMubWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXNvdXJjZVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3BlY2lmaWMgcmVzb3VyY2VWZXJzaW9uIHRvIHdoaWNoIHRoaXMgcmVmZXJlbmNlIGlzIG1hZGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1aWRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidWlkIG9mIHRoZSByZWZlcmVudDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvaWRlbnRpZmllcnMubWQjdWlkc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlBlcnNpc3RlbnRWb2x1bWVcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVTcGVjXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lU3BlY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZVN0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZVN0YXR1c1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlBlcnNpc3RlbnRWb2x1bWVDbGFpbVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZUNsYWltU3BlY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltU3RhdHVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1TdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBsaXN0IG9mIHBlcnNpc3RlbnQgdm9sdW1lIGNsYWltczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI3BlcnNpc3RlbnR2b2x1bWVjbGFpbXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbUxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1TcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFjY2Vzc01vZGVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGRlc2lyZWQgYWNjZXNzIG1vZGVzIHRoZSB2b2x1bWUgc2hvdWxkIGhhdmU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNhY2Nlc3MtbW9kZXMtMVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGRlc2lyZWQgYWNjZXNzIG1vZGVzIHRoZSB2b2x1bWUgc2hvdWxkIGhhdmU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNhY2Nlc3MtbW9kZXMtMVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVzb3VyY2VSZXF1aXJlbWVudHNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUmVxdWlyZW1lbnRzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidm9sdW1lTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgYmluZGluZyByZWZlcmVuY2UgdG8gdGhlIHBlcnNpc3RlbnQgdm9sdW1lIGJhY2tpbmcgdGhpcyBjbGFpbVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVNwZWNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1TdGF0dXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYWNjZXNzTW9kZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgYWN0dWFsIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIGhhczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI2FjY2Vzcy1tb2Rlcy0xXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgYWN0dWFsIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIGhhczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI2FjY2Vzcy1tb2Rlcy0xXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2FwYWNpdHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGFjdHVhbCByZXNvdXJjZXMgdGhlIHZvbHVtZSBoYXNcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcmVzb3VyY2VfUXVhbnRpdHlcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XFx1MDAzZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBoYXNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBjdXJyZW50IHBoYXNlIG9mIHRoZSBjbGFpbVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVDbGFpbVZvbHVtZVNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjbGFpbU5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBzYW1lIG5hbWVzcGFjZSB0byBiZSBtb3VudGVkIGFzIGEgdm9sdW1lOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wZXJzaXN0ZW50LXZvbHVtZXMubWQjcGVyc2lzdGVudHZvbHVtZWNsYWltc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtb3VudCB2b2x1bWUgYXMgcmVhZC1vbmx5IHdoZW4gdHJ1ZTsgZGVmYXVsdCBmYWxzZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBwZXJzaXN0ZW50IHZvbHVtZXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUGVyc2lzdGVudFZvbHVtZUxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZUxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImF3c0VsYXN0aWNCbG9ja1N0b3JlXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19BV1NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjZXBoZnNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NlcGhGU1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ2VwaEZTVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2NlUGVyc2lzdGVudERpc2tcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdsdXN0ZXJmc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfR2x1c3RlcmZzVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HbHVzdGVyZnNWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJob3N0UGF0aFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSG9zdFBhdGhWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhvc3RQYXRoVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXNjc2lcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0lTQ1NJVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5JU0NTSVZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5mc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTkZTVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5ORlNWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyYmRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JCRFZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUkJEVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFjY2Vzc01vZGVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHdheXMgdGhlIHZvbHVtZSBjYW4gYmUgbW91bnRlZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI2FjY2Vzcy1tb2Rlc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHdheXMgdGhlIHZvbHVtZSBjYW4gYmUgbW91bnRlZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI2FjY2Vzcy1tb2Rlc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImF3c0VsYXN0aWNCbG9ja1N0b3JlXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19BV1NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjYXBhY2l0eVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIGRlc2NyaXB0aW9uIG9mIHRoZSBwZXJzaXN0ZW50IHZvbHVtZSdzIHJlc291cmNlcyBhbmQgY2FwYWNpdHlyOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wZXJzaXN0ZW50LXZvbHVtZXMubWQjY2FwYWNpdHlcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcmVzb3VyY2VfUXVhbnRpdHlcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XFx1MDAzZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNlcGhmc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ2VwaEZTVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5DZXBoRlNWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjbGFpbVJlZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnY2VQZXJzaXN0ZW50RGlza1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfR0NFUGVyc2lzdGVudERpc2tWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2x1c3RlcmZzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19HbHVzdGVyZnNWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdsdXN0ZXJmc1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImhvc3RQYXRoXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSG9zdFBhdGhWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpc2NzaVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSVNDU0lWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLklTQ1NJVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmZzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ORlNWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5GU1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBlcnNpc3RlbnRWb2x1bWVSZWNsYWltUG9saWN5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIndoYXQgaGFwcGVucyB0byBhIHZvbHVtZSB3aGVuIHJlbGVhc2VkIGZyb20gaXRzIGNsYWltOyBWYWxpZCBvcHRpb25zIGFyZSBSZXRhaW4gKGRlZmF1bHQpIGFuZCBSZWN5Y2xlLiAgUmVjeWxpbmcgbXVzdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIHZvbHVtZSBwbHVnaW4gdW5kZXJseWluZyB0aGlzIHBlcnNpc3RlbnQgdm9sdW1lLiBTZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wZXJzaXN0ZW50LXZvbHVtZXMubWQjcmVjeWNsaW5nLXBvbGljeVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJiZFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUkJEVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SQkRWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lU3BlY1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVTdGF0dXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGluZGljYXRpbmcgZGV0YWlscyBhYm91dCB3aHkgdGhlIHZvbHVtZSBpcyBpbiB0aGlzIHN0YXRlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGhhc2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGN1cnJlbnQgcGhhc2Ugb2YgYSBwZXJzaXN0ZW50IHZvbHVtZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI3BoYXNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhc29uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIihicmllZikgcmVhc29uIHRoZSB2b2x1bWUgaXMgbm90IGlzIG5vdCBhdmFpbGFibGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUG9kXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQb2RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BvZFNwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFNwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BvZFN0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kU3RhdHVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUG9kQ29uZGl0aW9uXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdGF0dXMgb2YgdGhlIGNvbmRpdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwia2luZCBvZiB0aGUgY29uZGl0aW9uXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kQ29uZGl0aW9uXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUG9kTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcG9kczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcG9kcy5tZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlBvZExpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1BvZFNwZWNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYWN0aXZlRGVhZGxpbmVTZWNvbmRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY29udGFpbmVyc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgY29udGFpbmVycyBiZWxvbmdpbmcgdG8gdGhlIHBvZDsgY2Fubm90IGJlIHVwZGF0ZWQ7IGNvbnRhaW5lcnMgY2Fubm90IGN1cnJlbnRseSBiZSBhZGRlZCBvciByZW1vdmVkOyB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBjb250YWluZXIgaW4gYSBQb2Q7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2NvbnRhaW5lcnMubWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ29udGFpbmVyXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRuc1BvbGljeVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJETlMgcG9saWN5IGZvciBjb250YWluZXJzIHdpdGhpbiB0aGUgcG9kOyBvbmUgb2YgJ0NsdXN0ZXJGaXJzdCcgb3IgJ0RlZmF1bHQnXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaG9zdFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkZXByZWNhdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaG9zdE5ldHdvcmtcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImhvc3QgbmV0d29ya2luZyByZXF1ZXN0ZWQgZm9yIHRoaXMgcG9kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaW1hZ2VQdWxsU2VjcmV0c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVmZXJlbmNlcyB0byBzZWNyZXRzIGluIHRoZSBzYW1lIG5hbWVzcGFjZSBhdmFpbGFibGUgZm9yIHB1bGxpbmcgdGhlIGNvbnRhaW5lciBpbWFnZXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2ltYWdlcy5tZCNzcGVjaWZ5aW5nLWltYWdlcHVsbHNlY3JldHMtb24tYS1wb2RcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9jYWxPYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJub2RlTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJub2RlIHJlcXVlc3RlZCBmb3IgdGhpcyBwb2RcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJub2RlU2VsZWN0b3JcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2VsZWN0b3Igd2hpY2ggbXVzdCBtYXRjaCBhIG5vZGUncyBsYWJlbHMgZm9yIHRoZSBwb2QgdG8gYmUgc2NoZWR1bGVkIG9uIHRoYXQgbm9kZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbm9kZS1zZWxlY3Rpb24vUkVBRE1FLm1kXCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZWxlY3RvciB3aGljaCBtdXN0IG1hdGNoIGEgbm9kZSdzIGxhYmVscyBmb3IgdGhlIHBvZCB0byBiZSBzY2hlZHVsZWQgb24gdGhhdCBub2RlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9ub2RlLXNlbGVjdGlvbi9SRUFETUUubWRcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzdGFydFBvbGljeVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZXN0YXJ0IHBvbGljeSBmb3IgYWxsIGNvbnRhaW5lcnMgd2l0aGluIHRoZSBwb2Q7IG9uZSBvZiBBbHdheXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXJ2aWNlQWNjb3VudFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkZXByZWNhdGVkOyB1c2Ugc2VydmljZUFjY291bnROYW1lIGluc3RlYWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXJ2aWNlQWNjb3VudE5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgU2VydmljZUFjY291bnQgdG8gdXNlIHRvIHJ1biB0aGlzIHBvZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2Rlc2lnbi9zZXJ2aWNlX2FjY291bnRzLm1kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsIGR1cmF0aW9uIGluIHNlY29uZHMgdGhlIHBvZCBuZWVkcyB0byB0ZXJtaW5hdGUgZ3JhY2VmdWxseTsgbWF5IGJlIGRlY3JlYXNlZCBpbiBkZWxldGUgcmVxdWVzdDsgdmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUgaW50ZWdlcjsgdGhlIHZhbHVlIHplcm8gaW5kaWNhdGVzIGRlbGV0ZSBpbW1lZGlhdGVseTsgaWYgdGhpcyB2YWx1ZSBpcyBub3Qgc2V0XCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInZvbHVtZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHZvbHVtZXMgdGhhdCBjYW4gYmUgbW91bnRlZCBieSBjb250YWluZXJzIGJlbG9uZ2luZyB0byB0aGUgcG9kOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS92b2x1bWVzLm1kXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1ZvbHVtZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Wb2x1bWVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RTcGVjXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUG9kU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNvbmRpdGlvbnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjdXJyZW50IHNlcnZpY2Ugc3RhdGUgb2YgcG9kOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wb2Qtc3RhdGVzLm1kI3BvZC1jb25kaXRpb25zXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BvZENvbmRpdGlvblwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RDb25kaXRpb25cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjb250YWluZXJTdGF0dXNlc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgY29udGFpbmVyIHN0YXR1c2VzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wb2Qtc3RhdGVzLm1kI2NvbnRhaW5lci1zdGF0dXNlc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Db250YWluZXJTdGF0dXNcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdHVzXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaG9zdElQXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklQIGFkZHJlc3Mgb2YgdGhlIGhvc3QgdG8gd2hpY2ggdGhlIHBvZCBpcyBhc3NpZ25lZDsgZW1wdHkgaWYgbm90IHlldCBzY2hlZHVsZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImh1bWFuIHJlYWRhYmxlIG1lc3NhZ2UgaW5kaWNhdGluZyBkZXRhaWxzIGFib3V0IHdoeSB0aGUgcG9kIGlzIGluIHRoaXMgY29uZGl0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGhhc2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY3VycmVudCBjb25kaXRpb24gb2YgdGhlIHBvZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcG9kLXN0YXRlcy5tZCNwb2QtcGhhc2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwb2RJUFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJUCBhZGRyZXNzIGFsbG9jYXRlZCB0byB0aGUgcG9kOyByb3V0YWJsZSBhdCBsZWFzdCB3aXRoaW4gdGhlIGNsdXN0ZXI7IGVtcHR5IGlmIG5vdCB5ZXQgYWxsb2NhdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhc29uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIihicmllZi1DYW1lbENhc2UpIHJlYXNvbiBpbmRpY2F0aW5nIGRldGFpbHMgYWJvdXQgd2h5IHRoZSBwb2QgaXMgaW4gdGhpcyBjb25kaXRpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGFydFRpbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUkZDIDMzMzkgZGF0ZSBhbmQgdGltZSBhdCB3aGljaCB0aGUgb2JqZWN0IHdhcyBhY2tub3dsZWRnZWQgYnkgdGhlIEt1YmVsZXQuICBUaGlzIGlzIGJlZm9yZSB0aGUgS3ViZWxldCBwdWxsZWQgdGhlIGNvbnRhaW5lciBpbWFnZShzKSBmb3IgdGhlIHBvZC5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RTdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Qb2RUZW1wbGF0ZVNwZWNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzcGVjXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RTcGVjXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RTcGVjXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kVGVtcGxhdGVTcGVjXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUHJvYmVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZXhlY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRXhlY0FjdGlvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRXhlY0FjdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImh0dHBHZXRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0hUVFBHZXRBY3Rpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhUVFBHZXRBY3Rpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpbml0aWFsRGVsYXlTZWNvbmRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJudW1iZXIgb2Ygc2Vjb25kcyBhZnRlciB0aGUgY29udGFpbmVyIGhhcyBzdGFydGVkIGJlZm9yZSBsaXZlbmVzcyBwcm9iZXMgYXJlIGluaXRpYXRlZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcG9kLXN0YXRlcy5tZCNjb250YWluZXItcHJvYmVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRjcFNvY2tldFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfVENQU29ja2V0QWN0aW9uXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5UQ1BTb2NrZXRBY3Rpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0aW1lb3V0U2Vjb25kc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibnVtYmVyIG9mIHNlY29uZHMgYWZ0ZXIgd2hpY2ggbGl2ZW5lc3MgcHJvYmVzIHRpbWVvdXQ7IGRlZmF1bHRzIHRvIDEgc2Vjb25kOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wb2Qtc3RhdGVzLm1kI2NvbnRhaW5lci1wcm9iZXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUHJvYmVcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19SQkRWb2x1bWVTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZnNUeXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZpbGUgc3lzdGVtIHR5cGUgdG8gbW91bnRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpbWFnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyYWRvcyBpbWFnZSBuYW1lOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXJpbmdcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwia2V5cmluZyBpcyB0aGUgcGF0aCB0byBrZXkgcmluZyBmb3IgcmFkb3MgdXNlcjsgZGVmYXVsdCBpcyAvZXRjL2NlcGgva2V5cmluZzsgb3B0aW9uYWw7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibW9uaXRvcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIGNvbGxlY3Rpb24gb2YgQ2VwaCBtb25pdG9yczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9yYmQvUkVBRE1FLm1kI2hvdy10by11c2UtaXRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgY29sbGVjdGlvbiBvZiBDZXBoIG1vbml0b3JzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvb2xcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmFkb3MgcG9vbCBuYW1lOyBkZWZhdWx0IGlzIHJiZDsgb3B0aW9uYWw7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhZE9ubHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJiZCB2b2x1bWUgdG8gYmUgbW91bnRlZCB3aXRoIHJlYWQtb25seSBwZXJtaXNzaW9uczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9yYmQvUkVBRE1FLm1kI2hvdy10by11c2UtaXRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWNyZXRSZWZcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2NhbE9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmFkb3MgdXNlciBuYW1lOyBkZWZhdWx0IGlzIGFkbWluOyBvcHRpb25hbDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9yYmQvUkVBRE1FLm1kI2hvdy10by11c2UtaXRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SQkRWb2x1bWVTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19SZXBsaWNhdGlvbkNvbnRyb2xsZXJcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJlcGxpY2F0aW9uQ29udHJvbGxlclwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVwbGljYXRpb25Db250cm9sbGVyU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVwbGljYXRpb25Db250cm9sbGVyU3BlY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVwbGljYXRpb25Db250cm9sbGVyU3RhdHVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXBsaWNhdGlvbkNvbnRyb2xsZXJTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXBsaWNhdGlvbkNvbnRyb2xsZXJcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19SZXBsaWNhdGlvbkNvbnRyb2xsZXJMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByZXBsaWNhdGlvbiBjb250cm9sbGVyczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcmVwbGljYXRpb24tY29udHJvbGxlci5tZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXBsaWNhdGlvbkNvbnRyb2xsZXJcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVwbGljYXRpb25Db250cm9sbGVyXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJlcGxpY2F0aW9uQ29udHJvbGxlckxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVwbGljYXRpb25Db250cm9sbGVyTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1JlcGxpY2F0aW9uQ29udHJvbGxlclNwZWNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwicmVwbGljYXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm51bWJlciBvZiByZXBsaWNhcyBkZXNpcmVkOyBkZWZhdWx0cyB0byAxOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9yZXBsaWNhdGlvbi1jb250cm9sbGVyLm1kI3doYXQtaXMtYS1yZXBsaWNhdGlvbi1jb250cm9sbGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VsZWN0b3JcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFiZWwga2V5cyBhbmQgdmFsdWVzIHRoYXQgbXVzdCBtYXRjaCBpbiBvcmRlciB0byBiZSBjb250cm9sbGVkIGJ5IHRoaXMgcmVwbGljYXRpb24gY29udHJvbGxlclwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFiZWwga2V5cyBhbmQgdmFsdWVzIHRoYXQgbXVzdCBtYXRjaCBpbiBvcmRlciB0byBiZSBjb250cm9sbGVkIGJ5IHRoaXMgcmVwbGljYXRpb24gY29udHJvbGxlclwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0ZW1wbGF0ZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUG9kVGVtcGxhdGVTcGVjXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RUZW1wbGF0ZVNwZWNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXBsaWNhdGlvbkNvbnRyb2xsZXJTcGVjXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUmVwbGljYXRpb25Db250cm9sbGVyU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm9ic2VydmVkR2VuZXJhdGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVmbGVjdHMgdGhlIGdlbmVyYXRpb24gb2YgdGhlIG1vc3QgcmVjZW50bHkgb2JzZXJ2ZWQgcmVwbGljYXRpb24gY29udHJvbGxlclwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXBsaWNhc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibW9zdCByZWNlbnRseSBvYmVydmVkIG51bWJlciBvZiByZXBsaWNhczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcmVwbGljYXRpb24tY29udHJvbGxlci5tZCN3aGF0LWlzLWEtcmVwbGljYXRpb24tY29udHJvbGxlclwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlclN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1Jlc291cmNlUXVvdGFcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJlc291cmNlUXVvdGFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1Jlc291cmNlUXVvdGFTcGVjXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVF1b3RhU3BlY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVzb3VyY2VRdW90YVN0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VRdW90YVN0YXR1c1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUXVvdGFcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIml0ZW1zIGlzIGEgbGlzdCBvZiBSZXNvdXJjZVF1b3RhIG9iamVjdHM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vYWRtaXNzaW9uX2NvbnRyb2xfcmVzb3VyY2VfcXVvdGEubWQjYWRtaXNzaW9uY29udHJvbC1wbHVnaW4tcmVzb3VyY2VxdW90YVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUXVvdGFcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUmVzb3VyY2VRdW90YUxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VRdW90YUxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhU3BlY1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJoYXJkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImhhcmQgaXMgdGhlIHNldCBvZiBkZXNpcmVkIGhhcmQgbGltaXRzIGZvciBlYWNoIG5hbWVkIHJlc291cmNlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL2FkbWlzc2lvbl9jb250cm9sX3Jlc291cmNlX3F1b3RhLm1kI2FkbWlzc2lvbmNvbnRyb2wtcGx1Z2luLXJlc291cmNlcXVvdGFcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcmVzb3VyY2VfUXVhbnRpdHlcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XFx1MDAzZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUXVvdGFTcGVjXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUmVzb3VyY2VRdW90YVN0YXR1c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJoYXJkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImhhcmQgaXMgdGhlIHNldCBvZiBlbmZvcmNlZCBoYXJkIGxpbWl0cyBmb3IgZWFjaCBuYW1lZCByZXNvdXJjZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2Rlc2lnbi9hZG1pc3Npb25fY29udHJvbF9yZXNvdXJjZV9xdW90YS5tZCNhZG1pc3Npb25jb250cm9sLXBsdWdpbi1yZXNvdXJjZXF1b3RhXCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZWQgaXMgdGhlIGN1cnJlbnQgb2JzZXJ2ZWQgdG90YWwgdXNhZ2Ugb2YgdGhlIHJlc291cmNlIGluIHRoZSBuYW1lc3BhY2VcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcmVzb3VyY2VfUXVhbnRpdHlcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XFx1MDAzZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUXVvdGFTdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19SZXNvdXJjZVJlcXVpcmVtZW50c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJsaW1pdHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWF4aW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgYWxsb3dlZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2Rlc2lnbi9yZXNvdXJjZXMubWQjcmVzb3VyY2Utc3BlY2lmaWNhdGlvbnNcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcmVzb3VyY2VfUXVhbnRpdHlcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XFx1MDAzZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlcXVlc3RzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1pbmltdW0gYW1vdW50IG9mIHJlc291cmNlcyByZXF1ZXN0ZWQ7IGlmIFJlcXVlc3RzIGlzIG9taXR0ZWQgZm9yIGEgY29udGFpbmVyXCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVJlcXVpcmVtZW50c1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1J1bkFzVXNlclN0cmF0ZWd5T3B0aW9uc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInN0cmF0ZWd5IHVzZWQgdG8gZ2VuZXJhdGUgUnVuQXNVc2VyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidWlkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdWlkIHRvIGFsd2F5cyBydW4gYXM7IHJlcXVpcmVkIGZvciBNdXN0UnVuQXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidWlkUmFuZ2VNYXhcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1heCB2YWx1ZSBmb3IgcmFuZ2UgYmFzZWQgYWxsb2NhdG9yc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1aWRSYW5nZU1pblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWluIHZhbHVlIGZvciByYW5nZSBiYXNlZCBhbGxvY2F0b3JzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJ1bkFzVXNlclN0cmF0ZWd5T3B0aW9uc1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NFTGludXhDb250ZXh0U3RyYXRlZ3lPcHRpb25zXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInNlTGludXhPcHRpb25zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TRUxpbnV4T3B0aW9uc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU0VMaW51eE9wdGlvbnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInN0cmF0ZWd5IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIFNFTGludXggY29udGV4dFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNFTGludXhDb250ZXh0U3RyYXRlZ3lPcHRpb25zXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfU0VMaW51eE9wdGlvbnNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibGV2ZWxcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGxldmVsIGxhYmVsIHRvIGFwcGx5IHRvIHRoZSBjb250YWluZXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2xhYmVscy5tZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJvbGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHJvbGUgbGFiZWwgdG8gYXBwbHkgdG8gdGhlIGNvbnRhaW5lcjsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbGFiZWxzLm1kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdHlwZSBsYWJlbCB0byBhcHBseSB0byB0aGUgY29udGFpbmVyOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9sYWJlbHMubWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB1c2VyIGxhYmVsIHRvIGFwcGx5IHRvIHRoZSBjb250YWluZXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2xhYmVscy5tZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNFTGludXhPcHRpb25zXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfU2VjcmV0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRhdGFcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGF0YSBjb250YWlucyB0aGUgc2VjcmV0IGRhdGEuICBFYWNoIGtleSBtdXN0IGJlIGEgdmFsaWQgRE5TX1NVQkRPTUFJTiBvciBsZWFkaW5nIGRvdCBmb2xsb3dlZCBieSB2YWxpZCBETlNfU1VCRE9NQUlOLiAgRWFjaCB2YWx1ZSBtdXN0IGJlIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDY0OCNzZWN0aW9uLTRcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRhdGEgY29udGFpbnMgdGhlIHNlY3JldCBkYXRhLiAgRWFjaCBrZXkgbXVzdCBiZSBhIHZhbGlkIEROU19TVUJET01BSU4gb3IgbGVhZGluZyBkb3QgZm9sbG93ZWQgYnkgdmFsaWQgRE5TX1NVQkRPTUFJTi4gIEVhY2ggdmFsdWUgbXVzdCBiZSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDgjc2VjdGlvbi00XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsU3RyaW5nXFx1MDAzZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJTZWNyZXRcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidHlwZSBmYWNpbGl0YXRlcyBwcm9ncmFtbWF0aWMgaGFuZGxpbmcgb2Ygc2VjcmV0IGRhdGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWNyZXRcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TZWNyZXRMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaXRlbXMgaXMgYSBsaXN0IG9mIHNlY3JldCBvYmplY3RzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9zZWNyZXRzLm1kXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlY3JldFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWNyZXRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VjcmV0TGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWNyZXRMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfU2VjcmV0Vm9sdW1lU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInNlY3JldE5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2VjcmV0TmFtZSBpcyB0aGUgbmFtZSBvZiBhIHNlY3JldCBpbiB0aGUgcG9kJ3MgbmFtZXNwYWNlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS92b2x1bWVzLm1kI3NlY3JldHNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWNyZXRWb2x1bWVTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TZWN1cml0eUNvbnRleHRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY2FwYWJpbGl0aWVzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19DYXBhYmlsaXRpZXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNhcGFiaWxpdGllc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInByaXZpbGVnZWRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJ1biB0aGUgY29udGFpbmVyIGluIHByaXZpbGVnZWQgbW9kZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2Rlc2lnbi9zZWN1cml0eV9jb250ZXh0Lm1kI3NlY3VyaXR5LWNvbnRleHRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJydW5Bc05vblJvb3RcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImluZGljYXRlcyB0aGUgY29udGFpbmVyIG11c3QgYmUgcnVuIGFzIGEgbm9uLXJvb3QgdXNlciBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgcnVuQXNVc2VyIG9yIGluIHRoZSBpbWFnZSBzcGVjaWZpY2F0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicnVuQXNVc2VyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdXNlciBpZCB0aGF0IHJ1bnMgdGhlIGZpcnN0IHByb2Nlc3MgaW4gdGhlIGNvbnRhaW5lcjsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2Rlc2lnbi9zZWN1cml0eV9jb250ZXh0Lm1kI3NlY3VyaXR5LWNvbnRleHRcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VMaW51eE9wdGlvbnNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NFTGludXhPcHRpb25zXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TRUxpbnV4T3B0aW9uc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3VyaXR5Q29udGV4dFwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFsbG93SG9zdERpclZvbHVtZVBsdWdpblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsb3cgdGhlIHVzZSBvZiB0aGUgaG9zdCBkaXIgdm9sdW1lIHBsdWdpblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImFsbG93SG9zdE5ldHdvcmtcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbG93IHRoZSB1c2Ugb2YgdGhlIGhvc3ROZXR3b3JrIGluIHRoZSBwb2Qgc3BlY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImFsbG93SG9zdFBvcnRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGxvdyB0aGUgdXNlIG9mIHRoZSBob3N0IHBvcnRzIGluIHRoZSBjb250YWluZXJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiYWxsb3dQcml2aWxlZ2VkQ29udGFpbmVyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGxvdyBjb250YWluZXJzIHRvIHJ1biBhcyBwcml2aWxlZ2VkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiYWxsb3dlZENhcGFiaWxpdGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNhcGFiaWxpdGllcyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIGFkZGVkXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjYXBhYmlsaXRpZXMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBhZGRlZFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdyb3Vwc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImdyb3VwcyBhbGxvd2VkIHRvIHVzZSB0aGlzIFNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJncm91cHMgYWxsb3dlZCB0byB1c2UgdGhpcyBTZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJTZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicnVuQXNVc2VyXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SdW5Bc1VzZXJTdHJhdGVneU9wdGlvbnNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJ1bkFzVXNlclN0cmF0ZWd5T3B0aW9uc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlTGludXhDb250ZXh0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TRUxpbnV4Q29udGV4dFN0cmF0ZWd5T3B0aW9uc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU0VMaW51eENvbnRleHRTdHJhdGVneU9wdGlvbnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2Vyc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZXJzIGFsbG93ZWQgdG8gdXNlIHRoaXMgU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZXJzIGFsbG93ZWQgdG8gdXNlIHRoaXMgU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJTZWN1cml0eUNvbnRleHRDb25zdHJhaW50c0xpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfU2VydmljZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VydmljZVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VydmljZVNwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VTcGVjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZXJ2aWNlU3RhdHVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlU3RhdHVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZVwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NlcnZpY2VBY2NvdW50XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImltYWdlUHVsbFNlY3JldHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJlZmVyZW5jZXMgdG8gc2VjcmV0cyBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgYXZhaWxhYmxlIGZvciBwdWxsaW5nIGNvbnRhaW5lciBpbWFnZXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3NlY3JldHMubWQjbWFudWFsbHktc3BlY2lmeWluZy1hbi1pbWFnZXB1bGxzZWNyZXRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9jYWxPYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VydmljZUFjY291bnRcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlY3JldHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHNlY3JldHMgdGhhdCBjYW4gYmUgdXNlZCBieSBwb2RzIHJ1bm5pbmcgYXMgdGhpcyBzZXJ2aWNlIGFjY291bnQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3NlY3JldHMubWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VBY2NvdW50XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfU2VydmljZUFjY291bnRMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBTZXJ2aWNlQWNjb3VudHM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vc2VydmljZV9hY2NvdW50cy5tZCNzZXJ2aWNlLWFjY291bnRzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlcnZpY2VBY2NvdW50XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VBY2NvdW50XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlNlcnZpY2VBY2NvdW50TGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlQWNjb3VudExpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TZXJ2aWNlTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygc2VydmljZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VydmljZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlNlcnZpY2VMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfU2VydmljZVBvcnRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbmFtZSBvZiB0aGlzIHBvcnQ7IG9wdGlvbmFsIGlmIG9ubHkgb25lIHBvcnQgaXMgZGVmaW5lZFwiLFxuICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogNjMsXG4gICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibm9kZVBvcnRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBwb3J0IG9uIGVhY2ggbm9kZSBvbiB3aGljaCB0aGlzIHNlcnZpY2UgaXMgZXhwb3NlZCB3aGVuIHR5cGU9Tm9kZVBvcnQgb3IgTG9hZEJhbGFuY2VyOyB1c3VhbGx5IGFzc2lnbmVkIGJ5IHRoZSBzeXN0ZW07IGlmIHNwZWNpZmllZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvcnRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBwb3J0IG51bWJlciB0aGF0IGlzIGV4cG9zZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwcm90b2NvbFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgcHJvdG9jb2wgdXNlZCBieSB0aGlzIHBvcnQ7IG11c3QgYmUgVURQIG9yIFRDUDsgVENQIGlmIHVuc3BlY2lmaWVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidGFyZ2V0UG9ydFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfdXRpbF9JbnRPclN0cmluZ1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSW50T3JTdHJpbmdcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlUG9ydFwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NlcnZpY2VTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNsdXN0ZXJJUFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJUCBhZGRyZXNzIG9mIHRoZSBzZXJ2aWNlOyB1c3VhbGx5IGFzc2lnbmVkIGJ5IHRoZSBzeXN0ZW07IGlmIHNwZWNpZmllZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRlcHJlY2F0ZWRQdWJsaWNJUHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkZXByZWNhdGVkLiBleHRlcm5hbGx5IHZpc2libGUgSVBzIChlLmcuIGxvYWQgYmFsYW5jZXJzKSB0aGF0IHNob3VsZCBiZSBwcm94aWVkIHRvIHRoaXMgc2VydmljZVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVwcmVjYXRlZC4gZXh0ZXJuYWxseSB2aXNpYmxlIElQcyAoZS5nLiBsb2FkIGJhbGFuY2VycykgdGhhdCBzaG91bGQgYmUgcHJveGllZCB0byB0aGlzIHNlcnZpY2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwb3J0YWxJUFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkZXByZWNhdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicG9ydHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwb3J0cyBleHBvc2VkIGJ5IHRoZSBzZXJ2aWNlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9zZXJ2aWNlcy5tZCN2aXJ0dWFsLWlwcy1hbmQtc2VydmljZS1wcm94aWVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlcnZpY2VQb3J0XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VQb3J0XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VsZWN0b3JcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFiZWwga2V5cyBhbmQgdmFsdWVzIHRoYXQgbXVzdCBtYXRjaCBpbiBvcmRlciB0byByZWNlaXZlIHRyYWZmaWMgZm9yIHRoaXMgc2VydmljZTsgaWYgZW1wdHlcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhYmVsIGtleXMgYW5kIHZhbHVlcyB0aGF0IG11c3QgbWF0Y2ggaW4gb3JkZXIgdG8gcmVjZWl2ZSB0cmFmZmljIGZvciB0aGlzIHNlcnZpY2U7IGlmIGVtcHR5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsU3RyaW5nXFx1MDAzZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlc3Npb25BZmZpbml0eVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJlbmFibGUgY2xpZW50IElQIGJhc2VkIHNlc3Npb24gYWZmaW5pdHk7IG11c3QgYmUgQ2xpZW50SVAgb3IgTm9uZTsgZGVmYXVsdHMgdG8gTm9uZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvc2VydmljZXMubWQjdmlydHVhbC1pcHMtYW5kLXNlcnZpY2UtcHJveGllc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidHlwZSBvZiB0aGlzIHNlcnZpY2U7IG11c3QgYmUgQ2x1c3RlcklQXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZVNwZWNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TZXJ2aWNlU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImxvYWRCYWxhbmNlclwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9hZEJhbGFuY2VyU3RhdHVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2FkQmFsYW5jZXJTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvZGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInN1Z2dlc3RlZCBIVFRQIHJldHVybiBjb2RlIGZvciB0aGlzIHN0YXR1czsgMCBpZiBub3Qgc2V0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZGV0YWlsc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU3RhdHVzRGV0YWlsc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU3RhdHVzRGV0YWlsc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJTdGF0dXNcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBzdGF0dXMgb2YgdGhpcyBvcGVyYXRpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhc29uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1hY2hpbmUtcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygd2h5IHRoaXMgb3BlcmF0aW9uIGlzIGluIHRoZSAnRmFpbHVyZScgc3RhdHVzOyBpZiB0aGlzIHZhbHVlIGlzIGVtcHR5IHRoZXJlIGlzIG5vIGluZm9ybWF0aW9uIGF2YWlsYWJsZTsgYSByZWFzb24gY2xhcmlmaWVzIGFuIEhUVFAgc3RhdHVzIGNvZGUgYnV0IGRvZXMgbm90IG92ZXJyaWRlIGl0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInN0YXR1cyBvZiB0aGUgb3BlcmF0aW9uOyBlaXRoZXIgU3VjY2Vzc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1N0YXR1c0NhdXNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImZpZWxkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZpZWxkIG9mIHRoZSByZXNvdXJjZSB0aGF0IGhhcyBjYXVzZWQgdGhpcyBlcnJvclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGNhdXNlIG9mIHRoZSBlcnJvcjsgdGhpcyBmaWVsZCBtYXkgYmUgcHJlc2VudGVkIGFzLWlzIHRvIGEgcmVhZGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhc29uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1hY2hpbmUtcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGNhdXNlIG9mIHRoZSBlcnJvcjsgaWYgdGhpcyB2YWx1ZSBpcyBlbXB0eSB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbiBhdmFpbGFibGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TdGF0dXNDYXVzZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1N0YXR1c0RldGFpbHNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY2F1c2VzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIENhdXNlcyBhcnJheSBpbmNsdWRlcyBtb3JlIGRldGFpbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBTdGF0dXNSZWFzb24gZmFpbHVyZTsgbm90IGFsbCBTdGF0dXNSZWFzb25zIG1heSBwcm92aWRlIGRldGFpbGVkIGNhdXNlc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TdGF0dXNDYXVzZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TdGF0dXNDYXVzZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGtpbmQgYXR0cmlidXRlIG9mIHRoZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YXR1cyBTdGF0dXNSZWFzb247IG9uIHNvbWUgb3BlcmF0aW9ucyBtYXkgZGlmZmVyIGZyb20gdGhlIHJlcXVlc3RlZCByZXNvdXJjZSBLaW5kOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbmFtZSBhdHRyaWJ1dGUgb2YgdGhlIHJlc291cmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhdHVzIFN0YXR1c1JlYXNvbiAod2hlbiB0aGVyZSBpcyBhIHNpbmdsZSBuYW1lIHdoaWNoIGNhbiBiZSBkZXNjcmliZWQpXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmV0cnlBZnRlclNlY29uZHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgdGhlIGNsaWVudCBzaG91bGQgYXR0ZW1wdCB0byByZXRyeSB0aGlzIG9wZXJhdGlvblwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlN0YXR1c0RldGFpbHNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19UQ1BTb2NrZXRBY3Rpb25cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwicG9ydFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfdXRpbF9JbnRPclN0cmluZ1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSW50T3JTdHJpbmdcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5UQ1BTb2NrZXRBY3Rpb25cIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19UeXBlTWV0YVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInZlcnNpb24gb2YgdGhlIHNjaGVtYSB0aGUgb2JqZWN0IHNob3VsZCBoYXZlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3Jlc291cmNlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwia2luZCBvZiBvYmplY3RcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5UeXBlTWV0YVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1ZvbHVtZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhd3NFbGFzdGljQmxvY2tTdG9yZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkFXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2VwaGZzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19DZXBoRlNWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNlcGhGU1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImVtcHR5RGlyXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbXB0eURpclZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW1wdHlEaXJWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnY2VQZXJzaXN0ZW50RGlza1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfR0NFUGVyc2lzdGVudERpc2tWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2l0UmVwb1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfR2l0UmVwb1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR2l0UmVwb1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdsdXN0ZXJmc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfR2x1c3RlcmZzVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HbHVzdGVyZnNWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJob3N0UGF0aFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSG9zdFBhdGhWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhvc3RQYXRoVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXNjc2lcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0lTQ1NJVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5JU0NTSVZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19NZXRhZGF0YVZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTWV0YWRhdGFWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInZvbHVtZSBuYW1lOyBtdXN0IGJlIGEgRE5TX0xBQkVMIGFuZCB1bmlxdWUgd2l0aGluIHRoZSBwb2Q7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2lkZW50aWZpZXJzLm1kI25hbWVzXCIsXG4gICAgICAgICAgICBcIm1heExlbmd0aFwiOiA2MyxcbiAgICAgICAgICAgIFwicGF0dGVyblwiOiBcIl5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuZnNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05GU1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTkZTVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGVyc2lzdGVudFZvbHVtZUNsYWltXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Wb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJiZFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUkJEVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SQkRWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWNyZXRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlY3JldFZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0Vm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVm9sdW1lXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfVm9sdW1lTW91bnRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibW91bnRQYXRoXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhdGggd2l0aGluIHRoZSBjb250YWluZXIgYXQgd2hpY2ggdGhlIHZvbHVtZSBzaG91bGQgYmUgbW91bnRlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgdm9sdW1lIHRvIG1vdW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhZE9ubHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1vdW50ZWQgcmVhZC1vbmx5IGlmIHRydWVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Wb2x1bWVNb3VudFwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1ZvbHVtZVNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhd3NFbGFzdGljQmxvY2tTdG9yZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkFXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2VwaGZzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19DZXBoRlNWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNlcGhGU1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImVtcHR5RGlyXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbXB0eURpclZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW1wdHlEaXJWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnY2VQZXJzaXN0ZW50RGlza1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfR0NFUGVyc2lzdGVudERpc2tWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2l0UmVwb1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfR2l0UmVwb1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR2l0UmVwb1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdsdXN0ZXJmc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfR2x1c3RlcmZzVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HbHVzdGVyZnNWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJob3N0UGF0aFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSG9zdFBhdGhWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhvc3RQYXRoVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXNjc2lcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0lTQ1NJVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5JU0NTSVZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19NZXRhZGF0YVZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTWV0YWRhdGFWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuZnNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05GU1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTkZTVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGVyc2lzdGVudFZvbHVtZUNsYWltXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Wb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJiZFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUkJEVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SQkRWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWNyZXRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlY3JldFZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0Vm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVm9sdW1lU291cmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX0F1dGhJbmZvXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNsaWVudC1jZXJ0aWZpY2F0ZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjbGllbnQtY2VydGlmaWNhdGUtZGF0YVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjbGllbnQta2V5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNsaWVudC1rZXktZGF0YVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJleHRlbnNpb25zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19OYW1lZEV4dGVuc2lvblwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEV4dGVuc2lvblwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3N3b3JkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRva2VuXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkF1dGhJbmZvXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX0NsdXN0ZXJcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpLXZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2VydGlmaWNhdGUtYXV0aG9yaXR5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNlcnRpZmljYXRlLWF1dGhvcml0eS1kYXRhXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImV4dGVuc2lvbnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX05hbWVkRXh0ZW5zaW9uXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkRXh0ZW5zaW9uXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaW5zZWN1cmUtc2tpcC10bHMtdmVyaWZ5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXJ2ZXJcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ2x1c3RlclwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX2NvbmZpZ19Db25maWdcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjbHVzdGVyc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfTmFtZWRDbHVzdGVyXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkQ2x1c3RlclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvbnRleHRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19OYW1lZENvbnRleHRcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRDb250ZXh0XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY3VycmVudC1jb250ZXh0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImV4dGVuc2lvbnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX05hbWVkRXh0ZW5zaW9uXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkRXh0ZW5zaW9uXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwcmVmZXJlbmNlc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX1ByZWZlcmVuY2VzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QcmVmZXJlbmNlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19OYW1lZEF1dGhJbmZvXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkQXV0aEluZm9cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db25maWdcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19jb25maWdfQ29udGV4dFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjbHVzdGVyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImV4dGVuc2lvbnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX05hbWVkRXh0ZW5zaW9uXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkRXh0ZW5zaW9uXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZXNwYWNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGV4dFwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX2NvbmZpZ19OYW1lZEF1dGhJbmZvXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlclwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX0F1dGhJbmZvXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5BdXRoSW5mb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkQXV0aEluZm9cIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19jb25maWdfTmFtZWRDbHVzdGVyXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNsdXN0ZXJcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19DbHVzdGVyXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5DbHVzdGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZENsdXN0ZXJcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19jb25maWdfTmFtZWRDb250ZXh0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNvbnRleHRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19Db250ZXh0XCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250ZXh0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZENvbnRleHRcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19jb25maWdfTmFtZWRFeHRlbnNpb25cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZXh0ZW5zaW9uXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkRXh0ZW5zaW9uXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX1ByZWZlcmVuY2VzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNvbG9yc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZXh0ZW5zaW9uc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfTmFtZWRFeHRlbnNpb25cIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRFeHRlbnNpb25cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QcmVmZXJlbmNlc1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIkFtb3VudFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NwZXRlcl9pbmZfRGVjXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIkZvcm1hdFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX3J1bnRpbWVfUmF3RXh0ZW5zaW9uXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIlJhd0pTT05cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc191dGlsX0ludE9yU3RyaW5nXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIkludFZhbFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiS2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiU3RyVmFsXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkludE9yU3RyaW5nXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfd2F0Y2hfV2F0Y2hFdmVudFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJvYmplY3RcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3J1bnRpbWVfUmF3RXh0ZW5zaW9uXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHR5cGUgb2Ygd2F0Y2ggZXZlbnQ7IG1heSBiZSBBRERFRFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLldhdGNoRXZlbnRcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9BdXRob3JpemF0aW9uQXR0cmlidXRlc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjb250ZW50XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lc3BhY2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZXNwYWNlIG9mIHRoZSBhY3Rpb24gYmVpbmcgcmVxdWVzdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib25lIG9mIHRoZSBleGlzdGluZyByZXNvdXJjZSB0eXBlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSByZXNvdXJjZSBiZWluZyByZXF1ZXN0ZWQgZm9yIGEgZ2V0IG9yIGRlbGV0ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInZlcmJcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib25lIG9mIGdldFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQXV0aG9yaXphdGlvbkF0dHJpYnV0ZXNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJDbHVzdGVyUG9saWN5XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibGFzdE1vZGlmaWVkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhc3QgdGltZSBhbnkgcGFydCBvZiB0aGUgb2JqZWN0IHdhcyBjcmVhdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyb2xlc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgcm9sZXMgaGVsZCBieSB0aGlzIHBvbGljeVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9OYW1lZENsdXN0ZXJSb2xlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTmFtZWRDbHVzdGVyUm9sZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclBvbGljeVwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX0NsdXN0ZXJQb2xpY3lCaW5kaW5nXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJDbHVzdGVyUG9saWN5QmluZGluZ1wiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImxhc3RNb2RpZmllZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsYXN0IHRpbWUgYW55IHBhcnQgb2YgdGhlIG9iamVjdCB3YXMgY3JlYXRlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicG9saWN5UmVmXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJvbGVCaW5kaW5nc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgcm9sZSBiaW5kaW5ncyBoZWxkIGJ5IHRoaXMgcG9saWN5XCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX05hbWVkQ2x1c3RlclJvbGVCaW5kaW5nXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTmFtZWRDbHVzdGVyUm9sZUJpbmRpbmdcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lCaW5kaW5nXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeUJpbmRpbmdMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBjbHVzdGVyIHBvbGljeSBiaW5kaW5nc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5QmluZGluZ1wiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lCaW5kaW5nXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkNsdXN0ZXJQb2xpY3lCaW5kaW5nTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lCaW5kaW5nTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX0NsdXN0ZXJQb2xpY3lMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBjbHVzdGVyIHBvbGljaWVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJQb2xpY3lcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkNsdXN0ZXJQb2xpY3lMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclBvbGljeUxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUm9sZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiQ2x1c3RlclJvbGVcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJ1bGVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBwb2xpY3kgcnVsZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUG9saWN5UnVsZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeVJ1bGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJSb2xlXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fQ2x1c3RlclJvbGVCaW5kaW5nXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdyb3VwTmFtZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdGhlIGdyb3VwcyBkaXJlY3RseSBib3VuZCB0byB0aGUgcm9sZVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHRoZSBncm91cHMgZGlyZWN0bHkgYm91bmQgdG8gdGhlIHJvbGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiQ2x1c3RlclJvbGVCaW5kaW5nXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyb2xlUmVmXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN1YmplY3RzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVmZXJlbmNlcyB0byBzdWJqZWN0cyBib3VuZCB0byB0aGUgcm9sZS4gIE9ubHkgVXNlclwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlck5hbWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHVzZXIgbmFtZXMgZGlyZWN0bHkgYm91bmQgdG8gdGhlIHJvbGVcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB1c2VyIG5hbWVzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUm9sZUJpbmRpbmdcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUm9sZUJpbmRpbmdMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBjbHVzdGVyIHJvbGUgYmluZGluZ3NcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclJvbGVCaW5kaW5nXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclJvbGVCaW5kaW5nXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkNsdXN0ZXJSb2xlQmluZGluZ0xpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUm9sZUJpbmRpbmdMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIlR5cGVNZXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19UeXBlTWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVHlwZU1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjb250ZW50XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJncm91cHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lc3BhY2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZXNwYWNlIG9mIHRoZSBhY3Rpb24gYmVpbmcgcmVxdWVzdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib25lIG9mIHRoZSBleGlzdGluZyByZXNvdXJjZSB0eXBlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSByZXNvdXJjZSBiZWluZyByZXF1ZXN0ZWQgZm9yIGEgZ2V0IG9yIGRlbGV0ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ2ZXJiXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9uZSBvZiBnZXRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkxvY2FsU3ViamVjdEFjY2Vzc1Jldmlld1wiXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX05hbWVkQ2x1c3RlclJvbGVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBjbHVzdGVyIHJvbGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyb2xlXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUm9sZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUm9sZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTmFtZWRDbHVzdGVyUm9sZVwiXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX05hbWVkQ2x1c3RlclJvbGVCaW5kaW5nXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgY2x1c3RlciByb2xlIGJpbmRpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyb2xlQmluZGluZ1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclJvbGVCaW5kaW5nXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJSb2xlQmluZGluZ1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTmFtZWRDbHVzdGVyUm9sZUJpbmRpbmdcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9OYW1lZFJvbGVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSByb2xlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUm9sZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5OYW1lZFJvbGVcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9OYW1lZFJvbGVCaW5kaW5nXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgcm9sZUJpbmRpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyb2xlQmluZGluZ1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUm9sZUJpbmRpbmdcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZUJpbmRpbmdcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkUm9sZUJpbmRpbmdcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlBvbGljeVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImxhc3RNb2RpZmllZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsYXN0IHRpbWUgdGhhdCBhbnkgcGFydCBvZiB0aGUgcG9saWN5IHdhcyBjcmVhdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyb2xlc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJvbGVzIGhlbGQgYnkgdGhpcyBwb2xpY3lcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fTmFtZWRSb2xlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTmFtZWRSb2xlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lCaW5kaW5nXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQb2xpY3lCaW5kaW5nXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibGFzdE1vZGlmaWVkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhc3QgdGltZSB0aGF0IGFueSBwYXJ0IG9mIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvbGljeVJlZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyb2xlQmluZGluZ3NcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgcm9sZUJpbmRpbmdzIGhlbGQgYnkgdGhpcyBwb2xpY3lCaW5kaW5nXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX05hbWVkUm9sZUJpbmRpbmdcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5OYW1lZFJvbGVCaW5kaW5nXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lCaW5kaW5nXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fUG9saWN5QmluZGluZ0xpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHBvbGljeSBiaW5kaW5nc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lCaW5kaW5nXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5QmluZGluZ1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQb2xpY3lCaW5kaW5nTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeUJpbmRpbmdMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fUG9saWN5TGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcG9saWNpZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUG9saWN5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlBvbGljeUxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fUG9saWN5UnVsZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhdHRyaWJ1dGVSZXN0cmljdGlvbnNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3J1bnRpbWVfUmF3RXh0ZW5zaW9uXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5vblJlc291cmNlVVJMc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNldCBvZiBwYXJ0aWFsIHVybHMgdGhhdCBhIHVzZXIgc2hvdWxkIGhhdmUgYWNjZXNzIHRvLiAqcyBhcmUgYWxsb3dlZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2V0IG9mIHBhcnRpYWwgdXJscyB0aGF0IGEgdXNlciBzaG91bGQgaGF2ZSBhY2Nlc3MgdG8uICpzIGFyZSBhbGxvd2VkXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VOYW1lc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsIHdoaXRlIGxpc3Qgb2YgbmFtZXMgdGhhdCB0aGUgcnVsZSBhcHBsaWVzIHRvLiAgQW4gZW1wdHkgc2V0IG1lYW5zIHRoYXQgZXZlcnl0aGluZyBpcyBhbGxvd2VkLlwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWwgd2hpdGUgbGlzdCBvZiBuYW1lcyB0aGF0IHRoZSBydWxlIGFwcGxpZXMgdG8uICBBbiBlbXB0eSBzZXQgbWVhbnMgdGhhdCBldmVyeXRoaW5nIGlzIGFsbG93ZWQuXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByZXNvdXJjZXMgdGhpcyBydWxlIGFwcGxpZXMgdG8uICAqIHJlcHJlc2VudHMgYWxsIHJlc291cmNlcy5cIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVzb3VyY2VzIHRoaXMgcnVsZSBhcHBsaWVzIHRvLiAgKiByZXByZXNlbnRzIGFsbCByZXNvdXJjZXMuXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidmVyYnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHZlcmJzIHRoYXQgYXBwbHkgdG8gQUxMIHRoZSByZXNvdXJjZUtpbmRzIGFuZCBhdHRyaWJ1dGVSZXN0cmljdGlvbnMgY29udGFpbmVkIGluIHRoaXMgcnVsZS4gIFRoZSB2ZXJiICogcmVwcmVzZW50cyBhbGwga2luZHMuXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHZlcmJzIHRoYXQgYXBwbHkgdG8gQUxMIHRoZSByZXNvdXJjZUtpbmRzIGFuZCBhdHRyaWJ1dGVSZXN0cmljdGlvbnMgY29udGFpbmVkIGluIHRoaXMgcnVsZS4gIFRoZSB2ZXJiICogcmVwcmVzZW50cyBhbGwga2luZHMuXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lSdWxlXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fUm9sZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUm9sZVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicnVsZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdGhlIHJ1bGVzIGZvciB0aGlzIHJvbGVcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUG9saWN5UnVsZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeVJ1bGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9Sb2xlQmluZGluZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJncm91cE5hbWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHRoZSBncm91cHMgZGlyZWN0bHkgYm91bmQgdG8gdGhlIHJvbGVcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgZ3JvdXBzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJvbGVCaW5kaW5nXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyb2xlUmVmXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN1YmplY3RzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVmZXJlbmNlcyB0byBzdWJqZWN0cyBib3VuZCB0byB0aGUgcm9sZS4gIE9ubHkgVXNlclwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlck5hbWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHRoZSB1c2VybmFtZXMgZGlyZWN0bHkgYm91bmQgdG8gdGhlIHJvbGVcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgdXNlcm5hbWVzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlQmluZGluZ1wiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1JvbGVCaW5kaW5nTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygcm9sZSBiaW5kaW5nc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Sb2xlQmluZGluZ1wiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVCaW5kaW5nXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJvbGVCaW5kaW5nTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVCaW5kaW5nTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1JvbGVMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByb2xlc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Sb2xlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSb2xlTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fU3ViamVjdEFjY2Vzc1Jldmlld1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjb250ZW50XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJncm91cHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU3ViamVjdEFjY2Vzc1Jldmlld1wiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVzcGFjZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lc3BhY2Ugb2YgdGhlIGFjdGlvbiBiZWluZyByZXF1ZXN0ZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXNvdXJjZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvbmUgb2YgdGhlIGV4aXN0aW5nIHJlc291cmNlIHR5cGVzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VOYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHJlc291cmNlIGJlaW5nIHJlcXVlc3RlZCBmb3IgYSBnZXQgb3IgZGVsZXRlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInZlcmJcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib25lIG9mIGdldFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU3ViamVjdEFjY2Vzc1Jldmlld1wiXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1N1YmplY3RBY2Nlc3NSZXZpZXdSZXNwb25zZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhbGxvd2VkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0cnVlIGlmIHRoZSBhY3Rpb24gd291bGQgYmUgYWxsb3dlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJTdWJqZWN0QWNjZXNzUmV2aWV3UmVzcG9uc2VcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lc3BhY2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWVzcGFjZSB1c2VkIGZvciB0aGUgYWNjZXNzIHJldmlld1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYXNvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWFzb24gaXMgb3B0aW9uYWxcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlN1YmplY3RBY2Nlc3NSZXZpZXdSZXNwb25zZVwiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9CdWlsZFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiQnVpbGRcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFNwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRTcGVjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRTdGF0dXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkQ29uZmlnXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJCdWlsZENvbmZpZ1wiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkQ29uZmlnU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZENvbmZpZ1NwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZENvbmZpZ1N0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZENvbmZpZ1N0YXR1c1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRDb25maWdMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBidWlsZCBjb25maWdzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZENvbmZpZ1wiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkQ29uZmlnXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkJ1aWxkQ29uZmlnTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkQ29uZmlnTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9CdWlsZENvbmZpZ1NwZWNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwib3V0cHV0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRPdXRwdXRcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRPdXRwdXRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXNvdXJjZXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1Jlc291cmNlUmVxdWlyZW1lbnRzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVJlcXVpcmVtZW50c1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJldmlzaW9uXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfU291cmNlUmV2aXNpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU291cmNlUmV2aXNpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXJ2aWNlQWNjb3VudFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbmFtZSBvZiB0aGUgc2VydmljZSBhY2NvdW50IHRvIHVzZSB0byBydW4gcG9kcyBjcmVhdGVkIGJ5IHRoZSBidWlsZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNvdXJjZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RyYXRlZ3lcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFN0cmF0ZWd5XCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3RyYXRlZ3lcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0cmlnZ2Vyc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRldGVybWluZXMgaG93IG5ldyBidWlsZHMgY2FuIGJlIGxhdW5jaGVkIGZyb20gYSBidWlsZCBjb25maWcuICBpZiBubyB0cmlnZ2VycyBhcmUgZGVmaW5lZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRUcmlnZ2VyUG9saWN5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRUcmlnZ2VyUG9saWN5XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZENvbmZpZ1NwZWNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRDb25maWdTdGF0dXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibGFzdFZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZWQgdG8gaW5mb3JtIGFib3V0IG51bWJlciBvZiBsYXN0IHRyaWdnZXJlZCBidWlsZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdTdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBidWlsZHNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiQnVpbGRMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkT3V0cHV0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInB1c2hTZWNyZXRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2NhbE9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRvXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRPdXRwdXRcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRSZXF1ZXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImZyb21cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkJ1aWxkUmVxdWVzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImxhc3RWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJMYXN0VmVyc2lvbiBvZiB0aGUgQnVpbGRDb25maWcgdGhhdCB0cmlnZ2VyZWQgdGhpcyBidWlsZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmV2aXNpb25cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9Tb3VyY2VSZXZpc2lvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Tb3VyY2VSZXZpc2lvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRyaWdnZXJlZEJ5SW1hZ2VcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFJlcXVlc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY29udGV4dERpclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzcGVjaWZpZXMgc3ViLWRpcmVjdG9yeSB3aGVyZSB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBhcHBsaWNhdGlvbiBleGlzdHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnaXRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9HaXRCdWlsZFNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5HaXRCdWlsZFNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNvdXJjZVNlY3JldFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9jYWxPYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0eXBlIG9mIHNvdXJjZSBjb250cm9sIG1hbmFnZW1lbnQgc3lzdGVtXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9CdWlsZFNwZWNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwib3V0cHV0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRPdXRwdXRcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRPdXRwdXRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXNvdXJjZXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1Jlc291cmNlUmVxdWlyZW1lbnRzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVJlcXVpcmVtZW50c1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJldmlzaW9uXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfU291cmNlUmV2aXNpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU291cmNlUmV2aXNpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXJ2aWNlQWNjb3VudFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbmFtZSBvZiB0aGUgc2VydmljZSBhY2NvdW50IHRvIHVzZSB0byBydW4gcG9kcyBjcmVhdGVkIGJ5IHRoZSBidWlsZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNvdXJjZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RyYXRlZ3lcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFN0cmF0ZWd5XCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3RyYXRlZ3lcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3BlY1wiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9CdWlsZFN0YXR1c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjYW5jZWxsZWRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRlc2NyaWJlcyBpZiBhIGNhbmNlbGluZyBldmVudCB3YXMgdHJpZ2dlcmVkIGZvciB0aGUgYnVpbGRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjb21wbGV0aW9uVGltZXN0YW1wXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNlcnZlciB0aW1lIHdoZW4gdGhlIHBvZCBydW5uaW5nIHRoaXMgYnVpbGQgc3RvcHBlZCBydW5uaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY29uZmlnXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImR1cmF0aW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbW91bnQgb2YgdGltZSB0aGUgYnVpbGQgaGFzIGJlZW4gcnVubmluZ1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UgaW5kaWNhdGluZyBkZXRhaWxzIGFib3V0IHdoeSB0aGUgYnVpbGQgaGFzIHRoaXMgc3RhdHVzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGhhc2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib2JzZXJ2ZWQgcG9pbnQgaW4gdGhlIGJ1aWxkIGxpZmVjeWNsZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXJ0VGltZXN0YW1wXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNlcnZlciB0aW1lIHdoZW4gdGhpcyBidWlsZCBzdGFydGVkIHJ1bm5pbmcgaW4gYSBwb2RcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkU3RyYXRlZ3lcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY3VzdG9tU3RyYXRlZ3lcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9DdXN0b21CdWlsZFN0cmF0ZWd5XCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkN1c3RvbUJ1aWxkU3RyYXRlZ3lcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkb2NrZXJTdHJhdGVneVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0RvY2tlckJ1aWxkU3RyYXRlZ3lcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRG9ja2VyQnVpbGRTdHJhdGVneVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNvdXJjZVN0cmF0ZWd5XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfU291cmNlQnVpbGRTdHJhdGVneVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Tb3VyY2VCdWlsZFN0cmF0ZWd5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpZGVudGlmaWVzIHRoZSB0eXBlIG9mIGJ1aWxkIHN0cmF0ZWd5XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFN0cmF0ZWd5XCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkVHJpZ2dlclBvbGljeVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJnZW5lcmljXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfV2ViSG9va1RyaWdnZXJcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuV2ViSG9va1RyaWdnZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnaXRodWJcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9XZWJIb29rVHJpZ2dlclwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5XZWJIb29rVHJpZ2dlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImltYWdlQ2hhbmdlXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfSW1hZ2VDaGFuZ2VUcmlnZ2VyXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlQ2hhbmdlVHJpZ2dlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidHlwZSBvZiBidWlsZCB0cmlnZ2VyXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFRyaWdnZXJQb2xpY3lcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfQ3VzdG9tQnVpbGRTdHJhdGVneVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJlbnZcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyB5b3Ugd2FudCB0byBwYXNzIGludG8gYSBidWlsZGVyIGNvbnRhaW5lclwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbnZWYXJcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW52VmFyXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZXhwb3NlRG9ja2VyU29ja2V0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGxvdyBydW5uaW5nIERvY2tlciBjb21tYW5kcyAoYW5kIGJ1aWxkIERvY2tlciBpbWFnZXMpIGZyb20gaW5zaWRlIHRoZSBjb250YWluZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmb3JjZVB1bGxcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZvcmNlcyBwdWxsaW5nIG9mIGJ1aWxkZXIgaW1hZ2UgZnJvbSByZW1vdGUgcmVnaXN0cnkgaWYgdHJ1ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImZyb21cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicHVsbFNlY3JldFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9jYWxPYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DdXN0b21CdWlsZFN0cmF0ZWd5XCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0RvY2tlckJ1aWxkU3RyYXRlZ3lcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZW52XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgeW91IHdhbnQgdG8gcGFzcyBpbnRvIGEgYnVpbGRlciBjb250YWluZXJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImZvcmNlUHVsbFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZm9yY2VzIHRoZSBzb3VyY2UgYnVpbGQgdG8gcHVsbCB0aGUgaW1hZ2UgaWYgdHJ1ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImZyb21cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibm9DYWNoZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaWYgdHJ1ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInB1bGxTZWNyZXRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2NhbE9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRG9ja2VyQnVpbGRTdHJhdGVneVwiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9HaXRCdWlsZFNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJodHRwUHJveHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3BlY2lmaWVzIGEgaHR0cCBwcm94eSB0byBiZSB1c2VkIGR1cmluZyBnaXQgY2xvbmUgb3BlcmF0aW9uc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImh0dHBzUHJveHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3BlY2lmaWVzIGEgaHR0cHMgcHJveHkgdG8gYmUgdXNlZCBkdXJpbmcgZ2l0IGNsb25lIG9wZXJhdGlvbnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWZcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaWRlbnRpZmllcyB0aGUgYnJhbmNoL3RhZy9yZWYgdG8gYnVpbGRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cmlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicG9pbnRzIHRvIHRoZSBzb3VyY2UgdGhhdCB3aWxsIGJlIGJ1aWx0XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5HaXRCdWlsZFNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9HaXRTb3VyY2VSZXZpc2lvblwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhdXRob3JcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9Tb3VyY2VDb250cm9sVXNlclwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Tb3VyY2VDb250cm9sVXNlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvbW1pdFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJoYXNoIGlkZW50aWZ5aW5nIGEgc3BlY2lmaWMgY29tbWl0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY29tbWl0dGVyXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfU291cmNlQ29udHJvbFVzZXJcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU291cmNlQ29udHJvbFVzZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRlc2NyaXB0aW9uIG9mIGEgc3BlY2lmaWMgY29tbWl0XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5HaXRTb3VyY2VSZXZpc2lvblwiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9JbWFnZUNoYW5nZVRyaWdnZXJcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZnJvbVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsYXN0VHJpZ2dlcmVkSW1hZ2VJRFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VkIGludGVybmFsbHkgdG8gc2F2ZSBsYXN0IHVzZWQgaW1hZ2UgSUQgZm9yIGJ1aWxkXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZUNoYW5nZVRyaWdnZXJcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfU291cmNlQnVpbGRTdHJhdGVneVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJlbnZcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyB5b3Ugd2FudCB0byBwYXNzIGludG8gYSBidWlsZGVyIGNvbnRhaW5lclwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbnZWYXJcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW52VmFyXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZm9yY2VQdWxsXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmb3JjZXMgdGhlIHNvdXJjZSBidWlsZCB0byBwdWxsIHRoZSBpbWFnZSBpZiB0cnVlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZnJvbVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpbmNyZW1lbnRhbFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZm9yY2VzIHRoZSBzb3VyY2UgYnVpbGQgdG8gZG8gaW5jcmVtZW50YWwgYnVpbGRzIGlmIHRydWVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwdWxsU2VjcmV0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Mb2NhbE9iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzY3JpcHRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxvY2F0aW9uIG9mIHRoZSBzb3VyY2Ugc2NyaXB0c1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU291cmNlQnVpbGRTdHJhdGVneVwiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9Tb3VyY2VDb250cm9sVXNlclwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJlbWFpbFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJlLW1haWwgb2YgdGhlIHNvdXJjZSBjb250cm9sIHVzZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHNvdXJjZSBjb250cm9sIHVzZXJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZUNvbnRyb2xVc2VyXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX1NvdXJjZVJldmlzaW9uXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImdpdFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0dpdFNvdXJjZVJldmlzaW9uXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkdpdFNvdXJjZVJldmlzaW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0eXBlIG9mIHRoZSBidWlsZCBzb3VyY2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZVJldmlzaW9uXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX1dlYkhvb2tUcmlnZ2VyXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInNlY3JldFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZWNyZXQgdXNlZCB0byB2YWxpZGF0ZSByZXF1ZXN0c1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuV2ViSG9va1RyaWdnZXJcIlxuICAgICAgfSxcbiAgICAgIFwib3NfZGVwbG95X0N1c3RvbURlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjb21tYW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxseSBvdmVycmlkZXMgdGhlIGNvbnRhaW5lciBjb21tYW5kIChkZWZhdWx0IGlzIHNwZWNpZmllZCBieSB0aGUgaW1hZ2UpXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbGx5IG92ZXJyaWRlcyB0aGUgY29udGFpbmVyIGNvbW1hbmQgKGRlZmF1bHQgaXMgc3BlY2lmaWVkIGJ5IHRoZSBpbWFnZSlcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlbnZpcm9ubWVudFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImVudmlyb25tZW50IHZhcmlhYmxlcyBwcm92aWRlZCB0byB0aGUgZGVwbG95bWVudCBwcm9jZXNzIGNvbnRhaW5lclwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbnZWYXJcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW52VmFyXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaW1hZ2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBEb2NrZXIgaW1hZ2Ugd2hpY2ggY2FuIGNhcnJ5IG91dCBhIGRlcGxveW1lbnRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkN1c3RvbURlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiXG4gICAgICB9LFxuICAgICAgXCJvc19kZXBsb3lfRGVwbG95bWVudENhdXNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImltYWdlVHJpZ2dlclwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50Q2F1c2VJbWFnZVRyaWdnZXJcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENhdXNlSW1hZ2VUcmlnZ2VyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdHlwZSBvZiB0cmlnZ2VyIHRoYXQgcmVzdWx0ZWQgaW4gYSBuZXcgZGVwbG95bWVudFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENhdXNlXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50Q2F1c2VJbWFnZVRyaWdnZXJcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZnJvbVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDYXVzZUltYWdlVHJpZ2dlclwiXG4gICAgICB9LFxuICAgICAgXCJvc19kZXBsb3lfRGVwbG95bWVudENvbmZpZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiRGVwbG95bWVudENvbmZpZ1wiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50Q29uZmlnU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q29uZmlnU3BlY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50Q29uZmlnU3RhdHVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDb25maWdTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDb25maWdcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRDb25maWdMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBsaXN0IG9mIGRlcGxveW1lbnQgY29uZmlnc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0RlcGxveW1lbnRDb25maWdcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q29uZmlnXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkRlcGxveW1lbnRDb25maWdMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENvbmZpZ0xpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRDb25maWdTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInJlcGxpY2FzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgZGVzaXJlZCBudW1iZXIgb2YgcmVwbGljYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWxlY3RvclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIGxhYmVsIHF1ZXJ5IG92ZXIgcG9kcyB0aGF0IHNob3VsZCBtYXRjaCB0aGUgcmVwbGljYXMgY291bnRcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgbGFiZWwgcXVlcnkgb3ZlciBwb2RzIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSByZXBsaWNhcyBjb3VudFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdHJhdGVneVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50U3RyYXRlZ3lcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudFN0cmF0ZWd5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidGVtcGxhdGVcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BvZFRlbXBsYXRlU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kVGVtcGxhdGVTcGVjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHJpZ2dlcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJob3cgbmV3IGRlcGxveW1lbnRzIGFyZSB0cmlnZ2VyZWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50VHJpZ2dlclBvbGljeVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRUcmlnZ2VyUG9saWN5XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q29uZmlnU3BlY1wiXG4gICAgICB9LFxuICAgICAgXCJvc19kZXBsb3lfRGVwbG95bWVudENvbmZpZ1N0YXR1c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJkZXRhaWxzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0RlcGxveW1lbnREZXRhaWxzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnREZXRhaWxzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibGF0ZXN0VmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY3VycmVudCBkZXBsb3ltZW50IGlzIG91dCBvZiBzeW5jXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q29uZmlnU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50RGV0YWlsc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjYXVzZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJleHRlbmRlZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhbGwgdGhlIGNhdXNlcyBmb3IgY3JlYXRpbmcgYSBuZXcgZGVwbG95bWVudFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0RlcGxveW1lbnRDYXVzZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDYXVzZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSB1c2VyIHNwZWNpZmllZCBjaGFuZ2UgbWVzc2FnZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudERldGFpbHNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRTdHJhdGVneVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjdXN0b21QYXJhbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfQ3VzdG9tRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkN1c3RvbURlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlY3JlYXRlUGFyYW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X1JlY3JlYXRlRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJlY3JlYXRlRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVJlcXVpcmVtZW50c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VSZXF1aXJlbWVudHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyb2xsaW5nUGFyYW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X1JvbGxpbmdEZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sbGluZ0RlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgb2YgYSBkZXBsb3ltZW50IHN0cmF0ZWd5XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50U3RyYXRlZ3lcIlxuICAgICAgfSxcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRUcmlnZ2VySW1hZ2VDaGFuZ2VQYXJhbXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXV0b21hdGljXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ3aGV0aGVyIGRldGVjdGlvbiBvZiBhIG5ldyB0YWcgdmFsdWUgc2hvdWxkIHRyaWdnZXIgYSBkZXBsb3ltZW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY29udGFpbmVyTmFtZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZXN0cmljdHMgdGFnIHVwZGF0ZXMgdG8gYSBzZXQgb2YgY29udGFpbmVyIG5hbWVzIGluIHRoZSBwb2RcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlc3RyaWN0cyB0YWcgdXBkYXRlcyB0byBhIHNldCBvZiBjb250YWluZXIgbmFtZXMgaW4gdGhlIHBvZFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImZyb21cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibGFzdFRyaWdnZXJlZEltYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBsYXN0IGltYWdlIHRvIGJlIHRyaWdnZXJlZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudFRyaWdnZXJJbWFnZUNoYW5nZVBhcmFtc1wiXG4gICAgICB9LFxuICAgICAgXCJvc19kZXBsb3lfRGVwbG95bWVudFRyaWdnZXJQb2xpY3lcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiaW1hZ2VDaGFuZ2VQYXJhbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudFRyaWdnZXJJbWFnZUNoYW5nZVBhcmFtc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50VHJpZ2dlckltYWdlQ2hhbmdlUGFyYW1zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdHlwZSBvZiB0aGUgdHJpZ2dlclwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudFRyaWdnZXJQb2xpY3lcIlxuICAgICAgfSxcbiAgICAgIFwib3NfZGVwbG95X0V4ZWNOZXdQb2RIb29rXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNvbW1hbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgaG9vayBjb21tYW5kIGFuZCBpdHMgYXJndW1lbnRzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgaG9vayBjb21tYW5kIGFuZCBpdHMgYXJndW1lbnRzXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY29udGFpbmVyTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbmFtZSBvZiBhIGNvbnRhaW5lciBmcm9tIHRoZSBwb2QgdGVtcGxhdGUgd2hvc2UgaW1hZ2Ugd2lsbCBiZSB1c2VkIGZvciB0aGUgaG9vayBjb250YWluZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlbnZcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJlbnZpcm9ubWVudCB2YXJpYWJsZXMgcHJvdmlkZWQgdG8gdGhlIGhvb2sgY29udGFpbmVyXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VudlZhclwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkV4ZWNOZXdQb2RIb29rXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9MaWZlY3ljbGVIb29rXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImV4ZWNOZXdQb2RcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRXhlY05ld1BvZEhvb2tcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRXhlY05ld1BvZEhvb2tcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmYWlsdXJlUG9saWN5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIndoYXQgYWN0aW9uIHRvIHRha2UgaWYgdGhlIGhvb2sgZmFpbHNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkxpZmVjeWNsZUhvb2tcIlxuICAgICAgfSxcbiAgICAgIFwib3NfZGVwbG95X1JlY3JlYXRlRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInBvc3RcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfTGlmZWN5Y2xlSG9va1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5MaWZlY3ljbGVIb29rXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicHJlXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0xpZmVjeWNsZUhvb2tcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTGlmZWN5Y2xlSG9va1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUmVjcmVhdGVEZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfZGVwbG95X1JvbGxpbmdEZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiaW50ZXJ2YWxTZWNvbmRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdGltZSB0byB3YWl0IGJldHdlZW4gcG9sbGluZyBkZXBsb3ltZW50IHN0YXR1cyBhZnRlciB1cGRhdGVcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicG9zdFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9MaWZlY3ljbGVIb29rXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkxpZmVjeWNsZUhvb2tcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwcmVcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfTGlmZWN5Y2xlSG9va1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5MaWZlY3ljbGVIb29rXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidGltZW91dFNlY29uZHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0aW1lIHRvIHdhaXQgZm9yIHVwZGF0ZXMgYmVmb3JlIGdpdmluZyB1cFwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVQZXJjZW50XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgcGVyY2VudGFnZSBvZiByZXBsaWNhcyB0byBzY2FsZSB1cCBvciBkb3duIGVhY2ggaW50ZXJ2YWwgKG5lZ2F0aXZlIHZhbHVlIHN3aXRjaGVzIHNjYWxlIG9yZGVyIHRvIGRvd24vdXAgaW5zdGVhZCBvZiB1cC9kb3duKVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVwZGF0ZVBlcmlvZFNlY29uZHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0aW1lIHRvIHdhaXQgYmV0d2VlbiBpbmRpdmlkdWFsIHBvZCB1cGRhdGVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sbGluZ0RlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiXG4gICAgICB9LFxuICAgICAgXCJvc19pbWFnZV9JbWFnZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkb2NrZXJJbWFnZU1hbmlmZXN0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJhdyBKU09OIG9mIHRoZSBtYW5pZmVzdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRvY2tlckltYWdlTWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3J1bnRpbWVfUmF3RXh0ZW5zaW9uXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRvY2tlckltYWdlTWV0YWRhdGFWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbnZleXMgdmVyc2lvbiBvZiB0aGUgb2JqZWN0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZG9ja2VySW1hZ2VSZWZlcmVuY2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgdG8gcHVsbCB0aGlzIGltYWdlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkltYWdlXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2ltYWdlX0ltYWdlTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgaW1hZ2Ugb2JqZWN0c1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfSW1hZ2VcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJJbWFnZUxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZUxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfaW1hZ2VfSW1hZ2VTdHJlYW1cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkltYWdlU3RyZWFtXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzcGVjXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfSW1hZ2VTdHJlYW1TcGVjXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlU3RyZWFtU3BlY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2ltYWdlX0ltYWdlU3RyZWFtU3RhdHVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlU3RyZWFtU3RhdHVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVN0cmVhbVwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19pbWFnZV9JbWFnZVN0cmVhbUxpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGltYWdlIHN0cmVhbSBvYmplY3RzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19pbWFnZV9JbWFnZVN0cmVhbVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlU3RyZWFtXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkltYWdlU3RyZWFtTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlU3RyZWFtTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19pbWFnZV9JbWFnZVN0cmVhbVNwZWNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZG9ja2VySW1hZ2VSZXBvc2l0b3J5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsIGZpZWxkIGlmIHNwZWNpZmllZCB0aGlzIHN0cmVhbSBpcyBiYWNrZWQgYnkgYSBEb2NrZXIgcmVwb3NpdG9yeSBvbiB0aGlzIHNlcnZlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRhZ3NcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtYXAgYXJiaXRyYXJ5IHN0cmluZyB2YWx1ZXMgdG8gc3BlY2lmaWMgaW1hZ2UgbG9jYXRvcnNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2ltYWdlX05hbWVkVGFnUmVmZXJlbmNlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTmFtZWRUYWdSZWZlcmVuY2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlU3RyZWFtU3BlY1wiXG4gICAgICB9LFxuICAgICAgXCJvc19pbWFnZV9JbWFnZVN0cmVhbVN0YXR1c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJkb2NrZXJJbWFnZVJlcG9zaXRvcnlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVwcmVzZW50cyB0aGUgZWZmZWN0aXZlIGxvY2F0aW9uIHRoaXMgc3RyZWFtIG1heSBiZSBhY2Nlc3NlZCBhdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRhZ3NcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJoaXN0b3JpY2FsIHJlY29yZCBvZiBpbWFnZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggdGFnXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19pbWFnZV9OYW1lZFRhZ0V2ZW50TGlzdFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkVGFnRXZlbnRMaXN0XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVN0cmVhbVN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJvc19pbWFnZV9OYW1lZFRhZ0V2ZW50TGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgdGFnIGV2ZW50cyByZWxhdGVkIHRvIHRoZSB0YWdcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2ltYWdlX1RhZ0V2ZW50XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVGFnRXZlbnRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0YWdcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHRhZ1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTmFtZWRUYWdFdmVudExpc3RcIlxuICAgICAgfSxcbiAgICAgIFwib3NfaW1hZ2VfTmFtZWRUYWdSZWZlcmVuY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYW5ub3RhdGlvbnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW5ub3RhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGltYWdlcyB1c2luZyB0aGlzIHRhZ1wiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW5ub3RhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGltYWdlcyB1c2luZyB0aGlzIHRhZ1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmcm9tXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0YWdcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkVGFnUmVmZXJlbmNlXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2ltYWdlX1RhZ0V2ZW50XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNyZWF0ZWRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwid2hlbiB0aGUgZXZlbnQgd2FzIGNyZWF0ZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkb2NrZXJJbWFnZVJlZmVyZW5jZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgdG8gcHVsbCB0aGlzIGltYWdlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaW1hZ2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGltYWdlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5UYWdFdmVudFwiXG4gICAgICB9LFxuICAgICAgXCJvc19vYXV0aF9PQXV0aEFjY2Vzc1Rva2VuXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImF1dGhvcml6ZVRva2VuXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbnRhaW5zIHRoZSB0b2tlbiB0aGF0IGF1dGhvcml6ZWQgdGhpcyB0b2tlblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNsaWVudE5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVmZXJlbmNlcyB0aGUgY2xpZW50IHRoYXQgY3JlYXRlZCB0aGlzIHRva2VuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZXhwaXJlc0luXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpcyB0aGUgc2Vjb25kcyBmcm9tIGNyZWF0aW9uIHRpbWUgYmVmb3JlIHRoaXMgdG9rZW4gZXhwaXJlc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiT0F1dGhBY2Nlc3NUb2tlblwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVkaXJlY3RVUklcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVkaXJlY3Rpb24gVVJJIGFzc29jaWF0ZWQgd2l0aCB0aGUgdG9rZW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWZyZXNoVG9rZW5cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWwgdmFsdWUgYnkgd2hpY2ggdGhpcyB0b2tlbiBjYW4gYmUgcmVuZXdlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNjb3Blc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVxdWVzdGVkIHNjb3Blc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByZXF1ZXN0ZWQgc2NvcGVzXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlck5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidXNlciBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRva2VuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlclVJRFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1bmlxdWUgVUlEIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRva2VuXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aEFjY2Vzc1Rva2VuXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX29hdXRoX09BdXRoQWNjZXNzVG9rZW5MaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBvYXV0aCBhY2Nlc3MgdG9rZW5zXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aEFjY2Vzc1Rva2VuXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhBY2Nlc3NUb2tlblwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJPQXV0aEFjY2Vzc1Rva2VuTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQWNjZXNzVG9rZW5MaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX29hdXRoX09BdXRoQXV0aG9yaXplVG9rZW5cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2xpZW50TmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWZlcmVuY2VzIHRoZSBjbGllbnQgdGhhdCBjcmVhdGVkIHRoaXMgdG9rZW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJleHBpcmVzSW5cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNlY29uZHMgZnJvbSBjcmVhdGlvbiB0aW1lIGJlZm9yZSB0aGlzIHRva2VuIGV4cGlyZXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk9BdXRoQXV0aG9yaXplVG9rZW5cIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlZGlyZWN0VVJJXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZGlyZWN0aW9uIFVSSSBhc3NvY2lhdGVkIHdpdGggdGhlIHRva2VuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2NvcGVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByZXF1ZXN0ZWQgc2NvcGVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJlcXVlc3RlZCBzY29wZXNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0ZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdGF0ZSBkYXRhIGZyb20gcmVxdWVzdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJOYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZXIgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhpcyB0b2tlblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJVSURcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidW5pcXVlIFVJRCBhc3NvY2lhdGVkIHdpdGggdGhpcyB0b2tlbi4gIHVzZXJVSUQgYW5kIHVzZXJOYW1lIG11c3QgYm90aCBtYXRjaCBmb3IgdGhpcyB0b2tlbiB0byBiZSB2YWxpZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhBdXRob3JpemVUb2tlblwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19vYXV0aF9PQXV0aEF1dGhvcml6ZVRva2VuTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygb2F1dGggYXV0aG9yaXphdGlvbiB0b2tlbnNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQXV0aG9yaXplVG9rZW5cIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aEF1dGhvcml6ZVRva2VuXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk9BdXRoQXV0aG9yaXplVG9rZW5MaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhBdXRob3JpemVUb2tlbkxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3Nfb2F1dGhfT0F1dGhDbGllbnRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk9BdXRoQ2xpZW50XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWRpcmVjdFVSSXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ2YWxpZCByZWRpcmVjdGlvbiBVUklzIGFzc29jaWF0ZWQgd2l0aCBhIGNsaWVudFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidmFsaWQgcmVkaXJlY3Rpb24gVVJJcyBhc3NvY2lhdGVkIHdpdGggYSBjbGllbnRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXNwb25kV2l0aENoYWxsZW5nZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImluZGljYXRlcyB3aGV0aGVyIHRoZSBjbGllbnQgd2FudHMgYXV0aGVudGljYXRpb24gbmVlZGVkIHJlc3BvbnNlcyBtYWRlIGluIHRoZSBmb3JtIG9mIGNoYWxsZW5nZXMgaW5zdGVhZCBvZiByZWRpcmVjdHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWNyZXRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidW5pcXVlIHNlY3JldCBhc3NvY2lhdGVkIHdpdGggYSBjbGllbnRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX29hdXRoX09BdXRoQ2xpZW50QXV0aG9yaXphdGlvblwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjbGllbnROYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZmVyZW5jZXMgdGhlIGNsaWVudCB0aGF0IGNyZWF0ZWQgdGhpcyBhdXRob3JpemF0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk9BdXRoQ2xpZW50QXV0aG9yaXphdGlvblwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2NvcGVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBncmFudGVkIHNjb3Blc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBncmFudGVkIHNjb3Blc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJOYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZXIgbmFtZSB0aGF0IGF1dGhvcml6ZWQgdGhpcyBjbGllbnRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VyVUlEXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZSBVSUQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYXV0aG9yaXphdGlvbi4gdXNlclVJRCBhbmQgdXNlck5hbWUgbXVzdCBib3RoIG1hdGNoIGZvciB0aGlzIGF1dGhvcml6YXRpb24gdG8gYmUgdmFsaWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50QXV0aG9yaXphdGlvblwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19vYXV0aF9PQXV0aENsaWVudEF1dGhvcml6YXRpb25MaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBvYXV0aCBjbGllbnQgYXV0aG9yaXphdGlvbnNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQ2xpZW50QXV0aG9yaXphdGlvblwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50QXV0aG9yaXphdGlvblwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJPQXV0aENsaWVudEF1dGhvcml6YXRpb25MaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhDbGllbnRBdXRob3JpemF0aW9uTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19vYXV0aF9PQXV0aENsaWVudExpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIG9hdXRoIGNsaWVudHNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQ2xpZW50XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhDbGllbnRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiT0F1dGhDbGllbnRMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhDbGllbnRMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX3Byb2plY3RfUHJvamVjdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUHJvamVjdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3Byb2plY3RfUHJvamVjdFNwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFNwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19wcm9qZWN0X1Byb2plY3RTdGF0dXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFN0YXR1c1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19wcm9qZWN0X1Byb2plY3RMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBwcm9qZWN0c1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfcHJvamVjdF9Qcm9qZWN0XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQcm9qZWN0TGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX3Byb2plY3RfUHJvamVjdFJlcXVlc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVzY3JpcHRpb24gdG8gYXBwbHkgdG8gYSBwcm9qZWN0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZGlzcGxheU5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGlzcGxheSBuYW1lIHRvIGFwcGx5IHRvIGEgcHJvamVjdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQcm9qZWN0UmVxdWVzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qcm9qZWN0UmVxdWVzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19wcm9qZWN0X1Byb2plY3RTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImZpbmFsaXplcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbiBvcGFxdWUgbGlzdCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGVtcHR5IHRvIHBlcm1hbmVudGx5IHJlbW92ZSBvYmplY3QgZnJvbSBzdG9yYWdlXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbiBvcGFxdWUgbGlzdCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGVtcHR5IHRvIHBlcm1hbmVudGx5IHJlbW92ZSBvYmplY3QgZnJvbSBzdG9yYWdlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qcm9qZWN0U3BlY1wiXG4gICAgICB9LFxuICAgICAgXCJvc19wcm9qZWN0X1Byb2plY3RTdGF0dXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwicGhhc2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicGhhc2UgaXMgdGhlIGN1cnJlbnQgbGlmZWN5Y2xlIHBoYXNlIG9mIHRoZSBwcm9qZWN0XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qcm9qZWN0U3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX3JvdXRlX1JvdXRlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSb3V0ZVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3JvdXRlX1JvdXRlU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb3V0ZVNwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19yb3V0ZV9Sb3V0ZVN0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb3V0ZVN0YXR1c1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3Nfcm91dGVfUm91dGVMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByb3V0ZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3JvdXRlX1JvdXRlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUm91dGVMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX3JvdXRlX1JvdXRlU3BlY1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJob3N0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsOiBhbGlhcy9kbnMgdGhhdCBwb2ludHMgdG8gdGhlIHNlcnZpY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXRoXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsOiBwYXRoIHRoYXQgdGhlIHJvdXRlciB3YXRjaGVzIHRvIHJvdXRlIHRyYWZmaWMgdG8gdGhlIHNlcnZpY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0bHNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19yb3V0ZV9UTFNDb25maWdcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVExTQ29uZmlnXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidG9cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb3V0ZVNwZWNcIlxuICAgICAgfSxcbiAgICAgIFwib3Nfcm91dGVfUm91dGVTdGF0dXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVTdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwib3Nfcm91dGVfVExTQ29uZmlnXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNhQ2VydGlmaWNhdGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicHJvdmlkZXMgdGhlIGNlcnQgYXV0aG9yaXR5IGNlcnRpZmljYXRlIGNvbnRlbnRzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2VydGlmaWNhdGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicHJvdmlkZXMgY2VydGlmaWNhdGUgY29udGVudHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkZXN0aW5hdGlvbkNBQ2VydGlmaWNhdGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicHJvdmlkZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBjYSBjZXJ0aWZpY2F0ZSBvZiB0aGUgZmluYWwgZGVzdGluYXRpb24uICBXaGVuIHVzaW5nIHJlLWVuY3J5cHQgdGVybWluYXRpb24gdGhpcyBmaWxlIHNob3VsZCBiZSBwcm92aWRlZCBpbiBvcmRlciB0byBoYXZlIHJvdXRlcnMgdXNlIGl0IGZvciBoZWFsdGggY2hlY2tzIG9uIHRoZSBzZWN1cmUgY29ubmVjdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwcm92aWRlcyBrZXkgZmlsZSBjb250ZW50c1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRlcm1pbmF0aW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImluZGljYXRlcyB0ZXJtaW5hdGlvbiB0eXBlLiAgaWYgbm90IHNldFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVExTQ29uZmlnXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX3RlbXBsYXRlX1BhcmFtZXRlclwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbDogZGVzY3JpYmVzIHRoZSBwYXJhbWV0ZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmcm9tXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImlucHV0IHZhbHVlIGZvciB0aGUgZ2VuZXJhdG9yXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2VuZXJhdGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWw6IGdlbmVyYXRlIHNwZWNpZmllcyB0aGUgZ2VuZXJhdG9yIHRvIGJlIHVzZWQgdG8gZ2VuZXJhdGUgcmFuZG9tIHN0cmluZyBmcm9tIGFuIGlucHV0IHZhbHVlIHNwZWNpZmllZCBieSB0aGUgZnJvbSBmaWVsZC4gIHRoZSByZXN1bHQgc3RyaW5nIGlzIHN0b3JlZCBpbiB0aGUgdmFsdWUgZmllbGQuIGlmIG5vdCBzcGVjaWZpZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHBhcmFtZXRlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlcXVpcmVkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpbmRpY2F0ZXMgdGhlIHBhcmFtZXRlciBtdXN0IGhhdmUgYSBub24tZW1wdHkgdmFsdWUgb3IgYmUgZ2VuZXJhdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidmFsdWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWw6IGhvbGRzIHRoZSBwYXJhbWV0ZXIgZGF0YS4gIGlmIHNwZWNpZmllZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUGFyYW1ldGVyXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX3RlbXBsYXRlX1RlbXBsYXRlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJUZW1wbGF0ZVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImxhYmVsc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbDogbGlzdCBvZiBsYWJsZXMgdGhhdCBhcmUgYXBwbGllZCB0byBldmVyeSBvYmplY3QgZHVyaW5nIHRoZSB0ZW1wbGF0ZSB0byBjb25maWcgdHJhbnNmb3JtYXRpb25cIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsOiBsaXN0IG9mIGxhYmxlcyB0aGF0IGFyZSBhcHBsaWVkIHRvIGV2ZXJ5IG9iamVjdCBkdXJpbmcgdGhlIHRlbXBsYXRlIHRvIGNvbmZpZyB0cmFuc2Zvcm1hdGlvblwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm9iamVjdHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIG9iamVjdHMgdG8gaW5jbHVkZSBpbiB0aGUgdGVtcGxhdGVcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXJhbWV0ZXJzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWw6IGxpc3Qgb2YgcGFyYW1ldGVycyB1c2VkIGR1cmluZyB0ZW1wbGF0ZSB0byBjb25maWcgdHJhbnNmb3JtYXRpb25cIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3RlbXBsYXRlX1BhcmFtZXRlclwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBhcmFtZXRlclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVGVtcGxhdGVcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfdGVtcGxhdGVfVGVtcGxhdGVMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiB0ZW1wbGF0ZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3RlbXBsYXRlX1RlbXBsYXRlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVGVtcGxhdGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiVGVtcGxhdGVMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVGVtcGxhdGVMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX3VzZXJfR3JvdXBcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkdyb3VwXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2Vyc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgdXNlcnMgaW4gdGhpcyBncm91cFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiB1c2VycyBpbiB0aGlzIGdyb3VwXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Hcm91cFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc191c2VyX0dyb3VwTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgZ3JvdXBzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc191c2VyX0dyb3VwXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR3JvdXBcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiR3JvdXBMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR3JvdXBMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX3VzZXJfSWRlbnRpdHlcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZXh0cmFcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZXh0cmEgaW5mb3JtYXRpb24gZm9yIHRoaXMgaWRlbnRpdHlcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImV4dHJhIGluZm9ybWF0aW9uIGZvciB0aGlzIGlkZW50aXR5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsU3RyaW5nXFx1MDAzZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJJZGVudGl0eVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicHJvdmlkZXJOYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNvdXJjZSBvZiBpZGVudGl0eSBpbmZvcm1hdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInByb3ZpZGVyVXNlck5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidW5pcXVlbHkgcmVwcmVzZW50cyB0aGlzIGlkZW50aXR5IGluIHRoZSBzY29wZSBvZiB0aGUgcHJvdmlkZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VyXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSWRlbnRpdHlcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfdXNlcl9JZGVudGl0eUxpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGlkZW50aXRpZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfSWRlbnRpdHlcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JZGVudGl0eVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJJZGVudGl0eUxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JZGVudGl0eUxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfdXNlcl9Vc2VyXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImZ1bGxOYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZ1bGwgbmFtZSBvZiB1c2VyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ3JvdXBzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBncm91cHNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgZ3JvdXBzXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaWRlbnRpdGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgaWRlbnRpdGllc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBpZGVudGl0aWVzXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlVzZXJcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVXNlclwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc191c2VyX1VzZXJMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiB1c2Vyc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfdXNlcl9Vc2VyXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVXNlclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJVc2VyTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlVzZXJMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcInNwZXRlcl9pbmZfRGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlY1wiXG4gICAgICB9XG4gICAgfSxcbiAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgXCJCYXNlS3ViZXJuZXRlc0xpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5CYXNlS3ViZXJuZXRlc0xpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiQnVpbGRDb25maWdMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZENvbmZpZ0xpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZENvbmZpZ0xpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiQnVpbGRMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZExpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZExpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiQnVpbGRSZXF1ZXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFJlcXVlc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFJlcXVlc3RcIlxuICAgICAgfSxcbiAgICAgIFwiQ2x1c3RlclBvbGljeVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclBvbGljeVwiXG4gICAgICB9LFxuICAgICAgXCJDbHVzdGVyUG9saWN5QmluZGluZ1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5QmluZGluZ1wiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lCaW5kaW5nXCJcbiAgICAgIH0sXG4gICAgICBcIkNsdXN0ZXJQb2xpY3lCaW5kaW5nTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5QmluZGluZ0xpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5QmluZGluZ0xpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiQ2x1c3RlclBvbGljeUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeUxpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5TGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJDbHVzdGVyUm9sZUJpbmRpbmdcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclJvbGVCaW5kaW5nXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclJvbGVCaW5kaW5nXCJcbiAgICAgIH0sXG4gICAgICBcIkNsdXN0ZXJSb2xlQmluZGluZ0xpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJSb2xlQmluZGluZ0xpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiQ29uZmlnXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19Db25maWdcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29uZmlnXCJcbiAgICAgIH0sXG4gICAgICBcIkNvbnRhaW5lclN0YXR1c1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Db250YWluZXJTdGF0dXNcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcIkRlcGxveW1lbnRDb25maWdMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudENvbmZpZ0xpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q29uZmlnTGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJFbmRwb2ludHNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW5kcG9pbnRzXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50c1wiXG4gICAgICB9LFxuICAgICAgXCJFbmRwb2ludHNMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VuZHBvaW50c0xpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW5kcG9pbnRzTGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJFbnZWYXJcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXG4gICAgICB9LFxuICAgICAgXCJFdmVudExpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRXZlbnRMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkV2ZW50TGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJHcm91cFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfdXNlcl9Hcm91cFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkdyb3VwXCJcbiAgICAgIH0sXG4gICAgICBcIkdyb3VwTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfdXNlcl9Hcm91cExpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Hcm91cExpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiSWRlbnRpdHlcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfSWRlbnRpdHlcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JZGVudGl0eVwiXG4gICAgICB9LFxuICAgICAgXCJJZGVudGl0eUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfSWRlbnRpdHlMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSWRlbnRpdHlMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIkltYWdlTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfSW1hZ2VMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIkltYWdlU3RyZWFtTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfSW1hZ2VTdHJlYW1MaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VTdHJlYW1MaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIkxvY2FsU3ViamVjdEFjY2Vzc1Jldmlld1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Mb2NhbFN1YmplY3RBY2Nlc3NSZXZpZXdcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Mb2NhbFN1YmplY3RBY2Nlc3NSZXZpZXdcIlxuICAgICAgfSxcbiAgICAgIFwiTmFtZXNwYWNlXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05hbWVzcGFjZVwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lc3BhY2VcIlxuICAgICAgfSxcbiAgICAgIFwiTmFtZXNwYWNlTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19OYW1lc3BhY2VMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVzcGFjZUxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiTm9kZVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ob2RlXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVcIlxuICAgICAgfSxcbiAgICAgIFwiTm9kZUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTm9kZUxpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZUxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiT0F1dGhBY2Nlc3NUb2tlblwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhBY2Nlc3NUb2tlblwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQWNjZXNzVG9rZW5cIlxuICAgICAgfSxcbiAgICAgIFwiT0F1dGhBY2Nlc3NUb2tlbkxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQWNjZXNzVG9rZW5MaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhBY2Nlc3NUb2tlbkxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiT0F1dGhBdXRob3JpemVUb2tlblwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhBdXRob3JpemVUb2tlblwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQXV0aG9yaXplVG9rZW5cIlxuICAgICAgfSxcbiAgICAgIFwiT0F1dGhBdXRob3JpemVUb2tlbkxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQXV0aG9yaXplVG9rZW5MaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhBdXRob3JpemVUb2tlbkxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiT0F1dGhDbGllbnRcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQ2xpZW50XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhDbGllbnRcIlxuICAgICAgfSxcbiAgICAgIFwiT0F1dGhDbGllbnRBdXRob3JpemF0aW9uXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aENsaWVudEF1dGhvcml6YXRpb25cIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudEF1dGhvcml6YXRpb25cIlxuICAgICAgfSxcbiAgICAgIFwiT0F1dGhDbGllbnRBdXRob3JpemF0aW9uTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhDbGllbnRBdXRob3JpemF0aW9uTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50QXV0aG9yaXphdGlvbkxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiT0F1dGhDbGllbnRMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aENsaWVudExpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudExpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiT2JqZWN0TWV0YVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgfSxcbiAgICAgIFwiUGVyc2lzdGVudFZvbHVtZVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVcIlxuICAgICAgfSxcbiAgICAgIFwiUGVyc2lzdGVudFZvbHVtZUNsYWltXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVDbGFpbVwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIlxuICAgICAgfSxcbiAgICAgIFwiUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbUxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiUGVyc2lzdGVudFZvbHVtZUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUxpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZUxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiUG9kTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZExpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiUG9saWN5XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1BvbGljeVwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeVwiXG4gICAgICB9LFxuICAgICAgXCJQb2xpY3lCaW5kaW5nXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1BvbGljeUJpbmRpbmdcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lCaW5kaW5nXCJcbiAgICAgIH0sXG4gICAgICBcIlBvbGljeUJpbmRpbmdMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1BvbGljeUJpbmRpbmdMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5QmluZGluZ0xpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiUG9saWN5TGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5TGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJQcm9qZWN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19wcm9qZWN0X1Byb2plY3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qcm9qZWN0XCJcbiAgICAgIH0sXG4gICAgICBcIlByb2plY3RMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19wcm9qZWN0X1Byb2plY3RMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdExpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiUHJvamVjdFJlcXVlc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3Byb2plY3RfUHJvamVjdFJlcXVlc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qcm9qZWN0UmVxdWVzdFwiXG4gICAgICB9LFxuICAgICAgXCJRdWFudGl0eVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19yZXNvdXJjZV9RdWFudGl0eVwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVwiXG4gICAgICB9LFxuICAgICAgXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JlcGxpY2F0aW9uQ29udHJvbGxlckxpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVwbGljYXRpb25Db250cm9sbGVyTGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJSZXNvdXJjZVF1b3RhXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1Jlc291cmNlUXVvdGFcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VRdW90YVwiXG4gICAgICB9LFxuICAgICAgXCJSZXNvdXJjZVF1b3RhTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVF1b3RhTGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJSb2xlXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1JvbGVcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlXCJcbiAgICAgIH0sXG4gICAgICBcIlJvbGVCaW5kaW5nXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1JvbGVCaW5kaW5nXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZUJpbmRpbmdcIlxuICAgICAgfSxcbiAgICAgIFwiUm9sZUJpbmRpbmdMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1JvbGVCaW5kaW5nTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVCaW5kaW5nTGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJSb2xlTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Sb2xlTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlJvb3RQYXRoc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvYXBpX1Jvb3RQYXRoc1wiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Sb290UGF0aHNcIlxuICAgICAgfSxcbiAgICAgIFwiUm91dGVMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19yb3V0ZV9Sb3V0ZUxpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb3V0ZUxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiU2VjcmV0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlY3JldFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWNyZXRcIlxuICAgICAgfSxcbiAgICAgIFwiU2VjcmV0TGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWNyZXRMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3JldExpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIlxuICAgICAgfSxcbiAgICAgIFwiU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c0xpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiU2VydmljZUFjY291bnRcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VydmljZUFjY291bnRcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZUFjY291bnRcIlxuICAgICAgfSxcbiAgICAgIFwiU2VydmljZUFjY291bnRMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlcnZpY2VBY2NvdW50TGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlQWNjb3VudExpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiU2VydmljZUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VydmljZUxpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZUxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiU3RhdHVzXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1N0YXR1c1wiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwiU3ViamVjdEFjY2Vzc1Jldmlld1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9TdWJqZWN0QWNjZXNzUmV2aWV3XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU3ViamVjdEFjY2Vzc1Jldmlld1wiXG4gICAgICB9LFxuICAgICAgXCJTdWJqZWN0QWNjZXNzUmV2aWV3UmVzcG9uc2VcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fU3ViamVjdEFjY2Vzc1Jldmlld1Jlc3BvbnNlXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU3ViamVjdEFjY2Vzc1Jldmlld1Jlc3BvbnNlXCJcbiAgICAgIH0sXG4gICAgICBcIlRhZ0V2ZW50XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19pbWFnZV9UYWdFdmVudFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRhZ0V2ZW50XCJcbiAgICAgIH0sXG4gICAgICBcIlRlbXBsYXRlXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc190ZW1wbGF0ZV9UZW1wbGF0ZVwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRlbXBsYXRlXCJcbiAgICAgIH0sXG4gICAgICBcIlRlbXBsYXRlTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfdGVtcGxhdGVfVGVtcGxhdGVMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVGVtcGxhdGVMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlVzZXJcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfVXNlclwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlVzZXJcIlxuICAgICAgfSxcbiAgICAgIFwiVXNlckxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfVXNlckxpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Vc2VyTGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJXYXRjaEV2ZW50XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3dhdGNoX1dhdGNoRXZlbnRcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuV2F0Y2hFdmVudFwiXG4gICAgICB9XG4gICAgfSxcbiAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWVcbiAgfVxuXG5cbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwic2NoZW1hLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5tb2R1bGUgS3ViZXJuZXRlcyB7XG4gIFxuICBcbiAgdmFyIGhpZGRlblByb3BlcnRpZXMgPSBbJ3N0YXR1cycsICdkZWxldGlvblRpbWVzdGFtcCddO1xuXG4gIGZ1bmN0aW9uIHdpdGhQcm9wZXJ0eShzY2hlbWE6YW55LCBuYW1lOnN0cmluZywgYWN0aW9uOihhbnkpID0+IHZvaWQpIHtcbiAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXNbbmFtZV0pIHtcbiAgICAgIGFjdGlvbihzY2hlbWEucHJvcGVydGllc1tuYW1lXSk7XG4gICAgfVxuICB9XG4gIFxuICBmdW5jdGlvbiBoaWRlUHJvcGVydGllcyhzY2hlbWEpIHtcbiAgICBfLmZvckVhY2goaGlkZGVuUHJvcGVydGllcywgKHByb3BlcnR5KSA9PiB7XG4gICAgICB3aXRoUHJvcGVydHkoc2NoZW1hLCBwcm9wZXJ0eSwgKHByb3BlcnR5KSA9PiB7XG4gICAgICAgIHByb3BlcnR5LmhpZGRlbiA9IHRydWU7XG4gICAgICB9KVxuICAgIH0pO1xuICB9XG4gIFxuICBfbW9kdWxlLmZhY3RvcnkoJ0t1YmVybmV0ZXNTY2hlbWEnLCBbJ1NjaGVtYVJlZ2lzdHJ5JywgKHNjaGVtYXM6SGF3dGlvRm9ybXMuU2NoZW1hUmVnaXN0cnkpID0+IHtcbiAgICBjb25maWd1cmVTY2hlbWEoKTtcbiAgICBcbiAgICBzY2hlbWFzLmFkZExpc3RlbmVyKFwiazhzIHNjaGVtYSBjdXN0b21pemVyXCIsIChuYW1lLCBzY2hlbWEpID0+IHtcbiAgICAgIGlmIChzY2hlbWEucHJvcGVydGllcykge1xuICAgICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMubmFtZSkge1xuICAgICAgICAgIHNjaGVtYS5jb250cm9scyA9IFsnbmFtZScsICcqJ107XG4gICAgICAgIH1cbiAgICAgICAgd2l0aFByb3BlcnR5KHNjaGVtYSwgJ3BvcnRhbElQJywgKHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgcHJvcGVydHkubGFiZWwgPSBcIlBvcnRhbCBJUFwiXG4gICAgICAgIH0pO1xuICAgICAgICB3aXRoUHJvcGVydHkoc2NoZW1hLCAncHVibGljSVBzJywgKHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgcHJvcGVydHkubGFiZWwgPSBcIlB1YmxpYyBJUHNcIlxuICAgICAgICB9KTtcbiAgICAgICAgd2l0aFByb3BlcnR5KHNjaGVtYSwgJ1NwZWMnLCAocHJvcGVydHkpID0+IHtcbiAgICAgICAgICBwcm9wZXJ0eS5sYWJlbCA9ICdmYWxzZSc7XG4gICAgICAgIH0pO1xuICAgICAgICB3aXRoUHJvcGVydHkoc2NoZW1hLCAnTWV0YWRhdGEnLCAocHJvcGVydHkpID0+IHtcbiAgICAgICAgICBwcm9wZXJ0eS5sYWJlbCA9ICdmYWxzZSc7XG4gICAgICAgIH0pO1xuICAgICAgICBoaWRlUHJvcGVydGllcyhzY2hlbWEpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoXy5lbmRzV2l0aChuYW1lLCBcIlNlcnZpY2VTcGVjXCIpKSB7XG4gICAgICAgIHNjaGVtYS5jb250cm9scyA9IFtcInBvcnRhbElQXCIsIFwiY3JlYXRlRXh0ZXJuYWxMb2FkQmFsYW5jZXJcIiwgXCJzZXNzaW9uQWZmaW5pdHlcIiwgXCJwdWJsaWNJUHNcIiwgXCJwb3J0c1wiLCBcInNlbGVjdG9yXCIsIFwiKlwiXTtcbiAgICAgICAgd2l0aFByb3BlcnR5KHNjaGVtYSwgJ3Nlc3Npb25BZmZpbml0eScsIChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhcIlNjaGVtYTogXCIsIHNjaGVtYSk7XG4gICAgICAgICAgcHJvcGVydHkuZW51bSA9IFsnTm9uZScsICdDbGllbnRJUCddO1xuICAgICAgICAgIHByb3BlcnR5LmRlZmF1bHQgPSAnTm9uZSc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoXy5lbmRzV2l0aChuYW1lLCBcIlNlcnZpY2VcIikpIHtcbiAgICAgICAgc2NoZW1hLmNvbnRyb2xzID0gdW5kZWZpbmVkO1xuICAgICAgICBzY2hlbWEudGFicyA9IHtcbiAgICAgICAgICAnQmFzaWMgSW5mb3JtYXRpb24nOiBbJ21ldGFkYXRhJ10sXG4gICAgICAgICAgJ0RldGFpbHMnOiBbJyonXVxuICAgICAgICB9XG4gICAgICAgIGxvZy5kZWJ1ZyhcIk5hbWU6IFwiLCBuYW1lLCBcIiBTY2hlbWE6IFwiLCBzY2hlbWEpO1xuICAgICAgfVxuICAgICBcbiAgICB9KTtcbiAgICBcbiAgICBcbiAgICBzY2hlbWFzLmFkZFNjaGVtYSgna3ViZXJuZXRlcycsIDxhbnk+IHNjaGVtYSk7XG4gICAgLy8gbm93IGxldHMgaXRlcmF0ZSBhbmQgYWRkIGFsbCB0aGUgZGVmaW5pdGlvbnMgdG9vXG4gICAgYW5ndWxhci5mb3JFYWNoKHNjaGVtYS5kZWZpbml0aW9ucywgKGRlZmluaXRpb24sIHR5cGVOYW1lKSA9PiB7XG4gICAgICAvL3NjaGVtYXMuYWRkU2NoZW1hKHR5cGVOYW1lLCBkZWZpbml0aW9uKTtcbiAgICAgIHNjaGVtYXMuYWRkU2NoZW1hKFwiIy9kZWZpbml0aW9ucy9cIiArIHR5cGVOYW1lLCBkZWZpbml0aW9uKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XSk7XG5cblxuICBcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIC8vIGZhY2FkZSB0aGlzIHRvIHRoZSB3YXRjaGVyIHNlcnZpY2VcbiAgY2xhc3MgS3ViZXJuZXRlc1N0YXRlSW1wbCBpbXBsZW1lbnRzIEt1YmVybmV0ZXNTdGF0ZSB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB3YXRjaGVyOldhdGNoZXJTZXJ2aWNlKSB7XG4gICAgfVxuICAgIGdldCBuYW1lc3BhY2VzKCk6QXJyYXk8c3RyaW5nPiB7XG4gICAgICByZXR1cm4gXy5tYXAodGhpcy53YXRjaGVyLmdldE9iamVjdHMoV2F0Y2hUeXBlcy5OQU1FU1BBQ0VTKSwgKG5hbWVzcGFjZSkgPT4ge1xuICAgICAgICByZXR1cm4gbmFtZXNwYWNlLm1ldGFkYXRhLm5hbWU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IHNlbGVjdGVkTmFtZXNwYWNlKCk6c3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLndhdGNoZXIuZ2V0TmFtZXNwYWNlKCk7XG4gICAgfVxuICAgIHNldCBzZWxlY3RlZE5hbWVzcGFjZShuYW1lc3BhY2U6c3RyaW5nKSB7XG4gICAgICB0aGlzLndhdGNoZXIuc2V0TmFtZXNwYWNlKG5hbWVzcGFjZSk7XG4gICAgfVxuICB9XG5cbiAgX21vZHVsZS5mYWN0b3J5KCdLdWJlcm5ldGVzU3RhdGUnLCBbJ1dhdGNoZXJTZXJ2aWNlJywgKHdhdGNoZXI6V2F0Y2hlclNlcnZpY2UpID0+IHtcbiAgICByZXR1cm4gbmV3IEt1YmVybmV0ZXNTdGF0ZUltcGwod2F0Y2hlcik7XG4gIH1dKTtcblxuICAvLyBUT0RPIHRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGEgc2VydmljZSByZWFsbHlcbiAgX21vZHVsZS5mYWN0b3J5KCdLdWJlcm5ldGVzQXBpVVJMJywgKCkgPT4ga3ViZXJuZXRlc0FwaVVybCgpKTtcblxuICAvLyBUT0RPIHdlJ2xsIGdldCByaWQgb2YgdGhpcy4uLlxuICBfbW9kdWxlLmZhY3RvcnkoJ0t1YmVybmV0ZXNWZXJzaW9uJywgWygpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcXVlcnk6ICgpID0+IG51bGxcbiAgICB9XG4gIH1dKTtcblxuICAvLyBUT0RPIGxldCdzIG1vdmUgdGhlc2UgaW50byBLdWJlcm5ldGVzTW9kZWwgc28gY29udHJvbGxlcnMgZG9uJ3QgaGF2ZSB0byBpbmplY3QgdGhlbSBzZXBhcmF0ZWx5XG4gIF9tb2R1bGUuZmFjdG9yeSgnS3ViZXJuZXRlc1BvZHMnLCBbJ0t1YmVybmV0ZXNNb2RlbCcsIChLdWJlcm5ldGVzTW9kZWwpID0+IHtcbiAgICByZXR1cm4gS3ViZXJuZXRlc01vZGVsWydwb2RzUmVzb3VyY2UnXTtcbiAgfV0pO1xuXG4gIF9tb2R1bGUuZmFjdG9yeSgnS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnMnLCBbJ0t1YmVybmV0ZXNNb2RlbCcsIChLdWJlcm5ldGVzTW9kZWwpID0+IHtcbiAgICByZXR1cm4gS3ViZXJuZXRlc01vZGVsWydyZXBsaWNhdGlvbmNvbnRyb2xsZXJzUmVzb3VyY2UnXTtcbiAgfV0pO1xuXG4gIF9tb2R1bGUuZmFjdG9yeSgnS3ViZXJuZXRlc1NlcnZpY2VzJywgWydLdWJlcm5ldGVzTW9kZWwnLCAoS3ViZXJuZXRlc01vZGVsKSA9PiB7XG4gICAgcmV0dXJuIEt1YmVybmV0ZXNNb2RlbFsnc2VydmljZXNSZXNvdXJjZSddO1xuICB9XSk7XG5cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNNb2RlbC50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgRmlsZURyb3BDb250cm9sbGVyID0gY29udHJvbGxlcihcIkZpbGVEcm9wQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJGaWxlVXBsb2FkZXJcIiwgJyRodHRwJywgKCRzY29wZSwgbW9kZWw6S3ViZXJuZXRlc01vZGVsU2VydmljZSwgRmlsZVVwbG9hZGVyLCAkaHR0cDpuZy5JSHR0cFNlcnZpY2UpID0+IHtcblxuICAgICAgdmFyIGxvZyA9IExvZ2dlci5nZXQoJ2t1YmVybmV0ZXMtZmlsZS11cGxvYWRlcicpO1xuXG4gICAgICB2YXIgdXBsb2FkZXIgPSAkc2NvcGUudXBsb2FkZXIgPSA8RmlsZVVwbG9hZC5GaWxlVXBsb2FkZXI+IG5ldyBGaWxlVXBsb2FkZXIoPEZpbGVVcGxvYWQuSU9wdGlvbnM+e1xuICAgICAgICBhdXRvVXBsb2FkOiBmYWxzZSxcbiAgICAgICAgcmVtb3ZlQWZ0ZXJVcGxvYWQ6IHRydWUsXG4gICAgICAgIHVybDoga3ViZXJuZXRlc0FwaVVybCgpXG4gICAgICB9KTtcblxuICAgICAgJHNjb3BlLnVwbG9hZGVyLm9uQWZ0ZXJBZGRpbmdGaWxlID0gKGZpbGUpID0+IHtcbiAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKHJlYWRlci5yZWFkeVN0YXRlID09PSAyKSB7XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJGaWxlIGFkZGVkOiBcIiwgZmlsZSk7ICAgICAgICBcbiAgICAgICAgICAgIHZhciBkYXRhID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgICAgICAgIHZhciBvYmogPSBudWxsO1xuICAgICAgICAgICAgaWYgKF8uZW5kc1dpdGgoZmlsZS5fZmlsZS5uYW1lLCAnLmpzb24nKSkge1xuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJQYXJzaW5nIEpTT04gZmlsZVwiKTtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBvYmogPSBhbmd1bGFyLmZyb21Kc29uKGRhdGEpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJGYWlsZWQgdG8gcmVhZCBkcm9wcGVkIGZpbGUgXCIsIGZpbGUuX2ZpbGUubmFtZSwgXCI6IFwiLCBlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChfLmVuZHNXaXRoKGZpbGUuX2ZpbGUubmFtZSwgJy55YW1sJykpIHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiUGFyc2luZyBZQU1MIGZpbGVcIik7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2JqID0ganN5YW1sLmxvYWQoZGF0YSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkZhaWxlZCB0byByZWFkIGRyb3BwZWQgZmlsZSBcIiwgZmlsZS5fZmlsZS5uYW1lLCBcIjogXCIsIGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJVbmtub3duIGZpbGUgdHlwZSBmb3IgZmlsZTogXCIsIGZpbGUuX2ZpbGUubmFtZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkRyb3BwZWQgb2JqZWN0OiBcIiwgb2JqKTtcbiAgICAgICAgICAgIGlmICghS3ViZXJuZXRlc0FQSS5nZXROYW1lc3BhY2Uob2JqKSkge1xuICAgICAgICAgICAgICBvYmoubWV0YWRhdGEubmFtZXNwYWNlID0gbW9kZWwuY3VycmVudE5hbWVzcGFjZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgS3ViZXJuZXRlc0FQSS5wdXQoe1xuICAgICAgICAgICAgICBvYmplY3Q6IG9iaixcbiAgICAgICAgICAgICAgc3VjY2VzczogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbihcInN1Y2Nlc3NcIiwgXCJBcHBsaWVkIFwiICsgZmlsZS5fZmlsZS5uYW1lKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhcIkdvdCBlcnJvciBhcHBseWluZ1wiLCBmaWxlLl9maWxlLm5hbWUsIFwiOiBcIiwgZXJyKTtcbiAgICAgICAgICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbihcIndhcm5pbmdcIiwgXCJGYWlsZWQgdG8gYXBwbHkgXCIgKyBmaWxlLl9maWxlLm5hbWUgKyBcIiwgZXJyb3I6IFwiICsgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZS5fZmlsZSk7XG4gICAgICB9O1xuXG4gICAgICAkc2NvcGUudXBsb2FkZXIub25CZWZvcmVVcGxvYWRJdGVtID0gKGl0ZW0pID0+IHtcbiAgICAgICAgbG9nLmRlYnVnKFwiVXBsb2FkaW5nOiBcIiwgaXRlbSk7XG4gICAgICAgIC8vQ29yZS5ub3RpZmljYXRpb24oJ2luZm8nLCAnVXBsb2FkaW5nICcgKyBpdGVtKTtcbiAgICAgIH07XG5cbiAgICAgICRzY29wZS51cGxvYWRlci5vblN1Y2Nlc3NJdGVtID0gKGl0ZW06RmlsZVVwbG9hZC5JRmlsZUl0ZW0pID0+IHtcbiAgICAgICAgbG9nLmRlYnVnKFwib25TdWNjZXNzSXRlbTogXCIsIGl0ZW0pO1xuICAgICAgfTtcblxuICAgICAgJHNjb3BlLnVwbG9hZGVyLm9uRXJyb3JJdGVtID0gKGl0ZW0sIHJlc3BvbnNlLCBzdGF0dXMpID0+IHtcbiAgICAgICAgbG9nLmRlYnVnKFwiRmFpbGVkIHRvIGFwcGx5LCByZXNwb25zZTogXCIsIHJlc3BvbnNlLCBcIiBzdGF0dXM6IFwiLCBzdGF0dXMpO1xuICAgICAgfVxuXG4gIH1dKTtcblx0XG5cdGV4cG9ydCB2YXIgTmFtZXNwYWNlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoJ05hbWVzcGFjZUNvbnRyb2xsZXInLCBbJyRzY29wZScsICdXYXRjaGVyU2VydmljZScsICgkc2NvcGUsIHdhdGNoZXI6V2F0Y2hlclNlcnZpY2UpID0+IHtcblx0XHQkc2NvcGUubmFtZXNwYWNlcyA9IHdhdGNoZXIuZ2V0T2JqZWN0cygnbmFtZXNwYWNlcycpO1xuXHRcdCRzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKCduYW1lc3BhY2VzJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xuXHRcdFx0aWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuXHRcdFx0XHQkc2NvcGUubmFtZXNwYWNlID0gd2F0Y2hlci5nZXROYW1lc3BhY2UoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHQkc2NvcGUuJHdhdGNoKCduYW1lc3BhY2UnLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XG5cdFx0XHRpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG5cdFx0XHRcdGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcblx0XHRcdFx0XHR3YXRjaGVyLnNldE5hbWVzcGFjZShuZXdWYWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fV0pO1xuXG4gIGV4cG9ydCB2YXIgVG9wTGV2ZWwgPSBjb250cm9sbGVyKFwiVG9wTGV2ZWxcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc1ZlcnNpb25cIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgKCRzY29wZSwgS3ViZXJuZXRlc1ZlcnNpb246bmcucmVzb3VyY2UuSVJlc291cmNlQ2xhc3M8YW55PiwgS3ViZXJuZXRlc1N0YXRlKSA9PiB7XG5cbiAgICAkc2NvcGUudmVyc2lvbiA9IHVuZGVmaW5lZDtcblxuICAgICRzY29wZS5zaG93QXBwVmlldyA9IGlzQXBwVmlldygpO1xuXG4gICAgJHNjb3BlLmlzQWN0aXZlID0gKGhyZWYpID0+IHtcbiAgICAgIHJldHVybiBpc0xpbmtBY3RpdmUoaHJlZik7XG4gICAgfTtcblxuICAgICRzY29wZS5tb2RlID0gJ3lhbWwnO1xuICAgICRzY29wZS5yYXdNb2RlID0gdHJ1ZTtcbiAgICAkc2NvcGUuZGlydHkgPSBmYWxzZTtcbiAgICAkc2NvcGUucmVhZE9ubHkgPSB0cnVlO1xuICAgICRzY29wZS5yYXdNb2RlbCA9IG51bGw7XG5cbiAgICAkc2NvcGUuJG9uKCdoYXd0aW9FZGl0b3JfZGVmYXVsdF9kaXJ0eScsICgkZXZlbnQsIGRpcnR5KSA9PiB7XG4gICAgICAkc2NvcGUuZGlydHkgPSBkaXJ0eTtcbiAgICB9KTtcblxuICAgICRzY29wZS5zYXZlID0gKHJhd01vZGVsKSA9PiB7XG4gICAgICB2YXIgb2JqOmFueSA9IG51bGw7XG4gICAgICB2YXIgc3RyID0gcmF3TW9kZWwucmVwbGFjZSgvXFx0L2csIFwiICAgIFwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG9iaiA9IGpzeWFtbC5sb2FkKHN0cik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oXCJ3YXJuaW5nXCIsIFwiRmFpbGVkIHRvIHNhdmUgb2JqZWN0LCBlcnJvcjogXFxcIlwiICsgZXJyICsgXCJcXFwiXCIpO1xuICAgICAgfVxuICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgJHNjb3BlLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgIEt1YmVybmV0ZXNBUEkucHV0KHtcbiAgICAgICAgb2JqZWN0OiBvYmosXG4gICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gICAgICAgICAgJHNjb3BlLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oXCJzdWNjZXNzXCIsIFwiU2F2ZWQgb2JqZWN0IFwiICsgZ2V0TmFtZShvYmopKTtcbiAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiR290IGVycm9yOiBcIiwgZXJyKTtcbiAgICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbihcIndhcm5pbmdcIiwgXCJGYWlsZWQgdG8gc2F2ZSBvYmplY3QsIGVycm9yOiBcXFwiXCIgKyBlcnIubWVzc2FnZSArIFwiXFxcIlwiKTtcbiAgICAgICAgICAkc2NvcGUuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG5cbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcblxuICAgIEt1YmVybmV0ZXNWZXJzaW9uLnF1ZXJ5KChyZXNwb25zZSkgPT4ge1xuICAgICAgJHNjb3BlLnZlcnNpb24gPSByZXNwb25zZTtcbiAgICB9KTtcblxuICB9XSk7XG5cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxubW9kdWxlIEt1YmVybmV0ZXMge1xuXHRcblx0ZXhwb3J0IHZhciBOYW1lc3BhY2VDb250cm9sbGVyID0gY29udHJvbGxlcihcIk5hbWVzcGFjZUNvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiV2F0Y2hlclNlcnZpY2VcIiwgKCRzY29wZSwgd2F0Y2hlcjpXYXRjaGVyU2VydmljZSkgPT4ge1xuXHRcdCRzY29wZS53YXRjaGVyID0gd2F0Y2hlcjtcblx0XHQkc2NvcGUubmFtZXNwYWNlT2JqZWN0cyA9IHdhdGNoZXIuZ2V0T2JqZWN0cygnbmFtZXNwYWNlcycpO1xuXHRcdCRzY29wZS5uYW1lc3BhY2UgPSB3YXRjaGVyLmdldE5hbWVzcGFjZSgpO1xuXHRcdCRzY29wZS5uYW1lc3BhY2VzID0gW107XG5cdFx0JHNjb3BlLiR3YXRjaCgnbmFtZXNwYWNlJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xuXHRcdFx0aWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuXHRcdFx0XHR3YXRjaGVyLnNldE5hbWVzcGFjZShuZXdWYWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0JHNjb3BlLiR3YXRjaCgnd2F0Y2hlci5nZXROYW1lc3BhY2UoKScsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcblx0XHRcdGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcblx0XHRcdFx0JHNjb3BlLm5hbWVzcGFjZSA9IG5ld1ZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdCRzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKCduYW1lc3BhY2VPYmplY3RzJywgKG5hbWVzcGFjZU9iamVjdHMpID0+IHtcblx0XHRcdCRzY29wZS5uYW1lc3BhY2VzID0gXy5tYXAobmFtZXNwYWNlT2JqZWN0cywgKG5hbWVzcGFjZTphbnkpID0+IG5hbWVzcGFjZS5tZXRhZGF0YS5uYW1lKTtcblx0XHR9KVx0XHRcblx0fV0pO1xuXHRcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIHZhciBPdmVydmlld0RpcmVjdGl2ZSA9IF9tb2R1bGUuZGlyZWN0aXZlKFwia3ViZXJuZXRlc092ZXJ2aWV3XCIsIFtcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGNvbXBpbGVcIiwgXCIkaW50ZXJwb2xhdGVcIiwgXCIkdGltZW91dFwiLCBcIiR3aW5kb3dcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgJ0t1YmVybmV0ZXNNb2RlbCcsICgkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRjb21waWxlOm5nLklDb21waWxlU2VydmljZSwgJGludGVycG9sYXRlOm5nLklJbnRlcnBvbGF0ZVNlcnZpY2UsICR0aW1lb3V0Om5nLklUaW1lb3V0U2VydmljZSwgJHdpbmRvdzpuZy5JV2luZG93U2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzTW9kZWwpID0+IHtcblxuICAgIHZhciBsb2cgPSBMb2dnZXIuZ2V0KCdrdWJlcm5ldGVzLW92ZXJ2aWV3Jyk7XG4gICAgdmFyIG1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgIHZhciBzdGF0ZSA9IEt1YmVybmV0ZXNTdGF0ZTtcblxuICAgIHJldHVybiB7XG4gICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgcmVwbGFjZTogdHJ1ZSxcbiAgICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cikgPT4ge1xuICAgICAgICBzY29wZS5tb2RlbCA9IG1vZGVsO1xuICAgICAgICBlbGVtZW50LmNzcyh7dmlzaWJpbGl0eTogJ2hpZGRlbid9KTtcbiAgICAgICAgc2NvcGUuZ2V0RW50aXR5ID0gKHR5cGU6c3RyaW5nLCBrZXk6c3RyaW5nKSA9PiB7XG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdob3N0JzpcbiAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsLnBvZHNCeUhvc3Rba2V5XTtcbiAgICAgICAgICAgIGNhc2UgJ3BvZCc6XG4gICAgICAgICAgICAgIHJldHVybiBtb2RlbC5wb2RzQnlLZXlba2V5XTtcbiAgICAgICAgICAgIGNhc2UgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcic6XG4gICAgICAgICAgICAgIHJldHVybiBtb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzQnlLZXlba2V5XTtcbiAgICAgICAgICAgIGNhc2UgJ3NlcnZpY2UnOlxuICAgICAgICAgICAgICByZXR1cm4gbW9kZWwuc2VydmljZXNCeUtleVtrZXldO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUua3ViZXJuZXRlcyA9IHN0YXRlO1xuXG4gICAgICAgIHNjb3BlLmN1c3RvbWl6ZURlZmF1bHRPcHRpb25zID0gKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBvcHRpb25zLkVuZHBvaW50ID0gWydCbGFuaycsIHt9XTtcbiAgICAgICAgfTtcbiAgICAgICAgc2NvcGUubW91c2VFbnRlciA9ICgkZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoc2NvcGUuanNQbHVtYikge1xuICAgICAgICAgICAgYW5ndWxhci5lbGVtZW50KCRldmVudC5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcyhcImhvdmVyZWRcIik7XG4gICAgICAgICAgICBzY29wZS5qc1BsdW1iLmdldEVuZHBvaW50cygkZXZlbnQuY3VycmVudFRhcmdldCkuZm9yRWFjaCgoZW5kcG9pbnQpID0+IHtcbiAgICAgICAgICAgICAgZW5kcG9pbnQuY29ubmVjdGlvbnMuZm9yRWFjaCgoY29ubmVjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29ubmVjdGlvbi5pc0hvdmVyKCkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uc2V0SG92ZXIodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmVuZHBvaW50cy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vdXNlRW50ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQ6IGUuZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2NvcGUubW91c2VMZWF2ZSA9ICgkZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoc2NvcGUuanNQbHVtYikge1xuICAgICAgICAgICAgYW5ndWxhci5lbGVtZW50KCRldmVudC5jdXJyZW50VGFyZ2V0KS5yZW1vdmVDbGFzcyhcImhvdmVyZWRcIik7XG4gICAgICAgICAgICBzY29wZS5qc1BsdW1iLmdldEVuZHBvaW50cygkZXZlbnQuY3VycmVudFRhcmdldCkuZm9yRWFjaCgoZW5kcG9pbnQpID0+IHtcbiAgICAgICAgICAgICAgZW5kcG9pbnQuY29ubmVjdGlvbnMuZm9yRWFjaCgoY29ubmVjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uLmlzSG92ZXIoKSkge1xuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5zZXRIb3ZlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmVuZHBvaW50cy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vdXNlTGVhdmUoe1xuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQ6IGUuZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLypcbiAgICAgICAgc2NvcGUuY3VzdG9taXplRW5kcG9pbnRPcHRpb25zID0gKGpzUGx1bWIsIG5vZGUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICB2YXIgdHlwZSA9IG5vZGUuZWwuYXR0cignZGF0YS10eXBlJyk7XG4gICAgICAgICAgLy8gbG9nLmRlYnVnKFwiZW5kcG9pbnQgdHlwZTogXCIsIHR5cGUpO1xuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAncG9kJzpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZXJ2aWNlJzpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZXBsaWNhdGlvbkNvbnRyb2xsZXInOlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgICovXG4gICAgICAgIHNjb3BlLmN1c3RvbWl6ZUNvbm5lY3Rpb25PcHRpb25zID0gKGpzUGx1bWIsIGVkZ2UsIHBhcmFtcywgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIHZhciB0eXBlID0gZWRnZS5zb3VyY2UuZWwuYXR0cignZGF0YS10eXBlJyk7XG4gICAgICAgICAgb3B0aW9ucy5jb25uZWN0b3IgPSBbIFwiQmV6aWVyXCIsIHsgY3VydmluZXNzOiA1MCwgc3R1YjogMjUsIGFsd2F5c1Jlc3BlY3RTdHViczogdHJ1ZSB9IF07XG4gICAgICAgICAgcGFyYW1zLnBhaW50U3R5bGUgPSB7XG4gICAgICAgICAgICBsaW5lV2lkdGg6IDIsXG4gICAgICAgICAgICBzdHJva2VTdHlsZTogJyM1NTU1Y2MnXG4gICAgICAgICAgfTtcbiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3BvZCc6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VydmljZSc6XG4gICAgICAgICAgICAgIHBhcmFtcy5hbmNob3JzID0gW1xuICAgICAgICAgICAgICAgIFsgXCJDb250aW51b3VzXCIsIHsgZmFjZXM6IFtcInJpZ2h0XCJdIH0gXSxcbiAgICAgICAgICAgICAgICBbIFwiQ29udGludW91c1wiLCB7IGZhY2VzOiBbXCJsZWZ0XCJdIH0gXSBcbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgIFsxLCAwLjUsIDAsIDAsIC0xMCwgLTkwXSxcbiAgICAgICAgICAgICAgICBbMCwgMC41LCAwLCAwLCAtMTAsIC05MF1cbiAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcic6XG4gICAgICAgICAgICAgIHBhcmFtcy5hbmNob3JzID0gW1xuICAgICAgICAgICAgICAgIFsgXCJQZXJpbWV0ZXJcIiwgeyBzaGFwZTogXCJDaXJjbGVcIiB9IF0sXG4gICAgICAgICAgICAgICAgWyBcIkNvbnRpbnVvdXNcIiwgeyBmYWNlczogW1wicmlnaHRcIl0gfSBdXG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBbMCwgMC41LCAwLCAwLCAtMTAsIC05MF0sXG4gICAgICAgICAgICAgICAgWzEsIDAuNSwgMCwgMCwgLTEwLCAtOTBdXG4gICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vbG9nLmRlYnVnKFwiY29ubmVjdGlvbiBzb3VyY2UgdHlwZTogXCIsIHR5cGUpO1xuICAgICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiBpbnRlcnBvbGF0ZSh0ZW1wbGF0ZSwgY29uZmlnKSB7XG4gICAgICAgICAgcmV0dXJuICRpbnRlcnBvbGF0ZSh0ZW1wbGF0ZSkoY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRlbXBsYXRlLCB0aGluZ05hbWUsIHRoaW5nKSB7XG4gICAgICAgICAgdmFyIGNvbmZpZyA9IHt9O1xuICAgICAgICAgIGNvbmZpZ1t0aGluZ05hbWVdID0gdGhpbmc7XG4gICAgICAgICAgcmV0dXJuIGludGVycG9sYXRlKHRlbXBsYXRlLCBjb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRzKHRlbXBsYXRlLCB0aGluZ05hbWUsIHRoaW5ncykge1xuICAgICAgICAgIHJldHVybiB0aGluZ3MubWFwKCh0aGluZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodGVtcGxhdGUsIHRoaW5nTmFtZSwgdGhpbmcpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGVuZE5ld0VsZW1lbnRzKHBhcmVudEVsLCB0ZW1wbGF0ZSwgdGhpbmdOYW1lLCB0aGluZ3MpIHtcbiAgICAgICAgICB0aGluZ3MuZm9yRWFjaCgodGhpbmcpID0+IHtcbiAgICAgICAgICAgIHZhciBrZXkgPSB0aGluZ1snX2tleSddIHx8IHRoaW5nWydlbGVtZW50SWQnXSB8fCB0aGluZ1snaWQnXVxuICAgICAgICAgICAgdmFyIGV4aXN0aW5nID0gcGFyZW50RWwuZmluZChcIiNcIiArIGtleSApO1xuICAgICAgICAgICAgaWYgKCFleGlzdGluZy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZXhpc3Rpbmc6IFwiLCBleGlzdGluZywgXCIga2V5OiBcIiwga2V5KTtcbiAgICAgICAgICAgICAgcGFyZW50RWwuYXBwZW5kKCRjb21waWxlKGNyZWF0ZUVsZW1lbnQodGVtcGxhdGUsIHRoaW5nTmFtZSwgdGhpbmcpKShzY29wZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG5hbWVzcGFjZUZpbHRlcihpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0TmFtZXNwYWNlKGl0ZW0pID09PSBzY29wZS5rdWJlcm5ldGVzLnNlbGVjdGVkTmFtZXNwYWNlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGZpcnN0RHJhdygpIHtcbiAgICAgICAgICBsb2cuZGVidWcoXCJGaXJzdCBkcmF3XCIpO1xuICAgICAgICAgIGVsZW1lbnQuZW1wdHkoKTtcbiAgICAgICAgICB2YXIgc2VydmljZXMgPSBtb2RlbC5zZXJ2aWNlcztcbiAgICAgICAgICB2YXIgcmVwbGljYXRpb25Db250cm9sbGVycyA9IG1vZGVsLnJlcGxpY2F0aW9uQ29udHJvbGxlcnM7XG4gICAgICAgICAgdmFyIHBvZHMgPSBtb2RlbC5wb2RzO1xuICAgICAgICAgIHZhciBob3N0cyA9IG1vZGVsLmhvc3RzO1xuICAgICAgICAgIC8vIGxvZy5kZWJ1ZyhcImhvc3RzOiBcIiwgbW9kZWwuaG9zdHMpO1xuICAgICAgICAgIHZhciBwYXJlbnRFbCA9IGFuZ3VsYXIuZWxlbWVudCgkdGVtcGxhdGVDYWNoZS5nZXQoXCJvdmVydmlld1RlbXBsYXRlLmh0bWxcIikpO1xuICAgICAgICAgIHZhciBzZXJ2aWNlc0VsID0gcGFyZW50RWwuZmluZChcIi5zZXJ2aWNlc1wiKTtcbiAgICAgICAgICB2YXIgaG9zdHNFbCA9IHBhcmVudEVsLmZpbmQoXCIuaG9zdHNcIik7XG4gICAgICAgICAgdmFyIHJlcGxpY2F0aW9uQ29udHJvbGxlcnNFbCA9IHBhcmVudEVsLmZpbmQoXCIucmVwbGljYXRpb25Db250cm9sbGVyc1wiKTtcblxuICAgICAgICAgIHNlcnZpY2VzRWwuYXBwZW5kKGNyZWF0ZUVsZW1lbnRzKCR0ZW1wbGF0ZUNhY2hlLmdldChcInNlcnZpY2VUZW1wbGF0ZS5odG1sXCIpLCAnc2VydmljZScsIHNlcnZpY2VzLmZpbHRlcihuYW1lc3BhY2VGaWx0ZXIpKSk7XG4gICAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyc0VsLmFwcGVuZChjcmVhdGVFbGVtZW50cygkdGVtcGxhdGVDYWNoZS5nZXQoXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJUZW1wbGF0ZS5odG1sXCIpLCAncmVwbGljYXRpb25Db250cm9sbGVyJywgcmVwbGljYXRpb25Db250cm9sbGVycy5maWx0ZXIobmFtZXNwYWNlRmlsdGVyKSkpO1xuXG4gICAgICAgICAgaG9zdHMuZm9yRWFjaCgoaG9zdCkgPT4ge1xuICAgICAgICAgICAgdmFyIGhvc3RFbCA9IGFuZ3VsYXIuZWxlbWVudChjcmVhdGVFbGVtZW50KCR0ZW1wbGF0ZUNhY2hlLmdldChcIm92ZXJ2aWV3SG9zdFRlbXBsYXRlLmh0bWxcIiksICdob3N0JywgaG9zdCkpO1xuICAgICAgICAgICAgdmFyIHBvZENvbnRhaW5lciA9IGFuZ3VsYXIuZWxlbWVudChob3N0RWwuZmluZCgnLnBvZC1jb250YWluZXInKSk7XG4gICAgICAgICAgICBwb2RDb250YWluZXIuYXBwZW5kKGNyZWF0ZUVsZW1lbnRzKCR0ZW1wbGF0ZUNhY2hlLmdldChcInBvZFRlbXBsYXRlLmh0bWxcIiksIFwicG9kXCIsIGhvc3QucG9kcykpO1xuICAgICAgICAgICAgaG9zdHNFbC5hcHBlbmQoaG9zdEVsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvL3BhcmVudEVsLmFwcGVuZChjcmVhdGVFbGVtZW50cygkdGVtcGxhdGVDYWNoZS5nZXQoXCJwb2RUZW1wbGF0ZS5odG1sXCIpLCAncG9kJywgcG9kcykpO1xuICAgICAgICAgIGVsZW1lbnQuYXBwZW5kKCRjb21waWxlKHBhcmVudEVsKShzY29wZSkpO1xuICAgICAgICAgICR0aW1lb3V0KCgpID0+IHsgZWxlbWVudC5jc3Moe3Zpc2liaWxpdHk6ICd2aXNpYmxlJ30pOyB9LCAyNTApO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgICAgIHNjb3BlLiRlbWl0KCdqc3BsdW1iRG9XaGlsZVN1c3BlbmRlZCcsICgpID0+IHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIlVwZGF0ZVwiKTtcbiAgICAgICAgICAgIHZhciBzZXJ2aWNlcyA9IG1vZGVsLnNlcnZpY2VzO1xuICAgICAgICAgICAgdmFyIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMgPSBtb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzO1xuICAgICAgICAgICAgdmFyIHBvZHMgPSBtb2RlbC5wb2RzO1xuICAgICAgICAgICAgdmFyIGhvc3RzID0gbW9kZWwuaG9zdHM7XG4gICAgICAgICAgICB2YXIgcGFyZW50RWwgPSBlbGVtZW50LmZpbmQoJ1toYXd0aW8tanNwbHVtYl0nKTtcbiAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IHBhcmVudEVsLmZpbmQoJy5qc3BsdW1iLW5vZGUnKTtcbiAgICAgICAgICAgIGNoaWxkcmVuLmVhY2goKGluZGV4LCBjKSA9PiB7XG4gICAgICAgICAgICAgIHZhciBjaGlsZCA9IGFuZ3VsYXIuZWxlbWVudChjKTtcbiAgICAgICAgICAgICAgdmFyIGtleSA9IGNoaWxkLmF0dHIoJ2lkJyk7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1Zygna2V5OiAnLCBrZXkpO1xuICAgICAgICAgICAgICBpZiAoQ29yZS5pc0JsYW5rKGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSBjaGlsZC5hdHRyKCdkYXRhLXR5cGUnKTtcbiAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG9zdCc6XG4gICAgICAgICAgICAgICAgICBpZiAoa2V5IGluIG1vZGVsLnBvZHNCeUhvc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2VydmljZSc6XG4gICAgICAgICAgICAgICAgICBpZiAoa2V5IGluIG1vZGVsLnNlcnZpY2VzQnlLZXkgJiYgZ2V0TmFtZXNwYWNlKG1vZGVsLnNlcnZpY2VzQnlLZXlba2V5XSkgPT0gc2NvcGUua3ViZXJuZXRlcy5zZWxlY3RlZE5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2VydmljZSA9IG1vZGVsLnNlcnZpY2VzQnlLZXlba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuYXR0cignY29ubmVjdC10bycsIHNlcnZpY2UuY29ubmVjdFRvKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAncG9kJzpcbiAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICBpZiAoaGFzSWQocG9kcywgaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICBpZiAoa2V5IGluIG1vZGVsLnBvZHNCeUtleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdyZXBsaWNhdGlvbkNvbnRyb2xsZXInOlxuICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiBtb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzQnlLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcGxpY2F0aW9uQ29udHJvbGxlciA9IG1vZGVsLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNCeUtleVtrZXldO1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5hdHRyKCdjb25uZWN0LXRvJywgcmVwbGljYXRpb25Db250cm9sbGVyLmNvbm5lY3RUbyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJJZ25vcmluZyBlbGVtZW50IHdpdGggdW5rbm93biB0eXBlXCIpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIlJlbW92aW5nOiBcIiwga2V5KTtcbiAgICAgICAgICAgICAgY2hpbGQucmVtb3ZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzZXJ2aWNlc0VsID0gZWxlbWVudC5maW5kKFwiLnNlcnZpY2VzXCIpO1xuICAgICAgICAgICAgdmFyIHJlcGxpY2F0aW9uQ29udHJvbGxlcnNFbCA9IGVsZW1lbnQuZmluZChcIi5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIpO1xuICAgICAgICAgICAgdmFyIGhvc3RzRWwgPSBlbGVtZW50LmZpbmQoXCIuaG9zdHNcIik7XG5cbiAgICAgICAgICAgIGFwcGVuZE5ld0VsZW1lbnRzKHNlcnZpY2VzRWwsICR0ZW1wbGF0ZUNhY2hlLmdldChcInNlcnZpY2VUZW1wbGF0ZS5odG1sXCIpLCBcInNlcnZpY2VcIiwgc2VydmljZXMpO1xuICAgICAgICAgICAgYXBwZW5kTmV3RWxlbWVudHMocmVwbGljYXRpb25Db250cm9sbGVyc0VsLCAkdGVtcGxhdGVDYWNoZS5nZXQoXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJUZW1wbGF0ZS5odG1sXCIpLCBcInJlcGxpY2F0aW9uQ29udHJvbGxlclwiLCByZXBsaWNhdGlvbkNvbnRyb2xsZXJzKTtcbiAgICAgICAgICAgIGFwcGVuZE5ld0VsZW1lbnRzKGhvc3RzRWwsICR0ZW1wbGF0ZUNhY2hlLmdldChcIm92ZXJ2aWV3SG9zdFRlbXBsYXRlLmh0bWxcIiksIFwiaG9zdFwiLCBob3N0cyk7XG4gICAgICAgICAgICBob3N0cy5mb3JFYWNoKChob3N0KSA9PiB7XG4gICAgICAgICAgICAgIHZhciBob3N0RWwgPSBhbmd1bGFyLmVsZW1lbnQoaG9zdHNFbC5maW5kKFwiI1wiICsgaG9zdC5lbGVtZW50SWQpKTtcbiAgICAgICAgICAgICAgdmFyIHBvZENvbnRhaW5lciA9IGFuZ3VsYXIuZWxlbWVudChob3N0RWwuZmluZCgnLnBvZC1jb250YWluZXInKSk7XG4gICAgICAgICAgICAgIGFwcGVuZE5ld0VsZW1lbnRzKHBvZENvbnRhaW5lciwgJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicG9kVGVtcGxhdGUuaHRtbFwiKSwgXCJwb2RcIiwgaG9zdC5wb2RzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcmVmcmVzaERyYXdpbmcoKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKFwiUmVmcmVzaGluZyBkcmF3aW5nXCIpO1xuICAgICAgICAgIGlmIChlbGVtZW50LmNoaWxkcmVuKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBmaXJzdERyYXcoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXBkYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIENvcmUuJGFwcGx5KHNjb3BlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIF8uZGVib3VuY2UocmVmcmVzaERyYXdpbmcsIDUwMCwgeyB0cmFpbGluZzogdHJ1ZX0pKTtcbiAgICAgICAgc2V0VGltZW91dChyZWZyZXNoRHJhd2luZywgMTAwKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XSk7XG5cbiAgdmFyIE92ZXJ2aWV3Qm94Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJPdmVydmlld0JveENvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiJGxvY2F0aW9uXCIsICgkc2NvcGUsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlKSA9PiB7XG4gICAgJHNjb3BlLnZpZXdEZXRhaWxzID0gKGVudGl0eSwgcGF0aDpzdHJpbmcpID0+IHtcbiAgICAgIGlmIChlbnRpdHkpIHtcbiAgICAgICAgdmFyIG5hbWVzcGFjZSA9IGdldE5hbWVzcGFjZShlbnRpdHkpO1xuICAgICAgICB2YXIgaWQgPSBnZXROYW1lKGVudGl0eSk7XG4gICAgICAgICRsb2NhdGlvbi5wYXRoKFVybEhlbHBlcnMuam9pbignL2t1YmVybmV0ZXMvbmFtZXNwYWNlJywgbmFtZXNwYWNlLCBwYXRoLCBpZCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLndhcm4oXCJObyBlbnRpdHkgZm9yIHZpZXdEZXRhaWxzIVwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICB2YXIgc2NvcGVOYW1lID0gXCJPdmVydmlld0NvbnRyb2xsZXJcIjtcblxuICB2YXIgT3ZlcnZpZXdDb250cm9sbGVyID0gY29udHJvbGxlcihzY29wZU5hbWUsIFtcIiRzY29wZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIixcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcbiAgICAkc2NvcGUubmFtZSA9IHNjb3BlTmFtZTtcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG5cbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAvLyRzY29wZS5zdWJUYWJDb25maWcgPSBbXTtcbiAgfV0pO1xuXG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgUGlwZWxpbmVzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJQaXBlbGluZXNDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiRkaWFsb2dcIiwgXCIkd2luZG93XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgJGRpYWxvZywgJHdpbmRvdywgJHRlbXBsYXRlQ2FjaGUsICRyb3V0ZVBhcmFtcywgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsIGxvY2FsU3RvcmFnZSwgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuXG4gICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAgIC8qKlxuICAgICAgICogTGV0cyB1cGRhdGUgdGhlIHZhcmlvdXMgZGF0YSB0byBqb2luIHRoZW0gdG9nZXRoZXIgdG8gYSBwaXBlbGluZSBtb2RlbFxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgICB2YXIgcGlwZWxpbmVTdGVwcyA9IHt9O1xuICAgICAgICBpZiAoJHNjb3BlLmJ1aWxkQ29uZmlncyAmJiAkc2NvcGUuYnVpbGRzICYmICRzY29wZS5kZXBsb3ltZW50Q29uZmlncykge1xuICAgICAgICAgIGVucmljaEJ1aWxkQ29uZmlncygkc2NvcGUuYnVpbGRDb25maWdzLCAkc2NvcGUuYnVpbGRzKTtcbiAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLmJ1aWxkQ29uZmlncywgKGJ1aWxkQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICB2YXIgcGlwZWxpbmVLZXkgPSBjcmVhdGVQaXBlbGluZUtleShidWlsZENvbmZpZyk7XG4gICAgICAgICAgICBpZiAocGlwZWxpbmVLZXkpIHtcbiAgICAgICAgICAgICAgcGlwZWxpbmVTdGVwc1twaXBlbGluZUtleV0gPSB7XG4gICAgICAgICAgICAgICAgYnVpbGRDb25maWc6IGJ1aWxkQ29uZmlnLFxuICAgICAgICAgICAgICAgIGJ1aWxkczogW10sXG4gICAgICAgICAgICAgICAgdHJpZ2dlcmVkQnk6IG51bGwsXG4gICAgICAgICAgICAgICAgdHJpZ2dlcnNTdGVwczogW10sXG4gICAgICAgICAgICAgICAgJGNsYXNzOiAncGlwZWxpbmUtYnVpbGQnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLmJ1aWxkcywgKGJ1aWxkKSA9PiB7XG4gICAgICAgICAgICB2YXIgcGlwZWxpbmVLZXkgPSBjcmVhdGVQaXBlbGluZUtleShidWlsZCk7XG4gICAgICAgICAgICBpZiAocGlwZWxpbmVLZXkpIHtcbiAgICAgICAgICAgICAgdmFyIHBpcGVsaW5lID0gcGlwZWxpbmVTdGVwc1twaXBlbGluZUtleV07XG4gICAgICAgICAgICAgIGlmICghcGlwZWxpbmUpIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwid2FybmluZyBubyBwaXBlbGluZSBnZW5lcmF0ZWQgZm9yIGJ1aWxkQ29uZmlnIGZvciBrZXkgXCIgKyBwaXBlbGluZUtleSArIFwiIGZvciBidWlsZCBcIiArIGFuZ3VsYXIudG9Kc29uKGJ1aWxkLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ3YXJuaW5nIG5vIHBpcGVsaW5lIGdlbmVyYXRlZCBmb3IgYnVpbGRDb25maWcgZm9yIGtleSBcIiArIHBpcGVsaW5lS2V5ICsgXCIgZm9yIGJ1aWxkIFwiICsgYnVpbGQuJG5hbWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBpcGVsaW5lLmJ1aWxkcy5wdXNoKGJ1aWxkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gVE9ETyBub3cgd2UgbmVlZCB0byBsb29rIGF0IHRoZSB0cmlnZ2VycyB0byBmaWd1cmUgb3V0IHdoaWNoIHBpcGVsaW5lU3RlcHMgdHJpZ2dlcnMgZWFjaCBwaXBlbGluZVN0ZXBcblxuXG4gICAgICAgICAgLy8gbm93IGxldHMgY3JlYXRlIGFuIGFycmF5IG9mIGFsbCBwaXBlbGluZXMsIHN0YXJ0aW5nIGZyb20gdGhlIGZpcnN0IGtub3duIHN0ZXAgd2l0aCBhIGxpc3Qgb2YgdGhlIHN0ZXBzXG5cbiAgICAgICAgICB2YXIgcGlwZWxpbmVzID0gW107XG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHBpcGVsaW5lU3RlcHMsIChwaXBlbGluZVN0ZXAsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFwaXBlbGluZVN0ZXAudHJpZ2dlcmVkQnkpIHtcbiAgICAgICAgICAgICAgLy8gd2UgYXJlIGEgcm9vdCBzdGVwLi4uLlxuICAgICAgICAgICAgICBwaXBlbGluZXMucHVzaChwaXBlbGluZVN0ZXApO1xuICAgICAgICAgICAgICAvLyBub3cgbGV0cyBhZGQgYWxsIHRoZSBzdGVwcyBmb3IgdGhpcyBrZXkuLi5cbiAgICAgICAgICAgICAgcGlwZWxpbmVTdGVwLnRyaWdnZXJzU3RlcHMucHVzaChwaXBlbGluZVN0ZXApO1xuICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2gocGlwZWxpbmVTdGVwcywgKHN0ZXApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RlcC50cmlnZ2VyZWRCeSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgICAgICBwaXBlbGluZVN0ZXAudHJpZ2dlcnNTdGVwcy5wdXNoKHN0ZXApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLmRlcGxveW1lbnRDb25maWdzLCAoZGVwbG95bWVudENvbmZpZykgPT4ge1xuICAgICAgICAgICAgaWYgKCFkZXBsb3ltZW50Q29uZmlnLmtpbmQpIHtcbiAgICAgICAgICAgICAgZGVwbG95bWVudENvbmZpZy5raW5kID0gXCJEZXBsb3ltZW50Q29uZmlnXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZGVwbG95bWVudENvbmZpZy50cmlnZ2VycywgKHRyaWdnZXIpID0+IHtcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSB0cmlnZ2VyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBpbWFnZUNoYW5nZVBhcmFtcyA9IHRyaWdnZXIuaW1hZ2VDaGFuZ2VQYXJhbXM7XG4gICAgICAgICAgICAgIGlmIChpbWFnZUNoYW5nZVBhcmFtcyAmJiB0eXBlID09PSBcIkltYWdlQ2hhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgZnJvbSA9IGltYWdlQ2hhbmdlUGFyYW1zLmZyb207XG4gICAgICAgICAgICAgICAgaWYgKGZyb20pIHtcbiAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gZnJvbS5uYW1lO1xuICAgICAgICAgICAgICAgICAgaWYgKGZyb20ua2luZCA9PT0gXCJJbWFnZVJlcG9zaXRvcnlcIikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gaW1hZ2VDaGFuZ2VQYXJhbXMudGFnIHx8IFwibGF0ZXN0XCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gbm93IGxldHMgZmluZCBhIHBpcGVsaW5lIHN0ZXAgd2hpY2ggZmlyZXMgZnJvbSB0aGlzXG4gICAgICAgICAgICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHBpcGVsaW5lU3RlcHMsIChwaXBlbGluZVN0ZXAsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvID0gQ29yZS5wYXRoR2V0KHBpcGVsaW5lU3RlcCwgW1wiYnVpbGRDb25maWdcIiwgXCJwYXJhbWV0ZXJzXCIsIFwib3V0cHV0XCIsIFwidG9cIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvICYmICh0by5raW5kID09PSBcIkltYWdlUmVwb3NpdG9yeVwiIHx8IHRvLmtpbmQgPT09IFwiSW1hZ2VTdHJlYW1cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvTmFtZSA9IHRvLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b05hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBDb3JlLnBhdGhHZXQoZGVwbG95bWVudENvbmZpZywgW1widGVtcGxhdGVcIiwgXCJjb250cm9sbGVyVGVtcGxhdGVcIiwgXCJzZWxlY3RvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJHBvZENvdW50ZXJzID0gc2VsZWN0b3IgPyBjcmVhdGVQb2RDb3VudGVycyhzZWxlY3RvciwgS3ViZXJuZXRlc01vZGVsLnBvZHNGb3JOYW1lc3BhY2UoKSwgcG9kcykgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXBsb3lQaXBlbGluZVN0ZXAgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbmZpZzogZGVwbG95bWVudENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjbGFzczogJ3BpcGVsaW5lLWRlcGxveScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcG9kQ291bnRlcnM6ICRwb2RDb3VudGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwb2RzOiBwb2RzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZVN0ZXAudHJpZ2dlcnNTdGVwcy5wdXNoKGRlcGxveVBpcGVsaW5lU3RlcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgJHNjb3BlLnBpcGVsaW5lcyA9IHBpcGVsaW5lcztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIExldHMgY3JlYXRlIGEgdW5pcXVlIGtleSBmb3IgYnVpbGQgLyBjb25maWcgd2UgY2FuIHVzZSB0byBkbyBsaW5raW5nIG9mIGJ1aWxkcyAvIGNvbmZpZ3MgLyB0cmlnZ2Vyc1xuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBjcmVhdGVQaXBlbGluZUtleShidWlsZENvbmZpZykge1xuICAgICAgICByZXR1cm4gQ29yZS5wYXRoR2V0KGJ1aWxkQ29uZmlnLCBbXCJwYXJhbWV0ZXJzXCIsIFwic291cmNlXCIsIFwiZ2l0XCIsIFwidXJpXCJdKTtcbiAgICAgIH1cblxuICAgICAgJHNjb3BlLiRrZWVwUG9sbGluZyA9ICgpID0+IGtlZXBQb2xsaW5nTW9kZWw7XG4gICAgICAkc2NvcGUuZmV0Y2ggPSBQb2xsSGVscGVycy5zZXR1cFBvbGxpbmcoJHNjb3BlLCAobmV4dDooKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgIHZhciByZWFkeSA9IDA7XG4gICAgICAgIHZhciBudW1TZXJ2aWNlcyA9IDM7XG5cbiAgICAgICAgZnVuY3Rpb24gbWF5YmVOZXh0KCkge1xuICAgICAgICAgIGlmICgrK3JlYWR5ID49IG51bVNlcnZpY2VzKSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHVybCA9IGJ1aWxkc1Jlc3RVUkwoKTtcbiAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICRzY29wZS5idWlsZHMgPSBlbnJpY2hCdWlsZHMoZGF0YS5pdGVtcyk7XG4gICAgICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1heWJlTmV4dCgpO1xuICAgICAgICAgIH0pLlxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgIG1heWJlTmV4dCgpO1xuXG4gICAgICAgICAgfSk7XG4gICAgICAgIHVybCA9IGJ1aWxkQ29uZmlnc1Jlc3RVUkwoKTtcbiAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICRzY29wZS5idWlsZENvbmZpZ3MgPSBkYXRhLml0ZW1zO1xuICAgICAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXliZU5leHQoKTtcbiAgICAgICAgICB9KS5cbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICBtYXliZU5leHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgdXJsID0gZGVwbG95bWVudENvbmZpZ3NSZXN0VVJMKCk7XG4gICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAkc2NvcGUuZGVwbG95bWVudENvbmZpZ3MgPSBkYXRhLml0ZW1zO1xuICAgICAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXliZU5leHQoKTtcbiAgICAgICAgICB9KS5cbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICBtYXliZU5leHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAkc2NvcGUuZmV0Y2goKTtcbiAgICB9XSk7XG5cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBQb2RDb250cm9sbGVyID0gY29udHJvbGxlcihcIlBvZENvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCIkd2luZG93XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgU2VydmljZVJlZ2lzdHJ5LFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCAkd2luZG93LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgJHNjb3BlLnJhd01vZGVsID0gbnVsbDtcblxuICAgICRzY29wZS5pdGVtQ29uZmlnID0ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY29udGFpbmVycy9pbWFnZSQnOiB7XG4gICAgICAgICAgdGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldCgnaW1hZ2VUZW1wbGF0ZS5odG1sJylcbiAgICAgICAgfSxcbiAgICAgICAgJ3N0YXR1cy9waGFzZSc6IHtcbiAgICAgICAgICB0ZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KCdzdGF0dXNUZW1wbGF0ZS5odG1sJylcbiAgICAgICAgfSxcbiAgICAgICAgJ1xcXFwvRW52XFxcXC8nOiB7XG4gICAgICAgICAgdGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldCgnZW52SXRlbVRlbXBsYXRlLmh0bWwnKVxuICAgICAgICB9LFxuICAgICAgICAnXlxcXFwvbGFiZWxzJCc6IHtcbiAgICAgICAgICB0ZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KCdsYWJlbFRlbXBsYXRlLmh0bWwnKVxuICAgICAgICB9LFxuICAgICAgICAnXFxcXC9lbnZcXFxcL2tleSQnOiB7XG4gICAgICAgICAgaGlkZGVuOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICB9KTtcblxuICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcbiAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICB9KTtcblxuICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLnBvZHMnLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfSwgdHJ1ZSk7XG5cbiAgICAkc2NvcGUuZmxpcFJhdyA9ICgpID0+IHtcbiAgICAgICRzY29wZS5yYXdNb2RlID0gISRzY29wZS5yYXdNb2RlO1xuICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICB9O1xuXG4gICAgJHNjb3BlLm9wZW5Mb2dzID0gKCkgPT4ge1xuICAgICAgdmFyIHBvZHMgPSBbJHNjb3BlLml0ZW1dO1xuICAgICAgb3BlbkxvZ3NGb3JQb2RzKFNlcnZpY2VSZWdpc3RyeSwgJHdpbmRvdywgS3ViZXJuZXRlc01vZGVsLmN1cnJlbnROYW1lc3BhY2UoKSwgcG9kcyk7XG4gICAgfTtcblxuICAgIHVwZGF0ZURhdGEoKTtcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAgICRzY29wZS5pdGVtID0gJHNjb3BlLm1vZGVsLmdldFBvZChLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UsICRzY29wZS5pZCk7XG4gICAgICBpZiAoJHNjb3BlLml0ZW0pIHtcbiAgICAgICAgJHNjb3BlLnJhd01vZGVsID0gdG9SYXdZYW1sKCRzY29wZS5pdGVtKTtcbiAgICAgIH1cbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgfVxuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgUG9kRWRpdENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUG9kRWRpdENvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCBcIlNjaGVtYVJlZ2lzdHJ5XCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBzY2hlbWFzOkhhd3Rpb0Zvcm1zLlNjaGVtYVJlZ2lzdHJ5KSA9PiB7XG5cbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgJHNjb3BlLmNvbmZpZyA9IHNjaGVtYXMuY2xvbmVTY2hlbWEoXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFwiKTtcbiAgICAvLyRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLmt1YmVybmV0ZXNfdjFiZXRhMl9Qb2Q7XG5cbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfSk7XG5cbiAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgaWYgKCRzY29wZS5pZCkge1xuICAgICAgICAkc2NvcGUuZW50aXR5ID0gJHNjb3BlLm1vZGVsLmdldFBvZChLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UsICRzY29wZS5pZCk7XG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAkc2NvcGUuc2F2ZSA9ICgpPT57XG4gICAgICBjb25zb2xlLmxvZygkc2NvcGUuZW50aXR5KTtcbiAgICB9XG4gIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG4gIHZhciBsb2cgPSBMb2dnZXIuZ2V0KCdrdWJlcm5ldGVzLXdhdGNoZXInKTtcblxuICB2YXIgazhzVHlwZXMgPSBLdWJlcm5ldGVzQVBJLk5hbWVzcGFjZWRUeXBlcy5rOHNUeXBlcztcbiAgdmFyIG9zVHlwZXMgID0gS3ViZXJuZXRlc0FQSS5OYW1lc3BhY2VkVHlwZXMub3NUeXBlcztcblxuICB2YXIgc2VsZiA9IDxhbnk+IHt9O1xuXG4gIHZhciB1cGRhdGVGdW5jdGlvbiA9ICgpID0+IHtcbiAgICBcbiAgICBsb2cuZGVidWcoXCJPYmplY3RzIGNoYW5nZWQsIGZpcmluZyBsaXN0ZW5lcnNcIik7XG4gICAgdmFyIG9iamVjdHMgPSA8T2JqZWN0TWFwPnt9O1xuICAgIF8uZm9yRWFjaChzZWxmLmdldFR5cGVzKCksICh0eXBlOnN0cmluZykgPT4ge1xuICAgICAgb2JqZWN0c1t0eXBlXSA9IHNlbGYuZ2V0T2JqZWN0cyh0eXBlKTtcbiAgICB9KTtcbiAgICBfLmZvckVhY2goc2VsZi5saXN0ZW5lcnMsIChsaXN0ZW5lcjooT2JqZWN0TWFwKSA9PiB2b2lkKSA9PiB7XG4gICAgICBsaXN0ZW5lcihvYmplY3RzKTtcbiAgICB9KTtcbiAgfTtcbiAgdmFyIGRlYm91bmNlZFVwZGF0ZSA9IF8uZGVib3VuY2UodXBkYXRlRnVuY3Rpb24sIDc1LCB7IHRyYWlsaW5nOiB0cnVlIH0pO1xuXG4gIHZhciBuYW1lc3BhY2VXYXRjaCA9IHtcbiAgICBzZWxlY3RlZDogdW5kZWZpbmVkLFxuICAgIHdhdGNoOiB1bmRlZmluZWQsXG4gICAgb2JqZWN0czogW10sXG4gICAgb2JqZWN0TWFwOiB7fSxcbiAgICB3YXRjaGVzOiB7fVxuICB9O1xuXG4gIGhhd3Rpb1BsdWdpbkxvYWRlci5yZWdpc3RlclByZUJvb3RzdHJhcFRhc2soe1xuICAgIG5hbWU6ICdLdWJlcm5ldGVzV2F0Y2hlckluaXQnLFxuICAgIGRlcGVuZHM6IFsnS3ViZXJuZXRlc0FwaURpc2NvdmVyeSddLFxuICAgIHRhc2s6IChuZXh0KSA9PiB7XG4gICAgICB2YXIgYm9vdGVkID0gZmFsc2U7XG4gICAgICBpZiAoaXNPcGVuU2hpZnQpIHtcbiAgICAgICAgbG9nLmluZm8oXCJCYWNrZW5kIGlzIGFuIE9wZW5zaGlmdCBpbnN0YW5jZVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5pbmZvKFwiQmFja2VuZCBpcyBhIHZhbmlsbGEgS3ViZXJuZXRlcyBpbnN0YW5jZVwiKTtcbiAgICAgIH1cbiAgICAgIG5hbWVzcGFjZVdhdGNoLndhdGNoID0gS3ViZXJuZXRlc0FQSS53YXRjaCh7XG4gICAgICAgIGtpbmQ6IEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5OQU1FU1BBQ0VTLFxuICAgICAgICBzdWNjZXNzOiAob2JqZWN0cykgPT4ge1xuICAgICAgICAgIG5hbWVzcGFjZVdhdGNoLm9iamVjdHMgPSBvYmplY3RzO1xuICAgICAgICAgIGlmICghYm9vdGVkKSB7XG4gICAgICAgICAgICBib290ZWQgPSB0cnVlO1xuICAgICAgICAgICAgc2VsZi5zZXROYW1lc3BhY2UobG9jYWxTdG9yYWdlW0NvbnN0YW50cy5OQU1FU1BBQ0VfU1RPUkFHRV9LRVldIHx8IGRlZmF1bHROYW1lc3BhY2UpO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2cuZGVidWcoXCJHb3QgbmFtZXNwYWNlczogXCIsIG5hbWVzcGFjZVdhdGNoLm9iamVjdHMpO1xuICAgICAgICB9LCBlcnJvcjogKGVycm9yOmFueSkgPT4ge1xuICAgICAgICAgIGxvZy53YXJuKFwiRXJyb3IgZmV0Y2hpbmcgbmFtZXNwYWNlczogXCIsIGVycm9yKTtcbiAgICAgICAgICAvLyBUT0RPIGlzIHRoaXMgbmVjZXNzYXJ5P1xuICAgICAgICAgIC8vSGF3dGlvT0F1dGguZG9Mb2dvdXQoKTtcbiAgICAgICAgICBpZiAoIWJvb3RlZCkge1xuICAgICAgICAgICAgYm9vdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgaGF3dGlvUGx1Z2luTG9hZGVyLnJlZ2lzdGVyUHJlQm9vdHN0cmFwVGFzayh7XG4gICAgbmFtZTogJ0t1YmVybmV0ZXNBcGlEaXNjb3ZlcnknLFxuICAgIGRlcGVuZHM6IFsnaGF3dGlvLW9hdXRoJ10sXG4gICAgdGFzazogKG5leHQpID0+IHtcbiAgICAgIGlzT3BlblNoaWZ0ID0gZmFsc2U7XG5cbiAgICAgIHZhciB1c2VyUHJvZmlsZSA9IEhhd3Rpb09BdXRoLmdldFVzZXJQcm9maWxlKCk7XG4gICAgICBsb2cuZGVidWcoXCJVc2VyIHByb2ZpbGU6IFwiLCB1c2VyUHJvZmlsZSk7XG4gICAgICBpZiAodXNlclByb2ZpbGUgJiYgdXNlclByb2ZpbGUucHJvdmlkZXIgPT09IFwiaGF3dGlvLWdvb2dsZS1vYXV0aFwiKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhcIlBvc3NpYmx5IHJ1bm5pbmcgb24gR0NFXCIpO1xuICAgICAgICAvLyBhcGkgbWFzdGVyIGlzIG9uIEdDRVxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgIHVybDogVXJsSGVscGVycy5qb2luKG1hc3RlckFwaVVybCgpLCAnYXBpJywgJ3YxJywgJ25hbWVzcGFjZXMnKSxcbiAgICAgICAgICBjb21wbGV0ZTogKGpxWEhSLCB0ZXh0U3RhdHVzKSA9PiB7XG4gICAgICAgICAgICBpZiAodGV4dFN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwianFYSFI6IFwiLCBqcVhIUik7XG4gICAgICAgICAgICAgIHVzZXJQcm9maWxlLm9sZFRva2VuID0gdXNlclByb2ZpbGUudG9rZW47XG4gICAgICAgICAgICAgIHVzZXJQcm9maWxlLnRva2VuID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAkLmFqYXhTZXR1cCh7XG4gICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogKHJlcXVlc3QpID0+IHtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBiZWZvcmVTZW5kOiAocmVxdWVzdCkgPT4ge1xuXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhcIk5vdCBydW5uaW5nIG9uIEdDRVwiKTtcbiAgICAgICAgLy8gZG91YmxlLWNoZWNrIGlmIHdlJ3JlIG9uIHZhbmlsbGEgazhzIG9yIG9wZW5zaGlmdFxuICAgICAgICB2YXIgcm9vdFVyaSA9IG5ldyBVUkkobWFzdGVyQXBpVXJsKCkpLnBhdGgoXCIvb2FwaVwiKS5xdWVyeShcIlwiKS50b1N0cmluZygpO1xuICAgICAgICBsb2cuZGVidWcoXCJDaGVja2luZyBmb3IgYW4gb3BlbnNoaWZ0IGJhY2tlbmRcIik7XG4gICAgICAgIEhhd3Rpb09BdXRoLmF1dGhlbnRpY2F0ZWRIdHRwUmVxdWVzdCh7XG4gICAgICAgICAgdXJsOiByb290VXJpLFxuICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICBpc09wZW5TaGlmdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikgPT4ge1xuICAgICAgICAgICAgdmFyIGVycm9yID0gS3ViZXJuZXRlc0FQSS5nZXRFcnJvck9iamVjdChqcVhIUik7XG4gICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkZhaWxlZCB0byBmaW5kIHJvb3QgcGF0aHM6IFwiLCB0ZXh0U3RhdHVzLCBcIjogXCIsIGVycm9yVGhyb3duKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkZhaWxlZCB0byBmaW5kIHJvb3QgcGF0aHM6IFwiLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc09wZW5TaGlmdCA9IGZhbHNlO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICB2YXIgY3VzdG9tVXJsSGFuZGxlcnMgPSB7fTtcblxuICBzZWxmLnNldE5hbWVzcGFjZSA9IChuYW1lc3BhY2U6IHN0cmluZykgPT4ge1xuICAgIGlmIChuYW1lc3BhY2UgPT09IG5hbWVzcGFjZVdhdGNoLnNlbGVjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuYW1lc3BhY2VXYXRjaC5zZWxlY3RlZCkge1xuICAgICAgbG9nLmRlYnVnKFwiU3RvcHBpbmcgY3VycmVudCB3YXRjaGVzXCIpO1xuICAgICAgXy5mb3JPd24obmFtZXNwYWNlV2F0Y2gud2F0Y2hlcywgKHdhdGNoLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKCFLdWJlcm5ldGVzQVBJLm5hbWVzcGFjZWQoa2V5KSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsb2cuZGVidWcoXCJEaXNjb25uZWN0aW5nIHdhdGNoOiBcIiwga2V5KTtcbiAgICAgICAgd2F0Y2guZGlzY29ubmVjdCgpO1xuICAgICAgfSk7XG4gICAgICBfLmZvckVhY2goXy5rZXlzKG5hbWVzcGFjZVdhdGNoLndhdGNoZXMpLCAoa2V5KSA9PiB7XG4gICAgICAgIGlmICghS3ViZXJuZXRlc0FQSS5uYW1lc3BhY2VkKGtleSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbG9nLmRlYnVnKFwiRGVsZXRpbmcga2luZDogXCIsIGtleSk7XG4gICAgICAgIGRlbGV0ZSBuYW1lc3BhY2VXYXRjaC53YXRjaGVzW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgbmFtZXNwYWNlV2F0Y2guc2VsZWN0ZWQgPSBuYW1lc3BhY2U7XG4gICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgXy5mb3JFYWNoKHNlbGYuZ2V0VHlwZXMoKSwgKGtpbmQ6c3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChraW5kID09PSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuTkFNRVNQQUNFUykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5hbWVzcGFjZVdhdGNoLndhdGNoZXNba2luZF0pIHtcbiAgICAgICAgICBsb2cuZGVidWcoXCJDcmVhdGluZyB3YXRjaCBmb3Iga2luZDogXCIsIGtpbmQpO1xuICAgICAgICAgIHZhciBjb25maWcgPSA8YW55PiB7XG4gICAgICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICAgICAgbmFtZXNwYWNlOiBLdWJlcm5ldGVzQVBJLm5hbWVzcGFjZWQoa2luZCkgPyBuYW1lc3BhY2UgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdWNjZXNzOiAob2JqZWN0cykgPT4ge1xuICAgICAgICAgICAgICB3YXRjaC5vYmplY3RzID0gb2JqZWN0cztcbiAgICAgICAgICAgICAgZGVib3VuY2VkVXBkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoa2luZCBpbiBjdXN0b21VcmxIYW5kbGVycykge1xuICAgICAgICAgICAgY29uZmlnLnVybEZ1bmN0aW9uID0gY3VzdG9tVXJsSGFuZGxlcnNba2luZF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciB3YXRjaCA9IDxhbnk+IEt1YmVybmV0ZXNBUEkud2F0Y2goY29uZmlnKTtcbiAgICAgICAgICB3YXRjaC5jb25maWcgPSBjb25maWc7XG4gICAgICAgICAgbmFtZXNwYWNlV2F0Y2gud2F0Y2hlc1traW5kXSA9IHdhdGNoO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgc2VsZi5oYXNXZWJTb2NrZXQgPSB0cnVlO1xuXG4gIHNlbGYuZ2V0TmFtZXNwYWNlID0gKCkgPT4gbmFtZXNwYWNlV2F0Y2guc2VsZWN0ZWQ7XG5cbiAgc2VsZi5yZWdpc3RlckN1c3RvbVVybEZ1bmN0aW9uID0gKGtpbmQ6c3RyaW5nLCB1cmw6KG9wdGlvbnM6S3ViZXJuZXRlc0FQSS5LOFNPcHRpb25zKSA9PiBzdHJpbmcpID0+IHtcbiAgICBjdXN0b21VcmxIYW5kbGVyc1traW5kXSA9IHVybDtcbiAgICBpZiAoa2luZCBpbiBuYW1lc3BhY2VXYXRjaC53YXRjaGVzKSB7XG4gICAgICB2YXIgd2F0Y2ggPSBuYW1lc3BhY2VXYXRjaC53YXRjaGVzW2tpbmRdO1xuICAgICAgdmFyIGNvbmZpZyA9IHdhdGNoLmNvbmZpZztcbiAgICAgIGNvbmZpZy51cmxGdW5jdGlvbiA9IHVybDtcbiAgICAgIHdhdGNoLmRpc2Nvbm5lY3QoKTtcbiAgICAgIGRlbGV0ZSBuYW1lc3BhY2VXYXRjaC53YXRjaGVzW2tpbmRdO1xuICAgICAgY29uZmlnLnN1Y2Nlc3MgPSAob2JqZWN0cykgPT4ge1xuICAgICAgICB3YXRjaC5vYmplY3RzID0gb2JqZWN0cztcbiAgICAgICAgZGVib3VuY2VkVXBkYXRlKCk7XG4gICAgICB9XG4gICAgICB3YXRjaCA9IDxhbnk+IEt1YmVybmV0ZXNBUEkud2F0Y2goY29uZmlnKTtcbiAgICAgIHdhdGNoLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgIG5hbWVzcGFjZVdhdGNoLndhdGNoZXNba2luZF0gPSB3YXRjaDtcbiAgICB9XG4gIH1cblxuICBzZWxmLmdldFR5cGVzID0gKCkgPT4ge1xuICAgIHZhciBmaWx0ZXIgPSAoa2luZDpzdHJpbmcpID0+IHtcbiAgICAgIC8vIGZpbHRlciBvdXQgc3R1ZmYgd2UgZG9uJ3QgY2FyZSBhYm91dCB5ZXRcbiAgICAgIHN3aXRjaChraW5kKSB7XG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLk9BVVRIX0NMSUVOVFM6XG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLklNQUdFX1NUUkVBTVM6XG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlBPTElDSUVTOlxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5ST0xFUzpcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUk9MRV9CSU5ESU5HUzpcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUE9MSUNZX0JJTkRJTkdTOlxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRV9DTEFJTVM6XG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlBFUlNJU1RFTlRfVk9MVU1FUzpcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuRU5EUE9JTlRTOlxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5SRVNPVVJDRV9RVU9UQVM6XG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlNFUlZJQ0VfQUNDT1VOVFM6XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBhbnN3ZXIgPSBrOHNUeXBlcy5jb25jYXQoW1dhdGNoVHlwZXMuTkFNRVNQQUNFU10pO1xuICAgIGlmIChpc09wZW5TaGlmdCkge1xuICAgICAgYW5zd2VyID0gYW5zd2VyLmNvbmNhdChvc1R5cGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYW5zd2VyID0gYW5zd2VyLmNvbmNhdChLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuVEVNUExBVEVTKTtcbiAgICAgIGFuc3dlciA9IGFuc3dlci5jb25jYXQoS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLkJVSUxEX0NPTkZJR1MpO1xuICAgIH1cbiAgICByZXR1cm4gXy5maWx0ZXIoYW5zd2VyLCBmaWx0ZXIpO1xuICB9XG5cbiAgc2VsZi5nZXRPYmplY3RzID0gKGtpbmQ6IHN0cmluZykgPT4ge1xuICAgIGlmIChraW5kID09PSBXYXRjaFR5cGVzLk5BTUVTUEFDRVMpIHtcbiAgICAgIHJldHVybiBuYW1lc3BhY2VXYXRjaC5vYmplY3RzO1xuICAgIH1cbiAgICBpZiAoa2luZCBpbiBuYW1lc3BhY2VXYXRjaC53YXRjaGVzKSB7XG4gICAgICByZXR1cm4gbmFtZXNwYWNlV2F0Y2gud2F0Y2hlc1traW5kXS5vYmplY3RzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHNlbGYubGlzdGVuZXJzID0gPEFycmF5PChPYmplY3RNYXApID0+IHZvaWQ+PiBbXTtcblxuICAvLyBsaXN0ZW5lciBnZXRzIG5vdGlmaWVkIGFmdGVyIGEgYnVuY2ggb2YgY2hhbmdlcyBoYXZlIG9jY3VycmVkXG4gIHNlbGYucmVnaXN0ZXJMaXN0ZW5lciA9IChmbjoob2JqZWN0czpPYmplY3RNYXApID0+IHZvaWQpID0+IHtcbiAgICBzZWxmLmxpc3RlbmVycy5wdXNoKGZuKTtcbiAgfVxuXG4gIHZhciBwcm9qZWN0c0hhbmRsZSA9IDxhbnk+IHVuZGVmaW5lZDtcblxuICAvLyBraWNrIG9mZiB0aGUgcHJvamVjdCB3YXRjaGVyIGEgYml0IHNvb25lciBhbHNvXG4gIGhhd3Rpb1BsdWdpbkxvYWRlci5yZWdpc3RlclByZUJvb3RzdHJhcFRhc2soe1xuICAgIG5hbWU6ICdQcm9qZWN0c1dhdGNoZXInLFxuICAgIGRlcGVuZHM6IFsnS3ViZXJuZXRlc0FwaURpc2NvdmVyeSddLFxuICAgIHRhc2s6IChuZXh0KSA9PiB7XG4gICAgICBpZiAoaXNPcGVuU2hpZnQpIHtcblxuICAgICAgICBwcm9qZWN0c0hhbmRsZSA9IEt1YmVybmV0ZXNBUEkud2F0Y2goe1xuICAgICAgICAgIGtpbmQ6IEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5QUk9KRUNUUyxcbiAgICAgICAgICBuYW1lc3BhY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzdWNjZXNzOiAob2JqZWN0cykgPT4ge1xuICAgICAgICAgICAgaWYgKHNlbGYubGlzdGVuZXJzICYmIHNlbGYubGlzdGVuZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJnb3QgcHJvamVjdHM6IFwiLCBvYmplY3RzKTtcbiAgICAgICAgICAgICAgXy5mb3JFYWNoKHNlbGYubGlzdGVuZXJzLCAobGlzdGVuZXI6KG9iamVjdHM6T2JqZWN0TWFwKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgICAgICAgICAgcHJvamVjdHM6IG9iamVjdHNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH0pO1xuXG5cbl9tb2R1bGUuc2VydmljZSgnV2F0Y2hlclNlcnZpY2UnLCBbJ3VzZXJEZXRhaWxzJywgJyRyb290U2NvcGUnLCAnJHRpbWVvdXQnLCAodXNlckRldGFpbHMsICRyb290U2NvcGUsICR0aW1lb3V0KSA9PiB7XG4gICAgcmV0dXJuIHNlbGY7XG59XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJ3YXRjaGVyLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgdmFyIGxvZyA9IExvZ2dlci5nZXQoXCJrdWJlcm5ldGVzLXRlcm0td2luZG93c1wiKTtcblxuICBfbW9kdWxlLmNvbmZpZygoa3ViZXJuZXRlc0NvbnRhaW5lclNvY2tldFByb3ZpZGVyKSA9PiB7XG4gICAga3ViZXJuZXRlc0NvbnRhaW5lclNvY2tldFByb3ZpZGVyLldlYlNvY2tldEZhY3RvcnkgPSBcIkN1c3RvbVdlYlNvY2tldHNcIjtcbiAgfSk7XG5cbiAgX21vZHVsZS5mYWN0b3J5KCdDdXN0b21XZWJTb2NrZXRzJywgKHVzZXJEZXRhaWxzOmFueSkgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBDdXN0b21XZWJTb2NrZXQodXJsLCBwcm90b2NvbHMpIHtcbiAgICAgIHZhciBwYXRocyA9IHVybC5zcGxpdCgnPycpO1xuICAgICAgaWYgKCFfLnN0YXJ0c1dpdGgocGF0aHNbMF0sIG1hc3RlckFwaVVybCgpKSkge1xuICAgICAgICBwYXRoc1swXSA9IFVybEhlbHBlcnMuam9pbihtYXN0ZXJBcGlVcmwoKSwgcGF0aHNbMF0pO1xuICAgICAgfVxuICAgICAgdXJsID0gS3ViZXJuZXRlc0FQSS53c1VybChwYXRoc1swXSk7XG4gICAgICB1cmwuc2VhcmNoKHBhdGhzWzFdICsgJyZhY2Nlc3NfdG9rZW49JyArIHVzZXJEZXRhaWxzLnRva2VuKTtcbiAgICAgIGxvZy5kZWJ1ZyhcIlVzaW5nIHdzIHVybDogXCIsIHVybC50b1N0cmluZygpKTtcbiAgICAgIHJldHVybiBuZXcgV2ViU29ja2V0KHVybC50b1N0cmluZygpLCBwcm90b2NvbHMpO1xuICAgIH07XG4gIH0pO1xuXG4gIF9tb2R1bGUuc2VydmljZSgnVGVybWluYWxTZXJ2aWNlJywgKCRyb290U2NvcGUsICRkb2N1bWVudCwgJGNvbXBpbGUsICRpbnRlcnZhbCwgJHRlbXBsYXRlQ2FjaGUpID0+IHtcbiAgICB2YXIgYm9keSA9ICRkb2N1bWVudC5maW5kKCdib2R5Jyk7XG4gICAgZnVuY3Rpb24gcG9zaXRpb25UZXJtaW5hbHModGVybWluYWxzKSB7XG4gICAgICB2YXIgdG90YWwgPSBfLmtleXModGVybWluYWxzKS5sZW5ndGg7XG4gICAgICB2YXIgZGlzdCA9IChib2R5LndpZHRoKCkgLSAyMjUpIC8gdG90YWw7XG4gICAgICB2YXIgcG9zaXRpb24gPSA1O1xuICAgICAgYW5ndWxhci5mb3JFYWNoKHRlcm1pbmFscywgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKCF2YWx1ZS5zY29wZS5kb2NrZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUuZWwuY3NzKCdsZWZ0JywgcG9zaXRpb24gKyAncHgnKTtcbiAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiArIGRpc3Q7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdmFyIGRlZmF1bHRUZW1wbGF0ZSA9ICR0ZW1wbGF0ZUNhY2hlLmdldChVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCAndGVybVNoZWxsLmh0bWwnKSk7XG4gICAgdmFyIHNlbGYgPSB7XG4gICAgICBwb3NpdGlvblRlcm1pbmFsczogKCkgPT4ge1xuICAgICAgICBwb3NpdGlvblRlcm1pbmFscyhzZWxmLnRlcm1pbmFscyk7XG4gICAgICB9LFxuICAgICAgdGVybWluYWxzOiB7fSxcbiAgICAgIGh0dHBUYXNrOiB7fSxcbiAgICAgIG5ld1Rlcm1pbmFsOiAoJGludGVydmFsLCBwb2RMaW5rLCBjb250YWluZXJOYW1lLCBlbnRpdHksIHRlbXBsYXRlID0gZGVmYXVsdFRlbXBsYXRlKSA9PiB7XG4gICAgICAgIHZhciB0ZXJtaW5hbElkID0gVXJsSGVscGVycy5qb2luKHBvZExpbmssIGNvbnRhaW5lck5hbWUpO1xuICAgICAgICBpZiAodGVybWluYWxJZCBpbiBzZWxmLnRlcm1pbmFscykge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhcIkFscmVhZHkgYSB0ZXJtaW5hbCB3aXRoIGlkOiBcIiwgdGVybWluYWxJZCk7XG4gICAgICAgICAgc2VsZi5yYWlzZVRlcm1pbmFsKHRlcm1pbmFsSWQpO1xuICAgICAgICAgIHJldHVybiB0ZXJtaW5hbElkO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzY29wZSA9ICRyb290U2NvcGUuJG5ldygpO1xuICAgICAgICBnZXRMb2dzKGVudGl0eSwgc2NvcGUpO1xuICAgICAgICBzY29wZS5wb2RMaW5rID0gcG9kTGluaztcbiAgICAgICAgc2NvcGUuY29udGFpbmVyTmFtZSA9IGNvbnRhaW5lck5hbWU7XG4gICAgICAgIHNjb3BlLmlkID0gdGVybWluYWxJZDtcbiAgICAgICAgc2NvcGUuZG9ja2VkID0gdHJ1ZTtcbiAgICAgICAgaWYodGVybWluYWxJZCBpbiBzZWxmLmh0dHBUYXNrKXtcbiAgICAgICAgICAgc2VsZi5yYWlzZVRlcm1pbmFsKHRlcm1pbmFsSWQpO1xuICAgICAgICAgICByZXR1cm4gdGVybWluYWxJZDtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgIHNlbGYuaHR0cFRhc2tbdGVybWluYWxJZF0gPSAkaW50ZXJ2YWwoKCkgPT57XG4gICAgICAgICAgICAgIGdldExvZ3MoZW50aXR5LCBzY29wZSk7XG4gICAgICAgICAgIH0sMjAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVsID0gJCgkY29tcGlsZSh0ZW1wbGF0ZSkoc2NvcGUpKTtcbiAgICAgICAgdmFyIHRlcm0gPSB7XG4gICAgICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgICAgIGVsOiBlbFxuICAgICAgICB9O1xuICAgICAgICBib2R5LmFwcGVuZChlbCk7XG4gICAgICAgIHNlbGYudGVybWluYWxzW3Rlcm1pbmFsSWRdID0gdGVybTtcbiAgICAgICAgcG9zaXRpb25UZXJtaW5hbHMoc2VsZi50ZXJtaW5hbHMpO1xuICAgICAgICByZXR1cm4gdGVybWluYWxJZDtcbiAgICAgIH0sXG4gICAgICBjbG9zZVRlcm1pbmFsOiAoaWQpID0+IHtcbiAgICAgICAgdmFyIHRlcm0gPSBzZWxmLnRlcm1pbmFsc1tpZF07XG4gICAgICAgIHZhciB0aW1lciA9IHNlbGYuaHR0cFRhc2tbaWRdO1xuICAgICAgICBpZih0aW1lcil7XG4gICAgICAgICAgJGludGVydmFsLmNhbmNlbCh0aW1lcik7XG4gICAgICAgICAgZGVsZXRlIHNlbGYuaHR0cFRhc2tbaWRdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXJtKSB7XG4gICAgICAgICAgdGVybS5lbC5yZW1vdmUoKTtcbiAgICAgICAgICBkZWxldGUgc2VsZi50ZXJtaW5hbHNbaWRdO1xuICAgICAgICAgIHBvc2l0aW9uVGVybWluYWxzKHNlbGYudGVybWluYWxzKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJhaXNlVGVybWluYWw6IChpZCkgPT4ge1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goc2VsZi50ZXJtaW5hbHMsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gaWQpIHtcbiAgICAgICAgICAgIHZhbHVlLmVsLmNzcygnei1pbmRleCcsICc0MDAwJyk7XG4gICAgICAgICAgICB2YWx1ZS5lbC5maW5kKCcudGVybWluYWwnKS5mb2N1cygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZS5lbC5jc3MoJ3otaW5kZXgnLCAnMzAwMCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gc2VsZjtcbiAgfSk7XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGFkZFdpbmRvd0FjdGlvbnMoc2NvcGUsIGVsZW1lbnQsIFRlcm1pbmFsU2VydmljZSkge1xuICAgIHZhciBtb3ZlZCA9IGZhbHNlO1xuICAgIHZhciBsYXN0WCA9IDA7XG4gICAgdmFyIGxhc3RZID0gMDtcbiAgICB2YXIgaGVhZGVyID0gZWxlbWVudC5maW5kKCcudGVybWluYWwtdGl0bGUnKTtcbiAgICB2YXIgYm9keSA9IGVsZW1lbnQuZmluZCgnLnRlcm1pbmFsLWJvZHknKTtcbiAgICBlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcbiAgICAgICQoJyNtYWluJykuY3NzKHsgZGlzcGxheTogJ2luaGVyaXQnIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIEhFSUdIVCA9IDM0ODtcbiAgICB2YXIgV0lEVEggPSA2MDA7XG4gICAgdmFyIFRJVExFX0hFSUdIVCA9IDM1O1xuICAgIHZhciBOQVZfT0ZGU0VUID0gNDY7XG5cbiAgICBlbGVtZW50LmNzcyh7XG4gICAgICBoZWlnaHQ6IEhFSUdIVCxcbiAgICAgIHdpZHRoOiBXSURUSFxuICAgIH0pO1xuICAgIGhlYWRlci5jc3Moe1xuICAgICAgaGVpZ2h0OiBUSVRMRV9IRUlHSFRcbiAgICB9KTtcbiAgICBib2R5LmNzcyh7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHRvcDogMzUsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgcmlnaHQ6IDAsIFxuICAgICAgYm90dG9tOiAwXG4gICAgfSk7XG4gICAgc2NvcGUuY2xvc2UgPSAoKSA9PiB7XG4gICAgICBUZXJtaW5hbFNlcnZpY2UuY2xvc2VUZXJtaW5hbChzY29wZS5pZCk7XG4gICAgfTtcbiAgICBzY29wZS5yYWlzZSA9ICgpID0+IHtcbiAgICAgIFRlcm1pbmFsU2VydmljZS5yYWlzZVRlcm1pbmFsKHNjb3BlLmlkKTtcbiAgICB9O1xuICAgIHNjb3BlLiR3YXRjaCgnZG9ja2VkJywgKGRvY2tlZCkgPT4ge1xuICAgICAgaWYgKGRvY2tlZCkge1xuICAgICAgICBlbGVtZW50LndpZHRoKFdJRFRIKTtcbiAgICAgICAgaWYgKCFlbGVtZW50Lmhhc0NsYXNzKCdtaW5pbWl6ZWQnKSkge1xuICAgICAgICAgIGVsZW1lbnQuaGVpZ2h0KEhFSUdIVCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBzY29wZS5zdGFydFJlc2l6ZSA9IChlKSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBsb2cuZGVidWcoXCJTdGFydCByZXNpemVcIik7XG4gICAgICBzY29wZS5yZXNpemluZyA9IHRydWU7XG4gICAgICBlbGVtZW50Lm9uKCdtb3VzZXVwJywgc2NvcGUuc3RvcFJlc2l6ZSk7XG4gICAgICAkKGRvY3VtZW50KS5vbignbW91c2Vtb3ZlJywgc2NvcGUuZG9SZXNpemUpO1xuICAgICAgJChkb2N1bWVudCkub24oJ21vdXNlbGVhdmUnLCBzY29wZS5zdG9wUmVzaXplKTtcbiAgICB9O1xuICAgIHNjb3BlLmRvUmVzaXplID0gKGUpID0+IHtcbiAgICAgIGlmIChzY29wZS5yZXNpemluZykge1xuICAgICAgICBsb2cuZGVidWcoXCJSZXNpemluZywgZTogXCIsIGUpO1xuICAgICAgICBpZiAoIW1vdmVkKSB7XG4gICAgICAgICAgbGFzdFggPSBlLmNsaWVudFg7XG4gICAgICAgICAgbGFzdFkgPSBlLmNsaWVudFk7XG4gICAgICAgICAgbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5oZWlnaHQoKTtcbiAgICAgICAgdmFyIHdpZHRoID0gZWxlbWVudC53aWR0aCgpO1xuICAgICAgICB2YXIgZGVsdGFYID0gZS5jbGllbnRYIC0gbGFzdFg7XG4gICAgICAgIHZhciBkZWx0YVkgPSBlLmNsaWVudFkgLSBsYXN0WTtcbiAgICAgICAgdmFyIG5ld0hlaWdodCA9IGhlaWdodCArIGRlbHRhWTtcbiAgICAgICAgdmFyIG5ld1dpZHRoID0gd2lkdGggKyBkZWx0YVg7XG4gICAgICAgIGlmIChuZXdIZWlnaHQgPiAzNSAmJiBuZXdXaWR0aCA+IDgwKSB7XG4gICAgICAgICAgZWxlbWVudC5oZWlnaHQoaGVpZ2h0ICsgZGVsdGFZKTtcbiAgICAgICAgICBlbGVtZW50LndpZHRoKHdpZHRoICsgZGVsdGFYKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0WCA9IGUuY2xpZW50WDtcbiAgICAgICAgbGFzdFkgPSBlLmNsaWVudFk7XG4gICAgICB9XG4gICAgfTtcbiAgICBzY29wZS5zdG9wUmVzaXplID0gKGUpID0+IHtcbiAgICAgIHNjb3BlLnJlc2l6aW5nID0gZmFsc2U7XG4gICAgICBtb3ZlZCA9IGZhbHNlO1xuICAgICAgZWxlbWVudC5vZmYoJ21vdXNldXAnLCBzY29wZS5zdG9wUmVzaXplKTtcbiAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2Vtb3ZlJywgc2NvcGUuZG9SZXNpemUpO1xuICAgICAgJChkb2N1bWVudCkub2ZmKCdtb3VzZWxlYXZlJywgc2NvcGUuc3RvcFJlc2l6ZSk7XG4gICAgfVxuICAgIHNjb3BlLm1vdXNlRG93biA9IChlKSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygnbWluaW1pemVkJykgfHwgZWxlbWVudC5oYXNDbGFzcygnbWF4aW1pemVkJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2NvcGUuZHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgZWxlbWVudC5vbignbW91c2V1cCcsIHNjb3BlLm1vdXNlVXApO1xuICAgICAgJChkb2N1bWVudCkub24oJ21vdXNlbW92ZScsIHNjb3BlLm1vdXNlTW92ZSk7XG4gICAgICAkKGRvY3VtZW50KS5vbignbW91c2VsZWF2ZScsIHNjb3BlLm1vdXNlVXApO1xuICAgIH07XG4gICAgc2NvcGUubW91c2VVcCA9IChlKSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBzY29wZS5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgbW92ZWQgPSBmYWxzZTtcbiAgICAgIHZhciBoZWlnaHQgPSBlbGVtZW50LmhlaWdodCgpO1xuICAgICAgdmFyIG9mZnNldCA9IGVsZW1lbnQub2Zmc2V0KCk7XG4gICAgICB2YXIgd2luSGVpZ2h0ID0gJCh3aW5kb3cpLmhlaWdodCgpO1xuICAgICAgaWYgKG9mZnNldC50b3AgPiAod2luSGVpZ2h0IC0gaGVpZ2h0IC0gMjApKSB7XG4gICAgICAgIGVsZW1lbnQuY3NzKHsgdG9wOiBcImluaGVyaXRcIiwgbGVmdDogXCJpbmhlcml0XCIgfSk7XG4gICAgICAgIHNjb3BlLmRvY2tlZCA9IHRydWU7XG4gICAgICAgIFRlcm1pbmFsU2VydmljZS5wb3NpdGlvblRlcm1pbmFscygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NvcGUuZG9ja2VkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBlbGVtZW50Lm9mZignbW91c2V1cCcsIHNjb3BlLm1vdXNlVXApO1xuICAgICAgJChkb2N1bWVudCkub2ZmKCdtb3VzZW1vdmUnLCBzY29wZS5tb3VzZU1vdmUpO1xuICAgICAgJChkb2N1bWVudCkub2ZmKCdtb3VzZWxlYXZlJywgc2NvcGUubW91c2VVcCk7XG4gICAgfTtcbiAgICBzY29wZS5tb3VzZU1vdmUgPSAoZSkgPT4ge1xuICAgICAgaWYgKHNjb3BlLmRyYWdnaW5nKSB7XG4gICAgICAgIGlmICghbW92ZWQpIHtcbiAgICAgICAgICBsYXN0WCA9IGUuY2xpZW50WDtcbiAgICAgICAgICBsYXN0WSA9IGUuY2xpZW50WTtcbiAgICAgICAgICBtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkZWx0YVggPSBlLmNsaWVudFggLSBsYXN0WDtcbiAgICAgICAgdmFyIGRlbHRhWSA9IGUuY2xpZW50WSAtIGxhc3RZO1xuICAgICAgICB2YXIgZWxPZmZzZXQgPSBlbGVtZW50Lm9mZnNldCgpO1xuICAgICAgICBlbGVtZW50Lm9mZnNldCh7IHRvcDogZWxPZmZzZXQudG9wICsgZGVsdGFZLCBsZWZ0OiBlbE9mZnNldC5sZWZ0ICsgZGVsdGFYIH0pO1xuICAgICAgICBsYXN0WCA9IGUuY2xpZW50WDtcbiAgICAgICAgbGFzdFkgPSBlLmNsaWVudFk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzdG9yZVdpbmRvdyhzY29wZSwgZWxlbWVudCkge1xuICAgICAgaWYgKHNjb3BlLm9mZnNldCkge1xuICAgICAgICBlbGVtZW50Lm9mZnNldChzY29wZS5vZmZzZXQpO1xuICAgICAgICBzY29wZS5kb2NrZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChzY29wZS5oZWlnaHQpIHtcbiAgICAgICAgZWxlbWVudC5oZWlnaHQoc2NvcGUuaGVpZ2h0KTtcbiAgICAgIH1cbiAgICAgIGlmIChzY29wZS53aWR0aCkge1xuICAgICAgICBlbGVtZW50LndpZHRoKHNjb3BlLndpZHRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzYXZlV2luZG93KHNjb3BlLCBlbGVtZW50KSB7XG4gICAgICBzY29wZS5vZmZzZXQgPSBlbGVtZW50Lm9mZnNldCgpO1xuICAgICAgc2NvcGUuaGVpZ2h0ID0gZWxlbWVudC5oZWlnaHQoKTtcbiAgICAgIHNjb3BlLndpZHRoID0gZWxlbWVudC53aWR0aCgpO1xuICAgIH1cblxuICAgIHNjb3BlLm1heGltaXplZCA9ICgpID0+IHtcbiAgICAgIHJldHVybiBlbGVtZW50Lmhhc0NsYXNzKCdtYXhpbWl6ZWQnKTtcbiAgICB9XG5cbiAgICBzY29wZS5tYXhpbWl6ZSA9ICgkZSkgPT4ge1xuICAgICAgJGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChlbGVtZW50Lmhhc0NsYXNzKCdtaW5pbWl6ZWQnKSkge1xuICAgICAgICBzY29wZS5taW5pbWl6ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoJ21heGltaXplZCcpKSB7XG4gICAgICAgIHJlc3RvcmVXaW5kb3coc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgICAkKCcjbWFpbicpLmNzcyh7IGRpc3BsYXk6ICdpbmhlcml0JyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNhdmVXaW5kb3coc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgICAkKCcjbWFpbicpLmNzcyh7IGRpc3BsYXk6ICdub25lJyB9KTtcbiAgICAgICAgZWxlbWVudC5jc3MoeyBcbiAgICAgICAgICBoZWlnaHQ6ICdpbmhlcml0JywgXG4gICAgICAgICAgYm90dG9tOiAwLCBcbiAgICAgICAgICB3aWR0aDogJzEwMCUnLCBcbiAgICAgICAgICB0b3A6IE5BVl9PRkZTRVQsIFxuICAgICAgICAgIGxlZnQ6IDAgXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWxlbWVudC50b2dnbGVDbGFzcygnbWF4aW1pemVkJyk7XG4gICAgfVxuICAgIHNjb3BlLm1pbmltaXplID0gKCRlKSA9PiB7XG4gICAgICAkZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoJ21heGltaXplZCcpKSB7XG4gICAgICAgIHNjb3BlLm1heGltaXplKCk7XG4gICAgICB9XG4gICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygnbWluaW1pemVkJykpIHtcbiAgICAgICAgcmVzdG9yZVdpbmRvdyhzY29wZSwgZWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzYXZlV2luZG93KHNjb3BlLCBlbGVtZW50KTtcbiAgICAgICAgc2NvcGUuZG9ja2VkID0gdHJ1ZTtcbiAgICAgICAgZWxlbWVudC5jc3MoeyBoZWlnaHQ6IFRJVExFX0hFSUdIVCwgdG9wOiBcImluaGVyaXRcIiwgbGVmdDogXCJpbmhlcml0XCIgfSk7XG4gICAgICAgIFRlcm1pbmFsU2VydmljZS5wb3NpdGlvblRlcm1pbmFscygpO1xuICAgICAgfVxuICAgICAgZWxlbWVudC50b2dnbGVDbGFzcygnbWluaW1pemVkJyk7XG4gICAgfTtcbiAgfVxuXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCd0ZXJtaW5hbFdpbmRvdycsICgkY29tcGlsZSwgVGVybWluYWxTZXJ2aWNlKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3RyaWN0OiAnQScsXG4gICAgICBzY29wZTogZmFsc2UsXG4gICAgICBsaW5rOiAoc2NvcGU6YW55LCBlbGVtZW50LCBhdHRyKSA9PiB7XG4gICAgICAgIGFkZFdpbmRvd0FjdGlvbnMoc2NvcGUsIGVsZW1lbnQsIFRlcm1pbmFsU2VydmljZSk7XG4gICAgICAgIHZhciBib2R5ID0gZWxlbWVudC5maW5kKCcudGVybWluYWwtYm9keScpO1xuICAgICAgICBib2R5LmFwcGVuZCgkY29tcGlsZSgnPGt1YmVybmV0ZXMtY29udGFpbmVyLXRlcm1pbmFsIHBvZD1cInBvZExpbmtcIiBjb250YWluZXI9XCJjb250YWluZXJOYW1lXCIgY29tbWFuZD1cImJhc2hcIj48L2t1YmVybmV0ZXMtY29udGFpbmVyLXRlcm1pbmFsPicpKHNjb3BlKSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gZ2V0TG9ncyhyYywgc2NvcGUpe1xuICAgICBjb25zb2xlLmxvZyhzY29wZSk7XG4gICAgIHZhciB4aHI9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICBpZih4aHIucmVhZHlTdGF0ZSA9PSA0KXtcbiAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKXtcbiAgICAgICAgICAgICAgIHZhciBvYmo9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gb2JqLmxvZ0NvbnRlbnQucmVwbGFjZSgvXFxcXG4vZ21pLCAnXFxyXFxuJyk7XG4gICAgICAgICAgICAgICBzY29wZS5sb2dzID0gdGV4dDtcbiAgICAgICAgICAgICAgIC8vcmV0dXJuICh7dGV4dDogXCJhYWFhYWFcIn0pO1xuXG4gICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgLy9sb2cgPSBcIuW9k+WJjeayoeacieWPr+S7peafpeeci+eahOaXpeW/l++8gVwiO1xuICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgfVxuICAgICB4aHIub3BlbihcIlBPU1RcIiwgXCIvb3JhY2xlRXh0cmFjdExvZz9yY05hbWU9XCIgKyBnZXROYW1lKHJjKSxmYWxzZSk7XG4gICAgIHhoci5zZW5kKG51bGwpO1xuICB9XG59XG5cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInRlcm0udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICB2YXIgbG9nID0gTG9nZ2VyLmdldChcImt1YmVybmV0ZXMtcG9kLWxvZ3NcIik7XG5cbiAgX21vZHVsZS5zZXJ2aWNlKFwiUG9kTG9nUmVwbGFjZW1lbnRzXCIsICgpID0+IHtcbiAgICByZXR1cm4gW107XG4gIH0pO1xuXG4gIF9tb2R1bGUucnVuKChQb2RMb2dSZXBsYWNlbWVudHMpID0+IHtcbiAgICB2YXIgbG9nID0gTG9nZ2VyLmdldChcInBvZC1sb2ctcmVwbGFjZXJzXCIpO1xuICAgIC8vIEFkZCBBTlNJIGVzY2FwZSBjaGFyYWN0ZXIgcmVwbGFjZXJcbiAgICAvLyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21tYWxlY2tpL2Fuc2lzcGFuXG4gICAgdmFyIGNvbG9ycyA9IHtcbiAgICAgICczMCc6ICdibGFjaycsXG4gICAgICAnMzEnOiAncmVkJyxcbiAgICAgICczMic6ICdncmVlbicsXG4gICAgICAnMzMnOiAneWVsbG93JyxcbiAgICAgICczNCc6ICdibHVlJyxcbiAgICAgICczNSc6ICdwdXJwbGUnLFxuICAgICAgJzM2JzogJ2N5YW4nLFxuICAgICAgJzM3JzogJ3doaXRlJyBcbiAgICB9XG4gICAgUG9kTG9nUmVwbGFjZW1lbnRzLnB1c2goKG1zZykgPT4ge1xuICAgICAgaWYgKCFtc2cpIHtcbiAgICAgICAgcmV0dXJuIG1zZztcbiAgICAgIH1cbiAgICAgIHZhciBlbmQgPSBcIjwvc3Bhbj5cIjtcbiAgICAgIF8uZm9yT3duKGNvbG9ycywgKGNvbG9yLCBjb2RlKSA9PiB7XG4gICAgICAgIHZhciBzdGFydCA9IGA8c3BhbiBjbGFzcz1cImAgKyBjb2xvciArIGBcIj5gO1xuICAgICAgICBtc2cgPSBtc2cucmVwbGFjZShuZXcgUmVnRXhwKCdcXDAzM1xcXFxbJyArIGNvZGUgKyAnbScsICdnJyksIHN0YXJ0KVxuICAgICAgICBtc2cgPSBtc2cucmVwbGFjZShuZXcgUmVnRXhwKCdcXDAzM1xcXFxbMDsnICsgY29kZSArICdtJywgJ2cnKSwgc3RhcnQpO1xuICAgICAgfSk7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvXFwwMzNcXFsxbS9nLCAnPGI+JykucmVwbGFjZSgvXFwwMzNcXFsyMm0vZywgJzwvYj4nKTtcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcWzNtL2csICc8aT4nKS5yZXBsYWNlKC9cXDAzM1xcWzIzbS9nLCAnPC9pPicpO1xuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcMDMzXFxbbS9nLCBlbmQpO1xuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcMDMzXFxbMG0vZywgZW5kKTtcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcWzM5bS9nLCBlbmQpO1xuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcMDMzXFxbMm0vZywgJzxzcGFuPicpO1xuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcMDMzXFxbMDszOW0vZywgZW5kKTtcbiAgICAgIGxvZy5kZWJ1ZyhcIlJ1bm5pbmcgcmVwbGFjZW1lbnQgb24gbWVzc2FnZTogXCIsIG1zZyk7XG4gICAgICByZXR1cm4gbXNnO1xuICAgIH0pO1xuICB9KTtcblxuICBfbW9kdWxlLmNvbnRyb2xsZXIoXCJLdWJlcm5ldGVzLlBvZExvZ0xpbmtDb250cm9sbGVyXCIsICgkc2NvcGUsICRpbnRlcnZhbCwgVGVybWluYWxTZXJ2aWNlLCAkdGVtcGxhdGVDYWNoZSkgPT4ge1xuXG4gICAgJHNjb3BlLm9wZW5Mb2dzID0gKGVudGl0eSkgPT4ge1xuICAgICAgbG9nLmRlYnVnKFwiT3BlbiBsb2dzOiBcIiwgZW50aXR5KTtcbiAgICAgIFRlcm1pbmFsU2VydmljZS5uZXdUZXJtaW5hbCgkaW50ZXJ2YWwsIGVudGl0eS5tZXRhZGF0YS5zZWxmTGluaywgZW50aXR5LiRvcmFjbGVOYW1lLCBlbnRpdHksJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsICdsb2dTaGVsbC5odG1sJykpKTtcbiAgICB9XG5cbiAgfSk7XG5cbiAgX21vZHVsZS5kaXJlY3RpdmUoJ3BvZExvZ0Rpc3BsYXknLCAodXNlckRldGFpbHMsIFBvZExvZ1JlcGxhY2VtZW50cykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInBvZC1sb2ctbGluZXNcIj5cbiAgICAgICAgICA8cCBuZy1oaWRlPVwiZmV0Y2hlZFwiPlBsZWFzZSB3YWl0LCBmZXRjaGluZyBsb2dzLi4uPC9wPlxuICAgICAgICAgIDxwIG5nLWhpZGU9XCJtZXNzYWdlcy5sZW5ndGggfHwgcHJldmlvdXNcIj5WaWV3IDxhIGhyZWY9XCJcIiBuZy1jbGljaz1cInByZXZpb3VzPSFwcmV2aW91c1wiPnByZXZpb3VzIGNvbnRhaW5lciBsb2dzPC9hPj88L3A+XG4gICAgICAgICAgPHAgbmctcmVwZWF0PVwibWVzc2FnZSBpbiBtZXNzYWdlcyB0cmFjayBieSAkaW5kZXhcIiBuZy1iaW5kLWh0bWw9XCJtZXNzYWdlXCI+PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIGAsXG4gICAgICBsaW5rOiAoc2NvcGU6YW55LCBlbGVtZW50LCBhdHRyKSA9PiB7XG4gICAgICAgIHZhciBsaW5rID0gc2NvcGUuJGV2YWwoJ3BvZExpbmsnKTtcbiAgICAgICAgdmFyIG5hbWUgPSBzY29wZS4kZXZhbCgnY29udGFpbmVyTmFtZScpO1xuXG4gICAgICAgIGlmICghbGluaykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjb3BlLmZldGNoZWQgPSBmYWxzZTtcbiAgICAgICAgc2NvcGUucHJldmlvdXMgPSBmYWxzZTtcbiAgICAgICAgc2NvcGUubWVzc2FnZXMgPSBbXTtcblxuICAgICAgICBsaW5rID0gVXJsSGVscGVycy5qb2luKG1hc3RlckFwaVVybCgpLCBsaW5rLCAnbG9nJyk7XG4gICAgICAgIGxpbmsgPSBLdWJlcm5ldGVzQVBJLndzVXJsKGxpbmspO1xuICAgICAgICBsaW5rLnNlYXJjaCh7XG4gICAgICAgICAgZm9sbG93OiB0cnVlLFxuICAgICAgICAgIHRhaWxMaW5lczogMTAwMCxcbiAgICAgICAgICBhY2Nlc3NfdG9rZW46IHVzZXJEZXRhaWxzLnRva2VuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBtZXNzYWdlcyA9IFtdO1xuXG4gICAgICAgIHZhciBwdWxsTWVzc2FnZXMgPSBfLmRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgICBzY29wZS5tZXNzYWdlcyA9IHNjb3BlLm1lc3NhZ2VzLmNvbmNhdChfLnJlbW92ZShtZXNzYWdlcywgKCkgPT4gdHJ1ZSkubWFwKChtc2cpID0+IHtcbiAgICAgICAgICAgIFBvZExvZ1JlcGxhY2VtZW50cy5mb3JFYWNoKChyZXBsRnVuYzphbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihyZXBsRnVuYykpIHtcbiAgICAgICAgICAgICAgICBtc2cgPSByZXBsRnVuYyhtc2cpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBtc2c7XG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGlmICghc2NvcGUuZmV0Y2hlZCkge1xuICAgICAgICAgICAgc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIENvcmUuJGFwcGx5KHNjb3BlKTtcbiAgICAgICAgfSwgMTAwMCk7XG5cbiAgICAgICAgZnVuY3Rpb24gaW5pdFNvY2tldChsaW5rKSB7XG4gICAgICAgICAgc2NvcGUuZmV0Y2hlZCA9IGZhbHNlO1xuICAgICAgICAgIG1lc3NhZ2VzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgc2NvcGUubWVzc2FnZXMubGVuZ3RoID0gMDtcbiAgICAgICAgICB2YXIgd3MgPSBuZXcgV2ViU29ja2V0KGxpbmsudG9TdHJpbmcoKSwgJ2Jhc2U2NC5iaW5hcnkuazhzLmlvJyk7XG4gICAgICAgICAgd3Mub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IHdpbmRvdy5hdG9iKGV2ZW50LmRhdGEpO1xuICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICBwdWxsTWVzc2FnZXMoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAvLyB3ZSdsbCBqdXN0IGlnbm9yZSB0aGVzZVxuICAgICAgICAgICAgICAvL2xvZy5kZWJ1ZyhcIkZhaWxlZCB0byBkZWNvZGUgbWVzc2FnZTogXCIsIGV2ZW50LmRhdGEsIFwiIGVycm9yOiBcIiwgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHdzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdzID0gaW5pdFNvY2tldChsaW5rKTtcblxuICAgICAgICBzY29wZS4kd2F0Y2goJ3ByZXZpb3VzJywgKHZhbHVlLCBvbGQpID0+IHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IG9sZCkge1xuICAgICAgICAgICAgaWYgKGxpbmsuaGFzU2VhcmNoKCdwcmV2aW91cycpKSB7XG4gICAgICAgICAgICAgIGxpbmsucmVtb3ZlU2VhcmNoKCdwcmV2aW91cycpLmFkZFNlYXJjaCgncHJldmlvdXMnLCBzY29wZS5wcmV2aW91cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsaW5rLmFkZFNlYXJjaCgncHJldmlvdXMnLCBzY29wZS5wcmV2aW91cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cy5jbG9zZSgpO1xuICAgICAgICAgICAgd3MgPSBpbml0U29ja2V0KGxpbmspO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWxlbWVudC5vbignJGRlc3Ryb3knLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHdzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB3cy5jbG9zZSgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZSB3cztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgX21vZHVsZS5kaXJlY3RpdmUoJ3BvZExvZ1dpbmRvdycsICgkY29tcGlsZSwgVGVybWluYWxTZXJ2aWNlKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3RyaWN0OiAnQScsXG4gICAgICBzY29wZTogZmFsc2UsXG4gICAgICBsaW5rOiAoc2NvcGU6YW55LCBlbGVtZW50LCBhdHRyKSA9PiB7XG4gICAgICAgIGFkZFdpbmRvd0FjdGlvbnMoc2NvcGUsIGVsZW1lbnQsIFRlcm1pbmFsU2VydmljZSk7XG4gICAgICAgIHNjb3BlLmF0Qm90dG9tID0gdHJ1ZTtcbiAgICAgICAgc2NvcGUuJHdhdGNoKCdhdEJvdHRvbScsICh2YWwpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImF0Qm90dG9tOiBcIiwgdmFsKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG5cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInV0aWxIZWxwZXJzLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBFbnZJdGVtID0gY29udHJvbGxlcihcIkVudkl0ZW1cIiwgW1wiJHNjb3BlXCIsICgkc2NvcGUpID0+IHtcbiAgICB2YXIgcGFydHMgPSAkc2NvcGUuZGF0YS5zcGxpdCgnPScpO1xuICAgICRzY29wZS5rZXkgPSBwYXJ0cy5zaGlmdCgpO1xuICAgICRzY29wZS52YWx1ZSA9IHBhcnRzLmpvaW4oJz0nKTtcbiAgfV0pO1xuXG4gIC8vIG1haW4gY29udHJvbGxlciBmb3IgdGhlIHBhZ2VcbiAgZXhwb3J0IHZhciBQb2RzID0gY29udHJvbGxlcihcIlBvZHNcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1BvZHNcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIiwgXCIkZGlhbG9nXCIsIFwiJHdpbmRvd1wiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGxvY2F0aW9uXCIsIFwibG9jYWxTdG9yYWdlXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1BvZHM6bmcucmVzb3VyY2UuSVJlc291cmNlQ2xhc3M8YW55PiwgS3ViZXJuZXRlc1N0YXRlLCBTZXJ2aWNlUmVnaXN0cnksICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgIH0pO1xuXG4gICAgJHNjb3BlLml0ZW1TY2hlbWEgPSBGb3Jtcy5jcmVhdGVGb3JtQ29uZmlndXJhdGlvbigpO1xuXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgZGF0YTogJ21vZGVsLnBvZHMnLFxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgfSxcbiAgICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnX2tleScsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcbiAgICAgICAgICBkZWZhdWx0U29ydDogdHJ1ZSxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImlkVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmllbGQ6ICckc3RhdHVzQ3NzJyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ1N0YXR1cycsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJzdGF0dXNUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHsgZmllbGQ6ICckZXZlbnRDb3VudCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdFdmVudHMnLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiZXZlbnRTdW1tYXJ5VGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmllbGQ6ICckcmVzdGFydENvdW50JyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ1Jlc3RhcnRzJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmllbGQ6ICckY3JlYXRlZFRpbWUnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnQWdlJyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImFnZVRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnJGltYWdlTmFtZXMnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnSW1hZ2VzJyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImltYWdlVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmllbGQ6ICckaG9zdCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdIb3N0JyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImhvc3RUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZDogJyRsYWJlbHNUZXh0JyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhYmVscycsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJsYWJlbFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnJHBvZElQJyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ1BvZCBJUCcsXG4gICAgICAgICAgY3VzdG9tU29ydEZpZWxkOiAoZmllbGQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBLdWJlcm5ldGVzLnNvcnRCeVBvZElwKGZpZWxkLiRwb2RJUCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgICRzY29wZS5vcGVuTG9ncyA9ICgpID0+IHtcbiAgICAgIHZhciBwb2RzID0gJHNjb3BlLnRhYmxlQ29uZmlnLnNlbGVjdGVkSXRlbXM7XG4gICAgICBpZiAoIXBvZHMgfHwgIXBvZHMubGVuZ3RoKSB7XG4gICAgICAgIGlmICgkc2NvcGUuaWQpIHtcbiAgICAgICAgICB2YXIgaXRlbSA9ICRzY29wZS5pdGVtO1xuICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBwb2RzID0gW2l0ZW1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3BlbkxvZ3NGb3JQb2RzKFNlcnZpY2VSZWdpc3RyeSwgJHdpbmRvdywgS3ViZXJuZXRlc01vZGVsLmN1cnJlbnROYW1lc3BhY2UoKSwgcG9kcyk7XG4gICAgfTtcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcbiAgICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKHNlbGVjdGVkKSkge1xuICAgICAgICBzZWxlY3RlZCA9IFt7XG4gICAgICAgICAgaWQ6IHNlbGVjdGVkXG4gICAgICAgIH1dO1xuICAgICAgfVxuICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xuICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcbiAgICAgICAgaW5kZXg6ICdtZXRhZGF0YS5uYW1lJyxcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQ6QXJyYXk8S3ViZVBvZD4sIG5leHQ6S3ViZVBvZCkge1xuICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImRlbGV0aW5nOiBcIiwgZ2V0TmFtZShuZXh0KSk7XG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlc1BvZHMuZGVsZXRlKHtcbiAgICAgICAgICAgICAgICAgIGlkOiBnZXROYW1lKG5leHQpXG4gICAgICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJkZWxldGVkOiBcIiwgZ2V0TmFtZShuZXh0KSk7XG4gICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZzogXCIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6ICdEZWxldGUgcG9kcz8nLFxuICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIHBvZHMgd2lsbCBiZSBkZWxldGVkOicsXG4gICAgICAgIG9rVGV4dDogJ0RlbGV0ZScsXG4gICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcbiAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcbiAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXG4gICAgICB9KS5vcGVuKCk7XG4gICAgfTtcblxuICAgICRzY29wZS5jcmVhdGVQb2RzPSAoKSA9PiB7XG4gICAgICB2YXIgeGhyPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSA0KSB7Ly806KGo56S65pWw5o2u5bey57uP6LCD55So5a6M5oiQXG4gICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7Ly9IVFRQ55qE54q25oCB56CBXG4gICAgICAgICAgICB2YXIgb2JqPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICB2YXIgb2JqZWN0ID0ge1xuICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwibmV3cG9kXCIsXG4gICAgICAgICAgICAgICBcImxhYmVsc1wiOiB7XG4gICAgICAgICAgICAgICAgIFwiYWltXCI6IFwidGVzdFwiLFxuICAgICAgICAgICAgICAgICBcImFwcFwiOiBcIm9yYWNsZVwiXG4gICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgXCJwYXRoXCI6ICcvaG9tZS8nLFxuICAgICAgICAgICAgICAgXCJwb3J0XCI6IDE1MjVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEt1YmVybmV0ZXMuY3JlYXRlUkMob2JqZWN0KTtcblxuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgIC8vYWx0ZXIoXCJzaGliYWlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIFwiL29yYWNsZUFwcFBhdGhcIiwgZmFsc2UpOy8v5LiO5pyN5Yqh5Zmo6L+e5o6l5bm25Y+R6YCBXG4gICAgICB4aHIuc2VuZChudWxsKTtcbiAgICB9O1xuICB9XSk7XG59XG4iLCIvKlxucmVhZCBhIG9iamVjdCBmcm9tIGppYW5nc3UgcHJvdmluY2UgLCBzdWNoIGFzIG5hbmppbmcgd2l0aCBzb21lIGluZm9ybWF0aW9uXG7or7vlj5bmsZ/oi4/nmoTmn5DkuKrlnLDljLrnmoTkv6Hmga/vvIzku6Xlj4rns7vnu5/kv6Hmga9cbiAqL1xubW9kdWxlIEt1YmVybmV0ZXN7XG5cdHB1YmxpYyB2YXIgc3lzdGVtX2FyciA9IFt7XCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566XXCIsXCJzeXNfaWRcIjpcIjFcIn0se1wic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIyXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiM1wifSx7XCJzeXNfbmFtZVwiOlwi6LWE5Lqn566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjRcIn0se1wic3lzX25hbWVcIjpcIueUqOWPi+i0ouaUv+e7vOWQiOeuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2lkXCI6XCI1XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnlKjlj4tBKytcIixcInN5c19pZFwiOlwiNlwifSx7XCJzeXNfbmFtZVwiOlwi5rWm5Y+j6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfaWRcIjpcIjdcIn0se1wic3lzX25hbWVcIjpcIuaglumcnuWMuui0ouaUv+S4muWKoeS/oeaBr+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI4XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLkuIDkvZPljJbns7vnu59cIixcInN5c19pZFwiOlwiOVwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG5LiA5L2T5YyW57O757ufXCIsXCJzeXNfaWRcIjpcIjEwXCJ9LHtcInN5c19uYW1lXCI6XCLmu6jmsZ/lvIDlj5HljLrotKLmlL/liIblsYBcIixcInN5c19pZFwiOlwiMTFcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuaxn+Wugee7j+a1juaKgOacr+W8gOWPkeWMuui0ouaUv+WIhuWxgFwiLFwic3lzX2lkXCI6XCIxMlwifSx7XCJzeXNfbmFtZVwiOlwi5rGf5a6B56eR5a2m5Zut6LSi5pS/5YiG5bGAXCIsXCJzeXNfaWRcIjpcIjEzXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbns7vnu59cIixcInN5c19pZFwiOlwiMTRcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIkErK+i0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2lkXCI6XCIxNVwifSx7XCJzeXNfbmFtZVwiOlwi6Z2e56iO57O757ufXCIsXCJzeXNfaWRcIjpcIjE2XCJ9LHtcInN5c19uYW1lXCI6XCLkuIDkvZPljJbpooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMTdcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuS4gOS9k+WMllwiLFwic3lzX2lkXCI6XCIxOFwifSx7XCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuY566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfaWRcIjpcIjE5XCJ9LHtcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5hcIixcInN5c19pZFwiOlwiMjBcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul+WPiumdnueojuezu+e7n1wiLFwic3lzX2lkXCI6XCIyMVwifSx7XCJzeXNfbmFtZVwiOlwi6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfaWRcIjpcIjIyXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMjNcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIumdnueojuaUtue8tOezu+e7n1wiLFwic3lzX2lkXCI6XCIyNFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjI1XCJ9LHtcInN5c19uYW1lXCI6XCLlr4zmt7HpooTnrpfmiafooYxcIixcInN5c19pZFwiOlwiMjZcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIueUqOWPi+mdnueojuWPiuelqOaNrlwiLFwic3lzX2lkXCI6XCIyN1wifSx7XCJzeXNfbmFtZVwiOlwi55So5Y+L6aKE566X5omn6KGMXCIsXCJzeXNfaWRcIjpcIjI4XCJ9LHtcInN5c19uYW1lXCI6XCLmsZ/oi4/nnIHotKLmlL/pooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMjlcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIueUqOWPi+mAmueUqOi9r+S7tlwiLFwic3lzX2lkXCI6XCIzMFwifSx7XCJzeXNfbmFtZVwiOlwi6IGU5Y+L6L2v5Lu2L+mAmueUqOi0ouWKoVwiLFwic3lzX2lkXCI6XCIzMVwifSx7XCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQRy1VOFIxMOi0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIzMlwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi55So5Y+LR1BQLVIxMOi0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIzM1wifSx7XCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6LSi5pS/5LiA5L2T5YyW566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfaWRcIjpcIjM0XCJ9LHtcInN5c19uYW1lXCI6XCLotKLliqHnu5/kuIDmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMzVcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuWFrOWFsei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIzNlwifSx7XCJzeXNfbmFtZVwiOlwiQSsr6LSi5pS/5LiA5L2T5YyW5L+h5oGv5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjM3XCJ9LHtcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLliqHnrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiMzhcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuWvjOa3sei0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIzOVwifSx7XCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn5YWs5YWx6LSi5pS/566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjQwXCJ9LHtcInN5c19uYW1lXCI6XCLlr4zmt7HljY/pgJrotKLmlL/kuIDkvZPljJbkuJrliqHnrqHnkIbns7vnu5/ova/ku7ZcIixcInN5c19pZFwiOlwiNDFcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouaUv+euoeeQhui9r+S7tkdzb2Z0XCIsXCJzeXNfaWRcIjpcIjQyXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbkuJrliqHns7vnu59cIixcInN5c19pZFwiOlwiNDNcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlui9r+S7tlwiLFwic3lzX2lkXCI6XCI0NFwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfaWRcIjpcIjQ1XCJ9LHtcInN5c19uYW1lXCI6XCLmgLvpooTnrpfns7vnu59cIixcInN5c19pZFwiOlwiNDZcIn0se1wic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2lkXCI6XCI0N1wifSx7XCJzeXNfbmFtZVwiOlwi55So5qy+6K6h5YiS57O757ufXCIsXCJzeXNfaWRcIjpcIjQ4XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLmjIfmoIfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiNDlcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+e7vOWQiOS4muWKoeeuoeeQhuW5s+WPsFwiLFwic3lzX2lkXCI6XCI1MFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfaWRcIjpcIjUxXCJ9LHtcInN5c19uYW1lXCI6XCLlt6XotYTnu5/lj5FcIixcInN5c19pZFwiOlwiNTJcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuWbveaciei1hOS6p1wiLFwic3lzX2lkXCI6XCI1M1wifSx7XCJzeXNfbmFtZVwiOlwi5Lmh6ZWH6Z2e56iO5pS25YWlXCIsXCJzeXNfaWRcIjpcIjU0XCJ9LHtcInN5c19uYW1lXCI6XCLkuaHplYfpm4bkuK3mlK/ku5hcIixcInN5c19pZFwiOlwiNTVcIn0se1wic3lzX25hbWVcIjpcIumdnueojuW+gee8tOezu+e7n1wiLFwic3lzX2lkXCI6XCI1NlwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi6aKE566X57yW5Yi25LiO5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjU3XCJ9LHtcInN5c19uYW1lXCI6XCLpooTnrpfnrqHnkIbnu7zlkIjkuJrliqHlubPlj7BcIixcInN5c19pZFwiOlwiNThcIn0se1wic3lzX25hbWVcIjpcInU4566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjU5XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/mjIfmoIfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiNjBcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIueUqOWPi0dSUC1SOei0ouWKoeeuoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCI2MVwifSx7XCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQLVU46LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjYyXCJ9LHtcInN5c19uYW1lXCI6XCLotKbliqHlpITnkIbns7vnu59cIixcInN5c19pZFwiOlwiNjNcIn0se1wic3lzX25hbWVcIjpcIlI5aei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCI2NFwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwidTjotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiNjVcIn0se1wic3lzX25hbWVcIjpcIuebuOWfjuWMuui0ouaUv+e7vOWQiOeuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2lkXCI6XCI2NlwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/6Z2e56iO57u85ZCI566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjY3XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/nu7zlkIjnrqHnkIblubPlj7BcIixcInN5c19pZFwiOlwiNjhcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuWQtOaxn+WMuui0ouaUv+S4gOS9k+WMllwiLFwic3lzX2lkXCI6XCI2OVwifSx7XCJzeXNfbmFtZVwiOlwi55So5Y+LUjlcIixcInN5c19pZFwiOlwiNzBcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+WFrOWFseW6lOeUqOacjeWKoeW5s+WPsFwiLFwic3lzX2lkXCI6XCI3MVwifSx7XCJzeXNfbmFtZVwiOlwi6YeR6J22Sy8z5Yib5paw566h55CG5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjcyXCJ9LHtcInN5c19uYW1lXCI6XCLotKbliqHmlbDmja7ns7vnu59cIixcInN5c19pZFwiOlwiNzNcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuWFrOWFsei0ouaUv+acjeWKoeW5s+WPsFwiLFwic3lzX2lkXCI6XCI3NFwifSx7XCJzeXNfbmFtZVwiOlwi5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjc1XCJ9LHtcInN5c19uYW1lXCI6XCLpobnnm67lupNcIixcInN5c19pZFwiOlwiNzZcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+aAu+mihOeul++8iOWklu+8ieS4k+aIt+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI3N1wifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5Z+O5bu66LWE6YeR5LiT5oi3566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjc4XCJ9LHtcInN5c19uYW1lXCI6XCLlhpzkv53kuJPmiLfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiNzlcIn0se1wic3lzX25hbWVcIjpcIuWGnOS4muWPkeWxleWfuumHkeS4k+aIt+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI4MFwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5aSx5Zyw5Yac5rCR5L+d6Zqc6LWE6YeR5LiT5oi3XCIsXCJzeXNfaWRcIjpcIjgxXCJ9LHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXlvoHnrqHns7vnu59cIixcInN5c19pZFwiOlwiODJcIn0se1wic3lzX25hbWVcIjpcIuW3pei1hOe7n+WPkeS6uuWRmOS/oeaBr1wiLFwic3lzX2lkXCI6XCI4M1wifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi6aKE566X5oyH5qCHLeWbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2lkXCI6XCI4NFwifSx7XCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjg1XCJ9LHtcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfnvJblrqHns7vnu59cIixcInN5c19pZFwiOlwiODZcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuWFrOWKoea2iOi0ueeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI4N1wifSx7XCJzeXNfbmFtZVwiOlwi5Zu95pyJ6LWE5Lqn566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjg4XCJ9LHtcInN5c19uYW1lXCI6XCLljLrplYfotKLmlL/nrqHnkIbigJzkuIDkvZPljJbigJ3ns7vnu59cIixcInN5c19pZFwiOlwiODlcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuWOv+acrOe6p+i0ouaUv+euoeeQhuKAnOS4gOS9k+WMluKAneezu+e7n1wiLFwic3lzX2lkXCI6XCI5MFwifSx7XCJzeXNfbmFtZVwiOlwi55So5Y+L5pS/5YqhXCIsXCJzeXNfaWRcIjpcIjkxXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjooYzmlL/lj6PkuJPpobnotYTph5HvvIlcIixcInN5c19pZFwiOlwiOTJcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOe7j+W7uuWPo+S4k+mhuei1hOmHke+8iVwiLFwic3lzX2lkXCI6XCI5M1wifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI5Yac5Lia5L+d6Zmp5LiT6LSm77yJXCIsXCJzeXNfaWRcIjpcIjk0XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjlhpzkuJrnu7zlkIjlvIDlj5HkuJPotKbvvIlcIixcInN5c19pZFwiOlwiOTVcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOekvuS/nei1hOmHkeS4k+i0pu+8iVwiLFwic3lzX2lkXCI6XCI5NlwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI5Zyf5Zyw5Ye66K6p5LiT6LSm77yJXCIsXCJzeXNfaWRcIjpcIjk3XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjnu7zlkIjlj6PkuJPpobnotYTph5HvvIlcIixcInN5c19pZFwiOlwiOThcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI5OVwifSx7XCJzeXNfbmFtZVwiOlwi5Yac5Lia5LiT5ZCR5Y+K5Yac5Lia5Y+R5bGV5Z+66YeR5LiT6aG5XCIsXCJzeXNfaWRcIjpcIjEwMFwifSx7XCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6h5qC4566XXCIsXCJzeXNfaWRcIjpcIjEwMVwifSx7XCJzeXNfbmFtZVwiOlwi6YeR6LSi5bel56iL5LiA5L2T5YyW5pSv5pKR5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjEwMlwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS257y0XCIsXCJzeXNfaWRcIjpcIjEwM1wifSx7XCJzeXNfbmFtZVwiOlwi5a2m5qCh6aKE566X5omn6KGMXCIsXCJzeXNfaWRcIjpcIjEwNFwifSx7XCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGMXCIsXCJzeXNfaWRcIjpcIjEwNVwifSx7XCJzeXNfbmFtZVwiOlwi5LiT6aG56LWE6YeRXCIsXCJzeXNfaWRcIjpcIjEwNlwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5oC76aKE566XXCIsXCJzeXNfaWRcIjpcIjEwN1wifSx7XCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfaWRcIjpcIjEwOFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566XXCIsXCJzeXNfaWRcIjpcIjEwOVwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi36LSm5Yqh57O757ufXCIsXCJzeXNfaWRcIjpcIjExMFwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5a+M5rex6LSi5pS/5LiA5L2T5YyW5Lia5Yqh566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjExMVwifSx7XCJzeXNfbmFtZVwiOlwi5Zu95pyJ6LWE5Lqn57O757ufXCIsXCJzeXNfaWRcIjpcIjExMlwifSx7XCJzeXNfbmFtZVwiOlwi5Zu95bqT5LiT6aG56LWE6YeR566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjExM1wifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS257y0566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjExNFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5paw5Yac5L+d77yJXCIsXCJzeXNfaWRcIjpcIjExNVwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5Z+O5biC5bGF5rCR5Yy755aX57uf562577yJXCIsXCJzeXNfaWRcIjpcIjExNlwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI6ZuG5Lit5pSv5LuY5Lit5b+D77yJXCIsXCJzeXNfaWRcIjpcIjExN1wifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI6Kej5Zuw6YeR77yJXCIsXCJzeXNfaWRcIjpcIjExOFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5pen5Z+O5pS56YCg77yJXCIsXCJzeXNfaWRcIjpcIjExOVwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI56S+5L+d6LWE6YeR6LSm5oi377yJXCIsXCJzeXNfaWRcIjpcIjEyMFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5Zyf5Zyw5Ye66K6p5LiT5biQ77yJXCIsXCJzeXNfaWRcIjpcIjEyMVwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI6aKE5ouo5Y+K6Z2e6ZuG5Lit5pSv5LuY5Lit5b+D77yJXCIsXCJzeXNfaWRcIjpcIjEyMlwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI6aKE566X5aSW6LWE6YeR77yJXCIsXCJzeXNfaWRcIjpcIjEyM1wifSx7XCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6hXCIsXCJzeXNfaWRcIjpcIjEyNFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5Yqh5qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjEyNVwifSx7XCJzeXNfbmFtZVwiOlwi5bel6LWE57uf5Y+R57O757ufXCIsXCJzeXNfaWRcIjpcIjEyNlwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfaWRcIjpcIjEyN1wifSx7XCJzeXNfbmFtZVwiOlwi6aKE566X566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjEyOFwifSx7XCJzeXNfbmFtZVwiOlwi6aKE566X5aSW6LWE6YeR77yI5LuO6IGU572R5a6h6K6h5Lit5Y+W5pWw77yJXCIsXCJzeXNfaWRcIjpcIjEyOVwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwiRzYtRei0ouWKoeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxMzBcIn0se1wic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIxMzFcIn0se1wic3lzX25hbWVcIjpcIueUqOWPi0dSUC9SOei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIxMzJcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIueUqOWPi0dSUC1VOFIxMFwiLFwic3lzX2lkXCI6XCIxMzNcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOWfuuW7uuaIt++8iVwiLFwic3lzX2lkXCI6XCIxMzRcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOmbhuS4reaUr+S7mOS4reW/g++8iVwiLFwic3lzX2lkXCI6XCIxMzVcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOWGnOS4mue7vOWQiOW8gOWPke+8iVwiLFwic3lzX2lkXCI6XCIxMzZcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOmihOeul+Wklui1hOmHke+8iVwiLFwic3lzX2lkXCI6XCIxMzdcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOaUr+WGnOS4k+aIt++8iVwiLFwic3lzX2lkXCI6XCIxMzhcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOaAu+mihOeul++8iVwiLFwic3lzX2lkXCI6XCIxMzlcIn0se1wic3lzX25hbWVcIjpcIuWbvei1hOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNDBcIn0se1wic3lzX25hbWVcIjpcIuS5oei0ouWOv+euoeezu+e7n1wiLFwic3lzX2lkXCI6XCIxNDFcIn0se1wic3lzX25hbWVcIjpcIumihOeul+e8luWItueuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNDJcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/luILmnKznuqdf6YOo6Zeo6aKE566XXCIsXCJzeXNfaWRcIjpcIjE0M1wifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W4guacrOe6p1/pnZ7nqI7mlLbnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTQ0XCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5biC5pys57qnX+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCIxNDVcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf6LSi5pS/5LiT5oi3XCIsXCJzeXNfaWRcIjpcIjE0NlwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/pnZ7nqI7mlLblhaXnrqHnkIZcIixcInN5c19pZFwiOlwiMTQ3XCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lqt5rmW5Yy6X+WbveW6k+mbhuS4reaUr+S7mOeuoeeQhlwiLFwic3lzX2lkXCI6XCIxNDhcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf6aKE566X5oyH5qCH566h55CGXCIsXCJzeXNfaWRcIjpcIjE0OVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/mgLvpooTnrpfkvJrorqHmoLjnrpdcIixcInN5c19pZFwiOlwiMTUwXCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf55uQ6YO95Yy6X+i0ouaUv+S4k+aIt+aguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxNTFcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjE1MlwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+ebkOmDveWMul/lm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19pZFwiOlwiMTUzXCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf55uQ6YO95Yy6X+aAu+mihOeul+S8muiuoeaguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxNTRcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lk43msLTljr9f6YOo6Zeo6aKE566X566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjE1NVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WTjeawtOWOv1/otKLmlL/kuIDkvZPljJbkv6Hmga/ns7vnu59cIixcInN5c19pZFwiOlwiMTU2XCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5ZON5rC05Y6/X+mdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNTdcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/mu6jmtbfljr/otKLmlL/kuIDkvZPljJZcIixcInN5c19pZFwiOlwiMTU4XCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf6Zic5a6B5Y6/X+i0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIxNTlcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/pmJzlroHljr9f6LSi5pS/566h55CG6L2v5Lu255So5Y+LVThcIixcInN5c19pZFwiOlwiMTYwXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5bCE6Ziz5Y6/X+i0ouaUv+mihOeul+aJp+ihjOS4gOS9k+WMluezu+e7n1wiLFwic3lzX2lkXCI6XCIxNjFcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lu7rmuZbljr9f6Z2e56iO5pS257y0XCIsXCJzeXNfaWRcIjpcIjE2MlwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W7uua5luWOv1/otKLmlL/kuIDkvZPljJZcIixcInN5c19pZFwiOlwiMTYzXCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5bu65rmW5Y6/X+WbveW6k+mbhuS4reaUr+S7mFwiLFwic3lzX2lkXCI6XCIxNjRcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf6YOo6Zeo6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfaWRcIjpcIjE2NVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/otKLmlL/kuIDkvZPljJbkv6Hmga/ns7vnu59cIixcInN5c19pZFwiOlwiMTY2XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lic5Y+w5biCX+i0ouaUv+S4k+aIt+aguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxNjdcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf6Z2e56iO5pS25YWl5pS257y0566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjE2OFwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/mgLvpooTnrpfkvJrorqHmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMTY5XCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5aSn5Liw5Yy6X+mDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxNzBcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lpKfkuLDljLpf6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfaWRcIjpcIjE3MVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+Wkp+S4sOWMul/mgLvpooTnrpfkvJrorqHmoLjnrpfotKLliqHova/ku7ZcIixcInN5c19pZFwiOlwiMTcyXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf57uP5rWO5oqA5pyv5byA5Y+R5Yy6X+mDqOmXqOmihOeul+i9r+S7tlwiLFwic3lzX2lkXCI6XCIxNzNcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nu4/mtY7mioDmnK/lvIDlj5HljLpf5Zu95bqT6ZuG5Lit5pSv5LuYXCIsXCJzeXNfaWRcIjpcIjE3NFwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi6ICB6Z2e56iO5pS25YWl5b6B57y057O757ufXCIsXCJzeXNfaWRcIjpcIjE3NVwifSx7XCJzeXNfbmFtZVwiOlwi5oms5bee6LSi5pS/5LiA5L2T5YyW5L+h5oGv566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjE3NlwifSx7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5b6B5pS2XCIsXCJzeXNfaWRcIjpcIjE3N1wifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57yW5Yi2XCIsXCJzeXNfaWRcIjpcIjE3OFwifSx7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5pS257y0XCIsXCJzeXNfaWRcIjpcIjE3OVwifSx7XCJzeXNfbmFtZVwiOlwi6KGM5pS/5LqL5Lia5oCn5Y2V5L2N5Zu95pyJ6LWE5Lqn566h55CGXCIsXCJzeXNfaWRcIjpcIjE4MFwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5Lia5Yqh57O757ufXCIsXCJzeXNfaWRcIjpcIjE4MVwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5Lia5Yqh57u85ZCI57O757ufXCIsXCJzeXNfaWRcIjpcIjE4MlwifSx7XCJzeXNfbmFtZVwiOlwi5rGf6YO95byA5Y+R5Yy66aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjE4M1wifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfaWRcIjpcIjE4NFwifSx7XCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6LSi5pS/5LiA5L2T5YyW5Lia5Yqh566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjE4NVwifSx7XCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6Z2e56iO5pS257y057O757ufXCIsXCJzeXNfaWRcIjpcIjE4NlwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa5bel6LWE57uf5Y+R57O757ufXCIsXCJzeXNfaWRcIjpcIjE4N1wifSx7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWlXCIsXCJzeXNfaWRcIjpcIjE4OFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/57u85ZCI5Lia5Yqh57O757ufXCIsXCJzeXNfaWRcIjpcIjE4OVwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/pg6jpl6jpooTnrpfns7vnu59cIixcInN5c19pZFwiOlwiMTkwXCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5biC5pys57qnX+mdnueojuaUtuWFpeezu+e7n1wiLFwic3lzX2lkXCI6XCIxOTFcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf57up5pWI566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjE5MlwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/pooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMTkzXCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5biC5pys57qnX+e7vOWQiOayu+eojuezu+e7n1wiLFwic3lzX2lkXCI6XCIxOTRcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/mtbfpmbXljLpf6YOo6Zeo6aKE566X57yW5Yi257O757ufXCIsXCJzeXNfaWRcIjpcIjE5NVwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+a1t+mZteWMul/ljr/ljLrotKLmlL/kuIDkvZPljJZcIixcInN5c19pZFwiOlwiMTk2XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf6auY5riv5Yy6X+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCIxOTdcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lp5zloLDljLpf6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfaWRcIjpcIjE5OFwifSx7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WnnOWgsOWMul/otKLmlL/kuIDkvZPljJbns7vnu59cIixcInN5c19pZFwiOlwiMTk5XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+mdnueojuaUtue8tOezu+e7n1wiLFwic3lzX2lkXCI6XCIyMDBcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lp5zloLDljLpf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjIwMVwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WMu+iNr+mrmOaWsOWMul/otKLmlL/kuIDkvZPljJbns7vnu59cIixcInN5c19pZFwiOlwiMjAyXCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5YW05YyW5biCX+mDqOmXqOmihOeul1wiLFwic3lzX2lkXCI6XCIyMDNcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lhbTljJbluIJf6Z2e56iO5pS257y0XCIsXCJzeXNfaWRcIjpcIjIwNFwifSx7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WFtOWMluW4gl/lm73lupPpm4bkuK3mlK/ku5hcIixcInN5c19pZFwiOlwiMjA1XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf6Z2W5rGf5biCX+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCIyMDZcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/pnZbmsZ/luIJf6Z2e56iO5pS25YWl5pS257y0XCIsXCJzeXNfaWRcIjpcIjIwN1wifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+mdluaxn+W4gl/pg6jpl6jpooTnrpfnvJblrqHns7vnu59cIixcInN5c19pZFwiOlwiMjA4XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5rOw5YW05biCX+mDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyMDlcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/ms7DlhbTluIJf6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjIxMFwifSx7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+azsOWFtOW4gl/pooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMjExXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMjEyXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJblubPlj7Dlj4rlm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19pZFwiOlwiMjEzXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLmlrDkuK3lpKfpnZ7nqI7mlLblhaXnrqHnkIZcIixcInN5c19pZFwiOlwiMjE0XCJ9LHtcInN5c19uYW1lXCI6XCLogZTlj4votKLliqHnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMjE1XCJ9LHtcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jjgIHmjIfmoIfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMjE2XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLlvIDlj5HljLrmgLvpooTnrpfns7vnu59cIixcInN5c19pZFwiOlwiMjE3XCJ9LHtcInN5c19uYW1lXCI6XCLlm73lupPotKbliqHns7vnu59cIixcInN5c19pZFwiOlwiMjE4XCJ9LHtcInN5c19uYW1lXCI6XCLljJblrablt6XkuJrlm63ljLrpnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMjE5XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXotKblpZdcIixcInN5c19pZFwiOlwiMjIwXCJ9LHtcInN5c19uYW1lXCI6XCLljJblrablt6XkuJrlm63ljLrpooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMjIxXCJ9LHtcInN5c19uYW1lXCI6XCLkvJrorqHmoLjnrpdcIixcInN5c19pZFwiOlwiMjIyXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqHotKZcIixcInN5c19pZFwiOlwiMjIzXCJ9LHtcInN5c19uYW1lXCI6XCLpooTnrpflhoXlpJbmlLbmlK/moLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMjI0XCJ9LHtcInN5c19uYW1lXCI6XCLotKbmiLfmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMjI1XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLmgLvpooTnrpfmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMjI2XCJ9LHtcInN5c19uYW1lXCI6XCLotKbliqHlpITnkIbns7vnu5/vvIjmlLbmlK/liIbnsbvmlLnpnanljYfnuqfniYjvvIlcIixcInN5c19pZFwiOlwiMjI3XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/pooTnrpflpJbkuJrliqFcIixcInN5c19pZFwiOlwiMjI4XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnlKjlj4tVOFIxMOi0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2lkXCI6XCIyMjlcIn0se1wic3lzX25hbWVcIjpcIuW8gOWPkeWMuui0ouaUv+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyMzBcIn0se1wic3lzX25hbWVcIjpcIumrmOaWsOWMuuaAu+mihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyMzFcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuW8gOWPkeWMuuWFrOWFsei0ouaUv+acjeWKoeW5s+WPsFwiLFwic3lzX2lkXCI6XCIyMzJcIn0se1wic3lzX25hbWVcIjpcIueUqOWPi0dSUC1VOOeuoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIyMzNcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/ln47ljZfmlrDljLpf5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfaWRcIjpcIjIzNFwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WfjuWNl+aWsOWMul/mgLvpooTnrpfotKbliqHlpITnkIbns7vnu59cIixcInN5c19pZFwiOlwiMjM1XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/pooTnrpfmjIfmoIfnrqHnkIZcIixcInN5c19pZFwiOlwiMjM2XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5biC5pys57qnX+ihjOaUv+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIyMzdcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuaWsOS4reWkp+i0ouWKoei9r+S7tlwiLFwic3lzX2lkXCI6XCIyMzhcIn0se1wic3lzX25hbWVcIjpcIuW8gOWPkeWMuuaWsOS4reWkp+i0ouWKoeaguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyMzlcIn0se1wic3lzX25hbWVcIjpcIuW8gOWPkeWMuui0puWKoeezu+e7n1wiLFwic3lzX2lkXCI6XCIyNDBcIn1dO1xuXG5cdHB1YmxpYyB2YXIgb3JpZ2luX3BsYWNlX2FyciA9IFt7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDBcIixcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpdcIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMFwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAwXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDBcIixcInN5c19uYW1lXCI6XCLotYTkuqfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJaQ0dMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIueOhOatpuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMlwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi56em5reu5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTA0XCIsXCJzeXNfbmFtZVwiOlwi55So5Y+L6LSi5pS/57u85ZCI566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuW7uumCuuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwNVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi6byT5qW85Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTA2XCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LQSsrXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIua1puWPo+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExMVwiLFwic3lzX25hbWVcIjpcIua1puWPo+i0ouaUv+S4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLmoJbpnJ7ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMTNcIixcInN5c19uYW1lXCI6XCLmoJbpnJ7ljLrotKLmlL/kuJrliqHkv6Hmga/nrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi6Zuo6Iqx5Y+w5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTE0XCIsXCJzeXNfbmFtZVwiOlwi5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuaxn+WugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExNVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuS4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLmsZ/lroHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMTVcIixcInN5c19uYW1lXCI6XCLmu6jmsZ/lvIDlj5HljLrotKLmlL/liIblsYBcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5rGf5a6B5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTE1XCIsXCJzeXNfbmFtZVwiOlwi5rGf5a6B57uP5rWO5oqA5pyv5byA5Y+R5Yy66LSi5pS/5YiG5bGAXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuaxn+WugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExNVwiLFwic3lzX25hbWVcIjpcIuaxn+WugeenkeWtpuWbrei0ouaUv+WIhuWxgFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLlha3lkIjljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMTZcIixcInN5c19uYW1lXCI6XCLkuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi6auY5rez5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTE4XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIua6p+awtOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEyNFwiLFwic3lzX25hbWVcIjpcIkErK+i0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDBcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjAwXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5pS257y0566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLltIflronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDJcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuW0h+WuieWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwMlwiLFwic3lzX25hbWVcIjpcIuS4gOS9k+WMlumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLljZfplb/ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDNcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuWNl+mVv+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwM1wiLFwic3lzX25hbWVcIjpcIuS4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLljJfloZjljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDRcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jnrqHnkIbkv6Hmga/ns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIumUoeWxseWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwNVwiLFwic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mFwiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi6ZSh5bGx5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjA1XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X5Y+K6Z2e56iO57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU19GU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuaDoOWxseWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwNlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmu6jmuZbljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMTFcIixcInN5c19uYW1lXCI6XCLpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIua7qOa5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIxMVwiLFwic3lzX25hbWVcIjpcIumdnueojuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5ruo5rmW5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjExXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMTRcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIxNFwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtue8tOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjE0XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmsZ/pmLTluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyODFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5a6c5YW05biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjgyXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS257y057O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLlrpzlhbTluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyODJcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAwXCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex6aKE566X5omn6KGMXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMDBcIixcInN5c19uYW1lXCI6XCLnlKjlj4vpnZ7nqI7lj4rnpajmja5cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwMFwiLFwic3lzX25hbWVcIjpcIueUqOWPi+mihOeul+aJp+ihjFwiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi6byT5qW85Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAyXCIsXCJzeXNfbmFtZVwiOlwi5rGf6IuP55yB6LSi5pS/6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLpvJPmpbzljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMDJcIixcInN5c19uYW1lXCI6XCLnlKjlj4vpgJrnlKjova/ku7ZcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuS6kem+meWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwM1wiLFwic3lzX25hbWVcIjpcIuaxn+iLj+ecgei0ouaUv+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5LqR6b6Z5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAzXCIsXCJzeXNfbmFtZVwiOlwi6IGU5Y+L6L2v5Lu2L+mAmueUqOi0ouWKoVwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5LqR6b6Z5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAzXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQRy1VOFIxMOi0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi6LS+5rGq5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzA1XCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LR1BQLVIxMOi0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5rOJ5bGx5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzExXCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6LSi5pS/5LiA5L2T5YyW566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIumTnOWxseWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMxMlwiLFwic3lzX25hbWVcIjpcIui0ouWKoee7n+S4gOaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi6ZOc5bGx5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzEyXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5pS257y0566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLpk5zlsbHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMTJcIixcInN5c19uYW1lXCI6XCLlhazlhbHotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuS4sOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMyMVwiLFwic3lzX25hbWVcIjpcIkErK+i0ouaUv+S4gOS9k+WMluS/oeaBr+W5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLkuLDljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMjFcIixcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLliqHnrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuaym+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMyMlwiLFwic3lzX25hbWVcIjpcIuWvjOa3sei0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLmspvljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMjJcIixcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLmlL/nrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuedouWugeWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMyNFwiLFwic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmui0ouaUv+S4gOS9k+WMluS4muWKoeeuoeeQhuezu+e7n+i9r+S7tlwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLnnaLlroHljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMjRcIixcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLmlL/nrqHnkIbova/ku7ZHc29mdFwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5paw5rKC5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzgxXCIsXCJzeXNfbmFtZVwiOlwi5rGf6IuP55yB6LSi5pS/6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLpgrPlt55cIixcImNvdW50eV9jb2RlXCI6XCIzMjAzODJcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDAwXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5Lia5Yqh57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuWkqeWugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLlpKnlroHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDJcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuWkqeWugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwMlwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA0XCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLpkp/mpbzljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDRcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIumSn+alvOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwNFwiLFwic3lzX25hbWVcIjpcIueUqOasvuiuoeWIkuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkpIR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA0XCIsXCJzeXNfbmFtZVwiOlwi5oyH5qCH566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkJHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLpkp/mpbzljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDRcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5paw5YyX5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDExXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/57u85ZCI5Lia5Yqh566h55CG5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuatpui/m+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQxMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLmuqfpmLPluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0ODFcIixcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpdcIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIua6p+mYs+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQ4MVwiLFwic3lzX25hbWVcIjpcIuW3pei1hOe7n+WPkVwiLFwic3lzX2NvZGVcIjpcIkdaVEZcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5rqn6Ziz5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDgxXCIsXCJzeXNfbmFtZVwiOlwi5Zu95pyJ6LWE5LqnXCIsXCJzeXNfY29kZVwiOlwiWkNHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLmuqfpmLPluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0ODFcIixcInN5c19uYW1lXCI6XCLkuaHplYfpnZ7nqI7mlLblhaVcIixcInN5c19jb2RlXCI6XCJYWkZTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIua6p+mYs+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQ4MVwiLFwic3lzX25hbWVcIjpcIuS5oemVh+mbhuS4reaUr+S7mFwiLFwic3lzX2NvZGVcIjpcIlhaR0tcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6YeR5Z2b5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDgyXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDBcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7lvoHnvLTns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwMFwiLFwic3lzX25hbWVcIjpcIumihOeul+e8luWItuS4juaJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5bel5Lia5Zut5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTAxXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X566h55CG57u85ZCI5Lia5Yqh5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVNHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLomY7kuJjljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDVcIixcInN5c19uYW1lXCI6XCJ1OOeuoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIkNaR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi6JmO5LiY5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA1XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5oyH5qCH566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkJHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLomY7kuJjljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDVcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuiZjuS4mOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNVwiLFwic3lzX25hbWVcIjpcIueUqOWPi0dSUC1SOei0ouWKoeeuoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIkNXR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi6JmO5LiY5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA1XCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQLVU46LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiQ1dHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLomY7kuJjljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDVcIixcInN5c19uYW1lXCI6XCLotKbliqHlpITnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJaV0NMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWQtOS4reWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNlwiLFwic3lzX25hbWVcIjpcIlI5aei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIkNaR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5ZC05Lit5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA2XCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566XXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlkLTkuK3ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDZcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5ZC05Lit5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA2XCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLnm7jln47ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDdcIixcInN5c19uYW1lXCI6XCJ1OOi0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIkNaR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi55u45Z+O5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA3XCIsXCJzeXNfbmFtZVwiOlwi55u45Z+O5Yy66LSi5pS/57u85ZCI566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWnkeiLj+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwOFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+mdnueojue7vOWQiOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5aeR6IuP5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA4XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/57u85ZCI566h55CG5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWQtOaxn+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwOVwiLFwic3lzX25hbWVcIjpcIuWQtOaxn+WMuui0ouaUv+S4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLluLjnhp/luIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODFcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW4uOeGn+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4MVwiLFwic3lzX25hbWVcIjpcIueUqOWPi1I5XCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLluLjnhp/luIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW8oOWutua4r+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4MlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+WFrOWFseW6lOeUqOacjeWKoeW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIkdHRldcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5byg5a625riv5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTgyXCIsXCJzeXNfbmFtZVwiOlwi6YeR6J22Sy8z5Yib5paw566h55CG5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiQ1pHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlvKDlrrbmuK/luIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODJcIixcInN5c19uYW1lXCI6XCLotKbliqHmlbDmja7ns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuaYhuWxseW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4M1wiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5piG5bGx5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTgzXCIsXCJzeXNfbmFtZVwiOlwi5YWs5YWx6LSi5pS/5pyN5Yqh5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiR0dGV1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLmmIblsbHluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODNcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWkquS7k+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4NVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5aSq5LuT5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTg1XCIsXCJzeXNfbmFtZVwiOlwi5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlpKrku5PluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODVcIixcInN5c19uYW1lXCI6XCLpobnnm67lupNcIixcInN5c19jb2RlXCI6XCJYTUtcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5aSq5LuT5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTg1XCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MDBcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuW0h+W3neWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYwMlwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5riv6Ze45Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjExXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5oC76aKE566X77yI5aSW77yJ5LiT5oi3566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNXWkhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5riv6Ze45Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjExXCIsXCJzeXNfbmFtZVwiOlwi5Z+O5bu66LWE6YeR5LiT5oi3566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiQ0paSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmuK/pl7jljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MTFcIixcInN5c19uYW1lXCI6XCLlhpzkv53kuJPmiLfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJOQlpIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua4r+mXuOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMVwiLFwic3lzX25hbWVcIjpcIuWGnOS4muWPkeWxleWfuumHkeS4k+aIt+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIk5GSkpcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5riv6Ze45Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjExXCIsXCJzeXNfbmFtZVwiOlwi5aSx5Zyw5Yac5rCR5L+d6Zqc6LWE6YeR5LiT5oi3XCIsXCJzeXNfY29kZVwiOlwiU0ROTVwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmuK/pl7jljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MTFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIumAmuW3nuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMlwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeW+geeuoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi6YCa5bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjEyXCIsXCJzeXNfbmFtZVwiOlwi5bel6LWE57uf5Y+R5Lq65ZGY5L+h5oGvXCIsXCJzeXNfY29kZVwiOlwiR1pURlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLpgJrlt57ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MTJcIixcInN5c19uYW1lXCI6XCLpooTnrpfmjIfmoIct5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLpgJrlt57ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MTJcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqHmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+WuieWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYyMVwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+e8luWuoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW35a6J5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjIxXCIsXCJzeXNfbmFtZVwiOlwi5YWs5Yqh5raI6LS5566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiR1dYRlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbflronljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MjFcIixcInN5c19uYW1lXCI6XCLlm73mnInotYTkuqfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJaQ0dMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+WuieWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYyMVwiLFwic3lzX25hbWVcIjpcIuWMuumVh+i0ouaUv+euoeeQhuKAnOS4gOS9k+WMluKAneezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlhaWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+WuieWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYyMVwiLFwic3lzX25hbWVcIjpcIuWOv+acrOe6p+i0ouaUv+euoeeQhuKAnOS4gOS9k+WMluKAneezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlpoLkuJzljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MjNcIixcInN5c19uYW1lXCI6XCLnlKjlj4vmlL/liqFcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI6KGM5pS/5Y+j5LiT6aG56LWE6YeR77yJXCIsXCJzeXNfY29kZVwiOlwiWkhYWlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjnu4/lu7rlj6PkuJPpobnotYTph5HvvIlcIixcInN5c19jb2RlXCI6XCJaSEpKXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOWGnOS4muS/nemZqeS4k+i0pu+8iVwiLFwic3lzX2NvZGVcIjpcIlpITkJcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI5Yac5Lia57u85ZCI5byA5Y+R5LiT6LSm77yJXCIsXCJzeXNfY29kZVwiOlwiWkhORlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjnpL7kv53otYTph5HkuJPotKbvvIlcIixcInN5c19jb2RlXCI6XCJaSFNCXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOWcn+WcsOWHuuiuqeS4k+i0pu+8iVwiLFwic3lzX2NvZGVcIjpcIlpIVERcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI57u85ZCI5Y+j5LiT6aG56LWE6YeR77yJXCIsXCJzeXNfY29kZVwiOlwiWkhaSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIuWGnOS4muS4k+WQkeWPiuWGnOS4muWPkeWxleWfuumHkeS4k+mhuVwiLFwic3lzX2NvZGVcIjpcIk5GWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqHmoLjnrpdcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWmgueai+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MlwiLFwic3lzX25hbWVcIjpcIumHkei0ouW3peeoi+S4gOS9k+WMluaUr+aSkeW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbfpl6jluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODRcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLbnvLRcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+mXqOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4NFwiLFwic3lzX25hbWVcIjpcIuWtpuagoemihOeul+aJp+ihjFwiLFwic3lzX2NvZGVcIjpcIllTWlhYWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbfpl6jluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODRcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYxcIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+mXqOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4NFwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW36Zeo5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjg0XCIsXCJzeXNfbmFtZVwiOlwi5LiT6aG56LWE6YeRXCIsXCJzeXNfY29kZVwiOlwiWlhaSlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbfpl6jluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODRcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpdcIixcInN5c19jb2RlXCI6XCJaWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzAwXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MDBcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpdcIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcwMFwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzAwXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLov57kupHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MDNcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfotKbliqHns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIui/nuS6keWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcwM1wiLFwic3lzX25hbWVcIjpcIuWvjOa3sei0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLmtbflt57ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MDZcIixcInN5c19uYW1lXCI6XCLlr4zmt7HotKLmlL/kuIDkvZPljJbkuJrliqHnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5rW35bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzA2XCIsXCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn5YWs5YWx6LSi5pS/566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIui1o+amhuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcyMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLotaPmpobljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MjFcIixcInN5c19uYW1lXCI6XCLlm73mnInotYTkuqfns7vnu59cIixcInN5c19jb2RlXCI6XCJDWkdMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuS4nOa1t+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcyMlwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5Lic5rW35Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzIyXCIsXCJzeXNfbmFtZVwiOlwi5Zu95bqT5LiT6aG56LWE6YeR566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWlhaSlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLkuJzmtbfljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MjJcIixcInN5c19uYW1lXCI6XCLlm73mnInotYTkuqfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJaQ0dMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuS4nOa1t+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcyMlwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi54GM5LqR5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzIzXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIueBjOWNl+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcyNFwiLFwic3lzX25hbWVcIjpcIumdnueojuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi54GM5Y2X5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzI0XCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDBcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMFwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rKz5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5paw5Yac5L+d77yJXCIsXCJzeXNfY29kZVwiOlwiWkhOQlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjln47luILlsYXmsJHljLvnlpfnu5/nrbnvvIlcIixcInN5c19jb2RlXCI6XCJaSFlCXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4heays+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOmbhuS4reaUr+S7mOS4reW/g++8iVwiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rKz5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI6Kej5Zuw6YeR77yJXCIsXCJzeXNfY29kZVwiOlwiWkhKS1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjml6fln47mlLnpgKDvvIlcIixcInN5c19jb2RlXCI6XCJaSENHXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4heays+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOekvuS/nei1hOmHkei0puaIt++8iVwiLFwic3lzX2NvZGVcIjpcIlpIU0JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rKz5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5Zyf5Zyw5Ye66K6p5LiT5biQ77yJXCIsXCJzeXNfY29kZVwiOlwiWkhURFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjpooTmi6jlj4rpnZ7pm4bkuK3mlK/ku5jkuK3lv4PvvIlcIixcInN5c19jb2RlXCI6XCJaSFlCXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4heays+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOmihOeul+Wklui1hOmHke+8iVwiLFwic3lzX2NvZGVcIjpcIllTV1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqFcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3ruWuieWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwM1wiLFwic3lzX25hbWVcIjpcIui0ouWKoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67lronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDNcIixcInN5c19uYW1lXCI6XCLlt6XotYTnu5/lj5Hns7vnu59cIixcInN5c19jb2RlXCI6XCJHWlRGXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3ruWuieWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwM1wiLFwic3lzX25hbWVcIjpcIueUqOWPi+aUv+WKoVwiLFwic3lzX2NvZGVcIjpcIllZWldcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67lronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDNcIixcInN5c19uYW1lXCI6XCLpooTnrpfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZU0dMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3ruWuieWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwM1wiLFwic3lzX25hbWVcIjpcIumihOeul+Wklui1hOmHke+8iOS7juiBlOe9keWuoeiuoeS4reWPluaVsO+8iVwiLFwic3lzX2NvZGVcIjpcIllTV1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67lronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDNcIixcInN5c19uYW1lXCI6XCLpooTnrpfnvJblrqHns7vnu59cIixcInN5c19jb2RlXCI6XCJZU0JTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3rumYtOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwNFwiLFwic3lzX25hbWVcIjpcIkc2LUXotKLliqHnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJDV0dMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3rumYtOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwNFwiLFwic3lzX25hbWVcIjpcIuaxn+iLj+ecgei0ouaUv+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu6Zi05Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODA0XCIsXCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn5YWs5YWx6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiQ1pHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67pmLTljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDRcIixcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAvUjnotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJDWkdMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3rumYtOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwNFwiLFwic3lzX25hbWVcIjpcIueUqOWPi0dSUC1VOFIxMFwiLFwic3lzX2NvZGVcIjpcIkNXR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNCU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmtabljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjln7rlu7rmiLfvvIlcIixcInN5c19jb2RlXCI6XCJaSEpKXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4hea1puWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgxMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOmbhuS4reaUr+S7mOS4reW/g++8iVwiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rWm5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODExXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG57O757uf77yI5Yac5Lia57u85ZCI5byA5Y+R77yJXCIsXCJzeXNfY29kZVwiOlwiWkhORlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmtabljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjpooTnrpflpJbotYTph5HvvIlcIixcInN5c19jb2RlXCI6XCJZU1dcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rWm5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODExXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG57O757uf77yI5pSv5Yac5LiT5oi377yJXCIsXCJzeXNfY29kZVwiOlwiWkhaTlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmtabljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjmgLvpooTnrpfvvIlcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua2n+awtOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgyNlwiLFwic3lzX25hbWVcIjpcIumdnueojuW+gee8tOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5raf5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODI2XCIsXCJzeXNfbmFtZVwiOlwi5Zu96LWE566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkNHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmtp/msLTljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MjZcIixcInN5c19uYW1lXCI6XCLkuaHotKLljr/nrqHns7vnu59cIixcInN5c19jb2RlXCI6XCJYQ1hHXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua2n+awtOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgyNlwiLFwic3lzX25hbWVcIjpcIuS5oei0ouWOv+euoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlhDWEdcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5raf5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODI2XCIsXCJzeXNfbmFtZVwiOlwi6aKE566X57yW5Yi2566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNCU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmtp/msLTljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MjZcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua0quazveWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgyOVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5rSq5rO95Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODI5XCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLnm7HnnJnljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MzBcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi6YeR5rmW5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODMxXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MDBcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5biC5pys57qnX+mDqOmXqOmihOeul1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAwXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W4guacrOe6p1/pnZ7nqI7mlLbnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMFwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/luILmnKznuqdf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLkuq3muZbljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MDJcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lqt5rmW5Yy6X+i0ouaUv+S4k+aIt1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lqt5rmW5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/pnZ7nqI7mlLblhaXnrqHnkIZcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS6rea5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMlwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf5Zu95bqT6ZuG5Lit5pSv5LuY566h55CGXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLkuq3muZbljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MDJcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lqt5rmW5Yy6X+mihOeul+aMh+agh+euoeeQhlwiLFwic3lzX2NvZGVcIjpcIlpCR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lqt5rmW5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/mgLvpooTnrpfkvJrorqHmoLjnrpdcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuebkOmDveWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf6LSi5pS/5LiT5oi35qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLnm5Dpg73ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MDNcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf55uQ6YO95Yy6X+mdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi55uQ6YO95Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAzXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+ebkOmDveWMul/lm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuebkOmDveWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf5oC76aKE566X5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlk43msLTljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MjFcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5ZON5rC05Y6/X+mDqOmXqOmihOeul+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5ZON5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTIxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WTjeawtOWOv1/otKLmlL/kuIDkvZPljJbkv6Hmga/ns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5ZON5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTIxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WTjeawtOWOv1/pnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIua7qOa1t+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyMlwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/mu6jmtbfljr/otKLmlL/kuIDkvZPljJZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi6Zic5a6B5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTIzXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+mYnOWugeWOv1/otKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJDWkdMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIumYnOWugeWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/pmJzlroHljr9f6LSi5pS/566h55CG6L2v5Lu255So5Y+LVThcIixcInN5c19jb2RlXCI6XCJZWVpXXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuWwhOmYs+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyNFwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lsITpmLPljr9f6LSi5pS/6aKE566X5omn6KGM5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuW7uua5luWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyNVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lu7rmuZbljr9f6Z2e56iO5pS257y0XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlu7rmuZbljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MjVcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5bu65rmW5Y6/X+i0ouaUv+S4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlu7rmuZbljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MjVcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5bu65rmW5Y6/X+WbveW6k+mbhuS4reaUr+S7mFwiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lic5Y+w5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/pg6jpl6jpooTnrpfnvJblrqHns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS4nOWPsOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDk4MVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf6LSi5pS/5LiA5L2T5YyW5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS4nOWPsOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDk4MVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf6LSi5pS/5LiT5oi35qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLkuJzlj7DluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5ODFcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lic5Y+w5biCX+mdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lic5Y+w5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/mgLvpooTnrpfkvJrorqHmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuWkp+S4sOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDk4MlwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lpKfkuLDljLpf6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlpKfkuLDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5ODJcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5aSn5Liw5Yy6X+i0ouaUv+S4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlpKfkuLDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5ODJcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5aSn5Liw5Yy6X+aAu+mihOeul+S8muiuoeaguOeul+i0ouWKoei9r+S7tlwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi57uP5rWO5oqA5pyv5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTkxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+e7j+a1juaKgOacr+W8gOWPkeWMul/pg6jpl6jpooTnrpfova/ku7ZcIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIue7j+a1juaKgOacr+W8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDk5MVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nu4/mtY7mioDmnK/lvIDlj5HljLpf5Zu95bqT6ZuG5Lit5pSv5LuYXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDBcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpdcIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMFwiLFwic3lzX25hbWVcIjpcIuiAgemdnueojuaUtuWFpeW+gee8tOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAwXCIsXCJzeXNfbmFtZVwiOlwi5oms5bee6LSi5pS/5LiA5L2T5YyW5L+h5oGv566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuW5v+mZteWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLlub/pmbXljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDJcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIumCl+axn+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwM1wiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLpgpfmsZ/ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDNcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIumCl+axn+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwM1wiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5a6d5bqU5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDIzXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5b6B5pS2XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLlrp3lupTljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMjNcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuS7quW+geW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4MVwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+e8luWItlwiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5Luq5b6B5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDgxXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5pS257y0XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLku6rlvoHluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwODFcIixcInN5c19uYW1lXCI6XCLooYzmlL/kuovkuJrmgKfljZXkvY3lm73mnInotYTkuqfnrqHnkIZcIixcInN5c19jb2RlXCI6XCJaQ0dMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuS7quW+geW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4MVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi6auY6YKu5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDg0XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5Lia5Yqh57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuaxn+mDveWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4OFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4muWKoee7vOWQiOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpIWVdcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5rGf6YO95Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDg4XCIsXCJzeXNfbmFtZVwiOlwi5rGf6YO95byA5Y+R5Yy66aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjExMDBcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5Lqs5Y+j5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTAyXCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6LSi5pS/5LiA5L2T5YyW5Lia5Yqh566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuS6rOWPo+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTEwMlwiLFwic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmumdnueojuaUtue8tOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5Lqs5Y+j5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTAyXCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa5bel6LWE57uf5Y+R57O757ufXCIsXCJzeXNfY29kZVwiOlwiR1pURlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLmtqblt57ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjExMTFcIixcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIua2puW3nuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTExMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLmtqblt57ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjExMTFcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaVcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuS4ueW+kuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTExMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+e7vOWQiOS4muWKoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLkuLnpmLPluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjExODFcIixcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuS4uemYs+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTE4MVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5oms5Lit5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTgyXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLmiazkuK3luIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjExODJcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuWPpeWuueW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTE4M1wiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpVwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5Y+l5a655biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTgzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDBcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5biC5pys57qnX+mDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAwXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/pnZ7nqI7mlLblhaXns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf57up5pWI566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiSlhHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDBcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5biC5pys57qnX+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAwXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/nu7zlkIjmsrvnqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJaSFpTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIua1t+mZteWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMlwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/mtbfpmbXljLpf6YOo6Zeo6aKE566X57yW5Yi257O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLmtbfpmbXljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDJcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5rW36Zm15Yy6X+WOv+WMuui0ouaUv+S4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLpq5jmuK/ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDNcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf6auY5riv5Yy6X+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5aec5aCw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjA0XCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WnnOWgsOWMul/pg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuWnnOWgsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwNFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lp5zloLDljLpf6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuWnnOWgsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwNFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lp5zloLDljLpf6Z2e56iO5pS257y057O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLlp5zloLDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDRcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5Yy76I2v6auY5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjA1XCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WMu+iNr+mrmOaWsOWMul/otKLmlL/kuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5YW05YyW5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjgxXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WFtOWMluW4gl/pg6jpl6jpooTnrpdcIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuWFtOWMluW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4MVwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lhbTljJbluIJf6Z2e56iO5pS257y0XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLlhbTljJbluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyODFcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5YW05YyW5biCX+WbveW6k+mbhuS4reaUr+S7mFwiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi6Z2W5rGf5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjgyXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+mdluaxn+W4gl/pooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIumdluaxn+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4MlwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/pnZbmsZ/luIJf6Z2e56iO5pS25YWl5pS257y0XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLpnZbmsZ/luIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyODJcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf6Z2W5rGf5biCX+mDqOmXqOmihOeul+e8luWuoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5rOw5YW05biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjgzXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+azsOWFtOW4gl/pg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuazsOWFtOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4M1wiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/ms7DlhbTluIJf6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLms7DlhbTluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyODNcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5rOw5YW05biCX+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzAwXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMDBcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMwMFwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5a6/5Z+O5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+w5Y+K5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLlrr/ln47ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMDJcIixcInN5c19uYW1lXCI6XCLmlrDkuK3lpKfpnZ7nqI7mlLblhaXnrqHnkIZcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuWuv+WfjuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMwMlwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5a6/6LGr5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzExXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS257y0566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLlrr/osavljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMTFcIixcInN5c19uYW1lXCI6XCLogZTlj4votKLliqHnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJDV0dMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuWuv+ixq+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMxMVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rKt6Ziz5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzIyXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLmsq3pmLPljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjJcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jjgIHmjIfmoIfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuayremYs+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyMlwiLFwic3lzX25hbWVcIjpcIuW8gOWPkeWMuuaAu+mihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rKt6Ziz5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzIyXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6h5qC4566XXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLms5fpmLPljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjNcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYxcIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuazl+a0quWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyNFwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rOX5rSq5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzI0XCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLms5fmtKrljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjRcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuazl+a0quWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyNFwiLFwic3lzX25hbWVcIjpcIuWbveW6k+i0puWKoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi6auY5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAwR1hRXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLljJblt6Xlm63ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDBIR1lcIixcInN5c19uYW1lXCI6XCLljJblrablt6XkuJrlm63ljLrpnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIue7j+a1juaKgOacr+W8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMEpLUVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpei0puWll1wiLFwic3lzX2NvZGVcIjpcIkZTWlRcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5YyW5bel5Zut5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAxSEdZXCIsXCJzeXNfbmFtZVwiOlwi5YyW5a2m5bel5Lia5Zut5Yy66aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLnu4/mtY7mioDmnK/lvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDFKS1FcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuWMluW3peWbreWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMkhHWVwiLFwic3lzX25hbWVcIjpcIuS8muiuoeaguOeul1wiLFwic3lzX2NvZGVcIjpcIktZSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi57uP5rWO5oqA5pyv5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAySktRXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6h6LSmXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLplKHlsbHlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDVLRlFcIixcInN5c19uYW1lXCI6XCLpooTnrpflhoXlpJbmlLbmlK/moLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIua7qOa5luWMuumprOWxseW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIxMUtGUVwiLFwic3lzX25hbWVcIjpcIui0puaIt+aguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5rGf6Zi05byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjgxa2ZxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuaxn+mYtOW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDI4MWtmcVwiLFwic3lzX25hbWVcIjpcIui0puaIt+aguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5a6c5YW0546v56eR5ZutXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjgyS0ZRXCIsXCJzeXNfbmFtZVwiOlwi6LSi5Yqh5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLlrpzlhbTlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyODJLRlFcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIue7j+a1juaKgOacr+W8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwMEpLUVwiLFwic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmui0ouaUv+S4gOS9k+WMluS4muWKoeeuoeeQhuezu+e7n+i9r+S7tlwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLnu4/mtY7mioDmnK/lvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMDBKS1FcIixcInN5c19uYW1lXCI6XCLotKbliqHlpITnkIbns7vnu5/vvIjmlLbmlK/liIbnsbvmlLnpnanljYfnuqfniYjvvIlcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuWkqeWugee7j+W8gOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwMkpLUVwiLFwic3lzX25hbWVcIjpcIui0puWKoeWkhOeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy65byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA0S0ZRXCIsXCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLpkp/mpbzljLrlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDVLRlFcIixcInN5c19uYW1lXCI6XCLnlKjmrL7orqHliJLns7vnu59cIixcInN5c19jb2RlXCI6XCJKSEdMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIumSn+alvOWMuuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwNktGUVwiLFwic3lzX25hbWVcIjpcIuaMh+agh+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpCR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy65byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA3S0ZRXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWllTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIue7j+W8gOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQxMkpLUVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+mihOeul+WkluS4muWKoVwiLFwic3lzX2NvZGVcIjpcIllTV1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLnu4/lvIDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MTJKS1FcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLbnvLTns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIue7j+W8gOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQxMkpLUVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5q2m6L+b6auY5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDEzR1hRXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIua6p+mYs+S4reWFs+adkVwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQ4MVpHQ1wiLFwic3lzX25hbWVcIjpcIueUqOWPi1U4UjEw6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIua6p+mYs+S4reWFs+adkeW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQ4MVpHQ0tGXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LVThSMTDotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi55u45Z+O5Yy65byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA3S0ZRXCIsXCJzeXNfbmFtZVwiOlwi5byA5Y+R5Yy66LSi5pS/57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW4uOeGn+W4gumrmOaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4MUdYUVwiLFwic3lzX25hbWVcIjpcIumrmOaWsOWMuuaAu+mihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLmmIblsbHluILlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODNLRlFcIixcInN5c19uYW1lXCI6XCLlvIDlj5HljLrlhazlhbHotKLmlL/mnI3liqHlubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5aSq5LuT5biC5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTg1WFFcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWkquS7k+W4guaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4NlhRXCIsXCJzeXNfbmFtZVwiOlwi5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlpKrku5PluILmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODdYUVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjAwS0ZRXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLoi4/pgJrlm63ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MDBTVFlcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIumAmuW3nua5vuekuuiMg+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYwMFRaV1wiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzAxS0ZRXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWlXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDBLRlFcIixcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAtVTjnrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Z+O5Y2X5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAwQ1pYUVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/ln47ljZfmlrDljLpf5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLln47ljZfmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MDFDWlhRXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WfjuWNl+aWsOWMul/mgLvpooTnrpfotKbliqHlpITnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuWMluW3peWbreWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMEhHWVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAwS0ZRXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5pS257y0XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLnp5HmioDmlrDln45cIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDBLSkNcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuicgOWGiC3nmKbopb/muZbpo47mma/lkI3og5zljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDBTWEhcIixcInN5c19uYW1lXCI6XCLotKLmlL/pooTnrpfmjIfmoIfnrqHnkIZcIixcInN5c19jb2RlXCI6XCJaQkdMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuicgOWGiC3nmKbopb/muZbpo47mma/lkI3og5zljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDBTWEhcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqHmoLjnrpdcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMUtGUVwiLFwic3lzX25hbWVcIjpcIuS4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDJLRlFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIumrmOmCruW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4NEtGUVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4muWKoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjExMDBYUVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDBcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5biC5pys57qnX+ihjOaUv+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlhaR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rmW5ruo5paw5Z+OXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzAwSEJYQ1wiLFwic3lzX25hbWVcIjpcIuaWsOS4reWkp+i0ouWKoei9r+S7tlwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi57uP5byA5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzAwSktRXCIsXCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn5YWs5YWx6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIua0i+ays+aWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMwMFlIWFFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuWuv+ixq+WMuuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMxMUtGUVwiLFwic3lzX25hbWVcIjpcIuW8gOWPkeWMuuaWsOS4reWkp+i0ouWKoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rOX5rSq5Y6/5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzI0S0ZRXCIsXCJzeXNfbmFtZVwiOlwi5byA5Y+R5Yy66LSm5Yqh57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifV07XG5cblxuXG5cblx0ZXhwb3J0IGZ1bmN0aW9uIGdldENvdW50eUJ5Q29kZShjb2RlKXtcblx0XHQvL3ZhciBqc29iaiA9IEpTT04ucGFyc2Uob3JpZ2luX3BsYWNlX2Fycik7XG5cdFx0dmFyIGpzb2JqID0gb3JpZ2luX3BsYWNlX2FycjtcblxuXHRcdHZhciBqc29ubGVuZ3RoID0ganNvYmoubGVuZ3RoO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwganNvbmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZihqc29ialtpXS5jb3VudHlfY29kZSA9PSBjb2RlKXtcblx0XHRcdFx0cmV0dXJuIGpzb2JqW2ldLmNpdHkranNvYmpbaV0uY291bnR5O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdGV4cG9ydCBmdW5jdGlvbiBnZXRDb2RlQnlDb3VudHkocGxhY2Upe1xuXHRcdHBsYWNlID0gcGxhY2UucmVwbGFjZSgvXFxzKlxcdCovZ2ltLFwiXCIpO1xuXHRcdC8vdmFyIGpzb2JqID0gSlNPTi5wYXJzZShvcmlnaW5fcGxhY2VfYXJyKTtcblx0XHR2YXIganNvYmogPSBvcmlnaW5fcGxhY2VfYXJyO1xuXG5cdFx0dmFyIGpzb25sZW5ndGggPSBqc29iai5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBqc29ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmKGpzb2JqW2ldLmNpdHkgPT09IFwiXCIgfHwganNvYmpbaV0uY2l0eSA9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0aWYoanNvYmpbaV0uY291bnR5ID09PSBcIlwiIHx8IGpzb2JqW2ldLmNvdW50eSA9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0aWYoKHBsYWNlLmluZGV4T2YoanNvYmpbaV0uY2l0eSkgIT0gLTEpICYmIChwbGFjZS5pbmRleE9mKGpzb2JqW2ldLmNvdW50eSkgIT0gLTEpKXtcblx0XHRcdFx0cmV0dXJuIGpzb2JqW2ldLmNvdW50eV9jb2RlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcGxhY2U7XG5cdH1cblxuXHRleHBvcnQgZnVuY3Rpb24gZ2V0U3lzdGVtTmFtZUJ5SWQoaWQpe1xuXHRcdHZhciB0ZW1Kc29uID0gc3lzdGVtX2Fycjtcblx0XHR2YXIgc3lzX3NpemUgPSB0ZW1Kc29uLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5c19zaXplOyBpKyspIHtcblx0XHRcdGlmKHRlbUpzb25baV0uc3lzX2lkID09IGlkKXtcblx0XHRcdFx0cmV0dXJuIHRlbUpzb25baV0uc3lzX25hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBpZDtcblx0fVxuXG5cblxuXHRleHBvcnQgZnVuY3Rpb24gZ2V0SWRCeVN5c3RlbU5hbWUobmFtZSl7XG5cdFx0dmFyIHRlbUpzb24gPSBzeXN0ZW1fYXJyO1xuXHRcdHZhciBzeXNfc2l6ZSA9IHRlbUpzb24ubGVuZ3RoO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3lzX3NpemU7IGkrKykge1xuXHRcdFx0aWYodGVtSnNvbltpXS5zeXNfbmFtZSA9PSBuYW1lKXtcblx0XHRcdFx0cmV0dXJuIHRlbUpzb25baV0uc3lzX2lkO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbmFtZTtcblx0fVxuXG5cdGV4cG9ydCBmdW5jdGlvbiBnZXRDb2RlQnlTeXN0ZW1OYW1lKG5hbWUpe1xuXHRcdHZhciBqc29iaiA9IG9yaWdpbl9wbGFjZV9hcnI7XG5cblx0XHR2YXIganNvbmxlbmd0aCA9IGpzb2JqLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGpzb25sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoanNvYmpbaV0uc3lzX25hbWUgPT0gbmFtZSl7XG5cdFx0XHRcdHJldHVybiBqc29ialtpXS5zeXNfY29kZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cbn1cblxuXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgUmVwbGljYXRpb25Db250cm9sbGVyQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICRzY29wZS5yYXdNb2RlbCA9IG51bGxcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuICAgICRzY29wZS5pdGVtQ29uZmlnID0ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnXlxcXFwvbGFiZWxzJCc6IHtcbiAgICAgICAgICB0ZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KCdsYWJlbFRlbXBsYXRlLmh0bWwnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCAoKSA9PiB7XG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuJHdhdGNoKCdtb2RlbC5wb2RzJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH0sIHRydWUpO1xuXG4gICAgJHNjb3BlLmZsaXBSYXcgPSAoKSA9PiB7XG4gICAgICAkc2NvcGUucmF3TW9kZSA9ICEkc2NvcGUucmF3TW9kZTtcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgfTtcblxuICAgIHVwZGF0ZURhdGEoKTtcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICBpZiAoJHNjb3BlLmRpcnR5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICAgJHNjb3BlLml0ZW0gPSAkc2NvcGUubW9kZWwuZ2V0UmVwbGljYXRpb25Db250cm9sbGVyKEt1YmVybmV0ZXNTdGF0ZS5zZWxlY3RlZE5hbWVzcGFjZSwgJHNjb3BlLmlkKTtcbiAgICAgIGlmICgkc2NvcGUuaXRlbSkge1xuICAgICAgICAkc2NvcGUucmF3TW9kZWwgPSB0b1Jhd1lhbWwoJHNjb3BlLml0ZW0pO1xuICAgICAgfVxuICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICB9XG4gIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBSZXBsaWNhdGlvbkNvbnRyb2xsZXJFZGl0Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJFZGl0Q29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiU2NoZW1hUmVnaXN0cnlcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIHNjaGVtYXM6SGF3dGlvRm9ybXMuU2NoZW1hUmVnaXN0cnkpID0+IHtcblxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcbiAgICBsb2cuZGVidWcoXCJTY2hlbWE6IFwiLCAkc2NvcGUuc2NoZW1hKTtcbiAgICAkc2NvcGUuY29uZmlnID0gc2NoZW1hcy5jbG9uZVNjaGVtYShcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVwbGljYXRpb25Db250cm9sbGVyXCIpO1xuICAgIC8vJCRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLmt1YmVybmV0ZXNfdjFiZXRhM19SZXBsaWNhdGlvbkNvbnRyb2xsZXI7XG5cbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfSk7XG5cbiAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgaWYgKCRzY29wZS5pZCkge1xuICAgICAgICAkc2NvcGUuZW50aXR5ID0gJHNjb3BlLm1vZGVsLmdldFJlcGxpY2F0aW9uQ29udHJvbGxlcihLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UsICRzY29wZS5pZCk7XG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBSZXBsaWNhdGlvbkNvbnRyb2xsZXJzID0gY29udHJvbGxlcihcIlJlcGxpY2F0aW9uQ29udHJvbGxlcnNcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJEYXRhSW5mb01vZGVsXCIsIFwiS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnNcIiwgXCJLdWJlcm5ldGVzUG9kc1wiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAgICgkc2NvcGUsICBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgRGF0YUluZm9Nb2RlbCwgS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnM6bmcucmVzb3VyY2UuSVJlc291cmNlQ2xhc3M8YW55PiwgS3ViZXJuZXRlc1BvZHM6bmcucmVzb3VyY2UuSVJlc291cmNlQ2xhc3M8YW55PiwgS3ViZXJuZXRlc1N0YXRlLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAkc2NvcGUuZmlsdGVyUmVwbGljYXRpb25Db250cm9sbGVycyA9ICRzY29wZS5tb2RlbC5maWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzO1xuXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgZGF0YTogJ21vZGVsLnJlcGxpY2F0aW9uQ29udHJvbGxlcnMnLFxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgfSxcbiAgICAgY29sdW1uRGVmczogW1xuICAgICAgICAgeyBmaWVsZDogJyRvcmFjbGVOYW1lJyxcbiAgICAgICAgICAgZGlzcGxheU5hbWU6ICfmnI3liqHlkI3np7AnLFxuICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImlkVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgfSxcbiAgICAgICAgIC8veyBmaWVsZDogJyRyZXBsaWNhcycsXG4gICAgICAgICAvLyAgZGlzcGxheU5hbWU6ICdTY2FsZScsXG4gICAgICAgICAvLyAgY2VsbFRlbXBsYXRlOiR0ZW1wbGF0ZUNhY2hlLmdldChcImRlc2lyZWRSZXBsaWNhcy5odG1sXCIpXG4gICAgICAgICAvL30sXG4gICAgICAgICB7IGZpZWxkOiAnJHBvZHMuYWdlJyxcbiAgICAgICAgICAgZGlzcGxheU5hbWU6ICflkK/liqjml7bpl7QnLFxuICAgICAgICAgICBjZWxsVGVtcGxhdGU6JHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYWdlVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgfSxcbiAgICAgICAgIHsgZmllbGQ6ICckbGFiZWxzVGV4dCcsXG4gICAgICAgICAgIGRpc3BsYXlOYW1lOiAn5pWw5o2u5qCH562+JyxcbiAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJsYWJlbFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgIH0sXG4gICAgICAgICB7IGZpZWxkOiAnJHBvZHMnLFxuICAgICAgICAgICBkaXNwbGF5TmFtZTogJ+i/nuaOpeWPguaVsCcsXG4gICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiY29ubmVjdFBhcmFtVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgfSxcbiAgICAgICAgIHsgZmllbGQ6ICckcG9kc1swXS4kZXZlbnRDb3VudCcsXG4gICAgICAgICAgIGRpc3BsYXlOYW1lOiAn5pyN5Yqh5ZCv5Yqo5pel5b+XJyxcbiAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJldmVudFN1bW1hcnlUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICB9LFxuICAgICAgICAgeyBmaWVsZDogJyRwb2RDb3VudGVycycsXG4gICAgICAgICAgIGRpc3BsYXlOYW1lOiAn5pyN5Yqh54q25oCBJyxcbiAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJwb2RDb3VudHNBbmRMaW5rVGVtcGxhdGUuaHRtbFwiKSxcbiAgICAgICAgICAgY3VzdG9tU29ydEZpZWxkOiAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICBpZihmaWVsZC4kcG9kQ291bnRlcnMucmVhZHkgKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gMztcbiAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZC4kcG9kQ291bnRlcnMudmFsaWQgfHwgZmllbGQuJHBvZENvdW50ZXJzLndhaXRpbmcpe1xuICAgICAgICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICAgICAgIH1lbHNlIGlmKGZpZWxkLiRwb2RDb3VudGVycy5lcnJvcil7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgICB9XG4gICAgICAgICB9LFxuICAgICAgICAgeyBmaWVsZDogJyRleHRyYWN0U3RhdHVzJyxcbiAgICAgICAgICAgZGlzcGxheU5hbWU6ICfmlbDmja7msYfmgLvnirbmgIEnLFxuICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImRhdGFTdW1tYXJ5VGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgfVxuICAgICAgIF1cbiAgICB9XG5cbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAkc2NvcGUuZGVsZXRlUHJvbXB0ID0gKHNlbGVjdGVkKSA9PiB7XG4gICAgICBpZiAoYW5ndWxhci5pc1N0cmluZyhzZWxlY3RlZCkpIHtcbiAgICAgICAgc2VsZWN0ZWQgPSBbe1xuICAgICAgICAgIGlkOiBzZWxlY3RlZFxuICAgICAgICB9XTtcbiAgICAgIH1cbiAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcbiAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXG4gICAgICAgIGluZGV4OiAnbWV0YWRhdGEubmFtZScsXG4gICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkOkFycmF5PEt1YmVQb2Q+LCBuZXh0Okt1YmVQb2QpIHtcbiAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJkZWxldGluZzogXCIsIGdldE5hbWUobmV4dCkpO1xuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMucmVzaXplQ29udHJvbGxlcigkaHR0cCwgS3ViZXJuZXRlc0FwaVVSTCwgbmV4dCwgMCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJ1cGRhdGVkIG51bWJlciBvZiByZXBsaWNhc1wiKTtcbiAgICAgICAgICAgICAgICAgICBLdWJlcm5ldGVzUmVwbGljYXRpb25Db250cm9sbGVycy5kZWxldGUoe1xuICAgICAgICAgICAgICAgICAgICAgaWQ6IGdldE5hbWUobmV4dClcbiAgICAgICAgICAgICAgICAgICB9LCB1bmRlZmluZWQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImRlbGV0ZWQ6IFwiLCBnZXROYW1lKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgIGlmKG5leHQubWV0YWRhdGEubGFiZWxzLnN0eWxlID09PSBcIm9yYWNsZVwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVsZXRlIFwiICsgbmV4dC5tZXRhZGF0YS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuY29ubmVjdE9yYWNsZSgkaHR0cCwgJHRpbWVvdXQsIFwiL2NhbmNlbE9yYWNsZUNvbmVjdGlvblwiLCBcImRlbGV0ZVwiLCBnZXROYW1lKG5leHQpLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGRlbGV0aW5nOiBcIiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnMuZGVsZXRlKHtcbiAgICAgICAgICAgICAgICAgIGlkOiBnZXROYW1lKG5leHQpXG4gICAgICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJkZWxldGVkOiBcIiwgZ2V0TmFtZShuZXh0KSk7XG4gICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZzogXCIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICB9KTsqL1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB0aXRsZTogJ+aYr+WQpumcgOimgeWIoOmZpG9yYWNsZeacjeWKoe+8nycsXG4gICAgICAgIGFjdGlvbjogJ+S7peS4i+eahG9yYWNsZeacjeWKoeWwhuS8muiiq+WIoOmZpDonLFxuICAgICAgICBva1RleHQ6ICfliKDpmaQnLFxuICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICAgIGN1c3RvbTogXCLor6XmnI3liqHliKDpmaTlkI7lsIbkvJrmuIXpmaRvcmFjbGXlr7nlupTmnI3liqHnmoTnq6/lj6PnrYnotYTmupDljaDnlKjvvIzkvYbkuI3liKDpmaTmlbDmja7mlofku7bvvIzmmK/lkKbliKDpmaTvvIzor7fnoa7orqTvvIFcIixcbiAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiLFxuICAgICAgICBjYW5jZWxUZXh0OiBcIuWPlua2iFwiXG4gICAgICB9KS5vcGVuKCk7XG4gICAgfVxuXG4gICAgJHNjb3BlLmNyZWF0ZVJDcz0gKCkgPT4ge1xuICAgICAgdmFyIHhocj0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkgey8vNOihqOekuuaVsOaNruW3sue7j+iwg+eUqOWujOaIkFxuICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkgey8vSFRUUOeahOeKtuaAgeeggVxuICAgICAgICAgICAgdmFyIG9iaj1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhvYmoucGF0aCk7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IG9iai5uYW1lO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhuYW1lICsgXCI9PT09PVwiICtwb3J0KTtcbiAgICAgICAgICAgIHZhciBvYmplY3QgPSB7XG4gICAgICAgICAgICAgICBcIm5hbWVcIjogbmFtZSxcbiAgICAgICAgICAgICAgIFwibGFiZWxzXCI6IHtcbiAgICAgICAgICAgICAgICAgIFwibmFtZVwiIDogbmFtZVxuICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgIFwicGF0aFwiOiBvYmoucGF0aCxcbiAgICAgICAgICAgICAgIFwiaXNUYXJnZXRcIjogXCJ0cnVlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG9iamVjdCk7XG4gICAgICAgICAgICBLdWJlcm5ldGVzLmNyZWF0ZVJDKG9iamVjdCwgKHJjKSA9PntcbiAgICAgICAgICAgICAgICAkaHR0cCh7XG4gICAgICAgICAgICAgICAgICAgdXJsOicveG1sZm9ybXNlcnZlcicsXG4gICAgICAgICAgICAgICAgICAgbWV0aG9kOidQb3N0J1xuICAgICAgICAgICAgICAgIH0pLnN1Y2Nlc3MoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XG4gICAgICAgICAgICAgICAgICAgICBpZihkYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhSW5mb01vZGVsLnNlcnZlcmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLmVycm9yKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xuICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJlcnJvclwiKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLmNvbm5lY3RPcmFjbGUoJGh0dHAsICR0aW1lb3V0LCBcIi9jb25uZWN0VG9PcmFjbGVcIiwgXCJjcmVhdGVcIiwgZ2V0TmFtZShyYyksIDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfWVsc2UgaWYoeGhyLnN0YXR1cyA9PSA0MDMpe1xuICAgICAgICAgICAgIGFsZXJ0KFwi5Lik5qyh5Yib5bu6b3JhY2xl5pyN5Yqh5pe26Ze06Ze06ZqU6ZyA6KaB6LaF6L+HMuWIhumSnyFcIik7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIFwiL29yYWNsZUFwcFBhdGhcIiwgZmFsc2UpOy8v5LiO5pyN5Yqh5Zmo6L+e5o6l5bm25Y+R6YCBXG4gICAgICB4aHIuc2VuZChudWxsKTtcbiAgICB9XG5cbiAgICAkc2NvcGUuc3RvcFByb21wdCA9IChzZWxlY3RlZCkgPT57XG4gICAgICBpZiAoYW5ndWxhci5pc1N0cmluZyhzZWxlY3RlZCkpIHtcbiAgICAgICAgc2VsZWN0ZWQgPSBbe1xuICAgICAgICAgIGlkOiBzZWxlY3RlZFxuICAgICAgICB9XTtcbiAgICAgIH1cblxuICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xuICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcbiAgICAgICAgaW5kZXg6ICdtZXRhZGF0YS5uYW1lJyxcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgZnVuY3Rpb24gc3RvcFNlbGVjdGVkKHNlbGVjdGVkOkFycmF5PEt1YmVQb2Q+LCBuZXh0Okt1YmVQb2QpIHtcbiAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5yZXNpemVDb250cm9sbGVyKCRodHRwLCBLdWJlcm5ldGVzQXBpVVJMLCBuZXh0LCAwLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgIGlmKG5leHQubWV0YWRhdGEubGFiZWxzLnN0eWxlID09PSBcIm9yYWNsZVwiKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJzdG9wIFwiICsgbmV4dC5tZXRhZGF0YS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5jb25uZWN0T3JhY2xlKCRodHRwLCAkdGltZW91dCwgXCIvY2FuY2VsT3JhY2xlQ29uZWN0aW9uXCIsIFwic3RvcFwiLCBnZXROYW1lKG5leHQpLCAwKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICBzdG9wU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgICB9XG4gICAgICAgICAgIHN0b3BTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdGl0bGU6ICfmmK/lkKbpnIDopoHlgZzmraJvcmFjbGXmnI3liqHvvJ8nLFxuICAgICAgYWN0aW9uOiAn5Lul5LiL55qEb3JhY2xl5pyN5Yqh5bCG5Lya6KKr5YGc5q2iOicsXG4gICAgICBva1RleHQ6ICflgZzmraInLFxuICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXInLFxuICAgICAgY3VzdG9tOiBcIuivpeacjeWKoeWBnOatouWQjuWwhuaXoOazlee7p+e7reaPkOS+m+i/nuaOpeiuv+mXruacjeWKoe+8jOS9huWPr+mAmui/h+WQr+WKqOaMiemSrumHjeaWsOWQr+WKqOivpeacjeWKoeS7pei/m+ihjOiuv+mXruOAguaYr+WQpuWBnOatou+8jOivt+ehruiupFwiLFxuICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiLFxuICAgICAgY2FuY2VsVGV4dDogXCLlj5bmtohcIlxuICAgIH0pLm9wZW4oKTtcbiAgIH07XG5cbiAgICRzY29wZS5yZVN0YXJ0UHJvbXB0ID0gKHNlbGVjdGVkKSA9PiB7XG4gICAgICBmdW5jdGlvbiBzdGFydFNlbGVjdGVkKHNlbGVjdGVkOkFycmF5PEt1YmVQb2Q+LCBuZXh0Okt1YmVQb2Qpe1xuICAgICAgICAgaWYobmV4dCl7XG4gICAgICAgICAgICBpZihuZXh0LiRyZXBsaWNhcyA9PT0gMClcbiAgICAgICAgICAgICAgIEt1YmVybmV0ZXMucmVzaXplQ29udHJvbGxlcigkaHR0cCwgS3ViZXJuZXRlc0FwaVVSTCwgbmV4dCwgMSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVzdGFydCBcIiArIG5leHQubWV0YWRhdGEubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5jb25uZWN0T3JhY2xlKCRodHRwLCAkdGltZW91dCwgXCIvY29ubmVjdFRvT3JhY2xlXCIsIFwicmVTdGFydFwiLCBnZXROYW1lKG5leHQpLCAwKTtcbiAgICAgICAgICAgICAgICAgICBzdGFydFNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhcnRTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICB9O1xuXG4gICAkc2NvcGUuZXh0cmFjdERhdGEgPSB7XG4gICAgICAgaXRlbXM6IG51bGwsXG4gICAgICAgc2VsZWN0ZWRJdGVtOiAkc2NvcGUuZmlsdGVyUmVwbGljYXRpb25Db250cm9sbGVyc1swXSB8fCBcIlwiLFxuICAgICAgIGRpYWxvZzogbmV3IFVJLkRpYWxvZygpLFxuICAgICAgIG9uT2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgIHZhciBleHRyYWN0RGF0YSA9ICRzY29wZS5leHRyYWN0RGF0YTtcbiAgICAgICAgICAgICAgIGV4dHJhY3REYXRhLmRpYWxvZy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgdmFyIGZpbHRlclJlcGxpY2F0aW9uQ29udHJvbGxlciA9IGV4dHJhY3REYXRhLnNlbGVjdGVkSXRlbTtcbiAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuZXh0cmFjdERhdGFUb09yYWNsZSgkaHR0cCwgZXh0cmFjdERhdGEuaXRlbXMsIGZpbHRlclJlcGxpY2F0aW9uQ29udHJvbGxlcik7XG4gICAgICAgICAgICAgICBleHRyYWN0RGF0YS5zZWxlY3RlZEl0ZW0gPSAkc2NvcGUuZmlsdGVyUmVwbGljYXRpb25Db250cm9sbGVyc1swXSB8fCBcIlwiO1xuICAgICAgIH0sXG4gICAgICAgb3BlbjogKHNlbGVjdGVkKSA9PiB7XG4gICAgICAgICAgIHZhciBleHRyYWN0RGF0YSA9ICRzY29wZS5leHRyYWN0RGF0YTtcbiAgICAgICAgICAgZXh0cmFjdERhdGEuZGlhbG9nLm9wZW4oKTtcbiAgICAgICAgICAgZXh0cmFjdERhdGEuc2VsZWN0ZWRJdGVtID0gJHNjb3BlLmZpbHRlclJlcGxpY2F0aW9uQ29udHJvbGxlcnNbMF0gfHwgXCJcIjtcbiAgICAgICAgICAgZXh0cmFjdERhdGEuaXRlbXMgPSBzZWxlY3RlZDtcbiAgICAgICAgICAgJHRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgJCgnI25ld0RhdGFOYW1lJykuZm9jdXMoKTtcbiAgICAgICAgICAgfSwgNTApO1xuICAgICAgIH0sXG4gICAgICAgY2xvc2U6ICgpID0+IHtcbiAgICAgICAgICAgJHNjb3BlLmV4dHJhY3REYXRhLmRpYWxvZy5jbG9zZSgpO1xuICAgICAgIH1cbiAgIH07XG5cbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNJbnRlcmZhY2VzLnRzXCIvPlxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBzY2hlbWFTZXRSZXF1aXJlZChzY2hlbWEsIHByb3BlcnR5TmFtZSwgaXNSZXF1aXJlZCA9IHRydWUpIHtcbiAgICBpZiAoc2NoZW1hICYmIHByb3BlcnR5TmFtZSkge1xuICAgICAgdmFyIHJlcXVpcmVkID0gc2NoZW1hLnJlcXVpcmVkO1xuICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgaWYgKCFyZXF1aXJlZCkge1xuICAgICAgICAgIHJlcXVpcmVkID0gW107XG4gICAgICAgICAgc2NoZW1hLnJlcXVpcmVkID0gcmVxdWlyZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHJlcXVpcmVkLCBwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgICAgcmVxdWlyZWQucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICB2YXIgaWR4ID0gcmVxdWlyZWQuaW5kZXhPZihwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAgICAgcmVxdWlyZWQuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgU2VjcmV0Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJTZWNyZXRDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJLOFNDbGllbnRGYWN0b3J5XCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIEs4U0NsaWVudEZhY3RvcnkpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcblxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG4gICAgICAgIHNlbGVjdFN1Yk5hdkJhcigkc2NvcGUsIFwiU2VjcmV0c1wiLCAkc2NvcGUuaWQgPyBcIkVkaXQgU2VjcmV0OiBcIiArICRzY29wZS5pZCA6IFwiQ3JlYXRlIFNlY3JldFwiKTtcblxuICAgICAgICB2YXIga3ViZUNsaWVudCA9IGNyZWF0ZUt1YmVybmV0ZXNDbGllbnQoXCJzZWNyZXRzXCIpO1xuXG4gICAgICAgIHZhciBvblNhdmVVcmwgPSAkbG9jYXRpb24uc2VhcmNoKClbXCJzYXZlZFVybFwiXTtcbiAgICAgICAgdmFyIGNyZWF0ZUtpbmQgPSAkbG9jYXRpb24uc2VhcmNoKClbXCJraW5kXCJdO1xuXG4gICAgICAgICRzY29wZS5zc2hLZXlzID0gc3NoU2VjcmV0RGF0YUtleXM7XG4gICAgICAgICRzY29wZS5odHRwc0tleXMgPSBodHRwc1NlY3JldERhdGFLZXlzO1xuXG4gICAgICAgIHZhciBzZWNyZXRMYWJlbHMgPSB7XG4gICAgICAgICAgXCJzc2gta2V5XCI6IFwiU1NIIHByaXZhdGUga2V5XCIsXG4gICAgICAgICAgXCJzc2gta2V5LnB1YlwiOiBcIlNTSCBwdWJsaWMga2V5XCIsXG4gICAgICAgICAgXCJjYS5jcnRcIjogXCJDQSBDZXJ0aWZpY2F0ZVwiLFxuICAgICAgICAgIFwiLmRvY2tlcmNmZ1wiOiBcIkRvY2tlciBjb25maWdcIixcbiAgICAgICAgICBcInVzZXJuYW1lXCI6IFwiVXNlciBuYW1lXCJcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHNlY3JldFRvb2x0aXBzID0ge1xuICAgICAgICAgIFwic3NoLWtleVwiOiBcIlNTSCBwcml2YXRlIGtleSB0ZXh0IGNvbnRlbnRzXCIsXG4gICAgICAgICAgXCJjYS5jcnRcIjogXCJDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKENBKSBDZXJ0aWZpY2F0ZVwiLFxuICAgICAgICAgIFwiLmRvY2tlcmNmZ1wiOiBcIkRvY2tlciBjb25maWd1cmF0aW9uIHRva2VuXCJcbiAgICAgICAgfTtcblxuXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCRzY29wZS5pZCAmJiAhJHNjb3BlLnNlY3JldCkge1xuICAgICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLnByb3BlcnR5S2V5cyA9ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gXy5rZXlzKHNlY3JldExhYmVscyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLmNoZWNrTmFtZVVuaXF1ZSA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHZhciBhbnN3ZXIgPSB0cnVlO1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUubW9kZWwuc2VjcmV0cywgKHNlY3JldCkgPT4ge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKHNlY3JldCk7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgYW5zd2VyID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGFuc3dlcjtcbiAgICAgICAgfTtcblxuICAgICAgICAkc2NvcGUuY2hlY2tGaWVsZFVuaXF1ZSA9IChrZXkpID0+IHtcbiAgICAgICAgICByZXR1cm4gJHNjb3BlLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPyBmYWxzZSA6IHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLmhhc0FsbEtleXMgPSAoa2V5cykgPT4ge1xuICAgICAgICAgIHZhciBhbnN3ZXIgPSBrZXlzICYmIGtleXMubGVuZ3RoO1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChrZXlzLCAoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoISRzY29wZS5lbnRpdHkucHJvcGVydGllc1trZXldKSB7XG4gICAgICAgICAgICAgIGFuc3dlciA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBhbnN3ZXI7XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLmFkZEZpZWxkRGlhbG9nID0ge1xuICAgICAgICAgIGNvbnRyb2xsZXI6IG51bGwsXG4gICAgICAgICAgbmV3UmVwbGljYXM6IDAsXG4gICAgICAgICAgZGlhbG9nOiBuZXcgVUkuRGlhbG9nKCksXG4gICAgICAgICAgb25PazogKCkgPT4ge1xuICAgICAgICAgICAgJHNjb3BlLmFkZEZpZWxkRGlhbG9nLmRpYWxvZy5jbG9zZSgpO1xuICAgICAgICAgICAgJHNjb3BlLmFkZERhdGFGaWVsZCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb3BlbjogKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgIHZhciBhZGRGaWVsZERpYWxvZyA9ICRzY29wZS5hZGRGaWVsZERpYWxvZztcbiAgICAgICAgICAgIGFkZEZpZWxkRGlhbG9nLmRpYWxvZy5vcGVuKCk7XG5cbiAgICAgICAgICAgICR0aW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgJCgnI25ld0RhdGFOYW1lJykuZm9jdXMoKTtcbiAgICAgICAgICAgIH0sIDUwKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsb3NlOiAoKSA9PiB7XG4gICAgICAgICAgICAkc2NvcGUuYWRkRmllbGREaWFsb2cuZGlhbG9nLmNsb3NlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG5cblxuICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZCA9ICgpID0+IHtcbiAgICAgICAgICAkc2NvcGUuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLmFkZEZpZWxkcyA9IChrZXlzKSA9PiB7XG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGtleXMsIChrZXkpID0+IGFkZEZpZWxkKGtleSkpO1xuICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkRmllbGQoa2V5KSB7XG4gICAgICAgICAgdmFyIHByb3BlcnR5ID0gY3JlYXRlUHJvcGVydHkoa2V5LCBcIlwiKTtcbiAgICAgICAgICAkc2NvcGUuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IHByb3BlcnR5O1xuICAgICAgICAgICRzY29wZS5lbnRpdHkubmV3RGF0YUtleSA9IFwiXCI7XG4gICAgICAgICAgJHNjb3BlLnNob3dBZGREYXRhRmllbGRGb3JtID0gZmFsc2U7XG4gICAgICAgICAgJHNjb3BlLmVudGl0eUNoYW5nZWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgICRzY29wZS5hZGREYXRhRmllbGQgPSAoKSA9PiB7XG4gICAgICAgICAgdmFyIGtleSA9ICRzY29wZS5lbnRpdHkubmV3RGF0YUtleTtcbiAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBhZGRGaWVsZChrZXkpO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLmRlbGV0ZVByb3BlcnR5ID0gKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSAkc2NvcGUuZW50aXR5LnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkKCk7XG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAkc2NvcGUuY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfTtcblxuICAgICAgICAkc2NvcGUuc2F2ZSA9ICgpID0+IHtcbiAgICAgICAgICB2YXIgZW50aXR5ID0gJHNjb3BlLmVudGl0eSB8fCB7fTtcbiAgICAgICAgICB2YXIgbmFtZSA9IGVudGl0eS5uYW1lO1xuICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBpZiAoISRzY29wZS5zZWNyZXQpIHtcbiAgICAgICAgICAgICAgJHNjb3BlLnNlY3JldCA9IHtcbiAgICAgICAgICAgICAgICBhcGlWZXJzaW9uOiBLdWJlcm5ldGVzLmRlZmF1bHRBcGlWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGtpbmQ6IFwiU2VjcmV0XCIsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwiXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRhdGE6IHt9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBkYXRhID0ge307XG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZW50aXR5LnByb3BlcnRpZXMsIChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgICB2YXIga2V5ID0gcHJvcGVydHkua2V5O1xuICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0eS52YWx1ZSB8fCBcIlwiO1xuICAgICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZGF0YVtrZXldID0gd2luZG93LmJ0b2EodmFsdWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICRzY29wZS5zZWNyZXQubWV0YWRhdGEubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAkc2NvcGUuc2VjcmV0LmRhdGEgPSBkYXRhO1xuXG4gICAgICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbignaW5mbycsIFwiU2F2aW5nIHNlY3JldCBcIiArIG5hbWUpO1xuXG4gICAgICAgICAgICBrdWJlQ2xpZW50LnB1dCgkc2NvcGUuc2VjcmV0LFxuICAgICAgICAgICAgICAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBzZWNyZXRzTGluayA9IG9uU2F2ZVVybCB8fCBEZXZlbG9wZXIubmFtZXNwYWNlTGluaygkc2NvcGUsICRyb3V0ZVBhcmFtcywgXCJzZWNyZXRzXCIpO1xuICAgICAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAob25TYXZlVXJsKSB7XG4gICAgICAgICAgICAgICAgICBwYXJhbXNbJ3NlY3JldCddID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uLnBhdGgoc2VjcmV0c0xpbmspO1xuICAgICAgICAgICAgICAgICRsb2NhdGlvbi5zZWFyY2gocGFyYW1zKTtcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhcIm5hdmlnYXRpbmcgdG8gVVJMOiBcIiArIHNlY3JldHNMaW5rICsgXCIgd2l0aCBwYXJhbXMgXCIgKyBhbmd1bGFyLnRvSnNvbigkbG9jYXRpb24uc2VhcmNoKCkpKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIENvcmUubm90aWZpY2F0aW9uKCdlcnJvcicsIFwiRmFpbGVkIHRvIHNlY3JldCBcIiArIG5hbWUgKyBcIlxcblwiICsgZXJyKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcblxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eShrZXksIHRleHQpIHtcbiAgICAgICAgICB2YXIgbGFiZWwgPSBzZWNyZXRMYWJlbHNba2V5XSB8fCBDb3JlLmh1bWFuaXplVmFsdWUoa2V5KTtcbiAgICAgICAgICB2YXIgdG9vbHRpcCA9IHNlY3JldFRvb2x0aXBzW2tleV0gfHwgXCJWYWx1ZSBvZiB0aGUgXCIgKyBsYWJlbDtcblxuICAgICAgICAgIHZhciByb3dzID0gNTtcbiAgICAgICAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KFwiXFxuXCIpLmxlbmd0aCArIDE7XG4gICAgICAgICAgaWYgKGxpbmVzID4gcm93cykge1xuICAgICAgICAgICAgcm93cyA9IGxpbmVzO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgdHlwZSA9IFwidGV4dGFyZWFcIjtcbiAgICAgICAgICBpZiAoa2V5ID09PSBcInVzZXJuYW1lXCIpIHtcbiAgICAgICAgICAgIHR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgICAgICB0ZXh0ID0gY3VycmVudFVzZXJOYW1lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwicGFzc3dvcmRcIikge1xuICAgICAgICAgICAgdHlwZSA9IFwicGFzc3dvcmRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHByb3BlcnR5ID0ge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgICB0b29sdGlwOiB0b29sdGlwLFxuICAgICAgICAgICAgcm93czogcm93cyxcbiAgICAgICAgICAgIHZhbHVlOiB0ZXh0LFxuICAgICAgICAgICAgdHlwZTogdHlwZVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XG4gICAgICAgICAgJHNjb3BlLmNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAkc2NvcGUuZW50aXR5ID0ge1xuICAgICAgICAgICAgbmFtZTogJHNjb3BlLmlkLFxuICAgICAgICAgICAgcHJvcGVydGllczoge31cbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICgkc2NvcGUuaWQpIHtcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUubW9kZWwuc2VjcmV0cywgKHNlY3JldCkgPT4ge1xuICAgICAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VjcmV0KTtcbiAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICRzY29wZS5pZCkge1xuICAgICAgICAgICAgICAgICRzY29wZS5zZWNyZXQgPSBzZWNyZXQ7XG4gICAgICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHNlY3JldC5kYXRhLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdmFyIHRleHQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcodmFsdWUpICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB3aW5kb3cuYXRvYih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBjcmVhdGVQcm9wZXJ0eShrZXksIHRleHQpO1xuICAgICAgICAgICAgICAgICAgJHNjb3BlLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSBwcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjcmVhdGVLaW5kID09PSBcInNzaFwiKSB7XG4gICAgICAgICAgICAgICRzY29wZS5hZGRGaWVsZHMoJHNjb3BlLnNzaEtleXMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjcmVhdGVLaW5kID09PSBcImh0dHBzXCIpIHtcbiAgICAgICAgICAgICAgJHNjb3BlLmFkZEZpZWxkcygkc2NvcGUuaHR0cHNLZXlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzTW9kZWwudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwidXRpbEhlbHBlcnMudHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIFNlY3JldHNDb250cm9sbGVyID0gY29udHJvbGxlcihcIlNlY3JldHNDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIlNlcnZpY2VSZWdpc3RyeVwiLCBcIiRkaWFsb2dcIiwgXCIkd2luZG93XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIFNlcnZpY2VSZWdpc3RyeSwgJGRpYWxvZywgJHdpbmRvdywgJHRlbXBsYXRlQ2FjaGUsICRyb3V0ZVBhcmFtcywgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsIGxvY2FsU3RvcmFnZSwgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuJGNyZWF0ZVNlY3JldExpbmsgPSBEZXZlbG9wZXIubmFtZXNwYWNlTGluaygkc2NvcGUsICRyb3V0ZVBhcmFtcywgXCJzZWNyZXRDcmVhdGVcIik7XG5cbiAgICB2YXIga3ViZUNsaWVudCA9IGNyZWF0ZUt1YmVybmV0ZXNDbGllbnQoXCJzZWNyZXRzXCIpO1xuXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgZGF0YTogJ21vZGVsLnNlY3JldHMnLFxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgfSxcbiAgICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnX2tleScsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcbiAgICAgICAgICBkZWZhdWx0U29ydDogdHJ1ZSxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImlkVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmllbGQ6ICckbGFiZWxzVGV4dCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdMYWJlbHMnLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFiZWxUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgfTtcblxuICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcbiAgICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XG4gICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcbiAgICAgICAgIGluZGV4OiAnbWV0YWRhdGEubmFtZScsXG4gICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBuZXh0KSB7XG4gICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICBrdWJlQ2xpZW50LmRlbGV0ZShuZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgICAgICAgLy8gdXBkYXRlRGF0YSgpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgfVxuICAgICAgICAgfSxcbiAgICAgICAgIHRpdGxlOiAnRGVsZXRlIFNlY3JldHMnLFxuICAgICAgICAgYWN0aW9uOiAnVGhlIGZvbGxvd2luZyBTZWNyZXRzIHdpbGwgYmUgZGVsZXRlZDonLFxuICAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcbiAgICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcbiAgICAgICAgIGN1c3RvbTogXCJUaGlzIG9wZXJhdGlvbiBpcyBwZXJtYW5lbnQgb25jZSBjb21wbGV0ZWQhXCIsXG4gICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcbiAgICAgICB9KS5vcGVuKCk7XG4gICAgIH07XG5cbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG4gIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBTZXJ2aWNlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJTZXJ2aWNlQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAkc2NvcGUucmF3TW9kZWwgPSBudWxsO1xuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgJHNjb3BlLml0ZW1Db25maWcgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdeXFxcXC9sYWJlbHMkJzoge1xuICAgICAgICAgIHRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoJ2xhYmVsVGVtcGxhdGUuaHRtbCcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICB9KTtcblxuICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLnNlcnZpY2VzJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH0sIHRydWUpO1xuXG4gICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH0pO1xuXG4gICAgJHNjb3BlLmZsaXBSYXcgPSAoKSA9PiB7XG4gICAgICAkc2NvcGUucmF3TW9kZSA9ICEkc2NvcGUucmF3TW9kZTtcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgfTtcblxuICAgIHVwZGF0ZURhdGEoKTtcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAgICRzY29wZS5uYW1lc3BhY2UgPSAkcm91dGVQYXJhbXNbXCJuYW1lc3BhY2VcIl0gfHwgS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlO1xuICAgICAgJHNjb3BlLml0ZW0gPSAkc2NvcGUubW9kZWwuZ2V0U2VydmljZSgkc2NvcGUubmFtZXNwYWNlLCAkc2NvcGUuaWQpO1xuICAgICAgaWYgKCRzY29wZS5pdGVtKSB7XG4gICAgICAgICRzY29wZS5yYXdNb2RlbCA9IHRvUmF3WWFtbCgkc2NvcGUuaXRlbSk7XG4gICAgICB9XG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgIH1cbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIFNlcnZpY2VFZGl0Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJTZXJ2aWNlRWRpdENvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCBcIlNjaGVtYVJlZ2lzdHJ5XCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBzY2hlbWFzOkhhd3Rpb0Zvcm1zLlNjaGVtYVJlZ2lzdHJ5KSA9PiB7XG5cbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgJHNjb3BlLmNvbmZpZyA9IHNjaGVtYXMuY2xvbmVTY2hlbWEoXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VcIik7XG4gICAgLy8kc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5rdWJlcm5ldGVzX3YxYmV0YTJfU2VydmljZTtcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcbiAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICB9KTtcblxuICAgIHVwZGF0ZURhdGEoKTtcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICBpZiAoJHNjb3BlLmlkKSB7XG4gICAgICAgICRzY29wZS5lbnRpdHkgPSAkc2NvcGUubW9kZWwuZ2V0U2VydmljZShLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UsICRzY29wZS5pZCk7XG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNNb2RlbC50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIF9tb2R1bGUuZmFjdG9yeSgnU2VydmljZVJlZ2lzdHJ5JywgWygpID0+IHtcbiAgICByZXR1cm4gbmV3IFNlcnZpY2VSZWdpc3RyeVNlcnZpY2UoKTtcbiAgfV0pO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGEgc2ltcGxlIGludGVyZmFjZSB0byBzZXJ2aWNlIGRpc2NvdmVyeSB0aGF0IGNhbiBiZSB1c2VkIGVhcmx5IG9uIGluIHRoZSBhcHBsaWNhdGlvbiBsaWZlY3ljbGUgYmVmb3JlIHRoZVxuICAgKiB1bmRlcmx5aW5nIG1vZGVsIGhhcyBiZWVuIGNyZWF0ZWQgdmlhIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG4gICAqL1xuICBleHBvcnQgY2xhc3MgU2VydmljZVJlZ2lzdHJ5U2VydmljZSB7XG4gICAgcHJpdmF0ZSBtb2RlbDpLdWJlcm5ldGVzTW9kZWxTZXJ2aWNlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhIHNlcnZpY2UgYXZhaWxhYmxlIGZvciB0aGUgZ2l2ZW4gSUQgb3IgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFzU2VydmljZShzZXJ2aWNlTmFtZTogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5maW5kU2VydmljZShzZXJ2aWNlTmFtZSkgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2VydmljZSBmb3IgdGhlIGdpdmVuIHNlcnZpY2UgbmFtZSAoSUQpIG9yIG51bGwgaWYgaXQgY2Fubm90IGJlIGZvdW5kXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2VydmljZU5hbWUgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gbG9vayBmb3JcbiAgICAgKiBAcmV0dXJuIHtudWxsfVxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kU2VydmljZShzZXJ2aWNlTmFtZTogc3RyaW5nKSB7XG4gICAgICB2YXIgYW5zd2VyID0gbnVsbDtcbiAgICAgIGlmIChzZXJ2aWNlTmFtZSkge1xuICAgICAgICB2YXIgbW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG4gICAgICAgIGlmIChtb2RlbCkge1xuICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSBtb2RlbC5jdXJyZW50TmFtZXNwYWNlKCk7XG4gICAgICAgICAgcmV0dXJuIG1vZGVsLmdldFNlcnZpY2UobmFtZXNwYWNlICxzZXJ2aWNlTmFtZSk7XG4vKlxuICAgICAgICBUT0RPIGxldHMgb25seSBsb29rIGluIHRoZSBjdXJyZW50IG5hbWVzcGFjZVxuICAgICAgICBhbmd1bGFyLmZvckVhY2gobW9kZWwuc2VydmljZXMsIChzZXJ2aWNlKSA9PiB7XG4gICAgICAgICAgaWYgKHNlcnZpY2VOYW1lID09PSBnZXROYW1lKHNlcnZpY2UpKSB7XG4gICAgICAgICAgICBhbnN3ZXIgPSBzZXJ2aWNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4qL1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYW5zd2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNlcnZpY2UgbGluayBmb3IgdGhlIGdpdmVuIHNlcnZpY2UgbmFtZVxuICAgICAqXG4gICAgICogQHBhcmFtIHNlcnZpY2VOYW1lIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlXG4gICAgICogQHJldHVybiB7bnVsbH1cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VydmljZUxpbmsoc2VydmljZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICB2YXIgc2VydmljZSA9IHRoaXMuZmluZFNlcnZpY2Uoc2VydmljZU5hbWUpO1xuICAgICAgcmV0dXJuIHNlcnZpY2VMaW5rVXJsKHNlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNlcnZpY2UgbGluayBmb3IgdGhlIGdpdmVuIHNlcnZpY2UgbmFtZSBpZiBpdHMgcmVhZHkgKGhhcyBhdCBsZWFzdCBvbmUgcmVhZHkgcG9kKVxuICAgICAqXG4gICAgICogQHBhcmFtIHNlcnZpY2VOYW1lIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlXG4gICAgICogQHJldHVybiB7bnVsbH1cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VydmljZVJlYWR5TGluayhzZXJ2aWNlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIHZhciBzZXJ2aWNlID0gdGhpcy5maW5kU2VydmljZShzZXJ2aWNlTmFtZSk7XG4gICAgICBpZiAocmVhZHlQb2RDb3VudChzZXJ2aWNlKSkge1xuICAgICAgICByZXR1cm4gc2VydmljZUxpbmtVcmwoc2VydmljZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1vZGVsKCk6S3ViZXJuZXRlc01vZGVsU2VydmljZSB7XG4gICAgICB2YXIgYW5zd2VyID0gdGhpcy5tb2RlbDtcbiAgICAgIC8vIGxldHMgYWxsb3cgbGF6eSBsb2FkIHNvIHdlIGNhbiBiZSBpbnZva2VkIGJlZm9yZSB0aGUgaW5qZWN0b3IgaGFzIGJlZW4gY3JlYXRlZFxuICAgICAgaWYgKCFhbnN3ZXIpIHtcbiAgICAgICAgdmFyIGluamVjdG9yID0gSGF3dGlvQ29yZS5pbmplY3RvcjtcbiAgICAgICAgaWYgKGluamVjdG9yKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbCA9IGluamVjdG9yLmdldDxLdWJlcm5ldGVzTW9kZWxTZXJ2aWNlPignS3ViZXJuZXRlc01vZGVsJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFuc3dlciA9IHRoaXMubW9kZWw7XG4gICAgICByZXR1cm4gYW5zd2VyO1xuICAgIH1cbiAgfVxufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIFNlcnZpY2VBcHBzID0gX21vZHVsZS5jb250cm9sbGVyKCdLdWJlcm5ldGVzLlNlcnZpY2VBcHBzJywgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsKSA9PiB7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICB9KTtcblxuICBleHBvcnQgdmFyIFNlcnZpY2VzID0gY29udHJvbGxlcihcIlNlcnZpY2VzXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1NlcnZpY2VzXCIsIFwiS3ViZXJuZXRlc1BvZHNcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1NlcnZpY2VzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNQb2RzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNTdGF0ZSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuXG4gICAgQ29udHJvbGxlckhlbHBlcnMuYmluZE1vZGVsVG9TZWFyY2hQYXJhbSgkc2NvcGUsICRsb2NhdGlvbiwgJ21vZGUnLCAnbW9kZScsICdsaXN0Jyk7XG5cbiAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XG4gICAgICBkYXRhOiAnbW9kZWwuc2VydmljZXMnLFxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgfSxcbiAgICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAgeyBmaWVsZDogJ19rZXknLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpZFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAgeyBmaWVsZDogJyRzZXJ2aWNlVXJsJyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0FkZHJlc3MnLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicG9ydGFsQWRkcmVzcy5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHsgZmllbGQ6ICckcG9kQ291bnQnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnUG9kcycsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJwb2RDb3VudHNBbmRMaW5rVGVtcGxhdGUuaHRtbFwiKSxcbiAgICAgICAgICBjdXN0b21Tb3J0RmllbGQ6IChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBjb25jYXQgYWxsIHRoZSBwb2QgY291bnRlcnNcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZpZWxkLiRwb2RDb3VudGVycy5yZWFkeSB8fCAwO1xuICAgICAgICAgICAgdmFyIHZhbGlkID0gZmllbGQuJHBvZENvdW50ZXJzLnZhbGlkIHx8IDA7XG4gICAgICAgICAgICB2YXIgd2FpdGluZyA9IGZpZWxkLiRwb2RDb3VudGVycy53YWl0aW5nIHx8IDA7XG4gICAgICAgICAgICB2YXIgZXJyb3IgPSBmaWVsZC4kcG9kQ291bnRlcnMuZXJyb3IgfHwgMDtcbiAgICAgICAgICAgIHJldHVybiByZWFkeSArIHZhbGlkICsgd2FpdGluZyArIGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBmaWVsZDogJyRzZWxlY3RvclRleHQnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU2VsZWN0b3InLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwic2VsZWN0b3JUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHsgZmllbGQ6ICckbGFiZWxzVGV4dCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdMYWJlbHMnLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFiZWxUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xuICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoc2VsZWN0ZWQpKSB7XG4gICAgICAgIHNlbGVjdGVkID0gW3tcbiAgICAgICAgICBpZDogc2VsZWN0ZWRcbiAgICAgICAgfV07XG4gICAgICB9XG4gICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XG4gICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxuICAgICAgICBpbmRleDogJ21ldGFkYXRhLm5hbWUnLFxuICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZDpBcnJheTxLdWJlUG9kPiwgbmV4dDpLdWJlUG9kKSB7XG4gICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZGVsZXRpbmc6IFwiLCBnZXROYW1lKG5leHQpKTtcbiAgICAgICAgICAgICAgICBLdWJlcm5ldGVzU2VydmljZXMuZGVsZXRlKHtcbiAgICAgICAgICAgICAgICAgIGlkOiBnZXROYW1lKG5leHQpXG4gICAgICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJkZWxldGVkOiBcIiwgZ2V0TmFtZShuZXh0KSk7XG4gICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZzogXCIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6ICdEZWxldGUgc2VydmljZXM/JyxcbiAgICAgICAgYWN0aW9uOiAnVGhlIGZvbGxvd2luZyBzZXJ2aWNlcyB3aWxsIGJlIGRlbGV0ZWQ6JyxcbiAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcbiAgICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXInLFxuICAgICAgICBjdXN0b206IFwiVGhpcyBvcGVyYXRpb24gaXMgcGVybWFuZW50IG9uY2UgY29tcGxldGVkIVwiLFxuICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcbiAgICAgIH0pLm9wZW4oKTtcbiAgICB9O1xuXG4gIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgLy8gY29udHJvbGxlciBmb3IgdGhlIHN0YXR1cyBpY29uIGNlbGxcbiAgZXhwb3J0IHZhciBQb2RTdGF0dXMgPSBjb250cm9sbGVyKFwiUG9kU3RhdHVzXCIsIFtcIiRzY29wZVwiLCAoJHNjb3BlKSA9PiB7XG4gICAgJHNjb3BlLnN0YXR1c01hcHBpbmcgPSAodGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHN0YXR1c1RleHRUb0Nzc0NsYXNzKHRleHQpO1xuICAgIH1cbiAgfV0pO1xuXG4gIF9tb2R1bGUuY29udHJvbGxlcihcIkt1YmVybmV0ZXMuVGVybUNvbnRyb2xsZXJcIiwgKCRzY29wZSwgVGVybWluYWxTZXJ2aWNlKSA9PiB7XG4gICAgJHNjb3BlLmNhbkNvbm5lY3RUbyA9IChjb250YWluZXIpID0+IHtcbiAgICAgIGlmIChjb250YWluZXIuc2VjdXJpdHlDb250ZXh0ICYmIGNvbnRhaW5lci5zZWN1cml0eUNvbnRleHQucHJpdmlsZWdlZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgJHNjb3BlLm9wZW5UZXJtaW5hbCA9IChzZWxmTGluaywgY29udGFpbmVyTmFtZSkgPT4ge1xuICAgICAgdmFyIGlkID0gVGVybWluYWxTZXJ2aWNlLm5ld1Rlcm1pbmFsKHNlbGZMaW5rLCBjb250YWluZXJOYW1lKTtcbiAgICAgIGxvZy5kZWJ1ZyhcIkNyZWF0ZWQgdGVybWluYWwsIGlkOiBcIiwgaWQpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gY29udHJvbGxlciB0aGF0IGRlYWxzIHdpdGggdGhlIGxhYmVscyBwZXIgcG9kXG4gIGV4cG9ydCB2YXIgTGFiZWxzID0gY29udHJvbGxlcihcIkxhYmVsc1wiLCBbXCIkc2NvcGVcIiwgXCIkbG9jYXRpb25cIiwgKCRzY29wZSwgJGxvY2F0aW9uKSA9PiB7XG4gICAgJHNjb3BlLmxhYmVscyA9IFtdO1xuICAgIHZhciBsYWJlbEtleVdlaWdodHMgPSB7XG4gICAgICBcInJlZ2lvblwiOiAxLFxuICAgICAgXCJzeXN0ZW1cIjogMixcbiAgICAgIFwidHlwZVwiOiAzLFxuICAgICAgXCJiYXRjaFwiOiA0LFxuICAgICAgXCJ2ZXJzaW9uXCI6IDVcbiAgICB9O1xuICAgICRzY29wZS4kd2F0Y2goJ2VudGl0eScsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICAvLyBsb2cuZGVidWcoXCJsYWJlbHM6IFwiLCBuZXdWYWx1ZSk7XG4gICAgICAgIC8vIG1hc3NhZ2UgdGhlIGxhYmVscyBhIGJpdFxuICAgICAgICAkc2NvcGUubGFiZWxzID0gW107XG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChDb3JlLnBhdGhHZXQoJHNjb3BlLmVudGl0eSwgW1wibWV0YWRhdGFcIiwgXCJsYWJlbHNcIl0pLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGlmIChrZXkgPT09ICdmYWJyaWM4JyB8fCBrZXkgPT09ICdzdHlsZScgfHwga2V5ID09PSAnc3RhdHVzJyB8fCAoa2V5ID09PSAnaXNUYXJnZXQnICYmIHZhbHVlID09PSAnZmFsc2UnKSB8fCBrZXkgPT09ICdpc0V4dHJhY3QnIHx8IGtleSA9PT0gJ25hbWUnKSB7XG4gICAgICAgICAgICAvLyBUT0RPIG5vdCBzdXJlIHdoYXQgdGhpcyBpcyBmb3IsIHRoZSBjb250YWluZXIgdHlwZT9cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAkc2NvcGUubGFiZWxzLnB1c2goe1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICB0aXRsZTogdmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gIGxldHMgc29ydCBieSBrZXkgYnV0IGxldHMgbWFrZSBzdXJlIHRoYXQgd2Ugd2VpZ2h0IGNlcnRhaW4gbGFiZWxzIHNvIHRoZXkgYXJlIGZpcnN0XG4gICAgICAgICRzY29wZS5sYWJlbHMgPSAkc2NvcGUubGFiZWxzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBmdW5jdGlvbiBnZXRXZWlnaHQoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gbGFiZWxLZXlXZWlnaHRzW2tleV0gfHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG4xID0gYVtcImtleVwiXTtcbiAgICAgICAgICB2YXIgbjIgPSBiW1wia2V5XCJdO1xuICAgICAgICAgIHZhciB3MSA9IGdldFdlaWdodChuMSk7XG4gICAgICAgICAgdmFyIHcyID0gZ2V0V2VpZ2h0KG4yKTtcbiAgICAgICAgICB2YXIgZGlmZiA9IHcxIC0gdzI7XG4gICAgICAgICAgaWYgKGRpZmYgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgfSBlbHNlIGlmIChkaWZmID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuMSAmJiBuMikge1xuICAgICAgICAgICAgaWYgKG4xID4gbjIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG4xIDwgbjIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChuMSA9PT0gbjIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG4xKSB7XG4gICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuaGFuZGxlQ2xpY2sgPSAoZW50aXR5LCBsYWJlbFR5cGU6c3RyaW5nLCB2YWx1ZSkgPT4ge1xuICAgICAgLy8gbG9nLmRlYnVnKFwiaGFuZGxlQ2xpY2ssIGVudGl0eTogXCIsIGVudGl0eSwgXCIga2V5OiBcIiwgbGFiZWxUeXBlLCBcIiB2YWx1ZTogXCIsIHZhbHVlKTtcbiAgICAgICRzY29wZS4kZW1pdCgnbGFiZWxGaWx0ZXJVcGRhdGUnLCB2YWx1ZS50aXRsZSlcbiAgICB9XG5cbiAgICAkc2NvcGUubGFiZWxDbGFzcyA9IGNvbnRhaW5lckxhYmVsQ2xhc3M7XG4gIH1dKTtcblxuICAvL+acjeWKoeeKtuaAgei/h+a7pFxuICBleHBvcnQgdmFyIFN0YXR1cyA9IGNvbnRyb2xsZXIoJ1N0YXR1cycsIFtcIiRzY29wZVwiLCBcIiRodHRwXCIsIFwiJGludGVydmFsXCIsIFwiJGxvY2F0aW9uXCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCAoJHNjb3BlLCAkaHR0cCwgJGludGVydmFsLCAkbG9jYXRpb24sIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcbiAgICAgIC8qJHNjb3BlLiR3YXRjaCgnZW50aXR5JywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xuICAgICAgICAgIGlmKG5ld1ZhbHVlKVxuICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5ld1ZhbHVlKTtcbiAgICAgIH0sdHJ1ZSk7Ki9cbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBfbW9kdWxlLmRpcmVjdGl2ZShcImhhd3Rpb1RhYnNcIiwgWydIYXd0aW9TdWJUYWJzJywgKEhhd3Rpb1N1YlRhYnMpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbGluazogKHNjb3BlLCBlbGVtZW50LCBhdHRycykgPT4ge1xuICAgICAgICBIYXd0aW9TdWJUYWJzLmFwcGx5KHNjb3BlLiRldmFsKCdzdWJUYWJDb25maWcnKSk7XG4gICAgICB9XG4gICAgfTtcbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcbiAgZXhwb3J0IHZhciBUZW1wbGF0ZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiVGVtcGxhdGVDb250cm9sbGVyXCIsIFtcbiAgICBcIiRzY29wZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCJtYXJrZWRcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRtb2RhbFwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBtYXJrZWQsICR0ZW1wbGF0ZUNhY2hlLCAkbW9kYWwsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG4gICAgdmFyIG1vZGVsID0gJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICRzY29wZS5maWx0ZXJUZXh0ID0gJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXTtcblxuICAgICRzY29wZS50YXJnZXROYW1lc3BhY2UgPSAkcm91dGVQYXJhbXMudGFyZ2V0TmFtZXNwYWNlO1xuICAgIGluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAkc2NvcGUuJHdhdGNoQ29sbGVjdGlvbignbW9kZWwubmFtZXNwYWNlcycsICgpID0+IHtcbiAgICAgIGlmICghJHNjb3BlLnRhcmdldE5hbWVzcGFjZSkge1xuICAgICAgICAkc2NvcGUudGFyZ2V0TmFtZXNwYWNlID0gbW9kZWwuY3VycmVudE5hbWVzcGFjZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJldHVyblRvID0gbmV3IFVSSSgkbG9jYXRpb24uc2VhcmNoKClbJ3JldHVyblRvJ10gfHwgJy9rdWJlcm5ldGVzL2FwcHMnKTtcblxuICAgIGZ1bmN0aW9uIGdvQmFjaygpIHtcbiAgICAgICRsb2NhdGlvbi5wYXRoKHJldHVyblRvLnBhdGgoKSkuc2VhcmNoKHJldHVyblRvLnF1ZXJ5KHRydWUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRBbm5vdGF0aW9ucyhvYmopIHtcbiAgICAgIHJldHVybiBDb3JlLnBhdGhHZXQob2JqLCBbJ21ldGFkYXRhJywgJ2Fubm90YXRpb25zJ10pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFZhbHVlRm9yKG9iaiwga2V5KSB7XG4gICAgICB2YXIgYW5ub3RhdGlvbnMgPSBnZXRBbm5vdGF0aW9ucyhvYmopO1xuICAgICAgaWYgKCFhbm5vdGF0aW9ucykge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShvYmopO1xuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgdmFyIGZ1bGxLZXkgPSBcImZhYnJpYzguXCIgKyBuYW1lICsgXCIvXCIgKyBrZXk7XG4gICAgICAgIHZhciBhbnN3ZXIgPSBhbm5vdGF0aW9uc1tmdWxsS2V5XTtcbiAgICAgICAgaWYgKGFuc3dlcikge1xuICAgICAgICAgIHJldHVybiBhbnN3ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBrZXk6IGFueSA9IF8uZmluZChfLmtleXMoYW5ub3RhdGlvbnMpLCAoazogc3RyaW5nKSA9PiBfLmVuZHNXaXRoKGssIGtleSkpO1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICByZXR1cm4gYW5ub3RhdGlvbnNba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgICRzY29wZS5jYW5jZWwgPSAoKSA9PiB7XG4gICAgICBpZiAoJHNjb3BlLmZvcm1Db25maWcpIHtcbiAgICAgICAgZGVsZXRlICRzY29wZS5mb3JtQ29uZmlnO1xuICAgICAgICBkZWxldGUgJHNjb3BlLmVudGl0eTtcbiAgICAgICAgJHNjb3BlLm9iamVjdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGdvQmFjaygpO1xuICAgIH1cblxuICAgIC8qXG4gICAgJHNjb3BlLiR3YXRjaCgnbW9kZWwudGVtcGxhdGVzLmxlbmd0aCcsIChuZXdWYWx1ZSkgPT4ge1xuICAgICAgaWYgKG5ld1ZhbHVlID09PSAwKSB7XG4gICAgICAgIGdvQmFjaygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgICovXG5cbiAgICAkc2NvcGUuZmlsdGVyVGVtcGxhdGVzID0gKHRlbXBsYXRlKSA9PiB7XG4gICAgICBpZiAoQ29yZS5pc0JsYW5rKCRzY29wZS5maWx0ZXJUZXh0KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfLmNvbnRhaW5zKGFuZ3VsYXIudG9Kc29uKHRlbXBsYXRlKSwgJHNjb3BlLmZpbHRlclRleHQudG9Mb3dlckNhc2UoKSk7XG4gICAgfTtcblxuICAgICRzY29wZS5vcGVuRnVsbERlc2NyaXB0aW9uID0gKHRlbXBsYXRlKSA9PiB7XG4gICAgICB2YXIgdGV4dCA9IG1hcmtlZChnZXRWYWx1ZUZvcih0ZW1wbGF0ZSwgJ2Rlc2NyaXB0aW9uJykgfHwgJ05vIGRlc2NyaXB0aW9uJyk7XG4gICAgICB2YXIgbW9kYWwgPSAkbW9kYWwub3Blbih7XG4gICAgICAgIHRlbXBsYXRlVXJsOiBVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCAndGVtcGxhdGVEZXNjcmlwdGlvbi5odG1sJyksXG4gICAgICAgIGNvbnRyb2xsZXI6IFsnJHNjb3BlJywgJyRtb2RhbEluc3RhbmNlJywgKCRzY29wZSwgJG1vZGFsSW5zdGFuY2UpID0+IHtcbiAgICAgICAgICAkc2NvcGUudGV4dCA9IHRleHQsXG4gICAgICAgICAgJHNjb3BlLm9rID0gKCkgPT4ge1xuICAgICAgICAgICAgbW9kYWwuY2xvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1dXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgJHNjb3BlLmdldERlc2NyaXB0aW9uID0gKHRlbXBsYXRlKSA9PiB7XG4gICAgICB2YXIgYW5zd2VyOmFueSA9ICQobWFya2VkKGdldFZhbHVlRm9yKHRlbXBsYXRlLCAnZGVzY3JpcHRpb24nKSB8fCAnTm8gZGVzY3JpcHRpb24nKSk7XG4gICAgICB2YXIgdGV4dERlZmF1bHQgPSBhbnN3ZXIuaHRtbCgpO1xuICAgICAgdmFyIG1heExlbmd0aCA9IDIwMDtcbiAgICAgIGlmICh0ZXh0RGVmYXVsdC5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgdmFyIHRydW5jYXRlZCA9ICQudHJpbSh0ZXh0RGVmYXVsdCkuc3Vic3RyaW5nKDAsIG1heExlbmd0aCkuc3BsaXQoJyAnKS5zbGljZSgwLCAtMSkuam9pbignICcpO1xuICAgICAgICBhbnN3ZXIuaHRtbCh0cnVuY2F0ZWQgKyAnLi4uJyk7XG4gICAgICAgIGFuc3dlci5hcHBlbmQoJHRlbXBsYXRlQ2FjaGUuZ2V0KCd0cnVuY2F0ZWREZXNjcmlwdGlvblRhZy5odG1sJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFuc3dlci5odG1sKCk7XG4gICAgfTtcblxuICAgICRzY29wZS5nZXRJY29uVXJsID0gKHRlbXBsYXRlKSA9PiB7XG4gICAgICByZXR1cm4gZ2V0VmFsdWVGb3IodGVtcGxhdGUsICdpY29uVXJsJykgfHwgZGVmYXVsdEljb25Vcmw7XG4gICAgfTtcblxuICAgICRzY29wZS5kZXBsb3lUZW1wbGF0ZSA9ICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgbG9nLmRlYnVnKFwiVGVtcGxhdGUgcGFyYW1ldGVyczogXCIsIHRlbXBsYXRlLnBhcmFtZXRlcnMpO1xuICAgICAgbG9nLmRlYnVnKFwiVGVtcGxhdGUgb2JqZWN0czogXCIsIHRlbXBsYXRlLm9iamVjdHMpO1xuICAgICAgbG9nLmRlYnVnKFwiVGVtcGxhdGUgYW5ub3RhdGlvbnM6IFwiLCB0ZW1wbGF0ZS5tZXRhZGF0YS5hbm5vdGF0aW9ucyk7XG4gICAgICB2YXIgdGVtcGxhdGVBbm5vdGF0aW9ucyA9IHRlbXBsYXRlLm1ldGFkYXRhLmFubm90YXRpb25zO1xuICAgICAgaWYgKHRlbXBsYXRlQW5ub3RhdGlvbnMpIHtcbiAgICAgICAgXy5mb3JFYWNoKHRlbXBsYXRlLm9iamVjdHMsIChvYmplY3Q6YW55KSA9PiB7XG4gICAgICAgICAgdmFyIGFubm90YXRpb25zID0gb2JqZWN0Lm1ldGFkYXRhLmFubm90YXRpb25zIHx8IHt9O1xuICAgICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShvYmplY3QpO1xuICAgICAgICAgIHZhciBtYXRjaGVzID0gXy5maWx0ZXIoXy5rZXlzKHRlbXBsYXRlQW5ub3RhdGlvbnMpLCAoa2V5KSA9PiBrZXkubWF0Y2goJy4nICsgbmFtZSArICcvJykpO1xuICAgICAgICAgIG1hdGNoZXMuZm9yRWFjaCgobWF0Y2gpID0+IHtcbiAgICAgICAgICAgIGlmICghKG1hdGNoIGluIGFubm90YXRpb25zKSkge1xuICAgICAgICAgICAgICBhbm5vdGF0aW9uc1ttYXRjaF0gPSB0ZW1wbGF0ZUFubm90YXRpb25zW21hdGNoXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvYmplY3QubWV0YWRhdGEuYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9ucztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB2YXIgcm91dGVTZXJ2aWNlTmFtZSA9IDxzdHJpbmc+IHVuZGVmaW5lZDtcbiAgICAgIHZhciBzZXJ2aWNlID0gXy5maW5kKHRlbXBsYXRlLm9iamVjdHMsIChvYmopID0+IHtcbiAgICAgICAgaWYgKGdldEtpbmQob2JqKSA9PT0gXCJTZXJ2aWNlXCIpIHtcbiAgICAgICAgICB2YXIgcG9ydHMgPSBnZXRQb3J0cyhvYmopO1xuICAgICAgICAgIGlmIChwb3J0cyAmJiBwb3J0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHNlcnZpY2UpIHtcbiAgICAgICAgcm91dGVTZXJ2aWNlTmFtZSA9IGdldE5hbWUoc2VydmljZSk7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoXCJTZXJ2aWNlOiBcIiwgc2VydmljZSk7XG4gICAgICBpZiAoKCFyb3V0ZVNlcnZpY2VOYW1lIHx8ICFpc09wZW5TaGlmdCkgJiYgKCF0ZW1wbGF0ZS5wYXJhbWV0ZXJzIHx8IHRlbXBsYXRlLnBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSkge1xuICAgICAgICBsb2cuZGVidWcoXCJObyBwYXJhbWV0ZXJzIHJlcXVpcmVkLCBkZXBsb3lpbmcgb2JqZWN0c1wiKTtcbiAgICAgICAgYXBwbHlPYmplY3RzKHRlbXBsYXRlLm9iamVjdHMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgZm9ybUNvbmZpZyA9IHtcbiAgICAgICAgc3R5bGU6IEhhd3Rpb0Zvcm1zLkZvcm1TdHlsZS5TVEFOREFSRCxcbiAgICAgICAgaGlkZUxlZ2VuZDogdHJ1ZSxcbiAgICAgICAgcHJvcGVydGllczogPGFueT4ge31cbiAgICAgIH07XG4gICAgICB2YXIgcGFyYW1zID0gdGVtcGxhdGUucGFyYW1ldGVycztcbiAgICAgIF8uZm9yRWFjaChwYXJhbXMsIChwYXJhbTphbnkpID0+IHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gPGFueT4ge307XG4gICAgICAgIHByb3BlcnR5LmxhYmVsID0gXy5zdGFydENhc2UocGFyYW0ubmFtZSk7XG4gICAgICAgIHByb3BlcnR5LmRlc2NyaXB0aW9uID0gcGFyYW0uZGVzY3JpcHRpb247XG4gICAgICAgIHByb3BlcnR5LmRlZmF1bHQgPSBwYXJhbS52YWx1ZTtcbiAgICAgICAgLy8gVE9ETywgZG8gcGFyYW1ldGVycyBzdXBwb3J0IHR5cGVzP1xuICAgICAgICBwcm9wZXJ0eS50eXBlID0gJ3N0cmluZyc7XG4gICAgICAgIGZvcm1Db25maWcucHJvcGVydGllc1twYXJhbS5uYW1lXSA9IHByb3BlcnR5O1xuICAgICAgfSk7XG4gICAgICBpZiAocm91dGVTZXJ2aWNlTmFtZSAmJiBpc09wZW5TaGlmdCkge1xuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXMuY3JlYXRlUm91dGUgPSB7XG4gICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgICAgbGFiZWw6IFwiQ3JlYXRlIFJvdXRlXCJcbiAgICAgICAgfTtcbi8qXG4gICAgICAgIGZvcm1Db25maWcucHJvcGVydGllcy5yb3V0ZU5hbWUgPSB7XG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgbGFiZWw6ICdSb3V0ZSBOYW1lJyxcbiAgICAgICAgICBkZWZhdWx0OiByb3V0ZVNlcnZpY2VOYW1lLFxuICAgICAgICAgICdjb250cm9sLWdyb3VwLWF0dHJpYnV0ZXMnOiB7XG4gICAgICAgICAgICAnbmctc2hvdyc6ICdlbnRpdHkuY3JlYXRlUm91dGUnXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuKi9cbiAgICAgICAgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLnJvdXRlU2VydmljZU5hbWUgPSB7XG4gICAgICAgICAgdHlwZTogJ2hpZGRlbicsXG4gICAgICAgICAgZGVmYXVsdDogcm91dGVTZXJ2aWNlTmFtZVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5hbWVzcGFjZSA9IGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgICAgIC8vIFRPRE8gc3RvcmUgdGhpcyBpbiBsb2NhbFN0b3JhZ2UhXG4gICAgICAgIHZhciBkb21haW4gPSBcInZhZ3JhbnQuZjhcIjtcbiAgICAgICAgdmFyIGRlZmF1bHRSb3V0ZUhvc3RTdWZmaXggPSAnLicgKyAobmFtZXNwYWNlID09PSBcImRlZmF1bHRcIiA/IFwiXCIgOiBuYW1lc3BhY2UgKyBcIi5cIikgKyBkb21haW47XG4gICAgICAgIGZvcm1Db25maWcucHJvcGVydGllcy5yb3V0ZUhvc3RuYW1lID0ge1xuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGRlZmF1bHQ6IGRlZmF1bHRSb3V0ZUhvc3RTdWZmaXgsXG4gICAgICAgICAgbGFiZWw6IFwiUm91dGUgaG9zdCBuYW1lIHN1ZmZpeFwiLFxuICAgICAgICAgICdjb250cm9sLWdyb3VwLWF0dHJpYnV0ZXMnOiB7XG4gICAgICAgICAgICAnbmctc2hvdyc6ICdlbnRpdHkuY3JlYXRlUm91dGUnXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgJHNjb3BlLmVudGl0eSA9IDxhbnk+IHt9O1xuICAgICAgJHNjb3BlLmZvcm1Db25maWcgPSBmb3JtQ29uZmlnO1xuICAgICAgJHNjb3BlLm9iamVjdHMgPSB0ZW1wbGF0ZS5vYmplY3RzO1xuICAgICAgbG9nLmRlYnVnKFwiRm9ybSBjb25maWc6IFwiLCBmb3JtQ29uZmlnKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZShzdHIsIGRhdGEpIHtcbiAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvXFwke1xcdyp9L2csIChtYXRjaCkgPT4ge1xuICAgICAgICB2YXIga2V5ID0gbWF0Y2gucmVwbGFjZSgvXFwkey8sICcnKS5yZXBsYWNlKC99LywgJycpLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIGRhdGFba2V5XSB8fCBtYXRjaDtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAkc2NvcGUuc3Vic3RpdHV0ZUFuZERlcGxveVRlbXBsYXRlID0gKCkgPT4ge1xuICAgICAgdmFyIG9iamVjdHMgPSAkc2NvcGUub2JqZWN0cztcbiAgICAgIHZhciBvYmplY3RzVGV4dCA9IGFuZ3VsYXIudG9Kc29uKG9iamVjdHMsIHRydWUpO1xuICAgICAgLy8gcHVsbCB0aGVzZSBvdXQgb2YgdGhlIGVudGl0eSBvYmplY3Qgc28gdGhleSdyZSBub3QgdXNlZCBpbiBzdWJzdGl0dXRpb25zXG4gICAgICB2YXIgY3JlYXRlUm91dGUgPSAkc2NvcGUuZW50aXR5LmNyZWF0ZVJvdXRlO1xuICAgICAgdmFyIHJvdXRlSG9zdG5hbWVTdWZmaXggPSAkc2NvcGUuZW50aXR5LnJvdXRlSG9zdG5hbWUgfHwgXCJcIjtcbiAgICAgIHZhciByb3V0ZU5hbWUgPSAkc2NvcGUuZW50aXR5LnJvdXRlTmFtZTtcbiAgICAgIHZhciByb3V0ZVNlcnZpY2VOYW1lID0gJHNjb3BlLmVudGl0eS5yb3V0ZVNlcnZpY2VOYW1lO1xuICAgICAgZGVsZXRlICRzY29wZS5lbnRpdHkuY3JlYXRlUm91dGU7XG4gICAgICBkZWxldGUgJHNjb3BlLmVudGl0eS5yb3V0ZUhvc3RuYW1lO1xuICAgICAgZGVsZXRlICRzY29wZS5lbnRpdHkucm91dGVOYW1lO1xuICAgICAgZGVsZXRlICRzY29wZS5lbnRpdHkucm91dGVTZXJ2aWNlTmFtZTtcbiAgICAgIG9iamVjdHNUZXh0ID0gc3Vic3RpdHV0ZShvYmplY3RzVGV4dCwgJHNjb3BlLmVudGl0eSk7XG4gICAgICBvYmplY3RzID0gYW5ndWxhci5mcm9tSnNvbihvYmplY3RzVGV4dCk7XG4gICAgICBpZiAoY3JlYXRlUm91dGUpIHtcbiAgICAgICAgdmFyIHJvdXRlcyA9IFtdO1xuICAgICAgICBhbmd1bGFyLmZvckVhY2gob2JqZWN0cywgKG9iamVjdCkgPT4ge1xuICAgICAgICAgIHZhciBraW5kID0gb2JqZWN0LmtpbmQ7XG4gICAgICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKG9iamVjdCk7XG4gICAgICAgICAgaWYgKG5hbWUgJiYgXCJTZXJ2aWNlXCIgPT09IGtpbmQpIHtcbiAgICAgICAgICAgIHZhciByb3V0ZUhvc3RuYW1lID0gbmFtZSArIHJvdXRlSG9zdG5hbWVTdWZmaXg7XG4gICAgICAgICAgICB2YXIgcm91dGUgPSB7XG4gICAgICAgICAgICAgIGtpbmQ6IFwiUm91dGVcIixcbiAgICAgICAgICAgICAgYXBpVmVyc2lvbjogZGVmYXVsdE9TQXBpVmVyc2lvbixcbiAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzcGVjOiB7XG4gICAgICAgICAgICAgICAgaG9zdDogcm91dGVIb3N0bmFtZSxcbiAgICAgICAgICAgICAgICB0bzoge1xuICAgICAgICAgICAgICAgICAga2luZDogXCJTZXJ2aWNlXCIsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcm91dGVzLnB1c2gocm91dGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG9iamVjdHMgPSBvYmplY3RzLmNvbmNhdChyb3V0ZXMpO1xuICAgICAgfVxuICAgICAgaWYgKCRzY29wZS50YXJnZXROYW1lc3BhY2UgIT09IG1vZGVsLmN1cnJlbnROYW1lc3BhY2UoKSkge1xuICAgICAgICAkc2NvcGUuJG9uKCdXYXRjaGVyTmFtZXNwYWNlQ2hhbmdlZCcsICgpID0+IHtcbiAgICAgICAgICBsb2cuZGVidWcoXCJOYW1lc3BhY2UgY2hhbmdlZFwiKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGFwcGx5T2JqZWN0cyhvYmplY3RzKTtcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIENvcmUubm90aWZpY2F0aW9uKCdpbmZvJywgXCJTd2l0Y2hpbmcgdG8gbmFtZXNwYWNlIFwiICsgJHNjb3BlLnRhcmdldE5hbWVzcGFjZSArIFwiIGFuZCBkZXBsb3lpbmcgdGVtcGxhdGVcIik7XG4gICAgICAgIG1vZGVsLmt1YmVybmV0ZXMuc2VsZWN0ZWROYW1lc3BhY2UgPSAkc2NvcGUudGFyZ2V0TmFtZXNwYWNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXBwbHlPYmplY3RzKG9iamVjdHMpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBhcHBseU9iamVjdHMob2JqZWN0cykge1xuICAgICAgdmFyIHByb2plY3RDbGllbnQgPSBLdWJlcm5ldGVzLmNyZWF0ZUt1YmVybmV0ZXNDbGllbnQoXCJwcm9qZWN0c1wiKTtcblxuICAgICAgXy5mb3JFYWNoKG9iamVjdHMsIChvYmplY3Q6YW55KSA9PiB7XG4gICAgICAgIGxvZy5kZWJ1ZyhcIk9iamVjdDogXCIsIG9iamVjdCk7XG5cbiAgICAgICAgdmFyIGtpbmQgPSBnZXRLaW5kKG9iamVjdCk7XG4gICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShvYmplY3QpO1xuICAgICAgICB2YXIgbnMgPSBnZXROYW1lc3BhY2Uob2JqZWN0KTtcblxuICAgICAgICBpZiAoa2luZCAmJiBuYW1lKSB7XG4gICAgICAgICAgaWYgKG5zICYmIG5zICE9PSBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpKSB7XG4gICAgICAgICAgICB2YXIgcHJvamVjdCA9IHtcbiAgICAgICAgICAgICAgYXBpVmVyc2lvbjogS3ViZXJuZXRlcy5kZWZhdWx0QXBpVmVyc2lvbixcbiAgICAgICAgICAgICAga2luZDogXCJQcm9qZWN0XCIsXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogbnMsXG4gICAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcHJvamVjdENsaWVudC5wdXQocHJvamVjdCxcbiAgICAgICAgICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhcIkNyZWF0ZWQgbmFtZXNwYWNlOiBcIiArIG5zKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gY3JlYXRlIG5hbWVzcGFjZTogXCIgKyBucyArIFwiOiBcIiArIGFuZ3VsYXIudG9Kc29uKGVycikpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcGx1cmFsS2luZCA9IGtpbmQudG9Mb3dlckNhc2UoKSArIFwic1wiO1xuICAgICAgICAgIHZhciBrdWJlQ2xpZW50ID0gS3ViZXJuZXRlcy5jcmVhdGVLdWJlcm5ldGVzQ2xpZW50KHBsdXJhbEtpbmQsIG5zKTtcbiAgICAgICAgICBrdWJlQ2xpZW50LnB1dChvYmplY3QsXG4gICAgICAgICAgICAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICBsb2cuaW5mbyhcInVwZGF0ZWQgXCIgKyBraW5kICsgXCIgbmFtZTogXCIgKyBuYW1lICsgKG5zID8gXCIgbnM6IFwiICsgbnM6IFwiXCIpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIHVwZGF0ZSBcIiArIGtpbmQgKyBcIiBuYW1lOiBcIiArIG5hbWUgKyAobnMgPyBcIiBuczogXCIgKyBuczogXCJcIikgKyBcIiBlcnJvcjogXCIgKyBhbmd1bGFyLnRvSnNvbihlcnIpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGdvQmFjaygpO1xuICAgIH1cblxuICAgICRzY29wZS5kZWxldGVUZW1wbGF0ZSA9ICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xuICAgICAgICBjb2xsZWN0aW9uOiBbdGVtcGxhdGVdLFxuICAgICAgICBpbmRleDogJ21ldGFkYXRhLm5hbWUnLFxuICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBLdWJlcm5ldGVzTW9kZWxbJ3RlbXBsYXRlc1Jlc291cmNlJ10uZGVsZXRlKHtcbiAgICAgICAgICAgICAgaWQ6IHRlbXBsYXRlLm1ldGFkYXRhLm5hbWVcbiAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4ge1xuICAgICAgICAgICAgICBLdWJlcm5ldGVzTW9kZWxbJ3RlbXBsYXRlc1Jlc291cmNlJ10ucXVlcnkoKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBLdWJlcm5ldGVzTW9kZWwudGVtcGxhdGVzID0gZGF0YS5pdGVtcztcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiRXJyb3IgZGVsZXRpbmcgdGVtcGxhdGU6IFwiLCBlcnJvcik7IFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB0aXRsZTogJ0RlbGV0ZSBUZW1wbGF0ZT8nLFxuICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIHRlbXBsYXRlIHdpbGwgYmUgZGVsZXRlZDonLFxuICAgICAgICBva1RleHQ6ICdEZWxldGUnLFxuICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICAgIGN1c3RvbTogXCJUaGlzIG9wZXJhdGlvbiBpcyBwZXJtYW5lbnQgb25jZSBjb21wbGV0ZWQhXCIsXG4gICAgICAgIGN1c3RvbUNsYXNzOiBcImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIlxuICAgICAgfSkub3BlbigpO1xuICAgIH07XG4gIH1dKTtcbn1cblxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxubW9kdWxlIE5hdmlnYXRpb24ge1xuXG4gIGV4cG9ydCB2YXIgcGx1Z2luTmFtZSA9ICdoYXd0aW8tbmF2aWdhdGlvbic7XG4gIGV4cG9ydCB2YXIgbG9nID0gTG9nZ2VyLmdldChwbHVnaW5OYW1lKTtcbiAgZXhwb3J0IHZhciBfbW9kdWxlID0gYW5ndWxhci5tb2R1bGUocGx1Z2luTmFtZSwgW10pO1xuXG4gIF9tb2R1bGUucnVuKCgpID0+IHtcbiAgfSk7XG5cbiAgX21vZHVsZS5zZXJ2aWNlKCdIYXd0aW9CcmVhZGNydW1icycsICgpID0+IHtcbiAgICB2YXIgX2NvbmZpZyA9IFtdO1xuICAgIHZhciBzZWxmID0ge1xuICAgICAgYXBwbHk6IChjb25maWcpID0+IHtcbiAgICAgICAgX2NvbmZpZy5sZW5ndGggPSAwO1xuICAgICAgICBfLmZvckVhY2goY29uZmlnLCAoY3J1bWIpID0+IHtcbiAgICAgICAgICBfY29uZmlnLnB1c2goY3J1bWIpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIF9jb25maWc7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gc2VsZjtcbiAgfSk7XG5cbiAgX21vZHVsZS5zZXJ2aWNlKCdIYXd0aW9TdWJUYWJzJywgKCkgPT4ge1xuICAgIHZhciBfY29uZmlnID0gW107XG4gICAgdmFyIHNlbGYgPSB7XG4gICAgICBhcHBseTogKGNvbmZpZykgPT4ge1xuICAgICAgICBfY29uZmlnLmxlbmd0aCA9IDA7XG4gICAgICAgIF8uZm9yRWFjaChjb25maWcsIChjcnVtYikgPT4ge1xuICAgICAgICAgIF9jb25maWcucHVzaChjcnVtYik7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICByZXR1cm4gX2NvbmZpZztcbiAgICAgIH0gXG4gICAgfSBcbiAgICByZXR1cm4gc2VsZjtcbiAgfSk7XG5cbiAgX21vZHVsZS5kaXJlY3RpdmUoJ3ZpZXdwb3J0SGVpZ2h0JywgWyckd2luZG93JywgJyRkb2N1bWVudCcsICgkd2luZG93LCAkZG9jdW1lbnQpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdHJpY3Q6ICdBJyxcbiAgICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cikgPT4ge1xuICAgICAgICAvLyBsb2cuZGVidWcoXCJXaW5kb3c6IFwiLCAkd2luZG93KTtcbiAgICAgICAgLy8gbG9nLmRlYnVnKFwiZWxlbWVudDogXCIsIGVsZW1lbnQpO1xuICAgICAgICB2YXIgd2luID0gJCgkd2luZG93KTtcbiAgICAgICAgdmFyIHJlc2l6ZUZ1bmMgPSAoKSA9PiB7XG4gICAgICAgICAgdmFyIHZpZXdwb3J0SGVpZ2h0ID0gd2luLmlubmVySGVpZ2h0KCk7XG4gICAgICAgICAgLy8gbG9nLmRlYnVnKFwiVmlld3BvcnQgaGVpZ2h0OiBcIiwgdmlld3BvcnRIZWlnaHQpO1xuICAgICAgICAgIHZhciBlbFRvcCA9IGVsZW1lbnQub2Zmc2V0KCkudG9wO1xuICAgICAgICAgIC8vIGxvZy5kZWJ1ZyhcIkVsZW1lbnQgdG9wOiBcIiwgZWxUb3ApO1xuICAgICAgICAgIHZhciBoZWlnaHQgPSB2aWV3cG9ydEhlaWdodCAtIGVsVG9wO1xuICAgICAgICAgIGVsZW1lbnQuY3NzKCdoZWlnaHQnLCBoZWlnaHQpO1xuICAgICAgICB9O1xuICAgICAgICB3aW4ub24oJ3Jlc2l6ZScsIHJlc2l6ZUZ1bmMpO1xuICAgICAgICBlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcbiAgICAgICAgICB3aW4ub2ZmKCdyZXNpemUnLCByZXNpemVGdW5jKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNldFRpbWVvdXQocmVzaXplRnVuYywgNTApO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCdoYXd0aW9NYWluT3V0bGV0JywgWydIYXd0aW9TdWJUYWJzJywgKEhhd3Rpb1N1YlRhYnMpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdHJpY3Q6ICdBJyxcbiAgICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cnMpID0+IHtcbiAgICAgICAgc2NvcGUuSGF3dGlvU3ViVGFicyA9IEhhd3Rpb1N1YlRhYnM7XG4gICAgICAgIHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oJ0hhd3Rpb1N1YlRhYnMuZ2V0KCknLCAoc3ViVGFiQ29uZmlnKSA9PiB7XG4gICAgICAgICAgLy8gbG9nLmRlYnVnKFwic3ViVGFiQ29uZmlnOiBcIiwgc3ViVGFiQ29uZmlnKTtcbiAgICAgICAgICBpZiAoc3ViVGFiQ29uZmlnICYmIHN1YlRhYkNvbmZpZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUNsYXNzKCdoaWRkZW4tbmF2Jyk7XG4gICAgICAgICAgICAvL2VsZW1lbnQuY3NzKHsgJ21hcmdpbi1sZWZ0JzogJycgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ2hpZGRlbi1uYXYnKTtcbiAgICAgICAgICAgIC8vZWxlbWVudC5jc3MoeyAnbWFyZ2luLWxlZnQnOiAnYXV0bycgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIH1dKTtcblxuICBfbW9kdWxlLmRpcmVjdGl2ZSgnaGF3dGlvVGFic091dGxldCcsIFsnSGF3dGlvU3ViVGFicycsIChIYXd0aW9TdWJUYWJzKSA9PiB7XG4gICAgdmFyIGluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3RyaWN0OiAnQUUnLFxuICAgICAgcmVwbGFjZTogdHJ1ZSxcbiAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtcGYtdmVydGljYWwgbmF2LXBmLXZlcnRpY2FsLXdpdGgtc2Vjb25kYXJ5LW5hdlwiIG5nLWNvbnRyb2xsZXI9XCJEZXZlbG9wZXIuTmF2QmFyQ29udHJvbGxlclwiIG5nLWNsYXNzPVwiZ2V0Q2xhc3MoKVwiPlxuICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsaSBuZy1yZXBlYXQ9XCJzdWJUYWIgaW4gc3ViVGFiQ29uZmlnXCIgbmctc2hvdz1cImlzVmFsaWQoc3ViVGFiKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0ge3tzdWJUYWIuYWN0aXZlID8gJ2FjdGl2ZScgOiAnJ319XCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7c3ViVGFiLnRpdGxlfX1cIj5cbiAgICAgICAgICAgICAgICA8YSBuZy1oaWRlPVwic3ViVGFiLnRlbXBsYXRlXCIgaHJlZj1cInt7c3ViVGFiLmhyZWZ9fVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gbmctc2hvdz1cInN1YlRhYi5jbGFzc1wiIG5nLWNsYXNzPVwic3ViVGFiLmNsYXNzXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGltZyBuZy1zaG93PVwic3ViVGFiLmljb25cIiBuZy1zcmM9XCJ7e3N1YlRhYi5pY29ufX1cIiBzdHlsZT1cIm1heC13aWR0aDogMTZweDsgbWFyZ2luLXJpZ2h0OiAxM3B4O1wiPlxuICAgICAgICAgICAgICAgICAge3tzdWJUYWIubGFiZWx9fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8ZGl2IG5nLXNob3c9XCJzdWJUYWIudGVtcGxhdGVcIiBjb21waWxlPVwic3ViVGFiLnRlbXBsYXRlXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYCxcbiAgICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cnMpID0+IHtcbiAgICAgICAgaWYgKCFpbml0aWFsaXplZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAoPGFueT4kKSgpLnNldHVwVmVydGljYWxOYXZpZ2F0aW9uKGZhbHNlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZSBpZiB3ZSBoYXZlbid0IGxvYWRlZCBwYXR0ZXJuZmx5XG4gICAgICAgICAgfVxuICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzY29wZS5IYXd0aW9TdWJUYWJzID0gSGF3dGlvU3ViVGFicztcbiAgICAgICAgdmFyIGNvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgICBzY29wZS5nZXRDbGFzcyA9ICgpID0+IHtcbiAgICAgICAgICAvL2xvZy5kZWJ1ZyhcIk15IGNsYXNzOiBcIiwgZWxlbWVudC5hdHRyKCdjbGFzcycpKTtcbiAgICAgICAgICBpZiAoIXNjb3BlLnN1YlRhYkNvbmZpZyB8fCAhc2NvcGUuc3ViVGFiQ29uZmlnLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuICdoaWRkZW4nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2NvbGxhcHNlZCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBzY29wZS4kb24oJ2hhd3Rpb0NvbGxhcHNlTmF2JywgKCkgPT4ge1xuICAgICAgICAgIGNvbGxhcHNlZCA9ICFjb2xsYXBzZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBzY29wZS4kd2F0Y2goJ0hhd3Rpb1N1YlRhYnMuZ2V0KCknLCAoc3ViVGFiQ29uZmlnKSA9PiB7XG4gICAgICAgICAgc2NvcGUuc3ViVGFiQ29uZmlnID0gc3ViVGFiQ29uZmlnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XSk7XG5cbiAgX21vZHVsZS5kaXJlY3RpdmUoJ2hhd3Rpb0JyZWFkY3J1bWJzT3V0bGV0JywgWydIYXd0aW9CcmVhZGNydW1icycsIChIYXd0aW9CcmVhZGNydW1icykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgc2NvcGU6IHt9LFxuICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBuZy1zaG93PVwiYnJlYWRjcnVtYkNvbmZpZ1wiIG5nLWNvbnRyb2xsZXI9XCJEZXZlbG9wZXIuTmF2QmFyQ29udHJvbGxlclwiPlxuICAgICAgICAgIDxvbCBjbGFzcz1cImJyZWFkY3J1bWJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3MgPSAnYnInPjxicj48L2Rpdj5cbiAgICAgICAgICAgIDxsaSBuZy1yZXBlYXQ9XCJicmVhZGNydW1iIGluIGJyZWFkY3J1bWJDb25maWdcIiBuZy1zaG93PVwiaXNWYWxpZChicmVhZGNydW1iKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2JyZWFkY3J1bWIuYWN0aXZlID8gJ2FjdGl2ZScgOiAnJ319XCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7YnJlYWRjcnVtYi50aXRsZX19XCI+XG4gICAgICAgICAgICAgIDxhIG5nLXNob3c9XCJicmVhZGNydW1iLmhyZWYgJiYgIWJyZWFkY3J1bWIuYWN0aXZlXCIgaHJlZj1cInt7YnJlYWRjcnVtYi5ocmVmfX1cIj57e2JyZWFkY3J1bWIubGFiZWx9fTwvYT5cbiAgICAgICAgICAgICAgPHNwYW4gbmctaGlkZT1cImJyZWFkY3J1bWIuaHJlZiAmJiAhYnJlYWRjcnVtYi5hY3RpdmVcIj57e2JyZWFkY3J1bWIubGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICA8L29sPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIGAsXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSA9PiB7XG4gICAgICAgIHNjb3BlLmJyZWFkY3J1bWJzID0gSGF3dGlvQnJlYWRjcnVtYnM7XG4gICAgICAgIHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oJ2JyZWFkY3J1bWJzLmdldCgpJywgKGJyZWFkY3J1bWJDb25maWcpID0+IHtcbiAgICAgICAgICBzY29wZS5icmVhZGNydW1iQ29uZmlnID0gYnJlYWRjcnVtYkNvbmZpZztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfV0pO1xuXG4gIC8vaGF3dGlvUGx1Z2luTG9hZGVyLmFkZE1vZHVsZSgncGF0dGVybmZseScpO1xuICBoYXd0aW9QbHVnaW5Mb2FkZXIuYWRkTW9kdWxlKHBsdWdpbk5hbWUpO1xuXG59XG5cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== angular.module("hawtio-kubernetes-templates", []).run(["$templateCache", function($templateCache) {$templateCache.put("plugins/kubernetes/html/appDeployedTemplate.html","
\n {{row.entity.$creationDate ? (row.entity.$creationDate | relativeTime) : \'\'}}\n
\n"); $templateCache.put("plugins/kubernetes/html/appDetailTemplate.html","
\n
\n
\n \n \n \n \n \n \n \n {{view.appName}}\n \n \n
\n
\n \n \n {{view.service.$host}}\n \n {{view.service.$host}}\n \n
\n
\n \n
\n
\n\n
\n
\n
\n
\n deployed:\n {{view.createdDate | relativeTime}}\n
\n
\n not deployed\n
\n
\n
\n
\n pod template:\n {{view.controllerId}}\n
\n
\n no pod template\n
\n
\n
\n \n pods:\n \n {{view.podCount}}\n \n \n {{view.podCount}}\n \n \n
\n
\n\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n
\n IP:\n {{pod.status.podIP}}\n
\n
\n
\n ports: {{pod.$containerPorts.join(\", \")}}\n
\n
\n minion:\n \n {{pod.$host}}\n \n
\n
\n \n
\n \n
\n\n
\n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n
\n IP:\n {{pod.status.podIP}}\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n"); $templateCache.put("plugins/kubernetes/html/appIconTemplate.html","\n"); $templateCache.put("plugins/kubernetes/html/appPodCountsAndLinkTemplate.html","\n"); $templateCache.put("plugins/kubernetes/html/appReplicationControllerTemplate.html","\n"); $templateCache.put("plugins/kubernetes/html/appServicesTemplate.html","\n"); $templateCache.put("plugins/kubernetes/html/apps.html","
\n\n
\n
\n
\n\n
\n
\n
\n\n
\n
\n
\n \n \n \n \n
\n \n \n \n \n
\n
\n  \n \n  \n\n  \n \n  \n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n

There are no apps currently available.

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

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

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

There are no build configurations available.

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

logs for {{entity.$configId}}

\n\n

\n

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

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

There are no builds currently running.

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

There are no deployment configurations available.

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

There are no events currently available.

\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n \n \n \n
\n
\n \n

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

There are no hosts currently running.

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

There are no image repositories available.

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

\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.\n

\n\n
\n\n
\n
\n
\n
\n
\n \n \n\n

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

\n

Name of this project

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

 {{displayName || appTitle}}

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

No Pipeline Available

\n

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

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

There are no build pipelines available.

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

There are no pods currently running.

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

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

\n
\n
\n
\n
\n
\n
\n
\n \n\n
\n
\n

数据汇总

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

Add New Data Field

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

There are no secrets currently available.

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

There are no services currently available.

\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n \n \n \n
\n
\n \n

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

Description

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

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

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

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

本地文件列表

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

服务器文件列表

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

There are no tools currently available.

\n
\n
\n
\n

There are no tools currently available.

\n
\n \n
\n
\n
\n
\n
\n"); $templateCache.put("plugins/developer/html/environment.html","environment!!!!"); $templateCache.put("plugins/developer/html/environmentPanel.html","
\n
\n
\n \n\n
\n
\n
\n
\n \n
\n \n \n Build #{{rc.$buildId}}\n \n  \n  \n  \n \n \n Commit {{rc.$gitCommit | limitTo:7}}\n \n \n \n Commit {{rc.$gitCommit | limitTo:7}}\n \n
\n
\n
\n\n\n
\n\n
\n
\n"); $templateCache.put("plugins/developer/html/environments.html","
\n\n
\n
\n\n \n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n\n\n \n\n
\n
\n
\n
\n

Environments Overview

\n
\n
\n
\n
\n
\n

No Environment Available

\n

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

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

Active Pipelines

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

Commits

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

Perspectives

\n\n

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

\n
\n
\n\n
\n

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

\n\n

\n Work on projects and source code\n

\n
\n
\n

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

\n\n

\n Manage and run Pods and Services\n

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

{{operation}}?

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

There are no builds in this job.

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

There are no jobs in this jenkins.

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

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

There are no completed builds in this job.

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

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

There are no pipeline stages in this build.

\n
\n
\n\n

Pipeline for {{jobId}}

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

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

\n
\n\n
\n
\n\n
\n
\n \n\n \n\n
\n
\n
\n \n
\n
\n
\n

Logs

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

There are no pipelines for this job.

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

There are no projects in this workspace.

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

There are no tools currently available.

\n
\n
\n
\n

There are no tools currently available.

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

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

\n
\n
\n
\n

本地文件列表

\n
    \n
  • 文件名
  • \n
    \n {{node.name}}\n
    \n
\n
    \n
  • 已选数据文件
  • \n
  • {{node.name}}
  • \n\n
\n
    \n
  • 采集时间
  • \n
  • {{node.date}}  \n {{model.uploadprocess[node.id]}}%
  • \n
\n
\n \n
\n
\n
\n

服务器文件列表

\n
\n
\n {{node.name}}\n
\n
\n
\n
    \n
  • 文件名
  • \n
  • {{item.name}}
  • \n
\n
    \n
  • 采集时间
  • \n
  • {{item.time}}
  • \n
\n
\n
\n \n
\n
\n
\n\n
\n\n
\n");}]); hawtioPluginLoader.addModule("hawtio-kubernetes-templates");