UNPKG

vite-plugin-react-server

Version:
139 lines (136 loc) 17.8 kB
/** * vite-plugin-react-server * Copyright (c) Nico Brinkkemper * MIT License */ import 'vite'; import { resolveBuildPages } from './resolveBuildPages.js'; import { resolvePages } from '../resolvePages.js'; import { createGlobAutoDiscover } from './createGlobAutoDiscover.js'; import { createDirectiveClientAutoDiscover } from './createDirectiveClientAutoDiscover.js'; import { customWorkerFiles } from './customWorkerFiles.js'; import { pageAndPropFiles } from './pageAndPropFiles.js'; const resolveAutoDiscover = async function _resolveAutoDiscover({ config, configEnv, userOptions, logger }) { const envId = `${configEnv.command}-${configEnv.mode}`; const configInputRecord = {}; if (typeof config.build?.rollupOptions?.input === "string") { configInputRecord[userOptions.normalizer(config.build?.rollupOptions?.input)[0]] = config.build?.rollupOptions?.input; } else if (typeof config.build?.rollupOptions?.input === "object") { for (const [, value] of Object.entries( config.build?.rollupOptions?.input )) { configInputRecord[userOptions.normalizer(value)[0]] = value; } } const serverEntry = typeof userOptions.serverEntry === "string" ? Object.fromEntries([userOptions.normalizer(userOptions.serverEntry)]) : null; const indexHtmlInputs = { index: "index.html" }; const clientEntry = typeof userOptions.clientEntry === "string" ? Object.fromEntries([userOptions.normalizer(userOptions.clientEntry)]) : {}; const { type, error, pages } = await resolvePages(userOptions.build.pages); if (type === "error") { return { type: "error", error, id: envId }; } const clientFiles = createGlobAutoDiscover(userOptions.autoDiscover.clientEntry); const directiveClientFiles = createDirectiveClientAutoDiscover(); const serverFiles = createGlobAutoDiscover(userOptions.autoDiscover.serverEntry); const cssFiles = createGlobAutoDiscover(userOptions.autoDiscover.cssEntry); const jsonFiles = createGlobAutoDiscover(userOptions.autoDiscover.jsonEntry); const htmlFiles = createGlobAutoDiscover(userOptions.autoDiscover.htmlPattern.source); const files = await resolveBuildPages({ pages, userOptions, logger }); const customWorkerInputs = customWorkerFiles({ inputs: {}, userOptions }); const clientInputs = await clientFiles({ inputs: {}, userOptions }); const directiveClientInputs = await directiveClientFiles({ inputs: {}, userOptions }); const serverActions = await serverFiles({ inputs: {}, userOptions }); const pageAndPropInputs = pageAndPropFiles({ files, inputs: {} }); const cssInputs = await cssFiles({ inputs: {}, userOptions }); const jsonInputs = await jsonFiles({ inputs: {}, userOptions }); const htmlInputs = await htmlFiles({ inputs: {}, userOptions }); const customComponentInputs = {}; for (const [rootKey, rootValue] of files.rootMap) { if (!customComponentInputs[rootKey]) { customComponentInputs[rootKey] = rootValue; } } for (const [htmlKey, htmlValue] of files.htmlMap) { if (!customComponentInputs[htmlKey]) { customComponentInputs[htmlKey] = htmlValue; } } const clientInputsCollection = { ...configInputRecord, ...clientInputs, ...directiveClientInputs, ...clientEntry, ...cssInputs }; if (Object.keys(clientInputsCollection).length === 0) { Object.assign(clientInputsCollection, indexHtmlInputs); } const serverInputsCollection = { ...clientInputsCollection, ...customWorkerInputs, ...pageAndPropInputs, ...cssInputs, ...serverActions, ...serverEntry, ...jsonInputs, ...customComponentInputs // Add custom components to server build }; return { type: "success", id: envId, autoDiscoveredFiles: { ...files, workerPaths: customWorkerInputs, serverEntry, clientEntry, staticInputs: { ...indexHtmlInputs, ...htmlInputs, ...clientInputsCollection }, clientInputs: clientInputsCollection, serverInputs: serverInputsCollection, serverActions } }; }; export { resolveAutoDiscover }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZUF1dG9EaXNjb3Zlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGx1Z2luL2NvbmZpZy9hdXRvRGlzY292ZXIvcmVzb2x2ZUF1dG9EaXNjb3Zlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIENvbmZpZ0VudiwgdHlwZSBVc2VyQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB0eXBlIHsgQXV0b0Rpc2NvdmVyZWRGaWxlcywgUmVzb2x2ZWRVc2VyT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUJ1aWxkUGFnZXMgfSBmcm9tIFwiLi9yZXNvbHZlQnVpbGRQYWdlcy5qc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZVBhZ2VzIH0gZnJvbSBcIi4uL3Jlc29sdmVQYWdlcy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBMb2dnZXIsIFJlc29sdmVkQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IGNyZWF0ZUdsb2JBdXRvRGlzY292ZXIgfSBmcm9tIFwiLi9jcmVhdGVHbG9iQXV0b0Rpc2NvdmVyLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVEaXJlY3RpdmVDbGllbnRBdXRvRGlzY292ZXIgfSBmcm9tIFwiLi9jcmVhdGVEaXJlY3RpdmVDbGllbnRBdXRvRGlzY292ZXIuanNcIjtcbmltcG9ydCB7IGN1c3RvbVdvcmtlckZpbGVzIH0gZnJvbSBcIi4vY3VzdG9tV29ya2VyRmlsZXMuanNcIjtcbmltcG9ydCB7IHBhZ2VBbmRQcm9wRmlsZXMgfSBmcm9tIFwiLi9wYWdlQW5kUHJvcEZpbGVzLmpzXCI7XG5cblxuXG50eXBlIFJlc29sdmVBdXRvRGlzY292ZXJQcm9wcyA9IHtcbiAgY29uZmlnOiBVc2VyQ29uZmlnIHwgUmVzb2x2ZWRDb25maWc7XG4gIGNvbmZpZ0VudjogQ29uZmlnRW52O1xuICB1c2VyT3B0aW9uczogUGljazxcbiAgICBSZXNvbHZlZFVzZXJPcHRpb25zLFxuICAgIHwgXCJidWlsZFwiXG4gICAgfCBcIm5vcm1hbGl6ZXJcIlxuICAgIHwgXCJzZXJ2ZXJFbnRyeVwiXG4gICAgfCBcImNsaWVudEVudHJ5XCJcbiAgICB8IFwicHJvamVjdFJvb3RcIlxuICAgIHwgXCJtb2R1bGVCYXNlXCJcbiAgICB8IFwibW9kdWxlQmFzZVBhdGhcIlxuICAgIHwgXCJQYWdlXCJcbiAgICB8IFwicHJvcHNcIlxuICAgIHwgXCJodG1sV29ya2VyUGF0aFwiXG4gICAgfCBcInJzY1dvcmtlclBhdGhcIlxuICAgIHwgXCJwYWdlRXhwb3J0TmFtZVwiXG4gICAgfCBcInByb3BzRXhwb3J0TmFtZVwiXG4gICAgfCBcImh0bWxFeHBvcnROYW1lXCJcbiAgICB8IFwicm9vdEV4cG9ydE5hbWVcIlxuICAgIHwgXCJSb290XCJcbiAgICB8IFwiSHRtbFwiXG4gICAgfCBcInZlcmJvc2VcIlxuICAgIHwgXCJwYW5pY1RocmVzaG9sZFwiXG4gICAgfCBcImF1dG9EaXNjb3ZlclwiXG4gID47XG4gIGxvZ2dlcjogTG9nZ2VyO1xufTtcblxudHlwZSBSZXNvbHZlQXV0b0Rpc2NvdmVyUmV0dXJuID1cbiAgfCB7XG4gICAgICB0eXBlOiBcInN1Y2Nlc3NcIjtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICBhdXRvRGlzY292ZXJlZEZpbGVzOiBBdXRvRGlzY292ZXJlZEZpbGVzO1xuICAgICAgZXJyb3I/OiBuZXZlcjtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJlcnJvclwiO1xuICAgICAgZXJyb3I6IHVua25vd247XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAgYXV0b0Rpc2NvdmVyZWRGaWxlcz86IG5ldmVyO1xuICAgIH07XG5cbmV4cG9ydCB0eXBlIFJlc29sdmVBdXRvRGlzY292ZXJGbiA9IChcbiAgcHJvcHM6IFJlc29sdmVBdXRvRGlzY292ZXJQcm9wc1xuKSA9PiBQcm9taXNlPFJlc29sdmVBdXRvRGlzY292ZXJSZXR1cm4+O1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUF1dG9EaXNjb3ZlcjogUmVzb2x2ZUF1dG9EaXNjb3ZlckZuID1cbiAgYXN5bmMgZnVuY3Rpb24gX3Jlc29sdmVBdXRvRGlzY292ZXIoe1xuICAgIGNvbmZpZyxcbiAgICBjb25maWdFbnYsXG4gICAgdXNlck9wdGlvbnMsXG4gICAgbG9nZ2VyLFxuICB9KSB7XG4gICAgY29uc3QgZW52SWQgPSBgJHtjb25maWdFbnYuY29tbWFuZH0tJHtjb25maWdFbnYubW9kZX1gO1xuICAgIFxuXG4gICAgXG4gICAgXG4gICAgXG5cbiAgICBjb25zdCBjb25maWdJbnB1dFJlY29yZCA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgaWYgKHR5cGVvZiBjb25maWcuYnVpbGQ/LnJvbGx1cE9wdGlvbnM/LmlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb25maWdJbnB1dFJlY29yZFtcbiAgICAgICAgdXNlck9wdGlvbnMubm9ybWFsaXplcihjb25maWcuYnVpbGQ/LnJvbGx1cE9wdGlvbnM/LmlucHV0KVswXVxuICAgICAgXSA9IGNvbmZpZy5idWlsZD8ucm9sbHVwT3B0aW9ucz8uaW5wdXQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLmJ1aWxkPy5yb2xsdXBPcHRpb25zPy5pbnB1dCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgZm9yIChjb25zdCBbLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgIGNvbmZpZy5idWlsZD8ucm9sbHVwT3B0aW9ucz8uaW5wdXRcbiAgICAgICkpIHtcbiAgICAgICAgY29uZmlnSW5wdXRSZWNvcmRbdXNlck9wdGlvbnMubm9ybWFsaXplcih2YWx1ZSlbMF1dID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2VydmVyRW50cnkgPVxuICAgICAgdHlwZW9mIHVzZXJPcHRpb25zLnNlcnZlckVudHJ5ID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKFt1c2VyT3B0aW9ucy5ub3JtYWxpemVyKHVzZXJPcHRpb25zLnNlcnZlckVudHJ5KV0pXG4gICAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IGluZGV4SHRtbElucHV0cyA9IHsgaW5kZXg6IFwiaW5kZXguaHRtbFwiIH07XG5cbiAgICBjb25zdCBjbGllbnRFbnRyeSA9XG4gICAgICB0eXBlb2YgdXNlck9wdGlvbnMuY2xpZW50RW50cnkgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoW3VzZXJPcHRpb25zLm5vcm1hbGl6ZXIodXNlck9wdGlvbnMuY2xpZW50RW50cnkpXSlcbiAgICAgICAgOiB7fTtcblxuICAgIGNvbnN0IHsgdHlwZSwgZXJyb3IsIHBhZ2VzIH0gPSBhd2FpdCByZXNvbHZlUGFnZXModXNlck9wdGlvbnMuYnVpbGQucGFnZXMpO1xuXG4gICAgaWYgKHR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgICBlcnJvcixcbiAgICAgICAgaWQ6IGVudklkLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgY2xpZW50RmlsZXMgPSBjcmVhdGVHbG9iQXV0b0Rpc2NvdmVyKHVzZXJPcHRpb25zLmF1dG9EaXNjb3Zlci5jbGllbnRFbnRyeSk7XG4gICAgLy8gRmlyc3QtcGFydHkgbW9kdWxlcyBkZXRlY3RlZCBieSBhIHRvcC1vZi1maWxlIGBcInVzZSBjbGllbnRcImAgZGlyZWN0aXZlXG4gICAgLy8gKG5vIGAuY2xpZW50LmAgc3VmZml4KSBtdXN0IGFsc28gYmUgZW1pdHRlZCB0byBkaXN0L2NsaWVudC5cbiAgICBjb25zdCBkaXJlY3RpdmVDbGllbnRGaWxlcyA9IGNyZWF0ZURpcmVjdGl2ZUNsaWVudEF1dG9EaXNjb3ZlcigpO1xuICAgIGNvbnN0IHNlcnZlckZpbGVzID0gY3JlYXRlR2xvYkF1dG9EaXNjb3Zlcih1c2VyT3B0aW9ucy5hdXRvRGlzY292ZXIuc2VydmVyRW50cnkpO1xuICAgIGNvbnN0IGNzc0ZpbGVzID0gY3JlYXRlR2xvYkF1dG9EaXNjb3Zlcih1c2VyT3B0aW9ucy5hdXRvRGlzY292ZXIuY3NzRW50cnkpO1xuICAgIGNvbnN0IGpzb25GaWxlcyA9IGNyZWF0ZUdsb2JBdXRvRGlzY292ZXIodXNlck9wdGlvbnMuYXV0b0Rpc2NvdmVyLmpzb25FbnRyeSk7XG4gICAgY29uc3QgaHRtbEZpbGVzID0gY3JlYXRlR2xvYkF1dG9EaXNjb3Zlcih1c2VyT3B0aW9ucy5hdXRvRGlzY292ZXIuaHRtbFBhdHRlcm4uc291cmNlKTtcblxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVzb2x2ZUJ1aWxkUGFnZXMoe1xuICAgICAgcGFnZXMsXG4gICAgICB1c2VyT3B0aW9ucyxcbiAgICAgIGxvZ2dlcixcbiAgICB9KTtcblxuIFxuXG4gICAgY29uc3QgY3VzdG9tV29ya2VySW5wdXRzID0gY3VzdG9tV29ya2VyRmlsZXMoe1xuICAgICAgaW5wdXRzOiB7fSxcbiAgICAgIHVzZXJPcHRpb25zLFxuICAgIH0pO1xuICAgIGNvbnN0IGNsaWVudElucHV0cyA9IGF3YWl0IGNsaWVudEZpbGVzKHtcbiAgICAgIGlucHV0czoge30sXG4gICAgICB1c2VyT3B0aW9ucyxcbiAgICB9KTtcbiAgICBjb25zdCBkaXJlY3RpdmVDbGllbnRJbnB1dHMgPSBhd2FpdCBkaXJlY3RpdmVDbGllbnRGaWxlcyh7XG4gICAgICBpbnB1dHM6IHt9LFxuICAgICAgdXNlck9wdGlvbnMsXG4gICAgfSk7XG4gICAgY29uc3Qgc2VydmVyQWN0aW9ucyA9IGF3YWl0IHNlcnZlckZpbGVzKHtcbiAgICAgIGlucHV0czoge30sXG4gICAgICB1c2VyT3B0aW9ucyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBhZ2VBbmRQcm9wSW5wdXRzID0gcGFnZUFuZFByb3BGaWxlcyh7XG4gICAgICBmaWxlcyxcbiAgICAgIGlucHV0czoge30sXG4gICAgfSk7XG5cbiAgICBjb25zdCBjc3NJbnB1dHMgPSBhd2FpdCBjc3NGaWxlcyh7XG4gICAgICBpbnB1dHM6IHt9LFxuICAgICAgdXNlck9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBqc29uSW5wdXRzID0gYXdhaXQganNvbkZpbGVzKHtcbiAgICAgIGlucHV0czoge30sXG4gICAgICB1c2VyT3B0aW9ucyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGh0bWxJbnB1dHMgPSBhd2FpdCBodG1sRmlsZXMoe1xuICAgICAgaW5wdXRzOiB7fSxcbiAgICAgIHVzZXJPcHRpb25zLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIGN1c3RvbSBSb290IGFuZCBIdG1sIGNvbXBvbmVudHMgdG8gaW5wdXRzXG4gICAgY29uc3QgY3VzdG9tQ29tcG9uZW50SW5wdXRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAvLyBBZGQgUm9vdCBjb21wb25lbnRzIGZyb20gcmVzb2x2ZWQgYnVpbGQgcGFnZXNcbiAgICBmb3IgKGNvbnN0IFtyb290S2V5LCByb290VmFsdWVdIG9mIGZpbGVzLnJvb3RNYXApIHtcbiAgICAgIGlmICghY3VzdG9tQ29tcG9uZW50SW5wdXRzW3Jvb3RLZXldKSB7XG4gICAgICAgIGN1c3RvbUNvbXBvbmVudElucHV0c1tyb290S2V5XSA9IHJvb3RWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgSHRtbCBjb21wb25lbnRzIGZyb20gcmVzb2x2ZWQgYnVpbGQgcGFnZXNcbiAgICBmb3IgKGNvbnN0IFtodG1sS2V5LCBodG1sVmFsdWVdIG9mIGZpbGVzLmh0bWxNYXApIHtcbiAgICAgIGlmICghY3VzdG9tQ29tcG9uZW50SW5wdXRzW2h0bWxLZXldKSB7XG4gICAgICAgIGN1c3RvbUNvbXBvbmVudElucHV0c1todG1sS2V5XSA9IGh0bWxWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIFxuICAgIC8vIFNlcGFyYXRlIGNsaWVudCBhbmQgc2VydmVyIGlucHV0c1xuICAgIGNvbnN0IGNsaWVudElucHV0c0NvbGxlY3Rpb24gPSB7XG4gICAgICAuLi5jb25maWdJbnB1dFJlY29yZCxcbiAgICAgIC4uLmNsaWVudElucHV0cyxcbiAgICAgIC4uLmRpcmVjdGl2ZUNsaWVudElucHV0cyxcbiAgICAgIC4uLmNsaWVudEVudHJ5LFxuICAgICAgLi4uY3NzSW5wdXRzLFxuICAgIH07XG4gICAgLy8gSWYgbm8gY2xpZW50IGVudHJpZXMgZm91bmQsIGZhbGwgYmFjayB0byBpbmRleC5odG1sIHNvIFNTUiBlbnZpcm9ubWVudCBoYXMgaW5wdXRzXG4gICAgaWYgKE9iamVjdC5rZXlzKGNsaWVudElucHV0c0NvbGxlY3Rpb24pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgT2JqZWN0LmFzc2lnbihjbGllbnRJbnB1dHNDb2xsZWN0aW9uLCBpbmRleEh0bWxJbnB1dHMpO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBzZXJ2ZXJJbnB1dHNDb2xsZWN0aW9uID0ge1xuICAgICAgLi4uY2xpZW50SW5wdXRzQ29sbGVjdGlvbixcbiAgICAgIC4uLmN1c3RvbVdvcmtlcklucHV0cyxcbiAgICAgIC4uLnBhZ2VBbmRQcm9wSW5wdXRzLFxuICAgICAgLi4uY3NzSW5wdXRzLFxuICAgICAgLi4uc2VydmVyQWN0aW9ucyxcbiAgICAgIC4uLnNlcnZlckVudHJ5LFxuICAgICAgLi4uanNvbklucHV0cyxcbiAgICAgIC4uLmN1c3RvbUNvbXBvbmVudElucHV0cywgLy8gQWRkIGN1c3RvbSBjb21wb25lbnRzIHRvIHNlcnZlciBidWlsZFxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzdWNjZXNzXCIsXG4gICAgICBpZDogZW52SWQsXG4gICAgICBhdXRvRGlzY292ZXJlZEZpbGVzOiB7XG4gICAgICAgIC4uLmZpbGVzLFxuICAgICAgICB3b3JrZXJQYXRoczogY3VzdG9tV29ya2VySW5wdXRzLFxuICAgICAgICBzZXJ2ZXJFbnRyeSxcbiAgICAgICAgY2xpZW50RW50cnksXG4gICAgICAgIHN0YXRpY0lucHV0czoge1xuICAgICAgICAgIC4uLmluZGV4SHRtbElucHV0cyxcbiAgICAgICAgICAuLi5odG1sSW5wdXRzLFxuICAgICAgICAgIC4uLmNsaWVudElucHV0c0NvbGxlY3Rpb25cbiAgICAgICAgfSxcbiAgICAgICAgY2xpZW50SW5wdXRzOiBjbGllbnRJbnB1dHNDb2xsZWN0aW9uLFxuICAgICAgICBzZXJ2ZXJJbnB1dHM6IHNlcnZlcklucHV0c0NvbGxlY3Rpb24sXG4gICAgICAgIHNlcnZlckFjdGlvbnMsXG4gICAgICB9LFxuICAgIH07XG4gIH07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQTJEYSxNQUFBLG1CQUFBLEdBQ1gsZUFBZSxvQkFBcUIsQ0FBQTtBQUFBLEVBQ2xDLE1BQUE7QUFBQSxFQUNBLFNBQUE7QUFBQSxFQUNBLFdBQUE7QUFBQSxFQUNBO0FBQ0YsQ0FBRyxFQUFBO0FBQ0QsRUFBQSxNQUFNLFFBQVEsQ0FBRyxFQUFBLFNBQUEsQ0FBVSxPQUFPLENBQUEsQ0FBQSxFQUFJLFVBQVUsSUFBSSxDQUFBLENBQUE7QUFPcEQsRUFBQSxNQUFNLG9CQUFvQixFQUFDO0FBQzNCLEVBQUEsSUFBSSxPQUFPLE1BQUEsQ0FBTyxLQUFPLEVBQUEsYUFBQSxFQUFlLFVBQVUsUUFBVSxFQUFBO0FBQzFELElBQUEsaUJBQUEsQ0FDRSxXQUFZLENBQUEsVUFBQSxDQUFXLE1BQU8sQ0FBQSxLQUFBLEVBQU8sYUFBZSxFQUFBLEtBQUssQ0FBRSxDQUFBLENBQUMsQ0FDOUQsQ0FBQSxHQUFJLE1BQU8sQ0FBQSxLQUFBLEVBQU8sYUFBZSxFQUFBLEtBQUE7QUFBQSxhQUN4QixPQUFPLE1BQUEsQ0FBTyxLQUFPLEVBQUEsYUFBQSxFQUFlLFVBQVUsUUFBVSxFQUFBO0FBQ2pFLElBQUEsS0FBQSxNQUFXLEdBQUcsS0FBSyxDQUFBLElBQUssTUFBTyxDQUFBLE9BQUE7QUFBQSxNQUM3QixNQUFBLENBQU8sT0FBTyxhQUFlLEVBQUE7QUFBQSxLQUM1QixFQUFBO0FBQ0QsTUFBQSxpQkFBQSxDQUFrQixZQUFZLFVBQVcsQ0FB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