import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/integrations/acc/dialog/CreateSync.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/integrations/acc/Hubs.vue"; import { default as __nuxt_component_1 } from "/_nuxt/components/integrations/acc/Projects.vue"; import { default as __nuxt_component_2 } from "/_nuxt/components/integrations/acc/FileSelector.vue"; import { FormTextInput as __nuxt_component_3 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { LayoutDialog as __nuxt_component_4 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; /* Injection by vite-plugin-vue-inspector Start */ import { createVNode as __createVNode,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 _createVNode(...args) { return _interopVNode(__createVNode(...args)) } 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 { useForm } from "/_nuxt/node_modules/.cache/vite/client/deps/vee-validate.js?v=e4f18c29"; import { useAccAuthManager } from "/_nuxt/lib/acc/composables/useAccAuthManager.ts"; import { useAcc } from "/_nuxt/lib/acc/composables/useAccFiles.ts"; import { useCreateAccSyncItem } from "/_nuxt/lib/acc/composables/useCreateAccSyncItem.ts"; import { ref, computed, watch, onMounted } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { useGlobalToast } from "/_nuxt/composables/globals.ts"; import { ToastNotificationType } from "/_nuxt/utils/globals.ts"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "IntegrationsAccDialogCreateSync", props: /* @__PURE__ */ _mergeModels({ title: { type: String, required: false }, intro: { type: String, required: false }, hideSuppport: { type: Boolean, required: false }, projectId: { type: String, required: false }, metadata: { type: Object, required: false } }, { "open": { type: Boolean, ...{ required: true } }, "openModifiers": {} }), emits: ["update:open"], setup(__props, { expose: __expose }) { __expose(); const props = __props; const isOpen = _useModel(__props, "open"); const isCreatingSyncItem = ref(false); const disableCreateButton = computed(() => !!isCreatingSyncItem.value); const { handleSubmit } = useForm(); const dialogButtons = computed(() => [ { text: "Create", props: { color: "primary", loading: isCreatingSyncItem.value }, onClick: () => { onSubmit(); }, disabled: disableCreateButton.value, disabledMessage: "Creating ACC sync...", id: "createAccSync" } ]); const { triggerNotification } = useGlobalToast(); const createAccSyncItem = useCreateAccSyncItem(); const dialogTitle = computed(() => props.title || "Create sync from ACC"); const onSubmit = handleSubmit(async () => { await addSync(); isOpen.value = false; }); const selectedHub = ref(null); const selectedHubId = ref(null); const selectedProjectId = ref(null); const revitViewName = ref(); const selectedFolder = ref(); const selectedFileId = ref(); const selectedFileVersion = ref(); const { hubs, fetchHubs, loadingHubs, projects, fetchProjects, loadingProjects, rootProjectFolderId, init } = useAcc(); const { tokens, tryGetTokensFromCookies } = useAccAuthManager(); const onHubClick = async (hub) => { selectedHub.value = hub; selectedHubId.value = hub.id; await fetchProjects(hub.id, tokens.value.access_token); }; const onProjectClick = async (hubId, projectId) => { selectedFolder.value = void 0; selectedFileVersion.value = void 0; selectedProjectId.value = projectId; await init(hubId, projectId, tokens.value.access_token); }; const onFileSelected = (fileId, fileVersion) => { selectedFileId.value = fileId; selectedFileVersion.value = fileVersion; }; const addSync = async () => { try { if (!selectedFileVersion.value || !selectedFileVersion.value.fileType) { return; } isCreatingSyncItem.value = true; const fileVersion = selectedFileVersion.value.versionNumber; const accFileViewName = revitViewName.value === "" ? void 0 : revitViewName.value; await createAccSyncItem({ projectId: props.projectId, accRegion: selectedHub.value?.attributes?.region, accFileExtension: selectedFileVersion.value.fileType, accHubId: selectedHubId.value, accProjectId: selectedProjectId.value, accRootProjectFolderUrn: rootProjectFolderId.value, accFileLineageUrn: selectedFileId.value, accFileName: selectedFileVersion.value.name, accFileVersionIndex: fileVersion, accFileVersionUrn: selectedFileVersion.value.id, accFileViewName }); } catch (error) { triggerNotification({ type: ToastNotificationType.Danger, title: "Add sync item failed", description: error instanceof Error ? error.message : "Unexpected error" }); } finally { isCreatingSyncItem.value = false; revitViewName.value = void 0; } }; watch(tokens, (newTokens) => { if (newTokens?.access_token) { fetchHubs(newTokens?.access_token); } }); onMounted(async () => { await tryGetTokensFromCookies(); if (tokens.value) { fetchHubs(tokens.value.access_token); } }); watch(isOpen, (newVal) => { if (newVal) { selectedFileVersion.value = void 0; } }); const __returned__ = { props, isOpen, isCreatingSyncItem, disableCreateButton, handleSubmit, dialogButtons, triggerNotification, createAccSyncItem, dialogTitle, onSubmit, selectedHub, selectedHubId, selectedProjectId, revitViewName, selectedFolder, selectedFileId, selectedFileVersion, hubs, fetchHubs, loadingHubs, projects, fetchProjects, loadingProjects, rootProjectFolderId, init, tokens, tryGetTokensFromCookies, onHubClick, onProjectClick, onFileSelected, addSync }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { resolveComponent as _resolveComponent, openBlock as _openBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { class: "flex flex-col space-y-2", "data-v-inspector": "components/integrations/acc/dialog/CreateSync.vue:9:5" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_IntegrationsAccHubs = __nuxt_component_0; const _component_IntegrationsAccProjects = __nuxt_component_1; const _component_IntegrationsAccFileSelector = __nuxt_component_2; const _component_FormTextInput = __nuxt_component_3; const _component_LayoutDialog = __nuxt_component_4; return _openBlock(), _createBlock(_component_LayoutDialog, { open: $setup.isOpen, "onUpdate:open": _cache[1] || (_cache[1] = ($event) => $setup.isOpen = $event), title: $setup.dialogTitle, buttons: $setup.dialogButtons, "max-width": "lg", fullscreen: "none", "data-v-inspector": "components/integrations/acc/dialog/CreateSync.vue:2:3" }, { default: _withCtx(() => [ _createElementVNode("div", _hoisted_1, [ _createVNode(_component_IntegrationsAccHubs, { hubs: $setup.hubs, loading: $setup.loadingHubs, onHubSelected: $setup.onHubClick, "data-v-inspector": "components/integrations/acc/dialog/CreateSync.vue:10:7" }, null, 8, ["hubs", "loading"]), $setup.selectedHubId ? (_openBlock(), _createBlock(_component_IntegrationsAccProjects, { key: 0, "hub-id": $setup.selectedHubId, projects: $setup.projects, loading: $setup.loadingProjects, onProjectSelected: $setup.onProjectClick, "data-v-inspector": "components/integrations/acc/dialog/CreateSync.vue:16:7" }, null, 8, ["hub-id", "projects", "loading"])) : _createCommentVNode("v-if", true), $setup.selectedProjectId && $setup.selectedHubId && $setup.tokens ? (_openBlock(), _createBlock(_component_IntegrationsAccFileSelector, { key: $setup.selectedProjectId, "hub-id": $setup.selectedHubId, "project-id": $setup.selectedProjectId, tokens: $setup.tokens, onFileSelected: $setup.onFileSelected, "data-v-inspector": "components/integrations/acc/dialog/CreateSync.vue:24:7" }, null, 8, ["hub-id", "project-id", "tokens"])) : _createCommentVNode("v-if", true), _createVNode(_component_FormTextInput, { modelValue: $setup.revitViewName, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.revitViewName = $event), name: "revitFileViewName", color: "foundation", label: "Revit view name (Optional)", "show-label": "", disabled: !$setup.selectedFileVersion, "data-v-inspector": "components/integrations/acc/dialog/CreateSync.vue:33:7" }, null, 8, ["modelValue", "disabled"]) ]) ]), _: 1 /* STABLE */ }, 8, ["open", "title", "buttons"]); } _sfc_main.__hmrId = "e66875a4"; 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/integrations/acc/dialog/CreateSync.vue"]]); //# sourceMappingURL=data:application/json;base64,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QixvQkFBaUI7QUFBQTtRQUk5Qyw0QkFBcUIsd0JBQWlCLCtCQUQ5QyxhQU9FO0FBQUEsVUFMQyxLQUFLO0FBQUEsVUFDTCxVQUFRO0FBQUEsVUFDUixjQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsVUFDUixnQkFBZTtBQUFBLFVBQWdCLG9CQUFpQjtBQUFBO1FBR25ELGFBT2lCO0FBQUEsc0JBTk47QUFBQSw4RkFBYTtBQUFBLFVBQ3RCLE1BQUs7QUFBQSxVQUNMLE9BQU07QUFBQSxVQUNOLE9BQU07QUFBQSxVQUNOO0FBQUEsVUFDQyxVQUFRLENBQUc7QUFBQSxVQUFxQixvQkFBaUI7QUFBQSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiQ3JlYXRlU3luYy52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG4gIDxMYXlvdXREaWFsb2dcclxuICAgIHYtbW9kZWw6b3Blbj1cImlzT3BlblwiXHJcbiAgICA6dGl0bGU9XCJkaWFsb2dUaXRsZVwiXHJcbiAgICA6YnV0dG9ucz1cImRpYWxvZ0J1dHRvbnNcIlxyXG4gICAgbWF4LXdpZHRoPVwibGdcIlxyXG4gICAgZnVsbHNjcmVlbj1cIm5vbmVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9pbnRlZ3JhdGlvbnMvYWNjL2RpYWxvZy9DcmVhdGVTeW5jLnZ1ZToyOjNcIlxyXG4gID5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHNwYWNlLXktMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2ludGVncmF0aW9ucy9hY2MvZGlhbG9nL0NyZWF0ZVN5bmMudnVlOjk6NVwiPlxyXG4gICAgICA8SW50ZWdyYXRpb25zQWNjSHVic1xyXG4gICAgICAgIDpodWJzPVwiaHVic1wiXHJcbiAgICAgICAgOmxvYWRpbmc9XCJsb2FkaW5nSHVic1wiXHJcbiAgICAgICAgQGh1Yi1zZWxlY3RlZD1cIm9uSHViQ2xpY2tcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9pbnRlZ3JhdGlvbnMvYWNjL2RpYWxvZy9DcmVhdGVTeW5jLnZ1ZToxMDo3XCJcclxuICAgICAgLz5cclxuXHJcbiAgICAgIDxJbnRlZ3JhdGlvbnNBY2NQcm9qZWN0c1xyXG4gICAgICAgIHYtaWY9XCJzZWxlY3RlZEh1YklkXCJcclxuICAgICAgICA6aHViLWlkPVwic2VsZWN0ZWRIdWJJZFwiXHJcbiAgICAgICAgOnByb2plY3RzPVwicHJvamVjdHNcIlxyXG4gICAgICAgIDpsb2FkaW5nPVwibG9hZGluZ1Byb2plY3RzXCJcclxuICAgICAgICBAcHJvamVjdC1zZWxlY3RlZD1cIm9uUHJvamVjdENsaWNrXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW50ZWdyYXRpb25zL2FjYy9kaWFsb2cvQ3JlYXRlU3luYy52dWU6MTY6N1wiXHJcbiAgICAgIC8+XHJcblxyXG4gICAgICA8SW50ZWdyYXRpb25zQWNjRmlsZVNlbGVjdG9yXHJcbiAgICAgICAgdi1pZj1cInNlbGVjdGVkUHJvamVjdElkICYmIHNlbGVjdGVkSHViSWQgJiYgdG9rZW5zXCJcclxuICAgICAgICA6a2V5PVwic2VsZWN0ZWRQcm9qZWN0SWRcIlxyXG4gICAgICAgIDpodWItaWQ9XCJzZWxlY3RlZEh1YklkXCJcclxuICAgICAgICA6cHJvamVjdC1pZD1cInNlbGVjdGVkUHJvamVjdElkXCJcclxuICAgICAgICA6dG9rZW5zPVwidG9rZW5zXCJcclxuICAgICAgICBAZmlsZS1zZWxlY3RlZD1cIm9uRmlsZVNlbGVjdGVkXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW50ZWdyYXRpb25zL2FjYy9kaWFsb2cvQ3JlYXRlU3luYy52dWU6MjQ6N1wiXHJcbiAgICAgIC8+XHJcblxyXG4gICAgICA8Rm9ybVRleHRJbnB1dFxyXG4gICAgICAgIHYtbW9kZWw9XCJyZXZpdFZpZXdOYW1lXCJcclxuICAgICAgICBuYW1lPVwicmV2aXRGaWxlVmlld05hbWVcIlxyXG4gICAgICAgIGNvbG9yPVwiZm91bmRhdGlvblwiXHJcbiAgICAgICAgbGFiZWw9XCJSZXZpdCB2aWV3IG5hbWUgKE9wdGlvbmFsKVwiXHJcbiAgICAgICAgc2hvdy1sYWJlbFxyXG4gICAgICAgIDpkaXNhYmxlZD1cIiFzZWxlY3RlZEZpbGVWZXJzaW9uXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW50ZWdyYXRpb25zL2FjYy9kaWFsb2cvQ3JlYXRlU3luYy52dWU6MzM6N1wiXHJcbiAgICAgID48L0Zvcm1UZXh0SW5wdXQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L0xheW91dERpYWxvZz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB0eXBlIHsgQWNjSHViIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkL2FjYydcclxuaW1wb3J0IHR5cGUgeyBMYXlvdXREaWFsb2dCdXR0b24gfSBmcm9tICdAc3BlY2tsZS91aS1jb21wb25lbnRzJ1xyXG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAndmVlLXZhbGlkYXRlJ1xyXG5pbXBvcnQgeyB1c2VBY2NBdXRoTWFuYWdlciB9IGZyb20gJ34vbGliL2FjYy9jb21wb3NhYmxlcy91c2VBY2NBdXRoTWFuYWdlcidcclxuaW1wb3J0IHtcclxuICB1c2VBY2MsXHJcbiAgdHlwZSBBY2NGb2xkZXIsXHJcbiAgdHlwZSBBY2NJdGVtVmVyc2lvblxyXG59IGZyb20gJ34vbGliL2FjYy9jb21wb3NhYmxlcy91c2VBY2NGaWxlcydcclxuaW1wb3J0IHsgdXNlQ3JlYXRlQWNjU3luY0l0ZW0gfSBmcm9tICd+L2xpYi9hY2MvY29tcG9zYWJsZXMvdXNlQ3JlYXRlQWNjU3luY0l0ZW0nXHJcblxyXG50eXBlIEZvcm1WYWx1ZXMgPSB7IGZlZWRiYWNrOiBzdHJpbmcgfVxyXG5cclxuY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wczx7XHJcbiAgdGl0bGU/OiBzdHJpbmdcclxuICBpbnRybz86IHN0cmluZ1xyXG4gIGhpZGVTdXBwcG9ydD86IGJvb2xlYW5cclxuICBwcm9qZWN0SWQ/OiBzdHJpbmdcclxuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XHJcbn0+KClcclxuXHJcbmNvbnN0IGlzT3BlbiA9IGRlZmluZU1vZGVsPGJvb2xlYW4+KCdvcGVuJywgeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG5cclxuY29uc3QgaXNDcmVhdGluZ1N5bmNJdGVtID0gcmVmKGZhbHNlKVxyXG5jb25zdCBkaXNhYmxlQ3JlYXRlQnV0dG9uID0gY29tcHV0ZWQoKCkgPT4gISFpc0NyZWF0aW5nU3luY0l0ZW0udmFsdWUpXHJcblxyXG5jb25zdCB7IGhhbmRsZVN1Ym1pdCB9ID0gdXNlRm9ybTxGb3JtVmFsdWVzPigpXHJcblxyXG5jb25zdCBkaWFsb2dCdXR0b25zID0gY29tcHV0ZWQoKCk6IExheW91dERpYWxvZ0J1dHRvbltdID0+IFtcclxuICB7XHJcbiAgICB0ZXh0OiAnQ3JlYXRlJyxcclxuICAgIHByb3BzOiB7IGNvbG9yOiAncHJpbWFyeScsIGxvYWRpbmc6IGlzQ3JlYXRpbmdTeW5jSXRlbS52YWx1ZSB9LFxyXG4gICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICBvblN1Ym1pdCgpXHJcbiAgICB9LFxyXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVDcmVhdGVCdXR0b24udmFsdWUsXHJcbiAgICBkaXNhYmxlZE1lc3NhZ2U6ICdDcmVhdGluZyBBQ0Mgc3luYy4uLicsXHJcbiAgICBpZDogJ2NyZWF0ZUFjY1N5bmMnXHJcbiAgfVxyXG5dKVxyXG5cclxuY29uc3QgeyB0cmlnZ2VyTm90aWZpY2F0aW9uIH0gPSB1c2VHbG9iYWxUb2FzdCgpXHJcbmNvbnN0IGNyZWF0ZUFjY1N5bmNJdGVtID0gdXNlQ3JlYXRlQWNjU3luY0l0ZW0oKVxyXG5cclxuY29uc3QgZGlhbG9nVGl0bGUgPSBjb21wdXRlZCgoKSA9PiBwcm9wcy50aXRsZSB8fCAnQ3JlYXRlIHN5bmMgZnJvbSBBQ0MnKVxyXG5cclxuY29uc3Qgb25TdWJtaXQgPSBoYW5kbGVTdWJtaXQoYXN5bmMgKCkgPT4ge1xyXG4gIGF3YWl0IGFkZFN5bmMoKVxyXG4gIGlzT3Blbi52YWx1ZSA9IGZhbHNlXHJcbn0pXHJcblxyXG5jb25zdCBzZWxlY3RlZEh1YiA9IHJlZjxBY2NIdWIgfCBudWxsPihudWxsKVxyXG5jb25zdCBzZWxlY3RlZEh1YklkID0gcmVmPHN0cmluZyB8IG51bGw+KG51bGwpXHJcbmNvbnN0IHNlbGVjdGVkUHJvamVjdElkID0gcmVmPHN0cmluZyB8IG51bGw+KG51bGwpXHJcblxyXG5jb25zdCByZXZpdFZpZXdOYW1lID0gcmVmPHN0cmluZz4oKVxyXG5cclxuY29uc3Qgc2VsZWN0ZWRGb2xkZXIgPSByZWY8QWNjRm9sZGVyIHwgdW5kZWZpbmVkPigpXHJcbmNvbnN0IHNlbGVjdGVkRmlsZUlkID0gcmVmPHN0cmluZyB8IHVuZGVmaW5lZD4oKVxyXG5jb25zdCBzZWxlY3RlZEZpbGVWZXJzaW9uID0gcmVmPEFjY0l0ZW1WZXJzaW9uIHwgdW5kZWZpbmVkPigpXHJcblxyXG5jb25zdCB7XHJcbiAgaHVicyxcclxuICBmZXRjaEh1YnMsXHJcbiAgbG9hZGluZ0h1YnMsXHJcbiAgcHJvamVjdHMsXHJcbiAgZmV0Y2hQcm9qZWN0cyxcclxuICBsb2FkaW5nUHJvamVjdHMsXHJcbiAgcm9vdFByb2plY3RGb2xkZXJJZCxcclxuICBpbml0XHJcbn0gPSB1c2VBY2MoKVxyXG5cclxuY29uc3QgeyB0b2tlbnMsIHRyeUdldFRva2Vuc0Zyb21Db29raWVzIH0gPSB1c2VBY2NBdXRoTWFuYWdlcigpXHJcblxyXG5jb25zdCBvbkh1YkNsaWNrID0gYXN5bmMgKGh1YjogQWNjSHViKSA9PiB7XHJcbiAgc2VsZWN0ZWRIdWIudmFsdWUgPSBodWJcclxuICBzZWxlY3RlZEh1YklkLnZhbHVlID0gaHViLmlkXHJcbiAgYXdhaXQgZmV0Y2hQcm9qZWN0cyhodWIuaWQsIHRva2Vucy52YWx1ZSEuYWNjZXNzX3Rva2VuKVxyXG59XHJcblxyXG5jb25zdCBvblByb2plY3RDbGljayA9IGFzeW5jIChodWJJZDogc3RyaW5nLCBwcm9qZWN0SWQ6IHN0cmluZykgPT4ge1xyXG4gIHNlbGVjdGVkRm9sZGVyLnZhbHVlID0gdW5kZWZpbmVkXHJcbiAgc2VsZWN0ZWRGaWxlVmVyc2lvbi52YWx1ZSA9IHVuZGVmaW5lZFxyXG4gIHNlbGVjdGVkUHJvamVjdElkLnZhbHVlID0gcHJvamVjdElkXHJcbiAgYXdhaXQgaW5pdChodWJJZCwgcHJvamVjdElkLCB0b2tlbnMudmFsdWUhLmFjY2Vzc190b2tlbilcclxufVxyXG5cclxuY29uc3Qgb25GaWxlU2VsZWN0ZWQgPSAoZmlsZUlkOiBzdHJpbmcsIGZpbGVWZXJzaW9uOiBBY2NJdGVtVmVyc2lvbikgPT4ge1xyXG4gIHNlbGVjdGVkRmlsZUlkLnZhbHVlID0gZmlsZUlkXHJcbiAgc2VsZWN0ZWRGaWxlVmVyc2lvbi52YWx1ZSA9IGZpbGVWZXJzaW9uXHJcbn1cclxuXHJcbmNvbnN0IGFkZFN5bmMgPSBhc3luYyAoKSA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGlmICghc2VsZWN0ZWRGaWxlVmVyc2lvbi52YWx1ZSB8fCAhc2VsZWN0ZWRGaWxlVmVyc2lvbi52YWx1ZS5maWxlVHlwZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlzQ3JlYXRpbmdTeW5jSXRlbS52YWx1ZSA9IHRydWVcclxuXHJcbiAgICBjb25zdCBmaWxlVmVyc2lvbiA9IHNlbGVjdGVkRmlsZVZlcnNpb24udmFsdWUudmVyc2lvbk51bWJlclxyXG4gICAgY29uc3QgYWNjRmlsZVZpZXdOYW1lID0gcmV2aXRWaWV3TmFtZS52YWx1ZSA9PT0gJycgPyB1bmRlZmluZWQgOiByZXZpdFZpZXdOYW1lLnZhbHVlXHJcblxyXG4gICAgYXdhaXQgY3JlYXRlQWNjU3luY0l0ZW0oe1xyXG4gICAgICBwcm9qZWN0SWQ6IHByb3BzLnByb2plY3RJZCBhcyBzdHJpbmcsXHJcbiAgICAgIGFjY1JlZ2lvbjogc2VsZWN0ZWRIdWIudmFsdWU/LmF0dHJpYnV0ZXM/LnJlZ2lvbiBhcyBzdHJpbmcsXHJcbiAgICAgIGFjY0ZpbGVFeHRlbnNpb246IHNlbGVjdGVkRmlsZVZlcnNpb24udmFsdWUuZmlsZVR5cGUsXHJcbiAgICAgIGFjY0h1YklkOiBzZWxlY3RlZEh1YklkLnZhbHVlISxcclxuICAgICAgYWNjUHJvamVjdElkOiBzZWxlY3RlZFByb2plY3RJZC52YWx1ZSBhcyBzdHJpbmcsXHJcbiAgICAgIGFjY1Jvb3RQcm9qZWN0Rm9sZGVyVXJuOiByb290UHJvamVjdEZvbGRlcklkLnZhbHVlISxcclxuICAgICAgYWNjRmlsZUxpbmVhZ2VVcm46IHNlbGVjdGVkRmlsZUlkLnZhbHVlIGFzIHN0cmluZyxcclxuICAgICAgYWNjRmlsZU5hbWU6IHNlbGVjdGVkRmlsZVZlcnNpb24udmFsdWUubmFtZSxcclxuICAgICAgYWNjRmlsZVZlcnNpb25JbmRleDogZmlsZVZlcnNpb24sXHJcbiAgICAgIGFjY0ZpbGVWZXJzaW9uVXJuOiBzZWxlY3RlZEZpbGVWZXJzaW9uLnZhbHVlLmlkLFxyXG4gICAgICBhY2NGaWxlVmlld05hbWVcclxuICAgIH0pXHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIHRyaWdnZXJOb3RpZmljYXRpb24oe1xyXG4gICAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuRGFuZ2VyLFxyXG4gICAgICB0aXRsZTogJ0FkZCBzeW5jIGl0ZW0gZmFpbGVkJyxcclxuICAgICAgZGVzY3JpcHRpb246IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1VuZXhwZWN0ZWQgZXJyb3InXHJcbiAgICB9KVxyXG4gIH0gZmluYWxseSB7XHJcbiAgICBpc0NyZWF0aW5nU3luY0l0ZW0udmFsdWUgPSBmYWxzZVxyXG4gICAgcmV2aXRWaWV3TmFtZS52YWx1ZSA9IHVuZGVmaW5lZFxyXG4gIH1cclxufVxyXG5cclxud2F0Y2godG9rZW5zLCAobmV3VG9rZW5zKSA9PiB7XHJcbiAgaWYgKG5ld1Rva2Vucz8uYWNjZXNzX3Rva2VuKSB7XHJcbiAgICBmZXRjaEh1YnMobmV3VG9rZW5zPy5hY2Nlc3NfdG9rZW4pXHJcbiAgfVxyXG59KVxyXG5cclxub25Nb3VudGVkKGFzeW5jICgpID0+IHtcclxuICBhd2FpdCB0cnlHZXRUb2tlbnNGcm9tQ29va2llcygpXHJcbiAgaWYgKHRva2Vucy52YWx1ZSkge1xyXG4gICAgZmV0Y2hIdWJzKHRva2Vucy52YWx1ZS5hY2Nlc3NfdG9rZW4pXHJcbiAgfVxyXG59KVxyXG5cclxud2F0Y2goaXNPcGVuLCAobmV3VmFsKSA9PiB7XHJcbiAgaWYgKG5ld1ZhbCkge1xyXG4gICAgc2VsZWN0ZWRGaWxlVmVyc2lvbi52YWx1ZSA9IHVuZGVmaW5lZFxyXG4gIH1cclxufSlcclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL2ludGVncmF0aW9ucy9hY2MvZGlhbG9nL0NyZWF0ZVN5bmMudnVlIn0=