Files
speckle-server/scratch/edge-debug-selection/Default/Cache/Cache_Data/f_000162
T

357 lines
32 KiB
Plaintext

import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/workspace/moveProject/Manager.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/workspace/moveProject/Intro.vue";
import { default as __nuxt_component_1 } from "/_nuxt/components/workspace/moveProject/SelectProject.vue";
import { default as __nuxt_component_2 } from "/_nuxt/components/workspace/moveProject/SelectWorkspace.vue";
import { default as __nuxt_component_3 } from "/_nuxt/components/workspace/moveProject/Confirm.vue";
import { FormButton as __nuxt_component_4 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { LayoutDialog as __nuxt_component_5 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { navigateTo as __unimport_navigateTo } from "/_nuxt/node_modules/nuxt/dist/app/composables/router.js?v=e4f18c29";
import { unref as __unimport_unref_ } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";/* Injection by vite-plugin-vue-inspector Start */
import { createBlock as __createBlock,createElementVNode as __createElementVNode } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"
function _interopVNode(vnode) {
if (vnode && vnode.props && 'data-v-inspector' in vnode.props) {
const data = vnode.props['data-v-inspector']
delete vnode.props['data-v-inspector']
Object.defineProperty(vnode.props, '__v_inspector', { value: data, enumerable: false })
}
return vnode
}
function _createBlock(...args) { return _interopVNode(__createBlock(...args)) }
function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
/* Injection by vite-plugin-vue-inspector End */
import { useModel as _useModel, mergeModels as _mergeModels, defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
import { useQuery } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29";
import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts";
import {
workspaceMoveProjectManagerProjectQuery,
workspaceMoveProjectManagerWorkspaceQuery
} from "/_nuxt/lib/workspaces/graphql/queries.ts";
import { workspaceCreateRoute } from "/_nuxt/lib/common/helpers/route.ts";
import { useMultiStepDialog } from "/_nuxt/lib/common/composables/dialog.ts";
import { ref, computed, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _sfc_main = /* @__PURE__ */ _defineComponent({
__name: "WorkspaceMoveProjectManager",
props: /* @__PURE__ */ _mergeModels({
projectId: { type: String, required: false },
workspaceSlug: { type: String, required: false },
workspaceId: { type: String, required: false },
showIntro: { type: Boolean, required: false },
limitType: { type: null, required: false }
}, {
"open": { type: Boolean, ...{ required: true } },
"openModifiers": {}
}),
emits: /* @__PURE__ */ _mergeModels(["done"], ["update:open"]),
setup(__props, { expose: __expose, emit: __emit }) {
__expose();
const DialogStepId = {
intro: "intro",
project: "project",
workspace: "workspace",
confirmation: "confirmation"
};
graphql(`
fragment WorkspaceMoveProjectManager_ProjectBase on Project {
id
name
modelCount: models(limit: 0) {
totalCount
}
versions(limit: 0) {
totalCount
}
}
`);
graphql(`
fragment WorkspaceMoveProjectManager_Project on Project {
...WorkspaceMoveProjectManager_ProjectBase
permissions {
canMoveToWorkspace(workspaceId: $workspaceId) {
...FullPermissionCheckResult
}
}
workspace {
id
slug
permissions {
canMoveProjectToWorkspace(projectId: $projectId) {
...FullPermissionCheckResult
}
}
}
}
`);
graphql(`
fragment WorkspaceMoveProjectManager_Workspace on Workspace {
id
role
name
logo
slug
plan {
name
usage {
projectCount
modelCount
}
}
permissions {
canMoveProjectToWorkspace(projectId: $projectId) {
...FullPermissionCheckResult
}
}
projects {
totalCount
}
team {
items {
user {
id
name
avatar
}
}
}
...WorkspaceMoveProjectSelectWorkspace_Workspace
}
`);
const emit = __emit;
const props = __props;
const open = _useModel(__props, "open");
const selectedProject = ref(null);
const selectedWorkspace = ref(null);
const { goToPreviousStep, step, goToNextStep, resetStep } = useMultiStepDialog({
steps: computed(() => [
...props.showIntro ? [
{
id: DialogStepId.intro,
title: "Move your projects to a workspace"
}
] : [],
{
id: DialogStepId.project,
title: "Choose project to move"
},
{
id: DialogStepId.workspace,
title: "Choose workspace"
},
{
id: DialogStepId.confirmation,
title: "Confirm move"
}
]),
resolveNextStep: ({ reset }) => {
if (props.showIntro && reset) {
return DialogStepId.intro;
}
if (!selectedProject.value) {
return DialogStepId.project;
}
if (!selectedWorkspace.value) {
return DialogStepId.workspace;
}
return DialogStepId.confirmation;
},
resolvePreviousStep: () => {
if (props.workspaceSlug) {
return DialogStepId.project;
} else {
return DialogStepId.workspace;
}
}
});
const { result: projectResult, onResult: onProjectResult } = useQuery(
workspaceMoveProjectManagerProjectQuery,
() => ({
projectId: props.projectId || "",
workspaceId: props.workspaceId
}),
() => ({
enabled: !!props.projectId
})
);
const { result: workspaceResult, onResult: onWorkspaceResult } = useQuery(
workspaceMoveProjectManagerWorkspaceQuery,
() => ({
workspaceSlug: props.workspaceSlug || "",
projectId: props.projectId
}),
() => ({
enabled: !!props.workspaceSlug
})
);
const isSmallDialog = computed(() => step.value.id === DialogStepId.intro);
const preventClose = computed(() => !!props.limitType);
onProjectResult((res) => {
if (res.data?.project?.id !== selectedProject.value?.id) {
selectedProject.value = res.data.project;
resetStep();
}
});
onWorkspaceResult((res) => {
if (res.data?.workspaceBySlug?.id !== selectedWorkspace.value?.id) {
resetStep();
}
});
watch(open, (newVal, oldVal) => {
if (newVal && !oldVal) {
if (workspaceResult.value?.workspaceBySlug) {
selectedWorkspace.value = workspaceResult.value.workspaceBySlug;
}
if (projectResult.value?.project) {
selectedProject.value = projectResult.value.project;
}
resetStep();
}
});
const onProjectSelected = (project) => {
selectedProject.value = project;
if (props.workspaceSlug && workspaceResult.value?.workspaceBySlug) {
selectedWorkspace.value = workspaceResult.value.workspaceBySlug;
}
goToNextStep();
};
const onWorkspaceSelected = (workspace) => {
selectedWorkspace.value = workspace;
goToNextStep();
};
const onMoveComplete = () => {
emit("done");
selectedProject.value = null;
selectedWorkspace.value = null;
open.value = false;
};
const onBack = () => {
goToPreviousStep();
};
const onCancel = () => {
open.value = false;
selectedProject.value = null;
selectedWorkspace.value = null;
};
const __returned__ = { DialogStepId, emit, props, open, selectedProject, selectedWorkspace, goToPreviousStep, step, goToNextStep, resetStep, projectResult, onProjectResult, workspaceResult, onWorkspaceResult, isSmallDialog, preventClose, onProjectSelected, onWorkspaceSelected, onMoveComplete, onBack, onCancel, get workspaceCreateRoute() {
return workspaceCreateRoute;
} };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
import { createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, vShow as _vShow, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withCtx as _withCtx, } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _hoisted_1 = {
class: "-my-1 w-full flex justify-end",
"data-v-inspector": "components/workspace/moveProject/Manager.vue:49:7"
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_WorkspaceMoveProjectIntro = __nuxt_component_0;
const _component_WorkspaceMoveProjectSelectProject = __nuxt_component_1;
const _component_WorkspaceMoveProjectSelectWorkspace = __nuxt_component_2;
const _component_WorkspaceMoveProjectConfirm = __nuxt_component_3;
const _component_FormButton = __nuxt_component_4;
const _component_LayoutDialog = __nuxt_component_5;
return _openBlock(), _createBlock(_component_LayoutDialog, {
open: $setup.open,
"onUpdate:open": _cache[1] || (_cache[1] = ($event) => $setup.open = $event),
"max-width": "sm",
title: $setup.step.title,
fullscreen: $setup.isSmallDialog ? "none" : "mobile",
"hide-title": $setup.isSmallDialog,
"hide-buttons": ![$setup.DialogStepId.project, $setup.DialogStepId.workspace].includes($setup.step.id),
"is-transparent": $setup.isSmallDialog,
"hide-closer": $setup.preventClose,
"prevent-close-on-click-outside": $setup.preventClose,
"data-v-inspector": "components/workspace/moveProject/Manager.vue:2:3"
}, {
buttons: _withCtx(() => [
_createElementVNode("div", _hoisted_1, [
$setup.step.id === $setup.DialogStepId.project && !$setup.preventClose ? (_openBlock(), _createBlock(_component_FormButton, {
key: 0,
color: "outline",
onClick: $setup.onCancel,
"data-v-inspector": "components/workspace/moveProject/Manager.vue:50:9"
}, {
default: _withCtx(() => [..._cache[2] || (_cache[2] = [
_createTextVNode(
" Cancel ",
-1
/* CACHED */
)
])]),
_: 1
/* STABLE */
})) : $setup.step.id === $setup.DialogStepId.workspace ? (_openBlock(), _createBlock(_component_FormButton, {
key: 1,
color: "outline",
"full-width": "",
onClick: _cache[0] || (_cache[0] = ($event) => ("navigateTo" in _ctx ? _ctx.navigateTo : __unimport_unref_(__unimport_navigateTo))($setup.workspaceCreateRoute)),
"data-v-inspector": "components/workspace/moveProject/Manager.vue:57:9"
}, {
default: _withCtx(() => [..._cache[3] || (_cache[3] = [
_createTextVNode(
" Create a new workspace ",
-1
/* CACHED */
)
])]),
_: 1
/* STABLE */
})) : _createCommentVNode("v-if", true)
])
]),
default: _withCtx(() => [
$setup.step.id === $setup.DialogStepId.intro ? (_openBlock(), _createBlock(_component_WorkspaceMoveProjectIntro, {
key: 0,
project: $setup.selectedProject,
"limit-type": $props.limitType,
onCancel: $setup.onCancel,
onContinue: $setup.goToNextStep,
"data-v-inspector": "components/workspace/moveProject/Manager.vue:14:5"
}, null, 8, ["project", "limit-type", "onContinue"])) : _createCommentVNode("v-if", true),
$setup.step.id === $setup.DialogStepId.project ? (_openBlock(), _createBlock(_component_WorkspaceMoveProjectSelectProject, {
key: 1,
workspace: $setup.workspaceResult?.workspaceBySlug,
"project-permissions": $setup.projectResult?.project.permissions.canMoveToWorkspace,
"workspace-id": $props.workspaceId,
onProjectSelected: $setup.onProjectSelected,
"data-v-inspector": "components/workspace/moveProject/Manager.vue:23:5"
}, null, 8, ["workspace", "project-permissions", "workspace-id"])) : _createCommentVNode("v-if", true),
$setup.selectedProject && $setup.step.id === $setup.DialogStepId.workspace ? (_openBlock(), _createBlock(_component_WorkspaceMoveProjectSelectWorkspace, {
key: 2,
project: $setup.selectedProject,
checker: (w) => w.permissions.canMoveProjectToWorkspace,
onWorkspaceSelected: $setup.onWorkspaceSelected,
"data-v-inspector": "components/workspace/moveProject/Manager.vue:32:5"
}, null, 8, ["project", "checker"])) : _createCommentVNode("v-if", true),
$setup.selectedProject && $setup.selectedWorkspace ? _withDirectives((_openBlock(), _createBlock(_component_WorkspaceMoveProjectConfirm, {
key: 3,
project: $setup.selectedProject,
workspace: $setup.selectedWorkspace,
onMoveComplete: $setup.onMoveComplete,
onBack: $setup.onBack,
"data-v-inspector": "components/workspace/moveProject/Manager.vue:40:5"
}, null, 8, ["project", "workspace"])), [
[_vShow, $setup.step.id === $setup.DialogStepId.confirmation]
]) : _createCommentVNode("v-if", true)
]),
_: 1
/* STABLE */
}, 8, ["open", "title", "fullscreen", "hide-title", "hide-buttons", "is-transparent", "hide-closer", "prevent-close-on-click-outside"]);
}
_sfc_main.__hmrId = "2dd7ece9";
typeof __VUE_HMR_RUNTIME__ !== "undefined" && __VUE_HMR_RUNTIME__.createRecord(_sfc_main.__hmrId, _sfc_main);
import.meta.hot.on("file-changed", ({ file }) => {
__VUE_HMR_RUNTIME__.CHANGED_FILE = file;
});
import.meta.hot.accept((mod) => {
if (!mod) return;
const { default: updated, _rerender_only } = mod;
if (_rerender_only) {
__VUE_HMR_RUNTIME__.rerender(updated.__hmrId, updated.render);
} else {
__VUE_HMR_RUNTIME__.reload(updated.__hmrId, updated);
}
});
import _export_sfc from "/_nuxt/@id/__x00__plugin-vue:export-helper";
export default /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "D:/speckle-server/packages/frontend-2/components/workspace/moveProject/Manager.vue"]]);
//# sourceMappingURL=data:application/json;base64,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QUNaLFVBQVE7QUFBQSxRQUNSLFlBQVU7QUFBQSxRQUFjLG9CQUFpQjtBQUFBO01BS3BDLFlBQUssT0FBTyxvQkFBYSx5QkFEakMsYUFNRTtBQUFBO1FBSkMsV0FBVyx3QkFBaUI7QUFBQSxRQUM1Qix1QkFBcUIsc0JBQWUsUUFBUSxZQUFZO0FBQUEsUUFDeEQsZ0JBQWM7QUFBQSxRQUNkLG1CQUFrQjtBQUFBLFFBQW1CLG9CQUFpQjtBQUFBO01BS2pELDBCQUFtQixZQUFLLE9BQU8sb0JBQWEsMkJBRHBELGFBS0U7QUFBQTtRQUhDLFNBQVM7QUFBQSxRQUNULFNBQU8sQ0FBRyxNQUFNLEVBQUUsWUFBWTtBQUFBLFFBQzlCLHFCQUFvQjtBQUFBLFFBQXFCLG9CQUFpQjtBQUFBO01BS3JELDBCQUFtQiwwREFEM0IsYUFPRTtBQUFBO1FBSkMsU0FBUztBQUFBLFFBQ1QsV0FBVztBQUFBLFFBQ1gsZ0JBQWU7QUFBQSxRQUNmLFFBQU07QUFBQSxRQUFRLG9CQUFpQjtBQUFBO2lCQUp4QixZQUFLLE9BQU8sb0JBQWEsWUFBWTtBQUFBIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJNYW5hZ2VyLnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XHJcbiAgPExheW91dERpYWxvZ1xyXG4gICAgdi1tb2RlbDpvcGVuPVwib3BlblwiXHJcbiAgICBtYXgtd2lkdGg9XCJzbVwiXHJcbiAgICA6dGl0bGU9XCJzdGVwLnRpdGxlXCJcclxuICAgIDpmdWxsc2NyZWVuPVwiaXNTbWFsbERpYWxvZyA/ICdub25lJyA6ICdtb2JpbGUnXCJcclxuICAgIDpoaWRlLXRpdGxlPVwiaXNTbWFsbERpYWxvZ1wiXHJcbiAgICA6aGlkZS1idXR0b25zPVwiIShbRGlhbG9nU3RlcElkLnByb2plY3QsIERpYWxvZ1N0ZXBJZC53b3Jrc3BhY2VdIGFzIHN0cmluZ1tdKS5pbmNsdWRlcyhzdGVwLmlkKVwiXHJcbiAgICA6aXMtdHJhbnNwYXJlbnQ9XCJpc1NtYWxsRGlhbG9nXCJcclxuICAgIDpoaWRlLWNsb3Nlcj1cInByZXZlbnRDbG9zZVwiXHJcbiAgICA6cHJldmVudC1jbG9zZS1vbi1jbGljay1vdXRzaWRlPVwicHJldmVudENsb3NlXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L01hbmFnZXIudnVlOjI6M1wiXHJcbiAgPlxyXG4gICAgPCEtLSBJbnRybyAtLT5cclxuICAgIDxXb3Jrc3BhY2VNb3ZlUHJvamVjdEludHJvXHJcbiAgICAgIHYtaWY9XCJzdGVwLmlkID09PSBEaWFsb2dTdGVwSWQuaW50cm9cIlxyXG4gICAgICA6cHJvamVjdD1cInNlbGVjdGVkUHJvamVjdFwiXHJcbiAgICAgIDpsaW1pdC10eXBlPVwibGltaXRUeXBlXCJcclxuICAgICAgQGNhbmNlbD1cIm9uQ2FuY2VsXCJcclxuICAgICAgQGNvbnRpbnVlPVwiZ29Ub05leHRTdGVwXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L01hbmFnZXIudnVlOjE0OjVcIlxyXG4gICAgLz5cclxuXHJcbiAgICA8IS0tIFByb2plY3QgU2VsZWN0aW9uIC0tPlxyXG4gICAgPFdvcmtzcGFjZU1vdmVQcm9qZWN0U2VsZWN0UHJvamVjdFxyXG4gICAgICB2LWlmPVwic3RlcC5pZCA9PT0gRGlhbG9nU3RlcElkLnByb2plY3RcIlxyXG4gICAgICA6d29ya3NwYWNlPVwid29ya3NwYWNlUmVzdWx0Py53b3Jrc3BhY2VCeVNsdWdcIlxyXG4gICAgICA6cHJvamVjdC1wZXJtaXNzaW9ucz1cInByb2plY3RSZXN1bHQ/LnByb2plY3QucGVybWlzc2lvbnMuY2FuTW92ZVRvV29ya3NwYWNlXCJcclxuICAgICAgOndvcmtzcGFjZS1pZD1cIndvcmtzcGFjZUlkXCJcclxuICAgICAgQHByb2plY3Qtc2VsZWN0ZWQ9XCJvblByb2plY3RTZWxlY3RlZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9NYW5hZ2VyLnZ1ZToyMzo1XCJcclxuICAgIC8+XHJcblxyXG4gICAgPCEtLSBXb3Jrc3BhY2UgU2VsZWN0aW9uIC0tPlxyXG4gICAgPFdvcmtzcGFjZU1vdmVQcm9qZWN0U2VsZWN0V29ya3NwYWNlXHJcbiAgICAgIHYtaWY9XCJzZWxlY3RlZFByb2plY3QgJiYgc3RlcC5pZCA9PT0gRGlhbG9nU3RlcElkLndvcmtzcGFjZVwiXHJcbiAgICAgIDpwcm9qZWN0PVwic2VsZWN0ZWRQcm9qZWN0XCJcclxuICAgICAgOmNoZWNrZXI9XCIodykgPT4gdy5wZXJtaXNzaW9ucy5jYW5Nb3ZlUHJvamVjdFRvV29ya3NwYWNlXCJcclxuICAgICAgQHdvcmtzcGFjZS1zZWxlY3RlZD1cIm9uV29ya3NwYWNlU2VsZWN0ZWRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvTWFuYWdlci52dWU6MzI6NVwiXHJcbiAgICAvPlxyXG5cclxuICAgIDwhLS0gQ29uZmlybWF0aW9uICh2LXNob3cgY2F1c2UgaWYgaXQgdW5tb3VudHMsIHdlIHdvbnQgZ2V0IHRoZSBtb3ZlLWNvbXBsZXRlIGV2ZW50KSAtLT5cclxuICAgIDxXb3Jrc3BhY2VNb3ZlUHJvamVjdENvbmZpcm1cclxuICAgICAgdi1pZj1cInNlbGVjdGVkUHJvamVjdCAmJiBzZWxlY3RlZFdvcmtzcGFjZVwiXHJcbiAgICAgIHYtc2hvdz1cInN0ZXAuaWQgPT09IERpYWxvZ1N0ZXBJZC5jb25maXJtYXRpb25cIlxyXG4gICAgICA6cHJvamVjdD1cInNlbGVjdGVkUHJvamVjdFwiXHJcbiAgICAgIDp3b3Jrc3BhY2U9XCJzZWxlY3RlZFdvcmtzcGFjZVwiXHJcbiAgICAgIEBtb3ZlLWNvbXBsZXRlPVwib25Nb3ZlQ29tcGxldGVcIlxyXG4gICAgICBAYmFjaz1cIm9uQmFja1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9NYW5hZ2VyLnZ1ZTo0MDo1XCJcclxuICAgIC8+XHJcbiAgICA8dGVtcGxhdGUgI2J1dHRvbnM+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCItbXktMSB3LWZ1bGwgZmxleCBqdXN0aWZ5LWVuZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9NYW5hZ2VyLnZ1ZTo0OTo3XCI+XHJcbiAgICAgICAgPEZvcm1CdXR0b25cclxuICAgICAgICAgIHYtaWY9XCJzdGVwLmlkID09PSBEaWFsb2dTdGVwSWQucHJvamVjdCAmJiAhcHJldmVudENsb3NlXCJcclxuICAgICAgICAgIGNvbG9yPVwib3V0bGluZVwiXHJcbiAgICAgICAgICBAY2xpY2s9XCJvbkNhbmNlbFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9NYW5hZ2VyLnZ1ZTo1MDo5XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBDYW5jZWxcclxuICAgICAgICA8L0Zvcm1CdXR0b24+XHJcbiAgICAgICAgPEZvcm1CdXR0b25cclxuICAgICAgICAgIHYtZWxzZS1pZj1cInN0ZXAuaWQgPT09IERpYWxvZ1N0ZXBJZC53b3Jrc3BhY2VcIlxyXG4gICAgICAgICAgY29sb3I9XCJvdXRsaW5lXCJcclxuICAgICAgICAgIGZ1bGwtd2lkdGhcclxuICAgICAgICAgIEBjbGljaz1cIm5hdmlnYXRlVG8od29ya3NwYWNlQ3JlYXRlUm91dGUpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L01hbmFnZXIudnVlOjU3OjlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIENyZWF0ZSBhIG5ldyB3b3Jrc3BhY2VcclxuICAgICAgICA8L0Zvcm1CdXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC90ZW1wbGF0ZT5cclxuICA8L0xheW91dERpYWxvZz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHVzZVF1ZXJ5IH0gZnJvbSAnQHZ1ZS9hcG9sbG8tY29tcG9zYWJsZSdcclxuaW1wb3J0IHsgZ3JhcGhxbCB9IGZyb20gJ35+L2xpYi9jb21tb24vZ2VuZXJhdGVkL2dxbCdcclxuaW1wb3J0IHR5cGUge1xyXG4gIFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Qcm9qZWN0RnJhZ21lbnQsXHJcbiAgV29ya3NwYWNlTW92ZVByb2plY3RTZWxlY3RXb3Jrc3BhY2VfV29ya3NwYWNlRnJhZ21lbnRcclxufSBmcm9tICd+L2xpYi9jb21tb24vZ2VuZXJhdGVkL2dxbC9ncmFwaHFsJ1xyXG5pbXBvcnQge1xyXG4gIHdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlclByb2plY3RRdWVyeSxcclxuICB3b3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJXb3Jrc3BhY2VRdWVyeVxyXG59IGZyb20gJ34vbGliL3dvcmtzcGFjZXMvZ3JhcGhxbC9xdWVyaWVzJ1xyXG5pbXBvcnQgeyB3b3Jrc3BhY2VDcmVhdGVSb3V0ZSB9IGZyb20gJ34vbGliL2NvbW1vbi9oZWxwZXJzL3JvdXRlJ1xyXG5pbXBvcnQgeyB1c2VNdWx0aVN0ZXBEaWFsb2cgfSBmcm9tICd+L2xpYi9jb21tb24vY29tcG9zYWJsZXMvZGlhbG9nJ1xyXG5pbXBvcnQgdHlwZSB7IFZpZXdlckxpbWl0c0RpYWxvZ1R5cGUgfSBmcm9tICd+L2xpYi9wcm9qZWN0cy9oZWxwZXJzL2xpbWl0cydcclxuXHJcbmNvbnN0IERpYWxvZ1N0ZXBJZCA9IHtcclxuICBpbnRybzogJ2ludHJvJyxcclxuICBwcm9qZWN0OiAncHJvamVjdCcsXHJcbiAgd29ya3NwYWNlOiAnd29ya3NwYWNlJyxcclxuICBjb25maXJtYXRpb246ICdjb25maXJtYXRpb24nXHJcbn0gYXMgY29uc3RcclxudHlwZSBEaWFsb2dTdGVwSWQgPSAodHlwZW9mIERpYWxvZ1N0ZXBJZClba2V5b2YgdHlwZW9mIERpYWxvZ1N0ZXBJZF1cclxuXHJcbmdyYXBocWwoYFxyXG4gIGZyYWdtZW50IFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Qcm9qZWN0QmFzZSBvbiBQcm9qZWN0IHtcclxuICAgIGlkXHJcbiAgICBuYW1lXHJcbiAgICBtb2RlbENvdW50OiBtb2RlbHMobGltaXQ6IDApIHtcclxuICAgICAgdG90YWxDb3VudFxyXG4gICAgfVxyXG4gICAgdmVyc2lvbnMobGltaXQ6IDApIHtcclxuICAgICAgdG90YWxDb3VudFxyXG4gICAgfVxyXG4gIH1cclxuYClcclxuXHJcbmdyYXBocWwoYFxyXG4gIGZyYWdtZW50IFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Qcm9qZWN0IG9uIFByb2plY3Qge1xyXG4gICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RCYXNlXHJcbiAgICBwZXJtaXNzaW9ucyB7XHJcbiAgICAgIGNhbk1vdmVUb1dvcmtzcGFjZSh3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkKSB7XHJcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB3b3Jrc3BhY2Uge1xyXG4gICAgICBpZFxyXG4gICAgICBzbHVnXHJcbiAgICAgIHBlcm1pc3Npb25zIHtcclxuICAgICAgICBjYW5Nb3ZlUHJvamVjdFRvV29ya3NwYWNlKHByb2plY3RJZDogJHByb2plY3RJZCkge1xyXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuYClcclxuXHJcbmdyYXBocWwoYFxyXG4gIGZyYWdtZW50IFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcclxuICAgIGlkXHJcbiAgICByb2xlXHJcbiAgICBuYW1lXHJcbiAgICBsb2dvXHJcbiAgICBzbHVnXHJcbiAgICBwbGFuIHtcclxuICAgICAgbmFtZVxyXG4gICAgICB1c2FnZSB7XHJcbiAgICAgICAgcHJvamVjdENvdW50XHJcbiAgICAgICAgbW9kZWxDb3VudFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBwZXJtaXNzaW9ucyB7XHJcbiAgICAgIGNhbk1vdmVQcm9qZWN0VG9Xb3Jrc3BhY2UocHJvamVjdElkOiAkcHJvamVjdElkKSB7XHJcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm9qZWN0cyB7XHJcbiAgICAgIHRvdGFsQ291bnRcclxuICAgIH1cclxuICAgIHRlYW0ge1xyXG4gICAgICBpdGVtcyB7XHJcbiAgICAgICAgdXNlciB7XHJcbiAgICAgICAgICBpZFxyXG4gICAgICAgICAgbmFtZVxyXG4gICAgICAgICAgYXZhdGFyXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdFNlbGVjdFdvcmtzcGFjZV9Xb3Jrc3BhY2VcclxuICB9XHJcbmApXHJcblxyXG5jb25zdCBlbWl0ID0gZGVmaW5lRW1pdHM8e1xyXG4gIGRvbmU6IFtdXHJcbn0+KClcclxuXHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8e1xyXG4gIHByb2plY3RJZD86IHN0cmluZ1xyXG4gIHdvcmtzcGFjZVNsdWc/OiBzdHJpbmdcclxuICB3b3Jrc3BhY2VJZD86IHN0cmluZ1xyXG4gIHNob3dJbnRybz86IGJvb2xlYW5cclxuICBsaW1pdFR5cGU/OiBWaWV3ZXJMaW1pdHNEaWFsb2dUeXBlXHJcbn0+KClcclxuXHJcbmNvbnN0IG9wZW4gPSBkZWZpbmVNb2RlbDxib29sZWFuPignb3BlbicsIHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuXHJcbi8vIEludGVybmFsIHN0YXRlIG1hbmFnZW1lbnRcclxuY29uc3Qgc2VsZWN0ZWRQcm9qZWN0ID0gcmVmPFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Qcm9qZWN0RnJhZ21lbnQgfCBudWxsPihudWxsKVxyXG5jb25zdCBzZWxlY3RlZFdvcmtzcGFjZSA9XHJcbiAgcmVmPFdvcmtzcGFjZU1vdmVQcm9qZWN0U2VsZWN0V29ya3NwYWNlX1dvcmtzcGFjZUZyYWdtZW50IHwgbnVsbD4obnVsbClcclxuXHJcbmNvbnN0IHsgZ29Ub1ByZXZpb3VzU3RlcCwgc3RlcCwgZ29Ub05leHRTdGVwLCByZXNldFN0ZXAgfSA9XHJcbiAgdXNlTXVsdGlTdGVwRGlhbG9nPERpYWxvZ1N0ZXBJZD4oe1xyXG4gICAgc3RlcHM6IGNvbXB1dGVkKCgpID0+IFtcclxuICAgICAgLi4uKHByb3BzLnNob3dJbnRyb1xyXG4gICAgICAgID8gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgaWQ6IERpYWxvZ1N0ZXBJZC5pbnRybyxcclxuICAgICAgICAgICAgICB0aXRsZTogJ01vdmUgeW91ciBwcm9qZWN0cyB0byBhIHdvcmtzcGFjZSdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIDogW10pLFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IERpYWxvZ1N0ZXBJZC5wcm9qZWN0LFxyXG4gICAgICAgIHRpdGxlOiAnQ2hvb3NlIHByb2plY3QgdG8gbW92ZSdcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiBEaWFsb2dTdGVwSWQud29ya3NwYWNlLFxyXG4gICAgICAgIHRpdGxlOiAnQ2hvb3NlIHdvcmtzcGFjZSdcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiBEaWFsb2dTdGVwSWQuY29uZmlybWF0aW9uLFxyXG4gICAgICAgIHRpdGxlOiAnQ29uZmlybSBtb3ZlJ1xyXG4gICAgICB9XHJcbiAgICBdKSxcclxuICAgIHJlc29sdmVOZXh0U3RlcDogKHsgcmVzZXQgfSkgPT4ge1xyXG4gICAgICBpZiAocHJvcHMuc2hvd0ludHJvICYmIHJlc2V0KSB7XHJcbiAgICAgICAgcmV0dXJuIERpYWxvZ1N0ZXBJZC5pbnRyb1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXNlbGVjdGVkUHJvamVjdC52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBEaWFsb2dTdGVwSWQucHJvamVjdFxyXG4gICAgICB9XHJcbiAgICAgIGlmICghc2VsZWN0ZWRXb3Jrc3BhY2UudmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gRGlhbG9nU3RlcElkLndvcmtzcGFjZVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGlhbG9nU3RlcElkLmNvbmZpcm1hdGlvblxyXG4gICAgfSxcclxuICAgIHJlc29sdmVQcmV2aW91c1N0ZXA6ICgpID0+IHtcclxuICAgICAgaWYgKHByb3BzLndvcmtzcGFjZVNsdWcpIHtcclxuICAgICAgICByZXR1cm4gRGlhbG9nU3RlcElkLnByb2plY3RcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gRGlhbG9nU3RlcElkLndvcmtzcGFjZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbi8vIEZldGNoIHByb2plY3QgZGF0YSBpZiBwcm92aWRlZFxyXG5jb25zdCB7IHJlc3VsdDogcHJvamVjdFJlc3VsdCwgb25SZXN1bHQ6IG9uUHJvamVjdFJlc3VsdCB9ID0gdXNlUXVlcnkoXHJcbiAgd29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyUHJvamVjdFF1ZXJ5LFxyXG4gICgpID0+ICh7XHJcbiAgICBwcm9qZWN0SWQ6IHByb3BzLnByb2plY3RJZCB8fCAnJyxcclxuICAgIHdvcmtzcGFjZUlkOiBwcm9wcy53b3Jrc3BhY2VJZFxyXG4gIH0pLFxyXG4gICgpID0+ICh7XHJcbiAgICBlbmFibGVkOiAhIXByb3BzLnByb2plY3RJZFxyXG4gIH0pXHJcbilcclxuXHJcbi8vIEZldGNoIHdvcmtzcGFjZSBkYXRhIGlmIHByb3ZpZGVkXHJcbmNvbnN0IHsgcmVzdWx0OiB3b3Jrc3BhY2VSZXN1bHQsIG9uUmVzdWx0OiBvbldvcmtzcGFjZVJlc3VsdCB9ID0gdXNlUXVlcnkoXHJcbiAgd29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyV29ya3NwYWNlUXVlcnksXHJcbiAgKCkgPT4gKHtcclxuICAgIHdvcmtzcGFjZVNsdWc6IHByb3BzLndvcmtzcGFjZVNsdWcgfHwgJycsXHJcbiAgICBwcm9qZWN0SWQ6IHByb3BzLnByb2plY3RJZFxyXG4gIH0pLFxyXG4gICgpID0+ICh7XHJcbiAgICBlbmFibGVkOiAhIXByb3BzLndvcmtzcGFjZVNsdWdcclxuICB9KVxyXG4pXHJcblxyXG5jb25zdCBpc1NtYWxsRGlhbG9nID0gY29tcHV0ZWQoKCkgPT4gc3RlcC52YWx1ZS5pZCA9PT0gRGlhbG9nU3RlcElkLmludHJvKVxyXG5jb25zdCBwcmV2ZW50Q2xvc2UgPSBjb21wdXRlZCgoKSA9PiAhIXByb3BzLmxpbWl0VHlwZSlcclxuXHJcbm9uUHJvamVjdFJlc3VsdCgocmVzKSA9PiB7XHJcbiAgaWYgKHJlcy5kYXRhPy5wcm9qZWN0Py5pZCAhPT0gc2VsZWN0ZWRQcm9qZWN0LnZhbHVlPy5pZCkge1xyXG4gICAgc2VsZWN0ZWRQcm9qZWN0LnZhbHVlID0gcmVzLmRhdGEucHJvamVjdFxyXG4gICAgcmVzZXRTdGVwKClcclxuICB9XHJcbn0pXHJcblxyXG5vbldvcmtzcGFjZVJlc3VsdCgocmVzKSA9PiB7XHJcbiAgaWYgKHJlcy5kYXRhPy53b3Jrc3BhY2VCeVNsdWc/LmlkICE9PSBzZWxlY3RlZFdvcmtzcGFjZS52YWx1ZT8uaWQpIHtcclxuICAgIHJlc2V0U3RlcCgpXHJcbiAgfVxyXG59KVxyXG5cclxud2F0Y2gob3BlbiwgKG5ld1ZhbCwgb2xkVmFsKSA9PiB7XHJcbiAgaWYgKG5ld1ZhbCAmJiAhb2xkVmFsKSB7XHJcbiAgICBpZiAod29ya3NwYWNlUmVzdWx0LnZhbHVlPy53b3Jrc3BhY2VCeVNsdWcpIHtcclxuICAgICAgc2VsZWN0ZWRXb3Jrc3BhY2UudmFsdWUgPSB3b3Jrc3BhY2VSZXN1bHQudmFsdWUud29ya3NwYWNlQnlTbHVnXHJcbiAgICB9XHJcbiAgICBpZiAocHJvamVjdFJlc3VsdC52YWx1ZT8ucHJvamVjdCkge1xyXG4gICAgICBzZWxlY3RlZFByb2plY3QudmFsdWUgPSBwcm9qZWN0UmVzdWx0LnZhbHVlLnByb2plY3RcclxuICAgIH1cclxuICAgIHJlc2V0U3RlcCgpXHJcbiAgfVxyXG59KVxyXG5cclxuY29uc3Qgb25Qcm9qZWN0U2VsZWN0ZWQgPSAocHJvamVjdDogV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RGcmFnbWVudCkgPT4ge1xyXG4gIHNlbGVjdGVkUHJvamVjdC52YWx1ZSA9IHByb2plY3RcclxuICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYSB3b3Jrc3BhY2UgKGZyb20gcHJvcHMpLCBnbyBzdHJhaWdodCB0byBjb25maXJtYXRpb25cclxuICBpZiAocHJvcHMud29ya3NwYWNlU2x1ZyAmJiB3b3Jrc3BhY2VSZXN1bHQudmFsdWU/LndvcmtzcGFjZUJ5U2x1Zykge1xyXG4gICAgc2VsZWN0ZWRXb3Jrc3BhY2UudmFsdWUgPSB3b3Jrc3BhY2VSZXN1bHQudmFsdWUud29ya3NwYWNlQnlTbHVnXHJcbiAgfVxyXG4gIGdvVG9OZXh0U3RlcCgpXHJcbn1cclxuXHJcbmNvbnN0IG9uV29ya3NwYWNlU2VsZWN0ZWQgPSAoXHJcbiAgd29ya3NwYWNlOiBXb3Jrc3BhY2VNb3ZlUHJvamVjdFNlbGVjdFdvcmtzcGFjZV9Xb3Jrc3BhY2VGcmFnbWVudFxyXG4pID0+IHtcclxuICBzZWxlY3RlZFdvcmtzcGFjZS52YWx1ZSA9IHdvcmtzcGFjZVxyXG4gIGdvVG9OZXh0U3RlcCgpXHJcbn1cclxuXHJcbmNvbnN0IG9uTW92ZUNvbXBsZXRlID0gKCkgPT4ge1xyXG4gIGVtaXQoJ2RvbmUnKVxyXG4gIHNlbGVjdGVkUHJvamVjdC52YWx1ZSA9IG51bGxcclxuICBzZWxlY3RlZFdvcmtzcGFjZS52YWx1ZSA9IG51bGxcclxuICBvcGVuLnZhbHVlID0gZmFsc2VcclxufVxyXG5cclxuY29uc3Qgb25CYWNrID0gKCkgPT4ge1xyXG4gIGdvVG9QcmV2aW91c1N0ZXAoKVxyXG59XHJcblxyXG5jb25zdCBvbkNhbmNlbCA9ICgpID0+IHtcclxuICBvcGVuLnZhbHVlID0gZmFsc2VcclxuICBzZWxlY3RlZFByb2plY3QudmFsdWUgPSBudWxsXHJcbiAgc2VsZWN0ZWRXb3Jrc3BhY2UudmFsdWUgPSBudWxsXHJcbn1cclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9NYW5hZ2VyLnZ1ZSJ9