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

251 lines
22 KiB
Plaintext

import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/invite/Banner.vue");import { UserAvatar as __nuxt_component_0 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { default as __nuxt_component_1 } from "/_nuxt/components/workspace/Avatar.vue";
import { FormButton as __nuxt_component_2 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
/* Injection by vite-plugin-vue-inspector Start */
import { createBlock as __createBlock,createElementVNode as __createElementVNode,createVNode as __createVNode,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 _createBlock(...args) { return _interopVNode(__createBlock(...args)) }
function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
function _createVNode(...args) { return _interopVNode(__createVNode(...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 { usePostAuthRedirect } from "/_nuxt/lib/auth/composables/postAuthRedirect.ts";
import {
useNavigateToLogin,
useNavigateToRegistration
} from "/_nuxt/lib/common/helpers/route.ts";
import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts";
import { useRoute } from "/_nuxt/node_modules/nuxt/dist/app/composables/router.js?v=e4f18c29";
import { useActiveUser } from "/_nuxt/composables/globals.ts";
import { computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _sfc_main = /* @__PURE__ */ _defineComponent({
__name: "InviteBanner",
props: {
invite: { type: Object, required: true },
block: { type: Boolean, required: false },
loading: { type: Boolean, required: false }
},
emits: ["processed"],
setup(__props, { expose: __expose, emit: __emit }) {
__expose();
const emit = __emit;
const props = __props;
const route = useRoute();
const { isLoggedIn } = useActiveUser();
const postAuthRedirect = usePostAuthRedirect();
const goToLogin = useNavigateToLogin();
const goToSignUp = useNavigateToRegistration();
const mixpanel = useMixpanel();
const token = computed(
() => props.invite?.token || route.query.token
);
const mainClasses = computed(() => {
const classParts = [
"flex flex-col space-y-4 px-4 py-5 transition bg-foundation border-x border-b border-outline-2 first:border-t first:rounded-t-lg last:rounded-b-lg"
];
if (props.block) {
classParts.push("");
} else {
classParts.push("sm:space-y-0 sm:space-x-2 sm:items-center sm:flex-row sm:py-2");
}
return classParts.join(" ");
});
const mainInfoBlockClasses = computed(() => {
const classParts = ["flex grow items-center"];
if (props.block) {
classParts.push("flex-col space-y-2");
} else {
classParts.push("flex-row space-x-2 text-body-xs");
}
return classParts.join(" ");
});
const avatarSize = computed(() => props.block ? "xxl" : "base");
const buttonSize = computed(() => props.block ? "lg" : "sm");
const isForRegisteredUser = computed(() => !!props.invite.user?.id);
const acceptMessage = computed(
() => props.invite.workspace ? "Request to join" : "Accept"
);
const declineMessage = computed(() => props.invite.workspace ? "Dismiss" : "Decline");
const onLoginSignupClick = async () => {
postAuthRedirect.setCurrentRoute();
const query = {
token: token.value || void 0
};
if (isForRegisteredUser.value) {
await goToLogin({
query
});
} else {
await goToSignUp({ query });
}
};
const onDeclineClick = (token2) => {
emit("processed", false, token2);
if (props.invite.workspace) {
mixpanel.track("Invite Action", {
accepted: false,
type: "workspace invite",
// eslint-disable-next-line camelcase
workspace_id: props.invite.workspace.id
});
}
};
const onAcceptClick = (token2) => {
emit("processed", true, token2);
if (props.invite.workspace) {
mixpanel.track("Invite Action", {
accepted: true,
type: "workspace invite",
// eslint-disable-next-line camelcase
workspace_id: props.invite.workspace.id
});
}
};
const __returned__ = { emit, props, route, isLoggedIn, postAuthRedirect, goToLogin, goToSignUp, mixpanel, token, mainClasses, mainInfoBlockClasses, avatarSize, buttonSize, isForRegisteredUser, acceptMessage, declineMessage, onLoginSignupClick, onDeclineClick, onAcceptClick };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
import { resolveComponent as _resolveComponent, openBlock as _openBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, normalizeClass as _normalizeClass, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, withModifiers as _withModifiers } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _hoisted_1 = {
class: "text-foreground",
"data-v-inspector": "components/invite/Banner.vue:10:7"
};
const _hoisted_2 = {
class: "flex space-x-2 w-full sm:w-auto shrink-0",
"data-v-inspector": "components/invite/Banner.vue:14:5"
};
const _hoisted_3 = {
key: 0,
class: "flex items-center justify-end w-full space-x-2",
"data-v-inspector": "components/invite/Banner.vue:15:7"
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_UserAvatar = __nuxt_component_0;
const _component_WorkspaceAvatar = __nuxt_component_1;
const _component_FormButton = __nuxt_component_2;
return _openBlock(), _createElementBlock(
"div",
{
class: _normalizeClass($setup.mainClasses),
"data-v-inspector": "components/invite/Banner.vue:2:3"
},
[
_createElementVNode(
"div",
{
class: _normalizeClass($setup.mainInfoBlockClasses),
"data-v-inspector": "components/invite/Banner.vue:3:5"
},
[
$props.invite.invitedBy ? (_openBlock(), _createBlock(_component_UserAvatar, {
key: 0,
user: $props.invite.invitedBy,
size: $setup.avatarSize,
"data-v-inspector": "components/invite/Banner.vue:4:7"
}, null, 8, ["user", "size"])) : _createCommentVNode("v-if", true),
$props.invite.workspace ? (_openBlock(), _createBlock(_component_WorkspaceAvatar, {
key: 1,
logo: $props.invite.workspace.logo,
name: $props.invite.workspace.name,
"data-v-inspector": "components/invite/Banner.vue:5:7"
}, null, 8, ["logo", "name"])) : _createCommentVNode("v-if", true),
_createElementVNode("div", _hoisted_1, [
_renderSlot(_ctx.$slots, "message")
])
],
2
/* CLASS */
),
_createElementVNode("div", _hoisted_2, [
$setup.isLoggedIn ? (_openBlock(), _createElementBlock("div", _hoisted_3, [
_createVNode(_component_FormButton, {
size: $setup.buttonSize,
color: "subtle",
text: "",
"full-width": $props.block,
disabled: $props.loading,
onClick: _cache[0] || (_cache[0] = ($event) => $setup.onDeclineClick($setup.token)),
"data-v-inspector": "components/invite/Banner.vue:16:9"
}, {
default: _withCtx(() => [
_createTextVNode(
_toDisplayString($setup.declineMessage),
1
/* TEXT */
)
]),
_: 1
/* STABLE */
}, 8, ["size", "full-width", "disabled"]),
_createVNode(_component_FormButton, {
"full-width": $props.block,
size: $setup.buttonSize,
color: "outline",
class: "px-4",
disabled: $props.loading,
onClick: _cache[1] || (_cache[1] = ($event) => $setup.onAcceptClick($setup.token)),
"data-v-inspector": "components/invite/Banner.vue:26:9"
}, {
default: _withCtx(() => [
_createTextVNode(
_toDisplayString($setup.acceptMessage),
1
/* TEXT */
)
]),
_: 1
/* STABLE */
}, 8, ["full-width", "size", "disabled"])
])) : (_openBlock(), _createBlock(_component_FormButton, {
key: 1,
size: $setup.buttonSize,
color: "outline",
"full-width": "",
disabled: $props.loading,
onClick: _withModifiers($setup.onLoginSignupClick, ["stop", "prevent"]),
"data-v-inspector": "components/invite/Banner.vue:38:9"
}, {
default: _withCtx(() => [
_createTextVNode(
_toDisplayString($setup.isForRegisteredUser ? "Log in" : "Sign up"),
1
/* TEXT */
)
]),
_: 1
/* STABLE */
}, 8, ["size", "disabled"]))
])
],
2
/* CLASS */
);
}
_sfc_main.__hmrId = "a74e75a4";
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/invite/Banner.vue"]]);
//# sourceMappingURL=data:application/json;base64,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QTs0QkFFMUQsTUFBZ0Q7QUFBQTsrQkFBN0MsNkJBQW1CO0FBQUE7QUFBQTtBQUFBO0FBQUEiLCJuYW1lcyI6WyJ0b2tlbiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJCYW5uZXIudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cclxuICA8ZGl2IDpjbGFzcz1cIm1haW5DbGFzc2VzXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW52aXRlL0Jhbm5lci52dWU6MjozXCI+XHJcbiAgICA8ZGl2IDpjbGFzcz1cIm1haW5JbmZvQmxvY2tDbGFzc2VzXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW52aXRlL0Jhbm5lci52dWU6Mzo1XCI+XHJcbiAgICAgIDxVc2VyQXZhdGFyIHYtaWY9XCJpbnZpdGUuaW52aXRlZEJ5XCIgOnVzZXI9XCJpbnZpdGUuaW52aXRlZEJ5XCIgOnNpemU9XCJhdmF0YXJTaXplXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW52aXRlL0Jhbm5lci52dWU6NDo3XCIgLz5cclxuICAgICAgPFdvcmtzcGFjZUF2YXRhclxyXG4gICAgICAgIHYtaWY9XCJpbnZpdGUud29ya3NwYWNlXCJcclxuICAgICAgICA6bG9nbz1cImludml0ZS53b3Jrc3BhY2UubG9nb1wiXHJcbiAgICAgICAgOm5hbWU9XCJpbnZpdGUud29ya3NwYWNlLm5hbWVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9pbnZpdGUvQmFubmVyLnZ1ZTo1OjdcIlxyXG4gICAgICAvPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1mb3JlZ3JvdW5kXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW52aXRlL0Jhbm5lci52dWU6MTA6N1wiPlxyXG4gICAgICAgIDxzbG90IG5hbWU9XCJtZXNzYWdlXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IHNwYWNlLXgtMiB3LWZ1bGwgc206dy1hdXRvIHNocmluay0wXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW52aXRlL0Jhbm5lci52dWU6MTQ6NVwiPlxyXG4gICAgICA8ZGl2IHYtaWY9XCJpc0xvZ2dlZEluXCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCB3LWZ1bGwgc3BhY2UteC0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW52aXRlL0Jhbm5lci52dWU6MTU6N1wiPlxyXG4gICAgICAgIDxGb3JtQnV0dG9uXHJcbiAgICAgICAgICA6c2l6ZT1cImJ1dHRvblNpemVcIlxyXG4gICAgICAgICAgY29sb3I9XCJzdWJ0bGVcIlxyXG4gICAgICAgICAgdGV4dFxyXG4gICAgICAgICAgOmZ1bGwtd2lkdGg9XCJibG9ja1wiXHJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJsb2FkaW5nXCJcclxuICAgICAgICAgIEBjbGljaz1cIm9uRGVjbGluZUNsaWNrKHRva2VuKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2ludml0ZS9CYW5uZXIudnVlOjE2OjlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGRlY2xpbmVNZXNzYWdlIH19XHJcbiAgICAgICAgPC9Gb3JtQnV0dG9uPlxyXG4gICAgICAgIDxGb3JtQnV0dG9uXHJcbiAgICAgICAgICA6ZnVsbC13aWR0aD1cImJsb2NrXCJcclxuICAgICAgICAgIDpzaXplPVwiYnV0dG9uU2l6ZVwiXHJcbiAgICAgICAgICBjb2xvcj1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgY2xhc3M9XCJweC00XCJcclxuICAgICAgICAgIDpkaXNhYmxlZD1cImxvYWRpbmdcIlxyXG4gICAgICAgICAgQGNsaWNrPVwib25BY2NlcHRDbGljayh0b2tlbilcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9pbnZpdGUvQmFubmVyLnZ1ZToyNjo5XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBhY2NlcHRNZXNzYWdlIH19XHJcbiAgICAgICAgPC9Gb3JtQnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgOnNpemU9XCJidXR0b25TaXplXCJcclxuICAgICAgICAgIGNvbG9yPVwib3V0bGluZVwiXHJcbiAgICAgICAgICBmdWxsLXdpZHRoXHJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJsb2FkaW5nXCJcclxuICAgICAgICAgIEBjbGljay5zdG9wLnByZXZlbnQ9XCJvbkxvZ2luU2lnbnVwQ2xpY2tcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9pbnZpdGUvQmFubmVyLnZ1ZTozODo5XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBpc0ZvclJlZ2lzdGVyZWRVc2VyID8gJ0xvZyBpbicgOiAnU2lnbiB1cCcgfX1cclxuICAgICAgICA8L0Zvcm1CdXR0b24+XHJcbiAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHR5cGUgeyBNYXliZU51bGxPclVuZGVmaW5lZCwgT3B0aW9uYWwgfSBmcm9tICdAc3BlY2tsZS9zaGFyZWQnXHJcbmltcG9ydCB0eXBlIHsgQXZhdGFyVXNlclR5cGUgfSBmcm9tICd+L2xpYi91c2VyL2NvbXBvc2FibGVzL2F2YXRhcidcclxuaW1wb3J0IHsgdXNlUG9zdEF1dGhSZWRpcmVjdCB9IGZyb20gJ34vbGliL2F1dGgvY29tcG9zYWJsZXMvcG9zdEF1dGhSZWRpcmVjdCdcclxuaW1wb3J0IHtcclxuICB1c2VOYXZpZ2F0ZVRvTG9naW4sXHJcbiAgdXNlTmF2aWdhdGVUb1JlZ2lzdHJhdGlvblxyXG59IGZyb20gJ34vbGliL2NvbW1vbi9oZWxwZXJzL3JvdXRlJ1xyXG5pbXBvcnQgeyB1c2VNaXhwYW5lbCB9IGZyb20gJ35+L2xpYi9jb3JlL2NvbXBvc2FibGVzL21wJ1xyXG5cclxuY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzPHtcclxuICBwcm9jZXNzZWQ6IFthY2NlcHQ6IGJvb2xlYW4sIHRva2VuOiBPcHRpb25hbDxzdHJpbmc+XVxyXG59PigpXHJcblxyXG50eXBlIEdlbmVyaWNJbnZpdGVJdGVtID0ge1xyXG4gIGludml0ZWRCeT86IEF2YXRhclVzZXJUeXBlXHJcbiAgd29ya3NwYWNlPzoge1xyXG4gICAgaWQ6IHN0cmluZ1xyXG4gICAgbG9nbz86IE1heWJlTnVsbE9yVW5kZWZpbmVkPHN0cmluZz5cclxuICAgIG5hbWU6IHN0cmluZ1xyXG4gIH1cclxuICB1c2VyPzogTWF5YmVOdWxsT3JVbmRlZmluZWQ8e1xyXG4gICAgaWQ6IHN0cmluZ1xyXG4gIH0+XHJcbiAgdG9rZW4/OiBNYXliZU51bGxPclVuZGVmaW5lZDxzdHJpbmc+XHJcbn1cclxuXHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8e1xyXG4gIGludml0ZTogR2VuZXJpY0ludml0ZUl0ZW1cclxuICAvKipcclxuICAgKiBSZW5kZXIgdGhpcyBhcyBhIGJpZyBibG9jaywgaW5zdGVhZCBvZiBhIHNtYWxsIHJvdy4gVXNlZCBpbiBmdWxsLXBhZ2UgcHJvamVjdCBhY2Nlc3MgZXJyb3IgcGFnZXMuXHJcbiAgICovXHJcbiAgYmxvY2s/OiBib29sZWFuXHJcbiAgbG9hZGluZz86IGJvb2xlYW5cclxufT4oKVxyXG5cclxuY29uc3Qgcm91dGUgPSB1c2VSb3V0ZSgpXHJcbmNvbnN0IHsgaXNMb2dnZWRJbiB9ID0gdXNlQWN0aXZlVXNlcigpXHJcbmNvbnN0IHBvc3RBdXRoUmVkaXJlY3QgPSB1c2VQb3N0QXV0aFJlZGlyZWN0KClcclxuY29uc3QgZ29Ub0xvZ2luID0gdXNlTmF2aWdhdGVUb0xvZ2luKClcclxuY29uc3QgZ29Ub1NpZ25VcCA9IHVzZU5hdmlnYXRlVG9SZWdpc3RyYXRpb24oKVxyXG5jb25zdCBtaXhwYW5lbCA9IHVzZU1peHBhbmVsKClcclxuXHJcbmNvbnN0IHRva2VuID0gY29tcHV0ZWQoXHJcbiAgKCkgPT4gcHJvcHMuaW52aXRlPy50b2tlbiB8fCAocm91dGUucXVlcnkudG9rZW4gYXMgT3B0aW9uYWw8c3RyaW5nPilcclxuKVxyXG5jb25zdCBtYWluQ2xhc3NlcyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICBjb25zdCBjbGFzc1BhcnRzID0gW1xyXG4gICAgJ2ZsZXggZmxleC1jb2wgc3BhY2UteS00IHB4LTQgcHktNSB0cmFuc2l0aW9uIGJnLWZvdW5kYXRpb24gYm9yZGVyLXggYm9yZGVyLWIgYm9yZGVyLW91dGxpbmUtMiBmaXJzdDpib3JkZXItdCBmaXJzdDpyb3VuZGVkLXQtbGcgbGFzdDpyb3VuZGVkLWItbGcnXHJcbiAgXVxyXG5cclxuICBpZiAocHJvcHMuYmxvY2spIHtcclxuICAgIGNsYXNzUGFydHMucHVzaCgnJylcclxuICB9IGVsc2Uge1xyXG4gICAgY2xhc3NQYXJ0cy5wdXNoKCdzbTpzcGFjZS15LTAgc206c3BhY2UteC0yIHNtOml0ZW1zLWNlbnRlciBzbTpmbGV4LXJvdyBzbTpweS0yJylcclxuICB9XHJcblxyXG4gIHJldHVybiBjbGFzc1BhcnRzLmpvaW4oJyAnKVxyXG59KVxyXG5cclxuY29uc3QgbWFpbkluZm9CbG9ja0NsYXNzZXMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgY2xhc3NQYXJ0cyA9IFsnZmxleCBncm93IGl0ZW1zLWNlbnRlciddXHJcblxyXG4gIGlmIChwcm9wcy5ibG9jaykge1xyXG4gICAgY2xhc3NQYXJ0cy5wdXNoKCdmbGV4LWNvbCBzcGFjZS15LTInKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjbGFzc1BhcnRzLnB1c2goJ2ZsZXgtcm93IHNwYWNlLXgtMiB0ZXh0LWJvZHkteHMnKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNsYXNzUGFydHMuam9pbignICcpXHJcbn0pXHJcblxyXG5jb25zdCBhdmF0YXJTaXplID0gY29tcHV0ZWQoKCkgPT4gKHByb3BzLmJsb2NrID8gJ3h4bCcgOiAnYmFzZScpKVxyXG5jb25zdCBidXR0b25TaXplID0gY29tcHV0ZWQoKCkgPT4gKHByb3BzLmJsb2NrID8gJ2xnJyA6ICdzbScpKVxyXG5jb25zdCBpc0ZvclJlZ2lzdGVyZWRVc2VyID0gY29tcHV0ZWQoKCkgPT4gISFwcm9wcy5pbnZpdGUudXNlcj8uaWQpXHJcbmNvbnN0IGFjY2VwdE1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PlxyXG4gIHByb3BzLmludml0ZS53b3Jrc3BhY2UgPyAnUmVxdWVzdCB0byBqb2luJyA6ICdBY2NlcHQnXHJcbilcclxuY29uc3QgZGVjbGluZU1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiAocHJvcHMuaW52aXRlLndvcmtzcGFjZSA/ICdEaXNtaXNzJyA6ICdEZWNsaW5lJykpXHJcblxyXG5jb25zdCBvbkxvZ2luU2lnbnVwQ2xpY2sgPSBhc3luYyAoKSA9PiB7XHJcbiAgcG9zdEF1dGhSZWRpcmVjdC5zZXRDdXJyZW50Um91dGUoKVxyXG4gIGNvbnN0IHF1ZXJ5ID0ge1xyXG4gICAgdG9rZW46IHRva2VuLnZhbHVlIHx8IHVuZGVmaW5lZFxyXG4gIH1cclxuXHJcbiAgaWYgKGlzRm9yUmVnaXN0ZXJlZFVzZXIudmFsdWUpIHtcclxuICAgIGF3YWl0IGdvVG9Mb2dpbih7XHJcbiAgICAgIHF1ZXJ5XHJcbiAgICB9KVxyXG4gIH0gZWxzZSB7XHJcbiAgICBhd2FpdCBnb1RvU2lnblVwKHsgcXVlcnkgfSlcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IG9uRGVjbGluZUNsaWNrID0gKHRva2VuPzogc3RyaW5nKSA9PiB7XHJcbiAgZW1pdCgncHJvY2Vzc2VkJywgZmFsc2UsIHRva2VuKVxyXG4gIGlmIChwcm9wcy5pbnZpdGUud29ya3NwYWNlKSB7XHJcbiAgICBtaXhwYW5lbC50cmFjaygnSW52aXRlIEFjdGlvbicsIHtcclxuICAgICAgYWNjZXB0ZWQ6IGZhbHNlLFxyXG4gICAgICB0eXBlOiAnd29ya3NwYWNlIGludml0ZScsXHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcclxuICAgICAgd29ya3NwYWNlX2lkOiBwcm9wcy5pbnZpdGUud29ya3NwYWNlLmlkXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuY29uc3Qgb25BY2NlcHRDbGljayA9ICh0b2tlbj86IHN0cmluZykgPT4ge1xyXG4gIGVtaXQoJ3Byb2Nlc3NlZCcsIHRydWUsIHRva2VuKVxyXG4gIGlmIChwcm9wcy5pbnZpdGUud29ya3NwYWNlKSB7XHJcbiAgICBtaXhwYW5lbC50cmFjaygnSW52aXRlIEFjdGlvbicsIHtcclxuICAgICAgYWNjZXB0ZWQ6IHRydWUsXHJcbiAgICAgIHR5cGU6ICd3b3Jrc3BhY2UgaW52aXRlJyxcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxyXG4gICAgICB3b3Jrc3BhY2VfaWQ6IHByb3BzLmludml0ZS53b3Jrc3BhY2UuaWRcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy9pbnZpdGUvQmFubmVyLnZ1ZSJ9