__vite_ssr_exportName__("GUEST_SHARE_TTL_MS", () => { try { return GUEST_SHARE_TTL_MS } catch {} });
__vite_ssr_exportName__("GUEST_MESSAGE_MAX_LENGTH", () => { try { return GUEST_MESSAGE_MAX_LENGTH } catch {} });
__vite_ssr_exportName__("GUEST_NAME_MAX_LENGTH", () => { try { return GUEST_NAME_MAX_LENGTH } catch {} });
__vite_ssr_exportName__("GUEST_PENDING_MESSAGE_LIMIT", () => { try { return GUEST_PENDING_MESSAGE_LIMIT } catch {} });
__vite_ssr_exportName__("GUEST_RESOLVED_MESSAGE_LIMIT", () => { try { return GUEST_RESOLVED_MESSAGE_LIMIT } catch {} });
__vite_ssr_exportName__("GUEST_MESSAGE_MAX_ATTACHMENTS", () => { try { return GUEST_MESSAGE_MAX_ATTACHMENTS } catch {} });
__vite_ssr_exportName__("GUEST_MESSAGE_MAX_ATTACHMENT_BYTES", () => { try { return GUEST_MESSAGE_MAX_ATTACHMENT_BYTES } catch {} });
__vite_ssr_exportName__("GUEST_PENDING_ATTACHMENT_BYTES_LIMIT", () => { try { return GUEST_PENDING_ATTACHMENT_BYTES_LIMIT } catch {} });
__vite_ssr_exportName__("ThreadGuestMessageStatus", () => { try { return ThreadGuestMessageStatus } catch {} });
__vite_ssr_exportName__("ThreadGuestMessage", () => { try { return ThreadGuestMessage } catch {} });
__vite_ssr_exportName__("ThreadGuestShare", () => { try { return ThreadGuestShare } catch {} });
__vite_ssr_exportName__("pendingGuestMessageCount", () => { try { return pendingGuestMessageCount } catch {} });
__vite_ssr_exportName__("GuestShareCreateInput", () => { try { return GuestShareCreateInput } catch {} });
__vite_ssr_exportName__("GuestShareCreateResult", () => { try { return GuestShareCreateResult } catch {} });
__vite_ssr_exportName__("GuestShareCreateError", () => { try { return GuestShareCreateError } catch {} });
__vite_ssr_exportName__("GuestRedeemRequest", () => { try { return GuestRedeemRequest } catch {} });
__vite_ssr_exportName__("GuestSubmitRequest", () => { try { return GuestSubmitRequest } catch {} });
__vite_ssr_exportName__("GUEST_ROUTE_PREFIX", () => { try { return GUEST_ROUTE_PREFIX } catch {} });
__vite_ssr_exportName__("GUEST_SHARE_PARAM", () => { try { return GUEST_SHARE_PARAM } catch {} });
__vite_ssr_exportName__("guestSessionCookieName", () => { try { return guestSessionCookieName } catch {} });
__vite_ssr_exportName__("GUEST_RENDER_ROUTE", () => { try { return GUEST_RENDER_ROUTE } catch {} });
__vite_ssr_exportName__("GUEST_ITEM_ROUTE", () => { try { return GUEST_ITEM_ROUTE } catch {} });
__vite_ssr_exportName__("GUEST_COMMAND_OUTPUT_ROUTE", () => { try { return GUEST_COMMAND_OUTPUT_ROUTE } catch {} });
__vite_ssr_exportName__("GUEST_ATTACHMENT_ROUTE", () => { try { return GUEST_ATTACHMENT_ROUTE } catch {} });
const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/Schema.js");
const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/chatAttachment.ts", {"importedNames":["ChatAttachment"]});
const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/baseSchemas.ts", {"importedNames":["GuestMessageId","GuestShareId","IsoDateTime","ThreadId","TrimmedNonEmptyString","TrimmedString"]});



/**
* A guest share lets one unauthenticated browser watch a thread over T3 Connect and propose
* messages the owner must send or dismiss. The thread projection holds this public state; the
* credentials are derived from the share id with a server key and never stored.
*/
const GUEST_SHARE_TTL_MS = 24 * 60 * 60 * 1e3;
const GUEST_MESSAGE_MAX_LENGTH = 4e3;
const GUEST_NAME_MAX_LENGTH = 40;
const GUEST_PENDING_MESSAGE_LIMIT = 3;
/** Resolved messages kept so the guest can see what happened to what they sent. */
const GUEST_RESOLVED_MESSAGE_LIMIT = 20;
/** Files a guest can attach to one message, and their total size. */
const GUEST_MESSAGE_MAX_ATTACHMENTS = 4;
const GUEST_MESSAGE_MAX_ATTACHMENT_BYTES = 10 * 1024 * 1024;
/** Total size of the files in a share's waiting messages, so a guest cannot fill the disk. */
const GUEST_PENDING_ATTACHMENT_BYTES_LIMIT = 20 * 1024 * 1024;
const ThreadGuestMessageStatus = __vite_ssr_import_0__.Literals([
	"pending",
	"sent",
	"dismissed"
]);
const ThreadGuestMessage = __vite_ssr_import_0__.Struct({
	id: __vite_ssr_import_2__.GuestMessageId,
	text: __vite_ssr_import_0__.String,
	status: ThreadGuestMessageStatus,
	submittedAt: __vite_ssr_import_2__.IsoDateTime,
	/** The thread's attachments, deleted if the message is dismissed. Absent on older messages. */
	attachments: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Array((0,__vite_ssr_import_1__.ChatAttachment)))
});
const ThreadGuestShare = __vite_ssr_import_0__.Struct({
	id: __vite_ssr_import_2__.GuestShareId,
	/** The T3 Connect tunnel hostname the link points at. Guest routes require it to still serve. */
	host: __vite_ssr_import_2__.TrimmedNonEmptyString,
	createdAt: __vite_ssr_import_2__.IsoDateTime,
	expiresAt: __vite_ssr_import_2__.IsoDateTime,
	/** Set once, when the guest redeems the link. */
	guestName: __vite_ssr_import_0__.NullOr((0,__vite_ssr_import_2__.TrimmedNonEmptyString)),
	messages: __vite_ssr_import_0__.Array(ThreadGuestMessage)
});
const pendingGuestMessageCount = (share) => share?.messages.filter((message) => message.status === "pending").length ?? 0;
const GuestShareCreateInput = __vite_ssr_import_0__.Struct({ threadId: __vite_ssr_import_2__.ThreadId });
const GuestShareCreateResult = __vite_ssr_import_0__.Struct({
	url: __vite_ssr_import_2__.TrimmedNonEmptyString,
	share: ThreadGuestShare
});
const GUEST_SHARE_CREATE_MESSAGES = {
	disabled: "Guest links are off. Turn them on in Settings > Beta.",
	connect_unavailable: "Guest links need a running T3 Connect tunnel.",
	thread_unavailable: "This thread cannot be shared.",
	read_failed: "Failed to read the shared thread.",
	changed: "The guest link changed while it was being created."
};
class GuestShareCreateError extends __vite_ssr_import_0__.TaggedError()("GuestShareCreateError", { reason: __vite_ssr_import_0__.Literals([
	"disabled",
	"connect_unavailable",
	"thread_unavailable",
	"read_failed",
	"changed"
]) }) {
	get message() {
		return GUEST_SHARE_CREATE_MESSAGES[this.reason];
	}
};
// The name lands in the agent's attribution line, so it must stay one plain line, and the owner
// reads it, so direction overrides cannot make it look like another name.
const NAME_BREAKING_CHARACTER = /[\p{Cc}\p{Zl}\p{Zp}\u061C\u200E\u200F\u202A-\u202E\u2066-\u2069]/u;
const GuestRedeemRequest = __vite_ssr_import_0__.Struct({
	credential: __vite_ssr_import_2__.TrimmedNonEmptyString,
	name: __vite_ssr_import_2__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(GUEST_NAME_MAX_LENGTH), __vite_ssr_import_0__.makeFilter((name) => !NAME_BREAKING_CHARACTER.test(name), { description: "a single line of text" }))
});
/**
* The fields of a guest message. The page posts them as multipart form data, with each file as a
* `file` part; text can be empty when files are attached.
*/
const GuestSubmitRequest = __vite_ssr_import_0__.Struct({
	/** The share the page shows, so a message from a page for a replaced link is refused instead
	of reaching the new one. */
	shareId: __vite_ssr_import_2__.GuestShareId,
	text: __vite_ssr_import_2__.TrimmedString.check(__vite_ssr_import_0__.isMaxLength(GUEST_MESSAGE_MAX_LENGTH))
});
const GUEST_ROUTE_PREFIX = "/api/guest";
/** The guest page and guest routes name the share they mean with this query parameter. */
const GUEST_SHARE_PARAM = "share";
/**
* One session cookie per share, so a guest keeps every link they joined on a host, and a page
* for one share never acts with another share's session.
*/
const guestSessionCookieName = (shareId) => `t3_guest_${shareId}`;
/** Serves one HTML render in the shared thread: `?share=<share id>&item=<turn item id>`. */
const GUEST_RENDER_ROUTE = `${GUEST_ROUTE_PREFIX}/render`;
/** One item of the shared thread, as an expanded row loads it: `?share=<share id>&item=<id>`. */
const GUEST_ITEM_ROUTE = `${GUEST_ROUTE_PREFIX}/item`;
/** Server-sent output frames of one command in the shared thread: `?share=<share id>&item=<id>`. */
const GUEST_COMMAND_OUTPUT_ROUTE = `${GUEST_ROUTE_PREFIX}/command-output`;
/**
* A file in the shared thread or a guest's waiting message: `?share=<share id>&id=<attachment id>`.
* Images load inline; other files download.
*/
const GUEST_ATTACHMENT_ROUTE = `${GUEST_ROUTE_PREFIX}/attachment`;
//# sourceMappingSource=vite-generated
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFFQTtBQUNBOzs7Ozs7Ozs7QUFjTyxNQUFNLHFCQUFxQixLQUFLLEtBQUssS0FBSztBQUMxQyxNQUFNLDJCQUEyQjtBQUNqQyxNQUFNLHdCQUF3QjtBQUM5QixNQUFNLDhCQUE4Qjs7QUFFcEMsTUFBTSwrQkFBK0I7O0FBRXJDLE1BQU0sZ0NBQWdDO0FBQ3RDLE1BQU0scUNBQXFDLEtBQUssT0FBTzs7QUFFdkQsTUFBTSx1Q0FBdUMsS0FBSyxPQUFPO0FBRXpELE1BQU0sMkJBQTJCLHNCQUFPLFNBQVM7Q0FBQztDQUFXO0NBQVE7QUFBVyxDQUFDO0FBR2pGLE1BQU0scUJBQXFCLHNCQUFPLE9BQU87Q0FDOUMsSUFBSTtDQUNKLE1BQU0sc0JBQU87Q0FDYixRQUFRO0NBQ1IsYUFBYTs7Q0FFYixhQUFhLHNCQUFPLFNBQVMsc0JBQU8sU0FBTSxxQ0FBYyxDQUFDO0FBQzNELENBQUM7QUFHTSxNQUFNLG1CQUFtQixzQkFBTyxPQUFPO0NBQzVDLElBQUk7O0NBRUosTUFBTTtDQUNOLFdBQVc7Q0FDWCxXQUFXOztDQUVYLFdBQVcsc0JBQU8sVUFBTyw0Q0FBcUI7Q0FDOUMsVUFBVSxzQkFBTyxNQUFNLGtCQUFrQjtBQUMzQyxDQUFDO0FBR00sTUFBTSw0QkFBNEIsVUFDdkMsT0FBTyxTQUFTLFFBQVEsWUFBWSxRQUFRLFdBQVcsU0FBUyxDQUFDLENBQUMsVUFBVTtBQUV2RSxNQUFNLHdCQUF3QixzQkFBTyxPQUFPLEVBQUUsVUFBVSwrQkFBUyxDQUFDO0FBR2xFLE1BQU0seUJBQXlCLHNCQUFPLE9BQU87Q0FDbEQsS0FBSztDQUNMLE9BQU87QUFDVCxDQUFDO0FBR0QsTUFBTSw4QkFBOEI7Q0FDbEMsVUFBVTtDQUNWLHFCQUFxQjtDQUNyQixvQkFBb0I7Q0FDcEIsYUFBYTtDQUNiLFNBQVM7QUFDWDtBQUVPLE1BQU0sOEJBQThCLHNCQUFPLFlBQW1DLENBQUMsQ0FDcEYseUJBQ0EsRUFDRSxRQUFRLHNCQUFPLFNBQVM7Q0FDdEI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNGLENBQUMsRUFDSCxDQUNGLENBQUMsQ0FBQztDQUNBLElBQWEsVUFBa0I7RUFDN0IsT0FBTyw0QkFBNEIsS0FBSztDQUMxQztBQUNGOzs7QUFJQSxNQUFNLDBCQUEwQjtBQUV6QixNQUFNLHFCQUFxQixzQkFBTyxPQUFPO0NBQzlDLFlBQVk7Q0FDWixNQUFNLDRDQUFzQixNQUMxQixzQkFBTyxZQUFZLHFCQUFxQixHQUN4QyxzQkFBTyxZQUFZLFNBQVMsQ0FBQyx3QkFBd0IsS0FBSyxJQUFJLEdBQUcsRUFDL0QsYUFBYSx3QkFDZixDQUFDLENBQ0g7QUFDRixDQUFDOzs7OztBQU9NLE1BQU0scUJBQXFCLHNCQUFPLE9BQU87OztDQUc5QyxTQUFTO0NBQ1QsTUFBTSxvQ0FBYyxNQUFNLHNCQUFPLFlBQVksd0JBQXdCLENBQUM7QUFDeEUsQ0FBQztBQUdNLE1BQU0scUJBQXFCOztBQUUzQixNQUFNLG9CQUFvQjs7Ozs7QUFNMUIsTUFBTSwwQkFBMEIsWUFBb0IsWUFBWTs7QUFFaEUsTUFBTSxxQkFBcUIsR0FBRyxtQkFBbUI7O0FBRWpELE1BQU0sbUJBQW1CLEdBQUcsbUJBQW1COztBQUUvQyxNQUFNLDZCQUE2QixHQUFHLG1CQUFtQjs7Ozs7QUFLekQsTUFBTSx5QkFBeUIsR0FBRyxtQkFBbUIiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImd1ZXN0U2hhcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgU2NoZW1hIGZyb20gXCJlZmZlY3QvU2NoZW1hXCI7XG5cbmltcG9ydCB7IENoYXRBdHRhY2htZW50IH0gZnJvbSBcIi4vY2hhdEF0dGFjaG1lbnQudHNcIjtcbmltcG9ydCB7XG4gIEd1ZXN0TWVzc2FnZUlkLFxuICBHdWVzdFNoYXJlSWQsXG4gIElzb0RhdGVUaW1lLFxuICBUaHJlYWRJZCxcbiAgVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBUcmltbWVkU3RyaW5nLFxufSBmcm9tIFwiLi9iYXNlU2NoZW1hcy50c1wiO1xuXG4vKipcbiAqIEEgZ3Vlc3Qgc2hhcmUgbGV0cyBvbmUgdW5hdXRoZW50aWNhdGVkIGJyb3dzZXIgd2F0Y2ggYSB0aHJlYWQgb3ZlciBUMyBDb25uZWN0IGFuZCBwcm9wb3NlXG4gKiBtZXNzYWdlcyB0aGUgb3duZXIgbXVzdCBzZW5kIG9yIGRpc21pc3MuIFRoZSB0aHJlYWQgcHJvamVjdGlvbiBob2xkcyB0aGlzIHB1YmxpYyBzdGF0ZTsgdGhlXG4gKiBjcmVkZW50aWFscyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBzaGFyZSBpZCB3aXRoIGEgc2VydmVyIGtleSBhbmQgbmV2ZXIgc3RvcmVkLlxuICovXG5leHBvcnQgY29uc3QgR1VFU1RfU0hBUkVfVFRMX01TID0gMjQgKiA2MCAqIDYwICogMTAwMDtcbmV4cG9ydCBjb25zdCBHVUVTVF9NRVNTQUdFX01BWF9MRU5HVEggPSA0XzAwMDtcbmV4cG9ydCBjb25zdCBHVUVTVF9OQU1FX01BWF9MRU5HVEggPSA0MDtcbmV4cG9ydCBjb25zdCBHVUVTVF9QRU5ESU5HX01FU1NBR0VfTElNSVQgPSAzO1xuLyoqIFJlc29sdmVkIG1lc3NhZ2VzIGtlcHQgc28gdGhlIGd1ZXN0IGNhbiBzZWUgd2hhdCBoYXBwZW5lZCB0byB3aGF0IHRoZXkgc2VudC4gKi9cbmV4cG9ydCBjb25zdCBHVUVTVF9SRVNPTFZFRF9NRVNTQUdFX0xJTUlUID0gMjA7XG4vKiogRmlsZXMgYSBndWVzdCBjYW4gYXR0YWNoIHRvIG9uZSBtZXNzYWdlLCBhbmQgdGhlaXIgdG90YWwgc2l6ZS4gKi9cbmV4cG9ydCBjb25zdCBHVUVTVF9NRVNTQUdFX01BWF9BVFRBQ0hNRU5UUyA9IDQ7XG5leHBvcnQgY29uc3QgR1VFU1RfTUVTU0FHRV9NQVhfQVRUQUNITUVOVF9CWVRFUyA9IDEwICogMTAyNCAqIDEwMjQ7XG4vKiogVG90YWwgc2l6ZSBvZiB0aGUgZmlsZXMgaW4gYSBzaGFyZSdzIHdhaXRpbmcgbWVzc2FnZXMsIHNvIGEgZ3Vlc3QgY2Fubm90IGZpbGwgdGhlIGRpc2suICovXG5leHBvcnQgY29uc3QgR1VFU1RfUEVORElOR19BVFRBQ0hNRU5UX0JZVEVTX0xJTUlUID0gMjAgKiAxMDI0ICogMTAyNDtcblxuZXhwb3J0IGNvbnN0IFRocmVhZEd1ZXN0TWVzc2FnZVN0YXR1cyA9IFNjaGVtYS5MaXRlcmFscyhbXCJwZW5kaW5nXCIsIFwic2VudFwiLCBcImRpc21pc3NlZFwiXSk7XG5leHBvcnQgdHlwZSBUaHJlYWRHdWVzdE1lc3NhZ2VTdGF0dXMgPSB0eXBlb2YgVGhyZWFkR3Vlc3RNZXNzYWdlU3RhdHVzLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBUaHJlYWRHdWVzdE1lc3NhZ2UgPSBTY2hlbWEuU3RydWN0KHtcbiAgaWQ6IEd1ZXN0TWVzc2FnZUlkLFxuICB0ZXh0OiBTY2hlbWEuU3RyaW5nLFxuICBzdGF0dXM6IFRocmVhZEd1ZXN0TWVzc2FnZVN0YXR1cyxcbiAgc3VibWl0dGVkQXQ6IElzb0RhdGVUaW1lLFxuICAvKiogVGhlIHRocmVhZCdzIGF0dGFjaG1lbnRzLCBkZWxldGVkIGlmIHRoZSBtZXNzYWdlIGlzIGRpc21pc3NlZC4gQWJzZW50IG9uIG9sZGVyIG1lc3NhZ2VzLiAqL1xuICBhdHRhY2htZW50czogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5BcnJheShDaGF0QXR0YWNobWVudCkpLFxufSk7XG5leHBvcnQgdHlwZSBUaHJlYWRHdWVzdE1lc3NhZ2UgPSB0eXBlb2YgVGhyZWFkR3Vlc3RNZXNzYWdlLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBUaHJlYWRHdWVzdFNoYXJlID0gU2NoZW1hLlN0cnVjdCh7XG4gIGlkOiBHdWVzdFNoYXJlSWQsXG4gIC8qKiBUaGUgVDMgQ29ubmVjdCB0dW5uZWwgaG9zdG5hbWUgdGhlIGxpbmsgcG9pbnRzIGF0LiBHdWVzdCByb3V0ZXMgcmVxdWlyZSBpdCB0byBzdGlsbCBzZXJ2ZS4gKi9cbiAgaG9zdDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBjcmVhdGVkQXQ6IElzb0RhdGVUaW1lLFxuICBleHBpcmVzQXQ6IElzb0RhdGVUaW1lLFxuICAvKiogU2V0IG9uY2UsIHdoZW4gdGhlIGd1ZXN0IHJlZGVlbXMgdGhlIGxpbmsuICovXG4gIGd1ZXN0TmFtZTogU2NoZW1hLk51bGxPcihUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICBtZXNzYWdlczogU2NoZW1hLkFycmF5KFRocmVhZEd1ZXN0TWVzc2FnZSksXG59KTtcbmV4cG9ydCB0eXBlIFRocmVhZEd1ZXN0U2hhcmUgPSB0eXBlb2YgVGhyZWFkR3Vlc3RTaGFyZS5UeXBlO1xuXG5leHBvcnQgY29uc3QgcGVuZGluZ0d1ZXN0TWVzc2FnZUNvdW50ID0gKHNoYXJlOiBUaHJlYWRHdWVzdFNoYXJlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IG51bWJlciA9PlxuICBzaGFyZT8ubWVzc2FnZXMuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCIpLmxlbmd0aCA/PyAwO1xuXG5leHBvcnQgY29uc3QgR3Vlc3RTaGFyZUNyZWF0ZUlucHV0ID0gU2NoZW1hLlN0cnVjdCh7IHRocmVhZElkOiBUaHJlYWRJZCB9KTtcbmV4cG9ydCB0eXBlIEd1ZXN0U2hhcmVDcmVhdGVJbnB1dCA9IHR5cGVvZiBHdWVzdFNoYXJlQ3JlYXRlSW5wdXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IEd1ZXN0U2hhcmVDcmVhdGVSZXN1bHQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdXJsOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIHNoYXJlOiBUaHJlYWRHdWVzdFNoYXJlLFxufSk7XG5leHBvcnQgdHlwZSBHdWVzdFNoYXJlQ3JlYXRlUmVzdWx0ID0gdHlwZW9mIEd1ZXN0U2hhcmVDcmVhdGVSZXN1bHQuVHlwZTtcblxuY29uc3QgR1VFU1RfU0hBUkVfQ1JFQVRFX01FU1NBR0VTID0ge1xuICBkaXNhYmxlZDogXCJHdWVzdCBsaW5rcyBhcmUgb2ZmLiBUdXJuIHRoZW0gb24gaW4gU2V0dGluZ3MgPiBCZXRhLlwiLFxuICBjb25uZWN0X3VuYXZhaWxhYmxlOiBcIkd1ZXN0IGxpbmtzIG5lZWQgYSBydW5uaW5nIFQzIENvbm5lY3QgdHVubmVsLlwiLFxuICB0aHJlYWRfdW5hdmFpbGFibGU6IFwiVGhpcyB0aHJlYWQgY2Fubm90IGJlIHNoYXJlZC5cIixcbiAgcmVhZF9mYWlsZWQ6IFwiRmFpbGVkIHRvIHJlYWQgdGhlIHNoYXJlZCB0aHJlYWQuXCIsXG4gIGNoYW5nZWQ6IFwiVGhlIGd1ZXN0IGxpbmsgY2hhbmdlZCB3aGlsZSBpdCB3YXMgYmVpbmcgY3JlYXRlZC5cIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjbGFzcyBHdWVzdFNoYXJlQ3JlYXRlRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8R3Vlc3RTaGFyZUNyZWF0ZUVycm9yPigpKFxuICBcIkd1ZXN0U2hhcmVDcmVhdGVFcnJvclwiLFxuICB7XG4gICAgcmVhc29uOiBTY2hlbWEuTGl0ZXJhbHMoW1xuICAgICAgXCJkaXNhYmxlZFwiLFxuICAgICAgXCJjb25uZWN0X3VuYXZhaWxhYmxlXCIsXG4gICAgICBcInRocmVhZF91bmF2YWlsYWJsZVwiLFxuICAgICAgXCJyZWFkX2ZhaWxlZFwiLFxuICAgICAgXCJjaGFuZ2VkXCIsXG4gICAgXSksXG4gIH0sXG4pIHtcbiAgb3ZlcnJpZGUgZ2V0IG1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gR1VFU1RfU0hBUkVfQ1JFQVRFX01FU1NBR0VTW3RoaXMucmVhc29uXTtcbiAgfVxufVxuXG4vLyBUaGUgbmFtZSBsYW5kcyBpbiB0aGUgYWdlbnQncyBhdHRyaWJ1dGlvbiBsaW5lLCBzbyBpdCBtdXN0IHN0YXkgb25lIHBsYWluIGxpbmUsIGFuZCB0aGUgb3duZXJcbi8vIHJlYWRzIGl0LCBzbyBkaXJlY3Rpb24gb3ZlcnJpZGVzIGNhbm5vdCBtYWtlIGl0IGxvb2sgbGlrZSBhbm90aGVyIG5hbWUuXG5jb25zdCBOQU1FX0JSRUFLSU5HX0NIQVJBQ1RFUiA9IC9bXFxwe0NjfVxccHtabH1cXHB7WnB9XFx1MDYxQ1xcdTIwMEVcXHUyMDBGXFx1MjAyQS1cXHUyMDJFXFx1MjA2Ni1cXHUyMDY5XS91O1xuXG5leHBvcnQgY29uc3QgR3Vlc3RSZWRlZW1SZXF1ZXN0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGNyZWRlbnRpYWw6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgbmFtZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFxuICAgIFNjaGVtYS5pc01heExlbmd0aChHVUVTVF9OQU1FX01BWF9MRU5HVEgpLFxuICAgIFNjaGVtYS5tYWtlRmlsdGVyKChuYW1lKSA9PiAhTkFNRV9CUkVBS0lOR19DSEFSQUNURVIudGVzdChuYW1lKSwge1xuICAgICAgZGVzY3JpcHRpb246IFwiYSBzaW5nbGUgbGluZSBvZiB0ZXh0XCIsXG4gICAgfSksXG4gICksXG59KTtcbmV4cG9ydCB0eXBlIEd1ZXN0UmVkZWVtUmVxdWVzdCA9IHR5cGVvZiBHdWVzdFJlZGVlbVJlcXVlc3QuVHlwZTtcblxuLyoqXG4gKiBUaGUgZmllbGRzIG9mIGEgZ3Vlc3QgbWVzc2FnZS4gVGhlIHBhZ2UgcG9zdHMgdGhlbSBhcyBtdWx0aXBhcnQgZm9ybSBkYXRhLCB3aXRoIGVhY2ggZmlsZSBhcyBhXG4gKiBgZmlsZWAgcGFydDsgdGV4dCBjYW4gYmUgZW1wdHkgd2hlbiBmaWxlcyBhcmUgYXR0YWNoZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBHdWVzdFN1Ym1pdFJlcXVlc3QgPSBTY2hlbWEuU3RydWN0KHtcbiAgLyoqIFRoZSBzaGFyZSB0aGUgcGFnZSBzaG93cywgc28gYSBtZXNzYWdlIGZyb20gYSBwYWdlIGZvciBhIHJlcGxhY2VkIGxpbmsgaXMgcmVmdXNlZCBpbnN0ZWFkXG4gICAgICBvZiByZWFjaGluZyB0aGUgbmV3IG9uZS4gKi9cbiAgc2hhcmVJZDogR3Vlc3RTaGFyZUlkLFxuICB0ZXh0OiBUcmltbWVkU3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aChHVUVTVF9NRVNTQUdFX01BWF9MRU5HVEgpKSxcbn0pO1xuZXhwb3J0IHR5cGUgR3Vlc3RTdWJtaXRSZXF1ZXN0ID0gdHlwZW9mIEd1ZXN0U3VibWl0UmVxdWVzdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgR1VFU1RfUk9VVEVfUFJFRklYID0gXCIvYXBpL2d1ZXN0XCI7XG4vKiogVGhlIGd1ZXN0IHBhZ2UgYW5kIGd1ZXN0IHJvdXRlcyBuYW1lIHRoZSBzaGFyZSB0aGV5IG1lYW4gd2l0aCB0aGlzIHF1ZXJ5IHBhcmFtZXRlci4gKi9cbmV4cG9ydCBjb25zdCBHVUVTVF9TSEFSRV9QQVJBTSA9IFwic2hhcmVcIjtcblxuLyoqXG4gKiBPbmUgc2Vzc2lvbiBjb29raWUgcGVyIHNoYXJlLCBzbyBhIGd1ZXN0IGtlZXBzIGV2ZXJ5IGxpbmsgdGhleSBqb2luZWQgb24gYSBob3N0LCBhbmQgYSBwYWdlXG4gKiBmb3Igb25lIHNoYXJlIG5ldmVyIGFjdHMgd2l0aCBhbm90aGVyIHNoYXJlJ3Mgc2Vzc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGd1ZXN0U2Vzc2lvbkNvb2tpZU5hbWUgPSAoc2hhcmVJZDogc3RyaW5nKSA9PiBgdDNfZ3Vlc3RfJHtzaGFyZUlkfWA7XG4vKiogU2VydmVzIG9uZSBIVE1MIHJlbmRlciBpbiB0aGUgc2hhcmVkIHRocmVhZDogYD9zaGFyZT08c2hhcmUgaWQ+Jml0ZW09PHR1cm4gaXRlbSBpZD5gLiAqL1xuZXhwb3J0IGNvbnN0IEdVRVNUX1JFTkRFUl9ST1VURSA9IGAke0dVRVNUX1JPVVRFX1BSRUZJWH0vcmVuZGVyYDtcbi8qKiBPbmUgaXRlbSBvZiB0aGUgc2hhcmVkIHRocmVhZCwgYXMgYW4gZXhwYW5kZWQgcm93IGxvYWRzIGl0OiBgP3NoYXJlPTxzaGFyZSBpZD4maXRlbT08aWQ+YC4gKi9cbmV4cG9ydCBjb25zdCBHVUVTVF9JVEVNX1JPVVRFID0gYCR7R1VFU1RfUk9VVEVfUFJFRklYfS9pdGVtYDtcbi8qKiBTZXJ2ZXItc2VudCBvdXRwdXQgZnJhbWVzIG9mIG9uZSBjb21tYW5kIGluIHRoZSBzaGFyZWQgdGhyZWFkOiBgP3NoYXJlPTxzaGFyZSBpZD4maXRlbT08aWQ+YC4gKi9cbmV4cG9ydCBjb25zdCBHVUVTVF9DT01NQU5EX09VVFBVVF9ST1VURSA9IGAke0dVRVNUX1JPVVRFX1BSRUZJWH0vY29tbWFuZC1vdXRwdXRgO1xuLyoqXG4gKiBBIGZpbGUgaW4gdGhlIHNoYXJlZCB0aHJlYWQgb3IgYSBndWVzdCdzIHdhaXRpbmcgbWVzc2FnZTogYD9zaGFyZT08c2hhcmUgaWQ+JmlkPTxhdHRhY2htZW50IGlkPmAuXG4gKiBJbWFnZXMgbG9hZCBpbmxpbmU7IG90aGVyIGZpbGVzIGRvd25sb2FkLlxuICovXG5leHBvcnQgY29uc3QgR1VFU1RfQVRUQUNITUVOVF9ST1VURSA9IGAke0dVRVNUX1JPVVRFX1BSRUZJWH0vYXR0YWNobWVudGA7XG4iXSwiZmlsZSI6Ii9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9ndWVzdFNoYXJlLnRzIn0=

//# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJ1cmwiOiIyIiwiaW1wb3J0cyI6IjMiLCJtYXBwaW5ncyI6ZmFsc2UsImRlcHMiOiI0IiwiZHluYW1pY0RlcHMiOiI1Iiwic3RhdGljTW9ja3MiOm51bGx9LCIvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9ndWVzdFNoYXJlLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL2d1ZXN0U2hhcmUudHMiLHsidXJscyI6IjYiLCJpZHMiOiI3In0sWyI4IiwiOSIsIjEwIl0sW10sWyI4IiwiOSIsIjEwIl0se30sIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvbm9kZV9tb2R1bGVzLy5wbnBtL2VmZmVjdEA0LjAuNS9ub2RlX21vZHVsZXMvZWZmZWN0L2Rpc3QvU2NoZW1hLmpzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL2NoYXRBdHRhY2htZW50LnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL2Jhc2VTY2hlbWFzLnRzIl0=