import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/singleton/FileUploadErrorDialog.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/error/Reference.vue"; import { FormButton as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { LayoutTable as __nuxt_component_2 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { LayoutDialog as __nuxt_component_3 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; /* Injection by vite-plugin-vue-inspector Start */ import { createElementVNode as __createElementVNode,createElementBlock as __createElementBlock,createBlock as __createBlock,createVNode as __createVNode } 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 _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) } function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) } function _createBlock(...args) { return _interopVNode(__createBlock(...args)) } function _createVNode(...args) { return _interopVNode(__createVNode(...args)) } /* Injection by vite-plugin-vue-inspector End */ import { defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { ArrowRightIcon } from "/_nuxt/node_modules/.cache/vite/client/deps/@heroicons_vue_24_outline.js?v=e4f18c29"; import { omit } from "/_nuxt/node_modules/.cache/vite/client/deps/lodash-es.js?v=e4f18c29"; import { useNavigateToProject } from "/_nuxt/lib/common/helpers/route.ts"; import { useGenerateErrorReference } from "/_nuxt/lib/core/composables/error.ts"; import { useGlobalFileImportManager, FailedFileImportJobError, useFailedFileImportJobUtils } from "/_nuxt/lib/core/composables/fileImport.ts"; import { useDateFormatters } from "/_nuxt/composables/dates.ts"; import { computed, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "SingletonFileUploadErrorDialog", setup(__props, { expose: __expose }) { __expose(); const { clearFailedJobs, failedJobs } = useGlobalFileImportManager(); const { getErrorMessage } = useFailedFileImportJobUtils(); const { copyReference } = useGenerateErrorReference(); const navigateToProject = useNavigateToProject(); const { formattedRelativeDate, formattedFullDate } = useDateFormatters(); const open = computed({ get: () => failedJobs.value.length > 0, set: (value) => { if (!value) { clearFailedJobs(); } } }); const title = computed( () => `File upload${failedJobs.value.length > 1 ? "s" : ""} failed` ); const buttons = computed(() => [ { text: "Dismiss", onClick: () => { open.value = false; } } ]); const shouldShowErrorReference = (job) => { return job.error.type === FailedFileImportJobError.UploadFailed || job.error.type === FailedFileImportJobError.ImportFailed; }; const copyErrorReference = async (job) => { await copyReference({ date: job.date, extraPayload: omit(job, ["file"]) }); }; const goToProject = async (job) => { void navigateToProject({ id: job.projectId }); open.value = false; }; watch(failedJobs, (newJobs) => { if (newJobs.length > 0) { open.value = true; } }); const __returned__ = { clearFailedJobs, failedJobs, getErrorMessage, copyReference, navigateToProject, formattedRelativeDate, formattedFullDate, open, title, buttons, shouldShowErrorReference, copyErrorReference, goToProject, get ArrowRightIcon() { return ArrowRightIcon; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveDirective as _resolveDirective, openBlock as _openBlock, withDirectives as _withDirectives, resolveComponent as _resolveComponent, createCommentVNode as _createCommentVNode, withCtx as _withCtx } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { class: "text-foreground-2 my-2", "data-v-inspector": "components/singleton/FileUploadErrorDialog.vue:3:5" }; const _hoisted_2 = { class: "truncate text-foreground", "data-v-inspector": "components/singleton/FileUploadErrorDialog.vue:25:9" }; const _hoisted_3 = { class: "text-foreground", "data-v-inspector": "components/singleton/FileUploadErrorDialog.vue:37:9" }; const _hoisted_4 = { class: "text-foreground-2", "data-v-inspector": "components/singleton/FileUploadErrorDialog.vue:46:9" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_ErrorReference = __nuxt_component_0; const _component_FormButton = __nuxt_component_1; const _component_LayoutTable = __nuxt_component_2; const _component_LayoutDialog = __nuxt_component_3; const _directive_tippy = _resolveDirective("tippy"); return _openBlock(), _createBlock(_component_LayoutDialog, { open: $setup.open, "onUpdate:open": _cache[0] || (_cache[0] = ($event) => $setup.open = $event), title: $setup.title, buttons: $setup.buttons, "data-v-inspector": "components/singleton/FileUploadErrorDialog.vue:2:3" }, { default: _withCtx(() => [ _createElementVNode( "p", _hoisted_1, " The following file upload" + _toDisplayString($setup.failedJobs.length > 1 ? "s" : "") + " failed. You can retry " + _toDisplayString($setup.failedJobs.length > 1 ? "them" : "it") + " by re-uploading the file" + _toDisplayString($setup.failedJobs.length > 1 ? "s" : "") + ". ", 1 /* TEXT */ ), _createVNode(_component_LayoutTable, { items: $setup.failedJobs, columns: [ { id: "file", header: "File", classes: "col-span-4" }, { id: "error", header: "Error", classes: "col-span-5" }, { id: "date", header: "Date", classes: "col-span-2" }, { id: "actions", header: "", classes: "col-span-1 flex items-center justify-end" } ], class: "text-foreground", style: { "max-height": "300px" }, "data-v-inspector": "components/singleton/FileUploadErrorDialog.vue:9:5" }, { file: _withCtx(({ item }) => [ _withDirectives((_openBlock(), _createElementBlock("div", _hoisted_2, [ _createTextVNode( _toDisplayString(item.fileName), 1 /* TEXT */ ) ])), [ [_directive_tippy, { content: item.fileName.length > 35 ? item.fileName : void 0, placement: "top-start", delay: 300 }] ]) ]), error: _withCtx(({ item }) => [ _createElementVNode( "span", _hoisted_3, _toDisplayString($setup.getErrorMessage(item) + " "), 1 /* TEXT */ ), $setup.shouldShowErrorReference(item) ? (_openBlock(), _createBlock(_component_ErrorReference, { key: 0, class: "text-left inline", size: "text-body-xs", onClick: ($event) => $setup.copyErrorReference(item), "data-v-inspector": "components/singleton/FileUploadErrorDialog.vue:38:9" }, null, 8, ["onClick"])) : _createCommentVNode("v-if", true) ]), date: _withCtx(({ item }) => [ _withDirectives((_openBlock(), _createElementBlock("span", _hoisted_4, [ _createTextVNode( _toDisplayString($setup.formattedRelativeDate(item.date)), 1 /* TEXT */ ) ])), [ [_directive_tippy, $setup.formattedFullDate(item.date)] ]) ]), actions: _withCtx(({ item }) => [ _withDirectives(_createVNode(_component_FormButton, { "icon-left": $setup.ArrowRightIcon, "hide-text": "", size: "sm", color: "outline", onClick: ($event) => $setup.goToProject(item), "data-v-inspector": "components/singleton/FileUploadErrorDialog.vue:51:9" }, null, 8, ["icon-left", "onClick"]), [ [_directive_tippy, "Go to project"] ]) ]), _: 1 /* STABLE */ }, 8, ["items"]) ]), _: 1 /* STABLE */ }, 8, ["open", "title", "buttons"]); } _sfc_main.__hmrId = "d656fa62"; 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/singleton/FileUploadErrorDialog.vue"]]); //# sourceMappingURL=data:application/json;base64,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QSxZQUE3STtBQUFBLFlBQTZJLGlCQUFyQyx1QkFBZ0IsSUFBSTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBRXBILGdDQUF5QixJQUFJLG1CQURyQyxhQUtFO0FBQUE7WUFIQSxPQUFNO0FBQUEsWUFDTixNQUFLO0FBQUEsWUFDSixTQUFLLFlBQUUsMEJBQW1CLElBQUk7QUFBQSxZQUFHLG9CQUFpQjtBQUFBOztRQUc1QyxNQUFJLFNBQ2IsQ0FFTyxFQUhVLEtBQUk7QUFBQSx5Q0FDckIsb0JBRU8sUUFGUCxZQUVPO0FBQUE7K0JBREYsNkJBQXNCLEtBQUssSUFBSTtBQUFBO0FBQUE7QUFBQTtBQUFBOytCQURyQix5QkFBa0IsS0FBSyxJQUFJO0FBQUE7O1FBSWpDLFNBQU8sU0FDaEIsQ0FPRSxFQVJrQixLQUFJO0FBQUEsMEJBQ3hCLGFBT0U7QUFBQSxZQUxDLGFBQVc7QUFBQSxZQUNaO0FBQUEsWUFDQSxNQUFLO0FBQUEsWUFDTCxPQUFNO0FBQUEsWUFDTCxTQUFLLFlBQUUsbUJBQVksSUFBSTtBQUFBLFlBQUcsb0JBQWlCO0FBQUE7K0JBTG5DLGVBQWU7QUFBQSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiRmlsZVVwbG9hZEVycm9yRGlhbG9nLnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XHJcbiAgPExheW91dERpYWxvZyB2LW1vZGVsOm9wZW49XCJvcGVuXCIgOnRpdGxlPVwidGl0bGVcIiA6YnV0dG9ucz1cImJ1dHRvbnNcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9zaW5nbGV0b24vRmlsZVVwbG9hZEVycm9yRGlhbG9nLnZ1ZToyOjNcIj5cclxuICAgIDxwIGNsYXNzPVwidGV4dC1mb3JlZ3JvdW5kLTIgbXktMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3NpbmdsZXRvbi9GaWxlVXBsb2FkRXJyb3JEaWFsb2cudnVlOjM6NVwiPlxyXG4gICAgICBUaGUgZm9sbG93aW5nIGZpbGUgdXBsb2Fke3sgZmFpbGVkSm9icy5sZW5ndGggPiAxID8gJ3MnIDogJycgfX0gZmFpbGVkLiBZb3UgY2FuXHJcbiAgICAgIHJldHJ5IHt7IGZhaWxlZEpvYnMubGVuZ3RoID4gMSA/ICd0aGVtJyA6ICdpdCcgfX0gYnkgcmUtdXBsb2FkaW5nIHRoZSBmaWxle3tcclxuICAgICAgICBmYWlsZWRKb2JzLmxlbmd0aCA+IDEgPyAncycgOiAnJ1xyXG4gICAgICB9fS5cclxuICAgIDwvcD5cclxuICAgIDxMYXlvdXRUYWJsZVxyXG4gICAgICA6aXRlbXM9XCJmYWlsZWRKb2JzXCJcclxuICAgICAgOmNvbHVtbnM9XCJbXHJcbiAgICAgICAgeyBpZDogJ2ZpbGUnLCBoZWFkZXI6ICdGaWxlJywgY2xhc3NlczogJ2NvbC1zcGFuLTQnIH0sXHJcbiAgICAgICAgeyBpZDogJ2Vycm9yJywgaGVhZGVyOiAnRXJyb3InLCBjbGFzc2VzOiAnY29sLXNwYW4tNScgfSxcclxuICAgICAgICB7IGlkOiAnZGF0ZScsIGhlYWRlcjogJ0RhdGUnLCBjbGFzc2VzOiAnY29sLXNwYW4tMicgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogJ2FjdGlvbnMnLFxyXG4gICAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICAgIGNsYXNzZXM6ICdjb2wtc3Bhbi0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kJ1xyXG4gICAgICAgIH1cclxuICAgICAgXVwiXHJcbiAgICAgIGNsYXNzPVwidGV4dC1mb3JlZ3JvdW5kXCJcclxuICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzMDBweFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3NpbmdsZXRvbi9GaWxlVXBsb2FkRXJyb3JEaWFsb2cudnVlOjk6NVwiXHJcbiAgICA+XHJcbiAgICAgIDx0ZW1wbGF0ZSAjZmlsZT1cInsgaXRlbSB9XCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgdi10aXBweT1cIntcclxuICAgICAgICAgICAgY29udGVudDogaXRlbS5maWxlTmFtZS5sZW5ndGggPiAzNSA/IGl0ZW0uZmlsZU5hbWUgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHBsYWNlbWVudDogJ3RvcC1zdGFydCcsXHJcbiAgICAgICAgICAgIGRlbGF5OiAzMDBcclxuICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgY2xhc3M9XCJ0cnVuY2F0ZSB0ZXh0LWZvcmVncm91bmRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9zaW5nbGV0b24vRmlsZVVwbG9hZEVycm9yRGlhbG9nLnZ1ZToyNTo5XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBpdGVtLmZpbGVOYW1lIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgIDx0ZW1wbGF0ZSAjZXJyb3I9XCJ7IGl0ZW0gfVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1mb3JlZ3JvdW5kXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvc2luZ2xldG9uL0ZpbGVVcGxvYWRFcnJvckRpYWxvZy52dWU6Mzc6OVwiPnt7IGdldEVycm9yTWVzc2FnZShpdGVtKSArICcgJyB9fTwvc3Bhbj5cclxuICAgICAgICA8RXJyb3JSZWZlcmVuY2VcclxuICAgICAgICAgIHYtaWY9XCJzaG91bGRTaG93RXJyb3JSZWZlcmVuY2UoaXRlbSlcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LWxlZnQgaW5saW5lXCJcclxuICAgICAgICAgIHNpemU9XCJ0ZXh0LWJvZHkteHNcIlxyXG4gICAgICAgICAgQGNsaWNrPVwiY29weUVycm9yUmVmZXJlbmNlKGl0ZW0pXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvc2luZ2xldG9uL0ZpbGVVcGxvYWRFcnJvckRpYWxvZy52dWU6Mzg6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgPHRlbXBsYXRlICNkYXRlPVwieyBpdGVtIH1cIj5cclxuICAgICAgICA8c3BhbiB2LXRpcHB5PVwiZm9ybWF0dGVkRnVsbERhdGUoaXRlbS5kYXRlKVwiIGNsYXNzPVwidGV4dC1mb3JlZ3JvdW5kLTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9zaW5nbGV0b24vRmlsZVVwbG9hZEVycm9yRGlhbG9nLnZ1ZTo0Njo5XCI+XHJcbiAgICAgICAgICB7eyBmb3JtYXR0ZWRSZWxhdGl2ZURhdGUoaXRlbS5kYXRlKSB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgPHRlbXBsYXRlICNhY3Rpb25zPVwieyBpdGVtIH1cIj5cclxuICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgdi10aXBweT1cIidHbyB0byBwcm9qZWN0J1wiXHJcbiAgICAgICAgICA6aWNvbi1sZWZ0PVwiQXJyb3dSaWdodEljb25cIlxyXG4gICAgICAgICAgaGlkZS10ZXh0XHJcbiAgICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgICAgY29sb3I9XCJvdXRsaW5lXCJcclxuICAgICAgICAgIEBjbGljaz1cImdvVG9Qcm9qZWN0KGl0ZW0pXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvc2luZ2xldG9uL0ZpbGVVcGxvYWRFcnJvckRpYWxvZy52dWU6NTE6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC90ZW1wbGF0ZT5cclxuICAgIDwvTGF5b3V0VGFibGU+XHJcbiAgPC9MYXlvdXREaWFsb2c+XHJcbjwvdGVtcGxhdGU+XHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IEFycm93UmlnaHRJY29uIH0gZnJvbSAnQGhlcm9pY29ucy92dWUvMjQvb3V0bGluZSdcclxuaW1wb3J0IHR5cGUgeyBMYXlvdXREaWFsb2dCdXR0b24gfSBmcm9tICdAc3BlY2tsZS91aS1jb21wb25lbnRzJ1xyXG5pbXBvcnQgeyBvbWl0IH0gZnJvbSAnbG9kYXNoLWVzJ1xyXG5pbXBvcnQgeyB1c2VOYXZpZ2F0ZVRvUHJvamVjdCB9IGZyb20gJ34vbGliL2NvbW1vbi9oZWxwZXJzL3JvdXRlJ1xyXG5pbXBvcnQgeyB1c2VHZW5lcmF0ZUVycm9yUmVmZXJlbmNlIH0gZnJvbSAnfi9saWIvY29yZS9jb21wb3NhYmxlcy9lcnJvcidcclxuaW1wb3J0IHtcclxuICB1c2VHbG9iYWxGaWxlSW1wb3J0TWFuYWdlcixcclxuICB0eXBlIEZhaWxlZEZpbGVJbXBvcnRKb2IsXHJcbiAgRmFpbGVkRmlsZUltcG9ydEpvYkVycm9yLFxyXG4gIHVzZUZhaWxlZEZpbGVJbXBvcnRKb2JVdGlsc1xyXG59IGZyb20gJ34vbGliL2NvcmUvY29tcG9zYWJsZXMvZmlsZUltcG9ydCdcclxuXHJcbmNvbnN0IHsgY2xlYXJGYWlsZWRKb2JzLCBmYWlsZWRKb2JzIH0gPSB1c2VHbG9iYWxGaWxlSW1wb3J0TWFuYWdlcigpXHJcbmNvbnN0IHsgZ2V0RXJyb3JNZXNzYWdlIH0gPSB1c2VGYWlsZWRGaWxlSW1wb3J0Sm9iVXRpbHMoKVxyXG5cclxuY29uc3QgeyBjb3B5UmVmZXJlbmNlIH0gPSB1c2VHZW5lcmF0ZUVycm9yUmVmZXJlbmNlKClcclxuY29uc3QgbmF2aWdhdGVUb1Byb2plY3QgPSB1c2VOYXZpZ2F0ZVRvUHJvamVjdCgpXHJcbmNvbnN0IHsgZm9ybWF0dGVkUmVsYXRpdmVEYXRlLCBmb3JtYXR0ZWRGdWxsRGF0ZSB9ID0gdXNlRGF0ZUZvcm1hdHRlcnMoKVxyXG5cclxuY29uc3Qgb3BlbiA9IGNvbXB1dGVkKHtcclxuICBnZXQ6ICgpID0+IGZhaWxlZEpvYnMudmFsdWUubGVuZ3RoID4gMCxcclxuICBzZXQ6ICh2YWx1ZSkgPT4ge1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICBjbGVhckZhaWxlZEpvYnMoKVxyXG4gICAgfVxyXG4gIH1cclxufSlcclxuY29uc3QgdGl0bGUgPSBjb21wdXRlZChcclxuICAoKSA9PiBgRmlsZSB1cGxvYWQke2ZhaWxlZEpvYnMudmFsdWUubGVuZ3RoID4gMSA/ICdzJyA6ICcnfSBmYWlsZWRgXHJcbilcclxuXHJcbmNvbnN0IGJ1dHRvbnMgPSBjb21wdXRlZCgoKTogTGF5b3V0RGlhbG9nQnV0dG9uW10gPT4gW1xyXG4gIHtcclxuICAgIHRleHQ6ICdEaXNtaXNzJyxcclxuICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgb3Blbi52YWx1ZSA9IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5dKVxyXG5cclxuY29uc3Qgc2hvdWxkU2hvd0Vycm9yUmVmZXJlbmNlID0gKGpvYjogRmFpbGVkRmlsZUltcG9ydEpvYikgPT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICBqb2IuZXJyb3IudHlwZSA9PT0gRmFpbGVkRmlsZUltcG9ydEpvYkVycm9yLlVwbG9hZEZhaWxlZCB8fFxyXG4gICAgam9iLmVycm9yLnR5cGUgPT09IEZhaWxlZEZpbGVJbXBvcnRKb2JFcnJvci5JbXBvcnRGYWlsZWRcclxuICApXHJcbn1cclxuXHJcbmNvbnN0IGNvcHlFcnJvclJlZmVyZW5jZSA9IGFzeW5jIChqb2I6IEZhaWxlZEZpbGVJbXBvcnRKb2IpID0+IHtcclxuICBhd2FpdCBjb3B5UmVmZXJlbmNlKHsgZGF0ZTogam9iLmRhdGUsIGV4dHJhUGF5bG9hZDogb21pdChqb2IsIFsnZmlsZSddKSB9KVxyXG59XHJcblxyXG5jb25zdCBnb1RvUHJvamVjdCA9IGFzeW5jIChqb2I6IEZhaWxlZEZpbGVJbXBvcnRKb2IpID0+IHtcclxuICB2b2lkIG5hdmlnYXRlVG9Qcm9qZWN0KHsgaWQ6IGpvYi5wcm9qZWN0SWQgfSlcclxuICBvcGVuLnZhbHVlID0gZmFsc2VcclxufVxyXG5cclxud2F0Y2goZmFpbGVkSm9icywgKG5ld0pvYnMpID0+IHtcclxuICBpZiAobmV3Sm9icy5sZW5ndGggPiAwKSB7XHJcbiAgICBvcGVuLnZhbHVlID0gdHJ1ZVxyXG4gIH1cclxufSlcclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL3NpbmdsZXRvbi9GaWxlVXBsb2FkRXJyb3JEaWFsb2cudnVlIn0=