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

186 lines
18 KiB
Plaintext

import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/anchored-point/thread/NewReply.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/viewer/comments/Editor.vue";
import { FormButton as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { FormFileUploadZone as __nuxt_component_2 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
/* Injection by vite-plugin-vue-inspector Start */
import { createVNode as __createVNode,createElementVNode as __createElementVNode,createElementBlock as __createElementBlock } 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 _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...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 { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts";
import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts";
import { useIsTypingUpdateEmitter } from "/_nuxt/lib/viewer/composables/commentBubbles.ts";
import { useSubmitReply } from "/_nuxt/lib/viewer/composables/commentManagement.ts";
import {
convertCommentEditorValueToInput,
isValidCommentContentInput
} from "/_nuxt/lib/viewer/helpers/comments.ts";
import { useServerFileUploadLimit } from "/_nuxt/lib/common/composables/serverInfo.ts";
import { UniqueFileTypeSpecifier } from "/_nuxt/lib/core/helpers/file.ts";
import { acceptedFileExtensions } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/blobs/index.js";
import { Paperclip, SendHorizonal } from "/_nuxt/node_modules/.cache/vite/client/deps/lucide-vue-next.js?v=e4f18c29";
import { ref, computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _sfc_main = /* @__PURE__ */ _defineComponent({
__name: "ViewerAnchoredPointThreadNewReply",
props: {
modelValue: { type: Object, required: true }
},
emits: ["submit"],
setup(__props, { expose: __expose, emit: __emit }) {
__expose();
const props = __props;
const emit = __emit;
const createReply = useSubmitReply();
const { onKeyDownHandler, updateIsTyping } = useIsTypingUpdateEmitter();
const { projectId } = useInjectedViewerState();
const { maxSizeInBytes } = useServerFileUploadLimit();
const loading = ref(false);
const editor = ref(
null
);
const uploadZone = ref(null);
const commentValue = ref({ doc: void 0, attachments: void 0 });
const threadId = computed(() => props.modelValue.id);
const acceptValue = [
UniqueFileTypeSpecifier.AnyImage,
UniqueFileTypeSpecifier.AnyVideo,
...acceptedFileExtensions.map((fileExtension) => `.${fileExtension}`)
].join(",");
const onFilesSelected = (payload) => {
editor.value?.onFilesSelected(payload);
};
const mp = useMixpanel();
const trackAttachAndOpenFilePicker = () => {
uploadZone.value?.triggerPicker();
mp.track("Comment Action", { type: "action", name: "attach" });
};
const onSubmit = async () => {
if (!commentValue.value || loading.value) return;
const content = convertCommentEditorValueToInput(commentValue.value);
if (!isValidCommentContentInput(content)) return;
loading.value = true;
try {
await createReply({
content,
threadId: threadId.value,
projectId: projectId.value
});
updateIsTyping(false);
commentValue.value.attachments?.forEach((a) => {
a.inUse = true;
});
commentValue.value = {
doc: void 0,
attachments: void 0
};
emit("submit");
} finally {
loading.value = false;
}
};
const __returned__ = { props, emit, createReply, onKeyDownHandler, updateIsTyping, projectId, maxSizeInBytes, loading, editor, uploadZone, commentValue, threadId, acceptValue, onFilesSelected, mp, trackAttachAndOpenFilePicker, onSubmit, get Paperclip() {
return Paperclip;
}, get SendHorizonal() {
return SendHorizonal;
} };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
import { resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, openBlock as _openBlock, } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _hoisted_1 = {
class: "w-full relative flex flex-col p-2 pt-1",
"data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:3:3"
};
const _hoisted_2 = {
class: "flex justify-between items-center p-1",
"data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:26:9"
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_ViewerCommentsEditor = __nuxt_component_0;
const _component_FormButton = __nuxt_component_1;
const _component_FormFileUploadZone = __nuxt_component_2;
return _openBlock(), _createElementBlock("div", _hoisted_1, [
_createVNode(_component_FormFileUploadZone, {
ref: "uploadZone",
"size-limit": $setup.maxSizeInBytes,
accept: $setup.acceptValue,
disabled: $setup.loading,
multiple: "",
onFilesSelected: $setup.onFilesSelected,
"data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:4:5"
}, {
default: _withCtx(({ isDraggingFiles }) => [
_createElementVNode(
"div",
{
class: _normalizeClass(["border border-outline-2 rounded-lg dark:bg-foundation-2", [isDraggingFiles && "border-dashed border-primary"]]),
"data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:13:7"
},
[
_createVNode(_component_ViewerCommentsEditor, {
ref: "editor",
modelValue: $setup.commentValue,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.commentValue = $event),
prompt: "Add reply",
autofocus: "",
"disable-drop-zone": "",
onKeydown: $setup.onKeyDownHandler,
onSubmit: $setup.onSubmit,
"data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:17:9"
}, null, 8, ["modelValue", "onKeydown"]),
_createElementVNode("div", _hoisted_2, [
_createVNode(_component_FormButton, {
"icon-left": $setup.Paperclip,
disabled: $setup.loading,
color: "subtle",
"hide-text": "",
onClick: _cache[1] || (_cache[1] = ($event) => $setup.trackAttachAndOpenFilePicker()),
"data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:27:11"
}, null, 8, ["icon-left", "disabled"]),
_createVNode(_component_FormButton, {
"icon-left": $setup.SendHorizonal,
"hide-text": "",
disabled: $setup.loading,
onClick: $setup.onSubmit,
"data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:34:11"
}, null, 8, ["icon-left", "disabled"])
])
],
2
/* CLASS */
)
]),
_: 1
/* STABLE */
}, 8, ["size-limit", "accept", "disabled"])
]);
}
_sfc_main.__hmrId = "2d79023b";
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/viewer/anchored-point/thread/NewReply.vue"]]);
//# sourceMappingURL=data:application/json;base64,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QUNULFVBQVE7QUFBQSxjQUFVLG9CQUFpQjtBQUFBO1lBRXRDLG9CQWNNLE9BZE4sWUFjTTtBQUFBLGNBYkosYUFNRTtBQUFBLGdCQUxDLGFBQVc7QUFBQSxnQkFDWCxVQUFVO0FBQUEsZ0JBQ1gsT0FBTTtBQUFBLGdCQUNOO0FBQUEsZ0JBQ0MsU0FBSyxzQ0FBRSxvQ0FBNEI7QUFBQSxnQkFBSSxvQkFBaUI7QUFBQTtjQUUzRCxhQUtFO0FBQUEsZ0JBSkMsYUFBVztBQUFBLGdCQUNaO0FBQUEsZ0JBQ0MsVUFBVTtBQUFBLGdCQUNWLFNBQU87QUFBQSxnQkFBVSxvQkFBaUI7QUFBQSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiTmV3UmVwbHkudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlanMtYWNjZXNzaWJpbGl0eS9uby1hdXRvZm9jdXMgLS0+XHJcbjx0ZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwidy1mdWxsIHJlbGF0aXZlIGZsZXggZmxleC1jb2wgcC0yIHB0LTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvYW5jaG9yZWQtcG9pbnQvdGhyZWFkL05ld1JlcGx5LnZ1ZTozOjNcIj5cclxuICAgIDxGb3JtRmlsZVVwbG9hZFpvbmVcclxuICAgICAgcmVmPVwidXBsb2FkWm9uZVwiXHJcbiAgICAgIHYtc2xvdD1cInsgaXNEcmFnZ2luZ0ZpbGVzIH1cIlxyXG4gICAgICA6c2l6ZS1saW1pdD1cIm1heFNpemVJbkJ5dGVzXCJcclxuICAgICAgOmFjY2VwdD1cImFjY2VwdFZhbHVlXCJcclxuICAgICAgOmRpc2FibGVkPVwibG9hZGluZ1wiXHJcbiAgICAgIG11bHRpcGxlXHJcbiAgICAgIEBmaWxlcy1zZWxlY3RlZD1cIm9uRmlsZXNTZWxlY3RlZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9hbmNob3JlZC1wb2ludC90aHJlYWQvTmV3UmVwbHkudnVlOjQ6NVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImJvcmRlciBib3JkZXItb3V0bGluZS0yIHJvdW5kZWQtbGcgZGFyazpiZy1mb3VuZGF0aW9uLTJcIlxyXG4gICAgICAgIDpjbGFzcz1cIltpc0RyYWdnaW5nRmlsZXMgJiYgJ2JvcmRlci1kYXNoZWQgYm9yZGVyLXByaW1hcnknXVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9hbmNob3JlZC1wb2ludC90aHJlYWQvTmV3UmVwbHkudnVlOjEzOjdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPFZpZXdlckNvbW1lbnRzRWRpdG9yXHJcbiAgICAgICAgICByZWY9XCJlZGl0b3JcIlxyXG4gICAgICAgICAgdi1tb2RlbD1cImNvbW1lbnRWYWx1ZVwiXHJcbiAgICAgICAgICBwcm9tcHQ9XCJBZGQgcmVwbHlcIlxyXG4gICAgICAgICAgYXV0b2ZvY3VzXHJcbiAgICAgICAgICBkaXNhYmxlLWRyb3Atem9uZVxyXG4gICAgICAgICAgQGtleWRvd249XCJvbktleURvd25IYW5kbGVyXCJcclxuICAgICAgICAgIEBzdWJtaXQ9XCJvblN1Ym1pdFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9hbmNob3JlZC1wb2ludC90aHJlYWQvTmV3UmVwbHkudnVlOjE3OjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBwLTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvYW5jaG9yZWQtcG9pbnQvdGhyZWFkL05ld1JlcGx5LnZ1ZToyNjo5XCI+XHJcbiAgICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgICA6aWNvbi1sZWZ0PVwiUGFwZXJjbGlwXCJcclxuICAgICAgICAgICAgOmRpc2FibGVkPVwibG9hZGluZ1wiXHJcbiAgICAgICAgICAgIGNvbG9yPVwic3VidGxlXCJcclxuICAgICAgICAgICAgaGlkZS10ZXh0XHJcbiAgICAgICAgICAgIEBjbGljaz1cInRyYWNrQXR0YWNoQW5kT3BlbkZpbGVQaWNrZXIoKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9hbmNob3JlZC1wb2ludC90aHJlYWQvTmV3UmVwbHkudnVlOjI3OjExXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgICA6aWNvbi1sZWZ0PVwiU2VuZEhvcml6b25hbFwiXHJcbiAgICAgICAgICAgIGhpZGUtdGV4dFxyXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJsb2FkaW5nXCJcclxuICAgICAgICAgICAgQGNsaWNrPVwib25TdWJtaXRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvYW5jaG9yZWQtcG9pbnQvdGhyZWFkL05ld1JlcGx5LnZ1ZTozNDoxMVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvRm9ybUZpbGVVcGxvYWRab25lPlxyXG4gIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgdHlwZSB7IE51bGxhYmxlIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgeyB1c2VJbmplY3RlZFZpZXdlclN0YXRlIH0gZnJvbSAnfi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3NldHVwJ1xyXG5pbXBvcnQgeyB1c2VNaXhwYW5lbCB9IGZyb20gJ35+L2xpYi9jb3JlL2NvbXBvc2FibGVzL21wJ1xyXG5pbXBvcnQgeyB1c2VJc1R5cGluZ1VwZGF0ZUVtaXR0ZXIgfSBmcm9tICd+fi9saWIvdmlld2VyL2NvbXBvc2FibGVzL2NvbW1lbnRCdWJibGVzJ1xyXG5pbXBvcnQgdHlwZSB7IENvbW1lbnRCdWJibGVNb2RlbCB9IGZyb20gJ35+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvY29tbWVudEJ1YmJsZXMnXHJcbmltcG9ydCB7IHVzZVN1Ym1pdFJlcGx5IH0gZnJvbSAnfn4vbGliL3ZpZXdlci9jb21wb3NhYmxlcy9jb21tZW50TWFuYWdlbWVudCdcclxuaW1wb3J0IHR5cGUgeyBDb21tZW50RWRpdG9yVmFsdWUgfSBmcm9tICd+fi9saWIvdmlld2VyL2NvbXBvc2FibGVzL2NvbW1lbnRNYW5hZ2VtZW50J1xyXG5pbXBvcnQge1xyXG4gIGNvbnZlcnRDb21tZW50RWRpdG9yVmFsdWVUb0lucHV0LFxyXG4gIGlzVmFsaWRDb21tZW50Q29udGVudElucHV0XHJcbn0gZnJvbSAnfn4vbGliL3ZpZXdlci9oZWxwZXJzL2NvbW1lbnRzJ1xyXG5pbXBvcnQgeyB1c2VTZXJ2ZXJGaWxlVXBsb2FkTGltaXQgfSBmcm9tICd+fi9saWIvY29tbW9uL2NvbXBvc2FibGVzL3NlcnZlckluZm8nXHJcbmltcG9ydCB7IFVuaXF1ZUZpbGVUeXBlU3BlY2lmaWVyIH0gZnJvbSAnfn4vbGliL2NvcmUvaGVscGVycy9maWxlJ1xyXG5pbXBvcnQgeyBhY2NlcHRlZEZpbGVFeHRlbnNpb25zIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkL2Jsb2JzJ1xyXG5pbXBvcnQgdHlwZSB7IFVwbG9hZGFibGVGaWxlSXRlbSB9IGZyb20gJ0BzcGVja2xlL3VpLWNvbXBvbmVudHMnXHJcbmltcG9ydCB7IFBhcGVyY2xpcCwgU2VuZEhvcml6b25hbCB9IGZyb20gJ2x1Y2lkZS12dWUtbmV4dCdcclxuXHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8e1xyXG4gIG1vZGVsVmFsdWU6IENvbW1lbnRCdWJibGVNb2RlbFxyXG59PigpXHJcblxyXG5jb25zdCBlbWl0ID0gZGVmaW5lRW1pdHM8e1xyXG4gIChlOiAnc3VibWl0Jyk6IHZvaWRcclxufT4oKVxyXG5cclxuY29uc3QgY3JlYXRlUmVwbHkgPSB1c2VTdWJtaXRSZXBseSgpXHJcbmNvbnN0IHsgb25LZXlEb3duSGFuZGxlciwgdXBkYXRlSXNUeXBpbmcgfSA9IHVzZUlzVHlwaW5nVXBkYXRlRW1pdHRlcigpXHJcbmNvbnN0IHsgcHJvamVjdElkIH0gPSB1c2VJbmplY3RlZFZpZXdlclN0YXRlKClcclxuY29uc3QgeyBtYXhTaXplSW5CeXRlcyB9ID0gdXNlU2VydmVyRmlsZVVwbG9hZExpbWl0KClcclxuXHJcbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpXHJcbmNvbnN0IGVkaXRvciA9IHJlZihcclxuICBudWxsIGFzIE51bGxhYmxlPHtcclxuICAgIG9wZW5GaWxlUGlja2VyOiAoKSA9PiB2b2lkXHJcbiAgICBvbkZpbGVzU2VsZWN0ZWQ6IChwYXlsb2FkOiB7IGZpbGVzOiBVcGxvYWRhYmxlRmlsZUl0ZW1bXSB9KSA9PiB2b2lkXHJcbiAgfT5cclxuKVxyXG5jb25zdCB1cGxvYWRab25lID0gcmVmKG51bGwgYXMgTnVsbGFibGU8eyB0cmlnZ2VyUGlja2VyOiAoKSA9PiB2b2lkIH0+KVxyXG5jb25zdCBjb21tZW50VmFsdWUgPSByZWY8Q29tbWVudEVkaXRvclZhbHVlPih7IGRvYzogdW5kZWZpbmVkLCBhdHRhY2htZW50czogdW5kZWZpbmVkIH0pXHJcbmNvbnN0IHRocmVhZElkID0gY29tcHV0ZWQoKCkgPT4gcHJvcHMubW9kZWxWYWx1ZS5pZClcclxuXHJcbmNvbnN0IGFjY2VwdFZhbHVlID0gW1xyXG4gIFVuaXF1ZUZpbGVUeXBlU3BlY2lmaWVyLkFueUltYWdlLFxyXG4gIFVuaXF1ZUZpbGVUeXBlU3BlY2lmaWVyLkFueVZpZGVvLFxyXG4gIC4uLmFjY2VwdGVkRmlsZUV4dGVuc2lvbnMubWFwKChmaWxlRXh0ZW5zaW9uKSA9PiBgLiR7ZmlsZUV4dGVuc2lvbn1gKVxyXG5dLmpvaW4oJywnKVxyXG5cclxuY29uc3Qgb25GaWxlc1NlbGVjdGVkID0gKHBheWxvYWQ6IHsgZmlsZXM6IFVwbG9hZGFibGVGaWxlSXRlbVtdIH0pID0+IHtcclxuICBlZGl0b3IudmFsdWU/Lm9uRmlsZXNTZWxlY3RlZChwYXlsb2FkKVxyXG59XHJcblxyXG5jb25zdCBtcCA9IHVzZU1peHBhbmVsKClcclxuY29uc3QgdHJhY2tBdHRhY2hBbmRPcGVuRmlsZVBpY2tlciA9ICgpID0+IHtcclxuICB1cGxvYWRab25lLnZhbHVlPy50cmlnZ2VyUGlja2VyKClcclxuICBtcC50cmFjaygnQ29tbWVudCBBY3Rpb24nLCB7IHR5cGU6ICdhY3Rpb24nLCBuYW1lOiAnYXR0YWNoJyB9KVxyXG59XHJcblxyXG5jb25zdCBvblN1Ym1pdCA9IGFzeW5jICgpID0+IHtcclxuICBpZiAoIWNvbW1lbnRWYWx1ZS52YWx1ZSB8fCBsb2FkaW5nLnZhbHVlKSByZXR1cm5cclxuXHJcbiAgY29uc3QgY29udGVudCA9IGNvbnZlcnRDb21tZW50RWRpdG9yVmFsdWVUb0lucHV0KGNvbW1lbnRWYWx1ZS52YWx1ZSlcclxuICBpZiAoIWlzVmFsaWRDb21tZW50Q29udGVudElucHV0KGNvbnRlbnQpKSByZXR1cm5cclxuXHJcbiAgbG9hZGluZy52YWx1ZSA9IHRydWVcclxuICB0cnkge1xyXG4gICAgYXdhaXQgY3JlYXRlUmVwbHkoe1xyXG4gICAgICBjb250ZW50LFxyXG4gICAgICB0aHJlYWRJZDogdGhyZWFkSWQudmFsdWUsXHJcbiAgICAgIHByb2plY3RJZDogcHJvamVjdElkLnZhbHVlXHJcbiAgICB9KVxyXG4gICAgdXBkYXRlSXNUeXBpbmcoZmFsc2UpXHJcblxyXG4gICAgLy8gTWFyayBhbGwgYXR0YWNobWVudHMgYXMgaW4gdXNlIHRvIHByZXZlbnQgY2xlYW51cFxyXG4gICAgY29tbWVudFZhbHVlLnZhbHVlLmF0dGFjaG1lbnRzPy5mb3JFYWNoKChhKSA9PiB7XHJcbiAgICAgIGEuaW5Vc2UgPSB0cnVlXHJcbiAgICB9KVxyXG5cclxuICAgIGNvbW1lbnRWYWx1ZS52YWx1ZSA9IHtcclxuICAgICAgZG9jOiB1bmRlZmluZWQsXHJcbiAgICAgIGF0dGFjaG1lbnRzOiB1bmRlZmluZWRcclxuICAgIH1cclxuICAgIGVtaXQoJ3N1Ym1pdCcpXHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxyXG4gIH1cclxufVxyXG48L3NjcmlwdD5cclxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL2NvbXBvbmVudHMvdmlld2VyL2FuY2hvcmVkLXBvaW50L3RocmVhZC9OZXdSZXBseS52dWUifQ==