import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/project/page/models/CardView.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/project/models/BasicCardView.vue"; import { default as __nuxt_component_1 } from "/_nuxt/components/form/ButtonSecondaryViewAll.vue"; import { default as __nuxt_component_2 } from "/_nuxt/components/common/EmptySearchState.vue"; import { default as __nuxt_component_3 } from "/_nuxt/components/project/CardImportFileArea.vue"; import { InfiniteLoading 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,createElementBlock as __createElementBlock,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 _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) } function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...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 { useQuery, useQueryLoading } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29"; import { latestModelsPaginationQuery, latestModelsQuery } from "/_nuxt/lib/projects/graphql/queries.ts"; import { allProjectModelsRoute } from "/_nuxt/lib/common/helpers/route.ts"; import { useLogger } from "/_nuxt/composables/logging.ts"; import { computed, ref, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "ProjectPageModelsCardView", props: { projectId: { type: String, required: true }, project: { type: null, required: true }, search: { type: String, required: false }, showActions: { type: Boolean, required: false, default: true }, showVersions: { type: Boolean, required: false, default: true }, disableDefaultLinks: { type: Boolean, required: false }, excludedIds: { type: Array, required: false }, excludeEmptyModels: { type: Boolean, required: false }, disablePagination: { type: Boolean, required: false }, sourceApps: { type: Array, required: false }, contributors: { type: Array, required: false }, smallView: { type: Boolean, required: false }, hideFileUpload: { type: Boolean, required: false } }, emits: ["update:loading", "model-clicked", "clear-search"], setup(__props, { expose: __expose, emit: __emit }) { __expose(); const emit = __emit; const props = __props; const logger = useLogger(); const areQueriesLoading = useQueryLoading(); const latestModelsQueryVariables = computed( () => { const shouldHaveFilter = props.search?.length || props.excludedIds?.length || props.sourceApps?.length || props.contributors?.length || !!props.excludeEmptyModels; return { projectId: props.projectId, filter: shouldHaveFilter ? { search: props.search || null, excludeIds: props.excludedIds || null, onlyWithVersions: !!props.excludeEmptyModels, sourceApps: props.sourceApps?.length ? props.sourceApps.map((a) => a.searchKey) : null, contributors: props.contributors?.length ? props.contributors.map((c) => c.id) : null } : null }; } ); const infiniteLoaderId = ref(""); const isModelUploading = ref(false); const { result: baseResult, variables: latestModelsVariables, onResult: onBaseResult } = useQuery(latestModelsQuery, () => latestModelsQueryVariables.value); const { result: extraPagesResult, fetchMore: fetchMorePages, onResult: onExtraPagesResult } = useQuery( latestModelsPaginationQuery, () => ({ ...latestModelsQueryVariables.value, cursor: null }), () => ({ enabled: !props.disablePagination }) ); const isFiltering = computed(() => { const filter = latestModelsVariables.value?.filter; if (filter?.contributors?.length) return true; if (filter?.search?.length) return true; if (filter?.sourceApps?.length) return true; return false; }); const models = computed( () => extraPagesResult.value ? extraPagesResult.value?.project?.models?.items || [] : baseResult.value?.project?.models?.items || [] ); const pendingModels = computed( () => isFiltering.value ? [] : baseResult.value?.project?.pendingImportedModels || [] ); const items = computed( () => [...pendingModels.value, ...models.value].slice( 0, props.disablePagination ? 16 : void 0 ) ); const itemsCount = computed(() => items.value.length); const moreToLoad = computed( () => !baseResult.value?.project || baseResult.value.project.models.items.length < baseResult.value.project.models.totalCount ); const showViewAll = computed(() => moreToLoad.value && props.disablePagination); const infiniteLoad = async (state) => { const cursor = extraPagesResult.value?.project?.models.cursor || baseResult.value?.project?.models.cursor || null; if (!moreToLoad.value || !cursor) return state.complete(); try { await fetchMorePages({ variables: { cursor } }); } catch (e) { logger.error(e); state.error(); return; } state.loaded(); if (!moreToLoad.value) { state.complete(); } }; const calculateLoaderId = () => { const vars = latestModelsQueryVariables.value; const id = JSON.stringify(vars.filter); infiniteLoaderId.value = id; }; const onModelUploading = (payload) => { isModelUploading.value = payload.isUploading; }; watch(areQueriesLoading, (newVal) => { emit("update:loading", newVal); }); onBaseResult(calculateLoaderId); onExtraPagesResult(calculateLoaderId); const __returned__ = { emit, props, logger, areQueriesLoading, latestModelsQueryVariables, infiniteLoaderId, isModelUploading, baseResult, latestModelsVariables, onBaseResult, extraPagesResult, fetchMorePages, onExtraPagesResult, isFiltering, models, pendingModels, items, itemsCount, moreToLoad, showViewAll, infiniteLoad, calculateLoaderId, onModelUploading, get allProjectModelsRoute() { return allProjectModelsRoute; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { resolveComponent as _resolveComponent, openBlock as _openBlock, createCommentVNode as _createCommentVNode, Fragment as _Fragment, } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { "data-v-inspector": "components/project/page/models/CardView.vue:2:3" }; const _hoisted_2 = { key: 1, "data-v-inspector": "components/project/page/models/CardView.vue:25:7" }; const _hoisted_3 = { key: 2, class: "text-center my-6", "data-v-inspector": "components/project/page/models/CardView.vue:33:7" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_ProjectModelsBasicCardView = __nuxt_component_0; const _component_FormButtonSecondaryViewAll = __nuxt_component_1; const _component_CommonEmptySearchState = __nuxt_component_2; const _component_ProjectCardImportFileArea = __nuxt_component_3; const _component_InfiniteLoading = __nuxt_component_4; return _openBlock(), _createElementBlock("div", _hoisted_1, [ $setup.itemsCount && !$setup.isModelUploading ? (_openBlock(), _createElementBlock( _Fragment, { key: 0 }, [ _createVNode(_component_ProjectModelsBasicCardView, { items: $setup.items, project: $props.project, "project-id": $props.projectId, "small-view": $props.smallView, "show-actions": $props.showActions, "show-versions": $props.showVersions, "disable-default-links": $props.disableDefaultLinks, onModelClicked: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("model-clicked", $event)), "data-v-inspector": "components/project/page/models/CardView.vue:4:7" }, null, 8, ["items", "project", "project-id", "small-view", "show-actions", "show-versions", "disable-default-links"]), $setup.showViewAll ? (_openBlock(), _createBlock(_component_FormButtonSecondaryViewAll, { key: 0, class: "mt-4", to: $setup.allProjectModelsRoute($props.projectId), "data-v-inspector": "components/project/page/models/CardView.vue:14:7" }, null, 8, ["to"])) : _createCommentVNode("v-if", true) ], 64 /* STABLE_FRAGMENT */ )) : !$setup.areQueriesLoading ? (_openBlock(), _createElementBlock( _Fragment, { key: 1 }, [ $setup.isFiltering ? (_openBlock(), _createBlock(_component_CommonEmptySearchState, { key: 0, onClearSearch: _cache[1] || (_cache[1] = () => _ctx.$emit("clear-search")), "data-v-inspector": "components/project/page/models/CardView.vue:21:7" })) : !$props.hideFileUpload ? (_openBlock(), _createElementBlock("div", _hoisted_2, [ $props.project ? (_openBlock(), _createBlock(_component_ProjectCardImportFileArea, { key: 0, project: $props.project, class: "h-36 col-span-4", onUploading: $setup.onModelUploading, "data-v-inspector": "components/project/page/models/CardView.vue:26:9" }, null, 8, ["project"])) : _createCommentVNode("v-if", true) ])) : (_openBlock(), _createElementBlock("div", _hoisted_3, [..._cache[2] || (_cache[2] = [ _createElementVNode( "p", { class: "text-heading-sm text-foreground", "data-v-inspector": "components/project/page/models/CardView.vue:34:9" }, "No models", -1 /* CACHED */ ) ])])) ], 64 /* STABLE_FRAGMENT */ )) : _createCommentVNode("v-if", true), $setup.items?.length && !$props.disablePagination ? (_openBlock(), _createBlock(_component_InfiniteLoading, { key: 2, settings: { identifier: $setup.infiniteLoaderId }, onInfinite: $setup.infiniteLoad, "data-v-inspector": "components/project/page/models/CardView.vue:37:5" }, null, 8, ["settings"])) : _createCommentVNode("v-if", true) ]); } _sfc_main.__hmrId = "81b1fc00"; 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/project/page/models/CardView.vue"]]); //# sourceMappingURL=data:application/json;base64,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QUUsV0FBSyxpQkFBa0IsTUFBTTtBQUFBLFVBQUcsb0JBQWlCO0FBQUE7UUFHM0Qsb0NBRFIsYUFJRTtBQUFBO1VBRkEsT0FBTTtBQUFBLFVBQ0wsSUFBSSw2QkFBc0IsZ0JBQVM7QUFBQSxVQUFHLG9CQUFpQjtBQUFBOzs7O1VBR3RDLDBDQUF0QjtBQUFBLE1BZ0JXO0FBQUE7QUFBQTtBQUFBLFFBZEQsb0NBRFIsYUFHRTtBQUFBO1VBREMsZUFBWSxnQ0FBUSxXQUFLO0FBQUEsVUFBa0Isb0JBQWlCO0FBQUEsZUFFOUMsdUNBQWpCLG9CQU9NLE9BUE4sWUFPTTtBQUFBLFVBTEksZ0NBRFIsYUFLRTtBQUFBO1lBSEMsU0FBUztBQUFBLFlBQ1YsT0FBTTtBQUFBLFlBQ0wsYUFBVztBQUFBLFlBQWtCLG9CQUFpQjtBQUFBOzZCQUduRCxvQkFFTSxPQUZOLFlBRU07QUFBQSxVQURKO0FBQUEsWUFBNEg7QUFBQTtBQUFBLGNBQXpILE9BQU07QUFBQSxjQUFrQyxvQkFBaUI7QUFBQTtZQUFtRDtBQUFBLFlBQVM7QUFBQTtBQUFBO0FBQUE7Ozs7O0lBSXBILGNBQU8sVUFBTSxDQUFLLDBDQUQxQixhQUlFO0FBQUE7TUFGQyxVQUFRLGNBQWdCLHdCQUFnQjtBQUFBLE1BQ3hDLFlBQVU7QUFBQSxNQUFjLG9CQUFpQjtBQUFBIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJDYXJkVmlldy52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG4gIDxkaXYgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9DYXJkVmlldy52dWU6MjozXCI+XHJcbiAgICA8dGVtcGxhdGUgdi1pZj1cIml0ZW1zQ291bnQgJiYgIWlzTW9kZWxVcGxvYWRpbmdcIj5cclxuICAgICAgPFByb2plY3RNb2RlbHNCYXNpY0NhcmRWaWV3XHJcbiAgICAgICAgOml0ZW1zPVwiaXRlbXNcIlxyXG4gICAgICAgIDpwcm9qZWN0PVwicHJvamVjdFwiXHJcbiAgICAgICAgOnByb2plY3QtaWQ9XCJwcm9qZWN0SWRcIlxyXG4gICAgICAgIDpzbWFsbC12aWV3PVwic21hbGxWaWV3XCJcclxuICAgICAgICA6c2hvdy1hY3Rpb25zPVwic2hvd0FjdGlvbnNcIlxyXG4gICAgICAgIDpzaG93LXZlcnNpb25zPVwic2hvd1ZlcnNpb25zXCJcclxuICAgICAgICA6ZGlzYWJsZS1kZWZhdWx0LWxpbmtzPVwiZGlzYWJsZURlZmF1bHRMaW5rc1wiXHJcbiAgICAgICAgQG1vZGVsLWNsaWNrZWQ9XCIkZW1pdCgnbW9kZWwtY2xpY2tlZCcsICRldmVudClcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L3BhZ2UvbW9kZWxzL0NhcmRWaWV3LnZ1ZTo0OjdcIlxyXG4gICAgICAvPlxyXG4gICAgICA8Rm9ybUJ1dHRvblNlY29uZGFyeVZpZXdBbGxcclxuICAgICAgICB2LWlmPVwic2hvd1ZpZXdBbGxcIlxyXG4gICAgICAgIGNsYXNzPVwibXQtNFwiXHJcbiAgICAgICAgOnRvPVwiYWxsUHJvamVjdE1vZGVsc1JvdXRlKHByb2plY3RJZClcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L3BhZ2UvbW9kZWxzL0NhcmRWaWV3LnZ1ZToxNDo3XCJcclxuICAgICAgLz5cclxuICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8dGVtcGxhdGUgdi1lbHNlLWlmPVwiIWFyZVF1ZXJpZXNMb2FkaW5nXCI+XHJcbiAgICAgIDxDb21tb25FbXB0eVNlYXJjaFN0YXRlXHJcbiAgICAgICAgdi1pZj1cImlzRmlsdGVyaW5nXCJcclxuICAgICAgICBAY2xlYXItc2VhcmNoPVwiKCkgPT4gJGVtaXQoJ2NsZWFyLXNlYXJjaCcpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9DYXJkVmlldy52dWU6MjE6N1wiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxkaXYgdi1lbHNlLWlmPVwiIWhpZGVGaWxlVXBsb2FkXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9DYXJkVmlldy52dWU6MjU6N1wiPlxyXG4gICAgICAgIDxQcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhXHJcbiAgICAgICAgICB2LWlmPVwicHJvamVjdFwiXHJcbiAgICAgICAgICA6cHJvamVjdD1cInByb2plY3RcIlxyXG4gICAgICAgICAgY2xhc3M9XCJoLTM2IGNvbC1zcGFuLTRcIlxyXG4gICAgICAgICAgQHVwbG9hZGluZz1cIm9uTW9kZWxVcGxvYWRpbmdcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L3BhZ2UvbW9kZWxzL0NhcmRWaWV3LnZ1ZToyNjo5XCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiB2LWVsc2UgY2xhc3M9XCJ0ZXh0LWNlbnRlciBteS02XCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9DYXJkVmlldy52dWU6MzM6N1wiPlxyXG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1oZWFkaW5nLXNtIHRleHQtZm9yZWdyb3VuZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvQ2FyZFZpZXcudnVlOjM0OjlcIj5ObyBtb2RlbHM8L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC90ZW1wbGF0ZT5cclxuICAgIDxJbmZpbml0ZUxvYWRpbmdcclxuICAgICAgdi1pZj1cIml0ZW1zPy5sZW5ndGggJiYgIWRpc2FibGVQYWdpbmF0aW9uXCJcclxuICAgICAgOnNldHRpbmdzPVwieyBpZGVudGlmaWVyOiBpbmZpbml0ZUxvYWRlcklkIH1cIlxyXG4gICAgICBAaW5maW5pdGU9XCJpbmZpbml0ZUxvYWRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L3BhZ2UvbW9kZWxzL0NhcmRWaWV3LnZ1ZTozNzo1XCJcclxuICAgIC8+XHJcbiAgPC9kaXY+XHJcbjwvdGVtcGxhdGU+XHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB0eXBlIHtcclxuICBGb3JtVXNlcnNTZWxlY3RJdGVtRnJhZ21lbnQsXHJcbiAgUHJvamVjdExhdGVzdE1vZGVsc1BhZ2luYXRpb25RdWVyeVZhcmlhYmxlcyxcclxuICBQcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtRnJhZ21lbnQsXHJcbiAgUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsc0ZyYWdtZW50XHJcbn0gZnJvbSAnfn4vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsL2dyYXBocWwnXHJcbmltcG9ydCB7IHVzZVF1ZXJ5LCB1c2VRdWVyeUxvYWRpbmcgfSBmcm9tICdAdnVlL2Fwb2xsby1jb21wb3NhYmxlJ1xyXG5pbXBvcnQge1xyXG4gIGxhdGVzdE1vZGVsc1BhZ2luYXRpb25RdWVyeSxcclxuICBsYXRlc3RNb2RlbHNRdWVyeVxyXG59IGZyb20gJ35+L2xpYi9wcm9qZWN0cy9ncmFwaHFsL3F1ZXJpZXMnXHJcbmltcG9ydCB0eXBlIHsgTnVsbGFibGUsIE9wdGlvbmFsLCBTb3VyY2VBcHBEZWZpbml0aW9uIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgdHlwZSB7IEluZmluaXRlTG9hZGVyU3RhdGUgfSBmcm9tICd+fi9saWIvZ2xvYmFsL2hlbHBlcnMvY29tcG9uZW50cydcclxuaW1wb3J0IHsgYWxsUHJvamVjdE1vZGVsc1JvdXRlIH0gZnJvbSAnfn4vbGliL2NvbW1vbi9oZWxwZXJzL3JvdXRlJ1xyXG5pbXBvcnQgdHlwZSB7IEZpbGVBcmVhVXBsb2FkaW5nUGF5bG9hZCB9IGZyb20gJ34vbGliL2Zvcm0vaGVscGVycy9maWxlVXBsb2FkJ1xyXG5cclxuY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzPHtcclxuICAoZTogJ3VwZGF0ZTpsb2FkaW5nJywgdjogYm9vbGVhbik6IHZvaWRcclxuICAoXHJcbiAgICBlOiAnbW9kZWwtY2xpY2tlZCcsXHJcbiAgICB2OiB7XHJcbiAgICAgIGlkOiBzdHJpbmdcclxuICAgICAgZTogTW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnRcclxuICAgICAgbW9kZWw6IFByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW1GcmFnbWVudCB8IHVuZGVmaW5lZFxyXG4gICAgfVxyXG4gICk6IHZvaWRcclxuICAoZTogJ2NsZWFyLXNlYXJjaCcpOiB2b2lkXHJcbn0+KClcclxuXHJcbmNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKFxyXG4gIGRlZmluZVByb3BzPHtcclxuICAgIHByb2plY3RJZDogc3RyaW5nXHJcbiAgICBwcm9qZWN0OiBPcHRpb25hbDxQcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxzRnJhZ21lbnQ+XHJcbiAgICBzZWFyY2g/OiBzdHJpbmdcclxuICAgIHNob3dBY3Rpb25zPzogYm9vbGVhblxyXG4gICAgc2hvd1ZlcnNpb25zPzogYm9vbGVhblxyXG4gICAgZGlzYWJsZURlZmF1bHRMaW5rcz86IGJvb2xlYW5cclxuICAgIGV4Y2x1ZGVkSWRzPzogc3RyaW5nW11cclxuICAgIGV4Y2x1ZGVFbXB0eU1vZGVscz86IGJvb2xlYW5cclxuICAgIGRpc2FibGVQYWdpbmF0aW9uPzogYm9vbGVhblxyXG4gICAgc291cmNlQXBwcz86IFNvdXJjZUFwcERlZmluaXRpb25bXVxyXG4gICAgY29udHJpYnV0b3JzPzogRm9ybVVzZXJzU2VsZWN0SXRlbUZyYWdtZW50W11cclxuICAgIHNtYWxsVmlldz86IGJvb2xlYW5cclxuICAgIGhpZGVGaWxlVXBsb2FkPzogYm9vbGVhblxyXG4gIH0+KCksXHJcbiAge1xyXG4gICAgc2hvd0FjdGlvbnM6IHRydWUsXHJcbiAgICBzaG93VmVyc2lvbnM6IHRydWVcclxuICB9XHJcbilcclxuXHJcbmNvbnN0IGxvZ2dlciA9IHVzZUxvZ2dlcigpXHJcbmNvbnN0IGFyZVF1ZXJpZXNMb2FkaW5nID0gdXNlUXVlcnlMb2FkaW5nKClcclxuXHJcbmNvbnN0IGxhdGVzdE1vZGVsc1F1ZXJ5VmFyaWFibGVzID0gY29tcHV0ZWQoXHJcbiAgKCk6IFByb2plY3RMYXRlc3RNb2RlbHNQYWdpbmF0aW9uUXVlcnlWYXJpYWJsZXMgPT4ge1xyXG4gICAgY29uc3Qgc2hvdWxkSGF2ZUZpbHRlciA9XHJcbiAgICAgIHByb3BzLnNlYXJjaD8ubGVuZ3RoIHx8XHJcbiAgICAgIHByb3BzLmV4Y2x1ZGVkSWRzPy5sZW5ndGggfHxcclxuICAgICAgcHJvcHMuc291cmNlQXBwcz8ubGVuZ3RoIHx8XHJcbiAgICAgIHByb3BzLmNvbnRyaWJ1dG9ycz8ubGVuZ3RoIHx8XHJcbiAgICAgICEhcHJvcHMuZXhjbHVkZUVtcHR5TW9kZWxzXHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcHJvamVjdElkOiBwcm9wcy5wcm9qZWN0SWQsXHJcbiAgICAgIGZpbHRlcjogc2hvdWxkSGF2ZUZpbHRlclxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICBzZWFyY2g6IHByb3BzLnNlYXJjaCB8fCBudWxsLFxyXG4gICAgICAgICAgICBleGNsdWRlSWRzOiBwcm9wcy5leGNsdWRlZElkcyB8fCBudWxsLFxyXG4gICAgICAgICAgICBvbmx5V2l0aFZlcnNpb25zOiAhIXByb3BzLmV4Y2x1ZGVFbXB0eU1vZGVscyxcclxuICAgICAgICAgICAgc291cmNlQXBwczogcHJvcHMuc291cmNlQXBwcz8ubGVuZ3RoXHJcbiAgICAgICAgICAgICAgPyBwcm9wcy5zb3VyY2VBcHBzLm1hcCgoYSkgPT4gYS5zZWFyY2hLZXkpXHJcbiAgICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgICAgICBjb250cmlidXRvcnM6IHByb3BzLmNvbnRyaWJ1dG9ycz8ubGVuZ3RoXHJcbiAgICAgICAgICAgICAgPyBwcm9wcy5jb250cmlidXRvcnMubWFwKChjKSA9PiBjLmlkKVxyXG4gICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDogbnVsbFxyXG4gICAgfVxyXG4gIH1cclxuKVxyXG5cclxuY29uc3QgaW5maW5pdGVMb2FkZXJJZCA9IHJlZignJylcclxuY29uc3QgaXNNb2RlbFVwbG9hZGluZyA9IHJlZihmYWxzZSlcclxuXHJcbi8vIEJhc2UgcXVlcnkgKGFsbCBwZW5kaW5nIHVwbG9hZHMgKyBmaXJzdCBwYWdlIG9mIG1vZGVscylcclxuY29uc3Qge1xyXG4gIHJlc3VsdDogYmFzZVJlc3VsdCxcclxuICB2YXJpYWJsZXM6IGxhdGVzdE1vZGVsc1ZhcmlhYmxlcyxcclxuICBvblJlc3VsdDogb25CYXNlUmVzdWx0XHJcbn0gPSB1c2VRdWVyeShsYXRlc3RNb2RlbHNRdWVyeSwgKCkgPT4gbGF0ZXN0TW9kZWxzUXVlcnlWYXJpYWJsZXMudmFsdWUpXHJcblxyXG4vLyBQYWdpbmF0aW9uIHF1ZXJ5XHJcbmNvbnN0IHtcclxuICByZXN1bHQ6IGV4dHJhUGFnZXNSZXN1bHQsXHJcbiAgZmV0Y2hNb3JlOiBmZXRjaE1vcmVQYWdlcyxcclxuICBvblJlc3VsdDogb25FeHRyYVBhZ2VzUmVzdWx0XHJcbn0gPSB1c2VRdWVyeShcclxuICBsYXRlc3RNb2RlbHNQYWdpbmF0aW9uUXVlcnksXHJcbiAgKCkgPT4gKHtcclxuICAgIC4uLmxhdGVzdE1vZGVsc1F1ZXJ5VmFyaWFibGVzLnZhbHVlLFxyXG4gICAgY3Vyc29yOiBudWxsIGFzIE51bGxhYmxlPHN0cmluZz5cclxuICB9KSxcclxuICAoKSA9PiAoeyBlbmFibGVkOiAhcHJvcHMuZGlzYWJsZVBhZ2luYXRpb24gfSlcclxuKVxyXG5cclxuY29uc3QgaXNGaWx0ZXJpbmcgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgZmlsdGVyID0gbGF0ZXN0TW9kZWxzVmFyaWFibGVzLnZhbHVlPy5maWx0ZXJcclxuICBpZiAoZmlsdGVyPy5jb250cmlidXRvcnM/Lmxlbmd0aCkgcmV0dXJuIHRydWVcclxuICBpZiAoZmlsdGVyPy5zZWFyY2g/Lmxlbmd0aCkgcmV0dXJuIHRydWVcclxuICBpZiAoZmlsdGVyPy5zb3VyY2VBcHBzPy5sZW5ndGgpIHJldHVybiB0cnVlXHJcbiAgcmV0dXJuIGZhbHNlXHJcbn0pXHJcblxyXG5jb25zdCBtb2RlbHMgPSBjb21wdXRlZCgoKSA9PlxyXG4gIGV4dHJhUGFnZXNSZXN1bHQudmFsdWVcclxuICAgID8gZXh0cmFQYWdlc1Jlc3VsdC52YWx1ZT8ucHJvamVjdD8ubW9kZWxzPy5pdGVtcyB8fCBbXVxyXG4gICAgOiBiYXNlUmVzdWx0LnZhbHVlPy5wcm9qZWN0Py5tb2RlbHM/Lml0ZW1zIHx8IFtdXHJcbilcclxuY29uc3QgcGVuZGluZ01vZGVscyA9IGNvbXB1dGVkKCgpID0+XHJcbiAgaXNGaWx0ZXJpbmcudmFsdWUgPyBbXSA6IGJhc2VSZXN1bHQudmFsdWU/LnByb2plY3Q/LnBlbmRpbmdJbXBvcnRlZE1vZGVscyB8fCBbXVxyXG4pXHJcblxyXG5jb25zdCBpdGVtcyA9IGNvbXB1dGVkKCgpID0+XHJcbiAgWy4uLnBlbmRpbmdNb2RlbHMudmFsdWUsIC4uLm1vZGVscy52YWx1ZV0uc2xpY2UoXHJcbiAgICAwLFxyXG4gICAgcHJvcHMuZGlzYWJsZVBhZ2luYXRpb24gPyAxNiA6IHVuZGVmaW5lZFxyXG4gIClcclxuKVxyXG5jb25zdCBpdGVtc0NvdW50ID0gY29tcHV0ZWQoKCkgPT4gaXRlbXMudmFsdWUubGVuZ3RoKVxyXG5jb25zdCBtb3JlVG9Mb2FkID0gY29tcHV0ZWQoXHJcbiAgKCkgPT5cclxuICAgICFiYXNlUmVzdWx0LnZhbHVlPy5wcm9qZWN0IHx8XHJcbiAgICBiYXNlUmVzdWx0LnZhbHVlLnByb2plY3QubW9kZWxzLml0ZW1zLmxlbmd0aCA8XHJcbiAgICAgIGJhc2VSZXN1bHQudmFsdWUucHJvamVjdC5tb2RlbHMudG90YWxDb3VudFxyXG4pXHJcbmNvbnN0IHNob3dWaWV3QWxsID0gY29tcHV0ZWQoKCkgPT4gbW9yZVRvTG9hZC52YWx1ZSAmJiBwcm9wcy5kaXNhYmxlUGFnaW5hdGlvbilcclxuXHJcbmNvbnN0IGluZmluaXRlTG9hZCA9IGFzeW5jIChzdGF0ZTogSW5maW5pdGVMb2FkZXJTdGF0ZSkgPT4ge1xyXG4gIGNvbnN0IGN1cnNvciA9XHJcbiAgICBleHRyYVBhZ2VzUmVzdWx0LnZhbHVlPy5wcm9qZWN0Py5tb2RlbHMuY3Vyc29yIHx8XHJcbiAgICBiYXNlUmVzdWx0LnZhbHVlPy5wcm9qZWN0Py5tb2RlbHMuY3Vyc29yIHx8XHJcbiAgICBudWxsXHJcbiAgaWYgKCFtb3JlVG9Mb2FkLnZhbHVlIHx8ICFjdXJzb3IpIHJldHVybiBzdGF0ZS5jb21wbGV0ZSgpXHJcblxyXG4gIHRyeSB7XHJcbiAgICBhd2FpdCBmZXRjaE1vcmVQYWdlcyh7XHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGN1cnNvclxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIGxvZ2dlci5lcnJvcihlKVxyXG4gICAgc3RhdGUuZXJyb3IoKVxyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG5cclxuICBzdGF0ZS5sb2FkZWQoKVxyXG4gIGlmICghbW9yZVRvTG9hZC52YWx1ZSkge1xyXG4gICAgc3RhdGUuY29tcGxldGUoKVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY2FsY3VsYXRlTG9hZGVySWQgPSAoKSA9PiB7XHJcbiAgY29uc3QgdmFycyA9IGxhdGVzdE1vZGVsc1F1ZXJ5VmFyaWFibGVzLnZhbHVlXHJcbiAgY29uc3QgaWQgPSBKU09OLnN0cmluZ2lmeSh2YXJzLmZpbHRlcilcclxuICBpbmZpbml0ZUxvYWRlcklkLnZhbHVlID0gaWRcclxufVxyXG5cclxuY29uc3Qgb25Nb2RlbFVwbG9hZGluZyA9IChwYXlsb2FkOiBGaWxlQXJlYVVwbG9hZGluZ1BheWxvYWQpID0+IHtcclxuICBpc01vZGVsVXBsb2FkaW5nLnZhbHVlID0gcGF5bG9hZC5pc1VwbG9hZGluZ1xyXG59XHJcblxyXG53YXRjaChhcmVRdWVyaWVzTG9hZGluZywgKG5ld1ZhbCkgPT4ge1xyXG4gIGVtaXQoJ3VwZGF0ZTpsb2FkaW5nJywgbmV3VmFsKVxyXG59KVxyXG5cclxub25CYXNlUmVzdWx0KGNhbGN1bGF0ZUxvYWRlcklkKVxyXG5vbkV4dHJhUGFnZXNSZXN1bHQoY2FsY3VsYXRlTG9hZGVySWQpXHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy9wcm9qZWN0L3BhZ2UvbW9kZWxzL0NhcmRWaWV3LnZ1ZSJ9