import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/common/TransitioningContents.vue");import { waitIntervalUntil, timeoutAt, WaitIntervalUntilCanceledError, TimeoutError, TIME_MS } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js"; import { until } from "/_nuxt/node_modules/@vueuse/core/index.mjs?v=e4f18c29"; import { defineComponent, ref, shallowRef, h } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { useLogger } from "/_nuxt/composables/logging.ts"; const _sfc_main = defineComponent({ props: { duration: { type: Number, default: TIME_MS.second }, debug: { type: Boolean, default: false } }, setup(props, { slots, expose }) { const logger = useLogger(); const transitioning = ref(false); const newWrapperRef = ref(null); const oldWrapperRef = ref(null); const newContents = shallowRef(slots.default?.()); const oldContents = shallowRef(void 0); const newOpacity = ref(1); const oldOpacity = ref(1); const newTransitionEnabled = ref(false); const oldTransitionEnabled = ref(false); const waitForDomUpdate = async (params) => { const { ref: ref2, expectClasses, expectStyle, shouldNotHaveClasses } = params; let attempt = 0; const promise = waitIntervalUntil(100, () => { if (attempt > 20) { promise.cancel(); } attempt++; const el = ref2.value; if (!el) return false; if (expectStyle) { for (const [key, value] of Object.entries(expectStyle)) { if (el.style[key] !== value) { return false; } } } if (expectClasses) { for (const className of expectClasses) { if (!el.classList.contains(className)) { return false; } } } if (shouldNotHaveClasses) { for (const className of shouldNotHaveClasses) { if (el.classList.contains(className)) { return false; } } } return true; }); try { await promise; } catch (e) { if (e instanceof WaitIntervalUntilCanceledError) { if (props.debug) { throw e; } } else { throw e; } } }; const updateContents = async () => { transitioning.value = true; oldContents.value = newContents.value; newContents.value = slots.default?.(); newTransitionEnabled.value = false; newOpacity.value = 0; oldTransitionEnabled.value = false; oldOpacity.value = 1; await Promise.all([ waitForDomUpdate({ ref: newWrapperRef, expectStyle: { opacity: "0" }, shouldNotHaveClasses: ["transition-opacity"] }), waitForDomUpdate({ ref: oldWrapperRef, expectStyle: { opacity: "1" }, shouldNotHaveClasses: ["transition-opacity"] }) ]); oldTransitionEnabled.value = newTransitionEnabled.value = true; await Promise.all([ waitForDomUpdate({ ref: newWrapperRef, expectClasses: ["transition-opacity"] }), waitForDomUpdate({ ref: oldWrapperRef, expectClasses: ["transition-opacity"] }) ]); newOpacity.value = 1; oldOpacity.value = 0; await Promise.all([ waitForDomUpdate({ ref: newWrapperRef, expectStyle: { opacity: "1" } }), waitForDomUpdate({ ref: oldWrapperRef, expectStyle: { opacity: "0" } }) ]); }; const triggerTransition = async () => { if (!transitioning.value) { await updateContents(); return; } try { await Promise.race([ until(transitioning).toBe(false), timeoutAt( props.duration + TIME_MS.second, "Waiting for transition to finish timed out" ) ]); } catch (e) { if (!(e instanceof TimeoutError)) { throw e; } else { logger.warn(e); } } await updateContents(); }; const buildItemProps = (params) => { const { zIndex, withTransitions, opacity } = params; const classParts = ["absolute inset-0"]; const style = { zIndex, opacity, ...withTransitions ? { transitionDuration: `${props.duration}ms` } : {} }; if (withTransitions) { classParts.push("transition-opacity"); } return { class: classParts.join(" "), style }; }; expose({ triggerTransition }); return () => { return h("div", { class: "relative" }, [ h( "div", { ...buildItemProps({ zIndex: 2, withTransitions: newTransitionEnabled.value, opacity: newOpacity.value }), ref: newWrapperRef }, [newContents.value] ), ...oldContents.value ? [ h( "div", { ...buildItemProps({ zIndex: 1, withTransitions: oldTransitionEnabled.value, opacity: oldOpacity.value }), ref: oldWrapperRef, onTransitionend: () => { oldContents.value = void 0; transitioning.value = false; } }, [oldContents.value] ) ] : [] ]); }; } }); _sfc_main.__hmrId = "b0b85ad7"; 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__ */ Object.assign(_export_sfc(_sfc_main, [["__file", "D:/speckle-server/packages/frontend-2/components/common/TransitioningContents.vue"]]), { __name: "CommonTransitioningContents" }); //# sourceMappingURL=data:application/json;base64,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IjpbXSwic291cmNlcyI6WyJUcmFuc2l0aW9uaW5nQ29udGVudHMudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjxzY3JpcHQgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7XHJcbiAgd2FpdEludGVydmFsVW50aWwsXHJcbiAgdHlwZSBOdWxsYWJsZSxcclxuICB0aW1lb3V0QXQsXHJcbiAgV2FpdEludGVydmFsVW50aWxDYW5jZWxlZEVycm9yLFxyXG4gIFRpbWVvdXRFcnJvcixcclxuICBUSU1FX01TXHJcbn0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgeyB1bnRpbCB9IGZyb20gJ0B2dWV1c2UvY29yZSdcclxuaW1wb3J0IHR5cGUgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSAndnVlJ1xyXG5cclxuLyoqXHJcbiAqIEEgY29tcG9uZW50IHRoYXQgdHJhbnNpdGlvbnMgYmV0d2VlbiB0d28gc2V0cyBvZiBjb250ZW50cyB3aXRoIGEgY3Jvc3NmYWRlIGVmZmVjdC4gWW91IG9ubHlcclxuICogaGF2ZSB0byB1c2UgYSBzaW5nbGUgc2xvdCAtIHRoZSBjb21wb25lbnQgd2lsbCBub3QgdXBkYXRlIGFueSBjb250ZW50cyBpbnNpZGUgb2YgdGhlIHNsb3RcclxuICogdW50aWwgeW91IGNhbGwgdGhlIGB0cmlnZ2VyVHJhbnNpdGlvbmAgbWV0aG9kLCBhbmQgdGhlbiB0aGUgdXBkYXRlIHdpbGwgaGFwcGVuIHdpdGggYSBzbW9vdGhcclxuICogdHJhbnNpdGlvbi5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbXBvbmVudCh7XHJcbiAgcHJvcHM6IHtcclxuICAgIGR1cmF0aW9uOiB7XHJcbiAgICAgIHR5cGU6IE51bWJlcixcclxuICAgICAgZGVmYXVsdDogVElNRV9NUy5zZWNvbmRcclxuICAgIH0sXHJcbiAgICBkZWJ1Zzoge1xyXG4gICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICBkZWZhdWx0OiBmYWxzZVxyXG4gICAgfVxyXG4gIH0sXHJcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMsIGV4cG9zZSB9KSB7XHJcbiAgICBjb25zdCBsb2dnZXIgPSB1c2VMb2dnZXIoKVxyXG5cclxuICAgIGNvbnN0IHRyYW5zaXRpb25pbmcgPSByZWYoZmFsc2UpXHJcbiAgICBjb25zdCBuZXdXcmFwcGVyUmVmID0gcmVmKG51bGwgYXMgTnVsbGFibGU8SFRNTERpdkVsZW1lbnQ+KVxyXG4gICAgY29uc3Qgb2xkV3JhcHBlclJlZiA9IHJlZihudWxsIGFzIE51bGxhYmxlPEhUTUxEaXZFbGVtZW50PilcclxuXHJcbiAgICBjb25zdCBuZXdDb250ZW50cyA9IHNoYWxsb3dSZWYoc2xvdHMuZGVmYXVsdD8uKCkpXHJcbiAgICBjb25zdCBvbGRDb250ZW50czogdHlwZW9mIG5ld0NvbnRlbnRzID0gc2hhbGxvd1JlZih1bmRlZmluZWQpXHJcblxyXG4gICAgY29uc3QgbmV3T3BhY2l0eSA9IHJlZigxKVxyXG4gICAgY29uc3Qgb2xkT3BhY2l0eSA9IHJlZigxKVxyXG5cclxuICAgIGNvbnN0IG5ld1RyYW5zaXRpb25FbmFibGVkID0gcmVmKGZhbHNlKVxyXG4gICAgY29uc3Qgb2xkVHJhbnNpdGlvbkVuYWJsZWQgPSByZWYoZmFsc2UpXHJcblxyXG4gICAgY29uc3Qgd2FpdEZvckRvbVVwZGF0ZSA9IGFzeW5jIChwYXJhbXM6IHtcclxuICAgICAgcmVmOiBSZWY8TnVsbGFibGU8SFRNTEVsZW1lbnQ+PlxyXG4gICAgICBleHBlY3RTdHlsZT86IFBhcnRpYWw8Q1NTUHJvcGVydGllcz5cclxuICAgICAgZXhwZWN0Q2xhc3Nlcz86IHN0cmluZ1tdXHJcbiAgICAgIHNob3VsZE5vdEhhdmVDbGFzc2VzPzogc3RyaW5nW11cclxuICAgIH0pID0+IHtcclxuICAgICAgY29uc3QgeyByZWYsIGV4cGVjdENsYXNzZXMsIGV4cGVjdFN0eWxlLCBzaG91bGROb3RIYXZlQ2xhc3NlcyB9ID0gcGFyYW1zXHJcblxyXG4gICAgICBsZXQgYXR0ZW1wdCA9IDBcclxuICAgICAgY29uc3QgcHJvbWlzZSA9IHdhaXRJbnRlcnZhbFVudGlsKDEwMCwgKCkgPT4ge1xyXG4gICAgICAgIGlmIChhdHRlbXB0ID4gMjApIHtcclxuICAgICAgICAgIHByb21pc2UuY2FuY2VsKClcclxuICAgICAgICB9XHJcbiAgICAgICAgYXR0ZW1wdCsrXHJcblxyXG4gICAgICAgIGNvbnN0IGVsID0gcmVmLnZhbHVlXHJcbiAgICAgICAgaWYgKCFlbCkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIGlmIChleHBlY3RTdHlsZSkge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0U3R5bGUpKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICAgIGlmIChlbC5zdHlsZVtrZXkgYXMgYW55XSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGV4cGVjdENsYXNzZXMpIHtcclxuICAgICAgICAgIGZvciAoY29uc3QgY2xhc3NOYW1lIG9mIGV4cGVjdENsYXNzZXMpIHtcclxuICAgICAgICAgICAgaWYgKCFlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2hvdWxkTm90SGF2ZUNsYXNzZXMpIHtcclxuICAgICAgICAgIGZvciAoY29uc3QgY2xhc3NOYW1lIG9mIHNob3VsZE5vdEhhdmVDbGFzc2VzKSB7XHJcbiAgICAgICAgICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCBwcm9taXNlXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFdhaXRJbnRlcnZhbFVudGlsQ2FuY2VsZWRFcnJvcikge1xyXG4gICAgICAgICAgaWYgKHByb3BzLmRlYnVnKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2F1c2UgZGVmYXVsdCBzbG90IHRvIHVwZGF0ZSB3aXRoIGFuIG9wYWNpdHkgdHJhbnNpdGlvblxyXG4gICAgICovXHJcbiAgICBjb25zdCB1cGRhdGVDb250ZW50cyA9IGFzeW5jICgpID0+IHtcclxuICAgICAgdHJhbnNpdGlvbmluZy52YWx1ZSA9IHRydWVcclxuXHJcbiAgICAgIC8vIFN0YWdlIDE6IEp1c3QgbW92ZSBuZXcgLT4gb2xkIHcvbyBhbnkgdHJhbnNpdGlvbnMgKHZpc3VhbGx5IHNob3VsZCBsb29rIHRoZSBzYW1lKVxyXG4gICAgICBvbGRDb250ZW50cy52YWx1ZSA9IG5ld0NvbnRlbnRzLnZhbHVlXHJcbiAgICAgIG5ld0NvbnRlbnRzLnZhbHVlID0gc2xvdHMuZGVmYXVsdD8uKClcclxuXHJcbiAgICAgIG5ld1RyYW5zaXRpb25FbmFibGVkLnZhbHVlID0gZmFsc2VcclxuICAgICAgbmV3T3BhY2l0eS52YWx1ZSA9IDBcclxuXHJcbiAgICAgIG9sZFRyYW5zaXRpb25FbmFibGVkLnZhbHVlID0gZmFsc2VcclxuICAgICAgb2xkT3BhY2l0eS52YWx1ZSA9IDFcclxuXHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcclxuICAgICAgICB3YWl0Rm9yRG9tVXBkYXRlKHtcclxuICAgICAgICAgIHJlZjogbmV3V3JhcHBlclJlZixcclxuICAgICAgICAgIGV4cGVjdFN0eWxlOiB7IG9wYWNpdHk6ICcwJyB9LFxyXG4gICAgICAgICAgc2hvdWxkTm90SGF2ZUNsYXNzZXM6IFsndHJhbnNpdGlvbi1vcGFjaXR5J11cclxuICAgICAgICB9KSxcclxuICAgICAgICB3YWl0Rm9yRG9tVXBkYXRlKHtcclxuICAgICAgICAgIHJlZjogb2xkV3JhcHBlclJlZixcclxuICAgICAgICAgIGV4cGVjdFN0eWxlOiB7IG9wYWNpdHk6ICcxJyB9LFxyXG4gICAgICAgICAgc2hvdWxkTm90SGF2ZUNsYXNzZXM6IFsndHJhbnNpdGlvbi1vcGFjaXR5J11cclxuICAgICAgICB9KVxyXG4gICAgICBdKVxyXG5cclxuICAgICAgLy8gU3RhZ2UgMjogVHJhbnNpdGlvbiBib3RoXHJcbiAgICAgIG9sZFRyYW5zaXRpb25FbmFibGVkLnZhbHVlID0gbmV3VHJhbnNpdGlvbkVuYWJsZWQudmFsdWUgPSB0cnVlXHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcclxuICAgICAgICB3YWl0Rm9yRG9tVXBkYXRlKHtcclxuICAgICAgICAgIHJlZjogbmV3V3JhcHBlclJlZixcclxuICAgICAgICAgIGV4cGVjdENsYXNzZXM6IFsndHJhbnNpdGlvbi1vcGFjaXR5J11cclxuICAgICAgICB9KSxcclxuICAgICAgICB3YWl0Rm9yRG9tVXBkYXRlKHtcclxuICAgICAgICAgIHJlZjogb2xkV3JhcHBlclJlZixcclxuICAgICAgICAgIGV4cGVjdENsYXNzZXM6IFsndHJhbnNpdGlvbi1vcGFjaXR5J11cclxuICAgICAgICB9KVxyXG4gICAgICBdKVxyXG5cclxuICAgICAgbmV3T3BhY2l0eS52YWx1ZSA9IDFcclxuICAgICAgb2xkT3BhY2l0eS52YWx1ZSA9IDBcclxuXHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcclxuICAgICAgICB3YWl0Rm9yRG9tVXBkYXRlKHtcclxuICAgICAgICAgIHJlZjogbmV3V3JhcHBlclJlZixcclxuICAgICAgICAgIGV4cGVjdFN0eWxlOiB7IG9wYWNpdHk6ICcxJyB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgd2FpdEZvckRvbVVwZGF0ZSh7XHJcbiAgICAgICAgICByZWY6IG9sZFdyYXBwZXJSZWYsXHJcbiAgICAgICAgICBleHBlY3RTdHlsZTogeyBvcGFjaXR5OiAnMCcgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJpZ2dlclRyYW5zaXRpb24gPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgIGlmICghdHJhbnNpdGlvbmluZy52YWx1ZSkge1xyXG4gICAgICAgIGF3YWl0IHVwZGF0ZUNvbnRlbnRzKClcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCBQcm9taXNlLnJhY2UoW1xyXG4gICAgICAgICAgdW50aWwodHJhbnNpdGlvbmluZykudG9CZShmYWxzZSksXHJcbiAgICAgICAgICB0aW1lb3V0QXQoXHJcbiAgICAgICAgICAgIHByb3BzLmR1cmF0aW9uICsgVElNRV9NUy5zZWNvbmQsXHJcbiAgICAgICAgICAgICdXYWl0aW5nIGZvciB0cmFuc2l0aW9uIHRvIGZpbmlzaCB0aW1lZCBvdXQnXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgXSlcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IpKSB7XHJcbiAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxvZ2dlci53YXJuKGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBhd2FpdCB1cGRhdGVDb250ZW50cygpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYnVpbGRJdGVtUHJvcHMgPSAocGFyYW1zOiB7XHJcbiAgICAgIHpJbmRleDogbnVtYmVyXHJcbiAgICAgIHdpdGhUcmFuc2l0aW9uczogYm9vbGVhblxyXG4gICAgICBvcGFjaXR5OiBudW1iZXJcclxuICAgIH0pID0+IHtcclxuICAgICAgY29uc3QgeyB6SW5kZXgsIHdpdGhUcmFuc2l0aW9ucywgb3BhY2l0eSB9ID0gcGFyYW1zXHJcbiAgICAgIGNvbnN0IGNsYXNzUGFydHMgPSBbJ2Fic29sdXRlIGluc2V0LTAnXVxyXG4gICAgICBjb25zdCBzdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcclxuICAgICAgICB6SW5kZXgsXHJcbiAgICAgICAgb3BhY2l0eSxcclxuICAgICAgICAuLi4od2l0aFRyYW5zaXRpb25zXHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb246IGAke3Byb3BzLmR1cmF0aW9ufW1zYFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHt9KVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAod2l0aFRyYW5zaXRpb25zKSB7XHJcbiAgICAgICAgY2xhc3NQYXJ0cy5wdXNoKCd0cmFuc2l0aW9uLW9wYWNpdHknKVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGNsYXNzOiBjbGFzc1BhcnRzLmpvaW4oJyAnKSxcclxuICAgICAgICBzdHlsZVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3NlKHtcclxuICAgICAgdHJpZ2dlclRyYW5zaXRpb25cclxuICAgIH0pXHJcblxyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgcmV0dXJuIGgoJ2RpdicsIHsgY2xhc3M6ICdyZWxhdGl2ZScgfSwgW1xyXG4gICAgICAgIGgoXHJcbiAgICAgICAgICAnZGl2JyxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgLi4uYnVpbGRJdGVtUHJvcHMoe1xyXG4gICAgICAgICAgICAgIHpJbmRleDogMixcclxuICAgICAgICAgICAgICB3aXRoVHJhbnNpdGlvbnM6IG5ld1RyYW5zaXRpb25FbmFibGVkLnZhbHVlLFxyXG4gICAgICAgICAgICAgIG9wYWNpdHk6IG5ld09wYWNpdHkudmFsdWVcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHJlZjogbmV3V3JhcHBlclJlZlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtuZXdDb250ZW50cy52YWx1ZV1cclxuICAgICAgICApLFxyXG4gICAgICAgIC4uLihvbGRDb250ZW50cy52YWx1ZVxyXG4gICAgICAgICAgPyBbXHJcbiAgICAgICAgICAgICAgaChcclxuICAgICAgICAgICAgICAgICdkaXYnLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAuLi5idWlsZEl0ZW1Qcm9wcyh7XHJcbiAgICAgICAgICAgICAgICAgICAgekluZGV4OiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpdGhUcmFuc2l0aW9uczogb2xkVHJhbnNpdGlvbkVuYWJsZWQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogb2xkT3BhY2l0eS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgcmVmOiBvbGRXcmFwcGVyUmVmLFxyXG4gICAgICAgICAgICAgICAgICBvblRyYW5zaXRpb25lbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTdGFnZSAzOiBDbGVhbiB1cFxyXG4gICAgICAgICAgICAgICAgICAgIG9sZENvbnRlbnRzLnZhbHVlID0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbmluZy52YWx1ZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBbb2xkQ29udGVudHMudmFsdWVdXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICA6IFtdKVxyXG4gICAgICBdKVxyXG4gICAgfVxyXG4gIH1cclxufSlcclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL2NvbW1vbi9UcmFuc2l0aW9uaW5nQ29udGVudHMudnVlIn0=