1183 lines
1.9 MiB
1183 lines
1.9 MiB
/*
|
|
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
* This devtool is neither made for production nor for readable output files.
|
|
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
* or disable the default devtool with "devtool: false".
|
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
*/
|
|
(() => {
|
|
var exports = {};
|
|
exports.id = "app/courrier/page";
|
|
exports.ids = ["app/courrier/page"];
|
|
exports.modules = {
|
|
|
|
/***/ "(action-browser)/./lib/env.ts":
|
|
/*!********************!*\
|
|
!*** ./lib/env.ts ***!
|
|
\********************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ env: () => (/* binding */ env)\n/* harmony export */ });\n/* harmony import */ var zod__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zod */ \"(action-browser)/./node_modules/zod/lib/index.mjs\");\n\nconst envSchema = zod__WEBPACK_IMPORTED_MODULE_0__.z.object({\n NODE_ENV: zod__WEBPACK_IMPORTED_MODULE_0__.z.enum([\n \"development\",\n \"test\",\n \"production\"\n ]).default(\"development\"),\n DATABASE_URL: zod__WEBPACK_IMPORTED_MODULE_0__.z.string().url(),\n NEWSDB_URL: zod__WEBPACK_IMPORTED_MODULE_0__.z.string().regex(/^postgresql:\\/\\//, \"Must be a valid PostgreSQL URL\"),\n NEWS_API_URL: zod__WEBPACK_IMPORTED_MODULE_0__.z.string().url(),\n KEYCLOAK_CLIENT_ID: zod__WEBPACK_IMPORTED_MODULE_0__.z.string(),\n KEYCLOAK_CLIENT_SECRET: zod__WEBPACK_IMPORTED_MODULE_0__.z.string(),\n KEYCLOAK_REALM: zod__WEBPACK_IMPORTED_MODULE_0__.z.string(),\n KEYCLOAK_ISSUER: zod__WEBPACK_IMPORTED_MODULE_0__.z.string().url(),\n LEANTIME_TOKEN: zod__WEBPACK_IMPORTED_MODULE_0__.z.string(),\n LEANTIME_API_URL: zod__WEBPACK_IMPORTED_MODULE_0__.z.string().url(),\n ROCKET_CHAT_TOKEN: zod__WEBPACK_IMPORTED_MODULE_0__.z.string(),\n ROCKET_CHAT_USER_ID: zod__WEBPACK_IMPORTED_MODULE_0__.z.string()\n});\nconst env = envSchema.parse(process.env);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL2xpYi9lbnYudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBd0I7QUFFeEIsTUFBTUMsWUFBWUQsa0NBQUNBLENBQUNFLE1BQU0sQ0FBQztJQUN6QkMsVUFBVUgsa0NBQUNBLENBQUNJLElBQUksQ0FBQztRQUFDO1FBQWU7UUFBUTtLQUFhLEVBQUVDLE9BQU8sQ0FBQztJQUNoRUMsY0FBY04sa0NBQUNBLENBQUNPLE1BQU0sR0FBR0MsR0FBRztJQUM1QkMsWUFBWVQsa0NBQUNBLENBQUNPLE1BQU0sR0FBR0csS0FBSyxDQUFDLG9CQUFvQjtJQUNqREMsY0FBY1gsa0NBQUNBLENBQUNPLE1BQU0sR0FBR0MsR0FBRztJQUM1Qkksb0JBQW9CWixrQ0FBQ0EsQ0FBQ08sTUFBTTtJQUM1Qk0sd0JBQXdCYixrQ0FBQ0EsQ0FBQ08sTUFBTTtJQUNoQ08sZ0JBQWdCZCxrQ0FBQ0EsQ0FBQ08sTUFBTTtJQUN4QlEsaUJBQWlCZixrQ0FBQ0EsQ0FBQ08sTUFBTSxHQUFHQyxHQUFHO0lBQy9CUSxnQkFBZ0JoQixrQ0FBQ0EsQ0FBQ08sTUFBTTtJQUN4QlUsa0JBQWtCakIsa0NBQUNBLENBQUNPLE1BQU0sR0FBR0MsR0FBRztJQUNoQ1UsbUJBQW1CbEIsa0NBQUNBLENBQUNPLE1BQU07SUFDM0JZLHFCQUFxQm5CLGtDQUFDQSxDQUFDTyxNQUFNO0FBQy9CO0FBRU8sTUFBTWEsTUFBTW5CLFVBQVVvQixLQUFLLENBQUNDLFFBQVFGLEdBQUcsRUFBRSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9saWIvZW52LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmNvbnN0IGVudlNjaGVtYSA9IHoub2JqZWN0KHtcbiAgTk9ERV9FTlY6IHouZW51bShbXCJkZXZlbG9wbWVudFwiLCBcInRlc3RcIiwgXCJwcm9kdWN0aW9uXCJdKS5kZWZhdWx0KFwiZGV2ZWxvcG1lbnRcIiksXG4gIERBVEFCQVNFX1VSTDogei5zdHJpbmcoKS51cmwoKSxcbiAgTkVXU0RCX1VSTDogei5zdHJpbmcoKS5yZWdleCgvXnBvc3RncmVzcWw6XFwvXFwvLywgXCJNdXN0IGJlIGEgdmFsaWQgUG9zdGdyZVNRTCBVUkxcIiksXG4gIE5FV1NfQVBJX1VSTDogei5zdHJpbmcoKS51cmwoKSxcbiAgS0VZQ0xPQUtfQ0xJRU5UX0lEOiB6LnN0cmluZygpLFxuICBLRVlDTE9BS19DTElFTlRfU0VDUkVUOiB6LnN0cmluZygpLFxuICBLRVlDTE9BS19SRUFMTTogei5zdHJpbmcoKSxcbiAgS0VZQ0xPQUtfSVNTVUVSOiB6LnN0cmluZygpLnVybCgpLFxuICBMRUFOVElNRV9UT0tFTjogei5zdHJpbmcoKSxcbiAgTEVBTlRJTUVfQVBJX1VSTDogei5zdHJpbmcoKS51cmwoKSxcbiAgUk9DS0VUX0NIQVRfVE9LRU46IHouc3RyaW5nKCksXG4gIFJPQ0tFVF9DSEFUX1VTRVJfSUQ6IHouc3RyaW5nKCksXG59KTtcblxuZXhwb3J0IGNvbnN0IGVudiA9IGVudlNjaGVtYS5wYXJzZShwcm9jZXNzLmVudik7ICJdLCJuYW1lcyI6WyJ6IiwiZW52U2NoZW1hIiwib2JqZWN0IiwiTk9ERV9FTlYiLCJlbnVtIiwiZGVmYXVsdCIsIkRBVEFCQVNFX1VSTCIsInN0cmluZyIsInVybCIsIk5FV1NEQl9VUkwiLCJyZWdleCIsIk5FV1NfQVBJX1VSTCIsIktFWUNMT0FLX0NMSUVOVF9JRCIsIktFWUNMT0FLX0NMSUVOVF9TRUNSRVQiLCJLRVlDTE9BS19SRUFMTSIsIktFWUNMT0FLX0lTU1VFUiIsIkxFQU5USU1FX1RPS0VOIiwiTEVBTlRJTUVfQVBJX1VSTCIsIlJPQ0tFVF9DSEFUX1RPS0VOIiwiUk9DS0VUX0NIQVRfVVNFUl9JRCIsImVudiIsInBhcnNlIiwicHJvY2VzcyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(action-browser)/./lib/env.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(action-browser)/./lib/prisma.ts":
|
|
/*!***********************!*\
|
|
!*** ./lib/prisma.ts ***!
|
|
\***********************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ prisma: () => (/* binding */ prisma)\n/* harmony export */ });\n/* harmony import */ var _prisma_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @prisma/client */ \"@prisma/client\");\n/* harmony import */ var _prisma_client__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_prisma_client__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_env__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/lib/env */ \"(action-browser)/./lib/env.ts\");\n// front/lib/prisma.ts\n\n\nconst globalForPrisma = globalThis;\n// Main database client\nconst prisma = globalForPrisma.prisma || new _prisma_client__WEBPACK_IMPORTED_MODULE_0__.PrismaClient({\n datasources: {\n db: {\n url: _lib_env__WEBPACK_IMPORTED_MODULE_1__.env.DATABASE_URL\n }\n },\n log: [\n 'query'\n ]\n});\nif (true) {\n globalForPrisma.prisma = prisma;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL2xpYi9wcmlzbWEudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLHNCQUFzQjtBQUN1QjtBQUNkO0FBRS9CLE1BQU1FLGtCQUFrQkM7QUFJeEIsdUJBQXVCO0FBQ2hCLE1BQU1DLFNBQ1hGLGdCQUFnQkUsTUFBTSxJQUN0QixJQUFJSix3REFBWUEsQ0FBQztJQUNmSyxhQUFhO1FBQ1hDLElBQUk7WUFDRkMsS0FBS04seUNBQUdBLENBQUNPLFlBQVk7UUFDdkI7SUFDRjtJQUNBQyxLQUFLO1FBQUM7S0FBUTtBQUNoQixHQUFFO0FBRUosSUFBSUMsSUFBcUMsRUFBRTtJQUN6Q1IsZ0JBQWdCRSxNQUFNLEdBQUdBO0FBQzNCIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2xpYi9wcmlzbWEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZnJvbnQvbGliL3ByaXNtYS50c1xuaW1wb3J0IHsgUHJpc21hQ2xpZW50IH0gZnJvbSAnQHByaXNtYS9jbGllbnQnXG5pbXBvcnQgeyBlbnYgfSBmcm9tICdAL2xpYi9lbnYnXG5cbmNvbnN0IGdsb2JhbEZvclByaXNtYSA9IGdsb2JhbFRoaXMgYXMgdW5rbm93biBhcyB7XG4gIHByaXNtYTogUHJpc21hQ2xpZW50IHwgdW5kZWZpbmVkO1xufVxuXG4vLyBNYWluIGRhdGFiYXNlIGNsaWVudFxuZXhwb3J0IGNvbnN0IHByaXNtYSA9XG4gIGdsb2JhbEZvclByaXNtYS5wcmlzbWEgfHxcbiAgbmV3IFByaXNtYUNsaWVudCh7XG4gICAgZGF0YXNvdXJjZXM6IHtcbiAgICAgIGRiOiB7XG4gICAgICAgIHVybDogZW52LkRBVEFCQVNFX1VSTFxuICAgICAgfVxuICAgIH0sXG4gICAgbG9nOiBbJ3F1ZXJ5J10sXG4gIH0pXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGdsb2JhbEZvclByaXNtYS5wcmlzbWEgPSBwcmlzbWE7XG59XG4iXSwibmFtZXMiOlsiUHJpc21hQ2xpZW50IiwiZW52IiwiZ2xvYmFsRm9yUHJpc21hIiwiZ2xvYmFsVGhpcyIsInByaXNtYSIsImRhdGFzb3VyY2VzIiwiZGIiLCJ1cmwiLCJEQVRBQkFTRV9VUkwiLCJsb2ciLCJwcm9jZXNzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./lib/prisma.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(action-browser)/./lib/redis.ts":
|
|
/*!**********************!*\
|
|
!*** ./lib/redis.ts ***!
|
|
\**********************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ KEYS: () => (/* binding */ KEYS),\n/* harmony export */ TTL: () => (/* binding */ TTL),\n/* harmony export */ cacheEmailContent: () => (/* binding */ cacheEmailContent),\n/* harmony export */ cacheEmailCredentials: () => (/* binding */ cacheEmailCredentials),\n/* harmony export */ cacheEmailList: () => (/* binding */ cacheEmailList),\n/* harmony export */ cacheImapSession: () => (/* binding */ cacheImapSession),\n/* harmony export */ closeRedisConnection: () => (/* binding */ closeRedisConnection),\n/* harmony export */ decryptData: () => (/* binding */ decryptData),\n/* harmony export */ encryptData: () => (/* binding */ encryptData),\n/* harmony export */ getCachedEmailContent: () => (/* binding */ getCachedEmailContent),\n/* harmony export */ getCachedEmailCredentials: () => (/* binding */ getCachedEmailCredentials),\n/* harmony export */ getCachedEmailList: () => (/* binding */ getCachedEmailList),\n/* harmony export */ getCachedImapSession: () => (/* binding */ getCachedImapSession),\n/* harmony export */ getEmailCredentials: () => (/* binding */ getEmailCredentials),\n/* harmony export */ getRedisClient: () => (/* binding */ getRedisClient),\n/* harmony export */ getRedisStatus: () => (/* binding */ getRedisStatus),\n/* harmony export */ invalidateEmailContentCache: () => (/* binding */ invalidateEmailContentCache),\n/* harmony export */ invalidateFolderCache: () => (/* binding */ invalidateFolderCache),\n/* harmony export */ invalidateUserEmailCache: () => (/* binding */ invalidateUserEmailCache),\n/* harmony export */ warmupRedisCache: () => (/* binding */ warmupRedisCache)\n/* harmony export */ });\n/* harmony import */ var ioredis__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ioredis */ \"(action-browser)/./node_modules/ioredis/built/index.js\");\n/* harmony import */ var ioredis__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(ioredis__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var crypto_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! crypto-js */ \"(action-browser)/./node_modules/crypto-js/index.js\");\n/* harmony import */ var crypto_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(crypto_js__WEBPACK_IMPORTED_MODULE_1__);\n\n\n// Initialize Redis client\nlet redisClient = null;\nlet isConnecting = false;\nlet connectionAttempts = 0;\nconst MAX_RECONNECT_ATTEMPTS = 5;\n/**\n * Get a Redis client instance (singleton pattern) with improved connection management\n */ function getRedisClient() {\n if (redisClient && redisClient.status === 'ready') {\n return redisClient;\n }\n if (isConnecting) {\n // If we're already trying to connect, return the existing client\n // This prevents multiple simultaneous connection attempts\n if (redisClient) return redisClient;\n // This is a fallback in case we're connecting but don't have a client yet\n console.warn('Redis connection in progress, creating temporary client');\n }\n if (!redisClient) {\n isConnecting = true;\n connectionAttempts = 0;\n // Set Redis connection parameters from environment variables only\n const redisOptions = {\n host: process.env.REDIS_HOST,\n port: process.env.REDIS_PORT ? parseInt(process.env.REDIS_PORT) : undefined,\n password: process.env.REDIS_PASSWORD,\n retryStrategy: (times)=>{\n connectionAttempts = times;\n if (times > MAX_RECONNECT_ATTEMPTS) {\n console.error(`Redis connection failed after ${times} attempts, giving up`);\n return null; // Stop trying to reconnect\n }\n const delay = Math.min(times * 100, 5000);\n console.log(`Redis reconnect attempt ${times}, retrying in ${delay}ms`);\n return delay;\n },\n maxRetriesPerRequest: 5,\n enableOfflineQueue: true,\n connectTimeout: 10000,\n disconnectTimeout: 2000,\n keepAlive: 10000,\n keyPrefix: '' // No prefix to keep keys clean\n };\n console.log('Connecting to Redis using environment variables');\n redisClient = new (ioredis__WEBPACK_IMPORTED_MODULE_0___default())(redisOptions);\n redisClient.on('error', (err)=>{\n console.error('Redis connection error:', err);\n // Only set to null if we've exceeded max attempts\n if (connectionAttempts > MAX_RECONNECT_ATTEMPTS) {\n console.error('Redis connection failed permanently, will create new client on next request');\n redisClient = null;\n isConnecting = false;\n }\n });\n redisClient.on('connect', ()=>{\n console.log('Successfully connected to Redis');\n isConnecting = false;\n connectionAttempts = 0;\n });\n redisClient.on('reconnecting', ()=>{\n console.log('Reconnecting to Redis...');\n isConnecting = true;\n });\n redisClient.on('ready', ()=>{\n console.log('Redis connection warmed up');\n isConnecting = false;\n });\n redisClient.on('end', ()=>{\n console.log('Redis connection ended');\n // Don't set to null here - let the error handler decide\n });\n }\n return redisClient;\n}\n/**\n * Close Redis connection (useful for serverless environments)\n */ async function closeRedisConnection() {\n if (redisClient) {\n await redisClient.quit();\n redisClient = null;\n }\n}\n// Encryption key from environment variable or fallback\nconst getEncryptionKey = ()=>{\n return process.env.REDIS_ENCRYPTION_KEY || 'default-encryption-key-change-in-production';\n};\n/**\n * Encrypt sensitive data before storing in Redis\n */ function encryptData(data) {\n return crypto_js__WEBPACK_IMPORTED_MODULE_1___default().AES.encrypt(data, getEncryptionKey()).toString();\n}\n/**\n * Decrypt sensitive data retrieved from Redis\n */ function decryptData(encryptedData) {\n const bytes = crypto_js__WEBPACK_IMPORTED_MODULE_1___default().AES.decrypt(encryptedData, getEncryptionKey());\n return bytes.toString((crypto_js__WEBPACK_IMPORTED_MODULE_1___default().enc).Utf8);\n}\n// Cache key definitions\nconst KEYS = {\n CREDENTIALS: (userId, accountId)=>`email:credentials:${userId}:${accountId}`,\n SESSION: (userId)=>`email:session:${userId}`,\n EMAIL_LIST: (userId, accountId, folder, page, perPage)=>`email:list:${userId}:${accountId}:${folder}:${page}:${perPage}`,\n EMAIL_CONTENT: (userId, accountId, emailId)=>`email:content:${userId}:${accountId}:${emailId}`\n};\n// TTL constants in seconds\nconst TTL = {\n CREDENTIALS: 60 * 60 * 24,\n SESSION: 60 * 60 * 4,\n EMAIL_LIST: 60 * 5,\n EMAIL_CONTENT: 60 * 15 // 15 minutes\n};\n/**\n * Cache email credentials in Redis\n */ async function cacheEmailCredentials(userId, accountId, credentials) {\n const redis = getRedisClient();\n const key = KEYS.CREDENTIALS(userId, accountId);\n // Validate credentials before caching\n if (!credentials.email || !credentials.host || !credentials.password && !credentials.useOAuth) {\n console.error(`Cannot cache incomplete credentials for user ${userId}`);\n return;\n }\n try {\n console.log(`Caching credentials for user ${userId}`);\n // Create a copy without the password to store\n const secureCredentials = {\n email: credentials.email,\n host: credentials.host,\n port: credentials.port,\n secure: credentials.secure ?? true,\n // Include the extended fields\n ...credentials.smtp_host && {\n smtp_host: credentials.smtp_host\n },\n ...credentials.smtp_port && {\n smtp_port: credentials.smtp_port\n },\n ...credentials.smtp_secure !== undefined && {\n smtp_secure: credentials.smtp_secure\n },\n ...credentials.display_name && {\n display_name: credentials.display_name\n },\n ...credentials.color && {\n color: credentials.color\n },\n // Include OAuth fields\n ...credentials.useOAuth !== undefined && {\n useOAuth: credentials.useOAuth\n },\n ...credentials.accessToken && {\n accessToken: credentials.accessToken\n },\n ...credentials.refreshToken && {\n refreshToken: credentials.refreshToken\n },\n ...credentials.tokenExpiry && {\n tokenExpiry: credentials.tokenExpiry\n }\n };\n // Encrypt password if provided\n if (credentials.password) {\n try {\n const encrypted = encryptData(credentials.password);\n console.log(`Successfully encrypted password for user ${userId}`);\n secureCredentials.encryptedPassword = encrypted;\n } catch (encryptError) {\n console.error(`Failed to encrypt password for user ${userId}:`, encryptError);\n // Continue anyway since we might have OAuth tokens\n }\n }\n await redis.set(key, JSON.stringify(secureCredentials), 'EX', TTL.CREDENTIALS);\n console.log(`Credentials cached for user ${userId}`);\n } catch (error) {\n console.error(`Error caching credentials for user ${userId}:`, error);\n }\n}\n/**\n * Get email credentials from Redis\n */ async function getEmailCredentials(userId, accountId) {\n const redis = getRedisClient();\n const key = KEYS.CREDENTIALS(userId, accountId);\n try {\n const credStr = await redis.get(key);\n if (!credStr) {\n return null;\n }\n const creds = JSON.parse(credStr);\n let password;\n // Handle OAuth accounts (they might not have a password)\n if (creds.encryptedPassword) {\n try {\n // Decrypt the password\n password = decryptData(creds.encryptedPassword);\n } catch (decryptError) {\n console.error(`Failed to decrypt password for user ${userId}:`, decryptError);\n // For OAuth accounts, we can continue without a password\n if (!creds.useOAuth) {\n return null;\n }\n }\n }\n // Return the full credentials with decrypted password if available\n const result = {\n email: creds.email,\n host: creds.host,\n port: creds.port,\n secure: creds.secure ?? true,\n ...password && {\n password\n },\n ...creds.smtp_host && {\n smtp_host: creds.smtp_host\n },\n ...creds.smtp_port && {\n smtp_port: creds.smtp_port\n },\n ...creds.smtp_secure !== undefined && {\n smtp_secure: creds.smtp_secure\n },\n ...creds.display_name && {\n display_name: creds.display_name\n },\n ...creds.color && {\n color: creds.color\n },\n // Include OAuth fields\n ...creds.useOAuth !== undefined && {\n useOAuth: creds.useOAuth\n },\n ...creds.accessToken && {\n accessToken: creds.accessToken\n },\n ...creds.refreshToken && {\n refreshToken: creds.refreshToken\n },\n ...creds.tokenExpiry && {\n tokenExpiry: creds.tokenExpiry\n }\n };\n return result;\n } catch (error) {\n console.error(`Error getting credentials for user ${userId}:`, error);\n return null;\n }\n}\n/**\n * Cache IMAP session data for quick reconnection\n */ async function cacheImapSession(userId, sessionData) {\n const redis = getRedisClient();\n const key = KEYS.SESSION(userId);\n // Always update the lastActive timestamp\n sessionData.lastActive = Date.now();\n await redis.set(key, JSON.stringify(sessionData), 'EX', TTL.SESSION);\n}\n/**\n * Get cached IMAP session data\n */ async function getCachedImapSession(userId) {\n const redis = getRedisClient();\n const key = KEYS.SESSION(userId);\n const cachedData = await redis.get(key);\n if (!cachedData) return null;\n return JSON.parse(cachedData);\n}\n/**\n * Cache email list in Redis\n */ async function cacheEmailList(userId, accountId, folder, page, perPage, data) {\n const redis = getRedisClient();\n const key = KEYS.EMAIL_LIST(userId, accountId, folder, page, perPage);\n await redis.set(key, JSON.stringify(data), 'EX', TTL.EMAIL_LIST);\n}\n/**\n * Get cached email list from Redis\n */ async function getCachedEmailList(userId, accountId, folder, page, perPage) {\n const redis = getRedisClient();\n const key = KEYS.EMAIL_LIST(userId, accountId, folder, page, perPage);\n const cachedData = await redis.get(key);\n if (!cachedData) return null;\n return JSON.parse(cachedData);\n}\n/**\n * Cache email content in Redis\n */ async function cacheEmailContent(userId, accountId, emailId, data) {\n const redis = getRedisClient();\n const key = KEYS.EMAIL_CONTENT(userId, accountId, emailId);\n await redis.set(key, JSON.stringify(data), 'EX', TTL.EMAIL_CONTENT);\n}\n/**\n * Get cached email content from Redis\n */ async function getCachedEmailContent(userId, accountId, emailId) {\n const redis = getRedisClient();\n const key = KEYS.EMAIL_CONTENT(userId, accountId, emailId);\n const cachedData = await redis.get(key);\n if (!cachedData) return null;\n return JSON.parse(cachedData);\n}\n/**\n * Invalidate all email caches for a folder\n */ async function invalidateFolderCache(userId, accountId, folder) {\n const redis = getRedisClient();\n const pattern = `email:list:${userId}:${accountId}:${folder}:*`;\n // Use SCAN to find and delete keys matching the pattern\n let cursor = '0';\n do {\n const [nextCursor, keys] = await redis.scan(cursor, 'MATCH', pattern, 'COUNT', 100);\n cursor = nextCursor;\n if (keys.length > 0) {\n await redis.del(...keys);\n }\n }while (cursor !== '0');\n}\n/**\n * Invalidate email content cache\n */ async function invalidateEmailContentCache(userId, accountId, emailId) {\n const redis = getRedisClient();\n const key = KEYS.EMAIL_CONTENT(userId, accountId, emailId);\n await redis.del(key);\n}\n/**\n * Warm up Redis connection to avoid cold starts\n */ async function warmupRedisCache() {\n try {\n // Ping Redis to establish connection early\n const redis = getRedisClient();\n await redis.ping();\n console.log('Redis connection warmed up');\n return true;\n } catch (error) {\n console.error('Error warming up Redis:', error);\n return false;\n }\n}\n/**\n * Get Redis connection status\n */ async function getRedisStatus() {\n try {\n const redis = getRedisClient();\n const pong = await redis.ping();\n return {\n status: 'connected',\n ping: pong\n };\n } catch (error) {\n return {\n status: 'error',\n error: error instanceof Error ? error.message : String(error)\n };\n }\n}\n/**\n * Invalidate all user email caches (email lists and content)\n */ async function invalidateUserEmailCache(userId) {\n const redis = getRedisClient();\n // Patterns to delete\n const patterns = [\n `email:list:${userId}:*`,\n `email:content:${userId}:*`\n ];\n for (const pattern of patterns){\n let cursor = '0';\n do {\n const [nextCursor, keys] = await redis.scan(cursor, 'MATCH', pattern, 'COUNT', 100);\n cursor = nextCursor;\n if (keys.length > 0) {\n await redis.del(...keys);\n }\n }while (cursor !== '0');\n }\n}\n/**\n * Get cached email credentials from Redis\n * @deprecated Use getEmailCredentials instead\n */ async function getCachedEmailCredentials(userId, accountId) {\n return getEmailCredentials(userId, accountId);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFlBQVlDLEtBQUssR0FBRyxNQUFNMUMsTUFBTTJDLElBQUksQ0FBQ0gsUUFBUSxTQUFTRCxTQUFTLFNBQVM7WUFDL0VDLFNBQVNDO1lBRVQsSUFBSUMsS0FBS0UsTUFBTSxHQUFHLEdBQUc7Z0JBQ25CLE1BQU01QyxNQUFNNkMsR0FBRyxJQUFJSDtZQUNyQjtRQUNGLFFBQVNGLFdBQVcsS0FBSztJQUMzQjtBQUNGO0FBRUE7OztDQUdDLEdBQ00sZUFBZWdCLDBCQUNwQnBFLE1BQWMsRUFDZEMsU0FBaUI7SUFFakIsT0FBTytCLG9CQUFvQmhDLFFBQVFDO0FBQ3JDIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2xpYi9yZWRpcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVkaXMgZnJvbSAnaW9yZWRpcyc7XG5pbXBvcnQgQ3J5cHRvSlMgZnJvbSAnY3J5cHRvLWpzJztcblxuLy8gSW5pdGlhbGl6ZSBSZWRpcyBjbGllbnRcbmxldCByZWRpc0NsaWVudDogUmVkaXMgfCBudWxsID0gbnVsbDtcbmxldCBpc0Nvbm5lY3RpbmcgPSBmYWxzZTtcbmxldCBjb25uZWN0aW9uQXR0ZW1wdHMgPSAwO1xuY29uc3QgTUFYX1JFQ09OTkVDVF9BVFRFTVBUUyA9IDU7XG5cbi8qKlxuICogR2V0IGEgUmVkaXMgY2xpZW50IGluc3RhbmNlIChzaW5nbGV0b24gcGF0dGVybikgd2l0aCBpbXByb3ZlZCBjb25uZWN0aW9uIG1hbmFnZW1lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZGlzQ2xpZW50KCk6IFJlZGlzIHtcbiAgaWYgKHJlZGlzQ2xpZW50ICYmIHJlZGlzQ2xpZW50LnN0YXR1cyA9PT0gJ3JlYWR5Jykge1xuICAgIHJldHVybiByZWRpc0NsaWVudDtcbiAgfVxuICBcbiAgaWYgKGlzQ29ubmVjdGluZykge1xuICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgdHJ5aW5nIHRvIGNvbm5lY3QsIHJldHVybiB0aGUgZXhpc3RpbmcgY2xpZW50XG4gICAgLy8gVGhpcyBwcmV2ZW50cyBtdWx0aXBsZSBzaW11bHRhbmVvdXMgY29ubmVjdGlvbiBhdHRlbXB0c1xuICAgIGlmIChyZWRpc0NsaWVudCkgcmV0dXJuIHJlZGlzQ2xpZW50O1xuICAgIFxuICAgIC8vIFRoaXMgaXMgYSBmYWxsYmFjayBpbiBjYXNlIHdlJ3JlIGNvbm5lY3RpbmcgYnV0IGRvbid0IGhhdmUgYSBjbGllbnQgeWV0XG4gICAgY29uc29sZS53YXJuKCdSZWRpcyBjb25uZWN0aW9uIGluIHByb2dyZXNzLCBjcmVhdGluZyB0ZW1wb3JhcnkgY2xpZW50Jyk7XG4gIH1cbiAgXG4gIGlmICghcmVkaXNDbGllbnQpIHtcbiAgICBpc0Nvbm5lY3RpbmcgPSB0cnVlO1xuICAgIGNvbm5lY3Rpb25BdHRlbXB0cyA9IDA7XG4gICAgXG4gICAgLy8gU2V0IFJlZGlzIGNvbm5lY3Rpb24gcGFyYW1ldGVycyBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcyBvbmx5XG4gICAgY29uc3QgcmVkaXNPcHRpb25zID0ge1xuICAgICAgaG9zdDogcHJvY2Vzcy5lbnYuUkVESVNfSE9TVCxcbiAgICAgIHBvcnQ6IHByb2Nlc3MuZW52LlJFRElTX1BPUlQgPyBwYXJzZUludChwcm9jZXNzLmVudi5SRURJU19QT1JUKSA6IHVuZGVmaW5lZCxcbiAgICAgIHBhc3N3b3JkOiBwcm9jZXNzLmVudi5SRURJU19QQVNTV09SRCxcbiAgICAgIHJldHJ5U3RyYXRlZ3k6ICh0aW1lczogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbm5lY3Rpb25BdHRlbXB0cyA9IHRpbWVzO1xuICAgICAgICBpZiAodGltZXMgPiBNQVhfUkVDT05ORUNUX0FUVEVNUFRTKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgUmVkaXMgY29ubmVjdGlvbiBmYWlsZWQgYWZ0ZXIgJHt0aW1lc30gYXR0ZW1wdHMsIGdpdmluZyB1cGApO1xuICAgICAgICAgIHJldHVybiBudWxsOyAvLyBTdG9wIHRyeWluZyB0byByZWNvbm5lY3RcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWxheSA9IE1hdGgubWluKHRpbWVzICogMTAwLCA1MDAwKTtcbiAgICAgICAgY29uc29sZS5sb2coYFJlZGlzIHJlY29ubmVjdCBhdHRlbXB0ICR7dGltZXN9LCByZXRyeWluZyBpbiAke2RlbGF5fW1zYCk7XG4gICAgICAgIHJldHVybiBkZWxheTtcbiAgICAgIH0sXG4gICAgICBtYXhSZXRyaWVzUGVyUmVxdWVzdDogNSxcbiAgICAgIGVuYWJsZU9mZmxpbmVRdWV1ZTogdHJ1ZSxcbiAgICAgIGNvbm5lY3RUaW1lb3V0OiAxMDAwMCwgLy8gMTAgc2Vjb25kc1xuICAgICAgZGlzY29ubmVjdFRpbWVvdXQ6IDIwMDAsIC8vIDIgc2Vjb25kc1xuICAgICAga2VlcEFsaXZlOiAxMDAwMCwgLy8gMTAgc2Vjb25kc1xuICAgICAga2V5UHJlZml4OiAnJyAvLyBObyBwcmVmaXggdG8ga2VlcCBrZXlzIGNsZWFuXG4gICAgfTtcbiAgICBcbiAgICBjb25zb2xlLmxvZygnQ29ubmVjdGluZyB0byBSZWRpcyB1c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMnKTtcbiAgICByZWRpc0NsaWVudCA9IG5ldyBSZWRpcyhyZWRpc09wdGlvbnMpO1xuICAgIFxuICAgIHJlZGlzQ2xpZW50Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1JlZGlzIGNvbm5lY3Rpb24gZXJyb3I6JywgZXJyKTtcbiAgICAgIFxuICAgICAgLy8gT25seSBzZXQgdG8gbnVsbCBpZiB3ZSd2ZSBleGNlZWRlZCBtYXggYXR0ZW1wdHNcbiAgICAgIGlmIChjb25uZWN0aW9uQXR0ZW1wdHMgPiBNQVhfUkVDT05ORUNUX0FUVEVNUFRTKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1JlZGlzIGNvbm5lY3Rpb24gZmFpbGVkIHBlcm1hbmVudGx5LCB3aWxsIGNyZWF0ZSBuZXcgY2xpZW50IG9uIG5leHQgcmVxdWVzdCcpO1xuICAgICAgICByZWRpc0NsaWVudCA9IG51bGw7XG4gICAgICAgIGlzQ29ubmVjdGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHJlZGlzQ2xpZW50Lm9uKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3NmdWxseSBjb25uZWN0ZWQgdG8gUmVkaXMnKTtcbiAgICAgIGlzQ29ubmVjdGluZyA9IGZhbHNlO1xuICAgICAgY29ubmVjdGlvbkF0dGVtcHRzID0gMDtcbiAgICB9KTtcbiAgICBcbiAgICByZWRpc0NsaWVudC5vbigncmVjb25uZWN0aW5nJywgKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ1JlY29ubmVjdGluZyB0byBSZWRpcy4uLicpO1xuICAgICAgaXNDb25uZWN0aW5nID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBcbiAgICByZWRpc0NsaWVudC5vbigncmVhZHknLCAoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnUmVkaXMgY29ubmVjdGlvbiB3YXJtZWQgdXAnKTtcbiAgICAgIGlzQ29ubmVjdGluZyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIFxuICAgIHJlZGlzQ2xpZW50Lm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnUmVkaXMgY29ubmVjdGlvbiBlbmRlZCcpO1xuICAgICAgLy8gRG9uJ3Qgc2V0IHRvIG51bGwgaGVyZSAtIGxldCB0aGUgZXJyb3IgaGFuZGxlciBkZWNpZGVcbiAgICB9KTtcbiAgfVxuICBcbiAgcmV0dXJuIHJlZGlzQ2xpZW50O1xufVxuXG4vKipcbiAqIENsb3NlIFJlZGlzIGNvbm5lY3Rpb24gKHVzZWZ1bCBmb3Igc2VydmVybGVzcyBlbnZpcm9ubWVudHMpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9zZVJlZGlzQ29ubmVjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHJlZGlzQ2xpZW50KSB7XG4gICAgYXdhaXQgcmVkaXNDbGllbnQucXVpdCgpO1xuICAgIHJlZGlzQ2xpZW50ID0gbnVsbDtcbiAgfVxufVxuXG4vLyBFbmNyeXB0aW9uIGtleSBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIGZhbGxiYWNrXG5jb25zdCBnZXRFbmNyeXB0aW9uS2V5ID0gKCkgPT4ge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuUkVESVNfRU5DUllQVElPTl9LRVkgfHwgJ2RlZmF1bHQtZW5jcnlwdGlvbi1rZXktY2hhbmdlLWluLXByb2R1Y3Rpb24nO1xufTtcblxuLyoqXG4gKiBFbmNyeXB0IHNlbnNpdGl2ZSBkYXRhIGJlZm9yZSBzdG9yaW5nIGluIFJlZGlzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0RGF0YShkYXRhOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQoZGF0YSwgZ2V0RW5jcnlwdGlvbktleSgpKS50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIERlY3J5cHQgc2Vuc2l0aXZlIGRhdGEgcmV0cmlldmVkIGZyb20gUmVkaXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY3J5cHREYXRhKGVuY3J5cHRlZERhdGE6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGJ5dGVzID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoZW5jcnlwdGVkRGF0YSwgZ2V0RW5jcnlwdGlvbktleSgpKTtcbiAgcmV0dXJuIGJ5dGVzLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcbn1cblxuLy8gQ2FjaGUga2V5IGRlZmluaXRpb25zXG5leHBvcnQgY29uc3QgS0VZUyA9IHtcbiAgQ1JFREVOVElBTFM6ICh1c2VySWQ6IHN0cmluZywgYWNjb3VudElkOiBzdHJpbmcpID0+IGBlbWFpbDpjcmVkZW50aWFsczoke3VzZXJJZH06JHthY2NvdW50SWR9YCxcbiAgU0VTU0lPTjogKHVzZXJJZDogc3RyaW5nKSA9PiBgZW1haWw6c2Vzc2lvbjoke3VzZXJJZH1gLFxuICBFTUFJTF9MSVNUOiAodXNlcklkOiBzdHJpbmcsIGFjY291bnRJZDogc3RyaW5nLCBmb2xkZXI6IHN0cmluZywgcGFnZTogbnVtYmVyLCBwZXJQYWdlOiBudW1iZXIpID0+IFxuICAgIGBlbWFpbDpsaXN0OiR7dXNlcklkfToke2FjY291bnRJZH06JHtmb2xkZXJ9OiR7cGFnZX06JHtwZXJQYWdlfWAsXG4gIEVNQUlMX0NPTlRFTlQ6ICh1c2VySWQ6IHN0cmluZywgYWNjb3VudElkOiBzdHJpbmcsIGVtYWlsSWQ6IHN0cmluZykgPT4gXG4gICAgYGVtYWlsOmNvbnRlbnQ6JHt1c2VySWR9OiR7YWNjb3VudElkfToke2VtYWlsSWR9YFxufTtcblxuLy8gVFRMIGNvbnN0YW50cyBpbiBzZWNvbmRzXG5leHBvcnQgY29uc3QgVFRMID0ge1xuICBDUkVERU5USUFMUzogNjAgKiA2MCAqIDI0LCAvLyAyNCBob3Vyc1xuICBTRVNTSU9OOiA2MCAqIDYwICogNCwgICAgICAvLyA0IGhvdXJzIChpbmNyZWFzZWQgZnJvbSAzMCBtaW51dGVzKVxuICBFTUFJTF9MSVNUOiA2MCAqIDUsICAgICAgICAvLyA1IG1pbnV0ZXNcbiAgRU1BSUxfQ09OVEVOVDogNjAgKiAxNSAgICAgLy8gMTUgbWludXRlc1xufTtcblxuaW50ZXJmYWNlIEVtYWlsQ3JlZGVudGlhbHMge1xuICBlbWFpbDogc3RyaW5nO1xuICBwYXNzd29yZD86IHN0cmluZztcbiAgaG9zdDogc3RyaW5nO1xuICBwb3J0OiBudW1iZXI7XG4gIHNlY3VyZT86IGJvb2xlYW47XG4gIGVuY3J5cHRlZFBhc3N3b3JkPzogc3RyaW5nO1xuICBzbXRwX2hvc3Q/OiBzdHJpbmc7XG4gIHNtdHBfcG9ydD86IG51bWJlcjtcbiAgc210cF9zZWN1cmU/OiBib29sZWFuO1xuICBkaXNwbGF5X25hbWU/OiBzdHJpbmc7XG4gIGNvbG9yPzogc3RyaW5nO1xuICB1c2VPQXV0aD86IGJvb2xlYW47XG4gIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuRXhwaXJ5PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSW1hcFNlc3Npb25EYXRhIHtcbiAgY29ubmVjdGlvbklkPzogc3RyaW5nO1xuICBsYXN0QWN0aXZlOiBudW1iZXI7XG4gIG1haWxib3hlcz86IHN0cmluZ1tdO1xuICBsYXN0VmlzaXQ/OiBudW1iZXI7XG4gIGRlZmF1bHRBY2NvdW50SWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2FjaGUgZW1haWwgY3JlZGVudGlhbHMgaW4gUmVkaXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhY2hlRW1haWxDcmVkZW50aWFscyhcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGFjY291bnRJZDogc3RyaW5nLFxuICBjcmVkZW50aWFsczogRW1haWxDcmVkZW50aWFsc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlZGlzID0gZ2V0UmVkaXNDbGllbnQoKTtcbiAgY29uc3Qga2V5ID0gS0VZUy5DUkVERU5USUFMUyh1c2VySWQsIGFjY291bnRJZCk7XG4gIFxuICAvLyBWYWxpZGF0ZSBjcmVkZW50aWFscyBiZWZvcmUgY2FjaGluZ1xuICBpZiAoIWNyZWRlbnRpYWxzLmVtYWlsIHx8ICFjcmVkZW50aWFscy5ob3N0IHx8ICghY3JlZGVudGlhbHMucGFzc3dvcmQgJiYgIWNyZWRlbnRpYWxzLnVzZU9BdXRoKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCBjYWNoZSBpbmNvbXBsZXRlIGNyZWRlbnRpYWxzIGZvciB1c2VyICR7dXNlcklkfWApO1xuICAgIHJldHVybjtcbiAgfVxuICBcbiAgdHJ5IHtcbiAgICBjb25zb2xlLmxvZyhgQ2FjaGluZyBjcmVkZW50aWFscyBmb3IgdXNlciAke3VzZXJJZH1gKTtcbiAgICBcbiAgICAvLyBDcmVhdGUgYSBjb3B5IHdpdGhvdXQgdGhlIHBhc3N3b3JkIHRvIHN0b3JlXG4gICAgY29uc3Qgc2VjdXJlQ3JlZGVudGlhbHM6IEVtYWlsQ3JlZGVudGlhbHMgPSB7XG4gICAgICBlbWFpbDogY3JlZGVudGlhbHMuZW1haWwsXG4gICAgICBob3N0OiBjcmVkZW50aWFscy5ob3N0LFxuICAgICAgcG9ydDogY3JlZGVudGlhbHMucG9ydCxcbiAgICAgIHNlY3VyZTogY3JlZGVudGlhbHMuc2VjdXJlID8/IHRydWUsXG4gICAgICAvLyBJbmNsdWRlIHRoZSBleHRlbmRlZCBmaWVsZHNcbiAgICAgIC4uLihjcmVkZW50aWFscy5zbXRwX2hvc3QgJiYgeyBzbXRwX2hvc3Q6IGNyZWRlbnRpYWxzLnNtdHBfaG9zdCB9KSxcbiAgICAgIC4uLihjcmVkZW50aWFscy5zbXRwX3BvcnQgJiYgeyBzbXRwX3BvcnQ6IGNyZWRlbnRpYWxzLnNtdHBfcG9ydCB9KSxcbiAgICAgIC4uLihjcmVkZW50aWFscy5zbXRwX3NlY3VyZSAhPT0gdW5kZWZpbmVkICYmIHsgc210cF9zZWN1cmU6IGNyZWRlbnRpYWxzLnNtdHBfc2VjdXJlIH0pLFxuICAgICAgLi4uKGNyZWRlbnRpYWxzLmRpc3BsYXlfbmFtZSAmJiB7IGRpc3BsYXlfbmFtZTogY3JlZGVudGlhbHMuZGlzcGxheV9uYW1lIH0pLFxuICAgICAgLi4uKGNyZWRlbnRpYWxzLmNvbG9yICYmIHsgY29sb3I6IGNyZWRlbnRpYWxzLmNvbG9yIH0pLFxuICAgICAgLy8gSW5jbHVkZSBPQXV0aCBmaWVsZHNcbiAgICAgIC4uLihjcmVkZW50aWFscy51c2VPQXV0aCAhPT0gdW5kZWZpbmVkICYmIHsgdXNlT0F1dGg6IGNyZWRlbnRpYWxzLnVzZU9BdXRoIH0pLFxuICAgICAgLi4uKGNyZWRlbnRpYWxzLmFjY2Vzc1Rva2VuICYmIHsgYWNjZXNzVG9rZW46IGNyZWRlbnRpYWxzLmFjY2Vzc1Rva2VuIH0pLFxuICAgICAgLi4uKGNyZWRlbnRpYWxzLnJlZnJlc2hUb2tlbiAmJiB7IHJlZnJlc2hUb2tlbjogY3JlZGVudGlhbHMucmVmcmVzaFRva2VuIH0pLFxuICAgICAgLi4uKGNyZWRlbnRpYWxzLnRva2VuRXhwaXJ5ICYmIHsgdG9rZW5FeHBpcnk6IGNyZWRlbnRpYWxzLnRva2VuRXhwaXJ5IH0pXG4gICAgfTtcbiAgICBcbiAgICAvLyBFbmNyeXB0IHBhc3N3b3JkIGlmIHByb3ZpZGVkXG4gICAgaWYgKGNyZWRlbnRpYWxzLnBhc3N3b3JkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlbmNyeXB0ZWQgPSBlbmNyeXB0RGF0YShjcmVkZW50aWFscy5wYXNzd29yZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBTdWNjZXNzZnVsbHkgZW5jcnlwdGVkIHBhc3N3b3JkIGZvciB1c2VyICR7dXNlcklkfWApO1xuICAgICAgICBzZWN1cmVDcmVkZW50aWFscy5lbmNyeXB0ZWRQYXNzd29yZCA9IGVuY3J5cHRlZDtcbiAgICAgIH0gY2F0Y2ggKGVuY3J5cHRFcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZW5jcnlwdCBwYXNzd29yZCBmb3IgdXNlciAke3VzZXJJZH06YCwgZW5jcnlwdEVycm9yKTtcbiAgICAgICAgLy8gQ29udGludWUgYW55d2F5IHNpbmNlIHdlIG1pZ2h0IGhhdmUgT0F1dGggdG9rZW5zXG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIGF3YWl0IHJlZGlzLnNldChrZXksIEpTT04uc3RyaW5naWZ5KHNlY3VyZUNyZWRlbnRpYWxzKSwgJ0VYJywgVFRMLkNSRURFTlRJQUxTKTtcbiAgICBjb25zb2xlLmxvZyhgQ3JlZGVudGlhbHMgY2FjaGVkIGZvciB1c2VyICR7dXNlcklkfWApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGNhY2hpbmcgY3JlZGVudGlhbHMgZm9yIHVzZXIgJHt1c2VySWR9OmAsIGVycm9yKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCBlbWFpbCBjcmVkZW50aWFscyBmcm9tIFJlZGlzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRFbWFpbENyZWRlbnRpYWxzKFxuICB1c2VySWQ6IHN0cmluZyxcbiAgYWNjb3VudElkOiBzdHJpbmdcbik6IFByb21pc2U8RW1haWxDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgY29uc3QgcmVkaXMgPSBnZXRSZWRpc0NsaWVudCgpO1xuICBjb25zdCBrZXkgPSBLRVlTLkNSRURFTlRJQUxTKHVzZXJJZCwgYWNjb3VudElkKTtcbiAgXG4gIHRyeSB7XG4gICAgY29uc3QgY3JlZFN0ciA9IGF3YWl0IHJlZGlzLmdldChrZXkpO1xuICAgIFxuICAgIGlmICghY3JlZFN0cikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGNyZWRzID0gSlNPTi5wYXJzZShjcmVkU3RyKSBhcyBFbWFpbENyZWRlbnRpYWxzO1xuICAgIFxuICAgIGxldCBwYXNzd29yZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIFxuICAgIC8vIEhhbmRsZSBPQXV0aCBhY2NvdW50cyAodGhleSBtaWdodCBub3QgaGF2ZSBhIHBhc3N3b3JkKVxuICAgIGlmIChjcmVkcy5lbmNyeXB0ZWRQYXNzd29yZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gRGVjcnlwdCB0aGUgcGFzc3dvcmRcbiAgICAgICAgcGFzc3dvcmQgPSBkZWNyeXB0RGF0YShjcmVkcy5lbmNyeXB0ZWRQYXNzd29yZCk7XG4gICAgICB9IGNhdGNoIChkZWNyeXB0RXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGRlY3J5cHQgcGFzc3dvcmQgZm9yIHVzZXIgJHt1c2VySWR9OmAsIGRlY3J5cHRFcnJvcik7XG4gICAgICAgIC8vIEZvciBPQXV0aCBhY2NvdW50cywgd2UgY2FuIGNvbnRpbnVlIHdpdGhvdXQgYSBwYXNzd29yZFxuICAgICAgICBpZiAoIWNyZWRzLnVzZU9BdXRoKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gUmV0dXJuIHRoZSBmdWxsIGNyZWRlbnRpYWxzIHdpdGggZGVjcnlwdGVkIHBhc3N3b3JkIGlmIGF2YWlsYWJsZVxuICAgIGNvbnN0IHJlc3VsdDogRW1haWxDcmVkZW50aWFscyA9IHtcbiAgICAgIGVtYWlsOiBjcmVkcy5lbWFpbCxcbiAgICAgIGhvc3Q6IGNyZWRzLmhvc3QsXG4gICAgICBwb3J0OiBjcmVkcy5wb3J0LFxuICAgICAgc2VjdXJlOiBjcmVkcy5zZWN1cmUgPz8gdHJ1ZSxcbiAgICAgIC4uLihwYXNzd29yZCAmJiB7IHBhc3N3b3JkIH0pLFxuICAgICAgLi4uKGNyZWRzLnNtdHBfaG9zdCAmJiB7IHNtdHBfaG9zdDogY3JlZHMuc210cF9ob3N0IH0pLFxuICAgICAgLi4uKGNyZWRzLnNtdHBfcG9ydCAmJiB7IHNtdHBfcG9ydDogY3JlZHMuc210cF9wb3J0IH0pLFxuICAgICAgLi4uKGNyZWRzLnNtdHBfc2VjdXJlICE9PSB1bmRlZmluZWQgJiYgeyBzbXRwX3NlY3VyZTogY3JlZHMuc210cF9zZWN1cmUgfSksXG4gICAgICAuLi4oY3JlZHMuZGlzcGxheV9uYW1lICYmIHsgZGlzcGxheV9uYW1lOiBjcmVkcy5kaXNwbGF5X25hbWUgfSksXG4gICAgICAuLi4oY3JlZHMuY29sb3IgJiYgeyBjb2xvcjogY3JlZHMuY29sb3IgfSksXG4gICAgICAvLyBJbmNsdWRlIE9BdXRoIGZpZWxkc1xuICAgICAgLi4uKGNyZWRzLnVzZU9BdXRoICE9PSB1bmRlZmluZWQgJiYgeyB1c2VPQXV0aDogY3JlZHMudXNlT0F1dGggfSksXG4gICAgICAuLi4oY3JlZHMuYWNjZXNzVG9rZW4gJiYgeyBhY2Nlc3NUb2tlbjogY3JlZHMuYWNjZXNzVG9rZW4gfSksXG4gICAgICAuLi4oY3JlZHMucmVmcmVzaFRva2VuICYmIHsgcmVmcmVzaFRva2VuOiBjcmVkcy5yZWZyZXNoVG9rZW4gfSksXG4gICAgICAuLi4oY3JlZHMudG9rZW5FeHBpcnkgJiYgeyB0b2tlbkV4cGlyeTogY3JlZHMudG9rZW5FeHBpcnkgfSlcbiAgICB9O1xuICAgIFxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihgRXJyb3IgZ2V0dGluZyBjcmVkZW50aWFscyBmb3IgdXNlciAke3VzZXJJZH06YCwgZXJyb3IpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQ2FjaGUgSU1BUCBzZXNzaW9uIGRhdGEgZm9yIHF1aWNrIHJlY29ubmVjdGlvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2FjaGVJbWFwU2Vzc2lvbihcbiAgdXNlcklkOiBzdHJpbmcsXG4gIHNlc3Npb25EYXRhOiBJbWFwU2Vzc2lvbkRhdGFcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZWRpcyA9IGdldFJlZGlzQ2xpZW50KCk7XG4gIGNvbnN0IGtleSA9IEtFWVMuU0VTU0lPTih1c2VySWQpO1xuICBcbiAgLy8gQWx3YXlzIHVwZGF0ZSB0aGUgbGFzdEFjdGl2ZSB0aW1lc3RhbXBcbiAgc2Vzc2lvbkRhdGEubGFzdEFjdGl2ZSA9IERhdGUubm93KCk7XG4gIFxuICBhd2FpdCByZWRpcy5zZXQoa2V5LCBKU09OLnN0cmluZ2lmeShzZXNzaW9uRGF0YSksICdFWCcsIFRUTC5TRVNTSU9OKTtcbn1cblxuLyoqXG4gKiBHZXQgY2FjaGVkIElNQVAgc2Vzc2lvbiBkYXRhXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDYWNoZWRJbWFwU2Vzc2lvbihcbiAgdXNlcklkOiBzdHJpbmdcbik6IFByb21pc2U8SW1hcFNlc3Npb25EYXRhIHwgbnVsbD4ge1xuICBjb25zdCByZWRpcyA9IGdldFJlZGlzQ2xpZW50KCk7XG4gIGNvbnN0IGtleSA9IEtFWVMuU0VTU0lPTih1c2VySWQpO1xuICBcbiAgY29uc3QgY2FjaGVkRGF0YSA9IGF3YWl0IHJlZGlzLmdldChrZXkpO1xuICBpZiAoIWNhY2hlZERhdGEpIHJldHVybiBudWxsO1xuICBcbiAgcmV0dXJuIEpTT04ucGFyc2UoY2FjaGVkRGF0YSkgYXMgSW1hcFNlc3Npb25EYXRhO1xufVxuXG4vKipcbiAqIENhY2hlIGVtYWlsIGxpc3QgaW4gUmVkaXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhY2hlRW1haWxMaXN0KFxuICB1c2VySWQ6IHN0cmluZyxcbiAgYWNjb3VudElkOiBzdHJpbmcsXG4gIGZvbGRlcjogc3RyaW5nLFxuICBwYWdlOiBudW1iZXIsXG4gIHBlclBhZ2U6IG51bWJlcixcbiAgZGF0YTogYW55XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVkaXMgPSBnZXRSZWRpc0NsaWVudCgpO1xuICBjb25zdCBrZXkgPSBLRVlTLkVNQUlMX0xJU1QodXNlcklkLCBhY2NvdW50SWQsIGZvbGRlciwgcGFnZSwgcGVyUGFnZSk7XG4gIFxuICBhd2FpdCByZWRpcy5zZXQoa2V5LCBKU09OLnN0cmluZ2lmeShkYXRhKSwgJ0VYJywgVFRMLkVNQUlMX0xJU1QpO1xufVxuXG4vKipcbiAqIEdldCBjYWNoZWQgZW1haWwgbGlzdCBmcm9tIFJlZGlzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDYWNoZWRFbWFpbExpc3QoXG4gIHVzZXJJZDogc3RyaW5nLFxuICBhY2NvdW50SWQ6IHN0cmluZyxcbiAgZm9sZGVyOiBzdHJpbmcsXG4gIHBhZ2U6IG51bWJlcixcbiAgcGVyUGFnZTogbnVtYmVyXG4pOiBQcm9taXNlPGFueSB8IG51bGw+IHtcbiAgY29uc3QgcmVkaXMgPSBnZXRSZWRpc0NsaWVudCgpO1xuICBjb25zdCBrZXkgPSBLRVlTLkVNQUlMX0xJU1QodXNlcklkLCBhY2NvdW50SWQsIGZvbGRlciwgcGFnZSwgcGVyUGFnZSk7XG4gIFxuICBjb25zdCBjYWNoZWREYXRhID0gYXdhaXQgcmVkaXMuZ2V0KGtleSk7XG4gIGlmICghY2FjaGVkRGF0YSkgcmV0dXJuIG51bGw7XG4gIFxuICByZXR1cm4gSlNPTi5wYXJzZShjYWNoZWREYXRhKTtcbn1cblxuLyoqXG4gKiBDYWNoZSBlbWFpbCBjb250ZW50IGluIFJlZGlzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYWNoZUVtYWlsQ29udGVudChcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGFjY291bnRJZDogc3RyaW5nLFxuICBlbWFpbElkOiBzdHJpbmcsXG4gIGRhdGE6IGFueVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlZGlzID0gZ2V0UmVkaXNDbGllbnQoKTtcbiAgY29uc3Qga2V5ID0gS0VZUy5FTUFJTF9DT05URU5UKHVzZXJJZCwgYWNjb3VudElkLCBlbWFpbElkKTtcbiAgXG4gIGF3YWl0IHJlZGlzLnNldChrZXksIEpTT04uc3RyaW5naWZ5KGRhdGEpLCAnRVgnLCBUVEwuRU1BSUxfQ09OVEVOVCk7XG59XG5cbi8qKlxuICogR2V0IGNhY2hlZCBlbWFpbCBjb250ZW50IGZyb20gUmVkaXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENhY2hlZEVtYWlsQ29udGVudChcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGFjY291bnRJZDogc3RyaW5nLFxuICBlbWFpbElkOiBzdHJpbmdcbik6IFByb21pc2U8YW55IHwgbnVsbD4ge1xuICBjb25zdCByZWRpcyA9IGdldFJlZGlzQ2xpZW50KCk7XG4gIGNvbnN0IGtleSA9IEtFWVMuRU1BSUxfQ09OVEVOVCh1c2VySWQsIGFjY291bnRJZCwgZW1haWxJZCk7XG4gIFxuICBjb25zdCBjYWNoZWREYXRhID0gYXdhaXQgcmVkaXMuZ2V0KGtleSk7XG4gIGlmICghY2FjaGVkRGF0YSkgcmV0dXJuIG51bGw7XG4gIFxuICByZXR1cm4gSlNPTi5wYXJzZShjYWNoZWREYXRhKTtcbn1cblxuLyoqXG4gKiBJbnZhbGlkYXRlIGFsbCBlbWFpbCBjYWNoZXMgZm9yIGEgZm9sZGVyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnZhbGlkYXRlRm9sZGVyQ2FjaGUoXG4gIHVzZXJJZDogc3RyaW5nLFxuICBhY2NvdW50SWQ6IHN0cmluZyxcbiAgZm9sZGVyOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZWRpcyA9IGdldFJlZGlzQ2xpZW50KCk7XG4gIGNvbnN0IHBhdHRlcm4gPSBgZW1haWw6bGlzdDoke3VzZXJJZH06JHthY2NvdW50SWR9OiR7Zm9sZGVyfToqYDtcbiAgXG4gIC8vIFVzZSBTQ0FOIHRvIGZpbmQgYW5kIGRlbGV0ZSBrZXlzIG1hdGNoaW5nIHRoZSBwYXR0ZXJuXG4gIGxldCBjdXJzb3IgPSAnMCc7XG4gIGRvIHtcbiAgICBjb25zdCBbbmV4dEN1cnNvciwga2V5c10gPSBhd2FpdCByZWRpcy5zY2FuKGN1cnNvciwgJ01BVENIJywgcGF0dGVybiwgJ0NPVU5UJywgMTAwKTtcbiAgICBjdXJzb3IgPSBuZXh0Q3Vyc29yO1xuICAgIFxuICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGF3YWl0IHJlZGlzLmRlbCguLi5rZXlzKTtcbiAgICB9XG4gIH0gd2hpbGUgKGN1cnNvciAhPT0gJzAnKTtcbn1cblxuLyoqXG4gKiBJbnZhbGlkYXRlIGVtYWlsIGNvbnRlbnQgY2FjaGVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGludmFsaWRhdGVFbWFpbENvbnRlbnRDYWNoZShcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGFjY291bnRJZDogc3RyaW5nLFxuICBlbWFpbElkOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZWRpcyA9IGdldFJlZGlzQ2xpZW50KCk7XG4gIGNvbnN0IGtleSA9IEtFWVMuRU1BSUxfQ09OVEVOVCh1c2VySWQsIGFjY291bnRJZCwgZW1haWxJZCk7XG4gIFxuICBhd2FpdCByZWRpcy5kZWwoa2V5KTtcbn1cblxuLyoqXG4gKiBXYXJtIHVwIFJlZGlzIGNvbm5lY3Rpb24gdG8gYXZvaWQgY29sZCBzdGFydHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhcm11cFJlZGlzQ2FjaGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgLy8gUGluZyBSZWRpcyB0byBlc3RhYmxpc2ggY29ubmVjdGlvbiBlYXJseVxuICAgIGNvbnN0IHJlZGlzID0gZ2V0UmVkaXNDbGllbnQoKTtcbiAgICBhd2FpdCByZWRpcy5waW5nKCk7XG4gICAgY29uc29sZS5sb2coJ1JlZGlzIGNvbm5lY3Rpb24gd2FybWVkIHVwJyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3Igd2FybWluZyB1cCBSZWRpczonLCBlcnJvcik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogR2V0IFJlZGlzIGNvbm5lY3Rpb24gc3RhdHVzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRSZWRpc1N0YXR1cygpOiBQcm9taXNlPHtcbiAgc3RhdHVzOiAnY29ubmVjdGVkJyB8ICdlcnJvcic7XG4gIHBpbmc/OiBzdHJpbmc7XG4gIGVycm9yPzogc3RyaW5nO1xufT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlZGlzID0gZ2V0UmVkaXNDbGllbnQoKTtcbiAgICBjb25zdCBwb25nID0gYXdhaXQgcmVkaXMucGluZygpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6ICdjb25uZWN0ZWQnLFxuICAgICAgcGluZzogcG9uZ1xuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogSW52YWxpZGF0ZSBhbGwgdXNlciBlbWFpbCBjYWNoZXMgKGVtYWlsIGxpc3RzIGFuZCBjb250ZW50KVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW52YWxpZGF0ZVVzZXJFbWFpbENhY2hlKFxuICB1c2VySWQ6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlZGlzID0gZ2V0UmVkaXNDbGllbnQoKTtcbiAgXG4gIC8vIFBhdHRlcm5zIHRvIGRlbGV0ZVxuICBjb25zdCBwYXR0ZXJucyA9IFtcbiAgICBgZW1haWw6bGlzdDoke3VzZXJJZH06KmAsXG4gICAgYGVtYWlsOmNvbnRlbnQ6JHt1c2VySWR9OipgXG4gIF07XG4gIFxuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICBsZXQgY3Vyc29yID0gJzAnO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IFtuZXh0Q3Vyc29yLCBrZXlzXSA9IGF3YWl0IHJlZGlzLnNjYW4oY3Vyc29yLCAnTUFUQ0gnLCBwYXR0ZXJuLCAnQ09VTlQnLCAxMDApO1xuICAgICAgY3Vyc29yID0gbmV4dEN1cnNvcjtcbiAgICAgIFxuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICBhd2FpdCByZWRpcy5kZWwoLi4ua2V5cyk7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoY3Vyc29yICE9PSAnMCcpO1xuICB9XG59XG5cbi8qKlxuICogR2V0IGNhY2hlZCBlbWFpbCBjcmVkZW50aWFscyBmcm9tIFJlZGlzXG4gKiBAZGVwcmVjYXRlZCBVc2UgZ2V0RW1haWxDcmVkZW50aWFscyBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDYWNoZWRFbWFpbENyZWRlbnRpYWxzKFxuICB1c2VySWQ6IHN0cmluZyxcbiAgYWNjb3VudElkOiBzdHJpbmdcbik6IFByb21pc2U8RW1haWxDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgcmV0dXJuIGdldEVtYWlsQ3JlZGVudGlhbHModXNlcklkLCBhY2NvdW50SWQpO1xufSAiXSwibmFtZXMiOlsiUmVkaXMiLCJDcnlwdG9KUyIsInJlZGlzQ2xpZW50IiwiaXNDb25uZWN0aW5nIiwiY29ubmVjdGlvbkF0dGVtcHRzIiwiTUFYX1JFQ09OTkVDVF9BVFRFTVBUUyIsImdldFJlZGlzQ2xpZW50Iiwic3RhdHVzIiwiY29uc29sZSIsIndhcm4iLCJyZWRpc09wdGlvbnMiLCJob3N0IiwicHJvY2VzcyIsImVudiIsIlJFRElTX0hPU1QiLCJwb3J0IiwiUkVESVNfUE9SVCIsInBhcnNlSW50IiwidW5kZWZpbmVkIiwicGFzc3dvcmQiLCJSRURJU19QQVNTV09SRCIsInJldHJ5U3RyYXRlZ3kiLCJ0aW1lcyIsImVycm9yIiwiZGVsYXkiLCJNYXRoIiwibWluIiwibG9nIiwibWF4UmV0cmllc1BlclJlcXVlc3QiLCJlbmFibGVPZmZsaW5lUXVldWUiLCJjb25uZWN0VGltZW91dCIsImRpc2Nvbm5lY3RUaW1lb3V0Iiwia2VlcEFsaXZlIiwia2V5UHJlZml4Iiwib24iLCJlcnIiLCJjbG9zZVJlZGlzQ29ubmVjdGlvbiIsInF1aXQiLCJnZXRFbmNyeXB0aW9uS2V5IiwiUkVESVNfRU5DUllQVElPTl9LRVkiLCJlbmNyeXB0RGF0YSIsImRhdGEiLCJBRVMiLCJlbmNyeXB0IiwidG9TdHJpbmciLCJkZWNyeXB0RGF0YSIsImVuY3J5cHRlZERhdGEiLCJieXRlcyIsImRlY3J5cHQiLCJlbmMiLCJVdGY4IiwiS0VZUyIsIkNSRURFTlRJQUxTIiwidXNlcklkIiwiYWNjb3VudElkIiwiU0VTU0lPTiIsIkVNQUlMX0xJU1QiLCJmb2xkZXIiLCJwYWdlIiwicGVyUGFnZSIsIkVNQUlMX0NPTlRFTlQiLCJlbWFpbElkIiwiVFRMIiwiY2FjaGVFbWFpbENyZWRlbnRpYWxzIiwiY3JlZGVudGlhbHMiLCJyZWRpcyIsImtleSIsImVtYWlsIiwidXNlT0F1dGgiLCJzZWN1cmVDcmVkZW50aWFscyIsInNlY3VyZSIsInNtdHBfaG9zdCIsInNtdHBfcG9ydCIsInNtdHBfc2VjdXJlIiwiZGlzcGxheV9uYW1lIiwiY29sb3IiLCJhY2Nlc3NUb2tlbiIsInJlZnJlc2hUb2tlbiIsInRva2VuRXhwaXJ5IiwiZW5jcnlwdGVkIiwiZW5jcnlwdGVkUGFzc3dvcmQiLCJlbmNyeXB0RXJyb3IiLCJzZXQiLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0RW1haWxDcmVkZW50aWFscyIsImNyZWRTdHIiLCJnZXQiLCJjcmVkcyIsInBhcnNlIiwiZGVjcnlwdEVycm9yIiwicmVzdWx0IiwiY2FjaGVJbWFwU2Vzc2lvbiIsInNlc3Npb25EYXRhIiwibGFzdEFjdGl2ZSIsIkRhdGUiLCJub3ciLCJnZXRDYWNoZWRJbWFwU2Vzc2lvbiIsImNhY2hlZERhdGEiLCJjYWNoZUVtYWlsTGlzdCIsImdldENhY2hlZEVtYWlsTGlzdCIsImNhY2hlRW1haWxDb250ZW50IiwiZ2V0Q2FjaGVkRW1haWxDb250ZW50IiwiaW52YWxpZGF0ZUZvbGRlckNhY2hlIiwicGF0dGVybiIsImN1cnNvciIsIm5leHRDdXJzb3IiLCJrZXlzIiwic2NhbiIsImxlbmd0aCIsImRlbCIsImludmFsaWRhdGVFbWFpbENvbnRlbnRDYWNoZSIsIndhcm11cFJlZGlzQ2FjaGUiLCJwaW5nIiwiZ2V0UmVkaXNTdGF0dXMiLCJwb25nIiwiRXJyb3IiLCJtZXNzYWdlIiwiU3RyaW5nIiwiaW52YWxpZGF0ZVVzZXJFbWFpbENhY2hlIiwicGF0dGVybnMiLCJnZXRDYWNoZWRFbWFpbENyZWRlbnRpYWxzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./lib/redis.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(action-browser)/./lib/services/email-service.ts":
|
|
/*!***************************************!*\
|
|
!*** ./lib/services/email-service.ts ***!
|
|
\***************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getEmailContent: () => (/* binding */ getEmailContent),\n/* harmony export */ getEmails: () => (/* binding */ getEmails),\n/* harmony export */ getImapConnection: () => (/* binding */ getImapConnection),\n/* harmony export */ getMailboxes: () => (/* binding */ getMailboxes),\n/* harmony export */ getUserEmailCredentials: () => (/* binding */ getUserEmailCredentials),\n/* harmony export */ markEmailReadStatus: () => (/* binding */ markEmailReadStatus),\n/* harmony export */ saveUserEmailCredentials: () => (/* binding */ saveUserEmailCredentials),\n/* harmony export */ sendEmail: () => (/* binding */ sendEmail),\n/* harmony export */ testEmailConnection: () => (/* binding */ testEmailConnection),\n/* harmony export */ toggleEmailFlag: () => (/* binding */ toggleEmailFlag)\n/* harmony export */ });\n/* harmony import */ var private_next_rsc_server_reference__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! private-next-rsc-server-reference */ \"(action-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/server-reference.js\");\n/* harmony import */ var private_next_rsc_action_encryption__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! private-next-rsc-action-encryption */ \"(action-browser)/./node_modules/next/dist/server/app-render/encryption.js\");\n/* harmony import */ var private_next_rsc_action_encryption__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(private_next_rsc_action_encryption__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var server_only__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! server-only */ \"(action-browser)/./node_modules/next/dist/compiled/server-only/empty.js\");\n/* harmony import */ var server_only__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(server_only__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var imapflow__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! imapflow */ \"(action-browser)/./node_modules/imapflow/lib/imap-flow.js\");\n/* harmony import */ var nodemailer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! nodemailer */ \"(action-browser)/./node_modules/nodemailer/lib/nodemailer.js\");\n/* harmony import */ var _lib_prisma__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/lib/prisma */ \"(action-browser)/./lib/prisma.ts\");\n/* harmony import */ var mailparser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! mailparser */ \"(action-browser)/./node_modules/mailparser/index.js\");\n/* harmony import */ var mailparser__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(mailparser__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _lib_redis__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/lib/redis */ \"(action-browser)/./lib/redis.ts\");\n/* harmony import */ var _token_refresh__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./token-refresh */ \"(action-browser)/./lib/services/token-refresh.ts\");\n/* harmony import */ var private_next_rsc_action_validate__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! private-next-rsc-action-validate */ \"(action-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/action-validate.js\");\n/* __next_internal_action_entry_do_not_use__ {\"4010844c55b83dfb1f105bebefe0eefe1e6b431900\":\"testEmailConnection\",\"60249f33dc41bab8693201a3f19f5e5fb46e641c28\":\"getImapConnection\",\"60852a4e84650a79792bf7dba8eab6e2994fad2674\":\"sendEmail\",\"608647185521cdbec25a6e83fd03959d7becd6a6cd\":\"getMailboxes\",\"609e97c061f87c9d92e6b4c180de319248e8263787\":\"getUserEmailCredentials\",\"70576421f3f1a8e0b47693f06bf0b900d321800592\":\"saveUserEmailCredentials\",\"78725b1539278f6847adbb3f678020efc4d204d6de\":\"getEmailContent\",\"7c9e86d7555bbe449b808bd2ae7479f82af99409fe\":\"markEmailReadStatus\",\"7ccc49d190a944aede514b28ad88d4a52971336211\":\"toggleEmailFlag\",\"7e6fee2e8d6b5661c87219a81dea11090773f206cd\":\"getEmails\"} */ \n\n\n\n\n\n\n\n\n// Connection pool to reuse IMAP clients\nconst connectionPool = {};\n// Track overall connection metrics\nlet totalConnectionRequests = 0;\nlet totalNewConnections = 0;\nlet totalReuseConnections = 0;\nlet totalConnectionErrors = 0;\nlet lastMetricsReset = Date.now();\n// CRITICAL PERFORMANCE FIX: Increase idle timeout from 15 minutes to 30 minutes\n// This will keep connections alive longer and reduce reconnection delays\nconst CONNECTION_TIMEOUT = 30 * 60 * 1000; // Increased to 30 minutes (was 15 minutes)\nconst MAX_POOL_SIZE = 20; // Maximum number of connections to keep in the pool\nconst CONNECTION_CHECK_INTERVAL = 60 * 1000; // Check every minute\nconst MIN_POOL_SIZE = 2; // Keep at least this many active connections per user\n// Clean up idle connections periodically\nsetInterval(()=>{\n const now = Date.now();\n const connectionKeys = Object.keys(connectionPool);\n // If we've been collecting metrics for more than an hour, log and reset\n if (now - lastMetricsReset > 60 * 60 * 1000) {\n console.log(`[IMAP METRICS] Total requests: ${totalConnectionRequests}, New connections: ${totalNewConnections}, Reused: ${totalReuseConnections}, Errors: ${totalConnectionErrors}, Success rate: ${((totalReuseConnections + totalNewConnections) / totalConnectionRequests * 100).toFixed(2)}%`);\n totalConnectionRequests = 0;\n totalNewConnections = 0;\n totalReuseConnections = 0;\n totalConnectionErrors = 0;\n lastMetricsReset = now;\n }\n // PERFORMANCE FIX: Group connections by user for better management\n const connectionsByUser = {};\n connectionKeys.forEach((key)=>{\n const userId = key.split(':')[0];\n if (!connectionsByUser[userId]) {\n connectionsByUser[userId] = [];\n }\n connectionsByUser[userId].push(key);\n });\n // PERFORMANCE FIX: Manage pool size per user\n Object.entries(connectionsByUser).forEach(([userId, userConnections])=>{\n // Sort connections by last used (oldest first)\n const sortedConnections = userConnections.map((key)=>({\n key,\n lastUsed: connectionPool[key].lastUsed\n })).sort((a, b)=>a.lastUsed - b.lastUsed);\n // Keep the most recently used connections up to the min pool size\n const connectionsToKeep = sortedConnections.slice(-MIN_POOL_SIZE);\n const keepKeys = new Set(connectionsToKeep.map((conn)=>conn.key));\n // Check the rest for idle timeout\n sortedConnections.forEach(({ key, lastUsed })=>{\n // Skip connections to keep and those that are in the process of connecting\n if (keepKeys.has(key) || connectionPool[key].isConnecting) {\n return;\n }\n // Only close connections idle for too long\n if (now - lastUsed > CONNECTION_TIMEOUT) {\n console.log(`Closing idle IMAP connection for ${key} (idle for ${Math.round((now - lastUsed) / 1000)}s)`);\n try {\n if (connectionPool[key].client.usable) {\n connectionPool[key].client.logout().catch((err)=>{\n console.error(`Error closing idle connection for ${key}:`, err);\n });\n }\n } catch (error) {\n console.error(`Error checking connection status for ${key}:`, error);\n } finally{\n delete connectionPool[key];\n console.log(`Removed idle connection for ${key} from pool (pool size: ${Object.keys(connectionPool).length})`);\n }\n }\n });\n });\n // Log connection pool status with more details\n const activeCount = connectionKeys.filter((key)=>{\n const conn = connectionPool[key];\n return !conn.isConnecting && (conn.client?.usable || false);\n }).length;\n const connectingCount = connectionKeys.filter((key)=>connectionPool[key].isConnecting).length;\n console.log(`[IMAP POOL] Size: ${connectionKeys.length}, Active: ${activeCount}, Connecting: ${connectingCount}, Max: ${MAX_POOL_SIZE}`);\n}, CONNECTION_CHECK_INTERVAL);\n/**\n * Get IMAP connection for a user, reusing existing connections when possible\n * with improved connection handling and error recovery\n */ async function getImapConnection(userId, accountId) {\n const startTime = Date.now();\n totalConnectionRequests++;\n console.log(`Getting IMAP connection for user ${userId}${accountId ? ` account ${accountId}` : ''}`);\n // Special handling for 'default' accountId - find the first available account\n if (!accountId || accountId === 'default') {\n console.log(`No specific account provided or 'default' requested, trying to find first account for user ${userId}`);\n // Try getting the account ID from cache to avoid database query\n const sessionData = await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.getCachedImapSession)(userId);\n if (sessionData && sessionData.defaultAccountId) {\n accountId = sessionData.defaultAccountId;\n console.log(`Using cached default account ID: ${accountId}`);\n } else {\n // Query to find all accounts for this user\n const accounts = await _lib_prisma__WEBPACK_IMPORTED_MODULE_5__.prisma.mailCredentials.findMany({\n where: {\n userId\n },\n orderBy: {\n createdAt: 'asc'\n },\n take: 1\n });\n if (accounts && accounts.length > 0) {\n const firstAccount = accounts[0];\n console.log(`Using first available account: ${firstAccount.id} (${firstAccount.email})`);\n accountId = firstAccount.id;\n // Cache default account ID for future use\n if (sessionData) {\n await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.cacheImapSession)(userId, {\n ...sessionData,\n defaultAccountId: accountId,\n lastActive: Date.now()\n });\n } else {\n await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.cacheImapSession)(userId, {\n lastActive: Date.now(),\n defaultAccountId: accountId\n });\n }\n } else {\n totalConnectionErrors++;\n throw new Error('No email accounts configured for this user');\n }\n }\n }\n // Use accountId in connection key to ensure different accounts get different connections\n const connectionKey = `${userId}:${accountId}`;\n // If we already have a connection for this key\n if (connectionPool[connectionKey]) {\n const connection = connectionPool[connectionKey];\n // If a connection is being established, wait for it\n if (connection.isConnecting && connection.connectionPromise) {\n console.log(`Connection in progress for ${connectionKey}, waiting for existing connection`);\n try {\n const client = await connection.connectionPromise;\n connection.lastUsed = Date.now();\n totalReuseConnections++;\n console.log(`[IMAP] Reused pending connection for ${connectionKey} in ${Date.now() - startTime}ms`);\n return client;\n } catch (error) {\n console.error(`Error waiting for connection for ${connectionKey}:`, error);\n // Fall through to create new connection\n }\n }\n // Try to use existing connection if it's usable\n try {\n // PERFORMANCE FIX: More robust connection status checking\n if (connection.client && connection.client.usable) {\n // Touch the connection to mark it as recently used\n connection.lastUsed = Date.now();\n console.log(`Reusing existing IMAP connection for ${connectionKey}`);\n // Update session data in Redis\n await updateSessionData(userId, accountId);\n totalReuseConnections++;\n console.log(`[IMAP] Successfully reused connection for ${connectionKey} in ${Date.now() - startTime}ms`);\n return connection.client;\n } else {\n console.log(`Existing connection for ${connectionKey} not usable, recreating`);\n // Will create a new connection below\n }\n } catch (error) {\n console.warn(`Error checking existing connection for ${connectionKey}:`, error);\n // Will create a new connection below\n }\n }\n // If we get here, we need a new connection\n console.log(`Creating new IMAP connection for ${connectionKey}`);\n // First try to get credentials from Redis cache\n let credentials = await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.getCachedEmailCredentials)(userId, accountId);\n console.log(`Retrieved credentials from Redis cache for ${userId}:${accountId}:`, credentials ? {\n email: credentials.email,\n hasPassword: !!credentials.password,\n useOAuth: !!credentials.useOAuth,\n hasAccessToken: !!credentials.accessToken,\n hasRefreshToken: !!credentials.refreshToken\n } : 'No credentials found in cache');\n // If not in cache, get from database and cache them\n if (!credentials) {\n console.log(`Credentials not found in cache for ${userId}${accountId ? ` account ${accountId}` : ''}, attempting database lookup`);\n // Fetch directly from database\n const dbCredentials = await _lib_prisma__WEBPACK_IMPORTED_MODULE_5__.prisma.mailCredentials.findFirst({\n where: {\n AND: [\n {\n userId\n },\n accountId ? {\n id: accountId\n } : {}\n ]\n }\n });\n if (!dbCredentials) {\n console.error(`No credentials found for user ${userId}${accountId ? ` account ${accountId}` : ''}`);\n totalConnectionErrors++;\n throw new Error('Email account credentials not found');\n }\n console.log(`Database lookup returned credentials for ${dbCredentials.email}:`, {\n email: dbCredentials.email,\n hasPassword: !!dbCredentials.password,\n fields: Object.keys(dbCredentials)\n });\n // Create our credentials object from database data\n credentials = {\n email: dbCredentials.email,\n password: dbCredentials.password || '',\n host: dbCredentials.host,\n port: dbCredentials.port,\n secure: dbCredentials.secure,\n smtp_host: dbCredentials.smtp_host || undefined,\n smtp_port: dbCredentials.smtp_port || undefined,\n smtp_secure: dbCredentials.smtp_secure ?? false,\n display_name: dbCredentials.display_name || undefined,\n color: dbCredentials.color || undefined\n };\n }\n // Cast to extended type\n const extendedCreds = credentials;\n // MICROSOFT FIX: Detect Microsoft accounts by hostname and set OAuth flag\n if (extendedCreds.host === 'outlook.office365.com') {\n console.log(`Microsoft account detected (${extendedCreds.email}), setting useOAuth=true`);\n extendedCreds.useOAuth = true;\n // If we have no password but useOAuth is true, we need to make sure refresh token exists in Redis\n if (!extendedCreds.password && !extendedCreds.accessToken) {\n // If running in browser edge environment (serverless), try to refresh our tokens from Redis\n try {\n const cachedCreds = await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.getCachedEmailCredentials)(userId, accountId);\n if (cachedCreds && cachedCreds.refreshToken) {\n console.log(`Found refresh token in Redis for ${extendedCreds.email}, will use it`);\n extendedCreds.refreshToken = cachedCreds.refreshToken;\n extendedCreds.accessToken = cachedCreds.accessToken;\n extendedCreds.tokenExpiry = cachedCreds.tokenExpiry;\n // Make sure we cache these credentials again with the tokens\n await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.cacheEmailCredentials)(userId, accountId, extendedCreds);\n } else {\n console.warn(`No refresh token found for ${extendedCreds.email} in Redis cache`);\n }\n } catch (err) {\n console.error(`Error retrieving cached credentials for ${extendedCreds.email}:`, err);\n }\n }\n }\n // If using OAuth, ensure we have a fresh token\n if (extendedCreds.useOAuth) {\n console.log(`Account is configured to use OAuth`);\n if (!extendedCreds.accessToken) {\n console.error(`OAuth is enabled but no access token for account ${extendedCreds.email}`);\n }\n try {\n console.log(`Ensuring fresh token for OAuth account ${extendedCreds.email}`);\n const { accessToken, success } = await (0,_token_refresh__WEBPACK_IMPORTED_MODULE_8__.ensureFreshToken)(userId, extendedCreds.email);\n if (success && accessToken) {\n extendedCreds.accessToken = accessToken;\n console.log(`Successfully refreshed token for ${extendedCreds.email}`);\n } else {\n console.error(`Failed to refresh token for ${extendedCreds.email}`);\n }\n } catch (err) {\n console.error(`Error refreshing token for ${extendedCreds.email}:`, err);\n }\n }\n // Initialize connection tracking\n connectionPool[connectionKey] = {\n client: null,\n lastUsed: Date.now(),\n isConnecting: true,\n connectionAttempts: (connectionPool[connectionKey]?.connectionAttempts || 0) + 1\n };\n // PERFORMANCE FIX: Add connection timeout to prevent hanging connections\n let connectionTimeout = setTimeout(()=>{\n console.error(`[IMAP] Connection for ${connectionKey} timed out after 60 seconds`);\n if (connectionPool[connectionKey]?.isConnecting) {\n delete connectionPool[connectionKey];\n totalConnectionErrors++;\n }\n }, 60 * 1000); // 60 seconds timeout\n // Create connection promise using the extended credentials\n const connectionPromise = createImapConnection(extendedCreds, connectionKey).then((client)=>{\n // Update connection pool entry\n connectionPool[connectionKey].client = client;\n connectionPool[connectionKey].isConnecting = false;\n connectionPool[connectionKey].lastUsed = Date.now();\n // Clear timeout since connection was successful\n if (connectionTimeout) {\n clearTimeout(connectionTimeout);\n connectionTimeout = null;\n }\n // Update session data\n updateSessionData(userId, accountId).catch((err)=>{\n console.error(`Failed to update session data: ${err.message}`);\n });\n totalNewConnections++;\n console.log(`[IMAP] Created new connection for ${connectionKey} in ${Date.now() - startTime}ms (attempt #${connectionPool[connectionKey].connectionAttempts})`);\n return client;\n }).catch((error)=>{\n // Clear timeout to prevent double errors\n if (connectionTimeout) {\n clearTimeout(connectionTimeout);\n connectionTimeout = null;\n }\n // Handle connection error\n console.error(`Failed to create IMAP connection for ${connectionKey}:`, error);\n delete connectionPool[connectionKey];\n totalConnectionErrors++;\n throw error;\n });\n // Save the promise to allow other requests to wait for this connection\n connectionPool[connectionKey].connectionPromise = connectionPromise;\n return connectionPromise;\n}\n/**\n * Helper function to create a new IMAP connection\n */ async function createImapConnection(credentials, connectionKey) {\n // Cast to extended type\n const extendedCreds = credentials;\n console.log(`Creating IMAP connection with credentials:`, {\n email: extendedCreds.email,\n host: extendedCreds.host,\n port: extendedCreds.port,\n hasPassword: !!extendedCreds.password,\n useOAuth: !!extendedCreds.useOAuth,\n hasAccessToken: !!extendedCreds.accessToken,\n hasRefreshToken: !!extendedCreds.refreshToken,\n hasTokenExpiry: !!extendedCreds.tokenExpiry\n });\n let authParams;\n // Check if we have valid OAuth tokens\n if (extendedCreds.useOAuth && extendedCreds.accessToken) {\n console.log(`Using XOAUTH2 authentication for ${connectionKey} (OAuth enabled)`);\n // Set auth parameters for ImapFlow\n authParams = {\n user: extendedCreds.email,\n accessToken: extendedCreds.accessToken\n };\n console.log(`XOAUTH2 auth configured for ${connectionKey}`);\n } else if (extendedCreds.password) {\n // Use regular password authentication\n console.log(`Using password authentication for ${connectionKey} (OAuth not enabled or no token)`);\n authParams = {\n user: extendedCreds.email,\n pass: extendedCreds.password\n };\n } else {\n // No authentication method available\n console.error(`No authentication method found for ${connectionKey}:`, {\n hasPassword: !!extendedCreds.password,\n useOAuth: !!extendedCreds.useOAuth,\n hasAccessToken: !!extendedCreds.accessToken\n });\n throw new Error(`No authentication method available for ${connectionKey} - need either password or OAuth token`);\n }\n console.log(`Creating ImapFlow client for ${connectionKey} with authentication type: ${extendedCreds.useOAuth ? 'OAuth' : 'Password'}`);\n const client = new imapflow__WEBPACK_IMPORTED_MODULE_3__.ImapFlow({\n host: extendedCreds.host,\n port: extendedCreds.port,\n secure: extendedCreds.secure ?? true,\n auth: authParams,\n logger: false,\n emitLogs: false,\n tls: {\n rejectUnauthorized: false\n },\n disableAutoIdle: false\n });\n try {\n console.log(`Connecting to IMAP server: ${extendedCreds.host}:${extendedCreds.port}`);\n await client.connect();\n console.log(`Successfully connected to IMAP server for ${connectionKey}`);\n } catch (error) {\n console.error(`Failed to connect to IMAP server for ${connectionKey}:`, error);\n throw error;\n }\n // Add error handler\n client.on('error', (err)=>{\n console.error(`IMAP connection error for ${connectionKey}:`, err);\n // Remove from pool on error\n if (connectionPool[connectionKey]) {\n delete connectionPool[connectionKey];\n }\n });\n return client;\n}\n/**\n * Update session data in Redis\n */ async function updateSessionData(userId, accountId) {\n const sessionData = await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.getCachedImapSession)(userId);\n if (sessionData) {\n await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.cacheImapSession)(userId, {\n ...sessionData,\n lastActive: Date.now(),\n ...accountId && {\n defaultAccountId: accountId\n }\n });\n } else {\n await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.cacheImapSession)(userId, {\n lastActive: Date.now(),\n ...accountId && {\n defaultAccountId: accountId\n }\n });\n }\n}\n/**\n * Get user's email credentials from database\n */ async function getUserEmailCredentials(userId, accountId) {\n const credentials = await _lib_prisma__WEBPACK_IMPORTED_MODULE_5__.prisma.mailCredentials.findFirst({\n where: {\n AND: [\n {\n userId\n },\n accountId ? {\n id: accountId\n } : {}\n ]\n }\n });\n if (!credentials) return null;\n const mailCredentials = credentials;\n return {\n email: mailCredentials.email,\n password: mailCredentials.password,\n host: mailCredentials.host,\n port: mailCredentials.port,\n secure: mailCredentials.secure,\n smtp_host: mailCredentials.smtp_host || undefined,\n smtp_port: mailCredentials.smtp_port || undefined,\n smtp_secure: mailCredentials.smtp_secure ?? false,\n display_name: mailCredentials.display_name || undefined,\n color: mailCredentials.color || undefined\n };\n}\n/**\n * Save or update user's email credentials\n */ async function saveUserEmailCredentials(userId, accountId, credentials) {\n console.log('Saving credentials for user:', userId, 'account:', accountId);\n if (!credentials) {\n throw new Error('No credentials provided');\n }\n // Cast to extended type to access OAuth properties\n const extendedCreds = credentials;\n // Store OAuth information in a separate object for caching\n const oauthData = {\n useOAuth: extendedCreds.useOAuth,\n accessToken: extendedCreds.accessToken,\n refreshToken: extendedCreds.refreshToken,\n tokenExpiry: extendedCreds.tokenExpiry\n };\n // Extract only the fields that exist in the database schema\n // Based on the schema from 'npx prisma db pull', OAuth fields don't exist\n const dbCredentials = {\n email: credentials.email,\n password: credentials.password ?? '',\n host: credentials.host,\n port: credentials.port,\n secure: credentials.secure ?? true,\n smtp_host: credentials.smtp_host || null,\n smtp_port: credentials.smtp_port || null,\n smtp_secure: credentials.smtp_secure ?? false,\n display_name: credentials.display_name || null,\n color: credentials.color || null\n };\n try {\n console.log('Saving credentials to database:', {\n ...dbCredentials,\n password: dbCredentials.password ? '***' : null\n });\n console.log('OAuth data will be saved to Redis cache only:', {\n hasOAuth: !!oauthData.useOAuth,\n hasAccessToken: !!oauthData.accessToken,\n hasRefreshToken: !!oauthData.refreshToken\n });\n // Save to database using the unique constraint on [userId, email]\n await _lib_prisma__WEBPACK_IMPORTED_MODULE_5__.prisma.mailCredentials.upsert({\n where: {\n id: await _lib_prisma__WEBPACK_IMPORTED_MODULE_5__.prisma.mailCredentials.findFirst({\n where: {\n AND: [\n {\n userId\n },\n {\n email: accountId\n }\n ]\n },\n select: {\n id: true\n }\n }).then((result)=>result?.id ?? '')\n },\n update: dbCredentials,\n create: {\n userId,\n ...dbCredentials\n }\n });\n // Create a combined credentials object for caching\n const fullCreds = {\n ...dbCredentials,\n ...oauthData\n }; // Cast to the expected type\n // Cache the full credentials including OAuth tokens\n await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.cacheEmailCredentials)(userId, accountId, fullCreds);\n console.log('Successfully saved credentials to database and cached full data with OAuth tokens');\n } catch (error) {\n console.error('Error saving credentials:', error);\n throw error;\n }\n}\n/**\n * Get list of emails for a user\n */ async function getEmails(userId, folder, page = 1, perPage = 20, accountId, checkOnly = false) {\n // Normalize folder name and handle account ID\n console.log(`[getEmails] Processing request for folder: ${folder}, normalized to ${folder}, account: ${accountId || 'default'}, checkOnly: ${checkOnly}`);\n try {\n // The getImapConnection function already handles 'default' accountId by finding the first available account\n const client = await getImapConnection(userId, accountId);\n // At this point, accountId has been resolved to an actual account ID by getImapConnection\n // Store the resolved accountId in a variable that is guaranteed to be a string\n const resolvedAccountId = accountId || 'default';\n // Attempt to select the mailbox\n try {\n const mailboxInfo = await client.mailboxOpen(folder);\n console.log(`Opened mailbox ${folder} with ${mailboxInfo.exists} messages`);\n // Get list of all mailboxes for UI\n const mailboxes = await getMailboxes(client, resolvedAccountId);\n // Calculate pagination\n const totalEmails = mailboxInfo.exists || 0;\n const totalPages = Math.ceil(totalEmails / perPage);\n // Check if mailbox is empty\n if (totalEmails === 0) {\n // Cache the empty result\n const emptyResult = {\n emails: [],\n totalEmails: 0,\n page,\n perPage,\n totalPages: 0,\n folder,\n mailboxes,\n newestEmailId: 0\n };\n // Only cache if not in checkOnly mode\n if (!checkOnly) {\n await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.cacheEmailList)(userId, resolvedAccountId, folder, page, perPage, emptyResult);\n }\n return emptyResult;\n }\n // If checkOnly mode, we just fetch the most recent email's ID to compare\n if (checkOnly) {\n console.log(`[getEmails] checkOnly mode: fetching only the most recent email ID`);\n // Get the most recent message (highest sequence number)\n const lastMessageSequence = totalEmails.toString();\n console.log(`[getEmails] Fetching latest message with sequence: ${lastMessageSequence}`);\n const messages = await client.fetch(lastMessageSequence, {\n uid: true\n });\n let newestEmailId = 0;\n for await (const message of messages){\n newestEmailId = message.uid;\n }\n console.log(`[getEmails] Latest email UID: ${newestEmailId}`);\n // Return minimal result with just the newest email ID\n return {\n emails: [],\n totalEmails,\n page,\n perPage,\n totalPages,\n folder,\n mailboxes,\n newestEmailId\n };\n }\n // Calculate message range for pagination\n const start = Math.max(1, totalEmails - page * perPage + 1);\n const end = Math.max(1, totalEmails - (page - 1) * perPage);\n console.log(`Fetching messages ${start}:${end} from ${folder} for account ${resolvedAccountId}`);\n // Fetch messages\n const messages = await client.fetch(`${start}:${end}`, {\n envelope: true,\n flags: true,\n bodyStructure: true,\n uid: true\n });\n const emails = [];\n let newestEmailId = 0;\n for await (const message of messages){\n // Track the newest email ID (highest UID)\n if (message.uid > newestEmailId) {\n newestEmailId = message.uid;\n }\n const email = {\n id: message.uid.toString(),\n from: message.envelope.from?.map((addr)=>({\n name: addr.name || '',\n address: addr.address || ''\n })) || [],\n to: message.envelope.to?.map((addr)=>({\n name: addr.name || '',\n address: addr.address || ''\n })) || [],\n subject: message.envelope.subject || '',\n date: message.envelope.date || new Date(),\n flags: {\n seen: message.flags.has('\\\\Seen'),\n flagged: message.flags.has('\\\\Flagged'),\n answered: message.flags.has('\\\\Answered'),\n draft: message.flags.has('\\\\Draft'),\n deleted: message.flags.has('\\\\Deleted')\n },\n size: message.size || 0,\n hasAttachments: message.bodyStructure?.childNodes?.some((node)=>node.disposition === 'attachment') || false,\n folder: folder,\n contentFetched: false,\n accountId: resolvedAccountId,\n content: {\n text: '',\n html: '',\n isHtml: false,\n direction: 'ltr'\n }\n };\n emails.push(email);\n }\n // Prepare the result\n const result = {\n emails,\n totalEmails,\n page,\n perPage,\n totalPages: Math.ceil(totalEmails / perPage),\n folder,\n mailboxes,\n newestEmailId\n };\n // Cache the result with the effective account ID (only if not in checkOnly mode)\n if (!checkOnly) {\n await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.cacheEmailList)(userId, resolvedAccountId, folder, page, perPage, result);\n }\n return result;\n } catch (error) {\n console.error('Error fetching emails:', error);\n throw error;\n }\n } catch (error) {\n console.error('Error fetching emails:', error);\n throw error;\n }\n}\n// Map email addresses safely with null checks\nfunction mapAddresses(addresses) {\n if (!addresses || !Array.isArray(addresses)) {\n return [];\n }\n return addresses.map((addr)=>({\n name: addr.name || addr.address || '',\n address: addr.address || ''\n }));\n}\n/**\n * Get a single email with full content\n */ async function getEmailContent(userId, emailId, folder = 'INBOX', accountId) {\n // Validate parameters\n if (!userId || !emailId || !folder) {\n throw new Error('Missing required parameters');\n }\n // Validate UID format\n if (!/^\\d+$/.test(emailId)) {\n throw new Error('Invalid email ID format: must be a numeric UID');\n }\n // Convert to number for IMAP\n const numericId = parseInt(emailId, 10);\n if (isNaN(numericId)) {\n throw new Error('Email ID must be a number');\n }\n // Extract account ID from folder name if present and none was explicitly provided\n const folderAccountId = folder.includes(':') ? folder.split(':')[0] : accountId;\n // Use the most specific account ID available\n const effectiveAccountId = folderAccountId || accountId || 'default';\n // Normalize folder name by removing account prefix if present\n const normalizedFolder = folder.includes(':') ? folder.split(':')[1] : folder;\n console.log(`[getEmailContent] Fetching email ${emailId} from folder ${normalizedFolder}, account ${effectiveAccountId}`);\n // Use normalized folder name and effective account ID for cache key\n const cachedEmail = await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.getCachedEmailContent)(userId, effectiveAccountId, emailId);\n if (cachedEmail) {\n console.log(`Using cached email content for ${userId}:${effectiveAccountId}:${emailId}`);\n return cachedEmail;\n }\n console.log(`Cache miss for email content ${userId}:${effectiveAccountId}:${emailId}, fetching from IMAP`);\n const client = await getImapConnection(userId, effectiveAccountId);\n try {\n await client.mailboxOpen(normalizedFolder);\n // Log connection details with account context\n console.log(`[DEBUG] Fetching email ${emailId} from folder ${normalizedFolder} for account ${effectiveAccountId}`);\n // Open mailbox with error handling\n const mailbox = await client.mailboxOpen(normalizedFolder);\n if (!mailbox || typeof mailbox === 'boolean') {\n throw new Error(`Failed to open mailbox: ${normalizedFolder} for account ${effectiveAccountId}`);\n }\n // Log mailbox status with account context\n console.log(`[DEBUG] Mailbox ${normalizedFolder} opened for account ${effectiveAccountId}, total messages: ${mailbox.exists}`);\n // Get the UIDVALIDITY and UIDNEXT values\n const uidValidity = mailbox.uidValidity;\n const uidNext = mailbox.uidNext;\n console.log(`[DEBUG] Mailbox UIDVALIDITY: ${uidValidity}, UIDNEXT: ${uidNext} for account ${effectiveAccountId}`);\n // Validate UID exists in mailbox\n if (numericId >= uidNext) {\n throw new Error(`Email ID ${numericId} is greater than or equal to the highest UID in mailbox (${uidNext}) for account ${effectiveAccountId}`);\n }\n // First, try to get the sequence number for this UID\n const searchResult = await client.search({\n uid: numericId.toString()\n });\n if (!searchResult || searchResult.length === 0) {\n throw new Error(`Email with UID ${numericId} not found in folder ${normalizedFolder} for account ${effectiveAccountId}`);\n }\n const sequenceNumber = searchResult[0];\n console.log(`[DEBUG] Found sequence number ${sequenceNumber} for UID ${numericId} in account ${effectiveAccountId}`);\n // Now fetch using the sequence number with error handling\n let message;\n try {\n message = await client.fetchOne(sequenceNumber.toString(), {\n source: true,\n envelope: true,\n flags: true,\n size: true\n });\n } catch (fetchError) {\n console.error(`Error fetching message with sequence ${sequenceNumber}:`, fetchError);\n throw new Error(`Failed to fetch email: ${fetchError instanceof Error ? fetchError.message : 'Unknown error'}`);\n }\n if (!message) {\n throw new Error(`Email not found with sequence number ${sequenceNumber} in folder ${normalizedFolder} for account ${effectiveAccountId}`);\n }\n // Check if message has required fields\n if (!message.source || !message.envelope) {\n throw new Error(`Invalid email data received: missing source or envelope data`);\n }\n const { source, envelope, flags, size } = message;\n // Validate envelope data\n if (!envelope) {\n throw new Error('Email envelope data is missing');\n }\n // Parse the email content, ensuring all styles and structure are preserved\n let parsedEmail;\n try {\n parsedEmail = await (0,mailparser__WEBPACK_IMPORTED_MODULE_6__.simpleParser)(source.toString(), {\n skipHtmlToText: true,\n keepCidLinks: true\n });\n } catch (parseError) {\n console.error(`Error parsing email content for ${emailId}:`, parseError);\n throw new Error(`Failed to parse email content: ${parseError instanceof Error ? parseError.message : 'Unknown error'}`);\n }\n // Convert flags from Set to boolean checks\n const flagsArray = Array.from(flags);\n // Preserve the raw HTML exactly as it was in the original email\n const rawHtml = parsedEmail.html || '';\n const email = {\n id: emailId,\n messageId: envelope.messageId,\n subject: envelope.subject || \"(No Subject)\",\n from: mapAddresses(envelope.from),\n to: mapAddresses(envelope.to),\n cc: mapAddresses(envelope.cc),\n bcc: mapAddresses(envelope.bcc),\n date: envelope.date || new Date(),\n flags: {\n seen: flagsArray.includes(\"\\\\Seen\"),\n flagged: flagsArray.includes(\"\\\\Flagged\"),\n answered: flagsArray.includes(\"\\\\Answered\"),\n deleted: flagsArray.includes(\"\\\\Deleted\"),\n draft: flagsArray.includes(\"\\\\Draft\")\n },\n hasAttachments: parsedEmail.attachments?.length > 0,\n attachments: parsedEmail.attachments?.map((att)=>({\n filename: att.filename || 'attachment',\n contentType: att.contentType,\n size: att.size || 0\n })),\n content: {\n text: parsedEmail.text || '',\n html: rawHtml || '',\n isHtml: !!rawHtml,\n direction: 'ltr' // Default to left-to-right\n },\n folder: normalizedFolder,\n contentFetched: true,\n size: size || 0,\n accountId: effectiveAccountId\n };\n // Cache the email content with effective account ID\n await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.cacheEmailContent)(userId, effectiveAccountId, emailId, email);\n return email;\n } catch (error) {\n console.error('[ERROR] Email fetch failed:', {\n userId,\n emailId,\n folder: normalizedFolder,\n accountId: effectiveAccountId,\n error: error instanceof Error ? error.message : 'Unknown error',\n details: error instanceof Error ? error.stack : undefined\n });\n throw error;\n } finally{\n try {\n await client.mailboxClose();\n } catch (error) {\n console.error('Error closing mailbox:', error);\n }\n }\n}\n/**\n * Mark an email as read or unread\n */ async function markEmailReadStatus(userId, emailId, isRead, folder = 'INBOX', accountId) {\n // Extract account ID from folder name if present and none was explicitly provided\n const folderAccountId = folder.includes(':') ? folder.split(':')[0] : accountId;\n // Use the most specific account ID available\n const effectiveAccountId = folderAccountId || accountId || 'default';\n // Normalize folder name by removing account prefix if present\n const normalizedFolder = folder.includes(':') ? folder.split(':')[1] : folder;\n console.log(`[markEmailReadStatus] Marking email ${emailId} as ${isRead ? 'read' : 'unread'} in folder ${normalizedFolder}, account ${effectiveAccountId}`);\n const client = await getImapConnection(userId, effectiveAccountId);\n try {\n await client.mailboxOpen(normalizedFolder);\n if (isRead) {\n await client.messageFlagsAdd(emailId, [\n '\\\\Seen'\n ]);\n } else {\n await client.messageFlagsRemove(emailId, [\n '\\\\Seen'\n ]);\n }\n // Invalidate content cache since the flags changed\n await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.invalidateEmailContentCache)(userId, effectiveAccountId, emailId);\n // Also invalidate folder cache because unread counts may have changed\n await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.invalidateFolderCache)(userId, effectiveAccountId, normalizedFolder);\n return true;\n } catch (error) {\n console.error(`Error marking email ${emailId} as ${isRead ? 'read' : 'unread'} in folder ${normalizedFolder}, account ${effectiveAccountId}:`, error);\n return false;\n } finally{\n try {\n await client.mailboxClose();\n } catch (error) {\n console.error('Error closing mailbox:', error);\n }\n }\n}\n/**\n * Toggle an email's flagged (starred) status\n */ async function toggleEmailFlag(userId, emailId, flagged, folder = 'INBOX', accountId) {\n // Extract account ID from folder name if present and none was explicitly provided\n const folderAccountId = folder.includes(':') ? folder.split(':')[0] : accountId;\n // Use the most specific account ID available\n const effectiveAccountId = folderAccountId || accountId || 'default';\n // Normalize folder name by removing account prefix if present\n const normalizedFolder = folder.includes(':') ? folder.split(':')[1] : folder;\n console.log(`[toggleEmailFlag] Marking email ${emailId} as ${flagged ? 'flagged' : 'unflagged'} in folder ${normalizedFolder}, account ${effectiveAccountId}`);\n const client = await getImapConnection(userId, effectiveAccountId);\n try {\n await client.mailboxOpen(normalizedFolder);\n if (flagged) {\n await client.messageFlagsAdd(emailId, [\n '\\\\Flagged'\n ]);\n } else {\n await client.messageFlagsRemove(emailId, [\n '\\\\Flagged'\n ]);\n }\n // Invalidate content cache since the flags changed\n await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.invalidateEmailContentCache)(userId, effectiveAccountId, emailId);\n return true;\n } catch (error) {\n console.error(`Error toggling flag for email ${emailId} in folder ${normalizedFolder}, account ${effectiveAccountId}:`, error);\n return false;\n } finally{\n try {\n await client.mailboxClose();\n } catch (error) {\n console.error('Error closing mailbox:', error);\n }\n }\n}\nasync function sendEmail(userId, emailData) {\n const credentials = await getUserEmailCredentials(userId);\n if (!credentials) {\n return {\n success: false,\n error: 'No email credentials found'\n };\n }\n // Cast to extended type\n const extendedCreds = credentials;\n // Configure SMTP auth based on OAuth or password\n const smtpAuth = extendedCreds.useOAuth && extendedCreds.accessToken ? {\n type: 'OAuth2',\n user: extendedCreds.email,\n accessToken: extendedCreds.accessToken\n } : {\n user: extendedCreds.email,\n pass: extendedCreds.password\n };\n // Create SMTP transporter with user's SMTP settings\n const transporter = nodemailer__WEBPACK_IMPORTED_MODULE_4__.createTransport({\n host: extendedCreds.smtp_host || 'smtp.infomaniak.com',\n port: extendedCreds.smtp_port || 587,\n secure: extendedCreds.smtp_secure || false,\n auth: smtpAuth,\n tls: {\n rejectUnauthorized: false\n }\n });\n try {\n const info = await transporter.sendMail({\n from: extendedCreds.email,\n to: emailData.to,\n cc: emailData.cc,\n bcc: emailData.bcc,\n subject: emailData.subject,\n text: emailData.body,\n html: emailData.body,\n attachments: emailData.attachments?.map((att)=>({\n filename: att.name,\n content: att.content,\n contentType: att.type\n }))\n });\n return {\n success: true,\n messageId: info.messageId\n };\n } catch (error) {\n console.error('Failed to send email:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error'\n };\n }\n}\n/**\n * Get list of mailboxes from an IMAP connection\n */ async function getMailboxes(client, accountId) {\n try {\n const mailboxes = await client.list();\n // If we have an accountId, prefix the folder names to prevent namespace collisions\n if (accountId) {\n return mailboxes.map((mailbox)=>`${accountId}:${mailbox.path}`);\n }\n // For backward compatibility, return unprefixed names when no accountId\n return mailboxes.map((mailbox)=>mailbox.path);\n } catch (error) {\n console.error('Error fetching mailboxes:', error);\n // Return empty array on error to avoid showing incorrect folders\n return [];\n }\n}\n/**\n * Test IMAP and SMTP connections for an email account\n */ async function testEmailConnection(credentials) {\n // Cast to extended type to use OAuth properties\n const extendedCreds = credentials;\n console.log('Testing connection with:', {\n ...extendedCreds,\n password: extendedCreds.password ? '***' : undefined,\n accessToken: extendedCreds.accessToken ? '***' : undefined,\n refreshToken: extendedCreds.refreshToken ? '***' : undefined\n });\n // Test IMAP connection\n try {\n console.log(`Testing IMAP connection to ${extendedCreds.host}:${extendedCreds.port} for ${extendedCreds.email}`);\n // Configure auth based on whether we're using OAuth or password\n let authParams;\n if (extendedCreds.useOAuth && extendedCreds.accessToken) {\n console.log('Using XOAUTH2 authentication mechanism');\n // For OAuth, pass the accessToken directly to ImapFlow\n authParams = {\n user: extendedCreds.email,\n accessToken: extendedCreds.accessToken\n };\n // Log the token length to verify it exists\n console.log(`Access token available (length: ${extendedCreds.accessToken.length})`);\n } else {\n console.log('Using password authentication mechanism');\n authParams = {\n user: extendedCreds.email,\n pass: extendedCreds.password\n };\n }\n const client = new imapflow__WEBPACK_IMPORTED_MODULE_3__.ImapFlow({\n host: extendedCreds.host,\n port: extendedCreds.port,\n secure: extendedCreds.secure ?? true,\n auth: authParams,\n logger: false,\n tls: {\n rejectUnauthorized: false\n }\n });\n console.log('Attempting to connect to IMAP server...');\n await client.connect();\n console.log('IMAP connection successful! Getting mailboxes...');\n const folders = await getMailboxes(client);\n await client.logout();\n console.log(`IMAP connection successful for ${extendedCreds.email}`);\n console.log(`Found ${folders.length} folders:`, folders);\n // Test SMTP connection if SMTP settings are provided\n let smtpSuccess = false;\n if (extendedCreds.smtp_host && extendedCreds.smtp_port) {\n try {\n console.log(`Testing SMTP connection to ${extendedCreds.smtp_host}:${extendedCreds.smtp_port}`);\n // Configure SMTP auth based on OAuth or password\n const smtpAuth = extendedCreds.useOAuth && extendedCreds.accessToken ? {\n type: 'OAuth2',\n user: extendedCreds.email,\n accessToken: extendedCreds.accessToken\n } : {\n user: extendedCreds.email,\n pass: extendedCreds.password\n };\n const transporter = nodemailer__WEBPACK_IMPORTED_MODULE_4__.createTransport({\n host: extendedCreds.smtp_host,\n port: extendedCreds.smtp_port,\n secure: extendedCreds.smtp_secure ?? false,\n auth: smtpAuth,\n tls: {\n rejectUnauthorized: false\n }\n });\n await transporter.verify();\n console.log(`SMTP connection successful for ${extendedCreds.email}`);\n smtpSuccess = true;\n } catch (smtpError) {\n console.error(`SMTP connection failed for ${extendedCreds.email}:`, smtpError);\n return {\n imap: true,\n smtp: false,\n error: `SMTP connection failed: ${smtpError instanceof Error ? smtpError.message : 'Unknown error'}`,\n folders\n };\n }\n }\n return {\n imap: true,\n smtp: smtpSuccess,\n folders\n };\n } catch (error) {\n console.error(`IMAP connection failed for ${extendedCreds.email}:`, error);\n return {\n imap: false,\n error: `IMAP connection failed: ${error instanceof Error ? error.message : 'Unknown error'}`\n };\n }\n}\n\n(0,private_next_rsc_action_validate__WEBPACK_IMPORTED_MODULE_9__.ensureServerEntryExports)([\n getImapConnection,\n getUserEmailCredentials,\n saveUserEmailCredentials,\n getEmails,\n getEmailContent,\n markEmailReadStatus,\n toggleEmailFlag,\n sendEmail,\n getMailboxes,\n testEmailConnection\n]);\n(0,private_next_rsc_server_reference__WEBPACK_IMPORTED_MODULE_0__.registerServerReference)(getImapConnection, \"60249f33dc41bab8693201a3f19f5e5fb46e641c28\", null);\n(0,private_next_rsc_server_reference__WEBPACK_IMPORTED_MODULE_0__.registerServerReference)(getUserEmailCredentials, \"609e97c061f87c9d92e6b4c180de319248e8263787\", null);\n(0,private_next_rsc_server_reference__WEBPACK_IMPORTED_MODULE_0__.registerServerReference)(saveUserEmailCredentials, \"70576421f3f1a8e0b47693f06bf0b900d321800592\", null);\n(0,private_next_rsc_server_reference__WEBPACK_IMPORTED_MODULE_0__.registerServerReference)(getEmails, \"7e6fee2e8d6b5661c87219a81dea11090773f206cd\", null);\n(0,private_next_rsc_server_reference__WEBPACK_IMPORTED_MODULE_0__.registerServerReference)(getEmailContent, \"78725b1539278f6847adbb3f678020efc4d204d6de\", null);\n(0,private_next_rsc_server_reference__WEBPACK_IMPORTED_MODULE_0__.registerServerReference)(markEmailReadStatus, \"7c9e86d7555bbe449b808bd2ae7479f82af99409fe\", null);\n(0,private_next_rsc_server_reference__WEBPACK_IMPORTED_MODULE_0__.registerServerReference)(toggleEmailFlag, \"7ccc49d190a944aede514b28ad88d4a52971336211\", null);\n(0,private_next_rsc_server_reference__WEBPACK_IMPORTED_MODULE_0__.registerServerReference)(sendEmail, \"60852a4e84650a79792bf7dba8eab6e2994fad2674\", null);\n(0,private_next_rsc_server_reference__WEBPACK_IMPORTED_MODULE_0__.registerServerReference)(getMailboxes, \"608647185521cdbec25a6e83fd03959d7becd6a6cd\", null);\n(0,private_next_rsc_server_reference__WEBPACK_IMPORTED_MODULE_0__.registerServerReference)(testEmailConnection, \"4010844c55b83dfb1f105bebefe0eefe1e6b431900\", null);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL2xpYi9zZXJ2aWNlcy9lbWFpbC1zZXJ2aWNlLnRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFcUI7QUFDZTtBQUNBO0FBQ0U7QUFDSTtBQVlyQjtBQUU4QjtBQWtDbkQsd0NBQXdDO0FBQ3hDLE1BQU1jLGlCQU1ELENBQUM7QUFFTixtQ0FBbUM7QUFDbkMsSUFBSUMsMEJBQTBCO0FBQzlCLElBQUlDLHNCQUFzQjtBQUMxQixJQUFJQyx3QkFBd0I7QUFDNUIsSUFBSUMsd0JBQXdCO0FBQzVCLElBQUlDLG1CQUFtQkMsS0FBS0MsR0FBRztBQUUvQixnRkFBZ0Y7QUFDaEYseUVBQXlFO0FBQ3pFLE1BQU1DLHFCQUFxQixLQUFLLEtBQUssTUFBTywyQ0FBMkM7QUFDdkYsTUFBTUMsZ0JBQWdCLElBQUssb0RBQW9EO0FBQy9FLE1BQU1DLDRCQUE0QixLQUFLLE1BQU8scUJBQXFCO0FBQ25FLE1BQU1DLGdCQUFnQixHQUFLLHNEQUFzRDtBQUVqRix5Q0FBeUM7QUFDekNDLFlBQVk7SUFDVixNQUFNTCxNQUFNRCxLQUFLQyxHQUFHO0lBQ3BCLE1BQU1NLGlCQUFpQkMsT0FBT0MsSUFBSSxDQUFDZjtJQUVuQyx3RUFBd0U7SUFDeEUsSUFBSU8sTUFBTUYsbUJBQW1CLEtBQUssS0FBSyxNQUFNO1FBQzNDVyxRQUFRQyxHQUFHLENBQUMsQ0FBQywrQkFBK0IsRUFBRWhCLHdCQUF3QixtQkFBbUIsRUFBRUMsb0JBQW9CLFVBQVUsRUFBRUMsc0JBQXNCLFVBQVUsRUFBRUMsc0JBQXNCLGdCQUFnQixFQUFFLENBQUMsQ0FBQ0Qsd0JBQXdCRCxtQkFBa0IsSUFBS0QsMEJBQTBCLEdBQUUsRUFBR2lCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsU2pCLDBCQUEwQjtRQUMxQkMsc0JBQXNCO1FBQ3RCQyx3QkFBd0I7UUFDeEJDLHdCQUF3QjtRQUN4QkMsbUJBQW1CRTtJQUNyQjtJQUVBLG1FQUFtRTtJQUNu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QUFBQSxDQUFBQTtBQW1YQWtFLDBGQUFBQSxDQUFBQTtBQTBDQUMsMEZBQUFBLENBQUFBO0FBaUdBUywwRkFBQUEsQ0FBQUE7QUFzTUF3RCwwRkFBQUEsQ0FBQUE7QUEyTEFvQywwRkFBQUEsQ0FBQUE7QUFtREFJLDBGQUFBQSxDQUFBQTtBQTREQUMsMEZBQUFBLENBQUFBO0FBa0ZBdkYsMEZBQUFBLENBQUFBO0FBcUJBa0csMEZBQUFBLENBQUFBIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2xpYi9zZXJ2aWNlcy9lbWFpbC1zZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJztcblxuaW1wb3J0ICdzZXJ2ZXItb25seSc7XG5pbXBvcnQgeyBJbWFwRmxvdyB9IGZyb20gJ2ltYXBmbG93JztcbmltcG9ydCBub2RlbWFpbGVyIGZyb20gJ25vZGVtYWlsZXInO1xuaW1wb3J0IHsgcHJpc21hIH0gZnJvbSAnQC9saWIvcHJpc21hJztcbmltcG9ydCB7IHNpbXBsZVBhcnNlciB9IGZyb20gJ21haWxwYXJzZXInO1xuaW1wb3J0IHsgXG4gIGNhY2hlRW1haWxDcmVkZW50aWFscywgXG4gIGdldENhY2hlZEVtYWlsQ3JlZGVudGlhbHMsXG4gIGNhY2hlRW1haWxMaXN0LFxuICBnZXRDYWNoZWRFbWFpbExpc3QsXG4gIGNhY2hlRW1haWxDb250ZW50LFxuICBnZXRDYWNoZWRFbWFpbENvbnRlbnQsXG4gIGNhY2hlSW1hcFNlc3Npb24sXG4gIGdldENhY2hlZEltYXBTZXNzaW9uLFxuICBpbnZhbGlkYXRlRm9sZGVyQ2FjaGUsXG4gIGludmFsaWRhdGVFbWFpbENvbnRlbnRDYWNoZVxufSBmcm9tICdAL2xpYi9yZWRpcyc7XG5pbXBvcnQgeyBFbWFpbENyZWRlbnRpYWxzLCBFbWFpbE1lc3NhZ2UsIEVtYWlsQWRkcmVzcywgRW1haWxBdHRhY2htZW50IH0gZnJvbSAnQC9saWIvdHlwZXMnO1xuaW1wb3J0IHsgZW5zdXJlRnJlc2hUb2tlbiB9IGZyb20gJy4vdG9rZW4tcmVmcmVzaCc7XG5pbXBvcnQgeyBjcmVhdGVYT0F1dGgyVG9rZW4sIHJlZnJlc2hBY2Nlc3NUb2tlbiBhcyByZWZyZXNoTWljcm9zb2Z0QWNjZXNzVG9rZW4gfSBmcm9tICcuL21pY3Jvc29mdC1vYXV0aCc7XG5pbXBvcnQgeyBNYWlsQ3JlZGVudGlhbHMgfSBmcm9tICdAcHJpc21hL2NsaWVudCc7XG5pbXBvcnQgUmVkaXMgZnJvbSAnaW9yZWRpcyc7XG5pbXBvcnQgeyBnZXRSZWRpc0NsaWVudCB9IGZyb20gJy4uL3JlZGlzJztcblxuLy8gRGVmaW5lIEVtYWlsQ3JlZGVudGlhbHMgaW50ZXJmYWNlIHdpdGggT0F1dGggcHJvcGVydGllc1xuaW50ZXJmYWNlIEVtYWlsQ3JlZGVudGlhbHNFeHRlbmRlZCBleHRlbmRzIEVtYWlsQ3JlZGVudGlhbHMge1xuICB1c2VPQXV0aD86IGJvb2xlYW47XG4gIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuRXhwaXJ5PzogbnVtYmVyO1xufVxuXG4vLyBEZWZpbmUgdGhlIGV4dGVuZGVkIE1haWxDcmVkZW50aWFscyB0eXBlIHRoYXQgaW5jbHVkZXMgT0F1dGggZmllbGRzXG5pbnRlcmZhY2UgTWFpbENyZWRlbnRpYWxzV2l0aE9BdXRoIGV4dGVuZHMgTWFpbENyZWRlbnRpYWxzIHtcbiAgdXNlT0F1dGg/OiBib29sZWFuO1xuICBhY2Nlc3NUb2tlbj86IHN0cmluZyB8IG51bGw7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZyB8IG51bGw7XG4gIHRva2VuRXhwaXJ5PzogRGF0ZSB8IG51bGw7XG59XG5cbi8vIFR5cGVzIHNwZWNpZmljIHRvIHRoaXMgc2VydmljZVxuZXhwb3J0IGludGVyZmFjZSBFbWFpbExpc3RSZXN1bHQge1xuICBlbWFpbHM6IEVtYWlsTWVzc2FnZVtdO1xuICB0b3RhbEVtYWlsczogbnVtYmVyO1xuICBwYWdlOiBudW1iZXI7XG4gIHBlclBhZ2U6IG51bWJlcjtcbiAgdG90YWxQYWdlczogbnVtYmVyO1xuICBmb2xkZXI6IHN0cmluZztcbiAgbWFpbGJveGVzOiBzdHJpbmdbXTtcbiAgbmV3ZXN0RW1haWxJZDogbnVtYmVyO1xufVxuXG4vLyBDb25uZWN0aW9uIHBvb2wgdG8gcmV1c2UgSU1BUCBjbGllbnRzXG5jb25zdCBjb25uZWN0aW9uUG9vbDogUmVjb3JkPHN0cmluZywgeyBcbiAgY2xpZW50OiBJbWFwRmxvdzsgXG4gIGxhc3RVc2VkOiBudW1iZXI7XG4gIGlzQ29ubmVjdGluZzogYm9vbGVhbjtcbiAgY29ubmVjdGlvblByb21pc2U/OiBQcm9taXNlPEltYXBGbG93PjtcbiAgY29ubmVjdGlvbkF0dGVtcHRzPzogbnVtYmVyO1xufT4gPSB7fTtcblxuLy8gVHJhY2sgb3ZlcmFsbCBjb25uZWN0aW9uIG1ldHJpY3NcbmxldCB0b3RhbENvbm5lY3Rpb25SZXF1ZXN0cyA9IDA7XG5sZXQgdG90YWxOZXdDb25uZWN0aW9ucyA9IDA7XG5sZXQgdG90YWxSZXVzZUNvbm5lY3Rpb25zID0gMDtcbmxldCB0b3RhbENvbm5lY3Rpb25FcnJvcnMgPSAwO1xubGV0IGxhc3RNZXRyaWNzUmVzZXQgPSBEYXRlLm5vdygpO1xuXG4vLyBDUklUSUNBTCBQRVJGT1JNQU5DRSBGSVg6IEluY3JlYXNlIGlkbGUgdGltZW91dCBmcm9tIDE1IG1pbnV0ZXMgdG8gMzAgbWludXRlc1xuLy8gVGhpcyB3aWxsIGtlZXAgY29ubmVjdGlvbnMgYWxpdmUgbG9uZ2VyIGFuZCByZWR1Y2UgcmVjb25uZWN0aW9uIGRlbGF5c1xuY29uc3QgQ09OTkVDVElPTl9USU1FT1VUID0gMzAgKiA2MCAqIDEwMDA7ICAvLyBJbmNyZWFzZWQgdG8gMzAgbWludXRlcyAod2FzIDE1IG1pbnV0ZXMpXG5jb25zdCBNQVhfUE9PTF9TSVpFID0gMjA7ICAvLyBNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucyB0byBrZWVwIGluIHRoZSBwb29sXG5jb25zdCBDT05ORUNUSU9OX0NIRUNLX0lOVEVSVkFMID0gNjAgKiAxMDAwOyAgLy8gQ2hlY2sgZXZlcnkgbWludXRlXG5jb25zdCBNSU5fUE9PTF9TSVpFID0gMjsgICAvLyBLZWVwIGF0IGxlYXN0IHRoaXMgbWFueSBhY3RpdmUgY29ubmVjdGlvbnMgcGVyIHVzZXJcblxuLy8gQ2xlYW4gdXAgaWRsZSBjb25uZWN0aW9ucyBwZXJpb2RpY2FsbHlcbnNldEludGVydmFsKCgpID0+IHtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgY29ubmVjdGlvbktleXMgPSBPYmplY3Qua2V5cyhjb25uZWN0aW9uUG9vbCk7XG4gIFxuICAvLyBJZiB3ZSd2ZSBiZWVuIGNvbGxlY3RpbmcgbWV0cmljcyBmb3IgbW9yZSB0aGFuIGFuIGhvdXIsIGxvZyBhbmQgcmVzZXRcbiAgaWYgKG5vdyAtIGxhc3RNZXRyaWNzUmVzZXQgPiA2MCAqIDYwICogMTAwMCkge1xuICAgIGNvbnNvbGUubG9nKGBbSU1BUCBNRVRSSUNTXSBUb3RhbCByZXF1ZXN0czogJHt0b3RhbENvbm5lY3Rpb25SZXF1ZXN0c30sIE5ldyBjb25uZWN0aW9uczogJHt0b3RhbE5ld0Nvbm5lY3Rpb25zfSwgUmV1c2VkOiAke3RvdGFsUmV1c2VDb25uZWN0aW9uc30sIEVycm9yczogJHt0b3RhbENvbm5lY3Rpb25FcnJvcnN9LCBTdWNjZXNzIHJhdGU6ICR7KCh0b3RhbFJldXNlQ29ubmVjdGlvbnMgKyB0b3RhbE5ld0Nvbm5lY3Rpb25zKSAvIHRvdGFsQ29ubmVjdGlvblJlcXVlc3RzICogMTAwKS50b0ZpeGVkKDIpfSVgKTtcbiAgICB0b3RhbENvbm5lY3Rpb25SZXF1ZXN0cyA9IDA7XG4gICAgdG90YWxOZXdDb25uZWN0aW9ucyA9IDA7XG4gICAgdG90YWxSZXVzZUNvbm5lY3Rpb25zID0gMDtcbiAgICB0b3RhbENvbm5lY3Rpb25FcnJvcnMgPSAwO1xuICAgIGxhc3RNZXRyaWNzUmVzZXQgPSBub3c7XG4gIH1cbiAgXG4gIC8vIFBFUkZPUk1BTkNFIEZJWDogR3JvdXAgY29ubmVjdGlvbnMgYnkgdXNlciBmb3IgYmV0dGVyIG1hbmFnZW1lbnRcbiAgY29uc3QgY29ubmVjdGlvbnNCeVVzZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICBcbiAgY29ubmVjdGlvbktleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgIGNvbnN0IHVzZXJJZCA9IGtleS5zcGxpdCgnOicpWzBdO1xuICAgIGlmICghY29ubmVjdGlvbnNCeVVzZXJbdXNlcklkXSkge1xuICAgICAgY29ubmVjdGlvbnNCeVVzZXJbdXNlcklkXSA9IFtdO1xuICAgIH1cbiAgICBjb25uZWN0aW9uc0J5VXNlclt1c2VySWRdLnB1c2goa2V5KTtcbiAgfSk7XG4gIFxuICAvLyBQRVJGT1JNQU5DRSBGSVg6IE1hbmFnZSBwb29sIHNpemUgcGVyIHVzZXJcbiAgT2JqZWN0LmVudHJpZXMoY29ubmVjdGlvbnNCeVVzZXIpLmZvckVhY2goKFt1c2VySWQsIHVzZXJDb25uZWN0aW9uc10pID0+IHtcbiAgICAvLyBTb3J0IGNvbm5lY3Rpb25zIGJ5IGxhc3QgdXNlZCAob2xkZXN0IGZpcnN0KVxuICAgIGNvbnN0IHNvcnRlZENvbm5lY3Rpb25zID0gdXNlckNvbm5lY3Rpb25zXG4gICAgICAubWFwKGtleSA9PiAoeyBrZXksIGxhc3RVc2VkOiBjb25uZWN0aW9uUG9vbFtrZXldLmxhc3RVc2VkIH0pKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEubGFzdFVzZWQgLSBiLmxhc3RVc2VkKTtcbiAgICBcbiAgICAvLyBLZWVwIHRoZSBtb3N0IHJlY2VudGx5IHVzZWQgY29ubmVjdGlvbnMgdXAgdG8gdGhlIG1pbiBwb29sIHNpemVcbiAgICBjb25zdCBjb25uZWN0aW9uc1RvS2VlcCA9IHNvcnRlZENvbm5lY3Rpb25zLnNsaWNlKC1NSU5fUE9PTF9TSVpFKTtcbiAgICBjb25zdCBrZWVwS2V5cyA9IG5ldyBTZXQoY29ubmVjdGlvbnNUb0tlZXAubWFwKGNvbm4gPT4gY29ubi5rZXkpKTtcbiAgICBcbiAgICAvLyBDaGVjayB0aGUgcmVzdCBmb3IgaWRsZSB0aW1lb3V0XG4gICAgc29ydGVkQ29ubmVjdGlvbnMuZm9yRWFjaCgoeyBrZXksIGxhc3RVc2VkIH0pID0+IHtcbiAgICAgIC8vIFNraXAgY29ubmVjdGlvbnMgdG8ga2VlcCBhbmQgdGhvc2UgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgY29ubmVjdGluZ1xuICAgICAgaWYgKGtlZXBLZXlzLmhhcyhrZXkpIHx8IGNvbm5lY3Rpb25Qb29sW2tleV0uaXNDb25uZWN0aW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gT25seSBjbG9zZSBjb25uZWN0aW9ucyBpZGxlIGZvciB0b28gbG9uZ1xuICAgICAgaWYgKG5vdyAtIGxhc3RVc2VkID4gQ09OTkVDVElPTl9USU1FT1VUKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBDbG9zaW5nIGlkbGUgSU1BUCBjb25uZWN0aW9uIGZvciAke2tleX0gKGlkbGUgZm9yICR7TWF0aC5yb3VuZCgobm93IC0gbGFzdFVzZWQpLzEwMDApfXMpYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGNvbm5lY3Rpb25Qb29sW2tleV0uY2xpZW50LnVzYWJsZSkge1xuICAgICAgICAgICAgY29ubmVjdGlvblBvb2xba2V5XS5jbGllbnQubG9nb3V0KCkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgY2xvc2luZyBpZGxlIGNvbm5lY3Rpb24gZm9yICR7a2V5fTpgLCBlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGNoZWNraW5nIGNvbm5lY3Rpb24gc3RhdHVzIGZvciAke2tleX06YCwgZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGRlbGV0ZSBjb25uZWN0aW9uUG9vbFtrZXldO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBSZW1vdmVkIGlkbGUgY29ubmVjdGlvbiBmb3IgJHtrZXl9IGZyb20gcG9vbCAocG9vbCBzaXplOiAke09iamVjdC5rZXlzKGNvbm5lY3Rpb25Qb29sKS5sZW5ndGh9KWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICBcbiAgLy8gTG9nIGNvbm5lY3Rpb24gcG9vbCBzdGF0dXMgd2l0aCBtb3JlIGRldGFpbHNcbiAgY29uc3QgYWN0aXZlQ291bnQgPSBjb25uZWN0aW9uS2V5cy5maWx0ZXIoa2V5ID0+IHtcbiAgICBjb25zdCBjb25uID0gY29ubmVjdGlvblBvb2xba2V5XTtcbiAgICByZXR1cm4gIWNvbm4uaXNDb25uZWN0aW5nICYmIChjb25uLmNsaWVudD8udXNhYmxlIHx8IGZhbHNlKTtcbiAgfSkubGVuZ3RoO1xuICBcbiAgY29uc3QgY29ubmVjdGluZ0NvdW50ID0gY29ubmVjdGlvbktleXMuZmlsdGVyKGtleSA9PiBjb25uZWN0aW9uUG9vbFtrZXldLmlzQ29ubmVjdGluZykubGVuZ3RoO1xuICBcbiAgY29uc29sZS5sb2coYFtJTUFQIFBPT0xdIFNpemU6ICR7Y29ubmVjdGlvbktleXMubGVuZ3RofSwgQWN0aXZlOiAke2FjdGl2ZUNvdW50fSwgQ29ubmVjdGluZzogJHtjb25uZWN0aW5nQ291bnR9LCBNYXg6ICR7TUFYX1BPT0xfU0laRX1gKTtcbn0sIENPTk5FQ1RJT05fQ0hFQ0tfSU5URVJWQUwpO1xuXG4vKipcbiAqIEdldCBJTUFQIGNvbm5lY3Rpb24gZm9yIGEgdXNlciwgcmV1c2luZyBleGlzdGluZyBjb25uZWN0aW9ucyB3aGVuIHBvc3NpYmxlXG4gKiB3aXRoIGltcHJvdmVkIGNvbm5lY3Rpb24gaGFuZGxpbmcgYW5kIGVycm9yIHJlY292ZXJ5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRJbWFwQ29ubmVjdGlvbihcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGFjY291bnRJZD86IHN0cmluZ1xuKTogUHJvbWlzZTxJbWFwRmxvdz4ge1xuICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICB0b3RhbENvbm5lY3Rpb25SZXF1ZXN0cysrO1xuICBcbiAgY29uc29sZS5sb2coYEdldHRpbmcgSU1BUCBjb25uZWN0aW9uIGZvciB1c2VyICR7dXNlcklkfSR7YWNjb3VudElkID8gYCBhY2NvdW50ICR7YWNjb3VudElkfWAgOiAnJ31gKTtcbiAgXG4gIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yICdkZWZhdWx0JyBhY2NvdW50SWQgLSBmaW5kIHRoZSBmaXJzdCBhdmFpbGFibGUgYWNjb3VudFxuICBpZiAoIWFjY291bnRJZCB8fCBhY2NvdW50SWQgPT09ICdkZWZhdWx0Jykge1xuICAgIGNvbnNvbGUubG9nKGBObyBzcGVjaWZpYyBhY2NvdW50IHByb3ZpZGVkIG9yICdkZWZhdWx0JyByZXF1ZXN0ZWQsIHRyeWluZyB0byBmaW5kIGZpcnN0IGFjY291bnQgZm9yIHVzZXIgJHt1c2VySWR9YCk7XG4gICAgXG4gICAgLy8gVHJ5IGdldHRpbmcgdGhlIGFjY291bnQgSUQgZnJvbSBjYWNoZSB0byBhdm9pZCBkYXRhYmFzZSBxdWVyeVxuICAgIGNvbnN0IHNlc3Npb25EYXRhID0gYXdhaXQgZ2V0Q2FjaGVkSW1hcFNlc3Npb24odXNlcklkKTtcbiAgICBpZiAoc2Vzc2lvbkRhdGEgJiYgc2Vzc2lvbkRhdGEuZGVmYXVsdEFjY291bnRJZCkge1xuICAgICAgYWNjb3VudElkID0gc2Vzc2lvbkRhdGEuZGVmYXVsdEFjY291bnRJZDtcbiAgICAgIGNvbnNvbGUubG9nKGBVc2luZyBjYWNoZWQgZGVmYXVsdCBhY2NvdW50IElEOiAke2FjY291bnRJZH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUXVlcnkgdG8gZmluZCBhbGwgYWNjb3VudHMgZm9yIHRoaXMgdXNlclxuICAgICAgY29uc3QgYWNjb3VudHMgPSBhd2FpdCBwcmlzbWEubWFpbENyZWRlbnRpYWxzLmZpbmRNYW55KHtcbiAgICAgICAgd2hlcmU6IHsgdXNlcklkIH0sXG4gICAgICAgIG9yZGVyQnk6IHsgY3JlYXRlZEF0OiAnYXNjJyB9LFxuICAgICAgICB0YWtlOiAxXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgaWYgKGFjY291bnRzICYmIGFjY291bnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RBY2NvdW50ID0gYWNjb3VudHNbMF07XG4gICAgICAgIGNvbnNvbGUubG9nKGBVc2luZyBmaXJzdCBhdmFpbGFibGUgYWNjb3VudDogJHtmaXJzdEFjY291bnQuaWR9ICgke2ZpcnN0QWNjb3VudC5lbWFpbH0pYCk7XG4gICAgICAgIGFjY291bnRJZCA9IGZpcnN0QWNjb3VudC5pZDtcbiAgICAgICAgXG4gICAgICAgIC8vIENhY2hlIGRlZmF1bHQgYWNjb3VudCBJRCBmb3IgZnV0dXJlIHVzZVxuICAgICAgICBpZiAoc2Vzc2lvbkRhdGEpIHtcbiAgICAgICAgICBhd2FpdCBjYWNoZUltYXBTZXNzaW9uKHVzZXJJZCwge1xuICAgICAgICAgICAgLi4uc2Vzc2lvbkRhdGEsXG4gICAgICAgICAgICBkZWZhdWx0QWNjb3VudElkOiBhY2NvdW50SWQsXG4gICAgICAgICAgICBsYXN0QWN0aXZlOiBEYXRlLm5vdygpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgY2FjaGVJbWFwU2Vzc2lvbih1c2VySWQsIHtcbiAgICAgICAgICAgIGxhc3RBY3RpdmU6IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWZhdWx0QWNjb3VudElkOiBhY2NvdW50SWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG90YWxDb25uZWN0aW9uRXJyb3JzKys7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZW1haWwgYWNjb3VudHMgY29uZmlndXJlZCBmb3IgdGhpcyB1c2VyJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAvLyBVc2UgYWNjb3VudElkIGluIGNvbm5lY3Rpb24ga2V5IHRvIGVuc3VyZSBkaWZmZXJlbnQgYWNjb3VudHMgZ2V0IGRpZmZlcmVudCBjb25uZWN0aW9uc1xuICBjb25zdCBjb25uZWN0aW9uS2V5ID0gYCR7dXNlcklkfToke2FjY291bnRJZH1gO1xuICBcbiAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGEgY29ubmVjdGlvbiBmb3IgdGhpcyBrZXlcbiAgaWYgKGNvbm5lY3Rpb25Qb29sW2Nvbm5lY3Rpb25LZXldKSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3Rpb25Qb29sW2Nvbm5lY3Rpb25LZXldO1xuICAgIFxuICAgIC8vIElmIGEgY29ubmVjdGlvbiBpcyBiZWluZyBlc3RhYmxpc2hlZCwgd2FpdCBmb3IgaXRcbiAgICBpZiAoY29ubmVjdGlvbi5pc0Nvbm5lY3RpbmcgJiYgY29ubmVjdGlvbi5jb25uZWN0aW9uUHJvbWlzZSkge1xuICAgICAgY29uc29sZS5sb2coYENvbm5lY3Rpb24gaW4gcHJvZ3Jlc3MgZm9yICR7Y29ubmVjdGlvbktleX0sIHdhaXRpbmcgZm9yIGV4aXN0aW5nIGNvbm5lY3Rpb25gKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGNvbm5lY3Rpb24uY29ubmVjdGlvblByb21pc2U7XG4gICAgICAgIGNvbm5lY3Rpb24ubGFzdFVzZWQgPSBEYXRlLm5vdygpO1xuICAgICAgICB0b3RhbFJldXNlQ29ubmVjdGlvbnMrKztcbiAgICAgICAgY29uc29sZS5sb2coYFtJTUFQXSBSZXVzZWQgcGVuZGluZyBjb25uZWN0aW9uIGZvciAke2Nvbm5lY3Rpb25LZXl9IGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1tc2ApO1xuICAgICAgICByZXR1cm4gY2xpZW50O1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3Igd2FpdGluZyBmb3IgY29ubmVjdGlvbiBmb3IgJHtjb25uZWN0aW9uS2V5fTpgLCBlcnJvcik7XG4gICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBjcmVhdGUgbmV3IGNvbm5lY3Rpb25cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gVHJ5IHRvIHVzZSBleGlzdGluZyBjb25uZWN0aW9uIGlmIGl0J3MgdXNhYmxlXG4gICAgdHJ5IHtcbiAgICAgIC8vIFBFUkZPUk1BTkNFIEZJWDogTW9yZSByb2J1c3QgY29ubmVjdGlvbiBzdGF0dXMgY2hlY2tpbmdcbiAgICAgIGlmIChjb25uZWN0aW9uLmNsaWVudCAmJiBjb25uZWN0aW9uLmNsaWVudC51c2FibGUpIHtcbiAgICAgICAgLy8gVG91Y2ggdGhlIGNvbm5lY3Rpb24gdG8gbWFyayBpdCBhcyByZWNlbnRseSB1c2VkXG4gICAgICAgIGNvbm5lY3Rpb24ubGFzdFVzZWQgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zb2xlLmxvZyhgUmV1c2luZyBleGlzdGluZyBJTUFQIGNvbm5lY3Rpb24gZm9yICR7Y29ubmVjdGlvbktleX1gKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFVwZGF0ZSBzZXNzaW9uIGRhdGEgaW4gUmVkaXNcbiAgICAgICAgYXdhaXQgdXBkYXRlU2Vzc2lvbkRhdGEodXNlcklkLCBhY2NvdW50SWQpO1xuICAgICAgICBcbiAgICAgICAgdG90YWxSZXVzZUNvbm5lY3Rpb25zKys7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbSU1BUF0gU3VjY2Vzc2Z1bGx5IHJldXNlZCBjb25uZWN0aW9uIGZvciAke2Nvbm5lY3Rpb25LZXl9IGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1tc2ApO1xuICAgICAgICByZXR1cm4gY29ubmVjdGlvbi5jbGllbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgRXhpc3RpbmcgY29ubmVjdGlvbiBmb3IgJHtjb25uZWN0aW9uS2V5fSBub3QgdXNhYmxlLCByZWNyZWF0aW5nYCk7XG4gICAgICAgIC8vIFdpbGwgY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gYmVsb3dcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKGBFcnJvciBjaGVja2luZyBleGlzdGluZyBjb25uZWN0aW9uIGZvciAke2Nvbm5lY3Rpb25LZXl9OmAsIGVycm9yKTtcbiAgICAgIC8vIFdpbGwgY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gYmVsb3dcbiAgICB9XG4gIH1cbiAgXG4gIC8vIElmIHdlIGdldCBoZXJlLCB3ZSBuZWVkIGEgbmV3IGNvbm5lY3Rpb25cbiAgY29uc29sZS5sb2coYENyZWF0aW5nIG5ldyBJTUFQIGNvbm5lY3Rpb24gZm9yICR7Y29ubmVjdGlvbktleX1gKTtcbiAgXG4gIC8vIEZpcnN0IHRyeSB0byBnZXQgY3JlZGVudGlhbHMgZnJvbSBSZWRpcyBjYWNoZVxuICBsZXQgY3JlZGVudGlhbHMgPSBhd2FpdCBnZXRDYWNoZWRFbWFpbENyZWRlbnRpYWxzKHVzZXJJZCwgYWNjb3VudElkKTtcbiAgY29uc29sZS5sb2coYFJldHJpZXZlZCBjcmVkZW50aWFscyBmcm9tIFJlZGlzIGNhY2hlIGZvciAke3VzZXJJZH06JHthY2NvdW50SWR9OmAsIGNyZWRlbnRpYWxzID8ge1xuICAgIGVtYWlsOiBjcmVkZW50aWFscy5lbWFpbCxcbiAgICBoYXNQYXNzd29yZDogISFjcmVkZW50aWFscy5wYXNzd29yZCxcbiAgICB1c2VPQXV0aDogISFjcmVkZW50aWFscy51c2VPQXV0aCxcbiAgICBoYXNBY2Nlc3NUb2tlbjogISFjcmVkZW50aWFscy5hY2Nlc3NUb2tlbixcbiAgICBoYXNSZWZyZXNoVG9rZW46ICEhY3JlZGVudGlhbHMucmVmcmVzaFRva2VuXG4gIH0gOiAnTm8gY3JlZGVudGlhbHMgZm91bmQgaW4gY2FjaGUnKTtcbiAgXG4gIC8vIElmIG5vdCBpbiBjYWNoZSwgZ2V0IGZyb20gZGF0YWJhc2UgYW5kIGNhY2hlIHRoZW1cbiAgaWYgKCFjcmVkZW50aWFscykge1xuICAgIGNvbnNvbGUubG9nKGBDcmVkZW50aWFscyBub3QgZm91bmQgaW4gY2FjaGUgZm9yICR7dXNlcklkfSR7YWNjb3VudElkID8gYCBhY2NvdW50ICR7YWNjb3VudElkfWAgOiAnJ30sIGF0dGVtcHRpbmcgZGF0YWJhc2UgbG9va3VwYCk7XG4gICAgXG4gICAgLy8gRmV0Y2ggZGlyZWN0bHkgZnJvbSBkYXRhYmFzZVxuICAgIGNvbnN0IGRiQ3JlZGVudGlhbHMgPSBhd2FpdCBwcmlzbWEubWFpbENyZWRlbnRpYWxzLmZpbmRGaXJzdCh7XG4gICAgICB3aGVyZToge1xuICAgICAgICBBTkQ6IFtcbiAgICAgICAgICB7IHVzZXJJZCB9LFxuICAgICAgICAgIGFjY291bnRJZCA/IHsgaWQ6IGFjY291bnRJZCB9IDoge31cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIGlmICghZGJDcmVkZW50aWFscykge1xuICAgICAgY29uc29sZS5lcnJvcihgTm8gY3JlZGVudGlhbHMgZm91bmQgZm9yIHVzZXIgJHt1c2VySWR9JHthY2NvdW50SWQgPyBgIGFjY291bnQgJHthY2NvdW50SWR9YCA6ICcnfWApO1xuICAgICAgdG90YWxDb25uZWN0aW9uRXJyb3JzKys7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtYWlsIGFjY291bnQgY3JlZGVudGlhbHMgbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIFxuICAgIGNvbnNvbGUubG9nKGBEYXRhYmFzZSBsb29rdXAgcmV0dXJuZWQgY3JlZGVudGlhbHMgZm9yICR7ZGJDcmVkZW50aWFscy5lbWFpbH06YCwge1xuICAgICAgZW1haWw6IGRiQ3JlZGVudGlhbHMuZW1haWwsXG4gICAgICBoYXNQYXNzd29yZDogISFkYkNyZWRlbnRpYWxzLnBhc3N3b3JkLFxuICAgICAgZmllbGRzOiBPYmplY3Qua2V5cyhkYkNyZWRlbnRpYWxzKVxuICAgIH0pO1xuICAgIFxuICAgIC8vIENyZWF0ZSBvdXIgY3JlZGVudGlhbHMgb2JqZWN0IGZyb20gZGF0YWJhc2UgZGF0YVxuICAgIGNyZWRlbnRpYWxzID0ge1xuICAgICAgZW1haWw6IGRiQ3JlZGVudGlhbHMuZW1haWwsXG4gICAgICBwYXNzd29yZDogZGJDcmVkZW50aWFscy5wYXNzd29yZCB8fCAnJyxcbiAgICAgIGhvc3Q6IGRiQ3JlZGVudGlhbHMuaG9zdCxcbiAgICAgIHBvcnQ6IGRiQ3JlZGVudGlhbHMucG9ydCxcbiAgICAgIHNlY3VyZTogZGJDcmVkZW50aWFscy5zZWN1cmUsXG4gICAgICBzbXRwX2hvc3Q6IGRiQ3JlZGVudGlhbHMuc210cF9ob3N0IHx8IHVuZGVmaW5lZCxcbiAgICAgIHNtdHBfcG9ydDogZGJDcmVkZW50aWFscy5zbXRwX3BvcnQgfHwgdW5kZWZpbmVkLFxuICAgICAgc210cF9zZWN1cmU6IGRiQ3JlZGVudGlhbHMuc210cF9zZWN1cmUgPz8gZmFsc2UsXG4gICAgICBkaXNwbGF5X25hbWU6IGRiQ3JlZGVudGlhbHMuZGlzcGxheV9uYW1lIHx8IHVuZGVmaW5lZCxcbiAgICAgIGNvbG9yOiBkYkNyZWRlbnRpYWxzLmNvbG9yIHx8IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cbiAgXG4gIC8vIENhc3QgdG8gZXh0ZW5kZWQgdHlwZVxuICBjb25zdCBleHRlbmRlZENyZWRzID0gY3JlZGVudGlhbHMgYXMgRW1haWxDcmVkZW50aWFsc0V4dGVuZGVkO1xuICBcbiAgLy8gTUlDUk9TT0ZUIEZJWDogRGV0ZWN0IE1pY3Jvc29mdCBhY2NvdW50cyBieSBob3N0bmFtZSBhbmQgc2V0IE9BdXRoIGZsYWdcbiAgaWYgKGV4dGVuZGVkQ3JlZHMuaG9zdCA9PT0gJ291dGxvb2sub2ZmaWNlMzY1LmNvbScpIHtcbiAgICBjb25zb2xlLmxvZyhgTWljcm9zb2Z0IGFjY291bnQgZGV0ZWN0ZWQgKCR7ZXh0ZW5kZWRDcmVkcy5lbWFpbH0pLCBzZXR0aW5nIHVzZU9BdXRoPXRydWVgKTtcbiAgICBleHRlbmRlZENyZWRzLnVzZU9BdXRoID0gdHJ1ZTtcblxuICAgIC8vIElmIHdlIGhhdmUgbm8gcGFzc3dvcmQgYnV0IHVzZU9BdXRoIGlzIHRydWUsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHJlZnJlc2ggdG9rZW4gZXhpc3RzIGluIFJlZGlzXG4gICAgaWYgKCFleHRlbmRlZENyZWRzLnBhc3N3b3JkICYmICFleHRlbmRlZENyZWRzLmFjY2Vzc1Rva2VuKSB7XG4gICAgICAvLyBJZiBydW5uaW5nIGluIGJyb3dzZXIgZWRnZSBlbnZpcm9ubWVudCAoc2VydmVybGVzcyksIHRyeSB0byByZWZyZXNoIG91ciB0b2tlbnMgZnJvbSBSZWRpc1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2FjaGVkQ3JlZHMgPSBhd2FpdCBnZXRDYWNoZWRFbWFpbENyZWRlbnRpYWxzKHVzZXJJZCwgYWNjb3VudElkKTtcbiAgICAgICAgaWYgKGNhY2hlZENyZWRzICYmIGNhY2hlZENyZWRzLnJlZnJlc2hUb2tlbikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBGb3VuZCByZWZyZXNoIHRva2VuIGluIFJlZGlzIGZvciAke2V4dGVuZGVkQ3JlZHMuZW1haWx9LCB3aWxsIHVzZSBpdGApO1xuICAgICAgICAgIGV4dGVuZGVkQ3JlZHMucmVmcmVzaFRva2VuID0gY2FjaGVkQ3JlZHMucmVmcmVzaFRva2VuO1xuICAgICAgICAgIGV4dGVuZGVkQ3JlZHMuYWNjZXNzVG9rZW4gPSBjYWNoZWRDcmVkcy5hY2Nlc3NUb2tlbjtcbiAgICAgICAgICBleHRlbmRlZENyZWRzLnRva2VuRXhwaXJ5ID0gY2FjaGVkQ3JlZHMudG9rZW5FeHBpcnk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGNhY2hlIHRoZXNlIGNyZWRlbnRpYWxzIGFnYWluIHdpdGggdGhlIHRva2Vuc1xuICAgICAgICAgIGF3YWl0IGNhY2hlRW1haWxDcmVkZW50aWFscyh1c2VySWQsIGFjY291bnRJZCwgZXh0ZW5kZWRDcmVkcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBObyByZWZyZXNoIHRva2VuIGZvdW5kIGZvciAke2V4dGVuZGVkQ3JlZHMuZW1haWx9IGluIFJlZGlzIGNhY2hlYCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciByZXRyaWV2aW5nIGNhY2hlZCBjcmVkZW50aWFscyBmb3IgJHtleHRlbmRlZENyZWRzLmVtYWlsfTpgLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLy8gSWYgdXNpbmcgT0F1dGgsIGVuc3VyZSB3ZSBoYXZlIGEgZnJlc2ggdG9rZW5cbiAgaWYgKGV4dGVuZGVkQ3JlZHMudXNlT0F1dGgpIHtcbiAgICBjb25zb2xlLmxvZyhgQWNjb3VudCBpcyBjb25maWd1cmVkIHRvIHVzZSBPQXV0aGApO1xuICAgIFxuICAgIGlmICghZXh0ZW5kZWRDcmVkcy5hY2Nlc3NUb2tlbikge1xuICAgICAgY29uc29sZS5lcnJvcihgT0F1dGggaXMgZW5hYmxlZCBidXQgbm8gYWNjZXNzIHRva2VuIGZvciBhY2NvdW50ICR7ZXh0ZW5kZWRDcmVkcy5lbWFpbH1gKTtcbiAgICB9XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUubG9nKGBFbnN1cmluZyBmcmVzaCB0b2tlbiBmb3IgT0F1dGggYWNjb3VudCAke2V4dGVuZGVkQ3JlZHMuZW1haWx9YCk7XG4gICAgICBjb25zdCB7IGFjY2Vzc1Rva2VuLCBzdWNjZXNzIH0gPSBhd2FpdCBlbnN1cmVGcmVzaFRva2VuKHVzZXJJZCwgZXh0ZW5kZWRDcmVkcy5lbWFpbCk7XG4gICAgICBcbiAgICAgIGlmIChzdWNjZXNzICYmIGFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIGV4dGVuZGVkQ3JlZHMuYWNjZXNzVG9rZW4gPSBhY2Nlc3NUb2tlbjtcbiAgICAgICAgY29uc29sZS5sb2coYFN1Y2Nlc3NmdWxseSByZWZyZXNoZWQgdG9rZW4gZm9yICR7ZXh0ZW5kZWRDcmVkcy5lbWFpbH1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byByZWZyZXNoIHRva2VuIGZvciAke2V4dGVuZGVkQ3JlZHMuZW1haWx9YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBFcnJvciByZWZyZXNoaW5nIHRva2VuIGZvciAke2V4dGVuZGVkQ3JlZHMuZW1haWx9OmAsIGVycik7XG4gICAgfVxuICB9XG4gIFxuICAvLyBJbml0aWFsaXplIGNvbm5lY3Rpb24gdHJhY2tpbmdcbiAgY29ubmVjdGlvblBvb2xbY29ubmVjdGlvbktleV0gPSB7XG4gICAgY2xpZW50OiBudWxsIGFzIGFueSxcbiAgICBsYXN0VXNlZDogRGF0ZS5ub3coKSxcbiAgICBpc0Nvbm5lY3Rpbmc6IHRydWUsXG4gICAgY29ubmVjdGlvbkF0dGVtcHRzOiAoY29ubmVjdGlvblBvb2xbY29ubmVjdGlvbktleV0/LmNvbm5lY3Rpb25BdHRlbXB0cyB8fCAwKSArIDFcbiAgfTtcbiAgXG4gIC8vIFBFUkZPUk1BTkNFIEZJWDogQWRkIGNvbm5lY3Rpb24gdGltZW91dCB0byBwcmV2ZW50IGhhbmdpbmcgY29ubmVjdGlvbnNcbiAgbGV0IGNvbm5lY3Rpb25UaW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb25zb2xlLmVycm9yKGBbSU1BUF0gQ29ubmVjdGlvbiBmb3IgJHtjb25uZWN0aW9uS2V5fSB0aW1lZCBvdXQgYWZ0ZXIgNjAgc2Vjb25kc2ApO1xuICAgIGlmIChjb25uZWN0aW9uUG9vbFtjb25uZWN0aW9uS2V5XT8uaXNDb25uZWN0aW5nKSB7XG4gICAgICBkZWxldGUgY29ubmVjdGlvblBvb2xbY29ubmVjdGlvbktleV07XG4gICAgICB0b3RhbENvbm5lY3Rpb25FcnJvcnMrKztcbiAgICB9XG4gIH0sIDYwICogMTAwMCk7IC8vIDYwIHNlY29uZHMgdGltZW91dFxuICBcbiAgLy8gQ3JlYXRlIGNvbm5lY3Rpb24gcHJvbWlzZSB1c2luZyB0aGUgZXh0ZW5kZWQgY3JlZGVudGlhbHNcbiAgY29uc3QgY29ubmVjdGlvblByb21pc2UgPSBjcmVhdGVJbWFwQ29ubmVjdGlvbihleHRlbmRlZENyZWRzLCBjb25uZWN0aW9uS2V5KVxuICAgIC50aGVuKGNsaWVudCA9PiB7XG4gICAgICAvLyBVcGRhdGUgY29ubmVjdGlvbiBwb29sIGVudHJ5XG4gICAgICBjb25uZWN0aW9uUG9vbFtjb25uZWN0aW9uS2V5XS5jbGllbnQgPSBjbGllbnQ7XG4gICAgICBjb25uZWN0aW9uUG9vbFtjb25uZWN0aW9uS2V5XS5pc0Nvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgIGNvbm5lY3Rpb25Qb29sW2Nvbm5lY3Rpb25LZXldLmxhc3RVc2VkID0gRGF0ZS5ub3coKTtcbiAgICAgIFxuICAgICAgLy8gQ2xlYXIgdGltZW91dCBzaW5jZSBjb25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsXG4gICAgICBpZiAoY29ubmVjdGlvblRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGNvbm5lY3Rpb25UaW1lb3V0KTtcbiAgICAgICAgY29ubmVjdGlvblRpbWVvdXQgPSBudWxsO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVcGRhdGUgc2Vzc2lvbiBkYXRhXG4gICAgICB1cGRhdGVTZXNzaW9uRGF0YSh1c2VySWQsIGFjY291bnRJZCkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHVwZGF0ZSBzZXNzaW9uIGRhdGE6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgdG90YWxOZXdDb25uZWN0aW9ucysrO1xuICAgICAgY29uc29sZS5sb2coYFtJTUFQXSBDcmVhdGVkIG5ldyBjb25uZWN0aW9uIGZvciAke2Nvbm5lY3Rpb25LZXl9IGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1tcyAoYXR0ZW1wdCAjJHtjb25uZWN0aW9uUG9vbFtjb25uZWN0aW9uS2V5XS5jb25uZWN0aW9uQXR0ZW1wdHN9KWApO1xuICAgICAgcmV0dXJuIGNsaWVudDtcbiAgICB9KVxuICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAvLyBDbGVhciB0aW1lb3V0IHRvIHByZXZlbnQgZG91YmxlIGVycm9yc1xuICAgICAgaWYgKGNvbm5lY3Rpb25UaW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dChjb25uZWN0aW9uVGltZW91dCk7XG4gICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSGFuZGxlIGNvbm5lY3Rpb24gZXJyb3JcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgSU1BUCBjb25uZWN0aW9uIGZvciAke2Nvbm5lY3Rpb25LZXl9OmAsIGVycm9yKTtcbiAgICAgIGRlbGV0ZSBjb25uZWN0aW9uUG9vbFtjb25uZWN0aW9uS2V5XTtcbiAgICAgIHRvdGFsQ29ubmVjdGlvbkVycm9ycysrO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIFxuICAvLyBTYXZlIHRoZSBwcm9taXNlIHRvIGFsbG93IG90aGVyIHJlcXVlc3RzIHRvIHdhaXQgZm9yIHRoaXMgY29ubmVjdGlvblxuICBjb25uZWN0aW9uUG9vbFtjb25uZWN0aW9uS2V5XS5jb25uZWN0aW9uUHJvbWlzZSA9IGNvbm5lY3Rpb25Qcm9taXNlO1xuICBcbiAgcmV0dXJuIGNvbm5lY3Rpb25Qcm9taXNlO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgSU1BUCBjb25uZWN0aW9uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUltYXBDb25uZWN0aW9uKGNyZWRlbnRpYWxzOiBFbWFpbENyZWRlbnRpYWxzLCBjb25uZWN0aW9uS2V5OiBzdHJpbmcpOiBQcm9taXNlPEltYXBGbG93PiB7XG4gIC8vIENhc3QgdG8gZXh0ZW5kZWQgdHlwZVxuICBjb25zdCBleHRlbmRlZENyZWRzID0gY3JlZGVudGlhbHMgYXMgRW1haWxDcmVkZW50aWFsc0V4dGVuZGVkO1xuICBcbiAgY29uc29sZS5sb2coYENyZWF0aW5nIElNQVAgY29ubmVjdGlvbiB3aXRoIGNyZWRlbnRpYWxzOmAsIHtcbiAgICBlbWFpbDogZXh0ZW5kZWRDcmVkcy5lbWFpbCxcbiAgICBob3N0OiBleHRlbmRlZENyZWRzLmhvc3QsXG4gICAgcG9ydDogZXh0ZW5kZWRDcmVkcy5wb3J0LFxuICAgIGhhc1Bhc3N3b3JkOiAhIWV4dGVuZGVkQ3JlZHMucGFzc3dvcmQsXG4gICAgdXNlT0F1dGg6ICEhZXh0ZW5kZWRDcmVkcy51c2VPQXV0aCxcbiAgICBoYXNBY2Nlc3NUb2tlbjogISFleHRlbmRlZENyZWRzLmFjY2Vzc1Rva2VuLFxuICAgIGhhc1JlZnJlc2hUb2tlbjogISFleHRlbmRlZENyZWRzLnJlZnJlc2hUb2tlbixcbiAgICBoYXNUb2tlbkV4cGlyeTogISFleHRlbmRlZENyZWRzLnRva2VuRXhwaXJ5XG4gIH0pO1xuICBcbiAgbGV0IGF1dGhQYXJhbXM6IGFueTtcbiAgXG4gIC8vIENoZWNrIGlmIHdlIGhhdmUgdmFsaWQgT0F1dGggdG9rZW5zXG4gIGlmIChleHRlbmRlZENyZWRzLnVzZU9BdXRoICYmIGV4dGVuZGVkQ3JlZHMuYWNjZXNzVG9rZW4pIHtcbiAgICBjb25zb2xlLmxvZyhgVXNpbmcgWE9BVVRIMiBhdXRoZW50aWNhdGlvbiBmb3IgJHtjb25uZWN0aW9uS2V5fSAoT0F1dGggZW5hYmxlZClgKTtcbiAgICBcbiAgICAvLyBTZXQgYXV0aCBwYXJhbWV0ZXJzIGZvciBJbWFwRmxvd1xuICAgIGF1dGhQYXJhbXMgPSB7XG4gICAgICB1c2VyOiBleHRlbmRlZENyZWRzLmVtYWlsLFxuICAgICAgYWNjZXNzVG9rZW46IGV4dGVuZGVkQ3JlZHMuYWNjZXNzVG9rZW5cbiAgICB9O1xuICAgIFxuICAgIGNvbnNvbGUubG9nKGBYT0FVVEgyIGF1dGggY29uZmlndXJlZCBmb3IgJHtjb25uZWN0aW9uS2V5fWApO1xuICB9IGVsc2UgaWYgKGV4dGVuZGVkQ3JlZHMucGFzc3dvcmQpIHtcbiAgICAvLyBVc2UgcmVndWxhciBwYXNzd29yZCBhdXRoZW50aWNhdGlvblxuICAgIGNvbnNvbGUubG9nKGBVc2luZyBwYXNzd29yZCBhdXRoZW50aWNhdGlvbiBmb3IgJHtjb25uZWN0aW9uS2V5fSAoT0F1dGggbm90IGVuYWJsZWQgb3Igbm8gdG9rZW4pYCk7XG4gICAgYXV0aFBhcmFtcyA9IHtcbiAgICAgIHVzZXI6IGV4dGVuZGVkQ3JlZHMuZW1haWwsXG4gICAgICBwYXNzOiBleHRlbmRlZENyZWRzLnBhc3N3b3JkXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBObyBhdXRoZW50aWNhdGlvbiBtZXRob2QgYXZhaWxhYmxlXG4gICAgY29uc29sZS5lcnJvcihgTm8gYXV0aGVudGljYXRpb24gbWV0aG9kIGZvdW5kIGZvciAke2Nvbm5lY3Rpb25LZXl9OmAsIHtcbiAgICAgIGhhc1Bhc3N3b3JkOiAhIWV4dGVuZGVkQ3JlZHMucGFzc3dvcmQsXG4gICAgICB1c2VPQXV0aDogISFleHRlbmRlZENyZWRzLnVzZU9BdXRoLFxuICAgICAgaGFzQWNjZXNzVG9rZW46ICEhZXh0ZW5kZWRDcmVkcy5hY2Nlc3NUb2tlblxuICAgIH0pO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gYXV0aGVudGljYXRpb24gbWV0aG9kIGF2YWlsYWJsZSBmb3IgJHtjb25uZWN0aW9uS2V5fSAtIG5lZWQgZWl0aGVyIHBhc3N3b3JkIG9yIE9BdXRoIHRva2VuYCk7XG4gIH1cbiAgXG4gIGNvbnNvbGUubG9nKGBDcmVhdGluZyBJbWFwRmxvdyBjbGllbnQgZm9yICR7Y29ubmVjdGlvbktleX0gd2l0aCBhdXRoZW50aWNhdGlvbiB0eXBlOiAke2V4dGVuZGVkQ3JlZHMudXNlT0F1dGggPyAnT0F1dGgnIDogJ1Bhc3N3b3JkJ31gKTtcbiAgXG4gIGNvbnN0IGNsaWVudCA9IG5ldyBJbWFwRmxvdyh7XG4gICAgaG9zdDogZXh0ZW5kZWRDcmVkcy5ob3N0LFxuICAgIHBvcnQ6IGV4dGVuZGVkQ3JlZHMucG9ydCxcbiAgICBzZWN1cmU6IGV4dGVuZGVkQ3JlZHMuc2VjdXJlID8/IHRydWUsXG4gICAgYXV0aDogYXV0aFBhcmFtcyxcbiAgICBsb2dnZXI6IGZhbHNlLFxuICAgIGVtaXRMb2dzOiBmYWxzZSxcbiAgICB0bHM6IHtcbiAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcbiAgICB9LFxuICAgIGRpc2FibGVBdXRvSWRsZTogZmFsc2VcbiAgfSk7XG4gIFxuICB0cnkge1xuICAgIGNvbnNvbGUubG9nKGBDb25uZWN0aW5nIHRvIElNQVAgc2VydmVyOiAke2V4dGVuZGVkQ3JlZHMuaG9zdH06JHtleHRlbmRlZENyZWRzLnBvcnR9YCk7XG4gICAgYXdhaXQgY2xpZW50LmNvbm5lY3QoKTtcbiAgICBjb25zb2xlLmxvZyhgU3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCB0byBJTUFQIHNlcnZlciBmb3IgJHtjb25uZWN0aW9uS2V5fWApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjb25uZWN0IHRvIElNQVAgc2VydmVyIGZvciAke2Nvbm5lY3Rpb25LZXl9OmAsIGVycm9yKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBcbiAgLy8gQWRkIGVycm9yIGhhbmRsZXJcbiAgY2xpZW50Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICBjb25zb2xlLmVycm9yKGBJTUFQIGNvbm5lY3Rpb24gZXJyb3IgZm9yICR7Y29ubmVjdGlvbktleX06YCwgZXJyKTtcbiAgICAvLyBSZW1vdmUgZnJvbSBwb29sIG9uIGVycm9yXG4gICAgaWYgKGNvbm5lY3Rpb25Qb29sW2Nvbm5lY3Rpb25LZXldKSB7XG4gICAgICBkZWxldGUgY29ubmVjdGlvblBvb2xbY29ubmVjdGlvbktleV07XG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBjbGllbnQ7XG59XG5cbi8qKlxuICogVXBkYXRlIHNlc3Npb24gZGF0YSBpbiBSZWRpc1xuICovXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVTZXNzaW9uRGF0YSh1c2VySWQ6IHN0cmluZywgYWNjb3VudElkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHNlc3Npb25EYXRhID0gYXdhaXQgZ2V0Q2FjaGVkSW1hcFNlc3Npb24odXNlcklkKTtcbiAgXG4gIGlmIChzZXNzaW9uRGF0YSkge1xuICAgIGF3YWl0IGNhY2hlSW1hcFNlc3Npb24odXNlcklkLCB7XG4gICAgICAuLi5zZXNzaW9uRGF0YSxcbiAgICAgIGxhc3RBY3RpdmU6IERhdGUubm93KCksXG4gICAgICAuLi4oYWNjb3VudElkICYmIHsgZGVmYXVsdEFjY291bnRJZDogYWNjb3VudElkIH0pXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgY2FjaGVJbWFwU2Vzc2lvbih1c2VySWQsIHtcbiAgICAgIGxhc3RBY3RpdmU6IERhdGUubm93KCksXG4gICAgICAuLi4oYWNjb3VudElkICYmIHsgZGVmYXVsdEFjY291bnRJZDogYWNjb3VudElkIH0pXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdXNlcidzIGVtYWlsIGNyZWRlbnRpYWxzIGZyb20gZGF0YWJhc2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFVzZXJFbWFpbENyZWRlbnRpYWxzKHVzZXJJZDogc3RyaW5nLCBhY2NvdW50SWQ/OiBzdHJpbmcpOiBQcm9taXNlPEVtYWlsQ3JlZGVudGlhbHMgfCBudWxsPiB7XG4gIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgcHJpc21hLm1haWxDcmVkZW50aWFscy5maW5kRmlyc3Qoe1xuICAgIHdoZXJlOiB7XG4gICAgICBBTkQ6IFtcbiAgICAgICAgeyB1c2VySWQgfSxcbiAgICAgICAgYWNjb3VudElkID8geyBpZDogYWNjb3VudElkIH0gOiB7fVxuICAgICAgXVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKCFjcmVkZW50aWFscykgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgbWFpbENyZWRlbnRpYWxzID0gY3JlZGVudGlhbHMgYXMgdW5rbm93biBhcyB7XG4gICAgZW1haWw6IHN0cmluZztcbiAgICBwYXNzd29yZDogc3RyaW5nO1xuICAgIGhvc3Q6IHN0cmluZztcbiAgICBwb3J0OiBudW1iZXI7XG4gICAgc2VjdXJlOiBib29sZWFuO1xuICAgIHNtdHBfaG9zdDogc3RyaW5nIHwgbnVsbDtcbiAgICBzbXRwX3BvcnQ6IG51bWJlciB8IG51bGw7XG4gICAgc210cF9zZWN1cmU6IGJvb2xlYW4gfCBudWxsO1xuICAgIGRpc3BsYXlfbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICBjb2xvcjogc3RyaW5nIHwgbnVsbDtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGVtYWlsOiBtYWlsQ3JlZGVudGlhbHMuZW1haWwsXG4gICAgcGFzc3dvcmQ6IG1haWxDcmVkZW50aWFscy5wYXNzd29yZCxcbiAgICBob3N0OiBtYWlsQ3JlZGVudGlhbHMuaG9zdCxcbiAgICBwb3J0OiBtYWlsQ3JlZGVudGlhbHMucG9ydCxcbiAgICBzZWN1cmU6IG1haWxDcmVkZW50aWFscy5zZWN1cmUsXG4gICAgc210cF9ob3N0OiBtYWlsQ3JlZGVudGlhbHMuc210cF9ob3N0IHx8IHVuZGVmaW5lZCxcbiAgICBzbXRwX3BvcnQ6IG1haWxDcmVkZW50aWFscy5zbXRwX3BvcnQgfHwgdW5kZWZpbmVkLFxuICAgIHNtdHBfc2VjdXJlOiBtYWlsQ3JlZGVudGlhbHMuc210cF9zZWN1cmUgPz8gZmFsc2UsXG4gICAgZGlzcGxheV9uYW1lOiBtYWlsQ3JlZGVudGlhbHMuZGlzcGxheV9uYW1lIHx8IHVuZGVmaW5lZCxcbiAgICBjb2xvcjogbWFpbENyZWRlbnRpYWxzLmNvbG9yIHx8IHVuZGVmaW5lZFxuICB9O1xufVxuXG4vKipcbiAqIFNhdmUgb3IgdXBkYXRlIHVzZXIncyBlbWFpbCBjcmVkZW50aWFsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZVVzZXJFbWFpbENyZWRlbnRpYWxzKFxuICB1c2VySWQ6IHN0cmluZyxcbiAgYWNjb3VudElkOiBzdHJpbmcsXG4gIGNyZWRlbnRpYWxzOiBFbWFpbENyZWRlbnRpYWxzXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc29sZS5sb2coJ1NhdmluZyBjcmVkZW50aWFscyBmb3IgdXNlcjonLCB1c2VySWQsICdhY2NvdW50OicsIGFjY291bnRJZCk7XG4gIFxuICBpZiAoIWNyZWRlbnRpYWxzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBjcmVkZW50aWFscyBwcm92aWRlZCcpO1xuICB9XG5cbiAgLy8gQ2FzdCB0byBleHRlbmRlZCB0eXBlIHRvIGFjY2VzcyBPQXV0aCBwcm9wZXJ0aWVzXG4gIGNvbnN0IGV4dGVuZGVkQ3JlZHMgPSBjcmVkZW50aWFscyBhcyBFbWFpbENyZWRlbnRpYWxzRXh0ZW5kZWQ7XG4gIFxuICAvLyBTdG9yZSBPQXV0aCBpbmZvcm1hdGlvbiBpbiBhIHNlcGFyYXRlIG9iamVjdCBmb3IgY2FjaGluZ1xuICBjb25zdCBvYXV0aERhdGEgPSB7XG4gICAgdXNlT0F1dGg6IGV4dGVuZGVkQ3JlZHMudXNlT0F1dGgsXG4gICAgYWNjZXNzVG9rZW46IGV4dGVuZGVkQ3JlZHMuYWNjZXNzVG9rZW4sXG4gICAgcmVmcmVzaFRva2VuOiBleHRlbmRlZENyZWRzLnJlZnJlc2hUb2tlbixcbiAgICB0b2tlbkV4cGlyeTogZXh0ZW5kZWRDcmVkcy50b2tlbkV4cGlyeVxuICB9O1xuXG4gIC8vIEV4dHJhY3Qgb25seSB0aGUgZmllbGRzIHRoYXQgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHNjaGVtYVxuICAvLyBCYXNlZCBvbiB0aGUgc2NoZW1hIGZyb20gJ25weCBwcmlzbWEgZGIgcHVsbCcsIE9BdXRoIGZpZWxkcyBkb24ndCBleGlzdFxuICBjb25zdCBkYkNyZWRlbnRpYWxzID0ge1xuICAgIGVtYWlsOiBjcmVkZW50aWFscy5lbWFpbCxcbiAgICBwYXNzd29yZDogY3JlZGVudGlhbHMucGFzc3dvcmQgPz8gJycsIC8vIFJlcXVpcmVkIGZpZWxkIGluIHRoZSBEQiBzY2hlbWFcbiAgICBob3N0OiBjcmVkZW50aWFscy5ob3N0LFxuICAgIHBvcnQ6IGNyZWRlbnRpYWxzLnBvcnQsXG4gICAgc2VjdXJlOiBjcmVkZW50aWFscy5zZWN1cmUgPz8gdHJ1ZSxcbiAgICBzbXRwX2hvc3Q6IGNyZWRlbnRpYWxzLnNtdHBfaG9zdCB8fCBudWxsLFxuICAgIHNtdHBfcG9ydDogY3JlZGVudGlhbHMuc210cF9wb3J0IHx8IG51bGwsXG4gICAgc210cF9zZWN1cmU6IGNyZWRlbnRpYWxzLnNtdHBfc2VjdXJlID8/IGZhbHNlLFxuICAgIGRpc3BsYXlfbmFtZTogY3JlZGVudGlhbHMuZGlzcGxheV9uYW1lIHx8IG51bGwsXG4gICAgY29sb3I6IGNyZWRlbnRpYWxzLmNvbG9yIHx8IG51bGxcbiAgfTtcbiAgXG4gIHRyeSB7XG4gICAgY29uc29sZS5sb2coJ1NhdmluZyBjcmVkZW50aWFscyB0byBkYXRhYmFzZTonLCB7XG4gICAgICAuLi5kYkNyZWRlbnRpYWxzLFxuICAgICAgcGFzc3dvcmQ6IGRiQ3JlZGVudGlhbHMucGFzc3dvcmQgPyAnKioqJyA6IG51bGwsXG4gICAgfSk7XG4gICAgXG4gICAgY29uc29sZS5sb2coJ09BdXRoIGRhdGEgd2lsbCBiZSBzYXZlZCB0byBSZWRpcyBjYWNoZSBvbmx5OicsIHtcbiAgICAgIGhhc09BdXRoOiAhIW9hdXRoRGF0YS51c2VPQXV0aCxcbiAgICAgIGhhc0FjY2Vzc1Rva2VuOiAhIW9hdXRoRGF0YS5hY2Nlc3NUb2tlbixcbiAgICAgIGhhc1JlZnJlc2hUb2tlbjogISFvYXV0aERhdGEucmVmcmVzaFRva2VuXG4gICAgfSk7XG5cbiAgICAvLyBTYXZlIHRvIGRhdGFiYXNlIHVzaW5nIHRoZSB1bmlxdWUgY29uc3RyYWludCBvbiBbdXNlcklkLCBlbWFpbF1cbiAgICBhd2FpdCBwcmlzbWEubWFpbENyZWRlbnRpYWxzLnVwc2VydCh7XG4gICAgICB3aGVyZToge1xuICAgICAgICBpZDogYXdhaXQgcHJpc21hLm1haWxDcmVkZW50aWFscy5maW5kRmlyc3Qoe1xuICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICBBTkQ6IFtcbiAgICAgICAgICAgICAgeyB1c2VySWQgfSxcbiAgICAgICAgICAgICAgeyBlbWFpbDogYWNjb3VudElkIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdDogeyBpZDogdHJ1ZSB9XG4gICAgICAgIH0pLnRoZW4ocmVzdWx0ID0+IHJlc3VsdD8uaWQgPz8gJycpXG4gICAgICB9LFxuICAgICAgdXBkYXRlOiBkYkNyZWRlbnRpYWxzLFxuICAgICAgY3JlYXRlOiB7XG4gICAgICAgIHVzZXJJZCxcbiAgICAgICAgLi4uZGJDcmVkZW50aWFsc1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8vIENyZWF0ZSBhIGNvbWJpbmVkIGNyZWRlbnRpYWxzIG9iamVjdCBmb3IgY2FjaGluZ1xuICAgIGNvbnN0IGZ1bGxDcmVkcyA9IHtcbiAgICAgIC4uLmRiQ3JlZGVudGlhbHMsXG4gICAgICAuLi5vYXV0aERhdGFcbiAgICB9IGFzIEVtYWlsQ3JlZGVudGlhbHNFeHRlbmRlZDsgIC8vIENhc3QgdG8gdGhlIGV4cGVjdGVkIHR5cGVcbiAgICBcbiAgICAvLyBDYWNoZSB0aGUgZnVsbCBjcmVkZW50aWFscyBpbmNsdWRpbmcgT0F1dGggdG9rZW5zXG4gICAgYXdhaXQgY2FjaGVFbWFpbENyZWRlbnRpYWxzKHVzZXJJZCwgYWNjb3VudElkLCBmdWxsQ3JlZHMpO1xuICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzZnVsbHkgc2F2ZWQgY3JlZGVudGlhbHMgdG8gZGF0YWJhc2UgYW5kIGNhY2hlZCBmdWxsIGRhdGEgd2l0aCBPQXV0aCB0b2tlbnMnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgY3JlZGVudGlhbHM6JywgZXJyb3IpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8vIEhlbHBlciB0eXBlIGZvciBJTUFQIGZldGNoIG9wdGlvbnNcbmludGVyZmFjZSBGZXRjaE9wdGlvbnMge1xuICBlbnZlbG9wZTogYm9vbGVhbjtcbiAgZmxhZ3M6IGJvb2xlYW47XG4gIGJvZHlTdHJ1Y3R1cmU6IGJvb2xlYW47XG4gIGludGVybmFsRGF0ZTogYm9vbGVhbjtcbiAgc2l6ZTogYm9vbGVhbjtcbiAgYm9keVBhcnRzOiB7IHBhcnQ6IHN0cmluZzsgcXVlcnk6IGFueTsgbGltaXQ/OiBudW1iZXIgfVtdO1xufVxuXG4vKipcbiAqIEdldCBsaXN0IG9mIGVtYWlscyBmb3IgYSB1c2VyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRFbWFpbHMoXG4gIHVzZXJJZDogc3RyaW5nLFxuICBmb2xkZXI6IHN0cmluZyxcbiAgcGFnZTogbnVtYmVyID0gMSxcbiAgcGVyUGFnZTogbnVtYmVyID0gMjAsXG4gIGFjY291bnRJZD86IHN0cmluZyxcbiAgY2hlY2tPbmx5OiBib29sZWFuID0gZmFsc2Vcbik6IFByb21pc2U8RW1haWxMaXN0UmVzdWx0PiB7XG4gIC8vIE5vcm1hbGl6ZSBmb2xkZXIgbmFtZSBhbmQgaGFuZGxlIGFjY291bnQgSURcbiAgY29uc29sZS5sb2coYFtnZXRFbWFpbHNdIFByb2Nlc3NpbmcgcmVxdWVzdCBmb3IgZm9sZGVyOiAke2ZvbGRlcn0sIG5vcm1hbGl6ZWQgdG8gJHtmb2xkZXJ9LCBhY2NvdW50OiAke2FjY291bnRJZCB8fCAnZGVmYXVsdCd9LCBjaGVja09ubHk6ICR7Y2hlY2tPbmx5fWApO1xuICBcbiAgdHJ5IHtcbiAgICAvLyBUaGUgZ2V0SW1hcENvbm5lY3Rpb24gZnVuY3Rpb24gYWxyZWFkeSBoYW5kbGVzICdkZWZhdWx0JyBhY2NvdW50SWQgYnkgZmluZGluZyB0aGUgZmlyc3QgYXZhaWxhYmxlIGFjY291bnRcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRJbWFwQ29ubmVjdGlvbih1c2VySWQsIGFjY291bnRJZCk7XG4gICAgXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgYWNjb3VudElkIGhhcyBiZWVuIHJlc29sdmVkIHRvIGFuIGFjdHVhbCBhY2NvdW50IElEIGJ5IGdldEltYXBDb25uZWN0aW9uXG4gICAgLy8gU3RvcmUgdGhlIHJlc29sdmVkIGFjY291bnRJZCBpbiBhIHZhcmlhYmxlIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHN0cmluZ1xuICAgIGNvbnN0IHJlc29sdmVkQWNjb3VudElkID0gYWNjb3VudElkIHx8ICdkZWZhdWx0JztcbiAgICBcbiAgICAvLyBBdHRlbXB0IHRvIHNlbGVjdCB0aGUgbWFpbGJveFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBtYWlsYm94SW5mbyA9IGF3YWl0IGNsaWVudC5tYWlsYm94T3Blbihmb2xkZXIpO1xuICAgICAgY29uc29sZS5sb2coYE9wZW5lZCBtYWlsYm94ICR7Zm9sZGVyfSB3aXRoICR7bWFpbGJveEluZm8uZXhpc3RzfSBtZXNzYWdlc2ApO1xuICAgICAgXG4gICAgICAvLyBHZXQgbGlzdCBvZiBhbGwgbWFpbGJveGVzIGZvciBVSVxuICAgICAgY29uc3QgbWFpbGJveGVzID0gYXdhaXQgZ2V0TWFpbGJveGVzKGNsaWVudCwgcmVzb2x2ZWRBY2NvdW50SWQpO1xuICAgICAgXG4gICAgICAvLyBDYWxjdWxhdGUgcGFnaW5hdGlvblxuICAgICAgY29uc3QgdG90YWxFbWFpbHMgPSBtYWlsYm94SW5mby5leGlzdHMgfHwgMDtcbiAgICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodG90YWxFbWFpbHMgLyBwZXJQYWdlKTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgbWFpbGJveCBpcyBlbXB0eVxuICAgICAgaWYgKHRvdGFsRW1haWxzID09PSAwKSB7XG4gICAgICAgIC8vIENhY2hlIHRoZSBlbXB0eSByZXN1bHRcbiAgICAgICAgY29uc3QgZW1wdHlSZXN1bHQgPSB7XG4gICAgICAgICAgZW1haWxzOiBbXSxcbiAgICAgICAgICB0b3RhbEVtYWlsczogMCxcbiAgICAgICAgICBwYWdlLFxuICAgICAgICAgIHBlclBhZ2UsXG4gICAgICAgICAgdG90YWxQYWdlczogMCxcbiAgICAgICAgICBmb2xkZXIsXG4gICAgICAgICAgbWFpbGJveGVzLFxuICAgICAgICAgIG5ld2VzdEVtYWlsSWQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIC8vIE9ubHkgY2FjaGUgaWYgbm90IGluIGNoZWNrT25seSBtb2RlXG4gICAgICAgIGlmICghY2hlY2tPbmx5KSB7XG4gICAgICAgICAgYXdhaXQgY2FjaGVFbWFpbExpc3QoXG4gICAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgICByZXNvbHZlZEFjY291bnRJZCwgLy8gVXNlIHRoZSBndWFyYW50ZWVkIHN0cmluZyBhY2NvdW50IElEXG4gICAgICAgICAgICBmb2xkZXIsXG4gICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgcGVyUGFnZSxcbiAgICAgICAgICAgIGVtcHR5UmVzdWx0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGVtcHR5UmVzdWx0O1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBjaGVja09ubHkgbW9kZSwgd2UganVzdCBmZXRjaCB0aGUgbW9zdCByZWNlbnQgZW1haWwncyBJRCB0byBjb21wYXJlXG4gICAgICBpZiAoY2hlY2tPbmx5KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbZ2V0RW1haWxzXSBjaGVja09ubHkgbW9kZTogZmV0Y2hpbmcgb25seSB0aGUgbW9zdCByZWNlbnQgZW1haWwgSURgKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEdldCB0aGUgbW9zdCByZWNlbnQgbWVzc2FnZSAoaGlnaGVzdCBzZXF1ZW5jZSBudW1iZXIpXG4gICAgICAgIGNvbnN0IGxhc3RNZXNzYWdlU2VxdWVuY2UgPSB0b3RhbEVtYWlscy50b1N0cmluZygpO1xuICAgICAgICBjb25zb2xlLmxvZyhgW2dldEVtYWlsc10gRmV0Y2hpbmcgbGF0ZXN0IG1lc3NhZ2Ugd2l0aCBzZXF1ZW5jZTogJHtsYXN0TWVzc2FnZVNlcXVlbmNlfWApO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCBjbGllbnQuZmV0Y2gobGFzdE1lc3NhZ2VTZXF1ZW5jZSwge1xuICAgICAgICAgIHVpZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGxldCBuZXdlc3RFbWFpbElkID0gMDtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XG4gICAgICAgICAgbmV3ZXN0RW1haWxJZCA9IG1lc3NhZ2UudWlkO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zb2xlLmxvZyhgW2dldEVtYWlsc10gTGF0ZXN0IGVtYWlsIFVJRDogJHtuZXdlc3RFbWFpbElkfWApO1xuICAgICAgICBcbiAgICAgICAgLy8gUmV0dXJuIG1pbmltYWwgcmVzdWx0IHdpdGgganVzdCB0aGUgbmV3ZXN0IGVtYWlsIElEXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZW1haWxzOiBbXSxcbiAgICAgICAgICB0b3RhbEVtYWlscyxcbiAgICAgICAgICBwYWdlLFxuICAgICAgICAgIHBlclBhZ2UsXG4gICAgICAgICAgdG90YWxQYWdlcyxcbiAgICAgICAgICBmb2xkZXIsXG4gICAgICAgICAgbWFpbGJveGVzLFxuICAgICAgICAgIG5ld2VzdEVtYWlsSWRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsY3VsYXRlIG1lc3NhZ2UgcmFuZ2UgZm9yIHBhZ2luYXRpb25cbiAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMSwgdG90YWxFbWFpbHMgLSAocGFnZSAqIHBlclBhZ2UpICsgMSk7XG4gICAgICBjb25zdCBlbmQgPSBNYXRoLm1heCgxLCB0b3RhbEVtYWlscyAtICgocGFnZSAtIDEpICogcGVyUGFnZSkpO1xuICAgICAgY29uc29sZS5sb2coYEZldGNoaW5nIG1lc3NhZ2VzICR7c3RhcnR9OiR7ZW5kfSBmcm9tICR7Zm9sZGVyfSBmb3IgYWNjb3VudCAke3Jlc29sdmVkQWNjb3VudElkfWApO1xuXG4gICAgICAvLyBGZXRjaCBtZXNzYWdlc1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCBjbGllbnQuZmV0Y2goYCR7c3RhcnR9OiR7ZW5kfWAsIHtcbiAgICAgICAgZW52ZWxvcGU6IHRydWUsXG4gICAgICAgIGZsYWdzOiB0cnVlLFxuICAgICAgICBib2R5U3RydWN0dXJlOiB0cnVlLFxuICAgICAgICB1aWQ6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBlbWFpbHM6IEVtYWlsTWVzc2FnZVtdID0gW107XG4gICAgICBsZXQgbmV3ZXN0RW1haWxJZCA9IDA7XG4gICAgICBcbiAgICAgIGZvciBhd2FpdCAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xuICAgICAgICAvLyBUcmFjayB0aGUgbmV3ZXN0IGVtYWlsIElEIChoaWdoZXN0IFVJRClcbiAgICAgICAgaWYgKG1lc3NhZ2UudWlkID4gbmV3ZXN0RW1haWxJZCkge1xuICAgICAgICAgIG5ld2VzdEVtYWlsSWQgPSBtZXNzYWdlLnVpZDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgZW1haWw6IEVtYWlsTWVzc2FnZSA9IHtcbiAgICAgICAgICBpZDogbWVzc2FnZS51aWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBmcm9tOiBtZXNzYWdlLmVudmVsb3BlLmZyb20/Lm1hcChhZGRyID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBhZGRyLm5hbWUgfHwgJycsXG4gICAgICAgICAgICBhZGRyZXNzOiBhZGRyLmFkZHJlc3MgfHwgJydcbiAgICAgICAgICB9KSkgfHwgW10sXG4gICAgICAgICAgdG86IG1lc3NhZ2UuZW52ZWxvcGUudG8/Lm1hcChhZGRyID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBhZGRyLm5hbWUgfHwgJycsXG4gICAgICAgICAgICBhZGRyZXNzOiBhZGRyLmFkZHJlc3MgfHwgJydcbiAgICAgICAgICB9KSkgfHwgW10sXG4gICAgICAgICAgc3ViamVjdDogbWVzc2FnZS5lbnZlbG9wZS5zdWJqZWN0IHx8ICcnLFxuICAgICAgICAgIGRhdGU6IG1lc3NhZ2UuZW52ZWxvcGUuZGF0ZSB8fCBuZXcgRGF0ZSgpLFxuICAgICAgICAgIGZsYWdzOiB7XG4gICAgICAgICAgICBzZWVuOiBtZXNzYWdlLmZsYWdzLmhhcygnXFxcXFNlZW4nKSxcbiAgICAgICAgICAgIGZsYWdnZWQ6IG1lc3NhZ2UuZmxhZ3MuaGFzKCdcXFxcRmxhZ2dlZCcpLFxuICAgICAgICAgICAgYW5zd2VyZWQ6IG1lc3NhZ2UuZmxhZ3MuaGFzKCdcXFxcQW5zd2VyZWQnKSxcbiAgICAgICAgICAgIGRyYWZ0OiBtZXNzYWdlLmZsYWdzLmhhcygnXFxcXERyYWZ0JyksXG4gICAgICAgICAgICBkZWxldGVkOiBtZXNzYWdlLmZsYWdzLmhhcygnXFxcXERlbGV0ZWQnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2l6ZTogbWVzc2FnZS5zaXplIHx8IDAsXG4gICAgICAgICAgaGFzQXR0YWNobWVudHM6IG1lc3NhZ2UuYm9keVN0cnVjdHVyZT8uY2hpbGROb2Rlcz8uc29tZShub2RlID0+IG5vZGUuZGlzcG9zaXRpb24gPT09ICdhdHRhY2htZW50JykgfHwgZmFsc2UsXG4gICAgICAgICAgZm9sZGVyOiBmb2xkZXIsXG4gICAgICAgICAgY29udGVudEZldGNoZWQ6IGZhbHNlLFxuICAgICAgICAgIGFjY291bnRJZDogcmVzb2x2ZWRBY2NvdW50SWQsXG4gICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgdGV4dDogJycsXG4gICAgICAgICAgICBodG1sOiAnJyxcbiAgICAgICAgICAgIGlzSHRtbDogZmFsc2UsXG4gICAgICAgICAgICBkaXJlY3Rpb246ICdsdHInXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBlbWFpbHMucHVzaChlbWFpbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3VsdFxuICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICBlbWFpbHMsXG4gICAgICAgIHRvdGFsRW1haWxzLFxuICAgICAgICBwYWdlLFxuICAgICAgICBwZXJQYWdlLFxuICAgICAgICB0b3RhbFBhZ2VzOiBNYXRoLmNlaWwodG90YWxFbWFpbHMgLyBwZXJQYWdlKSxcbiAgICAgICAgZm9sZGVyLFxuICAgICAgICBtYWlsYm94ZXMsXG4gICAgICAgIG5ld2VzdEVtYWlsSWRcbiAgICAgIH07XG4gICAgICBcbiAgICAgIC8vIENhY2hlIHRoZSByZXN1bHQgd2l0aCB0aGUgZWZmZWN0aXZlIGFjY291bnQgSUQgKG9ubHkgaWYgbm90IGluIGNoZWNrT25seSBtb2RlKVxuICAgICAgaWYgKCFjaGVja09ubHkpIHtcbiAgICAgICAgYXdhaXQgY2FjaGVFbWFpbExpc3QoXG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHJlc29sdmVkQWNjb3VudElkLCAvLyBVc2UgdGhlIGd1YXJhbnRlZWQgc3RyaW5nIGFjY291bnQgSURcbiAgICAgICAgICBmb2xkZXIsXG4gICAgICAgICAgcGFnZSxcbiAgICAgICAgICBwZXJQYWdlLFxuICAgICAgICAgIHJlc3VsdFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBlbWFpbHM6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGVtYWlsczonLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLy8gTWFwIGVtYWlsIGFkZHJlc3NlcyBzYWZlbHkgd2l0aCBudWxsIGNoZWNrc1xuZnVuY3Rpb24gbWFwQWRkcmVzc2VzKGFkZHJlc3NlczogYW55W10gfCB1bmRlZmluZWQpOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgYWRkcmVzczogc3RyaW5nIH0+IHtcbiAgaWYgKCFhZGRyZXNzZXMgfHwgIUFycmF5LmlzQXJyYXkoYWRkcmVzc2VzKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBcbiAgcmV0dXJuIGFkZHJlc3Nlcy5tYXAoKGFkZHI6IGFueSkgPT4gKHtcbiAgICBuYW1lOiBhZGRyLm5hbWUgfHwgYWRkci5hZGRyZXNzIHx8ICcnLFxuICAgIGFkZHJlc3M6IGFkZHIuYWRkcmVzcyB8fCAnJ1xuICB9KSk7XG59XG5cbi8qKlxuICogR2V0IGEgc2luZ2xlIGVtYWlsIHdpdGggZnVsbCBjb250ZW50XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRFbWFpbENvbnRlbnQoXG4gIHVzZXJJZDogc3RyaW5nLFxuICBlbWFpbElkOiBzdHJpbmcsXG4gIGZvbGRlcjogc3RyaW5nID0gJ0lOQk9YJyxcbiAgYWNjb3VudElkPzogc3RyaW5nXG4pOiBQcm9taXNlPEVtYWlsTWVzc2FnZT4ge1xuICAvLyBWYWxpZGF0ZSBwYXJhbWV0ZXJzXG4gIGlmICghdXNlcklkIHx8ICFlbWFpbElkIHx8ICFmb2xkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVycycpO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgVUlEIGZvcm1hdFxuICBpZiAoIS9eXFxkKyQvLnRlc3QoZW1haWxJZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZW1haWwgSUQgZm9ybWF0OiBtdXN0IGJlIGEgbnVtZXJpYyBVSUQnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdG8gbnVtYmVyIGZvciBJTUFQXG4gIGNvbnN0IG51bWVyaWNJZCA9IHBhcnNlSW50KGVtYWlsSWQsIDEwKTtcbiAgaWYgKGlzTmFOKG51bWVyaWNJZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtYWlsIElEIG11c3QgYmUgYSBudW1iZXInKTtcbiAgfVxuXG4gIC8vIEV4dHJhY3QgYWNjb3VudCBJRCBmcm9tIGZvbGRlciBuYW1lIGlmIHByZXNlbnQgYW5kIG5vbmUgd2FzIGV4cGxpY2l0bHkgcHJvdmlkZWRcbiAgY29uc3QgZm9sZGVyQWNjb3VudElkID0gZm9sZGVyLmluY2x1ZGVzKCc6JykgPyBmb2xkZXIuc3BsaXQoJzonKVswXSA6IGFjY291bnRJZDtcbiAgXG4gIC8vIFVzZSB0aGUgbW9zdCBzcGVjaWZpYyBhY2NvdW50IElEIGF2YWlsYWJsZVxuICBjb25zdCBlZmZlY3RpdmVBY2NvdW50SWQgPSBmb2xkZXJBY2NvdW50SWQgfHwgYWNjb3VudElkIHx8ICdkZWZhdWx0JztcbiAgXG4gIC8vIE5vcm1hbGl6ZSBmb2xkZXIgbmFtZSBieSByZW1vdmluZyBhY2NvdW50IHByZWZpeCBpZiBwcmVzZW50XG4gIGNvbnN0IG5vcm1hbGl6ZWRGb2xkZXIgPSBmb2xkZXIuaW5jbHVkZXMoJzonKSA/IGZvbGRlci5zcGxpdCgnOicpWzFdIDogZm9sZGVyO1xuICBcbiAgY29uc29sZS5sb2coYFtnZXRFbWFpbENvbnRlbnRdIEZldGNoaW5nIGVtYWlsICR7ZW1haWxJZH0gZnJvbSBmb2xkZXIgJHtub3JtYWxpemVkRm9sZGVyfSwgYWNjb3VudCAke2VmZmVjdGl2ZUFjY291bnRJZH1gKTtcbiAgXG4gIC8vIFVzZSBub3JtYWxpemVkIGZvbGRlciBuYW1lIGFuZCBlZmZlY3RpdmUgYWNjb3VudCBJRCBmb3IgY2FjaGUga2V5XG4gIGNvbnN0IGNhY2hlZEVtYWlsID0gYXdhaXQgZ2V0Q2FjaGVkRW1haWxDb250ZW50KHVzZXJJZCwgZWZmZWN0aXZlQWNjb3VudElkLCBlbWFpbElkKTtcbiAgaWYgKGNhY2hlZEVtYWlsKSB7XG4gICAgY29uc29sZS5sb2coYFVzaW5nIGNhY2hlZCBlbWFpbCBjb250ZW50IGZvciAke3VzZXJJZH06JHtlZmZlY3RpdmVBY2NvdW50SWR9OiR7ZW1haWxJZH1gKTtcbiAgICByZXR1cm4gY2FjaGVkRW1haWw7XG4gIH1cbiAgXG4gIGNvbnNvbGUubG9nKGBDYWNoZSBtaXNzIGZvciBlbWFpbCBjb250ZW50ICR7dXNlcklkfToke2VmZmVjdGl2ZUFjY291bnRJZH06JHtlbWFpbElkfSwgZmV0Y2hpbmcgZnJvbSBJTUFQYCk7XG4gIFxuICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRJbWFwQ29ubmVjdGlvbih1c2VySWQsIGVmZmVjdGl2ZUFjY291bnRJZCk7XG4gIFxuICB0cnkge1xuICAgIGF3YWl0IGNsaWVudC5tYWlsYm94T3Blbihub3JtYWxpemVkRm9sZGVyKTtcbiAgICBcbiAgICAvLyBMb2cgY29ubmVjdGlvbiBkZXRhaWxzIHdpdGggYWNjb3VudCBjb250ZXh0XG4gICAgY29uc29sZS5sb2coYFtERUJVR10gRmV0Y2hpbmcgZW1haWwgJHtlbWFpbElkfSBmcm9tIGZvbGRlciAke25vcm1hbGl6ZWRGb2xkZXJ9IGZvciBhY2NvdW50ICR7ZWZmZWN0aXZlQWNjb3VudElkfWApO1xuICAgIFxuICAgIC8vIE9wZW4gbWFpbGJveCB3aXRoIGVycm9yIGhhbmRsaW5nXG4gICAgY29uc3QgbWFpbGJveCA9IGF3YWl0IGNsaWVudC5tYWlsYm94T3Blbihub3JtYWxpemVkRm9sZGVyKTtcbiAgICBpZiAoIW1haWxib3ggfHwgdHlwZW9mIG1haWxib3ggPT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gb3BlbiBtYWlsYm94OiAke25vcm1hbGl6ZWRGb2xkZXJ9IGZvciBhY2NvdW50ICR7ZWZmZWN0aXZlQWNjb3VudElkfWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBMb2cgbWFpbGJveCBzdGF0dXMgd2l0aCBhY2NvdW50IGNvbnRleHRcbiAgICBjb25zb2xlLmxvZyhgW0RFQlVHXSBNYWlsYm94ICR7bm9ybWFsaXplZEZvbGRlcn0gb3BlbmVkIGZvciBhY2NvdW50ICR7ZWZmZWN0aXZlQWNjb3VudElkfSwgdG90YWwgbWVzc2FnZXM6ICR7bWFpbGJveC5leGlzdHN9YCk7XG4gICAgXG4gICAgLy8gR2V0IHRoZSBVSURWQUxJRElUWSBhbmQgVUlETkVYVCB2YWx1ZXNcbiAgICBjb25zdCB1aWRWYWxpZGl0eSA9IG1haWxib3gudWlkVmFsaWRpdHk7XG4gICAgY29uc3QgdWlkTmV4dCA9IG1haWxib3gudWlkTmV4dDtcbiAgICBcbiAgICBjb25zb2xlLmxvZyhgW0RFQlVHXSBNYWlsYm94IFVJRFZBTElESVRZOiAke3VpZFZhbGlkaXR5fSwgVUlETkVYVDogJHt1aWROZXh0fSBmb3IgYWNjb3VudCAke2VmZmVjdGl2ZUFjY291bnRJZH1gKTtcbiAgICBcbiAgICAvLyBWYWxpZGF0ZSBVSUQgZXhpc3RzIGluIG1haWxib3hcbiAgICBpZiAobnVtZXJpY0lkID49IHVpZE5leHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW1haWwgSUQgJHtudW1lcmljSWR9IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgaGlnaGVzdCBVSUQgaW4gbWFpbGJveCAoJHt1aWROZXh0fSkgZm9yIGFjY291bnQgJHtlZmZlY3RpdmVBY2NvdW50SWR9YCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEZpcnN0LCB0cnkgdG8gZ2V0IHRoZSBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgVUlEXG4gICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gYXdhaXQgY2xpZW50LnNlYXJjaCh7IHVpZDogbnVtZXJpY0lkLnRvU3RyaW5nKCkgfSk7XG4gICAgaWYgKCFzZWFyY2hSZXN1bHQgfHwgc2VhcmNoUmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbWFpbCB3aXRoIFVJRCAke251bWVyaWNJZH0gbm90IGZvdW5kIGluIGZvbGRlciAke25vcm1hbGl6ZWRGb2xkZXJ9IGZvciBhY2NvdW50ICR7ZWZmZWN0aXZlQWNjb3VudElkfWApO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBzZXF1ZW5jZU51bWJlciA9IHNlYXJjaFJlc3VsdFswXTtcbiAgICBjb25zb2xlLmxvZyhgW0RFQlVHXSBGb3VuZCBzZXF1ZW5jZSBudW1iZXIgJHtzZXF1ZW5jZU51bWJlcn0gZm9yIFVJRCAke251bWVyaWNJZH0gaW4gYWNjb3VudCAke2VmZmVjdGl2ZUFjY291bnRJZH1gKTtcbiAgICBcbiAgICAvLyBOb3cgZmV0Y2ggdXNpbmcgdGhlIHNlcXVlbmNlIG51bWJlciB3aXRoIGVycm9yIGhhbmRsaW5nXG4gICAgbGV0IG1lc3NhZ2U7XG4gICAgdHJ5IHtcbiAgICAgIG1lc3NhZ2UgPSBhd2FpdCBjbGllbnQuZmV0Y2hPbmUoc2VxdWVuY2VOdW1iZXIudG9TdHJpbmcoKSwge1xuICAgICAgICBzb3VyY2U6IHRydWUsXG4gICAgICAgIGVudmVsb3BlOiB0cnVlLFxuICAgICAgICBmbGFnczogdHJ1ZSxcbiAgICAgICAgc2l6ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZmV0Y2hFcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgZmV0Y2hpbmcgbWVzc2FnZSB3aXRoIHNlcXVlbmNlICR7c2VxdWVuY2VOdW1iZXJ9OmAsIGZldGNoRXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggZW1haWw6ICR7ZmV0Y2hFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZmV0Y2hFcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW1haWwgbm90IGZvdW5kIHdpdGggc2VxdWVuY2UgbnVtYmVyICR7c2VxdWVuY2VOdW1iZXJ9IGluIGZvbGRlciAke25vcm1hbGl6ZWRGb2xkZXJ9IGZvciBhY2NvdW50ICR7ZWZmZWN0aXZlQWNjb3VudElkfWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBpZiBtZXNzYWdlIGhhcyByZXF1aXJlZCBmaWVsZHNcbiAgICBpZiAoIW1lc3NhZ2Uuc291cmNlIHx8ICFtZXNzYWdlLmVudmVsb3BlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZW1haWwgZGF0YSByZWNlaXZlZDogbWlzc2luZyBzb3VyY2Ugb3IgZW52ZWxvcGUgZGF0YWApO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB7IHNvdXJjZSwgZW52ZWxvcGUsIGZsYWdzLCBzaXplIH0gPSBtZXNzYWdlO1xuICAgIFxuICAgIC8vIFZhbGlkYXRlIGVudmVsb3BlIGRhdGFcbiAgICBpZiAoIWVudmVsb3BlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtYWlsIGVudmVsb3BlIGRhdGEgaXMgbWlzc2luZycpO1xuICAgIH1cbiAgICBcbiAgICAvLyBQYXJzZSB0aGUgZW1haWwgY29udGVudCwgZW5zdXJpbmcgYWxsIHN0eWxlcyBhbmQgc3RydWN0dXJlIGFyZSBwcmVzZXJ2ZWRcbiAgICBsZXQgcGFyc2VkRW1haWw7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZEVtYWlsID0gYXdhaXQgc2ltcGxlUGFyc2VyKHNvdXJjZS50b1N0cmluZygpLCB7XG4gICAgICAgIHNraXBIdG1sVG9UZXh0OiB0cnVlLFxuICAgICAgICBrZWVwQ2lkTGlua3M6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHBhcnNpbmcgZW1haWwgY29udGVudCBmb3IgJHtlbWFpbElkfTpgLCBwYXJzZUVycm9yKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIGVtYWlsIGNvbnRlbnQ6ICR7cGFyc2VFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gcGFyc2VFcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBDb252ZXJ0IGZsYWdzIGZyb20gU2V0IHRvIGJvb2xlYW4gY2hlY2tzXG4gICAgY29uc3QgZmxhZ3NBcnJheSA9IEFycmF5LmZyb20oZmxhZ3MgYXMgU2V0PHN0cmluZz4pO1xuICAgIFxuICAgIC8vIFByZXNlcnZlIHRoZSByYXcgSFRNTCBleGFjdGx5IGFzIGl0IHdhcyBpbiB0aGUgb3JpZ2luYWwgZW1haWxcbiAgICBjb25zdCByYXdIdG1sID0gcGFyc2VkRW1haWwuaHRtbCB8fCAnJztcbiAgICBcbiAgICBjb25zdCBlbWFpbDogRW1haWxNZXNzYWdlID0ge1xuICAgICAgaWQ6IGVtYWlsSWQsXG4gICAgICBtZXNzYWdlSWQ6IGVudmVsb3BlLm1lc3NhZ2VJZCxcbiAgICAgIHN1YmplY3Q6IGVudmVsb3BlLnN1YmplY3QgfHwgXCIoTm8gU3ViamVjdClcIixcbiAgICAgIGZyb206IG1hcEFkZHJlc3NlcyhlbnZlbG9wZS5mcm9tKSxcbiAgICAgIHRvOiBtYXBBZGRyZXNzZXMoZW52ZWxvcGUudG8pLFxuICAgICAgY2M6IG1hcEFkZHJlc3NlcyhlbnZlbG9wZS5jYyksXG4gICAgICBiY2M6IG1hcEFkZHJlc3NlcyhlbnZlbG9wZS5iY2MpLFxuICAgICAgZGF0ZTogZW52ZWxvcGUuZGF0ZSB8fCBuZXcgRGF0ZSgpLFxuICAgICAgZmxhZ3M6IHtcbiAgICAgICAgc2VlbjogZmxhZ3NBcnJheS5pbmNsdWRlcyhcIlxcXFxTZWVuXCIpLFxuICAgICAgICBmbGFnZ2VkOiBmbGFnc0FycmF5LmluY2x1ZGVzKFwiXFxcXEZsYWdnZWRcIiksXG4gICAgICAgIGFuc3dlcmVkOiBmbGFnc0FycmF5LmluY2x1ZGVzKFwiXFxcXEFuc3dlcmVkXCIpLFxuICAgICAgICBkZWxldGVkOiBmbGFnc0FycmF5LmluY2x1ZGVzKFwiXFxcXERlbGV0ZWRcIiksXG4gICAgICAgIGRyYWZ0OiBmbGFnc0FycmF5LmluY2x1ZGVzKFwiXFxcXERyYWZ0XCIpLFxuICAgICAgfSxcbiAgICAgIGhhc0F0dGFjaG1lbnRzOiBwYXJzZWRFbWFpbC5hdHRhY2htZW50cz8ubGVuZ3RoID4gMCxcbiAgICAgIGF0dGFjaG1lbnRzOiBwYXJzZWRFbWFpbC5hdHRhY2htZW50cz8ubWFwKGF0dCA9PiAoe1xuICAgICAgICBmaWxlbmFtZTogYXR0LmZpbGVuYW1lIHx8ICdhdHRhY2htZW50JyxcbiAgICAgICAgY29udGVudFR5cGU6IGF0dC5jb250ZW50VHlwZSxcbiAgICAgICAgc2l6ZTogYXR0LnNpemUgfHwgMFxuICAgICAgfSkpLFxuICAgICAgY29udGVudDoge1xuICAgICAgICB0ZXh0OiBwYXJzZWRFbWFpbC50ZXh0IHx8ICcnLFxuICAgICAgICBodG1sOiByYXdIdG1sIHx8ICcnLFxuICAgICAgICBpc0h0bWw6ICEhcmF3SHRtbCxcbiAgICAgICAgZGlyZWN0aW9uOiAnbHRyJyAvLyBEZWZhdWx0IHRvIGxlZnQtdG8tcmlnaHRcbiAgICAgIH0sXG4gICAgICBmb2xkZXI6IG5vcm1hbGl6ZWRGb2xkZXIsXG4gICAgICBjb250ZW50RmV0Y2hlZDogdHJ1ZSxcbiAgICAgIHNpemU6IHNpemUgfHwgMCxcbiAgICAgIGFjY291bnRJZDogZWZmZWN0aXZlQWNjb3VudElkXG4gICAgfTtcbiAgICBcbiAgICAvLyBDYWNoZSB0aGUgZW1haWwgY29udGVudCB3aXRoIGVmZmVjdGl2ZSBhY2NvdW50IElEXG4gICAgYXdhaXQgY2FjaGVFbWFpbENvbnRlbnQodXNlcklkLCBlZmZlY3RpdmVBY2NvdW50SWQsIGVtYWlsSWQsIGVtYWlsKTtcbiAgICBcbiAgICByZXR1cm4gZW1haWw7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignW0VSUk9SXSBFbWFpbCBmZXRjaCBmYWlsZWQ6Jywge1xuICAgICAgdXNlcklkLFxuICAgICAgZW1haWxJZCxcbiAgICAgIGZvbGRlcjogbm9ybWFsaXplZEZvbGRlcixcbiAgICAgIGFjY291bnRJZDogZWZmZWN0aXZlQWNjb3VudElkLFxuICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InLFxuICAgICAgZGV0YWlsczogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLnN0YWNrIDogdW5kZWZpbmVkXG4gICAgfSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNsaWVudC5tYWlsYm94Q2xvc2UoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY2xvc2luZyBtYWlsYm94OicsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBNYXJrIGFuIGVtYWlsIGFzIHJlYWQgb3IgdW5yZWFkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYXJrRW1haWxSZWFkU3RhdHVzKFxuICB1c2VySWQ6IHN0cmluZyxcbiAgZW1haWxJZDogc3RyaW5nLFxuICBpc1JlYWQ6IGJvb2xlYW4sXG4gIGZvbGRlcjogc3RyaW5nID0gJ0lOQk9YJyxcbiAgYWNjb3VudElkPzogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgLy8gRXh0cmFjdCBhY2NvdW50IElEIGZyb20gZm9sZGVyIG5hbWUgaWYgcHJlc2VudCBhbmQgbm9uZSB3YXMgZXhwbGljaXRseSBwcm92aWRlZFxuICBjb25zdCBmb2xkZXJBY2NvdW50SWQgPSBmb2xkZXIuaW5jbHVkZXMoJzonKSA/IGZvbGRlci5zcGxpdCgnOicpWzBdIDogYWNjb3VudElkO1xuICBcbiAgLy8gVXNlIHRoZSBtb3N0IHNwZWNpZmljIGFjY291bnQgSUQgYXZhaWxhYmxlXG4gIGNvbnN0IGVmZmVjdGl2ZUFjY291bnRJZCA9IGZvbGRlckFjY291bnRJZCB8fCBhY2NvdW50SWQgfHwgJ2RlZmF1bHQnO1xuICBcbiAgLy8gTm9ybWFsaXplIGZvbGRlciBuYW1lIGJ5IHJlbW92aW5nIGFjY291bnQgcHJlZml4IGlmIHByZXNlbnRcbiAgY29uc3Qgbm9ybWFsaXplZEZvbGRlciA9IGZvbGRlci5pbmNsdWRlcygnOicpID8gZm9sZGVyLnNwbGl0KCc6JylbMV0gOiBmb2xkZXI7XG4gIFxuICBjb25zb2xlLmxvZyhgW21hcmtFbWFpbFJlYWRTdGF0dXNdIE1hcmtpbmcgZW1haWwgJHtlbWFpbElkfSBhcyAke2lzUmVhZCA/ICdyZWFkJyA6ICd1bnJlYWQnfSBpbiBmb2xkZXIgJHtub3JtYWxpemVkRm9sZGVyfSwgYWNjb3VudCAke2VmZmVjdGl2ZUFjY291bnRJZH1gKTtcbiAgXG4gIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEltYXBDb25uZWN0aW9uKHVzZXJJZCwgZWZmZWN0aXZlQWNjb3VudElkKTtcbiAgXG4gIHRyeSB7XG4gICAgYXdhaXQgY2xpZW50Lm1haWxib3hPcGVuKG5vcm1hbGl6ZWRGb2xkZXIpO1xuICAgIFxuICAgIGlmIChpc1JlYWQpIHtcbiAgICAgIGF3YWl0IGNsaWVudC5tZXNzYWdlRmxhZ3NBZGQoZW1haWxJZCwgWydcXFxcU2VlbiddKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgY2xpZW50Lm1lc3NhZ2VGbGFnc1JlbW92ZShlbWFpbElkLCBbJ1xcXFxTZWVuJ10pO1xuICAgIH1cbiAgICBcbiAgICAvLyBJbnZhbGlkYXRlIGNvbnRlbnQgY2FjaGUgc2luY2UgdGhlIGZsYWdzIGNoYW5nZWRcbiAgICBhd2FpdCBpbnZhbGlkYXRlRW1haWxDb250ZW50Q2FjaGUodXNlcklkLCBlZmZlY3RpdmVBY2NvdW50SWQsIGVtYWlsSWQpO1xuICAgIFxuICAgIC8vIEFsc28gaW52YWxpZGF0ZSBmb2xkZXIgY2FjaGUgYmVjYXVzZSB1bnJlYWQgY291bnRzIG1heSBoYXZlIGNoYW5nZWRcbiAgICBhd2FpdCBpbnZhbGlkYXRlRm9sZGVyQ2FjaGUodXNlcklkLCBlZmZlY3RpdmVBY2NvdW50SWQsIG5vcm1hbGl6ZWRGb2xkZXIpO1xuICAgIFxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIG1hcmtpbmcgZW1haWwgJHtlbWFpbElkfSBhcyAke2lzUmVhZCA/ICdyZWFkJyA6ICd1bnJlYWQnfSBpbiBmb2xkZXIgJHtub3JtYWxpemVkRm9sZGVyfSwgYWNjb3VudCAke2VmZmVjdGl2ZUFjY291bnRJZH06YCwgZXJyb3IpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2xpZW50Lm1haWxib3hDbG9zZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjbG9zaW5nIG1haWxib3g6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRvZ2dsZSBhbiBlbWFpbCdzIGZsYWdnZWQgKHN0YXJyZWQpIHN0YXR1c1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9nZ2xlRW1haWxGbGFnKFxuICB1c2VySWQ6IHN0cmluZyxcbiAgZW1haWxJZDogc3RyaW5nLFxuICBmbGFnZ2VkOiBib29sZWFuLFxuICBmb2xkZXI6IHN0cmluZyA9ICdJTkJPWCcsXG4gIGFjY291bnRJZD86IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIC8vIEV4dHJhY3QgYWNjb3VudCBJRCBmcm9tIGZvbGRlciBuYW1lIGlmIHByZXNlbnQgYW5kIG5vbmUgd2FzIGV4cGxpY2l0bHkgcHJvdmlkZWRcbiAgY29uc3QgZm9sZGVyQWNjb3VudElkID0gZm9sZGVyLmluY2x1ZGVzKCc6JykgPyBmb2xkZXIuc3BsaXQoJzonKVswXSA6IGFjY291bnRJZDtcbiAgXG4gIC8vIFVzZSB0aGUgbW9zdCBzcGVjaWZpYyBhY2NvdW50IElEIGF2YWlsYWJsZVxuICBjb25zdCBlZmZlY3RpdmVBY2NvdW50SWQgPSBmb2xkZXJBY2NvdW50SWQgfHwgYWNjb3VudElkIHx8ICdkZWZhdWx0JztcbiAgXG4gIC8vIE5vcm1hbGl6ZSBmb2xkZXIgbmFtZSBieSByZW1vdmluZyBhY2NvdW50IHByZWZpeCBpZiBwcmVzZW50XG4gIGNvbnN0IG5vcm1hbGl6ZWRGb2xkZXIgPSBmb2xkZXIuaW5jbHVkZXMoJzonKSA/IGZvbGRlci5zcGxpdCgnOicpWzFdIDogZm9sZGVyO1xuICBcbiAgY29uc29sZS5sb2coYFt0b2dnbGVFbWFpbEZsYWddIE1hcmtpbmcgZW1haWwgJHtlbWFpbElkfSBhcyAke2ZsYWdnZWQgPyAnZmxhZ2dlZCcgOiAndW5mbGFnZ2VkJ30gaW4gZm9sZGVyICR7bm9ybWFsaXplZEZvbGRlcn0sIGFjY291bnQgJHtlZmZlY3RpdmVBY2NvdW50SWR9YCk7XG4gIFxuICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRJbWFwQ29ubmVjdGlvbih1c2VySWQsIGVmZmVjdGl2ZUFjY291bnRJZCk7XG4gIFxuICB0cnkge1xuICAgIGF3YWl0IGNsaWVudC5tYWlsYm94T3Blbihub3JtYWxpemVkRm9sZGVyKTtcbiAgICBcbiAgICBpZiAoZmxhZ2dlZCkge1xuICAgICAgYXdhaXQgY2xpZW50Lm1lc3NhZ2VGbGFnc0FkZChlbWFpbElkLCBbJ1xcXFxGbGFnZ2VkJ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBjbGllbnQubWVzc2FnZUZsYWdzUmVtb3ZlKGVtYWlsSWQsIFsnXFxcXEZsYWdnZWQnXSk7XG4gICAgfVxuICAgIFxuICAgIC8vIEludmFsaWRhdGUgY29udGVudCBjYWNoZSBzaW5jZSB0aGUgZmxhZ3MgY2hhbmdlZFxuICAgIGF3YWl0IGludmFsaWRhdGVFbWFpbENvbnRlbnRDYWNoZSh1c2VySWQsIGVmZmVjdGl2ZUFjY291bnRJZCwgZW1haWxJZCk7XG4gICAgXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihgRXJyb3IgdG9nZ2xpbmcgZmxhZyBmb3IgZW1haWwgJHtlbWFpbElkfSBpbiBmb2xkZXIgJHtub3JtYWxpemVkRm9sZGVyfSwgYWNjb3VudCAke2VmZmVjdGl2ZUFjY291bnRJZH06YCwgZXJyb3IpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2xpZW50Lm1haWxib3hDbG9zZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjbG9zaW5nIG1haWxib3g6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBEZWZpbmUgRW1haWxDb250ZW50IGludGVyZmFjZVxuaW50ZXJmYWNlIEVtYWlsQ29udGVudCB7XG4gIHRvOiBzdHJpbmc7XG4gIGNjPzogc3RyaW5nO1xuICBiY2M/OiBzdHJpbmc7XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgcGxhaW5UZXh0OiBzdHJpbmc7XG4gIGh0bWxDb250ZW50OiBzdHJpbmc7XG4gIGF0dGFjaG1lbnRzPzogQXJyYXk8e1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgY29udGVudDogc3RyaW5nO1xuICAgIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gIH0+O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZEVtYWlsKFxuICB1c2VySWQ6IHN0cmluZyxcbiAgZW1haWxEYXRhOiB7XG4gICAgdG86IHN0cmluZztcbiAgICBjYz86IHN0cmluZztcbiAgICBiY2M/OiBzdHJpbmc7XG4gICAgc3ViamVjdDogc3RyaW5nO1xuICAgIGJvZHk6IHN0cmluZztcbiAgICBhdHRhY2htZW50cz86IEFycmF5PHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICAgIHR5cGU6IHN0cmluZztcbiAgICB9PjtcbiAgfVxuKTogUHJvbWlzZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2VJZD86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfT4ge1xuICBjb25zdCBjcmVkZW50aWFscyA9IGF3YWl0IGdldFVzZXJFbWFpbENyZWRlbnRpYWxzKHVzZXJJZCk7XG4gIFxuICBpZiAoIWNyZWRlbnRpYWxzKSB7XG4gICAgcmV0dXJuIHsgXG4gICAgICBzdWNjZXNzOiBmYWxzZSwgXG4gICAgICBlcnJvcjogJ05vIGVtYWlsIGNyZWRlbnRpYWxzIGZvdW5kJyBcbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FzdCB0byBleHRlbmRlZCB0eXBlXG4gIGNvbnN0IGV4dGVuZGVkQ3JlZHMgPSBjcmVkZW50aWFscyBhcyBFbWFpbENyZWRlbnRpYWxzRXh0ZW5kZWQ7XG4gIFxuICAvLyBDb25maWd1cmUgU01UUCBhdXRoIGJhc2VkIG9uIE9BdXRoIG9yIHBhc3N3b3JkXG4gIGNvbnN0IHNtdHBBdXRoID0gZXh0ZW5kZWRDcmVkcy51c2VPQXV0aCAmJiBleHRlbmRlZENyZWRzLmFjY2Vzc1Rva2VuXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdPQXV0aDInLFxuICAgICAgICB1c2VyOiBleHRlbmRlZENyZWRzLmVtYWlsLFxuICAgICAgICBhY2Nlc3NUb2tlbjogZXh0ZW5kZWRDcmVkcy5hY2Nlc3NUb2tlblxuICAgICAgfVxuICAgIDoge1xuICAgICAgICB1c2VyOiBleHRlbmRlZENyZWRzLmVtYWlsLFxuICAgICAgICBwYXNzOiBleHRlbmRlZENyZWRzLnBhc3N3b3JkXG4gICAgICB9O1xuICBcbiAgLy8gQ3JlYXRlIFNNVFAgdHJhbnNwb3J0ZXIgd2l0aCB1c2VyJ3MgU01UUCBzZXR0aW5nc1xuICBjb25zdCB0cmFuc3BvcnRlciA9IG5vZGVtYWlsZXIuY3JlYXRlVHJhbnNwb3J0KHtcbiAgICBob3N0OiBleHRlbmRlZENyZWRzLnNtdHBfaG9zdCB8fCAnc210cC5pbmZvbWFuaWFrLmNvbScsXG4gICAgcG9ydDogZXh0ZW5kZWRDcmVkcy5zbXRwX3BvcnQgfHwgNTg3LFxuICAgIHNlY3VyZTogZXh0ZW5kZWRDcmVkcy5zbXRwX3NlY3VyZSB8fCBmYWxzZSxcbiAgICBhdXRoOiBzbXRwQXV0aCxcbiAgICB0bHM6IHtcbiAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcbiAgICB9XG4gIH0gYXMgbm9kZW1haWxlci5UcmFuc3BvcnRPcHRpb25zKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGluZm8gPSBhd2FpdCB0cmFuc3BvcnRlci5zZW5kTWFpbCh7XG4gICAgICBmcm9tOiBleHRlbmRlZENyZWRzLmVtYWlsLFxuICAgICAgdG86IGVtYWlsRGF0YS50byxcbiAgICAgIGNjOiBlbWFpbERhdGEuY2MsXG4gICAgICBiY2M6IGVtYWlsRGF0YS5iY2MsXG4gICAgICBzdWJqZWN0OiBlbWFpbERhdGEuc3ViamVjdCxcbiAgICAgIHRleHQ6IGVtYWlsRGF0YS5ib2R5LFxuICAgICAgaHRtbDogZW1haWxEYXRhLmJvZHksXG4gICAgICBhdHRhY2htZW50czogZW1haWxEYXRhLmF0dGFjaG1lbnRzPy5tYXAoYXR0ID0+ICh7XG4gICAgICAgIGZpbGVuYW1lOiBhdHQubmFtZSxcbiAgICAgICAgY29udGVudDogYXR0LmNvbnRlbnQsXG4gICAgICAgIGNvbnRlbnRUeXBlOiBhdHQudHlwZVxuICAgICAgfSkpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBtZXNzYWdlSWQ6IGluZm8ubWVzc2FnZUlkXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gc2VuZCBlbWFpbDonLCBlcnJvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCBsaXN0IG9mIG1haWxib3hlcyBmcm9tIGFuIElNQVAgY29ubmVjdGlvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TWFpbGJveGVzKGNsaWVudDogSW1hcEZsb3csIGFjY291bnRJZD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBtYWlsYm94ZXMgPSBhd2FpdCBjbGllbnQubGlzdCgpO1xuICAgIFxuICAgIC8vIElmIHdlIGhhdmUgYW4gYWNjb3VudElkLCBwcmVmaXggdGhlIGZvbGRlciBuYW1lcyB0byBwcmV2ZW50IG5hbWVzcGFjZSBjb2xsaXNpb25zXG4gICAgaWYgKGFjY291bnRJZCkge1xuICAgICAgcmV0dXJuIG1haWxib3hlcy5tYXAobWFpbGJveCA9PiBgJHthY2NvdW50SWR9OiR7bWFpbGJveC5wYXRofWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgcmV0dXJuIHVucHJlZml4ZWQgbmFtZXMgd2hlbiBubyBhY2NvdW50SWRcbiAgICByZXR1cm4gbWFpbGJveGVzLm1hcChtYWlsYm94ID0+IG1haWxib3gucGF0aCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgbWFpbGJveGVzOicsIGVycm9yKTtcbiAgICAvLyBSZXR1cm4gZW1wdHkgYXJyYXkgb24gZXJyb3IgdG8gYXZvaWQgc2hvd2luZyBpbmNvcnJlY3QgZm9sZGVyc1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG4vKipcbiAqIFRlc3QgSU1BUCBhbmQgU01UUCBjb25uZWN0aW9ucyBmb3IgYW4gZW1haWwgYWNjb3VudFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdEVtYWlsQ29ubmVjdGlvbihjcmVkZW50aWFsczogRW1haWxDcmVkZW50aWFscyk6IFByb21pc2U8e1xuICBpbWFwOiBib29sZWFuO1xuICBzbXRwPzogYm9vbGVhbjtcbiAgZXJyb3I/OiBzdHJpbmc7XG4gIGZvbGRlcnM/OiBzdHJpbmdbXTtcbn0+IHtcbiAgLy8gQ2FzdCB0byBleHRlbmRlZCB0eXBlIHRvIHVzZSBPQXV0aCBwcm9wZXJ0aWVzXG4gIGNvbnN0IGV4dGVuZGVkQ3JlZHMgPSBjcmVkZW50aWFscyBhcyBFbWFpbENyZWRlbnRpYWxzRXh0ZW5kZWQ7XG4gIFxuICBjb25zb2xlLmxvZygnVGVzdGluZyBjb25uZWN0aW9uIHdpdGg6Jywge1xuICAgIC4uLmV4dGVuZGVkQ3JlZHMsXG4gICAgcGFzc3dvcmQ6IGV4dGVuZGVkQ3JlZHMucGFzc3dvcmQgPyAnKioqJyA6IHVuZGVmaW5lZCxcbiAgICBhY2Nlc3NUb2tlbjogZXh0ZW5kZWRDcmVkcy5hY2Nlc3NUb2tlbiA/ICcqKionIDogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hUb2tlbjogZXh0ZW5kZWRDcmVkcy5yZWZyZXNoVG9rZW4gPyAnKioqJyA6IHVuZGVmaW5lZFxuICB9KTtcblxuICAvLyBUZXN0IElNQVAgY29ubmVjdGlvblxuICB0cnkge1xuICAgIGNvbnNvbGUubG9nKGBUZXN0aW5nIElNQVAgY29ubmVjdGlvbiB0byAke2V4dGVuZGVkQ3JlZHMuaG9zdH06JHtleHRlbmRlZENyZWRzLnBvcnR9IGZvciAke2V4dGVuZGVkQ3JlZHMuZW1haWx9YCk7XG4gICAgXG4gICAgLy8gQ29uZmlndXJlIGF1dGggYmFzZWQgb24gd2hldGhlciB3ZSdyZSB1c2luZyBPQXV0aCBvciBwYXNzd29yZFxuICAgIGxldCBhdXRoUGFyYW1zOiBhbnk7XG4gICAgXG4gICAgaWYgKGV4dGVuZGVkQ3JlZHMudXNlT0F1dGggJiYgZXh0ZW5kZWRDcmVkcy5hY2Nlc3NUb2tlbikge1xuICAgICAgY29uc29sZS5sb2coJ1VzaW5nIFhPQVVUSDIgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtJyk7XG4gICAgICBcbiAgICAgIC8vIEZvciBPQXV0aCwgcGFzcyB0aGUgYWNjZXNzVG9rZW4gZGlyZWN0bHkgdG8gSW1hcEZsb3dcbiAgICAgIGF1dGhQYXJhbXMgPSB7XG4gICAgICAgIHVzZXI6IGV4dGVuZGVkQ3JlZHMuZW1haWwsXG4gICAgICAgIGFjY2Vzc1Rva2VuOiBleHRlbmRlZENyZWRzLmFjY2Vzc1Rva2VuXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBMb2cgdGhlIHRva2VuIGxlbmd0aCB0byB2ZXJpZnkgaXQgZXhpc3RzXG4gICAgICBjb25zb2xlLmxvZyhgQWNjZXNzIHRva2VuIGF2YWlsYWJsZSAobGVuZ3RoOiAke2V4dGVuZGVkQ3JlZHMuYWNjZXNzVG9rZW4ubGVuZ3RofSlgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ1VzaW5nIHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbScpO1xuICAgICAgYXV0aFBhcmFtcyA9IHtcbiAgICAgICAgdXNlcjogZXh0ZW5kZWRDcmVkcy5lbWFpbCxcbiAgICAgICAgcGFzczogZXh0ZW5kZWRDcmVkcy5wYXNzd29yZFxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEltYXBGbG93KHtcbiAgICAgIGhvc3Q6IGV4dGVuZGVkQ3JlZHMuaG9zdCxcbiAgICAgIHBvcnQ6IGV4dGVuZGVkQ3JlZHMucG9ydCxcbiAgICAgIHNlY3VyZTogZXh0ZW5kZWRDcmVkcy5zZWN1cmUgPz8gdHJ1ZSxcbiAgICAgIGF1dGg6IGF1dGhQYXJhbXMsXG4gICAgICBsb2dnZXI6IGZhbHNlLFxuICAgICAgdGxzOiB7XG4gICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCdBdHRlbXB0aW5nIHRvIGNvbm5lY3QgdG8gSU1BUCBzZXJ2ZXIuLi4nKTtcbiAgICBhd2FpdCBjbGllbnQuY29ubmVjdCgpO1xuICAgIGNvbnNvbGUubG9nKCdJTUFQIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgR2V0dGluZyBtYWlsYm94ZXMuLi4nKTtcbiAgICBcbiAgICBjb25zdCBmb2xkZXJzID0gYXdhaXQgZ2V0TWFpbGJveGVzKGNsaWVudCk7XG4gICAgYXdhaXQgY2xpZW50LmxvZ291dCgpO1xuXG4gICAgY29uc29sZS5sb2coYElNQVAgY29ubmVjdGlvbiBzdWNjZXNzZnVsIGZvciAke2V4dGVuZGVkQ3JlZHMuZW1haWx9YCk7XG4gICAgY29uc29sZS5sb2coYEZvdW5kICR7Zm9sZGVycy5sZW5ndGh9IGZvbGRlcnM6YCwgZm9sZGVycyk7XG5cbiAgICAvLyBUZXN0IFNNVFAgY29ubmVjdGlvbiBpZiBTTVRQIHNldHRpbmdzIGFyZSBwcm92aWRlZFxuICAgIGxldCBzbXRwU3VjY2VzcyA9IGZhbHNlO1xuICAgIGlmIChleHRlbmRlZENyZWRzLnNtdHBfaG9zdCAmJiBleHRlbmRlZENyZWRzLnNtdHBfcG9ydCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS5sb2coYFRlc3RpbmcgU01UUCBjb25uZWN0aW9uIHRvICR7ZXh0ZW5kZWRDcmVkcy5zbXRwX2hvc3R9OiR7ZXh0ZW5kZWRDcmVkcy5zbXRwX3BvcnR9YCk7XG4gICAgICAgIFxuICAgICAgICAvLyBDb25maWd1cmUgU01UUCBhdXRoIGJhc2VkIG9uIE9BdXRoIG9yIHBhc3N3b3JkXG4gICAgICAgIGNvbnN0IHNtdHBBdXRoID0gZXh0ZW5kZWRDcmVkcy51c2VPQXV0aCAmJiBleHRlbmRlZENyZWRzLmFjY2Vzc1Rva2VuXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHR5cGU6ICdPQXV0aDInLFxuICAgICAgICAgICAgICB1c2VyOiBleHRlbmRlZENyZWRzLmVtYWlsLFxuICAgICAgICAgICAgICBhY2Nlc3NUb2tlbjogZXh0ZW5kZWRDcmVkcy5hY2Nlc3NUb2tlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICB1c2VyOiBleHRlbmRlZENyZWRzLmVtYWlsLFxuICAgICAgICAgICAgICBwYXNzOiBleHRlbmRlZENyZWRzLnBhc3N3b3JkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHRyYW5zcG9ydGVyID0gbm9kZW1haWxlci5jcmVhdGVUcmFuc3BvcnQoe1xuICAgICAgICAgIGhvc3Q6IGV4dGVuZGVkQ3JlZHMuc210cF9ob3N0LFxuICAgICAgICAgIHBvcnQ6IGV4dGVuZGVkQ3JlZHMuc210cF9wb3J0LFxuICAgICAgICAgIHNlY3VyZTogZXh0ZW5kZWRDcmVkcy5zbXRwX3NlY3VyZSA/PyBmYWxzZSxcbiAgICAgICAgICBhdXRoOiBzbXRwQXV0aCxcbiAgICAgICAgICB0bHM6IHtcbiAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0gYXMgbm9kZW1haWxlci5UcmFuc3BvcnRPcHRpb25zKTtcblxuICAgICAgICBhd2FpdCB0cmFuc3BvcnRlci52ZXJpZnkoKTtcbiAgICAgICAgY29uc29sZS5sb2coYFNNVFAgY29ubmVjdGlvbiBzdWNjZXNzZnVsIGZvciAke2V4dGVuZGVkQ3JlZHMuZW1haWx9YCk7XG4gICAgICAgIHNtdHBTdWNjZXNzID0gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKHNtdHBFcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBTTVRQIGNvbm5lY3Rpb24gZmFpbGVkIGZvciAke2V4dGVuZGVkQ3JlZHMuZW1haWx9OmAsIHNtdHBFcnJvcik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW1hcDogdHJ1ZSxcbiAgICAgICAgICBzbXRwOiBmYWxzZSxcbiAgICAgICAgICBlcnJvcjogYFNNVFAgY29ubmVjdGlvbiBmYWlsZWQ6ICR7c210cEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBzbXRwRXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gLFxuICAgICAgICAgIGZvbGRlcnNcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW1hcDogdHJ1ZSxcbiAgICAgIHNtdHA6IHNtdHBTdWNjZXNzLFxuICAgICAgZm9sZGVyc1xuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihgSU1BUCBjb25uZWN0aW9uIGZhaWxlZCBmb3IgJHtleHRlbmRlZENyZWRzLmVtYWlsfTpgLCBlcnJvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGltYXA6IGZhbHNlLFxuICAgICAgZXJyb3I6IGBJTUFQIGNvbm5lY3Rpb24gZmFpbGVkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICB9O1xuICB9XG59Il0sIm5hbWVzIjpbIkltYXBGbG93Iiwibm9kZW1haWxlciIsInByaXNtYSIsInNpbXBsZVBhcnNlciIsImNhY2hlRW1haWxDcmVkZW50aWFscyIsImdldENhY2hlZEVtYWlsQ3JlZGVudGlhbHMiLCJjYWNoZUVtYWlsTGlzdCIsImNhY2hlRW1haWxDb250ZW50IiwiZ2V0Q2FjaGVkRW1haWxDb250ZW50IiwiY2FjaGVJbWFwU2Vzc2lvbiIsImdldENhY2hlZEltYXBTZXNzaW9uIiwiaW52YWxpZGF0ZUZvbGRlckNhY2hlIiwiaW52YWxpZGF0ZUVtYWlsQ29udGVudENhY2hlIiwiZW5zdXJlRnJlc2hUb2tlbiIsImNvbm5lY3Rpb25Qb29sIiwidG90YWxDb25uZWN0aW9uUmVxdWVzdHMiLCJ0b3RhbE5ld0Nvbm5lY3Rpb25zIiwidG90YWxSZXVzZUNvbm5lY3Rpb25zIiwidG90YWxDb25uZWN0aW9uRXJyb3JzIiwibGFzdE1ldHJpY3NSZXNldCIsIkRhdGUiLCJub3ciLCJDT05ORUNUSU9OX1RJTUVPVVQiLCJNQVhfUE9PTF9TSVpFIiwiQ09OTkVDVElPTl9DSEVDS19JTlRFUlZBTCIsIk1JTl9QT09MX1NJWkUiLCJzZXRJbnRlcnZhbCIsImNvbm5lY3Rpb25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImNvbnNvbGUiLCJsb2ciLCJ0b0ZpeGVkIiwiY29ubmVjdGlvbnNCeVVzZXIiLCJmb3JFYWNoIiwia2V5IiwidXNlcklkIiwic3BsaXQiLCJwdXNoIiwiZW50cmllcyIsInVzZXJDb25uZWN0aW9ucyIsInNvcnRlZENvbm5lY3Rpb25zIiwibWFwIiwibGFzdFVzZWQiLCJzb3J0IiwiYSIsImIiLCJjb25uZWN0aW9uc1RvS2VlcCIsInNsaWNlIiwia2VlcEtleXMiLCJTZXQiLCJjb25uIiwiaGFzIiwiaXNDb25uZWN0aW5nIiwiTWF0aCIsInJvdW5kIiwiY2xpZW50IiwidXNhYmxlIiwibG9nb3V0IiwiY2F0Y2giLCJlcnIiLCJlcnJvciIsImxlbmd0aCIsImFjdGl2ZUNvdW50IiwiZmlsdGVyIiwiY29ubmVjdGluZ0NvdW50IiwiZ2V0SW1hcENvbm5lY3Rpb24iLCJhY2NvdW50SWQiLCJzdGFydFRpbWUiLCJzZXNzaW9uRGF0YSIsImRlZmF1bHRBY2NvdW50SWQiLCJhY2NvdW50cyIsIm1haWxDcmVkZW50aWFscyIsImZpbmRNYW55Iiwid2hlcmUiLCJvcmRlckJ5IiwiY3JlYXRlZEF0IiwidGFrZSIsImZpcnN0QWNjb3VudCIsImlkIiwiZW1haWwiLCJsYXN0QWN0aXZlIiwiRXJyb3IiLCJjb25uZWN0aW9uS2V5IiwiY29ubmVjdGlvbiIsImNvbm5lY3Rpb25Qcm9taXNlIiwidXBkYXRlU2Vzc2lvbkRhdGEiLCJ3YXJuIiwiY3JlZGVudGlhbHMiLCJoYXNQYXNzd29yZCIsInBhc3N3b3JkIiwidXNlT0F1dGgiLCJoYXNBY2Nlc3NUb2tlbiIsImFjY2Vzc1Rva2VuIiwiaGFzUmVmcmVzaFRva2VuIiwicmVmcmVzaFRva2VuIiwiZGJDcmVkZW50aWFscyIsImZpbmRGaXJzdCIsIkFORCIsImZpZWxkcyIsImhvc3QiLCJwb3J0Iiwic2VjdXJlIiwic210cF9ob3N0IiwidW5kZWZpbmVkIiwic210cF9wb3J0Iiwic210cF9zZWN1cmUiLCJkaXNwbGF5X25hbWUiLCJjb2xvciIsImV4dGVuZGVkQ3JlZHMiLCJjYWNoZWRDcmVkcyIsInRva2VuRXhwaXJ5Iiwic3VjY2VzcyIsImNvbm5lY3Rpb25BdHRlbXB0cyIsImNvbm5lY3Rpb25UaW1lb3V0Iiwic2V0VGltZW91dCIsImNyZWF0ZUltYXBDb25uZWN0aW9uIiwidGhlbiIsImNsZWFyVGltZW91dCIsIm1lc3NhZ2UiLCJoYXNUb2tlbkV4cGlyeSIsImF1dGhQYXJhbXMiLCJ1c2VyIiwicGFzcyIsImF1dGgiLCJsb2dnZXIiLCJlbWl0TG9ncyIsInRscyIsInJlamVjdFVuYXV0aG9yaXplZCIsImRpc2FibGVBdXRvSWRsZSIsImNvbm5lY3QiLCJvbiIsImdldFVzZXJFbWFpbENyZWRlbnRpYWxzIiwic2F2ZVVzZXJFbWFpbENyZWRlbnRpYWxzIiwib2F1dGhEYXRhIiwiaGFzT0F1dGgiLCJ1cHNlcnQiLCJzZWxlY3QiLCJyZXN1bHQiLCJ1cGRhdGUiLCJjcmVhdGUiLCJmdWxsQ3JlZHMiLCJnZXRFbWFpbHMiLCJmb2xkZXIiLCJwYWdlIiwicGVyUGFnZSIsImNoZWNrT25seSIsInJlc29sdmVkQWNjb3VudElkIiwibWFpbGJveEluZm8iLCJtYWlsYm94T3BlbiIsImV4aXN0cyIsIm1haWxib3hlcyIsImdldE1haWxib3hlcyIsInRvdGFsRW1haWxzIiwidG90YWxQYWdlcyIsImNlaWwiLCJlbXB0eVJlc3VsdCIsImVtYWlscyIsIm5ld2VzdEVtYWlsSWQiLCJsYXN0TWVzc2FnZVNlcXVlbmNlIiwidG9TdHJpbmciLCJtZXNzYWdlcyIsImZldGNoIiwidWlkIiwic3RhcnQiLCJtYXgiLCJlbmQiLCJlbnZlbG9wZSIsImZsYWdzIiwiYm9keVN0cnVjdHVyZSIsImZyb20iLCJhZGRyIiwibmFtZSIsImFkZHJlc3MiLCJ0byIsInN1YmplY3QiLCJkYXRlIiwic2VlbiIsImZsYWdnZWQiLCJhbnN3ZXJlZCIsImRyYWZ0IiwiZGVsZXRlZCIsInNpemUiLCJoYXNBdHRhY2htZW50cyIsImNoaWxkTm9kZXMiLCJzb21lIiwibm9kZSIsImRpc3Bvc2l0aW9uIiwiY29udGVudEZldGNoZWQiLCJjb250ZW50IiwidGV4dCIsImh0bWwiLCJpc0h0bWwiLCJkaXJlY3Rpb24iLCJtYXBBZGRyZXNzZXMiLCJhZGRyZXNzZXMiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRFbWFpbENvbnRlbnQiLCJlbWFpbElkIiwidGVzdCIsIm51bWVyaWNJZCIsInBhcnNlSW50IiwiaXNOYU4iLCJmb2xkZXJBY2NvdW50SWQiLCJpbmNsdWRlcyIsImVmZmVjdGl2ZUFjY291bnRJZCIsIm5vcm1hbGl6ZWRGb2xkZXIiLCJjYWNoZWRFbWFpbCIsIm1haWxib3giLCJ1aWRWYWxpZGl0eSIsInVpZE5leHQiLCJzZWFyY2hSZXN1bHQiLCJzZWFyY2giLCJzZXF1ZW5jZU51bWJlciIsImZldGNoT25lIiwic291cmNlIiwiZmV0Y2hFcnJvciIsInBhcnNlZEVtYWlsIiwic2tpcEh0bWxUb1RleHQiLCJrZWVwQ2lkTGlua3MiLCJwYXJzZUVycm9yIiwiZmxhZ3NBcnJheSIsInJhd0h0bWwiLCJtZXNzYWdlSWQiLCJjYyIsImJjYyIsImF0dGFjaG1lbnRzIiwiYXR0IiwiZmlsZW5hbWUiLCJjb250ZW50VHlwZSIsImRldGFpbHMiLCJzdGFjayIsIm1haWxib3hDbG9zZSIsIm1hcmtFbWFpbFJlYWRTdGF0dXMiLCJpc1JlYWQiLCJtZXNzYWdlRmxhZ3NBZGQiLCJtZXNzYWdlRmxhZ3NSZW1vdmUiLCJ0b2dnbGVFbWFpbEZsYWciLCJzZW5kRW1haWwiLCJlbWFpbERhdGEiLCJzbXRwQXV0aCIsInR5cGUiLCJ0cmFuc3BvcnRlciIsImNyZWF0ZVRyYW5zcG9ydCIsImluZm8iLCJzZW5kTWFpbCIsImJvZHkiLCJsaXN0IiwicGF0aCIsInRlc3RFbWFpbENvbm5lY3Rpb24iLCJmb2xkZXJzIiwic210cFN1Y2Nlc3MiLCJ2ZXJpZnkiLCJzbXRwRXJyb3IiLCJpbWFwIiwic210cCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(action-browser)/./lib/services/email-service.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(action-browser)/./lib/services/microsoft-oauth.ts":
|
|
/*!*****************************************!*\
|
|
!*** ./lib/services/microsoft-oauth.ts ***!
|
|
\*****************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createXOAuth2Token: () => (/* binding */ createXOAuth2Token),\n/* harmony export */ exchangeCodeForTokens: () => (/* binding */ exchangeCodeForTokens),\n/* harmony export */ getMicrosoftAuthUrl: () => (/* binding */ getMicrosoftAuthUrl),\n/* harmony export */ refreshAccessToken: () => (/* binding */ refreshAccessToken)\n/* harmony export */ });\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! axios */ \"(action-browser)/./node_modules/axios/lib/axios.js\");\n\n// Get tenant ID from env var or use a default\nconst tenantId = process.env.MICROSOFT_TENANT_ID || 'common'; // Use 'organizations' or actual tenant ID\n// Microsoft OAuth URLs with configurable tenant\nconst MICROSOFT_AUTHORIZE_URL = `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/authorize`;\nconst MICROSOFT_TOKEN_URL = `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token`;\n// Client configuration from environment variables\nconst clientId = process.env.MICROSOFT_CLIENT_ID;\nconst clientSecret = process.env.MICROSOFT_CLIENT_SECRET;\nconst redirectUri = process.env.MICROSOFT_REDIRECT_URI;\n// Log configuration for debugging\nconsole.log('Microsoft OAuth Configuration:', {\n tenantId,\n authorizeUrl: MICROSOFT_AUTHORIZE_URL,\n tokenUrl: MICROSOFT_TOKEN_URL,\n clientIdFirstChars: clientId ? clientId.substring(0, 5) + '...' : 'undefined',\n redirectUri\n});\n// Required scopes for IMAP and SMTP access\nconst REQUIRED_SCOPES = [\n 'offline_access',\n 'https://outlook.office.com/IMAP.AccessAsUser.All',\n 'https://outlook.office.com/SMTP.Send'\n].join(' ');\n/**\n * Generates the authorization URL for Microsoft OAuth\n */ function getMicrosoftAuthUrl(state) {\n const params = new URLSearchParams({\n client_id: clientId,\n response_type: 'code',\n redirect_uri: redirectUri,\n scope: REQUIRED_SCOPES,\n state,\n response_mode: 'query'\n });\n return `${MICROSOFT_AUTHORIZE_URL}?${params.toString()}`;\n}\n/**\n * Exchange authorization code for tokens\n */ async function exchangeCodeForTokens(code) {\n const params = new URLSearchParams({\n client_id: clientId,\n client_secret: clientSecret,\n code,\n redirect_uri: redirectUri,\n grant_type: 'authorization_code'\n });\n try {\n console.log(`Exchanging code for tokens. URL: ${MICROSOFT_TOKEN_URL}`);\n const response = await axios__WEBPACK_IMPORTED_MODULE_0__[\"default\"].post(MICROSOFT_TOKEN_URL, params.toString(), {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n });\n console.log('Token exchange successful!');\n return {\n access_token: response.data.access_token,\n refresh_token: response.data.refresh_token,\n expires_in: response.data.expires_in\n };\n } catch (error) {\n console.error('Error exchanging code for tokens:', error);\n // Enhanced error logging\n if (error.response) {\n console.error('Response data:', error.response.data);\n console.error('Response status:', error.response.status);\n console.error('Response headers:', error.response.headers);\n // Extract the error message from Microsoft's response format\n const errorData = error.response.data;\n if (errorData && errorData.error_description) {\n throw new Error(`Token exchange failed: ${errorData.error_description}`);\n }\n }\n throw new Error('Failed to exchange authorization code for tokens');\n }\n}\n/**\n * Refresh an access token using a refresh token\n */ async function refreshAccessToken(refreshToken) {\n const params = new URLSearchParams({\n client_id: clientId,\n client_secret: clientSecret,\n refresh_token: refreshToken,\n grant_type: 'refresh_token',\n scope: REQUIRED_SCOPES\n });\n try {\n console.log(`Refreshing access token. URL: ${MICROSOFT_TOKEN_URL}`);\n const response = await axios__WEBPACK_IMPORTED_MODULE_0__[\"default\"].post(MICROSOFT_TOKEN_URL, params.toString(), {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n });\n console.log('Token refresh successful!');\n return {\n access_token: response.data.access_token,\n refresh_token: response.data.refresh_token,\n expires_in: response.data.expires_in\n };\n } catch (error) {\n console.error('Error refreshing token:', error);\n // Enhanced error logging\n if (error.response) {\n console.error('Response data:', error.response.data);\n console.error('Response status:', error.response.status);\n console.error('Response headers:', error.response.headers);\n // Extract the error message from Microsoft's response format\n const errorData = error.response.data;\n if (errorData && errorData.error_description) {\n throw new Error(`Token refresh failed: ${errorData.error_description}`);\n }\n }\n throw new Error('Failed to refresh access token');\n }\n}\n/**\n * Create special XOAUTH2 string for IMAP authentication\n */ function createXOAuth2Token(email, accessToken) {\n // This creates the XOAUTH2 token in the required format for ImapFlow\n // Format: user=<email>\\x01auth=Bearer <token>\\x01\\x01\n const auth = `user=${email}\\x01auth=Bearer ${accessToken}\\x01\\x01`;\n const base64Auth = Buffer.from(auth).toString('base64');\n console.log('Generated XOAUTH2 token (length):', base64Auth.length);\n return base64Auth;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL2xpYi9zZXJ2aWNlcy9taWNyb3NvZnQtb2F1dGgudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBMEI7QUFFMUIsOENBQThDO0FBQzlDLE1BQU1DLFdBQVdDLFFBQVFDLEdBQUcsQ0FBQ0MsbUJBQW1CLElBQUksVUFBVSwwQ0FBMEM7QUFFeEcsZ0RBQWdEO0FBQ2hELE1BQU1DLDBCQUEwQixDQUFDLGtDQUFrQyxFQUFFSixTQUFTLHNCQUFzQixDQUFDO0FBQ3JHLE1BQU1LLHNCQUFzQixDQUFDLGtDQUFrQyxFQUFFTCxTQUFTLGtCQUFrQixDQUFDO0FBRTdGLGtEQUFrRDtBQUNsRCxNQUFNTSxXQUFXTCxRQUFRQyxHQUFHLENBQUNLLG1CQUFtQjtBQUNoRCxNQUFNQyxlQUFlUCxRQUFRQyxHQUFHLENBQUNPLHVCQUF1QjtBQUN4RCxNQUFNQyxjQUFjVCxRQUFRQyxHQUFHLENBQUNTLHNCQUFzQjtBQUV0RCxrQ0FBa0M7QUFDbENDLFFBQVFDLEdBQUcsQ0FBQyxrQ0FBa0M7SUFDNUNiO0lBQ0FjLGNBQWNWO0lBQ2RXLFVBQVVWO0lBQ1ZXLG9CQUFvQlYsV0FBV0EsU0FBU1csU0FBUyxDQUFDLEdBQUcsS0FBSyxRQUFRO0lBQ2xFUDtBQUNGO0FBRUEsMkNBQTJDO0FBQzNDLE1BQU1RLGtCQUFrQjtJQUN0QjtJQUNBO0lBQ0E7Q0FDRCxDQUFDQyxJQUFJLENBQUM7QUFFUDs7Q0FFQyxHQUNNLFNBQVNDLG9CQUFvQkMsS0FBYTtJQUMvQyxNQUFNQyxTQUFTLElBQUlDLGdCQUFnQjtRQUNqQ0MsV0FBV2xCO1FBQ1htQixlQUFlO1FBQ2ZDLGNBQWNoQjtRQUNkaUIsT0FBT1Q7UUFDUEc7UUFDQU8sZUFBZTtJQUNqQjtJQUVBLE9BQU8sR0FBR3hCLHdCQUF3QixDQUFDLEVBQUVrQixPQUFPTyxRQUFRLElBQUk7QUFDMUQ7QUFFQTs7Q0FFQyxHQUNNLGVBQWVDLHNCQUFzQkMsSUFBWTtJQUt0RCxNQUFNVCxTQUFTLElBQUlDLGdCQUFnQjtR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RDtJQUN0RCxNQUFNQyxPQUFPLENBQUMsS0FBSyxFQUFFRixNQUFNLGdCQUFnQixFQUFFQyxZQUFZLFFBQVEsQ0FBQztJQUNsRSxNQUFNRSxhQUFhQyxPQUFPQyxJQUFJLENBQUNILE1BQU10QixRQUFRLENBQUM7SUFFOUNqQixRQUFRQyxHQUFHLENBQUMscUNBQXFDdUMsV0FBV0csTUFBTTtJQUNsRSxPQUFPSDtBQUNUIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2xpYi9zZXJ2aWNlcy9taWNyb3NvZnQtb2F1dGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuLy8gR2V0IHRlbmFudCBJRCBmcm9tIGVudiB2YXIgb3IgdXNlIGEgZGVmYXVsdFxuY29uc3QgdGVuYW50SWQgPSBwcm9jZXNzLmVudi5NSUNST1NPRlRfVEVOQU5UX0lEIHx8ICdjb21tb24nOyAvLyBVc2UgJ29yZ2FuaXphdGlvbnMnIG9yIGFjdHVhbCB0ZW5hbnQgSURcblxuLy8gTWljcm9zb2Z0IE9BdXRoIFVSTHMgd2l0aCBjb25maWd1cmFibGUgdGVuYW50XG5jb25zdCBNSUNST1NPRlRfQVVUSE9SSVpFX1VSTCA9IGBodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vJHt0ZW5hbnRJZH0vb2F1dGgyL3YyLjAvYXV0aG9yaXplYDtcbmNvbnN0IE1JQ1JPU09GVF9UT0tFTl9VUkwgPSBgaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tLyR7dGVuYW50SWR9L29hdXRoMi92Mi4wL3Rva2VuYDtcblxuLy8gQ2xpZW50IGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbmNvbnN0IGNsaWVudElkID0gcHJvY2Vzcy5lbnYuTUlDUk9TT0ZUX0NMSUVOVF9JRDtcbmNvbnN0IGNsaWVudFNlY3JldCA9IHByb2Nlc3MuZW52Lk1JQ1JPU09GVF9DTElFTlRfU0VDUkVUO1xuY29uc3QgcmVkaXJlY3RVcmkgPSBwcm9jZXNzLmVudi5NSUNST1NPRlRfUkVESVJFQ1RfVVJJO1xuXG4vLyBMb2cgY29uZmlndXJhdGlvbiBmb3IgZGVidWdnaW5nXG5jb25zb2xlLmxvZygnTWljcm9zb2Z0IE9BdXRoIENvbmZpZ3VyYXRpb246Jywge1xuICB0ZW5hbnRJZCxcbiAgYXV0aG9yaXplVXJsOiBNSUNST1NPRlRfQVVUSE9SSVpFX1VSTCxcbiAgdG9rZW5Vcmw6IE1JQ1JPU09GVF9UT0tFTl9VUkwsXG4gIGNsaWVudElkRmlyc3RDaGFyczogY2xpZW50SWQgPyBjbGllbnRJZC5zdWJzdHJpbmcoMCwgNSkgKyAnLi4uJyA6ICd1bmRlZmluZWQnLFxuICByZWRpcmVjdFVyaVxufSk7XG5cbi8vIFJlcXVpcmVkIHNjb3BlcyBmb3IgSU1BUCBhbmQgU01UUCBhY2Nlc3NcbmNvbnN0IFJFUVVJUkVEX1NDT1BFUyA9IFtcbiAgJ29mZmxpbmVfYWNjZXNzJyxcbiAgJ2h0dHBzOi8vb3V0bG9vay5vZmZpY2UuY29tL0lNQVAuQWNjZXNzQXNVc2VyLkFsbCcsXG4gICdodHRwczovL291dGxvb2sub2ZmaWNlLmNvbS9TTVRQLlNlbmQnXG5dLmpvaW4oJyAnKTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGF1dGhvcml6YXRpb24gVVJMIGZvciBNaWNyb3NvZnQgT0F1dGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1pY3Jvc29mdEF1dGhVcmwoc3RhdGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgIGNsaWVudF9pZDogY2xpZW50SWQhLFxuICAgIHJlc3BvbnNlX3R5cGU6ICdjb2RlJyxcbiAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VXJpISxcbiAgICBzY29wZTogUkVRVUlSRURfU0NPUEVTLFxuICAgIHN0YXRlLFxuICAgIHJlc3BvbnNlX21vZGU6ICdxdWVyeSdcbiAgfSk7XG5cbiAgcmV0dXJuIGAke01JQ1JPU09GVF9BVVRIT1JJWkVfVVJMfT8ke3BhcmFtcy50b1N0cmluZygpfWA7XG59XG5cbi8qKlxuICogRXhjaGFuZ2UgYXV0aG9yaXphdGlvbiBjb2RlIGZvciB0b2tlbnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4Y2hhbmdlQ29kZUZvclRva2Vucyhjb2RlOiBzdHJpbmcpOiBQcm9taXNlPHtcbiAgYWNjZXNzX3Rva2VuOiBzdHJpbmc7XG4gIHJlZnJlc2hfdG9rZW46IHN0cmluZztcbiAgZXhwaXJlc19pbjogbnVtYmVyO1xufT4ge1xuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICBjbGllbnRfaWQ6IGNsaWVudElkISxcbiAgICBjbGllbnRfc2VjcmV0OiBjbGllbnRTZWNyZXQhLFxuICAgIGNvZGUsXG4gICAgcmVkaXJlY3RfdXJpOiByZWRpcmVjdFVyaSEsXG4gICAgZ3JhbnRfdHlwZTogJ2F1dGhvcml6YXRpb25fY29kZSdcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zb2xlLmxvZyhgRXhjaGFuZ2luZyBjb2RlIGZvciB0b2tlbnMuIFVSTDogJHtNSUNST1NPRlRfVE9LRU5fVVJMfWApO1xuICAgIFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChNSUNST1NPRlRfVE9LRU5fVVJMLCBwYXJhbXMudG9TdHJpbmcoKSwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCdUb2tlbiBleGNoYW5nZSBzdWNjZXNzZnVsIScpO1xuICAgIHJldHVybiB7XG4gICAgICBhY2Nlc3NfdG9rZW46IHJlc3BvbnNlLmRhdGEuYWNjZXNzX3Rva2VuLFxuICAgICAgcmVmcmVzaF90b2tlbjogcmVzcG9uc2UuZGF0YS5yZWZyZXNoX3Rva2VuLFxuICAgICAgZXhwaXJlc19pbjogcmVzcG9uc2UuZGF0YS5leHBpcmVzX2luXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGV4Y2hhbmdpbmcgY29kZSBmb3IgdG9rZW5zOicsIGVycm9yKTtcbiAgICBcbiAgICAvLyBFbmhhbmNlZCBlcnJvciBsb2dnaW5nXG4gICAgaWYgKGVycm9yLnJlc3BvbnNlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdSZXNwb25zZSBkYXRhOicsIGVycm9yLnJlc3BvbnNlLmRhdGEpO1xuICAgICAgY29uc29sZS5lcnJvcignUmVzcG9uc2Ugc3RhdHVzOicsIGVycm9yLnJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICBjb25zb2xlLmVycm9yKCdSZXNwb25zZSBoZWFkZXJzOicsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgXG4gICAgICAvLyBFeHRyYWN0IHRoZSBlcnJvciBtZXNzYWdlIGZyb20gTWljcm9zb2Z0J3MgcmVzcG9uc2UgZm9ybWF0XG4gICAgICBjb25zdCBlcnJvckRhdGEgPSBlcnJvci5yZXNwb25zZS5kYXRhO1xuICAgICAgaWYgKGVycm9yRGF0YSAmJiBlcnJvckRhdGEuZXJyb3JfZGVzY3JpcHRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUb2tlbiBleGNoYW5nZSBmYWlsZWQ6ICR7ZXJyb3JEYXRhLmVycm9yX2Rlc2NyaXB0aW9ufWApO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBleGNoYW5nZSBhdXRob3JpemF0aW9uIGNvZGUgZm9yIHRva2VucycpO1xuICB9XG59XG5cbi8qKlxuICogUmVmcmVzaCBhbiBhY2Nlc3MgdG9rZW4gdXNpbmcgYSByZWZyZXNoIHRva2VuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWZyZXNoQWNjZXNzVG9rZW4ocmVmcmVzaFRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHtcbiAgYWNjZXNzX3Rva2VuOiBzdHJpbmc7XG4gIHJlZnJlc2hfdG9rZW4/OiBzdHJpbmc7XG4gIGV4cGlyZXNfaW46IG51bWJlcjtcbn0+IHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgY2xpZW50X2lkOiBjbGllbnRJZCEsXG4gICAgY2xpZW50X3NlY3JldDogY2xpZW50U2VjcmV0ISxcbiAgICByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4sXG4gICAgZ3JhbnRfdHlwZTogJ3JlZnJlc2hfdG9rZW4nLFxuICAgIHNjb3BlOiBSRVFVSVJFRF9TQ09QRVNcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zb2xlLmxvZyhgUmVmcmVzaGluZyBhY2Nlc3MgdG9rZW4uIFVSTDogJHtNSUNST1NPRlRfVE9LRU5fVVJMfWApO1xuICAgIFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChNSUNST1NPRlRfVE9LRU5fVVJMLCBwYXJhbXMudG9TdHJpbmcoKSwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCdUb2tlbiByZWZyZXNoIHN1Y2Nlc3NmdWwhJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY2Vzc190b2tlbjogcmVzcG9uc2UuZGF0YS5hY2Nlc3NfdG9rZW4sXG4gICAgICByZWZyZXNoX3Rva2VuOiByZXNwb25zZS5kYXRhLnJlZnJlc2hfdG9rZW4sXG4gICAgICBleHBpcmVzX2luOiByZXNwb25zZS5kYXRhLmV4cGlyZXNfaW5cbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVmcmVzaGluZyB0b2tlbjonLCBlcnJvcik7XG4gICAgXG4gICAgLy8gRW5oYW5jZWQgZXJyb3IgbG9nZ2luZ1xuICAgIGlmIChlcnJvci5yZXNwb25zZSkge1xuICAgICAgY29uc29sZS5lcnJvcignUmVzcG9uc2UgZGF0YTonLCBlcnJvci5yZXNwb25zZS5kYXRhKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1Jlc3BvbnNlIHN0YXR1czonLCBlcnJvci5yZXNwb25zZS5zdGF0dXMpO1xuICAgICAgY29uc29sZS5lcnJvcignUmVzcG9uc2UgaGVhZGVyczonLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgIFxuICAgICAgLy8gRXh0cmFjdCB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIE1pY3Jvc29mdCdzIHJlc3BvbnNlIGZvcm1hdFxuICAgICAgY29uc3QgZXJyb3JEYXRhID0gZXJyb3IucmVzcG9uc2UuZGF0YTtcbiAgICAgIGlmIChlcnJvckRhdGEgJiYgZXJyb3JEYXRhLmVycm9yX2Rlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVG9rZW4gcmVmcmVzaCBmYWlsZWQ6ICR7ZXJyb3JEYXRhLmVycm9yX2Rlc2NyaXB0aW9ufWApO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZWZyZXNoIGFjY2VzcyB0b2tlbicpO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIHNwZWNpYWwgWE9BVVRIMiBzdHJpbmcgZm9yIElNQVAgYXV0aGVudGljYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVhPQXV0aDJUb2tlbihlbWFpbDogc3RyaW5nLCBhY2Nlc3NUb2tlbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gVGhpcyBjcmVhdGVzIHRoZSBYT0FVVEgyIHRva2VuIGluIHRoZSByZXF1aXJlZCBmb3JtYXQgZm9yIEltYXBGbG93XG4gIC8vIEZvcm1hdDogdXNlcj08ZW1haWw+XFx4MDFhdXRoPUJlYXJlciA8dG9rZW4+XFx4MDFcXHgwMVxuICBjb25zdCBhdXRoID0gYHVzZXI9JHtlbWFpbH1cXHgwMWF1dGg9QmVhcmVyICR7YWNjZXNzVG9rZW59XFx4MDFcXHgwMWA7XG4gIGNvbnN0IGJhc2U2NEF1dGggPSBCdWZmZXIuZnJvbShhdXRoKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIFxuICBjb25zb2xlLmxvZygnR2VuZXJhdGVkIFhPQVVUSDIgdG9rZW4gKGxlbmd0aCk6JywgYmFzZTY0QXV0aC5sZW5ndGgpO1xuICByZXR1cm4gYmFzZTY0QXV0aDtcbn0gIl0sIm5hbWVzIjpbImF4aW9zIiwidGVuYW50SWQiLCJwcm9jZXNzIiwiZW52IiwiTUlDUk9TT0ZUX1RFTkFOVF9JRCIsIk1JQ1JPU09GVF9BVVRIT1JJWkVfVVJMIiwiTUlDUk9TT0ZUX1RPS0VOX1VSTCIsImNsaWVudElkIiwiTUlDUk9TT0ZUX0NMSUVOVF9JRCIsImNsaWVudFNlY3JldCIsIk1JQ1JPU09GVF9DTElFTlRfU0VDUkVUIiwicmVkaXJlY3RVcmkiLCJNSUNST1NPRlRfUkVESVJFQ1RfVVJJIiwiY29uc29sZSIsImxvZyIsImF1dGhvcml6ZVVybCIsInRva2VuVXJsIiwiY2xpZW50SWRGaXJzdENoYXJzIiwic3Vic3RyaW5nIiwiUkVRVUlSRURfU0NPUEVTIiwiam9pbiIsImdldE1pY3Jvc29mdEF1dGhVcmwiLCJzdGF0ZSIsInBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsImNsaWVudF9pZCIsInJlc3BvbnNlX3R5cGUiLCJyZWRpcmVjdF91cmkiLCJzY29wZSIsInJlc3BvbnNlX21vZGUiLCJ0b1N0cmluZyIsImV4Y2hhbmdlQ29kZUZvclRva2VucyIsImNvZGUiLCJjbGllbnRfc2VjcmV0IiwiZ3JhbnRfdHlwZSIsInJlc3BvbnNlIiwicG9zdCIsImhlYWRlcnMiLCJhY2Nlc3NfdG9rZW4iLCJkYXRhIiwicmVmcmVzaF90b2tlbiIsImV4cGlyZXNfaW4iLCJlcnJvciIsInN0YXR1cyIsImVycm9yRGF0YSIsImVycm9yX2Rlc2NyaXB0aW9uIiwiRXJyb3IiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJyZWZyZXNoVG9rZW4iLCJjcmVhdGVYT0F1dGgyVG9rZW4iLCJlbWFpbCIsImFjY2Vzc1Rva2VuIiwiYXV0aCIsImJhc2U2NEF1dGgiLCJCdWZmZXIiLCJmcm9tIiwibGVuZ3RoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./lib/services/microsoft-oauth.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(action-browser)/./lib/services/prefetch-service.ts":
|
|
/*!******************************************!*\
|
|
!*** ./lib/services/prefetch-service.ts ***!
|
|
\******************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getCachedEmailsWithTimeout: () => (/* binding */ getCachedEmailsWithTimeout),\n/* harmony export */ prefetchFolderEmails: () => (/* binding */ prefetchFolderEmails),\n/* harmony export */ prefetchUserEmailData: () => (/* binding */ prefetchUserEmailData),\n/* harmony export */ refreshEmailsInBackground: () => (/* binding */ refreshEmailsInBackground)\n/* harmony export */ });\n/* harmony import */ var private_next_rsc_server_reference__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! private-next-rsc-server-reference */ \"(action-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/server-reference.js\");\n/* harmony import */ var private_next_rsc_action_encryption__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! private-next-rsc-action-encryption */ \"(action-browser)/./node_modules/next/dist/server/app-render/encryption.js\");\n/* harmony import */ var private_next_rsc_action_encryption__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(private_next_rsc_action_encryption__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _email_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./email-service */ \"(action-browser)/./lib/services/email-service.ts\");\n/* harmony import */ var _lib_redis__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/redis */ \"(action-browser)/./lib/redis.ts\");\n/* harmony import */ var private_next_rsc_action_validate__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! private-next-rsc-action-validate */ \"(action-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/action-validate.js\");\n/* __next_internal_action_entry_do_not_use__ {\"40b6acbd16ee963a18ba6de32b5c63b379909103e9\":\"prefetchUserEmailData\",\"7cf3883d51675d568256e1b2498cf8fe78875b65ee\":\"refreshEmailsInBackground\",\"7cfa4fcce0a70a3d3b703a31abefda0e79d9e1097a\":\"prefetchFolderEmails\",\"7e95e703e87cb496134c69dc010f054d10451a2f57\":\"getCachedEmailsWithTimeout\"} */ \n\n\n\n// Keep track of ongoing prefetch operations to prevent duplicates\nconst prefetchInProgress = new Map();\nconst lastPrefetchTime = new Map();\nconst PREFETCH_COOLDOWN_MS = 30000; // 30 seconds between prefetch operations\n// Track recent refreshes to prevent infinite loops\nconst recentRefreshes = new Map();\nconst COOLDOWN_PERIOD = 60000; // 60 seconds cooldown between refreshes\n/**\n * Check if we should prefetch for a user based on cooldown\n */ function shouldPrefetch(userId, key = 'general') {\n const prefetchKey = `${userId}:${key}`;\n // Check if prefetch is already in progress\n if (prefetchInProgress.get(prefetchKey)) {\n console.log(`Prefetch already in progress for ${prefetchKey}`);\n return false;\n }\n // Check cooldown\n const lastTime = lastPrefetchTime.get(prefetchKey) || 0;\n const now = Date.now();\n if (now - lastTime < PREFETCH_COOLDOWN_MS) {\n console.log(`Prefetch cooldown active for ${prefetchKey}, last was ${Math.round((now - lastTime) / 1000)}s ago`);\n return false;\n }\n // Mark as in progress and update last time\n prefetchInProgress.set(prefetchKey, true);\n lastPrefetchTime.set(prefetchKey, now);\n return true;\n}\n/**\n * Mark prefetch as completed\n */ function markPrefetchCompleted(userId, key = 'general') {\n const prefetchKey = `${userId}:${key}`;\n prefetchInProgress.set(prefetchKey, false);\n}\n/**\n * Get cached emails with timeout to ensure fast UI response\n * If cache access takes longer than timeout, return null to use regular IMAP fetch\n */ async function getCachedEmailsWithTimeout(userId, folder, page, perPage, timeoutMs = 100, accountId) {\n // Skip cache if accountId is 'loading-account'\n if (accountId === 'loading-account') {\n console.log(`Skipping cache for loading account`);\n return null;\n }\n // CRITICAL FIX: Proper folder and account ID normalization\n // This is critical for consistent cache keys\n let effectiveAccountId;\n let normalizedFolder;\n // First, handle the folder format\n if (folder.includes(':')) {\n // Extract parts if folder already has a prefix\n const parts = folder.split(':');\n const folderAccountId = parts[0];\n normalizedFolder = parts[1];\n // CRITICAL FIX: If explicit accountId is provided, it ALWAYS takes precedence\n // This ensures account switching works correctly\n if (accountId) {\n console.log(`[getCachedEmailsWithTimeout] Using provided accountId (${accountId}) over folder prefix (${folderAccountId})`);\n effectiveAccountId = accountId;\n } else {\n effectiveAccountId = folderAccountId;\n }\n } else {\n // No folder prefix, use the folder name as is\n normalizedFolder = folder;\n effectiveAccountId = accountId || 'default';\n }\n // Log the normalization for debugging\n console.log(`[getCachedEmailsWithTimeout] Normalized: folder=${normalizedFolder}, accountId=${effectiveAccountId} (from ${folder})`);\n return new Promise((resolve)=>{\n const timeoutId = setTimeout(()=>{\n console.log(`Cache access timeout for ${userId}:${effectiveAccountId}:${normalizedFolder}:${page}:${perPage}`);\n resolve(null);\n }, timeoutMs);\n // CRITICAL FIX: Use the normalized parameters consistently\n // This ensures we're looking up the right cache entries\n (0,_lib_redis__WEBPACK_IMPORTED_MODULE_3__.getCachedEmailList)(userId, effectiveAccountId, normalizedFolder, page, perPage).then((result)=>{\n clearTimeout(timeoutId);\n if (result) {\n console.log(`[getCachedEmailsWithTimeout] Cache hit for ${userId}:${effectiveAccountId}:${normalizedFolder}:${page}:${perPage}`);\n resolve(result);\n } else {\n console.log(`[getCachedEmailsWithTimeout] Cache miss for ${userId}:${effectiveAccountId}:${normalizedFolder}:${page}:${perPage}`);\n resolve(null);\n }\n }).catch((err)=>{\n clearTimeout(timeoutId);\n console.error('[getCachedEmailsWithTimeout] Error accessing cache:', err);\n resolve(null);\n });\n });\n}\n/**\n * Refresh emails in background without blocking UI\n * This allows the UI to show cached data immediately while refreshing in background\n */ async function refreshEmailsInBackground(userId, folder, page, perPage, accountId) {\n try {\n // First check if folder has the accountId prefix\n console.log(`[refreshEmailsInBackground] Normalized: folder=${folder}, accountId=${accountId} (from ${folder})`);\n // Create a unique key for this refresh request\n const refreshKey = `${userId}:refresh:${accountId || 'default'}:${folder}:${page}`;\n // Check if this exact refresh was done recently - PREVENT INFINITE LOOPS\n const lastRefreshed = recentRefreshes.get(refreshKey);\n const now = Date.now();\n if (lastRefreshed && now - lastRefreshed < COOLDOWN_PERIOD) {\n console.log(`Prefetch cooldown active for ${refreshKey}, last was ${Math.floor((now - lastRefreshed) / 1000)}s ago`);\n return; // Skip if we refreshed this exact data recently\n }\n // Update the refresh timestamp\n recentRefreshes.set(refreshKey, now);\n // Prune old entries from the map (keep only recent ones)\n for (const [key, timestamp] of recentRefreshes.entries()){\n if (now - timestamp > COOLDOWN_PERIOD) {\n recentRefreshes.delete(key);\n }\n }\n // CRITICAL FIX: Prevent any background refresh by immediately returning\n console.log(`[refreshEmailsInBackground] DISABLED to prevent infinite loops`);\n return;\n // Real implementation of refresh would be here\n } catch (error) {\n console.error('Error in refreshEmailsInBackground:', error);\n }\n}\n/**\n * Prefetch basic email data for faster initial loading\n * This function should be called when a user logs in\n */ async function prefetchUserEmailData(userId) {\n // Skip if already in progress or in cooldown\n if (!shouldPrefetch(userId)) {\n return;\n }\n console.log(`Starting email prefetch for user ${userId}`);\n const startTime = Date.now();\n try {\n // Connect to IMAP server\n const client = await (0,_email_service__WEBPACK_IMPORTED_MODULE_2__.getImapConnection)(userId);\n // 1. Prefetch mailbox list\n const mailboxes = await client.list();\n const mailboxPaths = mailboxes.map((mailbox)=>mailbox.path);\n // Cache mailbox list in session data\n await (0,_lib_redis__WEBPACK_IMPORTED_MODULE_3__.cacheImapSession)(userId, {\n lastActive: Date.now(),\n mailboxes: mailboxPaths\n });\n console.log(`Prefetched ${mailboxPaths.length} folders for user ${userId}`);\n // 2. Prefetch email lists for important folders\n const importantFolders = [\n 'INBOX',\n mailboxPaths.find((path)=>path.toLowerCase().includes('sent')) || 'Sent',\n mailboxPaths.find((path)=>path.toLowerCase().includes('draft')) || 'Drafts'\n ].filter(Boolean);\n // Fetch first page of each important folder\n for (const folder of importantFolders){\n try {\n console.log(`Prefetching emails for ${folder}`);\n const emailList = await (0,_email_service__WEBPACK_IMPORTED_MODULE_2__.getEmails)(userId, folder, 1, 20);\n console.log(`Prefetched ${emailList.emails.length} emails for ${folder}`);\n } catch (error) {\n console.error(`Error prefetching emails for folder ${folder}:`, error);\n // Continue with other folders even if one fails\n }\n }\n // 3. Prefetch content of recent unread emails in INBOX\n try {\n // Get the list again (it's already cached so this will be fast)\n const inboxList = await (0,_email_service__WEBPACK_IMPORTED_MODULE_2__.getEmails)(userId, 'INBOX', 1, 20);\n // Prefetch content for up to 5 recent unread emails\n const unreadEmails = inboxList.emails.filter((email)=>!email.flags.seen).slice(0, 5);\n if (unreadEmails.length > 0) {\n console.log(`Prefetching content for ${unreadEmails.length} unread emails`);\n // Fetch content in parallel for speed\n await Promise.allSettled(unreadEmails.map((email)=>(0,_email_service__WEBPACK_IMPORTED_MODULE_2__.getEmailContent)(userId, email.id, 'INBOX').catch((err)=>console.error(`Error prefetching email ${email.id}:`, err))));\n console.log(`Completed prefetching content for unread emails`);\n }\n } catch (error) {\n console.error('Error prefetching unread email content:', error);\n }\n const duration = (Date.now() - startTime) / 1000;\n console.log(`Email prefetch completed for user ${userId} in ${duration.toFixed(2)}s`);\n } catch (error) {\n console.error('Error during email prefetch:', error);\n } finally{\n markPrefetchCompleted(userId);\n }\n}\n/**\n * Prefetch a specific folder's emails\n * This can be used when the user navigates to a folder to preload more pages\n */ async function prefetchFolderEmails(userId, folder, pages = 3, startPage = 1, accountId) {\n // Extract account ID from folder name if present and none was explicitly provided\n const folderAccountId = folder.includes(':') ? folder.split(':')[0] : accountId;\n // Use the most specific account ID available\n const effectiveAccountId = folderAccountId || accountId || 'default';\n // Normalize folder name by removing account prefix if present\n const normalizedFolder = folder.includes(':') ? folder.split(':')[1] : folder;\n const prefetchKey = `folder:${normalizedFolder}:${startPage}:${effectiveAccountId}`;\n // Skip if already in progress or in cooldown\n if (!shouldPrefetch(userId, prefetchKey)) {\n return;\n }\n try {\n console.log(`Prefetching ${pages} pages of emails for folder ${normalizedFolder} starting from page ${startPage} for account ${effectiveAccountId}`);\n // Calculate the range of pages to prefetch\n const pagesToFetch = Array.from({\n length: pages\n }, (_, i)=>startPage + i);\n console.log(`Will prefetch pages: ${pagesToFetch.join(', ')}`);\n // Fetch multiple pages in parallel\n await Promise.allSettled(pagesToFetch.map((page)=>(0,_email_service__WEBPACK_IMPORTED_MODULE_2__.getEmails)(userId, normalizedFolder, page, 20, effectiveAccountId).then((result)=>{\n console.log(`Successfully prefetched and cached page ${page} of ${normalizedFolder} with ${result.emails.length} emails for account ${effectiveAccountId}`);\n return result;\n }).catch((err)=>{\n console.error(`Error prefetching page ${page} of ${normalizedFolder} for account ${effectiveAccountId}:`, err);\n return null;\n })));\n console.log(`Completed prefetching ${pages} pages for ${normalizedFolder} in account ${effectiveAccountId}`);\n } catch (error) {\n console.error(`Error during folder prefetch:`, error);\n } finally{\n markPrefetchCompleted(userId, prefetchKey);\n }\n}\n\n(0,private_next_rsc_action_validate__WEBPACK_IMPORTED_MODULE_4__.ensureServerEntryExports)([\n getCachedEmailsWithTimeout,\n refreshEmailsInBackground,\n prefetchUserEmailData,\n prefetchFolderEmails\n]);\n(0,private_next_rsc_server_reference__WEBPACK_IMPORTED_MODULE_0__.registerServerReference)(getCachedEmailsWithTimeout, \"7e95e703e87cb496134c69dc010f054d10451a2f57\", null);\n(0,private_next_rsc_server_reference__WEBPACK_IMPORTED_MODULE_0__.registerServerReference)(refreshEmailsInBackground, \"7cf3883d51675d568256e1b2498cf8fe78875b65ee\", null);\n(0,private_next_rsc_server_reference__WEBPACK_IMPORTED_MODULE_0__.registerServerReference)(prefetchUserEmailData, \"40b6acbd16ee963a18ba6de32b5c63b379909103e9\", null);\n(0,private_next_rsc_server_reference__WEBPACK_IMPORTED_MODULE_0__.registerServerReference)(prefetchFolderEmails, \"7cfa4fcce0a70a3d3b703a31abefda0e79d9e1097a\", null);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL2xpYi9zZXJ2aWNlcy9wcmVmZXRjaC1zZXJ2aWNlLnRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUVnRjtBQVEzRDtBQUVyQixrRUFBa0U7QUFDbEUsTUFBTUsscUJBQXFCLElBQUlDO0FBQy9CLE1BQU1DLG1CQUFtQixJQUFJRDtBQUM3QixNQUFNRSx1QkFBdUIsT0FBTyx5Q0FBeUM7QUFFN0UsbURBQW1EO0FBQ25ELE1BQU1DLGtCQUFrQixJQUFJSDtBQUM1QixNQUFNSSxrQkFBa0IsT0FBTyx3Q0FBd0M7QUFFdkU7O0NBRUMsR0FDRCxTQUFTQyxlQUFlQyxNQUFjLEVBQUVDLE1BQWMsU0FBUztJQUM3RCxNQUFNQyxjQUFjLEdBQUdGLE9BQU8sQ0FBQyxFQUFFQyxLQUFLO0lBRXRDLDJDQUEyQztJQUMzQyxJQUFJUixtQkFBbUJVLEdBQUcsQ0FBQ0QsY0FBYztRQUN2Q0UsUUFBUUMsR0FBRyxDQUFDLENBQUMsaUNBQWlDLEVBQUVILGFBQWE7UUFDN0QsT0FBTztJQUNUO0lBRUEsaUJBQWlCO0lBQ2pCLE1BQU1JLFdBQVdYLGlCQUFpQlEsR0FBRyxDQUFDRCxnQkFBZ0I7SUFDdEQsTUFBTUssTUFBTUMsS0FBS0QsR0FBRztJQUVwQixJQUFJQSxNQUFNRCxXQUFXVixzQkFBc0I7UUFDekNRLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLDZCQUE2QixFQUFFSCxZQUFZLFdBQVcsRUFBRU8sS0FBS0MsS0FBSyxDQUFDLENBQUNILE1BQU1ELFFBQU8sSUFBRyxNQUFNLEtBQUssQ0FBQztRQUM3RyxPQUFPO0lBQ1Q7SUFFQSwyQ0FBMkM7SUFDM0NiLG1CQUFtQmtCLEdBQUcsQ0FBQ1QsYUFBYTtJQUNwQ1AsaUJBQWlCZ0IsR0FBRyxDQUFDVCxhQUFhSztJQUNsQyxPQUFPO0FBQ1Q7QUFFQTs7Q0FFQyxHQUNELFNBQVNLLHNCQUFzQlosTUFBYyxFQUFFQyxNQUFjLFNBQVM7SUFDcEUsTUFBTUMsY0FBYyxHQUFHRixPQUFPLENBQUMs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QUVELG1CQUFtQixDQUFDLENBQUMsRUFBRWM7Z0JBQzFHLE9BQU87WUFDVDtRQUlON0IsUUFBUUMsR0FBRyxDQUFDLENBQUMsc0JBQXNCLEVBQUVrRSxNQUFNLFdBQVcsRUFBRW5ELGlCQUFpQixZQUFZLEVBQUVELG9CQUFvQjtJQUM3RyxFQUFFLE9BQU9lLE9BQU87UUFDZDlCLFFBQVE4QixLQUFLLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFQTtJQUNqRCxTQUFVO1FBQ1J0QixzQkFBc0JaLFFBQVFFO0lBQ2hDO0FBQ0Y7OztJQXBRc0JXO0lBMEVBc0I7SUErQ0FPO0lBb0ZBNEI7O0FBN01BekQsMEZBQUFBLENBQUFBO0FBMEVBc0IsMEZBQUFBLENBQUFBO0FBK0NBTywwRkFBQUEsQ0FBQUE7QUFvRkE0QiwwRkFBQUEsQ0FBQUEiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbGliL3NlcnZpY2VzL3ByZWZldGNoLXNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInO1xuXG5pbXBvcnQgeyBnZXRJbWFwQ29ubmVjdGlvbiwgZ2V0RW1haWxzLCBnZXRFbWFpbENvbnRlbnQgfSBmcm9tICcuL2VtYWlsLXNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgY2FjaGVFbWFpbExpc3QsXG4gIGNhY2hlRW1haWxDb250ZW50LFxuICBjYWNoZUltYXBTZXNzaW9uLFxuICBnZXRDYWNoZWRFbWFpbExpc3QsXG4gIGdldFJlZGlzQ2xpZW50LFxuICB3YXJtdXBSZWRpc0NhY2hlXG59IGZyb20gJ0AvbGliL3JlZGlzJztcblxuLy8gS2VlcCB0cmFjayBvZiBvbmdvaW5nIHByZWZldGNoIG9wZXJhdGlvbnMgdG8gcHJldmVudCBkdXBsaWNhdGVzXG5jb25zdCBwcmVmZXRjaEluUHJvZ3Jlc3MgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcbmNvbnN0IGxhc3RQcmVmZXRjaFRpbWUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuY29uc3QgUFJFRkVUQ0hfQ09PTERPV05fTVMgPSAzMDAwMDsgLy8gMzAgc2Vjb25kcyBiZXR3ZWVuIHByZWZldGNoIG9wZXJhdGlvbnNcblxuLy8gVHJhY2sgcmVjZW50IHJlZnJlc2hlcyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzXG5jb25zdCByZWNlbnRSZWZyZXNoZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuY29uc3QgQ09PTERPV05fUEVSSU9EID0gNjAwMDA7IC8vIDYwIHNlY29uZHMgY29vbGRvd24gYmV0d2VlbiByZWZyZXNoZXNcblxuLyoqXG4gKiBDaGVjayBpZiB3ZSBzaG91bGQgcHJlZmV0Y2ggZm9yIGEgdXNlciBiYXNlZCBvbiBjb29sZG93blxuICovXG5mdW5jdGlvbiBzaG91bGRQcmVmZXRjaCh1c2VySWQ6IHN0cmluZywga2V5OiBzdHJpbmcgPSAnZ2VuZXJhbCcpOiBib29sZWFuIHtcbiAgY29uc3QgcHJlZmV0Y2hLZXkgPSBgJHt1c2VySWR9OiR7a2V5fWA7XG4gIFxuICAvLyBDaGVjayBpZiBwcmVmZXRjaCBpcyBhbHJlYWR5IGluIHByb2dyZXNzXG4gIGlmIChwcmVmZXRjaEluUHJvZ3Jlc3MuZ2V0KHByZWZldGNoS2V5KSkge1xuICAgIGNvbnNvbGUubG9nKGBQcmVmZXRjaCBhbHJlYWR5IGluIHByb2dyZXNzIGZvciAke3ByZWZldGNoS2V5fWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBcbiAgLy8gQ2hlY2sgY29vbGRvd25cbiAgY29uc3QgbGFzdFRpbWUgPSBsYXN0UHJlZmV0Y2hUaW1lLmdldChwcmVmZXRjaEtleSkgfHwgMDtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgXG4gIGlmIChub3cgLSBsYXN0VGltZSA8IFBSRUZFVENIX0NPT0xET1dOX01TKSB7XG4gICAgY29uc29sZS5sb2coYFByZWZldGNoIGNvb2xkb3duIGFjdGl2ZSBmb3IgJHtwcmVmZXRjaEtleX0sIGxhc3Qgd2FzICR7TWF0aC5yb3VuZCgobm93IC0gbGFzdFRpbWUpLzEwMDApfXMgYWdvYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIFxuICAvLyBNYXJrIGFzIGluIHByb2dyZXNzIGFuZCB1cGRhdGUgbGFzdCB0aW1lXG4gIHByZWZldGNoSW5Qcm9ncmVzcy5zZXQocHJlZmV0Y2hLZXksIHRydWUpO1xuICBsYXN0UHJlZmV0Y2hUaW1lLnNldChwcmVmZXRjaEtleSwgbm93KTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogTWFyayBwcmVmZXRjaCBhcyBjb21wbGV0ZWRcbiAqL1xuZnVuY3Rpb24gbWFya1ByZWZldGNoQ29tcGxldGVkKHVzZXJJZDogc3RyaW5nLCBrZXk6IHN0cmluZyA9ICdnZW5lcmFsJyk6IHZvaWQge1xuICBjb25zdCBwcmVmZXRjaEtleSA9IGAke3VzZXJJZH06JHtrZXl9YDtcbiAgcHJlZmV0Y2hJblByb2dyZXNzLnNldChwcmVmZXRjaEtleSwgZmFsc2UpO1xufVxuXG4vKipcbiAqIEdldCBjYWNoZWQgZW1haWxzIHdpdGggdGltZW91dCB0byBlbnN1cmUgZmFzdCBVSSByZXNwb25zZVxuICogSWYgY2FjaGUgYWNjZXNzIHRha2VzIGxvbmdlciB0aGFuIHRpbWVvdXQsIHJldHVybiBudWxsIHRvIHVzZSByZWd1bGFyIElNQVAgZmV0Y2hcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENhY2hlZEVtYWlsc1dpdGhUaW1lb3V0KFxuICB1c2VySWQ6IHN0cmluZyxcbiAgZm9sZGVyOiBzdHJpbmcsXG4gIHBhZ2U6IG51bWJlcixcbiAgcGVyUGFnZTogbnVtYmVyLFxuICB0aW1lb3V0TXM6IG51bWJlciA9IDEwMCxcbiAgYWNjb3VudElkPzogc3RyaW5nXG4pOiBQcm9taXNlPGFueSB8IG51bGw+IHtcbiAgLy8gU2tpcCBjYWNoZSBpZiBhY2NvdW50SWQgaXMgJ2xvYWRpbmctYWNjb3VudCdcbiAgaWYgKGFjY291bnRJZCA9PT0gJ2xvYWRpbmctYWNjb3VudCcpIHtcbiAgICBjb25zb2xlLmxvZyhgU2tpcHBpbmcgY2FjaGUgZm9yIGxvYWRpbmcgYWNjb3VudGApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ1JJVElDQUwgRklYOiBQcm9wZXIgZm9sZGVyIGFuZCBhY2NvdW50IElEIG5vcm1hbGl6YXRpb25cbiAgLy8gVGhpcyBpcyBjcml0aWNhbCBmb3IgY29uc2lzdGVudCBjYWNoZSBrZXlzXG4gIGxldCBlZmZlY3RpdmVBY2NvdW50SWQ6IHN0cmluZztcbiAgbGV0IG5vcm1hbGl6ZWRGb2xkZXI6IHN0cmluZztcblxuICAvLyBGaXJzdCwgaGFuZGxlIHRoZSBmb2xkZXIgZm9ybWF0XG4gIGlmIChmb2xkZXIuaW5jbHVkZXMoJzonKSkge1xuICAgIC8vIEV4dHJhY3QgcGFydHMgaWYgZm9sZGVyIGFscmVhZHkgaGFzIGEgcHJlZml4XG4gICAgY29uc3QgcGFydHMgPSBmb2xkZXIuc3BsaXQoJzonKTtcbiAgICBjb25zdCBmb2xkZXJBY2NvdW50SWQgPSBwYXJ0c1swXTtcbiAgICBub3JtYWxpemVkRm9sZGVyID0gcGFydHNbMV07XG4gICAgXG4gICAgLy8gQ1JJVElDQUwgRklYOiBJZiBleHBsaWNpdCBhY2NvdW50SWQgaXMgcHJvdmlkZWQsIGl0IEFMV0FZUyB0YWtlcyBwcmVjZWRlbmNlXG4gICAgLy8gVGhpcyBlbnN1cmVzIGFjY291bnQgc3dpdGNoaW5nIHdvcmtzIGNvcnJlY3RseVxuICAgIGlmIChhY2NvdW50SWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbZ2V0Q2FjaGVkRW1haWxzV2l0aFRpbWVvdXRdIFVzaW5nIHByb3ZpZGVkIGFjY291bnRJZCAoJHthY2NvdW50SWR9KSBvdmVyIGZvbGRlciBwcmVmaXggKCR7Zm9sZGVyQWNjb3VudElkfSlgKTtcbiAgICAgIGVmZmVjdGl2ZUFjY291bnRJZCA9IGFjY291bnRJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgZWZmZWN0aXZlQWNjb3VudElkID0gZm9sZGVyQWNjb3VudElkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBObyBmb2xkZXIgcHJlZml4LCB1c2UgdGhlIGZvbGRlciBuYW1lIGFzIGlzXG4gICAgbm9ybWFsaXplZEZvbGRlciA9IGZvbGRlcjtcbiAgICBlZmZlY3RpdmVBY2NvdW50SWQgPSBhY2NvdW50SWQgfHwgJ2RlZmF1bHQnO1xuICB9XG4gIFxuICAvLyBMb2cgdGhlIG5vcm1hbGl6YXRpb24gZm9yIGRlYnVnZ2luZ1xuICBjb25zb2xlLmxvZyhgW2dldENhY2hlZEVtYWlsc1dpdGhUaW1lb3V0XSBOb3JtYWxpemVkOiBmb2xkZXI9JHtub3JtYWxpemVkRm9sZGVyfSwgYWNjb3VudElkPSR7ZWZmZWN0aXZlQWNjb3VudElkfSAoZnJvbSAke2ZvbGRlcn0pYCk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhgQ2FjaGUgYWNjZXNzIHRpbWVvdXQgZm9yICR7dXNlcklkfToke2VmZmVjdGl2ZUFjY291bnRJZH06JHtub3JtYWxpemVkRm9sZGVyfToke3BhZ2V9OiR7cGVyUGFnZX1gKTtcbiAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgfSwgdGltZW91dE1zKTtcblxuICAgIC8vIENSSVRJQ0FMIEZJWDogVXNlIHRoZSBub3JtYWxpemVkIHBhcmFtZXRlcnMgY29uc2lzdGVudGx5XG4gICAgLy8gVGhpcyBlbnN1cmVzIHdlJ3JlIGxvb2tpbmcgdXAgdGhlIHJpZ2h0IGNhY2hlIGVudHJpZXNcbiAgICBnZXRDYWNoZWRFbWFpbExpc3QodXNlcklkLCBlZmZlY3RpdmVBY2NvdW50SWQsIG5vcm1hbGl6ZWRGb2xkZXIsIHBhZ2UsIHBlclBhZ2UpXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBbZ2V0Q2FjaGVkRW1haWxzV2l0aFRpbWVvdXRdIENhY2hlIGhpdCBmb3IgJHt1c2VySWR9OiR7ZWZmZWN0aXZlQWNjb3VudElkfToke25vcm1hbGl6ZWRGb2xkZXJ9OiR7cGFnZX06JHtwZXJQYWdlfWApO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgW2dldENhY2hlZEVtYWlsc1dpdGhUaW1lb3V0XSBDYWNoZSBtaXNzIGZvciAke3VzZXJJZH06JHtlZmZlY3RpdmVBY2NvdW50SWR9OiR7bm9ybWFsaXplZEZvbGRlcn06JHtwYWdlfToke3BlclBhZ2V9YCk7XG4gICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignW2dldENhY2hlZEVtYWlsc1dpdGhUaW1lb3V0XSBFcnJvciBhY2Nlc3NpbmcgY2FjaGU6JywgZXJyKTtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZWZyZXNoIGVtYWlscyBpbiBiYWNrZ3JvdW5kIHdpdGhvdXQgYmxvY2tpbmcgVUlcbiAqIFRoaXMgYWxsb3dzIHRoZSBVSSB0byBzaG93IGNhY2hlZCBkYXRhIGltbWVkaWF0ZWx5IHdoaWxlIHJlZnJlc2hpbmcgaW4gYmFja2dyb3VuZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEVtYWlsc0luQmFja2dyb3VuZChcbiAgdXNlcklkOiBzdHJpbmcsIFxuICBmb2xkZXI6IHN0cmluZyxcbiAgcGFnZTogbnVtYmVyLFxuICBwZXJQYWdlOiBudW1iZXIsXG4gIGFjY291bnRJZD86IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgLy8gRmlyc3QgY2hlY2sgaWYgZm9sZGVyIGhhcyB0aGUgYWNjb3VudElkIHByZWZpeFxuICAgIGNvbnNvbGUubG9nKGBbcmVmcmVzaEVtYWlsc0luQmFja2dyb3VuZF0gTm9ybWFsaXplZDogZm9sZGVyPSR7Zm9sZGVyfSwgYWNjb3VudElkPSR7YWNjb3VudElkfSAoZnJvbSAke2ZvbGRlcn0pYCk7XG4gICAgXG4gICAgLy8gQ3JlYXRlIGEgdW5pcXVlIGtleSBmb3IgdGhpcyByZWZyZXNoIHJlcXVlc3RcbiAgICBjb25zdCByZWZyZXNoS2V5ID0gYCR7dXNlcklkfTpyZWZyZXNoOiR7YWNjb3VudElkIHx8ICdkZWZhdWx0J306JHtmb2xkZXJ9OiR7cGFnZX1gO1xuICAgIFxuICAgIC8vIENoZWNrIGlmIHRoaXMgZXhhY3QgcmVmcmVzaCB3YXMgZG9uZSByZWNlbnRseSAtIFBSRVZFTlQgSU5GSU5JVEUgTE9PUFNcbiAgICBjb25zdCBsYXN0UmVmcmVzaGVkID0gcmVjZW50UmVmcmVzaGVzLmdldChyZWZyZXNoS2V5KTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIFxuICAgIGlmIChsYXN0UmVmcmVzaGVkICYmIG5vdyAtIGxhc3RSZWZyZXNoZWQgPCBDT09MRE9XTl9QRVJJT0QpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBQcmVmZXRjaCBjb29sZG93biBhY3RpdmUgZm9yICR7cmVmcmVzaEtleX0sIGxhc3Qgd2FzICR7TWF0aC5mbG9vcigobm93IC0gbGFzdFJlZnJlc2hlZCkvMTAwMCl9cyBhZ29gKTtcbiAgICAgIHJldHVybjsgLy8gU2tpcCBpZiB3ZSByZWZyZXNoZWQgdGhpcyBleGFjdCBkYXRhIHJlY2VudGx5XG4gICAgfVxuICAgIFxuICAgIC8vIFVwZGF0ZSB0aGUgcmVmcmVzaCB0aW1lc3RhbXBcbiAgICByZWNlbnRSZWZyZXNoZXMuc2V0KHJlZnJlc2hLZXksIG5vdyk7XG4gICAgXG4gICAgLy8gUHJ1bmUgb2xkIGVudHJpZXMgZnJvbSB0aGUgbWFwIChrZWVwIG9ubHkgcmVjZW50IG9uZXMpXG4gICAgZm9yIChjb25zdCBba2V5LCB0aW1lc3RhbXBdIG9mIHJlY2VudFJlZnJlc2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChub3cgLSB0aW1lc3RhbXAgPiBDT09MRE9XTl9QRVJJT0QpIHtcbiAgICAgICAgcmVjZW50UmVmcmVzaGVzLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBDUklUSUNBTCBGSVg6IFByZXZlbnQgYW55IGJhY2tncm91bmQgcmVmcmVzaCBieSBpbW1lZGlhdGVseSByZXR1cm5pbmdcbiAgICBjb25zb2xlLmxvZyhgW3JlZnJlc2hFbWFpbHNJbkJhY2tncm91bmRdIERJU0FCTEVEIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHNgKTtcbiAgICByZXR1cm47XG4gICAgXG4gICAgLy8gUmVhbCBpbXBsZW1lbnRhdGlvbiBvZiByZWZyZXNoIHdvdWxkIGJlIGhlcmVcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiByZWZyZXNoRW1haWxzSW5CYWNrZ3JvdW5kOicsIGVycm9yKTtcbiAgfVxufVxuXG4vKipcbiAqIFByZWZldGNoIGJhc2ljIGVtYWlsIGRhdGEgZm9yIGZhc3RlciBpbml0aWFsIGxvYWRpbmdcbiAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGEgdXNlciBsb2dzIGluXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVmZXRjaFVzZXJFbWFpbERhdGEodXNlcklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gU2tpcCBpZiBhbHJlYWR5IGluIHByb2dyZXNzIG9yIGluIGNvb2xkb3duXG4gIGlmICghc2hvdWxkUHJlZmV0Y2godXNlcklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBcbiAgY29uc29sZS5sb2coYFN0YXJ0aW5nIGVtYWlsIHByZWZldGNoIGZvciB1c2VyICR7dXNlcklkfWApO1xuICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gIHRyeSB7XG4gICAgLy8gQ29ubmVjdCB0byBJTUFQIHNlcnZlclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEltYXBDb25uZWN0aW9uKHVzZXJJZCk7XG4gICAgXG4gICAgLy8gMS4gUHJlZmV0Y2ggbWFpbGJveCBsaXN0XG4gICAgY29uc3QgbWFpbGJveGVzID0gYXdhaXQgY2xpZW50Lmxpc3QoKTtcbiAgICBjb25zdCBtYWlsYm94UGF0aHMgPSBtYWlsYm94ZXMubWFwKG1haWxib3ggPT4gbWFpbGJveC5wYXRoKTtcbiAgICBcbiAgICAvLyBDYWNoZSBtYWlsYm94IGxpc3QgaW4gc2Vzc2lvbiBkYXRhXG4gICAgYXdhaXQgY2FjaGVJbWFwU2Vzc2lvbih1c2VySWQsIHtcbiAgICAgIGxhc3RBY3RpdmU6IERhdGUubm93KCksXG4gICAgICBtYWlsYm94ZXM6IG1haWxib3hQYXRoc1xuICAgIH0pO1xuICAgIFxuICAgIGNvbnNvbGUubG9nKGBQcmVmZXRjaGVkICR7bWFpbGJveFBhdGhzLmxlbmd0aH0gZm9sZGVycyBmb3IgdXNlciAke3VzZXJJZH1gKTtcbiAgICBcbiAgICAvLyAyLiBQcmVmZXRjaCBlbWFpbCBsaXN0cyBmb3IgaW1wb3J0YW50IGZvbGRlcnNcbiAgICBjb25zdCBpbXBvcnRhbnRGb2xkZXJzID0gW1xuICAgICAgJ0lOQk9YJyxcbiAgICAgIG1haWxib3hQYXRocy5maW5kKHBhdGggPT4gcGF0aC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdzZW50JykpIHx8ICdTZW50JyxcbiAgICAgIG1haWxib3hQYXRocy5maW5kKHBhdGggPT4gcGF0aC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdkcmFmdCcpKSB8fCAnRHJhZnRzJ1xuICAgIF0uZmlsdGVyKEJvb2xlYW4pO1xuICAgIFxuICAgIC8vIEZldGNoIGZpcnN0IHBhZ2Ugb2YgZWFjaCBpbXBvcnRhbnQgZm9sZGVyXG4gICAgZm9yIChjb25zdCBmb2xkZXIgb2YgaW1wb3J0YW50Rm9sZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS5sb2coYFByZWZldGNoaW5nIGVtYWlscyBmb3IgJHtmb2xkZXJ9YCk7XG4gICAgICAgIGNvbnN0IGVtYWlsTGlzdCA9IGF3YWl0IGdldEVtYWlscyh1c2VySWQsIGZvbGRlciwgMSwgMjApO1xuICAgICAgICBjb25zb2xlLmxvZyhgUHJlZmV0Y2hlZCAke2VtYWlsTGlzdC5lbWFpbHMubGVuZ3RofSBlbWFpbHMgZm9yICR7Zm9sZGVyfWApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgcHJlZmV0Y2hpbmcgZW1haWxzIGZvciBmb2xkZXIgJHtmb2xkZXJ9OmAsIGVycm9yKTtcbiAgICAgICAgLy8gQ29udGludWUgd2l0aCBvdGhlciBmb2xkZXJzIGV2ZW4gaWYgb25lIGZhaWxzXG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIDMuIFByZWZldGNoIGNvbnRlbnQgb2YgcmVjZW50IHVucmVhZCBlbWFpbHMgaW4gSU5CT1hcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IHRoZSBsaXN0IGFnYWluIChpdCdzIGFscmVhZHkgY2FjaGVkIHNvIHRoaXMgd2lsbCBiZSBmYXN0KVxuICAgICAgY29uc3QgaW5ib3hMaXN0ID0gYXdhaXQgZ2V0RW1haWxzKHVzZXJJZCwgJ0lOQk9YJywgMSwgMjApO1xuICAgICAgXG4gICAgICAvLyBQcmVmZXRjaCBjb250ZW50IGZvciB1cCB0byA1IHJlY2VudCB1bnJlYWQgZW1haWxzXG4gICAgICBjb25zdCB1bnJlYWRFbWFpbHMgPSBpbmJveExpc3QuZW1haWxzXG4gICAgICAgIC5maWx0ZXIoZW1haWwgPT4gIWVtYWlsLmZsYWdzLnNlZW4pXG4gICAgICAgIC5zbGljZSgwLCA1KTtcbiAgICAgIFxuICAgICAgaWYgKHVucmVhZEVtYWlscy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBQcmVmZXRjaGluZyBjb250ZW50IGZvciAke3VucmVhZEVtYWlscy5sZW5ndGh9IHVucmVhZCBlbWFpbHNgKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEZldGNoIGNvbnRlbnQgaW4gcGFyYWxsZWwgZm9yIHNwZWVkXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgICB1bnJlYWRFbWFpbHMubWFwKGVtYWlsID0+IFxuICAgICAgICAgICAgZ2V0RW1haWxDb250ZW50KHVzZXJJZCwgZW1haWwuaWQsICdJTkJPWCcpXG4gICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gY29uc29sZS5lcnJvcihgRXJyb3IgcHJlZmV0Y2hpbmcgZW1haWwgJHtlbWFpbC5pZH06YCwgZXJyKSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIFxuICAgICAgICBjb25zb2xlLmxvZyhgQ29tcGxldGVkIHByZWZldGNoaW5nIGNvbnRlbnQgZm9yIHVucmVhZCBlbWFpbHNgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcHJlZmV0Y2hpbmcgdW5yZWFkIGVtYWlsIGNvbnRlbnQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBkdXJhdGlvbiA9IChEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSAvIDEwMDA7XG4gICAgY29uc29sZS5sb2coYEVtYWlsIHByZWZldGNoIGNvbXBsZXRlZCBmb3IgdXNlciAke3VzZXJJZH0gaW4gJHtkdXJhdGlvbi50b0ZpeGVkKDIpfXNgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgZW1haWwgcHJlZmV0Y2g6JywgZXJyb3IpO1xuICB9IGZpbmFsbHkge1xuICAgIG1hcmtQcmVmZXRjaENvbXBsZXRlZCh1c2VySWQpO1xuICB9XG59XG5cbi8qKlxuICogUHJlZmV0Y2ggYSBzcGVjaWZpYyBmb2xkZXIncyBlbWFpbHNcbiAqIFRoaXMgY2FuIGJlIHVzZWQgd2hlbiB0aGUgdXNlciBuYXZpZ2F0ZXMgdG8gYSBmb2xkZXIgdG8gcHJlbG9hZCBtb3JlIHBhZ2VzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVmZXRjaEZvbGRlckVtYWlscyhcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGZvbGRlcjogc3RyaW5nLFxuICBwYWdlczogbnVtYmVyID0gMyxcbiAgc3RhcnRQYWdlOiBudW1iZXIgPSAxLFxuICBhY2NvdW50SWQ/OiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICAvLyBFeHRyYWN0IGFjY291bnQgSUQgZnJvbSBmb2xkZXIgbmFtZSBpZiBwcmVzZW50IGFuZCBub25lIHdhcyBleHBsaWNpdGx5IHByb3ZpZGVkXG4gIGNvbnN0IGZvbGRlckFjY291bnRJZCA9IGZvbGRlci5pbmNsdWRlcygnOicpID8gZm9sZGVyLnNwbGl0KCc6JylbMF0gOiBhY2NvdW50SWQ7XG4gIFxuICAvLyBVc2UgdGhlIG1vc3Qgc3BlY2lmaWMgYWNjb3VudCBJRCBhdmFpbGFibGVcbiAgY29uc3QgZWZmZWN0aXZlQWNjb3VudElkID0gZm9sZGVyQWNjb3VudElkIHx8IGFjY291bnRJZCB8fCAnZGVmYXVsdCc7XG4gIFxuICAvLyBOb3JtYWxpemUgZm9sZGVyIG5hbWUgYnkgcmVtb3ZpbmcgYWNjb3VudCBwcmVmaXggaWYgcHJlc2VudFxuICBjb25zdCBub3JtYWxpemVkRm9sZGVyID0gZm9sZGVyLmluY2x1ZGVzKCc6JykgPyBmb2xkZXIuc3BsaXQoJzonKVsxXSA6IGZvbGRlcjtcbiAgXG4gIGNvbnN0IHByZWZldGNoS2V5ID0gYGZvbGRlcjoke25vcm1hbGl6ZWRGb2xkZXJ9OiR7c3RhcnRQYWdlfToke2VmZmVjdGl2ZUFjY291bnRJZH1gO1xuICBcbiAgLy8gU2tpcCBpZiBhbHJlYWR5IGluIHByb2dyZXNzIG9yIGluIGNvb2xkb3duXG4gIGlmICghc2hvdWxkUHJlZmV0Y2godXNlcklkLCBwcmVmZXRjaEtleSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgXG4gIHRyeSB7XG4gICAgY29uc29sZS5sb2coYFByZWZldGNoaW5nICR7cGFnZXN9IHBhZ2VzIG9mIGVtYWlscyBmb3IgZm9sZGVyICR7bm9ybWFsaXplZEZvbGRlcn0gc3RhcnRpbmcgZnJvbSBwYWdlICR7c3RhcnRQYWdlfSBmb3IgYWNjb3VudCAke2VmZmVjdGl2ZUFjY291bnRJZH1gKTtcbiAgICBcbiAgICAvLyBDYWxjdWxhdGUgdGhlIHJhbmdlIG9mIHBhZ2VzIHRvIHByZWZldGNoXG4gICAgY29uc3QgcGFnZXNUb0ZldGNoID0gQXJyYXkuZnJvbShcbiAgICAgIHsgbGVuZ3RoOiBwYWdlcyB9LCBcbiAgICAgIChfLCBpKSA9PiBzdGFydFBhZ2UgKyBpXG4gICAgKTtcbiAgICBcbiAgICBjb25zb2xlLmxvZyhgV2lsbCBwcmVmZXRjaCBwYWdlczogJHtwYWdlc1RvRmV0Y2guam9pbignLCAnKX1gKTtcbiAgICBcbiAgICAvLyBGZXRjaCBtdWx0aXBsZSBwYWdlcyBpbiBwYXJhbGxlbFxuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIHBhZ2VzVG9GZXRjaC5tYXAocGFnZSA9PlxuICAgICAgICBnZXRFbWFpbHModXNlcklkLCBub3JtYWxpemVkRm9sZGVyLCBwYWdlLCAyMCwgZWZmZWN0aXZlQWNjb3VudElkKVxuICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgU3VjY2Vzc2Z1bGx5IHByZWZldGNoZWQgYW5kIGNhY2hlZCBwYWdlICR7cGFnZX0gb2YgJHtub3JtYWxpemVkRm9sZGVyfSB3aXRoICR7cmVzdWx0LmVtYWlscy5sZW5ndGh9IGVtYWlscyBmb3IgYWNjb3VudCAke2VmZmVjdGl2ZUFjY291bnRJZH1gKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHByZWZldGNoaW5nIHBhZ2UgJHtwYWdlfSBvZiAke25vcm1hbGl6ZWRGb2xkZXJ9IGZvciBhY2NvdW50ICR7ZWZmZWN0aXZlQWNjb3VudElkfTpgLCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICAgIFxuICAgIGNvbnNvbGUubG9nKGBDb21wbGV0ZWQgcHJlZmV0Y2hpbmcgJHtwYWdlc30gcGFnZXMgZm9yICR7bm9ybWFsaXplZEZvbGRlcn0gaW4gYWNjb3VudCAke2VmZmVjdGl2ZUFjY291bnRJZH1gKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGBFcnJvciBkdXJpbmcgZm9sZGVyIHByZWZldGNoOmAsIGVycm9yKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBtYXJrUHJlZmV0Y2hDb21wbGV0ZWQodXNlcklkLCBwcmVmZXRjaEtleSk7XG4gIH1cbn0gIl0sIm5hbWVzIjpbImdldEltYXBDb25uZWN0aW9uIiwiZ2V0RW1haWxzIiwiZ2V0RW1haWxDb250ZW50IiwiY2FjaGVJbWFwU2Vzc2lvbiIsImdldENhY2hlZEVtYWlsTGlzdCIsInByZWZldGNoSW5Qcm9ncmVzcyIsIk1hcCIsImxhc3RQcmVmZXRjaFRpbWUiLCJQUkVGRVRDSF9DT09MRE9XTl9NUyIsInJlY2VudFJlZnJlc2hlcyIsIkNPT0xET1dOX1BFUklPRCIsInNob3VsZFByZWZldGNoIiwidXNlcklkIiwia2V5IiwicHJlZmV0Y2hLZXkiLCJnZXQiLCJjb25zb2xlIiwibG9nIiwibGFzdFRpbWUiLCJub3ciLCJEYXRlIiwiTWF0aCIsInJvdW5kIiwic2V0IiwibWFya1ByZWZldGNoQ29tcGxldGVkIiwiZ2V0Q2FjaGVkRW1haWxzV2l0aFRpbWVvdXQiLCJmb2xkZXIiLCJwYWdlIiwicGVyUGFnZSIsInRpbWVvdXRNcyIsImFjY291bnRJZCIsImVmZmVjdGl2ZUFjY291bnRJZCIsIm5vcm1hbGl6ZWRGb2xkZXIiLCJpbmNsdWRlcyIsInBhcnRzIiwic3BsaXQiLCJmb2xkZXJBY2NvdW50SWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRpbWVvdXRJZCIsInNldFRpbWVvdXQiLCJ0aGVuIiwicmVzdWx0IiwiY2xlYXJUaW1lb3V0IiwiY2F0Y2giLCJlcnIiLCJlcnJvciIsInJlZnJlc2hFbWFpbHNJbkJhY2tncm91bmQiLCJyZWZyZXNoS2V5IiwibGFzdFJlZnJlc2hlZCIsImZsb29yIiwidGltZXN0YW1wIiwiZW50cmllcyIsImRlbGV0ZSIsInByZWZldGNoVXNlckVtYWlsRGF0YSIsInN0YXJ0VGltZSIsImNsaWVudCIsIm1haWxib3hlcyIsImxpc3QiLCJtYWlsYm94UGF0aHMiLCJtYXAiLCJtYWlsYm94IiwicGF0aCIsImxhc3RBY3RpdmUiLCJsZW5ndGgiLCJpbXBvcnRhbnRGb2xkZXJzIiwiZmluZCIsInRvTG93ZXJDYXNlIiwiZmlsdGVyIiwiQm9vbGVhbiIsImVtYWlsTGlzdCIsImVtYWlscyIsImluYm94TGlzdCIsInVucmVhZEVtYWlscyIsImVtYWlsIiwiZmxhZ3MiLCJzZWVuIiwic2xpY2UiLCJhbGxTZXR0bGVkIiwiaWQiLCJkdXJhdGlvbiIsInRvRml4ZWQiLCJwcmVmZXRjaEZvbGRlckVtYWlscyIsInBhZ2VzIiwic3RhcnRQYWdlIiwicGFnZXNUb0ZldGNoIiwiQXJyYXkiLCJmcm9tIiwiXyIsImkiLCJqb2luIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./lib/services/prefetch-service.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(action-browser)/./lib/services/token-refresh.ts":
|
|
/*!***************************************!*\
|
|
!*** ./lib/services/token-refresh.ts ***!
|
|
\***************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ensureFreshToken: () => (/* binding */ ensureFreshToken),\n/* harmony export */ isTokenExpired: () => (/* binding */ isTokenExpired)\n/* harmony export */ });\n/* harmony import */ var _microsoft_oauth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./microsoft-oauth */ \"(action-browser)/./lib/services/microsoft-oauth.ts\");\n/* harmony import */ var _lib_redis__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/lib/redis */ \"(action-browser)/./lib/redis.ts\");\n\n\n/**\n * Check if a token is expired or about to expire (within 5 minutes)\n */ function isTokenExpired(expiryTimestamp) {\n const fiveMinutesInMs = 5 * 60 * 1000;\n return Date.now() + fiveMinutesInMs >= expiryTimestamp;\n}\n/**\n * Refresh an access token if it's expired or about to expire\n */ async function ensureFreshToken(userId, email) {\n try {\n // Use Redis to get the tokens (no database lookup needed)\n console.log(`Checking if token refresh is needed for ${email}`);\n const redis = (0,_lib_redis__WEBPACK_IMPORTED_MODULE_1__.getRedisClient)();\n const key = _lib_redis__WEBPACK_IMPORTED_MODULE_1__.KEYS.CREDENTIALS(userId, email);\n const credStr = await redis.get(key);\n if (!credStr) {\n console.log(`No credentials found in Redis for ${email}`);\n return {\n accessToken: '',\n success: false\n };\n }\n const creds = JSON.parse(credStr);\n // If not OAuth or missing refresh token, return failure\n if (!creds.useOAuth || !creds.refreshToken) {\n console.log(`Account ${email} is not using OAuth or missing refresh token`);\n return {\n accessToken: '',\n success: false\n };\n }\n // If token is still valid, return current token\n if (creds.tokenExpiry && creds.accessToken && creds.tokenExpiry > Date.now() + 5 * 60 * 1000) {\n console.log(`Token for ${email} is still valid, no refresh needed`);\n return {\n accessToken: creds.accessToken,\n success: true\n };\n }\n // Token is expired or about to expire, refresh it\n console.log(`Refreshing token for ${email}`);\n const tokens = await (0,_microsoft_oauth__WEBPACK_IMPORTED_MODULE_0__.refreshAccessToken)(creds.refreshToken);\n // Update Redis cache with new tokens\n creds.accessToken = tokens.access_token;\n if (tokens.refresh_token) {\n creds.refreshToken = tokens.refresh_token;\n }\n creds.tokenExpiry = Date.now() + tokens.expires_in * 1000;\n await redis.set(key, JSON.stringify(creds), 'EX', 86400); // 24 hours\n console.log(`Token for ${email} refreshed and cached in Redis`);\n return {\n accessToken: tokens.access_token,\n success: true\n };\n } catch (error) {\n console.error(`Error refreshing token for ${email}:`, error);\n return {\n accessToken: '',\n success: false\n };\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL2xpYi9zZXJ2aWNlcy90b2tlbi1yZWZyZXNoLnRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBdUQ7QUFDSjtBQUVuRDs7Q0FFQyxHQUNNLFNBQVNHLGVBQWVDLGVBQXVCO0lBQ3BELE1BQU1DLGtCQUFrQixJQUFJLEtBQUs7SUFDakMsT0FBT0MsS0FBS0MsR0FBRyxLQUFLRixtQkFBbUJEO0FBQ3pDO0FBRUE7O0NBRUMsR0FDTSxlQUFlSSxpQkFDcEJDLE1BQWMsRUFDZEMsS0FBYTtJQUViLElBQUk7UUFDRiwwREFBMEQ7UUFDMURDLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLHdDQUF3QyxFQUFFRixPQUFPO1FBQzlELE1BQU1HLFFBQVFaLDBEQUFjQTtRQUM1QixNQUFNYSxNQUFNWiw0Q0FBSUEsQ0FBQ2EsV0FBVyxDQUFDTixRQUFRQztRQUNyQyxNQUFNTSxVQUFVLE1BQU1ILE1BQU1JLEdBQUcsQ0FBQ0g7UUFFaEMsSUFBSSxDQUFDRSxTQUFTO1lBQ1pMLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLGtDQUFrQyxFQUFFRixPQUFPO1lBQ3hELE9BQU87Z0JBQUVRLGFBQWE7Z0JBQUlDLFNBQVM7WUFBTTtRQUMzQztRQUVBLE1BQU1DLFFBQVFDLEtBQUtDLEtBQUssQ0FBQ047UUFFekIsd0RBQXdEO1FBQ3hELElBQUksQ0FBQ0ksTUFBTUcsUUFBUSxJQUFJLENBQUNILE1BQU1JLFlBQVksRUFBRTtZQUMxQ2IsUUFBUUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFRixNQUFNLDRDQUE0QyxDQUFDO1lBQzFFLE9BQU87Z0JBQUVRLGFBQWE7Z0JBQUlDLFNBQVM7WUFBTTtRQUMzQztRQUVBLGdEQUFnRDtRQUNoRCxJQUFJQyxNQUFNSyxXQUFXLElBQUlMLE1BQU1GLFdBQVcsSUFDdENFLE1BQU1LLFdBQVcsR0FBR25CLEtBQUtDLEdBQUcsS0FBSyxJQUFJLEtBQUssTUFBTTtZQUNsREksUUFBUUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFRixNQUFNLGtDQUFrQyxDQUFDO1lBQ2xFLE9BQU87Z0JBQUVRLGFBQWFFLE1BQU1GLFdBQVc7Z0JBQUVDLFNBQVM7WUFBSztRQUN6RDtRQUVBLGtEQUFrRDtRQUNsRFIsUUFBUUMsR0FBRyxDQUFDLENBQUMscUJBQXFCLEVBQUVGLE9BQU87UUFDM0MsTUFBTWdCLFNBQVMsTUFBTTFCLG9FQUFrQkEsQ0FBQ29CLE1BQU1JLFlBQVk7UUFFMUQscUNBQXFDO1FBQ3JDSixNQUFNRixXQUFXLEdBQUdRLE9BQU9DLFlBQVk7UUFDdkMsSUFBSUQsT0FBT0UsYUFBYSxFQUFFO1lBQ3hCUixNQUFNSSxZQUFZLEdBQUdFLE9BQU9FLGFBQWE7UUFDM0M7UUFDQVIsTUFBTUssV0FBVyxHQUFHbkIsS0FBS0MsR0FBRyxLQUFNbUIsT0FBT0csVUFBVSxHQUFHO1FBRXRELE1BQU1oQixNQUFNaUIsR0FBRyxDQUFDaEIsS0FBS08sS0FBS1UsU0FBUyxDQUFDWCxRQUFRLE1BQU0sUUFBUSxXQUFXO1FBQ3JFVCxRQUFRQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUVGLE1BQU0sOEJBQThCLENBQUM7UUFFOUQsT0FBTztZQUFFUSxhQUFhUSxPQUFPQyxZQUFZO1lBQUVSLFNBQVM7UUFBSztJQUMzRCxFQUFFLE9BQU9hLE9BQU87UUFDZHJCLFFBQVFxQixLQUFLLENBQUMsQ0FBQywyQkFBMkIsRUFBRXRCLE1BQU0sQ0FBQyxDQUFDLEVBQUVzQjtRQUN0RCxPQUFPO1lBQUVkLGFBQWE7WUFBSUMsU0FBUztRQUFNO0lBQzNDO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbGliL3NlcnZpY2VzL3Rva2VuLXJlZnJlc2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVmcmVzaEFjY2Vzc1Rva2VuIH0gZnJvbSAnLi9taWNyb3NvZnQtb2F1dGgnO1xuaW1wb3J0IHsgZ2V0UmVkaXNDbGllbnQsIEtFWVMgfSBmcm9tICdAL2xpYi9yZWRpcyc7XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB0b2tlbiBpcyBleHBpcmVkIG9yIGFib3V0IHRvIGV4cGlyZSAod2l0aGluIDUgbWludXRlcylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVG9rZW5FeHBpcmVkKGV4cGlyeVRpbWVzdGFtcDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IGZpdmVNaW51dGVzSW5NcyA9IDUgKiA2MCAqIDEwMDA7XG4gIHJldHVybiBEYXRlLm5vdygpICsgZml2ZU1pbnV0ZXNJbk1zID49IGV4cGlyeVRpbWVzdGFtcDtcbn1cblxuLyoqXG4gKiBSZWZyZXNoIGFuIGFjY2VzcyB0b2tlbiBpZiBpdCdzIGV4cGlyZWQgb3IgYWJvdXQgdG8gZXhwaXJlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVGcmVzaFRva2VuKFxuICB1c2VySWQ6IHN0cmluZyxcbiAgZW1haWw6IHN0cmluZ1xuKTogUHJvbWlzZTx7IGFjY2Vzc1Rva2VuOiBzdHJpbmc7IHN1Y2Nlc3M6IGJvb2xlYW4gfT4ge1xuICB0cnkge1xuICAgIC8vIFVzZSBSZWRpcyB0byBnZXQgdGhlIHRva2VucyAobm8gZGF0YWJhc2UgbG9va3VwIG5lZWRlZClcbiAgICBjb25zb2xlLmxvZyhgQ2hlY2tpbmcgaWYgdG9rZW4gcmVmcmVzaCBpcyBuZWVkZWQgZm9yICR7ZW1haWx9YCk7XG4gICAgY29uc3QgcmVkaXMgPSBnZXRSZWRpc0NsaWVudCgpO1xuICAgIGNvbnN0IGtleSA9IEtFWVMuQ1JFREVOVElBTFModXNlcklkLCBlbWFpbCk7XG4gICAgY29uc3QgY3JlZFN0ciA9IGF3YWl0IHJlZGlzLmdldChrZXkpO1xuICAgIFxuICAgIGlmICghY3JlZFN0cikge1xuICAgICAgY29uc29sZS5sb2coYE5vIGNyZWRlbnRpYWxzIGZvdW5kIGluIFJlZGlzIGZvciAke2VtYWlsfWApO1xuICAgICAgcmV0dXJuIHsgYWNjZXNzVG9rZW46ICcnLCBzdWNjZXNzOiBmYWxzZSB9O1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBjcmVkcyA9IEpTT04ucGFyc2UoY3JlZFN0cik7XG4gICAgXG4gICAgLy8gSWYgbm90IE9BdXRoIG9yIG1pc3NpbmcgcmVmcmVzaCB0b2tlbiwgcmV0dXJuIGZhaWx1cmVcbiAgICBpZiAoIWNyZWRzLnVzZU9BdXRoIHx8ICFjcmVkcy5yZWZyZXNoVG9rZW4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGBBY2NvdW50ICR7ZW1haWx9IGlzIG5vdCB1c2luZyBPQXV0aCBvciBtaXNzaW5nIHJlZnJlc2ggdG9rZW5gKTtcbiAgICAgIHJldHVybiB7IGFjY2Vzc1Rva2VuOiAnJywgc3VjY2VzczogZmFsc2UgfTtcbiAgICB9XG5cbiAgICAvLyBJZiB0b2tlbiBpcyBzdGlsbCB2YWxpZCwgcmV0dXJuIGN1cnJlbnQgdG9rZW5cbiAgICBpZiAoY3JlZHMudG9rZW5FeHBpcnkgJiYgY3JlZHMuYWNjZXNzVG9rZW4gJiYgXG4gICAgICAgIGNyZWRzLnRva2VuRXhwaXJ5ID4gRGF0ZS5ub3coKSArIDUgKiA2MCAqIDEwMDApIHtcbiAgICAgIGNvbnNvbGUubG9nKGBUb2tlbiBmb3IgJHtlbWFpbH0gaXMgc3RpbGwgdmFsaWQsIG5vIHJlZnJlc2ggbmVlZGVkYCk7XG4gICAgICByZXR1cm4geyBhY2Nlc3NUb2tlbjogY3JlZHMuYWNjZXNzVG9rZW4sIHN1Y2Nlc3M6IHRydWUgfTtcbiAgICB9XG5cbiAgICAvLyBUb2tlbiBpcyBleHBpcmVkIG9yIGFib3V0IHRvIGV4cGlyZSwgcmVmcmVzaCBpdFxuICAgIGNvbnNvbGUubG9nKGBSZWZyZXNoaW5nIHRva2VuIGZvciAke2VtYWlsfWApO1xuICAgIGNvbnN0IHRva2VucyA9IGF3YWl0IHJlZnJlc2hBY2Nlc3NUb2tlbihjcmVkcy5yZWZyZXNoVG9rZW4pO1xuICAgIFxuICAgIC8vIFVwZGF0ZSBSZWRpcyBjYWNoZSB3aXRoIG5ldyB0b2tlbnNcbiAgICBjcmVkcy5hY2Nlc3NUb2tlbiA9IHRva2Vucy5hY2Nlc3NfdG9rZW47XG4gICAgaWYgKHRva2Vucy5yZWZyZXNoX3Rva2VuKSB7XG4gICAgICBjcmVkcy5yZWZyZXNoVG9rZW4gPSB0b2tlbnMucmVmcmVzaF90b2tlbjtcbiAgICB9XG4gICAgY3JlZHMudG9rZW5FeHBpcnkgPSBEYXRlLm5vdygpICsgKHRva2Vucy5leHBpcmVzX2luICogMTAwMCk7XG4gICAgXG4gICAgYXdhaXQgcmVkaXMuc2V0KGtleSwgSlNPTi5zdHJpbmdpZnkoY3JlZHMpLCAnRVgnLCA4NjQwMCk7IC8vIDI0IGhvdXJzXG4gICAgY29uc29sZS5sb2coYFRva2VuIGZvciAke2VtYWlsfSByZWZyZXNoZWQgYW5kIGNhY2hlZCBpbiBSZWRpc2ApO1xuXG4gICAgcmV0dXJuIHsgYWNjZXNzVG9rZW46IHRva2Vucy5hY2Nlc3NfdG9rZW4sIHN1Y2Nlc3M6IHRydWUgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGBFcnJvciByZWZyZXNoaW5nIHRva2VuIGZvciAke2VtYWlsfTpgLCBlcnJvcik7XG4gICAgcmV0dXJuIHsgYWNjZXNzVG9rZW46ICcnLCBzdWNjZXNzOiBmYWxzZSB9O1xuICB9XG59ICJdLCJuYW1lcyI6WyJyZWZyZXNoQWNjZXNzVG9rZW4iLCJnZXRSZWRpc0NsaWVudCIsIktFWVMiLCJpc1Rva2VuRXhwaXJlZCIsImV4cGlyeVRpbWVzdGFtcCIsImZpdmVNaW51dGVzSW5NcyIsIkRhdGUiLCJub3ciLCJlbnN1cmVGcmVzaFRva2VuIiwidXNlcklkIiwiZW1haWwiLCJjb25zb2xlIiwibG9nIiwicmVkaXMiLCJrZXkiLCJDUkVERU5USUFMUyIsImNyZWRTdHIiLCJnZXQiLCJhY2Nlc3NUb2tlbiIsInN1Y2Nlc3MiLCJjcmVkcyIsIkpTT04iLCJwYXJzZSIsInVzZU9BdXRoIiwicmVmcmVzaFRva2VuIiwidG9rZW5FeHBpcnkiLCJ0b2tlbnMiLCJhY2Nlc3NfdG9rZW4iLCJyZWZyZXNoX3Rva2VuIiwiZXhwaXJlc19pbiIsInNldCIsInN0cmluZ2lmeSIsImVycm9yIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./lib/services/token-refresh.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(action-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-action-entry-loader.js?actions=%5B%5B%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Flib%2Fservices%2Fprefetch-service.ts%22%2C%5B%7B%22id%22%3A%2240b6acbd16ee963a18ba6de32b5c63b379909103e9%22%2C%22exportedName%22%3A%22prefetchUserEmailData%22%7D%2C%7B%22id%22%3A%227cf3883d51675d568256e1b2498cf8fe78875b65ee%22%2C%22exportedName%22%3A%22refreshEmailsInBackground%22%7D%2C%7B%22id%22%3A%227cfa4fcce0a70a3d3b703a31abefda0e79d9e1097a%22%2C%22exportedName%22%3A%22prefetchFolderEmails%22%7D%2C%7B%22id%22%3A%227e95e703e87cb496134c69dc010f054d10451a2f57%22%2C%22exportedName%22%3A%22getCachedEmailsWithTimeout%22%7D%5D%5D%5D&__client_imported__=true!":
|
|
/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
|
|
!*** ./node_modules/next/dist/build/webpack/loaders/next-flight-action-entry-loader.js?actions=%5B%5B%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Flib%2Fservices%2Fprefetch-service.ts%22%2C%5B%7B%22id%22%3A%2240b6acbd16ee963a18ba6de32b5c63b379909103e9%22%2C%22exportedName%22%3A%22prefetchUserEmailData%22%7D%2C%7B%22id%22%3A%227cf3883d51675d568256e1b2498cf8fe78875b65ee%22%2C%22exportedName%22%3A%22refreshEmailsInBackground%22%7D%2C%7B%22id%22%3A%227cfa4fcce0a70a3d3b703a31abefda0e79d9e1097a%22%2C%22exportedName%22%3A%22prefetchFolderEmails%22%7D%2C%7B%22id%22%3A%227e95e703e87cb496134c69dc010f054d10451a2f57%22%2C%22exportedName%22%3A%22getCachedEmailsWithTimeout%22%7D%5D%5D%5D&__client_imported__=true! ***!
|
|
\***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"40b6acbd16ee963a18ba6de32b5c63b379909103e9\": () => (/* reexport safe */ _home_alma_nextgen_Neah_mail_lib_services_prefetch_service_ts__WEBPACK_IMPORTED_MODULE_0__.prefetchUserEmailData),\n/* harmony export */ \"7cf3883d51675d568256e1b2498cf8fe78875b65ee\": () => (/* reexport safe */ _home_alma_nextgen_Neah_mail_lib_services_prefetch_service_ts__WEBPACK_IMPORTED_MODULE_0__.refreshEmailsInBackground),\n/* harmony export */ \"7cfa4fcce0a70a3d3b703a31abefda0e79d9e1097a\": () => (/* reexport safe */ _home_alma_nextgen_Neah_mail_lib_services_prefetch_service_ts__WEBPACK_IMPORTED_MODULE_0__.prefetchFolderEmails),\n/* harmony export */ \"7e95e703e87cb496134c69dc010f054d10451a2f57\": () => (/* reexport safe */ _home_alma_nextgen_Neah_mail_lib_services_prefetch_service_ts__WEBPACK_IMPORTED_MODULE_0__.getCachedEmailsWithTimeout)\n/* harmony export */ });\n/* harmony import */ var _home_alma_nextgen_Neah_mail_lib_services_prefetch_service_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/services/prefetch-service.ts */ \"(action-browser)/./lib/services/prefetch-service.ts\");\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtZmxpZ2h0LWFjdGlvbi1lbnRyeS1sb2FkZXIuanM/YWN0aW9ucz0lNUIlNUIlMjIlMkZob21lJTJGYWxtYSUyRm5leHRnZW4lMkZOZWFoLW1haWwlMkZsaWIlMkZzZXJ2aWNlcyUyRnByZWZldGNoLXNlcnZpY2UudHMlMjIlMkMlNUIlN0IlMjJpZCUyMiUzQSUyMjQwYjZhY2JkMTZlZTk2M2ExOGJhNmRlMzJiNWM2M2IzNzk5MDkxMDNlOSUyMiUyQyUyMmV4cG9ydGVkTmFtZSUyMiUzQSUyMnByZWZldGNoVXNlckVtYWlsRGF0YSUyMiU3RCUyQyU3QiUyMmlkJTIyJTNBJTIyN2NmMzg4M2Q1MTY3NWQ1NjgyNTZlMWIyNDk4Y2Y4ZmU3ODg3NWI2NWVlJTIyJTJDJTIyZXhwb3J0ZWROYW1lJTIyJTNBJTIycmVmcmVzaEVtYWlsc0luQmFja2dyb3VuZCUyMiU3RCUyQyU3QiUyMmlkJTIyJTNBJTIyN2NmYTRmY2NlMGE3MGEzZDNiNzAzYTMxYWJlZmRhMGU3OWQ5ZTEwOTdhJTIyJTJDJTIyZXhwb3J0ZWROYW1lJTIyJTNBJTIycHJlZmV0Y2hGb2xkZXJFbWFpbHMlMjIlN0QlMkMlN0IlMjJpZCUyMiUzQSUyMjdlOTVlNzAzZTg3Y2I0OTYxMzRjNjlkYzAxMGYwNTRkMTA0NTFhMmY1NyUyMiUyQyUyMmV4cG9ydGVkTmFtZSUyMiUzQSUyMmdldENhY2hlZEVtYWlsc1dpdGhUaW1lb3V0JTIyJTdEJTVEJTVEJTVEJl9fY2xpZW50X2ltcG9ydGVkX189dHJ1ZSEiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ3FKO0FBQ0k7QUFDTDtBQUNNIiwic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiXG5leHBvcnQgeyBwcmVmZXRjaFVzZXJFbWFpbERhdGEgYXMgXCI0MGI2YWNiZDE2ZWU5NjNhMThiYTZkZTMyYjVjNjNiMzc5OTA5MTAzZTlcIiB9IGZyb20gXCIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2xpYi9zZXJ2aWNlcy9wcmVmZXRjaC1zZXJ2aWNlLnRzXCJcbmV4cG9ydCB7IHJlZnJlc2hFbWFpbHNJbkJhY2tncm91bmQgYXMgXCI3Y2YzODgzZDUxNjc1ZDU2ODI1NmUxYjI0OThjZjhmZTc4ODc1YjY1ZWVcIiB9IGZyb20gXCIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2xpYi9zZXJ2aWNlcy9wcmVmZXRjaC1zZXJ2aWNlLnRzXCJcbmV4cG9ydCB7IHByZWZldGNoRm9sZGVyRW1haWxzIGFzIFwiN2NmYTRmY2NlMGE3MGEzZDNiNzAzYTMxYWJlZmRhMGU3OWQ5ZTEwOTdhXCIgfSBmcm9tIFwiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9saWIvc2VydmljZXMvcHJlZmV0Y2gtc2VydmljZS50c1wiXG5leHBvcnQgeyBnZXRDYWNoZWRFbWFpbHNXaXRoVGltZW91dCBhcyBcIjdlOTVlNzAzZTg3Y2I0OTYxMzRjNjlkYzAxMGYwNTRkMTA0NTFhMmY1N1wiIH0gZnJvbSBcIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbGliL3NlcnZpY2VzL3ByZWZldGNoLXNlcnZpY2UudHNcIlxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-action-entry-loader.js?actions=%5B%5B%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Flib%2Fservices%2Fprefetch-service.ts%22%2C%5B%7B%22id%22%3A%2240b6acbd16ee963a18ba6de32b5c63b379909103e9%22%2C%22exportedName%22%3A%22prefetchUserEmailData%22%7D%2C%7B%22id%22%3A%227cf3883d51675d568256e1b2498cf8fe78875b65ee%22%2C%22exportedName%22%3A%22refreshEmailsInBackground%22%7D%2C%7B%22id%22%3A%227cfa4fcce0a70a3d3b703a31abefda0e79d9e1097a%22%2C%22exportedName%22%3A%22prefetchFolderEmails%22%7D%2C%7B%22id%22%3A%227e95e703e87cb496134c69dc010f054d10451a2f57%22%2C%22exportedName%22%3A%22getCachedEmailsWithTimeout%22%7D%5D%5D%5D&__client_imported__=true!\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(rsc)/./app/api/auth/[...nextauth]/route.ts":
|
|
/*!*********************************************!*\
|
|
!*** ./app/api/auth/[...nextauth]/route.ts ***!
|
|
\*********************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GET: () => (/* binding */ handler),\n/* harmony export */ POST: () => (/* binding */ handler),\n/* harmony export */ authOptions: () => (/* binding */ authOptions)\n/* harmony export */ });\n/* harmony import */ var next_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next-auth */ \"(rsc)/./node_modules/next-auth/index.js\");\n/* harmony import */ var next_auth__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_auth__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_auth_providers_keycloak__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next-auth/providers/keycloak */ \"(rsc)/./node_modules/next-auth/providers/keycloak.js\");\n/* harmony import */ var jwt_decode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jwt-decode */ \"(rsc)/./node_modules/jwt-decode/build/esm/index.js\");\n\n\n\nfunction getRequiredEnvVar(name) {\n const value = process.env[name];\n if (!value) {\n throw new Error(`Missing required environment variable: ${name}`);\n }\n return value;\n}\nasync function refreshAccessToken(token) {\n try {\n const response = await fetch(`${process.env.KEYCLOAK_ISSUER}/protocol/openid-connect/token`, {\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n },\n body: new URLSearchParams({\n client_id: process.env.KEYCLOAK_CLIENT_ID,\n client_secret: process.env.KEYCLOAK_CLIENT_SECRET,\n grant_type: \"refresh_token\",\n refresh_token: token.refreshToken\n }),\n method: \"POST\"\n });\n const refreshedTokens = await response.json();\n if (!response.ok) {\n throw refreshedTokens;\n }\n return {\n ...token,\n accessToken: refreshedTokens.access_token,\n refreshToken: refreshedTokens.refresh_token ?? token.refreshToken,\n accessTokenExpires: Date.now() + refreshedTokens.expires_in * 1000\n };\n } catch (error) {\n console.error(\"Error refreshing access token:\", error);\n return {\n ...token,\n error: \"RefreshAccessTokenError\"\n };\n }\n}\nconst authOptions = {\n providers: [\n (0,next_auth_providers_keycloak__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n clientId: getRequiredEnvVar(\"KEYCLOAK_CLIENT_ID\"),\n clientSecret: getRequiredEnvVar(\"KEYCLOAK_CLIENT_SECRET\"),\n issuer: getRequiredEnvVar(\"KEYCLOAK_ISSUER\"),\n authorization: {\n params: {\n scope: \"openid profile email roles\"\n }\n },\n profile (profile) {\n console.log('Keycloak profile callback:', {\n rawProfile: profile,\n rawRoles: profile.roles,\n realmAccess: profile.realm_access,\n groups: profile.groups\n });\n // Get roles from realm_access\n const roles = profile.realm_access?.roles || [];\n console.log('Profile callback raw roles:', roles);\n // Clean up roles by removing ROLE_ prefix and converting to lowercase\n const cleanRoles = roles.map((role)=>role.replace(/^ROLE_/, '').toLowerCase());\n console.log('Profile callback cleaned roles:', cleanRoles);\n return {\n id: profile.sub,\n name: profile.name ?? profile.preferred_username,\n email: profile.email,\n first_name: profile.given_name ?? '',\n last_name: profile.family_name ?? '',\n username: profile.preferred_username ?? profile.email?.split('@')[0] ?? '',\n role: cleanRoles\n };\n }\n })\n ],\n session: {\n strategy: \"jwt\",\n maxAge: 30 * 24 * 60 * 60\n },\n callbacks: {\n async jwt ({ token, account, profile }) {\n if (account && profile) {\n const keycloakProfile = profile;\n const roles = keycloakProfile.realm_access?.roles || [];\n const cleanRoles = roles.map((role)=>role.replace(/^ROLE_/, '').toLowerCase());\n token.accessToken = account.access_token ?? '';\n token.refreshToken = account.refresh_token ?? '';\n token.accessTokenExpires = account.expires_at ?? 0;\n token.sub = keycloakProfile.sub;\n token.role = cleanRoles;\n token.username = keycloakProfile.preferred_username ?? '';\n token.first_name = keycloakProfile.given_name ?? '';\n token.last_name = keycloakProfile.family_name ?? '';\n } else if (token.accessToken) {\n try {\n const decoded = (0,jwt_decode__WEBPACK_IMPORTED_MODULE_2__.jwtDecode)(token.accessToken);\n if (decoded.realm_access?.roles) {\n const roles = decoded.realm_access.roles;\n const cleanRoles = roles.map((role)=>role.replace(/^ROLE_/, '').toLowerCase());\n token.role = cleanRoles;\n }\n } catch (error) {\n console.error('Error decoding token:', error);\n }\n }\n if (Date.now() < token.accessTokenExpires * 1000) {\n return token;\n }\n return refreshAccessToken(token);\n },\n async session ({ session, token }) {\n if (token.error) {\n throw new Error(token.error);\n }\n const userRoles = Array.isArray(token.role) ? token.role : [];\n session.user = {\n id: token.sub ?? '',\n email: token.email ?? null,\n name: token.name ?? null,\n image: null,\n username: token.username ?? '',\n first_name: token.first_name ?? '',\n last_name: token.last_name ?? '',\n role: userRoles,\n nextcloudInitialized: false\n };\n session.accessToken = token.accessToken;\n return session;\n }\n },\n pages: {\n signIn: '/signin',\n error: '/signin'\n },\n debug: \"development\" === 'development'\n};\nconst handler = next_auth__WEBPACK_IMPORTED_MODULE_0___default()(authOptions);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvYXBpL2F1dGgvWy4uLm5leHRhdXRoXS9yb3V0ZS50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQXNEO0FBQ007QUFDckI7QUFxRHZDLFNBQVNHLGtCQUFrQkMsSUFBWTtJQUNyQyxNQUFNQyxRQUFRQyxRQUFRQyxHQUFHLENBQUNILEtBQUs7SUFDL0IsSUFBSSxDQUFDQyxPQUFPO1FBQ1YsTUFBTSxJQUFJRyxNQUFNLENBQUMsdUNBQXVDLEVBQUVKLE1BQU07SUFDbEU7SUFDQSxPQUFPQztBQUNUO0FBRUEsZUFBZUksbUJBQW1CQyxLQUFVO0lBQzFDLElBQUk7UUFDRixNQUFNQyxXQUFXLE1BQU1DLE1BQU0sR0FBR04sUUFBUUMsR0FBRyxDQUFDTSxlQUFlLENBQUMsOEJBQThCLENBQUMsRUFBRTtZQUMzRkMsU0FBUztnQkFBRSxnQkFBZ0I7WUFBb0M7WUFDL0RDLE1BQU0sSUFBSUMsZ0JBQWdCO2dCQUN4QkMsV0FBV1gsUUFBUUMsR0FBRyxDQUFDVyxrQkFBa0I7Z0JBQ3pDQyxlQUFlYixRQUFRQyxHQUFHLENBQUNhLHNCQUFzQjtnQkFDakRDLFlBQVk7Z0JBQ1pDLGVBQWVaLE1BQU1hLFlBQVk7WUFDbkM7WUFDQUMsUUFBUTtRQUNWO1FBRUEsTUFBTUMsa0JBQWtCLE1BQU1kLFNBQVNlLElBQUk7UUFFM0MsSUFBSSxDQUFDZixTQUFTZ0IsRUFBRSxFQUFFO1lBQ2hCLE1BQU1GO1FBQ1I7UUFFQSxPQUFPO1lBQ0wsR0FBR2YsS0FBSztZQUNSa0IsYUFBYUgsZ0JBQWdCSSxZQUFZO1lBQ3pDTixjQUFjRSxnQkFBZ0JILGFBQWEsSUFBSVosTUFBTWEsWUFBWTtZQUNqRU8sb0JBQW9CQyxLQUFLQyxHQUFHLEtBQUtQLGdCQUFnQlEsVUFBVSxHQUFHO1FBQ2hFO0lBQ0YsRUFBRSxPQUFPQyxPQUFPO1FBQ2RDLFFBQVFELEtBQUssQ0FBQyxrQ0FBa0NBO1FBQ2hELE9BQU87WUFDTCxHQUFHeEIsS0FBSztZQUNSd0IsT0FBTztRQUNUO0lBQ0Y7QUFDRjtBQUVPLE1BQU1FLGNBQStCO0lBQzFDQyxXQUFXO1FBQ1RwQyx3RUFBZ0JBLENBQUM7WUFDZnFDLFVBQVVuQyxrQkFBa0I7WUFDNUJvQyxjQUFjcEMsa0JBQWtCO1lBQ2hDcUMsUUFBUXJDLGtCQUFrQjtZQUMxQnNDLGVBQWU7Z0JBQ2JDLFFBQVE7b0JBQ05DLE9BQU87Z0JBQ1Q7WUFDRjtZQUNBQyxTQUFRQSxPQUFPO2dCQUNiVCxRQUFRVSxHQUFHLENBQUMsOEJBQThCO29CQUN4Q0MsWUFBWUY7b0JBQ1pHLFVBQVVILFFBQVFJLEtBQUs7b0JBQ3ZCQyxhQUFhTCxRQUFRTSxZQUFZO29CQUNqQ0MsUUFBUVAsUUFBUU8sTUFBTTtnQkFDeEI7Z0JBRUEsOEJBQThCO2dCQUM5QixNQUFNSCxRQUFRSixRQUFRTSxZQUFZLEVBQUVGLFNBQVMsRUFBRTtnQkFDL0NiLFFBQVFVLEdBQUcsQ0FBQywrQkFBK0JHO2dCQUUzQyxzRUFBc0U7Z0JBQ3RFLE1BQU1JLGFBQWFKLE1BQU1LLEdBQUcsQ0FBQyxDQUFDQyxPQUM1QkEsS0FBS0MsT0FBTyxDQUFDLFVBQVUsSUFBSUMsV0FBVztnQkFHeENyQixRQUFRVSxHQUFHLENBQUMsbUNBQW1DTztnQkFFL0MsT0FBTztvQkFDTEssSUFBSWIsUUFBUWMsR0FBRztvQkFDZnRELE1BQU13QyxRQUFReEMsSUFBSSxJQUFJd0MsUUFBUWUsa0JBQWtCO29CQUNoREMsT0FBT2hCLFFBQVFnQixLQUFLO29CQUNwQkMsWUFBWWpCLFFBQVFrQixVQUFVLElBQUk7b0JBQ2xDQyxXQUFXbkIsUUFBUW9CLFdBQVcsSUFBSTtvQkFDbENDLFVBQVVyQixRQUFRZSxrQkFBa0IsSUFBSWYsUUFBUWdCLEtBQUssRUFBRU0sTUFBTSxJQUFJLENBQUMsRUFBRSxJQUFJO29CQUN4RVosTUFBTUY7Z0JBQ1I7WUFDRjtRQUNGO0tBQ0Q7SUFDRGUsU0FBUztRQUNQQyxVQUFVO1FBQ1ZDLFFBQVEsS0FBSyxLQUFLLEtBQUs7SUFDekI7SUFDQUMsV0FBVztRQUNULE1BQU1DLEtBQUksRUFBRTdELEtBQUssRUFBRThELE9BQU8sRUFBRTVCLE9BQU8sRUFBRTtZQUNuQyxJQUFJNEIsV0FBVzVCLFNBQVM7Z0JBQ3RCLE1BQU02QixrQkFBa0I3QjtnQkFDeEIsTUFBTUksUUFBUXlCLGdCQUFnQnZCLFlBQVksRUFBRUYsU0FBUyxFQUFFO2dCQUN2RCxNQUFNSSxhQUFhSixNQUFNSyxHQUFHLENBQUMsQ0FBQ0MsT0FDNUJBLEtBQUtDLE9BQU8sQ0FBQyxVQUFVLElBQUlDLFdBQVc7Z0JBR3hDOUMsTUFBTWtCLFdBQVcsR0FBRzRDLFFBQVEzQyxZQUFZLElBQUk7Z0JBQzVDbkIsTUFBTWEsWUFBWSxHQUFHaUQsUUFBUWxELGFBQWEsSUFBSTtnQkFDOUNaLE1BQU1vQixrQkFBa0IsR0FBRzBDLFFBQVFFLFVBQVUsSUFBSTtnQkFDakRoRSxNQUFNZ0QsR0FBRyxHQUFHZSxnQkFBZ0JmLEdBQUc7Z0JBQy9CaEQsTUFBTTRDLElBQUksR0FBR0Y7Z0JBQ2IxQyxNQUFNdUQsUUFBUSxHQUFHUSxnQkFBZ0JkLGtCQUFrQixJQUFJO2dCQUN2RGpELE1BQU1tRCxVQUFVLEdBQUdZLGdCQUFnQlgsVUFBVSxJQUFJO2dCQUNqRHBELE1BQU1xRCxTQUFTLEdBQUdVLGdCQUFnQlQsV0FBVyxJQUFJO1lBQ25ELE9BQU8sSUFBSXRELE1BQU1rQixXQUFXLEVBQUU7Z0JBQzVCLElBQUk7b0JBQ0YsTUFBTStDLFVBQVV6RSxxREFBU0EsQ0FBZVEsTUFBTWtCLFdBQVc7b0JBQ3pELElBQUkrQyxRQUFRekIsWUFBWSxFQUFFRixPQUFPO3dCQUMvQixNQUFNQSxRQUFRMkIsUUFBUXpCLFlBQVksQ0FBQ0YsS0FBSzt3QkFDeEMsTUFBTUksYUFBYUosTUFBTUssR0FBRyxDQUFDLENBQUNDLE9BQzVCQSxLQUFLQyxPQUFPLENBQUMsVUFBVSxJQUFJQyxXQUFXO3dCQUV4QzlDLE1BQU00QyxJQUFJLEdBQUdGO29CQUNmO2dCQUNGLEVBQUUsT0FBT2xCLE9BQU87b0JBQ2RDLFFBQVFELEtBQUssQ0FBQyx5QkFBeUJBO2dCQUN6QztZQUNGO1lBRUEsSUFBSUgsS0FBS0MsR0FBRyxLQUFLLE1BQU9GLGtCQUFrQixHQUFjLE1BQU07Z0JBQzVELE9BQU9wQjtZQUNUO1lBRUEsT0FBT0QsbUJBQW1CQztRQUM1QjtRQUNBLE1BQU15RCxTQUFRLEVBQUVBLE9BQU8sRUFBRXpELEtBQUssRUFBRTtZQUM5QixJQUFJQSxNQUFNd0IsS0FBSyxFQUFFO2dCQUNmLE1BQU0sSUFBSTFCLE1BQU1FLE1BQU13QixLQUFLO1lBQzdCO1lBRUEsTUFBTTBDLFlBQVlDLE1BQU1DLE9BQU8sQ0FBQ3BFLE1BQU00QyxJQUFJLElBQUk1QyxNQUFNNEMsSUFBSSxHQUFHLEVBQUU7WUFDN0RhLFFBQVFZLElBQUksR0FBRztnQkFDYnRCLElBQUkvQyxNQUFNZ0QsR0FBRyxJQUFJO2dCQUNqQkUsT0FBT2xELE1BQU1rRCxLQUFLLElBQUk7Z0JBQ3RCeEQsTUFBTU0sTUFBTU4sSUFBSSxJQUFJO2dCQUNwQjRFLE9BQU87Z0JBQ1BmLFVBQVV2RCxNQUFNdUQsUUFBUSxJQUFJO2dCQUM1QkosWUFBWW5ELE1BQU1tRCxVQUFVLElBQUk7Z0JBQ2hDRSxXQUFXckQsTUFBTXFELFNBQVMsSUFBSTtnQkFDOUJULE1BQU1zQjtnQkFDTkssc0JBQXNCO1lBQ3hCO1lBQ0FkLFFBQVF2QyxXQUFXLEdBQUdsQixNQUFNa0IsV0FBVztZQUV2QyxPQUFPdUM7UUFDVDtJQUNGO0lBQ0FlLE9BQU87UUFDTEMsUUFBUTtRQUNSakQsT0FBTztJQUNUO0lBQ0FrRCxPQUFPOUUsa0JBQXlCO0FBQ2xDLEVBQUU7QUFFRixNQUFNK0UsVUFBVXJGLGdEQUFRQSxDQUFDb0M7QUFDa0IiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvYXBwL2FwaS9hdXRoL1suLi5uZXh0YXV0aF0vcm91dGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE5leHRBdXRoLCB7IE5leHRBdXRoT3B0aW9ucyB9IGZyb20gXCJuZXh0LWF1dGhcIjtcbmltcG9ydCBLZXljbG9ha1Byb3ZpZGVyIGZyb20gXCJuZXh0LWF1dGgvcHJvdmlkZXJzL2tleWNsb2FrXCI7XG5pbXBvcnQgeyBqd3REZWNvZGUgfSBmcm9tIFwiand0LWRlY29kZVwiO1xuXG5pbnRlcmZhY2UgS2V5Y2xvYWtQcm9maWxlIHtcbiAgc3ViOiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICByb2xlcz86IHN0cmluZ1tdO1xuICBwcmVmZXJyZWRfdXNlcm5hbWU/OiBzdHJpbmc7XG4gIGdpdmVuX25hbWU/OiBzdHJpbmc7XG4gIGZhbWlseV9uYW1lPzogc3RyaW5nO1xuICByZWFsbV9hY2Nlc3M/OiB7XG4gICAgcm9sZXM6IHN0cmluZ1tdO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgRGVjb2RlZFRva2VuIHtcbiAgcmVhbG1fYWNjZXNzPzoge1xuICAgIHJvbGVzOiBzdHJpbmdbXTtcbiAgfTtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5kZWNsYXJlIG1vZHVsZSBcIm5leHQtYXV0aFwiIHtcbiAgaW50ZXJmYWNlIFNlc3Npb24ge1xuICAgIHVzZXI6IHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICBuYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGVtYWlsPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGltYWdlPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gICAgICBmaXJzdF9uYW1lOiBzdHJpbmc7XG4gICAgICBsYXN0X25hbWU6IHN0cmluZztcbiAgICAgIHJvbGU6IHN0cmluZ1tdO1xuICAgICAgbmV4dGNsb3VkSW5pdGlhbGl6ZWQ/OiBib29sZWFuO1xuICAgIH07XG4gICAgYWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gIH1cblxuICBpbnRlcmZhY2UgSldUIHtcbiAgICBzdWI/OiBzdHJpbmc7XG4gICAgYWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gICAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICAgIGFjY2Vzc1Rva2VuRXhwaXJlcz86IG51bWJlcjtcbiAgICByb2xlPzogc3RyaW5nW107XG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgZmlyc3RfbmFtZT86IHN0cmluZztcbiAgICBsYXN0X25hbWU/OiBzdHJpbmc7XG4gICAgZXJyb3I/OiBzdHJpbmc7XG4gICAgZW1haWw/OiBzdHJpbmcgfCBudWxsO1xuICAgIG5hbWU/OiBzdHJpbmcgfCBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFJlcXVpcmVkRW52VmFyKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnZbbmFtZV07XG4gIGlmICghdmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgcmVxdWlyZWQgZW52aXJvbm1lbnQgdmFyaWFibGU6ICR7bmFtZX1gKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hBY2Nlc3NUb2tlbih0b2tlbjogSldUKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtwcm9jZXNzLmVudi5LRVlDTE9BS19JU1NVRVJ9L3Byb3RvY29sL29wZW5pZC1jb25uZWN0L3Rva2VuYCwge1xuICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiIH0sXG4gICAgICBib2R5OiBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgY2xpZW50X2lkOiBwcm9jZXNzLmVudi5LRVlDTE9BS19DTElFTlRfSUQhLFxuICAgICAgICBjbGllbnRfc2VjcmV0OiBwcm9jZXNzLmVudi5LRVlDTE9BS19DTElFTlRfU0VDUkVUISxcbiAgICAgICAgZ3JhbnRfdHlwZTogXCJyZWZyZXNoX3Rva2VuXCIsXG4gICAgICAgIHJlZnJlc2hfdG9rZW46IHRva2VuLnJlZnJlc2hUb2tlbixcbiAgICAgIH0pLFxuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlZnJlc2hlZFRva2VucyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IHJlZnJlc2hlZFRva2VucztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udG9rZW4sXG4gICAgICBhY2Nlc3NUb2tlbjogcmVmcmVzaGVkVG9rZW5zLmFjY2Vzc190b2tlbixcbiAgICAgIHJlZnJlc2hUb2tlbjogcmVmcmVzaGVkVG9rZW5zLnJlZnJlc2hfdG9rZW4gPz8gdG9rZW4ucmVmcmVzaFRva2VuLFxuICAgICAgYWNjZXNzVG9rZW5FeHBpcmVzOiBEYXRlLm5vdygpICsgcmVmcmVzaGVkVG9rZW5zLmV4cGlyZXNfaW4gKiAxMDAwLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIHJlZnJlc2hpbmcgYWNjZXNzIHRva2VuOlwiLCBlcnJvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRva2VuLFxuICAgICAgZXJyb3I6IFwiUmVmcmVzaEFjY2Vzc1Rva2VuRXJyb3JcIixcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBhdXRoT3B0aW9uczogTmV4dEF1dGhPcHRpb25zID0ge1xuICBwcm92aWRlcnM6IFtcbiAgICBLZXljbG9ha1Byb3ZpZGVyKHtcbiAgICAgIGNsaWVudElkOiBnZXRSZXF1aXJlZEVudlZhcihcIktFWUNMT0FLX0NMSUVOVF9JRFwiKSxcbiAgICAgIGNsaWVudFNlY3JldDogZ2V0UmVxdWlyZWRFbnZWYXIoXCJLRVlDTE9BS19DTElFTlRfU0VDUkVUXCIpLFxuICAgICAgaXNzdWVyOiBnZXRSZXF1aXJlZEVudlZhcihcIktFWUNMT0FLX0lTU1VFUlwiKSxcbiAgICAgIGF1dGhvcml6YXRpb246IHtcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgc2NvcGU6IFwib3BlbmlkIHByb2ZpbGUgZW1haWwgcm9sZXNcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJvZmlsZShwcm9maWxlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdLZXljbG9hayBwcm9maWxlIGNhbGxiYWNrOicsIHtcbiAgICAgICAgICByYXdQcm9maWxlOiBwcm9maWxlLFxuICAgICAgICAgIHJhd1JvbGVzOiBwcm9maWxlLnJvbGVzLFxuICAgICAgICAgIHJlYWxtQWNjZXNzOiBwcm9maWxlLnJlYWxtX2FjY2VzcyxcbiAgICAgICAgICBncm91cHM6IHByb2ZpbGUuZ3JvdXBzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEdldCByb2xlcyBmcm9tIHJlYWxtX2FjY2Vzc1xuICAgICAgICBjb25zdCByb2xlcyA9IHByb2ZpbGUucmVhbG1fYWNjZXNzPy5yb2xlcyB8fCBbXTtcbiAgICAgICAgY29uc29sZS5sb2coJ1Byb2ZpbGUgY2FsbGJhY2sgcmF3IHJvbGVzOicsIHJvbGVzKTtcblxuICAgICAgICAvLyBDbGVhbiB1cCByb2xlcyBieSByZW1vdmluZyBST0xFXyBwcmVmaXggYW5kIGNvbnZlcnRpbmcgdG8gbG93ZXJjYXNlXG4gICAgICAgIGNvbnN0IGNsZWFuUm9sZXMgPSByb2xlcy5tYXAoKHJvbGU6IHN0cmluZykgPT4gXG4gICAgICAgICAgcm9sZS5yZXBsYWNlKC9eUk9MRV8vLCAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCdQcm9maWxlIGNhbGxiYWNrIGNsZWFuZWQgcm9sZXM6JywgY2xlYW5Sb2xlcyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDogcHJvZmlsZS5zdWIsXG4gICAgICAgICAgbmFtZTogcHJvZmlsZS5uYW1lID8/IHByb2ZpbGUucHJlZmVycmVkX3VzZXJuYW1lLFxuICAgICAgICAgIGVtYWlsOiBwcm9maWxlLmVtYWlsLFxuICAgICAgICAgIGZpcnN0X25hbWU6IHByb2ZpbGUuZ2l2ZW5fbmFtZSA/PyAnJyxcbiAgICAgICAgICBsYXN0X25hbWU6IHByb2ZpbGUuZmFtaWx5X25hbWUgPz8gJycsXG4gICAgICAgICAgdXNlcm5hbWU6IHByb2ZpbGUucHJlZmVycmVkX3VzZXJuYW1lID8/IHByb2ZpbGUuZW1haWw/LnNwbGl0KCdAJylbMF0gPz8gJycsXG4gICAgICAgICAgcm9sZTogY2xlYW5Sb2xlcyxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KSxcbiAgXSxcbiAgc2Vzc2lvbjoge1xuICAgIHN0cmF0ZWd5OiBcImp3dFwiLFxuICAgIG1heEFnZTogMzAgKiAyNCAqIDYwICogNjAsIC8vIDMwIGRheXNcbiAgfSxcbiAgY2FsbGJhY2tzOiB7XG4gICAgYXN5bmMgand0KHsgdG9rZW4sIGFjY291bnQsIHByb2ZpbGUgfSkge1xuICAgICAgaWYgKGFjY291bnQgJiYgcHJvZmlsZSkge1xuICAgICAgICBjb25zdCBrZXljbG9ha1Byb2ZpbGUgPSBwcm9maWxlIGFzIEtleWNsb2FrUHJvZmlsZTtcbiAgICAgICAgY29uc3Qgcm9sZXMgPSBrZXljbG9ha1Byb2ZpbGUucmVhbG1fYWNjZXNzPy5yb2xlcyB8fCBbXTtcbiAgICAgICAgY29uc3QgY2xlYW5Sb2xlcyA9IHJvbGVzLm1hcCgocm9sZTogc3RyaW5nKSA9PiBcbiAgICAgICAgICByb2xlLnJlcGxhY2UoL15ST0xFXy8sICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG5cbiAgICAgICAgdG9rZW4uYWNjZXNzVG9rZW4gPSBhY2NvdW50LmFjY2Vzc190b2tlbiA/PyAnJztcbiAgICAgICAgdG9rZW4ucmVmcmVzaFRva2VuID0gYWNjb3VudC5yZWZyZXNoX3Rva2VuID8/ICcnO1xuICAgICAgICB0b2tlbi5hY2Nlc3NUb2tlbkV4cGlyZXMgPSBhY2NvdW50LmV4cGlyZXNfYXQgPz8gMDtcbiAgICAgICAgdG9rZW4uc3ViID0ga2V5Y2xvYWtQcm9maWxlLnN1YjtcbiAgICAgICAgdG9rZW4ucm9sZSA9IGNsZWFuUm9sZXM7XG4gICAgICAgIHRva2VuLnVzZXJuYW1lID0ga2V5Y2xvYWtQcm9maWxlLnByZWZlcnJlZF91c2VybmFtZSA/PyAnJztcbiAgICAgICAgdG9rZW4uZmlyc3RfbmFtZSA9IGtleWNsb2FrUHJvZmlsZS5naXZlbl9uYW1lID8/ICcnO1xuICAgICAgICB0b2tlbi5sYXN0X25hbWUgPSBrZXljbG9ha1Byb2ZpbGUuZmFtaWx5X25hbWUgPz8gJyc7XG4gICAgICB9IGVsc2UgaWYgKHRva2VuLmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGp3dERlY29kZTxEZWNvZGVkVG9rZW4+KHRva2VuLmFjY2Vzc1Rva2VuKTtcbiAgICAgICAgICBpZiAoZGVjb2RlZC5yZWFsbV9hY2Nlc3M/LnJvbGVzKSB7XG4gICAgICAgICAgICBjb25zdCByb2xlcyA9IGRlY29kZWQucmVhbG1fYWNjZXNzLnJvbGVzO1xuICAgICAgICAgICAgY29uc3QgY2xlYW5Sb2xlcyA9IHJvbGVzLm1hcCgocm9sZTogc3RyaW5nKSA9PiBcbiAgICAgICAgICAgICAgcm9sZS5yZXBsYWNlKC9eUk9MRV8vLCAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRva2VuLnJvbGUgPSBjbGVhblJvbGVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkZWNvZGluZyB0b2tlbjonLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKERhdGUubm93KCkgPCAodG9rZW4uYWNjZXNzVG9rZW5FeHBpcmVzIGFzIG51bWJlcikgKiAxMDAwKSB7XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlZnJlc2hBY2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfSxcbiAgICBhc3luYyBzZXNzaW9uKHsgc2Vzc2lvbiwgdG9rZW4gfSkge1xuICAgICAgaWYgKHRva2VuLmVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0b2tlbi5lcnJvcik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVzZXJSb2xlcyA9IEFycmF5LmlzQXJyYXkodG9rZW4ucm9sZSkgPyB0b2tlbi5yb2xlIDogW107XG4gICAgICBzZXNzaW9uLnVzZXIgPSB7XG4gICAgICAgIGlkOiB0b2tlbi5zdWIgPz8gJycsXG4gICAgICAgIGVtYWlsOiB0b2tlbi5lbWFpbCA/PyBudWxsLFxuICAgICAgICBuYW1lOiB0b2tlbi5uYW1lID8/IG51bGwsXG4gICAgICAgIGltYWdlOiBudWxsLFxuICAgICAgICB1c2VybmFtZTogdG9rZW4udXNlcm5hbWUgPz8gJycsXG4gICAgICAgIGZpcnN0X25hbWU6IHRva2VuLmZpcnN0X25hbWUgPz8gJycsXG4gICAgICAgIGxhc3RfbmFtZTogdG9rZW4ubGFzdF9uYW1lID8/ICcnLFxuICAgICAgICByb2xlOiB1c2VyUm9sZXMsXG4gICAgICAgIG5leHRjbG91ZEluaXRpYWxpemVkOiBmYWxzZSxcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmFjY2Vzc1Rva2VuID0gdG9rZW4uYWNjZXNzVG9rZW47XG5cbiAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgIH1cbiAgfSxcbiAgcGFnZXM6IHtcbiAgICBzaWduSW46ICcvc2lnbmluJyxcbiAgICBlcnJvcjogJy9zaWduaW4nLFxuICB9LFxuICBkZWJ1ZzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcsXG59O1xuXG5jb25zdCBoYW5kbGVyID0gTmV4dEF1dGgoYXV0aE9wdGlvbnMpO1xuZXhwb3J0IHsgaGFuZGxlciBhcyBHRVQsIGhhbmRsZXIgYXMgUE9TVCB9O1xuXG5pbnRlcmZhY2UgSldUIHtcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuRXhwaXJlczogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUHJvZmlsZSB7XG4gIHN1Yj86IHN0cmluZztcbiAgZW1haWw/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHJvbGVzPzogc3RyaW5nW107XG59XG5cbiJdLCJuYW1lcyI6WyJOZXh0QXV0aCIsIktleWNsb2FrUHJvdmlkZXIiLCJqd3REZWNvZGUiLCJnZXRSZXF1aXJlZEVudlZhciIsIm5hbWUiLCJ2YWx1ZSIsInByb2Nlc3MiLCJlbnYiLCJFcnJvciIsInJlZnJlc2hBY2Nlc3NUb2tlbiIsInRva2VuIiwicmVzcG9uc2UiLCJmZXRjaCIsIktFWUNMT0FLX0lTU1VFUiIsImhlYWRlcnMiLCJib2R5IiwiVVJMU2VhcmNoUGFyYW1zIiwiY2xpZW50X2lkIiwiS0VZQ0xPQUtfQ0xJRU5UX0lEIiwiY2xpZW50X3NlY3JldCIsIktFWUNMT0FLX0NMSUVOVF9TRUNSRVQiLCJncmFudF90eXBlIiwicmVmcmVzaF90b2tlbiIsInJlZnJlc2hUb2tlbiIsIm1ldGhvZCIsInJlZnJlc2hlZFRva2VucyIsImpzb24iLCJvayIsImFjY2Vzc1Rva2VuIiwiYWNjZXNzX3Rva2VuIiwiYWNjZXNzVG9rZW5FeHBpcmVzIiwiRGF0ZSIsIm5vdyIsImV4cGlyZXNfaW4iLCJlcnJvciIsImNvbnNvbGUiLCJhdXRoT3B0aW9ucyIsInByb3ZpZGVycyIsImNsaWVudElkIiwiY2xpZW50U2VjcmV0IiwiaXNzdWVyIiwiYXV0aG9yaXphdGlvbiIsInBhcmFtcyIsInNjb3BlIiwicHJvZmlsZSIsImxvZyIsInJhd1Byb2ZpbGUiLCJyYXdSb2xlcyIsInJvbGVzIiwicmVhbG1BY2Nlc3MiLCJyZWFsbV9hY2Nlc3MiLCJncm91cHMiLCJjbGVhblJvbGVzIiwibWFwIiwicm9sZSIsInJlcGxhY2UiLCJ0b0xvd2VyQ2FzZSIsImlkIiwic3ViIiwicHJlZmVycmVkX3VzZXJuYW1lIiwiZW1haWwiLCJmaXJzdF9uYW1lIiwiZ2l2ZW5fbmFtZSIsImxhc3RfbmFtZSIsImZhbWlseV9uYW1lIiwidXNlcm5hbWUiLCJzcGxpdCIsInNlc3Npb24iLCJzdHJhdGVneSIsIm1heEFnZSIsImNhbGxiYWNrcyIsImp3dCIsImFjY291bnQiLCJrZXljbG9ha1Byb2ZpbGUiLCJleHBpcmVzX2F0IiwiZGVjb2RlZCIsInVzZXJSb2xlcyIsIkFycmF5IiwiaXNBcnJheSIsInVzZXIiLCJpbWFnZSIsIm5leHRjbG91ZEluaXRpYWxpemVkIiwicGFnZXMiLCJzaWduSW4iLCJkZWJ1ZyIsImhhbmRsZXIiLCJHRVQiLCJQT1NUIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./app/api/auth/[...nextauth]/route.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(rsc)/./app/courrier/layout.tsx":
|
|
/*!*********************************!*\
|
|
!*** ./app/courrier/layout.tsx ***!
|
|
\*********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CourrierLayout)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(rsc)/./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n\nfunction CourrierLayout({ children }) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: children\n }, void 0, false);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvY291cnJpZXIvbGF5b3V0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWUsU0FBU0EsZUFBZSxFQUNyQ0MsUUFBUSxFQUdUO0lBQ0MscUJBQ0U7a0JBQ0dBOztBQUdQIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2FwcC9jb3Vycmllci9sYXlvdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvdXJyaWVyTGF5b3V0KHtcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59KSB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8Lz5cbiAgKTtcbn0gIl0sIm5hbWVzIjpbIkNvdXJyaWVyTGF5b3V0IiwiY2hpbGRyZW4iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./app/courrier/layout.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(rsc)/./app/courrier/page.tsx":
|
|
/*!*******************************!*\
|
|
!*** ./app/courrier/page.tsx ***!
|
|
\*******************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
/* harmony export */ });
|
|
/* harmony import */ var react_server_dom_webpack_server_edge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-server-dom-webpack/server.edge */ "(rsc)/./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-edge.js");
|
|
/* harmony import */ var react_server_dom_webpack_server_edge__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server_edge__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,react_server_dom_webpack_server_edge__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)(
|
|
function() { throw new Error("Attempted to call the default export of \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); },
|
|
"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx",
|
|
"default",
|
|
));
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(rsc)/./app/globals.css":
|
|
/*!*************************!*\
|
|
!*** ./app/globals.css ***!
|
|
\*************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"18de1bca27ba\");\nif (false) {}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvZ2xvYmFscy5jc3MiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGlFQUFlLGNBQWM7QUFDN0IsSUFBSSxLQUFVLEVBQUUsRUFBdUIiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvYXBwL2dsb2JhbHMuY3NzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiMThkZTFiY2EyN2JhXCJcbmlmIChtb2R1bGUuaG90KSB7IG1vZHVsZS5ob3QuYWNjZXB0KCkgfVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./app/globals.css\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(rsc)/./app/layout.tsx":
|
|
/*!************************!*\
|
|
!*** ./app/layout.tsx ***!
|
|
\************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RootLayout)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(rsc)/./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! next/font/google/target.css?{\"path\":\"app/layout.tsx\",\"import\":\"Inter\",\"arguments\":[{\"subsets\":[\"latin\"]}],\"variableName\":\"inter\"} */ \"(rsc)/./node_modules/next/font/google/target.css?{\\\"path\\\":\\\"app/layout.tsx\\\",\\\"import\\\":\\\"Inter\\\",\\\"arguments\\\":[{\\\"subsets\\\":[\\\"latin\\\"]}],\\\"variableName\\\":\\\"inter\\\"}\");\n/* harmony import */ var next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./globals.css */ \"(rsc)/./app/globals.css\");\n/* harmony import */ var next_headers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/headers */ \"(rsc)/./node_modules/next/dist/api/headers.js\");\n/* harmony import */ var next_auth_next__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next-auth/next */ \"(rsc)/./node_modules/next-auth/next/index.js\");\n/* harmony import */ var _app_api_auth_nextauth_route__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/app/api/auth/[...nextauth]/route */ \"(rsc)/./app/api/auth/[...nextauth]/route.ts\");\n/* harmony import */ var _components_providers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/providers */ \"(rsc)/./components/providers.tsx\");\n/* harmony import */ var _components_layout_layout_wrapper__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/layout/layout-wrapper */ \"(rsc)/./components/layout/layout-wrapper.tsx\");\n/* harmony import */ var _lib_redis__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/lib/redis */ \"(rsc)/./lib/redis.ts\");\n\n\n\n\n\n\n\n\n\n// Warm up Redis connection during app initialization\n(0,_lib_redis__WEBPACK_IMPORTED_MODULE_7__.warmupRedisCache)().catch(console.error);\nasync function RootLayout({ children }) {\n const session = await (0,next_auth_next__WEBPACK_IMPORTED_MODULE_3__.getServerSession)(_app_api_auth_nextauth_route__WEBPACK_IMPORTED_MODULE_4__.authOptions);\n const headersList = await (0,next_headers__WEBPACK_IMPORTED_MODULE_2__.headers)();\n const pathname = headersList.get(\"x-pathname\") || \"\";\n const isSignInPage = pathname === \"/signin\";\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"html\", {\n lang: \"fr\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"body\", {\n className: (next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_8___default().className),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_providers__WEBPACK_IMPORTED_MODULE_5__.Providers, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_layout_layout_wrapper__WEBPACK_IMPORTED_MODULE_6__.LayoutWrapper, {\n isSignInPage: isSignInPage,\n isAuthenticated: !!session,\n children: children\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/layout.tsx\",\n lineNumber: 30,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/layout.tsx\",\n lineNumber: 29,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/layout.tsx\",\n lineNumber: 28,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/layout.tsx\",\n lineNumber: 27,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvbGF5b3V0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBVU1BO0FBUmlCO0FBQ2dCO0FBQ1c7QUFDZTtBQUNkO0FBQ2dCO0FBQ3BCO0FBSS9DLHFEQUFxRDtBQUNyRE0sNERBQWdCQSxHQUFHQyxLQUFLLENBQUNDLFFBQVFDLEtBQUs7QUFFdkIsZUFBZUMsV0FBVyxFQUN2Q0MsUUFBUSxFQUdUO0lBQ0MsTUFBTUMsVUFBVSxNQUFNVixnRUFBZ0JBLENBQUNDLHFFQUFXQTtJQUNsRCxNQUFNVSxjQUFjLE1BQU1aLHFEQUFPQTtJQUNqQyxNQUFNYSxXQUFXRCxZQUFZRSxHQUFHLENBQUMsaUJBQWlCO0lBQ2xELE1BQU1DLGVBQWVGLGFBQWE7SUFFbEMscUJBQ0UsOERBQUNHO1FBQUtDLE1BQUs7a0JBQ1QsNEVBQUNDO1lBQUtDLFdBQVdwQiwySkFBZTtzQkFDOUIsNEVBQUNJLDREQUFTQTswQkFDUiw0RUFBQ0MsNEVBQWFBO29CQUNaVyxjQUFjQTtvQkFDZEssaUJBQWlCLENBQUMsQ0FBQ1Q7OEJBRWxCRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTWIiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvYXBwL2xheW91dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBNZXRhZGF0YSB9IGZyb20gXCJuZXh0XCI7XG5pbXBvcnQgeyBJbnRlciB9IGZyb20gXCJuZXh0L2ZvbnQvZ29vZ2xlXCI7XG5pbXBvcnQgXCIuL2dsb2JhbHMuY3NzXCI7XG5pbXBvcnQgeyBoZWFkZXJzIH0gZnJvbSBcIm5leHQvaGVhZGVyc1wiO1xuaW1wb3J0IHsgZ2V0U2VydmVyU2Vzc2lvbiB9IGZyb20gXCJuZXh0LWF1dGgvbmV4dFwiO1xuaW1wb3J0IHsgYXV0aE9wdGlvbnMgfSBmcm9tIFwiQC9hcHAvYXBpL2F1dGgvWy4uLm5leHRhdXRoXS9yb3V0ZVwiO1xuaW1wb3J0IHsgUHJvdmlkZXJzIH0gZnJvbSBcIkAvY29tcG9uZW50cy9wcm92aWRlcnNcIjtcbmltcG9ydCB7IExheW91dFdyYXBwZXIgfSBmcm9tIFwiQC9jb21wb25lbnRzL2xheW91dC9sYXlvdXQtd3JhcHBlclwiO1xuaW1wb3J0IHsgd2FybXVwUmVkaXNDYWNoZSB9IGZyb20gJ0AvbGliL3JlZGlzJztcblxuY29uc3QgaW50ZXIgPSBJbnRlcih7IHN1YnNldHM6IFtcImxhdGluXCJdIH0pO1xuXG4vLyBXYXJtIHVwIFJlZGlzIGNvbm5lY3Rpb24gZHVyaW5nIGFwcCBpbml0aWFsaXphdGlvblxud2FybXVwUmVkaXNDYWNoZSgpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBSb290TGF5b3V0KHtcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59KSB7XG4gIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBnZXRTZXJ2ZXJTZXNzaW9uKGF1dGhPcHRpb25zKTtcbiAgY29uc3QgaGVhZGVyc0xpc3QgPSBhd2FpdCBoZWFkZXJzKCk7XG4gIGNvbnN0IHBhdGhuYW1lID0gaGVhZGVyc0xpc3QuZ2V0KFwieC1wYXRobmFtZVwiKSB8fCBcIlwiO1xuICBjb25zdCBpc1NpZ25JblBhZ2UgPSBwYXRobmFtZSA9PT0gXCIvc2lnbmluXCI7XG5cbiAgcmV0dXJuIChcbiAgICA8aHRtbCBsYW5nPVwiZnJcIj5cbiAgICAgIDxib2R5IGNsYXNzTmFtZT17aW50ZXIuY2xhc3NOYW1lfT5cbiAgICAgICAgPFByb3ZpZGVycz5cbiAgICAgICAgICA8TGF5b3V0V3JhcHBlciBcbiAgICAgICAgICAgIGlzU2lnbkluUGFnZT17aXNTaWduSW5QYWdlfSBcbiAgICAgICAgICAgIGlzQXV0aGVudGljYXRlZD17ISFzZXNzaW9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICA8L0xheW91dFdyYXBwZXI+XG4gICAgICAgIDwvUHJvdmlkZXJzPlxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJpbnRlciIsImhlYWRlcnMiLCJnZXRTZXJ2ZXJTZXNzaW9uIiwiYXV0aE9wdGlvbnMiLCJQcm92aWRlcnMiLCJMYXlvdXRXcmFwcGVyIiwid2FybXVwUmVkaXNDYWNoZSIsImNhdGNoIiwiY29uc29sZSIsImVycm9yIiwiUm9vdExheW91dCIsImNoaWxkcmVuIiwic2Vzc2lvbiIsImhlYWRlcnNMaXN0IiwicGF0aG5hbWUiLCJnZXQiLCJpc1NpZ25JblBhZ2UiLCJodG1sIiwibGFuZyIsImJvZHkiLCJjbGFzc05hbWUiLCJpc0F1dGhlbnRpY2F0ZWQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./app/layout.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(rsc)/./components/layout/layout-wrapper.tsx":
|
|
/*!**********************************************!*\
|
|
!*** ./components/layout/layout-wrapper.tsx ***!
|
|
\**********************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
/* harmony export */ LayoutWrapper: () => (/* binding */ LayoutWrapper)
|
|
/* harmony export */ });
|
|
/* harmony import */ var react_server_dom_webpack_server_edge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-server-dom-webpack/server.edge */ "(rsc)/./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-edge.js");
|
|
/* harmony import */ var react_server_dom_webpack_server_edge__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server_edge__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
|
const LayoutWrapper = (0,react_server_dom_webpack_server_edge__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)(
|
|
function() { throw new Error("Attempted to call LayoutWrapper() from the server but LayoutWrapper is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); },
|
|
"/home/alma/nextgen/Neah-mail/components/layout/layout-wrapper.tsx",
|
|
"LayoutWrapper",
|
|
);
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(rsc)/./components/providers.tsx":
|
|
/*!**********************************!*\
|
|
!*** ./components/providers.tsx ***!
|
|
\**********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
/* harmony export */ Providers: () => (/* binding */ Providers)
|
|
/* harmony export */ });
|
|
/* harmony import */ var react_server_dom_webpack_server_edge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-server-dom-webpack/server.edge */ "(rsc)/./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-edge.js");
|
|
/* harmony import */ var react_server_dom_webpack_server_edge__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server_edge__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
|
const Providers = (0,react_server_dom_webpack_server_edge__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)(
|
|
function() { throw new Error("Attempted to call Providers() from the server but Providers is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); },
|
|
"/home/alma/nextgen/Neah-mail/components/providers.tsx",
|
|
"Providers",
|
|
);
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(rsc)/./lib/redis.ts":
|
|
/*!**********************!*\
|
|
!*** ./lib/redis.ts ***!
|
|
\**********************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ KEYS: () => (/* binding */ KEYS),\n/* harmony export */ TTL: () => (/* binding */ TTL),\n/* harmony export */ cacheEmailContent: () => (/* binding */ cacheEmailContent),\n/* harmony export */ cacheEmailCredentials: () => (/* binding */ cacheEmailCredentials),\n/* harmony export */ cacheEmailList: () => (/* binding */ cacheEmailList),\n/* harmony export */ cacheImapSession: () => (/* binding */ cacheImapSession),\n/* harmony export */ closeRedisConnection: () => (/* binding */ closeRedisConnection),\n/* harmony export */ decryptData: () => (/* binding */ decryptData),\n/* harmony export */ encryptData: () => (/* binding */ encryptData),\n/* harmony export */ getCachedEmailContent: () => (/* binding */ getCachedEmailContent),\n/* harmony export */ getCachedEmailCredentials: () => (/* binding */ getCachedEmailCredentials),\n/* harmony export */ getCachedEmailList: () => (/* binding */ getCachedEmailList),\n/* harmony export */ getCachedImapSession: () => (/* binding */ getCachedImapSession),\n/* harmony export */ getEmailCredentials: () => (/* binding */ getEmailCredentials),\n/* harmony export */ getRedisClient: () => (/* binding */ getRedisClient),\n/* harmony export */ getRedisStatus: () => (/* binding */ getRedisStatus),\n/* harmony export */ invalidateEmailContentCache: () => (/* binding */ invalidateEmailContentCache),\n/* harmony export */ invalidateFolderCache: () => (/* binding */ invalidateFolderCache),\n/* harmony export */ invalidateUserEmailCache: () => (/* binding */ invalidateUserEmailCache),\n/* harmony export */ warmupRedisCache: () => (/* binding */ warmupRedisCache)\n/* harmony export */ });\n/* harmony import */ var ioredis__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ioredis */ \"(rsc)/./node_modules/ioredis/built/index.js\");\n/* harmony import */ var ioredis__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(ioredis__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var crypto_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! crypto-js */ \"(rsc)/./node_modules/crypto-js/index.js\");\n/* harmony import */ var crypto_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(crypto_js__WEBPACK_IMPORTED_MODULE_1__);\n\n\n// Initialize Redis client\nlet redisClient = null;\nlet isConnecting = false;\nlet connectionAttempts = 0;\nconst MAX_RECONNECT_ATTEMPTS = 5;\n/**\n * Get a Redis client instance (singleton pattern) with improved connection management\n */ function getRedisClient() {\n if (redisClient && redisClient.status === 'ready') {\n return redisClient;\n }\n if (isConnecting) {\n // If we're already trying to connect, return the existing client\n // This prevents multiple simultaneous connection attempts\n if (redisClient) return redisClient;\n // This is a fallback in case we're connecting but don't have a client yet\n console.warn('Redis connection in progress, creating temporary client');\n }\n if (!redisClient) {\n isConnecting = true;\n connectionAttempts = 0;\n // Set Redis connection parameters from environment variables only\n const redisOptions = {\n host: process.env.REDIS_HOST,\n port: process.env.REDIS_PORT ? parseInt(process.env.REDIS_PORT) : undefined,\n password: process.env.REDIS_PASSWORD,\n retryStrategy: (times)=>{\n connectionAttempts = times;\n if (times > MAX_RECONNECT_ATTEMPTS) {\n console.error(`Redis connection failed after ${times} attempts, giving up`);\n return null; // Stop trying to reconnect\n }\n const delay = Math.min(times * 100, 5000);\n console.log(`Redis reconnect attempt ${times}, retrying in ${delay}ms`);\n return delay;\n },\n maxRetriesPerRequest: 5,\n enableOfflineQueue: true,\n connectTimeout: 10000,\n disconnectTimeout: 2000,\n keepAlive: 10000,\n keyPrefix: '' // No prefix to keep keys clean\n };\n console.log('Connecting to Redis using environment variables');\n redisClient = new (ioredis__WEBPACK_IMPORTED_MODULE_0___default())(redisOptions);\n redisClient.on('error', (err)=>{\n console.error('Redis connection error:', err);\n // Only set to null if we've exceeded max attempts\n if (connectionAttempts > MAX_RECONNECT_ATTEMPTS) {\n console.error('Redis connection failed permanently, will create new client on next request');\n redisClient = null;\n isConnecting = false;\n }\n });\n redisClient.on('connect', ()=>{\n console.log('Successfully connected to Redis');\n isConnecting = false;\n connectionAttempts = 0;\n });\n redisClient.on('reconnecting', ()=>{\n console.log('Reconnecting to Redis...');\n isConnecting = true;\n });\n redisClient.on('ready', ()=>{\n console.log('Redis connection warmed up');\n isConnecting = false;\n });\n redisClient.on('end', ()=>{\n console.log('Redis connection ended');\n // Don't set to null here - let the error handler decide\n });\n }\n return redisClient;\n}\n/**\n * Close Redis connection (useful for serverless environments)\n */ async function closeRedisConnection() {\n if (redisClient) {\n await redisClient.quit();\n redisClient = null;\n }\n}\n// Encryption key from environment variable or fallback\nconst getEncryptionKey = ()=>{\n return process.env.REDIS_ENCRYPTION_KEY || 'default-encryption-key-change-in-production';\n};\n/**\n * Encrypt sensitive data before storing in Redis\n */ function encryptData(data) {\n return crypto_js__WEBPACK_IMPORTED_MODULE_1___default().AES.encrypt(data, getEncryptionKey()).toString();\n}\n/**\n * Decrypt sensitive data retrieved from Redis\n */ function decryptData(encryptedData) {\n const bytes = crypto_js__WEBPACK_IMPORTED_MODULE_1___default().AES.decrypt(encryptedData, getEncryptionKey());\n return bytes.toString((crypto_js__WEBPACK_IMPORTED_MODULE_1___default().enc).Utf8);\n}\n// Cache key definitions\nconst KEYS = {\n CREDENTIALS: (userId, accountId)=>`email:credentials:${userId}:${accountId}`,\n SESSION: (userId)=>`email:session:${userId}`,\n EMAIL_LIST: (userId, accountId, folder, page, perPage)=>`email:list:${userId}:${accountId}:${folder}:${page}:${perPage}`,\n EMAIL_CONTENT: (userId, accountId, emailId)=>`email:content:${userId}:${accountId}:${emailId}`\n};\n// TTL constants in seconds\nconst TTL = {\n CREDENTIALS: 60 * 60 * 24,\n SESSION: 60 * 60 * 4,\n EMAIL_LIST: 60 * 5,\n EMAIL_CONTENT: 60 * 15 // 15 minutes\n};\n/**\n * Cache email credentials in Redis\n */ async function cacheEmailCredentials(userId, accountId, credentials) {\n const redis = getRedisClient();\n const key = KEYS.CREDENTIALS(userId, accountId);\n // Validate credentials before caching\n if (!credentials.email || !credentials.host || !credentials.password && !credentials.useOAuth) {\n console.error(`Cannot cache incomplete credentials for user ${userId}`);\n return;\n }\n try {\n console.log(`Caching credentials for user ${userId}`);\n // Create a copy without the password to store\n const secureCredentials = {\n email: credentials.email,\n host: credentials.host,\n port: credentials.port,\n secure: credentials.secure ?? true,\n // Include the extended fields\n ...credentials.smtp_host && {\n smtp_host: credentials.smtp_host\n },\n ...credentials.smtp_port && {\n smtp_port: credentials.smtp_port\n },\n ...credentials.smtp_secure !== undefined && {\n smtp_secure: credentials.smtp_secure\n },\n ...credentials.display_name && {\n display_name: credentials.display_name\n },\n ...credentials.color && {\n color: credentials.color\n },\n // Include OAuth fields\n ...credentials.useOAuth !== undefined && {\n useOAuth: credentials.useOAuth\n },\n ...credentials.accessToken && {\n accessToken: credentials.accessToken\n },\n ...credentials.refreshToken && {\n refreshToken: credentials.refreshToken\n },\n ...credentials.tokenExpiry && {\n tokenExpiry: credentials.tokenExpiry\n }\n };\n // Encrypt password if provided\n if (credentials.password) {\n try {\n const encrypted = encryptData(credentials.password);\n console.log(`Successfully encrypted password for user ${userId}`);\n secureCredentials.encryptedPassword = encrypted;\n } catch (encryptError) {\n console.error(`Failed to encrypt password for user ${userId}:`, encryptError);\n // Continue anyway since we might have OAuth tokens\n }\n }\n await redis.set(key, JSON.stringify(secureCredentials), 'EX', TTL.CREDENTIALS);\n console.log(`Credentials cached for user ${userId}`);\n } catch (error) {\n console.error(`Error caching credentials for user ${userId}:`, error);\n }\n}\n/**\n * Get email credentials from Redis\n */ async function getEmailCredentials(userId, accountId) {\n const redis = getRedisClient();\n const key = KEYS.CREDENTIALS(userId, accountId);\n try {\n const credStr = await redis.get(key);\n if (!credStr) {\n return null;\n }\n const creds = JSON.parse(credStr);\n let password;\n // Handle OAuth accounts (they might not have a password)\n if (creds.encryptedPassword) {\n try {\n // Decrypt the password\n password = decryptData(creds.encryptedPassword);\n } catch (decryptError) {\n console.error(`Failed to decrypt password for user ${userId}:`, decryptError);\n // For OAuth accounts, we can continue without a password\n if (!creds.useOAuth) {\n return null;\n }\n }\n }\n // Return the full credentials with decrypted password if available\n const result = {\n email: creds.email,\n host: creds.host,\n port: creds.port,\n secure: creds.secure ?? true,\n ...password && {\n password\n },\n ...creds.smtp_host && {\n smtp_host: creds.smtp_host\n },\n ...creds.smtp_port && {\n smtp_port: creds.smtp_port\n },\n ...creds.smtp_secure !== undefined && {\n smtp_secure: creds.smtp_secure\n },\n ...creds.display_name && {\n display_name: creds.display_name\n },\n ...creds.color && {\n color: creds.color\n },\n // Include OAuth fields\n ...creds.useOAuth !== undefined && {\n useOAuth: creds.useOAuth\n },\n ...creds.accessToken && {\n accessToken: creds.accessToken\n },\n ...creds.refreshToken && {\n refreshToken: creds.refreshToken\n },\n ...creds.tokenExpiry && {\n tokenExpiry: creds.tokenExpiry\n }\n };\n return result;\n } catch (error) {\n console.error(`Error getting credentials for user ${userId}:`, error);\n return null;\n }\n}\n/**\n * Cache IMAP session data for quick reconnection\n */ async function cacheImapSession(userId, sessionData) {\n const redis = getRedisClient();\n const key = KEYS.SESSION(userId);\n // Always update the lastActive timestamp\n sessionData.lastActive = Date.now();\n await redis.set(key, JSON.stringify(sessionData), 'EX', TTL.SESSION);\n}\n/**\n * Get cached IMAP session data\n */ async function getCachedImapSession(userId) {\n const redis = getRedisClient();\n const key = KEYS.SESSION(userId);\n const cachedData = await redis.get(key);\n if (!cachedData) return null;\n return JSON.parse(cachedData);\n}\n/**\n * Cache email list in Redis\n */ async function cacheEmailList(userId, accountId, folder, page, perPage, data) {\n const redis = getRedisClient();\n const key = KEYS.EMAIL_LIST(userId, accountId, folder, page, perPage);\n await redis.set(key, JSON.stringify(data), 'EX', TTL.EMAIL_LIST);\n}\n/**\n * Get cached email list from Redis\n */ async function getCachedEmailList(userId, accountId, folder, page, perPage) {\n const redis = getRedisClient();\n const key = KEYS.EMAIL_LIST(userId, accountId, folder, page, perPage);\n const cachedData = await redis.get(key);\n if (!cachedData) return null;\n return JSON.parse(cachedData);\n}\n/**\n * Cache email content in Redis\n */ async function cacheEmailContent(userId, accountId, emailId, data) {\n const redis = getRedisClient();\n const key = KEYS.EMAIL_CONTENT(userId, accountId, emailId);\n await redis.set(key, JSON.stringify(data), 'EX', TTL.EMAIL_CONTENT);\n}\n/**\n * Get cached email content from Redis\n */ async function getCachedEmailContent(userId, accountId, emailId) {\n const redis = getRedisClient();\n const key = KEYS.EMAIL_CONTENT(userId, accountId, emailId);\n const cachedData = await redis.get(key);\n if (!cachedData) return null;\n return JSON.parse(cachedData);\n}\n/**\n * Invalidate all email caches for a folder\n */ async function invalidateFolderCache(userId, accountId, folder) {\n const redis = getRedisClient();\n const pattern = `email:list:${userId}:${accountId}:${folder}:*`;\n // Use SCAN to find and delete keys matching the pattern\n let cursor = '0';\n do {\n const [nextCursor, keys] = await redis.scan(cursor, 'MATCH', pattern, 'COUNT', 100);\n cursor = nextCursor;\n if (keys.length > 0) {\n await redis.del(...keys);\n }\n }while (cursor !== '0');\n}\n/**\n * Invalidate email content cache\n */ async function invalidateEmailContentCache(userId, accountId, emailId) {\n const redis = getRedisClient();\n const key = KEYS.EMAIL_CONTENT(userId, accountId, emailId);\n await redis.del(key);\n}\n/**\n * Warm up Redis connection to avoid cold starts\n */ async function warmupRedisCache() {\n try {\n // Ping Redis to establish connection early\n const redis = getRedisClient();\n await redis.ping();\n console.log('Redis connection warmed up');\n return true;\n } catch (error) {\n console.error('Error warming up Redis:', error);\n return false;\n }\n}\n/**\n * Get Redis connection status\n */ async function getRedisStatus() {\n try {\n const redis = getRedisClient();\n const pong = await redis.ping();\n return {\n status: 'connected',\n ping: pong\n };\n } catch (error) {\n return {\n status: 'error',\n error: error instanceof Error ? error.message : String(error)\n };\n }\n}\n/**\n * Invalidate all user email caches (email lists and content)\n */ async function invalidateUserEmailCache(userId) {\n const redis = getRedisClient();\n // Patterns to delete\n const patterns = [\n `email:list:${userId}:*`,\n `email:content:${userId}:*`\n ];\n for (const pattern of patterns){\n let cursor = '0';\n do {\n const [nextCursor, keys] = await redis.scan(cursor, 'MATCH', pattern, 'COUNT', 100);\n cursor = nextCursor;\n if (keys.length > 0) {\n await redis.del(...keys);\n }\n }while (cursor !== '0');\n }\n}\n/**\n * Get cached email credentials from Redis\n * @deprecated Use getEmailCredentials instead\n */ async function getCachedEmailCredentials(userId, accountId) {\n return getEmailCredentials(userId, accountId);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEdBQUcsTUFBTTFDLE1BQU0yQyxJQUFJLENBQUNILFFBQVEsU0FBU0QsU0FBUyxTQUFTO1lBQy9FQyxTQUFTQztZQUVULElBQUlDLEtBQUtFLE1BQU0sR0FBRyxHQUFHO2dCQUNuQixNQUFNNUMsTUFBTTZDLEdBQUcsSUFBSUg7WUFDckI7UUFDRixRQUFTRixXQUFXLEtBQUs7SUFDM0I7QUFDRjtBQUVBOzs7Q0FHQyxHQUNNLGVBQWVnQiwwQkFDcEJwRSxNQUFjLEVBQ2RDLFNBQWlCO0lBRWpCLE9BQU8rQixvQkFBb0JoQyxRQUFRQztBQUNyQyIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9saWIvcmVkaXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlZGlzIGZyb20gJ2lvcmVkaXMnO1xuaW1wb3J0IENyeXB0b0pTIGZyb20gJ2NyeXB0by1qcyc7XG5cbi8vIEluaXRpYWxpemUgUmVkaXMgY2xpZW50XG5sZXQgcmVkaXNDbGllbnQ6IFJlZGlzIHwgbnVsbCA9IG51bGw7XG5sZXQgaXNDb25uZWN0aW5nID0gZmFsc2U7XG5sZXQgY29ubmVjdGlvbkF0dGVtcHRzID0gMDtcbmNvbnN0IE1BWF9SRUNPTk5FQ1RfQVRURU1QVFMgPSA1O1xuXG4vKipcbiAqIEdldCBhIFJlZGlzIGNsaWVudCBpbnN0YW5jZSAoc2luZ2xldG9uIHBhdHRlcm4pIHdpdGggaW1wcm92ZWQgY29ubmVjdGlvbiBtYW5hZ2VtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWRpc0NsaWVudCgpOiBSZWRpcyB7XG4gIGlmIChyZWRpc0NsaWVudCAmJiByZWRpc0NsaWVudC5zdGF0dXMgPT09ICdyZWFkeScpIHtcbiAgICByZXR1cm4gcmVkaXNDbGllbnQ7XG4gIH1cbiAgXG4gIGlmIChpc0Nvbm5lY3RpbmcpIHtcbiAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHRyeWluZyB0byBjb25uZWN0LCByZXR1cm4gdGhlIGV4aXN0aW5nIGNsaWVudFxuICAgIC8vIFRoaXMgcHJldmVudHMgbXVsdGlwbGUgc2ltdWx0YW5lb3VzIGNvbm5lY3Rpb24gYXR0ZW1wdHNcbiAgICBpZiAocmVkaXNDbGllbnQpIHJldHVybiByZWRpc0NsaWVudDtcbiAgICBcbiAgICAvLyBUaGlzIGlzIGEgZmFsbGJhY2sgaW4gY2FzZSB3ZSdyZSBjb25uZWN0aW5nIGJ1dCBkb24ndCBoYXZlIGEgY2xpZW50IHlldFxuICAgIGNvbnNvbGUud2FybignUmVkaXMgY29ubmVjdGlvbiBpbiBwcm9ncmVzcywgY3JlYXRpbmcgdGVtcG9yYXJ5IGNsaWVudCcpO1xuICB9XG4gIFxuICBpZiAoIXJlZGlzQ2xpZW50KSB7XG4gICAgaXNDb25uZWN0aW5nID0gdHJ1ZTtcbiAgICBjb25uZWN0aW9uQXR0ZW1wdHMgPSAwO1xuICAgIFxuICAgIC8vIFNldCBSZWRpcyBjb25uZWN0aW9uIHBhcmFtZXRlcnMgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb25seVxuICAgIGNvbnN0IHJlZGlzT3B0aW9ucyA9IHtcbiAgICAgIGhvc3Q6IHByb2Nlc3MuZW52LlJFRElTX0hPU1QsXG4gICAgICBwb3J0OiBwcm9jZXNzLmVudi5SRURJU19QT1JUID8gcGFyc2VJbnQocHJvY2Vzcy5lbnYuUkVESVNfUE9SVCkgOiB1bmRlZmluZWQsXG4gICAgICBwYXNzd29yZDogcHJvY2Vzcy5lbnYuUkVESVNfUEFTU1dPUkQsXG4gICAgICByZXRyeVN0cmF0ZWd5OiAodGltZXM6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25uZWN0aW9uQXR0ZW1wdHMgPSB0aW1lcztcbiAgICAgICAgaWYgKHRpbWVzID4gTUFYX1JFQ09OTkVDVF9BVFRFTVBUUykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFJlZGlzIGNvbm5lY3Rpb24gZmFpbGVkIGFmdGVyICR7dGltZXN9IGF0dGVtcHRzLCBnaXZpbmcgdXBgKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gU3RvcCB0cnlpbmcgdG8gcmVjb25uZWN0XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVsYXkgPSBNYXRoLm1pbih0aW1lcyAqIDEwMCwgNTAwMCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZWRpcyByZWNvbm5lY3QgYXR0ZW1wdCAke3RpbWVzfSwgcmV0cnlpbmcgaW4gJHtkZWxheX1tc2ApO1xuICAgICAgICByZXR1cm4gZGVsYXk7XG4gICAgICB9LFxuICAgICAgbWF4UmV0cmllc1BlclJlcXVlc3Q6IDUsXG4gICAgICBlbmFibGVPZmZsaW5lUXVldWU6IHRydWUsXG4gICAgICBjb25uZWN0VGltZW91dDogMTAwMDAsIC8vIDEwIHNlY29uZHNcbiAgICAgIGRpc2Nvbm5lY3RUaW1lb3V0OiAyMDAwLCAvLyAyIHNlY29uZHNcbiAgICAgIGtlZXBBbGl2ZTogMTAwMDAsIC8vIDEwIHNlY29uZHNcbiAgICAgIGtleVByZWZpeDogJycgLy8gTm8gcHJlZml4IHRvIGtlZXAga2V5cyBjbGVhblxuICAgIH07XG4gICAgXG4gICAgY29uc29sZS5sb2coJ0Nvbm5lY3RpbmcgdG8gUmVkaXMgdXNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzJyk7XG4gICAgcmVkaXNDbGllbnQgPSBuZXcgUmVkaXMocmVkaXNPcHRpb25zKTtcbiAgICBcbiAgICByZWRpc0NsaWVudC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdSZWRpcyBjb25uZWN0aW9uIGVycm9yOicsIGVycik7XG4gICAgICBcbiAgICAgIC8vIE9ubHkgc2V0IHRvIG51bGwgaWYgd2UndmUgZXhjZWVkZWQgbWF4IGF0dGVtcHRzXG4gICAgICBpZiAoY29ubmVjdGlvbkF0dGVtcHRzID4gTUFYX1JFQ09OTkVDVF9BVFRFTVBUUykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdSZWRpcyBjb25uZWN0aW9uIGZhaWxlZCBwZXJtYW5lbnRseSwgd2lsbCBjcmVhdGUgbmV3IGNsaWVudCBvbiBuZXh0IHJlcXVlc3QnKTtcbiAgICAgICAgcmVkaXNDbGllbnQgPSBudWxsO1xuICAgICAgICBpc0Nvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICByZWRpc0NsaWVudC5vbignY29ubmVjdCcsICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRvIFJlZGlzJyk7XG4gICAgICBpc0Nvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgIGNvbm5lY3Rpb25BdHRlbXB0cyA9IDA7XG4gICAgfSk7XG4gICAgXG4gICAgcmVkaXNDbGllbnQub24oJ3JlY29ubmVjdGluZycsICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdSZWNvbm5lY3RpbmcgdG8gUmVkaXMuLi4nKTtcbiAgICAgIGlzQ29ubmVjdGluZyA9IHRydWU7XG4gICAgfSk7XG4gICAgXG4gICAgcmVkaXNDbGllbnQub24oJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ1JlZGlzIGNvbm5lY3Rpb24gd2FybWVkIHVwJyk7XG4gICAgICBpc0Nvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICB9KTtcbiAgICBcbiAgICByZWRpc0NsaWVudC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ1JlZGlzIGNvbm5lY3Rpb24gZW5kZWQnKTtcbiAgICAgIC8vIERvbid0IHNldCB0byBudWxsIGhlcmUgLSBsZXQgdGhlIGVycm9yIGhhbmRsZXIgZGVjaWRlXG4gICAgfSk7XG4gIH1cbiAgXG4gIHJldHVybiByZWRpc0NsaWVudDtcbn1cblxuLyoqXG4gKiBDbG9zZSBSZWRpcyBjb25uZWN0aW9uICh1c2VmdWwgZm9yIHNlcnZlcmxlc3MgZW52aXJvbm1lbnRzKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xvc2VSZWRpc0Nvbm5lY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChyZWRpc0NsaWVudCkge1xuICAgIGF3YWl0IHJlZGlzQ2xpZW50LnF1aXQoKTtcbiAgICByZWRpc0NsaWVudCA9IG51bGw7XG4gIH1cbn1cblxuLy8gRW5jcnlwdGlvbiBrZXkgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZSBvciBmYWxsYmFja1xuY29uc3QgZ2V0RW5jcnlwdGlvbktleSA9ICgpID0+IHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LlJFRElTX0VOQ1JZUFRJT05fS0VZIHx8ICdkZWZhdWx0LWVuY3J5cHRpb24ta2V5LWNoYW5nZS1pbi1wcm9kdWN0aW9uJztcbn07XG5cbi8qKlxuICogRW5jcnlwdCBzZW5zaXRpdmUgZGF0YSBiZWZvcmUgc3RvcmluZyBpbiBSZWRpc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdERhdGEoZGF0YTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KGRhdGEsIGdldEVuY3J5cHRpb25LZXkoKSkudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBEZWNyeXB0IHNlbnNpdGl2ZSBkYXRhIHJldHJpZXZlZCBmcm9tIFJlZGlzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNyeXB0RGF0YShlbmNyeXB0ZWREYXRhOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBieXRlcyA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KGVuY3J5cHRlZERhdGEsIGdldEVuY3J5cHRpb25LZXkoKSk7XG4gIHJldHVybiBieXRlcy50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XG59XG5cbi8vIENhY2hlIGtleSBkZWZpbml0aW9uc1xuZXhwb3J0IGNvbnN0IEtFWVMgPSB7XG4gIENSRURFTlRJQUxTOiAodXNlcklkOiBzdHJpbmcsIGFjY291bnRJZDogc3RyaW5nKSA9PiBgZW1haWw6Y3JlZGVudGlhbHM6JHt1c2VySWR9OiR7YWNjb3VudElkfWAsXG4gIFNFU1NJT046ICh1c2VySWQ6IHN0cmluZykgPT4gYGVtYWlsOnNlc3Npb246JHt1c2VySWR9YCxcbiAgRU1BSUxfTElTVDogKHVzZXJJZDogc3RyaW5nLCBhY2NvdW50SWQ6IHN0cmluZywgZm9sZGVyOiBzdHJpbmcsIHBhZ2U6IG51bWJlciwgcGVyUGFnZTogbnVtYmVyKSA9PiBcbiAgICBgZW1haWw6bGlzdDoke3VzZXJJZH06JHthY2NvdW50SWR9OiR7Zm9sZGVyfToke3BhZ2V9OiR7cGVyUGFnZX1gLFxuICBFTUFJTF9DT05URU5UOiAodXNlcklkOiBzdHJpbmcsIGFjY291bnRJZDogc3RyaW5nLCBlbWFpbElkOiBzdHJpbmcpID0+IFxuICAgIGBlbWFpbDpjb250ZW50OiR7dXNlcklkfToke2FjY291bnRJZH06JHtlbWFpbElkfWBcbn07XG5cbi8vIFRUTCBjb25zdGFudHMgaW4gc2Vjb25kc1xuZXhwb3J0IGNvbnN0IFRUTCA9IHtcbiAgQ1JFREVOVElBTFM6IDYwICogNjAgKiAyNCwgLy8gMjQgaG91cnNcbiAgU0VTU0lPTjogNjAgKiA2MCAqIDQsICAgICAgLy8gNCBob3VycyAoaW5jcmVhc2VkIGZyb20gMzAgbWludXRlcylcbiAgRU1BSUxfTElTVDogNjAgKiA1LCAgICAgICAgLy8gNSBtaW51dGVzXG4gIEVNQUlMX0NPTlRFTlQ6IDYwICogMTUgICAgIC8vIDE1IG1pbnV0ZXNcbn07XG5cbmludGVyZmFjZSBFbWFpbENyZWRlbnRpYWxzIHtcbiAgZW1haWw6IHN0cmluZztcbiAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIGhvc3Q6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xuICBzZWN1cmU/OiBib29sZWFuO1xuICBlbmNyeXB0ZWRQYXNzd29yZD86IHN0cmluZztcbiAgc210cF9ob3N0Pzogc3RyaW5nO1xuICBzbXRwX3BvcnQ/OiBudW1iZXI7XG4gIHNtdHBfc2VjdXJlPzogYm9vbGVhbjtcbiAgZGlzcGxheV9uYW1lPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbiAgdXNlT0F1dGg/OiBib29sZWFuO1xuICBhY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICB0b2tlbkV4cGlyeT86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEltYXBTZXNzaW9uRGF0YSB7XG4gIGNvbm5lY3Rpb25JZD86IHN0cmluZztcbiAgbGFzdEFjdGl2ZTogbnVtYmVyO1xuICBtYWlsYm94ZXM/OiBzdHJpbmdbXTtcbiAgbGFzdFZpc2l0PzogbnVtYmVyO1xuICBkZWZhdWx0QWNjb3VudElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENhY2hlIGVtYWlsIGNyZWRlbnRpYWxzIGluIFJlZGlzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYWNoZUVtYWlsQ3JlZGVudGlhbHMoXG4gIHVzZXJJZDogc3RyaW5nLFxuICBhY2NvdW50SWQ6IHN0cmluZyxcbiAgY3JlZGVudGlhbHM6IEVtYWlsQ3JlZGVudGlhbHNcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZWRpcyA9IGdldFJlZGlzQ2xpZW50KCk7XG4gIGNvbnN0IGtleSA9IEtFWVMuQ1JFREVOVElBTFModXNlcklkLCBhY2NvdW50SWQpO1xuICBcbiAgLy8gVmFsaWRhdGUgY3JlZGVudGlhbHMgYmVmb3JlIGNhY2hpbmdcbiAgaWYgKCFjcmVkZW50aWFscy5lbWFpbCB8fCAhY3JlZGVudGlhbHMuaG9zdCB8fCAoIWNyZWRlbnRpYWxzLnBhc3N3b3JkICYmICFjcmVkZW50aWFscy51c2VPQXV0aCkpIHtcbiAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgY2FjaGUgaW5jb21wbGV0ZSBjcmVkZW50aWFscyBmb3IgdXNlciAke3VzZXJJZH1gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgXG4gIHRyeSB7XG4gICAgY29uc29sZS5sb2coYENhY2hpbmcgY3JlZGVudGlhbHMgZm9yIHVzZXIgJHt1c2VySWR9YCk7XG4gICAgXG4gICAgLy8gQ3JlYXRlIGEgY29weSB3aXRob3V0IHRoZSBwYXNzd29yZCB0byBzdG9yZVxuICAgIGNvbnN0IHNlY3VyZUNyZWRlbnRpYWxzOiBFbWFpbENyZWRlbnRpYWxzID0ge1xuICAgICAgZW1haWw6IGNyZWRlbnRpYWxzLmVtYWlsLFxuICAgICAgaG9zdDogY3JlZGVudGlhbHMuaG9zdCxcbiAgICAgIHBvcnQ6IGNyZWRlbnRpYWxzLnBvcnQsXG4gICAgICBzZWN1cmU6IGNyZWRlbnRpYWxzLnNlY3VyZSA/PyB0cnVlLFxuICAgICAgLy8gSW5jbHVkZSB0aGUgZXh0ZW5kZWQgZmllbGRzXG4gICAgICAuLi4oY3JlZGVudGlhbHMuc210cF9ob3N0ICYmIHsgc210cF9ob3N0OiBjcmVkZW50aWFscy5zbXRwX2hvc3QgfSksXG4gICAgICAuLi4oY3JlZGVudGlhbHMuc210cF9wb3J0ICYmIHsgc210cF9wb3J0OiBjcmVkZW50aWFscy5zbXRwX3BvcnQgfSksXG4gICAgICAuLi4oY3JlZGVudGlhbHMuc210cF9zZWN1cmUgIT09IHVuZGVmaW5lZCAmJiB7IHNtdHBfc2VjdXJlOiBjcmVkZW50aWFscy5zbXRwX3NlY3VyZSB9KSxcbiAgICAgIC4uLihjcmVkZW50aWFscy5kaXNwbGF5X25hbWUgJiYgeyBkaXNwbGF5X25hbWU6IGNyZWRlbnRpYWxzLmRpc3BsYXlfbmFtZSB9KSxcbiAgICAgIC4uLihjcmVkZW50aWFscy5jb2xvciAmJiB7IGNvbG9yOiBjcmVkZW50aWFscy5jb2xvciB9KSxcbiAgICAgIC8vIEluY2x1ZGUgT0F1dGggZmllbGRzXG4gICAgICAuLi4oY3JlZGVudGlhbHMudXNlT0F1dGggIT09IHVuZGVmaW5lZCAmJiB7IHVzZU9BdXRoOiBjcmVkZW50aWFscy51c2VPQXV0aCB9KSxcbiAgICAgIC4uLihjcmVkZW50aWFscy5hY2Nlc3NUb2tlbiAmJiB7IGFjY2Vzc1Rva2VuOiBjcmVkZW50aWFscy5hY2Nlc3NUb2tlbiB9KSxcbiAgICAgIC4uLihjcmVkZW50aWFscy5yZWZyZXNoVG9rZW4gJiYgeyByZWZyZXNoVG9rZW46IGNyZWRlbnRpYWxzLnJlZnJlc2hUb2tlbiB9KSxcbiAgICAgIC4uLihjcmVkZW50aWFscy50b2tlbkV4cGlyeSAmJiB7IHRva2VuRXhwaXJ5OiBjcmVkZW50aWFscy50b2tlbkV4cGlyeSB9KVxuICAgIH07XG4gICAgXG4gICAgLy8gRW5jcnlwdCBwYXNzd29yZCBpZiBwcm92aWRlZFxuICAgIGlmIChjcmVkZW50aWFscy5wYXNzd29yZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZW5jcnlwdGVkID0gZW5jcnlwdERhdGEoY3JlZGVudGlhbHMucGFzc3dvcmQpO1xuICAgICAgICBjb25zb2xlLmxvZyhgU3VjY2Vzc2Z1bGx5IGVuY3J5cHRlZCBwYXNzd29yZCBmb3IgdXNlciAke3VzZXJJZH1gKTtcbiAgICAgICAgc2VjdXJlQ3JlZGVudGlhbHMuZW5jcnlwdGVkUGFzc3dvcmQgPSBlbmNyeXB0ZWQ7XG4gICAgICB9IGNhdGNoIChlbmNyeXB0RXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGVuY3J5cHQgcGFzc3dvcmQgZm9yIHVzZXIgJHt1c2VySWR9OmAsIGVuY3J5cHRFcnJvcik7XG4gICAgICAgIC8vIENvbnRpbnVlIGFueXdheSBzaW5jZSB3ZSBtaWdodCBoYXZlIE9BdXRoIHRva2Vuc1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBhd2FpdCByZWRpcy5zZXQoa2V5LCBKU09OLnN0cmluZ2lmeShzZWN1cmVDcmVkZW50aWFscyksICdFWCcsIFRUTC5DUkVERU5USUFMUyk7XG4gICAgY29uc29sZS5sb2coYENyZWRlbnRpYWxzIGNhY2hlZCBmb3IgdXNlciAke3VzZXJJZH1gKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGBFcnJvciBjYWNoaW5nIGNyZWRlbnRpYWxzIGZvciB1c2VyICR7dXNlcklkfTpgLCBlcnJvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgZW1haWwgY3JlZGVudGlhbHMgZnJvbSBSZWRpc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RW1haWxDcmVkZW50aWFscyhcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGFjY291bnRJZDogc3RyaW5nXG4pOiBQcm9taXNlPEVtYWlsQ3JlZGVudGlhbHMgfCBudWxsPiB7XG4gIGNvbnN0IHJlZGlzID0gZ2V0UmVkaXNDbGllbnQoKTtcbiAgY29uc3Qga2V5ID0gS0VZUy5DUkVERU5USUFMUyh1c2VySWQsIGFjY291bnRJZCk7XG4gIFxuICB0cnkge1xuICAgIGNvbnN0IGNyZWRTdHIgPSBhd2FpdCByZWRpcy5nZXQoa2V5KTtcbiAgICBcbiAgICBpZiAoIWNyZWRTdHIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBjcmVkcyA9IEpTT04ucGFyc2UoY3JlZFN0cikgYXMgRW1haWxDcmVkZW50aWFscztcbiAgICBcbiAgICBsZXQgcGFzc3dvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBcbiAgICAvLyBIYW5kbGUgT0F1dGggYWNjb3VudHMgKHRoZXkgbWlnaHQgbm90IGhhdmUgYSBwYXNzd29yZClcbiAgICBpZiAoY3JlZHMuZW5jcnlwdGVkUGFzc3dvcmQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIERlY3J5cHQgdGhlIHBhc3N3b3JkXG4gICAgICAgIHBhc3N3b3JkID0gZGVjcnlwdERhdGEoY3JlZHMuZW5jcnlwdGVkUGFzc3dvcmQpO1xuICAgICAgfSBjYXRjaCAoZGVjcnlwdEVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBkZWNyeXB0IHBhc3N3b3JkIGZvciB1c2VyICR7dXNlcklkfTpgLCBkZWNyeXB0RXJyb3IpO1xuICAgICAgICAvLyBGb3IgT0F1dGggYWNjb3VudHMsIHdlIGNhbiBjb250aW51ZSB3aXRob3V0IGEgcGFzc3dvcmRcbiAgICAgICAgaWYgKCFjcmVkcy51c2VPQXV0aCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFJldHVybiB0aGUgZnVsbCBjcmVkZW50aWFscyB3aXRoIGRlY3J5cHRlZCBwYXNzd29yZCBpZiBhdmFpbGFibGVcbiAgICBjb25zdCByZXN1bHQ6IEVtYWlsQ3JlZGVudGlhbHMgPSB7XG4gICAgICBlbWFpbDogY3JlZHMuZW1haWwsXG4gICAgICBob3N0OiBjcmVkcy5ob3N0LFxuICAgICAgcG9ydDogY3JlZHMucG9ydCxcbiAgICAgIHNlY3VyZTogY3JlZHMuc2VjdXJlID8/IHRydWUsXG4gICAgICAuLi4ocGFzc3dvcmQgJiYgeyBwYXNzd29yZCB9KSxcbiAgICAgIC4uLihjcmVkcy5zbXRwX2hvc3QgJiYgeyBzbXRwX2hvc3Q6IGNyZWRzLnNtdHBfaG9zdCB9KSxcbiAgICAgIC4uLihjcmVkcy5zbXRwX3BvcnQgJiYgeyBzbXRwX3BvcnQ6IGNyZWRzLnNtdHBfcG9ydCB9KSxcbiAgICAgIC4uLihjcmVkcy5zbXRwX3NlY3VyZSAhPT0gdW5kZWZpbmVkICYmIHsgc210cF9zZWN1cmU6IGNyZWRzLnNtdHBfc2VjdXJlIH0pLFxuICAgICAgLi4uKGNyZWRzLmRpc3BsYXlfbmFtZSAmJiB7IGRpc3BsYXlfbmFtZTogY3JlZHMuZGlzcGxheV9uYW1lIH0pLFxuICAgICAgLi4uKGNyZWRzLmNvbG9yICYmIHsgY29sb3I6IGNyZWRzLmNvbG9yIH0pLFxuICAgICAgLy8gSW5jbHVkZSBPQXV0aCBmaWVsZHNcbiAgICAgIC4uLihjcmVkcy51c2VPQXV0aCAhPT0gdW5kZWZpbmVkICYmIHsgdXNlT0F1dGg6IGNyZWRzLnVzZU9BdXRoIH0pLFxuICAgICAgLi4uKGNyZWRzLmFjY2Vzc1Rva2VuICYmIHsgYWNjZXNzVG9rZW46IGNyZWRzLmFjY2Vzc1Rva2VuIH0pLFxuICAgICAgLi4uKGNyZWRzLnJlZnJlc2hUb2tlbiAmJiB7IHJlZnJlc2hUb2tlbjogY3JlZHMucmVmcmVzaFRva2VuIH0pLFxuICAgICAgLi4uKGNyZWRzLnRva2VuRXhwaXJ5ICYmIHsgdG9rZW5FeHBpcnk6IGNyZWRzLnRva2VuRXhwaXJ5IH0pXG4gICAgfTtcbiAgICBcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGdldHRpbmcgY3JlZGVudGlhbHMgZm9yIHVzZXIgJHt1c2VySWR9OmAsIGVycm9yKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIENhY2hlIElNQVAgc2Vzc2lvbiBkYXRhIGZvciBxdWljayByZWNvbm5lY3Rpb25cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhY2hlSW1hcFNlc3Npb24oXG4gIHVzZXJJZDogc3RyaW5nLFxuICBzZXNzaW9uRGF0YTogSW1hcFNlc3Npb25EYXRhXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVkaXMgPSBnZXRSZWRpc0NsaWVudCgpO1xuICBjb25zdCBrZXkgPSBLRVlTLlNFU1NJT04odXNlcklkKTtcbiAgXG4gIC8vIEFsd2F5cyB1cGRhdGUgdGhlIGxhc3RBY3RpdmUgdGltZXN0YW1wXG4gIHNlc3Npb25EYXRhLmxhc3RBY3RpdmUgPSBEYXRlLm5vdygpO1xuICBcbiAgYXdhaXQgcmVkaXMuc2V0KGtleSwgSlNPTi5zdHJpbmdpZnkoc2Vzc2lvbkRhdGEpLCAnRVgnLCBUVEwuU0VTU0lPTik7XG59XG5cbi8qKlxuICogR2V0IGNhY2hlZCBJTUFQIHNlc3Npb24gZGF0YVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2FjaGVkSW1hcFNlc3Npb24oXG4gIHVzZXJJZDogc3RyaW5nXG4pOiBQcm9taXNlPEltYXBTZXNzaW9uRGF0YSB8IG51bGw+IHtcbiAgY29uc3QgcmVkaXMgPSBnZXRSZWRpc0NsaWVudCgpO1xuICBjb25zdCBrZXkgPSBLRVlTLlNFU1NJT04odXNlcklkKTtcbiAgXG4gIGNvbnN0IGNhY2hlZERhdGEgPSBhd2FpdCByZWRpcy5nZXQoa2V5KTtcbiAgaWYgKCFjYWNoZWREYXRhKSByZXR1cm4gbnVsbDtcbiAgXG4gIHJldHVybiBKU09OLnBhcnNlKGNhY2hlZERhdGEpIGFzIEltYXBTZXNzaW9uRGF0YTtcbn1cblxuLyoqXG4gKiBDYWNoZSBlbWFpbCBsaXN0IGluIFJlZGlzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYWNoZUVtYWlsTGlzdChcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGFjY291bnRJZDogc3RyaW5nLFxuICBmb2xkZXI6IHN0cmluZyxcbiAgcGFnZTogbnVtYmVyLFxuICBwZXJQYWdlOiBudW1iZXIsXG4gIGRhdGE6IGFueVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlZGlzID0gZ2V0UmVkaXNDbGllbnQoKTtcbiAgY29uc3Qga2V5ID0gS0VZUy5FTUFJTF9MSVNUKHVzZXJJZCwgYWNjb3VudElkLCBmb2xkZXIsIHBhZ2UsIHBlclBhZ2UpO1xuICBcbiAgYXdhaXQgcmVkaXMuc2V0KGtleSwgSlNPTi5zdHJpbmdpZnkoZGF0YSksICdFWCcsIFRUTC5FTUFJTF9MSVNUKTtcbn1cblxuLyoqXG4gKiBHZXQgY2FjaGVkIGVtYWlsIGxpc3QgZnJvbSBSZWRpc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2FjaGVkRW1haWxMaXN0KFxuICB1c2VySWQ6IHN0cmluZyxcbiAgYWNjb3VudElkOiBzdHJpbmcsXG4gIGZvbGRlcjogc3RyaW5nLFxuICBwYWdlOiBudW1iZXIsXG4gIHBlclBhZ2U6IG51bWJlclxuKTogUHJvbWlzZTxhbnkgfCBudWxsPiB7XG4gIGNvbnN0IHJlZGlzID0gZ2V0UmVkaXNDbGllbnQoKTtcbiAgY29uc3Qga2V5ID0gS0VZUy5FTUFJTF9MSVNUKHVzZXJJZCwgYWNjb3VudElkLCBmb2xkZXIsIHBhZ2UsIHBlclBhZ2UpO1xuICBcbiAgY29uc3QgY2FjaGVkRGF0YSA9IGF3YWl0IHJlZGlzLmdldChrZXkpO1xuICBpZiAoIWNhY2hlZERhdGEpIHJldHVybiBudWxsO1xuICBcbiAgcmV0dXJuIEpTT04ucGFyc2UoY2FjaGVkRGF0YSk7XG59XG5cbi8qKlxuICogQ2FjaGUgZW1haWwgY29udGVudCBpbiBSZWRpc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2FjaGVFbWFpbENvbnRlbnQoXG4gIHVzZXJJZDogc3RyaW5nLFxuICBhY2NvdW50SWQ6IHN0cmluZyxcbiAgZW1haWxJZDogc3RyaW5nLFxuICBkYXRhOiBhbnlcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZWRpcyA9IGdldFJlZGlzQ2xpZW50KCk7XG4gIGNvbnN0IGtleSA9IEtFWVMuRU1BSUxfQ09OVEVOVCh1c2VySWQsIGFjY291bnRJZCwgZW1haWxJZCk7XG4gIFxuICBhd2FpdCByZWRpcy5zZXQoa2V5LCBKU09OLnN0cmluZ2lmeShkYXRhKSwgJ0VYJywgVFRMLkVNQUlMX0NPTlRFTlQpO1xufVxuXG4vKipcbiAqIEdldCBjYWNoZWQgZW1haWwgY29udGVudCBmcm9tIFJlZGlzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDYWNoZWRFbWFpbENvbnRlbnQoXG4gIHVzZXJJZDogc3RyaW5nLFxuICBhY2NvdW50SWQ6IHN0cmluZyxcbiAgZW1haWxJZDogc3RyaW5nXG4pOiBQcm9taXNlPGFueSB8IG51bGw+IHtcbiAgY29uc3QgcmVkaXMgPSBnZXRSZWRpc0NsaWVudCgpO1xuICBjb25zdCBrZXkgPSBLRVlTLkVNQUlMX0NPTlRFTlQodXNlcklkLCBhY2NvdW50SWQsIGVtYWlsSWQpO1xuICBcbiAgY29uc3QgY2FjaGVkRGF0YSA9IGF3YWl0IHJlZGlzLmdldChrZXkpO1xuICBpZiAoIWNhY2hlZERhdGEpIHJldHVybiBudWxsO1xuICBcbiAgcmV0dXJuIEpTT04ucGFyc2UoY2FjaGVkRGF0YSk7XG59XG5cbi8qKlxuICogSW52YWxpZGF0ZSBhbGwgZW1haWwgY2FjaGVzIGZvciBhIGZvbGRlclxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW52YWxpZGF0ZUZvbGRlckNhY2hlKFxuICB1c2VySWQ6IHN0cmluZyxcbiAgYWNjb3VudElkOiBzdHJpbmcsXG4gIGZvbGRlcjogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVkaXMgPSBnZXRSZWRpc0NsaWVudCgpO1xuICBjb25zdCBwYXR0ZXJuID0gYGVtYWlsOmxpc3Q6JHt1c2VySWR9OiR7YWNjb3VudElkfToke2ZvbGRlcn06KmA7XG4gIFxuICAvLyBVc2UgU0NBTiB0byBmaW5kIGFuZCBkZWxldGUga2V5cyBtYXRjaGluZyB0aGUgcGF0dGVyblxuICBsZXQgY3Vyc29yID0gJzAnO1xuICBkbyB7XG4gICAgY29uc3QgW25leHRDdXJzb3IsIGtleXNdID0gYXdhaXQgcmVkaXMuc2NhbihjdXJzb3IsICdNQVRDSCcsIHBhdHRlcm4sICdDT1VOVCcsIDEwMCk7XG4gICAgY3Vyc29yID0gbmV4dEN1cnNvcjtcbiAgICBcbiAgICBpZiAoa2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICBhd2FpdCByZWRpcy5kZWwoLi4ua2V5cyk7XG4gICAgfVxuICB9IHdoaWxlIChjdXJzb3IgIT09ICcwJyk7XG59XG5cbi8qKlxuICogSW52YWxpZGF0ZSBlbWFpbCBjb250ZW50IGNhY2hlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnZhbGlkYXRlRW1haWxDb250ZW50Q2FjaGUoXG4gIHVzZXJJZDogc3RyaW5nLFxuICBhY2NvdW50SWQ6IHN0cmluZyxcbiAgZW1haWxJZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVkaXMgPSBnZXRSZWRpc0NsaWVudCgpO1xuICBjb25zdCBrZXkgPSBLRVlTLkVNQUlMX0NPTlRFTlQodXNlcklkLCBhY2NvdW50SWQsIGVtYWlsSWQpO1xuICBcbiAgYXdhaXQgcmVkaXMuZGVsKGtleSk7XG59XG5cbi8qKlxuICogV2FybSB1cCBSZWRpcyBjb25uZWN0aW9uIHRvIGF2b2lkIGNvbGQgc3RhcnRzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YXJtdXBSZWRpc0NhY2hlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIC8vIFBpbmcgUmVkaXMgdG8gZXN0YWJsaXNoIGNvbm5lY3Rpb24gZWFybHlcbiAgICBjb25zdCByZWRpcyA9IGdldFJlZGlzQ2xpZW50KCk7XG4gICAgYXdhaXQgcmVkaXMucGluZygpO1xuICAgIGNvbnNvbGUubG9nKCdSZWRpcyBjb25uZWN0aW9uIHdhcm1lZCB1cCcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdhcm1pbmcgdXAgUmVkaXM6JywgZXJyb3IpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCBSZWRpcyBjb25uZWN0aW9uIHN0YXR1c1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UmVkaXNTdGF0dXMoKTogUHJvbWlzZTx7XG4gIHN0YXR1czogJ2Nvbm5lY3RlZCcgfCAnZXJyb3InO1xuICBwaW5nPzogc3RyaW5nO1xuICBlcnJvcj86IHN0cmluZztcbn0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZWRpcyA9IGdldFJlZGlzQ2xpZW50KCk7XG4gICAgY29uc3QgcG9uZyA9IGF3YWl0IHJlZGlzLnBpbmcoKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiAnY29ubmVjdGVkJyxcbiAgICAgIHBpbmc6IHBvbmdcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEludmFsaWRhdGUgYWxsIHVzZXIgZW1haWwgY2FjaGVzIChlbWFpbCBsaXN0cyBhbmQgY29udGVudClcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGludmFsaWRhdGVVc2VyRW1haWxDYWNoZShcbiAgdXNlcklkOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZWRpcyA9IGdldFJlZGlzQ2xpZW50KCk7XG4gIFxuICAvLyBQYXR0ZXJucyB0byBkZWxldGVcbiAgY29uc3QgcGF0dGVybnMgPSBbXG4gICAgYGVtYWlsOmxpc3Q6JHt1c2VySWR9OipgLFxuICAgIGBlbWFpbDpjb250ZW50OiR7dXNlcklkfToqYFxuICBdO1xuICBcbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgbGV0IGN1cnNvciA9ICcwJztcbiAgICBkbyB7XG4gICAgICBjb25zdCBbbmV4dEN1cnNvciwga2V5c10gPSBhd2FpdCByZWRpcy5zY2FuKGN1cnNvciwgJ01BVENIJywgcGF0dGVybiwgJ0NPVU5UJywgMTAwKTtcbiAgICAgIGN1cnNvciA9IG5leHRDdXJzb3I7XG4gICAgICBcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYXdhaXQgcmVkaXMuZGVsKC4uLmtleXMpO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKGN1cnNvciAhPT0gJzAnKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCBjYWNoZWQgZW1haWwgY3JlZGVudGlhbHMgZnJvbSBSZWRpc1xuICogQGRlcHJlY2F0ZWQgVXNlIGdldEVtYWlsQ3JlZGVudGlhbHMgaW5zdGVhZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2FjaGVkRW1haWxDcmVkZW50aWFscyhcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGFjY291bnRJZDogc3RyaW5nXG4pOiBQcm9taXNlPEVtYWlsQ3JlZGVudGlhbHMgfCBudWxsPiB7XG4gIHJldHVybiBnZXRFbWFpbENyZWRlbnRpYWxzKHVzZXJJZCwgYWNjb3VudElkKTtcbn0gIl0sIm5hbWVzIjpbIlJlZGlzIiwiQ3J5cHRvSlMiLCJyZWRpc0NsaWVudCIsImlzQ29ubmVjdGluZyIsImNvbm5lY3Rpb25BdHRlbXB0cyIsIk1BWF9SRUNPTk5FQ1RfQVRURU1QVFMiLCJnZXRSZWRpc0NsaWVudCIsInN0YXR1cyIsImNvbnNvbGUiLCJ3YXJuIiwicmVkaXNPcHRpb25zIiwiaG9zdCIsInByb2Nlc3MiLCJlbnYiLCJSRURJU19IT1NUIiwicG9ydCIsIlJFRElTX1BPUlQiLCJwYXJzZUludCIsInVuZGVmaW5lZCIsInBhc3N3b3JkIiwiUkVESVNfUEFTU1dPUkQiLCJyZXRyeVN0cmF0ZWd5IiwidGltZXMiLCJlcnJvciIsImRlbGF5IiwiTWF0aCIsIm1pbiIsImxvZyIsIm1heFJldHJpZXNQZXJSZXF1ZXN0IiwiZW5hYmxlT2ZmbGluZVF1ZXVlIiwiY29ubmVjdFRpbWVvdXQiLCJkaXNjb25uZWN0VGltZW91dCIsImtlZXBBbGl2ZSIsImtleVByZWZpeCIsIm9uIiwiZXJyIiwiY2xvc2VSZWRpc0Nvbm5lY3Rpb24iLCJxdWl0IiwiZ2V0RW5jcnlwdGlvbktleSIsIlJFRElTX0VOQ1JZUFRJT05fS0VZIiwiZW5jcnlwdERhdGEiLCJkYXRhIiwiQUVTIiwiZW5jcnlwdCIsInRvU3RyaW5nIiwiZGVjcnlwdERhdGEiLCJlbmNyeXB0ZWREYXRhIiwiYnl0ZXMiLCJkZWNyeXB0IiwiZW5jIiwiVXRmOCIsIktFWVMiLCJDUkVERU5USUFMUyIsInVzZXJJZCIsImFjY291bnRJZCIsIlNFU1NJT04iLCJFTUFJTF9MSVNUIiwiZm9sZGVyIiwicGFnZSIsInBlclBhZ2UiLCJFTUFJTF9DT05URU5UIiwiZW1haWxJZCIsIlRUTCIsImNhY2hlRW1haWxDcmVkZW50aWFscyIsImNyZWRlbnRpYWxzIiwicmVkaXMiLCJrZXkiLCJlbWFpbCIsInVzZU9BdXRoIiwic2VjdXJlQ3JlZGVudGlhbHMiLCJzZWN1cmUiLCJzbXRwX2hvc3QiLCJzbXRwX3BvcnQiLCJzbXRwX3NlY3VyZSIsImRpc3BsYXlfbmFtZSIsImNvbG9yIiwiYWNjZXNzVG9rZW4iLCJyZWZyZXNoVG9rZW4iLCJ0b2tlbkV4cGlyeSIsImVuY3J5cHRlZCIsImVuY3J5cHRlZFBhc3N3b3JkIiwiZW5jcnlwdEVycm9yIiwic2V0IiwiSlNPTiIsInN0cmluZ2lmeSIsImdldEVtYWlsQ3JlZGVudGlhbHMiLCJjcmVkU3RyIiwiZ2V0IiwiY3JlZHMiLCJwYXJzZSIsImRlY3J5cHRFcnJvciIsInJlc3VsdCIsImNhY2hlSW1hcFNlc3Npb24iLCJzZXNzaW9uRGF0YSIsImxhc3RBY3RpdmUiLCJEYXRlIiwibm93IiwiZ2V0Q2FjaGVkSW1hcFNlc3Npb24iLCJjYWNoZWREYXRhIiwiY2FjaGVFbWFpbExpc3QiLCJnZXRDYWNoZWRFbWFpbExpc3QiLCJjYWNoZUVtYWlsQ29udGVudCIsImdldENhY2hlZEVtYWlsQ29udGVudCIsImludmFsaWRhdGVGb2xkZXJDYWNoZSIsInBhdHRlcm4iLCJjdXJzb3IiLCJuZXh0Q3Vyc29yIiwia2V5cyIsInNjYW4iLCJsZW5ndGgiLCJkZWwiLCJpbnZhbGlkYXRlRW1haWxDb250ZW50Q2FjaGUiLCJ3YXJtdXBSZWRpc0NhY2hlIiwicGluZyIsImdldFJlZGlzU3RhdHVzIiwicG9uZyIsIkVycm9yIiwibWVzc2FnZSIsIlN0cmluZyIsImludmFsaWRhdGVVc2VyRW1haWxDYWNoZSIsInBhdHRlcm5zIiwiZ2V0Q2FjaGVkRW1haWxDcmVkZW50aWFscyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./lib/redis.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js?name=app%2Fcourrier%2Fpage&page=%2Fcourrier%2Fpage&appPaths=%2Fcourrier%2Fpage&pagePath=private-next-app-dir%2Fcourrier%2Fpage.tsx&appDir=%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Falma%2Fnextgen%2FNeah-mail&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!":
|
|
/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
|
|
!*** ./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js?name=app%2Fcourrier%2Fpage&page=%2Fcourrier%2Fpage&appPaths=%2Fcourrier%2Fpage&pagePath=private-next-app-dir%2Fcourrier%2Fpage.tsx&appDir=%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Falma%2Fnextgen%2FNeah-mail&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D! ***!
|
|
\********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GlobalError: () => (/* reexport default from dynamic */ next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2___default.a),\n/* harmony export */ __next_app__: () => (/* binding */ __next_app__),\n/* harmony export */ pages: () => (/* binding */ pages),\n/* harmony export */ routeModule: () => (/* binding */ routeModule),\n/* harmony export */ tree: () => (/* binding */ tree)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/route-modules/app-page/module.compiled */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/module.compiled.js?cc4a\");\n/* harmony import */ var next_dist_server_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/route-kind */ \"(rsc)/./node_modules/next/dist/server/route-kind.js\");\n/* harmony import */ var next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/client/components/error-boundary */ \"(rsc)/./node_modules/next/dist/client/components/error-boundary.js\");\n/* harmony import */ var next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/dist/server/app-render/entry-base */ \"(rsc)/./node_modules/next/dist/server/app-render/entry-base.js\");\n/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__) if([\"default\",\"tree\",\"pages\",\"GlobalError\",\"__next_app__\",\"routeModule\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\nconst module0 = () => Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/layout.tsx */ \"(rsc)/./app/layout.tsx\"));\nconst module1 = () => Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! next/dist/client/components/not-found-error */ \"(rsc)/./node_modules/next/dist/client/components/not-found-error.js\", 23));\nconst module2 = () => Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! next/dist/client/components/forbidden-error */ \"(rsc)/./node_modules/next/dist/client/components/forbidden-error.js\", 23));\nconst module3 = () => Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! next/dist/client/components/unauthorized-error */ \"(rsc)/./node_modules/next/dist/client/components/unauthorized-error.js\", 23));\nconst module4 = () => Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/courrier/layout.tsx */ \"(rsc)/./app/courrier/layout.tsx\"));\nconst page5 = () => Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/courrier/page.tsx */ \"(rsc)/./app/courrier/page.tsx\"));\n\n\n// We inject the tree and pages here so that we can use them in the route\n// module.\nconst tree = {\n children: [\n '',\n {\n children: [\n 'courrier',\n {\n children: ['__PAGE__', {}, {\n page: [page5, \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\"],\n \n }]\n },\n {\n 'layout': [module4, \"/home/alma/nextgen/Neah-mail/app/courrier/layout.tsx\"],\n \n }\n ]\n },\n {\n 'layout': [module0, \"/home/alma/nextgen/Neah-mail/app/layout.tsx\"],\n'not-found': [module1, \"next/dist/client/components/not-found-error\"],\n'forbidden': [module2, \"next/dist/client/components/forbidden-error\"],\n'unauthorized': [module3, \"next/dist/client/components/unauthorized-error\"],\n \n }\n ]\n }.children;\nconst pages = [\"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\"];\n\n\nconst __next_app_require__ = __webpack_require__\nconst __next_app_load_chunk__ = () => Promise.resolve()\nconst __next_app__ = {\n require: __next_app_require__,\n loadChunk: __next_app_load_chunk__\n};\n\n// Create and export the route module that will be consumed.\nconst routeModule = new next_dist_server_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__.AppPageRouteModule({\n definition: {\n kind: next_dist_server_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.APP_PAGE,\n page: \"/courrier/page\",\n pathname: \"/courrier\",\n // The following aren't used in production.\n bundlePath: '',\n filename: '',\n appPaths: []\n },\n userland: {\n loaderTree: tree\n }\n});\n\n//# sourceMappingURL=app-page.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWFwcC1sb2FkZXIvaW5kZXguanM/bmFtZT1hcHAlMkZjb3VycmllciUyRnBhZ2UmcGFnZT0lMkZjb3VycmllciUyRnBhZ2UmYXBwUGF0aHM9JTJGY291cnJpZXIlMkZwYWdlJnBhZ2VQYXRoPXByaXZhdGUtbmV4dC1hcHAtZGlyJTJGY291cnJpZXIlMkZwYWdlLnRzeCZhcHBEaXI9JTJGaG9tZSUyRmFsbWElMkZuZXh0Z2VuJTJGTmVhaC1tYWlsJTJGYXBwJnBhZ2VFeHRlbnNpb25zPXRzeCZwYWdlRXh0ZW5zaW9ucz10cyZwYWdlRXh0ZW5zaW9ucz1qc3gmcGFnZUV4dGVuc2lvbnM9anMmcm9vdERpcj0lMkZob21lJTJGYWxtYSUyRm5leHRnZW4lMkZOZWFoLW1haWwmaXNEZXY9dHJ1ZSZ0c2NvbmZpZ1BhdGg9dHNjb25maWcuanNvbiZiYXNlUGF0aD0mYXNzZXRQcmVmaXg9Jm5leHRDb25maWdPdXRwdXQ9JnByZWZlcnJlZFJlZ2lvbj0mbWlkZGxld2FyZUNvbmZpZz1lMzAlM0QhIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNCQUFzQiw0SUFBZ0Y7QUFDdEcsc0JBQXNCLDBOQUFnRjtBQUN0RyxzQkFBc0IsME5BQWdGO0FBQ3RHLHNCQUFzQixnT0FBbUY7QUFDekcsc0JBQXNCLDhKQUF5RjtBQUMvRyxvQkFBb0IsMEpBQXVGO0FBR3pHO0FBR0E7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ3VCO0FBR3JCO0FBQ0YsNkJBQTZCLG1CQUFtQjtBQUNoRDtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBR0U7QUFDRjtBQUNPLHdCQUF3Qix1R0FBa0I7QUFDakQ7QUFDQSxjQUFjLGtFQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEIiwic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgbW9kdWxlMCA9ICgpID0+IGltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9hcHAvbGF5b3V0LnRzeFwiKTtcbmNvbnN0IG1vZHVsZTEgPSAoKSA9PiBpbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIm5leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9ub3QtZm91bmQtZXJyb3JcIik7XG5jb25zdCBtb2R1bGUyID0gKCkgPT4gaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCJuZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvZm9yYmlkZGVuLWVycm9yXCIpO1xuY29uc3QgbW9kdWxlMyA9ICgpID0+IGltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwibmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3VuYXV0aG9yaXplZC1lcnJvclwiKTtcbmNvbnN0IG1vZHVsZTQgPSAoKSA9PiBpbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvYXBwL2NvdXJyaWVyL2xheW91dC50c3hcIik7XG5jb25zdCBwYWdlNSA9ICgpID0+IGltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9hcHAvY291cnJpZXIvcGFnZS50c3hcIik7XG5pbXBvcnQgeyBBcHBQYWdlUm91dGVNb2R1bGUgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9yb3V0ZS1tb2R1bGVzL2FwcC1wYWdlL21vZHVsZS5jb21waWxlZFwiIHdpdGgge1xuICAgICd0dXJib3BhY2stdHJhbnNpdGlvbic6ICduZXh0LXNzcidcbn07XG5pbXBvcnQgeyBSb3V0ZUtpbmQgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9yb3V0ZS1raW5kXCIgd2l0aCB7XG4gICAgJ3R1cmJvcGFjay10cmFuc2l0aW9uJzogJ25leHQtc2VydmVyLXV0aWxpdHknXG59O1xuLy8gV2UgaW5qZWN0IHRoZSB0cmVlIGFuZCBwYWdlcyBoZXJlIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGluIHRoZSByb3V0ZVxuLy8gbW9kdWxlLlxuY29uc3QgdHJlZSA9IHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgJycsXG4gICAgICAgIHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgJ2NvdXJyaWVyJyxcbiAgICAgICAge1xuICAgICAgICBjaGlsZHJlbjogWydfX1BBR0VfXycsIHt9LCB7XG4gICAgICAgICAgcGFnZTogW3BhZ2U1LCBcIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvYXBwL2NvdXJyaWVyL3BhZ2UudHN4XCJdLFxuICAgICAgICAgIFxuICAgICAgICB9XVxuICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAnbGF5b3V0JzogW21vZHVsZTQsIFwiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9hcHAvY291cnJpZXIvbGF5b3V0LnRzeFwiXSxcbiAgICAgICAgXG4gICAgICB9XG4gICAgICBdXG4gICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICdsYXlvdXQnOiBbbW9kdWxlMCwgXCIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2FwcC9sYXlvdXQudHN4XCJdLFxuJ25vdC1mb3VuZCc6IFttb2R1bGUxLCBcIm5leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9ub3QtZm91bmQtZXJyb3JcIl0sXG4nZm9yYmlkZGVuJzogW21vZHVsZTIsIFwibmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2ZvcmJpZGRlbi1lcnJvclwiXSxcbid1bmF1dGhvcml6ZWQnOiBbbW9kdWxlMywgXCJuZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvdW5hdXRob3JpemVkLWVycm9yXCJdLFxuICAgICAgICBcbiAgICAgIH1cbiAgICAgIF1cbiAgICAgIH0uY2hpbGRyZW47XG5jb25zdCBwYWdlcyA9IFtcIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvYXBwL2NvdXJyaWVyL3BhZ2UudHN4XCJdO1xuZXhwb3J0IHsgdHJlZSwgcGFnZXMgfTtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2xvYmFsRXJyb3IgfSBmcm9tIFwibmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2Vycm9yLWJvdW5kYXJ5XCIgd2l0aCB7XG4gICAgJ3R1cmJvcGFjay10cmFuc2l0aW9uJzogJ25leHQtc2VydmVyLXV0aWxpdHknXG59O1xuY29uc3QgX19uZXh0X2FwcF9yZXF1aXJlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fXG5jb25zdCBfX25leHRfYXBwX2xvYWRfY2h1bmtfXyA9ICgpID0+IFByb21pc2UucmVzb2x2ZSgpXG5leHBvcnQgY29uc3QgX19uZXh0X2FwcF9fID0ge1xuICAgIHJlcXVpcmU6IF9fbmV4dF9hcHBfcmVxdWlyZV9fLFxuICAgIGxvYWRDaHVuazogX19uZXh0X2FwcF9sb2FkX2NodW5rX19cbn07XG5leHBvcnQgKiBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9hcHAtcmVuZGVyL2VudHJ5LWJhc2VcIiB3aXRoIHtcbiAgICAndHVyYm9wYWNrLXRyYW5zaXRpb24nOiAnbmV4dC1zZXJ2ZXItdXRpbGl0eSdcbn07XG4vLyBDcmVhdGUgYW5kIGV4cG9ydCB0aGUgcm91dGUgbW9kdWxlIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbmV4cG9ydCBjb25zdCByb3V0ZU1vZHVsZSA9IG5ldyBBcHBQYWdlUm91dGVNb2R1bGUoe1xuICAgIGRlZmluaXRpb246IHtcbiAgICAgICAga2luZDogUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBwYWdlOiBcIi9jb3Vycmllci9wYWdlXCIsXG4gICAgICAgIHBhdGhuYW1lOiBcIi9jb3VycmllclwiLFxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGFyZW4ndCB1c2VkIGluIHByb2R1Y3Rpb24uXG4gICAgICAgIGJ1bmRsZVBhdGg6ICcnLFxuICAgICAgICBmaWxlbmFtZTogJycsXG4gICAgICAgIGFwcFBhdGhzOiBbXVxuICAgIH0sXG4gICAgdXNlcmxhbmQ6IHtcbiAgICAgICAgbG9hZGVyVHJlZTogdHJlZVxuICAgIH1cbn0pO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHAtcGFnZS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js?name=app%2Fcourrier%2Fpage&page=%2Fcourrier%2Fpage&appPaths=%2Fcourrier%2Fpage&pagePath=private-next-app-dir%2Fcourrier%2Fpage.tsx&appDir=%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Falma%2Fnextgen%2FNeah-mail&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fapp%2Fcourrier%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true!":
|
|
/*!********************************************************************************************************************************************************************************************************************************!*\
|
|
!*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fapp%2Fcourrier%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***!
|
|
\********************************************************************************************************************************************************************************************************************************/
|
|
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/courrier/page.tsx */ \"(rsc)/./app/courrier/page.tsx\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRmFwcCUyRmNvdXJyaWVyJTJGcGFnZS50c3glMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0Qmc2VydmVyPXRydWUhIiwibWFwcGluZ3MiOiJBQUFBLDBKQUF1RiIsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9hcHAvY291cnJpZXIvcGFnZS50c3hcIik7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fapp%2Fcourrier%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true!\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fcomponents%2Flayout%2Flayout-wrapper.tsx%22%2C%22ids%22%3A%5B%22LayoutWrapper%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fcomponents%2Fproviders.tsx%22%2C%22ids%22%3A%5B%22Providers%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%5C%22path%5C%22%3A%5C%22app%2Flayout.tsx%5C%22%2C%5C%22import%5C%22%3A%5C%22Inter%5C%22%2C%5C%22arguments%5C%22%3A%5B%7B%5C%22subsets%5C%22%3A%5B%5C%22latin%5C%22%5D%7D%5D%2C%5C%22variableName%5C%22%3A%5C%22inter%5C%22%7D%22%2C%22ids%22%3A%5B%5D%7D&server=true!":
|
|
/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
|
|
!*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fcomponents%2Flayout%2Flayout-wrapper.tsx%22%2C%22ids%22%3A%5B%22LayoutWrapper%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fcomponents%2Fproviders.tsx%22%2C%22ids%22%3A%5B%22Providers%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%5C%22path%5C%22%3A%5C%22app%2Flayout.tsx%5C%22%2C%5C%22import%5C%22%3A%5C%22Inter%5C%22%2C%5C%22arguments%5C%22%3A%5B%7B%5C%22subsets%5C%22%3A%5B%5C%22latin%5C%22%5D%7D%5D%2C%5C%22variableName%5C%22%3A%5C%22inter%5C%22%7D%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***!
|
|
\*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
|
|
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./components/layout/layout-wrapper.tsx */ \"(rsc)/./components/layout/layout-wrapper.tsx\"));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./components/providers.tsx */ \"(rsc)/./components/providers.tsx\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRmFwcCUyRmdsb2JhbHMuY3NzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRmNvbXBvbmVudHMlMkZsYXlvdXQlMkZsYXlvdXQtd3JhcHBlci50c3glMjIlMkMlMjJpZHMlMjIlM0ElNUIlMjJMYXlvdXRXcmFwcGVyJTIyJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRmNvbXBvbmVudHMlMkZwcm92aWRlcnMudHN4JTIyJTJDJTIyaWRzJTIyJTNBJTVCJTIyUHJvdmlkZXJzJTIyJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZmb250JTJGZ29vZ2xlJTJGdGFyZ2V0LmNzcyUzRiU3QiU1QyUyMnBhdGglNUMlMjIlM0ElNUMlMjJhcHAlMkZsYXlvdXQudHN4JTVDJTIyJTJDJTVDJTIyaW1wb3J0JTVDJTIyJTNBJTVDJTIySW50ZXIlNUMlMjIlMkMlNUMlMjJhcmd1bWVudHMlNUMlMjIlM0ElNUIlN0IlNUMlMjJzdWJzZXRzJTVDJTIyJTNBJTVCJTVDJTIybGF0aW4lNUMlMjIlNUQlN0QlNUQlMkMlNUMlMjJ2YXJpYWJsZU5hbWUlNUMlMjIlM0ElNUMlMjJpbnRlciU1QyUyMiU3RCUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZzZXJ2ZXI9dHJ1ZSEiLCJtYXBwaW5ncyI6IkFBQUEsd0xBQXlJO0FBQ3pJO0FBQ0EsZ0tBQXlIIiwic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIsIHdlYnBhY2tFeHBvcnRzOiBbXCJMYXlvdXRXcmFwcGVyXCJdICovIFwiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9jb21wb25lbnRzL2xheW91dC9sYXlvdXQtd3JhcHBlci50c3hcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiwgd2VicGFja0V4cG9ydHM6IFtcIlByb3ZpZGVyc1wiXSAqLyBcIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvY29tcG9uZW50cy9wcm92aWRlcnMudHN4XCIpO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fcomponents%2Flayout%2Flayout-wrapper.tsx%22%2C%22ids%22%3A%5B%22LayoutWrapper%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fcomponents%2Fproviders.tsx%22%2C%22ids%22%3A%5B%22Providers%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%5C%22path%5C%22%3A%5C%22app%2Flayout.tsx%5C%22%2C%5C%22import%5C%22%3A%5C%22Inter%5C%22%2C%5C%22arguments%5C%22%3A%5B%7B%5C%22subsets%5C%22%3A%5B%5C%22latin%5C%22%5D%7D%5D%2C%5C%22variableName%5C%22%3A%5C%22inter%5C%22%7D%22%2C%22ids%22%3A%5B%5D%7D&server=true!\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-segment.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fhttp-access-fallback%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fmetadata%2Fasync-metadata.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fmetadata%2Fmetadata-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true!":
|
|
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
|
|
!*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-segment.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fhttp-access-fallback%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fmetadata%2Fasync-metadata.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fmetadata%2Fmetadata-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***!
|
|
\****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
|
|
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/client-page.js */ \"(rsc)/./node_modules/next/dist/client/components/client-page.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/client-segment.js */ \"(rsc)/./node_modules/next/dist/client/components/client-segment.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/error-boundary.js */ \"(rsc)/./node_modules/next/dist/client/components/error-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/http-access-fallback/error-boundary.js */ \"(rsc)/./node_modules/next/dist/client/components/http-access-fallback/error-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/layout-router.js */ \"(rsc)/./node_modules/next/dist/client/components/layout-router.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/metadata/async-metadata.js */ \"(rsc)/./node_modules/next/dist/client/components/metadata/async-metadata.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/metadata/metadata-boundary.js */ \"(rsc)/./node_modules/next/dist/client/components/metadata/metadata-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/render-from-template-context.js */ \"(rsc)/./node_modules/next/dist/client/components/render-from-template-context.js\", 23));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRmNsaWVudC1wYWdlLmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRmNsaWVudC1zZWdtZW50LmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRmVycm9yLWJvdW5kYXJ5LmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRmh0dHAtYWNjZXNzLWZhbGxiYWNrJTJGZXJyb3ItYm91bmRhcnkuanMlMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0QmbW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGaG9tZSUyRmFsbWElMkZuZXh0Z2VuJTJGTmVhaC1tYWlsJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGbGF5b3V0LXJvdXRlci5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZtb2R1bGVzPSU3QiUyMnJlcXVlc3QlMjIlM0ElMjIlMkZob21lJTJGYWxtYSUyRm5leHRnZW4lMkZOZWFoLW1haWwlMkZub2RlX21vZHVsZXMlMkZuZXh0JTJGZGlzdCUyRmNsaWVudCUyRmNvbXBvbmVudHMlMkZtZXRhZGF0YSUyRmFzeW5jLW1ldGFkYXRhLmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRm1ldGFkYXRhJTJGbWV0YWRhdGEtYm91bmRhcnkuanMlMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0QmbW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGaG9tZSUyRmFsbWElMkZuZXh0Z2VuJTJGTmVhaC1tYWlsJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGcmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dC5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZzZXJ2ZXI9dHJ1ZSEiLCJtYXBwaW5ncyI6IkFBQUEsb09BQXlIO0FBQ3pIO0FBQ0EsME9BQTRIO0FBQzVIO0FBQ0EsME9BQTRIO0FBQzVIO0FBQ0Esb1JBQWlKO0FBQ2pKO0FBQ0Esd09BQTJIO0FBQzNIO0FBQ0EsNFBBQXFJO0FBQ3JJO0FBQ0Esa1FBQXdJO0FBQ3hJO0FBQ0Esc1FBQTBJIiwic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvY2xpZW50LXBhZ2UuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9jbGllbnQtc2VnbWVudC5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2Vycm9yLWJvdW5kYXJ5LmpzXCIpO1xuO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvaHR0cC1hY2Nlc3MtZmFsbGJhY2svZXJyb3ItYm91bmRhcnkuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9sYXlvdXQtcm91dGVyLmpzXCIpO1xuO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbWV0YWRhdGEvYXN5bmMtbWV0YWRhdGEuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9tZXRhZGF0YS9tZXRhZGF0YS1ib3VuZGFyeS5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlbmRlci1mcm9tLXRlbXBsYXRlLWNvbnRleHQuanNcIik7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-segment.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fhttp-access-fallback%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fmetadata%2Fasync-metadata.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fmetadata%2Fmetadata-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true!\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?server=true!":
|
|
/*!******************************************************************************************************!*\
|
|
!*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?server=true! ***!
|
|
\******************************************************************************************************/
|
|
/***/ (() => {
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./app/courrier/page.tsx":
|
|
/*!*******************************!*\
|
|
!*** ./app/courrier/page.tsx ***!
|
|
\*******************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CourrierPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(ssr)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var next_auth_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next-auth/react */ \"(ssr)/./node_modules/next-auth/react/index.js\");\n/* harmony import */ var next_auth_react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_auth_react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! __barrel_optimize__?names=AlertCircle,AlertOctagon,Archive,Check,Edit,Folder,Inbox,Loader2,Menu,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/inbox.js\");\n/* harmony import */ var _barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! __barrel_optimize__?names=AlertCircle,AlertOctagon,Archive,Check,Edit,Folder,Inbox,Loader2,Menu,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/send.js\");\n/* harmony import */ var _barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! __barrel_optimize__?names=AlertCircle,AlertOctagon,Archive,Check,Edit,Folder,Inbox,Loader2,Menu,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/trash.js\");\n/* harmony import */ var _barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! __barrel_optimize__?names=AlertCircle,AlertOctagon,Archive,Check,Edit,Folder,Inbox,Loader2,Menu,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/archive.js\");\n/* harmony import */ var _barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! __barrel_optimize__?names=AlertCircle,AlertOctagon,Archive,Check,Edit,Folder,Inbox,Loader2,Menu,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/square-pen.js\");\n/* harmony import */ var _barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! __barrel_optimize__?names=AlertCircle,AlertOctagon,Archive,Check,Edit,Folder,Inbox,Loader2,Menu,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/octagon-alert.js\");\n/* harmony import */ var _barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! __barrel_optimize__?names=AlertCircle,AlertOctagon,Archive,Check,Edit,Folder,Inbox,Loader2,Menu,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/folder.js\");\n/* harmony import */ var _barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! __barrel_optimize__?names=AlertCircle,AlertOctagon,Archive,Check,Edit,Folder,Inbox,Loader2,Menu,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/menu.js\");\n/* harmony import */ var _barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! __barrel_optimize__?names=AlertCircle,AlertOctagon,Archive,Check,Edit,Folder,Inbox,Loader2,Menu,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/loader-circle.js\");\n/* harmony import */ var _barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! __barrel_optimize__?names=AlertCircle,AlertOctagon,Archive,Check,Edit,Folder,Inbox,Loader2,Menu,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/circle-alert.js\");\n/* harmony import */ var _barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! __barrel_optimize__?names=AlertCircle,AlertOctagon,Archive,Check,Edit,Folder,Inbox,Loader2,Menu,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/check.js\");\n/* harmony import */ var _components_ui_dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/ui/dialog */ \"(ssr)/./components/ui/dialog.tsx\");\n/* harmony import */ var _components_ui_alert__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/ui/alert */ \"(ssr)/./components/ui/alert.tsx\");\n/* harmony import */ var _components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/ui/alert-dialog */ \"(ssr)/./components/ui/alert-dialog.tsx\");\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/ui/button */ \"(ssr)/./components/ui/button.tsx\");\n/* harmony import */ var _components_ui_input__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/components/ui/input */ \"(ssr)/./components/ui/input.tsx\");\n/* harmony import */ var _components_ui_label__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/components/ui/label */ \"(ssr)/./components/ui/label.tsx\");\n/* harmony import */ var _components_ui_use_toast__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/components/ui/use-toast */ \"(ssr)/./components/ui/use-toast.ts\");\n/* harmony import */ var _components_email_EmailSidebar__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/components/email/EmailSidebar */ \"(ssr)/./components/email/EmailSidebar.tsx\");\n/* harmony import */ var _components_email_EmailList__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @/components/email/EmailList */ \"(ssr)/./components/email/EmailList.tsx\");\n/* harmony import */ var _components_email_EmailDetailView__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @/components/email/EmailDetailView */ \"(ssr)/./components/email/EmailDetailView.tsx\");\n/* harmony import */ var _components_email_ComposeEmail__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @/components/email/ComposeEmail */ \"(ssr)/./components/email/ComposeEmail.tsx\");\n/* harmony import */ var _components_email_EmailDialogs__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @/components/email/EmailDialogs */ \"(ssr)/./components/email/EmailDialogs.tsx\");\n/* harmony import */ var _hooks_use_email_state__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @/hooks/use-email-state */ \"(ssr)/./hooks/use-email-state.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n\n\n\n\n\n\n\n\n// Import components\n\n\n\n\n\n// Import the custom hooks\n\n// Simplified version for this component\nfunction SimplifiedLoadingFix() {\n // In production, don't render anything\n if (false) {}\n // Simple debugging component\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed bottom-4 right-4 z-50 p-2 bg-white/80 shadow rounded-lg text-xs\",\n children: \"Debug: Email app loaded\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 65,\n columnNumber: 5\n }, this);\n}\n// Define a color palette for account circles\nconst colorPalette = [\n 'bg-blue-500',\n 'bg-green-500',\n 'bg-red-500',\n 'bg-yellow-500',\n 'bg-purple-500',\n 'bg-pink-500',\n 'bg-indigo-500',\n 'bg-teal-500',\n 'bg-orange-500',\n 'bg-cyan-500'\n];\n// Helper function for consistent logging\nconst logEmailOp = (operation, details, data)=>{\n const timestamp = new Date().toISOString().split('T')[1].substring(0, 12);\n console.log(`[${timestamp}][EMAIL-APP][${operation}] ${details}`);\n if (data) {\n console.log(`[${timestamp}][EMAIL-APP][DATA]`, data);\n }\n};\nfunction CourrierPage() {\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n const { data: session } = (0,next_auth_react__WEBPACK_IMPORTED_MODULE_3__.useSession)();\n // Replace useCourrier with useEmailState\n const { // State values\n accounts, selectedAccount, selectedFolders, currentFolder, emails, selectedEmail, selectedEmailIds, isLoading, error, page, totalPages, totalEmails, mailboxes, unreadCountMap, showFolders, // Actions\n loadEmails, handleEmailSelect, toggleEmailSelection, toggleSelectAll, markEmailAsRead, toggleStarred, changeFolder, deleteEmails, sendEmail, searchEmails, formatEmailForAction, setPage, setEmails, selectAccount, handleLoadMore } = (0,_hooks_use_email_state__WEBPACK_IMPORTED_MODULE_16__.useEmailState)();\n // UI state (keeping only what's still needed)\n const [showComposeModal, setShowComposeModal] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [composeType, setComposeType] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('new');\n const [showDeleteConfirm, setShowDeleteConfirm] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [showLoginNeeded, setShowLoginNeeded] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [sidebarOpen, setSidebarOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [mobileSidebarOpen, setMobileSidebarOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [prefetchStarted, setPrefetchStarted] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [showAddAccountForm, setShowAddAccountForm] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n // Add state for modals/dialogs\n const [showEditModal, setShowEditModal] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [showDeleteDialog, setShowDeleteDialog] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [accountToEdit, setAccountToEdit] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [accountToDelete, setAccountToDelete] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [newPassword, setNewPassword] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [editLoading, setEditLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [deleteLoading, setDeleteLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [selectedColor, setSelectedColor] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n // Use the reducer-managed values directly instead of tracked separately\n const [searchQuery, setSearchQuery] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [unreadCount, setUnreadCount] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n // Calculate unread count for the selected folder\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"CourrierPage.useEffect\": ()=>{\n if (selectedAccount && selectedAccount.id !== 'loading-account') {\n const folderCounts = unreadCountMap[selectedAccount.id.toString()];\n if (folderCounts) {\n setUnreadCount(folderCounts[currentFolder] || 0);\n } else {\n setUnreadCount(0);\n }\n } else {\n // For 'loading-account', sum up all unread counts for the current folder\n let totalUnread = 0;\n Object.values(unreadCountMap).forEach({\n \"CourrierPage.useEffect\": (folderCounts)=>{\n totalUnread += folderCounts[currentFolder] || 0;\n }\n }[\"CourrierPage.useEffect\"]);\n setUnreadCount(totalUnread);\n }\n }\n }[\"CourrierPage.useEffect\"], [\n unreadCountMap,\n selectedAccount,\n currentFolder\n ]);\n // Initialize session and start prefetching\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"CourrierPage.useEffect\": ()=>{\n // Flag to prevent multiple initialization attempts\n let isMounted = true;\n let retryCount = 0;\n const MAX_RETRIES = 3;\n const RETRY_DELAY = 1000; // 1 second\n const initSession = {\n \"CourrierPage.useEffect.initSession\": async ()=>{\n try {\n if (!isMounted) return;\n logEmailOp('SESSION', 'Initializing email session');\n setLoading(true);\n // First check if Redis is ready before making API calls\n const redisStatus = await fetch('/api/redis/status').then({\n \"CourrierPage.useEffect.initSession\": (res)=>res.json()\n }[\"CourrierPage.useEffect.initSession\"]).catch({\n \"CourrierPage.useEffect.initSession\": ()=>({\n ready: false\n })\n }[\"CourrierPage.useEffect.initSession\"]);\n if (!isMounted) return;\n // Call the session API to check email credentials and start prefetching\n logEmailOp('SESSION', 'Fetching session data from API');\n const response = await fetch('/api/courrier/session', {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n // Handle 401 Unauthorized with retry logic\n if (response.status === 401) {\n if (retryCount < MAX_RETRIES) {\n retryCount++;\n console.log(`Session request failed (attempt ${retryCount}/${MAX_RETRIES}), retrying in ${RETRY_DELAY}ms...`);\n await new Promise({\n \"CourrierPage.useEffect.initSession\": (resolve)=>setTimeout(resolve, RETRY_DELAY)\n }[\"CourrierPage.useEffect.initSession\"]);\n return initSession();\n } else {\n console.error('Max retries reached for session request');\n return;\n }\n }\n if (!response.ok) {\n throw new Error(`Session request failed with status ${response.status}`);\n }\n const data = await response.json();\n // Log session response\n console.log('[DEBUG] Session API response details:', {\n authenticated: data.authenticated,\n hasEmailCredentials: data.hasEmailCredentials,\n accountsCount: data.allAccounts?.length || 0\n });\n // Process accounts if authenticated\n if (data.authenticated && data.hasEmailCredentials) {\n setPrefetchStarted(Boolean(data.prefetchStarted));\n let updatedAccounts = [];\n // Process multiple accounts\n if (data.allAccounts && Array.isArray(data.allAccounts) && data.allAccounts.length > 0) {\n console.log('[DEBUG] Processing multiple accounts:', data.allAccounts.length);\n data.allAccounts.forEach({\n \"CourrierPage.useEffect.initSession\": (account)=>{\n // Use exact folders from IMAP\n const accountFolders = account.folders && Array.isArray(account.folders) ? account.folders : [];\n // Ensure folder names have account prefix\n const validFolders = accountFolders.map({\n \"CourrierPage.useEffect.initSession.validFolders\": (folder)=>{\n if (!folder.includes(':')) {\n return `${account.id}:${folder}`;\n }\n return folder;\n }\n }[\"CourrierPage.useEffect.initSession.validFolders\"]);\n updatedAccounts.push({\n id: account.id,\n name: account.display_name || account.email,\n email: account.email,\n color: account.color || colorPalette[updatedAccounts.length % colorPalette.length],\n folders: validFolders\n });\n }\n }[\"CourrierPage.useEffect.initSession\"]);\n console.log('[DEBUG] Constructed accounts:', updatedAccounts);\n } else {\n // Fallback to single account if allAccounts is not available\n const folderList = data.mailboxes && data.mailboxes.length > 0 ? data.mailboxes : [];\n updatedAccounts.push({\n id: 'default-account',\n name: data.displayName || data.email,\n email: data.email,\n color: colorPalette[0],\n folders: folderList\n });\n console.log('[DEBUG] Constructed single fallback account:', updatedAccounts[0]);\n }\n // Update accounts state using our reducer actions\n // First, set the accounts\n setEmails([]); // Clear any existing emails first\n // Log current state for debugging\n console.log('[DEBUG] Current state before setting accounts:', {\n accounts: accounts?.length || 0,\n selectedAccount: selectedAccount?.id || 'none',\n currentFolder: currentFolder || 'none'\n });\n // Use our reducer actions instead of setState\n setAccounts(updatedAccounts);\n // Auto-select the first account if available\n if (updatedAccounts.length > 0) {\n const firstAccount = updatedAccounts[0];\n console.log('[DEBUG] Auto-selecting first account:', firstAccount);\n // Use our new selectAccount function which handles state atomically\n // Add a slight delay to ensure the accounts are set first\n setTimeout({\n \"CourrierPage.useEffect.initSession\": ()=>{\n console.log('[DEBUG] Now calling selectAccount');\n selectAccount(firstAccount);\n }\n }[\"CourrierPage.useEffect.initSession\"], 100);\n }\n } else {\n // User is authenticated but doesn't have email credentials\n setShowLoginNeeded(true);\n }\n } catch (error) {\n console.error('Error initializing session:', error);\n } finally{\n if (isMounted) {\n setLoading(false);\n }\n }\n }\n }[\"CourrierPage.useEffect.initSession\"];\n if (session?.user?.id) {\n initSession();\n }\n return ({\n \"CourrierPage.useEffect\": ()=>{\n isMounted = false;\n }\n })[\"CourrierPage.useEffect\"];\n }\n }[\"CourrierPage.useEffect\"], [\n session?.user?.id,\n setEmails,\n selectAccount\n ]);\n // Helper to get folder icons\n const getFolderIcon = (folder)=>{\n const folderLower = folder.toLowerCase();\n if (folderLower.includes('inbox')) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n className: \"h-4 w-4 text-gray-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 382,\n columnNumber: 14\n }, this);\n } else if (folderLower.includes('sent')) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n className: \"h-4 w-4 text-gray-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 384,\n columnNumber: 14\n }, this);\n } else if (folderLower.includes('trash')) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n className: \"h-4 w-4 text-gray-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 386,\n columnNumber: 14\n }, this);\n } else if (folderLower.includes('archive')) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n className: \"h-4 w-4 text-gray-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 388,\n columnNumber: 14\n }, this);\n } else if (folderLower.includes('draft')) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n className: \"h-4 w-4 text-gray-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 390,\n columnNumber: 14\n }, this);\n } else if (folderLower.includes('spam') || folderLower.includes('junk')) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n className: \"h-4 w-4 text-gray-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 392,\n columnNumber: 14\n }, this);\n } else {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n className: \"h-4 w-4 text-gray-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 394,\n columnNumber: 14\n }, this);\n }\n };\n // Helper to format folder names\n const formatFolderName = (folder)=>{\n // Extract base folder name if prefixed\n const baseFolderName = folder.includes(':') ? folder.split(':')[1] : folder;\n return baseFolderName.charAt(0).toUpperCase() + baseFolderName.slice(1).toLowerCase();\n };\n // Handle actions - replace with useReducer-based functions\n const handleMailboxChange = (folder, accountId)=>{\n // Simply call our new changeFolder function which handles everything atomically\n setLoading(true);\n changeFolder(folder, accountId).finally(()=>{\n setLoading(false);\n });\n };\n // Handle account selection - replace with reducer-based function\n const handleAccountSelect = (account)=>{\n // Add extensive debugging to track the process\n console.log('[DEBUG] handleAccountSelect called with account:', {\n id: account.id,\n email: account.email,\n folders: account.folders?.length\n });\n // Skip if no valid account provided\n if (!account || !account.id) {\n console.error('Invalid account passed to handleAccountSelect');\n return;\n }\n // Skip if this is already the selected account\n if (selectedAccount?.id === account.id) {\n console.log('[DEBUG] Account already selected, skipping');\n return;\n }\n // Simply call our new selectAccount function which handles everything atomically\n setLoading(true);\n // Clear all existing selections first\n console.log('[DEBUG] Now selecting account through reducer action');\n selectAccount(account);\n // Log what happened\n console.log('[DEBUG] Account selection completed');\n // Give some time for the UI to update\n setTimeout(()=>setLoading(false), 300);\n };\n // Email actions\n const handleReply = ()=>{\n if (!selectedEmail) return;\n setComposeType('reply');\n setShowComposeModal(true);\n };\n const handleReplyAll = ()=>{\n if (!selectedEmail) return;\n setComposeType('reply-all');\n setShowComposeModal(true);\n };\n const handleForward = ()=>{\n if (!selectedEmail) return;\n setComposeType('forward');\n setShowComposeModal(true);\n };\n const handleComposeNew = ()=>{\n setComposeType('new');\n setShowComposeModal(true);\n };\n // Handle bulk actions\n const handleBulkAction = async (action)=>{\n if (selectedEmailIds.length === 0) return;\n switch(action){\n case 'delete':\n setShowDeleteConfirm(true);\n break;\n case 'mark-read':\n // Mark all selected emails as read\n for (const emailId of selectedEmailIds){\n await markEmailAsRead(emailId, true);\n }\n break;\n case 'mark-unread':\n // Mark all selected emails as unread\n for (const emailId of selectedEmailIds){\n await markEmailAsRead(emailId, false);\n }\n break;\n case 'archive':\n break;\n }\n };\n const handleSendEmail = async (emailData)=>{\n try {\n const result = await sendEmail(emailData);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result;\n } catch (error) {\n throw error;\n }\n };\n const handleDeleteConfirm = async ()=>{\n await deleteEmails(selectedEmailIds);\n setShowDeleteConfirm(false);\n // Clear selected emails after deletion\n // Using setEmails will reset the selection state\n setLoading(true);\n setPage(1);\n loadEmails(1, 20, false).finally(()=>{\n // Selection will be cleared by loading new emails\n setLoading(false);\n });\n };\n const handleGoToLogin = ()=>{\n router.push('/courrier/login');\n };\n // Update the accounts from state - fix type issues\n const setAccounts = (newAccounts)=>{\n console.log('[DEBUG] Setting accounts:', newAccounts);\n // In the previous implementation, we'd dispatch an action\n // But since we don't have direct access to the reducer's dispatch function,\n // we need to use the exported actions from our hook\n // This dispatch function should be made available by our hook\n const windowWithDispatch = window;\n if (typeof windowWithDispatch.dispatchEmailAction === 'function') {\n // Use the global dispatch function if available\n windowWithDispatch.dispatchEmailAction({\n type: 'SET_ACCOUNTS',\n payload: newAccounts\n });\n } else {\n console.error('Cannot dispatch SET_ACCOUNTS action - no dispatch function available');\n // Fallback: Try to directly modify the accounts array if we have access\n // This isn't ideal but ensures backward compatibility during transition\n console.log('[DEBUG] Using fallback method to update accounts');\n // Our reducer should expose this action\n const useEmailStateDispatch = windowWithDispatch.__emailStateDispatch;\n if (typeof useEmailStateDispatch === 'function') {\n useEmailStateDispatch({\n type: 'SET_ACCOUNTS',\n payload: newAccounts\n });\n } else {\n console.error('No fallback dispatch method available either');\n }\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(SimplifiedLoadingFix, {}, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 571,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"w-full h-screen bg-black\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full px-4 pt-12 pb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex h-full bg-carnet-bg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_email_EmailSidebar__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n accounts: accounts,\n selectedAccount: selectedAccount,\n selectedFolders: selectedFolders,\n currentFolder: currentFolder,\n loading: loading || isLoading,\n unreadCount: unreadCountMap,\n showAddAccountForm: showAddAccountForm,\n onFolderChange: handleMailboxChange,\n onRefresh: ()=>{\n setLoading(true);\n setPage(1);\n loadEmails(page, 10, false).finally(()=>setLoading(false));\n },\n onComposeNew: handleComposeNew,\n onAccountSelect: handleAccountSelect,\n onShowAddAccountForm: setShowAddAccountForm,\n onAddAccount: async (formData)=>{\n setLoading(true);\n console.log('[DEBUG] Add account form submission:', formData);\n // Pull values from form with proper type handling\n const formValues = {\n email: formData.get('email')?.toString() || '',\n password: formData.get('password')?.toString() || '',\n host: formData.get('host')?.toString() || '',\n port: parseInt(formData.get('port')?.toString() || '993'),\n secure: formData.get('secure') === 'on',\n display_name: formData.get('display_name')?.toString() || '',\n smtp_host: formData.get('smtp_host')?.toString() || '',\n smtp_port: formData.get('smtp_port')?.toString() ? parseInt(formData.get('smtp_port')?.toString() || '587') : undefined,\n smtp_secure: formData.get('smtp_secure') === 'on'\n };\n // If display_name is empty, use email\n if (!formValues.display_name) {\n formValues.display_name = formValues.email;\n }\n try {\n // First test the connection\n const testResponse = await fetch('/api/courrier/test-connection', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n email: formValues.email,\n password: formValues.password,\n host: formValues.host,\n port: formValues.port,\n secure: formValues.secure\n })\n });\n const testResult = await testResponse.json();\n if (!testResponse.ok) {\n throw new Error(testResult.error || 'Connection test failed');\n }\n console.log('Connection test successful:', testResult);\n // Only declare realAccounts once before using for color assignment\n const realAccounts = accounts.filter((a)=>a.id !== 'loading-account');\n const saveResponse = await fetch('/api/courrier/account', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(formValues)\n });\n const saveResult = await saveResponse.json();\n if (!saveResponse.ok) {\n throw new Error(saveResult.error || 'Failed to add account');\n }\n const realAccount = saveResult.account;\n realAccount.color = colorPalette[realAccounts.length % colorPalette.length];\n realAccount.folders = testResult.details.sampleFolders || [\n 'INBOX',\n 'Sent',\n 'Drafts',\n 'Trash'\n ];\n setAccounts([\n ...accounts,\n realAccount\n ]);\n setShowAddAccountForm(false);\n (0,_components_ui_use_toast__WEBPACK_IMPORTED_MODULE_10__.toast)({\n title: \"Account added successfully\",\n description: `Your email account ${formValues.email} has been added.`,\n duration: 5000\n });\n } catch (error) {\n console.error('Error adding account:', error);\n (0,_components_ui_use_toast__WEBPACK_IMPORTED_MODULE_10__.toast)({\n title: \"Failed to add account\",\n description: error instanceof Error ? error.message : 'Unknown error',\n variant: \"destructive\",\n duration: 5000\n });\n } finally{\n setLoading(false);\n }\n },\n onEditAccount: async (account)=>{\n try {\n // Get the latest account data from accounts array\n const updatedAccount = accounts.find((a)=>a.id === account.id);\n if (updatedAccount) {\n setAccountToEdit(updatedAccount);\n setSelectedColor(updatedAccount.color || '');\n setShowEditModal(true);\n } else {\n (0,_components_ui_use_toast__WEBPACK_IMPORTED_MODULE_10__.toast)({\n title: \"Error\",\n description: \"Could not find account data\",\n variant: \"destructive\",\n duration: 3000\n });\n }\n } catch (error) {\n console.error(\"Error preparing account edit:\", error);\n (0,_components_ui_use_toast__WEBPACK_IMPORTED_MODULE_10__.toast)({\n title: \"Error\",\n description: \"Failed to load account settings\",\n variant: \"destructive\",\n duration: 3000\n });\n }\n },\n onDeleteAccount: (account)=>{\n setAccountToDelete(account);\n setShowDeleteDialog(true);\n },\n onSelectEmail: (emailId, accountId, folder)=>{\n if (typeof emailId === 'string') {\n handleEmailSelect(emailId, accountId || '', folder || currentFolder);\n }\n },\n ...{}\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 578,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-80 flex flex-col border-r border-gray-100 overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-2 border-b border-gray-100 bg-white flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_7__.Button, {\n variant: \"ghost\",\n size: \"icon\",\n className: \"md:hidden h-9 w-9\",\n onClick: ()=>setMobileSidebarOpen(!mobileSidebarOpen),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n className: \"h-5 w-5 text-gray-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 726,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 720,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n getFolderIcon(currentFolder),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"ml-2 font-medium text-gray-700\",\n children: [\n selectedAccount?.email ? `${selectedAccount.email}: ` : '',\n formatFolderName(currentFolder.includes(':') ? currentFolder.split(':')[1] : currentFolder)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 733,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 730,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 729,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 719,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-hidden bg-white\",\n children: isLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n className: \"h-8 w-8 text-blue-500 animate-spin mb-2\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 748,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-gray-500\",\n children: \"Loading emails...\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 749,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 747,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 746,\n columnNumber: 19\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-md p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert__WEBPACK_IMPORTED_MODULE_5__.Alert, {\n variant: \"destructive\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 756,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert__WEBPACK_IMPORTED_MODULE_5__.AlertTitle, {\n children: \"Error\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 757,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert__WEBPACK_IMPORTED_MODULE_5__.AlertDescription, {\n children: error\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 758,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 755,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 754,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 753,\n columnNumber: 19\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-full overflow-hidden flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto\",\n onScroll: (e)=>{\n const target = e.currentTarget;\n const { scrollTop, scrollHeight, clientHeight } = target;\n const distanceToBottom = scrollHeight - scrollTop - clientHeight;\n const scrollPercentage = (scrollTop + clientHeight) / scrollHeight;\n // Store last scroll position to detect direction\n const lastScrollTop = target.dataset.lastScrollTop ? parseInt(target.dataset.lastScrollTop) : 0;\n const scrollingDown = scrollTop > lastScrollTop;\n // Update last scroll position\n target.dataset.lastScrollTop = scrollTop.toString();\n // Prevent frequent log spam with a timestamp check\n const now = Date.now();\n const lastLog = parseInt(target.dataset.lastLogTime || '0');\n if (now - lastLog > 500) {\n console.log(`[DEBUG-WRAPPER-SCROLL] Distance: ${distanceToBottom}px, %: ${Math.round(scrollPercentage * 100)}%, direction: ${scrollingDown ? 'down' : 'up'}, more: ${page < totalPages}, loading: ${isLoading}`);\n target.dataset.lastLogTime = now.toString();\n }\n // Check throttle to prevent multiple rapid triggers\n const lastTrigger = parseInt(target.dataset.lastTriggerTime || '0');\n const throttleTime = 1000; // 1 second throttle\n // CRITICAL FIX: Only trigger loading more emails when:\n // 1. User is scrolling DOWN (not up)\n // 2. User is EXACTLY at the bottom (distance < 5px)\n // 3. Not currently loading\n // 4. More emails exist to load\n // 5. Not throttled (hasn't triggered in last second)\n if (scrollingDown && distanceToBottom < 5 && // Much stricter - truly at bottom\n !isLoading && page < totalPages && now - lastTrigger > throttleTime) {\n console.log(`[DEBUG-WRAPPER-TRIGGER] *** AT BOTTOM *** Loading more emails`);\n target.dataset.lastTriggerTime = now.toString();\n handleLoadMore();\n }\n },\n children: emails.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center p-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n className: \"h-12 w-12 text-gray-300 mx-auto mb-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 815,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-medium text-gray-700\",\n children: \"No emails found\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 816,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-gray-500 mt-1\",\n children: searchQuery ? `No results found for \"${searchQuery}\"` : `Your ${currentFolder.toLowerCase()} is empty`\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 817,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 814,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 813,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_email_EmailList__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n emails: emails,\n selectedEmailIds: selectedEmailIds,\n selectedEmail: selectedEmail,\n onSelectEmail: (emailId, emailAccountId, emailFolder)=>{\n // Always use the email's own accountId and folder if available\n handleEmailSelect(emailId, emailAccountId || selectedAccount?.id || '', emailFolder || currentFolder);\n },\n onToggleSelect: toggleEmailSelection,\n onToggleSelectAll: toggleSelectAll,\n onToggleStarred: toggleStarred,\n onLoadMore: handleLoadMore,\n hasMoreEmails: page < totalPages,\n currentFolder: currentFolder,\n isLoading: isLoading,\n totalEmails: emails.length,\n onBulkAction: handleBulkAction\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 825,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 767,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 765,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 744,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 717,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex flex-col overflow-hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-hidden bg-white\",\n children: selectedEmail ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_email_EmailDetailView__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n email: selectedEmail,\n onBack: ()=>{\n handleEmailSelect('', '', '');\n // Ensure sidebar stays visible\n setSidebarOpen(true);\n },\n onReply: handleReply,\n onReplyAll: handleReplyAll,\n onForward: handleForward,\n onToggleStar: ()=>toggleStarred(selectedEmail.id)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 859,\n columnNumber: 19\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center text-muted-foreground\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"Select an email to view or\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 874,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"text-primary mt-2 hover:underline\",\n onClick: ()=>{\n setComposeType('new');\n setShowComposeModal(true);\n },\n children: \"Compose a new message\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 875,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 873,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 872,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 857,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 855,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 576,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 575,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 574,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_email_EmailDialogs__WEBPACK_IMPORTED_MODULE_15__.DeleteConfirmDialog, {\n show: showDeleteConfirm,\n selectedCount: selectedEmailIds.length,\n onConfirm: handleDeleteConfirm,\n onCancel: ()=>setShowDeleteConfirm(false)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 894,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_4__.Dialog, {\n open: showComposeModal,\n onOpenChange: (open)=>!open && setShowComposeModal(false),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_4__.DialogContent, {\n className: \"sm:max-w-[800px] p-0 h-[80vh]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_4__.DialogTitle, {\n asChild: true,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"sr-only\",\n children: \"New Message\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 905,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 904,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_email_ComposeEmail__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n type: composeType,\n initialEmail: composeType !== 'new' ? selectedEmail : undefined,\n onSend: async (emailData)=>{\n try {\n const result = await sendEmail(emailData);\n return;\n } catch (error) {\n console.error('Error sending email:', error);\n throw error;\n }\n },\n onClose: ()=>setShowComposeModal(false),\n accounts: accounts\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 907,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 903,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 902,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_4__.Dialog, {\n open: showEditModal,\n onOpenChange: (open)=>{\n if (!open) {\n setShowEditModal(false);\n setEditLoading(false);\n setAccountToEdit(null);\n setNewPassword('');\n setSelectedColor('');\n window.location.reload();\n }\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_4__.DialogContent, {\n className: \"sm:max-w-[500px] bg-white text-gray-800\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_4__.DialogTitle, {\n className: \"text-gray-800\",\n children: \"Edit Account Settings\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 937,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: async (e)=>{\n e.preventDefault();\n if (!accountToEdit) return;\n setEditLoading(true);\n try {\n const formElement = e.target;\n const displayName = formElement.querySelector('#display-name').value;\n const color = selectedColor;\n // If password is changed, test the connection first\n if (newPassword) {\n try {\n // First get the account's connection details\n const accountDetailsRes = await fetch(`/api/courrier/account-details?accountId=${accountToEdit.id}`);\n if (!accountDetailsRes.ok) {\n throw new Error('Failed to fetch account connection details');\n }\n const accountDetails = await accountDetailsRes.json();\n // Test connection with new password before saving\n const testResponse = await fetch('/api/courrier/test-connection', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n email: accountToEdit.email,\n password: newPassword,\n // Use the account's connection details from the API\n host: accountDetails.host,\n port: accountDetails.port || 993,\n secure: accountDetails.secure || true\n })\n });\n const testResult = await testResponse.json();\n if (!testResponse.ok) {\n throw new Error(testResult.error || 'Connection test failed with new password');\n }\n console.log('Connection test successful with new password');\n } catch (error) {\n console.error('Error testing connection:', error);\n throw new Error(`Password test failed: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n // Continue with the update if test passed or no password change\n const res = await fetch('/api/courrier/account', {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n accountId: accountToEdit.id,\n newPassword: newPassword || undefined,\n display_name: displayName,\n color: color\n })\n });\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Failed to update account settings');\n (0,_components_ui_use_toast__WEBPACK_IMPORTED_MODULE_10__.toast)({\n title: 'Account updated',\n description: 'Account settings updated successfully.'\n });\n setShowEditModal(false);\n setNewPassword('');\n // Update the local account data\n setAccounts(accounts.map((account)=>account.id === accountToEdit.id ? {\n ...account,\n name: displayName,\n color: color\n } : account));\n // Clear accountToEdit to ensure fresh data on next edit\n setAccountToEdit(null);\n // Force a page refresh to reset all UI states\n window.location.reload();\n } catch (err) {\n (0,_components_ui_use_toast__WEBPACK_IMPORTED_MODULE_10__.toast)({\n title: 'Error',\n description: err instanceof Error ? err.message : 'Failed to update account settings',\n variant: 'destructive'\n });\n } finally{\n setEditLoading(false);\n }\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_label__WEBPACK_IMPORTED_MODULE_9__.Label, {\n htmlFor: \"display-name\",\n className: \"text-gray-800\",\n children: \"Account Name\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1019,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_8__.Input, {\n id: \"display-name\",\n type: \"text\",\n defaultValue: accountToEdit?.name,\n className: \"mt-1 bg-white text-gray-800\",\n disabled: editLoading\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1020,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1018,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_label__WEBPACK_IMPORTED_MODULE_9__.Label, {\n htmlFor: \"new-password\",\n className: \"text-gray-800\",\n children: \"New Password (optional)\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1030,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_8__.Input, {\n id: \"new-password\",\n type: \"password\",\n value: newPassword,\n onChange: (e)=>setNewPassword(e.target.value),\n className: \"mt-1 bg-white text-gray-800\",\n placeholder: \"Leave blank to keep current password\",\n disabled: editLoading\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1031,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1029,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_label__WEBPACK_IMPORTED_MODULE_9__.Label, {\n className: \"block mb-2 text-gray-800\",\n children: \"Account Color\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1043,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-5 gap-2\",\n children: colorPalette.map((color, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"radio\",\n id: `color-${index}`,\n name: \"color\",\n value: color,\n checked: selectedColor === color,\n onChange: ()=>setSelectedColor(color),\n className: \"sr-only\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1047,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: `color-${index}`,\n className: `w-8 h-8 rounded-full cursor-pointer flex items-center justify-center ${color} hover:ring-2 hover:ring-blue-300 transition-all`,\n style: {\n boxShadow: selectedColor === color ? '0 0 0 2px white, 0 0 0 4px #3b82f6' : 'none'\n },\n onClick: ()=>setSelectedColor(color),\n children: selectedColor === color && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_27__[\"default\"], {\n className: \"h-4 w-4 text-white\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1063,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1056,\n columnNumber: 21\n }, this)\n ]\n }, index, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1046,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1044,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1042,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2 mt-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_7__.Button, {\n type: \"button\",\n className: \"bg-red-500 hover:bg-red-600 text-white\",\n onClick: ()=>{\n setShowEditModal(false);\n window.location.reload();\n },\n children: \"Cancel\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1072,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_7__.Button, {\n type: \"submit\",\n className: \"bg-blue-500 hover:bg-blue-600 text-white\",\n disabled: editLoading,\n children: [\n editLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertCircle_AlertOctagon_Archive_Check_Edit_Folder_Inbox_Loader2_Menu_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n className: \"h-4 w-4 animate-spin mr-2\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1087,\n columnNumber: 32\n }, this) : null,\n \"Save\"\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1082,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1071,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 938,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 936,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 926,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_6__.AlertDialog, {\n open: showDeleteDialog,\n onOpenChange: (open)=>{\n if (!open) setShowDeleteDialog(false);\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_6__.AlertDialogContent, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_6__.AlertDialogHeader, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_6__.AlertDialogTitle, {\n children: \"Delete Account\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1099,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_6__.AlertDialogDescription, {\n children: \"Are you sure you want to delete this account? This action cannot be undone.\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1100,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1098,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_6__.AlertDialogFooter, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_6__.AlertDialogCancel, {\n onClick: ()=>setShowDeleteDialog(false),\n children: \"Cancel\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1105,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_6__.AlertDialogAction, {\n asChild: true,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_7__.Button, {\n variant: \"destructive\",\n disabled: deleteLoading,\n onClick: async ()=>{\n if (!accountToDelete) return;\n setDeleteLoading(true);\n try {\n const res = await fetch(`/api/courrier/account?accountId=${accountToDelete.id}`, {\n method: 'DELETE'\n });\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Failed to delete account');\n (0,_components_ui_use_toast__WEBPACK_IMPORTED_MODULE_10__.toast)({\n title: 'Account deleted',\n description: 'The account was deleted successfully.'\n });\n setShowDeleteDialog(false);\n window.location.reload();\n } catch (err) {\n (0,_components_ui_use_toast__WEBPACK_IMPORTED_MODULE_10__.toast)({\n title: 'Error',\n description: err instanceof Error ? err.message : 'Failed to delete account',\n variant: 'destructive'\n });\n } finally{\n setDeleteLoading(false);\n }\n },\n children: \"Delete\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1107,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1106,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1104,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1097,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/app/courrier/page.tsx\",\n lineNumber: 1096,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QU9qQiIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9hcHAvY291cnJpZXIvcGFnZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gJ25leHQvbmF2aWdhdGlvbic7XG5pbXBvcnQgeyB1c2VTZXNzaW9uIH0gZnJvbSAnbmV4dC1hdXRoL3JlYWN0JztcbmltcG9ydCB7IFxuICBNYWlsLCBMb2FkZXIyLCBBbGVydENpcmNsZSwgXG4gIE1vcmVWZXJ0aWNhbCwgU2V0dGluZ3MsIFBsdXMgYXMgUGx1c0ljb24sIFRyYXNoMiwgRWRpdCwgXG4gIEluYm94LCBTZW5kLCBTdGFyLCBUcmFzaCwgUGx1cywgQ2hldnJvbkxlZnQsIENoZXZyb25SaWdodCwgXG4gIFNlYXJjaCwgQ2hldnJvbkRvd24sIEZvbGRlciwgQ2hldnJvblVwLCBSZXBseSwgRm9yd2FyZCwgUmVwbHlBbGwsIFxuICBNb3JlSG9yaXpvbnRhbCwgRm9sZGVyT3BlbiwgWCwgUGFwZXJjbGlwLCBNZXNzYWdlU3F1YXJlLCBDb3B5LCBFeWVPZmYsIFxuICBBbGVydE9jdGFnb24sIEFyY2hpdmUsIE1lbnUsIENoZWNrXG59IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyBEaWFsb2csIERpYWxvZ0NvbnRlbnQsIERpYWxvZ1RpdGxlIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZyc7XG5pbXBvcnQgeyBBbGVydCwgQWxlcnREZXNjcmlwdGlvbiwgQWxlcnRUaXRsZSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9hbGVydCc7XG5pbXBvcnQge1xuICBBbGVydERpYWxvZyxcbiAgQWxlcnREaWFsb2dBY3Rpb24sXG4gIEFsZXJ0RGlhbG9nQ2FuY2VsLFxuICBBbGVydERpYWxvZ0NvbnRlbnQsXG4gIEFsZXJ0RGlhbG9nRGVzY3JpcHRpb24sXG4gIEFsZXJ0RGlhbG9nRm9vdGVyLFxuICBBbGVydERpYWxvZ0hlYWRlcixcbiAgQWxlcnREaWFsb2dUaXRsZSxcbn0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9hbGVydC1kaWFsb2dcIjtcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnO1xuaW1wb3J0IHsgQXZhdGFyLCBBdmF0YXJGYWxsYmFjayB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9hdmF0YXInO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbic7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCc7XG5pbXBvcnQgeyBUYWJzLCBUYWJzTGlzdCwgVGFic1RyaWdnZXIsIFRhYnNDb250ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3RhYnMnO1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2hlY2tib3gnO1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnO1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvdXNlLXRvYXN0JztcbmltcG9ydCB7IERyb3Bkb3duTWVudSwgRHJvcGRvd25NZW51VHJpZ2dlciwgRHJvcGRvd25NZW51Q29udGVudCwgRHJvcGRvd25NZW51SXRlbSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kcm9wZG93bi1tZW51JztcblxuLy8gSW1wb3J0IGNvbXBvbmVudHNcbmltcG9ydCBFbWFpbFNpZGViYXIgZnJvbSAnQC9jb21wb25lbnRzL2VtYWlsL0VtYWlsU2lkZWJhcic7XG5pbXBvcnQgRW1haWxMaXN0IGZyb20gJ0AvY29tcG9uZW50cy9lbWFpbC9FbWFpbExpc3QnO1xuaW1wb3J0IEVtYWlsU2lkZWJhckNvbnRlbnQgZnJvbSAnQC9jb21wb25lbnRzL2VtYWlsL0VtYWlsU2lkZWJhckNvbnRlbnQnO1xuaW1wb3J0IEVtYWlsRGV0YWlsVmlldyBmcm9tICdAL2NvbXBvbmVudHMvZW1haWwvRW1haWxEZXRhaWxWaWV3JztcbmltcG9ydCBDb21wb3NlRW1haWwgZnJvbSAnQC9jb21wb25lbnRzL2VtYWlsL0NvbXBvc2VFbWFpbCc7XG5pbXBvcnQgeyBEZWxldGVDb25maXJtRGlhbG9nIH0gZnJvbSAnQC9jb21wb25lbnRzL2VtYWlsL0VtYWlsRGlhbG9ncyc7XG5cbi8vIEltcG9ydCB0aGUgY3VzdG9tIGhvb2tzXG5pbXBvcnQgeyB1c2VFbWFpbFN0YXRlIH0gZnJvbSAnQC9ob29rcy91c2UtZW1haWwtc3RhdGUnO1xuXG4vLyBJbXBvcnQgdGhlIHByZWZldGNoaW5nIGZ1bmN0aW9uXG5pbXBvcnQgeyBwcmVmZXRjaEZvbGRlckVtYWlscyB9IGZyb20gJ0AvbGliL3NlcnZpY2VzL3ByZWZldGNoLXNlcnZpY2UnO1xuXG4vLyBJbXBvcnQgQWNjb3VudCB0eXBlIGZyb20gdGhlIHJlZHVjZXJcbmltcG9ydCB7IEFjY291bnQgfSBmcm9tICdAL2xpYi9yZWR1Y2Vycy9lbWFpbFJlZHVjZXInO1xuXG4vLyBBZGQgdGhlIG1pc3NpbmcgRW1haWxEYXRhIGltcG9ydCBmcm9tIHVzZS1jb3VycmllclxuaW1wb3J0IHsgRW1haWxEYXRhIH0gZnJvbSAnQC9ob29rcy91c2UtY291cnJpZXInO1xuXG4vLyBTaW1wbGlmaWVkIHZlcnNpb24gZm9yIHRoaXMgY29tcG9uZW50XG5mdW5jdGlvbiBTaW1wbGlmaWVkTG9hZGluZ0ZpeCgpIHtcbiAgLy8gSW4gcHJvZHVjdGlvbiwgZG9uJ3QgcmVuZGVyIGFueXRoaW5nXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgXG4gIC8vIFNpbXBsZSBkZWJ1Z2dpbmcgY29tcG9uZW50XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmaXhlZCBib3R0b20tNCByaWdodC00IHotNTAgcC0yIGJnLXdoaXRlLzgwIHNoYWRvdyByb3VuZGVkLWxnIHRleHQteHNcIj5cbiAgICAgIERlYnVnOiBFbWFpbCBhcHAgbG9hZGVkXG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmludGVyZmFjZSBFbWFpbFdpdGhGbGFncyB7XG4gIGlkOiBzdHJpbmc7XG4gIHJlYWQ/OiBib29sZWFuO1xuICBmbGFncz86IHtcbiAgICBzZWVuPzogYm9vbGVhbjtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIEVtYWlsTWVzc2FnZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGZyb206IHsgbmFtZTogc3RyaW5nOyBhZGRyZXNzOiBzdHJpbmcgfVtdO1xuICB0bzogeyBuYW1lOiBzdHJpbmc7IGFkZHJlc3M6IHN0cmluZyB9W107XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgZGF0ZTogRGF0ZTtcbiAgZmxhZ3M6IHtcbiAgICBzZWVuOiBib29sZWFuO1xuICAgIGZsYWdnZWQ6IGJvb2xlYW47XG4gICAgYW5zd2VyZWQ6IGJvb2xlYW47XG4gICAgZHJhZnQ6IGJvb2xlYW47XG4gICAgZGVsZXRlZDogYm9vbGVhbjtcbiAgfTtcbiAgc2l6ZTogbnVtYmVyO1xuICBoYXNBdHRhY2htZW50czogYm9vbGVhbjtcbiAgZm9sZGVyOiBzdHJpbmc7XG4gIGNvbnRlbnRGZXRjaGVkOiBib29sZWFuO1xuICBhY2NvdW50SWQ6IHN0cmluZztcbiAgY29udGVudDoge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBodG1sOiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBBY2NvdW50RGF0YSB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG4gIGhvc3Q6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xuICBzZWN1cmU6IGJvb2xlYW47XG4gIGRpc3BsYXlfbmFtZTogc3RyaW5nO1xuICBzbXRwX2hvc3Q/OiBzdHJpbmc7XG4gIHNtdHBfcG9ydD86IG51bWJlcjtcbiAgc210cF9zZWN1cmU/OiBib29sZWFuO1xufVxuXG4vLyBEZWZpbmUgYSBjb2xvciBwYWxldHRlIGZvciBhY2NvdW50IGNpcmNsZXNcbmNvbnN0IGNvbG9yUGFsZXR0ZSA9IFtcbiAgJ2JnLWJsdWUtNTAwJyxcbiAgJ2JnLWdyZWVuLTUwMCcsXG4gICdiZy1yZWQtNTAwJyxcbiAgJ2JnLXllbGxvdy01MDAnLFxuICAnYmctcHVycGxlLTUwMCcsXG4gICdiZy1waW5rLTUwMCcsXG4gICdiZy1pbmRpZ28tNTAwJyxcbiAgJ2JnLXRlYWwtNTAwJyxcbiAgJ2JnLW9yYW5nZS01MDAnLFxuICAnYmctY3lhbi01MDAnLFxuXTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBjb25zaXN0ZW50IGxvZ2dpbmdcbmNvbnN0IGxvZ0VtYWlsT3AgPSAob3BlcmF0aW9uOiBzdHJpbmcsIGRldGFpbHM6IHN0cmluZywgZGF0YT86IGFueSkgPT4ge1xuICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVsxXS5zdWJzdHJpbmcoMCwgMTIpO1xuICBjb25zb2xlLmxvZyhgWyR7dGltZXN0YW1wfV1bRU1BSUwtQVBQXVske29wZXJhdGlvbn1dICR7ZGV0YWlsc31gKTtcbiAgaWYgKGRhdGEpIHtcbiAgICBjb25zb2xlLmxvZyhgWyR7dGltZXN0YW1wfV1bRU1BSUwtQVBQXVtEQVRBXWAsIGRhdGEpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb3VycmllclBhZ2UoKSB7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCB7IGRhdGE6IHNlc3Npb24gfSA9IHVzZVNlc3Npb24oKTtcbiAgXG4gIC8vIFJlcGxhY2UgdXNlQ291cnJpZXIgd2l0aCB1c2VFbWFpbFN0YXRlXG4gIGNvbnN0IHtcbiAgICAvLyBTdGF0ZSB2YWx1ZXNcbiAgICBhY2NvdW50cyxcbiAgICBzZWxlY3RlZEFjY291bnQsXG4gICAgc2VsZWN0ZWRGb2xkZXJzLFxuICAgIGN1cnJlbnRGb2xkZXIsXG4gICAgZW1haWxzLFxuICAgIHNlbGVjdGVkRW1haWwsXG4gICAgc2VsZWN0ZWRFbWFpbElkcyxcbiAgICBpc0xvYWRpbmcsXG4gICAgZXJyb3IsXG4gICAgcGFnZSxcbiAgICB0b3RhbFBhZ2VzLFxuICAgIHRvdGFsRW1haWxzLFxuICAgIG1haWxib3hlcyxcbiAgICB1bnJlYWRDb3VudE1hcCxcbiAgICBzaG93Rm9sZGVycyxcbiAgICBcbiAgICAvLyBBY3Rpb25zXG4gICAgbG9hZEVtYWlscyxcbiAgICBoYW5kbGVFbWFpbFNlbGVjdCxcbiAgICB0b2dnbGVFbWFpbFNlbGVjdGlvbixcbiAgICB0b2dnbGVTZWxlY3RBbGwsXG4gICAgbWFya0VtYWlsQXNSZWFkLFxuICAgIHRvZ2dsZVN0YXJyZWQsXG4gICAgY2hhbmdlRm9sZGVyLFxuICAgIGRlbGV0ZUVtYWlscyxcbiAgICBzZW5kRW1haWwsXG4gICAgc2VhcmNoRW1haWxzLFxuICAgIGZvcm1hdEVtYWlsRm9yQWN0aW9uLFxuICAgIHNldFBhZ2UsXG4gICAgc2V0RW1haWxzLFxuICAgIHNlbGVjdEFjY291bnQsXG4gICAgaGFuZGxlTG9hZE1vcmVcbiAgfSA9IHVzZUVtYWlsU3RhdGUoKTtcblxuICAvLyBVSSBzdGF0ZSAoa2VlcGluZyBvbmx5IHdoYXQncyBzdGlsbCBuZWVkZWQpXG4gIGNvbnN0IFtzaG93Q29tcG9zZU1vZGFsLCBzZXRTaG93Q29tcG9zZU1vZGFsXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2NvbXBvc2VUeXBlLCBzZXRDb21wb3NlVHlwZV0gPSB1c2VTdGF0ZTwnbmV3JyB8ICdyZXBseScgfCAncmVwbHktYWxsJyB8ICdmb3J3YXJkJz4oJ25ldycpO1xuICBjb25zdCBbc2hvd0RlbGV0ZUNvbmZpcm0sIHNldFNob3dEZWxldGVDb25maXJtXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Nob3dMb2dpbk5lZWRlZCwgc2V0U2hvd0xvZ2luTmVlZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NpZGViYXJPcGVuLCBzZXRTaWRlYmFyT3Blbl0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW21vYmlsZVNpZGViYXJPcGVuLCBzZXRNb2JpbGVTaWRlYmFyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3ByZWZldGNoU3RhcnRlZCwgc2V0UHJlZmV0Y2hTdGFydGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Nob3dBZGRBY2NvdW50Rm9ybSwgc2V0U2hvd0FkZEFjY291bnRGb3JtXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgXG4gIC8vIEFkZCBzdGF0ZSBmb3IgbW9kYWxzL2RpYWxvZ3NcbiAgY29uc3QgW3Nob3dFZGl0TW9kYWwsIHNldFNob3dFZGl0TW9kYWxdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd0RlbGV0ZURpYWxvZywgc2V0U2hvd0RlbGV0ZURpYWxvZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFthY2NvdW50VG9FZGl0LCBzZXRBY2NvdW50VG9FZGl0XSA9IHVzZVN0YXRlPEFjY291bnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2FjY291bnRUb0RlbGV0ZSwgc2V0QWNjb3VudFRvRGVsZXRlXSA9IHVzZVN0YXRlPEFjY291bnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW25ld1Bhc3N3b3JkLCBzZXROZXdQYXNzd29yZF0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtlZGl0TG9hZGluZywgc2V0RWRpdExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZGVsZXRlTG9hZGluZywgc2V0RGVsZXRlTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzZWxlY3RlZENvbG9yLCBzZXRTZWxlY3RlZENvbG9yXSA9IHVzZVN0YXRlPHN0cmluZz4oJycpO1xuICBcbiAgLy8gVXNlIHRoZSByZWR1Y2VyLW1hbmFnZWQgdmFsdWVzIGRpcmVjdGx5IGluc3RlYWQgb2YgdHJhY2tlZCBzZXBhcmF0ZWx5XG4gIGNvbnN0IFtzZWFyY2hRdWVyeSwgc2V0U2VhcmNoUXVlcnldID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbdW5yZWFkQ291bnQsIHNldFVucmVhZENvdW50XSA9IHVzZVN0YXRlKDApO1xuICBcbiAgLy8gQ2FsY3VsYXRlIHVucmVhZCBjb3VudCBmb3IgdGhlIHNlbGVjdGVkIGZvbGRlclxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZEFjY291bnQgJiYgc2VsZWN0ZWRBY2NvdW50LmlkICE9PSAnbG9hZGluZy1hY2NvdW50Jykge1xuICAgICAgY29uc3QgZm9sZGVyQ291bnRzID0gdW5yZWFkQ291bnRNYXBbc2VsZWN0ZWRBY2NvdW50LmlkLnRvU3RyaW5nKCldO1xuICAgICAgaWYgKGZvbGRlckNvdW50cykge1xuICAgICAgICBzZXRVbnJlYWRDb3VudChmb2xkZXJDb3VudHNbY3VycmVudEZvbGRlcl0gfHwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRVbnJlYWRDb3VudCgwKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yICdsb2FkaW5nLWFjY291bnQnLCBzdW0gdXAgYWxsIHVucmVhZCBjb3VudHMgZm9yIHRoZSBjdXJyZW50IGZvbGRlclxuICAgICAgbGV0IHRvdGFsVW5yZWFkID0gMDtcbiAgICAgIE9iamVjdC52YWx1ZXModW5yZWFkQ291bnRNYXApLmZvckVhY2goKGZvbGRlckNvdW50cykgPT4ge1xuICAgICAgICB0b3RhbFVucmVhZCArPSBmb2xkZXJDb3VudHNbY3VycmVudEZvbGRlcl0gfHwgMDtcbiAgICAgIH0pO1xuICAgICAgc2V0VW5yZWFkQ291bnQodG90YWxVbnJlYWQpO1xuICAgIH1cbiAgfSwgW3VucmVhZENvdW50TWFwLCBzZWxlY3RlZEFjY291bnQsIGN1cnJlbnRGb2xkZXJdKTtcbiAgXG4gIC8vIEluaXRpYWxpemUgc2Vzc2lvbiBhbmQgc3RhcnQgcHJlZmV0Y2hpbmdcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBGbGFnIHRvIHByZXZlbnQgbXVsdGlwbGUgaW5pdGlhbGl6YXRpb24gYXR0ZW1wdHNcbiAgICBsZXQgaXNNb3VudGVkID0gdHJ1ZTtcbiAgICBsZXQgcmV0cnlDb3VudCA9IDA7XG4gICAgY29uc3QgTUFYX1JFVFJJRVMgPSAzO1xuICAgIGNvbnN0IFJFVFJZX0RFTEFZID0gMTAwMDsgLy8gMSBzZWNvbmRcblxuICAgIGNvbnN0IGluaXRTZXNzaW9uID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFpc01vdW50ZWQpIHJldHVybjtcbiAgICAgICAgbG9nRW1haWxPcCgnU0VTU0lPTicsICdJbml0aWFsaXppbmcgZW1haWwgc2Vzc2lvbicpO1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBcbiAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYgUmVkaXMgaXMgcmVhZHkgYmVmb3JlIG1ha2luZyBBUEkgY2FsbHNcbiAgICAgICAgY29uc3QgcmVkaXNTdGF0dXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZWRpcy9zdGF0dXMnKVxuICAgICAgICAgIC50aGVuKHJlcyA9PiByZXMuanNvbigpKVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiAoeyByZWFkeTogZmFsc2UgfSkpO1xuICAgICAgICBcbiAgICAgICAgaWYgKCFpc01vdW50ZWQpIHJldHVybjtcbiAgICAgICAgXG4gICAgICAgIC8vIENhbGwgdGhlIHNlc3Npb24gQVBJIHRvIGNoZWNrIGVtYWlsIGNyZWRlbnRpYWxzIGFuZCBzdGFydCBwcmVmZXRjaGluZ1xuICAgICAgICBsb2dFbWFpbE9wKCdTRVNTSU9OJywgJ0ZldGNoaW5nIHNlc3Npb24gZGF0YSBmcm9tIEFQSScpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL2NvdXJyaWVyL3Nlc3Npb24nLCB7XG4gICAgICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBIYW5kbGUgNDAxIFVuYXV0aG9yaXplZCB3aXRoIHJldHJ5IGxvZ2ljXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgIGlmIChyZXRyeUNvdW50IDwgTUFYX1JFVFJJRVMpIHtcbiAgICAgICAgICAgIHJldHJ5Q291bnQrKztcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTZXNzaW9uIHJlcXVlc3QgZmFpbGVkIChhdHRlbXB0ICR7cmV0cnlDb3VudH0vJHtNQVhfUkVUUklFU30pLCByZXRyeWluZyBpbiAke1JFVFJZX0RFTEFZfW1zLi4uYCk7XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgUkVUUllfREVMQVkpKTtcbiAgICAgICAgICAgIHJldHVybiBpbml0U2Vzc2lvbigpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdNYXggcmV0cmllcyByZWFjaGVkIGZvciBzZXNzaW9uIHJlcXVlc3QnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXNzaW9uIHJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgXG4gICAgICAgIC8vIExvZyBzZXNzaW9uIHJlc3BvbnNlXG4gICAgICAgIGNvbnNvbGUubG9nKCdbREVCVUddIFNlc3Npb24gQVBJIHJlc3BvbnNlIGRldGFpbHM6Jywge1xuICAgICAgICAgIGF1dGhlbnRpY2F0ZWQ6IGRhdGEuYXV0aGVudGljYXRlZCxcbiAgICAgICAgICBoYXNFbWFpbENyZWRlbnRpYWxzOiBkYXRhLmhhc0VtYWlsQ3JlZGVudGlhbHMsXG4gICAgICAgICAgYWNjb3VudHNDb3VudDogZGF0YS5hbGxBY2NvdW50cz8ubGVuZ3RoIHx8IDBcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUHJvY2VzcyBhY2NvdW50cyBpZiBhdXRoZW50aWNhdGVkXG4gICAgICAgIGlmIChkYXRhLmF1dGhlbnRpY2F0ZWQgJiYgZGF0YS5oYXNFbWFpbENyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgc2V0UHJlZmV0Y2hTdGFydGVkKEJvb2xlYW4oZGF0YS5wcmVmZXRjaFN0YXJ0ZWQpKTtcbiAgICAgICAgICBcbiAgICAgICAgICBsZXQgdXBkYXRlZEFjY291bnRzOiBBY2NvdW50W10gPSBbXTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBQcm9jZXNzIG11bHRpcGxlIGFjY291bnRzXG4gICAgICAgICAgaWYgKGRhdGEuYWxsQWNjb3VudHMgJiYgQXJyYXkuaXNBcnJheShkYXRhLmFsbEFjY291bnRzKSAmJiBkYXRhLmFsbEFjY291bnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbREVCVUddIFByb2Nlc3NpbmcgbXVsdGlwbGUgYWNjb3VudHM6JywgZGF0YS5hbGxBY2NvdW50cy5sZW5ndGgpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBkYXRhLmFsbEFjY291bnRzLmZvckVhY2goKGFjY291bnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAvLyBVc2UgZXhhY3QgZm9sZGVycyBmcm9tIElNQVBcbiAgICAgICAgICAgICAgY29uc3QgYWNjb3VudEZvbGRlcnMgPSAoYWNjb3VudC5mb2xkZXJzICYmIEFycmF5LmlzQXJyYXkoYWNjb3VudC5mb2xkZXJzKSkgXG4gICAgICAgICAgICAgICAgPyBhY2NvdW50LmZvbGRlcnMgXG4gICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC8vIEVuc3VyZSBmb2xkZXIgbmFtZXMgaGF2ZSBhY2NvdW50IHByZWZpeFxuICAgICAgICAgICAgICBjb25zdCB2YWxpZEZvbGRlcnMgPSBhY2NvdW50Rm9sZGVycy5tYXAoKGZvbGRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFmb2xkZXIuaW5jbHVkZXMoJzonKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2FjY291bnQuaWR9OiR7Zm9sZGVyfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmb2xkZXI7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgdXBkYXRlZEFjY291bnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBhY2NvdW50LmlkLFxuICAgICAgICAgICAgICAgIG5hbWU6IGFjY291bnQuZGlzcGxheV9uYW1lIHx8IGFjY291bnQuZW1haWwsXG4gICAgICAgICAgICAgICAgZW1haWw6IGFjY291bnQuZW1haWwsXG4gICAgICAgICAgICAgICAgY29sb3I6IGFjY291bnQuY29sb3IgfHwgY29sb3JQYWxldHRlWyh1cGRhdGVkQWNjb3VudHMubGVuZ3RoKSAlIGNvbG9yUGFsZXR0ZS5sZW5ndGhdLFxuICAgICAgICAgICAgICAgIGZvbGRlcnM6IHZhbGlkRm9sZGVyc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW0RFQlVHXSBDb25zdHJ1Y3RlZCBhY2NvdW50czonLCB1cGRhdGVkQWNjb3VudHMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgYWNjb3VudCBpZiBhbGxBY2NvdW50cyBpcyBub3QgYXZhaWxhYmxlXG4gICAgICAgICAgICBjb25zdCBmb2xkZXJMaXN0ID0gKGRhdGEubWFpbGJveGVzICYmIGRhdGEubWFpbGJveGVzLmxlbmd0aCA+IDApID8gXG4gICAgICAgICAgICAgIGRhdGEubWFpbGJveGVzIDogW107XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHVwZGF0ZWRBY2NvdW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgaWQ6ICdkZWZhdWx0LWFjY291bnQnLFxuICAgICAgICAgICAgICBuYW1lOiBkYXRhLmRpc3BsYXlOYW1lIHx8IGRhdGEuZW1haWwsXG4gICAgICAgICAgICAgIGVtYWlsOiBkYXRhLmVtYWlsLFxuICAgICAgICAgICAgICBjb2xvcjogY29sb3JQYWxldHRlWzBdLFxuICAgICAgICAgICAgICBmb2xkZXJzOiBmb2xkZXJMaXN0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tERUJVR10gQ29uc3RydWN0ZWQgc2luZ2xlIGZhbGxiYWNrIGFjY291bnQ6JywgdXBkYXRlZEFjY291bnRzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gVXBkYXRlIGFjY291bnRzIHN0YXRlIHVzaW5nIG91ciByZWR1Y2VyIGFjdGlvbnNcbiAgICAgICAgICAvLyBGaXJzdCwgc2V0IHRoZSBhY2NvdW50c1xuICAgICAgICAgIHNldEVtYWlscyhbXSk7ICAvLyBDbGVhciBhbnkgZXhpc3RpbmcgZW1haWxzIGZpcnN0XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTG9nIGN1cnJlbnQgc3RhdGUgZm9yIGRlYnVnZ2luZ1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdbREVCVUddIEN1cnJlbnQgc3RhdGUgYmVmb3JlIHNldHRpbmcgYWNjb3VudHM6Jywge1xuICAgICAgICAgICAgYWNjb3VudHM6IGFjY291bnRzPy5sZW5ndGggfHwgMCxcbiAgICAgICAgICAgIHNlbGVjdGVkQWNjb3VudDogc2VsZWN0ZWRBY2NvdW50Py5pZCB8fCAnbm9uZScsXG4gICAgICAgICAgICBjdXJyZW50Rm9sZGVyOiBjdXJyZW50Rm9sZGVyIHx8ICdub25lJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFVzZSBvdXIgcmVkdWNlciBhY3Rpb25zIGluc3RlYWQgb2Ygc2V0U3RhdGVcbiAgICAgICAgICBzZXRBY2NvdW50cyh1cGRhdGVkQWNjb3VudHMpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEF1dG8tc2VsZWN0IHRoZSBmaXJzdCBhY2NvdW50IGlmIGF2YWlsYWJsZVxuICAgICAgICAgIGlmICh1cGRhdGVkQWNjb3VudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RBY2NvdW50ID0gdXBkYXRlZEFjY291bnRzWzBdO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tERUJVR10gQXV0by1zZWxlY3RpbmcgZmlyc3QgYWNjb3VudDonLCBmaXJzdEFjY291bnQpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBVc2Ugb3VyIG5ldyBzZWxlY3RBY2NvdW50IGZ1bmN0aW9uIHdoaWNoIGhhbmRsZXMgc3RhdGUgYXRvbWljYWxseVxuICAgICAgICAgICAgLy8gQWRkIGEgc2xpZ2h0IGRlbGF5IHRvIGVuc3VyZSB0aGUgYWNjb3VudHMgYXJlIHNldCBmaXJzdFxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbREVCVUddIE5vdyBjYWxsaW5nIHNlbGVjdEFjY291bnQnKTtcbiAgICAgICAgICAgICAgc2VsZWN0QWNjb3VudChmaXJzdEFjY291bnQpO1xuICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVXNlciBpcyBhdXRoZW50aWNhdGVkIGJ1dCBkb2Vzbid0IGhhdmUgZW1haWwgY3JlZGVudGlhbHNcbiAgICAgICAgICBzZXRTaG93TG9naW5OZWVkZWQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBzZXNzaW9uOicsIGVycm9yKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChpc01vdW50ZWQpIHtcbiAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgaWYgKHNlc3Npb24/LnVzZXI/LmlkKSB7XG4gICAgICBpbml0U2Vzc2lvbigpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaXNNb3VudGVkID0gZmFsc2U7XG4gICAgfTtcbiAgfSwgW3Nlc3Npb24/LnVzZXI/LmlkLCBzZXRFbWFpbHMsIHNlbGVjdEFjY291bnRdKTtcbiAgXG4gIC8vIEhlbHBlciB0byBnZXQgZm9sZGVyIGljb25zXG4gIGNvbnN0IGdldEZvbGRlckljb24gPSAoZm9sZGVyOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBmb2xkZXJMb3dlciA9IGZvbGRlci50b0xvd2VyQ2FzZSgpO1xuICAgIFxuICAgIGlmIChmb2xkZXJMb3dlci5pbmNsdWRlcygnaW5ib3gnKSkge1xuICAgICAgcmV0dXJuIDxJbmJveCBjbGFzc05hbWU9XCJoLTQgdy00IHRleHQtZ3JheS01MDBcIiAvPjtcbiAgICB9IGVsc2UgaWYgKGZvbGRlckxvd2VyLmluY2x1ZGVzKCdzZW50JykpIHtcbiAgICAgIHJldHVybiA8U2VuZCBjbGFzc05hbWU9XCJoLTQgdy00IHRleHQtZ3JheS01MDBcIiAvPjtcbiAgICB9IGVsc2UgaWYgKGZvbGRlckxvd2VyLmluY2x1ZGVzKCd0cmFzaCcpKSB7XG4gICAgICByZXR1cm4gPFRyYXNoIGNsYXNzTmFtZT1cImgtNCB3LTQgdGV4dC1ncmF5LTUwMFwiIC8+O1xuICAgIH0gZWxzZSBpZiAoZm9sZGVyTG93ZXIuaW5jbHVkZXMoJ2FyY2hpdmUnKSkge1xuICAgICAgcmV0dXJuIDxBcmNoaXZlIGNsYXNzTmFtZT1cImgtNCB3LTQgdGV4dC1ncmF5LTUwMFwiIC8+O1xuICAgIH0gZWxzZSBpZiAoZm9sZGVyTG93ZXIuaW5jbHVkZXMoJ2RyYWZ0JykpIHtcbiAgICAgIHJldHVybiA8RWRpdCBjbGFzc05hbWU9XCJoLTQgdy00IHRleHQtZ3JheS01MDBcIiAvPjtcbiAgICB9IGVsc2UgaWYgKGZvbGRlckxvd2VyLmluY2x1ZGVzKCdzcGFtJykgfHwgZm9sZGVyTG93ZXIuaW5jbHVkZXMoJ2p1bmsnKSkge1xuICAgICAgcmV0dXJuIDxBbGVydE9jdGFnb24gY2xhc3NOYW1lPVwiaC00IHctNCB0ZXh0LWdyYXktNTAwXCIgLz47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiA8Rm9sZGVyIGNsYXNzTmFtZT1cImgtNCB3LTQgdGV4dC1ncmF5LTUwMFwiIC8+O1xuICAgIH1cbiAgfTtcbiAgXG4gIC8vIEhlbHBlciB0byBmb3JtYXQgZm9sZGVyIG5hbWVzXG4gIGNvbnN0IGZvcm1hdEZvbGRlck5hbWUgPSAoZm9sZGVyOiBzdHJpbmcpID0+IHtcbiAgICAvLyBFeHRyYWN0IGJhc2UgZm9sZGVyIG5hbWUgaWYgcHJlZml4ZWRcbiAgICBjb25zdCBiYXNlRm9sZGVyTmFtZSA9IGZvbGRlci5pbmNsdWRlcygnOicpID8gZm9sZGVyLnNwbGl0KCc6JylbMV0gOiBmb2xkZXI7XG4gICAgcmV0dXJuIGJhc2VGb2xkZXJOYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgYmFzZUZvbGRlck5hbWUuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTtcbiAgfTtcblxuICAvLyBIYW5kbGUgYWN0aW9ucyAtIHJlcGxhY2Ugd2l0aCB1c2VSZWR1Y2VyLWJhc2VkIGZ1bmN0aW9uc1xuICBjb25zdCBoYW5kbGVNYWlsYm94Q2hhbmdlID0gKGZvbGRlcjogc3RyaW5nLCBhY2NvdW50SWQ/OiBzdHJpbmcpID0+IHtcbiAgICAvLyBTaW1wbHkgY2FsbCBvdXIgbmV3IGNoYW5nZUZvbGRlciBmdW5jdGlvbiB3aGljaCBoYW5kbGVzIGV2ZXJ5dGhpbmcgYXRvbWljYWxseVxuICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgY2hhbmdlRm9sZGVyKGZvbGRlciwgYWNjb3VudElkKVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH0pO1xuICB9O1xuXG4gIC8vIEhhbmRsZSBhY2NvdW50IHNlbGVjdGlvbiAtIHJlcGxhY2Ugd2l0aCByZWR1Y2VyLWJhc2VkIGZ1bmN0aW9uXG4gIGNvbnN0IGhhbmRsZUFjY291bnRTZWxlY3QgPSAoYWNjb3VudDogQWNjb3VudCkgPT4ge1xuICAgIC8vIEFkZCBleHRlbnNpdmUgZGVidWdnaW5nIHRvIHRyYWNrIHRoZSBwcm9jZXNzXG4gICAgY29uc29sZS5sb2coJ1tERUJVR10gaGFuZGxlQWNjb3VudFNlbGVjdCBjYWxsZWQgd2l0aCBhY2NvdW50OicsIHtcbiAgICAgIGlkOiBhY2NvdW50LmlkLCBcbiAgICAgIGVtYWlsOiBhY2NvdW50LmVtYWlsLFxuICAgICAgZm9sZGVyczogYWNjb3VudC5mb2xkZXJzPy5sZW5ndGhcbiAgICB9KTtcbiAgICBcbiAgICAvLyBTa2lwIGlmIG5vIHZhbGlkIGFjY291bnQgcHJvdmlkZWRcbiAgICBpZiAoIWFjY291bnQgfHwgIWFjY291bnQuaWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgYWNjb3VudCBwYXNzZWQgdG8gaGFuZGxlQWNjb3VudFNlbGVjdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBTa2lwIGlmIHRoaXMgaXMgYWxyZWFkeSB0aGUgc2VsZWN0ZWQgYWNjb3VudFxuICAgIGlmIChzZWxlY3RlZEFjY291bnQ/LmlkID09PSBhY2NvdW50LmlkKSB7XG4gICAgICBjb25zb2xlLmxvZygnW0RFQlVHXSBBY2NvdW50IGFscmVhZHkgc2VsZWN0ZWQsIHNraXBwaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIFNpbXBseSBjYWxsIG91ciBuZXcgc2VsZWN0QWNjb3VudCBmdW5jdGlvbiB3aGljaCBoYW5kbGVzIGV2ZXJ5dGhpbmcgYXRvbWljYWxseVxuICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgXG4gICAgLy8gQ2xlYXIgYWxsIGV4aXN0aW5nIHNlbGVjdGlvbnMgZmlyc3RcbiAgICBjb25zb2xlLmxvZygnW0RFQlVHXSBOb3cgc2VsZWN0aW5nIGFjY291bnQgdGhyb3VnaCByZWR1Y2VyIGFjdGlvbicpO1xuICAgIHNlbGVjdEFjY291bnQoYWNjb3VudCk7XG4gICAgXG4gICAgLy8gTG9nIHdoYXQgaGFwcGVuZWRcbiAgICBjb25zb2xlLmxvZygnW0RFQlVHXSBBY2NvdW50IHNlbGVjdGlvbiBjb21wbGV0ZWQnKTtcbiAgICBcbiAgICAvLyBHaXZlIHNvbWUgdGltZSBmb3IgdGhlIFVJIHRvIHVwZGF0ZVxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0TG9hZGluZyhmYWxzZSksIDMwMCk7XG4gIH07XG5cbiAgLy8gRW1haWwgYWN0aW9uc1xuICBjb25zdCBoYW5kbGVSZXBseSA9ICgpID0+IHtcbiAgICBpZiAoIXNlbGVjdGVkRW1haWwpIHJldHVybjtcbiAgICBzZXRDb21wb3NlVHlwZSgncmVwbHknKTtcbiAgICBzZXRTaG93Q29tcG9zZU1vZGFsKHRydWUpO1xuICB9O1xuICBcbiAgY29uc3QgaGFuZGxlUmVwbHlBbGwgPSAoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RlZEVtYWlsKSByZXR1cm47XG4gICAgc2V0Q29tcG9zZVR5cGUoJ3JlcGx5LWFsbCcpO1xuICAgIHNldFNob3dDb21wb3NlTW9kYWwodHJ1ZSk7XG4gIH07XG4gIFxuICBjb25zdCBoYW5kbGVGb3J3YXJkID0gKCkgPT4ge1xuICAgIGlmICghc2VsZWN0ZWRFbWFpbCkgcmV0dXJuO1xuICAgIHNldENvbXBvc2VUeXBlKCdmb3J3YXJkJyk7XG4gICAgc2V0U2hvd0NvbXBvc2VNb2RhbCh0cnVlKTtcbiAgfTtcbiAgXG4gIGNvbnN0IGhhbmRsZUNvbXBvc2VOZXcgPSAoKSA9PiB7XG4gICAgc2V0Q29tcG9zZVR5cGUoJ25ldycpO1xuICAgIHNldFNob3dDb21wb3NlTW9kYWwodHJ1ZSk7XG4gIH07XG5cbiAgLy8gSGFuZGxlIGJ1bGsgYWN0aW9uc1xuICBjb25zdCBoYW5kbGVCdWxrQWN0aW9uID0gYXN5bmMgKGFjdGlvbjogJ2RlbGV0ZScgfCAnbWFyay1yZWFkJyB8ICdtYXJrLXVucmVhZCcgfCAnYXJjaGl2ZScpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRFbWFpbElkcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBcbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgc2V0U2hvd0RlbGV0ZUNvbmZpcm0odHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgIGNhc2UgJ21hcmstcmVhZCc6XG4gICAgICAgIC8vIE1hcmsgYWxsIHNlbGVjdGVkIGVtYWlscyBhcyByZWFkXG4gICAgICAgIGZvciAoY29uc3QgZW1haWxJZCBvZiBzZWxlY3RlZEVtYWlsSWRzKSB7XG4gICAgICAgICAgYXdhaXQgbWFya0VtYWlsQXNSZWFkKGVtYWlsSWQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgIGNhc2UgJ21hcmstdW5yZWFkJzpcbiAgICAgICAgLy8gTWFyayBhbGwgc2VsZWN0ZWQgZW1haWxzIGFzIHVucmVhZFxuICAgICAgICBmb3IgKGNvbnN0IGVtYWlsSWQgb2Ygc2VsZWN0ZWRFbWFpbElkcykge1xuICAgICAgICAgIGF3YWl0IG1hcmtFbWFpbEFzUmVhZChlbWFpbElkLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgY2FzZSAnYXJjaGl2ZSc6XG4gICAgICAgIC8vIEFyY2hpdmUgZnVuY3Rpb25hbGl0eSB3b3VsZCBiZSBpbXBsZW1lbnRlZCBoZXJlXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTZW5kRW1haWwgPSBhc3luYyAoZW1haWxEYXRhOiBFbWFpbERhdGEpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VuZEVtYWlsKGVtYWlsRGF0YSk7XG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQuZXJyb3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUNvbmZpcm0gPSBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgZGVsZXRlRW1haWxzKHNlbGVjdGVkRW1haWxJZHMpO1xuICAgIHNldFNob3dEZWxldGVDb25maXJtKGZhbHNlKTtcbiAgICBcbiAgICAvLyBDbGVhciBzZWxlY3RlZCBlbWFpbHMgYWZ0ZXIgZGVsZXRpb25cbiAgICAvLyBVc2luZyBzZXRFbWFpbHMgd2lsbCByZXNldCB0aGUgc2VsZWN0aW9uIHN0YXRlXG4gICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICBzZXRQYWdlKDEpO1xuICAgIGxvYWRFbWFpbHMoMSwgMjAsIGZhbHNlKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIC8vIFNlbGVjdGlvbiB3aWxsIGJlIGNsZWFyZWQgYnkgbG9hZGluZyBuZXcgZW1haWxzXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICB9KTtcbiAgfTtcbiAgXG4gIGNvbnN0IGhhbmRsZUdvVG9Mb2dpbiA9ICgpID0+IHtcbiAgICByb3V0ZXIucHVzaCgnL2NvdXJyaWVyL2xvZ2luJyk7XG4gIH07XG5cbiAgLy8gVXBkYXRlIHRoZSBhY2NvdW50cyBmcm9tIHN0YXRlIC0gZml4IHR5cGUgaXNzdWVzXG4gIGNvbnN0IHNldEFjY291bnRzID0gKG5ld0FjY291bnRzOiBBY2NvdW50W10pID0+IHtcbiAgICBjb25zb2xlLmxvZygnW0RFQlVHXSBTZXR0aW5nIGFjY291bnRzOicsIG5ld0FjY291bnRzKTtcbiAgICBcbiAgICAvLyBJbiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24sIHdlJ2QgZGlzcGF0Y2ggYW4gYWN0aW9uXG4gICAgLy8gQnV0IHNpbmNlIHdlIGRvbid0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGUgcmVkdWNlcidzIGRpc3BhdGNoIGZ1bmN0aW9uLFxuICAgIC8vIHdlIG5lZWQgdG8gdXNlIHRoZSBleHBvcnRlZCBhY3Rpb25zIGZyb20gb3VyIGhvb2tcbiAgICBcbiAgICAvLyBUaGlzIGRpc3BhdGNoIGZ1bmN0aW9uIHNob3VsZCBiZSBtYWRlIGF2YWlsYWJsZSBieSBvdXIgaG9va1xuICAgIGNvbnN0IHdpbmRvd1dpdGhEaXNwYXRjaCA9IHdpbmRvdyBhcyBhbnk7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3dXaXRoRGlzcGF0Y2guZGlzcGF0Y2hFbWFpbEFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gVXNlIHRoZSBnbG9iYWwgZGlzcGF0Y2ggZnVuY3Rpb24gaWYgYXZhaWxhYmxlXG4gICAgICB3aW5kb3dXaXRoRGlzcGF0Y2guZGlzcGF0Y2hFbWFpbEFjdGlvbih7IFxuICAgICAgICB0eXBlOiAnU0VUX0FDQ09VTlRTJywgXG4gICAgICAgIHBheWxvYWQ6IG5ld0FjY291bnRzIFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBkaXNwYXRjaCBTRVRfQUNDT1VOVFMgYWN0aW9uIC0gbm8gZGlzcGF0Y2ggZnVuY3Rpb24gYXZhaWxhYmxlJyk7XG4gICAgICBcbiAgICAgIC8vIEZhbGxiYWNrOiBUcnkgdG8gZGlyZWN0bHkgbW9kaWZ5IHRoZSBhY2NvdW50cyBhcnJheSBpZiB3ZSBoYXZlIGFjY2Vzc1xuICAgICAgLy8gVGhpcyBpc24ndCBpZGVhbCBidXQgZW5zdXJlcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGR1cmluZyB0cmFuc2l0aW9uXG4gICAgICBjb25zb2xlLmxvZygnW0RFQlVHXSBVc2luZyBmYWxsYmFjayBtZXRob2QgdG8gdXBkYXRlIGFjY291bnRzJyk7XG4gICAgICBcbiAgICAgIC8vIE91ciByZWR1Y2VyIHNob3VsZCBleHBvc2UgdGhpcyBhY3Rpb25cbiAgICAgIGNvbnN0IHVzZUVtYWlsU3RhdGVEaXNwYXRjaCA9IHdpbmRvd1dpdGhEaXNwYXRjaC5fX2VtYWlsU3RhdGVEaXNwYXRjaDtcbiAgICAgIGlmICh0eXBlb2YgdXNlRW1haWxTdGF0ZURpc3BhdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHVzZUVtYWlsU3RhdGVEaXNwYXRjaCh7IFxuICAgICAgICAgIHR5cGU6ICdTRVRfQUNDT1VOVFMnLCBcbiAgICAgICAgICBwYXlsb2FkOiBuZXdBY2NvdW50cyBcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBmYWxsYmFjayBkaXNwYXRjaCBtZXRob2QgYXZhaWxhYmxlIGVpdGhlcicpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U2ltcGxpZmllZExvYWRpbmdGaXggLz5cbiAgICAgIFxuICAgICAgey8qIE1haW4gbGF5b3V0ICovfVxuICAgICAgPG1haW4gY2xhc3NOYW1lPVwidy1mdWxsIGgtc2NyZWVuIGJnLWJsYWNrXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCBweC00IHB0LTEyIHBiLTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC1mdWxsIGJnLWNhcm5ldC1iZ1wiPlxuICAgICAgICAgICAgey8qIFVzZSBFbWFpbFNpZGViYXIgY29tcG9uZW50IGluc3RlYWQgb2YgaW5saW5lIHNpZGViYXIgKi99XG4gICAgICAgICAgICA8RW1haWxTaWRlYmFyXG4gICAgICAgICAgICAgIGFjY291bnRzPXthY2NvdW50c31cbiAgICAgICAgICAgICAgc2VsZWN0ZWRBY2NvdW50PXtzZWxlY3RlZEFjY291bnR9XG4gICAgICAgICAgICAgIHNlbGVjdGVkRm9sZGVycz17c2VsZWN0ZWRGb2xkZXJzfVxuICAgICAgICAgICAgICBjdXJyZW50Rm9sZGVyPXtjdXJyZW50Rm9sZGVyfVxuICAgICAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nIHx8IGlzTG9hZGluZ31cbiAgICAgICAgICAgICAgdW5yZWFkQ291bnQ9e3VucmVhZENvdW50TWFwfVxuICAgICAgICAgICAgICBzaG93QWRkQWNjb3VudEZvcm09e3Nob3dBZGRBY2NvdW50Rm9ybX1cbiAgICAgICAgICAgICAgb25Gb2xkZXJDaGFuZ2U9e2hhbmRsZU1haWxib3hDaGFuZ2V9XG4gICAgICAgICAgICAgIG9uUmVmcmVzaD17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc2V0UGFnZSgxKTtcbiAgICAgICAgICAgICAgICBsb2FkRW1haWxzKHBhZ2UsIDEwLCBmYWxzZSkuZmluYWxseSgoKSA9PiBzZXRMb2FkaW5nKGZhbHNlKSk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uQ29tcG9zZU5ldz17aGFuZGxlQ29tcG9zZU5ld31cbiAgICAgICAgICAgICAgb25BY2NvdW50U2VsZWN0PXtoYW5kbGVBY2NvdW50U2VsZWN0fVxuICAgICAgICAgICAgICBvblNob3dBZGRBY2NvdW50Rm9ybT17c2V0U2hvd0FkZEFjY291bnRGb3JtfVxuICAgICAgICAgICAgICBvbkFkZEFjY291bnQ9e2FzeW5jIChmb3JtRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tERUJVR10gQWRkIGFjY291bnQgZm9ybSBzdWJtaXNzaW9uOicsIGZvcm1EYXRhKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBQdWxsIHZhbHVlcyBmcm9tIGZvcm0gd2l0aCBwcm9wZXIgdHlwZSBoYW5kbGluZ1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSB7XG4gICAgICAgICAgICAgICAgICBlbWFpbDogZm9ybURhdGEuZ2V0KCdlbWFpbCcpPy50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IGZvcm1EYXRhLmdldCgncGFzc3dvcmQnKT8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgIGhvc3Q6IGZvcm1EYXRhLmdldCgnaG9zdCcpPy50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgcG9ydDogcGFyc2VJbnQoZm9ybURhdGEuZ2V0KCdwb3J0Jyk/LnRvU3RyaW5nKCkgfHwgJzk5MycpLFxuICAgICAgICAgICAgICAgICAgc2VjdXJlOiBmb3JtRGF0YS5nZXQoJ3NlY3VyZScpID09PSAnb24nLFxuICAgICAgICAgICAgICAgICAgZGlzcGxheV9uYW1lOiBmb3JtRGF0YS5nZXQoJ2Rpc3BsYXlfbmFtZScpPy50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgc210cF9ob3N0OiBmb3JtRGF0YS5nZXQoJ3NtdHBfaG9zdCcpPy50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgc210cF9wb3J0OiBmb3JtRGF0YS5nZXQoJ3NtdHBfcG9ydCcpPy50b1N0cmluZygpID8gXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGZvcm1EYXRhLmdldCgnc210cF9wb3J0Jyk/LnRvU3RyaW5nKCkgfHwgJzU4NycpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgc210cF9zZWN1cmU6IGZvcm1EYXRhLmdldCgnc210cF9zZWN1cmUnKSA9PT0gJ29uJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgZGlzcGxheV9uYW1lIGlzIGVtcHR5LCB1c2UgZW1haWxcbiAgICAgICAgICAgICAgICBpZiAoIWZvcm1WYWx1ZXMuZGlzcGxheV9uYW1lKSB7XG4gICAgICAgICAgICAgICAgICBmb3JtVmFsdWVzLmRpc3BsYXlfbmFtZSA9IGZvcm1WYWx1ZXMuZW1haWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAvLyBGaXJzdCB0ZXN0IHRoZSBjb25uZWN0aW9uXG4gICAgICAgICAgICAgICAgICBjb25zdCB0ZXN0UmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9jb3Vycmllci90ZXN0LWNvbm5lY3Rpb24nLCB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgZW1haWw6IGZvcm1WYWx1ZXMuZW1haWwsXG4gICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IGZvcm1WYWx1ZXMucGFzc3dvcmQsXG4gICAgICAgICAgICAgICAgICAgICAgaG9zdDogZm9ybVZhbHVlcy5ob3N0LFxuICAgICAgICAgICAgICAgICAgICAgIHBvcnQ6IGZvcm1WYWx1ZXMucG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICBzZWN1cmU6IGZvcm1WYWx1ZXMuc2VjdXJlXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IGF3YWl0IHRlc3RSZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIGlmICghdGVzdFJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0ZXN0UmVzdWx0LmVycm9yIHx8ICdDb25uZWN0aW9uIHRlc3QgZmFpbGVkJyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDb25uZWN0aW9uIHRlc3Qgc3VjY2Vzc2Z1bDonLCB0ZXN0UmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgLy8gT25seSBkZWNsYXJlIHJlYWxBY2NvdW50cyBvbmNlIGJlZm9yZSB1c2luZyBmb3IgY29sb3IgYXNzaWdubWVudFxuICAgICAgICAgICAgICAgICAgY29uc3QgcmVhbEFjY291bnRzID0gYWNjb3VudHMuZmlsdGVyKGEgPT4gYS5pZCAhPT0gJ2xvYWRpbmctYWNjb3VudCcpO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2F2ZVJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvY291cnJpZXIvYWNjb3VudCcsIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGZvcm1WYWx1ZXMpXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNhdmVSZXN1bHQgPSBhd2FpdCBzYXZlUmVzcG9uc2UuanNvbigpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFzYXZlUmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNhdmVSZXN1bHQuZXJyb3IgfHwgJ0ZhaWxlZCB0byBhZGQgYWNjb3VudCcpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29uc3QgcmVhbEFjY291bnQgPSBzYXZlUmVzdWx0LmFjY291bnQ7XG4gICAgICAgICAgICAgICAgICByZWFsQWNjb3VudC5jb2xvciA9IGNvbG9yUGFsZXR0ZVtyZWFsQWNjb3VudHMubGVuZ3RoICUgY29sb3JQYWxldHRlLmxlbmd0aF07XG4gICAgICAgICAgICAgICAgICByZWFsQWNjb3VudC5mb2xkZXJzID0gdGVzdFJlc3VsdC5kZXRhaWxzLnNhbXBsZUZvbGRlcnMgfHwgWydJTkJPWCcsICdTZW50JywgJ0RyYWZ0cycsICdUcmFzaCddO1xuICAgICAgICAgICAgICAgICAgc2V0QWNjb3VudHMoWy4uLmFjY291bnRzLCByZWFsQWNjb3VudF0pO1xuICAgICAgICAgICAgICAgICAgc2V0U2hvd0FkZEFjY291bnRGb3JtKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIHRvYXN0KHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQWNjb3VudCBhZGRlZCBzdWNjZXNzZnVsbHlcIixcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBZb3VyIGVtYWlsIGFjY291bnQgJHtmb3JtVmFsdWVzLmVtYWlsfSBoYXMgYmVlbiBhZGRlZC5gLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogNTAwMFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFkZGluZyBhY2NvdW50OicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIHRvYXN0KHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiRmFpbGVkIHRvIGFkZCBhY2NvdW50XCIsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudDogXCJkZXN0cnVjdGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogNTAwMFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb25FZGl0QWNjb3VudD17YXN5bmMgKGFjY291bnQpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBsYXRlc3QgYWNjb3VudCBkYXRhIGZyb20gYWNjb3VudHMgYXJyYXlcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRBY2NvdW50ID0gYWNjb3VudHMuZmluZChhID0+IGEuaWQgPT09IGFjY291bnQuaWQpO1xuICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRBY2NvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEFjY291bnRUb0VkaXQodXBkYXRlZEFjY291bnQgYXMgYW55KTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRDb2xvcih1cGRhdGVkQWNjb3VudC5jb2xvciB8fCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIHNldFNob3dFZGl0TW9kYWwodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0b2FzdCh7XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiRXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJDb3VsZCBub3QgZmluZCBhY2NvdW50IGRhdGFcIixcbiAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50OiBcImRlc3RydWN0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwcmVwYXJpbmcgYWNjb3VudCBlZGl0OlwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICB0b2FzdCh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkVycm9yXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkZhaWxlZCB0byBsb2FkIGFjY291bnQgc2V0dGluZ3NcIixcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudDogXCJkZXN0cnVjdGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbkRlbGV0ZUFjY291bnQ9eyhhY2NvdW50KSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0QWNjb3VudFRvRGVsZXRlKGFjY291bnQgYXMgYW55KTsgXG4gICAgICAgICAgICAgICAgc2V0U2hvd0RlbGV0ZURpYWxvZyh0cnVlKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb25TZWxlY3RFbWFpbD17KGVtYWlsSWQsIGFjY291bnRJZCwgZm9sZGVyKSA9PiB7IFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZW1haWxJZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgIGhhbmRsZUVtYWlsU2VsZWN0KGVtYWlsSWQsIGFjY291bnRJZCB8fCAnJywgZm9sZGVyIHx8IGN1cnJlbnRGb2xkZXIpOyBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHsuLi4oe30gYXMgYW55KX1cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIHsvKiBQYW5lbCAyOiBFbWFpbCBMaXN0IC0gQWx3YXlzIHZpc2libGUgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctODAgZmxleCBmbGV4LWNvbCBib3JkZXItciBib3JkZXItZ3JheS0xMDAgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICAgIHsvKiBIZWFkZXIgd2l0aG91dCBzZWFyY2ggYmFyIG9yIHByb2ZpbGUgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC0yIGJvcmRlci1iIGJvcmRlci1ncmF5LTEwMCBiZy13aGl0ZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICA8QnV0dG9uIFxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCIgXG4gICAgICAgICAgICAgICAgICBzaXplPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtZDpoaWRkZW4gaC05IHctOVwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRNb2JpbGVTaWRlYmFyT3BlbighbW9iaWxlU2lkZWJhck9wZW4pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxNZW51IGNsYXNzTmFtZT1cImgtNSB3LTUgdGV4dC1ncmF5LTUwMFwiIC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAge2dldEZvbGRlckljb24oY3VycmVudEZvbGRlcil9XG4gICAgICAgICAgICAgICAgICAgIHsvKiBFeHRyYWN0IGJhc2UgZm9sZGVyIGFuZCBzaG93IGVtYWlsIGFzIHByZWZpeCAqL31cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWwtMiBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3NlbGVjdGVkQWNjb3VudD8uZW1haWwgPyBgJHtzZWxlY3RlZEFjY291bnQuZW1haWx9OiBgIDogJyd9XG4gICAgICAgICAgICAgICAgICAgICAge2Zvcm1hdEZvbGRlck5hbWUoY3VycmVudEZvbGRlci5pbmNsdWRlcygnOicpID8gY3VycmVudEZvbGRlci5zcGxpdCgnOicpWzFdIDogY3VycmVudEZvbGRlcil9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHsvKiBCdXR0b25zIHJlbW92ZWQgZnJvbSBoZXJlIHRvIGF2b2lkIGR1cGxpY2F0aW9uIHdpdGggdGhlIEJ1bGtBY3Rpb25zVG9vbGJhciAqL31cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB7LyogRW1haWwgTGlzdCAtIEFsd2F5cyB2aXNpYmxlICovfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gYmctd2hpdGVcIj5cbiAgICAgICAgICAgICAgICB7aXNMb2FkaW5nID8gKFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxMb2FkZXIyIGNsYXNzTmFtZT1cImgtOCB3LTggdGV4dC1ibHVlLTUwMCBhbmltYXRlLXNwaW4gbWItMlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNTAwXCI+TG9hZGluZyBlbWFpbHMuLi48L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSA6IGVycm9yID8gKFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy1tZCBwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8QWxlcnQgdmFyaWFudD1cImRlc3RydWN0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8QWxlcnRDaXJjbGUgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8QWxlcnRUaXRsZT5FcnJvcjwvQWxlcnRUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxBbGVydERlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7ZXJyb3J9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0FsZXJ0RGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9BbGVydD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgey8qIEVtYWlsIExpc3QgKi99XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgb25TY3JvbGw9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IHRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlVG9Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxQZXJjZW50YWdlID0gKHNjcm9sbFRvcCArIGNsaWVudEhlaWdodCkgLyBzY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIGxhc3Qgc2Nyb2xsIHBvc2l0aW9uIHRvIGRldGVjdCBkaXJlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RTY3JvbGxUb3AgPSB0YXJnZXQuZGF0YXNldC5sYXN0U2Nyb2xsVG9wID8gXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KHRhcmdldC5kYXRhc2V0Lmxhc3RTY3JvbGxUb3ApIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGluZ0Rvd24gPSBzY3JvbGxUb3AgPiBsYXN0U2Nyb2xsVG9wO1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgbGFzdCBzY3JvbGwgcG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5kYXRhc2V0Lmxhc3RTY3JvbGxUb3AgPSBzY3JvbGxUb3AudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCBmcmVxdWVudCBsb2cgc3BhbSB3aXRoIGEgdGltZXN0YW1wIGNoZWNrXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdExvZyA9IHBhcnNlSW50KHRhcmdldC5kYXRhc2V0Lmxhc3RMb2dUaW1lIHx8ICcwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm93IC0gbGFzdExvZyA+IDUwMCkgeyAvLyBMb2cgYXQgbW9zdCBldmVyeSA1MDBtc1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgW0RFQlVHLVdSQVBQRVItU0NST0xMXSBEaXN0YW5jZTogJHtkaXN0YW5jZVRvQm90dG9tfXB4LCAlOiAke01hdGgucm91bmQoc2Nyb2xsUGVyY2VudGFnZSAqIDEwMCl9JSwgZGlyZWN0aW9uOiAke3Njcm9sbGluZ0Rvd24gPyAnZG93bicgOiAndXAnfSwgbW9yZTogJHtwYWdlIDwgdG90YWxQYWdlc30sIGxvYWRpbmc6ICR7aXNMb2FkaW5nfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZGF0YXNldC5sYXN0TG9nVGltZSA9IG5vdy50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0aHJvdHRsZSB0byBwcmV2ZW50IG11bHRpcGxlIHJhcGlkIHRyaWdnZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0VHJpZ2dlciA9IHBhcnNlSW50KHRhcmdldC5kYXRhc2V0Lmxhc3RUcmlnZ2VyVGltZSB8fCAnMCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGhyb3R0bGVUaW1lID0gMTAwMDsgLy8gMSBzZWNvbmQgdGhyb3R0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ1JJVElDQUwgRklYOiBPbmx5IHRyaWdnZXIgbG9hZGluZyBtb3JlIGVtYWlscyB3aGVuOlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gMS4gVXNlciBpcyBzY3JvbGxpbmcgRE9XTiAobm90IHVwKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gMi4gVXNlciBpcyBFWEFDVExZIGF0IHRoZSBib3R0b20gKGRpc3RhbmNlIDwgNXB4KVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gMy4gTm90IGN1cnJlbnRseSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyA0LiBNb3JlIGVtYWlscyBleGlzdCB0byBsb2FkXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyA1LiBOb3QgdGhyb3R0bGVkIChoYXNuJ3QgdHJpZ2dlcmVkIGluIGxhc3Qgc2Vjb25kKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbGluZ0Rvd24gJiYgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2VUb0JvdHRvbSA8IDUgJiYgLy8gTXVjaCBzdHJpY3RlciAtIHRydWx5IGF0IGJvdHRvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpc0xvYWRpbmcgJiYgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSA8IHRvdGFsUGFnZXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3cgLSBsYXN0VHJpZ2dlciA+IHRocm90dGxlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgW0RFQlVHLVdSQVBQRVItVFJJR0dFUl0gKioqIEFUIEJPVFRPTSAqKiogTG9hZGluZyBtb3JlIGVtYWlsc2ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZGF0YXNldC5sYXN0VHJpZ2dlclRpbWUgPSBub3cudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTG9hZE1vcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge2VtYWlscy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtY2VudGVyIHAtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbmJveCBjbGFzc05hbWU9XCJoLTEyIHctMTIgdGV4dC1ncmF5LTMwMCBteC1hdXRvIG1iLTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDBcIj5ObyBlbWFpbHMgZm91bmQ8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTUwMCBtdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c2VhcmNoUXVlcnkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYE5vIHJlc3VsdHMgZm91bmQgZm9yIFwiJHtzZWFyY2hRdWVyeX1cImBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBgWW91ciAke2N1cnJlbnRGb2xkZXIudG9Mb3dlckNhc2UoKX0gaXMgZW1wdHlgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEVtYWlsTGlzdCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWxzPXtlbWFpbHN9IFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEVtYWlsSWRzPXtzZWxlY3RlZEVtYWlsSWRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEVtYWlsPXtzZWxlY3RlZEVtYWlsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdEVtYWlsPXsoZW1haWxJZCwgZW1haWxBY2NvdW50SWQsIGVtYWlsRm9sZGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHVzZSB0aGUgZW1haWwncyBvd24gYWNjb3VudElkIGFuZCBmb2xkZXIgaWYgYXZhaWxhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRW1haWxTZWxlY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWFpbElkLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsQWNjb3VudElkIHx8IHNlbGVjdGVkQWNjb3VudD8uaWQgfHwgJycsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWxGb2xkZXIgfHwgY3VycmVudEZvbGRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uVG9nZ2xlU2VsZWN0PXt0b2dnbGVFbWFpbFNlbGVjdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ub2dnbGVTZWxlY3RBbGw9e3RvZ2dsZVNlbGVjdEFsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ub2dnbGVTdGFycmVkPXt0b2dnbGVTdGFycmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkxvYWRNb3JlPXtoYW5kbGVMb2FkTW9yZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTW9yZUVtYWlscz17cGFnZSA8IHRvdGFsUGFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb2xkZXI9e2N1cnJlbnRGb2xkZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEVtYWlscz17ZW1haWxzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25CdWxrQWN0aW9uPXtoYW5kbGVCdWxrQWN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBQYW5lbCAzOiBFbWFpbCBEZXRhaWwgLSBBbHdheXMgdmlzaWJsZSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICAgIHsvKiBDb250ZW50IGZvciBQYW5lbCAzIGJhc2VkIG9uIHN0YXRlIGJ1dCBhbHdheXMgdmlzaWJsZSAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3ctaGlkZGVuIGJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAge3NlbGVjdGVkRW1haWwgPyAoXG4gICAgICAgICAgICAgICAgICA8RW1haWxEZXRhaWxWaWV3IFxuICAgICAgICAgICAgICAgICAgICBlbWFpbD17c2VsZWN0ZWRFbWFpbCBhcyBhbnl9XG4gICAgICAgICAgICAgICAgICAgIG9uQmFjaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUVtYWlsU2VsZWN0KCcnLCAnJywgJycpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBzaWRlYmFyIHN0YXlzIHZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICBzZXRTaWRlYmFyT3Blbih0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgb25SZXBseT17aGFuZGxlUmVwbHl9XG4gICAgICAgICAgICAgICAgICAgIG9uUmVwbHlBbGw9e2hhbmRsZVJlcGx5QWxsfVxuICAgICAgICAgICAgICAgICAgICBvbkZvcndhcmQ9e2hhbmRsZUZvcndhcmR9XG4gICAgICAgICAgICAgICAgICAgIG9uVG9nZ2xlU3Rhcj17KCkgPT4gdG9nZ2xlU3RhcnJlZChzZWxlY3RlZEVtYWlsLmlkKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHA+U2VsZWN0IGFuIGVtYWlsIHRvIHZpZXcgb3I8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtcHJpbWFyeSBtdC0yIGhvdmVyOnVuZGVybGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbXBvc2VUeXBlKCduZXcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd0NvbXBvc2VNb2RhbCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zZSBhIG5ldyBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG5cbiAgICAgIHsvKiBNb2RhbHMgYW5kIERpYWxvZ3MgKi99XG4gICAgICA8RGVsZXRlQ29uZmlybURpYWxvZyBcbiAgICAgICAgc2hvdz17c2hvd0RlbGV0ZUNvbmZpcm19XG4gICAgICAgIHNlbGVjdGVkQ291bnQ9e3NlbGVjdGVkRW1haWxJZHMubGVuZ3RofVxuICAgICAgICBvbkNvbmZpcm09e2hhbmRsZURlbGV0ZUNvbmZpcm19XG4gICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBzZXRTaG93RGVsZXRlQ29uZmlybShmYWxzZSl9XG4gICAgICAvPlxuXG4gICAgICB7LyogQ29tcG9zZSBFbWFpbCBEaWFsb2cgKi99XG4gICAgICA8RGlhbG9nIG9wZW49e3Nob3dDb21wb3NlTW9kYWx9IG9uT3BlbkNoYW5nZT17KG9wZW4pID0+ICFvcGVuICYmIHNldFNob3dDb21wb3NlTW9kYWwoZmFsc2UpfT5cbiAgICAgICAgPERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwic206bWF4LXctWzgwMHB4XSBwLTAgaC1bODB2aF1cIj5cbiAgICAgICAgICA8RGlhbG9nVGl0bGUgYXNDaGlsZD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5OZXcgTWVzc2FnZTwvc3Bhbj5cbiAgICAgICAgICA8L0RpYWxvZ1RpdGxlPlxuICAgICAgICAgIDxDb21wb3NlRW1haWwgXG4gICAgICAgICAgICB0eXBlPXtjb21wb3NlVHlwZX1cbiAgICAgICAgICAgIGluaXRpYWxFbWFpbD17Y29tcG9zZVR5cGUgIT09ICduZXcnID8gKHNlbGVjdGVkRW1haWwgYXMgYW55KSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIG9uU2VuZD17YXN5bmMgKGVtYWlsRGF0YSkgPT4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlbmRFbWFpbChlbWFpbERhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzZW5kaW5nIGVtYWlsOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dDb21wb3NlTW9kYWwoZmFsc2UpfVxuICAgICAgICAgICAgYWNjb3VudHM9e2FjY291bnRzfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRGlhbG9nQ29udGVudD5cbiAgICAgIDwvRGlhbG9nPlxuXG4gICAgICB7LyogRWRpdCBQYXNzd29yZCBNb2RhbCAqL31cbiAgICAgIDxEaWFsb2cgb3Blbj17c2hvd0VkaXRNb2RhbH0gb25PcGVuQ2hhbmdlPXtvcGVuID0+IHsgXG4gICAgICAgIGlmICghb3Blbikge1xuICAgICAgICAgIHNldFNob3dFZGl0TW9kYWwoZmFsc2UpO1xuICAgICAgICAgIHNldEVkaXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICBzZXRBY2NvdW50VG9FZGl0KG51bGwpO1xuICAgICAgICAgIHNldE5ld1Bhc3N3b3JkKCcnKTtcbiAgICAgICAgICBzZXRTZWxlY3RlZENvbG9yKCcnKTtcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgIH1cbiAgICAgIH19PlxuICAgICAgICA8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJzbTptYXgtdy1bNTAwcHhdIGJnLXdoaXRlIHRleHQtZ3JheS04MDBcIj5cbiAgICAgICAgICA8RGlhbG9nVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTgwMFwiPkVkaXQgQWNjb3VudCBTZXR0aW5nczwvRGlhbG9nVGl0bGU+XG4gICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2FzeW5jIGUgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaWYgKCFhY2NvdW50VG9FZGl0KSByZXR1cm47XG4gICAgICAgICAgICBzZXRFZGl0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvcm1FbGVtZW50ID0gZS50YXJnZXQgYXMgSFRNTEZvcm1FbGVtZW50O1xuICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IChmb3JtRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjZGlzcGxheS1uYW1lJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gc2VsZWN0ZWRDb2xvcjtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC8vIElmIHBhc3N3b3JkIGlzIGNoYW5nZWQsIHRlc3QgdGhlIGNvbm5lY3Rpb24gZmlyc3RcbiAgICAgICAgICAgICAgaWYgKG5ld1Bhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IGdldCB0aGUgYWNjb3VudCdzIGNvbm5lY3Rpb24gZGV0YWlsc1xuICAgICAgICAgICAgICAgICAgY29uc3QgYWNjb3VudERldGFpbHNSZXMgPSBhd2FpdCBmZXRjaChgL2FwaS9jb3Vycmllci9hY2NvdW50LWRldGFpbHM/YWNjb3VudElkPSR7YWNjb3VudFRvRWRpdC5pZH1gKTtcbiAgICAgICAgICAgICAgICAgIGlmICghYWNjb3VudERldGFpbHNSZXMub2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggYWNjb3VudCBjb25uZWN0aW9uIGRldGFpbHMnKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFjY291bnREZXRhaWxzID0gYXdhaXQgYWNjb3VudERldGFpbHNSZXMuanNvbigpO1xuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAvLyBUZXN0IGNvbm5lY3Rpb24gd2l0aCBuZXcgcGFzc3dvcmQgYmVmb3JlIHNhdmluZ1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGVzdFJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvY291cnJpZXIvdGVzdC1jb25uZWN0aW9uJywge1xuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgIGVtYWlsOiBhY2NvdW50VG9FZGl0LmVtYWlsLFxuICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkOiBuZXdQYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGFjY291bnQncyBjb25uZWN0aW9uIGRldGFpbHMgZnJvbSB0aGUgQVBJXG4gICAgICAgICAgICAgICAgICAgICAgaG9zdDogYWNjb3VudERldGFpbHMuaG9zdCxcbiAgICAgICAgICAgICAgICAgICAgICBwb3J0OiBhY2NvdW50RGV0YWlscy5wb3J0IHx8IDk5MyxcbiAgICAgICAgICAgICAgICAgICAgICBzZWN1cmU6IGFjY291bnREZXRhaWxzLnNlY3VyZSB8fCB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IGF3YWl0IHRlc3RSZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIGlmICghdGVzdFJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0ZXN0UmVzdWx0LmVycm9yIHx8ICdDb25uZWN0aW9uIHRlc3QgZmFpbGVkIHdpdGggbmV3IHBhc3N3b3JkJyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDb25uZWN0aW9uIHRlc3Qgc3VjY2Vzc2Z1bCB3aXRoIG5ldyBwYXNzd29yZCcpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0ZXN0aW5nIGNvbm5lY3Rpb246JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXNzd29yZCB0ZXN0IGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC8vIENvbnRpbnVlIHdpdGggdGhlIHVwZGF0ZSBpZiB0ZXN0IHBhc3NlZCBvciBubyBwYXNzd29yZCBjaGFuZ2VcbiAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvY291cnJpZXIvYWNjb3VudCcsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBcbiAgICAgICAgICAgICAgICAgIGFjY291bnRJZDogYWNjb3VudFRvRWRpdC5pZCwgXG4gICAgICAgICAgICAgICAgICBuZXdQYXNzd29yZDogbmV3UGFzc3dvcmQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgZGlzcGxheV9uYW1lOiBkaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgICAgICAgIGlmICghcmVzLm9rKSB0aHJvdyBuZXcgRXJyb3IoZGF0YS5lcnJvciB8fCAnRmFpbGVkIHRvIHVwZGF0ZSBhY2NvdW50IHNldHRpbmdzJyk7XG4gICAgICAgICAgICAgIHRvYXN0KHsgdGl0bGU6ICdBY2NvdW50IHVwZGF0ZWQnLCBkZXNjcmlwdGlvbjogJ0FjY291bnQgc2V0dGluZ3MgdXBkYXRlZCBzdWNjZXNzZnVsbHkuJyB9KTtcbiAgICAgICAgICAgICAgc2V0U2hvd0VkaXRNb2RhbChmYWxzZSk7XG4gICAgICAgICAgICAgIHNldE5ld1Bhc3N3b3JkKCcnKTtcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBsb2NhbCBhY2NvdW50IGRhdGFcbiAgICAgICAgICAgICAgc2V0QWNjb3VudHMoYWNjb3VudHMubWFwKGFjY291bnQgPT4gXG4gICAgICAgICAgICAgICAgYWNjb3VudC5pZCA9PT0gYWNjb3VudFRvRWRpdC5pZCBcbiAgICAgICAgICAgICAgICAgID8gey4uLmFjY291bnQsIG5hbWU6IGRpc3BsYXlOYW1lLCBjb2xvcjogY29sb3J9IFxuICAgICAgICAgICAgICAgICAgOiBhY2NvdW50XG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICAvLyBDbGVhciBhY2NvdW50VG9FZGl0IHRvIGVuc3VyZSBmcmVzaCBkYXRhIG9uIG5leHQgZWRpdFxuICAgICAgICAgICAgICBzZXRBY2NvdW50VG9FZGl0KG51bGwpO1xuICAgICAgICAgICAgICAvLyBGb3JjZSBhIHBhZ2UgcmVmcmVzaCB0byByZXNldCBhbGwgVUkgc3RhdGVzXG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICB0b2FzdCh7IHRpdGxlOiAnRXJyb3InLCBkZXNjcmlwdGlvbjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdGYWlsZWQgdG8gdXBkYXRlIGFjY291bnQgc2V0dGluZ3MnLCB2YXJpYW50OiAnZGVzdHJ1Y3RpdmUnIH0pO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgc2V0RWRpdExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00XCI+XG4gICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiZGlzcGxheS1uYW1lXCIgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTgwMFwiPkFjY291bnQgTmFtZTwvTGFiZWw+XG4gICAgICAgICAgICAgIDxJbnB1dCBcbiAgICAgICAgICAgICAgICBpZD1cImRpc3BsYXktbmFtZVwiIFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXthY2NvdW50VG9FZGl0Py5uYW1lfSBcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0xIGJnLXdoaXRlIHRleHQtZ3JheS04MDBcIiBcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZWRpdExvYWRpbmd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00XCI+XG4gICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwibmV3LXBhc3N3b3JkXCIgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTgwMFwiPk5ldyBQYXNzd29yZCAob3B0aW9uYWwpPC9MYWJlbD5cbiAgICAgICAgICAgICAgPElucHV0IFxuICAgICAgICAgICAgICAgIGlkPVwibmV3LXBhc3N3b3JkXCIgXG4gICAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCIgXG4gICAgICAgICAgICAgICAgdmFsdWU9e25ld1Bhc3N3b3JkfSBcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZSA9PiBzZXROZXdQYXNzd29yZChlLnRhcmdldC52YWx1ZSl9IFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTEgYmctd2hpdGUgdGV4dC1ncmF5LTgwMFwiIFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTGVhdmUgYmxhbmsgdG8ga2VlcCBjdXJyZW50IHBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZWRpdExvYWRpbmd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00XCI+XG4gICAgICAgICAgICAgIDxMYWJlbCBjbGFzc05hbWU9XCJibG9jayBtYi0yIHRleHQtZ3JheS04MDBcIj5BY2NvdW50IENvbG9yPC9MYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy01IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAge2NvbG9yUGFsZXR0ZS5tYXAoKGNvbG9yLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2luZGV4fSBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPXtgY29sb3ItJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdGVkQ29sb3IgPT09IGNvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBzZXRTZWxlY3RlZENvbG9yKGNvbG9yKX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzci1vbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgaHRtbEZvcj17YGNvbG9yLSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2B3LTggaC04IHJvdW5kZWQtZnVsbCBjdXJzb3ItcG9pbnRlciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciAke2NvbG9yfSBob3ZlcjpyaW5nLTIgaG92ZXI6cmluZy1ibHVlLTMwMCB0cmFuc2l0aW9uLWFsbGB9XG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgYm94U2hhZG93OiBzZWxlY3RlZENvbG9yID09PSBjb2xvciA/ICcwIDAgMCAycHggd2hpdGUsIDAgMCAwIDRweCAjM2I4MmY2JyA6ICdub25lJyB9fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkQ29sb3IoY29sb3IpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3NlbGVjdGVkQ29sb3IgPT09IGNvbG9yICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxDaGVjayBjbGFzc05hbWU9XCJoLTQgdy00IHRleHQtd2hpdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIGdhcC0yIG10LTZcIj5cbiAgICAgICAgICAgICAgPEJ1dHRvbiBcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmctcmVkLTUwMCBob3ZlcjpiZy1yZWQtNjAwIHRleHQtd2hpdGVcIiBcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRTaG93RWRpdE1vZGFsKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8QnV0dG9uIFxuICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIiBcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1ibHVlLTUwMCBob3ZlcjpiZy1ibHVlLTYwMCB0ZXh0LXdoaXRlXCIgXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2VkaXRMb2FkaW5nfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2VkaXRMb2FkaW5nID8gPExvYWRlcjIgY2xhc3NOYW1lPVwiaC00IHctNCBhbmltYXRlLXNwaW4gbXItMlwiIC8+IDogbnVsbH1cbiAgICAgICAgICAgICAgICBTYXZlXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgICA8L0RpYWxvZz5cblxuICAgICAgey8qIERlbGV0ZSBBY2NvdW50IERpYWxvZyAqL31cbiAgICAgIDxBbGVydERpYWxvZyBvcGVuPXtzaG93RGVsZXRlRGlhbG9nfSBvbk9wZW5DaGFuZ2U9e29wZW4gPT4geyBpZiAoIW9wZW4pIHNldFNob3dEZWxldGVEaWFsb2coZmFsc2UpOyB9fT5cbiAgICAgICAgPEFsZXJ0RGlhbG9nQ29udGVudD5cbiAgICAgICAgICA8QWxlcnREaWFsb2dIZWFkZXI+XG4gICAgICAgICAgICA8QWxlcnREaWFsb2dUaXRsZT5EZWxldGUgQWNjb3VudDwvQWxlcnREaWFsb2dUaXRsZT5cbiAgICAgICAgICAgIDxBbGVydERpYWxvZ0Rlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgYWNjb3VudD8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZS5cbiAgICAgICAgICAgIDwvQWxlcnREaWFsb2dEZXNjcmlwdGlvbj5cbiAgICAgICAgICA8L0FsZXJ0RGlhbG9nSGVhZGVyPlxuICAgICAgICAgIDxBbGVydERpYWxvZ0Zvb3Rlcj5cbiAgICAgICAgICAgIDxBbGVydERpYWxvZ0NhbmNlbCBvbkNsaWNrPXsoKSA9PiBzZXRTaG93RGVsZXRlRGlhbG9nKGZhbHNlKX0+Q2FuY2VsPC9BbGVydERpYWxvZ0NhbmNlbD5cbiAgICAgICAgICAgIDxBbGVydERpYWxvZ0FjdGlvbiBhc0NoaWxkPlxuICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJkZXN0cnVjdGl2ZVwiIGRpc2FibGVkPXtkZWxldGVMb2FkaW5nfSBvbkNsaWNrPXthc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhY2NvdW50VG9EZWxldGUpIHJldHVybjtcbiAgICAgICAgICAgICAgICBzZXREZWxldGVMb2FkaW5nKHRydWUpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgL2FwaS9jb3Vycmllci9hY2NvdW50P2FjY291bnRJZD0ke2FjY291bnRUb0RlbGV0ZS5pZH1gLCB7IG1ldGhvZDogJ0RFTEVURScgfSk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgICAgICAgICAgICAgIGlmICghcmVzLm9rKSB0aHJvdyBuZXcgRXJyb3IoZGF0YS5lcnJvciB8fCAnRmFpbGVkIHRvIGRlbGV0ZSBhY2NvdW50Jyk7XG4gICAgICAgICAgICAgICAgICB0b2FzdCh7IHRpdGxlOiAnQWNjb3VudCBkZWxldGVkJywgZGVzY3JpcHRpb246ICdUaGUgYWNjb3VudCB3YXMgZGVsZXRlZCBzdWNjZXNzZnVsbHkuJyB9KTtcbiAgICAgICAgICAgICAgICAgIHNldFNob3dEZWxldGVEaWFsb2coZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgdG9hc3QoeyB0aXRsZTogJ0Vycm9yJywgZGVzY3JpcHRpb246IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnRmFpbGVkIHRvIGRlbGV0ZSBhY2NvdW50JywgdmFyaWFudDogJ2Rlc3RydWN0aXZlJyB9KTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgc2V0RGVsZXRlTG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fT5EZWxldGU8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvQWxlcnREaWFsb2dBY3Rpb24+XG4gICAgICAgICAgPC9BbGVydERpYWxvZ0Zvb3Rlcj5cbiAgICAgICAgPC9BbGVydERpYWxvZ0NvbnRlbnQ+XG4gICAgICA8L0FsZXJ0RGlhbG9nPlxuICAgIDwvPlxuICApO1xufSJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwidXNlUm91dGVyIiwidXNlU2Vzc2lvbiIsIkxvYWRlcjIiLCJBbGVydENpcmNsZSIsIkVkaXQiLCJJbmJveCIsIlNlbmQiLCJUcmFzaCIsIkZvbGRlciIsIkFsZXJ0T2N0YWdvbiIsIkFyY2hpdmUiLCJNZW51IiwiQ2hlY2siLCJEaWFsb2ciLCJEaWFsb2dDb250ZW50IiwiRGlhbG9nVGl0bGUiLCJBbGVydCIsIkFsZXJ0RGVzY3JpcHRpb24iLCJBbGVydFRpdGxlIiwiQWxlcnREaWFsb2ciLCJBbGVydERpYWxvZ0FjdGlvbiIsIkFsZXJ0RGlhbG9nQ2FuY2VsIiwiQWxlcnREaWFsb2dDb250ZW50IiwiQWxlcnREaWFsb2dEZXNjcmlwdGlvbiIsIkFsZXJ0RGlhbG9nRm9vdGVyIiwiQWxlcnREaWFsb2dIZWFkZXIiLCJBbGVydERpYWxvZ1RpdGxlIiwiQnV0dG9uIiwiSW5wdXQiLCJMYWJlbCIsInRvYXN0IiwiRW1haWxTaWRlYmFyIiwiRW1haWxMaXN0IiwiRW1haWxEZXRhaWxWaWV3IiwiQ29tcG9zZUVtYWlsIiwiRGVsZXRlQ29uZmlybURpYWxvZyIsInVzZUVtYWlsU3RhdGUiLCJTaW1wbGlmaWVkTG9hZGluZ0ZpeCIsInByb2Nlc3MiLCJkaXYiLCJjbGFzc05hbWUiLCJjb2xvclBhbGV0dGUiLCJsb2dFbWFpbE9wIiwib3BlcmF0aW9uIiwiZGV0YWlscyIsImRhdGEiLCJ0aW1lc3RhbXAiLCJEYXRlIiwidG9JU09TdHJpbmciLCJzcGxpdCIsInN1YnN0cmluZyIsImNvbnNvbGUiLCJsb2ciLCJDb3VycmllclBhZ2UiLCJyb3V0ZXIiLCJzZXNzaW9uIiwiYWNjb3VudHMiLCJzZWxlY3RlZEFjY291bnQiLCJzZWxlY3RlZEZvbGRlcnMiLCJjdXJyZW50Rm9sZGVyIiwiZW1haWxzIiwic2VsZWN0ZWRFbWFpbCIsInNlbGVjdGVkRW1haWxJZHMiLCJpc0xvYWRpbmciLCJlcnJvciIsInBhZ2UiLCJ0b3RhbFBhZ2VzIiwidG90YWxFbWFpbHMiLCJtYWlsYm94ZXMiLCJ1bnJlYWRDb3VudE1hcCIsInNob3dGb2xkZXJzIiwibG9hZEVtYWlscyIsImhhbmRsZUVtYWlsU2VsZWN0IiwidG9nZ2xlRW1haWxTZWxlY3Rpb24iLCJ0b2dnbGVTZWxlY3RBbGwiLCJtYXJrRW1haWxBc1JlYWQiLCJ0b2dnbGVTdGFycmVkIiwiY2hhbmdlRm9sZGVyIiwiZGVsZXRlRW1haWxzIiwic2VuZEVtYWlsIiwic2VhcmNoRW1haWxzIiwiZm9ybWF0RW1haWxGb3JBY3Rpb24iLCJzZXRQYWdlIiwic2V0RW1haWxzIiwic2VsZWN0QWNjb3VudCIsImhhbmRsZUxvYWRNb3JlIiwic2hvd0NvbXBvc2VNb2RhbCIsInNldFNob3dDb21wb3NlTW9kYWwiLCJjb21wb3NlVHlwZSIsInNldENvbXBvc2VUeXBlIiwic2hvd0RlbGV0ZUNvbmZpcm0iLCJzZXRTaG93RGVsZXRlQ29uZmlybSIsInNob3dMb2dpbk5lZWRlZCIsInNldFNob3dMb2dpbk5lZWRlZCIsInNpZGViYXJPcGVuIiwic2V0U2lkZWJhck9wZW4iLCJtb2JpbGVTaWRlYmFyT3BlbiIsInNldE1vYmlsZVNpZGViYXJPcGVuIiwibG9hZGluZyIsInNldExvYWRpbmciLCJwcmVmZXRjaFN0YXJ0ZWQiLCJzZXRQcmVmZXRjaFN0YXJ0ZWQiLCJzaG93QWRkQWNjb3VudEZvcm0iLCJzZXRTaG93QWRkQWNjb3VudEZvcm0iLCJzaG93RWRpdE1vZGFsIiwic2V0U2hvd0VkaXRNb2RhbCIsInNob3dEZWxldGVEaWFsb2ciLCJzZXRTaG93RGVsZXRlRGlhbG9nIiwiYWNjb3VudFRvRWRpdCIsInNldEFjY291bnRUb0VkaXQiLCJhY2NvdW50VG9EZWxldGUiLCJzZXRBY2NvdW50VG9EZWxldGUiLCJuZXdQYXNzd29yZCIsInNldE5ld1Bhc3N3b3JkIiwiZWRpdExvYWRpbmciLCJzZXRFZGl0TG9hZGluZyIsImRlbGV0ZUxvYWRpbmciLCJzZXREZWxldGVMb2FkaW5nIiwic2VsZWN0ZWRDb2xvciIsInNldFNlbGVjdGVkQ29sb3IiLCJzZWFyY2hRdWVyeSIsInNldFNlYXJjaFF1ZXJ5IiwidW5yZWFkQ291bnQiLCJzZXRVbnJlYWRDb3VudCIsImlkIiwiZm9sZGVyQ291bnRzIiwidG9TdHJpbmciLCJ0b3RhbFVucmVhZCIsIk9iamVjdCIsInZhbHVlcyIsImZvckVhY2giLCJpc01vdW50ZWQiLCJyZXRyeUNvdW50IiwiTUFYX1JFVFJJRVMiLCJSRVRSWV9ERUxBWSIsImluaXRTZXNzaW9uIiwicmVkaXNTdGF0dXMiLCJmZXRjaCIsInRoZW4iLCJyZXMiLCJqc29uIiwiY2F0Y2giLCJyZWFkeSIsInJlc3BvbnNlIiwiY3JlZGVudGlhbHMiLCJoZWFkZXJzIiwic3RhdHVzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0Iiwib2siLCJFcnJvciIsImF1dGhlbnRpY2F0ZWQiLCJoYXNFbWFpbENyZWRlbnRpYWxzIiwiYWNjb3VudHNDb3VudCIsImFsbEFjY291bnRzIiwibGVuZ3RoIiwiQm9vbGVhbiIsInVwZGF0ZWRBY2NvdW50cyIsIkFycmF5IiwiaXNBcnJheSIsImFjY291bnQiLCJhY2NvdW50Rm9sZGVycyIsImZvbGRlcnMiLCJ2YWxpZEZvbGRlcnMiLCJtYXAiLCJmb2xkZXIiLCJpbmNsdWRlcyIsInB1c2giLCJuYW1lIiwiZGlzcGxheV9uYW1lIiwiZW1haWwiLCJjb2xvciIsImZvbGRlckxpc3QiLCJkaXNwbGF5TmFtZSIsInNldEFjY291bnRzIiwiZmlyc3RBY2NvdW50IiwidXNlciIsImdldEZvbGRlckljb24iLCJmb2xkZXJMb3dlciIsInRvTG93ZXJDYXNlIiwiZm9ybWF0Rm9sZGVyTmFtZSIsImJhc2VGb2xkZXJOYW1lIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsImhhbmRsZU1haWxib3hDaGFuZ2UiLCJhY2NvdW50SWQiLCJmaW5hbGx5IiwiaGFuZGxlQWNjb3VudFNlbGVjdCIsImhhbmRsZVJlcGx5IiwiaGFuZGxlUmVwbHlBbGwiLCJoYW5kbGVGb3J3YXJkIiwiaGFuZGxlQ29tcG9zZU5ldyIsImhhbmRsZUJ1bGtBY3Rpb24iLCJhY3Rpb24iLCJlbWFpbElkIiwiaGFuZGxlU2VuZEVtYWlsIiwiZW1haWxEYXRhIiwicmVzdWx0Iiwic3VjY2VzcyIsImhhbmRsZURlbGV0ZUNvbmZpcm0iLCJoYW5kbGVHb1RvTG9naW4iLCJuZXdBY2NvdW50cyIsIndpbmRvd1dpdGhEaXNwYXRjaCIsIndpbmRvdyIsImRpc3BhdGNoRW1haWxBY3Rpb24iLCJ0eXBlIiwicGF5bG9hZCIsInVzZUVtYWlsU3RhdGVEaXNwYXRjaCIsIl9fZW1haWxTdGF0ZURpc3BhdGNoIiwibWFpbiIsIm9uRm9sZGVyQ2hhbmdlIiwib25SZWZyZXNoIiwib25Db21wb3NlTmV3Iiwib25BY2NvdW50U2VsZWN0Iiwib25TaG93QWRkQWNjb3VudEZvcm0iLCJvbkFkZEFjY291bnQiLCJmb3JtRGF0YSIsImZvcm1WYWx1ZXMiLCJnZXQiLCJwYXNzd29yZCIsImhvc3QiLCJwb3J0IiwicGFyc2VJbnQiLCJzZWN1cmUiLCJzbXRwX2hvc3QiLCJzbXRwX3BvcnQiLCJ1bmRlZmluZWQiLCJzbXRwX3NlY3VyZSIsInRlc3RSZXNwb25zZSIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwidGVzdFJlc3VsdCIsInJlYWxBY2NvdW50cyIsImZpbHRlciIsImEiLCJzYXZlUmVzcG9uc2UiLCJzYXZlUmVzdWx0IiwicmVhbEFjY291bnQiLCJzYW1wbGVGb2xkZXJzIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImR1cmF0aW9uIiwibWVzc2FnZSIsInZhcmlhbnQiLCJvbkVkaXRBY2NvdW50IiwidXBkYXRlZEFjY291bnQiLCJmaW5kIiwib25EZWxldGVBY2NvdW50Iiwib25TZWxlY3RFbWFpbCIsInNpemUiLCJvbkNsaWNrIiwic3BhbiIsInAiLCJvblNjcm9sbCIsImUiLCJ0YXJnZXQiLCJjdXJyZW50VGFyZ2V0Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VUb0JvdHRvbSIsInNjcm9sbFBlcmNlbnRhZ2UiLCJsYXN0U2Nyb2xsVG9wIiwiZGF0YXNldCIsInNjcm9sbGluZ0Rvd24iLCJub3ciLCJsYXN0TG9nIiwibGFzdExvZ1RpbWUiLCJNYXRoIiwicm91bmQiLCJsYXN0VHJpZ2dlciIsImxhc3RUcmlnZ2VyVGltZSIsInRocm90dGxlVGltZSIsImgzIiwiZW1haWxBY2NvdW50SWQiLCJlbWFpbEZvbGRlciIsIm9uVG9nZ2xlU2VsZWN0Iiwib25Ub2dnbGVTZWxlY3RBbGwiLCJvblRvZ2dsZVN0YXJyZWQiLCJvbkxvYWRNb3JlIiwiaGFzTW9yZUVtYWlscyIsIm9uQnVsa0FjdGlvbiIsIm9uQmFjayIsIm9uUmVwbHkiLCJvblJlcGx5QWxsIiwib25Gb3J3YXJkIiwib25Ub2dnbGVTdGFyIiwiYnV0dG9uIiwic2hvdyIsInNlbGVjdGVkQ291bnQiLCJvbkNvbmZpcm0iLCJvbkNhbmNlbCIsIm9wZW4iLCJvbk9wZW5DaGFuZ2UiLCJhc0NoaWxkIiwiaW5pdGlhbEVtYWlsIiwib25TZW5kIiwib25DbG9zZSIsImxvY2F0aW9uIiwicmVsb2FkIiwiZm9ybSIsIm9uU3VibWl0IiwicHJldmVudERlZmF1bHQiLCJmb3JtRWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJ2YWx1ZSIsImFjY291bnREZXRhaWxzUmVzIiwiYWNjb3VudERldGFpbHMiLCJlcnIiLCJodG1sRm9yIiwiZGVmYXVsdFZhbHVlIiwiZGlzYWJsZWQiLCJvbkNoYW5nZSIsInBsYWNlaG9sZGVyIiwiaW5kZXgiLCJpbnB1dCIsImNoZWNrZWQiLCJsYWJlbCIsInN0eWxlIiwiYm94U2hhZG93Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./app/courrier/page.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/auth/auth-check.tsx":
|
|
/*!****************************************!*\
|
|
!*** ./components/auth/auth-check.tsx ***!
|
|
\****************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AuthCheck: () => (/* binding */ AuthCheck)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_auth_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next-auth/react */ \"(ssr)/./node_modules/next-auth/react/index.js\");\n/* harmony import */ var next_auth_react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_auth_react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(ssr)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* __next_internal_client_entry_do_not_use__ AuthCheck auto */ \n\n\n\nfunction AuthCheck({ children }) {\n const { data: session, status } = (0,next_auth_react__WEBPACK_IMPORTED_MODULE_1__.useSession)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)({\n \"AuthCheck.useEffect\": ()=>{\n if (status === \"unauthenticated\" && pathname !== \"/signin\") {\n router.push(\"/signin\");\n }\n }\n }[\"AuthCheck.useEffect\"], [\n status,\n router,\n pathname\n ]);\n if (status === \"loading\") {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: \"Chargement...\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/auth/auth-check.tsx\",\n lineNumber: 19,\n columnNumber: 12\n }, this);\n }\n if (status === \"unauthenticated\" && pathname !== \"/signin\") {\n return null;\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: children\n }, void 0, false);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL2F1dGgvYXV0aC1jaGVjay50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBRTZDO0FBQ1k7QUFDdkI7QUFFM0IsU0FBU0ksVUFBVSxFQUFFQyxRQUFRLEVBQWlDO0lBQ25FLE1BQU0sRUFBRUMsTUFBTUMsT0FBTyxFQUFFQyxNQUFNLEVBQUUsR0FBR1IsMkRBQVVBO0lBQzVDLE1BQU1TLFdBQVdSLDREQUFXQTtJQUM1QixNQUFNUyxTQUFTUiwwREFBU0E7SUFFeEJDLGdEQUFTQTsrQkFBQztZQUNSLElBQUlLLFdBQVcscUJBQXFCQyxhQUFhLFdBQVc7Z0JBQzFEQyxPQUFPQyxJQUFJLENBQUM7WUFDZDtRQUNGOzhCQUFHO1FBQUNIO1FBQVFFO1FBQVFEO0tBQVM7SUFFN0IsSUFBSUQsV0FBVyxXQUFXO1FBQ3hCLHFCQUFPLDhEQUFDSTtzQkFBSTs7Ozs7O0lBQ2Q7SUFFQSxJQUFJSixXQUFXLHFCQUFxQkMsYUFBYSxXQUFXO1FBQzFELE9BQU87SUFDVDtJQUVBLHFCQUFPO2tCQUFHSjs7QUFDWiIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9jb21wb25lbnRzL2F1dGgvYXV0aC1jaGVjay50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZVNlc3Npb24gfSBmcm9tIFwibmV4dC1hdXRoL3JlYWN0XCI7XG5pbXBvcnQgeyB1c2VQYXRobmFtZSwgdXNlUm91dGVyIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBBdXRoQ2hlY2soeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xuICBjb25zdCB7IGRhdGE6IHNlc3Npb24sIHN0YXR1cyB9ID0gdXNlU2Vzc2lvbigpO1xuICBjb25zdCBwYXRobmFtZSA9IHVzZVBhdGhuYW1lKCk7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN0YXR1cyA9PT0gXCJ1bmF1dGhlbnRpY2F0ZWRcIiAmJiBwYXRobmFtZSAhPT0gXCIvc2lnbmluXCIpIHtcbiAgICAgIHJvdXRlci5wdXNoKFwiL3NpZ25pblwiKTtcbiAgICB9XG4gIH0sIFtzdGF0dXMsIHJvdXRlciwgcGF0aG5hbWVdKTtcblxuICBpZiAoc3RhdHVzID09PSBcImxvYWRpbmdcIikge1xuICAgIHJldHVybiA8ZGl2PkNoYXJnZW1lbnQuLi48L2Rpdj47XG4gIH1cblxuICBpZiAoc3RhdHVzID09PSBcInVuYXV0aGVudGljYXRlZFwiICYmIHBhdGhuYW1lICE9PSBcIi9zaWduaW5cIikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIDw+e2NoaWxkcmVufTwvPjtcbn0gIl0sIm5hbWVzIjpbInVzZVNlc3Npb24iLCJ1c2VQYXRobmFtZSIsInVzZVJvdXRlciIsInVzZUVmZmVjdCIsIkF1dGhDaGVjayIsImNoaWxkcmVuIiwiZGF0YSIsInNlc3Npb24iLCJzdGF0dXMiLCJwYXRobmFtZSIsInJvdXRlciIsInB1c2giLCJkaXYiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/auth/auth-check.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/background-switcher.tsx":
|
|
/*!********************************************!*\
|
|
!*** ./components/background-switcher.tsx ***!
|
|
\********************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BackgroundSwitcher: () => (/* binding */ BackgroundSwitcher),\n/* harmony export */ useBackgroundImage: () => (/* binding */ useBackgroundImage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ useBackgroundImage,BackgroundSwitcher auto */ \n\nconst backgroundImages = [\n \"/background/Autumn birger-strahl-6YZgnYaPD5s-unsplash.jpeg\",\n \"/background/Moneral tobias-reich-VltYe88rkt8-unsplash.jpeg\",\n \"/background/aaron-burden-cGW1w-qLix8-unsplash.jpg\",\n \"/background/aaron-burden-xtIYGB0KEqc-unsplash.jpg\",\n \"/background/art credit library-of-congress-ULl31hxiehE-unsplash.jpeg\",\n \"/background/art-institute-of-chicago-fayEVJ03T7M-unsplash.jpg\",\n \"/background/art-institute-of-chicago-j-3IgXK3iJg-unsplash.jpg\",\n \"/background/art-institute-of-chicago-ueWnHtoaplI-unsplash.jpg\",\n \"/background/art-institute-of-chicago-yIgLfU6EEBw-unsplash.jpg\",\n \"/background/birmingham-museums-trust-M9ryRhN4YSI-unsplash.jpg\",\n \"/background/david-ramirez-LC7lLC9jDzw-unsplash.jpg\",\n \"/background/europeana-HDIOpM_XXbI-unsplash.jpg\",\n \"/background/gabor-juhasz-B1Zyw7sdm5w-unsplash.jpg\",\n \"/background/gonzalo-mendiola-XXCrAQgQnVw-unsplash.jpg\",\n \"/background/ian-keefe-OgcJIKRnRC8-unsplash.jpg\",\n \"/background/japan credit dale-scogings-_SBsVi4kmkY-unsplash.jpeg\",\n \"/background/japan credit david-edelstein-N4DbvTUDikw-unsplash.jpeg\",\n \"/background/japan credit falco-negenman-K8MMfFifWcE-unsplash.jpeg\",\n \"/background/japan credit galen-crout-0_xMuEbpFAQ-unsplash.jpeg\",\n \"/background/japan credit gilly-cLnFkSji734-unsplash.jpeg\",\n \"/background/japan credit matthew-buchanan-VVi59Xtsd8Y-unsplash.jpeg\",\n \"/background/japan credit redd-f-Bxzrd0p6yOM-unsplash.jpeg\",\n \"/background/japan credit redd-f-wPMvPMD9KBI-unsplash.jpeg\",\n \"/background/japan credit sorasak-_UIN-pFfJ7c-unsplash.jpeg\",\n \"/background/japan credittianshu-liu-SBK40fdKbAg-unsplash.jpeg\",\n \"/background/japan.jpeg\",\n \"/background/joel-holland-TRhGEGdw-YY-unsplash.jpg\",\n \"/background/marko-blazevic-S7mAngnWV1A-unsplash.jpg\",\n \"/background/museum-of-new-zealand-te-papa-tongarewa-h2qlQSm7N-0-unsplash.jpg\",\n \"/background/redd-f-Lm5rkxzgiFQ-unsplash.jpg\",\n \"/background/spencer-davis-ONVA6s03hg8-unsplash.jpg\",\n \"/background/summer credit spencer-everett-DdVOCPTofFc-unsplash.jpeg\",\n \"/background/summer.jpeg\",\n \"/background/sylvain-mauroux-jYCUBAIUsk8-unsplash.jpg\",\n \"/background/the-cleveland-museum-of-art-6uIO1CNv3Vc-unsplash.jpg\",\n \"/background/the-cleveland-museum-of-art-Tl9uudd4DOE-unsplash.jpg\",\n \"/background/the-cleveland-museum-of-art-WQOzF8TSnRQ-unsplash.jpg\",\n \"/background/tingfeng-xia-WwKrhith4l4-unsplash.jpg\",\n \"/background/vegetal credit yuya-murakami-VkcD1QxtY4A-unsplash.jpeg\",\n \"/background/vegetal ryunosuke-kikuno-U8_eaHSUwdw-unsplash.jpeg\"\n];\nfunction useBackgroundImage() {\n const [currentBackground, setCurrentBackground] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(backgroundImages[0]);\n const changeBackground = ()=>{\n const currentIndex = backgroundImages.indexOf(currentBackground);\n const nextIndex = (currentIndex + 1) % backgroundImages.length;\n setCurrentBackground(backgroundImages[nextIndex]);\n };\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"useBackgroundImage.useEffect\": ()=>{\n // Set initial random background\n const randomIndex = Math.floor(Math.random() * backgroundImages.length);\n setCurrentBackground(backgroundImages[randomIndex]);\n }\n }[\"useBackgroundImage.useEffect\"], []);\n return {\n currentBackground,\n changeBackground\n };\n}\nfunction BackgroundSwitcher({ children }) {\n const [background, setBackground] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [imageError, setImageError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n // Function to preload an image\n const preloadImage = (src)=>{\n return new Promise((resolve, reject)=>{\n const img = new Image();\n img.src = src;\n img.onload = ()=>resolve(src);\n img.onerror = ()=>reject(new Error(`Failed to load image: ${src}`));\n });\n };\n const getRandomBackground = async ()=>{\n let attempts = 0;\n const maxAttempts = backgroundImages.length;\n while(attempts < maxAttempts){\n try {\n const randomIndex = Math.floor(Math.random() * backgroundImages.length);\n const newBackground = backgroundImages[randomIndex];\n if (newBackground !== background) {\n // Try to preload the image\n await preloadImage(newBackground);\n console.log(\"Successfully loaded:\", newBackground);\n return newBackground;\n }\n } catch (error) {\n console.error(\"Failed to load image:\", error);\n }\n attempts++;\n }\n // If all attempts fail, return the first image as fallback\n return backgroundImages[0];\n };\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"BackgroundSwitcher.useEffect\": ()=>{\n const initBackground = {\n \"BackgroundSwitcher.useEffect.initBackground\": async ()=>{\n try {\n const newBg = await getRandomBackground();\n setBackground(newBg);\n setImageError(false);\n } catch (error) {\n console.error(\"Error setting initial background:\", error);\n setImageError(true);\n }\n }\n }[\"BackgroundSwitcher.useEffect.initBackground\"];\n initBackground();\n }\n }[\"BackgroundSwitcher.useEffect\"], []);\n const handleClick = async (e)=>{\n if (e.target === e.currentTarget) {\n try {\n const newBg = await getRandomBackground();\n console.log(\"Changing background to:\", newBg);\n setBackground(newBg);\n setImageError(false);\n } catch (error) {\n console.error(\"Error changing background:\", error);\n setImageError(true);\n }\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen relative\",\n onClick: handleClick,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-0 transition-opacity duration-500\",\n style: {\n backgroundImage: `url(${background})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n opacity: imageError ? 0 : 0.3\n }\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/background-switcher.tsx\",\n lineNumber: 140,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative z-10\",\n children: children\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/background-switcher.tsx\",\n lineNumber: 151,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/background-switcher.tsx\",\n lineNumber: 135,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL2JhY2tncm91bmQtc3dpdGNoZXIudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFNEM7QUFFNUMsTUFBTUUsbUJBQW1CO0lBQ3ZCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFTSxTQUFTQztJQUNkLE1BQU0sQ0FBQ0MsbUJBQW1CQyxxQkFBcUIsR0FBR0wsK0NBQVFBLENBQUNFLGdCQUFnQixDQUFDLEVBQUU7SUFFOUUsTUFBTUksbUJBQW1CO1FBQ3ZCLE1BQU1DLGVBQWVMLGlCQUFpQk0sT0FBTyxDQUFDSjtRQUM5QyxNQUFNSyxZQUFZLENBQUNGLGVBQWUsS0FBS0wsaUJBQWlCUSxNQUFNO1FBQzlETCxxQkFBcUJILGdCQUFnQixDQUFDTyxVQUFVO0lBQ2xEO0lBRUFSLGdEQUFTQTt3Q0FBQztZQUNSLGdDQUFnQztZQUNoQyxNQUFNVSxjQUFjQyxLQUFLQyxLQUFLLENBQUNELEtBQUtFLE1BQU0sS0FBS1osaUJBQWlCUSxNQUFNO1lBQ3RFTCxxQkFBcUJILGdCQUFnQixDQUFDUyxZQUFZO1FBQ3BEO3VDQUFHLEVBQUU7SUFFTCxPQUFPO1FBQUVQO1FBQW1CRTtJQUFpQjtBQUMvQztBQUVPLFNBQVNTLG1CQUFtQixFQUFFQyxRQUFRLEVBQWlDO0lBQzVFLE1BQU0sQ0FBQ0MsWUFBWUMsY0FBYyxHQUFHbEIsK0NBQVFBLENBQUM7SUFDN0MsTUFBTSxDQUFDbUIsWUFBWUMsY0FBYyxHQUFHcEIsK0NBQVFBLENBQUM7SUFFN0MsK0JBQStCO0lBQy9CLE1BQU1xQixlQUFlLENBQUNDO1FBQ3BCLE9BQU8sSUFBSUMsUUFBUSxDQUFDQyxTQUFTQztZQUMzQixNQUFNQyxNQUFNLElBQUlDO1lBQ2hCRCxJQUFJSixHQUFHLEdBQUdBO1lBQ1ZJLElBQUlFLE1BQU0sR0FBRyxJQUFNSixRQUFRRjtZQUMzQkksSUFBSUcsT0FBTyxHQUFHLElBQU1KLE9BQU8sSUFBSUssTUFBTSxDQUFDLHNCQUFzQixFQUFFUixLQUFLO1FBQ3JFO0lBQ0Y7SUFFQSxNQUFNUyxzQkFBc0I7UUFDMUIsSUFBSUMsV0FBVztRQUNmLE1BQU1DLGNBQWMvQixpQkFBaUJRLE1BQU07UUFFM0MsTUFBT3NCLFdBQVdDLFlBQWE7WUFDN0IsSUFBSTtnQkFDRixNQUFNdEIsY0FBY0MsS0FBS0MsS0FBSyxDQUFDRCxLQUFLRSxNQUFNLEtBQUtaLGlCQUFpQlEsTUFBTTtnQkFDdEUsTUFBTXdCLGdCQUFnQmhDLGdCQUFnQixDQUFDUyxZQUFZO2dCQUVuRCxJQUFJdUIsa0JBQWtCakIsWUFBWTtvQkFDaEMsMkJBQTJCO29CQUMzQixNQUFNSSxhQUFhYTtvQkFDbkJDLFFBQVFDLEdBQUcsQ0FBQyx3QkFBd0JGO29CQUNwQyxPQUFPQTtnQkFDVDtZQUNGLEVBQUUsT0FBT0csT0FBTztnQkFDZEYsUUFBUUUsS0FBSyxDQUFDLHlCQUF5QkE7WUFDekM7WUFDQUw7UUFDRjtRQUVBLDJEQUEyRDtRQUMzRCxPQUFPOUIsZ0JBQWdCLENBQUMsRUFBRTtJQUM1QjtJQUVBRCxnREFBU0E7d0NBQUM7WUFDUixNQUFNcUM7K0RBQWlCO29CQUNyQixJQUFJO3dCQUNGLE1BQU1DLFFBQVEsTUFBTVI7d0JBQ3BCYixjQUFjcUI7d0JBQ2RuQixjQUFjO29CQUNoQixFQUFFLE9BQU9pQixPQUFPO3dCQUNkRixRQUFRRSxLQUFLLENBQUMscUNBQXFDQTt3QkFDbkRqQixjQUFjO29CQUNoQjtnQkFDRjs7WUFFQWtCO1FBQ0Y7dUNBQUcsRUFBRTtJQUVMLE1BQU1FLGNBQWMsT0FBT0M7UUFDekIsSUFBSUEsRUFBRUMsTUFBTSxLQUFLRCxFQUFFRSxhQUFhLEVBQUU7WUFDaEMsSUFBSTtnQkFDRixNQUFNSixRQUFRLE1BQU1SO2dCQUNwQkksUUFBUUMsR0FBRyxDQUFDLDJCQUEyQkc7Z0JBQ3ZDckIsY0FBY3FCO2dCQUNkbkIsY0FBYztZQUNoQixFQUFFLE9BQU9pQixPQUFPO2dCQUNkRixRQUFRRSxLQUFLLENBQUMsOEJBQThCQTtnQkFDNUNqQixjQUFjO1lBQ2hCO1FBQ0Y7SUFDRjtJQUVBLHFCQUNFLDhEQUFDd0I7UUFDQ0MsV0FBVTtRQUNWQyxTQUFTTjs7MEJBR1QsOERBQUNJO2dCQUNDQyxXQUFVO2dCQUNWRSxPQUFPO29CQUNMQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUvQixXQUFXLENBQUMsQ0FBQztvQkFDckNnQyxnQkFBZ0I7b0JBQ2hCQyxvQkFBb0I7b0JBQ3BCQyxTQUFTaEMsYUFBYSxJQUFJO2dCQUM1Qjs7Ozs7OzBCQUlGLDhEQUFDeUI7Z0JBQUlDLFdBQVU7MEJBQ1o3Qjs7Ozs7Ozs7Ozs7O0FBSVQiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvY29tcG9uZW50cy9iYWNrZ3JvdW5kLXN3aXRjaGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG5jb25zdCBiYWNrZ3JvdW5kSW1hZ2VzID0gW1xuICBcIi9iYWNrZ3JvdW5kL0F1dHVtbiBiaXJnZXItc3RyYWhsLTZZWmduWWFQRDVzLXVuc3BsYXNoLmpwZWdcIixcbiAgXCIvYmFja2dyb3VuZC9Nb25lcmFsIHRvYmlhcy1yZWljaC1WbHRZZTg4cmt0OC11bnNwbGFzaC5qcGVnXCIsXG4gIFwiL2JhY2tncm91bmQvYWFyb24tYnVyZGVuLWNHVzF3LXFMaXg4LXVuc3BsYXNoLmpwZ1wiLFxuICBcIi9iYWNrZ3JvdW5kL2Fhcm9uLWJ1cmRlbi14dElZR0IwS0VxYy11bnNwbGFzaC5qcGdcIixcbiAgXCIvYmFja2dyb3VuZC9hcnQgY3JlZGl0IGxpYnJhcnktb2YtY29uZ3Jlc3MtVUxsMzFoeGllaEUtdW5zcGxhc2guanBlZ1wiLFxuICBcIi9iYWNrZ3JvdW5kL2FydC1pbnN0aXR1dGUtb2YtY2hpY2Fnby1mYXlFVkowM1Q3TS11bnNwbGFzaC5qcGdcIixcbiAgXCIvYmFja2dyb3VuZC9hcnQtaW5zdGl0dXRlLW9mLWNoaWNhZ28tai0zSWdYSzNpSmctdW5zcGxhc2guanBnXCIsXG4gIFwiL2JhY2tncm91bmQvYXJ0LWluc3RpdHV0ZS1vZi1jaGljYWdvLXVlV25IdG9hcGxJLXVuc3BsYXNoLmpwZ1wiLFxuICBcIi9iYWNrZ3JvdW5kL2FydC1pbnN0aXR1dGUtb2YtY2hpY2Fnby15SWdMZlU2RUVCdy11bnNwbGFzaC5qcGdcIixcbiAgXCIvYmFja2dyb3VuZC9iaXJtaW5naGFtLW11c2V1bXMtdHJ1c3QtTTlyeVJoTjRZU0ktdW5zcGxhc2guanBnXCIsXG4gIFwiL2JhY2tncm91bmQvZGF2aWQtcmFtaXJlei1MQzdsTEM5akR6dy11bnNwbGFzaC5qcGdcIixcbiAgXCIvYmFja2dyb3VuZC9ldXJvcGVhbmEtSERJT3BNX1hYYkktdW5zcGxhc2guanBnXCIsXG4gIFwiL2JhY2tncm91bmQvZ2Fib3ItanVoYXN6LUIxWnl3N3NkbTV3LXVuc3BsYXNoLmpwZ1wiLFxuICBcIi9iYWNrZ3JvdW5kL2dvbnphbG8tbWVuZGlvbGEtWFhDckFRZ1FuVnctdW5zcGxhc2guanBnXCIsXG4gIFwiL2JhY2tncm91bmQvaWFuLWtlZWZlLU9nY0pJS1JuUkM4LXVuc3BsYXNoLmpwZ1wiLFxuICBcIi9iYWNrZ3JvdW5kL2phcGFuIGNyZWRpdCBkYWxlLXNjb2dpbmdzLV9TQnNWaTRrbWtZLXVuc3BsYXNoLmpwZWdcIixcbiAgXCIvYmFja2dyb3VuZC9qYXBhbiBjcmVkaXQgZGF2aWQtZWRlbHN0ZWluLU40RGJ2VFVEaWt3LXVuc3BsYXNoLmpwZWdcIixcbiAgXCIvYmFja2dyb3VuZC9qYXBhbiBjcmVkaXQgZmFsY28tbmVnZW5tYW4tSzhNTWZGaWZXY0UtdW5zcGxhc2guanBlZ1wiLFxuICBcIi9iYWNrZ3JvdW5kL2phcGFuIGNyZWRpdCBnYWxlbi1jcm91dC0wX3hNdUVicEZBUS11bnNwbGFzaC5qcGVnXCIsXG4gIFwiL2JhY2tncm91bmQvamFwYW4gY3JlZGl0IGdpbGx5LWNMbkZrU2ppNzM0LXVuc3BsYXNoLmpwZWdcIixcbiAgXCIvYmFja2dyb3VuZC9qYXBhbiBjcmVkaXQgbWF0dGhldy1idWNoYW5hbi1WVmk1OVh0c2Q4WS11bnNwbGFzaC5qcGVnXCIsXG4gIFwiL2JhY2tncm91bmQvamFwYW4gY3JlZGl0IHJlZGQtZi1CeHpyZDBwNnlPTS11bnNwbGFzaC5qcGVnXCIsXG4gIFwiL2JhY2tncm91bmQvamFwYW4gY3JlZGl0IHJlZGQtZi13UE12UE1EOUtCSS11bnNwbGFzaC5qcGVnXCIsXG4gIFwiL2JhY2tncm91bmQvamFwYW4gY3JlZGl0IHNvcmFzYWstX1VJTi1wRmZKN2MtdW5zcGxhc2guanBlZ1wiLFxuICBcIi9iYWNrZ3JvdW5kL2phcGFuIGNyZWRpdHRpYW5zaHUtbGl1LVNCSzQwZmRLYkFnLXVuc3BsYXNoLmpwZWdcIixcbiAgXCIvYmFja2dyb3VuZC9qYXBhbi5qcGVnXCIsXG4gIFwiL2JhY2tncm91bmQvam9lbC1ob2xsYW5kLVRSaEdFR2R3LVlZLXVuc3BsYXNoLmpwZ1wiLFxuICBcIi9iYWNrZ3JvdW5kL21hcmtvLWJsYXpldmljLVM3bUFuZ25XVjFBLXVuc3BsYXNoLmpwZ1wiLFxuICBcIi9iYWNrZ3JvdW5kL211c2V1bS1vZi1uZXctemVhbGFuZC10ZS1wYXBhLXRvbmdhcmV3YS1oMnFsUVNtN04tMC11bnNwbGFzaC5qcGdcIixcbiAgXCIvYmFja2dyb3VuZC9yZWRkLWYtTG01cmt4emdpRlEtdW5zcGxhc2guanBnXCIsXG4gIFwiL2JhY2tncm91bmQvc3BlbmNlci1kYXZpcy1PTlZBNnMwM2hnOC11bnNwbGFzaC5qcGdcIixcbiAgXCIvYmFja2dyb3VuZC9zdW1tZXIgY3JlZGl0IHNwZW5jZXItZXZlcmV0dC1EZFZPQ1BUb2ZGYy11bnNwbGFzaC5qcGVnXCIsXG4gIFwiL2JhY2tncm91bmQvc3VtbWVyLmpwZWdcIixcbiAgXCIvYmFja2dyb3VuZC9zeWx2YWluLW1hdXJvdXgtallDVUJBSVVzazgtdW5zcGxhc2guanBnXCIsXG4gIFwiL2JhY2tncm91bmQvdGhlLWNsZXZlbGFuZC1tdXNldW0tb2YtYXJ0LTZ1SU8xQ052M1ZjLXVuc3BsYXNoLmpwZ1wiLFxuICBcIi9iYWNrZ3JvdW5kL3RoZS1jbGV2ZWxhbmQtbXVzZXVtLW9mLWFydC1UbDl1dWRkNERPRS11bnNwbGFzaC5qcGdcIixcbiAgXCIvYmFja2dyb3VuZC90aGUtY2xldmVsYW5kLW11c2V1bS1vZi1hcnQtV1FPekY4VFNuUlEtdW5zcGxhc2guanBnXCIsXG4gIFwiL2JhY2tncm91bmQvdGluZ2ZlbmcteGlhLVd3S3JoaXRoNGw0LXVuc3BsYXNoLmpwZ1wiLFxuICBcIi9iYWNrZ3JvdW5kL3ZlZ2V0YWwgY3JlZGl0IHl1eWEtbXVyYWthbWktVmtjRDFReHRZNEEtdW5zcGxhc2guanBlZ1wiLFxuICBcIi9iYWNrZ3JvdW5kL3ZlZ2V0YWwgcnl1bm9zdWtlLWtpa3Vuby1VOF9lYUhTVXdkdy11bnNwbGFzaC5qcGVnXCJcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VCYWNrZ3JvdW5kSW1hZ2UoKSB7XG4gIGNvbnN0IFtjdXJyZW50QmFja2dyb3VuZCwgc2V0Q3VycmVudEJhY2tncm91bmRdID0gdXNlU3RhdGUoYmFja2dyb3VuZEltYWdlc1swXSk7XG5cbiAgY29uc3QgY2hhbmdlQmFja2dyb3VuZCA9ICgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBiYWNrZ3JvdW5kSW1hZ2VzLmluZGV4T2YoY3VycmVudEJhY2tncm91bmQpO1xuICAgIGNvbnN0IG5leHRJbmRleCA9IChjdXJyZW50SW5kZXggKyAxKSAlIGJhY2tncm91bmRJbWFnZXMubGVuZ3RoO1xuICAgIHNldEN1cnJlbnRCYWNrZ3JvdW5kKGJhY2tncm91bmRJbWFnZXNbbmV4dEluZGV4XSk7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBTZXQgaW5pdGlhbCByYW5kb20gYmFja2dyb3VuZFxuICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYmFja2dyb3VuZEltYWdlcy5sZW5ndGgpO1xuICAgIHNldEN1cnJlbnRCYWNrZ3JvdW5kKGJhY2tncm91bmRJbWFnZXNbcmFuZG9tSW5kZXhdKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiB7IGN1cnJlbnRCYWNrZ3JvdW5kLCBjaGFuZ2VCYWNrZ3JvdW5kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBCYWNrZ3JvdW5kU3dpdGNoZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xuICBjb25zdCBbYmFja2dyb3VuZCwgc2V0QmFja2dyb3VuZF0gPSB1c2VTdGF0ZShcIlwiKTtcbiAgY29uc3QgW2ltYWdlRXJyb3IsIHNldEltYWdlRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIC8vIEZ1bmN0aW9uIHRvIHByZWxvYWQgYW4gaW1hZ2VcbiAgY29uc3QgcHJlbG9hZEltYWdlID0gKHNyYzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICBpbWcuc3JjID0gc3JjO1xuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoc3JjKTtcbiAgICAgIGltZy5vbmVycm9yID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgaW1hZ2U6ICR7c3JjfWApKTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBnZXRSYW5kb21CYWNrZ3JvdW5kID0gYXN5bmMgKCkgPT4ge1xuICAgIGxldCBhdHRlbXB0cyA9IDA7XG4gICAgY29uc3QgbWF4QXR0ZW1wdHMgPSBiYWNrZ3JvdW5kSW1hZ2VzLmxlbmd0aDtcblxuICAgIHdoaWxlIChhdHRlbXB0cyA8IG1heEF0dGVtcHRzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGJhY2tncm91bmRJbWFnZXMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgbmV3QmFja2dyb3VuZCA9IGJhY2tncm91bmRJbWFnZXNbcmFuZG9tSW5kZXhdO1xuICAgICAgICBcbiAgICAgICAgaWYgKG5ld0JhY2tncm91bmQgIT09IGJhY2tncm91bmQpIHtcbiAgICAgICAgICAvLyBUcnkgdG8gcHJlbG9hZCB0aGUgaW1hZ2VcbiAgICAgICAgICBhd2FpdCBwcmVsb2FkSW1hZ2UobmV3QmFja2dyb3VuZCk7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJTdWNjZXNzZnVsbHkgbG9hZGVkOlwiLCBuZXdCYWNrZ3JvdW5kKTtcbiAgICAgICAgICByZXR1cm4gbmV3QmFja2dyb3VuZDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBsb2FkIGltYWdlOlwiLCBlcnJvcik7XG4gICAgICB9XG4gICAgICBhdHRlbXB0cysrO1xuICAgIH1cbiAgICBcbiAgICAvLyBJZiBhbGwgYXR0ZW1wdHMgZmFpbCwgcmV0dXJuIHRoZSBmaXJzdCBpbWFnZSBhcyBmYWxsYmFja1xuICAgIHJldHVybiBiYWNrZ3JvdW5kSW1hZ2VzWzBdO1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaW5pdEJhY2tncm91bmQgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBuZXdCZyA9IGF3YWl0IGdldFJhbmRvbUJhY2tncm91bmQoKTtcbiAgICAgICAgc2V0QmFja2dyb3VuZChuZXdCZyk7XG4gICAgICAgIHNldEltYWdlRXJyb3IoZmFsc2UpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHNldHRpbmcgaW5pdGlhbCBiYWNrZ3JvdW5kOlwiLCBlcnJvcik7XG4gICAgICAgIHNldEltYWdlRXJyb3IodHJ1ZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGluaXRCYWNrZ3JvdW5kKCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IGFzeW5jIChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKGUudGFyZ2V0ID09PSBlLmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG5ld0JnID0gYXdhaXQgZ2V0UmFuZG9tQmFja2dyb3VuZCgpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNoYW5naW5nIGJhY2tncm91bmQgdG86XCIsIG5ld0JnKTtcbiAgICAgICAgc2V0QmFja2dyb3VuZChuZXdCZyk7XG4gICAgICAgIHNldEltYWdlRXJyb3IoZmFsc2UpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGNoYW5naW5nIGJhY2tncm91bmQ6XCIsIGVycm9yKTtcbiAgICAgICAgc2V0SW1hZ2VFcnJvcih0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IFxuICAgICAgY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIHJlbGF0aXZlXCJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgID5cbiAgICAgIHsvKiBCYWNrZ3JvdW5kIEltYWdlICovfVxuICAgICAgPGRpdiBcbiAgICAgICAgY2xhc3NOYW1lPVwiZml4ZWQgaW5zZXQtMCB6LTAgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTUwMFwiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCR7YmFja2dyb3VuZH0pYCxcbiAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJ2NvdmVyJyxcbiAgICAgICAgICBiYWNrZ3JvdW5kUG9zaXRpb246ICdjZW50ZXInLFxuICAgICAgICAgIG9wYWNpdHk6IGltYWdlRXJyb3IgPyAwIDogMC4zXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICAgXG4gICAgICB7LyogQ29udGVudCAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgei0xMFwiPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn0gIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiYmFja2dyb3VuZEltYWdlcyIsInVzZUJhY2tncm91bmRJbWFnZSIsImN1cnJlbnRCYWNrZ3JvdW5kIiwic2V0Q3VycmVudEJhY2tncm91bmQiLCJjaGFuZ2VCYWNrZ3JvdW5kIiwiY3VycmVudEluZGV4IiwiaW5kZXhPZiIsIm5leHRJbmRleCIsImxlbmd0aCIsInJhbmRvbUluZGV4IiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiQmFja2dyb3VuZFN3aXRjaGVyIiwiY2hpbGRyZW4iLCJiYWNrZ3JvdW5kIiwic2V0QmFja2dyb3VuZCIsImltYWdlRXJyb3IiLCJzZXRJbWFnZUVycm9yIiwicHJlbG9hZEltYWdlIiwic3JjIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJpbWciLCJJbWFnZSIsIm9ubG9hZCIsIm9uZXJyb3IiLCJFcnJvciIsImdldFJhbmRvbUJhY2tncm91bmQiLCJhdHRlbXB0cyIsIm1heEF0dGVtcHRzIiwibmV3QmFja2dyb3VuZCIsImNvbnNvbGUiLCJsb2ciLCJlcnJvciIsImluaXRCYWNrZ3JvdW5kIiwibmV3QmciLCJoYW5kbGVDbGljayIsImUiLCJ0YXJnZXQiLCJjdXJyZW50VGFyZ2V0IiwiZGl2IiwiY2xhc3NOYW1lIiwib25DbGljayIsInN0eWxlIiwiYmFja2dyb3VuZEltYWdlIiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJvcGFjaXR5Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./components/background-switcher.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/email/BulkActionsToolbar.tsx":
|
|
/*!*************************************************!*\
|
|
!*** ./components/email/BulkActionsToolbar.tsx ***!
|
|
\*************************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BulkActionsToolbar)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _barrel_optimize_names_Archive_EyeOff_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=Archive,EyeOff,Trash2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/eye-off.js\");\n/* harmony import */ var _barrel_optimize_names_Archive_EyeOff_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=Archive,EyeOff,Trash2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/archive.js\");\n/* harmony import */ var _barrel_optimize_names_Archive_EyeOff_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=Archive,EyeOff,Trash2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/trash-2.js\");\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/button */ \"(ssr)/./components/ui/button.tsx\");\n/* harmony import */ var _components_ui_tooltip__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/tooltip */ \"(ssr)/./components/ui/tooltip.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n\nfunction BulkActionsToolbar({ selectedCount, onBulkAction }) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-blue-50 border-b border-blue-100 px-4 py-2 flex items-center justify-between shadow-md transition-all duration-200\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs font-medium text-blue-700\",\n children: [\n selectedCount,\n \" selected\"\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 24,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_3__.TooltipProvider, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_3__.Tooltip, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_3__.TooltipTrigger, {\n asChild: true,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n variant: \"ghost\",\n size: \"icon\",\n className: \"h-7 w-7 text-blue-600 hover:text-blue-900 hover:bg-blue-100\",\n onClick: ()=>onBulkAction('mark-unread'),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Archive_EyeOff_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"h-3.5 w-3.5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 37,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 31,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 30,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_3__.TooltipContent, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"Mark as unread\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 41,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 40,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 29,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 28,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_3__.TooltipProvider, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_3__.Tooltip, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_3__.TooltipTrigger, {\n asChild: true,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n variant: \"ghost\",\n size: \"icon\",\n className: \"h-7 w-7 text-blue-600 hover:text-blue-900 hover:bg-blue-100\",\n onClick: ()=>onBulkAction('archive'),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Archive_EyeOff_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-3.5 w-3.5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 55,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 49,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 48,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_3__.TooltipContent, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"Archive\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 59,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 58,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 47,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 46,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_3__.TooltipProvider, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_3__.Tooltip, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_3__.TooltipTrigger, {\n asChild: true,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n variant: \"ghost\",\n size: \"icon\",\n className: \"h-7 w-7 text-red-600 hover:text-red-700 hover:bg-red-50\",\n onClick: ()=>onBulkAction('delete'),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Archive_EyeOff_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-3.5 w-3.5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 73,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 67,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 66,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_3__.TooltipContent, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"Delete\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 77,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 76,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 65,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 64,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 27,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/BulkActionsToolbar.tsx\",\n lineNumber: 23,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL2VtYWlsL0J1bGtBY3Rpb25zVG9vbGJhci50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFFMEI7QUFDNkI7QUFDUDtBQU1mO0FBT2xCLFNBQVNTLG1CQUFtQixFQUN6Q0MsYUFBYSxFQUNiQyxZQUFZLEVBQ1k7SUFDeEIscUJBQ0UsOERBQUNDO1FBQUlDLFdBQVU7OzBCQUNiLDhEQUFDQztnQkFBS0QsV0FBVTs7b0JBQ2JIO29CQUFjOzs7Ozs7OzBCQUVqQiw4REFBQ0U7Z0JBQUlDLFdBQVU7O2tDQUNiLDhEQUFDTixtRUFBZUE7a0NBQ2QsNEVBQUNGLDJEQUFPQTs7OENBQ04sOERBQUNHLGtFQUFjQTtvQ0FBQ08sT0FBTzs4Q0FDckIsNEVBQUNYLHlEQUFNQTt3Q0FDTFksU0FBUTt3Q0FDUkMsTUFBSzt3Q0FDTEosV0FBVTt3Q0FDVkssU0FBUyxJQUFNUCxhQUFhO2tEQUU1Qiw0RUFBQ1IsaUdBQU1BOzRDQUFDVSxXQUFVOzs7Ozs7Ozs7Ozs7Ozs7OzhDQUd0Qiw4REFBQ1Asa0VBQWNBOzhDQUNiLDRFQUFDYTtrREFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FLVCw4REFBQ1osbUVBQWVBO2tDQUNkLDRFQUFDRiwyREFBT0E7OzhDQUNOLDhEQUFDRyxrRUFBY0E7b0NBQUNPLE9BQU87OENBQ3JCLDRFQUFDWCx5REFBTUE7d0NBQ0xZLFNBQVE7d0NBQ1JDLE1BQUs7d0NBQ0xKLFdBQVU7d0NBQ1ZLLFNBQVMsSUFBTVAsYUFBYTtrREFFNUIsNEVBQUNULGlHQUFPQTs0Q0FBQ1csV0FBVTs7Ozs7Ozs7Ozs7Ozs7Ozs4Q0FHdkIsOERBQUNQLGtFQUFjQTs4Q0FDYiw0RUFBQ2E7a0RBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBS1QsOERBQUNaLG1FQUFlQTtrQ0FDZCw0RUFBQ0YsMkRBQU9BOzs4Q0FDTiw4REFBQ0csa0VBQWNBO29DQUFDTyxPQUFPOzhDQUNyQiw0RUFBQ1gseURBQU1BO3dDQUNMWSxTQUFRO3dDQUNSQyxNQUFLO3dDQUNMSixXQUFVO3dDQUNWSyxTQUFTLElBQU1QLGFBQWE7a0RBRTVCLDRFQUFDVixpR0FBTUE7NENBQUNZLFdBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7OENBR3RCLDhEQUFDUCxrRUFBY0E7OENBQ2IsNEVBQUNhO2tEQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT2pCIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2NvbXBvbmVudHMvZW1haWwvQnVsa0FjdGlvbnNUb29sYmFyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUcmFzaDIsIEFyY2hpdmUsIEV5ZU9mZiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJztcbmltcG9ydCB7XG4gIFRvb2x0aXAsXG4gIFRvb2x0aXBDb250ZW50LFxuICBUb29sdGlwUHJvdmlkZXIsXG4gIFRvb2x0aXBUcmlnZ2VyLFxufSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL3Rvb2x0aXBcIjtcblxuaW50ZXJmYWNlIEJ1bGtBY3Rpb25zVG9vbGJhclByb3BzIHtcbiAgc2VsZWN0ZWRDb3VudDogbnVtYmVyO1xuICBvbkJ1bGtBY3Rpb246IChhY3Rpb246ICdkZWxldGUnIHwgJ21hcmstcmVhZCcgfCAnbWFyay11bnJlYWQnIHwgJ2FyY2hpdmUnKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCdWxrQWN0aW9uc1Rvb2xiYXIoe1xuICBzZWxlY3RlZENvdW50LFxuICBvbkJ1bGtBY3Rpb25cbn06IEJ1bGtBY3Rpb25zVG9vbGJhclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJiZy1ibHVlLTUwIGJvcmRlci1iIGJvcmRlci1ibHVlLTEwMCBweC00IHB5LTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHNoYWRvdy1tZCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDBcIj5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1ibHVlLTcwMFwiPlxuICAgICAgICB7c2VsZWN0ZWRDb3VudH0gc2VsZWN0ZWRcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIj5cbiAgICAgICAgPFRvb2x0aXBQcm92aWRlcj5cbiAgICAgICAgICA8VG9vbHRpcD5cbiAgICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICBzaXplPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC03IHctNyB0ZXh0LWJsdWUtNjAwIGhvdmVyOnRleHQtYmx1ZS05MDAgaG92ZXI6YmctYmx1ZS0xMDBcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQnVsa0FjdGlvbignbWFyay11bnJlYWQnKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxFeWVPZmYgY2xhc3NOYW1lPVwiaC0zLjUgdy0zLjVcIiAvPlxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvVG9vbHRpcFRyaWdnZXI+XG4gICAgICAgICAgICA8VG9vbHRpcENvbnRlbnQ+XG4gICAgICAgICAgICAgIDxwPk1hcmsgYXMgdW5yZWFkPC9wPlxuICAgICAgICAgICAgPC9Ub29sdGlwQ29udGVudD5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIDwvVG9vbHRpcFByb3ZpZGVyPlxuXG4gICAgICAgIDxUb29sdGlwUHJvdmlkZXI+XG4gICAgICAgICAgPFRvb2x0aXA+XG4gICAgICAgICAgICA8VG9vbHRpcFRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cImljb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtNyB3LTcgdGV4dC1ibHVlLTYwMCBob3Zlcjp0ZXh0LWJsdWUtOTAwIGhvdmVyOmJnLWJsdWUtMTAwXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkJ1bGtBY3Rpb24oJ2FyY2hpdmUnKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxBcmNoaXZlIGNsYXNzTmFtZT1cImgtMy41IHctMy41XCIgLz5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L1Rvb2x0aXBUcmlnZ2VyPlxuICAgICAgICAgICAgPFRvb2x0aXBDb250ZW50PlxuICAgICAgICAgICAgICA8cD5BcmNoaXZlPC9wPlxuICAgICAgICAgICAgPC9Ub29sdGlwQ29udGVudD5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIDwvVG9vbHRpcFByb3ZpZGVyPlxuXG4gICAgICAgIDxUb29sdGlwUHJvdmlkZXI+XG4gICAgICAgICAgPFRvb2x0aXA+XG4gICAgICAgICAgICA8VG9vbHRpcFRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cImljb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtNyB3LTcgdGV4dC1yZWQtNjAwIGhvdmVyOnRleHQtcmVkLTcwMCBob3ZlcjpiZy1yZWQtNTBcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQnVsa0FjdGlvbignZGVsZXRlJyl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8VHJhc2gyIGNsYXNzTmFtZT1cImgtMy41IHctMy41XCIgLz5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L1Rvb2x0aXBUcmlnZ2VyPlxuICAgICAgICAgICAgPFRvb2x0aXBDb250ZW50PlxuICAgICAgICAgICAgICA8cD5EZWxldGU8L3A+XG4gICAgICAgICAgICA8L1Rvb2x0aXBDb250ZW50PlxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgPC9Ub29sdGlwUHJvdmlkZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn0gIl0sIm5hbWVzIjpbIlJlYWN0IiwiVHJhc2gyIiwiQXJjaGl2ZSIsIkV5ZU9mZiIsIkJ1dHRvbiIsIlRvb2x0aXAiLCJUb29sdGlwQ29udGVudCIsIlRvb2x0aXBQcm92aWRlciIsIlRvb2x0aXBUcmlnZ2VyIiwiQnVsa0FjdGlvbnNUb29sYmFyIiwic2VsZWN0ZWRDb3VudCIsIm9uQnVsa0FjdGlvbiIsImRpdiIsImNsYXNzTmFtZSIsInNwYW4iLCJhc0NoaWxkIiwidmFyaWFudCIsInNpemUiLCJvbkNsaWNrIiwicCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/email/BulkActionsToolbar.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/email/ComposeEmail.tsx":
|
|
/*!*******************************************!*\
|
|
!*** ./components/email/ComposeEmail.tsx ***!
|
|
\*******************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ComposeEmail)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var styled_jsx_style__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! styled-jsx/style */ \"(ssr)/./node_modules/styled-jsx/style.js\");\n/* harmony import */ var styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(styled_jsx_style__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Loader2_Paperclip_SendHorizontal_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Loader2,Paperclip,SendHorizontal,X!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/x.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Loader2_Paperclip_SendHorizontal_X_lucide_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Loader2,Paperclip,SendHorizontal,X!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/chevron-down.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Loader2_Paperclip_SendHorizontal_X_lucide_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Loader2,Paperclip,SendHorizontal,X!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/paperclip.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Loader2_Paperclip_SendHorizontal_X_lucide_react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Loader2,Paperclip,SendHorizontal,X!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/loader-circle.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Loader2_Paperclip_SendHorizontal_X_lucide_react__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Loader2,Paperclip,SendHorizontal,X!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/send-horizontal.js\");\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/button */ \"(ssr)/./components/ui/button.tsx\");\n/* harmony import */ var _components_ui_input__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/ui/input */ \"(ssr)/./components/ui/input.tsx\");\n/* harmony import */ var _components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/ui/dropdown-menu */ \"(ssr)/./components/ui/dropdown-menu.tsx\");\n/* harmony import */ var _components_email_RichEmailEditor__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/email/RichEmailEditor */ \"(ssr)/./components/email/RichEmailEditor.tsx\");\n/* harmony import */ var _lib_utils_email_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/lib/utils/email-utils */ \"(ssr)/./lib/utils/email-utils.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n\n\n\n\n// Import from the centralized utils\n\nfunction ComposeEmail(props) {\n const { initialEmail, type = 'new', onClose, onSend, accounts = [] } = props;\n // State for email form\n const [selectedAccount, setSelectedAccount] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(accounts[0]);\n const [to, setTo] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)('');\n const [cc, setCc] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)('');\n const [bcc, setBcc] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)('');\n const [subject, setSubject] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)('');\n const [emailContent, setEmailContent] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)('');\n const [showCc, setShowCc] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(false);\n const [showBcc, setShowBcc] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(false);\n const [sending, setSending] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(false);\n const [attachments, setAttachments] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)([]);\n // Reference to editor\n const editorRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(null);\n // Helper function to get formatted info from email\n function getFormattedInfoForEmail(email) {\n // Format the subject\n const subject = email.subject || '';\n // Format the date\n const dateStr = email.date ? new Date(email.date).toLocaleString() : 'Unknown Date';\n // Format sender\n const fromStr = Array.isArray(email.from) ? email.from.map((addr)=>{\n if (typeof addr === 'string') return addr;\n return addr.name ? `${addr.name} <${addr.address}>` : addr.address;\n }).join(', ') : typeof email.from === 'string' ? email.from : email.from?.address ? email.from.name ? `${email.from.name} <${email.from.address}>` : email.from.address : 'Unknown Sender';\n // Format recipients\n const toStr = Array.isArray(email.to) ? email.to.map((addr)=>{\n if (typeof addr === 'string') return addr;\n return addr.name ? `${addr.name} <${addr.address}>` : addr.address;\n }).join(', ') : typeof email.to === 'string' ? email.to : '';\n // Format CC \n const ccStr = Array.isArray(email.cc) ? email.cc.map((addr)=>{\n if (typeof addr === 'string') return addr;\n return addr.name ? `${addr.name} <${addr.address}>` : addr.address;\n }).join(', ') : typeof email.cc === 'string' ? email.cc : '';\n return {\n fromStr,\n toStr,\n ccStr,\n dateStr,\n subject\n };\n }\n // Initialize email form based on initial email and type\n (0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)({\n \"ComposeEmail.useEffect\": ()=>{\n if (initialEmail) {\n try {\n console.log('Initializing compose with email:', {\n id: initialEmail.id,\n subject: initialEmail.subject,\n hasContent: !!initialEmail.content,\n contentType: initialEmail.content ? typeof initialEmail.content : 'none'\n });\n // Set default account from original email - use type assertion since accountId might be custom property\n const emailAny = initialEmail;\n if (emailAny.accountId && accounts?.length) {\n const account = accounts.find({\n \"ComposeEmail.useEffect.account\": (a)=>a.id === emailAny.accountId\n }[\"ComposeEmail.useEffect.account\"]);\n if (account) {\n setSelectedAccount(account);\n }\n }\n // Get recipients based on type\n if (type === 'reply' || type === 'reply-all') {\n // Get formatted data for reply\n const formatted = (0,_lib_utils_email_utils__WEBPACK_IMPORTED_MODULE_7__.formatReplyEmail)(initialEmail, type);\n // Set reply addresses\n setTo(formatted.to);\n if (formatted.cc) {\n setShowCc(true);\n setCc(formatted.cc);\n }\n // Set subject\n setSubject(formatted.subject);\n // Set content with original email - ensure we have content\n const content = formatted.content.html || formatted.content.text || '';\n if (!content) {\n console.warn('Reply content is empty, falling back to a basic template');\n // Provide a basic template if the content is empty\n const { fromStr, dateStr } = getFormattedInfoForEmail(initialEmail);\n const fallbackContent = `\n <div style=\"margin: 20px 0 10px 0; color: #666; border-bottom: 1px solid #ddd; padding-bottom: 5px;\">\n On ${dateStr}, ${fromStr} wrote:\n </div>\n <blockquote style=\"margin: 0; padding-left: 10px; border-left: 3px solid #ddd; color: #505050; background-color: #f9f9f9; padding: 10px;\">\n [Original message content could not be loaded]\n </blockquote>\n `;\n setEmailContent(fallbackContent);\n } else {\n console.log('Setting reply content:', {\n length: content.length,\n isHtml: formatted.content.isHtml,\n startsWithHtml: content.trim().startsWith('<'),\n contentType: typeof content\n });\n setEmailContent(content);\n }\n // Handle any attachments from reply (e.g., inline images extracted as attachments)\n if (formatted.attachments && formatted.attachments.length > 0) {\n const formattedAttachments = formatted.attachments.map({\n \"ComposeEmail.useEffect.formattedAttachments\": (att)=>({\n name: att.filename || 'attachment',\n type: att.contentType || 'application/octet-stream',\n content: att.content || ''\n })\n }[\"ComposeEmail.useEffect.formattedAttachments\"]);\n setAttachments(formattedAttachments);\n }\n } else if (type === 'forward') {\n // Get formatted data for forward\n const formatted = (0,_lib_utils_email_utils__WEBPACK_IMPORTED_MODULE_7__.formatForwardedEmail)(initialEmail);\n // Set subject\n setSubject(formatted.subject);\n // Set content with original email - ensure we have content\n const content = formatted.content.html || formatted.content.text || '';\n if (!content) {\n console.warn('Forward content is empty, falling back to a basic template');\n // Provide a basic template if the content is empty\n const { fromStr, dateStr, subject: origSubject, toStr, ccStr } = getFormattedInfoForEmail(initialEmail);\n console.log('Creating forward fallback with:', {\n fromStr,\n dateStr,\n origSubject\n });\n const fallbackContent = `\n <div style=\"margin: 20px 0 10px 0; color: #666; font-family: Arial, sans-serif;\">\n <div style=\"border-bottom: 1px solid #ccc; margin-bottom: 10px; padding-bottom: 5px;\">\n <div>---------------------------- Forwarded Message ----------------------------</div>\n </div>\n <table style=\"margin-bottom: 10px; font-size: 14px;\">\n <tr>\n <td style=\"padding: 3px 10px 3px 0; font-weight: bold; text-align: right; vertical-align: top;\">From:</td>\n <td style=\"padding: 3px 0;\">${fromStr}</td>\n </tr>\n <tr>\n <td style=\"padding: 3px 10px 3px 0; font-weight: bold; text-align: right; vertical-align: top;\">Date:</td>\n <td style=\"padding: 3px 0;\">${dateStr}</td>\n </tr>\n <tr>\n <td style=\"padding: 3px 10px 3px 0; font-weight: bold; text-align: right; vertical-align: top;\">Subject:</td>\n <td style=\"padding: 3px 0;\">${origSubject || ''}</td>\n </tr>\n <tr>\n <td style=\"padding: 3px 10px 3px 0; font-weight: bold; text-align: right; vertical-align: top;\">To:</td>\n <td style=\"padding: 3px 0;\">${toStr}</td>\n </tr>\n ${ccStr ? `\n <tr>\n <td style=\"padding: 3px 10px 3px 0; font-weight: bold; text-align: right; vertical-align: top;\">Cc:</td>\n <td style=\"padding: 3px 0;\">${ccStr}</td>\n </tr>` : ''}\n </table>\n <div style=\"border-bottom: 1px solid #ccc; margin-top: 5px; margin-bottom: 15px; padding-bottom: 5px;\">\n <div>----------------------------------------------------------------------</div>\n </div>\n </div>\n <div class=\"forwarded-content\" style=\"margin: 0; color: #333;\">\n [Original message content could not be loaded]\n </div>\n `;\n setEmailContent(fallbackContent);\n } else {\n console.log('Setting forward content:', {\n length: content.length,\n isHtml: formatted.content.isHtml\n });\n setEmailContent(content);\n }\n // Handle attachments for forward (original attachments + extracted inline images)\n if (formatted.attachments && formatted.attachments.length > 0) {\n console.log(`Processing ${formatted.attachments.length} attachments for forwarded email`);\n const formattedAttachments = formatted.attachments.map({\n \"ComposeEmail.useEffect.formattedAttachments\": (att)=>({\n name: att.filename || 'attachment',\n type: att.contentType || 'application/octet-stream',\n content: att.content || ''\n })\n }[\"ComposeEmail.useEffect.formattedAttachments\"]);\n setAttachments(formattedAttachments);\n }\n }\n } catch (error) {\n console.error('Error initializing compose form:', error);\n // Provide a fallback in case of error\n setEmailContent('<p>Error loading email content</p>');\n }\n }\n }\n }[\"ComposeEmail.useEffect\"], [\n initialEmail,\n type,\n accounts\n ]);\n // Place cursor at beginning and ensure content is scrolled to top\n (0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)({\n \"ComposeEmail.useEffect\": ()=>{\n if (editorRef.current && type !== 'new') {\n // Small delay to ensure DOM is ready\n setTimeout({\n \"ComposeEmail.useEffect\": ()=>{\n if (editorRef.current) {\n // Focus the editor\n editorRef.current.focus();\n // Also make sure editor container is scrolled to top\n editorRef.current.scrollTop = 0;\n // Find parent scrollable containers and scroll them to top\n let parent = editorRef.current.parentElement;\n while(parent){\n if (parent.classList.contains('overflow-y-auto')) {\n parent.scrollTop = 0;\n }\n parent = parent.parentElement;\n }\n }\n }\n }[\"ComposeEmail.useEffect\"], 100);\n }\n }\n }[\"ComposeEmail.useEffect\"], [\n emailContent,\n type\n ]);\n // Handle file attachments\n const handleAttachmentAdd = async (files)=>{\n const newAttachments = Array.from(files).map((file)=>({\n name: file.name,\n type: file.type,\n content: URL.createObjectURL(file)\n }));\n setAttachments((prev)=>[\n ...prev,\n ...newAttachments\n ]);\n };\n const handleAttachmentRemove = (index)=>{\n setAttachments((prev)=>prev.filter((_, i)=>i !== index));\n };\n // Handle sending email\n const handleSend = async ()=>{\n if (!to) {\n alert('Please specify at least one recipient');\n return;\n }\n setSending(true);\n try {\n await onSend({\n to,\n cc: cc || undefined,\n bcc: bcc || undefined,\n subject,\n body: emailContent,\n fromAccount: selectedAccount?.id,\n attachments\n });\n // Reset form and close\n onClose();\n } catch (error) {\n console.error('Error sending email:', error);\n alert('Failed to send email. Please try again.');\n } finally{\n setSending(false);\n }\n };\n // Get compose title based on type\n const getComposeTitle = ()=>{\n switch(type){\n case 'reply':\n return 'Reply';\n case 'reply-all':\n return 'Reply All';\n case 'forward':\n return 'Forward';\n default:\n return 'New Message';\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"flex flex-col h-full max-h-[80vh] bg-white border rounded-md shadow-md\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"flex items-center justify-between p-3 border-b bg-gray-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"text-lg font-medium text-gray-800\",\n children: getComposeTitle()\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 353,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_3__.Button, {\n variant: \"ghost\",\n size: \"icon\",\n onClick: onClose,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Loader2_Paperclip_SendHorizontal_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 355,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 354,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 352,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"flex-1 overflow-y-auto bg-white\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"p-2 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"border-b pb-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"w-16 text-gray-700 text-sm font-medium\",\n children: \"From:\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 365,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.DropdownMenu, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.DropdownMenuTrigger, {\n asChild: true,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_3__.Button, {\n variant: \"outline\",\n className: \"w-full flex justify-between items-center h-8 px-2 py-1 text-left font-normal bg-white text-gray-800 border-gray-200\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"truncate\",\n children: selectedAccount ? selectedAccount.display_name ? `${selectedAccount.display_name} <${selectedAccount.email}>` : selectedAccount.email : 'Select account'\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 372,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Loader2_Paperclip_SendHorizontal_X_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"h-4 w-4 opacity-50\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 379,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 368,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 367,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.DropdownMenuContent, {\n align: \"start\",\n className: \"w-[240px]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.DropdownMenuLabel, {\n children: \"Select account\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 383,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.DropdownMenuSeparator, {}, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 384,\n columnNumber: 19\n }, this),\n accounts.length > 0 ? accounts.map((account)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.DropdownMenuItem, {\n onClick: ()=>setSelectedAccount(account),\n className: \"cursor-pointer hover:bg-blue-50 focus:bg-blue-50\",\n children: account.display_name ? `${account.display_name} <${account.email}>` : account.email\n }, account.id, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 387,\n columnNumber: 23\n }, this)) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.DropdownMenuItem, {\n disabled: true,\n children: \"No accounts available\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 398,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 382,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 366,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 364,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 363,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"border-b pb-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"w-16 text-gray-700 text-sm font-medium\",\n children: \"To:\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 408,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_4__.Input, {\n type: \"text\",\n value: to,\n onChange: (e)=>setTo(e.target.value),\n placeholder: \"recipient@example.com\",\n className: \"flex-1 border-0 shadow-none focus-visible:ring-0 px-0 h-8 bg-white text-gray-800\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 409,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 407,\n columnNumber: 13\n }, this),\n showCc && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"w-16 text-gray-700 text-sm font-medium\",\n children: \"Cc:\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 420,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_4__.Input, {\n type: \"text\",\n value: cc,\n onChange: (e)=>setCc(e.target.value),\n placeholder: \"cc@example.com\",\n className: \"flex-1 border-0 shadow-none focus-visible:ring-0 px-0 h-8 bg-white text-gray-800\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 421,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 419,\n columnNumber: 15\n }, this),\n showBcc && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"w-16 text-gray-700 text-sm font-medium\",\n children: \"Bcc:\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 433,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_4__.Input, {\n type: \"text\",\n value: bcc,\n onChange: (e)=>setBcc(e.target.value),\n placeholder: \"bcc@example.com\",\n className: \"flex-1 border-0 shadow-none focus-visible:ring-0 px-0 h-8 bg-white text-gray-800\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 434,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 432,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"flex gap-3 ml-16\",\n children: [\n !showCc && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowCc(true),\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"text-blue-600 text-sm hover:underline\",\n children: \"Add Cc\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 447,\n columnNumber: 17\n }, this),\n !showBcc && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowBcc(true),\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"text-blue-600 text-sm hover:underline\",\n children: \"Add Bcc\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 456,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 445,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 406,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"border-b pb-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"w-16 text-gray-700 text-sm font-medium\",\n children: \"Subject:\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 469,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_4__.Input, {\n type: \"text\",\n value: subject,\n onChange: (e)=>setSubject(e.target.value),\n placeholder: \"Subject\",\n className: \"flex-1 border-0 shadow-none focus-visible:ring-0 px-0 h-8 bg-white text-gray-800\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 470,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 468,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 467,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_email_RichEmailEditor__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n initialContent: emailContent,\n onChange: (html)=>{\n setEmailContent(html);\n },\n placeholder: \"Write your message here...\",\n minHeight: \"320px\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 481,\n columnNumber: 11\n }, this),\n attachments.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"p-2 border rounded-md bg-gray-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"text-sm font-medium mb-1 text-gray-700\",\n children: \"Attachments:\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 493,\n columnNumber: 15\n }, this),\n attachments.map((file, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"flex items-center justify-between text-sm py-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"truncate mr-2 text-gray-800\",\n children: file.name\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 496,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_3__.Button, {\n variant: \"ghost\",\n size: \"sm\",\n onClick: ()=>handleAttachmentRemove(index),\n className: \"h-6 w-6 p-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Loader2_Paperclip_SendHorizontal_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 503,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 497,\n columnNumber: 19\n }, this)\n ]\n }, index, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 495,\n columnNumber: 17\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 492,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 361,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 360,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"border-t p-3 flex items-center justify-between bg-gray-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"file\",\n id: \"file-attachment\",\n multiple: true,\n onChange: (e)=>{\n if (e.target.files && e.target.files.length > 0) {\n handleAttachmentAdd(e.target.files);\n }\n },\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"hidden\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 516,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"file-attachment\",\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"cursor-pointer\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_3__.Button, {\n variant: \"ghost\",\n size: \"sm\",\n className: \"p-1 text-gray-700 hover:bg-gray-100\",\n title: \"Attach files\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Loader2_Paperclip_SendHorizontal_X_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 534,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 528,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 527,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 514,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-4bd026b7b30bfd4c\" + \" \" + \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_3__.Button, {\n variant: \"default\",\n onClick: onClose,\n className: \"bg-red-600 hover:bg-red-700 text-white\",\n children: \"Cancel\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 540,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_3__.Button, {\n variant: \"default\",\n onClick: handleSend,\n disabled: sending,\n className: \"bg-blue-600 hover:bg-blue-700 text-white\",\n children: sending ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Loader2_Paperclip_SendHorizontal_X_lucide_react__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n className: \"mr-2 h-4 w-4 animate-spin\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 556,\n columnNumber: 17\n }, this),\n \"Sending\"\n ]\n }, void 0, true) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Loader2_Paperclip_SendHorizontal_X_lucide_react__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n className: \"mr-2 h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 561,\n columnNumber: 17\n }, this),\n \"Send\"\n ]\n }, void 0, true)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 548,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 539,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 513,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default()), {\n id: \"4bd026b7b30bfd4c\",\n children: '[contenteditable]{-webkit-user-modify:read-write-plaintext-only;word-wrap:break-word;overflow-wrap:break-word;-webkit-line-break:after-white-space;-webkit-user-select:text;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Arial,sans-serif;font-size:14px;line-height:1.5;color:#333;background-color:#fff}[contenteditable]:focus{outline:none}[contenteditable] blockquote{margin:10px 0;padding-left:15px;border-left:2px solid#ddd;color:#666}[contenteditable] img{max-width:100%;height:auto}[contenteditable] table{border-collapse:collapse;width:100%;max-width:100%;margin-bottom:1rem}[contenteditable] th,[contenteditable] td{padding:5px;border:1px solid#ddd}[contenteditable] th{background-color:#f8f9fa;font-weight:600;text-align:left}.email-original-content{margin-top:20px;color:#505050}'\n }, void 0, false, void 0, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/ComposeEmail.tsx\",\n lineNumber: 350,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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TDhHLFNBQVE7b0NBQ1JDLE1BQUs7b0NBQ0xFLFdBQVU7b0NBQ1ZrQixPQUFNOzhDQUVOLDRFQUFDdkksMkhBQVNBO3dDQUFDcUgsV0FBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FLM0IsOERBQUNMO2tFQUFjOzswQ0FDYiw4REFBQzVHLHlEQUFNQTtnQ0FDTDhHLFNBQVE7Z0NBQ1JFLFNBQVNqRztnQ0FDVGtHLFdBQVU7MENBQ1g7Ozs7OzswQ0FJRCw4REFBQ2pILHlEQUFNQTtnQ0FDTDhHLFNBQVE7Z0NBQ1JFLFNBQVNWO2dDQUNUZ0IsVUFBVXBGO2dDQUNWK0UsV0FBVTswQ0FFVC9FLHdCQUNDOztzREFDRSw4REFBQ3BDLDJIQUFPQTs0Q0FBQ21ILFdBQVU7Ozs7Ozt3Q0FBOEI7O2lFQUluRDs7c0RBQ0UsOERBQUNwSCwySEFBY0E7NENBQUNvSCxXQUFVOzs7Ozs7d0NBQWlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpRTNEIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2NvbXBvbmVudHMvZW1haWwvQ29tcG9zZUVtYWlsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFxuICBYLCBQYXBlcmNsaXAsIFNlbmRIb3Jpem9udGFsLCBMb2FkZXIyLCBQbHVzLCBDaGV2cm9uRG93blxufSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbic7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCc7XG5pbXBvcnQgRE9NUHVyaWZ5IGZyb20gJ2lzb21vcnBoaWMtZG9tcHVyaWZ5JztcbmltcG9ydCB7XG4gIERyb3Bkb3duTWVudSxcbiAgRHJvcGRvd25NZW51Q29udGVudCxcbiAgRHJvcGRvd25NZW51SXRlbSxcbiAgRHJvcGRvd25NZW51TGFiZWwsXG4gIERyb3Bkb3duTWVudVNlcGFyYXRvcixcbiAgRHJvcGRvd25NZW51VHJpZ2dlcixcbn0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9kcm9wZG93bi1tZW51XCI7XG5pbXBvcnQgUmljaEVtYWlsRWRpdG9yIGZyb20gJ0AvY29tcG9uZW50cy9lbWFpbC9SaWNoRW1haWxFZGl0b3InO1xuaW1wb3J0IHsgZGV0ZWN0VGV4dERpcmVjdGlvbiB9IGZyb20gJ0AvbGliL3V0aWxzL3RleHQtZGlyZWN0aW9uJztcblxuLy8gSW1wb3J0IGZyb20gdGhlIGNlbnRyYWxpemVkIHV0aWxzXG5pbXBvcnQgeyBcbiAgZm9ybWF0UmVwbHlFbWFpbCwgXG4gIGZvcm1hdEZvcndhcmRlZEVtYWlsXG59IGZyb20gJ0AvbGliL3V0aWxzL2VtYWlsLXV0aWxzJztcbmltcG9ydCB7IEVtYWlsTWVzc2FnZSB9IGZyb20gJ0AvdHlwZXMvZW1haWwnO1xuXG4vKipcbiAqIEVtYWlsIGNvbXBvc2VyIGNvbXBvbmVudFxuICogSGFuZGxlcyBuZXcgZW1haWxzLCByZXBsaWVzLCBhbmQgZm9yd2FyZHMgd2l0aCBhIGNsZWFuIFVJXG4gKi9cbmludGVyZmFjZSBDb21wb3NlRW1haWxQcm9wcyB7XG4gIGluaXRpYWxFbWFpbD86IEVtYWlsTWVzc2FnZSB8IG51bGw7XG4gIHR5cGU/OiAnbmV3JyB8ICdyZXBseScgfCAncmVwbHktYWxsJyB8ICdmb3J3YXJkJztcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgb25TZW5kOiAoZW1haWxEYXRhOiB7XG4gICAgdG86IHN0cmluZztcbiAgICBjYz86IHN0cmluZztcbiAgICBiY2M/OiBzdHJpbmc7XG4gICAgc3ViamVjdDogc3RyaW5nO1xuICAgIGJvZHk6IHN0cmluZztcbiAgICBmcm9tQWNjb3VudD86IHN0cmluZztcbiAgICBhdHRhY2htZW50cz86IEFycmF5PHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICAgIHR5cGU6IHN0cmluZztcbiAgICB9PjtcbiAgfSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgYWNjb3VudHM/OiBBcnJheTx7XG4gICAgaWQ6IHN0cmluZztcbiAgICBlbWFpbDogc3RyaW5nO1xuICAgIGRpc3BsYXlfbmFtZT86IHN0cmluZztcbiAgfT47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbXBvc2VFbWFpbChwcm9wczogQ29tcG9zZUVtYWlsUHJvcHMpIHtcbiAgY29uc3QgeyBpbml0aWFsRW1haWwsIHR5cGUgPSAnbmV3Jywgb25DbG9zZSwgb25TZW5kLCBhY2NvdW50cyA9IFtdIH0gPSBwcm9wcztcbiAgXG4gIC8vIFN0YXRlIGZvciBlbWFpbCBmb3JtXG4gIGNvbnN0IFtzZWxlY3RlZEFjY291bnQsIHNldFNlbGVjdGVkQWNjb3VudF0gPSB1c2VTdGF0ZTxhbnk+KGFjY291bnRzWzBdKTtcbiAgY29uc3QgW3RvLCBzZXRUb10gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtjYywgc2V0Q2NdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbYmNjLCBzZXRCY2NdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbc3ViamVjdCwgc2V0U3ViamVjdF0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtlbWFpbENvbnRlbnQsIHNldEVtYWlsQ29udGVudF0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtzaG93Q2MsIHNldFNob3dDY10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93QmNjLCBzZXRTaG93QmNjXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NlbmRpbmcsIHNldFNlbmRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYXR0YWNobWVudHMsIHNldEF0dGFjaG1lbnRzXSA9IHVzZVN0YXRlPEFycmF5PHtuYW1lOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZzsgdHlwZTogc3RyaW5nO30+PihbXSk7XG4gIFxuICAvLyBSZWZlcmVuY2UgdG8gZWRpdG9yXG4gIGNvbnN0IGVkaXRvclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCBmb3JtYXR0ZWQgaW5mbyBmcm9tIGVtYWlsXG4gIGZ1bmN0aW9uIGdldEZvcm1hdHRlZEluZm9Gb3JFbWFpbChlbWFpbDogYW55KSB7XG4gICAgLy8gRm9ybWF0IHRoZSBzdWJqZWN0XG4gICAgY29uc3Qgc3ViamVjdCA9IGVtYWlsLnN1YmplY3QgfHwgJyc7XG5cbiAgICAvLyBGb3JtYXQgdGhlIGRhdGVcbiAgICBjb25zdCBkYXRlU3RyID0gZW1haWwuZGF0ZSA/IG5ldyBEYXRlKGVtYWlsLmRhdGUpLnRvTG9jYWxlU3RyaW5nKCkgOiAnVW5rbm93biBEYXRlJztcbiAgICBcbiAgICAvLyBGb3JtYXQgc2VuZGVyXG4gICAgY29uc3QgZnJvbVN0ciA9IEFycmF5LmlzQXJyYXkoZW1haWwuZnJvbSlcbiAgICAgID8gZW1haWwuZnJvbS5tYXAoKGFkZHI6IGFueSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgYWRkciA9PT0gJ3N0cmluZycpIHJldHVybiBhZGRyO1xuICAgICAgICAgIHJldHVybiBhZGRyLm5hbWUgPyBgJHthZGRyLm5hbWV9IDwke2FkZHIuYWRkcmVzc30+YCA6IGFkZHIuYWRkcmVzcztcbiAgICAgICAgfSkuam9pbignLCAnKVxuICAgICAgOiB0eXBlb2YgZW1haWwuZnJvbSA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBlbWFpbC5mcm9tXG4gICAgICAgIDogZW1haWwuZnJvbT8uYWRkcmVzc1xuICAgICAgICAgID8gZW1haWwuZnJvbS5uYW1lXG4gICAgICAgICAgICA/IGAke2VtYWlsLmZyb20ubmFtZX0gPCR7ZW1haWwuZnJvbS5hZGRyZXNzfT5gXG4gICAgICAgICAgICA6IGVtYWlsLmZyb20uYWRkcmVzc1xuICAgICAgICAgIDogJ1Vua25vd24gU2VuZGVyJztcbiAgICBcbiAgICAvLyBGb3JtYXQgcmVjaXBpZW50c1xuICAgIGNvbnN0IHRvU3RyID0gQXJyYXkuaXNBcnJheShlbWFpbC50bylcbiAgICAgID8gZW1haWwudG8ubWFwKChhZGRyOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGFkZHIgPT09ICdzdHJpbmcnKSByZXR1cm4gYWRkcjtcbiAgICAgICAgICByZXR1cm4gYWRkci5uYW1lID8gYCR7YWRkci5uYW1lfSA8JHthZGRyLmFkZHJlc3N9PmAgOiBhZGRyLmFkZHJlc3M7XG4gICAgICAgIH0pLmpvaW4oJywgJylcbiAgICAgIDogdHlwZW9mIGVtYWlsLnRvID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGVtYWlsLnRvXG4gICAgICAgIDogJyc7XG4gICAgXG4gICAgLy8gRm9ybWF0IENDIFxuICAgIGNvbnN0IGNjU3RyID0gQXJyYXkuaXNBcnJheShlbWFpbC5jYylcbiAgICAgID8gZW1haWwuY2MubWFwKChhZGRyOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGFkZHIgPT09ICdzdHJpbmcnKSByZXR1cm4gYWRkcjtcbiAgICAgICAgICByZXR1cm4gYWRkci5uYW1lID8gYCR7YWRkci5uYW1lfSA8JHthZGRyLmFkZHJlc3N9PmAgOiBhZGRyLmFkZHJlc3M7XG4gICAgICAgIH0pLmpvaW4oJywgJylcbiAgICAgIDogdHlwZW9mIGVtYWlsLmNjID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGVtYWlsLmNjXG4gICAgICAgIDogJyc7XG5cbiAgICByZXR1cm4geyBmcm9tU3RyLCB0b1N0ciwgY2NTdHIsIGRhdGVTdHIsIHN1YmplY3QgfTtcbiAgfVxuICBcbiAgLy8gSW5pdGlhbGl6ZSBlbWFpbCBmb3JtIGJhc2VkIG9uIGluaXRpYWwgZW1haWwgYW5kIHR5cGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5pdGlhbEVtYWlsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLmxvZygnSW5pdGlhbGl6aW5nIGNvbXBvc2Ugd2l0aCBlbWFpbDonLCB7XG4gICAgICAgICAgaWQ6IGluaXRpYWxFbWFpbC5pZCxcbiAgICAgICAgICBzdWJqZWN0OiBpbml0aWFsRW1haWwuc3ViamVjdCxcbiAgICAgICAgICBoYXNDb250ZW50OiAhIWluaXRpYWxFbWFpbC5jb250ZW50LFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiBpbml0aWFsRW1haWwuY29udGVudCA/IHR5cGVvZiBpbml0aWFsRW1haWwuY29udGVudCA6ICdub25lJ1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIFNldCBkZWZhdWx0IGFjY291bnQgZnJvbSBvcmlnaW5hbCBlbWFpbCAtIHVzZSB0eXBlIGFzc2VydGlvbiBzaW5jZSBhY2NvdW50SWQgbWlnaHQgYmUgY3VzdG9tIHByb3BlcnR5XG4gICAgICAgIGNvbnN0IGVtYWlsQW55ID0gaW5pdGlhbEVtYWlsIGFzIGFueTtcbiAgICAgICAgaWYgKGVtYWlsQW55LmFjY291bnRJZCAmJiBhY2NvdW50cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgYWNjb3VudCA9IGFjY291bnRzLmZpbmQoYSA9PiBhLmlkID09PSBlbWFpbEFueS5hY2NvdW50SWQpO1xuICAgICAgICAgIGlmIChhY2NvdW50KSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEFjY291bnQoYWNjb3VudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBHZXQgcmVjaXBpZW50cyBiYXNlZCBvbiB0eXBlXG4gICAgICAgIGlmICh0eXBlID09PSAncmVwbHknIHx8IHR5cGUgPT09ICdyZXBseS1hbGwnKSB7XG4gICAgICAgICAgLy8gR2V0IGZvcm1hdHRlZCBkYXRhIGZvciByZXBseVxuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdFJlcGx5RW1haWwoaW5pdGlhbEVtYWlsLCB0eXBlKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBTZXQgcmVwbHkgYWRkcmVzc2VzXG4gICAgICAgICAgc2V0VG8oZm9ybWF0dGVkLnRvKTtcbiAgICAgICAgICBpZiAoZm9ybWF0dGVkLmNjKSB7XG4gICAgICAgICAgICBzZXRTaG93Q2ModHJ1ZSk7XG4gICAgICAgICAgICBzZXRDYyhmb3JtYXR0ZWQuY2MpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBTZXQgc3ViamVjdFxuICAgICAgICAgIHNldFN1YmplY3QoZm9ybWF0dGVkLnN1YmplY3QpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFNldCBjb250ZW50IHdpdGggb3JpZ2luYWwgZW1haWwgLSBlbnN1cmUgd2UgaGF2ZSBjb250ZW50XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IGZvcm1hdHRlZC5jb250ZW50Lmh0bWwgfHwgZm9ybWF0dGVkLmNvbnRlbnQudGV4dCB8fCAnJztcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUmVwbHkgY29udGVudCBpcyBlbXB0eSwgZmFsbGluZyBiYWNrIHRvIGEgYmFzaWMgdGVtcGxhdGUnKTtcbiAgICAgICAgICAgIC8vIFByb3ZpZGUgYSBiYXNpYyB0ZW1wbGF0ZSBpZiB0aGUgY29udGVudCBpcyBlbXB0eVxuICAgICAgICAgICAgY29uc3QgeyBmcm9tU3RyLCBkYXRlU3RyIH0gPSBnZXRGb3JtYXR0ZWRJbmZvRm9yRW1haWwoaW5pdGlhbEVtYWlsKTtcbiAgICAgICAgICAgIGNvbnN0IGZhbGxiYWNrQ29udGVudCA9IGBcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogMjBweCAwIDEwcHggMDsgY29sb3I6ICM2NjY7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkOyBwYWRkaW5nLWJvdHRvbTogNXB4O1wiPlxuICAgICAgICAgICAgICAgIE9uICR7ZGF0ZVN0cn0sICR7ZnJvbVN0cn0gd3JvdGU6XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YmxvY2txdW90ZSBzdHlsZT1cIm1hcmdpbjogMDsgcGFkZGluZy1sZWZ0OiAxMHB4OyBib3JkZXItbGVmdDogM3B4IHNvbGlkICNkZGQ7IGNvbG9yOiAjNTA1MDUwOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5OyBwYWRkaW5nOiAxMHB4O1wiPlxuICAgICAgICAgICAgICAgIFtPcmlnaW5hbCBtZXNzYWdlIGNvbnRlbnQgY291bGQgbm90IGJlIGxvYWRlZF1cbiAgICAgICAgICAgICAgPC9ibG9ja3F1b3RlPlxuICAgICAgICAgICAgYDtcbiAgICAgICAgICAgIHNldEVtYWlsQ29udGVudChmYWxsYmFja0NvbnRlbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU2V0dGluZyByZXBseSBjb250ZW50OicsIHtcbiAgICAgICAgICAgICAgbGVuZ3RoOiBjb250ZW50Lmxlbmd0aCxcbiAgICAgICAgICAgICAgaXNIdG1sOiBmb3JtYXR0ZWQuY29udGVudC5pc0h0bWwsXG4gICAgICAgICAgICAgIHN0YXJ0c1dpdGhIdG1sOiBjb250ZW50LnRyaW0oKS5zdGFydHNXaXRoKCc8JyksXG4gICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB0eXBlb2YgY29udGVudFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZXRFbWFpbENvbnRlbnQoY29udGVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEhhbmRsZSBhbnkgYXR0YWNobWVudHMgZnJvbSByZXBseSAoZS5nLiwgaW5saW5lIGltYWdlcyBleHRyYWN0ZWQgYXMgYXR0YWNobWVudHMpXG4gICAgICAgICAgaWYgKGZvcm1hdHRlZC5hdHRhY2htZW50cyAmJiBmb3JtYXR0ZWQuYXR0YWNobWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkQXR0YWNobWVudHMgPSBmb3JtYXR0ZWQuYXR0YWNobWVudHMubWFwKGF0dCA9PiAoe1xuICAgICAgICAgICAgICBuYW1lOiBhdHQuZmlsZW5hbWUgfHwgJ2F0dGFjaG1lbnQnLFxuICAgICAgICAgICAgICB0eXBlOiBhdHQuY29udGVudFR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGF0dC5jb250ZW50IHx8ICcnXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBzZXRBdHRhY2htZW50cyhmb3JtYXR0ZWRBdHRhY2htZW50cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdmb3J3YXJkJykge1xuICAgICAgICAgIC8vIEdldCBmb3JtYXR0ZWQgZGF0YSBmb3IgZm9yd2FyZFxuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdEZvcndhcmRlZEVtYWlsKGluaXRpYWxFbWFpbCk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU2V0IHN1YmplY3RcbiAgICAgICAgICBzZXRTdWJqZWN0KGZvcm1hdHRlZC5zdWJqZWN0KTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBTZXQgY29udGVudCB3aXRoIG9yaWdpbmFsIGVtYWlsIC0gZW5zdXJlIHdlIGhhdmUgY29udGVudFxuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmb3JtYXR0ZWQuY29udGVudC5odG1sIHx8IGZvcm1hdHRlZC5jb250ZW50LnRleHQgfHwgJyc7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKCFjb250ZW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ZvcndhcmQgY29udGVudCBpcyBlbXB0eSwgZmFsbGluZyBiYWNrIHRvIGEgYmFzaWMgdGVtcGxhdGUnKTtcbiAgICAgICAgICAgIC8vIFByb3ZpZGUgYSBiYXNpYyB0ZW1wbGF0ZSBpZiB0aGUgY29udGVudCBpcyBlbXB0eVxuICAgICAgICAgICAgY29uc3QgeyBmcm9tU3RyLCBkYXRlU3RyLCBzdWJqZWN0OiBvcmlnU3ViamVjdCwgdG9TdHIsIGNjU3RyIH0gPSBnZXRGb3JtYXR0ZWRJbmZvRm9yRW1haWwoaW5pdGlhbEVtYWlsKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDcmVhdGluZyBmb3J3YXJkIGZhbGxiYWNrIHdpdGg6JywgeyBmcm9tU3RyLCBkYXRlU3RyLCBvcmlnU3ViamVjdCB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZhbGxiYWNrQ29udGVudCA9IGBcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogMjBweCAwIDEwcHggMDsgY29sb3I6ICM2NjY7IGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjtcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7IG1hcmdpbi1ib3R0b206IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2Pi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRm9yd2FyZGVkIE1lc3NhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDx0YWJsZSBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDEwcHg7IGZvbnQtc2l6ZTogMTRweDtcIj5cbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzogM3B4IDEwcHggM3B4IDA7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiByaWdodDsgdmVydGljYWwtYWxpZ246IHRvcDtcIj5Gcm9tOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6IDNweCAwO1wiPiR7ZnJvbVN0cn08L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzogM3B4IDEwcHggM3B4IDA7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiByaWdodDsgdmVydGljYWwtYWxpZ246IHRvcDtcIj5EYXRlOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6IDNweCAwO1wiPiR7ZGF0ZVN0cn08L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzogM3B4IDEwcHggM3B4IDA7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiByaWdodDsgdmVydGljYWwtYWxpZ246IHRvcDtcIj5TdWJqZWN0OjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6IDNweCAwO1wiPiR7b3JpZ1N1YmplY3QgfHwgJyd9PC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6IDNweCAxMHB4IDNweCAwOyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiB0b3A7XCI+VG86PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzogM3B4IDA7XCI+JHt0b1N0cn08L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICR7Y2NTdHIgPyBgXG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6IDNweCAxMHB4IDNweCAwOyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiB0b3A7XCI+Q2M6PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzogM3B4IDA7XCI+JHtjY1N0cn08L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5gIDogJyd9XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7IG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLWJvdHRvbTogMTVweDsgcGFkZGluZy1ib3R0b206IDVweDtcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcndhcmRlZC1jb250ZW50XCIgc3R5bGU9XCJtYXJnaW46IDA7IGNvbG9yOiAjMzMzO1wiPlxuICAgICAgICAgICAgICAgIFtPcmlnaW5hbCBtZXNzYWdlIGNvbnRlbnQgY291bGQgbm90IGJlIGxvYWRlZF1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuICAgICAgICAgICAgc2V0RW1haWxDb250ZW50KGZhbGxiYWNrQ29udGVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZXR0aW5nIGZvcndhcmQgY29udGVudDonLCB7XG4gICAgICAgICAgICAgIGxlbmd0aDogY29udGVudC5sZW5ndGgsXG4gICAgICAgICAgICAgIGlzSHRtbDogZm9ybWF0dGVkLmNvbnRlbnQuaXNIdG1sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNldEVtYWlsQ29udGVudChjb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gSGFuZGxlIGF0dGFjaG1lbnRzIGZvciBmb3J3YXJkIChvcmlnaW5hbCBhdHRhY2htZW50cyArIGV4dHJhY3RlZCBpbmxpbmUgaW1hZ2VzKVxuICAgICAgICAgIGlmIChmb3JtYXR0ZWQuYXR0YWNobWVudHMgJiYgZm9ybWF0dGVkLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nICR7Zm9ybWF0dGVkLmF0dGFjaG1lbnRzLmxlbmd0aH0gYXR0YWNobWVudHMgZm9yIGZvcndhcmRlZCBlbWFpbGApO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkQXR0YWNobWVudHMgPSBmb3JtYXR0ZWQuYXR0YWNobWVudHMubWFwKGF0dCA9PiAoe1xuICAgICAgICAgICAgICBuYW1lOiBhdHQuZmlsZW5hbWUgfHwgJ2F0dGFjaG1lbnQnLFxuICAgICAgICAgICAgICB0eXBlOiBhdHQuY29udGVudFR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGF0dC5jb250ZW50IHx8ICcnXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBzZXRBdHRhY2htZW50cyhmb3JtYXR0ZWRBdHRhY2htZW50cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgY29tcG9zZSBmb3JtOicsIGVycm9yKTtcbiAgICAgICAgLy8gUHJvdmlkZSBhIGZhbGxiYWNrIGluIGNhc2Ugb2YgZXJyb3JcbiAgICAgICAgc2V0RW1haWxDb250ZW50KCc8cD5FcnJvciBsb2FkaW5nIGVtYWlsIGNvbnRlbnQ8L3A+Jyk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbaW5pdGlhbEVtYWlsLCB0eXBlLCBhY2NvdW50c10pO1xuICBcbiAgLy8gUGxhY2UgY3Vyc29yIGF0IGJlZ2lubmluZyBhbmQgZW5zdXJlIGNvbnRlbnQgaXMgc2Nyb2xsZWQgdG8gdG9wXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGVkaXRvclJlZi5jdXJyZW50ICYmIHR5cGUgIT09ICduZXcnKSB7XG4gICAgICAvLyBTbWFsbCBkZWxheSB0byBlbnN1cmUgRE9NIGlzIHJlYWR5XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKGVkaXRvclJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgLy8gRm9jdXMgdGhlIGVkaXRvclxuICAgICAgICAgIGVkaXRvclJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQWxzbyBtYWtlIHN1cmUgZWRpdG9yIGNvbnRhaW5lciBpcyBzY3JvbGxlZCB0byB0b3BcbiAgICAgICAgICBlZGl0b3JSZWYuY3VycmVudC5zY3JvbGxUb3AgPSAwO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEZpbmQgcGFyZW50IHNjcm9sbGFibGUgY29udGFpbmVycyBhbmQgc2Nyb2xsIHRoZW0gdG8gdG9wXG4gICAgICAgICAgbGV0IHBhcmVudCA9IGVkaXRvclJlZi5jdXJyZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICAgICAgaWYgKHBhcmVudC5jbGFzc0xpc3QuY29udGFpbnMoJ292ZXJmbG93LXktYXV0bycpKSB7XG4gICAgICAgICAgICAgIHBhcmVudC5zY3JvbGxUb3AgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfSwgW2VtYWlsQ29udGVudCwgdHlwZV0pO1xuICBcbiAgLy8gSGFuZGxlIGZpbGUgYXR0YWNobWVudHNcbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudEFkZCA9IGFzeW5jIChmaWxlczogRmlsZUxpc3QpID0+IHtcbiAgICBjb25zdCBuZXdBdHRhY2htZW50cyA9IEFycmF5LmZyb20oZmlsZXMpLm1hcChmaWxlID0+ICh7XG4gICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICB0eXBlOiBmaWxlLnR5cGUsXG4gICAgICBjb250ZW50OiBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpXG4gICAgfSkpO1xuICAgIFxuICAgIHNldEF0dGFjaG1lbnRzKHByZXYgPT4gWy4uLnByZXYsIC4uLm5ld0F0dGFjaG1lbnRzXSk7XG4gIH07XG4gIFxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50UmVtb3ZlID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBzZXRBdHRhY2htZW50cyhwcmV2ID0+IHByZXYuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCkpO1xuICB9O1xuICBcbiAgLy8gSGFuZGxlIHNlbmRpbmcgZW1haWxcbiAgY29uc3QgaGFuZGxlU2VuZCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoIXRvKSB7XG4gICAgICBhbGVydCgnUGxlYXNlIHNwZWNpZnkgYXQgbGVhc3Qgb25lIHJlY2lwaWVudCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBzZXRTZW5kaW5nKHRydWUpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBvblNlbmQoe1xuICAgICAgICB0byxcbiAgICAgICAgY2M6IGNjIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgYmNjOiBiY2MgfHwgdW5kZWZpbmVkLFxuICAgICAgICBzdWJqZWN0LFxuICAgICAgICBib2R5OiBlbWFpbENvbnRlbnQsXG4gICAgICAgIGZyb21BY2NvdW50OiBzZWxlY3RlZEFjY291bnQ/LmlkLFxuICAgICAgICBhdHRhY2htZW50c1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFJlc2V0IGZvcm0gYW5kIGNsb3NlXG4gICAgICBvbkNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNlbmRpbmcgZW1haWw6JywgZXJyb3IpO1xuICAgICAgYWxlcnQoJ0ZhaWxlZCB0byBzZW5kIGVtYWlsLiBQbGVhc2UgdHJ5IGFnYWluLicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRTZW5kaW5nKGZhbHNlKTtcbiAgICB9XG4gIH07XG4gIFxuICAvLyBHZXQgY29tcG9zZSB0aXRsZSBiYXNlZCBvbiB0eXBlXG4gIGNvbnN0IGdldENvbXBvc2VUaXRsZSA9ICgpID0+IHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgY2FzZSAncmVwbHknOiByZXR1cm4gJ1JlcGx5JztcbiAgICAgIGNhc2UgJ3JlcGx5LWFsbCc6IHJldHVybiAnUmVwbHkgQWxsJztcbiAgICAgIGNhc2UgJ2ZvcndhcmQnOiByZXR1cm4gJ0ZvcndhcmQnO1xuICAgICAgZGVmYXVsdDogcmV0dXJuICdOZXcgTWVzc2FnZSc7XG4gICAgfVxuICB9O1xuICBcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsIG1heC1oLVs4MHZoXSBiZy13aGl0ZSBib3JkZXIgcm91bmRlZC1tZCBzaGFkb3ctbWRcIj5cbiAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwLTMgYm9yZGVyLWIgYmctZ3JheS01MFwiPlxuICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bSB0ZXh0LWdyYXktODAwXCI+e2dldENvbXBvc2VUaXRsZSgpfTwvaDI+XG4gICAgICAgIDxCdXR0b24gdmFyaWFudD1cImdob3N0XCIgc2l6ZT1cImljb25cIiBvbkNsaWNrPXtvbkNsb3NlfT5cbiAgICAgICAgICA8WCBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgey8qIEVtYWlsIEZvcm0gKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy15LWF1dG8gYmctd2hpdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTIgc3BhY2UteS0yXCI+XG4gICAgICAgICAgey8qIEZyb20gKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJib3JkZXItYiBwYi0xXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInctMTYgdGV4dC1ncmF5LTcwMCB0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+RnJvbTo8L3NwYW4+XG4gICAgICAgICAgICAgIDxEcm9wZG93bk1lbnU+XG4gICAgICAgICAgICAgICAgPERyb3Bkb3duTWVudVRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCIgXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgaC04IHB4LTIgcHktMSB0ZXh0LWxlZnQgZm9udC1ub3JtYWwgYmctd2hpdGUgdGV4dC1ncmF5LTgwMCBib3JkZXItZ3JheS0yMDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHtzZWxlY3RlZEFjY291bnQgPyBcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZEFjY291bnQuZGlzcGxheV9uYW1lID8gXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAke3NlbGVjdGVkQWNjb3VudC5kaXNwbGF5X25hbWV9IDwke3NlbGVjdGVkQWNjb3VudC5lbWFpbH0+YCA6IFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEFjY291bnQuZW1haWwpIDogXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VsZWN0IGFjY291bnQnfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJoLTQgdy00IG9wYWNpdHktNTBcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9Ecm9wZG93bk1lbnVUcmlnZ2VyPlxuICAgICAgICAgICAgICAgIDxEcm9wZG93bk1lbnVDb250ZW50IGFsaWduPVwic3RhcnRcIiBjbGFzc05hbWU9XCJ3LVsyNDBweF1cIj5cbiAgICAgICAgICAgICAgICAgIDxEcm9wZG93bk1lbnVMYWJlbD5TZWxlY3QgYWNjb3VudDwvRHJvcGRvd25NZW51TGFiZWw+XG4gICAgICAgICAgICAgICAgICA8RHJvcGRvd25NZW51U2VwYXJhdG9yIC8+XG4gICAgICAgICAgICAgICAgICB7YWNjb3VudHMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudHMubWFwKGFjY291bnQgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bk1lbnVJdGVtIFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXthY2NvdW50LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2VsZWN0ZWRBY2NvdW50KGFjY291bnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctYmx1ZS01MCBmb2N1czpiZy1ibHVlLTUwXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YWNjb3VudC5kaXNwbGF5X25hbWUgPyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7YWNjb3VudC5kaXNwbGF5X25hbWV9IDwke2FjY291bnQuZW1haWx9PmAgOiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudC5lbWFpbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd25NZW51SXRlbSBkaXNhYmxlZD5ObyBhY2NvdW50cyBhdmFpbGFibGU8L0Ryb3Bkb3duTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51Q29udGVudD5cbiAgICAgICAgICAgICAgPC9Ecm9wZG93bk1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBcbiAgICAgICAgICB7LyogUmVjaXBpZW50cyAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvcmRlci1iIHBiLTFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidy0xNiB0ZXh0LWdyYXktNzAwIHRleHQtc20gZm9udC1tZWRpdW1cIj5Ubzo8L3NwYW4+XG4gICAgICAgICAgICAgIDxJbnB1dCBcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e3RvfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0VG8oZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwicmVjaXBpZW50QGV4YW1wbGUuY29tXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgYm9yZGVyLTAgc2hhZG93LW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTAgcHgtMCBoLTggYmctd2hpdGUgdGV4dC1ncmF5LTgwMFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAge3Nob3dDYyAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ3LTE2IHRleHQtZ3JheS03MDAgdGV4dC1zbSBmb250LW1lZGl1bVwiPkNjOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8SW5wdXQgXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17Y2N9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldENjKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiY2NAZXhhbXBsZS5jb21cIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIGJvcmRlci0wIHNoYWRvdy1ub25lIGZvY3VzLXZpc2libGU6cmluZy0wIHB4LTAgaC04IGJnLXdoaXRlIHRleHQtZ3JheS04MDBcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAge3Nob3dCY2MgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidy0xNiB0ZXh0LWdyYXktNzAwIHRleHQtc20gZm9udC1tZWRpdW1cIj5CY2M6PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxJbnB1dCBcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtiY2N9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEJjYyhlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImJjY0BleGFtcGxlLmNvbVwiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgYm9yZGVyLTAgc2hhZG93LW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTAgcHgtMCBoLTggYmctd2hpdGUgdGV4dC1ncmF5LTgwMFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB7LyogQ0MvQkNDIFRvZ2dsZSBMaW5rcyAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtMyBtbC0xNlwiPlxuICAgICAgICAgICAgICB7IXNob3dDYyAmJiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtYmx1ZS02MDAgdGV4dC1zbSBob3Zlcjp1bmRlcmxpbmVcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd0NjKHRydWUpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEFkZCBDY1xuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgeyFzaG93QmNjICYmIChcbiAgICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1ibHVlLTYwMCB0ZXh0LXNtIGhvdmVyOnVuZGVybGluZVwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93QmNjKHRydWUpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEFkZCBCY2NcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgIHsvKiBTdWJqZWN0ICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyLWIgcGItMVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ3LTE2IHRleHQtZ3JheS03MDAgdGV4dC1zbSBmb250LW1lZGl1bVwiPlN1YmplY3Q6PC9zcGFuPlxuICAgICAgICAgICAgICA8SW5wdXQgXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtzdWJqZWN0fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0U3ViamVjdChlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTdWJqZWN0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgYm9yZGVyLTAgc2hhZG93LW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTAgcHgtMCBoLTggYmctd2hpdGUgdGV4dC1ncmF5LTgwMFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBcbiAgICAgICAgICB7LyogTWVzc2FnZSBCb2R5ICovfVxuICAgICAgICAgIDxSaWNoRW1haWxFZGl0b3JcbiAgICAgICAgICAgIGluaXRpYWxDb250ZW50PXtlbWFpbENvbnRlbnR9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGh0bWwpID0+IHtcbiAgICAgICAgICAgICAgc2V0RW1haWxDb250ZW50KGh0bWwpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiV3JpdGUgeW91ciBtZXNzYWdlIGhlcmUuLi5cIlxuICAgICAgICAgICAgbWluSGVpZ2h0PVwiMzIwcHhcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgXG4gICAgICAgICAgey8qIEF0dGFjaG1lbnRzICovfVxuICAgICAgICAgIHthdHRhY2htZW50cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC0yIGJvcmRlciByb3VuZGVkLW1kIGJnLWdyYXktNTBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIG1iLTEgdGV4dC1ncmF5LTcwMFwiPkF0dGFjaG1lbnRzOjwvZGl2PlxuICAgICAgICAgICAgICB7YXR0YWNobWVudHMubWFwKChmaWxlLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXYga2V5PXtpbmRleH0gY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHRleHQtc20gcHktMVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidHJ1bmNhdGUgbXItMiB0ZXh0LWdyYXktODAwXCI+e2ZpbGUubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIFxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBdHRhY2htZW50UmVtb3ZlKGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC02IHctNiBwLTBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8WCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIHsvKiBGb290ZXIgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvcmRlci10IHAtMyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gYmctZ3JheS01MFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgey8qIEZpbGUgSW5wdXQgZm9yIEF0dGFjaG1lbnRzIC0gc2ltcGxlciB2ZXJzaW9uICovfVxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgaWQ9XCJmaWxlLWF0dGFjaG1lbnRcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaGlkZGVuXCJcbiAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmZpbGVzICYmIGUudGFyZ2V0LmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVBdHRhY2htZW50QWRkKGUudGFyZ2V0LmZpbGVzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwiZmlsZS1hdHRhY2htZW50XCIgY2xhc3NOYW1lPVwiY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgIDxCdXR0b24gXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiIFxuICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwLTEgdGV4dC1ncmF5LTcwMCBob3ZlcjpiZy1ncmF5LTEwMFwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiQXR0YWNoIGZpbGVzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFBhcGVyY2xpcCBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgIDxCdXR0b24gXG4gICAgICAgICAgICB2YXJpYW50PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICBvbkNsaWNrPXtvbkNsb3NlfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmctcmVkLTYwMCBob3ZlcjpiZy1yZWQtNzAwIHRleHQtd2hpdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbmR9XG4gICAgICAgICAgICBkaXNhYmxlZD17c2VuZGluZ31cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLWJsdWUtNjAwIGhvdmVyOmJnLWJsdWUtNzAwIHRleHQtd2hpdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtzZW5kaW5nID8gKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxMb2FkZXIyIGNsYXNzTmFtZT1cIm1yLTIgaC00IHctNCBhbmltYXRlLXNwaW5cIiAvPlxuICAgICAgICAgICAgICAgIFNlbmRpbmdcbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxTZW5kSG9yaXpvbnRhbCBjbGFzc05hbWU9XCJtci0yIGgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgIFNlbmRcbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICB7LyogU3R5bGVzIGZvciBlbWFpbCBjb250ZW50ICovfVxuICAgICAgPHN0eWxlIGpzeCBnbG9iYWw+e2BcbiAgICAgICAgW2NvbnRlbnRlZGl0YWJsZV0ge1xuICAgICAgICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtd3JpdGUtcGxhaW50ZXh0LW9ubHk7XG4gICAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgICAgICAgICAtd2Via2l0LWxpbmUtYnJlYWs6IGFmdGVyLXdoaXRlLXNwYWNlO1xuICAgICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7XG4gICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMS41O1xuICAgICAgICAgIGNvbG9yOiAjMzMzO1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIFtjb250ZW50ZWRpdGFibGVdOmZvY3VzIHtcbiAgICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBbY29udGVudGVkaXRhYmxlXSBibG9ja3F1b3RlIHtcbiAgICAgICAgICBtYXJnaW46IDEwcHggMDtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjZGRkO1xuICAgICAgICAgIGNvbG9yOiAjNjY2O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBbY29udGVudGVkaXRhYmxlXSBpbWcge1xuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIFtjb250ZW50ZWRpdGFibGVdIHRhYmxlIHtcbiAgICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBbY29udGVudGVkaXRhYmxlXSB0aCxcbiAgICAgICAgW2NvbnRlbnRlZGl0YWJsZV0gdGQge1xuICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBbY29udGVudGVkaXRhYmxlXSB0aCB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8qIEZvcndhcmRlZCBtZXNzYWdlIHN0eWxlcyAqL1xuICAgICAgICAuZW1haWwtb3JpZ2luYWwtY29udGVudCB7XG4gICAgICAgICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICAgICAgICBjb2xvcjogIzUwNTA1MDtcbiAgICAgICAgfVxuICAgICAgYH08L3N0eWxlPlxuICAgIDwvZGl2PlxuICApO1xufSAiXSwibmFtZXMiOlsidXNlU3RhdGUiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJYIiwiUGFwZXJjbGlwIiwiU2VuZEhvcml6b250YWwiLCJMb2FkZXIyIiwiQ2hldnJvbkRvd24iLCJCdXR0b24iLCJJbnB1dCIsIkRyb3Bkb3duTWVudSIsIkRyb3Bkb3duTWVudUNvbnRlbnQiLCJEcm9wZG93bk1lbnVJdGVtIiwiRHJvcGRvd25NZW51TGFiZWwiLCJEcm9wZG93bk1lbnVTZXBhcmF0b3IiLCJEcm9wZG93bk1lbnVUcmlnZ2VyIiwiUmljaEVtYWlsRWRpdG9yIiwiZm9ybWF0UmVwbHlFbWFpbCIsImZvcm1hdEZvcndhcmRlZEVtYWlsIiwiQ29tcG9zZUVtYWlsIiwicHJvcHMiLCJpbml0aWFsRW1haWwiLCJ0eXBlIiwib25DbG9zZSIsIm9uU2VuZCIsImFjY291bnRzIiwic2VsZWN0ZWRBY2NvdW50Iiwic2V0U2VsZWN0ZWRBY2NvdW50IiwidG8iLCJzZXRUbyIsImNjIiwic2V0Q2MiLCJiY2MiLCJzZXRCY2MiLCJzdWJqZWN0Iiwic2V0U3ViamVjdCIsImVtYWlsQ29udGVudCIsInNldEVtYWlsQ29udGVudCIsInNob3dDYyIsInNldFNob3dDYyIsInNob3dCY2MiLCJzZXRTaG93QmNjIiwic2VuZGluZyIsInNldFNlbmRpbmciLCJhdHRhY2htZW50cyIsInNldEF0dGFjaG1lbnRzIiwiZWRpdG9yUmVmIiwiZ2V0Rm9ybWF0dGVkSW5mb0ZvckVtYWlsIiwiZW1haWwiLCJkYXRlU3RyIiwiZGF0ZSIsIkRhdGUiLCJ0b0xvY2FsZVN0cmluZyIsImZyb21TdHIiLCJBcnJheSIsImlzQXJyYXkiLCJmcm9tIiwibWFwIiwiYWRkciIsIm5hbWUiLCJhZGRyZXNzIiwiam9pbiIsInRvU3RyIiwiY2NTdHIiLCJjb25zb2xlIiwibG9nIiwiaWQiLCJoYXNDb250ZW50IiwiY29udGVudCIsImNvbnRlbnRUeXBlIiwiZW1haWxBbnkiLCJhY2NvdW50SWQiLCJsZW5ndGgiLCJhY2NvdW50IiwiZmluZCIsImEiLCJmb3JtYXR0ZWQiLCJodG1sIiwidGV4dCIsIndhcm4iLCJmYWxsYmFja0NvbnRlbnQiLCJpc0h0bWwiLCJzdGFydHNXaXRoSHRtbCIsInRyaW0iLCJzdGFydHNXaXRoIiwiZm9ybWF0dGVkQXR0YWNobWVudHMiLCJhdHQiLCJmaWxlbmFtZSIsIm9yaWdTdWJqZWN0IiwiZXJyb3IiLCJjdXJyZW50Iiwic2V0VGltZW91dCIsImZvY3VzIiwic2Nyb2xsVG9wIiwicGFyZW50IiwicGFyZW50RWxlbWVudCIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiaGFuZGxlQXR0YWNobWVudEFkZCIsImZpbGVzIiwibmV3QXR0YWNobWVudHMiLCJmaWxlIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwicHJldiIsImhhbmRsZUF0dGFjaG1lbnRSZW1vdmUiLCJpbmRleCIsImZpbHRlciIsIl8iLCJpIiwiaGFuZGxlU2VuZCIsImFsZXJ0IiwidW5kZWZpbmVkIiwiYm9keSIsImZyb21BY2NvdW50IiwiZ2V0Q29tcG9zZVRpdGxlIiwiZGl2IiwiaDIiLCJ2YXJpYW50Iiwic2l6ZSIsIm9uQ2xpY2siLCJjbGFzc05hbWUiLCJzcGFuIiwiYXNDaGlsZCIsImRpc3BsYXlfbmFtZSIsImFsaWduIiwiZGlzYWJsZWQiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsInBsYWNlaG9sZGVyIiwiYnV0dG9uIiwiaW5pdGlhbENvbnRlbnQiLCJtaW5IZWlnaHQiLCJpbnB1dCIsIm11bHRpcGxlIiwibGFiZWwiLCJodG1sRm9yIiwidGl0bGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/email/ComposeEmail.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/email/EmailDetailView.tsx":
|
|
/*!**********************************************!*\
|
|
!*** ./components/email/EmailDetailView.tsx ***!
|
|
\**********************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ EmailDetailView)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var styled_jsx_style__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! styled-jsx/style */ \"(ssr)/./node_modules/styled-jsx/style.js\");\n/* harmony import */ var styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(styled_jsx_style__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _barrel_optimize_names_ChevronLeft_Forward_Reply_ReplyAll_Star_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronLeft,Forward,Reply,ReplyAll,Star!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/chevron-left.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronLeft_Forward_Reply_ReplyAll_Star_lucide_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronLeft,Forward,Reply,ReplyAll,Star!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/reply.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronLeft_Forward_Reply_ReplyAll_Star_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronLeft,Forward,Reply,ReplyAll,Star!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/reply-all.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronLeft_Forward_Reply_ReplyAll_Star_lucide_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronLeft,Forward,Reply,ReplyAll,Star!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/forward.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronLeft_Forward_Reply_ReplyAll_Star_lucide_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronLeft,Forward,Reply,ReplyAll,Star!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/star.js\");\n/* harmony import */ var _components_ui_scroll_area__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/scroll-area */ \"(ssr)/./components/ui/scroll-area.tsx\");\n/* harmony import */ var _components_ui_avatar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/ui/avatar */ \"(ssr)/./components/ui/avatar.tsx\");\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/ui/button */ \"(ssr)/./components/ui/button.tsx\");\n\n\n\n\n\n\n\nfunction EmailDetailView({ email, onBack, onReply, onReplyAll, onForward, onToggleStar }) {\n // Format date for display\n const formatDate = (dateString)=>{\n // Convert to Date object if string\n const date = typeof dateString === 'string' ? new Date(dateString) : dateString;\n const now = new Date();\n if (date.toDateString() === now.toDateString()) {\n return date.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit'\n });\n } else {\n return date.toLocaleDateString([], {\n month: 'short',\n day: 'numeric'\n });\n }\n };\n // Render email content based on the email body\n const renderEmailContent = ()=>{\n try {\n console.log('EmailDetailView renderEmailContent', {\n hasContent: !!email.content,\n contentType: typeof email.content,\n hasHtml: !!email.html,\n hasText: !!email.text\n });\n // Determine what content to use and how to handle it\n let contentToUse = '';\n if (email.content) {\n // If content is a string, use it directly\n if (typeof email.content === 'string') {\n contentToUse = email.content;\n } else if (typeof email.content === 'object') {\n contentToUse = email.content.html || email.content.text || '';\n }\n } else if (email.html) {\n contentToUse = email.html;\n } else if (email.text) {\n // Convert plain text to HTML with line breaks\n contentToUse = email.text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\\n/g, '<br>');\n }\n // Return content or fallback message\n return contentToUse ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n dangerouslySetInnerHTML: {\n __html: contentToUse\n }\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 83,\n columnNumber: 9\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-500\",\n children: \"No content available\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 84,\n columnNumber: 9\n }, this);\n } catch (e) {\n console.error('Error rendering email:', e);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-500\",\n children: \"Failed to render email content\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 87,\n columnNumber: 14\n }, this);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"flex flex-col h-full overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"flex-none px-4 py-3 border-b border-gray-100\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"flex items-center gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"flex items-center gap-2 min-w-0 flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_5__.Button, {\n variant: \"ghost\",\n size: \"icon\",\n onClick: onBack,\n className: \"md:hidden flex-shrink-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronLeft_Forward_Reply_ReplyAll_Star_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 103,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 97,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"min-w-0 max-w-[500px]\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"text-lg font-semibold text-gray-900 truncate\",\n children: email.subject\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 106,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 105,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 96,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"flex items-center gap-1 flex-shrink-0 ml-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"flex items-center border-l border-gray-200 pl-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_5__.Button, {\n variant: \"ghost\",\n size: \"icon\",\n className: \"text-gray-400 hover:text-gray-900 h-9 w-9\",\n onClick: onReply,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronLeft_Forward_Reply_ReplyAll_Star_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 119,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 113,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_5__.Button, {\n variant: \"ghost\",\n size: \"icon\",\n className: \"text-gray-400 hover:text-gray-900 h-9 w-9\",\n onClick: onReplyAll,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronLeft_Forward_Reply_ReplyAll_Star_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 127,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 121,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_5__.Button, {\n variant: \"ghost\",\n size: \"icon\",\n className: \"text-gray-400 hover:text-gray-900 h-9 w-9\",\n onClick: onForward,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronLeft_Forward_Reply_ReplyAll_Star_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 135,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 129,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_5__.Button, {\n variant: \"ghost\",\n size: \"icon\",\n className: \"text-gray-400 hover:text-gray-900 h-9 w-9\",\n onClick: onToggleStar,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronLeft_Forward_Reply_ReplyAll_Star_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: `h-4 w-4 ${email.starred ? 'fill-yellow-400 text-yellow-400' : ''}`\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 143,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 137,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 112,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 111,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 95,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 94,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_scroll_area__WEBPACK_IMPORTED_MODULE_3__.ScrollArea, {\n className: \"flex-1 overflow-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"p-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"flex items-center gap-4 mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_avatar__WEBPACK_IMPORTED_MODULE_4__.Avatar, {\n className: \"h-10 w-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_avatar__WEBPACK_IMPORTED_MODULE_4__.AvatarFallback, {\n children: (email.from?.[0]?.name || '').charAt(0) || (email.from?.[0]?.address || '').charAt(0) || '?'\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 156,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 155,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"font-medium text-gray-900\",\n children: [\n email.from?.[0]?.name || '',\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"text-gray-500\",\n children: [\n \"<\",\n email.from?.[0]?.address || '',\n \">\"\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 162,\n columnNumber: 47\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 161,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"text-sm text-gray-500\",\n children: [\n \"to \",\n email.to?.[0]?.address || ''\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 164,\n columnNumber: 15\n }, this),\n email.cc && email.cc.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"text-sm text-gray-500\",\n children: [\n \"cc \",\n email.cc.map((c)=>c.address).join(', ')\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 168,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 160,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"text-sm text-gray-500 whitespace-nowrap\",\n children: formatDate(email.date)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 173,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 154,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"prose prose-sm max-w-none email-content-wrapper\",\n children: renderEmailContent()\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 179,\n columnNumber: 11\n }, this),\n email.hasAttachments && email.attachments && email.attachments.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"mt-6 border-t border-gray-100 pt-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"text-sm font-medium text-gray-900 mb-2\",\n children: \"Attachments\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 186,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"grid grid-cols-1 sm:grid-cols-2 gap-2\",\n children: email.attachments.map((attachment, idx)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"flex items-center gap-2 p-2 border border-gray-200 rounded-md\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"text-sm font-medium text-gray-700 truncate\",\n children: attachment.filename\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 194,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"jsx-a4b854e4f3e043c7\" + \" \" + \"text-xs text-gray-500\",\n children: [\n (attachment.size / 1024).toFixed(1),\n \" KB\"\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 195,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 193,\n columnNumber: 21\n }, this)\n }, idx, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 189,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 187,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 185,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 152,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 151,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default()), {\n id: \"a4b854e4f3e043c7\",\n children: \".email-content-wrapper{width:100%;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}.email-content-wrapper img{max-width:100%;height:auto}.email-content-wrapper table{max-width:100%;overflow-x:auto;display:block}@media(max-width:640px){.email-content-wrapper{font-size:14px}}\"\n }, void 0, false, void 0, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDetailView.tsx\",\n lineNumber: 92,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL2VtYWlsL0VtYWlsRGV0YWlsVmlldy50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBMEI7QUFHSjtBQUNtQztBQUNPO0FBQ2hCO0FBZ0JqQyxTQUFTVSxnQkFBZ0IsRUFDdENDLEtBQUssRUFDTEMsTUFBTSxFQUNOQyxPQUFPLEVBQ1BDLFVBQVUsRUFDVkMsU0FBUyxFQUNUQyxZQUFZLEVBQ1M7SUFFckIsMEJBQTBCO0lBQzFCLE1BQU1DLGFBQWEsQ0FBQ0M7UUFDbEIsbUNBQW1DO1FBQ25DLE1BQU1DLE9BQU8sT0FBT0QsZUFBZSxXQUFXLElBQUlFLEtBQUtGLGNBQWNBO1FBQ3JFLE1BQU1HLE1BQU0sSUFBSUQ7UUFFaEIsSUFBSUQsS0FBS0csWUFBWSxPQUFPRCxJQUFJQyxZQUFZLElBQUk7WUFDOUMsT0FBT0gsS0FBS0ksa0JBQWtCLENBQUMsRUFBRSxFQUFFO2dCQUFFQyxNQUFNO2dCQUFXQyxRQUFRO1lBQVU7UUFDMUUsT0FBTztZQUNMLE9BQU9OLEtBQUtPLGtCQUFrQixDQUFDLEVBQUUsRUFBRTtnQkFBRUMsT0FBTztnQkFBU0MsS0FBSztZQUFVO1FBQ3RFO0lBQ0Y7SUFFQSwrQ0FBK0M7SUFDL0MsTUFBTUMscUJBQXFCO1FBQ3pCLElBQUk7WUFDRkMsUUFBUUMsR0FBRyxDQUFDLHNDQUFzQztnQkFDaERDLFlBQVksQ0FBQyxDQUFDckIsTUFBTXNCLE9BQU87Z0JBQzNCQyxhQUFhLE9BQU92QixNQUFNc0IsT0FBTztnQkFDakNFLFNBQVMsQ0FBQyxDQUFDeEIsTUFBTXlCLElBQUk7Z0JBQ3JCQyxTQUFTLENBQUMsQ0FBQzFCLE1BQU0yQixJQUFJO1lBQ3ZCO1lBRUEscURBQXFEO1lBQ3JELElBQUlDLGVBQWU7WUFFbkIsSUFBSTVCLE1BQU1zQixPQUFPLEVBQUU7Z0JBQ2pCLDBDQUEwQztnQkFDMUMsSUFBSSxPQUFPdEIsTUFBTXNCLE9BQU8sS0FBSyxVQUFVO29CQUNyQ00sZUFBZTVCLE1BQU1z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bi9OZWFoLW1haWwvY29tcG9uZW50cy9lbWFpbC9FbWFpbERldGFpbFZpZXcudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBcbiAgQ2hldnJvbkxlZnQsIFJlcGx5LCBSZXBseUFsbCwgRm9yd2FyZCwgU3RhciwgTW9yZUhvcml6b250YWxcbn0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnO1xuaW1wb3J0IHsgQXZhdGFyLCBBdmF0YXJGYWxsYmFjayB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9hdmF0YXInO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbic7XG5pbXBvcnQgeyBFbWFpbCB9IGZyb20gJ0AvaG9va3MvdXNlLWNvdXJyaWVyJztcblxuaW50ZXJmYWNlIEVtYWlsRGV0YWlsVmlld1Byb3BzIHtcbiAgZW1haWw6IEVtYWlsICYgeyBcbiAgICBodG1sPzogc3RyaW5nOyBcbiAgICB0ZXh0Pzogc3RyaW5nO1xuICAgIHN0YXJyZWQ/OiBib29sZWFuOyAvLyBBZGQgc3RhcnJlZCBwcm9wZXJ0eSB0byBpbnRlcmZhY2VcbiAgfTtcbiAgb25CYWNrOiAoKSA9PiB2b2lkO1xuICBvblJlcGx5OiAoKSA9PiB2b2lkO1xuICBvblJlcGx5QWxsOiAoKSA9PiB2b2lkO1xuICBvbkZvcndhcmQ6ICgpID0+IHZvaWQ7XG4gIG9uVG9nZ2xlU3RhcjogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRW1haWxEZXRhaWxWaWV3KHtcbiAgZW1haWwsXG4gIG9uQmFjayxcbiAgb25SZXBseSxcbiAgb25SZXBseUFsbCxcbiAgb25Gb3J3YXJkLFxuICBvblRvZ2dsZVN0YXJcbn06IEVtYWlsRGV0YWlsVmlld1Byb3BzKSB7XG4gIFxuICAvLyBGb3JtYXQgZGF0ZSBmb3IgZGlzcGxheVxuICBjb25zdCBmb3JtYXREYXRlID0gKGRhdGVTdHJpbmc6IHN0cmluZyB8IERhdGUpID0+IHtcbiAgICAvLyBDb252ZXJ0IHRvIERhdGUgb2JqZWN0IGlmIHN0cmluZ1xuICAgIGNvbnN0IGRhdGUgPSB0eXBlb2YgZGF0ZVN0cmluZyA9PT0gJ3N0cmluZycgPyBuZXcgRGF0ZShkYXRlU3RyaW5nKSA6IGRhdGVTdHJpbmc7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBcbiAgICBpZiAoZGF0ZS50b0RhdGVTdHJpbmcoKSA9PT0gbm93LnRvRGF0ZVN0cmluZygpKSB7XG4gICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoW10sIHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKFtdLCB7IG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJyB9KTtcbiAgICB9XG4gIH07XG4gIFxuICAvLyBSZW5kZXIgZW1haWwgY29udGVudCBiYXNlZCBvbiB0aGUgZW1haWwgYm9keVxuICBjb25zdCByZW5kZXJFbWFpbENvbnRlbnQgPSAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUubG9nKCdFbWFpbERldGFpbFZpZXcgcmVuZGVyRW1haWxDb250ZW50Jywge1xuICAgICAgICBoYXNDb250ZW50OiAhIWVtYWlsLmNvbnRlbnQsXG4gICAgICAgIGNvbnRlbnRUeXBlOiB0eXBlb2YgZW1haWwuY29udGVudCxcbiAgICAgICAgaGFzSHRtbDogISFlbWFpbC5odG1sLFxuICAgICAgICBoYXNUZXh0OiAhIWVtYWlsLnRleHRcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBEZXRlcm1pbmUgd2hhdCBjb250ZW50IHRvIHVzZSBhbmQgaG93IHRvIGhhbmRsZSBpdFxuICAgICAgbGV0IGNvbnRlbnRUb1VzZSA9ICcnO1xuICAgICAgXG4gICAgICBpZiAoZW1haWwuY29udGVudCkge1xuICAgICAgICAvLyBJZiBjb250ZW50IGlzIGEgc3RyaW5nLCB1c2UgaXQgZGlyZWN0bHlcbiAgICAgICAgaWYgKHR5cGVvZiBlbWFpbC5jb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGNvbnRlbnRUb1VzZSA9IGVtYWlsLmNvbnRlbnQ7XG4gICAgICAgIH0gXG4gICAgICAgIC8vIElmIGNvbnRlbnQgaXMgYW4gb2JqZWN0IHdpdGggaHRtbC90ZXh0IHByb3BlcnRpZXNcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGVtYWlsLmNvbnRlbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29udGVudFRvVXNlID0gZW1haWwuY29udGVudC5odG1sIHx8IGVtYWlsLmNvbnRlbnQudGV4dCB8fCAnJztcbiAgICAgICAgfVxuICAgICAgfSBcbiAgICAgIC8vIEZhbGwgYmFjayB0byBodG1sIG9yIHRleHQgcHJvcGVydGllcyBpZiBjb250ZW50IGlzIG5vdCBhdmFpbGFibGVcbiAgICAgIGVsc2UgaWYgKGVtYWlsLmh0bWwpIHtcbiAgICAgICAgY29udGVudFRvVXNlID0gZW1haWwuaHRtbDtcbiAgICAgIH0gXG4gICAgICBlbHNlIGlmIChlbWFpbC50ZXh0KSB7XG4gICAgICAgIC8vIENvbnZlcnQgcGxhaW4gdGV4dCB0byBIVE1MIHdpdGggbGluZSBicmVha3NcbiAgICAgICAgY29udGVudFRvVXNlID0gZW1haWwudGV4dFxuICAgICAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAgICAgICAucmVwbGFjZSgvXFxuL2csICc8YnI+Jyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFJldHVybiBjb250ZW50IG9yIGZhbGxiYWNrIG1lc3NhZ2VcbiAgICAgIHJldHVybiBjb250ZW50VG9Vc2UgPyBcbiAgICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IGNvbnRlbnRUb1VzZSB9fSAvPiA6IFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDBcIj5ObyBjb250ZW50IGF2YWlsYWJsZTwvZGl2PjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZW5kZXJpbmcgZW1haWw6JywgZSk7XG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwXCI+RmFpbGVkIHRvIHJlbmRlciBlbWFpbCBjb250ZW50PC9kaXY+O1xuICAgIH1cbiAgfTtcbiAgXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtZnVsbCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgIHsvKiBFbWFpbCBhY3Rpb25zIGhlYWRlciAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC1ub25lIHB4LTQgcHktMyBib3JkZXItYiBib3JkZXItZ3JheS0xMDBcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgbWluLXctMCBmbGV4LTFcIj5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgc2l6ZT1cImljb25cIlxuICAgICAgICAgICAgICBvbkNsaWNrPXtvbkJhY2t9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1kOmhpZGRlbiBmbGV4LXNocmluay0wXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPENoZXZyb25MZWZ0IGNsYXNzTmFtZT1cImgtNSB3LTVcIiAvPlxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgbWF4LXctWzUwMHB4XVwiPlxuICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICB7ZW1haWwuc3ViamVjdH1cbiAgICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgZmxleC1zaHJpbmstMCBtbC1hdXRvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCBwbC00XCI+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJpY29uXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNDAwIGhvdmVyOnRleHQtZ3JheS05MDAgaC05IHctOVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17b25SZXBseX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxSZXBseSBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJpY29uXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNDAwIGhvdmVyOnRleHQtZ3JheS05MDAgaC05IHctOVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17b25SZXBseUFsbH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxSZXBseUFsbCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJpY29uXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNDAwIGhvdmVyOnRleHQtZ3JheS05MDAgaC05IHctOVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17b25Gb3J3YXJkfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcndhcmQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICBzaXplPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LWdyYXktOTAwIGgtOSB3LTlcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uVG9nZ2xlU3Rhcn1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxTdGFyIGNsYXNzTmFtZT17YGgtNCB3LTQgJHtlbWFpbC5zdGFycmVkID8gJ2ZpbGwteWVsbG93LTQwMCB0ZXh0LXllbGxvdy00MDAnIDogJyd9YH0gLz5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgey8qIFNjcm9sbGFibGUgY29udGVudCBhcmVhIC0gZW5oYW5jZWQgZm9yIGJldHRlciBzY3JvbGxpbmcgKi99XG4gICAgICA8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3ctYXV0b1wiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtNlwiPlxuICAgICAgICAgIHsvKiBFbWFpbCBoZWFkZXIgaW5mbyAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00IG1iLTZcIj5cbiAgICAgICAgICAgIDxBdmF0YXIgY2xhc3NOYW1lPVwiaC0xMCB3LTEwXCI+XG4gICAgICAgICAgICAgIDxBdmF0YXJGYWxsYmFjaz5cbiAgICAgICAgICAgICAgICB7KGVtYWlsLmZyb20/LlswXT8ubmFtZSB8fCAnJykuY2hhckF0KDApIHx8IChlbWFpbC5mcm9tPy5bMF0/LmFkZHJlc3MgfHwgJycpLmNoYXJBdCgwKSB8fCAnPyd9XG4gICAgICAgICAgICAgIDwvQXZhdGFyRmFsbGJhY2s+XG4gICAgICAgICAgICA8L0F2YXRhcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDBcIj5cbiAgICAgICAgICAgICAgICB7ZW1haWwuZnJvbT8uWzBdPy5uYW1lIHx8ICcnfSA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwXCI+Jmx0O3tlbWFpbC5mcm9tPy5bMF0/LmFkZHJlc3MgfHwgJyd9Jmd0Ozwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS01MDBcIj5cbiAgICAgICAgICAgICAgICB0byB7ZW1haWwudG8/LlswXT8uYWRkcmVzcyB8fCAnJ31cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICB7ZW1haWwuY2MgJiYgZW1haWwuY2MubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNTAwXCI+XG4gICAgICAgICAgICAgICAgICBjYyB7ZW1haWwuY2MubWFwKGMgPT4gYy5hZGRyZXNzKS5qb2luKCcsICcpfVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS01MDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAge2Zvcm1hdERhdGUoZW1haWwuZGF0ZSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBcbiAgICAgICAgICB7LyogRW1haWwgY29udGVudCB3aXRoIGltcHJvdmVkIHNjcm9sbGluZyAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInByb3NlIHByb3NlLXNtIG1heC13LW5vbmUgZW1haWwtY29udGVudC13cmFwcGVyXCI+XG4gICAgICAgICAgICB7cmVuZGVyRW1haWxDb250ZW50KCl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgXG4gICAgICAgICAgey8qIEF0dGFjaG1lbnRzIChpZiBhbnkpICovfVxuICAgICAgICAgIHtlbWFpbC5oYXNBdHRhY2htZW50cyAmJiBlbWFpbC5hdHRhY2htZW50cyAmJiBlbWFpbC5hdHRhY2htZW50cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNiBib3JkZXItdCBib3JkZXItZ3JheS0xMDAgcHQtNFwiPlxuICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIG1iLTJcIj5BdHRhY2htZW50czwvaDM+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMSBzbTpncmlkLWNvbHMtMiBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIHtlbWFpbC5hdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGlkeCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICAgICAgICAga2V5PXtpZHh9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHAtMiBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbWRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBtaW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIHRydW5jYXRlXCI+e2F0dGFjaG1lbnQuZmlsZW5hbWV9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1ncmF5LTUwMFwiPnsoYXR0YWNobWVudC5zaXplIC8gMTAyNCkudG9GaXhlZCgxKX0gS0I8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1Njcm9sbEFyZWE+XG5cbiAgICAgIHsvKiBBZGQgQ1NTIGZvciBiZXR0ZXIgZW1haWwgY29udGVudCBkaXNwbGF5ICovfVxuICAgICAgPHN0eWxlIGpzeCBnbG9iYWw+e2BcbiAgICAgICAgLmVtYWlsLWNvbnRlbnQtd3JhcHBlciB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLmVtYWlsLWNvbnRlbnQtd3JhcHBlciBpbWcge1xuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5lbWFpbC1jb250ZW50LXdyYXBwZXIgdGFibGUge1xuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNjQwcHgpIHtcbiAgICAgICAgICAuZW1haWwtY29udGVudC13cmFwcGVyIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGB9PC9zdHlsZT5cbiAgICA8L2Rpdj5cbiAgKTtcbn0gIl0sIm5hbWVzIjpbIlJlYWN0IiwiQ2hldnJvbkxlZnQiLCJSZXBseSIsIlJlcGx5QWxsIiwiRm9yd2FyZCIsIlN0YXIiLCJTY3JvbGxBcmVhIiwiQXZhdGFyIiwiQXZhdGFyRmFsbGJhY2siLCJCdXR0b24iLCJFbWFpbERldGFpbFZpZXciLCJlbWFpbCIsIm9uQmFjayIsIm9uUmVwbHkiLCJvblJlcGx5QWxsIiwib25Gb3J3YXJkIiwib25Ub2dnbGVTdGFyIiwiZm9ybWF0RGF0ZSIsImRhdGVTdHJpbmciLCJkYXRlIiwiRGF0ZSIsIm5vdyIsInRvRGF0ZVN0cmluZyIsInRvTG9jYWxlVGltZVN0cmluZyIsImhvdXIiLCJtaW51dGUiLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJtb250aCIsImRheSIsInJlbmRlckVtYWlsQ29udGVudCIsImNvbnNvbGUiLCJsb2ciLCJoYXNDb250ZW50IiwiY29udGVudCIsImNvbnRlbnRUeXBlIiwiaGFzSHRtbCIsImh0bWwiLCJoYXNUZXh0IiwidGV4dCIsImNvbnRlbnRUb1VzZSIsInJlcGxhY2UiLCJkaXYiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsImNsYXNzTmFtZSIsImUiLCJlcnJvciIsInZhcmlhbnQiLCJzaXplIiwib25DbGljayIsImgyIiwic3ViamVjdCIsInN0YXJyZWQiLCJmcm9tIiwibmFtZSIsImNoYXJBdCIsImFkZHJlc3MiLCJwIiwic3BhbiIsInRvIiwiY2MiLCJsZW5ndGgiLCJtYXAiLCJjIiwiam9pbiIsImhhc0F0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJoMyIsImF0dGFjaG1lbnQiLCJpZHgiLCJmaWxlbmFtZSIsInRvRml4ZWQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/email/EmailDetailView.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/email/EmailDialogs.tsx":
|
|
/*!*******************************************!*\
|
|
!*** ./components/email/EmailDialogs.tsx ***!
|
|
\*******************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DeleteConfirmDialog: () => (/* binding */ DeleteConfirmDialog),\n/* harmony export */ LoginNeededAlert: () => (/* binding */ LoginNeededAlert)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _barrel_optimize_names_AlertCircle_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=AlertCircle!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/circle-alert.js\");\n/* harmony import */ var _components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/alert-dialog */ \"(ssr)/./components/ui/alert-dialog.tsx\");\n/* harmony import */ var _components_ui_alert__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/alert */ \"(ssr)/./components/ui/alert.tsx\");\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/ui/button */ \"(ssr)/./components/ui/button.tsx\");\n\n\n\n\n\n\nfunction DeleteConfirmDialog({ show, selectedCount, onConfirm, onCancel }) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_2__.AlertDialog, {\n open: show,\n onOpenChange: (open)=>!open && onCancel(),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_2__.AlertDialogContent, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_2__.AlertDialogHeader, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_2__.AlertDialogTitle, {\n children: [\n \"Delete \",\n selectedCount,\n \" email\",\n selectedCount !== 1 ? 's' : '',\n \"?\"\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDialogs.tsx\",\n lineNumber: 33,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_2__.AlertDialogDescription, {\n children: [\n \"This will move the selected email\",\n selectedCount !== 1 ? 's' : '',\n \" to the trash folder. You can restore them later from the trash folder if needed.\"\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDialogs.tsx\",\n lineNumber: 34,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDialogs.tsx\",\n lineNumber: 32,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_2__.AlertDialogFooter, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_2__.AlertDialogCancel, {\n onClick: onCancel,\n children: \"Cancel\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDialogs.tsx\",\n lineNumber: 40,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert_dialog__WEBPACK_IMPORTED_MODULE_2__.AlertDialogAction, {\n onClick: onConfirm,\n children: \"Delete\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDialogs.tsx\",\n lineNumber: 41,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDialogs.tsx\",\n lineNumber: 39,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDialogs.tsx\",\n lineNumber: 31,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDialogs.tsx\",\n lineNumber: 30,\n columnNumber: 5\n }, this);\n}\nfunction LoginNeededAlert({ show, onLogin, onClose }) {\n if (!show) return null;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert__WEBPACK_IMPORTED_MODULE_3__.Alert, {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertCircle_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDialogs.tsx\",\n lineNumber: 63,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert__WEBPACK_IMPORTED_MODULE_3__.AlertTitle, {\n children: \"Please log in to your email account\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDialogs.tsx\",\n lineNumber: 64,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_alert__WEBPACK_IMPORTED_MODULE_3__.AlertDescription, {\n children: \"You need to connect your email account before you can access your emails.\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDialogs.tsx\",\n lineNumber: 65,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_4__.Button, {\n size: \"sm\",\n onClick: onLogin,\n children: \"Go to Login\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDialogs.tsx\",\n lineNumber: 69,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_4__.Button, {\n size: \"sm\",\n variant: \"outline\",\n onClick: onClose,\n children: \"Dismiss\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDialogs.tsx\",\n lineNumber: 70,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDialogs.tsx\",\n lineNumber: 68,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailDialogs.tsx\",\n lineNumber: 62,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL2VtYWlsL0VtYWlsRGlhbG9ncy50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBMEI7QUFDaUI7QUFVTDtBQUNzQztBQUM1QjtBQVN6QyxTQUFTYyxvQkFBb0IsRUFDbENDLElBQUksRUFDSkMsYUFBYSxFQUNiQyxTQUFTLEVBQ1RDLFFBQVEsRUFDaUI7SUFDekIscUJBQ0UsOERBQUNoQixvRUFBV0E7UUFBQ2lCLE1BQU1KO1FBQU1LLGNBQWMsQ0FBQ0QsT0FBUyxDQUFDQSxRQUFRRDtrQkFDeEQsNEVBQUNiLDJFQUFrQkE7OzhCQUNqQiw4REFBQ0csMEVBQWlCQTs7c0NBQ2hCLDhEQUFDQyx5RUFBZ0JBOztnQ0FBQztnQ0FBUU87Z0NBQWM7Z0NBQU9BLGtCQUFrQixJQUFJLE1BQU07Z0NBQUc7Ozs7Ozs7c0NBQzlFLDhEQUFDViwrRUFBc0JBOztnQ0FBQztnQ0FDWVUsa0JBQWtCLElBQUksTUFBTTtnQ0FBRzs7Ozs7Ozs7Ozs7Ozs4QkFJckUsOERBQUNULDBFQUFpQkE7O3NDQUNoQiw4REFBQ0gsMEVBQWlCQTs0QkFBQ2lCLFNBQVNIO3NDQUFVOzs7Ozs7c0NBQ3RDLDhEQUFDZiwwRUFBaUJBOzRCQUFDa0IsU0FBU0o7c0NBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBS2pEO0FBUU8sU0FBU0ssaUJBQWlCLEVBQy9CUCxJQUFJLEVBQ0pRLE9BQU8sRUFDUEMsT0FBTyxFQUNlO0lBQ3RCLElBQUksQ0FBQ1QsTUFBTSxPQUFPO0lBRWxCLHFCQUNFLDhEQUFDTCx1REFBS0E7UUFBQ2UsV0FBVTs7MEJBQ2YsOERBQUN4Qix1RkFBV0E7Z0JBQUN3QixXQUFVOzs7Ozs7MEJBQ3ZCLDhEQUFDYiw0REFBVUE7MEJBQUM7Ozs7OzswQkFDWiw4REFBQ0Qsa0VBQWdCQTswQkFBQzs7Ozs7OzBCQUdsQiw4REFBQ2U7Z0JBQUlELFdBQVU7O2tDQUNiLDhEQUFDWix5REFBTUE7d0JBQUNjLE1BQUs7d0JBQUtOLFNBQVNFO2tDQUFTOzs7Ozs7a0NBQ3BDLDhEQUFDVix5REFBTUE7d0JBQUNjLE1BQUs7d0JBQUtDLFNBQVE7d0JBQVVQLFNBQVNHO2tDQUFTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJOUQiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvY29tcG9uZW50cy9lbWFpbC9FbWFpbERpYWxvZ3MudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBBbGVydENpcmNsZSB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQge1xuICBBbGVydERpYWxvZyxcbiAgQWxlcnREaWFsb2dBY3Rpb24sXG4gIEFsZXJ0RGlhbG9nQ2FuY2VsLFxuICBBbGVydERpYWxvZ0NvbnRlbnQsXG4gIEFsZXJ0RGlhbG9nRGVzY3JpcHRpb24sXG4gIEFsZXJ0RGlhbG9nRm9vdGVyLFxuICBBbGVydERpYWxvZ0hlYWRlcixcbiAgQWxlcnREaWFsb2dUaXRsZSxcbn0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9hbGVydC1kaWFsb2dcIjtcbmltcG9ydCB7IEFsZXJ0LCBBbGVydERlc2NyaXB0aW9uLCBBbGVydFRpdGxlIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2FsZXJ0JztcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nO1xuXG5pbnRlcmZhY2UgRGVsZXRlQ29uZmlybURpYWxvZ1Byb3BzIHtcbiAgc2hvdzogYm9vbGVhbjtcbiAgc2VsZWN0ZWRDb3VudDogbnVtYmVyO1xuICBvbkNvbmZpcm06ICgpID0+IFByb21pc2U8dm9pZD47XG4gIG9uQ2FuY2VsOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRGVsZXRlQ29uZmlybURpYWxvZyh7XG4gIHNob3csXG4gIHNlbGVjdGVkQ291bnQsXG4gIG9uQ29uZmlybSxcbiAgb25DYW5jZWxcbn06IERlbGV0ZUNvbmZpcm1EaWFsb2dQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxBbGVydERpYWxvZyBvcGVuPXtzaG93fSBvbk9wZW5DaGFuZ2U9eyhvcGVuKSA9PiAhb3BlbiAmJiBvbkNhbmNlbCgpfT5cbiAgICAgIDxBbGVydERpYWxvZ0NvbnRlbnQ+XG4gICAgICAgIDxBbGVydERpYWxvZ0hlYWRlcj5cbiAgICAgICAgICA8QWxlcnREaWFsb2dUaXRsZT5EZWxldGUge3NlbGVjdGVkQ291bnR9IGVtYWlse3NlbGVjdGVkQ291bnQgIT09IDEgPyAncycgOiAnJ30/PC9BbGVydERpYWxvZ1RpdGxlPlxuICAgICAgICAgIDxBbGVydERpYWxvZ0Rlc2NyaXB0aW9uPlxuICAgICAgICAgICAgVGhpcyB3aWxsIG1vdmUgdGhlIHNlbGVjdGVkIGVtYWlse3NlbGVjdGVkQ291bnQgIT09IDEgPyAncycgOiAnJ30gdG8gdGhlIHRyYXNoIGZvbGRlci5cbiAgICAgICAgICAgIFlvdSBjYW4gcmVzdG9yZSB0aGVtIGxhdGVyIGZyb20gdGhlIHRyYXNoIGZvbGRlciBpZiBuZWVkZWQuXG4gICAgICAgICAgPC9BbGVydERpYWxvZ0Rlc2NyaXB0aW9uPlxuICAgICAgICA8L0FsZXJ0RGlhbG9nSGVhZGVyPlxuICAgICAgICA8QWxlcnREaWFsb2dGb290ZXI+XG4gICAgICAgICAgPEFsZXJ0RGlhbG9nQ2FuY2VsIG9uQ2xpY2s9e29uQ2FuY2VsfT5DYW5jZWw8L0FsZXJ0RGlhbG9nQ2FuY2VsPlxuICAgICAgICAgIDxBbGVydERpYWxvZ0FjdGlvbiBvbkNsaWNrPXtvbkNvbmZpcm19PkRlbGV0ZTwvQWxlcnREaWFsb2dBY3Rpb24+XG4gICAgICAgIDwvQWxlcnREaWFsb2dGb290ZXI+XG4gICAgICA8L0FsZXJ0RGlhbG9nQ29udGVudD5cbiAgICA8L0FsZXJ0RGlhbG9nPlxuICApO1xufVxuXG5pbnRlcmZhY2UgTG9naW5OZWVkZWRBbGVydFByb3BzIHtcbiAgc2hvdzogYm9vbGVhbjtcbiAgb25Mb2dpbjogKCkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIExvZ2luTmVlZGVkQWxlcnQoe1xuICBzaG93LFxuICBvbkxvZ2luLFxuICBvbkNsb3NlXG59OiBMb2dpbk5lZWRlZEFsZXJ0UHJvcHMpIHtcbiAgaWYgKCFzaG93KSByZXR1cm4gbnVsbDtcbiAgXG4gIHJldHVybiAoXG4gICAgPEFsZXJ0IGNsYXNzTmFtZT1cIm1iLTRcIj5cbiAgICAgIDxBbGVydENpcmNsZSBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgIDxBbGVydFRpdGxlPlBsZWFzZSBsb2cgaW4gdG8geW91ciBlbWFpbCBhY2NvdW50PC9BbGVydFRpdGxlPlxuICAgICAgPEFsZXJ0RGVzY3JpcHRpb24+XG4gICAgICAgIFlvdSBuZWVkIHRvIGNvbm5lY3QgeW91ciBlbWFpbCBhY2NvdW50IGJlZm9yZSB5b3UgY2FuIGFjY2VzcyB5b3VyIGVtYWlscy5cbiAgICAgIDwvQWxlcnREZXNjcmlwdGlvbj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmbGV4IGdhcC0yXCI+XG4gICAgICAgIDxCdXR0b24gc2l6ZT1cInNtXCIgb25DbGljaz17b25Mb2dpbn0+R28gdG8gTG9naW48L0J1dHRvbj5cbiAgICAgICAgPEJ1dHRvbiBzaXplPVwic21cIiB2YXJpYW50PVwib3V0bGluZVwiIG9uQ2xpY2s9e29uQ2xvc2V9PkRpc21pc3M8L0J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvQWxlcnQ+XG4gICk7XG59ICJdLCJuYW1lcyI6WyJSZWFjdCIsIkFsZXJ0Q2lyY2xlIiwiQWxlcnREaWFsb2ciLCJBbGVydERpYWxvZ0FjdGlvbiIsIkFsZXJ0RGlhbG9nQ2FuY2VsIiwiQWxlcnREaWFsb2dDb250ZW50IiwiQWxlcnREaWFsb2dEZXNjcmlwdGlvbiIsIkFsZXJ0RGlhbG9nRm9vdGVyIiwiQWxlcnREaWFsb2dIZWFkZXIiLCJBbGVydERpYWxvZ1RpdGxlIiwiQWxlcnQiLCJBbGVydERlc2NyaXB0aW9uIiwiQWxlcnRUaXRsZSIsIkJ1dHRvbiIsIkRlbGV0ZUNvbmZpcm1EaWFsb2ciLCJzaG93Iiwic2VsZWN0ZWRDb3VudCIsIm9uQ29uZmlybSIsIm9uQ2FuY2VsIiwib3BlbiIsIm9uT3BlbkNoYW5nZSIsIm9uQ2xpY2siLCJMb2dpbk5lZWRlZEFsZXJ0Iiwib25Mb2dpbiIsIm9uQ2xvc2UiLCJjbGFzc05hbWUiLCJkaXYiLCJzaXplIiwidmFyaWFudCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/email/EmailDialogs.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/email/EmailList.tsx":
|
|
/*!****************************************!*\
|
|
!*** ./components/email/EmailList.tsx ***!
|
|
\****************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ EmailList)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _barrel_optimize_names_Mail_Search_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=Mail,Search,X!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/mail.js\");\n/* harmony import */ var _barrel_optimize_names_Mail_Search_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=Mail,Search,X!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/search.js\");\n/* harmony import */ var _barrel_optimize_names_Mail_Search_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=Mail,Search,X!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/x.js\");\n/* harmony import */ var _EmailListItem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./EmailListItem */ \"(ssr)/./components/email/EmailListItem.tsx\");\n/* harmony import */ var _EmailListHeader__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./EmailListHeader */ \"(ssr)/./components/email/EmailListHeader.tsx\");\n/* harmony import */ var _BulkActionsToolbar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./BulkActionsToolbar */ \"(ssr)/./components/email/BulkActionsToolbar.tsx\");\n/* harmony import */ var _components_ui_input__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/ui/input */ \"(ssr)/./components/ui/input.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n\n\n\nfunction EmailList({ emails, selectedEmailIds, selectedEmail, currentFolder, isLoading, totalEmails, hasMoreEmails, onSelectEmail, onToggleSelect, onToggleSelectAll, onBulkAction, onToggleStarred, onLoadMore, onSearch }) {\n const [scrollPosition, setScrollPosition] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const [searchQuery, setSearchQuery] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n // Handle scroll to detect when user reaches the bottom\n const handleScroll = (event)=>{\n const target = event.target;\n const { scrollTop, scrollHeight, clientHeight } = target;\n setScrollPosition(scrollTop);\n // Calculate how close to the bottom we are (in pixels)\n const distanceToBottom = scrollHeight - scrollTop - clientHeight;\n // DEBUG: Log scroll positions\n console.log(`[DEBUG] Scroll metrics - Distance to bottom: ${distanceToBottom}px, scrollHeight: ${scrollHeight}, scrollTop: ${scrollTop}, clientHeight: ${clientHeight}`);\n // CRITICAL FIX: Much more aggressive threshold - load more when within 500px of bottom\n // Also add double-check with percentage to handle all screen sizes\n const scrollPercentage = (scrollTop + clientHeight) / scrollHeight;\n // DEBUG: Log scroll percentage and conditions\n console.log(`[DEBUG] Scroll percentage: ${Math.round(scrollPercentage * 100)}%, hasMoreEmails: ${hasMoreEmails}, isLoading: ${isLoading}`);\n // Trigger loading when within 500px OR at 80% of the scroll distance\n if ((distanceToBottom < 500 || scrollPercentage > 0.8) && hasMoreEmails && !isLoading) {\n console.log(`[DEBUG-TRIGGER] Loading more emails - distance: ${distanceToBottom}px, percentage: ${Math.round(scrollPercentage * 100)}%`);\n onLoadMore();\n } else if ((distanceToBottom < 500 || scrollPercentage > 0.8) && hasMoreEmails && isLoading) {\n console.log(`[DEBUG-BLOCKED] Not loading more emails because isLoading is true`);\n } else if ((distanceToBottom < 500 || scrollPercentage > 0.8) && !hasMoreEmails) {\n console.log(`[DEBUG-BLOCKED] Not loading more emails because hasMoreEmails is false`);\n }\n };\n // Handle search\n const handleSearch = (e)=>{\n e.preventDefault();\n onSearch?.(searchQuery);\n };\n const clearSearch = ()=>{\n setSearchQuery('');\n onSearch?.('');\n };\n // Render loading state\n if (isLoading && emails.length === 0) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center items-center h-full p-8 bg-white/95 backdrop-blur-sm\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"animate-spin rounded-full h-8 w-8 border-t-2 border-b-2 border-blue-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 93,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 92,\n columnNumber: 7\n }, this);\n }\n // Render empty state\n if (emails.length === 0) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col justify-center items-center h-64 p-8 text-center bg-white/95 backdrop-blur-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Mail_Search_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-8 w-8 text-gray-400 mb-2\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 102,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-gray-500 text-sm\",\n children: searchQuery ? 'No emails match your search' : currentFolder === 'INBOX' ? \"Your inbox is empty. You're all caught up!\" : 'No emails in this folder'\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 103,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 101,\n columnNumber: 7\n }, this);\n }\n // Are all emails selected\n const allSelected = selectedEmailIds.length === emails.length && emails.length > 0;\n // Are some (but not all) emails selected\n const someSelected = selectedEmailIds.length > 0 && selectedEmailIds.length < emails.length;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-[320px] bg-white/95 backdrop-blur-sm border-r border-gray-100 flex flex-col\",\n children: [\n selectedEmailIds.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"sticky top-0 z-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_BulkActionsToolbar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n selectedCount: selectedEmailIds.length,\n onBulkAction: onBulkAction\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 125,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 124,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-b border-gray-100\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"px-4 py-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Mail_Search_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"absolute left-2 top-2.5 h-4 w-4 text-gray-400\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 136,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: handleSearch,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_5__.Input, {\n type: \"search\",\n placeholder: \"Search in folder...\",\n className: \"pl-8 h-9 bg-gray-50\",\n value: searchQuery,\n onChange: (e)=>setSearchQuery(e.target.value)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 138,\n columnNumber: 15\n }, this),\n searchQuery && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: clearSearch,\n className: \"absolute right-2 top-1/2 transform -translate-y-1/2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Mail_Search_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-4 w-4 text-gray-400\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 151,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 146,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 137,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 135,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 134,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_EmailListHeader__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n allSelected: allSelected,\n someSelected: someSelected,\n onToggleSelectAll: onToggleSelectAll,\n currentFolder: currentFolder,\n totalEmails: totalEmails\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 157,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 133,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto\",\n onScroll: handleScroll,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"divide-y divide-gray-100\",\n children: [\n emails.map((email)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_EmailListItem__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n email: email,\n isSelected: selectedEmailIds.includes(email.id),\n isActive: selectedEmail?.id === email.id,\n onSelect: ()=>onSelectEmail(email.id, email.accountId || '', email.folder || ''),\n onToggleSelect: (e)=>{\n e.stopPropagation();\n onToggleSelect(email.id);\n },\n onToggleStarred: (e)=>{\n e.stopPropagation();\n onToggleStarred(email.id);\n }\n }, email.id, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 172,\n columnNumber: 13\n }, this)),\n isLoading && emails.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-center p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"animate-spin rounded-full h-4 w-4 border-t-2 border-b-2 border-blue-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 191,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 190,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 170,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 166,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailList.tsx\",\n lineNumber: 121,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL2VtYWlsL0VtYWlsTGlzdC50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUV3QztBQUNnQjtBQUVaO0FBQ0k7QUFDTTtBQUNSO0FBbUIvQixTQUFTUyxVQUFVLEVBQ2hDQyxNQUFNLEVBQ05DLGdCQUFnQixFQUNoQkMsYUFBYSxFQUNiQyxhQUFhLEVBQ2JDLFNBQVMsRUFDVEMsV0FBVyxFQUNYQyxhQUFhLEVBQ2JDLGFBQWEsRUFDYkMsY0FBYyxFQUNkQyxpQkFBaUIsRUFDakJDLFlBQVksRUFDWkMsZUFBZSxFQUNmQyxVQUFVLEVBQ1ZDLFFBQVEsRUFDTztJQUNmLE1BQU0sQ0FBQ0MsZ0JBQWdCQyxrQkFBa0IsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3JELE1BQU0sQ0FBQ3lCLGFBQWFDLGVBQWUsR0FBRzFCLCtDQUFRQSxDQUFDO0lBRS9DLHVEQUF1RDtJQUN2RCxNQUFNMkIsZUFBZSxDQUFDQztRQUNwQixNQUFNQyxTQUFTRCxNQUFNQyxNQUFNO1FBQzNCLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxZQUFZLEVBQUVDLFlBQVksRUFBRSxHQUFHSDtRQUVsREwsa0JBQWtCTTtRQUVsQix1REFBdUQ7UUFDdkQsTUFBTUcsbUJBQW1CRixlQUFlRCxZQUFZRTtRQUVwRCw4QkFBOEI7UUFDOUJFLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLDZDQUE2QyxFQUFFRixpQkFBaUIsa0JBQWtCLEVBQUVGLGFBQWEsYUFBYSxFQUFFRCxVQUFVLGdCQUFnQixFQUFFRSxjQUFjO1FBRXZLLHVGQUF1RjtRQUN2RixtRUFBbUU7UUFDbkUsTUFBTUksbUJBQW1CLENBQUNOLFlBQVlFLFlBQVcsSUFBS0Q7UUFFdEQsOENBQThDO1FBQzlDRyxRQUFRQyxHQUFHLENBQUMsQ0FBQywyQkFBMkIsRUFBRUUsS0FBS0MsS0FBSyxDQUFDRixtQkFBbUIsS0FBSyxrQkFBa0IsRUFBRXJCLGNBQWMsYUFBYSxFQUFFRixXQUFXO1FBRXpJLHFFQUFxRTtRQUNy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d0QsT0FBT0E7Z0NBQ1BDLFlBQVluRCxpQkFBaUJvRCxRQUFRLENBQUNGLE1BQU1HLEVBQUU7Z0NBQzlDQyxVQUFVckQsZUFBZW9ELE9BQU9ILE1BQU1HLEVBQUU7Z0NBQ3hDRSxVQUFVLElBQU1qRCxjQUFjNEMsTUFBTUcsRUFBRSxFQUFFSCxNQUFNTSxTQUFTLElBQUksSUFBSU4sTUFBTU8sTUFBTSxJQUFJO2dDQUMvRWxELGdCQUFnQixDQUFDdUI7b0NBQ2ZBLEVBQUU0QixlQUFlO29DQUNqQm5ELGVBQWUyQyxNQUFNRyxFQUFFO2dDQUN6QjtnQ0FDQTNDLGlCQUFpQixDQUFDb0I7b0NBQ2hCQSxFQUFFNEIsZUFBZTtvQ0FDakJoRCxnQkFBZ0J3QyxNQUFNRyxFQUFFO2dDQUMxQjsrQkFaS0gsTUFBTUcsRUFBRTs7Ozs7d0JBZ0JoQmxELGFBQWFKLE9BQU9rQyxNQUFNLEdBQUcsbUJBQzVCLDhEQUFDQzs0QkFBSUMsV0FBVTtzQ0FDYiw0RUFBQ0Q7Z0NBQUlDLFdBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPN0IiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvY29tcG9uZW50cy9lbWFpbC9FbWFpbExpc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTG9hZGVyMiwgTWFpbCwgU2VhcmNoLCBYIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IEVtYWlsIH0gZnJvbSAnQC9ob29rcy91c2UtY291cnJpZXInO1xuaW1wb3J0IEVtYWlsTGlzdEl0ZW0gZnJvbSAnLi9FbWFpbExpc3RJdGVtJztcbmltcG9ydCBFbWFpbExpc3RIZWFkZXIgZnJvbSAnLi9FbWFpbExpc3RIZWFkZXInO1xuaW1wb3J0IEJ1bGtBY3Rpb25zVG9vbGJhciBmcm9tICcuL0J1bGtBY3Rpb25zVG9vbGJhcic7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCc7XG5cbmludGVyZmFjZSBFbWFpbExpc3RQcm9wcyB7XG4gIGVtYWlsczogRW1haWxbXTtcbiAgc2VsZWN0ZWRFbWFpbElkczogc3RyaW5nW107XG4gIHNlbGVjdGVkRW1haWw6IEVtYWlsIHwgbnVsbDtcbiAgY3VycmVudEZvbGRlcjogc3RyaW5nO1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIHRvdGFsRW1haWxzOiBudW1iZXI7XG4gIGhhc01vcmVFbWFpbHM6IGJvb2xlYW47XG4gIG9uU2VsZWN0RW1haWw6IChlbWFpbElkOiBzdHJpbmcsIGFjY291bnRJZDogc3RyaW5nLCBmb2xkZXI6IHN0cmluZykgPT4gdm9pZDtcbiAgb25Ub2dnbGVTZWxlY3Q6IChlbWFpbElkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uVG9nZ2xlU2VsZWN0QWxsOiAoKSA9PiB2b2lkO1xuICBvbkJ1bGtBY3Rpb246IChhY3Rpb246ICdkZWxldGUnIHwgJ21hcmstcmVhZCcgfCAnbWFyay11bnJlYWQnIHwgJ2FyY2hpdmUnKSA9PiB2b2lkO1xuICBvblRvZ2dsZVN0YXJyZWQ6IChlbWFpbElkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uTG9hZE1vcmU6ICgpID0+IHZvaWQ7XG4gIG9uU2VhcmNoPzogKHF1ZXJ5OiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVtYWlsTGlzdCh7XG4gIGVtYWlscyxcbiAgc2VsZWN0ZWRFbWFpbElkcyxcbiAgc2VsZWN0ZWRFbWFpbCxcbiAgY3VycmVudEZvbGRlcixcbiAgaXNMb2FkaW5nLFxuICB0b3RhbEVtYWlscyxcbiAgaGFzTW9yZUVtYWlscyxcbiAgb25TZWxlY3RFbWFpbCxcbiAgb25Ub2dnbGVTZWxlY3QsXG4gIG9uVG9nZ2xlU2VsZWN0QWxsLFxuICBvbkJ1bGtBY3Rpb24sXG4gIG9uVG9nZ2xlU3RhcnJlZCxcbiAgb25Mb2FkTW9yZSxcbiAgb25TZWFyY2hcbn06IEVtYWlsTGlzdFByb3BzKSB7XG4gIGNvbnN0IFtzY3JvbGxQb3NpdGlvbiwgc2V0U2Nyb2xsUG9zaXRpb25dID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtzZWFyY2hRdWVyeSwgc2V0U2VhcmNoUXVlcnldID0gdXNlU3RhdGUoJycpO1xuXG4gIC8vIEhhbmRsZSBzY3JvbGwgdG8gZGV0ZWN0IHdoZW4gdXNlciByZWFjaGVzIHRoZSBib3R0b21cbiAgY29uc3QgaGFuZGxlU2Nyb2xsID0gKGV2ZW50OiBSZWFjdC5VSUV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IHRhcmdldDtcbiAgICBcbiAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxUb3ApO1xuICAgIFxuICAgIC8vIENhbGN1bGF0ZSBob3cgY2xvc2UgdG8gdGhlIGJvdHRvbSB3ZSBhcmUgKGluIHBpeGVscylcbiAgICBjb25zdCBkaXN0YW5jZVRvQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0O1xuICAgIFxuICAgIC8vIERFQlVHOiBMb2cgc2Nyb2xsIHBvc2l0aW9uc1xuICAgIGNvbnNvbGUubG9nKGBbREVCVUddIFNjcm9sbCBtZXRyaWNzIC0gRGlzdGFuY2UgdG8gYm90dG9tOiAke2Rpc3RhbmNlVG9Cb3R0b219cHgsIHNjcm9sbEhlaWdodDogJHtzY3JvbGxIZWlnaHR9LCBzY3JvbGxUb3A6ICR7c2Nyb2xsVG9wfSwgY2xpZW50SGVpZ2h0OiAke2NsaWVudEhlaWdodH1gKTtcbiAgICBcbiAgICAvLyBDUklUSUNBTCBGSVg6IE11Y2ggbW9yZSBhZ2dyZXNzaXZlIHRocmVzaG9sZCAtIGxvYWQgbW9yZSB3aGVuIHdpdGhpbiA1MDBweCBvZiBib3R0b21cbiAgICAvLyBBbHNvIGFkZCBkb3VibGUtY2hlY2sgd2l0aCBwZXJjZW50YWdlIHRvIGhhbmRsZSBhbGwgc2NyZWVuIHNpemVzXG4gICAgY29uc3Qgc2Nyb2xsUGVyY2VudGFnZSA9IChzY3JvbGxUb3AgKyBjbGllbnRIZWlnaHQpIC8gc2Nyb2xsSGVpZ2h0O1xuICAgIFxuICAgIC8vIERFQlVHOiBMb2cgc2Nyb2xsIHBlcmNlbnRhZ2UgYW5kIGNvbmRpdGlvbnNcbiAgICBjb25zb2xlLmxvZyhgW0RFQlVHXSBTY3JvbGwgcGVyY2VudGFnZTogJHtNYXRoLnJvdW5kKHNjcm9sbFBlcmNlbnRhZ2UgKiAxMDApfSUsIGhhc01vcmVFbWFpbHM6ICR7aGFzTW9yZUVtYWlsc30sIGlzTG9hZGluZzogJHtpc0xvYWRpbmd9YCk7XG4gICAgXG4gICAgLy8gVHJpZ2dlciBsb2FkaW5nIHdoZW4gd2l0aGluIDUwMHB4IE9SIGF0IDgwJSBvZiB0aGUgc2Nyb2xsIGRpc3RhbmNlXG4gICAgaWYgKChkaXN0YW5jZVRvQm90dG9tIDwgNTAwIHx8IHNjcm9sbFBlcmNlbnRhZ2UgPiAwLjgpICYmIGhhc01vcmVFbWFpbHMgJiYgIWlzTG9hZGluZykge1xuICAgICAgY29uc29sZS5sb2coYFtERUJVRy1UUklHR0VSXSBMb2FkaW5nIG1vcmUgZW1haWxzIC0gZGlzdGFuY2U6ICR7ZGlzdGFuY2VUb0JvdHRvbX1weCwgcGVyY2VudGFnZTogJHtNYXRoLnJvdW5kKHNjcm9sbFBlcmNlbnRhZ2UgKiAxMDApfSVgKTtcbiAgICAgIG9uTG9hZE1vcmUoKTtcbiAgICB9IGVsc2UgaWYgKChkaXN0YW5jZVRvQm90dG9tIDwgNTAwIHx8IHNjcm9sbFBlcmNlbnRhZ2UgPiAwLjgpICYmIGhhc01vcmVFbWFpbHMgJiYgaXNMb2FkaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0RFQlVHLUJMT0NLRURdIE5vdCBsb2FkaW5nIG1vcmUgZW1haWxzIGJlY2F1c2UgaXNMb2FkaW5nIGlzIHRydWVgKTtcbiAgICB9IGVsc2UgaWYgKChkaXN0YW5jZVRvQm90dG9tIDwgNTAwIHx8IHNjcm9sbFBlcmNlbnRhZ2UgPiAwLjgpICYmICFoYXNNb3JlRW1haWxzKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0RFQlVHLUJMT0NLRURdIE5vdCBsb2FkaW5nIG1vcmUgZW1haWxzIGJlY2F1c2UgaGFzTW9yZUVtYWlscyBpcyBmYWxzZWApO1xuICAgIH1cbiAgfTtcblxuICAvLyBIYW5kbGUgc2VhcmNoXG4gIGNvbnN0IGhhbmRsZVNlYXJjaCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgb25TZWFyY2g/LihzZWFyY2hRdWVyeSk7XG4gIH07XG5cbiAgY29uc3QgY2xlYXJTZWFyY2ggPSAoKSA9PiB7XG4gICAgc2V0U2VhcmNoUXVlcnkoJycpO1xuICAgIG9uU2VhcmNoPy4oJycpO1xuICB9O1xuXG4gIC8vIFJlbmRlciBsb2FkaW5nIHN0YXRlXG4gIGlmIChpc0xvYWRpbmcgJiYgZW1haWxzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIGgtZnVsbCBwLTggYmctd2hpdGUvOTUgYmFja2Ryb3AtYmx1ci1zbVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFuaW1hdGUtc3BpbiByb3VuZGVkLWZ1bGwgaC04IHctOCBib3JkZXItdC0yIGJvcmRlci1iLTIgYm9yZGVyLWJsdWUtNTAwXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgLy8gUmVuZGVyIGVtcHR5IHN0YXRlXG4gIGlmIChlbWFpbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgaC02NCBwLTggdGV4dC1jZW50ZXIgYmctd2hpdGUvOTUgYmFja2Ryb3AtYmx1ci1zbVwiPlxuICAgICAgICA8TWFpbCBjbGFzc05hbWU9XCJoLTggdy04IHRleHQtZ3JheS00MDAgbWItMlwiIC8+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDAgdGV4dC1zbVwiPlxuICAgICAgICAgIHtzZWFyY2hRdWVyeSBcbiAgICAgICAgICAgID8gJ05vIGVtYWlscyBtYXRjaCB5b3VyIHNlYXJjaCdcbiAgICAgICAgICAgIDogY3VycmVudEZvbGRlciA9PT0gJ0lOQk9YJyBcbiAgICAgICAgICAgICAgPyBcIllvdXIgaW5ib3ggaXMgZW1wdHkuIFlvdSdyZSBhbGwgY2F1Z2h0IHVwIVwiIFxuICAgICAgICAgICAgICA6ICdObyBlbWFpbHMgaW4gdGhpcyBmb2xkZXInfVxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgLy8gQXJlIGFsbCBlbWFpbHMgc2VsZWN0ZWRcbiAgY29uc3QgYWxsU2VsZWN0ZWQgPSBzZWxlY3RlZEVtYWlsSWRzLmxlbmd0aCA9PT0gZW1haWxzLmxlbmd0aCAmJiBlbWFpbHMubGVuZ3RoID4gMDtcbiAgXG4gIC8vIEFyZSBzb21lIChidXQgbm90IGFsbCkgZW1haWxzIHNlbGVjdGVkXG4gIGNvbnN0IHNvbWVTZWxlY3RlZCA9IHNlbGVjdGVkRW1haWxJZHMubGVuZ3RoID4gMCAmJiBzZWxlY3RlZEVtYWlsSWRzLmxlbmd0aCA8IGVtYWlscy5sZW5ndGg7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInctWzMyMHB4XSBiZy13aGl0ZS85NSBiYWNrZHJvcC1ibHVyLXNtIGJvcmRlci1yIGJvcmRlci1ncmF5LTEwMCBmbGV4IGZsZXgtY29sXCI+XG4gICAgICB7LyogU3RpY2t5IHRvb2xiYXIgLSBhbHdheXMgdmlzaWJsZSBhdCB0aGUgdG9wIHdoZW4gZW1haWxzIGFyZSBzZWxlY3RlZCAqL31cbiAgICAgIHtzZWxlY3RlZEVtYWlsSWRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN0aWNreSB0b3AtMCB6LTEwXCI+XG4gICAgICAgICAgPEJ1bGtBY3Rpb25zVG9vbGJhciBcbiAgICAgICAgICAgIHNlbGVjdGVkQ291bnQ9e3NlbGVjdGVkRW1haWxJZHMubGVuZ3RofVxuICAgICAgICAgICAgb25CdWxrQWN0aW9uPXtvbkJ1bGtBY3Rpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgXG4gICAgICB7LyogU2VhcmNoIGhlYWRlciAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyLWIgYm9yZGVyLWdyYXktMTAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHgtNCBweS0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPFNlYXJjaCBjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTIgdG9wLTIuNSBoLTQgdy00IHRleHQtZ3JheS00MDBcIiAvPlxuICAgICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVNlYXJjaH0+XG4gICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGluIGZvbGRlci4uLlwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicGwtOCBoLTkgYmctZ3JheS01MFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e3NlYXJjaFF1ZXJ5fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VhcmNoUXVlcnkoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7c2VhcmNoUXVlcnkgJiYgKFxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17Y2xlYXJTZWFyY2h9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0yIHRvcC0xLzIgdHJhbnNmb3JtIC10cmFuc2xhdGUteS0xLzJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxYIGNsYXNzTmFtZT1cImgtNCB3LTQgdGV4dC1ncmF5LTQwMFwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8RW1haWxMaXN0SGVhZGVyIFxuICAgICAgICAgIGFsbFNlbGVjdGVkPXthbGxTZWxlY3RlZH1cbiAgICAgICAgICBzb21lU2VsZWN0ZWQ9e3NvbWVTZWxlY3RlZH1cbiAgICAgICAgICBvblRvZ2dsZVNlbGVjdEFsbD17b25Ub2dnbGVTZWxlY3RBbGx9XG4gICAgICAgICAgY3VycmVudEZvbGRlcj17Y3VycmVudEZvbGRlcn1cbiAgICAgICAgICB0b3RhbEVtYWlscz17dG90YWxFbWFpbHN9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPGRpdiBcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0b1wiXG4gICAgICAgIG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGx9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGl2aWRlLXkgZGl2aWRlLWdyYXktMTAwXCI+XG4gICAgICAgICAge2VtYWlscy5tYXAoKGVtYWlsKSA9PiAoXG4gICAgICAgICAgICA8RW1haWxMaXN0SXRlbVxuICAgICAgICAgICAgICBrZXk9e2VtYWlsLmlkfVxuICAgICAgICAgICAgICBlbWFpbD17ZW1haWx9XG4gICAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e3NlbGVjdGVkRW1haWxJZHMuaW5jbHVkZXMoZW1haWwuaWQpfVxuICAgICAgICAgICAgICBpc0FjdGl2ZT17c2VsZWN0ZWRFbWFpbD8uaWQgPT09IGVtYWlsLmlkfVxuICAgICAgICAgICAgICBvblNlbGVjdD17KCkgPT4gb25TZWxlY3RFbWFpbChlbWFpbC5pZCwgZW1haWwuYWNjb3VudElkIHx8ICcnLCBlbWFpbC5mb2xkZXIgfHwgJycpfVxuICAgICAgICAgICAgICBvblRvZ2dsZVNlbGVjdD17KGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIG9uVG9nZ2xlU2VsZWN0KGVtYWlsLmlkKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb25Ub2dnbGVTdGFycmVkPXsoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgb25Ub2dnbGVTdGFycmVkKGVtYWlsLmlkKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAgXG4gICAgICAgICAge2lzTG9hZGluZyAmJiBlbWFpbHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFuaW1hdGUtc3BpbiByb3VuZGVkLWZ1bGwgaC00IHctNCBib3JkZXItdC0yIGJvcmRlci1iLTIgYm9yZGVyLWJsdWUtNTAwXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufSAiXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VTdGF0ZSIsIk1haWwiLCJTZWFyY2giLCJYIiwiRW1haWxMaXN0SXRlbSIsIkVtYWlsTGlzdEhlYWRlciIsIkJ1bGtBY3Rpb25zVG9vbGJhciIsIklucHV0IiwiRW1haWxMaXN0IiwiZW1haWxzIiwic2VsZWN0ZWRFbWFpbElkcyIsInNlbGVjdGVkRW1haWwiLCJjdXJyZW50Rm9sZGVyIiwiaXNMb2FkaW5nIiwidG90YWxFbWFpbHMiLCJoYXNNb3JlRW1haWxzIiwib25TZWxlY3RFbWFpbCIsIm9uVG9nZ2xlU2VsZWN0Iiwib25Ub2dnbGVTZWxlY3RBbGwiLCJvbkJ1bGtBY3Rpb24iLCJvblRvZ2dsZVN0YXJyZWQiLCJvbkxvYWRNb3JlIiwib25TZWFyY2giLCJzY3JvbGxQb3NpdGlvbiIsInNldFNjcm9sbFBvc2l0aW9uIiwic2VhcmNoUXVlcnkiLCJzZXRTZWFyY2hRdWVyeSIsImhhbmRsZVNjcm9sbCIsImV2ZW50IiwidGFyZ2V0Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VUb0JvdHRvbSIsImNvbnNvbGUiLCJsb2ciLCJzY3JvbGxQZXJjZW50YWdlIiwiTWF0aCIsInJvdW5kIiwiaGFuZGxlU2VhcmNoIiwiZSIsInByZXZlbnREZWZhdWx0IiwiY2xlYXJTZWFyY2giLCJsZW5ndGgiLCJkaXYiLCJjbGFzc05hbWUiLCJwIiwiYWxsU2VsZWN0ZWQiLCJzb21lU2VsZWN0ZWQiLCJzZWxlY3RlZENvdW50IiwiZm9ybSIsIm9uU3VibWl0IiwidHlwZSIsInBsYWNlaG9sZGVyIiwidmFsdWUiLCJvbkNoYW5nZSIsImJ1dHRvbiIsIm9uQ2xpY2siLCJvblNjcm9sbCIsIm1hcCIsImVtYWlsIiwiaXNTZWxlY3RlZCIsImluY2x1ZGVzIiwiaWQiLCJpc0FjdGl2ZSIsIm9uU2VsZWN0IiwiYWNjb3VudElkIiwiZm9sZGVyIiwic3RvcFByb3BhZ2F0aW9uIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./components/email/EmailList.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/email/EmailListHeader.tsx":
|
|
/*!**********************************************!*\
|
|
!*** ./components/email/EmailListHeader.tsx ***!
|
|
\**********************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ EmailListHeader)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_checkbox__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/checkbox */ \"(ssr)/./components/ui/checkbox.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\nfunction EmailListHeader({ allSelected, someSelected, onToggleSelectAll, currentFolder = 'Inbox', totalEmails = 0 }) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between px-4 h-14\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_checkbox__WEBPACK_IMPORTED_MODULE_2__.Checkbox, {\n checked: allSelected,\n ref: (input)=>{\n if (input) {\n input.indeterminate = someSelected && !allSelected;\n }\n },\n onCheckedChange: onToggleSelectAll,\n className: \"mt-0.5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListHeader.tsx\",\n lineNumber: 25,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-base font-semibold text-gray-900 capitalize\",\n children: \"Messages\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListHeader.tsx\",\n lineNumber: 35,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListHeader.tsx\",\n lineNumber: 24,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: [\n totalEmails,\n \" \",\n totalEmails === 1 ? 'email' : 'emails'\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListHeader.tsx\",\n lineNumber: 38,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListHeader.tsx\",\n lineNumber: 23,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL2VtYWlsL0VtYWlsTGlzdEhlYWRlci50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUUwQjtBQUUwQjtBQVVyQyxTQUFTRSxnQkFBZ0IsRUFDdENDLFdBQVcsRUFDWEMsWUFBWSxFQUNaQyxpQkFBaUIsRUFDakJDLGdCQUFnQixPQUFPLEVBQ3ZCQyxjQUFjLENBQUMsRUFDTTtJQUNyQixxQkFDRSw4REFBQ0M7UUFBSUMsV0FBVTs7MEJBQ2IsOERBQUNEO2dCQUFJQyxXQUFVOztrQ0FDYiw4REFBQ1IsNkRBQVFBO3dCQUNQUyxTQUFTUDt3QkFDVFEsS0FBSyxDQUFDQzs0QkFDSixJQUFJQSxPQUFPO2dDQUNSQSxNQUFzQ0MsYUFBYSxHQUFHVCxnQkFBZ0IsQ0FBQ0Q7NEJBQzFFO3dCQUNGO3dCQUNBVyxpQkFBaUJUO3dCQUNqQkksV0FBVTs7Ozs7O2tDQUVaLDhEQUFDTTt3QkFBR04sV0FBVTtrQ0FBbUQ7Ozs7Ozs7Ozs7OzswQkFHbkUsOERBQUNPO2dCQUFLUCxXQUFVOztvQkFDYkY7b0JBQVk7b0JBQUVBLGdCQUFnQixJQUFJLFVBQVU7Ozs7Ozs7Ozs7Ozs7QUFJckQiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvY29tcG9uZW50cy9lbWFpbC9FbWFpbExpc3RIZWFkZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENoZXZyb25Eb3duLCBJbmJveCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jaGVja2JveCc7XG5cbmludGVyZmFjZSBFbWFpbExpc3RIZWFkZXJQcm9wcyB7XG4gIGFsbFNlbGVjdGVkOiBib29sZWFuO1xuICBzb21lU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIG9uVG9nZ2xlU2VsZWN0QWxsOiAoKSA9PiB2b2lkO1xuICBjdXJyZW50Rm9sZGVyPzogc3RyaW5nO1xuICB0b3RhbEVtYWlscz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRW1haWxMaXN0SGVhZGVyKHtcbiAgYWxsU2VsZWN0ZWQsXG4gIHNvbWVTZWxlY3RlZCxcbiAgb25Ub2dnbGVTZWxlY3RBbGwsXG4gIGN1cnJlbnRGb2xkZXIgPSAnSW5ib3gnLFxuICB0b3RhbEVtYWlscyA9IDBcbn06IEVtYWlsTGlzdEhlYWRlclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtNCBoLTE0XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgIDxDaGVja2JveCBcbiAgICAgICAgICBjaGVja2VkPXthbGxTZWxlY3RlZH1cbiAgICAgICAgICByZWY9eyhpbnB1dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICAgIChpbnB1dCBhcyB1bmtub3duIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmluZGV0ZXJtaW5hdGUgPSBzb21lU2VsZWN0ZWQgJiYgIWFsbFNlbGVjdGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXtvblRvZ2dsZVNlbGVjdEFsbH1cbiAgICAgICAgICBjbGFzc05hbWU9XCJtdC0wLjVcIlxuICAgICAgICAvPlxuICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC1iYXNlIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCBjYXBpdGFsaXplXCI+TWVzc2FnZXM8L2gyPlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICB7dG90YWxFbWFpbHN9IHt0b3RhbEVtYWlscyA9PT0gMSA/ICdlbWFpbCcgOiAnZW1haWxzJ31cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn0gIl0sIm5hbWVzIjpbIlJlYWN0IiwiQ2hlY2tib3giLCJFbWFpbExpc3RIZWFkZXIiLCJhbGxTZWxlY3RlZCIsInNvbWVTZWxlY3RlZCIsIm9uVG9nZ2xlU2VsZWN0QWxsIiwiY3VycmVudEZvbGRlciIsInRvdGFsRW1haWxzIiwiZGl2IiwiY2xhc3NOYW1lIiwiY2hlY2tlZCIsInJlZiIsImlucHV0IiwiaW5kZXRlcm1pbmF0ZSIsIm9uQ2hlY2tlZENoYW5nZSIsImgyIiwic3BhbiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/email/EmailListHeader.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/email/EmailListItem.tsx":
|
|
/*!********************************************!*\
|
|
!*** ./components/email/EmailListItem.tsx ***!
|
|
\********************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ EmailListItem)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _barrel_optimize_names_Star_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=Star!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/star.js\");\n/* harmony import */ var _components_ui_checkbox__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/checkbox */ \"(ssr)/./components/ui/checkbox.tsx\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/utils */ \"(ssr)/./lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n\nconst PREVIEW_LENGTH = 70;\nfunction EmailListItem({ email, isSelected, isActive, onSelect, onToggleSelect, onToggleStarred }) {\n // Format the date in a readable way\n const formatDate = (dateString)=>{\n const date = new Date(dateString);\n const now = new Date();\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const yesterday = new Date(today);\n yesterday.setDate(yesterday.getDate() - 1);\n // Check if date is today\n if (date >= today) {\n return date.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit'\n });\n }\n // Check if date is yesterday\n if (date >= yesterday) {\n return 'Yesterday';\n }\n // Check if date is this year\n if (date.getFullYear() === now.getFullYear()) {\n return date.toLocaleDateString([], {\n month: 'short',\n day: 'numeric'\n });\n }\n // Date is from a previous year\n return date.toLocaleDateString([], {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n });\n };\n // Get the first letter of the sender's name or email for the avatar\n const getSenderInitial = ()=>{\n if (!email.from || email.from.length === 0) return '?';\n const sender = email.from[0];\n if (sender.name && sender.name.trim()) {\n return sender.name.trim()[0].toUpperCase();\n }\n if (sender.address && sender.address.trim()) {\n return sender.address.trim()[0].toUpperCase();\n }\n return '?';\n };\n // Get sender name or email\n const getSenderName = ()=>{\n if (!email.from || email.from.length === 0) return 'Unknown';\n const sender = email.from[0];\n if (sender.name && sender.name.trim()) {\n return sender.name.trim();\n }\n return sender.address || 'Unknown';\n };\n // Generate a stable color based on the sender's email\n const getAvatarColor = ()=>{\n if (!email.from || email.from.length === 0) return 'hsl(0, 0%, 50%)';\n const address = email.from[0].address || '';\n let hash = 0;\n for(let i = 0; i < address.length; i++){\n hash = address.charCodeAt(i) + ((hash << 5) - hash);\n }\n const h = hash % 360;\n return `hsl(${h}, 70%, 80%)`;\n };\n // Get preview text from email content\n const getPreviewText = (content)=>{\n let text = '';\n if (typeof content === 'string') {\n text = content;\n } else {\n // Prefer text content if available, fall back to HTML\n text = content.text || content.html;\n }\n // Strip HTML tags if present\n text = text.replace(/<[^>]+>/g, ' ');\n // Clean up whitespace\n text = text.replace(/\\s+/g, ' ').trim();\n // Truncate to preview length\n return text.length > PREVIEW_LENGTH ? text.substring(0, PREVIEW_LENGTH) + '...' : text;\n };\n // Handle email selection without affecting checkbox\n const handleEmailSelect = (e)=>{\n // Make sure we're not clicking on or near the checkbox\n const target = e.target;\n const checkboxArea = target.closest('.checkbox-area');\n if (!checkboxArea) {\n onSelect();\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)('flex items-center gap-3 px-4 py-2 hover:bg-gray-50/80 cursor-pointer', isActive ? 'bg-blue-50/50' : '', !email.flags?.seen ? 'bg-blue-50/20' : ''),\n onClick: handleEmailSelect,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-shrink-0 pr-2 checkbox-area\",\n onClick: (e)=>{\n e.stopPropagation();\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_checkbox__WEBPACK_IMPORTED_MODULE_2__.Checkbox, {\n checked: isSelected,\n onCheckedChange: (checked)=>{\n // Only trigger toggle if the checkbox state actually changed\n if (checked !== isSelected) {\n // Create a dummy event object with just stopPropagation\n const dummyEvent = {\n stopPropagation: ()=>{}\n };\n onToggleSelect(dummyEvent);\n }\n },\n onClick: (e)=>{\n e.stopPropagation();\n // Don't call onToggleSelect here - let onCheckedChange handle it\n },\n className: \"mt-0.5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListItem.tsx\",\n lineNumber: 148,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListItem.tsx\",\n lineNumber: 142,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2 min-w-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: `text-sm truncate ${!email.flags?.seen ? 'font-semibold text-gray-900' : 'text-gray-600'}`,\n children: getSenderName()\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListItem.tsx\",\n lineNumber: 171,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListItem.tsx\",\n lineNumber: 170,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2 flex-shrink-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs text-gray-500 whitespace-nowrap\",\n children: formatDate(email.date.toString())\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListItem.tsx\",\n lineNumber: 176,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"h-6 w-6 text-gray-400 hover:text-yellow-400\",\n onClick: (e)=>{\n e.stopPropagation();\n onToggleStarred(e);\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Star_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: `h-4 w-4 ${email.flags?.flagged ? 'fill-yellow-400 text-yellow-400' : ''}`\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListItem.tsx\",\n lineNumber: 186,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListItem.tsx\",\n lineNumber: 179,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListItem.tsx\",\n lineNumber: 175,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListItem.tsx\",\n lineNumber: 169,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-sm text-gray-900 truncate\",\n children: email.subject || '(No subject)'\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListItem.tsx\",\n lineNumber: 191,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-gray-500 truncate\",\n children: getPreviewText(email.content)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListItem.tsx\",\n lineNumber: 195,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListItem.tsx\",\n lineNumber: 168,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailListItem.tsx\",\n lineNumber: 134,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL2VtYWlsL0VtYWlsTGlzdEl0ZW0udHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUUwQjtBQUMwQjtBQUNBO0FBQ25CO0FBY2pDLE1BQU1JLGlCQUFpQjtBQUVSLFNBQVNDLGNBQWMsRUFDcENDLEtBQUssRUFDTEMsVUFBVSxFQUNWQyxRQUFRLEVBQ1JDLFFBQVEsRUFDUkMsY0FBYyxFQUNkQyxlQUFlLEVBQ0k7SUFDbkIsb0NBQW9DO0lBQ3BDLE1BQU1DLGFBQWEsQ0FBQ0M7UUFDbEIsTUFBTUMsT0FBTyxJQUFJQyxLQUFLRjtRQUN0QixNQUFNRyxNQUFNLElBQUlEO1FBQ2hCLE1BQU1FLFFBQVEsSUFBSUYsS0FBS0MsSUFBSUUsV0FBVyxJQUFJRixJQUFJRyxRQUFRLElBQUlILElBQUlJLE9BQU87UUFDckUsTUFBTUMsWUFBWSxJQUFJTixLQUFLRTtRQUMzQkksVUFBVUMsT0FBTyxDQUFDRCxVQUFVRCxPQUFPLEtBQUs7UUFFeEMseUJBQXlCO1FBQ3pCLElBQUlOLFFBQVFHLE9BQU87WUFDakIsT0FBT0gsS0FBS1Msa0JBQWtCLENBQUMsRUFBRSxFQUFFO2dCQUFFQyxNQUFNO2dCQUFXQyxRQUFRO1lBQVU7UUFDMUU7UUFFQSw2QkFBNkI7UUFDN0IsSUFBSVgsUUFBUU8sV0FBVztZQUNyQixPQUFPO1FBQ1Q7UUFFQSw2QkFBNkI7UUFDN0IsSUFBSVAsS0FBS0ksV0FBVyxPQUFPRixJQUFJRSxXQUFXLElBQUk7WUFDNUMsT0FBT0osS0FBS1ksa0JBQWtCLENBQUMsRUFBRSxFQUFFO2dCQUFFQyxPQUFPO2dCQUFTQyxLQUFLO1lBQVU7UUFDdEU7UUFFQSwrQkFBK0I7UUFDL0IsT0FBT2QsS0FBS1ksa0JBQWtCLENBQUMsRUFBRSxFQUFFO1lBQUVHLE1BQU07WUFBV0YsT0FBTztZQUFTQyxLQUFLO1FBQVU7SUFDdkY7SUFFQSxvRUFBb0U7SUFDcEUsTUFBTUUsbUJBQW1CO1FBQ3ZCLElBQUksQ0FBQ3hCLE1BQU15QixJQUFJ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NEJBQ3hELE1BQU13RCxhQUFhO2dDQUNqQkgsaUJBQWlCLEtBQU87NEJBQzFCOzRCQUNBbEQsZUFBZXFEO3dCQUNqQjtvQkFDRjtvQkFDQUosU0FBUyxDQUFDUjt3QkFDUkEsRUFBRVMsZUFBZTtvQkFDakIsaUVBQWlFO29CQUNuRTtvQkFDQUosV0FBVTs7Ozs7Ozs7Ozs7MEJBSWQsOERBQUNEO2dCQUFJQyxXQUFVOztrQ0FDYiw4REFBQ0Q7d0JBQUlDLFdBQVU7OzBDQUNiLDhEQUFDRDtnQ0FBSUMsV0FBVTswQ0FDYiw0RUFBQ1E7b0NBQUtSLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDbEQsTUFBTW1ELEtBQUssRUFBRUMsT0FBTyxnQ0FBZ0MsaUJBQWlCOzhDQUN4R3BCOzs7Ozs7Ozs7OzswQ0FHTCw4REFBQ2lCO2dDQUFJQyxXQUFVOztrREFDYiw4REFBQ1E7d0NBQUtSLFdBQVU7a0RBQ2I1QyxXQUFXTixNQUFNUSxJQUFJLENBQUNtRCxRQUFROzs7Ozs7a0RBRWpDLDhEQUFDQzt3Q0FDQ1YsV0FBVTt3Q0FDVkcsU0FBUyxDQUFDUjs0Q0FDUkEsRUFBRVMsZUFBZTs0Q0FDakJqRCxnQkFBZ0J3Qzt3Q0FDbEI7a0RBRUEsNEVBQUNsRCxnRkFBSUE7NENBQUN1RCxXQUFXLENBQUMsUUFBUSxFQUFFbEQsTUFBTW1ELEtBQUssRUFBRVUsVUFBVSxvQ0FBb0MsSUFBSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBS2pHLDhEQUFDQzt3QkFBR1osV0FBVTtrQ0FDWGxELE1BQU0rRCxPQUFPLElBQUk7Ozs7OztrQ0FHcEIsOERBQUNkO3dCQUFJQyxXQUFVO2tDQUNaWixlQUFldEMsTUFBTXVDLE9BQU87Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUt2QyIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9jb21wb25lbnRzL2VtYWlsL0VtYWlsTGlzdEl0ZW0udHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFN0YXIsIE1haWwsIE1haWxPcGVuIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NoZWNrYm94JztcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnO1xuaW1wb3J0IHsgRW1haWwgfSBmcm9tICdAL2hvb2tzL3VzZS1jb3Vycmllcic7XG5pbXBvcnQgeyBCYWRnZSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9iYWRnZSc7XG5pbXBvcnQgeyBBdmF0YXIsIEF2YXRhckZhbGxiYWNrIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2F2YXRhcic7XG5cbmludGVyZmFjZSBFbWFpbExpc3RJdGVtUHJvcHMge1xuICBlbWFpbDogRW1haWw7XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGlzQWN0aXZlOiBib29sZWFuO1xuICBvblNlbGVjdDogKCkgPT4gdm9pZDtcbiAgb25Ub2dnbGVTZWxlY3Q6IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB2b2lkO1xuICBvblRvZ2dsZVN0YXJyZWQ6IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB2b2lkO1xufVxuXG5jb25zdCBQUkVWSUVXX0xFTkdUSCA9IDcwO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFbWFpbExpc3RJdGVtKHtcbiAgZW1haWwsXG4gIGlzU2VsZWN0ZWQsXG4gIGlzQWN0aXZlLFxuICBvblNlbGVjdCxcbiAgb25Ub2dnbGVTZWxlY3QsXG4gIG9uVG9nZ2xlU3RhcnJlZFxufTogRW1haWxMaXN0SXRlbVByb3BzKSB7XG4gIC8vIEZvcm1hdCB0aGUgZGF0ZSBpbiBhIHJlYWRhYmxlIHdheVxuICBjb25zdCBmb3JtYXREYXRlID0gKGRhdGVTdHJpbmc6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBub3cuZ2V0RGF0ZSgpKTtcbiAgICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgeWVzdGVyZGF5LnNldERhdGUoeWVzdGVyZGF5LmdldERhdGUoKSAtIDEpO1xuICAgIFxuICAgIC8vIENoZWNrIGlmIGRhdGUgaXMgdG9kYXlcbiAgICBpZiAoZGF0ZSA+PSB0b2RheSkge1xuICAgICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKFtdLCB7IGhvdXI6ICcyLWRpZ2l0JywgbWludXRlOiAnMi1kaWdpdCcgfSk7XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIGlmIGRhdGUgaXMgeWVzdGVyZGF5XG4gICAgaWYgKGRhdGUgPj0geWVzdGVyZGF5KSB7XG4gICAgICByZXR1cm4gJ1llc3RlcmRheSc7XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIGlmIGRhdGUgaXMgdGhpcyB5ZWFyXG4gICAgaWYgKGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0gbm93LmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyhbXSwgeyBtb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycgfSk7XG4gICAgfVxuICAgIFxuICAgIC8vIERhdGUgaXMgZnJvbSBhIHByZXZpb3VzIHllYXJcbiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoW10sIHsgeWVhcjogJ251bWVyaWMnLCBtb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycgfSk7XG4gIH07XG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIHNlbmRlcidzIG5hbWUgb3IgZW1haWwgZm9yIHRoZSBhdmF0YXJcbiAgY29uc3QgZ2V0U2VuZGVySW5pdGlhbCA9ICgpID0+IHtcbiAgICBpZiAoIWVtYWlsLmZyb20gfHwgZW1haWwuZnJvbS5sZW5ndGggPT09IDApIHJldHVybiAnPyc7XG4gICAgXG4gICAgY29uc3Qgc2VuZGVyID0gZW1haWwuZnJvbVswXTtcbiAgICBpZiAoc2VuZGVyLm5hbWUgJiYgc2VuZGVyLm5hbWUudHJpbSgpKSB7XG4gICAgICByZXR1cm4gc2VuZGVyLm5hbWUudHJpbSgpWzBdLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICAgIFxuICAgIGlmIChzZW5kZXIuYWRkcmVzcyAmJiBzZW5kZXIuYWRkcmVzcy50cmltKCkpIHtcbiAgICAgIHJldHVybiBzZW5kZXIuYWRkcmVzcy50cmltKClbMF0udG9VcHBlckNhc2UoKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuICc/JztcbiAgfTtcblxuICAvLyBHZXQgc2VuZGVyIG5hbWUgb3IgZW1haWxcbiAgY29uc3QgZ2V0U2VuZGVyTmFtZSA9ICgpID0+IHtcbiAgICBpZiAoIWVtYWlsLmZyb20gfHwgZW1haWwuZnJvbS5sZW5ndGggPT09IDApIHJldHVybiAnVW5rbm93bic7XG4gICAgXG4gICAgY29uc3Qgc2VuZGVyID0gZW1haWwuZnJvbVswXTtcbiAgICBpZiAoc2VuZGVyLm5hbWUgJiYgc2VuZGVyLm5hbWUudHJpbSgpKSB7XG4gICAgICByZXR1cm4gc2VuZGVyLm5hbWUudHJpbSgpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gc2VuZGVyLmFkZHJlc3MgfHwgJ1Vua25vd24nO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgc3RhYmxlIGNvbG9yIGJhc2VkIG9uIHRoZSBzZW5kZXIncyBlbWFpbFxuICBjb25zdCBnZXRBdmF0YXJDb2xvciA9ICgpID0+IHtcbiAgICBpZiAoIWVtYWlsLmZyb20gfHwgZW1haWwuZnJvbS5sZW5ndGggPT09IDApIHJldHVybiAnaHNsKDAsIDAlLCA1MCUpJztcbiAgICBcbiAgICBjb25zdCBhZGRyZXNzID0gZW1haWwuZnJvbVswXS5hZGRyZXNzIHx8ICcnO1xuICAgIGxldCBoYXNoID0gMDtcbiAgICBcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFkZHJlc3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGhhc2ggPSBhZGRyZXNzLmNoYXJDb2RlQXQoaSkgKyAoKGhhc2ggPDwgNSkgLSBoYXNoKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgaCA9IGhhc2ggJSAzNjA7XG4gICAgcmV0dXJuIGBoc2woJHtofSwgNzAlLCA4MCUpYDtcbiAgfTtcblxuICAvLyBHZXQgcHJldmlldyB0ZXh0IGZyb20gZW1haWwgY29udGVudFxuICBjb25zdCBnZXRQcmV2aWV3VGV4dCA9IChjb250ZW50OiB7IHRleHQ6IHN0cmluZzsgaHRtbDogc3RyaW5nIH0gfCBzdHJpbmcpID0+IHtcbiAgICBsZXQgdGV4dCA9ICcnO1xuICAgIFxuICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRleHQgPSBjb250ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcmVmZXIgdGV4dCBjb250ZW50IGlmIGF2YWlsYWJsZSwgZmFsbCBiYWNrIHRvIEhUTUxcbiAgICAgIHRleHQgPSBjb250ZW50LnRleHQgfHwgY29udGVudC5odG1sO1xuICAgIH1cbiAgICBcbiAgICAvLyBTdHJpcCBIVE1MIHRhZ3MgaWYgcHJlc2VudFxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLzxbXj5dKz4vZywgJyAnKTtcbiAgICBcbiAgICAvLyBDbGVhbiB1cCB3aGl0ZXNwYWNlXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbiAgICBcbiAgICAvLyBUcnVuY2F0ZSB0byBwcmV2aWV3IGxlbmd0aFxuICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA+IFBSRVZJRVdfTEVOR1RIIFxuICAgICAgPyB0ZXh0LnN1YnN0cmluZygwLCBQUkVWSUVXX0xFTkdUSCkgKyAnLi4uJ1xuICAgICAgOiB0ZXh0O1xuICB9O1xuXG4gIC8vIEhhbmRsZSBlbWFpbCBzZWxlY3Rpb24gd2l0aG91dCBhZmZlY3RpbmcgY2hlY2tib3hcbiAgY29uc3QgaGFuZGxlRW1haWxTZWxlY3QgPSAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBub3QgY2xpY2tpbmcgb24gb3IgbmVhciB0aGUgY2hlY2tib3hcbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBjaGVja2JveEFyZWEgPSB0YXJnZXQuY2xvc2VzdCgnLmNoZWNrYm94LWFyZWEnKTtcbiAgICBpZiAoIWNoZWNrYm94QXJlYSkge1xuICAgICAgb25TZWxlY3QoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IFxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHB4LTQgcHktMiBob3ZlcjpiZy1ncmF5LTUwLzgwIGN1cnNvci1wb2ludGVyJyxcbiAgICAgICAgaXNBY3RpdmUgPyAnYmctYmx1ZS01MC81MCcgOiAnJyxcbiAgICAgICAgIWVtYWlsLmZsYWdzPy5zZWVuID8gJ2JnLWJsdWUtNTAvMjAnIDogJydcbiAgICAgICl9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVFbWFpbFNlbGVjdH1cbiAgICA+XG4gICAgICA8ZGl2IFxuICAgICAgICBjbGFzc05hbWU9XCJmbGV4LXNocmluay0wIHByLTIgY2hlY2tib3gtYXJlYVwiIFxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxDaGVja2JveCBcbiAgICAgICAgICBjaGVja2VkPXtpc1NlbGVjdGVkfVxuICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+IHtcbiAgICAgICAgICAgIC8vIE9ubHkgdHJpZ2dlciB0b2dnbGUgaWYgdGhlIGNoZWNrYm94IHN0YXRlIGFjdHVhbGx5IGNoYW5nZWRcbiAgICAgICAgICAgIGlmIChjaGVja2VkICE9PSBpc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGR1bW15IGV2ZW50IG9iamVjdCB3aXRoIGp1c3Qgc3RvcFByb3BhZ2F0aW9uXG4gICAgICAgICAgICAgIGNvbnN0IGR1bW15RXZlbnQgPSB7IFxuICAgICAgICAgICAgICAgIHN0b3BQcm9wYWdhdGlvbjogKCkgPT4ge30gXG4gICAgICAgICAgICAgIH0gYXMgUmVhY3QuTW91c2VFdmVudDtcbiAgICAgICAgICAgICAgb25Ub2dnbGVTZWxlY3QoZHVtbXlFdmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIC8vIERvbid0IGNhbGwgb25Ub2dnbGVTZWxlY3QgaGVyZSAtIGxldCBvbkNoZWNrZWRDaGFuZ2UgaGFuZGxlIGl0XG4gICAgICAgICAgfX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJtdC0wLjVcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG1pbi13LTBcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIG1pbi13LTBcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YHRleHQtc20gdHJ1bmNhdGUgJHshZW1haWwuZmxhZ3M/LnNlZW4gPyAnZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwJyA6ICd0ZXh0LWdyYXktNjAwJ31gfT5cbiAgICAgICAgICAgICAge2dldFNlbmRlck5hbWUoKX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGZsZXgtc2hyaW5rLTBcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1ncmF5LTUwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICB7Zm9ybWF0RGF0ZShlbWFpbC5kYXRlLnRvU3RyaW5nKCkpfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTYgdy02IHRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC15ZWxsb3ctNDAwXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIG9uVG9nZ2xlU3RhcnJlZChlKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN0YXIgY2xhc3NOYW1lPXtgaC00IHctNCAke2VtYWlsLmZsYWdzPy5mbGFnZ2VkID8gJ2ZpbGwteWVsbG93LTQwMCB0ZXh0LXllbGxvdy00MDAnIDogJyd9YH0gLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG4gICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS05MDAgdHJ1bmNhdGVcIj5cbiAgICAgICAgICB7ZW1haWwuc3ViamVjdCB8fCAnKE5vIHN1YmplY3QpJ31cbiAgICAgICAgPC9oMz5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LWdyYXktNTAwIHRydW5jYXRlXCI+XG4gICAgICAgICAge2dldFByZXZpZXdUZXh0KGVtYWlsLmNvbnRlbnQpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufSAiXSwibmFtZXMiOlsiUmVhY3QiLCJTdGFyIiwiQ2hlY2tib3giLCJjbiIsIlBSRVZJRVdfTEVOR1RIIiwiRW1haWxMaXN0SXRlbSIsImVtYWlsIiwiaXNTZWxlY3RlZCIsImlzQWN0aXZlIiwib25TZWxlY3QiLCJvblRvZ2dsZVNlbGVjdCIsIm9uVG9nZ2xlU3RhcnJlZCIsImZvcm1hdERhdGUiLCJkYXRlU3RyaW5nIiwiZGF0ZSIsIkRhdGUiLCJub3ciLCJ0b2RheSIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwieWVzdGVyZGF5Iiwic2V0RGF0ZSIsInRvTG9jYWxlVGltZVN0cmluZyIsImhvdXIiLCJtaW51dGUiLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJtb250aCIsImRheSIsInllYXIiLCJnZXRTZW5kZXJJbml0aWFsIiwiZnJvbSIsImxlbmd0aCIsInNlbmRlciIsIm5hbWUiLCJ0cmltIiwidG9VcHBlckNhc2UiLCJhZGRyZXNzIiwiZ2V0U2VuZGVyTmFtZSIsImdldEF2YXRhckNvbG9yIiwiaGFzaCIsImkiLCJjaGFyQ29kZUF0IiwiaCIsImdldFByZXZpZXdUZXh0IiwiY29udGVudCIsInRleHQiLCJodG1sIiwicmVwbGFjZSIsInN1YnN0cmluZyIsImhhbmRsZUVtYWlsU2VsZWN0IiwiZSIsInRhcmdldCIsImNoZWNrYm94QXJlYSIsImNsb3Nlc3QiLCJkaXYiLCJjbGFzc05hbWUiLCJmbGFncyIsInNlZW4iLCJvbkNsaWNrIiwic3RvcFByb3BhZ2F0aW9uIiwiY2hlY2tlZCIsIm9uQ2hlY2tlZENoYW5nZSIsImR1bW15RXZlbnQiLCJzcGFuIiwidG9TdHJpbmciLCJidXR0b24iLCJmbGFnZ2VkIiwiaDMiLCJzdWJqZWN0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./components/email/EmailListItem.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/email/EmailSidebar.tsx":
|
|
/*!*******************************************!*\
|
|
!*** ./components/email/EmailSidebar.tsx ***!
|
|
\*******************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ EmailSidebar)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=AlertOctagon,Archive,ChevronDown,ChevronUp,Edit,Inbox,Loader2,Mail,MessageSquare,Plus,RefreshCw,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/inbox.js\");\n/* harmony import */ var _barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! __barrel_optimize__?names=AlertOctagon,Archive,ChevronDown,ChevronUp,Edit,Inbox,Loader2,Mail,MessageSquare,Plus,RefreshCw,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/send.js\");\n/* harmony import */ var _barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! __barrel_optimize__?names=AlertOctagon,Archive,ChevronDown,ChevronUp,Edit,Inbox,Loader2,Mail,MessageSquare,Plus,RefreshCw,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/trash.js\");\n/* harmony import */ var _barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! __barrel_optimize__?names=AlertOctagon,Archive,ChevronDown,ChevronUp,Edit,Inbox,Loader2,Mail,MessageSquare,Plus,RefreshCw,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/archive.js\");\n/* harmony import */ var _barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! __barrel_optimize__?names=AlertOctagon,Archive,ChevronDown,ChevronUp,Edit,Inbox,Loader2,Mail,MessageSquare,Plus,RefreshCw,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/square-pen.js\");\n/* harmony import */ var _barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! __barrel_optimize__?names=AlertOctagon,Archive,ChevronDown,ChevronUp,Edit,Inbox,Loader2,Mail,MessageSquare,Plus,RefreshCw,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/octagon-alert.js\");\n/* harmony import */ var _barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! __barrel_optimize__?names=AlertOctagon,Archive,ChevronDown,ChevronUp,Edit,Inbox,Loader2,Mail,MessageSquare,Plus,RefreshCw,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/message-square.js\");\n/* harmony import */ var _barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! __barrel_optimize__?names=AlertOctagon,Archive,ChevronDown,ChevronUp,Edit,Inbox,Loader2,Mail,MessageSquare,Plus,RefreshCw,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/mail.js\");\n/* harmony import */ var _barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! __barrel_optimize__?names=AlertOctagon,Archive,ChevronDown,ChevronUp,Edit,Inbox,Loader2,Mail,MessageSquare,Plus,RefreshCw,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/plus.js\");\n/* harmony import */ var _barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! __barrel_optimize__?names=AlertOctagon,Archive,ChevronDown,ChevronUp,Edit,Inbox,Loader2,Mail,MessageSquare,Plus,RefreshCw,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/refresh-cw.js\");\n/* harmony import */ var _barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! __barrel_optimize__?names=AlertOctagon,Archive,ChevronDown,ChevronUp,Edit,Inbox,Loader2,Mail,MessageSquare,Plus,RefreshCw,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/chevron-up.js\");\n/* harmony import */ var _barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! __barrel_optimize__?names=AlertOctagon,Archive,ChevronDown,ChevronUp,Edit,Inbox,Loader2,Mail,MessageSquare,Plus,RefreshCw,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/chevron-down.js\");\n/* harmony import */ var _barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! __barrel_optimize__?names=AlertOctagon,Archive,ChevronDown,ChevronUp,Edit,Inbox,Loader2,Mail,MessageSquare,Plus,RefreshCw,Send,Trash!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/loader-circle.js\");\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/button */ \"(ssr)/./components/ui/button.tsx\");\n/* harmony import */ var _components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/dropdown-menu */ \"(ssr)/./components/ui/dropdown-menu.tsx\");\n/* harmony import */ var _components_ui_tabs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/ui/tabs */ \"(ssr)/./components/ui/tabs.tsx\");\n/* harmony import */ var _components_ui_input__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/ui/input */ \"(ssr)/./components/ui/input.tsx\");\n/* harmony import */ var _components_ui_checkbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/ui/checkbox */ \"(ssr)/./components/ui/checkbox.tsx\");\n/* harmony import */ var _components_ui_label__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/ui/label */ \"(ssr)/./components/ui/label.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n\n\n\n\n\nfunction EmailSidebar({ accounts, selectedAccount, selectedFolders, currentFolder, loading, unreadCount, showAddAccountForm, showFolders = true, onFolderChange, onRefresh, onComposeNew, onAccountSelect, onShowAddAccountForm, onAddAccount, onEditAccount, onDeleteAccount, onSelectEmail, onShowFoldersToggle }) {\n const [isSaving, setIsSaving] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [formData, setFormData] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n email: '',\n password: '',\n displayName: '',\n host: '',\n port: '993',\n useSSL: true,\n smtpHost: '',\n smtpPort: '587',\n smtpUseSSL: false\n });\n const [activeTab, setActiveTab] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('imap');\n // Handle form submission\n const handleSubmit = async (e)=>{\n e.preventDefault();\n setIsSaving(true);\n try {\n await onAddAccount(formData);\n setFormData({\n email: '',\n password: '',\n displayName: '',\n host: '',\n port: '993',\n useSSL: true,\n smtpHost: '',\n smtpPort: '587',\n smtpUseSSL: false\n });\n onShowAddAccountForm(false);\n } catch (err) {\n console.error('Failed to add account:', err);\n } finally{\n setIsSaving(false);\n }\n };\n // Handle input changes\n const handleChange = (e)=>{\n const { name, value, type, checked } = e.target;\n setFormData((prev)=>({\n ...prev,\n [name]: type === 'checkbox' ? checked : value\n }));\n };\n // Get the appropriate icon for a folder\n const getFolderIcon = (folder)=>{\n const folderLower = folder.toLowerCase();\n if (folderLower.includes('inbox')) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-4 w-4 text-gray-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 122,\n columnNumber: 14\n }, this);\n } else if (folderLower.includes('sent')) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"h-4 w-4 text-gray-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 124,\n columnNumber: 14\n }, this);\n } else if (folderLower.includes('trash')) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"h-4 w-4 text-gray-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 126,\n columnNumber: 14\n }, this);\n } else if (folderLower.includes('archive')) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n className: \"h-4 w-4 text-gray-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 128,\n columnNumber: 14\n }, this);\n } else if (folderLower.includes('draft')) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n className: \"h-4 w-4 text-gray-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 130,\n columnNumber: 14\n }, this);\n } else if (folderLower.includes('spam') || folderLower.includes('junk')) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n className: \"h-4 w-4 text-gray-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 132,\n columnNumber: 14\n }, this);\n } else {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n className: \"h-4 w-4 text-gray-500\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 134,\n columnNumber: 14\n }, this);\n }\n };\n // Format folder names\n const formatFolderName = (folder)=>{\n return folder.charAt(0).toUpperCase() + folder.slice(1).toLowerCase();\n };\n // Improve the renderFolderButton function to ensure consistent handling\n const renderFolderButton = (folder, accountId)=>{\n // Ensure folder has a consistent format\n let prefixedFolder = folder;\n let baseFolderName = folder;\n let folderAccountId = accountId;\n // Extract parts if the folder has a prefix\n if (folder.includes(':')) {\n const parts = folder.split(':');\n folderAccountId = parts[0];\n baseFolderName = parts[1];\n } else {\n // Add account prefix if missing\n prefixedFolder = `${accountId}:${folder}`;\n }\n // Only show folders that belong to this account\n if (folderAccountId !== accountId) {\n return null;\n }\n // Check if this folder is selected for this account\n // Must handle both prefixed and non-prefixed versions in the selected map\n const isSelected = selectedFolders[accountId] === prefixedFolder || selectedFolders[accountId] === baseFolderName || selectedFolders[accountId]?.split(':')[1] === baseFolderName;\n // Get unread count - check all possible formats\n let folderUnreadCount = 0;\n // Check if this is an inbox folder (only show unread counts for inbox folders)\n // Use exact matching instead of includes() to avoid matching substrings in folder names\n const folderLower = baseFolderName.toLowerCase();\n const isInboxFolder = folderLower === 'inbox';\n // Only calculate unread count for inbox folders\n if (isInboxFolder && unreadCount && unreadCount[accountId]) {\n // Try the base folder name first\n if (typeof unreadCount[accountId][baseFolderName] === 'number') {\n folderUnreadCount = unreadCount[accountId][baseFolderName];\n } else if (typeof unreadCount[accountId][prefixedFolder] === 'number') {\n folderUnreadCount = unreadCount[accountId][prefixedFolder];\n } else {\n // Check for case-insensitive match\n const folderMap = unreadCount[accountId];\n for(const key in folderMap){\n if (key.toLowerCase() === baseFolderName.toLowerCase() || key.toLowerCase() === prefixedFolder.toLowerCase()) {\n folderUnreadCount = folderMap[key];\n break;\n }\n }\n }\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n variant: \"ghost\",\n className: `w-full justify-start text-xs py-1 h-7 ${isSelected ? 'bg-gray-100' : ''}`,\n onClick: ()=>{\n // Always ensure the folder name includes the account ID prefix\n const fullyPrefixedFolder = folder.includes(':') ? folder : `${accountId}:${folder}`;\n // Make sure we pass the EXACT accountId parameter here, not the folder's extracted account ID\n onFolderChange(fullyPrefixedFolder, accountId);\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center w-full\",\n children: [\n getFolderIcon(baseFolderName),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"ml-2 truncate text-gray-700\",\n children: formatFolderName(baseFolderName)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 219,\n columnNumber: 11\n }, this),\n isInboxFolder && folderUnreadCount > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"ml-auto bg-blue-500 text-white text-[10px] px-1.5 rounded-full\",\n children: folderUnreadCount\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 221,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 217,\n columnNumber: 9\n }, this)\n }, prefixedFolder, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 205,\n columnNumber: 7\n }, this);\n };\n // Add Microsoft button logic\n const handleConnectMicrosoft = async ()=>{\n try {\n const response = await fetch('/api/courrier/microsoft');\n const data = await response.json();\n if (response.ok && data.authUrl) {\n // Redirect to Microsoft's authorization page\n window.location.href = data.authUrl;\n } else {\n console.error('Failed to initiate Microsoft authentication:', data.error);\n }\n } catch (error) {\n console.error('Error connecting Microsoft account:', error);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-60 bg-white/95 backdrop-blur-sm border-r border-gray-100 flex flex-col md:flex\",\n style: {\n display: \"flex !important\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-3 border-b border-gray-100\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n className: \"h-6 w-6 text-gray-600\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 252,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xl font-semibold text-gray-900\",\n children: \"COURRIER\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 253,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 251,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 250,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-2 border-b border-gray-100 flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n className: \"flex-1 bg-blue-600 text-white rounded-lg hover:bg-blue-700 flex items-center justify-center transition-all py-1.5 text-sm\",\n onClick: onComposeNew,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n className: \"h-3.5 w-3.5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 264,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Compose\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 265,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 263,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 259,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n variant: \"ghost\",\n size: \"icon\",\n className: \"h-9 w-9 text-gray-400 hover:text-gray-600\",\n onClick: onRefresh,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n className: `h-4 w-4 ${loading ? 'animate-spin' : ''}`\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 274,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 268,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 258,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-3 border-b border-gray-100\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between mb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium text-gray-500\",\n children: \"Accounts\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 283,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n variant: \"ghost\",\n size: \"sm\",\n className: \"h-7 w-7 p-0 text-gray-400 hover:text-gray-600\",\n onClick: ()=>onShowFoldersToggle?.(showFolders ? false : true),\n children: showFolders ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 292,\n columnNumber: 19\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 294,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 285,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n variant: \"ghost\",\n size: \"sm\",\n className: \"h-7 w-7 p-0 text-gray-400 hover:text-gray-600\",\n onClick: ()=>onShowAddAccountForm(!showAddAccountForm),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 303,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 297,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 284,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 282,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1\",\n children: [\n showAddAccountForm && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-2 p-2 border border-gray-200 rounded-md bg-white\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h4\", {\n className: \"text-xs font-medium mb-0.5 text-gray-700\",\n children: \"Add IMAP Account\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 313,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: handleSubmit,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tabs__WEBPACK_IMPORTED_MODULE_4__.Tabs, {\n defaultValue: \"imap\",\n className: \"w-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tabs__WEBPACK_IMPORTED_MODULE_4__.TabsList, {\n className: \"grid w-full grid-cols-2 h-6 mb-0.5 bg-gray-100\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tabs__WEBPACK_IMPORTED_MODULE_4__.TabsTrigger, {\n value: \"imap\",\n className: \"text-xs h-5 data-[state=active]:bg-blue-500 data-[state=active]:text-white\",\n children: \"IMAP\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 318,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tabs__WEBPACK_IMPORTED_MODULE_4__.TabsTrigger, {\n value: \"smtp\",\n className: \"text-xs h-5 data-[state=active]:bg-blue-500 data-[state=active]:text-white\",\n children: \"SMTP\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 319,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 317,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tabs__WEBPACK_IMPORTED_MODULE_4__.TabsContent, {\n value: \"imap\",\n className: \"mt-0.5 space-y-0.5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_5__.Input, {\n id: \"email\",\n name: \"email\",\n placeholder: \"email@example.com\",\n className: \"h-7 text-xs bg-white border-gray-300 mb-0.5 text-gray-900\",\n required: true,\n value: formData.email,\n onChange: handleChange\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 324,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 323,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_5__.Input, {\n id: \"password\",\n name: \"password\",\n type: \"password\",\n placeholder: \"•••••••••\",\n className: \"h-7 text-xs bg-white border-gray-300 mb-0.5 text-gray-900\",\n required: true,\n value: formData.password,\n onChange: handleChange\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 335,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 334,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_5__.Input, {\n id: \"display_name\",\n name: \"displayName\",\n placeholder: \"John Doe\",\n className: \"h-7 text-xs bg-white border-gray-300 mb-0.5 text-gray-900\",\n value: formData.displayName,\n onChange: handleChange\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 347,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 346,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_5__.Input, {\n id: \"host\",\n name: \"host\",\n placeholder: \"imap.example.com\",\n className: \"h-7 text-xs bg-white border-gray-300 mb-0.5 text-gray-900\",\n required: true,\n value: formData.host,\n onChange: handleChange\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 357,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 356,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_5__.Input, {\n id: \"port\",\n name: \"port\",\n placeholder: \"993\",\n className: \"h-7 text-xs bg-white border-gray-300 text-gray-900\",\n value: formData.port,\n onChange: handleChange\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 369,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 368,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center pl-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_checkbox__WEBPACK_IMPORTED_MODULE_6__.Checkbox, {\n id: \"useSSL\",\n name: \"useSSL\",\n checked: formData.useSSL,\n onCheckedChange: (checked)=>{\n setFormData((prev)=>({\n ...prev,\n useSSL: checked === true\n }));\n }\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 380,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_label__WEBPACK_IMPORTED_MODULE_7__.Label, {\n htmlFor: \"useSSL\",\n className: \"text-xs\",\n children: \"SSL\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 391,\n columnNumber: 31\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 379,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 378,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 367,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 322,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tabs__WEBPACK_IMPORTED_MODULE_4__.TabsContent, {\n value: \"smtp\",\n className: \"mt-0.5 space-y-0.5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_5__.Input, {\n id: \"smtp_host\",\n name: \"smtpHost\",\n placeholder: \"smtp.example.com\",\n className: \"h-7 text-xs bg-white border-gray-300 mb-0.5 text-gray-900\",\n value: formData.smtpHost,\n onChange: handleChange\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 399,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 398,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_5__.Input, {\n id: \"smtp_port\",\n name: \"smtpPort\",\n placeholder: \"587\",\n className: \"h-7 text-xs bg-white border-gray-300 text-gray-900\",\n value: formData.smtpPort,\n onChange: handleChange\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 410,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 409,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center pl-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_checkbox__WEBPACK_IMPORTED_MODULE_6__.Checkbox, {\n id: \"smtp_secure\",\n name: \"smtpUseSSL\",\n checked: formData.smtpUseSSL,\n onCheckedChange: (checked)=>{\n setFormData((prev)=>({\n ...prev,\n smtpUseSSL: checked === true\n }));\n }\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 421,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_label__WEBPACK_IMPORTED_MODULE_7__.Label, {\n htmlFor: \"smtp_secure\",\n className: \"text-xs\",\n children: \"SSL\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 432,\n columnNumber: 31\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 420,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 419,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 408,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-gray-500 italic\",\n children: \"Note: SMTP settings needed for sending emails\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 436,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 397,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 316,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-1 mt-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n type: \"submit\",\n className: \"flex-1 h-6 text-xs bg-blue-500 hover:bg-blue-600 text-white rounded-md px-2 py-0\",\n disabled: isSaving,\n children: [\n isSaving ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertOctagon_Archive_ChevronDown_ChevronUp_Edit_Inbox_Loader2_Mail_MessageSquare_Plus_RefreshCw_Send_Trash_lucide_react__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n className: \"h-3 w-3 animate-spin mr-1\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 448,\n columnNumber: 37\n }, this) : null,\n \"Test & Add\"\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 443,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n type: \"button\",\n className: \"h-6 text-xs bg-gray-200 text-gray-800 hover:bg-gray-300 rounded-md px-2 py-0\",\n onClick: ()=>onShowAddAccountForm(false),\n children: \"Cancel\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 451,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 442,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 315,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 314,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 pt-2 border-t border-gray-100\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleConnectMicrosoft,\n className: \"w-full flex items-center justify-center gap-2 h-7 text-xs bg-[#0078D4] hover:bg-[#106EBE] text-white rounded-md px-2 py-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 23 23\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fill: \"#f3f3f3\",\n d: \"M0 0h23v23H0z\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 470,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fill: \"#f35325\",\n d: \"M1 1h10v10H1z\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 471,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fill: \"#81bc06\",\n d: \"M12 1h10v10H12z\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 472,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fill: \"#05a6f0\",\n d: \"M1 12h10v10H1z\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 473,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fill: \"#ffba08\",\n d: \"M12 12h10v10H12z\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 474,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 469,\n columnNumber: 21\n }, this),\n \"Connect Microsoft Account\"\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 464,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 463,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 312,\n columnNumber: 15\n }, this),\n accounts.map((account)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `flex items-center w-full px-1 py-1 rounded-md cursor-pointer ${selectedAccount?.id === account.id ? 'bg-gray-100' : ''}`,\n onClick: ()=>onAccountSelect(account),\n tabIndex: 0,\n role: \"button\",\n onKeyDown: (e)=>{\n if (e.key === 'Enter' || e.key === ' ') onAccountSelect(account);\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `w-3 h-3 rounded-full ${account.color?.startsWith('#') ? 'bg-blue-500' : account.color || 'bg-blue-500'} mr-2`\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 490,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"truncate text-gray-700 flex-1\",\n children: account.name\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 491,\n columnNumber: 19\n }, this),\n account.id !== 'loading-account' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenu, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenuTrigger, {\n asChild: true,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"ml-1 text-gray-400 hover:text-gray-600 cursor-pointer flex items-center justify-center h-5 w-5\",\n tabIndex: -1,\n onClick: (e)=>e.stopPropagation(),\n \"aria-label\": \"Account options\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n style: {\n fontSize: '18px',\n lineHeight: 1\n },\n children: \"⋮\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 503,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 496,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 495,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenuContent, {\n align: \"end\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenuItem, {\n onClick: (e)=>{\n e.stopPropagation();\n onEditAccount(account);\n },\n children: \"Edit\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 507,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenuItem, {\n onClick: (e)=>{\n e.stopPropagation();\n onDeleteAccount(account);\n },\n children: \"Delete\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 510,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 506,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 494,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 484,\n columnNumber: 17\n }, this),\n selectedAccount?.id === account.id && showFolders && account.folders && account.folders.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"pl-4\",\n children: account.folders.map((folder)=>renderFolderButton(folder, account.id.toString()))\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 519,\n columnNumber: 19\n }, this)\n ]\n }, account.id, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 483,\n columnNumber: 15\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 309,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 281,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 279,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/EmailSidebar.tsx\",\n lineNumber: 248,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL2VtYWlsL0VtYWlsU2lkZWJhci50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV3QztBQU1sQjtBQUMwQjtBQUl5RTtBQUN6QztBQUNsQztBQUNNO0FBQ047QUErQi9CLFNBQVM0QixhQUFhLEVBQ25DQyxRQUFRLEVBQ1JDLGVBQWUsRUFDZkMsZUFBZSxFQUNmQyxhQUFhLEVBQ2JDLE9BQU8sRUFDUEMsV0FBVyxFQUNYQyxrQkFBa0IsRUFDbEJDLGNBQWMsSUFBSSxFQUNsQkMsY0FBYyxFQUNkQyxTQUFTLEVBQ1RDLFlBQVksRUFDWkMsZUFBZSxFQUNmQyxvQkFBb0IsRUFDcEJDLFlBQVksRUFDWkMsYUFBYSxFQUNiQyxlQUFlLEVBQ2ZDLGFBQWEsRUFDYkMsbUJBQW1CLEVBQ0Q7SUFDbEIsTUFBTSxDQUFDQyxVQUFVQyxZQUFZLEdBQUcvQywrQ0FBUUEsQ0FBQztJQUN6QyxNQUFNLENBQUNnRCxVQUFVQyxZQUFZLEdBQUdqRCwrQ0FBUUEsQ0FBQztRQUN2Q2tELE9BQU87UUFDUEMsVUFBVTtRQUNWQyxhQUFhO1FBQ2JDLE1BQU07UUFDTkMsTUFBTTtRQUNOQyxRQUFRO1FBQ1JDLFVBQVU7UUFDVkMsVUFBVTtRQUNWQyxZQUFZO0lBQ2Q7SUFDQSxNQUFNLENBQUNDLFdBQVdDLGFBQWEsR0FBRzVELCtDQUFRQSxDQUFDO0lBRTNDLHlCQUF5QjtJQUN6QixNQUFNNkQsZUFBZSxPQUFPQztRQUMxQkEsRUFBRUMsY0FBYztRQUNoQmhCLFlBQVk7UUFDWixJQUFJO1lBQ0YsTUFBTU4sYUFBYU87WUFDbkJDLFlBQVk7Z0JBQ1ZDLE9BQU87Z0JBQ1BDLFVBQVU7Z0JBQ1ZDLGFBQWE7Z0JBQ2JDLE1BQU07Z0JBQ05DLE1BQU07Z0JBQ05DLFFBQVE7Z0JBQ1JDLFVBQVU7Z0JBQ1ZDLFVBQVU7Z0JBQ1ZDLFlBQVk7WUFDZDtZQUNBbEIscUJBQXFCO1FBQ3ZCLEVBQUUsT0FBT3dCLEtBQUs7WUFDWkMsUUFB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Ozs7QUErQ2xDIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2NvbXBvbmVudHMvZW1haWwvRW1haWxTaWRlYmFyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFxuICBJbmJveCwgU2VuZCwgVHJhc2gsIEFyY2hpdmUsIFN0YXIsIFxuICBGaWxlLCBSZWZyZXNoQ3csIFBsdXMgYXMgUGx1c0ljb24sIEVkaXQsIFxuICBDaGV2cm9uRG93biwgQ2hldnJvblVwLCBNYWlsLCBNZW51LFxuICBTZXR0aW5ncywgTG9hZGVyMiwgQWxlcnRPY3RhZ29uLCBNZXNzYWdlU3F1YXJlXG59IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJztcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnO1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSc7XG5pbXBvcnQgeyBCYWRnZSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9iYWRnZSc7XG5pbXBvcnQgeyBEcm9wZG93bk1lbnUsIERyb3Bkb3duTWVudVRyaWdnZXIsIERyb3Bkb3duTWVudUNvbnRlbnQsIERyb3Bkb3duTWVudUl0ZW0gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZHJvcGRvd24tbWVudSc7XG5pbXBvcnQgeyBUYWJzLCBUYWJzTGlzdCwgVGFic1RyaWdnZXIsIFRhYnNDb250ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3RhYnMnO1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnO1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2hlY2tib3gnO1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnO1xuXG5pbnRlcmZhY2UgQWNjb3VudCB7XG4gIGlkOiBudW1iZXIgfCBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgY29sb3I6IHN0cmluZztcbiAgZm9sZGVycz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgRW1haWxTaWRlYmFyUHJvcHMge1xuICBhY2NvdW50czogQWNjb3VudFtdO1xuICBzZWxlY3RlZEFjY291bnQ6IEFjY291bnQgfCBudWxsO1xuICBzZWxlY3RlZEZvbGRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGN1cnJlbnRGb2xkZXI6IHN0cmluZztcbiAgbG9hZGluZzogYm9vbGVhbjtcbiAgdW5yZWFkQ291bnQ6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIG51bWJlcj4+O1xuICBzaG93QWRkQWNjb3VudEZvcm06IGJvb2xlYW47XG4gIHNob3dGb2xkZXJzPzogYm9vbGVhbjtcbiAgb25Gb2xkZXJDaGFuZ2U6IChmb2xkZXI6IHN0cmluZywgYWNjb3VudElkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uUmVmcmVzaDogKCkgPT4gdm9pZDtcbiAgb25Db21wb3NlTmV3OiAoKSA9PiB2b2lkO1xuICBvbkFjY291bnRTZWxlY3Q6IChhY2NvdW50OiBBY2NvdW50KSA9PiB2b2lkO1xuICBvblNob3dBZGRBY2NvdW50Rm9ybTogKHNob3c6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIG9uQWRkQWNjb3VudDogKGZvcm1EYXRhOiBhbnkpID0+IFByb21pc2U8dm9pZD47XG4gIG9uRWRpdEFjY291bnQ6IChhY2NvdW50OiBBY2NvdW50KSA9PiB2b2lkO1xuICBvbkRlbGV0ZUFjY291bnQ6IChhY2NvdW50OiBBY2NvdW50KSA9PiB2b2lkO1xuICBvblNlbGVjdEVtYWlsPzogKGVtYWlsSWQ6IHN0cmluZywgYWNjb3VudElkOiBzdHJpbmcsIGZvbGRlcjogc3RyaW5nKSA9PiB2b2lkO1xuICBvblNob3dGb2xkZXJzVG9nZ2xlPzogKHNob3c6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVtYWlsU2lkZWJhcih7XG4gIGFjY291bnRzLFxuICBzZWxlY3RlZEFjY291bnQsXG4gIHNlbGVjdGVkRm9sZGVycyxcbiAgY3VycmVudEZvbGRlcixcbiAgbG9hZGluZyxcbiAgdW5yZWFkQ291bnQsXG4gIHNob3dBZGRBY2NvdW50Rm9ybSxcbiAgc2hvd0ZvbGRlcnMgPSB0cnVlLFxuICBvbkZvbGRlckNoYW5nZSxcbiAgb25SZWZyZXNoLFxuICBvbkNvbXBvc2VOZXcsXG4gIG9uQWNjb3VudFNlbGVjdCxcbiAgb25TaG93QWRkQWNjb3VudEZvcm0sXG4gIG9uQWRkQWNjb3VudCxcbiAgb25FZGl0QWNjb3VudCxcbiAgb25EZWxldGVBY2NvdW50LFxuICBvblNlbGVjdEVtYWlsLFxuICBvblNob3dGb2xkZXJzVG9nZ2xlXG59OiBFbWFpbFNpZGViYXJQcm9wcykge1xuICBjb25zdCBbaXNTYXZpbmcsIHNldElzU2F2aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Zvcm1EYXRhLCBzZXRGb3JtRGF0YV0gPSB1c2VTdGF0ZSh7XG4gICAgZW1haWw6ICcnLFxuICAgIHBhc3N3b3JkOiAnJyxcbiAgICBkaXNwbGF5TmFtZTogJycsXG4gICAgaG9zdDogJycsXG4gICAgcG9ydDogJzk5MycsXG4gICAgdXNlU1NMOiB0cnVlLFxuICAgIHNtdHBIb3N0OiAnJyxcbiAgICBzbXRwUG9ydDogJzU4NycsXG4gICAgc210cFVzZVNTTDogZmFsc2VcbiAgfSk7XG4gIGNvbnN0IFthY3RpdmVUYWIsIHNldEFjdGl2ZVRhYl0gPSB1c2VTdGF0ZSgnaW1hcCcpO1xuXG4gIC8vIEhhbmRsZSBmb3JtIHN1Ym1pc3Npb25cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gYXN5bmMgKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBzZXRJc1NhdmluZyh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgb25BZGRBY2NvdW50KGZvcm1EYXRhKTtcbiAgICAgIHNldEZvcm1EYXRhKHtcbiAgICAgICAgZW1haWw6ICcnLFxuICAgICAgICBwYXNzd29yZDogJycsXG4gICAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICAgICAgaG9zdDogJycsXG4gICAgICAgIHBvcnQ6ICc5OTMnLFxuICAgICAgICB1c2VTU0w6IHRydWUsXG4gICAgICAgIHNtdHBIb3N0OiAnJyxcbiAgICAgICAgc210cFBvcnQ6ICc1ODcnLFxuICAgICAgICBzbXRwVXNlU1NMOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBvblNob3dBZGRBY2NvdW50Rm9ybShmYWxzZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gYWRkIGFjY291bnQ6JywgZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNTYXZpbmcoZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICAvLyBIYW5kbGUgaW5wdXQgY2hhbmdlc1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCB7IG5hbWUsIHZhbHVlLCB0eXBlLCBjaGVja2VkIH0gPSBlLnRhcmdldDtcbiAgICBzZXRGb3JtRGF0YShwcmV2ID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgW25hbWVdOiB0eXBlID09PSAnY2hlY2tib3gnID8gY2hlY2tlZCA6IHZhbHVlXG4gICAgfSkpO1xuICB9O1xuXG4gIC8vIEdldCB0aGUgYXBwcm9wcmlhdGUgaWNvbiBmb3IgYSBmb2xkZXJcbiAgY29uc3QgZ2V0Rm9sZGVySWNvbiA9IChmb2xkZXI6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGZvbGRlckxvd2VyID0gZm9sZGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgXG4gICAgaWYgKGZvbGRlckxvd2VyLmluY2x1ZGVzKCdpbmJveCcpKSB7XG4gICAgICByZXR1cm4gPEluYm94IGNsYXNzTmFtZT1cImgtNCB3LTQgdGV4dC1ncmF5LTUwMFwiIC8+O1xuICAgIH0gZWxzZSBpZiAoZm9sZGVyTG93ZXIuaW5jbHVkZXMoJ3NlbnQnKSkge1xuICAgICAgcmV0dXJuIDxTZW5kIGNsYXNzTmFtZT1cImgtNCB3LTQgdGV4dC1ncmF5LTUwMFwiIC8+O1xuICAgIH0gZWxzZSBpZiAoZm9sZGVyTG93ZXIuaW5jbHVkZXMoJ3RyYXNoJykpIHtcbiAgICAgIHJldHVybiA8VHJhc2ggY2xhc3NOYW1lPVwiaC00IHctNCB0ZXh0LWdyYXktNTAwXCIgLz47XG4gICAgfSBlbHNlIGlmIChmb2xkZXJMb3dlci5pbmNsdWRlcygnYXJjaGl2ZScpKSB7XG4gICAgICByZXR1cm4gPEFyY2hpdmUgY2xhc3NOYW1lPVwiaC00IHctNCB0ZXh0LWdyYXktNTAwXCIgLz47XG4gICAgfSBlbHNlIGlmIChmb2xkZXJMb3dlci5pbmNsdWRlcygnZHJhZnQnKSkge1xuICAgICAgcmV0dXJuIDxFZGl0IGNsYXNzTmFtZT1cImgtNCB3LTQgdGV4dC1ncmF5LTUwMFwiIC8+O1xuICAgIH0gZWxzZSBpZiAoZm9sZGVyTG93ZXIuaW5jbHVkZXMoJ3NwYW0nKSB8fCBmb2xkZXJMb3dlci5pbmNsdWRlcygnanVuaycpKSB7XG4gICAgICByZXR1cm4gPEFsZXJ0T2N0YWdvbiBjbGFzc05hbWU9XCJoLTQgdy00IHRleHQtZ3JheS01MDBcIiAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDxNZXNzYWdlU3F1YXJlIGNsYXNzTmFtZT1cImgtNCB3LTQgdGV4dC1ncmF5LTUwMFwiIC8+O1xuICAgIH1cbiAgfTtcblxuICAvLyBGb3JtYXQgZm9sZGVyIG5hbWVzXG4gIGNvbnN0IGZvcm1hdEZvbGRlck5hbWUgPSAoZm9sZGVyOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gZm9sZGVyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZm9sZGVyLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7XG4gIH07XG5cbiAgLy8gSW1wcm92ZSB0aGUgcmVuZGVyRm9sZGVyQnV0dG9uIGZ1bmN0aW9uIHRvIGVuc3VyZSBjb25zaXN0ZW50IGhhbmRsaW5nXG4gIGNvbnN0IHJlbmRlckZvbGRlckJ1dHRvbiA9IChmb2xkZXI6IHN0cmluZywgYWNjb3VudElkOiBzdHJpbmcpID0+IHtcbiAgICAvLyBFbnN1cmUgZm9sZGVyIGhhcyBhIGNvbnNpc3RlbnQgZm9ybWF0XG4gICAgbGV0IHByZWZpeGVkRm9sZGVyID0gZm9sZGVyO1xuICAgIGxldCBiYXNlRm9sZGVyTmFtZSA9IGZvbGRlcjtcbiAgICBsZXQgZm9sZGVyQWNjb3VudElkID0gYWNjb3VudElkO1xuICAgIFxuICAgIC8vIEV4dHJhY3QgcGFydHMgaWYgdGhlIGZvbGRlciBoYXMgYSBwcmVmaXhcbiAgICBpZiAoZm9sZGVyLmluY2x1ZGVzKCc6JykpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gZm9sZGVyLnNwbGl0KCc6Jyk7XG4gICAgICBmb2xkZXJBY2NvdW50SWQgPSBwYXJ0c1swXTtcbiAgICAgIGJhc2VGb2xkZXJOYW1lID0gcGFydHNbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkZCBhY2NvdW50IHByZWZpeCBpZiBtaXNzaW5nXG4gICAgICBwcmVmaXhlZEZvbGRlciA9IGAke2FjY291bnRJZH06JHtmb2xkZXJ9YDtcbiAgICB9XG4gICAgXG4gICAgLy8gT25seSBzaG93IGZvbGRlcnMgdGhhdCBiZWxvbmcgdG8gdGhpcyBhY2NvdW50XG4gICAgaWYgKGZvbGRlckFjY291bnRJZCAhPT0gYWNjb3VudElkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBmb2xkZXIgaXMgc2VsZWN0ZWQgZm9yIHRoaXMgYWNjb3VudFxuICAgIC8vIE11c3QgaGFuZGxlIGJvdGggcHJlZml4ZWQgYW5kIG5vbi1wcmVmaXhlZCB2ZXJzaW9ucyBpbiB0aGUgc2VsZWN0ZWQgbWFwXG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IFxuICAgICAgKHNlbGVjdGVkRm9sZGVyc1thY2NvdW50SWRdID09PSBwcmVmaXhlZEZvbGRlcikgfHwgXG4gICAgICAoc2VsZWN0ZWRGb2xkZXJzW2FjY291bnRJZF0gPT09IGJhc2VGb2xkZXJOYW1lKSB8fFxuICAgICAgKHNlbGVjdGVkRm9sZGVyc1thY2NvdW50SWRdPy5zcGxpdCgnOicpWzFdID09PSBiYXNlRm9sZGVyTmFtZSk7XG4gICAgXG4gICAgLy8gR2V0IHVucmVhZCBjb3VudCAtIGNoZWNrIGFsbCBwb3NzaWJsZSBmb3JtYXRzXG4gICAgbGV0IGZvbGRlclVucmVhZENvdW50ID0gMDtcbiAgICBcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGluYm94IGZvbGRlciAob25seSBzaG93IHVucmVhZCBjb3VudHMgZm9yIGluYm94IGZvbGRlcnMpXG4gICAgLy8gVXNlIGV4YWN0IG1hdGNoaW5nIGluc3RlYWQgb2YgaW5jbHVkZXMoKSB0byBhdm9pZCBtYXRjaGluZyBzdWJzdHJpbmdzIGluIGZvbGRlciBuYW1lc1xuICAgIGNvbnN0IGZvbGRlckxvd2VyID0gYmFzZUZvbGRlck5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBpc0luYm94Rm9sZGVyID0gZm9sZGVyTG93ZXIgPT09ICdpbmJveCc7XG4gICAgXG4gICAgLy8gT25seSBjYWxjdWxhdGUgdW5yZWFkIGNvdW50IGZvciBpbmJveCBmb2xkZXJzXG4gICAgaWYgKGlzSW5ib3hGb2xkZXIgJiYgdW5yZWFkQ291bnQgJiYgdW5yZWFkQ291bnRbYWNjb3VudElkXSkge1xuICAgICAgLy8gVHJ5IHRoZSBiYXNlIGZvbGRlciBuYW1lIGZpcnN0XG4gICAgICBpZiAodHlwZW9mIHVucmVhZENvdW50W2FjY291bnRJZF1bYmFzZUZvbGRlck5hbWVdID09PSAnbnVtYmVyJykge1xuICAgICAgICBmb2xkZXJVbnJlYWRDb3VudCA9IHVucmVhZENvdW50W2FjY291bnRJZF1bYmFzZUZvbGRlck5hbWVdO1xuICAgICAgfVxuICAgICAgLy8gVGhlbiB0cnkgdGhlIHByZWZpeGVkIGZvbGRlciBuYW1lXG4gICAgICBlbHNlIGlmICh0eXBlb2YgdW5yZWFkQ291bnRbYWNjb3VudElkXVtwcmVmaXhlZEZvbGRlcl0gPT09ICdudW1iZXInKSB7XG4gICAgICAgIGZvbGRlclVucmVhZENvdW50ID0gdW5yZWFkQ291bnRbYWNjb3VudElkXVtwcmVmaXhlZEZvbGRlcl07XG4gICAgICB9XG4gICAgICAvLyBGaW5hbGx5IHRyeSB3aXRoIHVwcGVyY2FzZS9sb3dlcmNhc2UgdmFyaWF0aW9uc1xuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIENoZWNrIGZvciBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoXG4gICAgICAgIGNvbnN0IGZvbGRlck1hcCA9IHVucmVhZENvdW50W2FjY291bnRJZF07XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGZvbGRlck1hcCkge1xuICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gYmFzZUZvbGRlck5hbWUudG9Mb3dlckNhc2UoKSB8fCBcbiAgICAgICAgICAgICAga2V5LnRvTG93ZXJDYXNlKCkgPT09IHByZWZpeGVkRm9sZGVyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGZvbGRlclVucmVhZENvdW50ID0gZm9sZGVyTWFwW2tleV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIChcbiAgICAgIDxCdXR0b25cbiAgICAgICAga2V5PXtwcmVmaXhlZEZvbGRlcn1cbiAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIGp1c3RpZnktc3RhcnQgdGV4dC14cyBweS0xIGgtNyAke2lzU2VsZWN0ZWQgPyAnYmctZ3JheS0xMDAnIDogJyd9YH1cbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBlbnN1cmUgdGhlIGZvbGRlciBuYW1lIGluY2x1ZGVzIHRoZSBhY2NvdW50IElEIHByZWZpeFxuICAgICAgICAgIGNvbnN0IGZ1bGx5UHJlZml4ZWRGb2xkZXIgPSBmb2xkZXIuaW5jbHVkZXMoJzonKSA/IGZvbGRlciA6IGAke2FjY291bnRJZH06JHtmb2xkZXJ9YDtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgcGFzcyB0aGUgRVhBQ1QgYWNjb3VudElkIHBhcmFtZXRlciBoZXJlLCBub3QgdGhlIGZvbGRlcidzIGV4dHJhY3RlZCBhY2NvdW50IElEXG4gICAgICAgICAgb25Gb2xkZXJDaGFuZ2UoZnVsbHlQcmVmaXhlZEZvbGRlciwgYWNjb3VudElkKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciB3LWZ1bGxcIj5cbiAgICAgICAgICB7Z2V0Rm9sZGVySWNvbihiYXNlRm9sZGVyTmFtZSl9XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWwtMiB0cnVuY2F0ZSB0ZXh0LWdyYXktNzAwXCI+e2Zvcm1hdEZvbGRlck5hbWUoYmFzZUZvbGRlck5hbWUpfTwvc3Bhbj5cbiAgICAgICAgICB7aXNJbmJveEZvbGRlciAmJiBmb2xkZXJVbnJlYWRDb3VudCA+IDAgJiYgKFxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWwtYXV0byBiZy1ibHVlLTUwMCB0ZXh0LXdoaXRlIHRleHQtWzEwcHhdIHB4LTEuNSByb3VuZGVkLWZ1bGxcIj5cbiAgICAgICAgICAgICAge2ZvbGRlclVucmVhZENvdW50fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9CdXR0b24+XG4gICAgKTtcbiAgfTtcblxuICAvLyBBZGQgTWljcm9zb2Z0IGJ1dHRvbiBsb2dpY1xuICBjb25zdCBoYW5kbGVDb25uZWN0TWljcm9zb2Z0ID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL2NvdXJyaWVyL21pY3Jvc29mdCcpO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIFxuICAgICAgaWYgKHJlc3BvbnNlLm9rICYmIGRhdGEuYXV0aFVybCkge1xuICAgICAgICAvLyBSZWRpcmVjdCB0byBNaWNyb3NvZnQncyBhdXRob3JpemF0aW9uIHBhZ2VcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBkYXRhLmF1dGhVcmw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gaW5pdGlhdGUgTWljcm9zb2Z0IGF1dGhlbnRpY2F0aW9uOicsIGRhdGEuZXJyb3IpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjb25uZWN0aW5nIE1pY3Jvc29mdCBhY2NvdW50OicsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInctNjAgYmctd2hpdGUvOTUgYmFja2Ryb3AtYmx1ci1zbSBib3JkZXItciBib3JkZXItZ3JheS0xMDAgZmxleCBmbGV4LWNvbCBtZDpmbGV4XCIgc3R5bGU9e3tkaXNwbGF5OiBcImZsZXggIWltcG9ydGFudFwifX0+XG4gICAgICB7LyogQ291cnJpZXIgVGl0bGUgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtMyBib3JkZXItYiBib3JkZXItZ3JheS0xMDBcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgIDxNYWlsIGNsYXNzTmFtZT1cImgtNiB3LTYgdGV4dC1ncmF5LTYwMFwiIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14bCBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDBcIj5DT1VSUklFUjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIENvbXBvc2UgYnV0dG9uIGFuZCByZWZyZXNoIGJ1dHRvbiAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC0yIGJvcmRlci1iIGJvcmRlci1ncmF5LTEwMCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICA8QnV0dG9uIFxuICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBiZy1ibHVlLTYwMCB0ZXh0LXdoaXRlIHJvdW5kZWQtbGcgaG92ZXI6YmctYmx1ZS03MDAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdHJhbnNpdGlvbi1hbGwgcHktMS41IHRleHQtc21cIlxuICAgICAgICAgIG9uQ2xpY2s9e29uQ29tcG9zZU5ld31cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxQbHVzSWNvbiBjbGFzc05hbWU9XCJoLTMuNSB3LTMuNVwiIC8+XG4gICAgICAgICAgICA8c3Bhbj5Db21wb3NlPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPEJ1dHRvbiBcbiAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIiBcbiAgICAgICAgICBzaXplPVwiaWNvblwiXG4gICAgICAgICAgY2xhc3NOYW1lPVwiaC05IHctOSB0ZXh0LWdyYXktNDAwIGhvdmVyOnRleHQtZ3JheS02MDBcIlxuICAgICAgICAgIG9uQ2xpY2s9e29uUmVmcmVzaH1cbiAgICAgICAgPlxuICAgICAgICAgIDxSZWZyZXNoQ3cgY2xhc3NOYW1lPXtgaC00IHctNCAke2xvYWRpbmcgPyAnYW5pbWF0ZS1zcGluJyA6ICcnfWB9IC8+XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBTY3JvbGxhYmxlIGFyZWEgZm9yIGFjY291bnRzIGFuZCBmb2xkZXJzICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgIHsvKiBBY2NvdW50cyBTZWN0aW9uICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtMyBib3JkZXItYiBib3JkZXItZ3JheS0xMDBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBtYi0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS01MDBcIj5BY2NvdW50czwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTcgdy03IHAtMCB0ZXh0LWdyYXktNDAwIGhvdmVyOnRleHQtZ3JheS02MDBcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uU2hvd0ZvbGRlcnNUb2dnbGU/LihzaG93Rm9sZGVycyA/IGZhbHNlIDogdHJ1ZSl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7c2hvd0ZvbGRlcnMgPyAoXG4gICAgICAgICAgICAgICAgICA8Q2hldnJvblVwIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC03IHctNyBwLTAgdGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LWdyYXktNjAwXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvblNob3dBZGRBY2NvdW50Rm9ybSghc2hvd0FkZEFjY291bnRGb3JtKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxQbHVzSWNvbiBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBcbiAgICAgICAgICB7LyogRGlzcGxheSBhbGwgYWNjb3VudHMgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xXCI+XG4gICAgICAgICAgICB7LyogRm9ybSBmb3IgYWRkaW5nIGEgbmV3IGFjY291bnQgLSBDb250ZW50IGlzIGlkZW50aWNhbCB0byBjb3VycmllciBwYWdlICovfVxuICAgICAgICAgICAge3Nob3dBZGRBY2NvdW50Rm9ybSAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItMiBwLTIgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkLW1kIGJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1tZWRpdW0gbWItMC41IHRleHQtZ3JheS03MDBcIj5BZGQgSU1BUCBBY2NvdW50PC9oND5cbiAgICAgICAgICAgICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJzIGRlZmF1bHRWYWx1ZT1cImltYXBcIiBjbGFzc05hbWU9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFic0xpc3QgY2xhc3NOYW1lPVwiZ3JpZCB3LWZ1bGwgZ3JpZC1jb2xzLTIgaC02IG1iLTAuNSBiZy1ncmF5LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYnNUcmlnZ2VyIHZhbHVlPVwiaW1hcFwiIGNsYXNzTmFtZT1cInRleHQteHMgaC01IGRhdGEtW3N0YXRlPWFjdGl2ZV06YmctYmx1ZS01MDAgZGF0YS1bc3RhdGU9YWN0aXZlXTp0ZXh0LXdoaXRlXCI+SU1BUDwvVGFic1RyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFic1RyaWdnZXIgdmFsdWU9XCJzbXRwXCIgY2xhc3NOYW1lPVwidGV4dC14cyBoLTUgZGF0YS1bc3RhdGU9YWN0aXZlXTpiZy1ibHVlLTUwMCBkYXRhLVtzdGF0ZT1hY3RpdmVdOnRleHQtd2hpdGVcIj5TTVRQPC9UYWJzVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYnNMaXN0PlxuICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJzQ29udGVudCB2YWx1ZT1cImltYXBcIiBjbGFzc05hbWU9XCJtdC0wLjUgc3BhY2UteS0wLjVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImVtYWlsXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImVtYWlsXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlbWFpbEBleGFtcGxlLmNvbVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtNyB0ZXh0LXhzIGJnLXdoaXRlIGJvcmRlci1ncmF5LTMwMCBtYi0wLjUgdGV4dC1ncmF5LTkwMFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtRGF0YS5lbWFpbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwYXNzd29yZFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJwYXNzd29yZFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi4oCi4oCi4oCi4oCi4oCi4oCi4oCi4oCi4oCiXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC03IHRleHQteHMgYmctd2hpdGUgYm9yZGVyLWdyYXktMzAwIG1iLTAuNSB0ZXh0LWdyYXktOTAwXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1EYXRhLnBhc3N3b3JkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImRpc3BsYXlfbmFtZVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJkaXNwbGF5TmFtZVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSm9obiBEb2VcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTcgdGV4dC14cyBiZy13aGl0ZSBib3JkZXItZ3JheS0zMDAgbWItMC41IHRleHQtZ3JheS05MDBcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Zm9ybURhdGEuZGlzcGxheU5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiaG9zdFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJob3N0XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJpbWFwLmV4YW1wbGUuY29tXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC03IHRleHQteHMgYmctd2hpdGUgYm9yZGVyLWdyYXktMzAwIG1iLTAuNSB0ZXh0LWdyYXktOTAwXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1EYXRhLmhvc3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwb3J0XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicG9ydFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCI5OTNcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtNyB0ZXh0LXhzIGJnLXdoaXRlIGJvcmRlci1ncmF5LTMwMCB0ZXh0LWdyYXktOTAwXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Zm9ybURhdGEucG9ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgcGwtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3ggXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwidXNlU1NMXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ1c2VTU0xcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Zm9ybURhdGEudXNlU1NMfSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoY2hlY2tlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvcm1EYXRhKHByZXYgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VTU0w6IGNoZWNrZWQgPT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwidXNlU1NMXCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlNTTDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9UYWJzQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICA8VGFic0NvbnRlbnQgdmFsdWU9XCJzbXRwXCIgY2xhc3NOYW1lPVwibXQtMC41IHNwYWNlLXktMC41XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzbXRwX2hvc3RcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic210cEhvc3RcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInNtdHAuZXhhbXBsZS5jb21cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTcgdGV4dC14cyBiZy13aGl0ZSBib3JkZXItZ3JheS0zMDAgbWItMC41IHRleHQtZ3JheS05MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtRGF0YS5zbXRwSG9zdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNtdHBfcG9ydFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInNtdHBQb3J0XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjU4N1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC03IHRleHQteHMgYmctd2hpdGUgYm9yZGVyLWdyYXktMzAwIHRleHQtZ3JheS05MDBcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtRGF0YS5zbXRwUG9ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgcGwtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3ggXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic210cF9zZWN1cmVcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInNtdHBVc2VTU0xcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Zm9ybURhdGEuc210cFVzZVNTTH0gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb3JtRGF0YShwcmV2ID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cFVzZVNTTDogY2hlY2tlZCA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJzbXRwX3NlY3VyZVwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5TU0w8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtZ3JheS01MDAgaXRhbGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGU6IFNNVFAgc2V0dGluZ3MgbmVlZGVkIGZvciBzZW5kaW5nIGVtYWlsc1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9UYWJzQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9UYWJzPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0xIG10LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBoLTYgdGV4dC14cyBiZy1ibHVlLTUwMCBob3ZlcjpiZy1ibHVlLTYwMCB0ZXh0LXdoaXRlIHJvdW5kZWQtbWQgcHgtMiBweS0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1NhdmluZ31cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNTYXZpbmcgPyA8TG9hZGVyMiBjbGFzc05hbWU9XCJoLTMgdy0zIGFuaW1hdGUtc3BpbiBtci0xXCIgLz4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAmIEFkZFxuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC02IHRleHQteHMgYmctZ3JheS0yMDAgdGV4dC1ncmF5LTgwMCBob3ZlcjpiZy1ncmF5LTMwMCByb3VuZGVkLW1kIHB4LTIgcHktMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvblNob3dBZGRBY2NvdW50Rm9ybShmYWxzZSl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHsvKiBBZGQgTWljcm9zb2Z0IG9wdGlvbiAqL31cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTIgcHQtMiBib3JkZXItdCBib3JkZXItZ3JheS0xMDBcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbm5lY3RNaWNyb3NvZnR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBoLTcgdGV4dC14cyBiZy1bIzAwNzhENF0gaG92ZXI6YmctWyMxMDZFQkVdIHRleHQtd2hpdGUgcm91bmRlZC1tZCBweC0yIHB5LTBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIzIDIzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIiNmM2YzZjNcIiBkPVwiTTAgMGgyM3YyM0gwelwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIiNmMzUzMjVcIiBkPVwiTTEgMWgxMHYxMEgxelwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIiM4MWJjMDZcIiBkPVwiTTEyIDFoMTB2MTBIMTJ6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzA1YTZmMFwiIGQ9XCJNMSAxMmgxMHYxMEgxelwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIiNmZmJhMDhcIiBkPVwiTTEyIDEyaDEwdjEwSDEyelwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICBDb25uZWN0IE1pY3Jvc29mdCBBY2NvdW50XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB7YWNjb3VudHMubWFwKChhY2NvdW50KSA9PiAoXG4gICAgICAgICAgICAgIDxkaXYga2V5PXthY2NvdW50LmlkfSBjbGFzc05hbWU9XCJtYi0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BmbGV4IGl0ZW1zLWNlbnRlciB3LWZ1bGwgcHgtMSBweS0xIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgJHtzZWxlY3RlZEFjY291bnQ/LmlkID09PSBhY2NvdW50LmlkID8gJ2JnLWdyYXktMTAwJyA6ICcnfWB9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkFjY291bnRTZWxlY3QoYWNjb3VudCl9XG4gICAgICAgICAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXtlID0+IHsgaWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIG9uQWNjb3VudFNlbGVjdChhY2NvdW50KTsgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YHctMyBoLTMgcm91bmRlZC1mdWxsICR7YWNjb3VudC5jb2xvcj8uc3RhcnRzV2l0aCgnIycpID8gJ2JnLWJsdWUtNTAwJyA6IGFjY291bnQuY29sb3IgfHwgJ2JnLWJsdWUtNTAwJ30gbXItMmB9PjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidHJ1bmNhdGUgdGV4dC1ncmF5LTcwMCBmbGV4LTFcIj57YWNjb3VudC5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIHsvKiBNb3JlIG9wdGlvbnMgYnV0dG9uICjii64pICovfVxuICAgICAgICAgICAgICAgICAge2FjY291bnQuaWQgIT09ICdsb2FkaW5nLWFjY291bnQnICYmIChcbiAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTWVudT5cbiAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd25NZW51VHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWwtMSB0ZXh0LWdyYXktNDAwIGhvdmVyOnRleHQtZ3JheS02MDAgY3Vyc29yLXBvaW50ZXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC01IHctNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQWNjb3VudCBvcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6ICcxOHB4JywgbGluZUhlaWdodDogMSB9fT7ii648L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTWVudVRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTWVudUNvbnRlbnQgYWxpZ249XCJlbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bk1lbnVJdGVtIG9uQ2xpY2s9e2UgPT4geyBlLnN0b3BQcm9wYWdhdGlvbigpOyBvbkVkaXRBY2NvdW50KGFjY291bnQpOyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bk1lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTWVudUl0ZW0gb25DbGljaz17ZSA9PiB7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IG9uRGVsZXRlQWNjb3VudChhY2NvdW50KTsgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bk1lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51Q29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bk1lbnU+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIHsvKiBTaG93IGZvbGRlcnMgZm9yIGVhY2ggYWNjb3VudCB3aGVuIHNlbGVjdGVkIGFuZCB3aGVuIGZvbGRlcnMgYXJlIHZpc2libGUgKi99XG4gICAgICAgICAgICAgICAge3NlbGVjdGVkQWNjb3VudD8uaWQgPT09IGFjY291bnQuaWQgJiYgc2hvd0ZvbGRlcnMgJiYgYWNjb3VudC5mb2xkZXJzICYmIGFjY291bnQuZm9sZGVycy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGwtNFwiPlxuICAgICAgICAgICAgICAgICAgICB7YWNjb3VudC5mb2xkZXJzLm1hcCgoZm9sZGVyOiBzdHJpbmcpID0+IHJlbmRlckZvbGRlckJ1dHRvbihmb2xkZXIsIGFjY291bnQuaWQudG9TdHJpbmcoKSkpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn0gIl0sIm5hbWVzIjpbIlJlYWN0IiwidXNlU3RhdGUiLCJJbmJveCIsIlNlbmQiLCJUcmFzaCIsIkFyY2hpdmUiLCJSZWZyZXNoQ3ciLCJQbHVzIiwiUGx1c0ljb24iLCJFZGl0IiwiQ2hldnJvbkRvd24iLCJDaGV2cm9uVXAiLCJNYWlsIiwiTG9hZGVyMiIsIkFsZXJ0T2N0YWdvbiIsIk1lc3NhZ2VTcXVhcmUiLCJCdXR0b24iLCJEcm9wZG93bk1lbnUiLCJEcm9wZG93bk1lbnVUcmlnZ2VyIiwiRHJvcGRvd25NZW51Q29udGVudCIsIkRyb3Bkb3duTWVudUl0ZW0iLCJUYWJzIiwiVGFic0xpc3QiLCJUYWJzVHJpZ2dlciIsIlRhYnNDb250ZW50IiwiSW5wdXQiLCJDaGVja2JveCIsIkxhYmVsIiwiRW1haWxTaWRlYmFyIiwiYWNjb3VudHMiLCJzZWxlY3RlZEFjY291bnQiLCJzZWxlY3RlZEZvbGRlcnMiLCJjdXJyZW50Rm9sZGVyIiwibG9hZGluZyIsInVucmVhZENvdW50Iiwic2hvd0FkZEFjY291bnRGb3JtIiwic2hvd0ZvbGRlcnMiLCJvbkZvbGRlckNoYW5nZSIsIm9uUmVmcmVzaCIsIm9uQ29tcG9zZU5ldyIsIm9uQWNjb3VudFNlbGVjdCIsIm9uU2hvd0FkZEFjY291bnRGb3JtIiwib25BZGRBY2NvdW50Iiwib25FZGl0QWNjb3VudCIsIm9uRGVsZXRlQWNjb3VudCIsIm9uU2VsZWN0RW1haWwiLCJvblNob3dGb2xkZXJzVG9nZ2xlIiwiaXNTYXZpbmciLCJzZXRJc1NhdmluZyIsImZvcm1EYXRhIiwic2V0Rm9ybURhdGEiLCJlbWFpbCIsInBhc3N3b3JkIiwiZGlzcGxheU5hbWUiLCJob3N0IiwicG9ydCIsInVzZVNTTCIsInNtdHBIb3N0Iiwic210cFBvcnQiLCJzbXRwVXNlU1NMIiwiYWN0aXZlVGFiIiwic2V0QWN0aXZlVGFiIiwiaGFuZGxlU3VibWl0IiwiZSIsInByZXZlbnREZWZhdWx0IiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwiaGFuZGxlQ2hhbmdlIiwibmFtZSIsInZhbHVlIiwidHlwZSIsImNoZWNrZWQiLCJ0YXJnZXQiLCJwcmV2IiwiZ2V0Rm9sZGVySWNvbiIsImZvbGRlciIsImZvbGRlckxvd2VyIiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsImNsYXNzTmFtZSIsImZvcm1hdEZvbGRlck5hbWUiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwicmVuZGVyRm9sZGVyQnV0dG9uIiwiYWNjb3VudElkIiwicHJlZml4ZWRGb2xkZXIiLCJiYXNlRm9sZGVyTmFtZSIsImZvbGRlckFjY291bnRJZCIsInBhcnRzIiwic3BsaXQiLCJpc1NlbGVjdGVkIiwiZm9sZGVyVW5yZWFkQ291bnQiLCJpc0luYm94Rm9sZGVyIiwiZm9sZGVyTWFwIiwia2V5IiwidmFyaWFudCIsIm9uQ2xpY2siLCJmdWxseVByZWZpeGVkRm9sZGVyIiwiZGl2Iiwic3BhbiIsImhhbmRsZUNvbm5lY3RNaWNyb3NvZnQiLCJyZXNwb25zZSIsImZldGNoIiwiZGF0YSIsImpzb24iLCJvayIsImF1dGhVcmwiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJzdHlsZSIsImRpc3BsYXkiLCJzaXplIiwiaDQiLCJmb3JtIiwib25TdWJtaXQiLCJkZWZhdWx0VmFsdWUiLCJpZCIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJvbkNoYW5nZSIsIm9uQ2hlY2tlZENoYW5nZSIsImh0bWxGb3IiLCJkaXNhYmxlZCIsImJ1dHRvbiIsInN2ZyIsInhtbG5zIiwid2lkdGgiLCJoZWlnaHQiLCJ2aWV3Qm94IiwicGF0aCIsImZpbGwiLCJkIiwibWFwIiwiYWNjb3VudCIsInRhYkluZGV4Iiwicm9sZSIsIm9uS2V5RG93biIsImNvbG9yIiwic3RhcnRzV2l0aCIsImFzQ2hpbGQiLCJzdG9wUHJvcGFnYXRpb24iLCJhcmlhLWxhYmVsIiwiZm9udFNpemUiLCJsaW5lSGVpZ2h0IiwiYWxpZ24iLCJmb2xkZXJzIiwibGVuZ3RoIiwidG9TdHJpbmciXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/email/EmailSidebar.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/email/RichEmailEditor.tsx":
|
|
/*!**********************************************!*\
|
|
!*** ./components/email/RichEmailEditor.tsx ***!
|
|
\**********************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var styled_jsx_style__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! styled-jsx/style */ \"(ssr)/./node_modules/styled-jsx/style.js\");\n/* harmony import */ var styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(styled_jsx_style__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var quill_dist_quill_snow_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! quill/dist/quill.snow.css */ \"(ssr)/./node_modules/quill/dist/quill.snow.css\");\n/* harmony import */ var _lib_utils_dom_purify_config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/lib/utils/dom-purify-config */ \"(ssr)/./lib/utils/dom-purify-config.ts\");\n/* harmony import */ var _lib_utils_text_direction__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/lib/utils/text-direction */ \"(ssr)/./lib/utils/text-direction.ts\");\n/* harmony import */ var _lib_utils_email_content__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/lib/utils/email-content */ \"(ssr)/./lib/utils/email-content.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n\n\n\nconst RichEmailEditor = ({ initialContent, onChange, placeholder = 'Write your message here...', minHeight = '200px', maxHeight = 'calc(100vh - 400px)', preserveFormatting = false })=>{\n const editorRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(null);\n const toolbarRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(null);\n const quillRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(null);\n const [isReady, setIsReady] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(false);\n // Initialize Quill editor when component mounts\n (0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)({\n \"RichEmailEditor.useEffect\": ()=>{\n // Import Quill dynamically (client-side only)\n const initializeQuill = {\n \"RichEmailEditor.useEffect.initializeQuill\": async ()=>{\n if (!editorRef.current || !toolbarRef.current) return;\n const Quill = (await Promise.all(/*! import() */[__webpack_require__.e(\"vendor-chunks/quill\"), __webpack_require__.e(\"vendor-chunks/lodash-es\"), __webpack_require__.e(\"vendor-chunks/lodash.isequal\"), __webpack_require__.e(\"vendor-chunks/lodash.clonedeep\"), __webpack_require__.e(\"vendor-chunks/fast-diff\"), __webpack_require__.e(\"vendor-chunks/parchment\"), __webpack_require__.e(\"vendor-chunks/quill-delta\")]).then(__webpack_require__.bind(__webpack_require__, /*! quill */ \"(ssr)/./node_modules/quill/quill.js\"))).default;\n // Import quill-better-table\n let tableModule = null;\n try {\n const QuillBetterTable = await Promise.all(/*! import() */[__webpack_require__.e(\"vendor-chunks/quill\"), __webpack_require__.e(\"vendor-chunks/lodash-es\"), __webpack_require__.e(\"vendor-chunks/lodash.isequal\"), __webpack_require__.e(\"vendor-chunks/lodash.clonedeep\"), __webpack_require__.e(\"vendor-chunks/fast-diff\"), __webpack_require__.e(\"vendor-chunks/parchment\"), __webpack_require__.e(\"vendor-chunks/quill-delta\"), __webpack_require__.e(\"vendor-chunks/quill-better-table\")]).then(__webpack_require__.t.bind(__webpack_require__, /*! quill-better-table */ \"(ssr)/./node_modules/quill-better-table/dist/quill-better-table.js\", 23));\n // Register the table module if available\n if (QuillBetterTable && QuillBetterTable.default) {\n Quill.register({\n 'modules/better-table': QuillBetterTable.default\n }, true);\n tableModule = QuillBetterTable.default;\n console.log('Better Table module registered successfully');\n }\n } catch (err) {\n console.warn('Table module not available:', err);\n }\n // Define custom formats/modules with table support\n const emailToolbarOptions = [\n [\n 'bold',\n 'italic',\n 'underline',\n 'strike'\n ],\n [\n {\n 'color': []\n },\n {\n 'background': []\n }\n ],\n [\n {\n 'list': 'ordered'\n },\n {\n 'list': 'bullet'\n }\n ],\n [\n {\n 'indent': '-1'\n },\n {\n 'indent': '+1'\n }\n ],\n [\n {\n 'align': []\n }\n ],\n [\n {\n 'direction': 'rtl'\n }\n ],\n [\n 'link'\n ],\n [\n 'clean'\n ]\n ];\n // Create new Quill instance with the DOM element and custom toolbar\n const editorElement = editorRef.current;\n quillRef.current = new Quill(editorElement, {\n modules: {\n toolbar: {\n container: toolbarRef.current,\n handlers: {\n }\n },\n clipboard: {\n matchVisual: false // Disable clipboard matching for better HTML handling\n },\n // Don't initialize better-table yet - we'll do it after content is loaded\n 'better-table': false\n },\n placeholder: placeholder,\n theme: 'snow'\n });\n // Set initial content properly\n if (initialContent) {\n try {\n console.log('Setting initial content in editor', {\n length: initialContent.length,\n startsWithHtml: initialContent.trim().startsWith('<'),\n containsForwardedMessage: initialContent.includes('---------- Forwarded message ----------'),\n containsReplyIndicator: initialContent.includes('wrote:'),\n hasBlockquote: initialContent.includes('<blockquote')\n });\n // Detect text direction\n const direction = (0,_lib_utils_text_direction__WEBPACK_IMPORTED_MODULE_5__.detectTextDirection)(initialContent);\n // Check if content already appears to be properly formatted as a reply or forward\n const isPreFormattedContent = (initialContent.includes('---------- Forwarded message ----------') || initialContent.includes('wrote:')) && initialContent.includes('<blockquote');\n // Process HTML content using centralized utility or use as-is if pre-formatted\n let sanitizedContent;\n if (isPreFormattedContent) {\n console.log('Content appears to be pre-formatted as reply/forward, using as-is');\n // Just do basic sanitization without additional processing\n sanitizedContent = (0,_lib_utils_dom_purify_config__WEBPACK_IMPORTED_MODULE_4__.sanitizeHtml)(initialContent);\n } else {\n // Full processing for regular content\n sanitizedContent = (0,_lib_utils_email_content__WEBPACK_IMPORTED_MODULE_6__.processHtmlContent)(initialContent);\n }\n // Log sanitized content details for debugging\n console.log('Sanitized content details:', {\n length: sanitizedContent.length,\n isEmpty: sanitizedContent.trim().length === 0,\n startsWithDiv: sanitizedContent.trim().startsWith('<div'),\n containsForwardedMessage: sanitizedContent.includes('---------- Forwarded message ----------'),\n containsQuoteHeader: sanitizedContent.includes('wrote:'),\n hasTable: sanitizedContent.includes('<table'),\n hasBlockquote: sanitizedContent.includes('<blockquote'),\n firstNChars: sanitizedContent.substring(0, 100).replace(/\\n/g, '\\\\n')\n });\n // Check if sanitized content is valid\n if (sanitizedContent.trim().length === 0) {\n console.warn('Sanitized content is empty after processing, using fallback approach');\n // Try to extract text content if HTML processing failed\n try {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = initialContent;\n const textContent = tempDiv.textContent || tempDiv.innerText || 'Empty content';\n // Set text directly to ensure something displays\n quillRef.current.setText(textContent);\n } catch (e) {\n console.error('Text extraction fallback failed:', e);\n quillRef.current.setText('Error loading content');\n }\n } else {\n // Use direct innerHTML setting for the initial content\n quillRef.current.root.innerHTML = sanitizedContent;\n // Set the direction for the content\n if (quillRef.current && quillRef.current.format) {\n quillRef.current.format('direction', direction);\n if (direction === 'rtl') {\n quillRef.current.format('align', 'right');\n }\n } else {\n console.warn('Cannot format content: editor not fully initialized');\n }\n }\n // Set cursor at the beginning\n quillRef.current.setSelection(0, 0);\n // Ensure the cursor and scroll position is at the top of the editor\n if (editorRef.current) {\n editorRef.current.scrollTop = 0;\n // Find and scroll parent containers that might have scroll\n const scrollable = [\n editorRef.current.closest('.ql-container'),\n editorRef.current.closest('.rich-email-editor-container'),\n editorRef.current.closest('.overflow-y-auto'),\n document.querySelector('.overflow-y-auto')\n ];\n scrollable.forEach({\n \"RichEmailEditor.useEffect.initializeQuill\": (el)=>{\n if (el instanceof HTMLElement) {\n el.scrollTop = 0;\n }\n }\n }[\"RichEmailEditor.useEffect.initializeQuill\"]);\n }\n } catch (err) {\n console.error('Error setting initial content:', err);\n // Enhanced fallback mechanism for complex content\n try {\n // First try to extract text from HTML\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = initialContent;\n const textContent = tempDiv.textContent || tempDiv.innerText || '';\n if (textContent.trim()) {\n console.log('Using extracted text fallback, length:', textContent.length);\n quillRef.current.setText(textContent);\n } else {\n // If text extraction fails or returns empty, provide a message\n console.log('Using empty content fallback');\n quillRef.current.setText('Unable to load original content');\n }\n } catch (e) {\n console.error('All fallbacks failed:', e);\n quillRef.current.setText('Error loading content');\n }\n }\n }\n // Add change listener\n quillRef.current.on('text-change', {\n \"RichEmailEditor.useEffect.initializeQuill\": ()=>{\n const html = quillRef.current.root.innerHTML;\n onChange(html);\n }\n }[\"RichEmailEditor.useEffect.initializeQuill\"]);\n // Improve editor layout\n const editorContainer = editorElement.closest('.ql-container');\n if (editorContainer) {\n editorContainer.classList.add('email-editor-container');\n }\n setIsReady(true);\n }\n }[\"RichEmailEditor.useEffect.initializeQuill\"];\n initializeQuill().catch({\n \"RichEmailEditor.useEffect\": (err)=>{\n console.error('Failed to initialize Quill editor:', err);\n }\n }[\"RichEmailEditor.useEffect\"]);\n // Clean up on unmount\n return ({\n \"RichEmailEditor.useEffect\": ()=>{\n if (quillRef.current) {\n // Clean up any event listeners or resources\n quillRef.current.off('text-change');\n }\n }\n })[\"RichEmailEditor.useEffect\"];\n }\n }[\"RichEmailEditor.useEffect\"], []);\n // Update content from props if changed externally - using a simpler approach\n (0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)({\n \"RichEmailEditor.useEffect\": ()=>{\n if (quillRef.current && isReady && initialContent) {\n const currentContent = quillRef.current.root.innerHTML;\n // Only update if content changed to avoid editor position reset\n if (initialContent !== currentContent) {\n try {\n console.log('Updating content in editor:', {\n contentLength: initialContent.length,\n startsWithHtml: initialContent.trim().startsWith('<'),\n containsForwardedMessage: initialContent.includes('---------- Forwarded message ----------'),\n containsQuoteHeader: initialContent.includes('wrote:'),\n hasBlockquote: initialContent.includes('<blockquote'),\n hasTable: initialContent.includes('<table'),\n firstNChars: initialContent.substring(0, 100).replace(/\\n/g, '\\\\n')\n });\n // Detect text direction\n const direction = (0,_lib_utils_text_direction__WEBPACK_IMPORTED_MODULE_5__.detectTextDirection)(initialContent);\n // Check if content already appears to be properly formatted as a reply or forward\n const isPreFormattedContent = (initialContent.includes('---------- Forwarded message ----------') || initialContent.includes('wrote:')) && initialContent.includes('<blockquote');\n // Process HTML content using centralized utility or use as-is if pre-formatted\n let sanitizedContent;\n if (isPreFormattedContent) {\n console.log('Content appears to be pre-formatted as reply/forward, using as-is');\n // Just do basic sanitization without additional processing\n sanitizedContent = (0,_lib_utils_dom_purify_config__WEBPACK_IMPORTED_MODULE_4__.sanitizeHtml)(initialContent);\n } else {\n // Full processing for regular content\n sanitizedContent = (0,_lib_utils_email_content__WEBPACK_IMPORTED_MODULE_6__.processHtmlContent)(initialContent);\n }\n // Log sanitized content details for debugging\n console.log('Sanitized content details:', {\n length: sanitizedContent.length,\n isEmpty: sanitizedContent.trim().length === 0,\n startsWithDiv: sanitizedContent.trim().startsWith('<div'),\n containsForwardedMessage: sanitizedContent.includes('---------- Forwarded message ----------'),\n containsQuoteHeader: sanitizedContent.includes('wrote:'),\n hasTable: sanitizedContent.includes('<table'),\n hasBlockquote: sanitizedContent.includes('<blockquote'),\n firstNChars: sanitizedContent.substring(0, 100).replace(/\\n/g, '\\\\n')\n });\n // Check if content is valid HTML\n if (sanitizedContent.trim().length === 0) {\n console.warn('Sanitized content is empty, using original content');\n // If sanitized content is empty, try to extract text from original\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = initialContent;\n const textContent = tempDiv.textContent || tempDiv.innerText || '';\n // Create simple HTML with text content\n if (quillRef.current) {\n quillRef.current.setText(textContent || 'No content available');\n }\n } else {\n // SIMPLIFIED: Set content directly to the root element rather than using clipboard\n if (quillRef.current && quillRef.current.root) {\n // First set the content\n quillRef.current.root.innerHTML = sanitizedContent;\n // Then safely apply formatting only if quillRef is valid\n try {\n if (quillRef.current && quillRef.current.format && quillRef.current.root.innerHTML.trim().length > 0) {\n // Set the direction for the content\n quillRef.current.format('direction', direction);\n if (direction === 'rtl') {\n quillRef.current.format('align', 'right');\n }\n // Force update\n quillRef.current.update();\n // Set selection to beginning\n quillRef.current.setSelection(0, 0);\n } else {\n console.warn('Skipping format - either editor not ready or content empty');\n }\n } catch (formatError) {\n console.error('Error applying formatting:', formatError);\n // Continue without formatting if there's an error\n }\n }\n }\n } catch (err) {\n console.error('Error updating content:', err);\n // Safer fallback that avoids clipboard API\n try {\n // Extract basic text if everything else fails\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = initialContent;\n const textContent = tempDiv.textContent || tempDiv.innerText || '';\n if (quillRef.current) {\n quillRef.current.setText(textContent || 'Error loading content');\n }\n } catch (e) {\n console.error('All fallbacks failed:', e);\n // Last resort\n if (quillRef.current) {\n quillRef.current.setText('Error loading content');\n }\n }\n }\n }\n }\n }\n }[\"RichEmailEditor.useEffect\"], [\n initialContent,\n isReady\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"rich-email-editor-wrapper\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: toolbarRef,\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-toolbar ql-snow\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-formats\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-bold\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 357,\n columnNumber: 11\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-italic\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 358,\n columnNumber: 11\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-underline\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 359,\n columnNumber: 11\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-strike\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 360,\n columnNumber: 11\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 356,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-formats\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-color\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 363,\n columnNumber: 11\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-background\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 364,\n columnNumber: 11\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 362,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-formats\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n value: \"ordered\",\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-list\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 367,\n columnNumber: 11\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n value: \"bullet\",\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-list\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 368,\n columnNumber: 11\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 366,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-formats\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n value: \"-1\",\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-indent\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 371,\n columnNumber: 11\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n value: \"+1\",\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-indent\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 372,\n columnNumber: 11\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 370,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-formats\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-align\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 375,\n columnNumber: 11\n }, undefined)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 374,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-formats\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n value: \"rtl\",\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-direction\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 378,\n columnNumber: 11\n }, undefined)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 377,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-formats\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-link\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 381,\n columnNumber: 11\n }, undefined)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 380,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-formats\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"ql-clean\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 384,\n columnNumber: 11\n }, undefined)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 383,\n columnNumber: 9\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 355,\n columnNumber: 7\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"rich-email-editor-container\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: editorRef,\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"quill-editor\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 390,\n columnNumber: 9\n }, undefined),\n !isReady && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"flex items-center justify-center py-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default().dynamic([\n [\n \"768df40fab0720e1\",\n [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ]\n ]\n ]) + \" \" + \"h-6 w-6 animate-spin rounded-full border-2 border-primary border-t-transparent\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 398,\n columnNumber: 13\n }, undefined)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 397,\n columnNumber: 11\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 389,\n columnNumber: 7\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default()), {\n id: \"768df40fab0720e1\",\n dynamic: [\n minHeight,\n maxHeight,\n !isReady ? '{ display: none; }' : '',\n minHeight,\n minHeight\n ],\n children: `.rich-email-editor-wrapper.__jsx-style-dynamic-selector{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;height:100%;overflow:hidden;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-ms-flex:1;flex:1;border:1px solid#e2e8f0}.rich-email-editor-container.__jsx-style-dynamic-selector{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;height:100%;overflow:auto;-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-ms-flex:1;flex:1;position:relative}.quill-editor.__jsx-style-dynamic-selector{width:100%;min-height:${minHeight};max-height:${maxHeight};overflow-y:auto;overflow-x:hidden}.quill-editor.__jsx-style-dynamic-selector ${!isReady ? '{ display: none; }' : ''}.__jsx-style-dynamic-selector .ql-toolbar.ql-snow+.ql-toolbar.ql-snow{display:none!important}[dir=\"rtl\"] .ql-editor{text-align:right;direction:rtl}.ql-editor[dir=\"rtl\"]{text-align:right;direction:rtl}.ql-container{border:none!important;height:auto!important;min-height:${minHeight};max-height:none!important;overflow:visible}.ql-editor{padding:12px;min-height:${minHeight};overflow-y:auto!important;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Arial,sans-serif;font-size:14px;line-height:1.5;color:#333!important}.ql-editor p,.ql-editor div,.ql-editor span,.ql-editor li{color:#333!important}.ql-editor.ql-blank::before{color:#aaa!important;font-style:italic!important}.ql-editor blockquote{border-left:2px solid#ddd!important;margin:0!important;padding:10px 0 10px 15px!important;color:#505050!important;background-color:#f9f9f9!important;-webkit-border-radius:4px!important;-moz-border-radius:4px!important;border-radius:4px!important;font-size:13px!important}.ql-editor[dir=\"rtl\"] blockquote,[dir=\"rtl\"] .ql-editor blockquote{border-left:none!important;border-right:2px solid#ddd!important;padding:10px 15px 10px 0!important}.ql-editor table{width:100%!important;border-collapse:collapse!important;table-layout:fixed!important;margin:10px 0!important;border:1px solid#ddd!important}.ql-editor td,.ql-editor th{border:1px solid#ddd!important;padding:6px 8px!important;word-wrap:break-word!important;overflow-wrap:break-word!important;word-break:break-word!important;min-width:30px!important;font-size:13px!important}.email-original-content{margin-top:20px!important;padding-top:10px!important;border-top:1px solid#ddd!important;color:#555!important;font-size:13px!important}.ql-editor blockquote p{margin-bottom:8px!important;margin-top:0!important}.ql-editor div[style*=\"font-weight: 400\"]{margin-top:20px!important;margin-bottom:8px!important;color:#555!important;font-size:13px!important}`\n }, void 0, false, void 0, undefined)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/email/RichEmailEditor.tsx\",\n lineNumber: 353,\n columnNumber: 5\n }, undefined);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RichEmailEditor);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL2VtYWlsL1JpY2hFbWFpbEVkaXRvci50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUUyRDtBQUN4QjtBQUMwQjtBQUNJO0FBQ0Y7QUFXL0QsTUFBTU8sa0JBQWtELENBQUMsRUFDdkRDLGNBQWMsRUFDZEMsUUFBUSxFQUNSQyxjQUFjLDRCQUE0QixFQUMxQ0MsWUFBWSxPQUFPLEVBQ25CQyxZQUFZLHFCQUFxQixFQUNqQ0MscUJBQXFCLEtBQUssRUFDM0I7SUFDQyxNQUFNQyxZQUFZWiw2Q0FBTUEsQ0FBaUI7SUFDekMsTUFBTWEsYUFBYWIsNkNBQU1BLENBQWlCO0lBQzFDLE1BQU1jLFdBQVdkLDZDQUFNQSxDQUFNO0lBQzdCLE1BQU0sQ0FBQ2UsU0FBU0MsV0FBVyxHQUFHZiwrQ0FBUUEsQ0FBQztJQUV2QyxnREFBZ0Q7SUFDaERGLGdEQUFTQTtxQ0FBQztZQUNSLDhDQUE4QztZQUM5QyxNQUFNa0I7NkRBQWtCO29CQUN0QixJQUFJLENBQUNMLFVBQVVNLE9BQU8sSUFBSSxDQUFDTCxXQUFXSyxPQUFPLEVBQUU7b0JBRS9DLE1BQU1DLFFBQVEsQ0FBQyxNQUFNLDRlQUFjLEVBQUdDLE9BQU87b0JBRTdDLDRCQUE0QjtvQkFDNUIsSUFBSUMsY0FBYztvQkFDbEIsSUFBSTt3QkFDRixNQUFNQyxtQkFBbUIsTUFBTSx5bEJBQTRCO3dCQUUzRCx5Q0FBeUM7d0JBQ3pDLElBQUlBLG9CQUFvQkEsaUJBQWlCRixPQUFPLEVBQUU7NEJBQ2hERCxNQUFNSSxRQUFRLENBQUM7Z0NBQ2Isd0JBQXdCRCxpQkFBaUJGLE9BQU87NEJBQ2xELEdBQUc7NEJBQ0hDLGNBQWNDLGlCQUFpQkYsT0FBTzs0QkFDdENJLFFBQVFDLEdBQUcsQ0FBQzt3QkFDZDtvQkFDRixFQUFFLE9BQU9DLEtBQUs7d0JBQ1pGLFFBQVFHLElBQUksQ0FBQywrQkFBK0JEO29CQUM5QztvQkFFQSxtREFBbUQ7b0JBQ25ELE1BQU1FLHNCQUFzQjt3QkFDMUI7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Ozs7Ozs7OztBQXFGeEI7QUFFQSxpRUFBZUosZUFBZUEsRUFBQyIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9jb21wb25lbnRzL2VtYWlsL1JpY2hFbWFpbEVkaXRvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0ICdxdWlsbC9kaXN0L3F1aWxsLnNub3cuY3NzJztcbmltcG9ydCB7IHNhbml0aXplSHRtbCB9IGZyb20gJ0AvbGliL3V0aWxzL2RvbS1wdXJpZnktY29uZmlnJztcbmltcG9ydCB7IGRldGVjdFRleHREaXJlY3Rpb24gfSBmcm9tICdAL2xpYi91dGlscy90ZXh0LWRpcmVjdGlvbic7XG5pbXBvcnQgeyBwcm9jZXNzSHRtbENvbnRlbnQgfSBmcm9tICdAL2xpYi91dGlscy9lbWFpbC1jb250ZW50JztcblxuaW50ZXJmYWNlIFJpY2hFbWFpbEVkaXRvclByb3BzIHtcbiAgaW5pdGlhbENvbnRlbnQ6IHN0cmluZztcbiAgb25DaGFuZ2U6IChjb250ZW50OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBtaW5IZWlnaHQ/OiBzdHJpbmc7XG4gIG1heEhlaWdodD86IHN0cmluZztcbiAgcHJlc2VydmVGb3JtYXR0aW5nPzogYm9vbGVhbjtcbn1cblxuY29uc3QgUmljaEVtYWlsRWRpdG9yOiBSZWFjdC5GQzxSaWNoRW1haWxFZGl0b3JQcm9wcz4gPSAoe1xuICBpbml0aWFsQ29udGVudCxcbiAgb25DaGFuZ2UsXG4gIHBsYWNlaG9sZGVyID0gJ1dyaXRlIHlvdXIgbWVzc2FnZSBoZXJlLi4uJyxcbiAgbWluSGVpZ2h0ID0gJzIwMHB4JyxcbiAgbWF4SGVpZ2h0ID0gJ2NhbGMoMTAwdmggLSA0MDBweCknLFxuICBwcmVzZXJ2ZUZvcm1hdHRpbmcgPSBmYWxzZSxcbn0pID0+IHtcbiAgY29uc3QgZWRpdG9yUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgdG9vbGJhclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHF1aWxsUmVmID0gdXNlUmVmPGFueT4obnVsbCk7XG4gIGNvbnN0IFtpc1JlYWR5LCBzZXRJc1JlYWR5XSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAvLyBJbml0aWFsaXplIFF1aWxsIGVkaXRvciB3aGVuIGNvbXBvbmVudCBtb3VudHNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBJbXBvcnQgUXVpbGwgZHluYW1pY2FsbHkgKGNsaWVudC1zaWRlIG9ubHkpXG4gICAgY29uc3QgaW5pdGlhbGl6ZVF1aWxsID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFlZGl0b3JSZWYuY3VycmVudCB8fCAhdG9vbGJhclJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICBcbiAgICAgIGNvbnN0IFF1aWxsID0gKGF3YWl0IGltcG9ydCgncXVpbGwnKSkuZGVmYXVsdDtcbiAgICAgIFxuICAgICAgLy8gSW1wb3J0IHF1aWxsLWJldHRlci10YWJsZVxuICAgICAgbGV0IHRhYmxlTW9kdWxlID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IFF1aWxsQmV0dGVyVGFibGUgPSBhd2FpdCBpbXBvcnQoJ3F1aWxsLWJldHRlci10YWJsZScpO1xuICAgICAgICBcbiAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIHRhYmxlIG1vZHVsZSBpZiBhdmFpbGFibGVcbiAgICAgICAgaWYgKFF1aWxsQmV0dGVyVGFibGUgJiYgUXVpbGxCZXR0ZXJUYWJsZS5kZWZhdWx0KSB7XG4gICAgICAgICAgUXVpbGwucmVnaXN0ZXIoe1xuICAgICAgICAgICAgJ21vZHVsZXMvYmV0dGVyLXRhYmxlJzogUXVpbGxCZXR0ZXJUYWJsZS5kZWZhdWx0XG4gICAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgICAgdGFibGVNb2R1bGUgPSBRdWlsbEJldHRlclRhYmxlLmRlZmF1bHQ7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0JldHRlciBUYWJsZSBtb2R1bGUgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignVGFibGUgbW9kdWxlIG5vdCBhdmFpbGFibGU6JywgZXJyKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRGVmaW5lIGN1c3RvbSBmb3JtYXRzL21vZHVsZXMgd2l0aCB0YWJsZSBzdXBwb3J0XG4gICAgICBjb25zdCBlbWFpbFRvb2xiYXJPcHRpb25zID0gW1xuICAgICAgICBbJ2JvbGQnLCAnaXRhbGljJywgJ3VuZGVybGluZScsICdzdHJpa2UnXSxcbiAgICAgICAgW3sgJ2NvbG9yJzogW10gfSwgeyAnYmFja2dyb3VuZCc6IFtdIH1dLFxuICAgICAgICBbeyAnbGlzdCc6ICdvcmRlcmVkJ30sIHsgJ2xpc3QnOiAnYnVsbGV0JyB9XSxcbiAgICAgICAgW3sgJ2luZGVudCc6ICctMSd9LCB7ICdpbmRlbnQnOiAnKzEnIH1dLFxuICAgICAgICBbeyAnYWxpZ24nOiBbXSB9XSxcbiAgICAgICAgW3sgJ2RpcmVjdGlvbic6ICdydGwnIH1dLCAvLyBBZGQgZGlyZWN0aW9uIHRvIHRvb2xiYXJcbiAgICAgICAgWydsaW5rJ10sXG4gICAgICAgIFsnY2xlYW4nXSxcbiAgICAgIF07XG5cbiAgICAgIC8vIENyZWF0ZSBuZXcgUXVpbGwgaW5zdGFuY2Ugd2l0aCB0aGUgRE9NIGVsZW1lbnQgYW5kIGN1c3RvbSB0b29sYmFyXG4gICAgICBjb25zdCBlZGl0b3JFbGVtZW50ID0gZWRpdG9yUmVmLmN1cnJlbnQ7XG4gICAgICBxdWlsbFJlZi5jdXJyZW50ID0gbmV3IFF1aWxsKGVkaXRvckVsZW1lbnQsIHtcbiAgICAgICAgbW9kdWxlczoge1xuICAgICAgICAgIHRvb2xiYXI6IHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjogdG9vbGJhclJlZi5jdXJyZW50LFxuICAgICAgICAgICAgaGFuZGxlcnM6IHtcbiAgICAgICAgICAgICAgLy8gQWRkIGFueSBjdXN0b20gdG9vbGJhciBoYW5kbGVycyBoZXJlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjbGlwYm9hcmQ6IHtcbiAgICAgICAgICAgIG1hdGNoVmlzdWFsOiBmYWxzZSAvLyBEaXNhYmxlIGNsaXBib2FyZCBtYXRjaGluZyBmb3IgYmV0dGVyIEhUTUwgaGFuZGxpbmdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIERvbid0IGluaXRpYWxpemUgYmV0dGVyLXRhYmxlIHlldCAtIHdlJ2xsIGRvIGl0IGFmdGVyIGNvbnRlbnQgaXMgbG9hZGVkXG4gICAgICAgICAgJ2JldHRlci10YWJsZSc6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgIHRoZW1lOiAnc25vdycsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2V0IGluaXRpYWwgY29udGVudCBwcm9wZXJseVxuICAgICAgaWYgKGluaXRpYWxDb250ZW50KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1NldHRpbmcgaW5pdGlhbCBjb250ZW50IGluIGVkaXRvcicsIHsgXG4gICAgICAgICAgICBsZW5ndGg6IGluaXRpYWxDb250ZW50Lmxlbmd0aCxcbiAgICAgICAgICAgIHN0YXJ0c1dpdGhIdG1sOiBpbml0aWFsQ29udGVudC50cmltKCkuc3RhcnRzV2l0aCgnPCcpLFxuICAgICAgICAgICAgY29udGFpbnNGb3J3YXJkZWRNZXNzYWdlOiBpbml0aWFsQ29udGVudC5pbmNsdWRlcygnLS0tLS0tLS0tLSBGb3J3YXJkZWQgbWVzc2FnZSAtLS0tLS0tLS0tJyksXG4gICAgICAgICAgICBjb250YWluc1JlcGx5SW5kaWNhdG9yOiBpbml0aWFsQ29udGVudC5pbmNsdWRlcygnd3JvdGU6JyksXG4gICAgICAgICAgICBoYXNCbG9ja3F1b3RlOiBpbml0aWFsQ29udGVudC5pbmNsdWRlcygnPGJsb2NrcXVvdGUnKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIERldGVjdCB0ZXh0IGRpcmVjdGlvblxuICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGRldGVjdFRleHREaXJlY3Rpb24oaW5pdGlhbENvbnRlbnQpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENoZWNrIGlmIGNvbnRlbnQgYWxyZWFkeSBhcHBlYXJzIHRvIGJlIHByb3Blcmx5IGZvcm1hdHRlZCBhcyBhIHJlcGx5IG9yIGZvcndhcmRcbiAgICAgICAgICBjb25zdCBpc1ByZUZvcm1hdHRlZENvbnRlbnQgPSAoXG4gICAgICAgICAgICAoaW5pdGlhbENvbnRlbnQuaW5jbHVkZXMoJy0tLS0tLS0tLS0gRm9yd2FyZGVkIG1lc3NhZ2UgLS0tLS0tLS0tLScpIHx8IFxuICAgICAgICAgICAgIGluaXRpYWxDb250ZW50LmluY2x1ZGVzKCd3cm90ZTonKSkgJiZcbiAgICAgICAgICAgIGluaXRpYWxDb250ZW50LmluY2x1ZGVzKCc8YmxvY2txdW90ZScpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBQcm9jZXNzIEhUTUwgY29udGVudCB1c2luZyBjZW50cmFsaXplZCB1dGlsaXR5IG9yIHVzZSBhcy1pcyBpZiBwcmUtZm9ybWF0dGVkXG4gICAgICAgICAgbGV0IHNhbml0aXplZENvbnRlbnQ7XG4gICAgICAgICAgaWYgKGlzUHJlRm9ybWF0dGVkQ29udGVudCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0NvbnRlbnQgYXBwZWFycyB0byBiZSBwcmUtZm9ybWF0dGVkIGFzIHJlcGx5L2ZvcndhcmQsIHVzaW5nIGFzLWlzJyk7XG4gICAgICAgICAgICAvLyBKdXN0IGRvIGJhc2ljIHNhbml0aXphdGlvbiB3aXRob3V0IGFkZGl0aW9uYWwgcHJvY2Vzc2luZ1xuICAgICAgICAgICAgc2FuaXRpemVkQ29udGVudCA9IHNhbml0aXplSHRtbChpbml0aWFsQ29udGVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZ1bGwgcHJvY2Vzc2luZyBmb3IgcmVndWxhciBjb250ZW50XG4gICAgICAgICAgICBzYW5pdGl6ZWRDb250ZW50ID0gcHJvY2Vzc0h0bWxDb250ZW50KGluaXRpYWxDb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTG9nIHNhbml0aXplZCBjb250ZW50IGRldGFpbHMgZm9yIGRlYnVnZ2luZ1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdTYW5pdGl6ZWQgY29udGVudCBkZXRhaWxzOicsIHtcbiAgICAgICAgICAgIGxlbmd0aDogc2FuaXRpemVkQ29udGVudC5sZW5ndGgsXG4gICAgICAgICAgICBpc0VtcHR5OiBzYW5pdGl6ZWRDb250ZW50LnRyaW0oKS5sZW5ndGggPT09IDAsXG4gICAgICAgICAgICBzdGFydHNXaXRoRGl2OiBzYW5pdGl6ZWRDb250ZW50LnRyaW0oKS5zdGFydHNXaXRoKCc8ZGl2JyksXG4gICAgICAgICAgICBjb250YWluc0ZvcndhcmRlZE1lc3NhZ2U6IHNhbml0aXplZENvbnRlbnQuaW5jbHVkZXMoJy0tLS0tLS0tLS0gRm9yd2FyZGVkIG1lc3NhZ2UgLS0tLS0tLS0tLScpLFxuICAgICAgICAgICAgY29udGFpbnNRdW90ZUhlYWRlcjogc2FuaXRpemVkQ29udGVudC5pbmNsdWRlcygnd3JvdGU6JyksXG4gICAgICAgICAgICBoYXNUYWJsZTogc2FuaXRpemVkQ29udGVudC5pbmNsdWRlcygnPHRhYmxlJyksXG4gICAgICAgICAgICBoYXNCbG9ja3F1b3RlOiBzYW5pdGl6ZWRDb250ZW50LmluY2x1ZGVzKCc8YmxvY2txdW90ZScpLFxuICAgICAgICAgICAgZmlyc3ROQ2hhcnM6IHNhbml0aXplZENvbnRlbnQuc3Vic3RyaW5nKDAsIDEwMCkucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgc2FuaXRpemVkIGNvbnRlbnQgaXMgdmFsaWRcbiAgICAgICAgICBpZiAoc2FuaXRpemVkQ29udGVudC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Nhbml0aXplZCBjb250ZW50IGlzIGVtcHR5IGFmdGVyIHByb2Nlc3NpbmcsIHVzaW5nIGZhbGxiYWNrIGFwcHJvYWNoJyk7XG4gICAgICAgICAgICAvLyBUcnkgdG8gZXh0cmFjdCB0ZXh0IGNvbnRlbnQgaWYgSFRNTCBwcm9jZXNzaW5nIGZhaWxlZFxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICB0ZW1wRGl2LmlubmVySFRNTCA9IGluaXRpYWxDb250ZW50O1xuICAgICAgICAgICAgICBjb25zdCB0ZXh0Q29udGVudCA9IHRlbXBEaXYudGV4dENvbnRlbnQgfHwgdGVtcERpdi5pbm5lclRleHQgfHwgJ0VtcHR5IGNvbnRlbnQnO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLy8gU2V0IHRleHQgZGlyZWN0bHkgdG8gZW5zdXJlIHNvbWV0aGluZyBkaXNwbGF5c1xuICAgICAgICAgICAgICBxdWlsbFJlZi5jdXJyZW50LnNldFRleHQodGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUZXh0IGV4dHJhY3Rpb24gZmFsbGJhY2sgZmFpbGVkOicsIGUpO1xuICAgICAgICAgICAgICBxdWlsbFJlZi5jdXJyZW50LnNldFRleHQoJ0Vycm9yIGxvYWRpbmcgY29udGVudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBVc2UgZGlyZWN0IGlubmVySFRNTCBzZXR0aW5nIGZvciB0aGUgaW5pdGlhbCBjb250ZW50XG4gICAgICAgICAgICBxdWlsbFJlZi5jdXJyZW50LnJvb3QuaW5uZXJIVE1MID0gc2FuaXRpemVkQ29udGVudDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gU2V0IHRoZSBkaXJlY3Rpb24gZm9yIHRoZSBjb250ZW50XG4gICAgICAgICAgICBpZiAocXVpbGxSZWYuY3VycmVudCAmJiBxdWlsbFJlZi5jdXJyZW50LmZvcm1hdCkge1xuICAgICAgICAgICAgICBxdWlsbFJlZi5jdXJyZW50LmZvcm1hdCgnZGlyZWN0aW9uJywgZGlyZWN0aW9uKTtcbiAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgICAgICBxdWlsbFJlZi5jdXJyZW50LmZvcm1hdCgnYWxpZ24nLCAncmlnaHQnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdDYW5ub3QgZm9ybWF0IGNvbnRlbnQ6IGVkaXRvciBub3QgZnVsbHkgaW5pdGlhbGl6ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU2V0IGN1cnNvciBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgICAgcXVpbGxSZWYuY3VycmVudC5zZXRTZWxlY3Rpb24oMCwgMCk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gRW5zdXJlIHRoZSBjdXJzb3IgYW5kIHNjcm9sbCBwb3NpdGlvbiBpcyBhdCB0aGUgdG9wIG9mIHRoZSBlZGl0b3JcbiAgICAgICAgICBpZiAoZWRpdG9yUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGVkaXRvclJlZi5jdXJyZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEZpbmQgYW5kIHNjcm9sbCBwYXJlbnQgY29udGFpbmVycyB0aGF0IG1pZ2h0IGhhdmUgc2Nyb2xsXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxhYmxlID0gW1xuICAgICAgICAgICAgICBlZGl0b3JSZWYuY3VycmVudC5jbG9zZXN0KCcucWwtY29udGFpbmVyJyksXG4gICAgICAgICAgICAgIGVkaXRvclJlZi5jdXJyZW50LmNsb3Nlc3QoJy5yaWNoLWVtYWlsLWVkaXRvci1jb250YWluZXInKSxcbiAgICAgICAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQuY2xvc2VzdCgnLm92ZXJmbG93LXktYXV0bycpLFxuICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcub3ZlcmZsb3cteS1hdXRvJylcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHNjcm9sbGFibGUuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICAgIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZWwuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzZXR0aW5nIGluaXRpYWwgY29udGVudDonLCBlcnIpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEVuaGFuY2VkIGZhbGxiYWNrIG1lY2hhbmlzbSBmb3IgY29tcGxleCBjb250ZW50XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEZpcnN0IHRyeSB0byBleHRyYWN0IHRleHQgZnJvbSBIVE1MXG4gICAgICAgICAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZW1wRGl2LmlubmVySFRNTCA9IGluaXRpYWxDb250ZW50O1xuICAgICAgICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSB0ZW1wRGl2LnRleHRDb250ZW50IHx8IHRlbXBEaXYuaW5uZXJUZXh0IHx8ICcnO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodGV4dENvbnRlbnQudHJpbSgpKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdVc2luZyBleHRyYWN0ZWQgdGV4dCBmYWxsYmFjaywgbGVuZ3RoOicsIHRleHRDb250ZW50Lmxlbmd0aCk7XG4gICAgICAgICAgICAgIHF1aWxsUmVmLmN1cnJlbnQuc2V0VGV4dCh0ZXh0Q29udGVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJZiB0ZXh0IGV4dHJhY3Rpb24gZmFpbHMgb3IgcmV0dXJucyBlbXB0eSwgcHJvdmlkZSBhIG1lc3NhZ2VcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1VzaW5nIGVtcHR5IGNvbnRlbnQgZmFsbGJhY2snKTtcbiAgICAgICAgICAgICAgcXVpbGxSZWYuY3VycmVudC5zZXRUZXh0KCdVbmFibGUgdG8gbG9hZCBvcmlnaW5hbCBjb250ZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQWxsIGZhbGxiYWNrcyBmYWlsZWQ6JywgZSk7XG4gICAgICAgICAgICBxdWlsbFJlZi5jdXJyZW50LnNldFRleHQoJ0Vycm9yIGxvYWRpbmcgY29udGVudCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBZGQgY2hhbmdlIGxpc3RlbmVyXG4gICAgICBxdWlsbFJlZi5jdXJyZW50Lm9uKCd0ZXh0LWNoYW5nZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaHRtbCA9IHF1aWxsUmVmLmN1cnJlbnQucm9vdC5pbm5lckhUTUw7XG4gICAgICAgIG9uQ2hhbmdlKGh0bWwpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEltcHJvdmUgZWRpdG9yIGxheW91dFxuICAgICAgY29uc3QgZWRpdG9yQ29udGFpbmVyID0gZWRpdG9yRWxlbWVudC5jbG9zZXN0KCcucWwtY29udGFpbmVyJyk7XG4gICAgICBpZiAoZWRpdG9yQ29udGFpbmVyKSB7XG4gICAgICAgIGVkaXRvckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdlbWFpbC1lZGl0b3ItY29udGFpbmVyJyk7XG4gICAgICB9XG5cbiAgICAgIHNldElzUmVhZHkodHJ1ZSk7XG4gICAgfTtcblxuICAgIGluaXRpYWxpemVRdWlsbCgpLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBRdWlsbCBlZGl0b3I6JywgZXJyKTtcbiAgICB9KTtcblxuICAgIC8vIENsZWFuIHVwIG9uIHVubW91bnRcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHF1aWxsUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgLy8gQ2xlYW4gdXAgYW55IGV2ZW50IGxpc3RlbmVycyBvciByZXNvdXJjZXNcbiAgICAgICAgcXVpbGxSZWYuY3VycmVudC5vZmYoJ3RleHQtY2hhbmdlJyk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIFVwZGF0ZSBjb250ZW50IGZyb20gcHJvcHMgaWYgY2hhbmdlZCBleHRlcm5hbGx5IC0gdXNpbmcgYSBzaW1wbGVyIGFwcHJvYWNoXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHF1aWxsUmVmLmN1cnJlbnQgJiYgaXNSZWFkeSAmJiBpbml0aWFsQ29udGVudCkge1xuICAgICAgY29uc3QgY3VycmVudENvbnRlbnQgPSBxdWlsbFJlZi5jdXJyZW50LnJvb3QuaW5uZXJIVE1MO1xuICAgICAgXG4gICAgICAvLyBPbmx5IHVwZGF0ZSBpZiBjb250ZW50IGNoYW5nZWQgdG8gYXZvaWQgZWRpdG9yIHBvc2l0aW9uIHJlc2V0XG4gICAgICBpZiAoaW5pdGlhbENvbnRlbnQgIT09IGN1cnJlbnRDb250ZW50KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1VwZGF0aW5nIGNvbnRlbnQgaW4gZWRpdG9yOicsIHsgXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiBpbml0aWFsQ29udGVudC5sZW5ndGgsXG4gICAgICAgICAgICBzdGFydHNXaXRoSHRtbDogaW5pdGlhbENvbnRlbnQudHJpbSgpLnN0YXJ0c1dpdGgoJzwnKSxcbiAgICAgICAgICAgIGNvbnRhaW5zRm9yd2FyZGVkTWVzc2FnZTogaW5pdGlhbENvbnRlbnQuaW5jbHVkZXMoJy0tLS0tLS0tLS0gRm9yd2FyZGVkIG1lc3NhZ2UgLS0tLS0tLS0tLScpLFxuICAgICAgICAgICAgY29udGFpbnNRdW90ZUhlYWRlcjogaW5pdGlhbENvbnRlbnQuaW5jbHVkZXMoJ3dyb3RlOicpLFxuICAgICAgICAgICAgaGFzQmxvY2txdW90ZTogaW5pdGlhbENvbnRlbnQuaW5jbHVkZXMoJzxibG9ja3F1b3RlJyksXG4gICAgICAgICAgICBoYXNUYWJsZTogaW5pdGlhbENvbnRlbnQuaW5jbHVkZXMoJzx0YWJsZScpLFxuICAgICAgICAgICAgZmlyc3ROQ2hhcnM6IGluaXRpYWxDb250ZW50LnN1YnN0cmluZygwLCAxMDApLnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIERldGVjdCB0ZXh0IGRpcmVjdGlvblxuICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGRldGVjdFRleHREaXJlY3Rpb24oaW5pdGlhbENvbnRlbnQpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENoZWNrIGlmIGNvbnRlbnQgYWxyZWFkeSBhcHBlYXJzIHRvIGJlIHByb3Blcmx5IGZvcm1hdHRlZCBhcyBhIHJlcGx5IG9yIGZvcndhcmRcbiAgICAgICAgICBjb25zdCBpc1ByZUZvcm1hdHRlZENvbnRlbnQgPSAoXG4gICAgICAgICAgICAoaW5pdGlhbENvbnRlbnQuaW5jbHVkZXMoJy0tLS0tLS0tLS0gRm9yd2FyZGVkIG1lc3NhZ2UgLS0tLS0tLS0tLScpIHx8IFxuICAgICAgICAgICAgIGluaXRpYWxDb250ZW50LmluY2x1ZGVzKCd3cm90ZTonKSkgJiZcbiAgICAgICAgICAgIGluaXRpYWxDb250ZW50LmluY2x1ZGVzKCc8YmxvY2txdW90ZScpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBQcm9jZXNzIEhUTUwgY29udGVudCB1c2luZyBjZW50cmFsaXplZCB1dGlsaXR5IG9yIHVzZSBhcy1pcyBpZiBwcmUtZm9ybWF0dGVkXG4gICAgICAgICAgbGV0IHNhbml0aXplZENvbnRlbnQ7XG4gICAgICAgICAgaWYgKGlzUHJlRm9ybWF0dGVkQ29udGVudCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0NvbnRlbnQgYXBwZWFycyB0byBiZSBwcmUtZm9ybWF0dGVkIGFzIHJlcGx5L2ZvcndhcmQsIHVzaW5nIGFzLWlzJyk7XG4gICAgICAgICAgICAvLyBKdXN0IGRvIGJhc2ljIHNhbml0aXphdGlvbiB3aXRob3V0IGFkZGl0aW9uYWwgcHJvY2Vzc2luZ1xuICAgICAgICAgICAgc2FuaXRpemVkQ29udGVudCA9IHNhbml0aXplSHRtbChpbml0aWFsQ29udGVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZ1bGwgcHJvY2Vzc2luZyBmb3IgcmVndWxhciBjb250ZW50XG4gICAgICAgICAgICBzYW5pdGl6ZWRDb250ZW50ID0gcHJvY2Vzc0h0bWxDb250ZW50KGluaXRpYWxDb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTG9nIHNhbml0aXplZCBjb250ZW50IGRldGFpbHMgZm9yIGRlYnVnZ2luZ1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdTYW5pdGl6ZWQgY29udGVudCBkZXRhaWxzOicsIHtcbiAgICAgICAgICAgIGxlbmd0aDogc2FuaXRpemVkQ29udGVudC5sZW5ndGgsXG4gICAgICAgICAgICBpc0VtcHR5OiBzYW5pdGl6ZWRDb250ZW50LnRyaW0oKS5sZW5ndGggPT09IDAsXG4gICAgICAgICAgICBzdGFydHNXaXRoRGl2OiBzYW5pdGl6ZWRDb250ZW50LnRyaW0oKS5zdGFydHNXaXRoKCc8ZGl2JyksXG4gICAgICAgICAgICBjb250YWluc0ZvcndhcmRlZE1lc3NhZ2U6IHNhbml0aXplZENvbnRlbnQuaW5jbHVkZXMoJy0tLS0tLS0tLS0gRm9yd2FyZGVkIG1lc3NhZ2UgLS0tLS0tLS0tLScpLFxuICAgICAgICAgICAgY29udGFpbnNRdW90ZUhlYWRlcjogc2FuaXRpemVkQ29udGVudC5pbmNsdWRlcygnd3JvdGU6JyksXG4gICAgICAgICAgICBoYXNUYWJsZTogc2FuaXRpemVkQ29udGVudC5pbmNsdWRlcygnPHRhYmxlJyksXG4gICAgICAgICAgICBoYXNCbG9ja3F1b3RlOiBzYW5pdGl6ZWRDb250ZW50LmluY2x1ZGVzKCc8YmxvY2txdW90ZScpLFxuICAgICAgICAgICAgZmlyc3ROQ2hhcnM6IHNhbml0aXplZENvbnRlbnQuc3Vic3RyaW5nKDAsIDEwMCkucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgY29udGVudCBpcyB2YWxpZCBIVE1MXG4gICAgICAgICAgaWYgKHNhbml0aXplZENvbnRlbnQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdTYW5pdGl6ZWQgY29udGVudCBpcyBlbXB0eSwgdXNpbmcgb3JpZ2luYWwgY29udGVudCcpO1xuICAgICAgICAgICAgLy8gSWYgc2FuaXRpemVkIGNvbnRlbnQgaXMgZW1wdHksIHRyeSB0byBleHRyYWN0IHRleHQgZnJvbSBvcmlnaW5hbFxuICAgICAgICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSBpbml0aWFsQ29udGVudDtcbiAgICAgICAgICAgIGNvbnN0IHRleHRDb250ZW50ID0gdGVtcERpdi50ZXh0Q29udGVudCB8fCB0ZW1wRGl2LmlubmVyVGV4dCB8fCAnJztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQ3JlYXRlIHNpbXBsZSBIVE1MIHdpdGggdGV4dCBjb250ZW50XG4gICAgICAgICAgICBpZiAocXVpbGxSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICBxdWlsbFJlZi5jdXJyZW50LnNldFRleHQodGV4dENvbnRlbnQgfHwgJ05vIGNvbnRlbnQgYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNJTVBMSUZJRUQ6IFNldCBjb250ZW50IGRpcmVjdGx5IHRvIHRoZSByb290IGVsZW1lbnQgcmF0aGVyIHRoYW4gdXNpbmcgY2xpcGJvYXJkXG4gICAgICAgICAgICBpZiAocXVpbGxSZWYuY3VycmVudCAmJiBxdWlsbFJlZi5jdXJyZW50LnJvb3QpIHtcbiAgICAgICAgICAgICAgLy8gRmlyc3Qgc2V0IHRoZSBjb250ZW50XG4gICAgICAgICAgICAgIHF1aWxsUmVmLmN1cnJlbnQucm9vdC5pbm5lckhUTUwgPSBzYW5pdGl6ZWRDb250ZW50O1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLy8gVGhlbiBzYWZlbHkgYXBwbHkgZm9ybWF0dGluZyBvbmx5IGlmIHF1aWxsUmVmIGlzIHZhbGlkXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHF1aWxsUmVmLmN1cnJlbnQgJiYgcXVpbGxSZWYuY3VycmVudC5mb3JtYXQgJiYgcXVpbGxSZWYuY3VycmVudC5yb290LmlubmVySFRNTC50cmltKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBkaXJlY3Rpb24gZm9yIHRoZSBjb250ZW50XG4gICAgICAgICAgICAgICAgICBxdWlsbFJlZi5jdXJyZW50LmZvcm1hdCgnZGlyZWN0aW9uJywgZGlyZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1aWxsUmVmLmN1cnJlbnQuZm9ybWF0KCdhbGlnbicsICdyaWdodCcpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAvLyBGb3JjZSB1cGRhdGVcbiAgICAgICAgICAgICAgICAgIHF1aWxsUmVmLmN1cnJlbnQudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIC8vIFNldCBzZWxlY3Rpb24gdG8gYmVnaW5uaW5nXG4gICAgICAgICAgICAgICAgICBxdWlsbFJlZi5jdXJyZW50LnNldFNlbGVjdGlvbigwLCAwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdTa2lwcGluZyBmb3JtYXQgLSBlaXRoZXIgZWRpdG9yIG5vdCByZWFkeSBvciBjb250ZW50IGVtcHR5Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChmb3JtYXRFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFwcGx5aW5nIGZvcm1hdHRpbmc6JywgZm9ybWF0RXJyb3IpO1xuICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIHdpdGhvdXQgZm9ybWF0dGluZyBpZiB0aGVyZSdzIGFuIGVycm9yXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHVwZGF0aW5nIGNvbnRlbnQ6JywgZXJyKTtcbiAgICAgICAgICAvLyBTYWZlciBmYWxsYmFjayB0aGF0IGF2b2lkcyBjbGlwYm9hcmQgQVBJXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEV4dHJhY3QgYmFzaWMgdGV4dCBpZiBldmVyeXRoaW5nIGVsc2UgZmFpbHNcbiAgICAgICAgICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gaW5pdGlhbENvbnRlbnQ7XG4gICAgICAgICAgICBjb25zdCB0ZXh0Q29udGVudCA9IHRlbXBEaXYudGV4dENvbnRlbnQgfHwgdGVtcERpdi5pbm5lclRleHQgfHwgJyc7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChxdWlsbFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgIHF1aWxsUmVmLmN1cnJlbnQuc2V0VGV4dCh0ZXh0Q29udGVudCB8fCAnRXJyb3IgbG9hZGluZyBjb250ZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQWxsIGZhbGxiYWNrcyBmYWlsZWQ6JywgZSk7XG4gICAgICAgICAgICAvLyBMYXN0IHJlc29ydFxuICAgICAgICAgICAgaWYgKHF1aWxsUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgcXVpbGxSZWYuY3VycmVudC5zZXRUZXh0KCdFcnJvciBsb2FkaW5nIGNvbnRlbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpbml0aWFsQ29udGVudCwgaXNSZWFkeV0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyaWNoLWVtYWlsLWVkaXRvci13cmFwcGVyXCI+XG4gICAgICB7LyogQ3VzdG9tIHRvb2xiYXIgY29udGFpbmVyICovfVxuICAgICAgPGRpdiByZWY9e3Rvb2xiYXJSZWZ9IGNsYXNzTmFtZT1cInFsLXRvb2xiYXIgcWwtc25vd1wiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJxbC1mb3JtYXRzXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJxbC1ib2xkXCI+PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJxbC1pdGFsaWNcIj48L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInFsLXVuZGVybGluZVwiPjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwicWwtc3RyaWtlXCI+PC9idXR0b24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwicWwtZm9ybWF0c1wiPlxuICAgICAgICAgIDxzZWxlY3QgY2xhc3NOYW1lPVwicWwtY29sb3JcIj48L3NlbGVjdD5cbiAgICAgICAgICA8c2VsZWN0IGNsYXNzTmFtZT1cInFsLWJhY2tncm91bmRcIj48L3NlbGVjdD5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJxbC1mb3JtYXRzXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJxbC1saXN0XCIgdmFsdWU9XCJvcmRlcmVkXCI+PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJxbC1saXN0XCIgdmFsdWU9XCJidWxsZXRcIj48L2J1dHRvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJxbC1mb3JtYXRzXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJxbC1pbmRlbnRcIiB2YWx1ZT1cIi0xXCI+PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJxbC1pbmRlbnRcIiB2YWx1ZT1cIisxXCI+PC9idXR0b24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwicWwtZm9ybWF0c1wiPlxuICAgICAgICAgIDxzZWxlY3QgY2xhc3NOYW1lPVwicWwtYWxpZ25cIj48L3NlbGVjdD5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJxbC1mb3JtYXRzXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJxbC1kaXJlY3Rpb25cIiB2YWx1ZT1cInJ0bFwiPjwvYnV0dG9uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInFsLWZvcm1hdHNcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInFsLWxpbmtcIj48L2J1dHRvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJxbC1mb3JtYXRzXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJxbC1jbGVhblwiPjwvYnV0dG9uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgey8qIEVkaXRvciBjb250YWluZXIgd2l0aCBpbXByb3ZlZCBzY3JvbGxpbmcgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJpY2gtZW1haWwtZWRpdG9yLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IFxuICAgICAgICAgIHJlZj17ZWRpdG9yUmVmfSBcbiAgICAgICAgICBjbGFzc05hbWU9XCJxdWlsbC1lZGl0b3JcIlxuICAgICAgICAvPlxuICAgICAgICBcbiAgICAgICAgey8qIExvYWRpbmcgaW5kaWNhdG9yICovfVxuICAgICAgICB7IWlzUmVhZHkgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLTYgdy02IGFuaW1hdGUtc3BpbiByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXByaW1hcnkgYm9yZGVyLXQtdHJhbnNwYXJlbnRcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICB7LyogQ3VzdG9tIHN0eWxlcyBmb3IgZW1haWwgY29udGV4dCAqL31cbiAgICAgIDxzdHlsZSBqc3g+e2BcbiAgICAgICAgLnJpY2gtZW1haWwtZWRpdG9yLXdyYXBwZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAucmljaC1lbWFpbC1lZGl0b3ItY29udGFpbmVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAucXVpbGwtZWRpdG9yIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAke21pbkhlaWdodH07XG4gICAgICAgICAgbWF4LWhlaWdodDogJHttYXhIZWlnaHR9O1xuICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvKiBIaWRlIHRoZSBlZGl0b3IgdW50aWwgaXQncyByZWFkeSAqL1xuICAgICAgICAucXVpbGwtZWRpdG9yICR7IWlzUmVhZHkgPyAneyBkaXNwbGF5OiBub25lOyB9JyA6ICcnfVxuICAgICAgICBcbiAgICAgICAgLyogSGlkZSBkdXBsaWNhdGUgdG9vbGJhciAqL1xuICAgICAgICA6Z2xvYmFsKC5xbC10b29sYmFyLnFsLXNub3cgKyAucWwtdG9vbGJhci5xbC1zbm93KSB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvKiBBZGQgUlRMIHN1cHBvcnQgc3R5bGVzICovXG4gICAgICAgIDpnbG9iYWwoW2Rpcj1cInJ0bFwiXSAucWwtZWRpdG9yKSB7XG4gICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAgICAgZGlyZWN0aW9uOiBydGw7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIDpnbG9iYWwoLnFsLWVkaXRvcltkaXI9XCJydGxcIl0pIHtcbiAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgICBkaXJlY3Rpb246IHJ0bDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgOmdsb2JhbCgucWwtY29udGFpbmVyKSB7XG4gICAgICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgICAgICAgbWluLWhlaWdodDogJHttaW5IZWlnaHR9O1xuICAgICAgICAgIG1heC1oZWlnaHQ6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgOmdsb2JhbCgucWwtZWRpdG9yKSB7XG4gICAgICAgICAgcGFkZGluZzogMTJweDtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAke21pbkhlaWdodH07XG4gICAgICAgICAgb3ZlcmZsb3cteTogYXV0byAhaW1wb3J0YW50O1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiU2Vnb2UgVUlcIiwgUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgICAgICBjb2xvcjogIzMzMyAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvKiBFbnN1cmUgYWxsIHRleHQgaXMgdmlzaWJsZSAqL1xuICAgICAgICA6Z2xvYmFsKC5xbC1lZGl0b3IgcCksXG4gICAgICAgIDpnbG9iYWwoLnFsLWVkaXRvciBkaXYpLFxuICAgICAgICA6Z2xvYmFsKC5xbC1lZGl0b3Igc3BhbiksXG4gICAgICAgIDpnbG9iYWwoLnFsLWVkaXRvciBsaSkge1xuICAgICAgICAgIGNvbG9yOiAjMzMzICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8qIEVuc3VyZSBwbGFjZWhvbGRlciB0ZXh0IGlzIHZpc2libGUgYnV0IGRpc3RpbmN0ICovXG4gICAgICAgIDpnbG9iYWwoLnFsLWVkaXRvci5xbC1ibGFuazo6YmVmb3JlKSB7XG4gICAgICAgICAgY29sb3I6ICNhYWEgIWltcG9ydGFudDtcbiAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWMgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLyogRm9yY2UgYmxvY2txdW90ZSBzdHlsaW5nICovXG4gICAgICAgIDpnbG9iYWwoLnFsLWVkaXRvciBibG9ja3F1b3RlKSB7XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjZGRkICFpbXBvcnRhbnQ7XG4gICAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgcGFkZGluZzogMTBweCAwIDEwcHggMTVweCAhaW1wb3J0YW50O1xuICAgICAgICAgIGNvbG9yOiAjNTA1MDUwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOSAhaW1wb3J0YW50O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweCAhaW1wb3J0YW50O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTNweCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvKiBSVEwgYmxvY2txdW90ZSBzdHlsaW5nICovXG4gICAgICAgIDpnbG9iYWwoLnFsLWVkaXRvcltkaXI9XCJydGxcIl0gYmxvY2txdW90ZSksXG4gICAgICAgIDpnbG9iYWwoW2Rpcj1cInJ0bFwiXSAucWwtZWRpdG9yIGJsb2NrcXVvdGUpIHtcbiAgICAgICAgICBib3JkZXItbGVmdDogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNkZGQgIWltcG9ydGFudDtcbiAgICAgICAgICBwYWRkaW5nOiAxMHB4IDE1cHggMTBweCAwICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8qIEZpeCB0YWJsZSByZW5kZXJpbmcgKi9cbiAgICAgICAgOmdsb2JhbCgucWwtZWRpdG9yIHRhYmxlKSB7XG4gICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlICFpbXBvcnRhbnQ7XG4gICAgICAgICAgdGFibGUtbGF5b3V0OiBmaXhlZCAhaW1wb3J0YW50O1xuICAgICAgICAgIG1hcmdpbjogMTBweCAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICA6Z2xvYmFsKC5xbC1lZGl0b3IgdGQpLCBcbiAgICAgICAgOmdsb2JhbCgucWwtZWRpdG9yIHRoKSB7XG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZCAhaW1wb3J0YW50O1xuICAgICAgICAgIHBhZGRpbmc6IDZweCA4cHggIWltcG9ydGFudDtcbiAgICAgICAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkICFpbXBvcnRhbnQ7XG4gICAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZCAhaW1wb3J0YW50O1xuICAgICAgICAgIG1pbi13aWR0aDogMzBweCAhaW1wb3J0YW50O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTNweCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvKiBFbWFpbCBxdW90ZSBzdHlsaW5nICovXG4gICAgICAgIDpnbG9iYWwoLmVtYWlsLW9yaWdpbmFsLWNvbnRlbnQpIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAyMHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgcGFkZGluZy10b3A6IDEwcHggIWltcG9ydGFudDtcbiAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZCAhaW1wb3J0YW50O1xuICAgICAgICAgIGNvbG9yOiAjNTU1ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgZm9udC1zaXplOiAxM3B4ICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8qIEZpeCBxdW90ZWQgcGFyYWdyYXBocyAqL1xuICAgICAgICA6Z2xvYmFsKC5xbC1lZGl0b3IgYmxvY2txdW90ZSBwKSB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvKiBGaXggZm9yIHJlcGx5IGhlYWRlcnMgKi9cbiAgICAgICAgOmdsb2JhbCgucWwtZWRpdG9yIGRpdltzdHlsZSo9XCJmb250LXdlaWdodDogNDAwXCJdKSB7XG4gICAgICAgICAgbWFyZ2luLXRvcDogMjBweCAhaW1wb3J0YW50O1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweCAhaW1wb3J0YW50O1xuICAgICAgICAgIGNvbG9yOiAjNTU1ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgZm9udC1zaXplOiAxM3B4ICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgIGB9PC9zdHlsZT5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJpY2hFbWFpbEVkaXRvcjsgIl0sIm5hbWVzIjpbIlJlYWN0IiwidXNlRWZmZWN0IiwidXNlUmVmIiwidXNlU3RhdGUiLCJzYW5pdGl6ZUh0bWwiLCJkZXRlY3RUZXh0RGlyZWN0aW9uIiwicHJvY2Vzc0h0bWxDb250ZW50IiwiUmljaEVtYWlsRWRpdG9yIiwiaW5pdGlhbENvbnRlbnQiLCJvbkNoYW5nZSIsInBsYWNlaG9sZGVyIiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwicHJlc2VydmVGb3JtYXR0aW5nIiwiZWRpdG9yUmVmIiwidG9vbGJhclJlZiIsInF1aWxsUmVmIiwiaXNSZWFkeSIsInNldElzUmVhZHkiLCJpbml0aWFsaXplUXVpbGwiLCJjdXJyZW50IiwiUXVpbGwiLCJkZWZhdWx0IiwidGFibGVNb2R1bGUiLCJRdWlsbEJldHRlclRhYmxlIiwicmVnaXN0ZXIiLCJjb25zb2xlIiwibG9nIiwiZXJyIiwid2FybiIsImVtYWlsVG9vbGJhck9wdGlvbnMiLCJlZGl0b3JFbGVtZW50IiwibW9kdWxlcyIsInRvb2xiYXIiLCJjb250YWluZXIiLCJoYW5kbGVycyIsImNsaXBib2FyZCIsIm1hdGNoVmlzdWFsIiwidGhlbWUiLCJsZW5ndGgiLCJzdGFydHNXaXRoSHRtbCIsInRyaW0iLCJzdGFydHNXaXRoIiwiY29udGFpbnNGb3J3YXJkZWRNZXNzYWdlIiwiaW5jbHVkZXMiLCJjb250YWluc1JlcGx5SW5kaWNhdG9yIiwiaGFzQmxvY2txdW90ZSIsImRpcmVjdGlvbiIsImlzUHJlRm9ybWF0dGVkQ29udGVudCIsInNhbml0aXplZENvbnRlbnQiLCJpc0VtcHR5Iiwic3RhcnRzV2l0aERpdiIsImNvbnRhaW5zUXVvdGVIZWFkZXIiLCJoYXNUYWJsZSIsImZpcnN0TkNoYXJzIiwic3Vic3RyaW5nIiwicmVwbGFjZSIsInRlbXBEaXYiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJpbm5lckhUTUwiLCJ0ZXh0Q29udGVudCIsImlubmVyVGV4dCIsInNldFRleHQiLCJlIiwiZXJyb3IiLCJyb290IiwiZm9ybWF0Iiwic2V0U2VsZWN0aW9uIiwic2Nyb2xsVG9wIiwic2Nyb2xsYWJsZSIsImNsb3Nlc3QiLCJxdWVyeVNlbGVjdG9yIiwiZm9yRWFjaCIsImVsIiwiSFRNTEVsZW1lbnQiLCJvbiIsImh0bWwiLCJlZGl0b3JDb250YWluZXIiLCJjbGFzc0xpc3QiLCJhZGQiLCJjYXRjaCIsIm9mZiIsImN1cnJlbnRDb250ZW50IiwiY29udGVudExlbmd0aCIsInVwZGF0ZSIsImZvcm1hdEVycm9yIiwiZGl2IiwicmVmIiwic3BhbiIsImJ1dHRvbiIsInNlbGVjdCIsInZhbHVlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./components/email/RichEmailEditor.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/footer.tsx":
|
|
/*!*******************************!*\
|
|
!*** ./components/footer.tsx ***!
|
|
\*******************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Footer: () => (/* binding */ Footer)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(ssr)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ Footer auto */ \n\nfunction Footer() {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"footer\", {\n className: \"w-full p-4 bg-black text-white/80\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex space-x-4 text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/support\",\n className: \"hover:text-white\",\n children: \"Support\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/footer.tsx\",\n lineNumber: 9,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/help\",\n className: \"hover:text-white\",\n children: \"Centre d'aide\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/footer.tsx\",\n lineNumber: 12,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/privacy\",\n className: \"hover:text-white\",\n children: \"Confidentialit\\xe9\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/footer.tsx\",\n lineNumber: 15,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/tos\",\n className: \"hover:text-white\",\n children: \"Conditions d'utilisation\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/footer.tsx\",\n lineNumber: 18,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/footer.tsx\",\n lineNumber: 8,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/footer.tsx\",\n lineNumber: 7,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL2Zvb3Rlci50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRTZCO0FBRXRCLFNBQVNDO0lBQ2QscUJBQ0UsOERBQUNDO1FBQU9DLFdBQVU7a0JBQ2hCLDRFQUFDQztZQUFJRCxXQUFVOzs4QkFDYiw4REFBQ0gsa0RBQUlBO29CQUFDSyxNQUFLO29CQUFXRixXQUFVOzhCQUFtQjs7Ozs7OzhCQUduRCw4REFBQ0gsa0RBQUlBO29CQUFDSyxNQUFLO29CQUFRRixXQUFVOzhCQUFtQjs7Ozs7OzhCQUdoRCw4REFBQ0gsa0RBQUlBO29CQUFDSyxNQUFLO29CQUFXRixXQUFVOzhCQUFtQjs7Ozs7OzhCQUduRCw4REFBQ0gsa0RBQUlBO29CQUFDSyxNQUFLO29CQUFPRixXQUFVOzhCQUFtQjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNdkQiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvY29tcG9uZW50cy9mb290ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBGb290ZXIoKSB7XG4gIHJldHVybiAoXG4gICAgPGZvb3RlciBjbGFzc05hbWU9J3ctZnVsbCBwLTQgYmctYmxhY2sgdGV4dC13aGl0ZS84MCc+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT0nZmxleCBzcGFjZS14LTQgdGV4dC1zbSc+XG4gICAgICAgIDxMaW5rIGhyZWY9Jy9zdXBwb3J0JyBjbGFzc05hbWU9J2hvdmVyOnRleHQtd2hpdGUnPlxuICAgICAgICAgIFN1cHBvcnRcbiAgICAgICAgPC9MaW5rPlxuICAgICAgICA8TGluayBocmVmPScvaGVscCcgY2xhc3NOYW1lPSdob3Zlcjp0ZXh0LXdoaXRlJz5cbiAgICAgICAgICBDZW50cmUgZCdhaWRlXG4gICAgICAgIDwvTGluaz5cbiAgICAgICAgPExpbmsgaHJlZj0nL3ByaXZhY3knIGNsYXNzTmFtZT0naG92ZXI6dGV4dC13aGl0ZSc+XG4gICAgICAgICAgQ29uZmlkZW50aWFsaXTDqVxuICAgICAgICA8L0xpbms+XG4gICAgICAgIDxMaW5rIGhyZWY9Jy90b3MnIGNsYXNzTmFtZT0naG92ZXI6dGV4dC13aGl0ZSc+XG4gICAgICAgICAgQ29uZGl0aW9ucyBkJ3V0aWxpc2F0aW9uXG4gICAgICAgIDwvTGluaz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9vdGVyPlxuICApO1xufSAiXSwibmFtZXMiOlsiTGluayIsIkZvb3RlciIsImZvb3RlciIsImNsYXNzTmFtZSIsImRpdiIsImhyZWYiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/footer.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/layout/layout-wrapper.tsx":
|
|
/*!**********************************************!*\
|
|
!*** ./components/layout/layout-wrapper.tsx ***!
|
|
\**********************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LayoutWrapper: () => (/* binding */ LayoutWrapper)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _components_main_nav__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/components/main-nav */ \"(ssr)/./components/main-nav.tsx\");\n/* harmony import */ var _components_footer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/footer */ \"(ssr)/./components/footer.tsx\");\n/* harmony import */ var _components_auth_auth_check__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/auth/auth-check */ \"(ssr)/./components/auth/auth-check.tsx\");\n/* harmony import */ var _components_ui_toaster__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/ui/toaster */ \"(ssr)/./components/ui/toaster.tsx\");\n/* harmony import */ var _components_background_switcher__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/background-switcher */ \"(ssr)/./components/background-switcher.tsx\");\n/* __next_internal_client_entry_do_not_use__ LayoutWrapper auto */ \n\n\n\n\n\nfunction LayoutWrapper({ children, isSignInPage, isAuthenticated }) {\n const { currentBackground, changeBackground } = (0,_components_background_switcher__WEBPACK_IMPORTED_MODULE_5__.useBackgroundImage)();\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_auth_auth_check__WEBPACK_IMPORTED_MODULE_3__.AuthCheck, {\n children: [\n !isSignInPage && isAuthenticated && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_main_nav__WEBPACK_IMPORTED_MODULE_1__.MainNav, {}, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/layout/layout-wrapper.tsx\",\n lineNumber: 20,\n columnNumber: 44\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: isSignInPage ? \"\" : \"min-h-screen\",\n style: !isSignInPage ? {\n backgroundImage: `url('${currentBackground}')`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n backgroundRepeat: 'no-repeat',\n backgroundAttachment: 'fixed',\n cursor: 'pointer',\n transition: 'background-image 0.5s ease-in-out'\n } : {},\n onClick: !isSignInPage ? changeBackground : undefined,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n children: children\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/layout/layout-wrapper.tsx\",\n lineNumber: 36,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/layout/layout-wrapper.tsx\",\n lineNumber: 21,\n columnNumber: 7\n }, this),\n !isSignInPage && isAuthenticated && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_footer__WEBPACK_IMPORTED_MODULE_2__.Footer, {}, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/layout/layout-wrapper.tsx\",\n lineNumber: 38,\n columnNumber: 44\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_toaster__WEBPACK_IMPORTED_MODULE_4__.Toaster, {}, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/layout/layout-wrapper.tsx\",\n lineNumber: 39,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/layout/layout-wrapper.tsx\",\n lineNumber: 19,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL2xheW91dC9sYXlvdXQtd3JhcHBlci50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBRWdEO0FBQ0g7QUFDWTtBQUNQO0FBQ29CO0FBUS9ELFNBQVNLLGNBQWMsRUFBRUMsUUFBUSxFQUFFQyxZQUFZLEVBQUVDLGVBQWUsRUFBc0I7SUFDM0YsTUFBTSxFQUFFQyxpQkFBaUIsRUFBRUMsZ0JBQWdCLEVBQUUsR0FBR04sbUZBQWtCQTtJQUVsRSxxQkFDRSw4REFBQ0Ysa0VBQVNBOztZQUNQLENBQUNLLGdCQUFnQkMsaUNBQW1CLDhEQUFDUix5REFBT0E7Ozs7OzBCQUM3Qyw4REFBQ1c7Z0JBQ0NDLFdBQVdMLGVBQWUsS0FBSztnQkFDL0JNLE9BQ0UsQ0FBQ04sZUFBZTtvQkFDZE8saUJBQWlCLENBQUMsS0FBSyxFQUFFTCxrQkFBa0IsRUFBRSxDQUFDO29CQUM5Q00sZ0JBQWdCO29CQUNoQkMsb0JBQW9CO29CQUNwQkMsa0JBQWtCO29CQUNsQkMsc0JBQXNCO29CQUN0QkMsUUFBUTtvQkFDUkMsWUFBWTtnQkFDZCxJQUFJLENBQUM7Z0JBRVBDLFNBQVMsQ0FBQ2QsZUFBZUcsbUJBQW1CWTswQkFFNUMsNEVBQUNDOzhCQUFNakI7Ozs7Ozs7Ozs7O1lBRVIsQ0FBQ0MsZ0JBQWdCQyxpQ0FBbUIsOERBQUNQLHNEQUFNQTs7Ozs7MEJBQzVDLDhEQUFDRSwyREFBT0E7Ozs7Ozs7Ozs7O0FBR2QiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvY29tcG9uZW50cy9sYXlvdXQvbGF5b3V0LXdyYXBwZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyBNYWluTmF2IH0gZnJvbSBcIkAvY29tcG9uZW50cy9tYWluLW5hdlwiO1xuaW1wb3J0IHsgRm9vdGVyIH0gZnJvbSBcIkAvY29tcG9uZW50cy9mb290ZXJcIjtcbmltcG9ydCB7IEF1dGhDaGVjayB9IGZyb20gXCJAL2NvbXBvbmVudHMvYXV0aC9hdXRoLWNoZWNrXCI7XG5pbXBvcnQgeyBUb2FzdGVyIH0gZnJvbSBcIkAvY29tcG9uZW50cy91aS90b2FzdGVyXCI7XG5pbXBvcnQgeyB1c2VCYWNrZ3JvdW5kSW1hZ2UgfSBmcm9tIFwiQC9jb21wb25lbnRzL2JhY2tncm91bmQtc3dpdGNoZXJcIjtcblxuaW50ZXJmYWNlIExheW91dFdyYXBwZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGlzU2lnbkluUGFnZTogYm9vbGVhbjtcbiAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTGF5b3V0V3JhcHBlcih7IGNoaWxkcmVuLCBpc1NpZ25JblBhZ2UsIGlzQXV0aGVudGljYXRlZCB9OiBMYXlvdXRXcmFwcGVyUHJvcHMpIHtcbiAgY29uc3QgeyBjdXJyZW50QmFja2dyb3VuZCwgY2hhbmdlQmFja2dyb3VuZCB9ID0gdXNlQmFja2dyb3VuZEltYWdlKCk7XG5cbiAgcmV0dXJuIChcbiAgICA8QXV0aENoZWNrPlxuICAgICAgeyFpc1NpZ25JblBhZ2UgJiYgaXNBdXRoZW50aWNhdGVkICYmIDxNYWluTmF2IC8+fVxuICAgICAgPGRpdiBcbiAgICAgICAgY2xhc3NOYW1lPXtpc1NpZ25JblBhZ2UgPyBcIlwiIDogXCJtaW4taC1zY3JlZW5cIn1cbiAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICFpc1NpZ25JblBhZ2UgPyB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJyR7Y3VycmVudEJhY2tncm91bmR9JylgLFxuICAgICAgICAgICAgYmFja2dyb3VuZFNpemU6ICdjb3ZlcicsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kUG9zaXRpb246ICdjZW50ZXInLFxuICAgICAgICAgICAgYmFja2dyb3VuZFJlcGVhdDogJ25vLXJlcGVhdCcsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQXR0YWNobWVudDogJ2ZpeGVkJyxcbiAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JhY2tncm91bmQtaW1hZ2UgMC41cyBlYXNlLWluLW91dCdcbiAgICAgICAgICB9IDoge31cbiAgICAgICAgfVxuICAgICAgICBvbkNsaWNrPXshaXNTaWduSW5QYWdlID8gY2hhbmdlQmFja2dyb3VuZCA6IHVuZGVmaW5lZH1cbiAgICAgID5cbiAgICAgICAgPG1haW4+e2NoaWxkcmVufTwvbWFpbj5cbiAgICAgIDwvZGl2PlxuICAgICAgeyFpc1NpZ25JblBhZ2UgJiYgaXNBdXRoZW50aWNhdGVkICYmIDxGb290ZXIgLz59XG4gICAgICA8VG9hc3RlciAvPlxuICAgIDwvQXV0aENoZWNrPlxuICApO1xufSAiXSwibmFtZXMiOlsiTWFpbk5hdiIsIkZvb3RlciIsIkF1dGhDaGVjayIsIlRvYXN0ZXIiLCJ1c2VCYWNrZ3JvdW5kSW1hZ2UiLCJMYXlvdXRXcmFwcGVyIiwiY2hpbGRyZW4iLCJpc1NpZ25JblBhZ2UiLCJpc0F1dGhlbnRpY2F0ZWQiLCJjdXJyZW50QmFja2dyb3VuZCIsImNoYW5nZUJhY2tncm91bmQiLCJkaXYiLCJjbGFzc05hbWUiLCJzdHlsZSIsImJhY2tncm91bmRJbWFnZSIsImJhY2tncm91bmRTaXplIiwiYmFja2dyb3VuZFBvc2l0aW9uIiwiYmFja2dyb3VuZFJlcGVhdCIsImJhY2tncm91bmRBdHRhY2htZW50IiwiY3Vyc29yIiwidHJhbnNpdGlvbiIsIm9uQ2xpY2siLCJ1bmRlZmluZWQiLCJtYWluIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./components/layout/layout-wrapper.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/main-nav.tsx":
|
|
/*!*********************************!*\
|
|
!*** ./components/main-nav.tsx ***!
|
|
\*********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MainNav: () => (/* binding */ MainNav)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,BotIcon,Calendar,Circle,Clock,Lightbulb,LogOut,Mail,Megaphone,Menu,PenLine,Radio,Target,Telescope,UserCog,Video!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/target.js\");\n/* harmony import */ var _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,BotIcon,Calendar,Circle,Clock,Lightbulb,LogOut,Mail,Megaphone,Menu,PenLine,Radio,Target,Telescope,UserCog,Video!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/lightbulb.js\");\n/* harmony import */ var _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,BotIcon,Calendar,Circle,Clock,Lightbulb,LogOut,Mail,Megaphone,Menu,PenLine,Radio,Target,Telescope,UserCog,Video!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/user-cog.js\");\n/* harmony import */ var _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,BotIcon,Calendar,Circle,Clock,Lightbulb,LogOut,Mail,Megaphone,Menu,PenLine,Radio,Target,Telescope,UserCog,Video!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/mail.js\");\n/* harmony import */ var _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,BotIcon,Calendar,Circle,Clock,Lightbulb,LogOut,Mail,Megaphone,Menu,PenLine,Radio,Target,Telescope,UserCog,Video!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/menu.js\");\n/* harmony import */ var _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,BotIcon,Calendar,Circle,Clock,Lightbulb,LogOut,Mail,Megaphone,Menu,PenLine,Radio,Target,Telescope,UserCog,Video!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/calendar.js\");\n/* harmony import */ var _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,BotIcon,Calendar,Circle,Clock,Lightbulb,LogOut,Mail,Megaphone,Menu,PenLine,Radio,Target,Telescope,UserCog,Video!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/clock.js\");\n/* harmony import */ var _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,BotIcon,Calendar,Circle,Clock,Lightbulb,LogOut,Mail,Megaphone,Menu,PenLine,Radio,Target,Telescope,UserCog,Video!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/pen-line.js\");\n/* harmony import */ var _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,BotIcon,Calendar,Circle,Clock,Lightbulb,LogOut,Mail,Megaphone,Menu,PenLine,Radio,Target,Telescope,UserCog,Video!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/bot.js\");\n/* harmony import */ var _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,BotIcon,Calendar,Circle,Clock,Lightbulb,LogOut,Mail,Megaphone,Menu,PenLine,Radio,Target,Telescope,UserCog,Video!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/video.js\");\n/* harmony import */ var _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,BotIcon,Calendar,Circle,Clock,Lightbulb,LogOut,Mail,Megaphone,Menu,PenLine,Radio,Target,Telescope,UserCog,Video!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/telescope.js\");\n/* harmony import */ var _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,BotIcon,Calendar,Circle,Clock,Lightbulb,LogOut,Mail,Megaphone,Menu,PenLine,Radio,Target,Telescope,UserCog,Video!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/radio.js\");\n/* harmony import */ var _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,BotIcon,Calendar,Circle,Clock,Lightbulb,LogOut,Mail,Megaphone,Menu,PenLine,Radio,Target,Telescope,UserCog,Video!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/megaphone.js\");\n/* harmony import */ var _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,BotIcon,Calendar,Circle,Clock,Lightbulb,LogOut,Mail,Megaphone,Menu,PenLine,Radio,Target,Telescope,UserCog,Video!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/bell.js\");\n/* harmony import */ var _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,BotIcon,Calendar,Circle,Clock,Lightbulb,LogOut,Mail,Megaphone,Menu,PenLine,Radio,Target,Telescope,UserCog,Video!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/circle.js\");\n/* harmony import */ var _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,BotIcon,Calendar,Circle,Clock,Lightbulb,LogOut,Mail,Megaphone,Menu,PenLine,Radio,Target,Telescope,UserCog,Video!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/log-out.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/image */ \"(ssr)/./node_modules/next/dist/api/image.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/link */ \"(ssr)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _sidebar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sidebar */ \"(ssr)/./components/sidebar.tsx\");\n/* harmony import */ var next_auth_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! next-auth/react */ \"(ssr)/./node_modules/next-auth/react/index.js\");\n/* harmony import */ var next_auth_react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(next_auth_react__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/ui/dropdown-menu */ \"(ssr)/./components/ui/dropdown-menu.tsx\");\n/* harmony import */ var _barrel_optimize_names_format_date_fns__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! __barrel_optimize__?names=format!=!date-fns */ \"(ssr)/./node_modules/date-fns/format.mjs\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! date-fns/locale */ \"(ssr)/./node_modules/date-fns/locale/fr.mjs\");\n/* __next_internal_client_entry_do_not_use__ MainNav auto */ \n\n\n\n\n\n\n\n\n\nconst requestNotificationPermission = async ()=>{\n try {\n const permission = await Notification.requestPermission();\n return permission === \"granted\";\n } catch (error) {\n console.error(\"Error requesting notification permission:\", error);\n return false;\n }\n};\nfunction MainNav() {\n const [isSidebarOpen, setIsSidebarOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const { data: session, status } = (0,next_auth_react__WEBPACK_IMPORTED_MODULE_5__.useSession)();\n const [userStatus, setUserStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('online');\n console.log(\"Session:\", session);\n console.log(\"Status:\", status);\n // Updated function to get user initials\n const getUserInitials = ()=>{\n if (session?.user?.name) {\n // Split the full name and get initials\n const names = session.user.name.split(' ');\n if (names.length >= 2) {\n return `${names[0][0]}${names[names.length - 1][0]}`.toUpperCase();\n }\n // If only one name, use first two letters\n return names[0].slice(0, 2).toUpperCase();\n }\n return \"?\";\n };\n // Function to get display name\n const getDisplayName = ()=>{\n return session?.user?.name || \"User\";\n };\n // Function to get user role\n const getUserRole = ()=>{\n if (session?.user?.role) {\n if (Array.isArray(session.user.role)) {\n // Filter out technical roles and format remaining ones\n return session.user.role.filter((role)=>![\n 'offline_access',\n 'uma_authorization',\n 'default-roles-cercle'\n ].includes(role)).map((role)=>{\n // Transform role names\n switch(role){\n case 'ROLE_Mentors':\n return 'Mentor';\n case 'ROLE_apprentice':\n return 'Apprentice';\n case 'ROLE_Admin':\n return 'Admin';\n default:\n return role.replace('ROLE_', '');\n }\n }).join(', ');\n }\n return session.user.role;\n }\n return \"\";\n };\n // Function to check if user has a specific role\n const hasRole = (requiredRoles)=>{\n if (!session?.user?.role) {\n console.log('No user roles found');\n return false;\n }\n const userRoles = Array.isArray(session.user.role) ? session.user.role : [\n session.user.role\n ];\n console.log('Raw user roles:', userRoles);\n // Clean up user roles by removing prefixes and converting to lowercase\n const cleanUserRoles = userRoles.map((role)=>role.replace(/^[\\/]/, '') // Remove leading slash\n .replace(/^ROLE_/, '') // Remove ROLE_ prefix\n .toLowerCase());\n console.log('Clean user roles:', cleanUserRoles);\n // Clean required roles\n const cleanRequiredRoles = requiredRoles.map((role)=>role.toLowerCase());\n console.log('Clean required roles:', cleanRequiredRoles);\n // Check if user has any of the required roles\n const hasAnyRole = cleanRequiredRoles.some((role)=>cleanUserRoles.includes(role));\n console.log('Has any role:', hasAnyRole);\n return hasAnyRole;\n };\n // Status configurations\n const statusConfig = {\n online: {\n color: 'text-green-500',\n label: 'Online',\n notifications: true\n },\n busy: {\n color: 'text-orange-500',\n label: 'Busy',\n notifications: false\n },\n away: {\n color: 'text-gray-500',\n label: 'Away',\n notifications: false\n }\n };\n // Handle status change\n const handleStatusChange = async (newStatus)=>{\n setUserStatus(newStatus);\n if (newStatus !== 'online') {\n // If status is busy or away, check and request notification permission if needed\n const hasPermission = await requestNotificationPermission();\n if (hasPermission) {\n // Disable notifications\n if ('serviceWorker' in navigator) {\n const registration = await navigator.serviceWorker.ready;\n await registration.pushManager.getSubscription()?.then((subscription)=>{\n if (subscription) {\n subscription.unsubscribe();\n }\n });\n }\n }\n } else {\n // Re-enable notifications if going back online\n requestNotificationPermission();\n }\n };\n // Base menu items (available for everyone)\n const baseMenuItems = [\n {\n title: \"QG\",\n icon: _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n href: '/qg'\n }\n ];\n // Role-specific menu items\n const roleSpecificItems = [\n {\n title: \"ShowCase\",\n icon: _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n href: '/showcase',\n requiredRoles: [\n \"Expression\"\n ]\n },\n {\n title: \"Equipes\",\n icon: _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n href: '/equipes',\n requiredRoles: [\n \"Admin\",\n \"Entrepreneurship\"\n ]\n },\n {\n title: \"TheMessage\",\n icon: _barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n href: '/the-message',\n requiredRoles: [\n \"Mediation\",\n \"Expression\"\n ]\n }\n ];\n // Get visible menu items based on user roles\n const visibleMenuItems = [\n ...baseMenuItems,\n ...roleSpecificItems.filter((item)=>hasRole(item.requiredRoles))\n ];\n // Format current date and time\n const now = new Date();\n const formattedDate = (0,_barrel_optimize_names_format_date_fns__WEBPACK_IMPORTED_MODULE_11__.format)(now, \"d MMMM yyyy\", {\n locale: date_fns_locale__WEBPACK_IMPORTED_MODULE_12__.fr\n });\n const formattedTime = (0,_barrel_optimize_names_format_date_fns__WEBPACK_IMPORTED_MODULE_11__.format)(now, \"HH:mm\");\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed top-0 left-0 right-0 z-50 bg-black\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between px-4 py-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setIsSidebarOpen(true),\n className: \"text-white/80 hover:text-white\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 231,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 227,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_3___default()), {\n href: \"/\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_image__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n src: \"/Neahv2 logo W.png\",\n alt: \"Neah Logo\",\n width: 40,\n height: 13,\n className: \"text-white\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 234,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 233,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_3___default()), {\n href: \"/agenda\",\n className: \"text-white/80 hover:text-white\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 243,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 242,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_3___default()), {\n href: \"/timetracker\",\n className: \"text-white/80 hover:text-white\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 246,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"sr-only\",\n children: \"TimeTracker\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 247,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 245,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_3___default()), {\n href: \"/notes\",\n className: \"text-white/80 hover:text-white\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 250,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"sr-only\",\n children: \"Notes\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 251,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 249,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_3___default()), {\n href: \"/alma\",\n className: \"text-white/80 hover:text-white\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 254,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"sr-only\",\n children: \"ALMA\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 255,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 253,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_3___default()), {\n href: \"/vision\",\n className: \"text-white/80 hover:text-white\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 258,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"sr-only\",\n children: \"Vision\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 259,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 257,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_3___default()), {\n href: \"/observatory\",\n className: \"text-white/80 hover:text-white\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 262,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"sr-only\",\n children: \"Observatory\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 263,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 261,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_3___default()), {\n href: \"/radio\",\n className: \"text-white/80 hover:text-white\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 266,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"sr-only\",\n children: \"Radio\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 267,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 265,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_3___default()), {\n href: \"/announcement\",\n className: \"text-white/80 hover:text-white\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 270,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"sr-only\",\n children: \"Announcement\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 271,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 269,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 226,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-white/80 text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"mr-2\",\n children: formattedDate\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 279,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: formattedTime\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 280,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 278,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_3___default()), {\n href: \"/notifications\",\n className: \"text-white/80 hover:text-white\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 287,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 283,\n columnNumber: 13\n }, this),\n status === \"authenticated\" && session?.user ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_6__.DropdownMenu, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_6__.DropdownMenuTrigger, {\n className: \"outline-none\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 rounded-full bg-blue-600 flex items-center justify-center text-white cursor-pointer hover:bg-blue-700 transition-colors\",\n children: getUserInitials()\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 293,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 292,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_6__.DropdownMenuContent, {\n align: \"end\",\n className: \"w-56 bg-black/90 border-gray-700\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_6__.DropdownMenuLabel, {\n className: \"text-white/80\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: getDisplayName()\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 300,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_6__.DropdownMenu, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_6__.DropdownMenuTrigger, {\n className: \"outline-none\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-1 text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n className: `h-3 w-3 ${statusConfig[userStatus].color}`\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 304,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-400\",\n children: statusConfig[userStatus].label\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 305,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 303,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 302,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_6__.DropdownMenuContent, {\n className: \"bg-black/90 border-gray-700\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_6__.DropdownMenuItem, {\n className: \"text-white/80 hover:text-white hover:bg-black/50 cursor-pointer\",\n onClick: ()=>handleStatusChange('online'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n className: \"h-3 w-3 text-green-500 mr-2\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 313,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Online\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 314,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 309,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_6__.DropdownMenuItem, {\n className: \"text-white/80 hover:text-white hover:bg-black/50 cursor-pointer\",\n onClick: ()=>handleStatusChange('busy'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n className: \"h-3 w-3 text-orange-500 mr-2\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 320,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Busy\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 321,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 316,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_6__.DropdownMenuItem, {\n className: \"text-white/80 hover:text-white hover:bg-black/50 cursor-pointer\",\n onClick: ()=>handleStatusChange('away'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n className: \"h-3 w-3 text-gray-500 mr-2\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 327,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Away\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 328,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 323,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 308,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 301,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 299,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 298,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_6__.DropdownMenuSeparator, {\n className: \"bg-gray-700\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 334,\n columnNumber: 19\n }, this),\n visibleMenuItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_6__.DropdownMenuItem, {\n className: \"text-white/80 hover:text-white hover:bg-black/50 cursor-pointer\",\n onClick: ()=>window.location.href = item.href,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(item.icon, {\n className: \"mr-2 h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 341,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: item.title\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 342,\n columnNumber: 23\n }, this)\n ]\n }, item.title, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 336,\n columnNumber: 21\n }, this)),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_6__.DropdownMenuItem, {\n className: \"text-white/80 hover:text-white hover:bg-black/50 cursor-pointer\",\n onClick: async ()=>{\n try {\n // First sign out from NextAuth\n await (0,next_auth_react__WEBPACK_IMPORTED_MODULE_5__.signOut)({\n callbackUrl: '/signin',\n redirect: false\n });\n // Then redirect to Keycloak logout with proper parameters\n const keycloakLogoutUrl = new URL(`${process.env.NEXT_PUBLIC_KEYCLOAK_ISSUER}/protocol/openid-connect/logout`);\n // Add required parameters\n keycloakLogoutUrl.searchParams.append('post_logout_redirect_uri', window.location.origin);\n keycloakLogoutUrl.searchParams.append('id_token_hint', session?.accessToken || '');\n // Redirect to Keycloak logout\n window.location.href = keycloakLogoutUrl.toString();\n } catch (error) {\n console.error('Error during logout:', error);\n // Fallback to simple redirect if something goes wrong\n window.location.href = '/signin';\n }\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_BotIcon_Calendar_Circle_Clock_Lightbulb_LogOut_Mail_Megaphone_Menu_PenLine_Radio_Target_Telescope_UserCog_Video_lucide_react__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n className: \"mr-2 h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 379,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"D\\xe9connexion\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 380,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 345,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 297,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 291,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"cursor-pointer text-white/80 hover:text-white\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n onClick: ()=>(0,next_auth_react__WEBPACK_IMPORTED_MODULE_5__.signIn)(\"keycloak\", {\n callbackUrl: \"/\"\n }),\n children: \"Login\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 386,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 385,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 276,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 224,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 223,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_sidebar__WEBPACK_IMPORTED_MODULE_4__.Sidebar, {\n isOpen: isSidebarOpen,\n onClose: ()=>setIsSidebarOpen(false)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/main-nav.tsx\",\n lineNumber: 394,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QixDQUFDLCtCQUErQixDQUFDOzREQUc3RSwwQkFBMEI7NERBQzFCSixrQkFBa0JLLFlBQVksQ0FBQ0MsTUFBTSxDQUNuQyw0QkFDQVYsT0FBT0MsUUFBUSxDQUFDVSxNQUFNOzREQUV4QlAsa0JBQWtCSyxZQUFZLENBQUNDLE1BQU0sQ0FDbkMsaUJBQ0FsRixTQUFTb0YsZUFBZTs0REFHMUIsOEJBQThCOzREQUM5QlosT0FBT0MsUUFBUSxDQUFDcEIsSUFBSSxHQUFHdUIsa0JBQWtCUyxRQUFRO3dEQUNuRCxFQUFFLE9BQU8zRixPQUFPOzREQUNkQyxRQUFRRCxLQUFLLENBQUMsd0JBQXdCQTs0REFDdEMsc0RBQXNEOzREQUN0RDhFLE9BQU9DLFFBQVEsQ0FBQ3BCLElBQUksR0FBRzt3REFDekI7b0RBQ0Y7O3NFQUVBLDhEQUFDM0YsaU1BQU1BOzREQUFDcUcsV0FBVTs7Ozs7O3NFQUNsQiw4REFBQ087c0VBQUs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3lEQUtaLDhEQUFDUjtvQ0FBSUMsV0FBVTs4Q0FDYiw0RUFBQ087d0NBQUtMLFNBQVMsSUFBTXJGLHVEQUFNQSxDQUFDLFlBQVk7Z0RBQUU4RixhQUFhOzRDQUFJO2tEQUFJOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQVF6RSw4REFBQ2hHLDZDQUFPQTtnQkFBQzRHLFFBQVF6RjtnQkFBZTBGLFNBQVMsSUFBTXpGLGlCQUFpQjs7Ozs7Ozs7QUFHdEUiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvY29tcG9uZW50cy9tYWluLW5hdi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBDYWxlbmRhcixcbiAgTWVzc2FnZVNxdWFyZSxcbiAgQm90SWNvbiBhcyBSb2JvdCxcbiAgQmVsbCxcbiAgVXNlcnMsXG4gIExvZ091dCxcbiAgVXNlckNvZyxcbiAgQ2xvY2ssXG4gIFBlbkxpbmUsXG4gIFZpZGVvLFxuICBSYWRpbyBhcyBSYWRpb0ljb24sXG4gIE1lZ2FwaG9uZSxcbiAgSGVhcnQsXG4gIFRhcmdldCxcbiAgTWFpbCxcbiAgVGVsZXNjb3BlLFxuICBMaWdodGJ1bGIsXG4gIENpcmNsZSxcbiAgTWVudSxcbn0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiO1xuaW1wb3J0IEltYWdlIGZyb20gXCJuZXh0L2ltYWdlXCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyBTaWRlYmFyIH0gZnJvbSBcIi4vc2lkZWJhclwiO1xuaW1wb3J0IHsgdXNlU2Vzc2lvbiwgc2lnbkluLCBzaWduT3V0IH0gZnJvbSBcIm5leHQtYXV0aC9yZWFjdFwiO1xuaW1wb3J0IHtcbiAgRHJvcGRvd25NZW51LFxuICBEcm9wZG93bk1lbnVDb250ZW50LFxuICBEcm9wZG93bk1lbnVJdGVtLFxuICBEcm9wZG93bk1lbnVMYWJlbCxcbiAgRHJvcGRvd25NZW51U2VwYXJhdG9yLFxuICBEcm9wZG93bk1lbnVUcmlnZ2VyLFxufSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL2Ryb3Bkb3duLW1lbnVcIjtcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IGZyIH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlJztcblxuY29uc3QgcmVxdWVzdE5vdGlmaWNhdGlvblBlcm1pc3Npb24gPSBhc3luYyAoKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGVybWlzc2lvbiA9IGF3YWl0IE5vdGlmaWNhdGlvbi5yZXF1ZXN0UGVybWlzc2lvbigpO1xuICAgIHJldHVybiBwZXJtaXNzaW9uID09PSBcImdyYW50ZWRcIjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcmVxdWVzdGluZyBub3RpZmljYXRpb24gcGVybWlzc2lvbjpcIiwgZXJyb3IpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIE1haW5OYXYoKSB7XG4gIGNvbnN0IFtpc1NpZGViYXJPcGVuLCBzZXRJc1NpZGViYXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgeyBkYXRhOiBzZXNzaW9uLCBzdGF0dXMgfSA9IHVzZVNlc3Npb24oKTtcbiAgY29uc3QgW3VzZXJTdGF0dXMsIHNldFVzZXJTdGF0dXNdID0gdXNlU3RhdGU8J29ubGluZScgfCAnYnVzeScgfCAnYXdheSc+KCdvbmxpbmUnKTtcblxuICBjb25zb2xlLmxvZyhcIlNlc3Npb246XCIsIHNlc3Npb24pO1xuICBjb25zb2xlLmxvZyhcIlN0YXR1czpcIiwgc3RhdHVzKTtcblxuICAvLyBVcGRhdGVkIGZ1bmN0aW9uIHRvIGdldCB1c2VyIGluaXRpYWxzXG4gIGNvbnN0IGdldFVzZXJJbml0aWFscyA9ICgpID0+IHtcbiAgICBpZiAoc2Vzc2lvbj8udXNlcj8ubmFtZSkge1xuICAgICAgLy8gU3BsaXQgdGhlIGZ1bGwgbmFtZSBhbmQgZ2V0IGluaXRpYWxzXG4gICAgICBjb25zdCBuYW1lcyA9IHNlc3Npb24udXNlci5uYW1lLnNwbGl0KCcgJyk7XG4gICAgICBpZiAobmFtZXMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgcmV0dXJuIGAke25hbWVzWzBdWzBdfSR7bmFtZXNbbmFtZXMubGVuZ3RoIC0gMV1bMF19YC50b1VwcGVyQ2FzZSgpO1xuICAgICAgfVxuICAgICAgLy8gSWYgb25seSBvbmUgbmFtZSwgdXNlIGZpcnN0IHR3byBsZXR0ZXJzXG4gICAgICByZXR1cm4gbmFtZXNbMF0uc2xpY2UoMCwgMikudG9VcHBlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiP1wiO1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIHRvIGdldCBkaXNwbGF5IG5hbWVcbiAgY29uc3QgZ2V0RGlzcGxheU5hbWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHNlc3Npb24/LnVzZXI/Lm5hbWUgfHwgXCJVc2VyXCI7XG4gIH07XG5cbiAgLy8gRnVuY3Rpb24gdG8gZ2V0IHVzZXIgcm9sZVxuICBjb25zdCBnZXRVc2VyUm9sZSA9ICgpID0+IHtcbiAgICBpZiAoc2Vzc2lvbj8udXNlcj8ucm9sZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2Vzc2lvbi51c2VyLnJvbGUpKSB7XG4gICAgICAgIC8vIEZpbHRlciBvdXQgdGVjaG5pY2FsIHJvbGVzIGFuZCBmb3JtYXQgcmVtYWluaW5nIG9uZXNcbiAgICAgICAgcmV0dXJuIHNlc3Npb24udXNlci5yb2xlXG4gICAgICAgICAgLmZpbHRlcihyb2xlID0+IFxuICAgICAgICAgICAgIVsnb2ZmbGluZV9hY2Nlc3MnLCAndW1hX2F1dGhvcml6YXRpb24nLCAnZGVmYXVsdC1yb2xlcy1jZXJjbGUnXS5pbmNsdWRlcyhyb2xlKVxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKHJvbGUgPT4ge1xuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHJvbGUgbmFtZXNcbiAgICAgICAgICAgIHN3aXRjaChyb2xlKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ1JPTEVfTWVudG9ycyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdNZW50b3InO1xuICAgICAgICAgICAgICBjYXNlICdST0xFX2FwcHJlbnRpY2UnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnQXBwcmVudGljZSc7XG4gICAgICAgICAgICAgIGNhc2UgJ1JPTEVfQWRtaW4nOlxuICAgICAgICAgICAgICAgIHJldHVybiAnQWRtaW4nO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiByb2xlLnJlcGxhY2UoJ1JPTEVfJywgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2Vzc2lvbi51c2VyLnJvbGU7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIHVzZXIgaGFzIGEgc3BlY2lmaWMgcm9sZVxuICBjb25zdCBoYXNSb2xlID0gKHJlcXVpcmVkUm9sZXM6IHN0cmluZ1tdKSA9PiB7XG4gICAgaWYgKCFzZXNzaW9uPy51c2VyPy5yb2xlKSB7XG4gICAgICBjb25zb2xlLmxvZygnTm8gdXNlciByb2xlcyBmb3VuZCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB1c2VyUm9sZXMgPSBBcnJheS5pc0FycmF5KHNlc3Npb24udXNlci5yb2xlKSA/IHNlc3Npb24udXNlci5yb2xlIDogW3Nlc3Npb24udXNlci5yb2xlXTtcbiAgICBjb25zb2xlLmxvZygnUmF3IHVzZXIgcm9sZXM6JywgdXNlclJvbGVzKTtcbiAgICBcbiAgICAvLyBDbGVhbiB1cCB1c2VyIHJvbGVzIGJ5IHJlbW92aW5nIHByZWZpeGVzIGFuZCBjb252ZXJ0aW5nIHRvIGxvd2VyY2FzZVxuICAgIGNvbnN0IGNsZWFuVXNlclJvbGVzID0gdXNlclJvbGVzLm1hcChyb2xlID0+IFxuICAgICAgcm9sZS5yZXBsYWNlKC9eW1xcL10vLCAnJykgIC8vIFJlbW92ZSBsZWFkaW5nIHNsYXNoXG4gICAgICAgICAgLnJlcGxhY2UoL15ST0xFXy8sICcnKSAvLyBSZW1vdmUgUk9MRV8gcHJlZml4XG4gICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKCdDbGVhbiB1c2VyIHJvbGVzOicsIGNsZWFuVXNlclJvbGVzKTtcbiAgICBcbiAgICAvLyBDbGVhbiByZXF1aXJlZCByb2xlc1xuICAgIGNvbnN0IGNsZWFuUmVxdWlyZWRSb2xlcyA9IHJlcXVpcmVkUm9sZXMubWFwKHJvbGUgPT4gcm9sZS50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zb2xlLmxvZygnQ2xlYW4gcmVxdWlyZWQgcm9sZXM6JywgY2xlYW5SZXF1aXJlZFJvbGVzKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiB1c2VyIGhhcyBhbnkgb2YgdGhlIHJlcXVpcmVkIHJvbGVzXG4gICAgY29uc3QgaGFzQW55Um9sZSA9IGNsZWFuUmVxdWlyZWRSb2xlcy5zb21lKHJvbGUgPT4gY2xlYW5Vc2VyUm9sZXMuaW5jbHVkZXMocm9sZSkpO1xuICAgIGNvbnNvbGUubG9nKCdIYXMgYW55IHJvbGU6JywgaGFzQW55Um9sZSk7XG4gICAgXG4gICAgcmV0dXJuIGhhc0FueVJvbGU7XG4gIH07XG5cbiAgLy8gU3RhdHVzIGNvbmZpZ3VyYXRpb25zXG4gIGNvbnN0IHN0YXR1c0NvbmZpZyA9IHtcbiAgICBvbmxpbmU6IHtcbiAgICAgIGNvbG9yOiAndGV4dC1ncmVlbi01MDAnLFxuICAgICAgbGFiZWw6ICdPbmxpbmUnLFxuICAgICAgbm90aWZpY2F0aW9uczogdHJ1ZVxuICAgIH0sXG4gICAgYnVzeToge1xuICAgICAgY29sb3I6ICd0ZXh0LW9yYW5nZS01MDAnLFxuICAgICAgbGFiZWw6ICdCdXN5JyxcbiAgICAgIG5vdGlmaWNhdGlvbnM6IGZhbHNlXG4gICAgfSxcbiAgICBhd2F5OiB7XG4gICAgICBjb2xvcjogJ3RleHQtZ3JheS01MDAnLFxuICAgICAgbGFiZWw6ICdBd2F5JyxcbiAgICAgIG5vdGlmaWNhdGlvbnM6IGZhbHNlXG4gICAgfSxcbiAgfTtcblxuICAvLyBIYW5kbGUgc3RhdHVzIGNoYW5nZVxuICBjb25zdCBoYW5kbGVTdGF0dXNDaGFuZ2UgPSBhc3luYyAobmV3U3RhdHVzOiAnb25saW5lJyB8ICdidXN5JyB8ICdhd2F5JykgPT4ge1xuICAgIHNldFVzZXJTdGF0dXMobmV3U3RhdHVzKTtcbiAgICBcbiAgICBpZiAobmV3U3RhdHVzICE9PSAnb25saW5lJykge1xuICAgICAgLy8gSWYgc3RhdHVzIGlzIGJ1c3kgb3IgYXdheSwgY2hlY2sgYW5kIHJlcXVlc3Qgbm90aWZpY2F0aW9uIHBlcm1pc3Npb24gaWYgbmVlZGVkXG4gICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gYXdhaXQgcmVxdWVzdE5vdGlmaWNhdGlvblBlcm1pc3Npb24oKTtcbiAgICAgIFxuICAgICAgaWYgKGhhc1Blcm1pc3Npb24pIHtcbiAgICAgICAgLy8gRGlzYWJsZSBub3RpZmljYXRpb25zXG4gICAgICAgIGlmICgnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSB7XG4gICAgICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHk7XG4gICAgICAgICAgYXdhaXQgcmVnaXN0cmF0aW9uLnB1c2hNYW5hZ2VyLmdldFN1YnNjcmlwdGlvbigpPy50aGVuKHN1YnNjcmlwdGlvbiA9PiB7XG4gICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLWVuYWJsZSBub3RpZmljYXRpb25zIGlmIGdvaW5nIGJhY2sgb25saW5lXG4gICAgICByZXF1ZXN0Tm90aWZpY2F0aW9uUGVybWlzc2lvbigpO1xuICAgIH1cbiAgfTtcblxuICAvLyBCYXNlIG1lbnUgaXRlbXMgKGF2YWlsYWJsZSBmb3IgZXZlcnlvbmUpXG4gIGNvbnN0IGJhc2VNZW51SXRlbXMgPSBbXG4gICAge1xuICAgICAgdGl0bGU6IFwiUUdcIixcbiAgICAgIGljb246IFRhcmdldCxcbiAgICAgIGhyZWY6ICcvcWcnLFxuICAgIH0sXG4gIF07XG5cbiAgLy8gUm9sZS1zcGVjaWZpYyBtZW51IGl0ZW1zXG4gIGNvbnN0IHJvbGVTcGVjaWZpY0l0ZW1zID0gW1xuICAgIHtcbiAgICAgIHRpdGxlOiBcIlNob3dDYXNlXCIsXG4gICAgICBpY29uOiBMaWdodGJ1bGIsXG4gICAgICBocmVmOiAnL3Nob3djYXNlJyxcbiAgICAgIHJlcXVpcmVkUm9sZXM6IFtcIkV4cHJlc3Npb25cIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogXCJFcXVpcGVzXCIsXG4gICAgICBpY29uOiBVc2VyQ29nLFxuICAgICAgaHJlZjogJy9lcXVpcGVzJyxcbiAgICAgIHJlcXVpcmVkUm9sZXM6IFtcIkFkbWluXCIsIFwiRW50cmVwcmVuZXVyc2hpcFwiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiBcIlRoZU1lc3NhZ2VcIixcbiAgICAgIGljb246IE1haWwsXG4gICAgICBocmVmOiAnL3RoZS1tZXNzYWdlJyxcbiAgICAgIHJlcXVpcmVkUm9sZXM6IFtcIk1lZGlhdGlvblwiLCBcIkV4cHJlc3Npb25cIl0sXG4gICAgfSxcbiAgXTtcblxuICAvLyBHZXQgdmlzaWJsZSBtZW51IGl0ZW1zIGJhc2VkIG9uIHVzZXIgcm9sZXNcbiAgY29uc3QgdmlzaWJsZU1lbnVJdGVtcyA9IFtcbiAgICAuLi5iYXNlTWVudUl0ZW1zLFxuICAgIC4uLnJvbGVTcGVjaWZpY0l0ZW1zLmZpbHRlcihpdGVtID0+IGhhc1JvbGUoaXRlbS5yZXF1aXJlZFJvbGVzKSlcbiAgXTtcblxuICAvLyBGb3JtYXQgY3VycmVudCBkYXRlIGFuZCB0aW1lXG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBmb3JtYXQobm93LCBcImQgTU1NTSB5eXl5XCIsIHsgbG9jYWxlOiBmciB9KTtcbiAgY29uc3QgZm9ybWF0dGVkVGltZSA9IGZvcm1hdChub3csIFwiSEg6bW1cIik7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaXhlZCB0b3AtMCBsZWZ0LTAgcmlnaHQtMCB6LTUwIGJnLWJsYWNrXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTQgcHktMVwiPlxuICAgICAgICAgIHsvKiBMZWZ0IHNpZGUgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTRcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNTaWRlYmFyT3Blbih0cnVlKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC13aGl0ZS84MCBob3Zlcjp0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPE1lbnUgY2xhc3NOYW1lPVwidy01IGgtNVwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxMaW5rIGhyZWY9Jy8nPlxuICAgICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgICBzcmM9Jy9OZWFodjIgbG9nbyBXLnBuZydcbiAgICAgICAgICAgICAgICBhbHQ9J05lYWggTG9nbydcbiAgICAgICAgICAgICAgICB3aWR0aD17NDB9XG4gICAgICAgICAgICAgICAgaGVpZ2h0PXsxM31cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9J3RleHQtd2hpdGUnXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICA8TGluayBocmVmPScvYWdlbmRhJyBjbGFzc05hbWU9J3RleHQtd2hpdGUvODAgaG92ZXI6dGV4dC13aGl0ZSc+XG4gICAgICAgICAgICAgIDxDYWxlbmRhciBjbGFzc05hbWU9J3ctNSBoLTUnIC8+XG4gICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICA8TGluayBocmVmPScvdGltZXRyYWNrZXInIGNsYXNzTmFtZT0ndGV4dC13aGl0ZS84MCBob3Zlcjp0ZXh0LXdoaXRlJz5cbiAgICAgICAgICAgICAgPENsb2NrIGNsYXNzTmFtZT0ndy01IGgtNScgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPlRpbWVUcmFja2VyPC9zcGFuPlxuICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgPExpbmsgaHJlZj0nL25vdGVzJyBjbGFzc05hbWU9J3RleHQtd2hpdGUvODAgaG92ZXI6dGV4dC13aGl0ZSc+XG4gICAgICAgICAgICAgIDxQZW5MaW5lIGNsYXNzTmFtZT0ndy01IGgtNScgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPk5vdGVzPC9zcGFuPlxuICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgPExpbmsgaHJlZj0nL2FsbWEnIGNsYXNzTmFtZT0ndGV4dC13aGl0ZS84MCBob3Zlcjp0ZXh0LXdoaXRlJz5cbiAgICAgICAgICAgICAgPFJvYm90IGNsYXNzTmFtZT0ndy01IGgtNScgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkFMTUE8L3NwYW4+XG4gICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICA8TGluayBocmVmPScvdmlzaW9uJyBjbGFzc05hbWU9J3RleHQtd2hpdGUvODAgaG92ZXI6dGV4dC13aGl0ZSc+XG4gICAgICAgICAgICAgIDxWaWRlbyBjbGFzc05hbWU9J3ctNSBoLTUnIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5WaXNpb248L3NwYW4+XG4gICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICA8TGluayBocmVmPScvb2JzZXJ2YXRvcnknIGNsYXNzTmFtZT0ndGV4dC13aGl0ZS84MCBob3Zlcjp0ZXh0LXdoaXRlJz5cbiAgICAgICAgICAgICAgPFRlbGVzY29wZSBjbGFzc05hbWU9J3ctNSBoLTUnIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5PYnNlcnZhdG9yeTwvc3Bhbj5cbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgIDxMaW5rIGhyZWY9Jy9yYWRpbycgY2xhc3NOYW1lPSd0ZXh0LXdoaXRlLzgwIGhvdmVyOnRleHQtd2hpdGUnPlxuICAgICAgICAgICAgICA8UmFkaW9JY29uIGNsYXNzTmFtZT0ndy01IGgtNScgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPlJhZGlvPC9zcGFuPlxuICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgPExpbmsgaHJlZj0nL2Fubm91bmNlbWVudCcgY2xhc3NOYW1lPSd0ZXh0LXdoaXRlLzgwIGhvdmVyOnRleHQtd2hpdGUnPlxuICAgICAgICAgICAgICA8TWVnYXBob25lIGNsYXNzTmFtZT0ndy01IGgtNScgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkFubm91bmNlbWVudDwvc3Bhbj5cbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBSaWdodCBzaWRlICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC04XCI+XG4gICAgICAgICAgICB7LyogRGF0ZSBhbmQgVGltZSB3aXRoIHNtYWxsZXIgdGV4dCAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC13aGl0ZS84MCB0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1yLTJcIj57Zm9ybWF0dGVkRGF0ZX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuPntmb3JtYXR0ZWRUaW1lfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICBocmVmPScvbm90aWZpY2F0aW9ucydcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPSd0ZXh0LXdoaXRlLzgwIGhvdmVyOnRleHQtd2hpdGUnXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxCZWxsIGNsYXNzTmFtZT0ndy01IGgtNScgLz5cbiAgICAgICAgICAgIDwvTGluaz5cblxuICAgICAgICAgICAge3N0YXR1cyA9PT0gXCJhdXRoZW50aWNhdGVkXCIgJiYgc2Vzc2lvbj8udXNlciA/IChcbiAgICAgICAgICAgICAgPERyb3Bkb3duTWVudT5cbiAgICAgICAgICAgICAgICA8RHJvcGRvd25NZW51VHJpZ2dlciBjbGFzc05hbWU9XCJvdXRsaW5lLW5vbmVcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy04IGgtOCByb3VuZGVkLWZ1bGwgYmctYmx1ZS02MDAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1ibHVlLTcwMCB0cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0VXNlckluaXRpYWxzKCl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTWVudVRyaWdnZXI+XG4gICAgICAgICAgICAgICAgPERyb3Bkb3duTWVudUNvbnRlbnQgYWxpZ249XCJlbmRcIiBjbGFzc05hbWU9XCJ3LTU2IGJnLWJsYWNrLzkwIGJvcmRlci1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTWVudUxhYmVsIGNsYXNzTmFtZT1cInRleHQtd2hpdGUvODBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57Z2V0RGlzcGxheU5hbWUoKX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bk1lbnVUcmlnZ2VyIGNsYXNzTmFtZT1cIm91dGxpbmUtbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMSB0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENpcmNsZSBjbGFzc05hbWU9e2BoLTMgdy0zICR7c3RhdHVzQ29uZmlnW3VzZXJTdGF0dXNdLmNvbG9yfWB9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTQwMFwiPntzdGF0dXNDb25maWdbdXNlclN0YXR1c10ubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51VHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bk1lbnVDb250ZW50IGNsYXNzTmFtZT1cImJnLWJsYWNrLzkwIGJvcmRlci1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd25NZW51SXRlbSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlLzgwIGhvdmVyOnRleHQtd2hpdGUgaG92ZXI6YmctYmxhY2svNTAgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVN0YXR1c0NoYW5nZSgnb25saW5lJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2lyY2xlIGNsYXNzTmFtZT1cImgtMyB3LTMgdGV4dC1ncmVlbi01MDAgbXItMlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+T25saW5lPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bk1lbnVJdGVtIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtd2hpdGUvODAgaG92ZXI6dGV4dC13aGl0ZSBob3ZlcjpiZy1ibGFjay81MCBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU3RhdHVzQ2hhbmdlKCdidXN5Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2lyY2xlIGNsYXNzTmFtZT1cImgtMyB3LTMgdGV4dC1vcmFuZ2UtNTAwIG1yLTJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkJ1c3k8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTWVudUl0ZW0gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC13aGl0ZS84MCBob3Zlcjp0ZXh0LXdoaXRlIGhvdmVyOmJnLWJsYWNrLzUwIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTdGF0dXNDaGFuZ2UoJ2F3YXknKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDaXJjbGUgY2xhc3NOYW1lPVwiaC0zIHctMyB0ZXh0LWdyYXktNTAwIG1yLTJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkF3YXk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51Q29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTWVudT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTWVudUxhYmVsPlxuICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTWVudVNlcGFyYXRvciBjbGFzc05hbWU9XCJiZy1ncmF5LTcwMFwiIC8+XG4gICAgICAgICAgICAgICAgICB7dmlzaWJsZU1lbnVJdGVtcy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTWVudUl0ZW0gXG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtd2hpdGUvODAgaG92ZXI6dGV4dC13aGl0ZSBob3ZlcjpiZy1ibGFjay81MCBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gd2luZG93LmxvY2F0aW9uLmhyZWYgPSBpdGVtLmhyZWZ9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8aXRlbS5pY29uIGNsYXNzTmFtZT1cIm1yLTIgaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e2l0ZW0udGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDxEcm9wZG93bk1lbnVJdGVtIFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlLzgwIGhvdmVyOnRleHQtd2hpdGUgaG92ZXI6YmctYmxhY2svNTAgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IHNpZ24gb3V0IGZyb20gTmV4dEF1dGhcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpZ25PdXQoeyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tVcmw6ICcvc2lnbmluJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlIFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZW4gcmVkaXJlY3QgdG8gS2V5Y2xvYWsgbG9nb3V0IHdpdGggcHJvcGVyIHBhcmFtZXRlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleWNsb2FrTG9nb3V0VXJsID0gbmV3IFVSTChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfS0VZQ0xPQUtfSVNTVUVSfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC9sb2dvdXRgXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgcmVxdWlyZWQgcGFyYW1ldGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5Y2xvYWtMb2dvdXRVcmwuc2VhcmNoUGFyYW1zLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXljbG9ha0xvZ291dFVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnaWRfdG9rZW5faGludCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24/LmFjY2Vzc1Rva2VuIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWRpcmVjdCB0byBLZXljbG9hayBsb2dvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0ga2V5Y2xvYWtMb2dvdXRVcmwudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGxvZ291dDonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGYWxsYmFjayB0byBzaW1wbGUgcmVkaXJlY3QgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9zaWduaW4nO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPExvZ091dCBjbGFzc05hbWU9XCJtci0yIGgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Ew6ljb25uZXhpb248L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgPC9Ecm9wZG93bk1lbnVDb250ZW50PlxuICAgICAgICAgICAgICA8L0Ryb3Bkb3duTWVudT5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjdXJzb3ItcG9pbnRlciB0ZXh0LXdoaXRlLzgwIGhvdmVyOnRleHQtd2hpdGUnPlxuICAgICAgICAgICAgICAgIDxzcGFuIG9uQ2xpY2s9eygpID0+IHNpZ25JbihcImtleWNsb2FrXCIsIHsgY2FsbGJhY2tVcmw6IFwiL1wiIH0pfT5cbiAgICAgICAgICAgICAgICAgIExvZ2luXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8U2lkZWJhciBpc09wZW49e2lzU2lkZWJhck9wZW59IG9uQ2xvc2U9eygpID0+IHNldElzU2lkZWJhck9wZW4oZmFsc2UpfSAvPlxuICAgIDwvPlxuICApO1xufVxuIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwiQ2FsZW5kYXIiLCJCb3RJY29uIiwiUm9ib3QiLCJCZWxsIiwiTG9nT3V0IiwiVXNlckNvZyIsIkNsb2NrIiwiUGVuTGluZSIsIlZpZGVvIiwiUmFkaW8iLCJSYWRpb0ljb24iLCJNZWdhcGhvbmUiLCJUYXJnZXQiLCJNYWlsIiwiVGVsZXNjb3BlIiwiTGlnaHRidWxiIiwiQ2lyY2xlIiwiTWVudSIsIkltYWdlIiwiTGluayIsIlNpZGViYXIiLCJ1c2VTZXNzaW9uIiwic2lnbkluIiwic2lnbk91dCIsIkRyb3Bkb3duTWVudSIsIkRyb3Bkb3duTWVudUNvbnRlbnQiLCJEcm9wZG93bk1lbnVJdGVtIiwiRHJvcGRvd25NZW51TGFiZWwiLCJEcm9wZG93bk1lbnVTZXBhcmF0b3IiLCJEcm9wZG93bk1lbnVUcmlnZ2VyIiwiZm9ybWF0IiwiZnIiLCJyZXF1ZXN0Tm90aWZpY2F0aW9uUGVybWlzc2lvbiIsInBlcm1pc3Npb24iLCJOb3RpZmljYXRpb24iLCJyZXF1ZXN0UGVybWlzc2lvbiIsImVycm9yIiwiY29uc29sZSIsIk1haW5OYXYiLCJpc1NpZGViYXJPcGVuIiwic2V0SXNTaWRlYmFyT3BlbiIsImRhdGEiLCJzZXNzaW9uIiwic3RhdHVzIiwidXNlclN0YXR1cyIsInNldFVzZXJTdGF0dXMiLCJsb2ciLCJnZXRVc2VySW5pdGlhbHMiLCJ1c2VyIiwibmFtZSIsIm5hbWVzIiwic3BsaXQiLCJsZW5ndGgiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiZ2V0RGlzcGxheU5hbWUiLCJnZXRVc2VyUm9sZSIsInJvbGUiLCJBcnJheSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJpbmNsdWRlcyIsIm1hcCIsInJlcGxhY2UiLCJqb2luIiwiaGFzUm9sZSIsInJlcXVpcmVkUm9sZXMiLCJ1c2VyUm9sZXMiLCJjbGVhblVzZXJSb2xlcyIsInRvTG93ZXJDYXNlIiwiY2xlYW5SZXF1aXJlZFJvbGVzIiwiaGFzQW55Um9sZSIsInNvbWUiLCJzdGF0dXNDb25maWciLCJvbmxpbmUiLCJjb2xvciIsImxhYmVsIiwibm90aWZpY2F0aW9ucyIsImJ1c3kiLCJhd2F5IiwiaGFuZGxlU3RhdHVzQ2hhbmdlIiwibmV3U3RhdHVzIiwiaGFzUGVybWlzc2lvbiIsIm5hdmlnYXRvciIsInJlZ2lzdHJhdGlvbiIsInNlcnZpY2VXb3JrZXIiLCJyZWFkeSIsInB1c2hNYW5hZ2VyIiwiZ2V0U3Vic2NyaXB0aW9uIiwidGhlbiIsInN1YnNjcmlwdGlvbiIsInVuc3Vic2NyaWJlIiwiYmFzZU1lbnVJdGVtcyIsInRpdGxlIiwiaWNvbiIsImhyZWYiLCJyb2xlU3BlY2lmaWNJdGVtcyIsInZpc2libGVNZW51SXRlbXMiLCJpdGVtIiwibm93IiwiRGF0ZSIsImZvcm1hdHRlZERhdGUiLCJsb2NhbGUiLCJmb3JtYXR0ZWRUaW1lIiwiZGl2IiwiY2xhc3NOYW1lIiwiYnV0dG9uIiwib25DbGljayIsInNyYyIsImFsdCIsIndpZHRoIiwiaGVpZ2h0Iiwic3BhbiIsImFsaWduIiwid2luZG93IiwibG9jYXRpb24iLCJjYWxsYmFja1VybCIsInJlZGlyZWN0Iiwia2V5Y2xvYWtMb2dvdXRVcmwiLCJVUkwiLCJwcm9jZXNzIiwiZW52IiwiTkVYVF9QVUJMSUNfS0VZQ0xPQUtfSVNTVUVSIiwic2VhcmNoUGFyYW1zIiwiYXBwZW5kIiwib3JpZ2luIiwiYWNjZXNzVG9rZW4iLCJ0b1N0cmluZyIsImlzT3BlbiIsIm9uQ2xvc2UiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/main-nav.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/providers.tsx":
|
|
/*!**********************************!*\
|
|
!*** ./components/providers.tsx ***!
|
|
\**********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Providers: () => (/* binding */ Providers)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_auth_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next-auth/react */ \"(ssr)/./node_modules/next-auth/react/index.js\");\n/* harmony import */ var next_auth_react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_auth_react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ Providers auto */ \n\nfunction Providers({ children }) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_auth_react__WEBPACK_IMPORTED_MODULE_1__.SessionProvider, {\n children: children\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/providers.tsx\",\n lineNumber: 11,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL3Byb3ZpZGVycy50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRWtEO0FBTTNDLFNBQVNDLFVBQVUsRUFBRUMsUUFBUSxFQUFrQjtJQUNwRCxxQkFDRSw4REFBQ0YsNERBQWVBO2tCQUNiRTs7Ozs7O0FBR1AiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvY29tcG9uZW50cy9wcm92aWRlcnMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyBTZXNzaW9uUHJvdmlkZXIgfSBmcm9tIFwibmV4dC1hdXRoL3JlYWN0XCI7XG5cbmludGVyZmFjZSBQcm92aWRlcnNQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQcm92aWRlcnMoeyBjaGlsZHJlbiB9OiBQcm92aWRlcnNQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxTZXNzaW9uUHJvdmlkZXI+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9TZXNzaW9uUHJvdmlkZXI+XG4gICk7XG59ICJdLCJuYW1lcyI6WyJTZXNzaW9uUHJvdmlkZXIiLCJQcm92aWRlcnMiLCJjaGlsZHJlbiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/providers.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/sidebar.tsx":
|
|
/*!********************************!*\
|
|
!*** ./components/sidebar.tsx ***!
|
|
\********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Sidebar: () => (/* binding */ Sidebar)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/lib/utils */ \"(ssr)/./lib/utils.ts\");\n/* harmony import */ var _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=BookOpen,Building2,Calculator,ChevronLeft,FileText,GitFork,GraduationCap,HardDrive,Kanban,Mail,MessageSquare,Palette,Share2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/book-open.js\");\n/* harmony import */ var _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=BookOpen,Building2,Calculator,ChevronLeft,FileText,GitFork,GraduationCap,HardDrive,Kanban,Mail,MessageSquare,Palette,Share2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/mail.js\");\n/* harmony import */ var _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! __barrel_optimize__?names=BookOpen,Building2,Calculator,ChevronLeft,FileText,GitFork,GraduationCap,HardDrive,Kanban,Mail,MessageSquare,Palette,Share2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/hard-drive.js\");\n/* harmony import */ var _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! __barrel_optimize__?names=BookOpen,Building2,Calculator,ChevronLeft,FileText,GitFork,GraduationCap,HardDrive,Kanban,Mail,MessageSquare,Palette,Share2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/graduation-cap.js\");\n/* harmony import */ var _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! __barrel_optimize__?names=BookOpen,Building2,Calculator,ChevronLeft,FileText,GitFork,GraduationCap,HardDrive,Kanban,Mail,MessageSquare,Palette,Share2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/message-square.js\");\n/* harmony import */ var _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! __barrel_optimize__?names=BookOpen,Building2,Calculator,ChevronLeft,FileText,GitFork,GraduationCap,HardDrive,Kanban,Mail,MessageSquare,Palette,Share2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/kanban.js\");\n/* harmony import */ var _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! __barrel_optimize__?names=BookOpen,Building2,Calculator,ChevronLeft,FileText,GitFork,GraduationCap,HardDrive,Kanban,Mail,MessageSquare,Palette,Share2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/file-text.js\");\n/* harmony import */ var _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! __barrel_optimize__?names=BookOpen,Building2,Calculator,ChevronLeft,FileText,GitFork,GraduationCap,HardDrive,Kanban,Mail,MessageSquare,Palette,Share2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/share-2.js\");\n/* harmony import */ var _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! __barrel_optimize__?names=BookOpen,Building2,Calculator,ChevronLeft,FileText,GitFork,GraduationCap,HardDrive,Kanban,Mail,MessageSquare,Palette,Share2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/palette.js\");\n/* harmony import */ var _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! __barrel_optimize__?names=BookOpen,Building2,Calculator,ChevronLeft,FileText,GitFork,GraduationCap,HardDrive,Kanban,Mail,MessageSquare,Palette,Share2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/git-fork.js\");\n/* harmony import */ var _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! __barrel_optimize__?names=BookOpen,Building2,Calculator,ChevronLeft,FileText,GitFork,GraduationCap,HardDrive,Kanban,Mail,MessageSquare,Palette,Share2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/calculator.js\");\n/* harmony import */ var _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! __barrel_optimize__?names=BookOpen,Building2,Calculator,ChevronLeft,FileText,GitFork,GraduationCap,HardDrive,Kanban,Mail,MessageSquare,Palette,Share2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/building-2.js\");\n/* harmony import */ var _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! __barrel_optimize__?names=BookOpen,Building2,Calculator,ChevronLeft,FileText,GitFork,GraduationCap,HardDrive,Kanban,Mail,MessageSquare,Palette,Share2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/chevron-left.js\");\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/button */ \"(ssr)/./components/ui/button.tsx\");\n/* harmony import */ var _components_ui_scroll_area__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/scroll-area */ \"(ssr)/./components/ui/scroll-area.tsx\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! next/navigation */ \"(ssr)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! next/image */ \"(ssr)/./node_modules/next/dist/api/image.js\");\n/* harmony import */ var next_auth_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! next-auth/react */ \"(ssr)/./node_modules/next-auth/react/index.js\");\n/* harmony import */ var next_auth_react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(next_auth_react__WEBPACK_IMPORTED_MODULE_6__);\n/* __next_internal_client_entry_do_not_use__ Sidebar auto */ \n\n\n\n\n\n\n\nfunction Sidebar({ isOpen, onClose }) {\n const { data: session, status } = (0,next_auth_react__WEBPACK_IMPORTED_MODULE_6__.useSession)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_4__.useRouter)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_4__.usePathname)();\n // Debug session data\n console.log('Session state:', {\n status,\n hasSession: !!session,\n user: session?.user,\n roles: session?.user?.role,\n rawRoles: session?.user?.role,\n pathname\n });\n // Show loading state while session is being checked\n if (status === 'loading') {\n return null;\n }\n // Show nothing if not authenticated (middleware will handle redirect)\n if (status === 'unauthenticated') {\n return null;\n }\n // Function to check if user has a specific role\n const hasRole = (requiredRole)=>{\n if (!requiredRole || !session?.user?.role) {\n console.log('No required role or user roles found', {\n requiredRole,\n userRoles: session?.user?.role\n });\n return false;\n }\n const userRoles = Array.isArray(session.user.role) ? session.user.role : [\n session.user.role\n ];\n const cleanUserRoles = userRoles.map((role)=>role.toLowerCase());\n console.log('Debug roles:', {\n rawUserRoles: session.user.role,\n processedUserRoles: cleanUserRoles,\n requiredRole,\n pathname\n });\n // If requiredRole is an array, check if user has any of the roles\n if (Array.isArray(requiredRole)) {\n const cleanRequiredRoles = requiredRole.map((role)=>role.toLowerCase());\n console.log('Checking multiple roles:', {\n requiredRoles: requiredRole,\n cleanRequiredRoles,\n userRoles: cleanUserRoles,\n hasAnyRole: cleanRequiredRoles.some((role)=>cleanUserRoles.includes(role)),\n matchingRoles: cleanRequiredRoles.filter((role)=>cleanUserRoles.includes(role))\n });\n return cleanRequiredRoles.some((role)=>cleanUserRoles.includes(role));\n }\n // For single role requirement\n const cleanRequiredRole = requiredRole.toLowerCase();\n console.log('Checking single role:', {\n requiredRole,\n cleanRequiredRole,\n userRoles: cleanUserRoles,\n hasRole: cleanUserRoles.includes(cleanRequiredRole)\n });\n return cleanUserRoles.includes(cleanRequiredRole);\n };\n // Base menu items (available for everyone)\n const baseMenuItems = [\n {\n title: \"Pages\",\n icon: _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n href: \"/pages\",\n iframe: \"https://journal.governance-labs.com/\"\n },\n {\n title: \"Courrier\",\n icon: _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n href: \"/courrier\"\n },\n {\n title: \"Dossiers\",\n icon: _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n href: \"/dossiers\",\n iframe: \"https://espace.slm-lab.net/apps/files/?embedMode=true&hideNavigation=true\"\n },\n {\n title: \"Apprendre\",\n icon: _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n href: \"/apprendre\",\n iframe: \"https://apprendre.slm-lab.net\"\n },\n {\n title: \"Parole\",\n icon: _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n href: \"/parole\",\n iframe: \"https://parole.slm-lab.net/channel/City\"\n },\n {\n title: \"Missions\",\n icon: _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n href: \"/missions\",\n iframe: process.env.NEXT_PUBLIC_IFRAME_MISSIONSBOARD_URL\n },\n {\n title: \"Chapitre\",\n icon: _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n href: \"/chapitre\",\n iframe: \"https://chapitre.slm-lab.net\"\n },\n {\n title: \"Agilité\",\n icon: _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n href: \"/agilite\",\n iframe: \"https://agilite.slm-lab.net/oidc/login\"\n }\n ];\n // Role-specific menu items\n const roleSpecificItems = [\n {\n title: \"Artlab\",\n icon: _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n href: \"/design\",\n iframe: \"https://artlab.slm-lab.net\",\n requiredRole: \"Expression\"\n },\n {\n title: \"Gite\",\n icon: _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_16__[\"default\"],\n href: \"/gite\",\n iframe: \"https://gite.slm-lab.net/user/oauth2/cube\",\n requiredRole: [\n \"Coding\",\n \"DataIntelligence\"\n ]\n },\n {\n title: \"Calcul\",\n icon: _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_17__[\"default\"],\n href: \"/calcul\",\n iframe: \"https://calcul.slm-lab.net\",\n requiredRole: \"DataIntelligence\"\n },\n {\n title: \"Médiation\",\n icon: _barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_18__[\"default\"],\n href: \"/mediation\",\n iframe: \"https://connect.slm-lab.net/realms/cercle/protocol/openid-connect/auth?client_id=mediations.slm-lab.net&redirect_uri=https%3A%2F%2Fmediations.slm-lab.net%2F%3Fopenid_mode%3Dtrue&scope=openid%20profile%20email&response_type=code\",\n requiredRole: [\n \"Mediation\",\n \"Expression\"\n ]\n }\n ];\n // Combine base items with role-specific items based on user roles\n const visibleMenuItems = [\n ...baseMenuItems,\n ...roleSpecificItems.filter((item)=>hasRole(item.requiredRole))\n ];\n const handleNavigation = (href, external)=>{\n if (external && href) {\n window.open(href, \"_blank\");\n } else {\n router.push(href);\n }\n onClose();\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n isOpen && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-40 bg-background/80 backdrop-blur-sm\",\n onClick: onClose\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/sidebar.tsx\",\n lineNumber: 218,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_1__.cn)(\"fixed top-0 left-0 z-50 h-full w-64 transform bg-panel transition-all duration-200 ease-in-out\", isOpen ? \"translate-x-0\" : \"-translate-x-full\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_scroll_area__WEBPACK_IMPORTED_MODULE_3__.ScrollArea, {\n className: \"h-full w-full relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onClose,\n className: \"absolute -right-3 top-1/2 transform -translate-y-1/2 w-6 h-12 bg-black text-white rounded-r-md flex items-center justify-center hover:bg-gray-800 transition-colors z-[60]\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_BookOpen_Building2_Calculator_ChevronLeft_FileText_GitFork_GraduationCap_HardDrive_Kanban_Mail_MessageSquare_Palette_Share2_lucide_react__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/sidebar.tsx\",\n lineNumber: 237,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/sidebar.tsx\",\n lineNumber: 233,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center p-6 border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_image__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n src: \"/Neahv3 logo.png\",\n alt: \"Neah Logo\",\n width: 50,\n height: 16.5,\n className: \"text-black\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/sidebar.tsx\",\n lineNumber: 242,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/sidebar.tsx\",\n lineNumber: 241,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-1 p-4\",\n children: visibleMenuItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n variant: \"ghost\",\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_1__.cn)(\"w-full justify-start gap-2 text-black hover:bg-gray-100\", pathname === item.href && !item.external && \"bg-gray-100\"),\n onClick: ()=>handleNavigation(item.href, item.external),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(item.icon, {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/sidebar.tsx\",\n lineNumber: 263,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: item.title\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/sidebar.tsx\",\n lineNumber: 264,\n columnNumber: 17\n }, this)\n ]\n }, item.title, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/sidebar.tsx\",\n lineNumber: 254,\n columnNumber: 15\n }, this))\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/sidebar.tsx\",\n lineNumber: 252,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/sidebar.tsx\",\n lineNumber: 231,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/sidebar.tsx\",\n lineNumber: 225,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IGNuIH0gZnJvbSBcIkAvbGliL3V0aWxzXCI7XG5pbXBvcnQge1xuICBTaGFyZTIsXG4gIFBhbGV0dGUsXG4gIEdpdEZvcmssXG4gIEJ1aWxkaW5nMixcbiAgQ2FsZW5kYXIsXG4gIFRhcmdldCxcbiAgTWFpbCxcbiAgSGFyZERyaXZlLFxuICBHcmFkdWF0aW9uQ2FwLFxuICBNZXNzYWdlU3F1YXJlLFxuICBGaWxlVGV4dCxcbiAgQ2FsY3VsYXRvcixcbiAgS2FuYmFuLFxuICBDaGV2cm9uTGVmdCxcbiAgQ2hldnJvblJpZ2h0LFxuICBCb29rT3Blbixcbn0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9idXR0b25cIjtcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhXCI7XG5pbXBvcnQgeyB1c2VSb3V0ZXIsIHVzZVBhdGhuYW1lIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IEltYWdlIGZyb20gXCJuZXh0L2ltYWdlXCI7XG5pbXBvcnQgeyB1c2VTZXNzaW9uIH0gZnJvbSBcIm5leHQtYXV0aC9yZWFjdFwiO1xuaW1wb3J0IHsgQ2FsZW5kYXJOYXYgfSBmcm9tIFwiQC9jb21wb25lbnRzL3NpZGViYXIvY2FsZW5kYXItbmF2XCI7XG5cbmludGVyZmFjZSBTaWRlYmFyUHJvcHMge1xuICBpc09wZW46IGJvb2xlYW47XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG59XG5cbmludGVyZmFjZSBNZW51SXRlbSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGljb246IGFueTtcbiAgaHJlZjogc3RyaW5nO1xuICBpZnJhbWU/OiBzdHJpbmc7XG4gIGV4dGVybmFsPzogYm9vbGVhbjtcbiAgcmVxdWlyZWRSb2xlPzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTaWRlYmFyKHsgaXNPcGVuLCBvbkNsb3NlIH06IFNpZGViYXJQcm9wcykge1xuICBjb25zdCB7IGRhdGE6IHNlc3Npb24sIHN0YXR1cyB9ID0gdXNlU2Vzc2lvbigpO1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcbiAgY29uc3QgcGF0aG5hbWUgPSB1c2VQYXRobmFtZSgpO1xuXG4gIC8vIERlYnVnIHNlc3Npb24gZGF0YVxuICBjb25zb2xlLmxvZygnU2Vzc2lvbiBzdGF0ZTonLCB7XG4gICAgc3RhdHVzLFxuICAgIGhhc1Nlc3Npb246ICEhc2Vzc2lvbixcbiAgICB1c2VyOiBzZXNzaW9uPy51c2VyLFxuICAgIHJvbGVzOiBzZXNzaW9uPy51c2VyPy5yb2xlLFxuICAgIHJhd1JvbGVzOiBzZXNzaW9uPy51c2VyPy5yb2xlLFxuICAgIHBhdGhuYW1lXG4gIH0pO1xuXG4gIC8vIFNob3cgbG9hZGluZyBzdGF0ZSB3aGlsZSBzZXNzaW9uIGlzIGJlaW5nIGNoZWNrZWRcbiAgaWYgKHN0YXR1cyA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBTaG93IG5vdGhpbmcgaWYgbm90IGF1dGhlbnRpY2F0ZWQgKG1pZGRsZXdhcmUgd2lsbCBoYW5kbGUgcmVkaXJlY3QpXG4gIGlmIChzdGF0dXMgPT09ICd1bmF1dGhlbnRpY2F0ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBGdW5jdGlvbiB0byBjaGVjayBpZiB1c2VyIGhhcyBhIHNwZWNpZmljIHJvbGVcbiAgY29uc3QgaGFzUm9sZSA9IChyZXF1aXJlZFJvbGU6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKCFyZXF1aXJlZFJvbGUgfHwgIXNlc3Npb24/LnVzZXI/LnJvbGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdObyByZXF1aXJlZCByb2xlIG9yIHVzZXIgcm9sZXMgZm91bmQnLCB7XG4gICAgICAgIHJlcXVpcmVkUm9sZSxcbiAgICAgICAgdXNlclJvbGVzOiBzZXNzaW9uPy51c2VyPy5yb2xlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgdXNlclJvbGVzID0gQXJyYXkuaXNBcnJheShzZXNzaW9uLnVzZXIucm9sZSkgPyBzZXNzaW9uLnVzZXIucm9sZSA6IFtzZXNzaW9uLnVzZXIucm9sZV07XG4gICAgY29uc3QgY2xlYW5Vc2VyUm9sZXMgPSB1c2VyUm9sZXMubWFwKHJvbGUgPT4gcm9sZS50b0xvd2VyQ2FzZSgpKTtcbiAgICBcbiAgICBjb25zb2xlLmxvZygnRGVidWcgcm9sZXM6Jywge1xuICAgICAgcmF3VXNlclJvbGVzOiBzZXNzaW9uLnVzZXIucm9sZSxcbiAgICAgIHByb2Nlc3NlZFVzZXJSb2xlczogY2xlYW5Vc2VyUm9sZXMsXG4gICAgICByZXF1aXJlZFJvbGUsXG4gICAgICBwYXRobmFtZVxuICAgIH0pO1xuICAgIFxuICAgIC8vIElmIHJlcXVpcmVkUm9sZSBpcyBhbiBhcnJheSwgY2hlY2sgaWYgdXNlciBoYXMgYW55IG9mIHRoZSByb2xlc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlcXVpcmVkUm9sZSkpIHtcbiAgICAgIGNvbnN0IGNsZWFuUmVxdWlyZWRSb2xlcyA9IHJlcXVpcmVkUm9sZS5tYXAocm9sZSA9PiByb2xlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgY29uc29sZS5sb2coJ0NoZWNraW5nIG11bHRpcGxlIHJvbGVzOicsIHtcbiAgICAgICAgcmVxdWlyZWRSb2xlczogcmVxdWlyZWRSb2xlLFxuICAgICAgICBjbGVhblJlcXVpcmVkUm9sZXMsXG4gICAgICAgIHVzZXJSb2xlczogY2xlYW5Vc2VyUm9sZXMsXG4gICAgICAgIGhhc0FueVJvbGU6IGNsZWFuUmVxdWlyZWRSb2xlcy5zb21lKHJvbGUgPT4gY2xlYW5Vc2VyUm9sZXMuaW5jbHVkZXMocm9sZSkpLFxuICAgICAgICBtYXRjaGluZ1JvbGVzOiBjbGVhblJlcXVpcmVkUm9sZXMuZmlsdGVyKHJvbGUgPT4gY2xlYW5Vc2VyUm9sZXMuaW5jbHVkZXMocm9sZSkpXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjbGVhblJlcXVpcmVkUm9sZXMuc29tZShyb2xlID0+IGNsZWFuVXNlclJvbGVzLmluY2x1ZGVzKHJvbGUpKTtcbiAgICB9XG4gICAgXG4gICAgLy8gRm9yIHNpbmdsZSByb2xlIHJlcXVpcmVtZW50XG4gICAgY29uc3QgY2xlYW5SZXF1aXJlZFJvbGUgPSByZXF1aXJlZFJvbGUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zb2xlLmxvZygnQ2hlY2tpbmcgc2luZ2xlIHJvbGU6Jywge1xuICAgICAgcmVxdWlyZWRSb2xlLFxuICAgICAgY2xlYW5SZXF1aXJlZFJvbGUsXG4gICAgICB1c2VyUm9sZXM6IGNsZWFuVXNlclJvbGVzLFxuICAgICAgaGFzUm9sZTogY2xlYW5Vc2VyUm9sZXMuaW5jbHVkZXMoY2xlYW5SZXF1aXJlZFJvbGUpXG4gICAgfSk7XG4gICAgcmV0dXJuIGNsZWFuVXNlclJvbGVzLmluY2x1ZGVzKGNsZWFuUmVxdWlyZWRSb2xlKTtcbiAgfTtcblxuICAvLyBCYXNlIG1lbnUgaXRlbXMgKGF2YWlsYWJsZSBmb3IgZXZlcnlvbmUpXG4gIGNvbnN0IGJhc2VNZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXG4gICAge1xuICAgICAgdGl0bGU6IFwiUGFnZXNcIixcbiAgICAgIGljb246IEJvb2tPcGVuLFxuICAgICAgaHJlZjogXCIvcGFnZXNcIixcbiAgICAgIGlmcmFtZTogcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfSUZSQU1FX0NBUk5FVF9VUkwsXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogXCJDb3VycmllclwiLFxuICAgICAgaWNvbjogTWFpbCxcbiAgICAgIGhyZWY6IFwiL2NvdXJyaWVyXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogXCJEb3NzaWVyc1wiLFxuICAgICAgaWNvbjogSGFyZERyaXZlLFxuICAgICAgaHJlZjogXCIvZG9zc2llcnNcIixcbiAgICAgIGlmcmFtZTogcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfSUZSQU1FX0RSSVZFX1VSTCxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiBcIkFwcHJlbmRyZVwiLFxuICAgICAgaWNvbjogR3JhZHVhdGlvbkNhcCxcbiAgICAgIGhyZWY6IFwiL2FwcHJlbmRyZVwiLFxuICAgICAgaWZyYW1lOiBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19JRlJBTUVfTEVBUk5fVVJMLFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6IFwiUGFyb2xlXCIsXG4gICAgICBpY29uOiBNZXNzYWdlU3F1YXJlLFxuICAgICAgaHJlZjogXCIvcGFyb2xlXCIsXG4gICAgICBpZnJhbWU6IHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0lGUkFNRV9QQVJPTEVfVVJMLFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6IFwiTWlzc2lvbnNcIixcbiAgICAgIGljb246IEthbmJhbixcbiAgICAgIGhyZWY6IFwiL21pc3Npb25zXCIsXG4gICAgICBpZnJhbWU6IHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0lGUkFNRV9NSVNTSU9OU0JPQVJEX1VSTCxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiBcIkNoYXBpdHJlXCIsXG4gICAgICBpY29uOiBGaWxlVGV4dCxcbiAgICAgIGhyZWY6IFwiL2NoYXBpdHJlXCIsXG4gICAgICBpZnJhbWU6IHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0lGUkFNRV9DSEFQVEVSX1VSTCxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiBcIkFnaWxpdMOpXCIsXG4gICAgICBpY29uOiBTaGFyZTIsXG4gICAgICBocmVmOiBcIi9hZ2lsaXRlXCIsXG4gICAgICBpZnJhbWU6IHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0lGUkFNRV9BR0lMSVRZX1VSTCxcbiAgICB9LFxuICBdO1xuXG4gIC8vIFJvbGUtc3BlY2lmaWMgbWVudSBpdGVtc1xuICBjb25zdCByb2xlU3BlY2lmaWNJdGVtczogTWVudUl0ZW1bXSA9IFtcbiAgICB7XG4gICAgICB0aXRsZTogXCJBcnRsYWJcIixcbiAgICAgIGljb246IFBhbGV0dGUsXG4gICAgICBocmVmOiBcIi9kZXNpZ25cIixcbiAgICAgIGlmcmFtZTogcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfSUZSQU1FX0FSVExBQl9VUkwsXG4gICAgICByZXF1aXJlZFJvbGU6IFwiRXhwcmVzc2lvblwiLFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6IFwiR2l0ZVwiLFxuICAgICAgaWNvbjogR2l0Rm9yayxcbiAgICAgIGhyZWY6IFwiL2dpdGVcIixcbiAgICAgIGlmcmFtZTogcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfSUZSQU1FX0dJVEVfVVJMLFxuICAgICAgcmVxdWlyZWRSb2xlOiBbXCJDb2RpbmdcIiwgXCJEYXRhSW50ZWxsaWdlbmNlXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6IFwiQ2FsY3VsXCIsXG4gICAgICBpY29uOiBDYWxjdWxhdG9yLFxuICAgICAgaHJlZjogXCIvY2FsY3VsXCIsXG4gICAgICBpZnJhbWU6IHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0lGUkFNRV9DQUxDVUxBVElPTl9VUkwsXG4gICAgICByZXF1aXJlZFJvbGU6IFwiRGF0YUludGVsbGlnZW5jZVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6IFwiTcOpZGlhdGlvblwiLFxuICAgICAgaWNvbjogQnVpbGRpbmcyLFxuICAgICAgaHJlZjogXCIvbWVkaWF0aW9uXCIsXG4gICAgICBpZnJhbWU6IHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0lGUkFNRV9NRURJQVRJT05TX1VSTCxcbiAgICAgIHJlcXVpcmVkUm9sZTogW1wiTWVkaWF0aW9uXCIsIFwiRXhwcmVzc2lvblwiXSxcbiAgICB9LFxuICBdO1xuXG4gIC8vIENvbWJpbmUgYmFzZSBpdGVtcyB3aXRoIHJvbGUtc3BlY2lmaWMgaXRlbXMgYmFzZWQgb24gdXNlciByb2xlc1xuICBjb25zdCB2aXNpYmxlTWVudUl0ZW1zID0gW1xuICAgIC4uLmJhc2VNZW51SXRlbXMsXG4gICAgLi4ucm9sZVNwZWNpZmljSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaGFzUm9sZShpdGVtLnJlcXVpcmVkUm9sZSkpXG4gIF07XG5cbiAgY29uc3QgaGFuZGxlTmF2aWdhdGlvbiA9IChocmVmOiBzdHJpbmcsIGV4dGVybmFsPzogYm9vbGVhbikgPT4ge1xuICAgIGlmIChleHRlcm5hbCAmJiBocmVmKSB7XG4gICAgICB3aW5kb3cub3BlbihocmVmLCBcIl9ibGFua1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm91dGVyLnB1c2goaHJlZik7XG4gICAgfVxuICAgIG9uQ2xvc2UoKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7LyogQmFja2Ryb3AgKi99XG4gICAgICB7aXNPcGVuICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgei00MCBiZy1iYWNrZ3JvdW5kLzgwIGJhY2tkcm9wLWJsdXItc21cIlxuICAgICAgICAgIG9uQ2xpY2s9e29uQ2xvc2V9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7LyogU2lkZWJhciAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICBcImZpeGVkIHRvcC0wIGxlZnQtMCB6LTUwIGgtZnVsbCB3LTY0IHRyYW5zZm9ybSBiZy1wYW5lbCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgZWFzZS1pbi1vdXRcIixcbiAgICAgICAgICBpc09wZW4gPyBcInRyYW5zbGF0ZS14LTBcIiA6IFwiLXRyYW5zbGF0ZS14LWZ1bGxcIlxuICAgICAgICApfVxuICAgICAgPlxuICAgICAgICA8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIHJlbGF0aXZlXCI+XG4gICAgICAgICAgey8qIEhpZGUgQnV0dG9uICovfVxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG9uQ2xpY2s9e29uQ2xvc2V9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSAtcmlnaHQtMyB0b3AtMS8yIHRyYW5zZm9ybSAtdHJhbnNsYXRlLXktMS8yIHctNiBoLTEyIGJnLWJsYWNrIHRleHQtd2hpdGUgcm91bmRlZC1yLW1kIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGhvdmVyOmJnLWdyYXktODAwIHRyYW5zaXRpb24tY29sb3JzIHotWzYwXVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPENoZXZyb25MZWZ0IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgey8qIExvZ28gKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyIHAtNiBib3JkZXItYlwiPlxuICAgICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICAgIHNyYz1cIi9OZWFodjMgbG9nby5wbmdcIlxuICAgICAgICAgICAgICBhbHQ9XCJOZWFoIExvZ29cIlxuICAgICAgICAgICAgICB3aWR0aD17NTB9XG4gICAgICAgICAgICAgIGhlaWdodD17MTYuNX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1ibGFja1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgey8qIE1lbnUgSXRlbXMgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTEgcC00XCI+XG4gICAgICAgICAgICB7dmlzaWJsZU1lbnVJdGVtcy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17aXRlbS50aXRsZX1cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICBcInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGdhcC0yIHRleHQtYmxhY2sgaG92ZXI6YmctZ3JheS0xMDBcIixcbiAgICAgICAgICAgICAgICAgIHBhdGhuYW1lID09PSBpdGVtLmhyZWYgJiYgIWl0ZW0uZXh0ZXJuYWwgJiYgXCJiZy1ncmF5LTEwMFwiXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVOYXZpZ2F0aW9uKGl0ZW0uaHJlZiwgaXRlbS5leHRlcm5hbCl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aXRlbS5pY29uIGNsYXNzTmFtZT1cImgtNSB3LTVcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuPntpdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9TY3JvbGxBcmVhPlxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gICk7XG59XG4iXSwibmFtZXMiOlsiY24iLCJTaGFyZTIiLCJQYWxldHRlIiwiR2l0Rm9yayIsIkJ1aWxkaW5nMiIsIk1haWwiLCJIYXJkRHJpdmUiLCJHcmFkdWF0aW9uQ2FwIiwiTWVzc2FnZVNxdWFyZSIsIkZpbGVUZXh0IiwiQ2FsY3VsYXRvciIsIkthbmJhbiIsIkNoZXZyb25MZWZ0IiwiQm9va09wZW4iLCJCdXR0b24iLCJTY3JvbGxBcmVhIiwidXNlUm91dGVyIiwidXNlUGF0aG5hbWUiLCJJbWFnZSIsInVzZVNlc3Npb24iLCJTaWRlYmFyIiwiaXNPcGVuIiwib25DbG9zZSIsImRhdGEiLCJzZXNzaW9uIiwic3RhdHVzIiwicm91dGVyIiwicGF0aG5hbWUiLCJjb25zb2xlIiwibG9nIiwiaGFzU2Vzc2lvbiIsInVzZXIiLCJyb2xlcyIsInJvbGUiLCJyYXdSb2xlcyIsImhhc1JvbGUiLCJyZXF1aXJlZFJvbGUiLCJ1c2VyUm9sZXMiLCJBcnJheSIsImlzQXJyYXkiLCJjbGVhblVzZXJSb2xlcyIsIm1hcCIsInRvTG93ZXJDYXNlIiwicmF3VXNlclJvbGVzIiwicHJvY2Vzc2VkVXNlclJvbGVzIiwiY2xlYW5SZXF1aXJlZFJvbGVzIiwicmVxdWlyZWRSb2xlcyIsImhhc0FueVJvbGUiLCJzb21lIiwiaW5jbHVkZXMiLCJtYXRjaGluZ1JvbGVzIiwiZmlsdGVyIiwiY2xlYW5SZXF1aXJlZFJvbGUiLCJiYXNlTWVudUl0ZW1zIiwidGl0bGUiLCJpY29uIiwiaHJlZiIsImlmcmFtZSIsInByb2Nlc3MiLCJlbnYiLCJORVhUX1BVQkxJQ19JRlJBTUVfQ0FSTkVUX1VSTCIsIk5FWFRfUFVCTElDX0lGUkFNRV9EUklWRV9VUkwiLCJORVhUX1BVQkxJQ19JRlJBTUVfTEVBUk5fVVJMIiwiTkVYVF9QVUJMSUNfSUZSQU1FX1BBUk9MRV9VUkwiLCJORVhUX1BVQkxJQ19JRlJBTUVfTUlTU0lPTlNCT0FSRF9VUkwiLCJORVhUX1BVQkxJQ19JRlJBTUVfQ0hBUFRFUl9VUkwiLCJORVhUX1BVQkxJQ19JRlJBTUVfQUdJTElUWV9VUkwiLCJyb2xlU3BlY2lmaWNJdGVtcyIsIk5FWFRfUFVCTElDX0lGUkFNRV9BUlRMQUJfVVJMIiwiTkVYVF9QVUJMSUNfSUZSQU1FX0dJVEVfVVJMIiwiTkVYVF9QVUJMSUNfSUZSQU1FX0NBTENVTEFUSU9OX1VSTCIsIk5FWFRfUFVCTElDX0lGUkFNRV9NRURJQVRJT05TX1VSTCIsInZpc2libGVNZW51SXRlbXMiLCJpdGVtIiwiaGFuZGxlTmF2aWdhdGlvbiIsImV4dGVybmFsIiwid2luZG93Iiwib3BlbiIsInB1c2giLCJkaXYiLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwiYnV0dG9uIiwic3JjIiwiYWx0Iiwid2lkdGgiLCJoZWlnaHQiLCJ2YXJpYW50Iiwic3BhbiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/sidebar.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/ui/alert-dialog.tsx":
|
|
/*!****************************************!*\
|
|
!*** ./components/ui/alert-dialog.tsx ***!
|
|
\****************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AlertDialog: () => (/* binding */ AlertDialog),\n/* harmony export */ AlertDialogAction: () => (/* binding */ AlertDialogAction),\n/* harmony export */ AlertDialogCancel: () => (/* binding */ AlertDialogCancel),\n/* harmony export */ AlertDialogContent: () => (/* binding */ AlertDialogContent),\n/* harmony export */ AlertDialogDescription: () => (/* binding */ AlertDialogDescription),\n/* harmony export */ AlertDialogFooter: () => (/* binding */ AlertDialogFooter),\n/* harmony export */ AlertDialogHeader: () => (/* binding */ AlertDialogHeader),\n/* harmony export */ AlertDialogOverlay: () => (/* binding */ AlertDialogOverlay),\n/* harmony export */ AlertDialogPortal: () => (/* binding */ AlertDialogPortal),\n/* harmony export */ AlertDialogTitle: () => (/* binding */ AlertDialogTitle),\n/* harmony export */ AlertDialogTrigger: () => (/* binding */ AlertDialogTrigger)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _radix_ui_react_alert_dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @radix-ui/react-alert-dialog */ \"(ssr)/./node_modules/@radix-ui/react-alert-dialog/dist/index.mjs\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(ssr)/./lib/utils.ts\");\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/button */ \"(ssr)/./components/ui/button.tsx\");\n/* __next_internal_client_entry_do_not_use__ AlertDialog,AlertDialogPortal,AlertDialogOverlay,AlertDialogTrigger,AlertDialogContent,AlertDialogHeader,AlertDialogFooter,AlertDialogTitle,AlertDialogDescription,AlertDialogAction,AlertDialogCancel auto */ \n\n\n\n\nconst AlertDialog = _radix_ui_react_alert_dialog__WEBPACK_IMPORTED_MODULE_4__.Root;\nconst AlertDialogTrigger = _radix_ui_react_alert_dialog__WEBPACK_IMPORTED_MODULE_4__.Trigger;\nconst AlertDialogPortal = _radix_ui_react_alert_dialog__WEBPACK_IMPORTED_MODULE_4__.Portal;\nconst AlertDialogOverlay = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_alert_dialog__WEBPACK_IMPORTED_MODULE_4__.Overlay, {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\", className),\n ...props,\n ref: ref\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/alert-dialog.tsx\",\n lineNumber: 19,\n columnNumber: 3\n }, undefined));\nAlertDialogOverlay.displayName = _radix_ui_react_alert_dialog__WEBPACK_IMPORTED_MODULE_4__.Overlay.displayName;\nconst AlertDialogContent = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(AlertDialogPortal, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(AlertDialogOverlay, {}, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/alert-dialog.tsx\",\n lineNumber: 35,\n columnNumber: 5\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_alert_dialog__WEBPACK_IMPORTED_MODULE_4__.Content, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/alert-dialog.tsx\",\n lineNumber: 36,\n columnNumber: 5\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/alert-dialog.tsx\",\n lineNumber: 34,\n columnNumber: 3\n }, undefined));\nAlertDialogContent.displayName = _radix_ui_react_alert_dialog__WEBPACK_IMPORTED_MODULE_4__.Content.displayName;\nconst AlertDialogHeader = ({ className, ...props })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"flex flex-col space-y-2 text-center sm:text-left\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/alert-dialog.tsx\",\n lineNumber: 52,\n columnNumber: 3\n }, undefined);\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\nconst AlertDialogFooter = ({ className, ...props })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/alert-dialog.tsx\",\n lineNumber: 66,\n columnNumber: 3\n }, undefined);\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\nconst AlertDialogTitle = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_alert_dialog__WEBPACK_IMPORTED_MODULE_4__.Title, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"text-lg font-semibold\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/alert-dialog.tsx\",\n lineNumber: 80,\n columnNumber: 3\n }, undefined));\nAlertDialogTitle.displayName = _radix_ui_react_alert_dialog__WEBPACK_IMPORTED_MODULE_4__.Title.displayName;\nconst AlertDialogDescription = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_alert_dialog__WEBPACK_IMPORTED_MODULE_4__.Description, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"text-sm text-muted-foreground\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/alert-dialog.tsx\",\n lineNumber: 92,\n columnNumber: 3\n }, undefined));\nAlertDialogDescription.displayName = _radix_ui_react_alert_dialog__WEBPACK_IMPORTED_MODULE_4__.Description.displayName;\nconst AlertDialogAction = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_alert_dialog__WEBPACK_IMPORTED_MODULE_4__.Action, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)((0,_components_ui_button__WEBPACK_IMPORTED_MODULE_3__.buttonVariants)(), className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/alert-dialog.tsx\",\n lineNumber: 105,\n columnNumber: 3\n }, undefined));\nAlertDialogAction.displayName = _radix_ui_react_alert_dialog__WEBPACK_IMPORTED_MODULE_4__.Action.displayName;\nconst AlertDialogCancel = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_alert_dialog__WEBPACK_IMPORTED_MODULE_4__.Cancel, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)((0,_components_ui_button__WEBPACK_IMPORTED_MODULE_3__.buttonVariants)({\n variant: \"outline\"\n }), \"mt-2 sm:mt-0\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/alert-dialog.tsx\",\n lineNumber: 117,\n columnNumber: 3\n }, undefined));\nAlertDialogCancel.displayName = _radix_ui_react_alert_dialog__WEBPACK_IMPORTED_MODULE_4__.Cancel.displayName;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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b21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvY29tcG9uZW50cy91aS9hbGVydC1kaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgKiBhcyBBbGVydERpYWxvZ1ByaW1pdGl2ZSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWFsZXJ0LWRpYWxvZ1wiXG5cbmltcG9ydCB7IGNuIH0gZnJvbSBcIkAvbGliL3V0aWxzXCJcbmltcG9ydCB7IGJ1dHRvblZhcmlhbnRzIH0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9idXR0b25cIlxuXG5jb25zdCBBbGVydERpYWxvZyA9IEFsZXJ0RGlhbG9nUHJpbWl0aXZlLlJvb3RcblxuY29uc3QgQWxlcnREaWFsb2dUcmlnZ2VyID0gQWxlcnREaWFsb2dQcmltaXRpdmUuVHJpZ2dlclxuXG5jb25zdCBBbGVydERpYWxvZ1BvcnRhbCA9IEFsZXJ0RGlhbG9nUHJpbWl0aXZlLlBvcnRhbFxuXG5jb25zdCBBbGVydERpYWxvZ092ZXJsYXkgPSBSZWFjdC5mb3J3YXJkUmVmPFxuICBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBBbGVydERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5PixcbiAgUmVhY3QuQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPHR5cGVvZiBBbGVydERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5PlxuPigoeyBjbGFzc05hbWUsIC4uLnByb3BzIH0sIHJlZikgPT4gKFxuICA8QWxlcnREaWFsb2dQcmltaXRpdmUuT3ZlcmxheVxuICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICBcImZpeGVkIGluc2V0LTAgei01MCBiZy1ibGFjay84MCAgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTBcIixcbiAgICAgIGNsYXNzTmFtZVxuICAgICl9XG4gICAgey4uLnByb3BzfVxuICAgIHJlZj17cmVmfVxuICAvPlxuKSlcbkFsZXJ0RGlhbG9nT3ZlcmxheS5kaXNwbGF5TmFtZSA9IEFsZXJ0RGlhbG9nUHJpbWl0aXZlLk92ZXJsYXkuZGlzcGxheU5hbWVcblxuY29uc3QgQWxlcnREaWFsb2dDb250ZW50ID0gUmVhY3QuZm9yd2FyZFJlZjxcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgQWxlcnREaWFsb2dQcmltaXRpdmUuQ29udGVudD4sXG4gIFJlYWN0LkNvbXBvbmVudFByb3BzV2l0aG91dFJlZjx0eXBlb2YgQWxlcnREaWFsb2dQcmltaXRpdmUuQ29udGVudD5cbj4oKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9LCByZWYpID0+IChcbiAgPEFsZXJ0RGlhbG9nUG9ydGFsPlxuICAgIDxBbGVydERpYWxvZ092ZXJsYXkgLz5cbiAgICA8QWxlcnREaWFsb2dQcmltaXRpdmUuQ29udGVudFxuICAgICAgcmVmPXtyZWZ9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImZpeGVkIGxlZnQtWzUwJV0gdG9wLVs1MCVdIHotNTAgZ3JpZCB3LWZ1bGwgbWF4LXctbGcgdHJhbnNsYXRlLXgtWy01MCVdIHRyYW5zbGF0ZS15LVstNTAlXSBnYXAtNCBib3JkZXIgYmctYmFja2dyb3VuZCBwLTYgc2hhZG93LWxnIGR1cmF0aW9uLTIwMCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc3RhdGU9Y2xvc2VkXTpzbGlkZS1vdXQtdG8tbGVmdC0xLzIgZGF0YS1bc3RhdGU9Y2xvc2VkXTpzbGlkZS1vdXQtdG8tdG9wLVs0OCVdIGRhdGEtW3N0YXRlPW9wZW5dOnNsaWRlLWluLWZyb20tbGVmdC0xLzIgZGF0YS1bc3RhdGU9b3Blbl06c2xpZGUtaW4tZnJvbS10b3AtWzQ4JV0gc206cm91bmRlZC1sZ1wiLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgPC9BbGVydERpYWxvZ1BvcnRhbD5cbikpXG5BbGVydERpYWxvZ0NvbnRlbnQuZGlzcGxheU5hbWUgPSBBbGVydERpYWxvZ1ByaW1pdGl2ZS5Db250ZW50LmRpc3BsYXlOYW1lXG5cbmNvbnN0IEFsZXJ0RGlhbG9nSGVhZGVyID0gKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+KSA9PiAoXG4gIDxkaXZcbiAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgXCJmbGV4IGZsZXgtY29sIHNwYWNlLXktMiB0ZXh0LWNlbnRlciBzbTp0ZXh0LWxlZnRcIixcbiAgICAgIGNsYXNzTmFtZVxuICAgICl9XG4gICAgey4uLnByb3BzfVxuICAvPlxuKVxuQWxlcnREaWFsb2dIZWFkZXIuZGlzcGxheU5hbWUgPSBcIkFsZXJ0RGlhbG9nSGVhZGVyXCJcblxuY29uc3QgQWxlcnREaWFsb2dGb290ZXIgPSAoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRGl2RWxlbWVudD4pID0+IChcbiAgPGRpdlxuICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICBcImZsZXggZmxleC1jb2wtcmV2ZXJzZSBzbTpmbGV4LXJvdyBzbTpqdXN0aWZ5LWVuZCBzbTpzcGFjZS14LTJcIixcbiAgICAgIGNsYXNzTmFtZVxuICAgICl9XG4gICAgey4uLnByb3BzfVxuICAvPlxuKVxuQWxlcnREaWFsb2dGb290ZXIuZGlzcGxheU5hbWUgPSBcIkFsZXJ0RGlhbG9nRm9vdGVyXCJcblxuY29uc3QgQWxlcnREaWFsb2dUaXRsZSA9IFJlYWN0LmZvcndhcmRSZWY8XG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIEFsZXJ0RGlhbG9nUHJpbWl0aXZlLlRpdGxlPixcbiAgUmVhY3QuQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPHR5cGVvZiBBbGVydERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT5cbj4oKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9LCByZWYpID0+IChcbiAgPEFsZXJ0RGlhbG9nUHJpbWl0aXZlLlRpdGxlXG4gICAgcmVmPXtyZWZ9XG4gICAgY2xhc3NOYW1lPXtjbihcInRleHQtbGcgZm9udC1zZW1pYm9sZFwiLCBjbGFzc05hbWUpfVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbikpXG5BbGVydERpYWxvZ1RpdGxlLmRpc3BsYXlOYW1lID0gQWxlcnREaWFsb2dQcmltaXRpdmUuVGl0bGUuZGlzcGxheU5hbWVcblxuY29uc3QgQWxlcnREaWFsb2dEZXNjcmlwdGlvbiA9IFJlYWN0LmZvcndhcmRSZWY8XG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIEFsZXJ0RGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uPixcbiAgUmVhY3QuQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPHR5cGVvZiBBbGVydERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvbj5cbj4oKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9LCByZWYpID0+IChcbiAgPEFsZXJ0RGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uXG4gICAgcmVmPXtyZWZ9XG4gICAgY2xhc3NOYW1lPXtjbihcInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCIsIGNsYXNzTmFtZSl9XG4gICAgey4uLnByb3BzfVxuICAvPlxuKSlcbkFsZXJ0RGlhbG9nRGVzY3JpcHRpb24uZGlzcGxheU5hbWUgPVxuICBBbGVydERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvbi5kaXNwbGF5TmFtZVxuXG5jb25zdCBBbGVydERpYWxvZ0FjdGlvbiA9IFJlYWN0LmZvcndhcmRSZWY8XG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIEFsZXJ0RGlhbG9nUHJpbWl0aXZlLkFjdGlvbj4sXG4gIFJlYWN0LkNvbXBvbmVudFByb3BzV2l0aG91dFJlZjx0eXBlb2YgQWxlcnREaWFsb2dQcmltaXRpdmUuQWN0aW9uPlxuPigoeyBjbGFzc05hbWUsIC4uLnByb3BzIH0sIHJlZikgPT4gKFxuICA8QWxlcnREaWFsb2dQcmltaXRpdmUuQWN0aW9uXG4gICAgcmVmPXtyZWZ9XG4gICAgY2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cygpLCBjbGFzc05hbWUpfVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbikpXG5BbGVydERpYWxvZ0FjdGlvbi5kaXNwbGF5TmFtZSA9IEFsZXJ0RGlhbG9nUHJpbWl0aXZlLkFjdGlvbi5kaXNwbGF5TmFtZVxuXG5jb25zdCBBbGVydERpYWxvZ0NhbmNlbCA9IFJlYWN0LmZvcndhcmRSZWY8XG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIEFsZXJ0RGlhbG9nUHJpbWl0aXZlLkNhbmNlbD4sXG4gIFJlYWN0LkNvbXBvbmVudFByb3BzV2l0aG91dFJlZjx0eXBlb2YgQWxlcnREaWFsb2dQcmltaXRpdmUuQ2FuY2VsPlxuPigoeyBjbGFzc05hbWUsIC4uLnByb3BzIH0sIHJlZikgPT4gKFxuICA8QWxlcnREaWFsb2dQcmltaXRpdmUuQ2FuY2VsXG4gICAgcmVmPXtyZWZ9XG4gICAgY2xhc3NOYW1lPXtjbihcbiAgICAgIGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogXCJvdXRsaW5lXCIgfSksXG4gICAgICBcIm10LTIgc206bXQtMFwiLFxuICAgICAgY2xhc3NOYW1lXG4gICAgKX1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pKVxuQWxlcnREaWFsb2dDYW5jZWwuZGlzcGxheU5hbWUgPSBBbGVydERpYWxvZ1ByaW1pdGl2ZS5DYW5jZWwuZGlzcGxheU5hbWVcblxuZXhwb3J0IHtcbiAgQWxlcnREaWFsb2csXG4gIEFsZXJ0RGlhbG9nUG9ydGFsLFxuICBBbGVydERpYWxvZ092ZXJsYXksXG4gIEFsZXJ0RGlhbG9nVHJpZ2dlcixcbiAgQWxlcnREaWFsb2dDb250ZW50LFxuICBBbGVydERpYWxvZ0hlYWRlcixcbiAgQWxlcnREaWFsb2dGb290ZXIsXG4gIEFsZXJ0RGlhbG9nVGl0bGUsXG4gIEFsZXJ0RGlhbG9nRGVzY3JpcHRpb24sXG4gIEFsZXJ0RGlhbG9nQWN0aW9uLFxuICBBbGVydERpYWxvZ0NhbmNlbCxcbn1cbiJdLCJuYW1lcyI6WyJSZWFjdCIsIkFsZXJ0RGlhbG9nUHJpbWl0aXZlIiwiY24iLCJidXR0b25WYXJpYW50cyIsIkFsZXJ0RGlhbG9nIiwiUm9vdCIsIkFsZXJ0RGlhbG9nVHJpZ2dlciIsIlRyaWdnZXIiLCJBbGVydERpYWxvZ1BvcnRhbCIsIlBvcnRhbCIsIkFsZXJ0RGlhbG9nT3ZlcmxheSIsImZvcndhcmRSZWYiLCJjbGFzc05hbWUiLCJwcm9wcyIsInJlZiIsIk92ZXJsYXkiLCJkaXNwbGF5TmFtZSIsIkFsZXJ0RGlhbG9nQ29udGVudCIsIkNvbnRlbnQiLCJBbGVydERpYWxvZ0hlYWRlciIsImRpdiIsIkFsZXJ0RGlhbG9nRm9vdGVyIiwiQWxlcnREaWFsb2dUaXRsZSIsIlRpdGxlIiwiQWxlcnREaWFsb2dEZXNjcmlwdGlvbiIsIkRlc2NyaXB0aW9uIiwiQWxlcnREaWFsb2dBY3Rpb24iLCJBY3Rpb24iLCJBbGVydERpYWxvZ0NhbmNlbCIsIkNhbmNlbCIsInZhcmlhbnQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/ui/alert-dialog.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/ui/alert.tsx":
|
|
/*!*********************************!*\
|
|
!*** ./components/ui/alert.tsx ***!
|
|
\*********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Alert: () => (/* binding */ Alert),\n/* harmony export */ AlertDescription: () => (/* binding */ AlertDescription),\n/* harmony export */ AlertTitle: () => (/* binding */ AlertTitle)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var class_variance_authority__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! class-variance-authority */ \"(ssr)/./node_modules/class-variance-authority/dist/index.mjs\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/utils */ \"(ssr)/./lib/utils.ts\");\n\n\n\n\nconst alertVariants = (0,class_variance_authority__WEBPACK_IMPORTED_MODULE_2__.cva)(\"relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground\", {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n destructive: \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\"\n }\n },\n defaultVariants: {\n variant: \"default\"\n }\n});\nconst Alert = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, variant, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: ref,\n role: \"alert\",\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)(alertVariants({\n variant\n }), className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/alert.tsx\",\n lineNumber: 26,\n columnNumber: 3\n }, undefined));\nAlert.displayName = \"Alert\";\nconst AlertTitle = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h5\", {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)(\"mb-1 font-medium leading-none tracking-tight\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/alert.tsx\",\n lineNumber: 39,\n columnNumber: 3\n }, undefined));\nAlertTitle.displayName = \"AlertTitle\";\nconst AlertDescription = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)(\"text-sm [&_p]:leading-relaxed\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/alert.tsx\",\n lineNumber: 51,\n columnNumber: 3\n }, undefined));\nAlertDescription.displayName = \"AlertDescription\";\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL3VpL2FsZXJ0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQThCO0FBQ21DO0FBRWpDO0FBRWhDLE1BQU1HLGdCQUFnQkYsNkRBQUdBLENBQ3ZCLDZKQUNBO0lBQ0VHLFVBQVU7UUFDUkMsU0FBUztZQUNQQyxTQUFTO1lBQ1RDLGFBQ0U7UUFDSjtJQUNGO0lBQ0FDLGlCQUFpQjtRQUNmSCxTQUFTO0lBQ1g7QUFDRjtBQUdGLE1BQU1JLHNCQUFRVCw2Q0FBZ0IsQ0FHNUIsQ0FBQyxFQUFFVyxTQUFTLEVBQUVOLE9BQU8sRUFBRSxHQUFHTyxPQUFPLEVBQUVDLG9CQUNuQyw4REFBQ0M7UUFDQ0QsS0FBS0E7UUFDTEUsTUFBSztRQUNMSixXQUFXVCw4Q0FBRUEsQ0FBQ0MsY0FBYztZQUFFRTtRQUFRLElBQUlNO1FBQ3pDLEdBQUdDLEtBQUs7Ozs7OztBQUdiSCxNQUFNTyxXQUFXLEdBQUc7QUFFcEIsTUFBTUMsMkJBQWFqQiw2Q0FBZ0IsQ0FHakMsQ0FBQyxFQUFFVyxTQUFTLEVBQUUsR0FBR0MsT0FBTyxFQUFFQyxvQkFDMUIsOERBQUNLO1FBQ0NMLEtBQUtBO1FBQ0xGLFdBQVdULDhDQUFFQSxDQUFDLGdEQUFnRFM7UUFDN0QsR0FBR0MsS0FBSzs7Ozs7O0FBR2JLLFdBQVdELFdBQVcsR0FBRztBQUV6QixNQUFNRyxpQ0FBbUJuQiw2Q0FBZ0IsQ0FHdkMsQ0FBQyxFQUFFVyxTQUFTLEVBQUUsR0FBR0MsT0FBTyxFQUFFQyxvQkFDMUIsOERBQUNDO1FBQ0NELEtBQUtBO1FBQ0xGLFdBQVdULDhDQUFFQSxDQUFDLGlDQUFpQ1M7UUFDOUMsR0FBR0MsS0FBSzs7Ozs7O0FBR2JPLGlCQUFpQkgsV0FBVyxHQUFHO0FBRWUiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvY29tcG9uZW50cy91aS9hbGVydC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7IGN2YSwgdHlwZSBWYXJpYW50UHJvcHMgfSBmcm9tIFwiY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5XCJcblxuaW1wb3J0IHsgY24gfSBmcm9tIFwiQC9saWIvdXRpbHNcIlxuXG5jb25zdCBhbGVydFZhcmlhbnRzID0gY3ZhKFxuICBcInJlbGF0aXZlIHctZnVsbCByb3VuZGVkLWxnIGJvcmRlciBwLTQgWyY+c3ZnfipdOnBsLTcgWyY+c3ZnK2Rpdl06dHJhbnNsYXRlLXktWy0zcHhdIFsmPnN2Z106YWJzb2x1dGUgWyY+c3ZnXTpsZWZ0LTQgWyY+c3ZnXTp0b3AtNCBbJj5zdmddOnRleHQtZm9yZWdyb3VuZFwiLFxuICB7XG4gICAgdmFyaWFudHM6IHtcbiAgICAgIHZhcmlhbnQ6IHtcbiAgICAgICAgZGVmYXVsdDogXCJiZy1iYWNrZ3JvdW5kIHRleHQtZm9yZWdyb3VuZFwiLFxuICAgICAgICBkZXN0cnVjdGl2ZTpcbiAgICAgICAgICBcImJvcmRlci1kZXN0cnVjdGl2ZS81MCB0ZXh0LWRlc3RydWN0aXZlIGRhcms6Ym9yZGVyLWRlc3RydWN0aXZlIFsmPnN2Z106dGV4dC1kZXN0cnVjdGl2ZVwiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRlZmF1bHRWYXJpYW50czoge1xuICAgICAgdmFyaWFudDogXCJkZWZhdWx0XCIsXG4gICAgfSxcbiAgfVxuKVxuXG5jb25zdCBBbGVydCA9IFJlYWN0LmZvcndhcmRSZWY8XG4gIEhUTUxEaXZFbGVtZW50LFxuICBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRGl2RWxlbWVudD4gJiBWYXJpYW50UHJvcHM8dHlwZW9mIGFsZXJ0VmFyaWFudHM+XG4+KCh7IGNsYXNzTmFtZSwgdmFyaWFudCwgLi4ucHJvcHMgfSwgcmVmKSA9PiAoXG4gIDxkaXZcbiAgICByZWY9e3JlZn1cbiAgICByb2xlPVwiYWxlcnRcIlxuICAgIGNsYXNzTmFtZT17Y24oYWxlcnRWYXJpYW50cyh7IHZhcmlhbnQgfSksIGNsYXNzTmFtZSl9XG4gICAgey4uLnByb3BzfVxuICAvPlxuKSlcbkFsZXJ0LmRpc3BsYXlOYW1lID0gXCJBbGVydFwiXG5cbmNvbnN0IEFsZXJ0VGl0bGUgPSBSZWFjdC5mb3J3YXJkUmVmPFxuICBIVE1MUGFyYWdyYXBoRWxlbWVudCxcbiAgUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEhlYWRpbmdFbGVtZW50PlxuPigoeyBjbGFzc05hbWUsIC4uLnByb3BzIH0sIHJlZikgPT4gKFxuICA8aDVcbiAgICByZWY9e3JlZn1cbiAgICBjbGFzc05hbWU9e2NuKFwibWItMSBmb250LW1lZGl1bSBsZWFkaW5nLW5vbmUgdHJhY2tpbmctdGlnaHRcIiwgY2xhc3NOYW1lKX1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pKVxuQWxlcnRUaXRsZS5kaXNwbGF5TmFtZSA9IFwiQWxlcnRUaXRsZVwiXG5cbmNvbnN0IEFsZXJ0RGVzY3JpcHRpb24gPSBSZWFjdC5mb3J3YXJkUmVmPFxuICBIVE1MUGFyYWdyYXBoRWxlbWVudCxcbiAgUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFBhcmFncmFwaEVsZW1lbnQ+XG4+KCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfSwgcmVmKSA9PiAoXG4gIDxkaXZcbiAgICByZWY9e3JlZn1cbiAgICBjbGFzc05hbWU9e2NuKFwidGV4dC1zbSBbJl9wXTpsZWFkaW5nLXJlbGF4ZWRcIiwgY2xhc3NOYW1lKX1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pKVxuQWxlcnREZXNjcmlwdGlvbi5kaXNwbGF5TmFtZSA9IFwiQWxlcnREZXNjcmlwdGlvblwiXG5cbmV4cG9ydCB7IEFsZXJ0LCBBbGVydFRpdGxlLCBBbGVydERlc2NyaXB0aW9uIH1cbiJdLCJuYW1lcyI6WyJSZWFjdCIsImN2YSIsImNuIiwiYWxlcnRWYXJpYW50cyIsInZhcmlhbnRzIiwidmFyaWFudCIsImRlZmF1bHQiLCJkZXN0cnVjdGl2ZSIsImRlZmF1bHRWYXJpYW50cyIsIkFsZXJ0IiwiZm9yd2FyZFJlZiIsImNsYXNzTmFtZSIsInByb3BzIiwicmVmIiwiZGl2Iiwicm9sZSIsImRpc3BsYXlOYW1lIiwiQWxlcnRUaXRsZSIsImg1IiwiQWxlcnREZXNjcmlwdGlvbiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/ui/alert.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/ui/avatar.tsx":
|
|
/*!**********************************!*\
|
|
!*** ./components/ui/avatar.tsx ***!
|
|
\**********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Avatar: () => (/* binding */ Avatar),\n/* harmony export */ AvatarFallback: () => (/* binding */ AvatarFallback),\n/* harmony export */ AvatarImage: () => (/* binding */ AvatarImage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _radix_ui_react_avatar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-avatar */ \"(ssr)/./node_modules/@radix-ui/react-avatar/dist/index.mjs\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(ssr)/./lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ Avatar,AvatarImage,AvatarFallback auto */ \n\n\n\nconst Avatar = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_avatar__WEBPACK_IMPORTED_MODULE_3__.Root, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/avatar.tsx\",\n lineNumber: 12,\n columnNumber: 3\n }, undefined));\nAvatar.displayName = _radix_ui_react_avatar__WEBPACK_IMPORTED_MODULE_3__.Root.displayName;\nconst AvatarImage = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_avatar__WEBPACK_IMPORTED_MODULE_3__.Image, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"aspect-square h-full w-full\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/avatar.tsx\",\n lineNumber: 27,\n columnNumber: 3\n }, undefined));\nAvatarImage.displayName = _radix_ui_react_avatar__WEBPACK_IMPORTED_MODULE_3__.Image.displayName;\nconst AvatarFallback = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_avatar__WEBPACK_IMPORTED_MODULE_3__.Fallback, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"flex h-full w-full items-center justify-center rounded-full bg-muted\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/avatar.tsx\",\n lineNumber: 39,\n columnNumber: 3\n }, undefined));\nAvatarFallback.displayName = _radix_ui_react_avatar__WEBPACK_IMPORTED_MODULE_3__.Fallback.displayName;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL3VpL2F2YXRhci50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUU4QjtBQUMyQjtBQUV6QjtBQUVoQyxNQUFNRyx1QkFBU0gsNkNBQWdCLENBRzdCLENBQUMsRUFBRUssU0FBUyxFQUFFLEdBQUdDLE9BQU8sRUFBRUMsb0JBQzFCLDhEQUFDTix3REFBb0I7UUFDbkJNLEtBQUtBO1FBQ0xGLFdBQVdILDhDQUFFQSxDQUNYLGlFQUNBRztRQUVELEdBQUdDLEtBQUs7Ozs7OztBQUdiSCxPQUFPTSxXQUFXLEdBQUdSLHdEQUFvQixDQUFDUSxXQUFXO0FBRXJELE1BQU1DLDRCQUFjViw2Q0FBZ0IsQ0FHbEMsQ0FBQyxFQUFFSyxTQUFTLEVBQUUsR0FBR0MsT0FBTyxFQUFFQyxvQkFDMUIsOERBQUNOLHlEQUFxQjtRQUNwQk0sS0FBS0E7UUFDTEYsV0FBV0gsOENBQUVBLENBQUMsK0JBQStCRztRQUM1QyxHQUFHQyxLQUFLOzs7Ozs7QUFHYkksWUFBWUQsV0FBVyxHQUFHUix5REFBcUIsQ0FBQ1EsV0FBVztBQUUzRCxNQUFNRywrQkFBaUJaLDZDQUFnQixDQUdyQyxDQUFDLEVBQUVLLFNBQVMsRUFBRSxHQUFHQyxPQUFPLEVBQUVDLG9CQUMxQiw4REFBQ04sNERBQXdCO1FBQ3ZCTSxLQUFLQTtRQUNMRixXQUFXSCw4Q0FBRUEsQ0FDWCx3RUFDQUc7UUFFRCxHQUFHQyxLQUFLOzs7Ozs7QUFHYk0sZUFBZUgsV0FBVyxHQUFHUiw0REFBd0IsQ0FBQ1EsV0FBVztBQUVuQiIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9jb21wb25lbnRzL3VpL2F2YXRhci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCJcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCAqIGFzIEF2YXRhclByaW1pdGl2ZSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWF2YXRhclwiXG5cbmltcG9ydCB7IGNuIH0gZnJvbSBcIkAvbGliL3V0aWxzXCJcblxuY29uc3QgQXZhdGFyID0gUmVhY3QuZm9yd2FyZFJlZjxcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgQXZhdGFyUHJpbWl0aXZlLlJvb3Q+LFxuICBSZWFjdC5Db21wb25lbnRQcm9wc1dpdGhvdXRSZWY8dHlwZW9mIEF2YXRhclByaW1pdGl2ZS5Sb290PlxuPigoeyBjbGFzc05hbWUsIC4uLnByb3BzIH0sIHJlZikgPT4gKFxuICA8QXZhdGFyUHJpbWl0aXZlLlJvb3RcbiAgICByZWY9e3JlZn1cbiAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgXCJyZWxhdGl2ZSBmbGV4IGgtMTAgdy0xMCBzaHJpbmstMCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1mdWxsXCIsXG4gICAgICBjbGFzc05hbWVcbiAgICApfVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbikpXG5BdmF0YXIuZGlzcGxheU5hbWUgPSBBdmF0YXJQcmltaXRpdmUuUm9vdC5kaXNwbGF5TmFtZVxuXG5jb25zdCBBdmF0YXJJbWFnZSA9IFJlYWN0LmZvcndhcmRSZWY8XG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIEF2YXRhclByaW1pdGl2ZS5JbWFnZT4sXG4gIFJlYWN0LkNvbXBvbmVudFByb3BzV2l0aG91dFJlZjx0eXBlb2YgQXZhdGFyUHJpbWl0aXZlLkltYWdlPlxuPigoeyBjbGFzc05hbWUsIC4uLnByb3BzIH0sIHJlZikgPT4gKFxuICA8QXZhdGFyUHJpbWl0aXZlLkltYWdlXG4gICAgcmVmPXtyZWZ9XG4gICAgY2xhc3NOYW1lPXtjbihcImFzcGVjdC1zcXVhcmUgaC1mdWxsIHctZnVsbFwiLCBjbGFzc05hbWUpfVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbikpXG5BdmF0YXJJbWFnZS5kaXNwbGF5TmFtZSA9IEF2YXRhclByaW1pdGl2ZS5JbWFnZS5kaXNwbGF5TmFtZVxuXG5jb25zdCBBdmF0YXJGYWxsYmFjayA9IFJlYWN0LmZvcndhcmRSZWY8XG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIEF2YXRhclByaW1pdGl2ZS5GYWxsYmFjaz4sXG4gIFJlYWN0LkNvbXBvbmVudFByb3BzV2l0aG91dFJlZjx0eXBlb2YgQXZhdGFyUHJpbWl0aXZlLkZhbGxiYWNrPlxuPigoeyBjbGFzc05hbWUsIC4uLnByb3BzIH0sIHJlZikgPT4gKFxuICA8QXZhdGFyUHJpbWl0aXZlLkZhbGxiYWNrXG4gICAgcmVmPXtyZWZ9XG4gICAgY2xhc3NOYW1lPXtjbihcbiAgICAgIFwiZmxleCBoLWZ1bGwgdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgYmctbXV0ZWRcIixcbiAgICAgIGNsYXNzTmFtZVxuICAgICl9XG4gICAgey4uLnByb3BzfVxuICAvPlxuKSlcbkF2YXRhckZhbGxiYWNrLmRpc3BsYXlOYW1lID0gQXZhdGFyUHJpbWl0aXZlLkZhbGxiYWNrLmRpc3BsYXlOYW1lXG5cbmV4cG9ydCB7IEF2YXRhciwgQXZhdGFySW1hZ2UsIEF2YXRhckZhbGxiYWNrIH1cbiJdLCJuYW1lcyI6WyJSZWFjdCIsIkF2YXRhclByaW1pdGl2ZSIsImNuIiwiQXZhdGFyIiwiZm9yd2FyZFJlZiIsImNsYXNzTmFtZSIsInByb3BzIiwicmVmIiwiUm9vdCIsImRpc3BsYXlOYW1lIiwiQXZhdGFySW1hZ2UiLCJJbWFnZSIsIkF2YXRhckZhbGxiYWNrIiwiRmFsbGJhY2siXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/ui/avatar.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/ui/button.tsx":
|
|
/*!**********************************!*\
|
|
!*** ./components/ui/button.tsx ***!
|
|
\**********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Button: () => (/* binding */ Button),\n/* harmony export */ buttonVariants: () => (/* binding */ buttonVariants)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @radix-ui/react-slot */ \"(ssr)/./node_modules/@radix-ui/react-slot/dist/index.mjs\");\n/* harmony import */ var class_variance_authority__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! class-variance-authority */ \"(ssr)/./node_modules/class-variance-authority/dist/index.mjs\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/utils */ \"(ssr)/./lib/utils.ts\");\n\n\n\n\n\nconst buttonVariants = (0,class_variance_authority__WEBPACK_IMPORTED_MODULE_2__.cva)(\"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\", {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\"\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\"\n }\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\"\n }\n});\nconst Button = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, variant, size, asChild = false, ...props }, ref)=>{\n const Comp = asChild ? _radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_4__.Slot : \"button\";\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Comp, {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)(buttonVariants({\n variant,\n size,\n className\n })),\n ref: ref,\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/button.tsx\",\n lineNumber: 46,\n columnNumber: 7\n }, undefined);\n});\nButton.displayName = \"Button\";\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL3VpL2J1dHRvbi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUE4QjtBQUNhO0FBQ3NCO0FBRWpDO0FBRWhDLE1BQU1JLGlCQUFpQkYsNkRBQUdBLENBQ3hCLDRWQUNBO0lBQ0VHLFVBQVU7UUFDUkMsU0FBUztZQUNQQyxTQUFTO1lBQ1RDLGFBQ0U7WUFDRkMsU0FDRTtZQUNGQyxXQUNFO1lBQ0ZDLE9BQU87WUFDUEMsTUFBTTtRQUNSO1FBQ0FDLE1BQU07WUFDSk4sU0FBUztZQUNUTyxJQUFJO1lBQ0pDLElBQUk7WUFDSkMsTUFBTTtRQUNSO0lBQ0Y7SUFDQUMsaUJBQWlCO1FBQ2ZYLFNBQVM7UUFDVE8sTUFBTTtJQUNSO0FBQ0Y7QUFTRixNQUFNSyx1QkFBU2xCLDZDQUFnQixDQUM3QixDQUFDLEVBQUVvQixTQUFTLEVBQUVkLE9BQU8sRUFBRU8sSUFBSSxFQUFFUSxVQUFVLEtBQUssRUFBRSxHQUFHQyxPQUFPLEVBQUVDO0lBQ3hELE1BQU1DLE9BQU9ILFVBQVVwQixzREFBSUEsR0FBRztJQUM5QixxQkFDRSw4REFBQ3VCO1FBQ0NKLFdBQVdqQiw4Q0FBRUEsQ0FBQ0MsZUFBZTtZQUFFRTtZQUFTTztZQUFNTztRQUFVO1FBQ3hERyxLQUFLQTtRQUNKLEdBQUdELEtBQUs7Ozs7OztBQUdmO0FBRUZKLE9BQU9PLFdBQVcsR0FBRztBQUVZIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2NvbXBvbmVudHMvdWkvYnV0dG9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgU2xvdCB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3Qtc2xvdFwiXG5pbXBvcnQgeyBjdmEsIHR5cGUgVmFyaWFudFByb3BzIH0gZnJvbSBcImNsYXNzLXZhcmlhbmNlLWF1dGhvcml0eVwiXG5cbmltcG9ydCB7IGNuIH0gZnJvbSBcIkAvbGliL3V0aWxzXCJcblxuY29uc3QgYnV0dG9uVmFyaWFudHMgPSBjdmEoXG4gIFwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSByaW5nLW9mZnNldC1iYWNrZ3JvdW5kIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2l6ZS00IFsmX3N2Z106c2hyaW5rLTBcIixcbiAge1xuICAgIHZhcmlhbnRzOiB7XG4gICAgICB2YXJpYW50OiB7XG4gICAgICAgIGRlZmF1bHQ6IFwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1wcmltYXJ5LzkwXCIsXG4gICAgICAgIGRlc3RydWN0aXZlOlxuICAgICAgICAgIFwiYmctZGVzdHJ1Y3RpdmUgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIGhvdmVyOmJnLWRlc3RydWN0aXZlLzkwXCIsXG4gICAgICAgIG91dGxpbmU6XG4gICAgICAgICAgXCJib3JkZXIgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmRcIixcbiAgICAgICAgc2Vjb25kYXJ5OlxuICAgICAgICAgIFwiYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgaG92ZXI6Ymctc2Vjb25kYXJ5LzgwXCIsXG4gICAgICAgIGdob3N0OiBcImhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kXCIsXG4gICAgICAgIGxpbms6IFwidGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmVcIixcbiAgICAgIH0sXG4gICAgICBzaXplOiB7XG4gICAgICAgIGRlZmF1bHQ6IFwiaC0xMCBweC00IHB5LTJcIixcbiAgICAgICAgc206IFwiaC05IHJvdW5kZWQtbWQgcHgtM1wiLFxuICAgICAgICBsZzogXCJoLTExIHJvdW5kZWQtbWQgcHgtOFwiLFxuICAgICAgICBpY29uOiBcImgtMTAgdy0xMFwiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRlZmF1bHRWYXJpYW50czoge1xuICAgICAgdmFyaWFudDogXCJkZWZhdWx0XCIsXG4gICAgICBzaXplOiBcImRlZmF1bHRcIixcbiAgICB9LFxuICB9XG4pXG5cbmV4cG9ydCBpbnRlcmZhY2UgQnV0dG9uUHJvcHNcbiAgZXh0ZW5kcyBSZWFjdC5CdXR0b25IVE1MQXR0cmlidXRlczxIVE1MQnV0dG9uRWxlbWVudD4sXG4gICAgVmFyaWFudFByb3BzPHR5cGVvZiBidXR0b25WYXJpYW50cz4ge1xuICBhc0NoaWxkPzogYm9vbGVhblxufVxuXG5jb25zdCBCdXR0b24gPSBSZWFjdC5mb3J3YXJkUmVmPEhUTUxCdXR0b25FbGVtZW50LCBCdXR0b25Qcm9wcz4oXG4gICh7IGNsYXNzTmFtZSwgdmFyaWFudCwgc2l6ZSwgYXNDaGlsZCA9IGZhbHNlLCAuLi5wcm9wcyB9LCByZWYpID0+IHtcbiAgICBjb25zdCBDb21wID0gYXNDaGlsZCA/IFNsb3QgOiBcImJ1dHRvblwiXG4gICAgcmV0dXJuIChcbiAgICAgIDxDb21wXG4gICAgICAgIGNsYXNzTmFtZT17Y24oYnV0dG9uVmFyaWFudHMoeyB2YXJpYW50LCBzaXplLCBjbGFzc05hbWUgfSkpfVxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgLz5cbiAgICApXG4gIH1cbilcbkJ1dHRvbi5kaXNwbGF5TmFtZSA9IFwiQnV0dG9uXCJcblxuZXhwb3J0IHsgQnV0dG9uLCBidXR0b25WYXJpYW50cyB9XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJTbG90IiwiY3ZhIiwiY24iLCJidXR0b25WYXJpYW50cyIsInZhcmlhbnRzIiwidmFyaWFudCIsImRlZmF1bHQiLCJkZXN0cnVjdGl2ZSIsIm91dGxpbmUiLCJzZWNvbmRhcnkiLCJnaG9zdCIsImxpbmsiLCJzaXplIiwic20iLCJsZyIsImljb24iLCJkZWZhdWx0VmFyaWFudHMiLCJCdXR0b24iLCJmb3J3YXJkUmVmIiwiY2xhc3NOYW1lIiwiYXNDaGlsZCIsInByb3BzIiwicmVmIiwiQ29tcCIsImRpc3BsYXlOYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./components/ui/button.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/ui/checkbox.tsx":
|
|
/*!************************************!*\
|
|
!*** ./components/ui/checkbox.tsx ***!
|
|
\************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Checkbox: () => (/* binding */ Checkbox)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _radix_ui_react_checkbox__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-checkbox */ \"(ssr)/./node_modules/@radix-ui/react-checkbox/dist/index.mjs\");\n/* harmony import */ var _barrel_optimize_names_Check_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=Check!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/check.js\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(ssr)/./lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ Checkbox auto */ \n\n\n\n\nconst Checkbox = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_checkbox__WEBPACK_IMPORTED_MODULE_3__.Root, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\", className),\n ...props,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_checkbox__WEBPACK_IMPORTED_MODULE_3__.Indicator, {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"flex items-center justify-center text-current\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Check_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/checkbox.tsx\",\n lineNumber: 24,\n columnNumber: 7\n }, undefined)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/checkbox.tsx\",\n lineNumber: 21,\n columnNumber: 5\n }, undefined)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/checkbox.tsx\",\n lineNumber: 13,\n columnNumber: 3\n }, undefined));\nCheckbox.displayName = _radix_ui_react_checkbox__WEBPACK_IMPORTED_MODULE_3__.Root.displayName;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL3VpL2NoZWNrYm94LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFFOEI7QUFDK0I7QUFDekI7QUFFSjtBQUVoQyxNQUFNSSx5QkFBV0osNkNBQWdCLENBRy9CLENBQUMsRUFBRU0sU0FBUyxFQUFFLEdBQUdDLE9BQU8sRUFBRUMsb0JBQzFCLDhEQUFDUCwwREFBc0I7UUFDckJPLEtBQUtBO1FBQ0xGLFdBQVdILDhDQUFFQSxDQUNYLGtUQUNBRztRQUVELEdBQUdDLEtBQUs7a0JBRVQsNEVBQUNOLCtEQUEyQjtZQUMxQkssV0FBV0gsOENBQUVBLENBQUM7c0JBRWQsNEVBQUNELGlGQUFLQTtnQkFBQ0ksV0FBVTs7Ozs7Ozs7Ozs7Ozs7OztBQUl2QkYsU0FBU08sV0FBVyxHQUFHViwwREFBc0IsQ0FBQ1UsV0FBVztBQUV0QyIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9jb21wb25lbnRzL3VpL2NoZWNrYm94LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIlxuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0ICogYXMgQ2hlY2tib3hQcmltaXRpdmUgZnJvbSBcIkByYWRpeC11aS9yZWFjdC1jaGVja2JveFwiXG5pbXBvcnQgeyBDaGVjayB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIlxuXG5pbXBvcnQgeyBjbiB9IGZyb20gXCJAL2xpYi91dGlsc1wiXG5cbmNvbnN0IENoZWNrYm94ID0gUmVhY3QuZm9yd2FyZFJlZjxcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgQ2hlY2tib3hQcmltaXRpdmUuUm9vdD4sXG4gIFJlYWN0LkNvbXBvbmVudFByb3BzV2l0aG91dFJlZjx0eXBlb2YgQ2hlY2tib3hQcmltaXRpdmUuUm9vdD5cbj4oKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9LCByZWYpID0+IChcbiAgPENoZWNrYm94UHJpbWl0aXZlLlJvb3RcbiAgICByZWY9e3JlZn1cbiAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgXCJwZWVyIGgtNCB3LTQgc2hyaW5rLTAgcm91bmRlZC1zbSBib3JkZXIgYm9yZGVyLXByaW1hcnkgcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZFwiLFxuICAgICAgY2xhc3NOYW1lXG4gICAgKX1cbiAgICB7Li4ucHJvcHN9XG4gID5cbiAgICA8Q2hlY2tib3hQcmltaXRpdmUuSW5kaWNhdG9yXG4gICAgICBjbGFzc05hbWU9e2NuKFwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jdXJyZW50XCIpfVxuICAgID5cbiAgICAgIDxDaGVjayBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICA8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cbiAgPC9DaGVja2JveFByaW1pdGl2ZS5Sb290PlxuKSlcbkNoZWNrYm94LmRpc3BsYXlOYW1lID0gQ2hlY2tib3hQcmltaXRpdmUuUm9vdC5kaXNwbGF5TmFtZVxuXG5leHBvcnQgeyBDaGVja2JveCB9XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJDaGVja2JveFByaW1pdGl2ZSIsIkNoZWNrIiwiY24iLCJDaGVja2JveCIsImZvcndhcmRSZWYiLCJjbGFzc05hbWUiLCJwcm9wcyIsInJlZiIsIlJvb3QiLCJJbmRpY2F0b3IiLCJkaXNwbGF5TmFtZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/ui/checkbox.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/ui/dialog.tsx":
|
|
/*!**********************************!*\
|
|
!*** ./components/ui/dialog.tsx ***!
|
|
\**********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Dialog: () => (/* binding */ Dialog),\n/* harmony export */ DialogClose: () => (/* binding */ DialogClose),\n/* harmony export */ DialogContent: () => (/* binding */ DialogContent),\n/* harmony export */ DialogDescription: () => (/* binding */ DialogDescription),\n/* harmony export */ DialogFooter: () => (/* binding */ DialogFooter),\n/* harmony export */ DialogHeader: () => (/* binding */ DialogHeader),\n/* harmony export */ DialogOverlay: () => (/* binding */ DialogOverlay),\n/* harmony export */ DialogPortal: () => (/* binding */ DialogPortal),\n/* harmony export */ DialogTitle: () => (/* binding */ DialogTitle),\n/* harmony export */ DialogTrigger: () => (/* binding */ DialogTrigger)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _radix_ui_react_dialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-dialog */ \"(ssr)/./node_modules/@radix-ui/react-dialog/dist/index.mjs\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(ssr)/./lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ Dialog,DialogPortal,DialogOverlay,DialogClose,DialogTrigger,DialogContent,DialogHeader,DialogFooter,DialogTitle,DialogDescription auto */ \n\n\n\nconst Dialog = _radix_ui_react_dialog__WEBPACK_IMPORTED_MODULE_3__.Root;\nconst DialogTrigger = _radix_ui_react_dialog__WEBPACK_IMPORTED_MODULE_3__.Trigger;\nconst DialogPortal = _radix_ui_react_dialog__WEBPACK_IMPORTED_MODULE_3__.Portal;\nconst DialogClose = _radix_ui_react_dialog__WEBPACK_IMPORTED_MODULE_3__.Close;\nconst DialogOverlay = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_dialog__WEBPACK_IMPORTED_MODULE_3__.Overlay, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dialog.tsx\",\n lineNumber: 21,\n columnNumber: 3\n }, undefined));\nDialogOverlay.displayName = _radix_ui_react_dialog__WEBPACK_IMPORTED_MODULE_3__.Overlay.displayName;\nconst DialogContent = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, children, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(DialogPortal, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(DialogOverlay, {}, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dialog.tsx\",\n lineNumber: 37,\n columnNumber: 5\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_dialog__WEBPACK_IMPORTED_MODULE_3__.Content, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-white p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\", className),\n ...props,\n children: children\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dialog.tsx\",\n lineNumber: 38,\n columnNumber: 5\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dialog.tsx\",\n lineNumber: 36,\n columnNumber: 3\n }, undefined));\nDialogContent.displayName = _radix_ui_react_dialog__WEBPACK_IMPORTED_MODULE_3__.Content.displayName;\nconst DialogHeader = ({ className, ...props })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"flex flex-col space-y-1.5 text-center sm:text-left\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dialog.tsx\",\n lineNumber: 56,\n columnNumber: 3\n }, undefined);\nDialogHeader.displayName = \"DialogHeader\";\nconst DialogFooter = ({ className, ...props })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dialog.tsx\",\n lineNumber: 70,\n columnNumber: 3\n }, undefined);\nDialogFooter.displayName = \"DialogFooter\";\nconst DialogTitle = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_dialog__WEBPACK_IMPORTED_MODULE_3__.Title, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"text-lg font-semibold leading-none tracking-tight\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dialog.tsx\",\n lineNumber: 84,\n columnNumber: 3\n }, undefined));\nDialogTitle.displayName = _radix_ui_react_dialog__WEBPACK_IMPORTED_MODULE_3__.Title.displayName;\nconst DialogDescription = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_dialog__WEBPACK_IMPORTED_MODULE_3__.Description, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"text-sm text-muted-foreground\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dialog.tsx\",\n lineNumber: 99,\n columnNumber: 3\n }, undefined));\nDialogDescription.displayName = _radix_ui_react_dialog__WEBPACK_IMPORTED_MODULE_3__.Description.displayName;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFOEI7QUFDMkI7QUFHekI7QUFFaEMsTUFBTUcsU0FBU0Ysd0RBQW9CO0FBRW5DLE1BQU1JLGdCQUFnQkosMkRBQXVCO0FBRTdDLE1BQU1NLGVBQWVOLDBEQUFzQjtBQUUzQyxNQUFNUSxjQUFjUix5REFBcUI7QUFFekMsTUFBTVUsOEJBQWdCWCw2Q0FBZ0IsQ0FHcEMsQ0FBQyxFQUFFYSxTQUFTLEVBQUUsR0FBR0MsT0FBTyxFQUFFQyxvQkFDMUIsOERBQUNkLDJEQUF1QjtRQUN0QmMsS0FBS0E7UUFDTEYsV0FBV1gsOENBQUVBLENBQ1gsMkpBQ0FXO1FBRUQsR0FBR0MsS0FBSzs7Ozs7O0FBR2JILGNBQWNNLFdBQVcsR0FBR2hCLDJEQUF1QixDQUFDZ0IsV0FBVztBQUUvRCxNQUFNQyw4QkFBZ0JsQiw2Q0FBZ0IsQ0FHcEMsQ0FBQyxFQUFFYSxTQUFTLEVBQUVNLFFBQVEsRUFBRSxHQUFHTCxPQUFPLEVBQUVDLG9CQUNwQyw4REFBQ1I7OzBCQUNDLDhEQUFDSTs7Ozs7MEJBQ0QsOERBQUNWLDJEQUF1QjtnQkFDdEJjLEtBQUtBO2dCQUNMRixXQUFXWCw4Q0FBRUEsQ0FDWCwwZkFDQVc7Z0JBRUQsR0FBR0MsS0FBSzswQkFFUks7Ozs7Ozs7Ozs7OztBQUlQRCxjQUFjRCxXQUFXLEdBQUdoQiwyREFBdUIsQ0FBQ2dCLFdBQVc7QUFFL0QsTUFBTUksZUFBZSxDQUFDLEVBQ3BCUixTQUFTLEVBQ1QsR0FBR0MsT0FDa0MsaUJBQ3JDLDhEQUFDUTtRQUNDVCxXQUFXWCw4Q0FBRUEsQ0FDWCxzREFDQVc7UUFFRCxHQUFHQyxLQUFLOzs7Ozs7QUFHYk8sYUFBYUosV0FBVyxHQUFHO0FBRTNCLE1BQU1NLGVBQWUsQ0FBQyxFQUNwQlYsU0FBUyxFQUNULEdBQUdDLE9BQ2tDLGlCQUNyQyw4REFBQ1E7UUFDQ1QsV0FBV1gsOENBQUVBLENBQ1gsaUVBQ0FXO1FBRUQsR0FBR0MsS0FBSzs7Ozs7O0FBR2JTLGFBQWFOLFdBQVcsR0FBRztBQUUzQixNQUFNTyw0QkFBY3hCLDZDQUFnQixDQUdsQyxDQUFDLEVBQUVhLFNBQVMsRUFBRSxHQUFHQyxPQUFPLEVBQUVDLG9CQUMxQiw4REFBQ2QseURBQXFCO1FBQ3BCYyxLQUFLQTtRQUNMRixXQUFXWCw4Q0FBRUEsQ0FDWCxxREFDQVc7UUFFRCxHQUFHQyxLQUFLOzs7Ozs7QUFHYlUsWUFBWVAsV0FBVyxHQUFHaEIseURBQXFCLENBQUNnQixXQUFXO0FBRTNELE1BQU1TLGtDQUFvQjFCLDZDQUFnQixDQUd4QyxDQUFDLEVBQUVhLFNBQVMsRUFBRSxHQUFHQyxPQUFPLEVBQUVDLG9CQUMxQiw4REFBQ2QsK0RBQTJCO1FBQzFCYyxLQUFLQTtRQUNMRixXQUFXWCw4Q0FBRUEsQ0FBQyxpQ0FBaUNXO1FBQzlDLEdBQUdDLEtBQUs7Ozs7OztBQUdiWSxrQkFBa0JULFdBQVcsR0FBR2hCLCtEQUEyQixDQUFDZ0IsV0FBVztBQWF0RSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCJcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWRpYWxvZ1wiXG5pbXBvcnQgeyBYIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiXG5cbmltcG9ydCB7IGNuIH0gZnJvbSBcIkAvbGliL3V0aWxzXCJcblxuY29uc3QgRGlhbG9nID0gRGlhbG9nUHJpbWl0aXZlLlJvb3RcblxuY29uc3QgRGlhbG9nVHJpZ2dlciA9IERpYWxvZ1ByaW1pdGl2ZS5UcmlnZ2VyXG5cbmNvbnN0IERpYWxvZ1BvcnRhbCA9IERpYWxvZ1ByaW1pdGl2ZS5Qb3J0YWxcblxuY29uc3QgRGlhbG9nQ2xvc2UgPSBEaWFsb2dQcmltaXRpdmUuQ2xvc2VcblxuY29uc3QgRGlhbG9nT3ZlcmxheSA9IFJlYWN0LmZvcndhcmRSZWY8XG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5PixcbiAgUmVhY3QuQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuT3ZlcmxheT5cbj4oKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9LCByZWYpID0+IChcbiAgPERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5XG4gICAgcmVmPXtyZWZ9XG4gICAgY2xhc3NOYW1lPXtjbihcbiAgICAgIFwiZml4ZWQgaW5zZXQtMCB6LTUwIGJnLWJsYWNrLzgwICBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMFwiLFxuICAgICAgY2xhc3NOYW1lXG4gICAgKX1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pKVxuRGlhbG9nT3ZlcmxheS5kaXNwbGF5TmFtZSA9IERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5LmRpc3BsYXlOYW1lXG5cbmNvbnN0IERpYWxvZ0NvbnRlbnQgPSBSZWFjdC5mb3J3YXJkUmVmPFxuICBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ29udGVudD4sXG4gIFJlYWN0LkNvbXBvbmVudFByb3BzV2l0aG91dFJlZjx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+XG4+KCh7IGNsYXNzTmFtZSwgY2hpbGRyZW4sIC4uLnByb3BzIH0sIHJlZikgPT4gKFxuICA8RGlhbG9nUG9ydGFsPlxuICAgIDxEaWFsb2dPdmVybGF5IC8+XG4gICAgPERpYWxvZ1ByaW1pdGl2ZS5Db250ZW50XG4gICAgICByZWY9e3JlZn1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIFwiZml4ZWQgbGVmdC1bNTAlXSB0b3AtWzUwJV0gei01MCBncmlkIHctZnVsbCBtYXgtdy1sZyB0cmFuc2xhdGUteC1bLTUwJV0gdHJhbnNsYXRlLXktWy01MCVdIGdhcC00IGJvcmRlciBiZy13aGl0ZSBwLTYgc2hhZG93LWxnIGR1cmF0aW9uLTIwMCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc3RhdGU9Y2xvc2VkXTpzbGlkZS1vdXQtdG8tbGVmdC0xLzIgZGF0YS1bc3RhdGU9Y2xvc2VkXTpzbGlkZS1vdXQtdG8tdG9wLVs0OCVdIGRhdGEtW3N0YXRlPW9wZW5dOnNsaWRlLWluLWZyb20tbGVmdC0xLzIgZGF0YS1bc3RhdGU9b3Blbl06c2xpZGUtaW4tZnJvbS10b3AtWzQ4JV0gc206cm91bmRlZC1sZ1wiLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+XG4gIDwvRGlhbG9nUG9ydGFsPlxuKSlcbkRpYWxvZ0NvbnRlbnQuZGlzcGxheU5hbWUgPSBEaWFsb2dQcmltaXRpdmUuQ29udGVudC5kaXNwbGF5TmFtZVxuXG5jb25zdCBEaWFsb2dIZWFkZXIgPSAoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRGl2RWxlbWVudD4pID0+IChcbiAgPGRpdlxuICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICBcImZsZXggZmxleC1jb2wgc3BhY2UteS0xLjUgdGV4dC1jZW50ZXIgc206dGV4dC1sZWZ0XCIsXG4gICAgICBjbGFzc05hbWVcbiAgICApfVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbilcbkRpYWxvZ0hlYWRlci5kaXNwbGF5TmFtZSA9IFwiRGlhbG9nSGVhZGVyXCJcblxuY29uc3QgRGlhbG9nRm9vdGVyID0gKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+KSA9PiAoXG4gIDxkaXZcbiAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgXCJmbGV4IGZsZXgtY29sLXJldmVyc2Ugc206ZmxleC1yb3cgc206anVzdGlmeS1lbmQgc206c3BhY2UteC0yXCIsXG4gICAgICBjbGFzc05hbWVcbiAgICApfVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbilcbkRpYWxvZ0Zvb3Rlci5kaXNwbGF5TmFtZSA9IFwiRGlhbG9nRm9vdGVyXCJcblxuY29uc3QgRGlhbG9nVGl0bGUgPSBSZWFjdC5mb3J3YXJkUmVmPFxuICBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuVGl0bGU+LFxuICBSZWFjdC5Db21wb25lbnRQcm9wc1dpdGhvdXRSZWY8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT5cbj4oKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9LCByZWYpID0+IChcbiAgPERpYWxvZ1ByaW1pdGl2ZS5UaXRsZVxuICAgIHJlZj17cmVmfVxuICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICBcInRleHQtbGcgZm9udC1zZW1pYm9sZCBsZWFkaW5nLW5vbmUgdHJhY2tpbmctdGlnaHRcIixcbiAgICAgIGNsYXNzTmFtZVxuICAgICl9XG4gICAgey4uLnByb3BzfVxuICAvPlxuKSlcbkRpYWxvZ1RpdGxlLmRpc3BsYXlOYW1lID0gRGlhbG9nUHJpbWl0aXZlLlRpdGxlLmRpc3BsYXlOYW1lXG5cbmNvbnN0IERpYWxvZ0Rlc2NyaXB0aW9uID0gUmVhY3QuZm9yd2FyZFJlZjxcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uPixcbiAgUmVhY3QuQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb24+XG4+KCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfSwgcmVmKSA9PiAoXG4gIDxEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb25cbiAgICByZWY9e3JlZn1cbiAgICBjbGFzc05hbWU9e2NuKFwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIiwgY2xhc3NOYW1lKX1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pKVxuRGlhbG9nRGVzY3JpcHRpb24uZGlzcGxheU5hbWUgPSBEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb24uZGlzcGxheU5hbWVcblxuZXhwb3J0IHtcbiAgRGlhbG9nLFxuICBEaWFsb2dQb3J0YWwsXG4gIERpYWxvZ092ZXJsYXksXG4gIERpYWxvZ0Nsb3NlLFxuICBEaWFsb2dUcmlnZ2VyLFxuICBEaWFsb2dDb250ZW50LFxuICBEaWFsb2dIZWFkZXIsXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nVGl0bGUsXG4gIERpYWxvZ0Rlc2NyaXB0aW9uLFxufVxuIl0sIm5hbWVzIjpbIlJlYWN0IiwiRGlhbG9nUHJpbWl0aXZlIiwiY24iLCJEaWFsb2ciLCJSb290IiwiRGlhbG9nVHJpZ2dlciIsIlRyaWdnZXIiLCJEaWFsb2dQb3J0YWwiLCJQb3J0YWwiLCJEaWFsb2dDbG9zZSIsIkNsb3NlIiwiRGlhbG9nT3ZlcmxheSIsImZvcndhcmRSZWYiLCJjbGFzc05hbWUiLCJwcm9wcyIsInJlZiIsIk92ZXJsYXkiLCJkaXNwbGF5TmFtZSIsIkRpYWxvZ0NvbnRlbnQiLCJjaGlsZHJlbiIsIkNvbnRlbnQiLCJEaWFsb2dIZWFkZXIiLCJkaXYiLCJEaWFsb2dGb290ZXIiLCJEaWFsb2dUaXRsZSIsIlRpdGxlIiwiRGlhbG9nRGVzY3JpcHRpb24iLCJEZXNjcmlwdGlvbiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/ui/dialog.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/ui/dropdown-menu.tsx":
|
|
/*!*****************************************!*\
|
|
!*** ./components/ui/dropdown-menu.tsx ***!
|
|
\*****************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DropdownMenu: () => (/* binding */ DropdownMenu),\n/* harmony export */ DropdownMenuCheckboxItem: () => (/* binding */ DropdownMenuCheckboxItem),\n/* harmony export */ DropdownMenuContent: () => (/* binding */ DropdownMenuContent),\n/* harmony export */ DropdownMenuGroup: () => (/* binding */ DropdownMenuGroup),\n/* harmony export */ DropdownMenuItem: () => (/* binding */ DropdownMenuItem),\n/* harmony export */ DropdownMenuLabel: () => (/* binding */ DropdownMenuLabel),\n/* harmony export */ DropdownMenuPortal: () => (/* binding */ DropdownMenuPortal),\n/* harmony export */ DropdownMenuRadioGroup: () => (/* binding */ DropdownMenuRadioGroup),\n/* harmony export */ DropdownMenuRadioItem: () => (/* binding */ DropdownMenuRadioItem),\n/* harmony export */ DropdownMenuSeparator: () => (/* binding */ DropdownMenuSeparator),\n/* harmony export */ DropdownMenuShortcut: () => (/* binding */ DropdownMenuShortcut),\n/* harmony export */ DropdownMenuSub: () => (/* binding */ DropdownMenuSub),\n/* harmony export */ DropdownMenuSubContent: () => (/* binding */ DropdownMenuSubContent),\n/* harmony export */ DropdownMenuSubTrigger: () => (/* binding */ DropdownMenuSubTrigger),\n/* harmony export */ DropdownMenuTrigger: () => (/* binding */ DropdownMenuTrigger)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-dropdown-menu */ \"(ssr)/./node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs\");\n/* harmony import */ var _barrel_optimize_names_Check_ChevronRight_Circle_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=Check,ChevronRight,Circle!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/chevron-right.js\");\n/* harmony import */ var _barrel_optimize_names_Check_ChevronRight_Circle_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=Check,ChevronRight,Circle!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/check.js\");\n/* harmony import */ var _barrel_optimize_names_Check_ChevronRight_Circle_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=Check,ChevronRight,Circle!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/circle.js\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(ssr)/./lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ DropdownMenu,DropdownMenuTrigger,DropdownMenuContent,DropdownMenuItem,DropdownMenuCheckboxItem,DropdownMenuRadioItem,DropdownMenuLabel,DropdownMenuSeparator,DropdownMenuShortcut,DropdownMenuGroup,DropdownMenuPortal,DropdownMenuSub,DropdownMenuSubContent,DropdownMenuSubTrigger,DropdownMenuRadioGroup auto */ \n\n\n\n\nconst DropdownMenu = _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.Root;\nconst DropdownMenuTrigger = _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.Trigger;\nconst DropdownMenuGroup = _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.Group;\nconst DropdownMenuPortal = _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.Portal;\nconst DropdownMenuSub = _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.Sub;\nconst DropdownMenuRadioGroup = _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.RadioGroup;\nconst DropdownMenuSubTrigger = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, inset, children, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.SubTrigger, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\", inset && \"pl-8\", className),\n ...props,\n children: [\n children,\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Check_ChevronRight_Circle_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"ml-auto\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 37,\n columnNumber: 5\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 27,\n columnNumber: 3\n }, undefined));\nDropdownMenuSubTrigger.displayName = _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.SubTrigger.displayName;\nconst DropdownMenuSubContent = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.SubContent, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 47,\n columnNumber: 3\n }, undefined));\nDropdownMenuSubContent.displayName = _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.SubContent.displayName;\nconst DropdownMenuContent = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, sideOffset = 4, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.Portal, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.Content, {\n ref: ref,\n sideOffset: sideOffset,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 64,\n columnNumber: 5\n }, undefined)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 63,\n columnNumber: 3\n }, undefined));\nDropdownMenuContent.displayName = _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.Content.displayName;\nconst DropdownMenuItem = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, inset, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.Item, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\", inset && \"pl-8\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 83,\n columnNumber: 3\n }, undefined));\nDropdownMenuItem.displayName = _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.Item.displayName;\nconst DropdownMenuCheckboxItem = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, children, checked, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.CheckboxItem, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\", className),\n checked: checked,\n ...props,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.ItemIndicator, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Check_ChevronRight_Circle_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 110,\n columnNumber: 9\n }, undefined)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 109,\n columnNumber: 7\n }, undefined)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 108,\n columnNumber: 5\n }, undefined),\n children\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 99,\n columnNumber: 3\n }, undefined));\nDropdownMenuCheckboxItem.displayName = _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.CheckboxItem.displayName;\nconst DropdownMenuRadioItem = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, children, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.RadioItem, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\", className),\n ...props,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.ItemIndicator, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Check_ChevronRight_Circle_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-2 w-2 fill-current\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 133,\n columnNumber: 9\n }, undefined)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 132,\n columnNumber: 7\n }, undefined)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 131,\n columnNumber: 5\n }, undefined),\n children\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 123,\n columnNumber: 3\n }, undefined));\nDropdownMenuRadioItem.displayName = _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.RadioItem.displayName;\nconst DropdownMenuLabel = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, inset, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.Label, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"px-2 py-1.5 text-sm font-semibold\", inset && \"pl-8\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 147,\n columnNumber: 3\n }, undefined));\nDropdownMenuLabel.displayName = _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.Label.displayName;\nconst DropdownMenuSeparator = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.Separator, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"-mx-1 my-1 h-px bg-muted\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 163,\n columnNumber: 3\n }, undefined));\nDropdownMenuSeparator.displayName = _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.Separator.displayName;\nconst DropdownMenuShortcut = ({ className, ...props })=>{\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"ml-auto text-xs tracking-widest opacity-60\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/dropdown-menu.tsx\",\n lineNumber: 176,\n columnNumber: 5\n }, undefined);\n};\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFLakIsV0FBVTswQkFDZCw0RUFBQ25CLHdFQUFtQzs4QkFDbEMsNEVBQUNHLHFHQUFNQTt3QkFBQ2dCLFdBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7WUFHckJFOzs7Ozs7O0FBR0xpQixzQkFBc0JiLFdBQVcsR0FBR3pCLG9FQUErQixDQUFDeUIsV0FBVztBQUUvRSxNQUFNZSxrQ0FBb0J6Qyw2Q0FBZ0IsQ0FLeEMsQ0FBQyxFQUFFb0IsU0FBUyxFQUFFQyxLQUFLLEVBQUUsR0FBR0UsT0FBTyxFQUFFQyxvQkFDakMsOERBQUN2QixnRUFBMkI7UUFDMUJ1QixLQUFLQTtRQUNMSixXQUFXZiw4Q0FBRUEsQ0FDWCxxQ0FDQWdCLFNBQVMsUUFDVEQ7UUFFRCxHQUFHRyxLQUFLOzs7Ozs7QUFHYmtCLGtCQUFrQmYsV0FBVyxHQUFHekIsZ0VBQTJCLENBQUN5QixXQUFXO0FBRXZFLE1BQU1pQixzQ0FBd0IzQyw2Q0FBZ0IsQ0FHNUMsQ0FBQyxFQUFFb0IsU0FBUyxFQUFFLEdBQUdHLE9BQU8sRUFBRUMsb0JBQzFCLDhEQUFDdkIsb0VBQStCO1FBQzlCdUIsS0FBS0E7UUFDTEosV0FBV2YsOENBQUVBLENBQUMsNEJBQTRCZTtRQUN6QyxHQUFHRyxLQUFLOzs7Ozs7QUFHYm9CLHNCQUFzQmpCLFdBQVcsR0FBR3pCLG9FQUErQixDQUFDeUIsV0FBVztBQUUvRSxNQUFNbUIsdUJBQXVCLENBQUMsRUFDNUJ6QixTQUFTLEVBQ1QsR0FBR0csT0FDbUM7SUFDdEMscUJBQ0UsOERBQUNjO1FBQ0NqQixXQUFXZiw4Q0FBRUEsQ0FBQyw4Q0FBOENlO1FBQzNELEdBQUdHLEtBQUs7Ozs7OztBQUdmO0FBQ0FzQixxQkFBcUJuQixXQUFXLEdBQUc7QUFrQmpDIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2NvbXBvbmVudHMvdWkvZHJvcGRvd24tbWVudS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0ICogYXMgRHJvcGRvd25NZW51UHJpbWl0aXZlIGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtZHJvcGRvd24tbWVudVwiO1xuaW1wb3J0IHsgQ2hlY2ssIENoZXZyb25SaWdodCwgQ2lyY2xlIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiO1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gXCJAL2xpYi91dGlsc1wiO1xuXG5jb25zdCBEcm9wZG93bk1lbnUgPSBEcm9wZG93bk1lbnVQcmltaXRpdmUuUm9vdDtcblxuY29uc3QgRHJvcGRvd25NZW51VHJpZ2dlciA9IERyb3Bkb3duTWVudVByaW1pdGl2ZS5UcmlnZ2VyO1xuXG5jb25zdCBEcm9wZG93bk1lbnVHcm91cCA9IERyb3Bkb3duTWVudVByaW1pdGl2ZS5Hcm91cDtcblxuY29uc3QgRHJvcGRvd25NZW51UG9ydGFsID0gRHJvcGRvd25NZW51UHJpbWl0aXZlLlBvcnRhbDtcblxuY29uc3QgRHJvcGRvd25NZW51U3ViID0gRHJvcGRvd25NZW51UHJpbWl0aXZlLlN1YjtcblxuY29uc3QgRHJvcGRvd25NZW51UmFkaW9Hcm91cCA9IERyb3Bkb3duTWVudVByaW1pdGl2ZS5SYWRpb0dyb3VwO1xuXG5jb25zdCBEcm9wZG93bk1lbnVTdWJUcmlnZ2VyID0gUmVhY3QuZm9yd2FyZFJlZjxcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgRHJvcGRvd25NZW51UHJpbWl0aXZlLlN1YlRyaWdnZXI+LFxuICBSZWFjdC5Db21wb25lbnRQcm9wc1dpdGhvdXRSZWY8dHlwZW9mIERyb3Bkb3duTWVudVByaW1pdGl2ZS5TdWJUcmlnZ2VyPiAmIHtcbiAgICBpbnNldD86IGJvb2xlYW47XG4gIH1cbj4oKHsgY2xhc3NOYW1lLCBpbnNldCwgY2hpbGRyZW4sIC4uLnByb3BzIH0sIHJlZikgPT4gKFxuICA8RHJvcGRvd25NZW51UHJpbWl0aXZlLlN1YlRyaWdnZXJcbiAgICByZWY9e3JlZn1cbiAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgXCJmbGV4IGN1cnNvci1kZWZhdWx0IGdhcC0yIHNlbGVjdC1ub25lIGl0ZW1zLWNlbnRlciByb3VuZGVkLXNtIHB4LTIgcHktMS41IHRleHQtc20gb3V0bGluZS1ub25lIGZvY3VzOmJnLWFjY2VudCBkYXRhLVtzdGF0ZT1vcGVuXTpiZy1hY2NlbnQgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2l6ZS00IFsmX3N2Z106c2hyaW5rLTBcIixcbiAgICAgIGluc2V0ICYmIFwicGwtOFwiLFxuICAgICAgY2xhc3NOYW1lXG4gICAgKX1cbiAgICB7Li4ucHJvcHN9XG4gID5cbiAgICB7Y2hpbGRyZW59XG4gICAgPENoZXZyb25SaWdodCBjbGFzc05hbWU9J21sLWF1dG8nIC8+XG4gIDwvRHJvcGRvd25NZW51UHJpbWl0aXZlLlN1YlRyaWdnZXI+XG4pKTtcbkRyb3Bkb3duTWVudVN1YlRyaWdnZXIuZGlzcGxheU5hbWUgPVxuICBEcm9wZG93bk1lbnVQcmltaXRpdmUuU3ViVHJpZ2dlci5kaXNwbGF5TmFtZTtcblxuY29uc3QgRHJvcGRvd25NZW51U3ViQ29udGVudCA9IFJlYWN0LmZvcndhcmRSZWY8XG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIERyb3Bkb3duTWVudVByaW1pdGl2ZS5TdWJDb250ZW50PixcbiAgUmVhY3QuQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPHR5cGVvZiBEcm9wZG93bk1lbnVQcmltaXRpdmUuU3ViQ29udGVudD5cbj4oKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9LCByZWYpID0+IChcbiAgPERyb3Bkb3duTWVudVByaW1pdGl2ZS5TdWJDb250ZW50XG4gICAgcmVmPXtyZWZ9XG4gICAgY2xhc3NOYW1lPXtjbihcbiAgICAgIFwiei01MCBtaW4tdy1bOHJlbV0gb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXBvcG92ZXIgcC0xIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIHNoYWRvdy1sZyBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTJcIixcbiAgICAgIGNsYXNzTmFtZVxuICAgICl9XG4gICAgey4uLnByb3BzfVxuICAvPlxuKSk7XG5Ecm9wZG93bk1lbnVTdWJDb250ZW50LmRpc3BsYXlOYW1lID1cbiAgRHJvcGRvd25NZW51UHJpbWl0aXZlLlN1YkNvbnRlbnQuZGlzcGxheU5hbWU7XG5cbmNvbnN0IERyb3Bkb3duTWVudUNvbnRlbnQgPSBSZWFjdC5mb3J3YXJkUmVmPFxuICBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBEcm9wZG93bk1lbnVQcmltaXRpdmUuQ29udGVudD4sXG4gIFJlYWN0LkNvbXBvbmVudFByb3BzV2l0aG91dFJlZjx0eXBlb2YgRHJvcGRvd25NZW51UHJpbWl0aXZlLkNvbnRlbnQ+XG4+KCh7IGNsYXNzTmFtZSwgc2lkZU9mZnNldCA9IDQsIC4uLnByb3BzIH0sIHJlZikgPT4gKFxuICA8RHJvcGRvd25NZW51UHJpbWl0aXZlLlBvcnRhbD5cbiAgICA8RHJvcGRvd25NZW51UHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgIHJlZj17cmVmfVxuICAgICAgc2lkZU9mZnNldD17c2lkZU9mZnNldH1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIFwiei01MCBtaW4tdy1bOHJlbV0gb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXBvcG92ZXIgcC0xIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIHNoYWRvdy1tZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTJcIixcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIDwvRHJvcGRvd25NZW51UHJpbWl0aXZlLlBvcnRhbD5cbikpO1xuRHJvcGRvd25NZW51Q29udGVudC5kaXNwbGF5TmFtZSA9IERyb3Bkb3duTWVudVByaW1pdGl2ZS5Db250ZW50LmRpc3BsYXlOYW1lO1xuXG5jb25zdCBEcm9wZG93bk1lbnVJdGVtID0gUmVhY3QuZm9yd2FyZFJlZjxcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgRHJvcGRvd25NZW51UHJpbWl0aXZlLkl0ZW0+LFxuICBSZWFjdC5Db21wb25lbnRQcm9wc1dpdGhvdXRSZWY8dHlwZW9mIERyb3Bkb3duTWVudVByaW1pdGl2ZS5JdGVtPiAmIHtcbiAgICBpbnNldD86IGJvb2xlYW47XG4gIH1cbj4oKHsgY2xhc3NOYW1lLCBpbnNldCwgLi4ucHJvcHMgfSwgcmVmKSA9PiAoXG4gIDxEcm9wZG93bk1lbnVQcmltaXRpdmUuSXRlbVxuICAgIHJlZj17cmVmfVxuICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICBcInJlbGF0aXZlIGZsZXggY3Vyc29yLWRlZmF1bHQgc2VsZWN0LW5vbmUgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtc20gcHgtMiBweS0xLjUgdGV4dC1zbSBvdXRsaW5lLW5vbmUgdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXM6YmctYWNjZW50IGZvY3VzOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGF0YS1bZGlzYWJsZWRdOnBvaW50ZXItZXZlbnRzLW5vbmUgZGF0YS1bZGlzYWJsZWRdOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2l6ZS00IFsmX3N2Z106c2hyaW5rLTBcIixcbiAgICAgIGluc2V0ICYmIFwicGwtOFwiLFxuICAgICAgY2xhc3NOYW1lXG4gICAgKX1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pKTtcbkRyb3Bkb3duTWVudUl0ZW0uZGlzcGxheU5hbWUgPSBEcm9wZG93bk1lbnVQcmltaXRpdmUuSXRlbS5kaXNwbGF5TmFtZTtcblxuY29uc3QgRHJvcGRvd25NZW51Q2hlY2tib3hJdGVtID0gUmVhY3QuZm9yd2FyZFJlZjxcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgRHJvcGRvd25NZW51UHJpbWl0aXZlLkNoZWNrYm94SXRlbT4sXG4gIFJlYWN0LkNvbXBvbmVudFByb3BzV2l0aG91dFJlZjx0eXBlb2YgRHJvcGRvd25NZW51UHJpbWl0aXZlLkNoZWNrYm94SXRlbT5cbj4oKHsgY2xhc3NOYW1lLCBjaGlsZHJlbiwgY2hlY2tlZCwgLi4ucHJvcHMgfSwgcmVmKSA9PiAoXG4gIDxEcm9wZG93bk1lbnVQcmltaXRpdmUuQ2hlY2tib3hJdGVtXG4gICAgcmVmPXtyZWZ9XG4gICAgY2xhc3NOYW1lPXtjbihcbiAgICAgIFwicmVsYXRpdmUgZmxleCBjdXJzb3ItZGVmYXVsdCBzZWxlY3Qtbm9uZSBpdGVtcy1jZW50ZXIgcm91bmRlZC1zbSBweS0xLjUgcGwtOCBwci0yIHRleHQtc20gb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzOmJnLWFjY2VudCBmb2N1czp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhdGEtW2Rpc2FibGVkXTpwb2ludGVyLWV2ZW50cy1ub25lIGRhdGEtW2Rpc2FibGVkXTpvcGFjaXR5LTUwXCIsXG4gICAgICBjbGFzc05hbWVcbiAgICApfVxuICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgey4uLnByb3BzfVxuICA+XG4gICAgPHNwYW4gY2xhc3NOYW1lPSdhYnNvbHV0ZSBsZWZ0LTIgZmxleCBoLTMuNSB3LTMuNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXInPlxuICAgICAgPERyb3Bkb3duTWVudVByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuICAgICAgICA8Q2hlY2sgY2xhc3NOYW1lPSdoLTQgdy00JyAvPlxuICAgICAgPC9Ecm9wZG93bk1lbnVQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cbiAgICA8L3NwYW4+XG4gICAge2NoaWxkcmVufVxuICA8L0Ryb3Bkb3duTWVudVByaW1pdGl2ZS5DaGVja2JveEl0ZW0+XG4pKTtcbkRyb3Bkb3duTWVudUNoZWNrYm94SXRlbS5kaXNwbGF5TmFtZSA9XG4gIERyb3Bkb3duTWVudVByaW1pdGl2ZS5DaGVja2JveEl0ZW0uZGlzcGxheU5hbWU7XG5cbmNvbnN0IERyb3Bkb3duTWVudVJhZGlvSXRlbSA9IFJlYWN0LmZvcndhcmRSZWY8XG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIERyb3Bkb3duTWVudVByaW1pdGl2ZS5SYWRpb0l0ZW0+LFxuICBSZWFjdC5Db21wb25lbnRQcm9wc1dpdGhvdXRSZWY8dHlwZW9mIERyb3Bkb3duTWVudVByaW1pdGl2ZS5SYWRpb0l0ZW0+XG4+KCh7IGNsYXNzTmFtZSwgY2hpbGRyZW4sIC4uLnByb3BzIH0sIHJlZikgPT4gKFxuICA8RHJvcGRvd25NZW51UHJpbWl0aXZlLlJhZGlvSXRlbVxuICAgIHJlZj17cmVmfVxuICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICBcInJlbGF0aXZlIGZsZXggY3Vyc29yLWRlZmF1bHQgc2VsZWN0LW5vbmUgaXRlbXMtY2VudGVyIHJvdW5kZWQtc20gcHktMS41IHBsLTggcHItMiB0ZXh0LXNtIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1czpiZy1hY2NlbnQgZm9jdXM6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXRhLVtkaXNhYmxlZF06cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLVtkaXNhYmxlZF06b3BhY2l0eS01MFwiLFxuICAgICAgY2xhc3NOYW1lXG4gICAgKX1cbiAgICB7Li4ucHJvcHN9XG4gID5cbiAgICA8c3BhbiBjbGFzc05hbWU9J2Fic29sdXRlIGxlZnQtMiBmbGV4IGgtMy41IHctMy41IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlcic+XG4gICAgICA8RHJvcGRvd25NZW51UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG4gICAgICAgIDxDaXJjbGUgY2xhc3NOYW1lPSdoLTIgdy0yIGZpbGwtY3VycmVudCcgLz5cbiAgICAgIDwvRHJvcGRvd25NZW51UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG4gICAgPC9zcGFuPlxuICAgIHtjaGlsZHJlbn1cbiAgPC9Ecm9wZG93bk1lbnVQcmltaXRpdmUuUmFkaW9JdGVtPlxuKSk7XG5Ecm9wZG93bk1lbnVSYWRpb0l0ZW0uZGlzcGxheU5hbWUgPSBEcm9wZG93bk1lbnVQcmltaXRpdmUuUmFkaW9JdGVtLmRpc3BsYXlOYW1lO1xuXG5jb25zdCBEcm9wZG93bk1lbnVMYWJlbCA9IFJlYWN0LmZvcndhcmRSZWY8XG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIERyb3Bkb3duTWVudVByaW1pdGl2ZS5MYWJlbD4sXG4gIFJlYWN0LkNvbXBvbmVudFByb3BzV2l0aG91dFJlZjx0eXBlb2YgRHJvcGRvd25NZW51UHJpbWl0aXZlLkxhYmVsPiAmIHtcbiAgICBpbnNldD86IGJvb2xlYW47XG4gIH1cbj4oKHsgY2xhc3NOYW1lLCBpbnNldCwgLi4ucHJvcHMgfSwgcmVmKSA9PiAoXG4gIDxEcm9wZG93bk1lbnVQcmltaXRpdmUuTGFiZWxcbiAgICByZWY9e3JlZn1cbiAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgXCJweC0yIHB5LTEuNSB0ZXh0LXNtIGZvbnQtc2VtaWJvbGRcIixcbiAgICAgIGluc2V0ICYmIFwicGwtOFwiLFxuICAgICAgY2xhc3NOYW1lXG4gICAgKX1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pKTtcbkRyb3Bkb3duTWVudUxhYmVsLmRpc3BsYXlOYW1lID0gRHJvcGRvd25NZW51UHJpbWl0aXZlLkxhYmVsLmRpc3BsYXlOYW1lO1xuXG5jb25zdCBEcm9wZG93bk1lbnVTZXBhcmF0b3IgPSBSZWFjdC5mb3J3YXJkUmVmPFxuICBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBEcm9wZG93bk1lbnVQcmltaXRpdmUuU2VwYXJhdG9yPixcbiAgUmVhY3QuQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPHR5cGVvZiBEcm9wZG93bk1lbnVQcmltaXRpdmUuU2VwYXJhdG9yPlxuPigoeyBjbGFzc05hbWUsIC4uLnByb3BzIH0sIHJlZikgPT4gKFxuICA8RHJvcGRvd25NZW51UHJpbWl0aXZlLlNlcGFyYXRvclxuICAgIHJlZj17cmVmfVxuICAgIGNsYXNzTmFtZT17Y24oXCItbXgtMSBteS0xIGgtcHggYmctbXV0ZWRcIiwgY2xhc3NOYW1lKX1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pKTtcbkRyb3Bkb3duTWVudVNlcGFyYXRvci5kaXNwbGF5TmFtZSA9IERyb3Bkb3duTWVudVByaW1pdGl2ZS5TZXBhcmF0b3IuZGlzcGxheU5hbWU7XG5cbmNvbnN0IERyb3Bkb3duTWVudVNob3J0Y3V0ID0gKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFNwYW5FbGVtZW50PikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzc05hbWU9e2NuKFwibWwtYXV0byB0ZXh0LXhzIHRyYWNraW5nLXdpZGVzdCBvcGFjaXR5LTYwXCIsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKTtcbn07XG5Ecm9wZG93bk1lbnVTaG9ydGN1dC5kaXNwbGF5TmFtZSA9IFwiRHJvcGRvd25NZW51U2hvcnRjdXRcIjtcblxuZXhwb3J0IHtcbiAgRHJvcGRvd25NZW51LFxuICBEcm9wZG93bk1lbnVUcmlnZ2VyLFxuICBEcm9wZG93bk1lbnVDb250ZW50LFxuICBEcm9wZG93bk1lbnVJdGVtLFxuICBEcm9wZG93bk1lbnVDaGVja2JveEl0ZW0sXG4gIERyb3Bkb3duTWVudVJhZGlvSXRlbSxcbiAgRHJvcGRvd25NZW51TGFiZWwsXG4gIERyb3Bkb3duTWVudVNlcGFyYXRvcixcbiAgRHJvcGRvd25NZW51U2hvcnRjdXQsXG4gIERyb3Bkb3duTWVudUdyb3VwLFxuICBEcm9wZG93bk1lbnVQb3J0YWwsXG4gIERyb3Bkb3duTWVudVN1YixcbiAgRHJvcGRvd25NZW51U3ViQ29udGVudCxcbiAgRHJvcGRvd25NZW51U3ViVHJpZ2dlcixcbiAgRHJvcGRvd25NZW51UmFkaW9Hcm91cCxcbn07XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJEcm9wZG93bk1lbnVQcmltaXRpdmUiLCJDaGVjayIsIkNoZXZyb25SaWdodCIsIkNpcmNsZSIsImNuIiwiRHJvcGRvd25NZW51IiwiUm9vdCIsIkRyb3Bkb3duTWVudVRyaWdnZXIiLCJUcmlnZ2VyIiwiRHJvcGRvd25NZW51R3JvdXAiLCJHcm91cCIsIkRyb3Bkb3duTWVudVBvcnRhbCIsIlBvcnRhbCIsIkRyb3Bkb3duTWVudVN1YiIsIlN1YiIsIkRyb3Bkb3duTWVudVJhZGlvR3JvdXAiLCJSYWRpb0dyb3VwIiwiRHJvcGRvd25NZW51U3ViVHJpZ2dlciIsImZvcndhcmRSZWYiLCJjbGFzc05hbWUiLCJpbnNldCIsImNoaWxkcmVuIiwicHJvcHMiLCJyZWYiLCJTdWJUcmlnZ2VyIiwiZGlzcGxheU5hbWUiLCJEcm9wZG93bk1lbnVTdWJDb250ZW50IiwiU3ViQ29udGVudCIsIkRyb3Bkb3duTWVudUNvbnRlbnQiLCJzaWRlT2Zmc2V0IiwiQ29udGVudCIsIkRyb3Bkb3duTWVudUl0ZW0iLCJJdGVtIiwiRHJvcGRvd25NZW51Q2hlY2tib3hJdGVtIiwiY2hlY2tlZCIsIkNoZWNrYm94SXRlbSIsInNwYW4iLCJJdGVtSW5kaWNhdG9yIiwiRHJvcGRvd25NZW51UmFkaW9JdGVtIiwiUmFkaW9JdGVtIiwiRHJvcGRvd25NZW51TGFiZWwiLCJMYWJlbCIsIkRyb3Bkb3duTWVudVNlcGFyYXRvciIsIlNlcGFyYXRvciIsIkRyb3Bkb3duTWVudVNob3J0Y3V0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./components/ui/dropdown-menu.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/ui/input.tsx":
|
|
/*!*********************************!*\
|
|
!*** ./components/ui/input.tsx ***!
|
|
\*********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Input: () => (/* binding */ Input)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(ssr)/./lib/utils.ts\");\n\n\n\nconst Input = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, type, ...props }, ref)=>{\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: type,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\", className),\n ref: ref,\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/input.tsx\",\n lineNumber: 8,\n columnNumber: 7\n }, undefined);\n});\nInput.displayName = \"Input\";\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL3VpL2lucHV0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQThCO0FBRUU7QUFFaEMsTUFBTUUsc0JBQVFGLDZDQUFnQixDQUM1QixDQUFDLEVBQUVJLFNBQVMsRUFBRUMsSUFBSSxFQUFFLEdBQUdDLE9BQU8sRUFBRUM7SUFDOUIscUJBQ0UsOERBQUNDO1FBQ0NILE1BQU1BO1FBQ05ELFdBQVdILDhDQUFFQSxDQUNYLGtZQUNBRztRQUVGRyxLQUFLQTtRQUNKLEdBQUdELEtBQUs7Ozs7OztBQUdmO0FBRUZKLE1BQU1PLFdBQVcsR0FBRztBQUVKIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiXG5cbmltcG9ydCB7IGNuIH0gZnJvbSBcIkAvbGliL3V0aWxzXCJcblxuY29uc3QgSW5wdXQgPSBSZWFjdC5mb3J3YXJkUmVmPEhUTUxJbnB1dEVsZW1lbnQsIFJlYWN0LkNvbXBvbmVudFByb3BzPFwiaW5wdXRcIj4+KFxuICAoeyBjbGFzc05hbWUsIHR5cGUsIC4uLnByb3BzIH0sIHJlZikgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT17dHlwZX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICBcImZsZXggaC0xMCB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgcHgtMyBweS0yIHRleHQtYmFzZSByaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZpbGU6Ym9yZGVyLTAgZmlsZTpiZy10cmFuc3BhcmVudCBmaWxlOnRleHQtc20gZmlsZTpmb250LW1lZGl1bSBmaWxlOnRleHQtZm9yZWdyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIG1kOnRleHQtc21cIixcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgIC8+XG4gICAgKVxuICB9XG4pXG5JbnB1dC5kaXNwbGF5TmFtZSA9IFwiSW5wdXRcIlxuXG5leHBvcnQgeyBJbnB1dCB9XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJjbiIsIklucHV0IiwiZm9yd2FyZFJlZiIsImNsYXNzTmFtZSIsInR5cGUiLCJwcm9wcyIsInJlZiIsImlucHV0IiwiZGlzcGxheU5hbWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/ui/input.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/ui/label.tsx":
|
|
/*!*********************************!*\
|
|
!*** ./components/ui/label.tsx ***!
|
|
\*********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Label: () => (/* binding */ Label)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _radix_ui_react_label__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @radix-ui/react-label */ \"(ssr)/./node_modules/@radix-ui/react-label/dist/index.mjs\");\n/* harmony import */ var class_variance_authority__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! class-variance-authority */ \"(ssr)/./node_modules/class-variance-authority/dist/index.mjs\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/utils */ \"(ssr)/./lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ Label auto */ \n\n\n\n\nconst labelVariants = (0,class_variance_authority__WEBPACK_IMPORTED_MODULE_2__.cva)(\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\");\nconst Label = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_label__WEBPACK_IMPORTED_MODULE_4__.Root, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)(labelVariants(), className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/label.tsx\",\n lineNumber: 18,\n columnNumber: 3\n }, undefined));\nLabel.displayName = _radix_ui_react_label__WEBPACK_IMPORTED_MODULE_4__.Root.displayName;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFFOEI7QUFDeUI7QUFDVTtBQUVqQztBQUVoQyxNQUFNSSxnQkFBZ0JGLDZEQUFHQSxDQUN2QjtBQUdGLE1BQU1HLHNCQUFRTCw2Q0FBZ0IsQ0FJNUIsQ0FBQyxFQUFFTyxTQUFTLEVBQUUsR0FBR0MsT0FBTyxFQUFFQyxvQkFDMUIsOERBQUNSLHVEQUFtQjtRQUNsQlEsS0FBS0E7UUFDTEYsV0FBV0osOENBQUVBLENBQUNDLGlCQUFpQkc7UUFDOUIsR0FBR0MsS0FBSzs7Ozs7O0FBR2JILE1BQU1NLFdBQVcsR0FBR1YsdURBQW1CLENBQUNVLFdBQVc7QUFFbkMiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvY29tcG9uZW50cy91aS9sYWJlbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCJcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCAqIGFzIExhYmVsUHJpbWl0aXZlIGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtbGFiZWxcIlxuaW1wb3J0IHsgY3ZhLCB0eXBlIFZhcmlhbnRQcm9wcyB9IGZyb20gXCJjbGFzcy12YXJpYW5jZS1hdXRob3JpdHlcIlxuXG5pbXBvcnQgeyBjbiB9IGZyb20gXCJAL2xpYi91dGlsc1wiXG5cbmNvbnN0IGxhYmVsVmFyaWFudHMgPSBjdmEoXG4gIFwidGV4dC1zbSBmb250LW1lZGl1bSBsZWFkaW5nLW5vbmUgcGVlci1kaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgcGVlci1kaXNhYmxlZDpvcGFjaXR5LTcwXCJcbilcblxuY29uc3QgTGFiZWwgPSBSZWFjdC5mb3J3YXJkUmVmPFxuICBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBMYWJlbFByaW1pdGl2ZS5Sb290PixcbiAgUmVhY3QuQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPHR5cGVvZiBMYWJlbFByaW1pdGl2ZS5Sb290PiAmXG4gICAgVmFyaWFudFByb3BzPHR5cGVvZiBsYWJlbFZhcmlhbnRzPlxuPigoeyBjbGFzc05hbWUsIC4uLnByb3BzIH0sIHJlZikgPT4gKFxuICA8TGFiZWxQcmltaXRpdmUuUm9vdFxuICAgIHJlZj17cmVmfVxuICAgIGNsYXNzTmFtZT17Y24obGFiZWxWYXJpYW50cygpLCBjbGFzc05hbWUpfVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbikpXG5MYWJlbC5kaXNwbGF5TmFtZSA9IExhYmVsUHJpbWl0aXZlLlJvb3QuZGlzcGxheU5hbWVcblxuZXhwb3J0IHsgTGFiZWwgfVxuIl0sIm5hbWVzIjpbIlJlYWN0IiwiTGFiZWxQcmltaXRpdmUiLCJjdmEiLCJjbiIsImxhYmVsVmFyaWFudHMiLCJMYWJlbCIsImZvcndhcmRSZWYiLCJjbGFzc05hbWUiLCJwcm9wcyIsInJlZiIsIlJvb3QiLCJkaXNwbGF5TmFtZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/ui/label.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/ui/scroll-area.tsx":
|
|
/*!***************************************!*\
|
|
!*** ./components/ui/scroll-area.tsx ***!
|
|
\***************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ScrollArea: () => (/* binding */ ScrollArea),\n/* harmony export */ ScrollBar: () => (/* binding */ ScrollBar)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _radix_ui_react_scroll_area__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-scroll-area */ \"(ssr)/./node_modules/@radix-ui/react-scroll-area/dist/index.mjs\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(ssr)/./lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ ScrollArea,ScrollBar auto */ \n\n\n\nconst ScrollArea = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, children, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_scroll_area__WEBPACK_IMPORTED_MODULE_3__.Root, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"relative overflow-hidden\", className),\n ...props,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_scroll_area__WEBPACK_IMPORTED_MODULE_3__.Viewport, {\n className: \"h-full w-full rounded-[inherit]\",\n children: children\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/scroll-area.tsx\",\n lineNumber: 17,\n columnNumber: 5\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(ScrollBar, {}, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/scroll-area.tsx\",\n lineNumber: 20,\n columnNumber: 5\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_scroll_area__WEBPACK_IMPORTED_MODULE_3__.Corner, {}, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/scroll-area.tsx\",\n lineNumber: 21,\n columnNumber: 5\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/scroll-area.tsx\",\n lineNumber: 12,\n columnNumber: 3\n }, undefined));\nScrollArea.displayName = _radix_ui_react_scroll_area__WEBPACK_IMPORTED_MODULE_3__.Root.displayName;\nconst ScrollBar = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, orientation = \"vertical\", ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_scroll_area__WEBPACK_IMPORTED_MODULE_3__.ScrollAreaScrollbar, {\n ref: ref,\n orientation: orientation,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"flex touch-none select-none transition-colors\", orientation === \"vertical\" && \"h-full w-2.5 border-l border-l-transparent p-[1px]\", orientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent p-[1px]\", className),\n ...props,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_scroll_area__WEBPACK_IMPORTED_MODULE_3__.ScrollAreaThumb, {\n className: \"relative flex-1 rounded-full bg-border\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/scroll-area.tsx\",\n lineNumber: 43,\n columnNumber: 5\n }, undefined)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/scroll-area.tsx\",\n lineNumber: 30,\n columnNumber: 3\n }, undefined));\nScrollBar.displayName = _radix_ui_react_scroll_area__WEBPACK_IMPORTED_MODULE_3__.ScrollAreaScrollbar.displayName;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFFOEI7QUFDb0M7QUFFbEM7QUFFaEMsTUFBTUcsMkJBQWFILDZDQUFnQixDQUdqQyxDQUFDLEVBQUVLLFNBQVMsRUFBRUMsUUFBUSxFQUFFLEdBQUdDLE9BQU8sRUFBRUMsb0JBQ3BDLDhEQUFDUCw2REFBd0I7UUFDdkJPLEtBQUtBO1FBQ0xILFdBQVdILDhDQUFFQSxDQUFDLDRCQUE0Qkc7UUFDekMsR0FBR0UsS0FBSzs7MEJBRVQsOERBQUNOLGlFQUE0QjtnQkFBQ0ksV0FBVTswQkFDckNDOzs7Ozs7MEJBRUgsOERBQUNLOzs7OzswQkFDRCw4REFBQ1YsK0RBQTBCOzs7Ozs7Ozs7OztBQUcvQkUsV0FBV1UsV0FBVyxHQUFHWiw2REFBd0IsQ0FBQ1ksV0FBVztBQUU3RCxNQUFNRiwwQkFBWVgsNkNBQWdCLENBR2hDLENBQUMsRUFBRUssU0FBUyxFQUFFUyxjQUFjLFVBQVUsRUFBRSxHQUFHUCxPQUFPLEVBQUVDLG9CQUNwRCw4REFBQ1AsNEVBQXVDO1FBQ3RDTyxLQUFLQTtRQUNMTSxhQUFhQTtRQUNiVCxXQUFXSCw4Q0FBRUEsQ0FDWCxpREFDQVksZ0JBQWdCLGNBQ2Qsc0RBQ0ZBLGdCQUFnQixnQkFDZCx3REFDRlQ7UUFFRCxHQUFHRSxLQUFLO2tCQUVULDRFQUFDTix3RUFBbUM7WUFBQ0ksV0FBVTs7Ozs7Ozs7Ozs7QUFHbkRNLFVBQVVFLFdBQVcsR0FBR1osNEVBQXVDLENBQUNZLFdBQVc7QUFFM0MiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCJcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCAqIGFzIFNjcm9sbEFyZWFQcmltaXRpdmUgZnJvbSBcIkByYWRpeC11aS9yZWFjdC1zY3JvbGwtYXJlYVwiXG5cbmltcG9ydCB7IGNuIH0gZnJvbSBcIkAvbGliL3V0aWxzXCJcblxuY29uc3QgU2Nyb2xsQXJlYSA9IFJlYWN0LmZvcndhcmRSZWY8XG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuUm9vdD4sXG4gIFJlYWN0LkNvbXBvbmVudFByb3BzV2l0aG91dFJlZjx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PlxuPigoeyBjbGFzc05hbWUsIGNoaWxkcmVuLCAuLi5wcm9wcyB9LCByZWYpID0+IChcbiAgPFNjcm9sbEFyZWFQcmltaXRpdmUuUm9vdFxuICAgIHJlZj17cmVmfVxuICAgIGNsYXNzTmFtZT17Y24oXCJyZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW5cIiwgY2xhc3NOYW1lKX1cbiAgICB7Li4ucHJvcHN9XG4gID5cbiAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydCBjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIHJvdW5kZWQtW2luaGVyaXRdXCI+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9TY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0PlxuICAgIDxTY3JvbGxCYXIgLz5cbiAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5Db3JuZXIgLz5cbiAgPC9TY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Q+XG4pKVxuU2Nyb2xsQXJlYS5kaXNwbGF5TmFtZSA9IFNjcm9sbEFyZWFQcmltaXRpdmUuUm9vdC5kaXNwbGF5TmFtZVxuXG5jb25zdCBTY3JvbGxCYXIgPSBSZWFjdC5mb3J3YXJkUmVmPFxuICBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXI+LFxuICBSZWFjdC5Db21wb25lbnRQcm9wc1dpdGhvdXRSZWY8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj5cbj4oKHsgY2xhc3NOYW1lLCBvcmllbnRhdGlvbiA9IFwidmVydGljYWxcIiwgLi4ucHJvcHMgfSwgcmVmKSA9PiAoXG4gIDxTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXJcbiAgICByZWY9e3JlZn1cbiAgICBvcmllbnRhdGlvbj17b3JpZW50YXRpb259XG4gICAgY2xhc3NOYW1lPXtjbihcbiAgICAgIFwiZmxleCB0b3VjaC1ub25lIHNlbGVjdC1ub25lIHRyYW5zaXRpb24tY29sb3JzXCIsXG4gICAgICBvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiICYmXG4gICAgICAgIFwiaC1mdWxsIHctMi41IGJvcmRlci1sIGJvcmRlci1sLXRyYW5zcGFyZW50IHAtWzFweF1cIixcbiAgICAgIG9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIiAmJlxuICAgICAgICBcImgtMi41IGZsZXgtY29sIGJvcmRlci10IGJvcmRlci10LXRyYW5zcGFyZW50IHAtWzFweF1cIixcbiAgICAgIGNsYXNzTmFtZVxuICAgICl9XG4gICAgey4uLnByb3BzfVxuICA+XG4gICAgPFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVRodW1iIGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXgtMSByb3VuZGVkLWZ1bGwgYmctYm9yZGVyXCIgLz5cbiAgPC9TY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXI+XG4pKVxuU2Nyb2xsQmFyLmRpc3BsYXlOYW1lID0gU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyLmRpc3BsYXlOYW1lXG5cbmV4cG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJTY3JvbGxBcmVhUHJpbWl0aXZlIiwiY24iLCJTY3JvbGxBcmVhIiwiZm9yd2FyZFJlZiIsImNsYXNzTmFtZSIsImNoaWxkcmVuIiwicHJvcHMiLCJyZWYiLCJSb290IiwiVmlld3BvcnQiLCJTY3JvbGxCYXIiLCJDb3JuZXIiLCJkaXNwbGF5TmFtZSIsIm9yaWVudGF0aW9uIiwiU2Nyb2xsQXJlYVNjcm9sbGJhciIsIlNjcm9sbEFyZWFUaHVtYiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/ui/scroll-area.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/ui/tabs.tsx":
|
|
/*!********************************!*\
|
|
!*** ./components/ui/tabs.tsx ***!
|
|
\********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tabs: () => (/* binding */ Tabs),\n/* harmony export */ TabsContent: () => (/* binding */ TabsContent),\n/* harmony export */ TabsList: () => (/* binding */ TabsList),\n/* harmony export */ TabsTrigger: () => (/* binding */ TabsTrigger)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _radix_ui_react_tabs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-tabs */ \"(ssr)/./node_modules/@radix-ui/react-tabs/dist/index.mjs\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(ssr)/./lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ Tabs,TabsList,TabsTrigger,TabsContent auto */ \n\n\n\nconst Tabs = _radix_ui_react_tabs__WEBPACK_IMPORTED_MODULE_3__.Root;\nconst TabsList = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_tabs__WEBPACK_IMPORTED_MODULE_3__.List, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/tabs.tsx\",\n lineNumber: 14,\n columnNumber: 3\n }, undefined));\nTabsList.displayName = _radix_ui_react_tabs__WEBPACK_IMPORTED_MODULE_3__.List.displayName;\nconst TabsTrigger = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_tabs__WEBPACK_IMPORTED_MODULE_3__.Trigger, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/tabs.tsx\",\n lineNumber: 29,\n columnNumber: 3\n }, undefined));\nTabsTrigger.displayName = _radix_ui_react_tabs__WEBPACK_IMPORTED_MODULE_3__.Trigger.displayName;\nconst TabsContent = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_tabs__WEBPACK_IMPORTED_MODULE_3__.Content, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/tabs.tsx\",\n lineNumber: 44,\n columnNumber: 3\n }, undefined));\nTabsContent.displayName = _radix_ui_react_tabs__WEBPACK_IMPORTED_MODULE_3__.Content.displayName;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL3VpL3RhYnMudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRThCO0FBQ3VCO0FBRXJCO0FBRWhDLE1BQU1HLE9BQU9GLHNEQUFrQjtBQUUvQixNQUFNSSx5QkFBV0wsNkNBQWdCLENBRy9CLENBQUMsRUFBRU8sU0FBUyxFQUFFLEdBQUdDLE9BQU8sRUFBRUMsb0JBQzFCLDhEQUFDUixzREFBa0I7UUFDakJRLEtBQUtBO1FBQ0xGLFdBQVdMLDhDQUFFQSxDQUNYLDhGQUNBSztRQUVELEdBQUdDLEtBQUs7Ozs7OztBQUdiSCxTQUFTTSxXQUFXLEdBQUdWLHNEQUFrQixDQUFDVSxXQUFXO0FBRXJELE1BQU1DLDRCQUFjWiw2Q0FBZ0IsQ0FHbEMsQ0FBQyxFQUFFTyxTQUFTLEVBQUUsR0FBR0MsT0FBTyxFQUFFQyxvQkFDMUIsOERBQUNSLHlEQUFxQjtRQUNwQlEsS0FBS0E7UUFDTEYsV0FBV0wsOENBQUVBLENBQ1gsdVlBQ0FLO1FBRUQsR0FBR0MsS0FBSzs7Ozs7O0FBR2JJLFlBQVlELFdBQVcsR0FBR1YseURBQXFCLENBQUNVLFdBQVc7QUFFM0QsTUFBTUcsNEJBQWNkLDZDQUFnQixDQUdsQyxDQUFDLEVBQUVPLFNBQVMsRUFBRSxHQUFHQyxPQUFPLEVBQUVDLG9CQUMxQiw4REFBQ1IseURBQXFCO1FBQ3BCUSxLQUFLQTtRQUNMRixXQUFXTCw4Q0FBRUEsQ0FDWCxtSUFDQUs7UUFFRCxHQUFHQyxLQUFLOzs7Ozs7QUFHYk0sWUFBWUgsV0FBVyxHQUFHVix5REFBcUIsQ0FBQ1UsV0FBVztBQUVSIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2NvbXBvbmVudHMvdWkvdGFicy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCJcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCAqIGFzIFRhYnNQcmltaXRpdmUgZnJvbSBcIkByYWRpeC11aS9yZWFjdC10YWJzXCJcblxuaW1wb3J0IHsgY24gfSBmcm9tIFwiQC9saWIvdXRpbHNcIlxuXG5jb25zdCBUYWJzID0gVGFic1ByaW1pdGl2ZS5Sb290XG5cbmNvbnN0IFRhYnNMaXN0ID0gUmVhY3QuZm9yd2FyZFJlZjxcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgVGFic1ByaW1pdGl2ZS5MaXN0PixcbiAgUmVhY3QuQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPHR5cGVvZiBUYWJzUHJpbWl0aXZlLkxpc3Q+XG4+KCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfSwgcmVmKSA9PiAoXG4gIDxUYWJzUHJpbWl0aXZlLkxpc3RcbiAgICByZWY9e3JlZn1cbiAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgXCJpbmxpbmUtZmxleCBoLTEwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJnLW11dGVkIHAtMSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIixcbiAgICAgIGNsYXNzTmFtZVxuICAgICl9XG4gICAgey4uLnByb3BzfVxuICAvPlxuKSlcblRhYnNMaXN0LmRpc3BsYXlOYW1lID0gVGFic1ByaW1pdGl2ZS5MaXN0LmRpc3BsYXlOYW1lXG5cbmNvbnN0IFRhYnNUcmlnZ2VyID0gUmVhY3QuZm9yd2FyZFJlZjxcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgVGFic1ByaW1pdGl2ZS5UcmlnZ2VyPixcbiAgUmVhY3QuQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPHR5cGVvZiBUYWJzUHJpbWl0aXZlLlRyaWdnZXI+XG4+KCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfSwgcmVmKSA9PiAoXG4gIDxUYWJzUHJpbWl0aXZlLlRyaWdnZXJcbiAgICByZWY9e3JlZn1cbiAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgXCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1zbSBweC0zIHB5LTEuNSB0ZXh0LXNtIGZvbnQtbWVkaXVtIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgdHJhbnNpdGlvbi1hbGwgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS01MCBkYXRhLVtzdGF0ZT1hY3RpdmVdOmJnLWJhY2tncm91bmQgZGF0YS1bc3RhdGU9YWN0aXZlXTp0ZXh0LWZvcmVncm91bmQgZGF0YS1bc3RhdGU9YWN0aXZlXTpzaGFkb3ctc21cIixcbiAgICAgIGNsYXNzTmFtZVxuICAgICl9XG4gICAgey4uLnByb3BzfVxuICAvPlxuKSlcblRhYnNUcmlnZ2VyLmRpc3BsYXlOYW1lID0gVGFic1ByaW1pdGl2ZS5UcmlnZ2VyLmRpc3BsYXlOYW1lXG5cbmNvbnN0IFRhYnNDb250ZW50ID0gUmVhY3QuZm9yd2FyZFJlZjxcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgVGFic1ByaW1pdGl2ZS5Db250ZW50PixcbiAgUmVhY3QuQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPHR5cGVvZiBUYWJzUHJpbWl0aXZlLkNvbnRlbnQ+XG4+KCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfSwgcmVmKSA9PiAoXG4gIDxUYWJzUHJpbWl0aXZlLkNvbnRlbnRcbiAgICByZWY9e3JlZn1cbiAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgXCJtdC0yIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yXCIsXG4gICAgICBjbGFzc05hbWVcbiAgICApfVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbikpXG5UYWJzQ29udGVudC5kaXNwbGF5TmFtZSA9IFRhYnNQcmltaXRpdmUuQ29udGVudC5kaXNwbGF5TmFtZVxuXG5leHBvcnQgeyBUYWJzLCBUYWJzTGlzdCwgVGFic1RyaWdnZXIsIFRhYnNDb250ZW50IH1cbiJdLCJuYW1lcyI6WyJSZWFjdCIsIlRhYnNQcmltaXRpdmUiLCJjbiIsIlRhYnMiLCJSb290IiwiVGFic0xpc3QiLCJmb3J3YXJkUmVmIiwiY2xhc3NOYW1lIiwicHJvcHMiLCJyZWYiLCJMaXN0IiwiZGlzcGxheU5hbWUiLCJUYWJzVHJpZ2dlciIsIlRyaWdnZXIiLCJUYWJzQ29udGVudCIsIkNvbnRlbnQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/ui/tabs.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/ui/toast.tsx":
|
|
/*!*********************************!*\
|
|
!*** ./components/ui/toast.tsx ***!
|
|
\*********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Toast: () => (/* binding */ Toast),\n/* harmony export */ ToastAction: () => (/* binding */ ToastAction),\n/* harmony export */ ToastClose: () => (/* binding */ ToastClose),\n/* harmony export */ ToastDescription: () => (/* binding */ ToastDescription),\n/* harmony export */ ToastProvider: () => (/* binding */ ToastProvider),\n/* harmony export */ ToastTitle: () => (/* binding */ ToastTitle),\n/* harmony export */ ToastViewport: () => (/* binding */ ToastViewport)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _radix_ui_react_toast__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @radix-ui/react-toast */ \"(ssr)/./node_modules/@radix-ui/react-toast/dist/index.mjs\");\n/* harmony import */ var class_variance_authority__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! class-variance-authority */ \"(ssr)/./node_modules/class-variance-authority/dist/index.mjs\");\n/* harmony import */ var _barrel_optimize_names_X_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=X!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/x.js\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/utils */ \"(ssr)/./lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ ToastProvider,ToastViewport,Toast,ToastTitle,ToastDescription,ToastClose,ToastAction auto */ \n\n\n\n\n\nconst ToastProvider = _radix_ui_react_toast__WEBPACK_IMPORTED_MODULE_4__.Provider;\nconst ToastViewport = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_toast__WEBPACK_IMPORTED_MODULE_4__.Viewport, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)(\"fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/toast.tsx\",\n lineNumber: 16,\n columnNumber: 3\n }, undefined));\nToastViewport.displayName = _radix_ui_react_toast__WEBPACK_IMPORTED_MODULE_4__.Viewport.displayName;\nconst toastVariants = (0,class_variance_authority__WEBPACK_IMPORTED_MODULE_2__.cva)(\"group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full\", {\n variants: {\n variant: {\n default: \"border bg-background text-foreground\",\n destructive: \"destructive group border-destructive bg-destructive text-destructive-foreground\",\n \"new-email\": \"border-blue-500 bg-blue-600 text-white\"\n }\n },\n defaultVariants: {\n variant: \"default\"\n }\n});\nconst Toast = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, variant, ...props }, ref)=>{\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_toast__WEBPACK_IMPORTED_MODULE_4__.Root, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)(toastVariants({\n variant\n }), className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/toast.tsx\",\n lineNumber: 51,\n columnNumber: 5\n }, undefined);\n});\nToast.displayName = _radix_ui_react_toast__WEBPACK_IMPORTED_MODULE_4__.Root.displayName;\nconst ToastAction = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_toast__WEBPACK_IMPORTED_MODULE_4__.Action, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)(\"inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors hover:bg-secondary focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/toast.tsx\",\n lineNumber: 64,\n columnNumber: 3\n }, undefined));\nToastAction.displayName = _radix_ui_react_toast__WEBPACK_IMPORTED_MODULE_4__.Action.displayName;\nconst ToastClose = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_toast__WEBPACK_IMPORTED_MODULE_4__.Close, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)(\"absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600\", className),\n \"toast-close\": \"\",\n ...props,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_X_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/toast.tsx\",\n lineNumber: 88,\n columnNumber: 5\n }, undefined)\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/toast.tsx\",\n lineNumber: 79,\n columnNumber: 3\n }, undefined));\nToastClose.displayName = _radix_ui_react_toast__WEBPACK_IMPORTED_MODULE_4__.Close.displayName;\nconst ToastTitle = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_toast__WEBPACK_IMPORTED_MODULE_4__.Title, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)(\"text-sm font-semibold\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/toast.tsx\",\n lineNumber: 97,\n columnNumber: 3\n }, undefined));\nToastTitle.displayName = _radix_ui_react_toast__WEBPACK_IMPORTED_MODULE_4__.Title.displayName;\nconst ToastDescription = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_toast__WEBPACK_IMPORTED_MODULE_4__.Description, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)(\"text-sm opacity-90\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/toast.tsx\",\n lineNumber: 109,\n columnNumber: 3\n }, undefined));\nToastDescription.displayName = _radix_ui_react_toast__WEBPACK_IMPORTED_MODULE_4__.Description.displayName;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL3VpL3RvYXN0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRThCO0FBQzBCO0FBQ1M7QUFDakM7QUFFQTtBQUVoQyxNQUFNSyxnQkFBZ0JKLDJEQUF3QjtBQUU5QyxNQUFNTSw4QkFBZ0JQLDZDQUFnQixDQUdwQyxDQUFDLEVBQUVTLFNBQVMsRUFBRSxHQUFHQyxPQUFPLEVBQUVDLG9CQUMxQiw4REFBQ1YsMkRBQXdCO1FBQ3ZCVSxLQUFLQTtRQUNMRixXQUFXTCw4Q0FBRUEsQ0FDWCxxSUFDQUs7UUFFRCxHQUFHQyxLQUFLOzs7Ozs7QUFHYkgsY0FBY00sV0FBVyxHQUFHWiwyREFBd0IsQ0FBQ1ksV0FBVztBQUVoRSxNQUFNQyxnQkFBZ0JaLDZEQUFHQSxDQUN2Qiw2bEJBQ0E7SUFDRWEsVUFBVTtRQUNSQyxTQUFTO1lBQ1BDLFNBQVM7WUFDVEMsYUFDRTtZQUNGLGFBQ0U7UUFDSjtJQUNGO0lBQ0FDLGlCQUFpQjtRQUNmSCxTQUFTO0lBQ1g7QUFDRjtBQUdGLE1BQU1JLHNCQUFRcEIsNkNBQWdCLENBSTVCLENBQUMsRUFBRVMsU0FBUyxFQUFFTyxPQUFPLEVBQUUsR0FBR04sT0FBTyxFQUFFQztJQUNuQyxxQkFDRSw4REFBQ1YsdURBQW9CO1FBQ25CVSxLQUFLQTtRQUNMRixXQUFXTCw4Q0FBRUEsQ0FBQ1UsY0FBYztZQUFFRTtRQUFRLElBQUlQO1FBQ3pDLEdBQUdDLEtBQUs7Ozs7OztBQUdmO0FBQ0FVLE1BQU1QLFdBQVcsR0FBR1osdURBQW9CLENBQUNZLFdBQVc7QUFFcEQsTUFBTVMsNEJBQWN0Qiw2Q0FBZ0IsQ0FHbEMsQ0FBQyxFQUFFUyxTQUFTLEVBQUUsR0FBR0MsT0FBTyxFQUFFQyxvQkFDMUIsOERBQUNWLHlEQUFzQjtRQUNyQlUsS0FBS0E7UUFDTEYsV0FBV0wsOENBQUVBLENBQ1gsc2dCQUNBSztRQUVELEdBQUdDLEtBQUs7Ozs7OztBQUdiWSxZQUFZVCxXQUFXLEdBQUdaLHlEQUFzQixDQUFDWSxXQUFXO0FBRTVELE1BQU1XLDJCQUFheEIsNkNBQWdCLENBR2pDLENBQUMsRUFBRVMsU0FBUyxFQUFFLEdBQUdDLE9BQU8sRUFBRUMsb0JBQzFCLDhEQUFDVix3REFBcUI7UUFDcEJVLEtBQUtBO1FBQ0xGLFdBQVdMLDhDQUFFQSxDQUNYLHlWQUNBSztRQUVGaUIsZUFBWTtRQUNYLEdBQUdoQixLQUFLO2tCQUVULDRFQUFDUCw2RUFBQ0E7WUFBQ00sV0FBVTs7Ozs7Ozs7Ozs7QUFHakJlLFdBQVdYLFdBQVcsR0FBR1osd0RBQXFCLENBQUNZLFdBQVc7QUFFMUQsTUFBTWMsMkJBQWEzQiw2Q0FBZ0IsQ0FHakMsQ0FBQyxFQUFFUyxTQUFTLEVBQUUsR0FBR0MsT0FBTyxFQUFFQyxvQkFDMUIsOERBQUNWLHdEQUFxQjtRQUNwQlUsS0FBS0E7UUFDTEYsV0FBV0wsOENBQUVBLENBQUMseUJBQXlCSztRQUN0QyxHQUFHQyxLQUFLOzs7Ozs7QUFHYmlCLFdBQVdkLFdBQVcsR0FBR1osd0RBQXFCLENBQUNZLFdBQVc7QUFFMUQsTUFBTWdCLGlDQUFtQjdCLDZDQUFnQixDQUd2QyxDQUFDLEVBQUVTLFNBQVMsRUFBRSxHQUFHQyxPQUFPLEVBQUVDLG9CQUMxQiw4REFBQ1YsOERBQTJCO1FBQzFCVSxLQUFLQTtRQUNMRixXQUFXTCw4Q0FBRUEsQ0FBQyxzQkFBc0JLO1FBQ25DLEdBQUdDLEtBQUs7Ozs7OztBQUdibUIsaUJBQWlCaEIsV0FBVyxHQUFHWiw4REFBMkIsQ0FBQ1ksV0FBVztBQWdCckUiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvY29tcG9uZW50cy91aS90b2FzdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCJcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCAqIGFzIFRvYXN0UHJpbWl0aXZlcyBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXRvYXN0XCJcbmltcG9ydCB7IGN2YSwgdHlwZSBWYXJpYW50UHJvcHMgfSBmcm9tIFwiY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5XCJcbmltcG9ydCB7IFggfSBmcm9tIFwibHVjaWRlLXJlYWN0XCJcblxuaW1wb3J0IHsgY24gfSBmcm9tIFwiQC9saWIvdXRpbHNcIlxuXG5jb25zdCBUb2FzdFByb3ZpZGVyID0gVG9hc3RQcmltaXRpdmVzLlByb3ZpZGVyXG5cbmNvbnN0IFRvYXN0Vmlld3BvcnQgPSBSZWFjdC5mb3J3YXJkUmVmPFxuICBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBUb2FzdFByaW1pdGl2ZXMuVmlld3BvcnQ+LFxuICBSZWFjdC5Db21wb25lbnRQcm9wc1dpdGhvdXRSZWY8dHlwZW9mIFRvYXN0UHJpbWl0aXZlcy5WaWV3cG9ydD5cbj4oKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9LCByZWYpID0+IChcbiAgPFRvYXN0UHJpbWl0aXZlcy5WaWV3cG9ydFxuICAgIHJlZj17cmVmfVxuICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICBcImZpeGVkIHRvcC0wIHotWzEwMF0gZmxleCBtYXgtaC1zY3JlZW4gdy1mdWxsIGZsZXgtY29sLXJldmVyc2UgcC00IHNtOmJvdHRvbS0wIHNtOnJpZ2h0LTAgc206dG9wLWF1dG8gc206ZmxleC1jb2wgbWQ6bWF4LXctWzQyMHB4XVwiLFxuICAgICAgY2xhc3NOYW1lXG4gICAgKX1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pKVxuVG9hc3RWaWV3cG9ydC5kaXNwbGF5TmFtZSA9IFRvYXN0UHJpbWl0aXZlcy5WaWV3cG9ydC5kaXNwbGF5TmFtZVxuXG5jb25zdCB0b2FzdFZhcmlhbnRzID0gY3ZhKFxuICBcImdyb3VwIHBvaW50ZXItZXZlbnRzLWF1dG8gcmVsYXRpdmUgZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBzcGFjZS14LTQgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbWQgYm9yZGVyIHAtNiBwci04IHNoYWRvdy1sZyB0cmFuc2l0aW9uLWFsbCBkYXRhLVtzd2lwZT1jYW5jZWxdOnRyYW5zbGF0ZS14LTAgZGF0YS1bc3dpcGU9ZW5kXTp0cmFuc2xhdGUteC1bdmFyKC0tcmFkaXgtdG9hc3Qtc3dpcGUtZW5kLXgpXSBkYXRhLVtzd2lwZT1tb3ZlXTp0cmFuc2xhdGUteC1bdmFyKC0tcmFkaXgtdG9hc3Qtc3dpcGUtbW92ZS14KV0gZGF0YS1bc3dpcGU9bW92ZV06dHJhbnNpdGlvbi1ub25lIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzd2lwZT1lbmRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtODAgZGF0YS1bc3RhdGU9Y2xvc2VkXTpzbGlkZS1vdXQtdG8tcmlnaHQtZnVsbCBkYXRhLVtzdGF0ZT1vcGVuXTpzbGlkZS1pbi1mcm9tLXRvcC1mdWxsIGRhdGEtW3N0YXRlPW9wZW5dOnNtOnNsaWRlLWluLWZyb20tYm90dG9tLWZ1bGxcIixcbiAge1xuICAgIHZhcmlhbnRzOiB7XG4gICAgICB2YXJpYW50OiB7XG4gICAgICAgIGRlZmF1bHQ6IFwiYm9yZGVyIGJnLWJhY2tncm91bmQgdGV4dC1mb3JlZ3JvdW5kXCIsXG4gICAgICAgIGRlc3RydWN0aXZlOlxuICAgICAgICAgIFwiZGVzdHJ1Y3RpdmUgZ3JvdXAgYm9yZGVyLWRlc3RydWN0aXZlIGJnLWRlc3RydWN0aXZlIHRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZFwiLFxuICAgICAgICBcIm5ldy1lbWFpbFwiOlxuICAgICAgICAgIFwiYm9yZGVyLWJsdWUtNTAwIGJnLWJsdWUtNjAwIHRleHQtd2hpdGVcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkZWZhdWx0VmFyaWFudHM6IHtcbiAgICAgIHZhcmlhbnQ6IFwiZGVmYXVsdFwiLFxuICAgIH0sXG4gIH1cbilcblxuY29uc3QgVG9hc3QgPSBSZWFjdC5mb3J3YXJkUmVmPFxuICBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBUb2FzdFByaW1pdGl2ZXMuUm9vdD4sXG4gIFJlYWN0LkNvbXBvbmVudFByb3BzV2l0aG91dFJlZjx0eXBlb2YgVG9hc3RQcmltaXRpdmVzLlJvb3Q+ICZcbiAgICBWYXJpYW50UHJvcHM8dHlwZW9mIHRvYXN0VmFyaWFudHM+XG4+KCh7IGNsYXNzTmFtZSwgdmFyaWFudCwgLi4ucHJvcHMgfSwgcmVmKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFRvYXN0UHJpbWl0aXZlcy5Sb290XG4gICAgICByZWY9e3JlZn1cbiAgICAgIGNsYXNzTmFtZT17Y24odG9hc3RWYXJpYW50cyh7IHZhcmlhbnQgfSksIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufSlcblRvYXN0LmRpc3BsYXlOYW1lID0gVG9hc3RQcmltaXRpdmVzLlJvb3QuZGlzcGxheU5hbWVcblxuY29uc3QgVG9hc3RBY3Rpb24gPSBSZWFjdC5mb3J3YXJkUmVmPFxuICBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBUb2FzdFByaW1pdGl2ZXMuQWN0aW9uPixcbiAgUmVhY3QuQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPHR5cGVvZiBUb2FzdFByaW1pdGl2ZXMuQWN0aW9uPlxuPigoeyBjbGFzc05hbWUsIC4uLnByb3BzIH0sIHJlZikgPT4gKFxuICA8VG9hc3RQcmltaXRpdmVzLkFjdGlvblxuICAgIHJlZj17cmVmfVxuICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICBcImlubGluZS1mbGV4IGgtOCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyB0ZXh0LXNtIGZvbnQtbWVkaXVtIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctc2Vjb25kYXJ5IGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1yaW5nIGZvY3VzOnJpbmctb2Zmc2V0LTIgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIGdyb3VwLVsuZGVzdHJ1Y3RpdmVdOmJvcmRlci1tdXRlZC80MCBncm91cC1bLmRlc3RydWN0aXZlXTpob3Zlcjpib3JkZXItZGVzdHJ1Y3RpdmUvMzAgZ3JvdXAtWy5kZXN0cnVjdGl2ZV06aG92ZXI6YmctZGVzdHJ1Y3RpdmUgZ3JvdXAtWy5kZXN0cnVjdGl2ZV06aG92ZXI6dGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIGdyb3VwLVsuZGVzdHJ1Y3RpdmVdOmZvY3VzOnJpbmctZGVzdHJ1Y3RpdmVcIixcbiAgICAgIGNsYXNzTmFtZVxuICAgICl9XG4gICAgey4uLnByb3BzfVxuICAvPlxuKSlcblRvYXN0QWN0aW9uLmRpc3BsYXlOYW1lID0gVG9hc3RQcmltaXRpdmVzLkFjdGlvbi5kaXNwbGF5TmFtZVxuXG5jb25zdCBUb2FzdENsb3NlID0gUmVhY3QuZm9yd2FyZFJlZjxcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgVG9hc3RQcmltaXRpdmVzLkNsb3NlPixcbiAgUmVhY3QuQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPHR5cGVvZiBUb2FzdFByaW1pdGl2ZXMuQ2xvc2U+XG4+KCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfSwgcmVmKSA9PiAoXG4gIDxUb2FzdFByaW1pdGl2ZXMuQ2xvc2VcbiAgICByZWY9e3JlZn1cbiAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgXCJhYnNvbHV0ZSByaWdodC0yIHRvcC0yIHJvdW5kZWQtbWQgcC0xIHRleHQtZm9yZWdyb3VuZC81MCBvcGFjaXR5LTAgdHJhbnNpdGlvbi1vcGFjaXR5IGhvdmVyOnRleHQtZm9yZWdyb3VuZCBmb2N1czpvcGFjaXR5LTEwMCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIGdyb3VwLVsuZGVzdHJ1Y3RpdmVdOnRleHQtcmVkLTMwMCBncm91cC1bLmRlc3RydWN0aXZlXTpob3Zlcjp0ZXh0LXJlZC01MCBncm91cC1bLmRlc3RydWN0aXZlXTpmb2N1czpyaW5nLXJlZC00MDAgZ3JvdXAtWy5kZXN0cnVjdGl2ZV06Zm9jdXM6cmluZy1vZmZzZXQtcmVkLTYwMFwiLFxuICAgICAgY2xhc3NOYW1lXG4gICAgKX1cbiAgICB0b2FzdC1jbG9zZT1cIlwiXG4gICAgey4uLnByb3BzfVxuICA+XG4gICAgPFggY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gIDwvVG9hc3RQcmltaXRpdmVzLkNsb3NlPlxuKSlcblRvYXN0Q2xvc2UuZGlzcGxheU5hbWUgPSBUb2FzdFByaW1pdGl2ZXMuQ2xvc2UuZGlzcGxheU5hbWVcblxuY29uc3QgVG9hc3RUaXRsZSA9IFJlYWN0LmZvcndhcmRSZWY8XG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFRvYXN0UHJpbWl0aXZlcy5UaXRsZT4sXG4gIFJlYWN0LkNvbXBvbmVudFByb3BzV2l0aG91dFJlZjx0eXBlb2YgVG9hc3RQcmltaXRpdmVzLlRpdGxlPlxuPigoeyBjbGFzc05hbWUsIC4uLnByb3BzIH0sIHJlZikgPT4gKFxuICA8VG9hc3RQcmltaXRpdmVzLlRpdGxlXG4gICAgcmVmPXtyZWZ9XG4gICAgY2xhc3NOYW1lPXtjbihcInRleHQtc20gZm9udC1zZW1pYm9sZFwiLCBjbGFzc05hbWUpfVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbikpXG5Ub2FzdFRpdGxlLmRpc3BsYXlOYW1lID0gVG9hc3RQcmltaXRpdmVzLlRpdGxlLmRpc3BsYXlOYW1lXG5cbmNvbnN0IFRvYXN0RGVzY3JpcHRpb24gPSBSZWFjdC5mb3J3YXJkUmVmPFxuICBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBUb2FzdFByaW1pdGl2ZXMuRGVzY3JpcHRpb24+LFxuICBSZWFjdC5Db21wb25lbnRQcm9wc1dpdGhvdXRSZWY8dHlwZW9mIFRvYXN0UHJpbWl0aXZlcy5EZXNjcmlwdGlvbj5cbj4oKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9LCByZWYpID0+IChcbiAgPFRvYXN0UHJpbWl0aXZlcy5EZXNjcmlwdGlvblxuICAgIHJlZj17cmVmfVxuICAgIGNsYXNzTmFtZT17Y24oXCJ0ZXh0LXNtIG9wYWNpdHktOTBcIiwgY2xhc3NOYW1lKX1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pKVxuVG9hc3REZXNjcmlwdGlvbi5kaXNwbGF5TmFtZSA9IFRvYXN0UHJpbWl0aXZlcy5EZXNjcmlwdGlvbi5kaXNwbGF5TmFtZVxuXG50eXBlIFRvYXN0UHJvcHMgPSBSZWFjdC5Db21wb25lbnRQcm9wc1dpdGhvdXRSZWY8dHlwZW9mIFRvYXN0PlxuXG50eXBlIFRvYXN0QWN0aW9uRWxlbWVudCA9IFJlYWN0LlJlYWN0RWxlbWVudDx0eXBlb2YgVG9hc3RBY3Rpb24+XG5cbmV4cG9ydCB7XG4gIHR5cGUgVG9hc3RQcm9wcyxcbiAgdHlwZSBUb2FzdEFjdGlvbkVsZW1lbnQsXG4gIFRvYXN0UHJvdmlkZXIsXG4gIFRvYXN0Vmlld3BvcnQsXG4gIFRvYXN0LFxuICBUb2FzdFRpdGxlLFxuICBUb2FzdERlc2NyaXB0aW9uLFxuICBUb2FzdENsb3NlLFxuICBUb2FzdEFjdGlvbixcbn1cbiJdLCJuYW1lcyI6WyJSZWFjdCIsIlRvYXN0UHJpbWl0aXZlcyIsImN2YSIsIlgiLCJjbiIsIlRvYXN0UHJvdmlkZXIiLCJQcm92aWRlciIsIlRvYXN0Vmlld3BvcnQiLCJmb3J3YXJkUmVmIiwiY2xhc3NOYW1lIiwicHJvcHMiLCJyZWYiLCJWaWV3cG9ydCIsImRpc3BsYXlOYW1lIiwidG9hc3RWYXJpYW50cyIsInZhcmlhbnRzIiwidmFyaWFudCIsImRlZmF1bHQiLCJkZXN0cnVjdGl2ZSIsImRlZmF1bHRWYXJpYW50cyIsIlRvYXN0IiwiUm9vdCIsIlRvYXN0QWN0aW9uIiwiQWN0aW9uIiwiVG9hc3RDbG9zZSIsIkNsb3NlIiwidG9hc3QtY2xvc2UiLCJUb2FzdFRpdGxlIiwiVGl0bGUiLCJUb2FzdERlc2NyaXB0aW9uIiwiRGVzY3JpcHRpb24iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/ui/toast.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/ui/toaster.tsx":
|
|
/*!***********************************!*\
|
|
!*** ./components/ui/toaster.tsx ***!
|
|
\***********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Toaster: () => (/* binding */ Toaster)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _hooks_use_toast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/hooks/use-toast */ \"(ssr)/./hooks/use-toast.ts\");\n/* harmony import */ var _components_ui_toast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/toast */ \"(ssr)/./components/ui/toast.tsx\");\n/* __next_internal_client_entry_do_not_use__ Toaster auto */ \n\n\nfunction Toaster() {\n const { toasts } = (0,_hooks_use_toast__WEBPACK_IMPORTED_MODULE_1__.useToast)();\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_toast__WEBPACK_IMPORTED_MODULE_2__.ToastProvider, {\n children: [\n toasts.map(function({ id, title, description, action, ...props }) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_toast__WEBPACK_IMPORTED_MODULE_2__.Toast, {\n ...props,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-1\",\n children: [\n title && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_toast__WEBPACK_IMPORTED_MODULE_2__.ToastTitle, {\n children: title\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/toaster.tsx\",\n lineNumber: 22,\n columnNumber: 25\n }, this),\n description && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_toast__WEBPACK_IMPORTED_MODULE_2__.ToastDescription, {\n children: description\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/toaster.tsx\",\n lineNumber: 24,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/toaster.tsx\",\n lineNumber: 21,\n columnNumber: 13\n }, this),\n action,\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_toast__WEBPACK_IMPORTED_MODULE_2__.ToastClose, {}, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/toaster.tsx\",\n lineNumber: 28,\n columnNumber: 13\n }, this)\n ]\n }, id, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/toaster.tsx\",\n lineNumber: 20,\n columnNumber: 11\n }, this);\n }),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_toast__WEBPACK_IMPORTED_MODULE_2__.ToastViewport, {}, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/toaster.tsx\",\n lineNumber: 32,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/toaster.tsx\",\n lineNumber: 17,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL3VpL3RvYXN0ZXIudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUU0QztBQVFkO0FBRXZCLFNBQVNPO0lBQ2QsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR1IsMERBQVFBO0lBRTNCLHFCQUNFLDhEQUFDSSwrREFBYUE7O1lBQ1hJLE9BQU9DLEdBQUcsQ0FBQyxTQUFVLEVBQUVDLEVBQUUsRUFBRUMsS0FBSyxFQUFFQyxXQUFXLEVBQUVDLE1BQU0sRUFBRSxHQUFHQyxPQUFPO2dCQUNoRSxxQkFDRSw4REFBQ2IsdURBQUtBO29CQUFXLEdBQUdhLEtBQUs7O3NDQUN2Qiw4REFBQ0M7NEJBQUlDLFdBQVU7O2dDQUNaTCx1QkFBUyw4REFBQ04sNERBQVVBOzhDQUFFTTs7Ozs7O2dDQUN0QkMsNkJBQ0MsOERBQUNULGtFQUFnQkE7OENBQUVTOzs7Ozs7Ozs7Ozs7d0JBR3RCQztzQ0FDRCw4REFBQ1gsNERBQVVBOzs7Ozs7bUJBUkRROzs7OztZQVdoQjswQkFDQSw4REFBQ0osK0RBQWFBOzs7Ozs7Ozs7OztBQUdwQiIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9jb21wb25lbnRzL3VpL3RvYXN0ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiXG5cbmltcG9ydCB7IHVzZVRvYXN0IH0gZnJvbSBcIkAvaG9va3MvdXNlLXRvYXN0XCJcbmltcG9ydCB7XG4gIFRvYXN0LFxuICBUb2FzdENsb3NlLFxuICBUb2FzdERlc2NyaXB0aW9uLFxuICBUb2FzdFByb3ZpZGVyLFxuICBUb2FzdFRpdGxlLFxuICBUb2FzdFZpZXdwb3J0LFxufSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL3RvYXN0XCJcblxuZXhwb3J0IGZ1bmN0aW9uIFRvYXN0ZXIoKSB7XG4gIGNvbnN0IHsgdG9hc3RzIH0gPSB1c2VUb2FzdCgpXG5cbiAgcmV0dXJuIChcbiAgICA8VG9hc3RQcm92aWRlcj5cbiAgICAgIHt0b2FzdHMubWFwKGZ1bmN0aW9uICh7IGlkLCB0aXRsZSwgZGVzY3JpcHRpb24sIGFjdGlvbiwgLi4ucHJvcHMgfSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxUb2FzdCBrZXk9e2lkfSB7Li4ucHJvcHN9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xXCI+XG4gICAgICAgICAgICAgIHt0aXRsZSAmJiA8VG9hc3RUaXRsZT57dGl0bGV9PC9Ub2FzdFRpdGxlPn1cbiAgICAgICAgICAgICAge2Rlc2NyaXB0aW9uICYmIChcbiAgICAgICAgICAgICAgICA8VG9hc3REZXNjcmlwdGlvbj57ZGVzY3JpcHRpb259PC9Ub2FzdERlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7YWN0aW9ufVxuICAgICAgICAgICAgPFRvYXN0Q2xvc2UgLz5cbiAgICAgICAgICA8L1RvYXN0PlxuICAgICAgICApXG4gICAgICB9KX1cbiAgICAgIDxUb2FzdFZpZXdwb3J0IC8+XG4gICAgPC9Ub2FzdFByb3ZpZGVyPlxuICApXG59XG4iXSwibmFtZXMiOlsidXNlVG9hc3QiLCJUb2FzdCIsIlRvYXN0Q2xvc2UiLCJUb2FzdERlc2NyaXB0aW9uIiwiVG9hc3RQcm92aWRlciIsIlRvYXN0VGl0bGUiLCJUb2FzdFZpZXdwb3J0IiwiVG9hc3RlciIsInRvYXN0cyIsIm1hcCIsImlkIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImFjdGlvbiIsInByb3BzIiwiZGl2IiwiY2xhc3NOYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./components/ui/toaster.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/ui/tooltip.tsx":
|
|
/*!***********************************!*\
|
|
!*** ./components/ui/tooltip.tsx ***!
|
|
\***********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tooltip: () => (/* binding */ Tooltip),\n/* harmony export */ TooltipContent: () => (/* binding */ TooltipContent),\n/* harmony export */ TooltipProvider: () => (/* binding */ TooltipProvider),\n/* harmony export */ TooltipTrigger: () => (/* binding */ TooltipTrigger)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _radix_ui_react_tooltip__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-tooltip */ \"(ssr)/./node_modules/@radix-ui/react-tooltip/dist/index.mjs\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(ssr)/./lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ Tooltip,TooltipTrigger,TooltipContent,TooltipProvider auto */ \n\n\n\nconst TooltipProvider = _radix_ui_react_tooltip__WEBPACK_IMPORTED_MODULE_3__.Provider;\nconst Tooltip = _radix_ui_react_tooltip__WEBPACK_IMPORTED_MODULE_3__.Root;\nconst TooltipTrigger = _radix_ui_react_tooltip__WEBPACK_IMPORTED_MODULE_3__.Trigger;\nconst TooltipContent = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(({ className, sideOffset = 4, ...props }, ref)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_tooltip__WEBPACK_IMPORTED_MODULE_3__.Content, {\n ref: ref,\n sideOffset: sideOffset,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/alma/nextgen/Neah-mail/components/ui/tooltip.tsx\",\n lineNumber: 18,\n columnNumber: 3\n }, undefined));\nTooltipContent.displayName = _radix_ui_react_tooltip__WEBPACK_IMPORTED_MODULE_3__.Content.displayName;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL3VpL3Rvb2x0aXAudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRThCO0FBQzZCO0FBRTNCO0FBRWhDLE1BQU1HLGtCQUFrQkYsNkRBQXlCO0FBRWpELE1BQU1JLFVBQVVKLHlEQUFxQjtBQUVyQyxNQUFNTSxpQkFBaUJOLDREQUF3QjtBQUUvQyxNQUFNUSwrQkFBaUJULDZDQUFnQixDQUdyQyxDQUFDLEVBQUVXLFNBQVMsRUFBRUMsYUFBYSxDQUFDLEVBQUUsR0FBR0MsT0FBTyxFQUFFQyxvQkFDMUMsOERBQUNiLDREQUF3QjtRQUN2QmEsS0FBS0E7UUFDTEYsWUFBWUE7UUFDWkQsV0FBV1QsOENBQUVBLENBQ1gsc1lBQ0FTO1FBRUQsR0FBR0UsS0FBSzs7Ozs7O0FBR2JKLGVBQWVPLFdBQVcsR0FBR2YsNERBQXdCLENBQUNlLFdBQVc7QUFFRSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9jb21wb25lbnRzL3VpL3Rvb2x0aXAudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgKiBhcyBUb29sdGlwUHJpbWl0aXZlIGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdG9vbHRpcFwiXG5cbmltcG9ydCB7IGNuIH0gZnJvbSBcIkAvbGliL3V0aWxzXCJcblxuY29uc3QgVG9vbHRpcFByb3ZpZGVyID0gVG9vbHRpcFByaW1pdGl2ZS5Qcm92aWRlclxuXG5jb25zdCBUb29sdGlwID0gVG9vbHRpcFByaW1pdGl2ZS5Sb290XG5cbmNvbnN0IFRvb2x0aXBUcmlnZ2VyID0gVG9vbHRpcFByaW1pdGl2ZS5UcmlnZ2VyXG5cbmNvbnN0IFRvb2x0aXBDb250ZW50ID0gUmVhY3QuZm9yd2FyZFJlZjxcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5Db250ZW50PixcbiAgUmVhY3QuQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPHR5cGVvZiBUb29sdGlwUHJpbWl0aXZlLkNvbnRlbnQ+XG4+KCh7IGNsYXNzTmFtZSwgc2lkZU9mZnNldCA9IDQsIC4uLnByb3BzIH0sIHJlZikgPT4gKFxuICA8VG9vbHRpcFByaW1pdGl2ZS5Db250ZW50XG4gICAgcmVmPXtyZWZ9XG4gICAgc2lkZU9mZnNldD17c2lkZU9mZnNldH1cbiAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgXCJ6LTUwIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLW1kIGJvcmRlciBiZy1wb3BvdmVyIHB4LTMgcHktMS41IHRleHQtc20gdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgc2hhZG93LW1kIGFuaW1hdGUtaW4gZmFkZS1pbi0wIHpvb20taW4tOTUgZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMlwiLFxuICAgICAgY2xhc3NOYW1lXG4gICAgKX1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pKVxuVG9vbHRpcENvbnRlbnQuZGlzcGxheU5hbWUgPSBUb29sdGlwUHJpbWl0aXZlLkNvbnRlbnQuZGlzcGxheU5hbWVcblxuZXhwb3J0IHsgVG9vbHRpcCwgVG9vbHRpcFRyaWdnZXIsIFRvb2x0aXBDb250ZW50LCBUb29sdGlwUHJvdmlkZXIgfVxuIl0sIm5hbWVzIjpbIlJlYWN0IiwiVG9vbHRpcFByaW1pdGl2ZSIsImNuIiwiVG9vbHRpcFByb3ZpZGVyIiwiUHJvdmlkZXIiLCJUb29sdGlwIiwiUm9vdCIsIlRvb2x0aXBUcmlnZ2VyIiwiVHJpZ2dlciIsIlRvb2x0aXBDb250ZW50IiwiZm9yd2FyZFJlZiIsImNsYXNzTmFtZSIsInNpZGVPZmZzZXQiLCJwcm9wcyIsInJlZiIsIkNvbnRlbnQiLCJkaXNwbGF5TmFtZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/ui/tooltip.tsx\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./components/ui/use-toast.ts":
|
|
/*!************************************!*\
|
|
!*** ./components/ui/use-toast.ts ***!
|
|
\************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ reducer: () => (/* binding */ reducer),\n/* harmony export */ toast: () => (/* binding */ toast),\n/* harmony export */ useToast: () => (/* binding */ useToast)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* __next_internal_client_entry_do_not_use__ reducer,useToast,toast auto */ // Inspired by react-hot-toast library\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 1000000;\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\"\n};\nlet count = 0;\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\nconst toastTimeouts = new Map();\nconst addToRemoveQueue = (toastId)=>{\n if (toastTimeouts.has(toastId)) {\n return;\n }\n const timeout = setTimeout(()=>{\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId\n });\n }, TOAST_REMOVE_DELAY);\n toastTimeouts.set(toastId, timeout);\n};\nconst reducer = (state, action)=>{\n switch(action.type){\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [\n action.toast,\n ...state.toasts\n ].slice(0, TOAST_LIMIT)\n };\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t)=>t.id === action.toast.id ? {\n ...t,\n ...action.toast\n } : t)\n };\n case \"DISMISS_TOAST\":\n {\n const { toastId } = action;\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast)=>{\n addToRemoveQueue(toast.id);\n });\n }\n return {\n ...state,\n toasts: state.toasts.map((t)=>t.id === toastId || toastId === undefined ? {\n ...t,\n open: false\n } : t)\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: []\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t)=>t.id !== action.toastId)\n };\n }\n};\nconst listeners = [];\nlet memoryState = {\n toasts: []\n};\nfunction dispatch(action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener)=>{\n listener(memoryState);\n });\n}\nfunction toast({ ...props }) {\n const id = genId();\n const update = (props)=>dispatch({\n type: \"UPDATE_TOAST\",\n toast: {\n ...props,\n id\n }\n });\n const dismiss = ()=>dispatch({\n type: \"DISMISS_TOAST\",\n toastId: id\n });\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open)=>{\n if (!open) dismiss();\n }\n }\n });\n return {\n id: id,\n dismiss,\n update\n };\n}\nfunction useToast() {\n const [state, setState] = react__WEBPACK_IMPORTED_MODULE_0__.useState(memoryState);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"useToast.useEffect\": ()=>{\n listeners.push(setState);\n return ({\n \"useToast.useEffect\": ()=>{\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n }\n })[\"useToast.useEffect\"];\n }\n }[\"useToast.useEffect\"], [\n state\n ]);\n return {\n ...state,\n toast,\n dismiss: (toastId)=>dispatch({\n type: \"DISMISS_TOAST\",\n toastId\n })\n };\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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TUFBTVUsVUFBVSxJQUFNckIsU0FBUztZQUFFQyxNQUFNO1lBQWlCTixTQUFTZ0I7UUFBRztJQUVwRVgsU0FBUztRQUNQQyxNQUFNO1FBQ05NLE9BQU87WUFDTCxHQUFHWSxLQUFLO1lBQ1JSO1lBQ0FHLE1BQU07WUFDTlEsY0FBYyxDQUFDUjtnQkFDYixJQUFJLENBQUNBLE1BQU1PO1lBQ2I7UUFDRjtJQUNGO0lBRUEsT0FBTztRQUNMVixJQUFJQTtRQUNKVTtRQUNBRDtJQUNGO0FBQ0Y7QUFFQSxTQUFTRztJQUNQLE1BQU0sQ0FBQ25CLE9BQU9vQixTQUFTLEdBQUc3QywyQ0FBYyxDQUFRc0M7SUFFaER0Qyw0Q0FBZTs4QkFBQztZQUNkcUMsVUFBVVcsSUFBSSxDQUFDSDtZQUNmO3NDQUFPO29CQUNMLE1BQU1JLFFBQVFaLFVBQVVhLE9BQU8sQ0FBQ0w7b0JBQ2hDLElBQUlJLFFBQVEsQ0FBQyxHQUFHO3dCQUNkWixVQUFVYyxNQUFNLENBQUNGLE9BQU87b0JBQzFCO2dCQUNGOztRQUNGOzZCQUFHO1FBQUN4QjtLQUFNO0lBRVYsT0FBTztRQUNMLEdBQUdBLEtBQUs7UUFDUkc7UUFDQWMsU0FBUyxDQUFDMUIsVUFBcUJLLFNBQVM7Z0JBQUVDLE1BQU07Z0JBQWlCTjtZQUFRO0lBQzNFO0FBQ0Y7QUFFMEIiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvY29tcG9uZW50cy91aS91c2UtdG9hc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCJcblxuLy8gSW5zcGlyZWQgYnkgcmVhY3QtaG90LXRvYXN0IGxpYnJhcnlcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiXG5cbmltcG9ydCB0eXBlIHtcbiAgVG9hc3RBY3Rpb25FbGVtZW50LFxuICBUb2FzdFByb3BzLFxufSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL3RvYXN0XCJcblxuY29uc3QgVE9BU1RfTElNSVQgPSAxXG5jb25zdCBUT0FTVF9SRU1PVkVfREVMQVkgPSAxMDAwMDAwXG5cbnR5cGUgVG9hc3RlclRvYXN0ID0gVG9hc3RQcm9wcyAmIHtcbiAgaWQ6IHN0cmluZ1xuICB0aXRsZT86IFJlYWN0LlJlYWN0Tm9kZVxuICBkZXNjcmlwdGlvbj86IFJlYWN0LlJlYWN0Tm9kZVxuICBhY3Rpb24/OiBUb2FzdEFjdGlvbkVsZW1lbnRcbn1cblxuY29uc3QgYWN0aW9uVHlwZXMgPSB7XG4gIEFERF9UT0FTVDogXCJBRERfVE9BU1RcIixcbiAgVVBEQVRFX1RPQVNUOiBcIlVQREFURV9UT0FTVFwiLFxuICBESVNNSVNTX1RPQVNUOiBcIkRJU01JU1NfVE9BU1RcIixcbiAgUkVNT1ZFX1RPQVNUOiBcIlJFTU9WRV9UT0FTVFwiLFxufSBhcyBjb25zdFxuXG5sZXQgY291bnQgPSAwXG5cbmZ1bmN0aW9uIGdlbklkKCkge1xuICBjb3VudCA9IChjb3VudCArIDEpICUgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbiAgcmV0dXJuIGNvdW50LnRvU3RyaW5nKClcbn1cblxudHlwZSBBY3Rpb25UeXBlID0gdHlwZW9mIGFjdGlvblR5cGVzXG5cbnR5cGUgQWN0aW9uID1cbiAgfCB7XG4gICAgICB0eXBlOiBBY3Rpb25UeXBlW1wiQUREX1RPQVNUXCJdXG4gICAgICB0b2FzdDogVG9hc3RlclRvYXN0XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IEFjdGlvblR5cGVbXCJVUERBVEVfVE9BU1RcIl1cbiAgICAgIHRvYXN0OiBQYXJ0aWFsPFRvYXN0ZXJUb2FzdD5cbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogQWN0aW9uVHlwZVtcIkRJU01JU1NfVE9BU1RcIl1cbiAgICAgIHRvYXN0SWQ/OiBUb2FzdGVyVG9hc3RbXCJpZFwiXVxuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBBY3Rpb25UeXBlW1wiUkVNT1ZFX1RPQVNUXCJdXG4gICAgICB0b2FzdElkPzogVG9hc3RlclRvYXN0W1wiaWRcIl1cbiAgICB9XG5cbmludGVyZmFjZSBTdGF0ZSB7XG4gIHRvYXN0czogVG9hc3RlclRvYXN0W11cbn1cblxuY29uc3QgdG9hc3RUaW1lb3V0cyA9IG5ldyBNYXA8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0Pj4oKVxuXG5jb25zdCBhZGRUb1JlbW92ZVF1ZXVlID0gKHRvYXN0SWQ6IHN0cmluZykgPT4ge1xuICBpZiAodG9hc3RUaW1lb3V0cy5oYXModG9hc3RJZCkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICB0b2FzdFRpbWVvdXRzLmRlbGV0ZSh0b2FzdElkKVxuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFwiUkVNT1ZFX1RPQVNUXCIsXG4gICAgICB0b2FzdElkOiB0b2FzdElkLFxuICAgIH0pXG4gIH0sIFRPQVNUX1JFTU9WRV9ERUxBWSlcblxuICB0b2FzdFRpbWVvdXRzLnNldCh0b2FzdElkLCB0aW1lb3V0KVxufVxuXG5leHBvcnQgY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBcIkFERF9UT0FTVFwiOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHRvYXN0czogW2FjdGlvbi50b2FzdCwgLi4uc3RhdGUudG9hc3RzXS5zbGljZSgwLCBUT0FTVF9MSU1JVCksXG4gICAgICB9XG5cbiAgICBjYXNlIFwiVVBEQVRFX1RPQVNUXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgdG9hc3RzOiBzdGF0ZS50b2FzdHMubWFwKCh0KSA9PlxuICAgICAgICAgIHQuaWQgPT09IGFjdGlvbi50b2FzdC5pZCA/IHsgLi4udCwgLi4uYWN0aW9uLnRvYXN0IH0gOiB0XG4gICAgICAgICksXG4gICAgICB9XG5cbiAgICBjYXNlIFwiRElTTUlTU19UT0FTVFwiOiB7XG4gICAgICBjb25zdCB7IHRvYXN0SWQgfSA9IGFjdGlvblxuXG4gICAgICAvLyAhIFNpZGUgZWZmZWN0cyAhIC0gVGhpcyBjb3VsZCBiZSBleHRyYWN0ZWQgaW50byBhIGRpc21pc3NUb2FzdCgpIGFjdGlvbixcbiAgICAgIC8vIGJ1dCBJJ2xsIGtlZXAgaXQgaGVyZSBmb3Igc2ltcGxpY2l0eVxuICAgICAgaWYgKHRvYXN0SWQpIHtcbiAgICAgICAgYWRkVG9SZW1vdmVRdWV1ZSh0b2FzdElkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUudG9hc3RzLmZvckVhY2goKHRvYXN0KSA9PiB7XG4gICAgICAgICAgYWRkVG9SZW1vdmVRdWV1ZSh0b2FzdC5pZClcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHRvYXN0czogc3RhdGUudG9hc3RzLm1hcCgodCkgPT5cbiAgICAgICAgICB0LmlkID09PSB0b2FzdElkIHx8IHRvYXN0SWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4udCxcbiAgICAgICAgICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB0XG4gICAgICAgICksXG4gICAgICB9XG4gICAgfVxuICAgIGNhc2UgXCJSRU1PVkVfVE9BU1RcIjpcbiAgICAgIGlmIChhY3Rpb24udG9hc3RJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgdG9hc3RzOiBbXSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHRvYXN0czogc3RhdGUudG9hc3RzLmZpbHRlcigodCkgPT4gdC5pZCAhPT0gYWN0aW9uLnRvYXN0SWQpLFxuICAgICAgfVxuICB9XG59XG5cbmNvbnN0IGxpc3RlbmVyczogQXJyYXk8KHN0YXRlOiBTdGF0ZSkgPT4gdm9pZD4gPSBbXVxuXG5sZXQgbWVtb3J5U3RhdGU6IFN0YXRlID0geyB0b2FzdHM6IFtdIH1cblxuZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uOiBBY3Rpb24pIHtcbiAgbWVtb3J5U3RhdGUgPSByZWR1Y2VyKG1lbW9yeVN0YXRlLCBhY3Rpb24pXG4gIGxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgIGxpc3RlbmVyKG1lbW9yeVN0YXRlKVxuICB9KVxufVxuXG50eXBlIFRvYXN0ID0gT21pdDxUb2FzdGVyVG9hc3QsIFwiaWRcIj5cblxuZnVuY3Rpb24gdG9hc3QoeyAuLi5wcm9wcyB9OiBUb2FzdCkge1xuICBjb25zdCBpZCA9IGdlbklkKClcblxuICBjb25zdCB1cGRhdGUgPSAocHJvcHM6IFRvYXN0ZXJUb2FzdCkgPT5cbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBcIlVQREFURV9UT0FTVFwiLFxuICAgICAgdG9hc3Q6IHsgLi4ucHJvcHMsIGlkIH0sXG4gICAgfSlcbiAgY29uc3QgZGlzbWlzcyA9ICgpID0+IGRpc3BhdGNoKHsgdHlwZTogXCJESVNNSVNTX1RPQVNUXCIsIHRvYXN0SWQ6IGlkIH0pXG5cbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IFwiQUREX1RPQVNUXCIsXG4gICAgdG9hc3Q6IHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgaWQsXG4gICAgICBvcGVuOiB0cnVlLFxuICAgICAgb25PcGVuQ2hhbmdlOiAob3BlbikgPT4ge1xuICAgICAgICBpZiAoIW9wZW4pIGRpc21pc3MoKVxuICAgICAgfSxcbiAgICB9LFxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgaWQ6IGlkLFxuICAgIGRpc21pc3MsXG4gICAgdXBkYXRlLFxuICB9XG59XG5cbmZ1bmN0aW9uIHVzZVRvYXN0KCkge1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlPFN0YXRlPihtZW1vcnlTdGF0ZSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxpc3RlbmVycy5wdXNoKHNldFN0YXRlKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IGxpc3RlbmVycy5pbmRleE9mKHNldFN0YXRlKVxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzdGF0ZV0pXG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICB0b2FzdCxcbiAgICBkaXNtaXNzOiAodG9hc3RJZD86IHN0cmluZykgPT4gZGlzcGF0Y2goeyB0eXBlOiBcIkRJU01JU1NfVE9BU1RcIiwgdG9hc3RJZCB9KSxcbiAgfVxufVxuXG5leHBvcnQgeyB1c2VUb2FzdCwgdG9hc3QgfVxuIl0sIm5hbWVzIjpbIlJlYWN0IiwiVE9BU1RfTElNSVQiLCJUT0FTVF9SRU1PVkVfREVMQVkiLCJhY3Rpb25UeXBlcyIsIkFERF9UT0FTVCIsIlVQREFURV9UT0FTVCIsIkRJU01JU1NfVE9BU1QiLCJSRU1PVkVfVE9BU1QiLCJjb3VudCIsImdlbklkIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsInRvU3RyaW5nIiwidG9hc3RUaW1lb3V0cyIsIk1hcCIsImFkZFRvUmVtb3ZlUXVldWUiLCJ0b2FzdElkIiwiaGFzIiwidGltZW91dCIsInNldFRpbWVvdXQiLCJkZWxldGUiLCJkaXNwYXRjaCIsInR5cGUiLCJzZXQiLCJyZWR1Y2VyIiwic3RhdGUiLCJhY3Rpb24iLCJ0b2FzdHMiLCJ0b2FzdCIsInNsaWNlIiwibWFwIiwidCIsImlkIiwiZm9yRWFjaCIsInVuZGVmaW5lZCIsIm9wZW4iLCJmaWx0ZXIiLCJsaXN0ZW5lcnMiLCJtZW1vcnlTdGF0ZSIsImxpc3RlbmVyIiwicHJvcHMiLCJ1cGRhdGUiLCJkaXNtaXNzIiwib25PcGVuQ2hhbmdlIiwidXNlVG9hc3QiLCJzZXRTdGF0ZSIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwicHVzaCIsImluZGV4IiwiaW5kZXhPZiIsInNwbGljZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/ui/use-toast.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./hooks/use-email-state.ts":
|
|
/*!**********************************!*\
|
|
!*** ./hooks/use-email-state.ts ***!
|
|
\**********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useEmailState: () => (/* binding */ useEmailState)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_auth_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next-auth/react */ \"(ssr)/./node_modules/next-auth/react/index.js\");\n/* harmony import */ var next_auth_react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_auth_react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _use_toast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./use-toast */ \"(ssr)/./hooks/use-toast.ts\");\n/* harmony import */ var _lib_reducers_emailReducer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/reducers/emailReducer */ \"(ssr)/./lib/reducers/emailReducer.ts\");\n/* harmony import */ var _lib_services_prefetch_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/lib/services/prefetch-service */ \"(ssr)/./lib/services/prefetch-service.ts\");\n/* harmony import */ var _lib_utils_email_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/lib/utils/email-utils */ \"(ssr)/./lib/utils/email-utils.ts\");\n\n\n\n\n\n\nconst useEmailState = ()=>{\n const [state, dispatch] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_lib_reducers_emailReducer__WEBPACK_IMPORTED_MODULE_3__.emailReducer, _lib_reducers_emailReducer__WEBPACK_IMPORTED_MODULE_3__.initialState);\n const { data: session } = (0,next_auth_react__WEBPACK_IMPORTED_MODULE_1__.useSession)();\n const { toast } = (0,_use_toast__WEBPACK_IMPORTED_MODULE_2__.useToast)();\n // Refs to track state\n const updateUnreadTimerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const lastEmailViewedRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const failedFetchCountRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);\n const lastFolderRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const lastPageLoadedRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);\n const prevFolderRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const loadMoreTriggerTimeRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);\n // Expose dispatch function to window for external components\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)({\n \"useEmailState.useEffect\": ()=>{\n // Make dispatch available globally for older code\n window.dispatchEmailAction = dispatch;\n window.__emailStateDispatch = dispatch;\n // Clean up on unmount\n return ({\n \"useEmailState.useEffect\": ()=>{\n window.dispatchEmailAction = undefined;\n window.__emailStateDispatch = undefined;\n }\n })[\"useEmailState.useEffect\"];\n }\n }[\"useEmailState.useEffect\"], [\n dispatch\n ]);\n // Helper function to log operations\n const logEmailOp = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[logEmailOp]\": (operation, details, data)=>{\n const timestamp = new Date().toISOString().split('T')[1].substring(0, 12);\n console.log(`[${timestamp}][EMAIL-STATE][${operation}] ${details}`);\n if (data) {\n console.log(`[${timestamp}][EMAIL-STATE][DATA]`, data);\n }\n }\n }[\"useEmailState.useCallback[logEmailOp]\"], []);\n // Load emails from the server\n const loadEmails = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[loadEmails]\": async (page, perPage, isLoadMore = false)=>{\n // CRITICAL FIX: Do important validation before setting loading state\n if (!session?.user?.id) return;\n // CRITICAL FIX: Always log the isLoadMore parameter\n console.log(`[DEBUG-LOAD_EMAILS] Called with isLoadMore=${isLoadMore}, page=${page}, currentEmails=${state.emails.length}`);\n // Set the current folder and account being loaded to detect changes\n const startFolder = state.currentFolder;\n const startAccount = state.selectedAccount ? state.selectedAccount.id : 'default';\n // CRITICAL FIX: Force loading state to true\n dispatch({\n type: 'SET_LOADING',\n payload: true\n });\n try {\n // Get normalized parameters using helper function with proper account ID handling\n const accountId = state.selectedAccount ? state.selectedAccount.id : undefined;\n const { normalizedFolder, effectiveAccountId, prefixedFolder } = (0,_lib_reducers_emailReducer__WEBPACK_IMPORTED_MODULE_3__.normalizeFolderAndAccount)(state.currentFolder, accountId);\n logEmailOp('LOAD_EMAILS', `Loading emails for ${prefixedFolder} (account: ${effectiveAccountId}, isLoadMore: ${isLoadMore}, page: ${page})`);\n // Construct query parameters\n const queryParams = new URLSearchParams({\n folder: normalizedFolder,\n page: page.toString(),\n perPage: perPage.toString(),\n accountId: effectiveAccountId\n });\n // Debug log existing emails count\n if (isLoadMore) {\n console.log(`[DEBUG-PAGINATION] Loading more emails. Current page: ${page}, existing emails: ${state.emails.length}`);\n }\n // Try to get cached emails first\n logEmailOp('CACHE_CHECK', `Checking cache for ${prefixedFolder}, page: ${page}`);\n const cachedEmails = await (0,_lib_services_prefetch_service__WEBPACK_IMPORTED_MODULE_4__.getCachedEmailsWithTimeout)(session.user.id, prefixedFolder, page, perPage, 100, effectiveAccountId);\n if (cachedEmails) {\n logEmailOp('CACHE_HIT', `Using cached data for ${prefixedFolder}, page: ${page}, emails: ${cachedEmails.emails?.length || 0}, isLoadMore: ${isLoadMore}`);\n // Ensure cached data has emails array property\n if (Array.isArray(cachedEmails.emails)) {\n // CRITICAL FIX: Double check we're using the right action type based on isLoadMore param\n console.log(`[DEBUG-CACHE_HIT] Dispatching ${isLoadMore ? 'APPEND_EMAILS' : 'SET_EMAILS'} with ${cachedEmails.emails.length} emails`);\n // Dispatch appropriate action based on if we're loading more - DO NOT OVERRIDE isLoadMore!\n dispatch({\n type: isLoadMore ? 'APPEND_EMAILS' : 'SET_EMAILS',\n payload: cachedEmails.emails\n });\n // Set pagination info from cache if available\n if (cachedEmails.totalEmails) {\n dispatch({\n type: 'SET_TOTAL_EMAILS',\n payload: cachedEmails.totalEmails\n });\n }\n if (cachedEmails.totalPages) {\n dispatch({\n type: 'SET_TOTAL_PAGES',\n payload: cachedEmails.totalPages\n });\n }\n // Update available mailboxes if provided\n if (cachedEmails.mailboxes && cachedEmails.mailboxes.length > 0) {\n dispatch({\n type: 'SET_MAILBOXES',\n payload: cachedEmails.mailboxes\n });\n }\n }\n // CRITICAL FIX: If this was a loadMore operation, check the result after the dispatch\n if (isLoadMore) {\n setTimeout({\n \"useEmailState.useCallback[loadEmails]\": ()=>{\n console.log(`[DEBUG-CACHE_HIT_APPEND] After ${isLoadMore ? 'APPEND' : 'SET'}, email count is now: ${state.emails.length}`);\n }\n }[\"useEmailState.useCallback[loadEmails]\"], 0);\n }\n return;\n }\n // Fetch emails from API if no cache hit\n logEmailOp('API_FETCH', `Fetching emails from API: ${queryParams.toString()}, isLoadMore: ${isLoadMore}`);\n console.log(`[DEBUG-API_FETCH] Fetching from /api/courrier/emails?${queryParams.toString()}`);\n const response = await fetch(`/api/courrier/emails?${queryParams.toString()}`);\n if (!response.ok) {\n // CRITICAL FIX: Try to recover from fetch errors by retrying with different pagination\n if (isLoadMore && page > 1) {\n logEmailOp('ERROR_RECOVERY', `Failed to fetch emails for page ${page}, attempting to recover by decrementing page`);\n console.log(`[DEBUG-ERROR] API returned ${response.status} for page ${page}`);\n // If we're loading more and there's an error, just decrement the page to avoid getting stuck\n dispatch({\n type: 'SET_PAGE',\n payload: page - 1\n });\n dispatch({\n type: 'SET_LOADING',\n payload: false\n });\n // Also reset total pages to try again\n dispatch({\n type: 'SET_TOTAL_PAGES',\n payload: page\n });\n return;\n }\n const errorData = await response.json();\n throw new Error(errorData.error || 'Failed to fetch emails');\n }\n const data = await response.json();\n console.log(`[DEBUG-API_RESPONSE] Got response with ${data.emails?.length || 0} emails, totalPages: ${data.totalPages}, totalEmails: ${data.totalEmails}, isLoadMore: ${isLoadMore}`);\n // CRITICAL FIX: Enhanced empty results handling\n if (!data.emails || data.emails.length === 0) {\n console.log(`[DEBUG-EMPTY] No emails in response for page ${page}`);\n // If we're at a page > 1 and got no results, the paging is off, so try again with page 1\n if (page > 1 && !isLoadMore) {\n logEmailOp('EMPTY_RESULTS', `No emails returned for page ${page}, resetting to page 1`);\n dispatch({\n type: 'SET_PAGE',\n payload: 1\n });\n dispatch({\n type: 'SET_LOADING',\n payload: false\n });\n return;\n }\n // If we're already at page 1, just update the state with no emails\n if (!isLoadMore) {\n logEmailOp('EMPTY_RESULTS', `No emails found in ${state.currentFolder}`);\n dispatch({\n type: 'SET_EMAILS',\n payload: []\n });\n dispatch({\n type: 'SET_TOTAL_EMAILS',\n payload: 0\n });\n dispatch({\n type: 'SET_TOTAL_PAGES',\n payload: 0\n });\n } else {\n // For load more, just set loading to false but keep existing emails\n dispatch({\n type: 'SET_LOADING',\n payload: false\n });\n }\n return;\n }\n // Ensure all emails have proper account ID and folder format\n if (Array.isArray(data.emails)) {\n // Log email dates for debugging\n if (data.emails.length > 0) {\n logEmailOp('EMAIL_DATES', `First few email dates before processing:`, data.emails.slice(0, 5).map({\n \"useEmailState.useCallback[loadEmails]\": (e)=>({\n id: e.id.substring(0, 8),\n subject: e.subject?.substring(0, 20),\n date: e.date,\n dateObj: new Date(e.date),\n timestamp: new Date(e.date).getTime()\n })\n }[\"useEmailState.useCallback[loadEmails]\"]));\n }\n data.emails.forEach({\n \"useEmailState.useCallback[loadEmails]\": (email)=>{\n // If email doesn't have an accountId, set it to the effective one\n if (!email.accountId) {\n email.accountId = effectiveAccountId;\n }\n // Ensure folder has the proper prefix format\n if (email.folder && !email.folder.includes(':')) {\n email.folder = `${email.accountId}:${email.folder}`;\n }\n // Ensure date is a valid Date object (handle strings or timestamps)\n if (email.date && !(email.date instanceof Date)) {\n try {\n // Convert to a proper Date object if it's a string or number\n const dateObj = new Date(email.date);\n // Verify it's a valid date\n if (!isNaN(dateObj.getTime())) {\n email.date = dateObj;\n }\n } catch (err) {\n // If conversion fails, log and use current date as fallback\n console.error(`Invalid date format for email ${email.id}: ${email.date}`);\n email.date = new Date();\n }\n }\n }\n }[\"useEmailState.useCallback[loadEmails]\"]);\n }\n // CRITICAL FIX: Log what we're about to do\n console.log(`[DEBUG-DISPATCH] About to dispatch ${isLoadMore ? 'APPEND_EMAILS' : 'SET_EMAILS'} with ${data.emails?.length || 0} emails`);\n // Update state with fetched data\n dispatch({\n type: isLoadMore ? 'APPEND_EMAILS' : 'SET_EMAILS',\n payload: Array.isArray(data.emails) ? data.emails : []\n });\n // Double-check that we've updated the email list correctly after dispatch\n setTimeout({\n \"useEmailState.useCallback[loadEmails]\": ()=>{\n console.log(`[DEBUG-AFTER-DISPATCH] Email count is now: ${state.emails.length}, should include the ${data.emails?.length || 0} new emails we just loaded`);\n }\n }[\"useEmailState.useCallback[loadEmails]\"], 0);\n if (data.totalEmails) {\n dispatch({\n type: 'SET_TOTAL_EMAILS',\n payload: data.totalEmails\n });\n }\n if (data.totalPages) {\n dispatch({\n type: 'SET_TOTAL_PAGES',\n payload: data.totalPages\n });\n }\n // Update available mailboxes if provided\n if (data.mailboxes && data.mailboxes.length > 0) {\n dispatch({\n type: 'SET_MAILBOXES',\n payload: data.mailboxes\n });\n }\n } catch (err) {\n logEmailOp('ERROR', `Failed to load emails: ${err instanceof Error ? err.message : String(err)}`);\n dispatch({\n type: 'SET_ERROR',\n payload: err instanceof Error ? err.message : 'Failed to load emails'\n });\n toast({\n variant: \"destructive\",\n title: \"Error\",\n description: err instanceof Error ? err.message : 'Failed to load emails'\n });\n } finally{\n // CRITICAL FIX: Only clear loading state if the folder/account hasn't changed\n if (startFolder === state.currentFolder && startAccount === (state.selectedAccount?.id || 'default')) {\n // Safe to clear loading state\n dispatch({\n type: 'SET_LOADING',\n payload: false\n });\n } else {\n console.log(`[DEBUG-LOAD_EMAILS] Folder/account changed during load, not clearing loading state`);\n }\n }\n }\n }[\"useEmailState.useCallback[loadEmails]\"], [\n session?.user?.id,\n state.currentFolder,\n state.selectedAccount,\n state.page,\n state.perPage,\n state.emails.length,\n toast,\n logEmailOp\n ]);\n // Change folder\n const changeFolder = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[changeFolder]\": async (folder, accountId)=>{\n logEmailOp('CHANGE_FOLDER', `Changing to folder ${folder} with account ${accountId || 'default'}`);\n try {\n // CRITICAL FIX: Reset pagination state immediately\n lastPageLoadedRef.current = 0;\n // Reset page to 1 directly to prevent any issues with page effects\n // This will be atomic with the CHANGE_FOLDER action\n dispatch({\n type: 'SET_PAGE',\n payload: 1\n });\n // Clear existing emails - don't show old emails during load\n dispatch({\n type: 'SET_EMAILS',\n payload: []\n });\n // Set loading state explicitly - this is critical\n dispatch({\n type: 'SET_LOADING',\n payload: true\n });\n // This will handle folder setting in a single atomic operation\n dispatch({\n type: 'CHANGE_FOLDER',\n payload: {\n folder,\n accountId: accountId || 'default'\n }\n });\n // CRITICAL: The email loading will be triggered by the folder effect\n // We don't need to call loadEmails directly here\n } catch (error) {\n logEmailOp('ERROR', `Failed to change folder: ${error instanceof Error ? error.message : String(error)}`);\n dispatch({\n type: 'SET_ERROR',\n payload: error instanceof Error ? error.message : 'Failed to change folder'\n });\n // Always ensure loading state is cleared on error\n dispatch({\n type: 'SET_LOADING',\n payload: false\n });\n }\n }\n }[\"useEmailState.useCallback[changeFolder]\"], [\n logEmailOp,\n dispatch\n ]);\n // Select account\n const selectAccount = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[selectAccount]\": (account)=>{\n logEmailOp('SELECT_ACCOUNT', `Selecting account: ${account.email} (${account.id})`);\n // Handle the entire account selection in a single atomic operation\n dispatch({\n type: 'SELECT_ACCOUNT',\n payload: account\n });\n // The folder loading will be triggered by the useEffect watching for currentFolder changes\n }\n }[\"useEmailState.useCallback[selectAccount]\"], [\n logEmailOp\n ]);\n // Handle email selection\n const handleEmailSelect = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[handleEmailSelect]\": async (emailId, accountId, folder)=>{\n logEmailOp('SELECT_EMAIL', `Selecting email ${emailId} from account ${accountId} in folder ${folder}`);\n if (!emailId) {\n dispatch({\n type: 'SELECT_EMAIL',\n payload: {\n emailId: '',\n accountId: '',\n folder: '',\n email: null\n }\n });\n return;\n }\n try {\n // Find the email in the current list\n const existingEmail = state.emails.find({\n \"useEmailState.useCallback[handleEmailSelect].existingEmail\": (e)=>e.id === emailId\n }[\"useEmailState.useCallback[handleEmailSelect].existingEmail\"]);\n if (existingEmail && existingEmail.contentFetched) {\n // Use the existing email if it has content already\n dispatch({\n type: 'SELECT_EMAIL',\n payload: {\n emailId,\n accountId,\n folder,\n email: existingEmail\n }\n });\n // Mark as read if not already\n if (!existingEmail.flags.seen) {\n markEmailAsRead(emailId, true, accountId);\n }\n return;\n }\n // Need to fetch the email content\n dispatch({\n type: 'SET_LOADING',\n payload: true\n });\n // Extract account ID from folder name if present and none was explicitly provided\n const { normalizedFolder, effectiveAccountId } = (0,_lib_reducers_emailReducer__WEBPACK_IMPORTED_MODULE_3__.normalizeFolderAndAccount)(folder, accountId);\n // Fetch email content from API\n const response = await fetch(`/api/courrier/${emailId}?folder=${normalizedFolder}&accountId=${effectiveAccountId}`);\n if (!response.ok) {\n throw new Error(`Failed to fetch email content: ${response.status}`);\n }\n const emailData = await response.json();\n // Mark the email as read on the server\n markEmailAsRead(emailId, true, effectiveAccountId);\n // Select the email\n dispatch({\n type: 'SELECT_EMAIL',\n payload: {\n emailId,\n accountId: effectiveAccountId,\n folder,\n email: emailData\n }\n });\n } catch (error) {\n logEmailOp('ERROR', `Failed to select email: ${error instanceof Error ? error.message : String(error)}`);\n dispatch({\n type: 'SET_ERROR',\n payload: error instanceof Error ? error.message : 'Failed to select email'\n });\n } finally{\n dispatch({\n type: 'SET_LOADING',\n payload: false\n });\n }\n }\n }[\"useEmailState.useCallback[handleEmailSelect]\"], [\n state.emails,\n logEmailOp\n ]);\n // Toggle email selection for multi-select\n const toggleEmailSelection = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[toggleEmailSelection]\": (emailId)=>{\n dispatch({\n type: 'TOGGLE_EMAIL_SELECTION',\n payload: emailId\n });\n }\n }[\"useEmailState.useCallback[toggleEmailSelection]\"], []);\n // Toggle select all\n const toggleSelectAll = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[toggleSelectAll]\": ()=>{\n dispatch({\n type: 'TOGGLE_SELECT_ALL'\n });\n }\n }[\"useEmailState.useCallback[toggleSelectAll]\"], []);\n // Mark email as read/unread\n const markEmailAsRead = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[markEmailAsRead]\": async (emailId, isRead, accountId)=>{\n try {\n // Find the email to get its account ID if not provided\n const email = state.emails.find({\n \"useEmailState.useCallback[markEmailAsRead].email\": (e)=>e.id === emailId\n }[\"useEmailState.useCallback[markEmailAsRead].email\"]);\n const effectiveAccountId = accountId || email?.accountId || 'default';\n const folder = email?.folder || state.currentFolder;\n // Extract normalized folder\n const { normalizedFolder } = (0,_lib_reducers_emailReducer__WEBPACK_IMPORTED_MODULE_3__.normalizeFolderAndAccount)(folder, effectiveAccountId);\n logEmailOp('MARK_READ', `Marking email ${emailId} as ${isRead ? 'read' : 'unread'} in ${normalizedFolder}`);\n // Update UI state immediately (optimistic update)\n dispatch({\n type: 'MARK_EMAIL_AS_READ',\n payload: {\n emailId,\n isRead,\n accountId: effectiveAccountId\n }\n });\n // NOTE: Don't update unread counts here - that's now handled by the updateUnreadCounts function\n // which is triggered by the email update above via the useEffect\n // Make API call to update on server\n const response = await fetch(`/api/courrier/${emailId}/mark-read`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n isRead,\n folder: normalizedFolder,\n accountId: effectiveAccountId\n })\n });\n if (!response.ok) {\n throw new Error('Failed to mark email as read');\n }\n return true;\n } catch (error) {\n logEmailOp('ERROR', `Failed to mark email as read: ${error instanceof Error ? error.message : String(error)}`);\n toast({\n variant: \"destructive\",\n title: \"Error\",\n description: 'Failed to update email read status'\n });\n return false;\n }\n }\n }[\"useEmailState.useCallback[markEmailAsRead]\"], [\n state.emails,\n state.currentFolder,\n toast,\n logEmailOp\n ]);\n // Toggle starred status\n const toggleStarred = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[toggleStarred]\": async (emailId)=>{\n try {\n // Find the email in current list\n const email = state.emails.find({\n \"useEmailState.useCallback[toggleStarred].email\": (e)=>e.id === emailId\n }[\"useEmailState.useCallback[toggleStarred].email\"]);\n if (!email) {\n throw new Error('Email not found');\n }\n const newFlaggedStatus = !email.flags.flagged;\n logEmailOp('TOGGLE_STAR', `Setting starred status to ${newFlaggedStatus} for email ${emailId}`);\n // TODO: Implement optimistic update\n // Make API call\n const response = await fetch(`/api/courrier/${emailId}/flag`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n flagged: newFlaggedStatus,\n folder: email.folder,\n accountId: email.accountId\n })\n });\n if (!response.ok) {\n throw new Error('Failed to update star status');\n }\n // Reload emails to get updated state\n loadEmails(state.page, state.perPage, true);\n return true;\n } catch (error) {\n logEmailOp('ERROR', `Failed to toggle star: ${error instanceof Error ? error.message : String(error)}`);\n toast({\n variant: \"destructive\",\n title: \"Error\",\n description: 'Failed to update star status'\n });\n return false;\n }\n }\n }[\"useEmailState.useCallback[toggleStarred]\"], [\n state.emails,\n toast,\n loadEmails,\n logEmailOp\n ]);\n // Function to check for new emails without disrupting the user\n const checkForNewEmails = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[checkForNewEmails]\": async ()=>{\n if (!session?.user?.id) return;\n // Don't check if already loading emails\n if (state.isLoading) return;\n try {\n // Get normalized parameters using helper function\n const accountId = state.selectedAccount ? state.selectedAccount.id : undefined;\n const { normalizedFolder, effectiveAccountId, prefixedFolder } = (0,_lib_reducers_emailReducer__WEBPACK_IMPORTED_MODULE_3__.normalizeFolderAndAccount)(state.currentFolder, accountId);\n logEmailOp('CHECK_NEW_EMAILS', `Checking for new emails in ${prefixedFolder}`);\n // Quietly check for new emails with a special parameter\n const queryParams = new URLSearchParams({\n folder: normalizedFolder,\n page: '1',\n perPage: '1',\n accountId: effectiveAccountId,\n checkOnly: 'true' // Special parameter to indicate this is just a check\n });\n const response = await fetch(`/api/courrier/emails?${queryParams.toString()}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n },\n cache: 'no-cache'\n });\n if (!response.ok) {\n throw new Error(`Failed to check for new emails: ${response.status}`);\n }\n const data = await response.json();\n // Store the latest email's ID for easier reference\n const lastKnownEmailId = state.emails.length > 0 ? parseInt(state.emails[0].id) : 0;\n // Use newestEmailId from API response (more reliable than checking emails array)\n if (data.newestEmailId && data.newestEmailId > lastKnownEmailId) {\n logEmailOp('NEW_EMAILS', `Found new emails, newest ID: ${data.newestEmailId} (current: ${lastKnownEmailId})`);\n // Show a toast notification with the new custom variant\n toast({\n variant: \"new-email\",\n title: \"New emails\",\n description: \"You have new emails in your inbox\",\n duration: 5000\n });\n // Full refresh just like the refresh button in sidebar\n // Reset to page 1 to ensure we get the newest emails\n dispatch({\n type: 'SET_PAGE',\n payload: 1\n });\n loadEmails(1, state.perPage, false);\n // Also update unread counts - this will be handled in the effect\n // The fetchUnreadCounts function will be available when this callback is called\n } else {\n logEmailOp('CHECK_NEW_EMAILS', 'No new emails found');\n }\n } catch (error) {\n console.error('Error checking for new emails:', error);\n }\n }\n }[\"useEmailState.useCallback[checkForNewEmails]\"], [\n session?.user?.id,\n state.currentFolder,\n state.isLoading,\n state.emails,\n state.perPage,\n toast,\n loadEmails,\n logEmailOp,\n dispatch\n ]);\n // Delete emails\n const deleteEmails = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[deleteEmails]\": async (emailIds)=>{\n if (emailIds.length === 0) return;\n dispatch({\n type: 'SET_LOADING',\n payload: true\n });\n try {\n logEmailOp('DELETE', `Deleting ${emailIds.length} emails`);\n // Find the first email to get account ID and folder\n const firstEmail = state.emails.find({\n \"useEmailState.useCallback[deleteEmails].firstEmail\": (e)=>e.id === emailIds[0]\n }[\"useEmailState.useCallback[deleteEmails].firstEmail\"]);\n const accountId = firstEmail?.accountId || 'default';\n const folder = firstEmail?.folder || state.currentFolder;\n const { normalizedFolder } = (0,_lib_reducers_emailReducer__WEBPACK_IMPORTED_MODULE_3__.normalizeFolderAndAccount)(folder, accountId);\n // Make API call to delete emails\n const response = await fetch('/api/courrier/delete', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n emailIds,\n folder: normalizedFolder,\n accountId\n })\n });\n if (!response.ok) {\n throw new Error('Failed to delete emails');\n }\n // Clear selections\n dispatch({\n type: 'CLEAR_SELECTED_EMAILS'\n });\n // Show toast notification\n toast({\n title: \"Emails Deleted\",\n description: `${emailIds.length} email(s) moved to trash`\n });\n // Full refresh just like the refresh button in sidebar\n // Reset to page 1 to ensure we get the updated email list\n dispatch({\n type: 'SET_PAGE',\n payload: 1\n });\n loadEmails(1, state.perPage, false);\n // Also update unread counts - this will be handled in the effect\n // The fetchUnreadCounts function will be available when this callback is called\n return true;\n } catch (error) {\n logEmailOp('ERROR', `Failed to delete emails: ${error instanceof Error ? error.message : String(error)}`);\n toast({\n variant: \"destructive\",\n title: \"Error\",\n description: 'Failed to delete emails'\n });\n return false;\n } finally{\n dispatch({\n type: 'SET_LOADING',\n payload: false\n });\n }\n }\n }[\"useEmailState.useCallback[deleteEmails]\"], [\n state.emails,\n state.currentFolder,\n state.perPage,\n toast,\n loadEmails,\n logEmailOp,\n dispatch\n ]);\n // Send email\n const sendEmail = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[sendEmail]\": async (emailData)=>{\n dispatch({\n type: 'SET_LOADING',\n payload: true\n });\n try {\n logEmailOp('SEND', `Sending email to ${emailData.to}`);\n // Make API call to send email\n const response = await fetch('/api/courrier/send', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(emailData)\n });\n if (!response.ok) {\n const errorData = await response.json();\n throw new Error(errorData.error || 'Failed to send email');\n }\n const result = await response.json();\n toast({\n title: \"Email Sent\",\n description: \"Your message has been sent successfully\"\n });\n // Wait a moment for the email to be available in the sent folder\n // (emails may need time to be stored on IMAP server)\n setTimeout({\n \"useEmailState.useCallback[sendEmail]\": ()=>{\n // Check for new emails and refresh mailbox\n checkForNewEmails();\n // Refresh emails to show the sent email in current view\n loadEmails(state.page, state.perPage, false);\n }\n }[\"useEmailState.useCallback[sendEmail]\"], 1500);\n return {\n success: true,\n ...result\n };\n } catch (error) {\n logEmailOp('ERROR', `Failed to send email: ${error instanceof Error ? error.message : String(error)}`);\n toast({\n variant: \"destructive\",\n title: \"Error\",\n description: error instanceof Error ? error.message : 'Failed to send email'\n });\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to send email'\n };\n } finally{\n dispatch({\n type: 'SET_LOADING',\n payload: false\n });\n }\n }\n }[\"useEmailState.useCallback[sendEmail]\"], [\n toast,\n loadEmails,\n logEmailOp,\n checkForNewEmails\n ]);\n // Search emails\n const searchEmails = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[searchEmails]\": async (query)=>{\n // Set loading state\n dispatch({\n type: 'SET_LOADING',\n payload: true\n });\n try {\n if (!session?.user?.id) return;\n logEmailOp('SEARCH', `Searching for \"${query}\" in ${state.currentFolder}`);\n // Extract account ID from current folder\n const { normalizedFolder, effectiveAccountId } = (0,_lib_reducers_emailReducer__WEBPACK_IMPORTED_MODULE_3__.normalizeFolderAndAccount)(state.currentFolder);\n // Construct query params for search\n const queryParams = new URLSearchParams({\n folder: normalizedFolder,\n search: query,\n accountId: effectiveAccountId\n });\n // Call API for search\n const response = await fetch(`/api/courrier/search?${queryParams.toString()}`);\n if (!response.ok) {\n const errorData = await response.json();\n throw new Error(errorData.error || 'Failed to search emails');\n }\n const results = await response.json();\n // Update emails with search results\n dispatch({\n type: 'SET_EMAILS',\n payload: results.emails || []\n });\n if (results.totalEmails) {\n dispatch({\n type: 'SET_TOTAL_EMAILS',\n payload: results.totalEmails\n });\n }\n if (results.totalPages) {\n dispatch({\n type: 'SET_TOTAL_PAGES',\n payload: results.totalPages\n });\n }\n } catch (error) {\n logEmailOp('ERROR', `Search failed: ${error instanceof Error ? error.message : String(error)}`);\n dispatch({\n type: 'SET_ERROR',\n payload: error instanceof Error ? error.message : 'Failed to search emails'\n });\n toast({\n variant: \"destructive\",\n title: \"Error\",\n description: 'Failed to search emails'\n });\n } finally{\n dispatch({\n type: 'SET_LOADING',\n payload: false\n });\n }\n }\n }[\"useEmailState.useCallback[searchEmails]\"], [\n session?.user?.id,\n state.currentFolder,\n toast,\n logEmailOp\n ]);\n // Format email for reply, reply all, or forward\n const formatEmailForAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[formatEmailForAction]\": (email, type)=>{\n return (0,_lib_utils_email_utils__WEBPACK_IMPORTED_MODULE_5__.formatEmailForReplyOrForward)(email, type);\n }\n }[\"useEmailState.useCallback[formatEmailForAction]\"], []);\n // Update page\n const setPage = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[setPage]\": (page)=>{\n dispatch({\n type: 'SET_PAGE',\n payload: page\n });\n }\n }[\"useEmailState.useCallback[setPage]\"], []);\n // Set emails directly\n const setEmails = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[setEmails]\": (emails)=>{\n dispatch({\n type: 'SET_EMAILS',\n payload: emails\n });\n }\n }[\"useEmailState.useCallback[setEmails]\"], []);\n // Handle loading more emails\n const handleLoadMore = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[handleLoadMore]\": ()=>{\n // Don't load more if already loading or if there are no more pages\n if (state.isLoading || state.page >= state.totalPages) {\n console.log(`[LOAD_MORE] Skipping load more - already loading: ${state.isLoading}, page: ${state.page}, totalPages: ${state.totalPages}`);\n return;\n }\n // Log the current state\n console.log(`[LOAD_MORE] Loading more emails for ${state.currentFolder}, currentPage: ${state.page}, totalPages: ${state.totalPages}, current email count: ${state.emails.length}`);\n // Set loading state immediately to prevent double-loading\n dispatch({\n type: 'SET_LOADING',\n payload: true\n });\n // Calculate next page\n const nextPage = state.page + 1;\n // Update the page state - fix type issue\n dispatch({\n type: 'SET_PAGE',\n payload: nextPage\n });\n // CRITICAL FIX: Update the lastLoadedPage ref to track pagination state\n lastPageLoadedRef.current = nextPage;\n // Load the next page\n loadEmails(nextPage, state.perPage, true).then({\n \"useEmailState.useCallback[handleLoadMore]\": ()=>{\n console.log(`[LOAD_MORE] Completed loading more emails for page ${nextPage}`);\n }\n }[\"useEmailState.useCallback[handleLoadMore]\"]);\n }\n }[\"useEmailState.useCallback[handleLoadMore]\"], [\n state.isLoading,\n state.page,\n state.totalPages,\n state.currentFolder,\n state.emails.length,\n state.perPage,\n dispatch,\n loadEmails\n ]);\n // Effect to load emails when folder changes\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)({\n \"useEmailState.useEffect\": ()=>{\n if (session?.user?.id && state.currentFolder) {\n // CRITICAL FIX: REMOVE this check that's causing the problem\n // Instead, detect a real folder change and always load when that happens\n // Extract account ID for consistent loading\n const { effectiveAccountId } = (0,_lib_reducers_emailReducer__WEBPACK_IMPORTED_MODULE_3__.normalizeFolderAndAccount)(state.currentFolder);\n // Track if the folder actually changed\n const folderChanged = prevFolderRef.current !== state.currentFolder;\n if (folderChanged) {\n console.log(`[DEBUG-FOLDER_EFFECT] Folder changed from ${prevFolderRef.current} to ${state.currentFolder}`);\n prevFolderRef.current = state.currentFolder;\n // CRITICAL FIX: Always reset pagination state when folder actually changes\n console.log(`[DEBUG-FOLDER_EFFECT] Folder changed - resetting pagination state`);\n // Reset page to 1 AND reset lastPageLoadedRef to ensure we load\n lastPageLoadedRef.current = 0;\n if (state.page !== 1) {\n console.log(`[DEBUG-FOLDER_EFFECT] Resetting page to 1 because folder changed`);\n dispatch({\n type: 'SET_PAGE',\n payload: 1\n });\n }\n // CRITICAL FIX: Clear emails and set loading when folder changes\n dispatch({\n type: 'SET_EMAILS',\n payload: []\n });\n dispatch({\n type: 'SET_LOADING',\n payload: true\n });\n // CRITICAL FIX: Always load emails when folder changes, no matter what\n console.log(`[DEBUG-FOLDER_EFFECT] Loading emails for new folder: ${state.currentFolder}`);\n loadEmails(1, state.perPage, false);\n return; // Exit early after handling folder change\n }\n // If no folder change detected, only load if on page 1 and not already loaded\n if (state.page === 1 && lastPageLoadedRef.current === 0) {\n logEmailOp('FOLDER_LOAD', `Loading initial emails for folder ${state.currentFolder}`);\n loadEmails(state.page, state.perPage, false);\n }\n }\n }\n }[\"useEmailState.useEffect\"], [\n session?.user?.id,\n state.currentFolder,\n state.page,\n state.perPage,\n loadEmails,\n logEmailOp,\n dispatch\n ]);\n // Effect to load more emails when page changes\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)({\n \"useEmailState.useEffect\": ()=>{\n if (!session?.user?.id || !state.currentFolder) return;\n // Make sure we're on at least page 1\n if (state.page < 1) {\n dispatch({\n type: 'SET_PAGE',\n payload: 1\n });\n return;\n }\n console.log(`[DEBUG-PAGE_EFFECT] Page changed to ${state.page}`);\n // CRITICAL FIX: Add a special case for page 1 loads - we should never skip loading the first page\n // This ensures that after a folder change, page 1 always loads even if loading state is true\n if (state.page === 1) {\n const currentFolder = state.currentFolder;\n const lastLoadedFolder = prevFolderRef.current;\n // Check if this is a fresh folder load (folder changed or first time loading)\n if (currentFolder !== lastLoadedFolder || lastPageLoadedRef.current === 0) {\n // Force loading page 1 for new folders, regardless of loading state\n console.log(`[DEBUG-PAGE_EFFECT] Force loading page 1 for folder: ${currentFolder}`);\n // Set the loading state explicitly (might already be true)\n dispatch({\n type: 'SET_LOADING',\n payload: true\n });\n // Update refs to track the current state\n prevFolderRef.current = currentFolder;\n lastPageLoadedRef.current = 1;\n // Call loadEmails to load the first page - never skip this!\n loadEmails(1, state.perPage, false);\n return;\n }\n }\n // For pages > 1 or already loaded folders, follow normal rules\n // Skip if already loading\n if (state.isLoading) {\n console.log(`[DEBUG-PAGE_EFFECT] Skipping effect execution entirely - already loading`);\n return;\n }\n // Normalize folder and get account ID\n const { effectiveAccountId } = (0,_lib_reducers_emailReducer__WEBPACK_IMPORTED_MODULE_3__.normalizeFolderAndAccount)(state.currentFolder);\n // Check if this is a duplicate page load\n if (state.page === lastPageLoadedRef.current) {\n console.log(`[DEBUG-PAGE_EFFECT] Skipping - already loaded page ${state.page}`);\n return;\n }\n // Skip loads for zero-based pages\n if (state.page === 0) {\n console.log(`[DEBUG-PAGE_EFFECT] Skipping load for invalid page ${state.page}`);\n return;\n }\n // Update our reference to prevent duplicate loads\n lastPageLoadedRef.current = state.page;\n // Always use isLoadMore=true when page > 1\n console.log(`[DEBUG-PAGE_EFFECT] Calling loadEmails with isLoadMore=true for page ${state.page}`);\n loadEmails(state.page, state.perPage, true);\n // Do NOT include state.emails.length here to prevent infinite loops\n }\n }[\"useEmailState.useEffect\"], [\n session?.user?.id,\n state.page,\n state.currentFolder,\n state.isLoading,\n state.perPage,\n loadEmails,\n logEmailOp,\n dispatch\n ]);\n // Fetch unread counts from API\n const fetchUnreadCounts = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[fetchUnreadCounts]\": async ()=>{\n if (!session?.user) return;\n // Don't fetch if we're already fetching\n if (state.isLoadingUnreadCounts) return;\n // Skip fetching if an email was viewed recently (within last 5 seconds)\n const now = Date.now();\n // Initialize the ref to the current time if it's null\n if (lastEmailViewedRef.current === null) {\n lastEmailViewedRef.current = now;\n }\n // Now we can safely use it since we've initialized it\n if (now - lastEmailViewedRef.current < 5000) {\n console.log('Skipping unread count update - email viewed recently');\n return;\n }\n // Try to get from sessionStorage first for faster response\n try {\n const storageKey = `unread_counts_${session.user.id}`;\n const storedData = sessionStorage.getItem(storageKey);\n if (storedData) {\n const { data, timestamp } = JSON.parse(storedData);\n // Use stored data if it's less than 30 seconds old\n if (now - timestamp < 30000) {\n logEmailOp('FETCH_UNREAD', 'Using sessionStorage data', {\n age: Math.round((now - timestamp) / 1000) + 's'\n });\n dispatch({\n type: 'SET_UNREAD_COUNTS',\n payload: data\n });\n return;\n }\n }\n } catch (err) {\n // Ignore storage errors\n }\n // Reset failure tracking if it's been more than 1 minute since last failure\n if (window.__unreadCountFailures?.lastFailureTime && now - window.__unreadCountFailures.lastFailureTime > 60000) {\n window.__unreadCountFailures = {\n count: 0,\n lastFailureTime: 0\n };\n }\n // Exponential backoff for failures with proper tracking object\n if (!window.__unreadCountFailures) {\n window.__unreadCountFailures = {\n count: 0,\n lastFailureTime: 0\n };\n }\n if (window.__unreadCountFailures.count > 0) {\n const failures = window.__unreadCountFailures.count;\n const backoffMs = Math.min(30000, 1000 * Math.pow(2, failures - 1));\n if (now - window.__unreadCountFailures.lastFailureTime < backoffMs) {\n logEmailOp('BACKOFF', `Skipping unread fetch, in backoff period (${backoffMs}ms)`);\n return;\n }\n }\n try {\n dispatch({\n type: 'SET_LOADING_UNREAD_COUNTS',\n payload: true\n });\n const timeBeforeCall = performance.now();\n logEmailOp('FETCH_UNREAD', 'Fetching unread counts from API');\n const response = await fetch('/api/courrier/unread-counts', {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n },\n // Add cache control headers\n cache: 'no-cache',\n next: {\n revalidate: 0\n }\n });\n if (!response.ok) {\n // If request failed, track failures properly\n window.__unreadCountFailures.count = Math.min(window.__unreadCountFailures.count + 1, 10);\n window.__unreadCountFailures.lastFailureTime = now;\n const failures = window.__unreadCountFailures.count;\n if (failures > 3) {\n // After 3 failures, slow down requests with exponential backoff\n const backoffTime = Math.min(Math.pow(2, failures - 3) * 1000, 30000); // Max 30 seconds\n logEmailOp('FETCH_UNREAD', `API failure #${failures}, backing off for ${backoffTime}ms`);\n // Schedule next attempt with backoff\n if (window.__failureBackoffTimer) {\n clearTimeout(window.__failureBackoffTimer);\n }\n window.__failureBackoffTimer = setTimeout({\n \"useEmailState.useCallback[fetchUnreadCounts]\": ()=>{\n fetchUnreadCounts();\n }\n }[\"useEmailState.useCallback[fetchUnreadCounts]\"], backoffTime);\n throw new Error(`Failed to fetch unread counts: ${response.status}`);\n }\n } else {\n // Reset failure counter on success\n window.__unreadCountFailures = {\n count: 0,\n lastFailureTime: 0\n };\n const data = await response.json();\n const timeAfterCall = performance.now();\n // Skip if we got the \"pending_refresh\" status\n if (data._status === 'pending_refresh') {\n logEmailOp('FETCH_UNREAD', 'Server is refreshing counts, will try again soon');\n // Retry after a short delay\n setTimeout({\n \"useEmailState.useCallback[fetchUnreadCounts]\": ()=>{\n fetchUnreadCounts();\n }\n }[\"useEmailState.useCallback[fetchUnreadCounts]\"], 2000);\n return;\n }\n logEmailOp('FETCH_UNREAD', `Received unread counts in ${(timeAfterCall - timeBeforeCall).toFixed(2)}ms`);\n if (data && typeof data === 'object') {\n dispatch({\n type: 'SET_UNREAD_COUNTS',\n payload: data\n });\n // Store in sessionStorage for faster future access\n try {\n sessionStorage.setItem(`unread_counts_${session.user.id}`, JSON.stringify({\n data,\n timestamp: now\n }));\n } catch (err) {\n // Ignore storage errors\n }\n }\n }\n } catch (error) {\n console.error('Error fetching unread counts:', error);\n } finally{\n dispatch({\n type: 'SET_LOADING_UNREAD_COUNTS',\n payload: false\n });\n }\n }\n }[\"useEmailState.useCallback[fetchUnreadCounts]\"], [\n dispatch,\n session?.user,\n state.isLoadingUnreadCounts,\n logEmailOp\n ]);\n // Calculate and update unread counts\n const updateUnreadCounts = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[updateUnreadCounts]\": ()=>{\n // Skip if no emails or accounts\n if (state.emails.length === 0 || state.accounts.length === 0) return;\n // To avoid running this too frequently, check the timestamp of last update\n if (!window.__lastUnreadUpdate) {\n window.__lastUnreadUpdate = {\n timestamp: 0\n };\n }\n const now = Date.now();\n const lastUpdate = window.__lastUnreadUpdate;\n const MIN_UPDATE_INTERVAL = 10000; // 10 seconds minimum between updates (increased from 2s)\n if (now - lastUpdate.timestamp < MIN_UPDATE_INTERVAL) {\n return; // Skip if updated too recently\n }\n // Rather than calculating locally, fetch from the API\n fetchUnreadCounts();\n // Update timestamp of last update\n lastUpdate.timestamp = now;\n }\n }[\"useEmailState.useCallback[updateUnreadCounts]\"], [\n state.emails.length,\n state.accounts.length,\n fetchUnreadCounts\n ]);\n // Call updateUnreadCounts when relevant state changes\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)({\n \"useEmailState.useEffect\": ()=>{\n if (!state.emails || state.emails.length === 0) return;\n // Debounce unread count updates to prevent rapid multiple updates\n let updateTimeoutId;\n const debounceMs = 5000; // Increase debounce to 5 seconds (from 2s)\n // Function to call after debounce period\n const debouncedUpdate = {\n \"useEmailState.useEffect.debouncedUpdate\": ()=>{\n updateTimeoutId = setTimeout({\n \"useEmailState.useEffect.debouncedUpdate\": ()=>{\n updateUnreadCounts();\n }\n }[\"useEmailState.useEffect.debouncedUpdate\"], debounceMs);\n }\n }[\"useEmailState.useEffect.debouncedUpdate\"];\n // Clear any existing timeout and start a new one\n debouncedUpdate();\n // Also set up a periodic refresh every minute if the tab is active\n const periodicRefreshId = setInterval({\n \"useEmailState.useEffect.periodicRefreshId\": ()=>{\n if (document.visibilityState === 'visible') {\n updateUnreadCounts();\n }\n }\n }[\"useEmailState.useEffect.periodicRefreshId\"], 60000); // 1 minute\n // Cleanup timeout on unmount or state change\n return ({\n \"useEmailState.useEffect\": ()=>{\n clearTimeout(updateTimeoutId);\n clearInterval(periodicRefreshId);\n }\n })[\"useEmailState.useEffect\"];\n // Deliberately exclude unreadCountMap to prevent infinite loops\n }\n }[\"useEmailState.useEffect\"], [\n state.emails,\n updateUnreadCounts\n ]);\n // Set up periodic check for new emails\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)({\n \"useEmailState.useEffect\": ()=>{\n if (!state.emails || state.emails.length === 0) return;\n // Set up a periodic check for new emails at the same interval as unread counts\n const checkNewEmailsId = setInterval({\n \"useEmailState.useEffect.checkNewEmailsId\": ()=>{\n if (document.visibilityState === 'visible') {\n checkForNewEmails();\n }\n }\n }[\"useEmailState.useEffect.checkNewEmailsId\"], 60000); // 1 minute - same as unread count refresh\n // Cleanup interval on unmount or state change\n return ({\n \"useEmailState.useEffect\": ()=>{\n clearInterval(checkNewEmailsId);\n }\n })[\"useEmailState.useEffect\"];\n }\n }[\"useEmailState.useEffect\"], [\n state.emails,\n checkForNewEmails\n ]);\n // Tracking when an email is viewed to optimize unread count refreshes\n const lastViewedEmailRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const fetchFailuresRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);\n const lastFetchFailureRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n // Modify viewEmail to track when an email is viewed\n const viewEmail = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[viewEmail]\": (emailId, accountId, folder, email)=>{\n dispatch({\n type: 'SELECT_EMAIL',\n payload: {\n emailId,\n accountId,\n folder,\n email\n }\n });\n // Track when an email is viewed to delay unread count refresh\n if (email) {\n lastViewedEmailRef.current = Date.now();\n // If email is unread, mark it as read\n if (email.flags && !email.flags.seen) {\n dispatch({\n type: 'MARK_EMAIL_AS_READ',\n payload: {\n emailId,\n isRead: true,\n accountId\n }\n });\n }\n } else {\n // Email was deselected, schedule a refresh of unread counts after delay\n setTimeout({\n \"useEmailState.useCallback[viewEmail]\": ()=>{\n fetchUnreadCounts();\n }\n }[\"useEmailState.useCallback[viewEmail]\"], 2000);\n }\n }\n }[\"useEmailState.useCallback[viewEmail]\"], [\n dispatch,\n fetchUnreadCounts\n ]);\n // Set up a function to manually trigger checking for new emails\n const forceCheckForNewEmails = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)({\n \"useEmailState.useCallback[forceCheckForNewEmails]\": ()=>{\n // Don't check if we're already loading\n if (state.isLoading) return;\n // Log that we're manually checking\n logEmailOp('MANUAL_CHECK', 'Manually checking for new emails');\n // Reset to page 1 to ensure we get the newest emails\n dispatch({\n type: 'SET_PAGE',\n payload: 1\n });\n // Perform a complete refresh of emails\n loadEmails(1, state.perPage, false);\n // Also update unread counts\n fetchUnreadCounts();\n }\n }[\"useEmailState.useCallback[forceCheckForNewEmails]\"], [\n state.isLoading,\n state.perPage,\n loadEmails,\n logEmailOp,\n dispatch,\n fetchUnreadCounts\n ]);\n // Return all state values and actions\n return {\n // State values\n ...state,\n // Actions\n loadEmails,\n handleEmailSelect,\n toggleEmailSelection,\n toggleSelectAll,\n markEmailAsRead,\n toggleStarred,\n changeFolder,\n deleteEmails,\n sendEmail,\n searchEmails,\n formatEmailForAction,\n setPage,\n setEmails,\n selectAccount,\n handleLoadMore,\n fetchUnreadCounts,\n viewEmail,\n checkForNewEmails,\n forceCheckForNewEmails\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVlDLFNBQVM7WUFBRTtZQUV4Qyx1Q0FBdUM7WUFDdkNiLFdBQVcsR0FBRzFCLE1BQU00QixPQUFPLEVBQUU7WUFFN0IsNEJBQTRCO1lBQzVCdUc7UUFDRjs0REFBRztRQUFDbkksTUFBTXlHLFNBQVM7UUFBRXpHLE1BQU00QixPQUFPO1FBQUVGO1FBQVlWO1FBQVlmO1FBQVVrSTtLQUFrQjtJQUV4RixzQ0FBc0M7SUFDdEMsT0FBTztRQUNMLGVBQWU7UUFDZixHQUFHbkksS0FBSztRQUVSLFVBQVU7UUFDVjBCO1FBQ0EwRDtRQUNBUztRQUNBQztRQUNBSDtRQUNBVTtRQUNBckI7UUFDQWdDO1FBQ0FHO1FBQ0FJO1FBQ0FJO1FBQ0FDO1FBQ0FDO1FBQ0EzQztRQUNBNEM7UUFDQUs7UUFDQThDO1FBQ0F6RTtRQUNBMEU7SUFDRjtBQUNGLEVBQUUiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvaG9va3MvdXNlLWVtYWlsLXN0YXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVJlZHVjZXIsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVNlc3Npb24gfSBmcm9tICduZXh0LWF1dGgvcmVhY3QnO1xuaW1wb3J0IHsgdXNlVG9hc3QgfSBmcm9tICcuL3VzZS10b2FzdCc7XG5pbXBvcnQgeyBcbiAgZW1haWxSZWR1Y2VyLCBcbiAgaW5pdGlhbFN0YXRlLCBcbiAgRW1haWxTdGF0ZSwgXG4gIEVtYWlsQWN0aW9uLFxuICBub3JtYWxpemVGb2xkZXJBbmRBY2NvdW50LFxuICBBY2NvdW50XG59IGZyb20gJ0AvbGliL3JlZHVjZXJzL2VtYWlsUmVkdWNlcic7XG5pbXBvcnQgeyBcbiAgZ2V0Q2FjaGVkRW1haWxzV2l0aFRpbWVvdXQsIFxuICByZWZyZXNoRW1haWxzSW5CYWNrZ3JvdW5kIFxufSBmcm9tICdAL2xpYi9zZXJ2aWNlcy9wcmVmZXRjaC1zZXJ2aWNlJztcbmltcG9ydCB7IEVtYWlsLCBFbWFpbERhdGEgfSBmcm9tICcuL3VzZS1jb3Vycmllcic7XG5pbXBvcnQgeyBmb3JtYXRFbWFpbEZvclJlcGx5T3JGb3J3YXJkIH0gZnJvbSAnQC9saWIvdXRpbHMvZW1haWwtdXRpbHMnO1xuXG4vLyBBZGQgYSBnbG9iYWwgZGlzcGF0Y2hlciBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGNvZGVcbi8vIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gdW50aWwgd2UgZnVsbHkgbWlncmF0ZSB0byB0aGUgcmVkdWNlciBwYXR0ZXJuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIGRpc3BhdGNoRW1haWxBY3Rpb24/OiAoYWN0aW9uOiBFbWFpbEFjdGlvbikgPT4gdm9pZDtcbiAgICBfX2VtYWlsU3RhdGVEaXNwYXRjaD86IChhY3Rpb246IEVtYWlsQWN0aW9uKSA9PiB2b2lkO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VFbWFpbFN0YXRlID0gKCkgPT4ge1xuICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZVJlZHVjZXIoZW1haWxSZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuICBjb25zdCB7IGRhdGE6IHNlc3Npb24gfSA9IHVzZVNlc3Npb24oKTtcbiAgY29uc3QgeyB0b2FzdCB9ID0gdXNlVG9hc3QoKTtcblxuICAvLyBSZWZzIHRvIHRyYWNrIHN0YXRlXG4gIGNvbnN0IHVwZGF0ZVVucmVhZFRpbWVyUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBsYXN0RW1haWxWaWV3ZWRSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGZhaWxlZEZldGNoQ291bnRSZWYgPSB1c2VSZWY8bnVtYmVyPigwKTtcbiAgY29uc3QgbGFzdEZvbGRlclJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgbGFzdFBhZ2VMb2FkZWRSZWYgPSB1c2VSZWY8bnVtYmVyPigwKTtcbiAgY29uc3QgcHJldkZvbGRlclJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgbG9hZE1vcmVUcmlnZ2VyVGltZVJlZiA9IHVzZVJlZjxudW1iZXI+KDApO1xuXG4gIC8vIEV4cG9zZSBkaXNwYXRjaCBmdW5jdGlvbiB0byB3aW5kb3cgZm9yIGV4dGVybmFsIGNvbXBvbmVudHNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBNYWtlIGRpc3BhdGNoIGF2YWlsYWJsZSBnbG9iYWxseSBmb3Igb2xkZXIgY29kZVxuICAgIHdpbmRvdy5kaXNwYXRjaEVtYWlsQWN0aW9uID0gZGlzcGF0Y2g7XG4gICAgd2luZG93Ll9fZW1haWxTdGF0ZURpc3BhdGNoID0gZGlzcGF0Y2g7XG4gICAgXG4gICAgLy8gQ2xlYW4gdXAgb24gdW5tb3VudFxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFbWFpbEFjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIHdpbmRvdy5fX2VtYWlsU3RhdGVEaXNwYXRjaCA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9LCBbZGlzcGF0Y2hdKTtcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gbG9nIG9wZXJhdGlvbnNcbiAgY29uc3QgbG9nRW1haWxPcCA9IHVzZUNhbGxiYWNrKChvcGVyYXRpb246IHN0cmluZywgZGV0YWlsczogc3RyaW5nLCBkYXRhPzogYW55KSA9PiB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMV0uc3Vic3RyaW5nKDAsIDEyKTtcbiAgICBjb25zb2xlLmxvZyhgWyR7dGltZXN0YW1wfV1bRU1BSUwtU1RBVEVdWyR7b3BlcmF0aW9ufV0gJHtkZXRhaWxzfWApO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBjb25zb2xlLmxvZyhgWyR7dGltZXN0YW1wfV1bRU1BSUwtU1RBVEVdW0RBVEFdYCwgZGF0YSk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgLy8gTG9hZCBlbWFpbHMgZnJvbSB0aGUgc2VydmVyXG4gIGNvbnN0IGxvYWRFbWFpbHMgPSB1c2VDYWxsYmFjayhhc3luYyAocGFnZTogbnVtYmVyLCBwZXJQYWdlOiBudW1iZXIsIGlzTG9hZE1vcmU6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xuICAgIC8vIENSSVRJQ0FMIEZJWDogRG8gaW1wb3J0YW50IHZhbGlkYXRpb24gYmVmb3JlIHNldHRpbmcgbG9hZGluZyBzdGF0ZVxuICAgIGlmICghc2Vzc2lvbj8udXNlcj8uaWQpIHJldHVybjtcbiAgICBcbiAgICAvLyBDUklUSUNBTCBGSVg6IEFsd2F5cyBsb2cgdGhlIGlzTG9hZE1vcmUgcGFyYW1ldGVyXG4gICAgY29uc29sZS5sb2coYFtERUJVRy1MT0FEX0VNQUlMU10gQ2FsbGVkIHdpdGggaXNMb2FkTW9yZT0ke2lzTG9hZE1vcmV9LCBwYWdlPSR7cGFnZX0sIGN1cnJlbnRFbWFpbHM9JHtzdGF0ZS5lbWFpbHMubGVuZ3RofWApO1xuICAgIFxuICAgIC8vIFNldCB0aGUgY3VycmVudCBmb2xkZXIgYW5kIGFjY291bnQgYmVpbmcgbG9hZGVkIHRvIGRldGVjdCBjaGFuZ2VzXG4gICAgY29uc3Qgc3RhcnRGb2xkZXIgPSBzdGF0ZS5jdXJyZW50Rm9sZGVyO1xuICAgIGNvbnN0IHN0YXJ0QWNjb3VudCA9IHN0YXRlLnNlbGVjdGVkQWNjb3VudCA/IHN0YXRlLnNlbGVjdGVkQWNjb3VudC5pZCA6ICdkZWZhdWx0JztcbiAgICBcbiAgICAvLyBDUklUSUNBTCBGSVg6IEZvcmNlIGxvYWRpbmcgc3RhdGUgdG8gdHJ1ZVxuICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9MT0FESU5HJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IG5vcm1hbGl6ZWQgcGFyYW1ldGVycyB1c2luZyBoZWxwZXIgZnVuY3Rpb24gd2l0aCBwcm9wZXIgYWNjb3VudCBJRCBoYW5kbGluZ1xuICAgICAgY29uc3QgYWNjb3VudElkID0gc3RhdGUuc2VsZWN0ZWRBY2NvdW50ID8gc3RhdGUuc2VsZWN0ZWRBY2NvdW50LmlkIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgeyBub3JtYWxpemVkRm9sZGVyLCBlZmZlY3RpdmVBY2NvdW50SWQsIHByZWZpeGVkRm9sZGVyIH0gPSBcbiAgICAgICAgbm9ybWFsaXplRm9sZGVyQW5kQWNjb3VudChzdGF0ZS5jdXJyZW50Rm9sZGVyLCBhY2NvdW50SWQpO1xuICAgICAgXG4gICAgICBsb2dFbWFpbE9wKCdMT0FEX0VNQUlMUycsIGBMb2FkaW5nIGVtYWlscyBmb3IgJHtwcmVmaXhlZEZvbGRlcn0gKGFjY291bnQ6ICR7ZWZmZWN0aXZlQWNjb3VudElkfSwgaXNMb2FkTW9yZTogJHtpc0xvYWRNb3JlfSwgcGFnZTogJHtwYWdlfSlgKTtcbiAgICAgIFxuICAgICAgLy8gQ29uc3RydWN0IHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIGZvbGRlcjogbm9ybWFsaXplZEZvbGRlcixcbiAgICAgICAgcGFnZTogcGFnZS50b1N0cmluZygpLFxuICAgICAgICBwZXJQYWdlOiBwZXJQYWdlLnRvU3RyaW5nKCksXG4gICAgICAgIGFjY291bnRJZDogZWZmZWN0aXZlQWNjb3VudElkXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gRGVidWcgbG9nIGV4aXN0aW5nIGVtYWlscyBjb3VudFxuICAgICAgaWYgKGlzTG9hZE1vcmUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFtERUJVRy1QQUdJTkFUSU9OXSBMb2FkaW5nIG1vcmUgZW1haWxzLiBDdXJyZW50IHBhZ2U6ICR7cGFnZX0sIGV4aXN0aW5nIGVtYWlsczogJHtzdGF0ZS5lbWFpbHMubGVuZ3RofWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBUcnkgdG8gZ2V0IGNhY2hlZCBlbWFpbHMgZmlyc3RcbiAgICAgIGxvZ0VtYWlsT3AoJ0NBQ0hFX0NIRUNLJywgYENoZWNraW5nIGNhY2hlIGZvciAke3ByZWZpeGVkRm9sZGVyfSwgcGFnZTogJHtwYWdlfWApO1xuICAgICAgY29uc3QgY2FjaGVkRW1haWxzID0gYXdhaXQgZ2V0Q2FjaGVkRW1haWxzV2l0aFRpbWVvdXQoXG4gICAgICAgIHNlc3Npb24udXNlci5pZCxcbiAgICAgICAgcHJlZml4ZWRGb2xkZXIsXG4gICAgICAgIHBhZ2UsXG4gICAgICAgIHBlclBhZ2UsXG4gICAgICAgIDEwMCxcbiAgICAgICAgZWZmZWN0aXZlQWNjb3VudElkXG4gICAgICApO1xuICAgICAgXG4gICAgICBpZiAoY2FjaGVkRW1haWxzKSB7XG4gICAgICAgIGxvZ0VtYWlsT3AoJ0NBQ0hFX0hJVCcsIGBVc2luZyBjYWNoZWQgZGF0YSBmb3IgJHtwcmVmaXhlZEZvbGRlcn0sIHBhZ2U6ICR7cGFnZX0sIGVtYWlsczogJHtjYWNoZWRFbWFpbHMuZW1haWxzPy5sZW5ndGggfHwgMH0sIGlzTG9hZE1vcmU6ICR7aXNMb2FkTW9yZX1gKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEVuc3VyZSBjYWNoZWQgZGF0YSBoYXMgZW1haWxzIGFycmF5IHByb3BlcnR5XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNhY2hlZEVtYWlscy5lbWFpbHMpKSB7XG4gICAgICAgICAgLy8gQ1JJVElDQUwgRklYOiBEb3VibGUgY2hlY2sgd2UncmUgdXNpbmcgdGhlIHJpZ2h0IGFjdGlvbiB0eXBlIGJhc2VkIG9uIGlzTG9hZE1vcmUgcGFyYW1cbiAgICAgICAgICBjb25zb2xlLmxvZyhgW0RFQlVHLUNBQ0hFX0hJVF0gRGlzcGF0Y2hpbmcgJHtpc0xvYWRNb3JlID8gJ0FQUEVORF9FTUFJTFMnIDogJ1NFVF9FTUFJTFMnfSB3aXRoICR7Y2FjaGVkRW1haWxzLmVtYWlscy5sZW5ndGh9IGVtYWlsc2ApO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIERpc3BhdGNoIGFwcHJvcHJpYXRlIGFjdGlvbiBiYXNlZCBvbiBpZiB3ZSdyZSBsb2FkaW5nIG1vcmUgLSBETyBOT1QgT1ZFUlJJREUgaXNMb2FkTW9yZSFcbiAgICAgICAgICBkaXNwYXRjaCh7IFxuICAgICAgICAgICAgdHlwZTogaXNMb2FkTW9yZSA/ICdBUFBFTkRfRU1BSUxTJyA6ICdTRVRfRU1BSUxTJywgXG4gICAgICAgICAgICBwYXlsb2FkOiBjYWNoZWRFbWFpbHMuZW1haWxzIFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFNldCBwYWdpbmF0aW9uIGluZm8gZnJvbSBjYWNoZSBpZiBhdmFpbGFibGVcbiAgICAgICAgICBpZiAoY2FjaGVkRW1haWxzLnRvdGFsRW1haWxzKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdTRVRfVE9UQUxfRU1BSUxTJywgcGF5bG9hZDogY2FjaGVkRW1haWxzLnRvdGFsRW1haWxzIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoY2FjaGVkRW1haWxzLnRvdGFsUGFnZXMpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9UT1RBTF9QQUdFUycsIHBheWxvYWQ6IGNhY2hlZEVtYWlscy50b3RhbFBhZ2VzIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBVcGRhdGUgYXZhaWxhYmxlIG1haWxib3hlcyBpZiBwcm92aWRlZFxuICAgICAgICAgIGlmIChjYWNoZWRFbWFpbHMubWFpbGJveGVzICYmIGNhY2hlZEVtYWlscy5tYWlsYm94ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnU0VUX01BSUxCT1hFUycsIHBheWxvYWQ6IGNhY2hlZEVtYWlscy5tYWlsYm94ZXMgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBDUklUSUNBTCBGSVg6IElmIHRoaXMgd2FzIGEgbG9hZE1vcmUgb3BlcmF0aW9uLCBjaGVjayB0aGUgcmVzdWx0IGFmdGVyIHRoZSBkaXNwYXRjaFxuICAgICAgICBpZiAoaXNMb2FkTW9yZSkge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFtERUJVRy1DQUNIRV9ISVRfQVBQRU5EXSBBZnRlciAke2lzTG9hZE1vcmUgPyAnQVBQRU5EJyA6ICdTRVQnfSwgZW1haWwgY291bnQgaXMgbm93OiAke3N0YXRlLmVtYWlscy5sZW5ndGh9YCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRmV0Y2ggZW1haWxzIGZyb20gQVBJIGlmIG5vIGNhY2hlIGhpdFxuICAgICAgbG9nRW1haWxPcCgnQVBJX0ZFVENIJywgYEZldGNoaW5nIGVtYWlscyBmcm9tIEFQSTogJHtxdWVyeVBhcmFtcy50b1N0cmluZygpfSwgaXNMb2FkTW9yZTogJHtpc0xvYWRNb3JlfWApO1xuICAgICAgY29uc29sZS5sb2coYFtERUJVRy1BUElfRkVUQ0hdIEZldGNoaW5nIGZyb20gL2FwaS9jb3Vycmllci9lbWFpbHM/JHtxdWVyeVBhcmFtcy50b1N0cmluZygpfWApO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgL2FwaS9jb3Vycmllci9lbWFpbHM/JHtxdWVyeVBhcmFtcy50b1N0cmluZygpfWApO1xuICAgICAgXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIC8vIENSSVRJQ0FMIEZJWDogVHJ5IHRvIHJlY292ZXIgZnJvbSBmZXRjaCBlcnJvcnMgYnkgcmV0cnlpbmcgd2l0aCBkaWZmZXJlbnQgcGFnaW5hdGlvblxuICAgICAgICBpZiAoaXNMb2FkTW9yZSAmJiBwYWdlID4gMSkge1xuICAgICAgICAgIGxvZ0VtYWlsT3AoJ0VSUk9SX1JFQ09WRVJZJywgYEZhaWxlZCB0byBmZXRjaCBlbWFpbHMgZm9yIHBhZ2UgJHtwYWdlfSwgYXR0ZW1wdGluZyB0byByZWNvdmVyIGJ5IGRlY3JlbWVudGluZyBwYWdlYCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYFtERUJVRy1FUlJPUl0gQVBJIHJldHVybmVkICR7cmVzcG9uc2Uuc3RhdHVzfSBmb3IgcGFnZSAke3BhZ2V9YCk7XG4gICAgICAgICAgLy8gSWYgd2UncmUgbG9hZGluZyBtb3JlIGFuZCB0aGVyZSdzIGFuIGVycm9yLCBqdXN0IGRlY3JlbWVudCB0aGUgcGFnZSB0byBhdm9pZCBnZXR0aW5nIHN0dWNrXG4gICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnU0VUX1BBR0UnLCBwYXlsb2FkOiBwYWdlIC0gMSB9KTtcbiAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdTRVRfTE9BRElORycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICAgICAgICAgIC8vIEFsc28gcmVzZXQgdG90YWwgcGFnZXMgdG8gdHJ5IGFnYWluXG4gICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnU0VUX1RPVEFMX1BBR0VTJywgcGF5bG9hZDogcGFnZSB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGVycm9yRGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yRGF0YS5lcnJvciB8fCAnRmFpbGVkIHRvIGZldGNoIGVtYWlscycpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgY29uc29sZS5sb2coYFtERUJVRy1BUElfUkVTUE9OU0VdIEdvdCByZXNwb25zZSB3aXRoICR7ZGF0YS5lbWFpbHM/Lmxlbmd0aCB8fCAwfSBlbWFpbHMsIHRvdGFsUGFnZXM6ICR7ZGF0YS50b3RhbFBhZ2VzfSwgdG90YWxFbWFpbHM6ICR7ZGF0YS50b3RhbEVtYWlsc30sIGlzTG9hZE1vcmU6ICR7aXNMb2FkTW9yZX1gKTtcbiAgICAgIFxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBFbmhhbmNlZCBlbXB0eSByZXN1bHRzIGhhbmRsaW5nXG4gICAgICBpZiAoIWRhdGEuZW1haWxzIHx8IGRhdGEuZW1haWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0RFQlVHLUVNUFRZXSBObyBlbWFpbHMgaW4gcmVzcG9uc2UgZm9yIHBhZ2UgJHtwYWdlfWApO1xuICAgICAgICAvLyBJZiB3ZSdyZSBhdCBhIHBhZ2UgPiAxIGFuZCBnb3Qgbm8gcmVzdWx0cywgdGhlIHBhZ2luZyBpcyBvZmYsIHNvIHRyeSBhZ2FpbiB3aXRoIHBhZ2UgMVxuICAgICAgICBpZiAocGFnZSA+IDEgJiYgIWlzTG9hZE1vcmUpIHtcbiAgICAgICAgICBsb2dFbWFpbE9wKCdFTVBUWV9SRVNVTFRTJywgYE5vIGVtYWlscyByZXR1cm5lZCBmb3IgcGFnZSAke3BhZ2V9LCByZXNldHRpbmcgdG8gcGFnZSAxYCk7XG4gICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnU0VUX1BBR0UnLCBwYXlsb2FkOiAxIH0pO1xuICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9MT0FESU5HJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IGF0IHBhZ2UgMSwganVzdCB1cGRhdGUgdGhlIHN0YXRlIHdpdGggbm8gZW1haWxzXG4gICAgICAgIGlmICghaXNMb2FkTW9yZSkge1xuICAgICAgICAgIGxvZ0VtYWlsT3AoJ0VNUFRZX1JFU1VMVFMnLCBgTm8gZW1haWxzIGZvdW5kIGluICR7c3RhdGUuY3VycmVudEZvbGRlcn1gKTtcbiAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdTRVRfRU1BSUxTJywgcGF5bG9hZDogW10gfSk7XG4gICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnU0VUX1RPVEFMX0VNQUlMUycsIHBheWxvYWQ6IDAgfSk7XG4gICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnU0VUX1RPVEFMX1BBR0VTJywgcGF5bG9hZDogMCB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb3IgbG9hZCBtb3JlLCBqdXN0IHNldCBsb2FkaW5nIHRvIGZhbHNlIGJ1dCBrZWVwIGV4aXN0aW5nIGVtYWlsc1xuICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9MT0FESU5HJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBFbnN1cmUgYWxsIGVtYWlscyBoYXZlIHByb3BlciBhY2NvdW50IElEIGFuZCBmb2xkZXIgZm9ybWF0XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLmVtYWlscykpIHtcbiAgICAgICAgLy8gTG9nIGVtYWlsIGRhdGVzIGZvciBkZWJ1Z2dpbmdcbiAgICAgICAgaWYgKGRhdGEuZW1haWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsb2dFbWFpbE9wKCdFTUFJTF9EQVRFUycsIGBGaXJzdCBmZXcgZW1haWwgZGF0ZXMgYmVmb3JlIHByb2Nlc3Npbmc6YCwgXG4gICAgICAgICAgICBkYXRhLmVtYWlscy5zbGljZSgwLCA1KS5tYXAoKGU6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgaWQ6IGUuaWQuc3Vic3RyaW5nKDAsIDgpLFxuICAgICAgICAgICAgICBzdWJqZWN0OiBlLnN1YmplY3Q/LnN1YnN0cmluZygwLCAyMCksXG4gICAgICAgICAgICAgIGRhdGU6IGUuZGF0ZSxcbiAgICAgICAgICAgICAgZGF0ZU9iajogbmV3IERhdGUoZS5kYXRlKSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZShlLmRhdGUpLmdldFRpbWUoKVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZGF0YS5lbWFpbHMuZm9yRWFjaCgoZW1haWw6IEVtYWlsKSA9PiB7XG4gICAgICAgICAgLy8gSWYgZW1haWwgZG9lc24ndCBoYXZlIGFuIGFjY291bnRJZCwgc2V0IGl0IHRvIHRoZSBlZmZlY3RpdmUgb25lXG4gICAgICAgICAgaWYgKCFlbWFpbC5hY2NvdW50SWQpIHtcbiAgICAgICAgICAgIGVtYWlsLmFjY291bnRJZCA9IGVmZmVjdGl2ZUFjY291bnRJZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gRW5zdXJlIGZvbGRlciBoYXMgdGhlIHByb3BlciBwcmVmaXggZm9ybWF0XG4gICAgICAgICAgaWYgKGVtYWlsLmZvbGRlciAmJiAhZW1haWwuZm9sZGVyLmluY2x1ZGVzKCc6JykpIHtcbiAgICAgICAgICAgIGVtYWlsLmZvbGRlciA9IGAke2VtYWlsLmFjY291bnRJZH06JHtlbWFpbC5mb2xkZXJ9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gRW5zdXJlIGRhdGUgaXMgYSB2YWxpZCBEYXRlIG9iamVjdCAoaGFuZGxlIHN0cmluZ3Mgb3IgdGltZXN0YW1wcylcbiAgICAgICAgICBpZiAoZW1haWwuZGF0ZSAmJiAhKGVtYWlsLmRhdGUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8gQ29udmVydCB0byBhIHByb3BlciBEYXRlIG9iamVjdCBpZiBpdCdzIGEgc3RyaW5nIG9yIG51bWJlclxuICAgICAgICAgICAgICBjb25zdCBkYXRlT2JqID0gbmV3IERhdGUoZW1haWwuZGF0ZSk7XG4gICAgICAgICAgICAgIC8vIFZlcmlmeSBpdCdzIGEgdmFsaWQgZGF0ZVxuICAgICAgICAgICAgICBpZiAoIWlzTmFOKGRhdGVPYmouZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgICAgIGVtYWlsLmRhdGUgPSBkYXRlT2JqO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgLy8gSWYgY29udmVyc2lvbiBmYWlscywgbG9nIGFuZCB1c2UgY3VycmVudCBkYXRlIGFzIGZhbGxiYWNrXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgZGF0ZSBmb3JtYXQgZm9yIGVtYWlsICR7ZW1haWwuaWR9OiAke2VtYWlsLmRhdGV9YCk7XG4gICAgICAgICAgICAgIGVtYWlsLmRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogTG9nIHdoYXQgd2UncmUgYWJvdXQgdG8gZG9cbiAgICAgIGNvbnNvbGUubG9nKGBbREVCVUctRElTUEFUQ0hdIEFib3V0IHRvIGRpc3BhdGNoICR7aXNMb2FkTW9yZSA/ICdBUFBFTkRfRU1BSUxTJyA6ICdTRVRfRU1BSUxTJ30gd2l0aCAke2RhdGEuZW1haWxzPy5sZW5ndGggfHwgMH0gZW1haWxzYCk7XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aXRoIGZldGNoZWQgZGF0YVxuICAgICAgZGlzcGF0Y2goeyBcbiAgICAgICAgdHlwZTogaXNMb2FkTW9yZSA/ICdBUFBFTkRfRU1BSUxTJyA6ICdTRVRfRU1BSUxTJywgXG4gICAgICAgIHBheWxvYWQ6IEFycmF5LmlzQXJyYXkoZGF0YS5lbWFpbHMpID8gZGF0YS5lbWFpbHMgOiBbXSBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBEb3VibGUtY2hlY2sgdGhhdCB3ZSd2ZSB1cGRhdGVkIHRoZSBlbWFpbCBsaXN0IGNvcnJlY3RseSBhZnRlciBkaXNwYXRjaFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbREVCVUctQUZURVItRElTUEFUQ0hdIEVtYWlsIGNvdW50IGlzIG5vdzogJHtzdGF0ZS5lbWFpbHMubGVuZ3RofSwgc2hvdWxkIGluY2x1ZGUgdGhlICR7ZGF0YS5lbWFpbHM/Lmxlbmd0aCB8fCAwfSBuZXcgZW1haWxzIHdlIGp1c3QgbG9hZGVkYCk7XG4gICAgICB9LCAwKTtcbiAgICAgIFxuICAgICAgaWYgKGRhdGEudG90YWxFbWFpbHMpIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnU0VUX1RPVEFMX0VNQUlMUycsIHBheWxvYWQ6IGRhdGEudG90YWxFbWFpbHMgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChkYXRhLnRvdGFsUGFnZXMpIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnU0VUX1RPVEFMX1BBR0VTJywgcGF5bG9hZDogZGF0YS50b3RhbFBhZ2VzIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVcGRhdGUgYXZhaWxhYmxlIG1haWxib3hlcyBpZiBwcm92aWRlZFxuICAgICAgaWYgKGRhdGEubWFpbGJveGVzICYmIGRhdGEubWFpbGJveGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnU0VUX01BSUxCT1hFUycsIHBheWxvYWQ6IGRhdGEubWFpbGJveGVzIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nRW1haWxPcCgnRVJST1InLCBgRmFpbGVkIHRvIGxvYWQgZW1haWxzOiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKX1gKTtcbiAgICAgIGRpc3BhdGNoKHsgXG4gICAgICAgIHR5cGU6ICdTRVRfRVJST1InLCBcbiAgICAgICAgcGF5bG9hZDogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdGYWlsZWQgdG8gbG9hZCBlbWFpbHMnIFxuICAgICAgfSk7XG4gICAgICB0b2FzdCh7XG4gICAgICAgIHZhcmlhbnQ6IFwiZGVzdHJ1Y3RpdmVcIixcbiAgICAgICAgdGl0bGU6IFwiRXJyb3JcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnRmFpbGVkIHRvIGxvYWQgZW1haWxzJ1xuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogT25seSBjbGVhciBsb2FkaW5nIHN0YXRlIGlmIHRoZSBmb2xkZXIvYWNjb3VudCBoYXNuJ3QgY2hhbmdlZFxuICAgICAgaWYgKHN0YXJ0Rm9sZGVyID09PSBzdGF0ZS5jdXJyZW50Rm9sZGVyICYmIFxuICAgICAgICAgIChzdGFydEFjY291bnQgPT09IChzdGF0ZS5zZWxlY3RlZEFjY291bnQ/LmlkIHx8ICdkZWZhdWx0JykpKSB7XG4gICAgICAgIC8vIFNhZmUgdG8gY2xlYXIgbG9hZGluZyBzdGF0ZVxuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdTRVRfTE9BRElORycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYFtERUJVRy1MT0FEX0VNQUlMU10gRm9sZGVyL2FjY291bnQgY2hhbmdlZCBkdXJpbmcgbG9hZCwgbm90IGNsZWFyaW5nIGxvYWRpbmcgc3RhdGVgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzZXNzaW9uPy51c2VyPy5pZCwgc3RhdGUuY3VycmVudEZvbGRlciwgc3RhdGUuc2VsZWN0ZWRBY2NvdW50LCBzdGF0ZS5wYWdlLCBzdGF0ZS5wZXJQYWdlLCBzdGF0ZS5lbWFpbHMubGVuZ3RoLCB0b2FzdCwgbG9nRW1haWxPcF0pO1xuXG4gIC8vIENoYW5nZSBmb2xkZXJcbiAgY29uc3QgY2hhbmdlRm9sZGVyID0gdXNlQ2FsbGJhY2soYXN5bmMgKGZvbGRlcjogc3RyaW5nLCBhY2NvdW50SWQ/OiBzdHJpbmcpID0+IHtcbiAgICBsb2dFbWFpbE9wKCdDSEFOR0VfRk9MREVSJywgYENoYW5naW5nIHRvIGZvbGRlciAke2ZvbGRlcn0gd2l0aCBhY2NvdW50ICR7YWNjb3VudElkIHx8ICdkZWZhdWx0J31gKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gQ1JJVElDQUwgRklYOiBSZXNldCBwYWdpbmF0aW9uIHN0YXRlIGltbWVkaWF0ZWx5XG4gICAgICBsYXN0UGFnZUxvYWRlZFJlZi5jdXJyZW50ID0gMDtcbiAgICAgIFxuICAgICAgLy8gUmVzZXQgcGFnZSB0byAxIGRpcmVjdGx5IHRvIHByZXZlbnQgYW55IGlzc3VlcyB3aXRoIHBhZ2UgZWZmZWN0c1xuICAgICAgLy8gVGhpcyB3aWxsIGJlIGF0b21pYyB3aXRoIHRoZSBDSEFOR0VfRk9MREVSIGFjdGlvblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnU0VUX1BBR0UnLCBwYXlsb2FkOiAxIH0pO1xuICAgICAgXG4gICAgICAvLyBDbGVhciBleGlzdGluZyBlbWFpbHMgLSBkb24ndCBzaG93IG9sZCBlbWFpbHMgZHVyaW5nIGxvYWRcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9FTUFJTFMnLCBwYXlsb2FkOiBbXSB9KTtcbiAgICAgIFxuICAgICAgLy8gU2V0IGxvYWRpbmcgc3RhdGUgZXhwbGljaXRseSAtIHRoaXMgaXMgY3JpdGljYWxcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9MT0FESU5HJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgICAgIFxuICAgICAgLy8gVGhpcyB3aWxsIGhhbmRsZSBmb2xkZXIgc2V0dGluZyBpbiBhIHNpbmdsZSBhdG9taWMgb3BlcmF0aW9uXG4gICAgICBkaXNwYXRjaCh7IFxuICAgICAgICB0eXBlOiAnQ0hBTkdFX0ZPTERFUicsIFxuICAgICAgICBwYXlsb2FkOiB7IGZvbGRlciwgYWNjb3VudElkOiBhY2NvdW50SWQgfHwgJ2RlZmF1bHQnIH0gXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gQ1JJVElDQUw6IFRoZSBlbWFpbCBsb2FkaW5nIHdpbGwgYmUgdHJpZ2dlcmVkIGJ5IHRoZSBmb2xkZXIgZWZmZWN0XG4gICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNhbGwgbG9hZEVtYWlscyBkaXJlY3RseSBoZXJlXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0VtYWlsT3AoJ0VSUk9SJywgYEZhaWxlZCB0byBjaGFuZ2UgZm9sZGVyOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIGRpc3BhdGNoKHsgXG4gICAgICAgIHR5cGU6ICdTRVRfRVJST1InLCBcbiAgICAgICAgcGF5bG9hZDogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnRmFpbGVkIHRvIGNoYW5nZSBmb2xkZXInIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIEFsd2F5cyBlbnN1cmUgbG9hZGluZyBzdGF0ZSBpcyBjbGVhcmVkIG9uIGVycm9yXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdTRVRfTE9BRElORycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfSwgW2xvZ0VtYWlsT3AsIGRpc3BhdGNoXSk7XG5cbiAgLy8gU2VsZWN0IGFjY291bnRcbiAgY29uc3Qgc2VsZWN0QWNjb3VudCA9IHVzZUNhbGxiYWNrKChhY2NvdW50OiBBY2NvdW50KSA9PiB7XG4gICAgbG9nRW1haWxPcCgnU0VMRUNUX0FDQ09VTlQnLCBgU2VsZWN0aW5nIGFjY291bnQ6ICR7YWNjb3VudC5lbWFpbH0gKCR7YWNjb3VudC5pZH0pYCk7XG4gICAgXG4gICAgLy8gSGFuZGxlIHRoZSBlbnRpcmUgYWNjb3VudCBzZWxlY3Rpb24gaW4gYSBzaW5nbGUgYXRvbWljIG9wZXJhdGlvblxuICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFTEVDVF9BQ0NPVU5UJywgcGF5bG9hZDogYWNjb3VudCB9KTtcbiAgICBcbiAgICAvLyBUaGUgZm9sZGVyIGxvYWRpbmcgd2lsbCBiZSB0cmlnZ2VyZWQgYnkgdGhlIHVzZUVmZmVjdCB3YXRjaGluZyBmb3IgY3VycmVudEZvbGRlciBjaGFuZ2VzXG4gIH0sIFtsb2dFbWFpbE9wXSk7XG5cbiAgLy8gSGFuZGxlIGVtYWlsIHNlbGVjdGlvblxuICBjb25zdCBoYW5kbGVFbWFpbFNlbGVjdCA9IHVzZUNhbGxiYWNrKGFzeW5jIChlbWFpbElkOiBzdHJpbmcsIGFjY291bnRJZDogc3RyaW5nLCBmb2xkZXI6IHN0cmluZykgPT4ge1xuICAgIGxvZ0VtYWlsT3AoJ1NFTEVDVF9FTUFJTCcsIGBTZWxlY3RpbmcgZW1haWwgJHtlbWFpbElkfSBmcm9tIGFjY291bnQgJHthY2NvdW50SWR9IGluIGZvbGRlciAke2ZvbGRlcn1gKTtcbiAgICBcbiAgICBpZiAoIWVtYWlsSWQpIHtcbiAgICAgIGRpc3BhdGNoKHsgXG4gICAgICAgIHR5cGU6ICdTRUxFQ1RfRU1BSUwnLCBcbiAgICAgICAgcGF5bG9hZDogeyBlbWFpbElkOiAnJywgYWNjb3VudElkOiAnJywgZm9sZGVyOiAnJywgZW1haWw6IG51bGwgfSBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gRmluZCB0aGUgZW1haWwgaW4gdGhlIGN1cnJlbnQgbGlzdFxuICAgICAgY29uc3QgZXhpc3RpbmdFbWFpbCA9IHN0YXRlLmVtYWlscy5maW5kKGUgPT4gZS5pZCA9PT0gZW1haWxJZCk7XG4gICAgICBcbiAgICAgIGlmIChleGlzdGluZ0VtYWlsICYmIGV4aXN0aW5nRW1haWwuY29udGVudEZldGNoZWQpIHtcbiAgICAgICAgLy8gVXNlIHRoZSBleGlzdGluZyBlbWFpbCBpZiBpdCBoYXMgY29udGVudCBhbHJlYWR5XG4gICAgICAgIGRpc3BhdGNoKHsgXG4gICAgICAgICAgdHlwZTogJ1NFTEVDVF9FTUFJTCcsXG4gICAgICAgICAgcGF5bG9hZDogeyBlbWFpbElkLCBhY2NvdW50SWQsIGZvbGRlciwgZW1haWw6IGV4aXN0aW5nRW1haWwgfVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIE1hcmsgYXMgcmVhZCBpZiBub3QgYWxyZWFkeVxuICAgICAgICBpZiAoIWV4aXN0aW5nRW1haWwuZmxhZ3Muc2Vlbikge1xuICAgICAgICAgIG1hcmtFbWFpbEFzUmVhZChlbWFpbElkLCB0cnVlLCBhY2NvdW50SWQpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE5lZWQgdG8gZmV0Y2ggdGhlIGVtYWlsIGNvbnRlbnRcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9MT0FESU5HJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgICAgIFxuICAgICAgLy8gRXh0cmFjdCBhY2NvdW50IElEIGZyb20gZm9sZGVyIG5hbWUgaWYgcHJlc2VudCBhbmQgbm9uZSB3YXMgZXhwbGljaXRseSBwcm92aWRlZFxuICAgICAgY29uc3QgeyBub3JtYWxpemVkRm9sZGVyLCBlZmZlY3RpdmVBY2NvdW50SWQgfSA9IG5vcm1hbGl6ZUZvbGRlckFuZEFjY291bnQoZm9sZGVyLCBhY2NvdW50SWQpO1xuICAgICAgXG4gICAgICAvLyBGZXRjaCBlbWFpbCBjb250ZW50IGZyb20gQVBJXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAvYXBpL2NvdXJyaWVyLyR7ZW1haWxJZH0/Zm9sZGVyPSR7bm9ybWFsaXplZEZvbGRlcn0mYWNjb3VudElkPSR7ZWZmZWN0aXZlQWNjb3VudElkfWApO1xuICAgICAgXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIGVtYWlsIGNvbnRlbnQ6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBlbWFpbERhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBcbiAgICAgIC8vIE1hcmsgdGhlIGVtYWlsIGFzIHJlYWQgb24gdGhlIHNlcnZlclxuICAgICAgbWFya0VtYWlsQXNSZWFkKGVtYWlsSWQsIHRydWUsIGVmZmVjdGl2ZUFjY291bnRJZCk7XG4gICAgICBcbiAgICAgIC8vIFNlbGVjdCB0aGUgZW1haWxcbiAgICAgIGRpc3BhdGNoKHsgXG4gICAgICAgIHR5cGU6ICdTRUxFQ1RfRU1BSUwnLFxuICAgICAgICBwYXlsb2FkOiB7IGVtYWlsSWQsIGFjY291bnRJZDogZWZmZWN0aXZlQWNjb3VudElkLCBmb2xkZXIsIGVtYWlsOiBlbWFpbERhdGEgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0VtYWlsT3AoJ0VSUk9SJywgYEZhaWxlZCB0byBzZWxlY3QgZW1haWw6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgZGlzcGF0Y2goeyBcbiAgICAgICAgdHlwZTogJ1NFVF9FUlJPUicsIFxuICAgICAgICBwYXlsb2FkOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdGYWlsZWQgdG8gc2VsZWN0IGVtYWlsJyBcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdTRVRfTE9BRElORycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfSwgW3N0YXRlLmVtYWlscywgbG9nRW1haWxPcF0pO1xuXG4gIC8vIFRvZ2dsZSBlbWFpbCBzZWxlY3Rpb24gZm9yIG11bHRpLXNlbGVjdFxuICBjb25zdCB0b2dnbGVFbWFpbFNlbGVjdGlvbiA9IHVzZUNhbGxiYWNrKChlbWFpbElkOiBzdHJpbmcpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdUT0dHTEVfRU1BSUxfU0VMRUNUSU9OJywgcGF5bG9hZDogZW1haWxJZCB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIFRvZ2dsZSBzZWxlY3QgYWxsXG4gIGNvbnN0IHRvZ2dsZVNlbGVjdEFsbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdUT0dHTEVfU0VMRUNUX0FMTCcgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBNYXJrIGVtYWlsIGFzIHJlYWQvdW5yZWFkXG4gIGNvbnN0IG1hcmtFbWFpbEFzUmVhZCA9IHVzZUNhbGxiYWNrKGFzeW5jIChlbWFpbElkOiBzdHJpbmcsIGlzUmVhZDogYm9vbGVhbiwgYWNjb3VudElkPzogc3RyaW5nKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZpbmQgdGhlIGVtYWlsIHRvIGdldCBpdHMgYWNjb3VudCBJRCBpZiBub3QgcHJvdmlkZWRcbiAgICAgIGNvbnN0IGVtYWlsID0gc3RhdGUuZW1haWxzLmZpbmQoZSA9PiBlLmlkID09PSBlbWFpbElkKTtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZUFjY291bnRJZCA9IGFjY291bnRJZCB8fCBlbWFpbD8uYWNjb3VudElkIHx8ICdkZWZhdWx0JztcbiAgICAgIGNvbnN0IGZvbGRlciA9IGVtYWlsPy5mb2xkZXIgfHwgc3RhdGUuY3VycmVudEZvbGRlcjtcbiAgICAgIFxuICAgICAgLy8gRXh0cmFjdCBub3JtYWxpemVkIGZvbGRlclxuICAgICAgY29uc3QgeyBub3JtYWxpemVkRm9sZGVyIH0gPSBub3JtYWxpemVGb2xkZXJBbmRBY2NvdW50KGZvbGRlciwgZWZmZWN0aXZlQWNjb3VudElkKTtcbiAgICAgIFxuICAgICAgbG9nRW1haWxPcCgnTUFSS19SRUFEJywgYE1hcmtpbmcgZW1haWwgJHtlbWFpbElkfSBhcyAke2lzUmVhZCA/ICdyZWFkJyA6ICd1bnJlYWQnfSBpbiAke25vcm1hbGl6ZWRGb2xkZXJ9YCk7XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBVSSBzdGF0ZSBpbW1lZGlhdGVseSAob3B0aW1pc3RpYyB1cGRhdGUpXG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdNQVJLX0VNQUlMX0FTX1JFQUQnLFxuICAgICAgICBwYXlsb2FkOiB7IGVtYWlsSWQsIGlzUmVhZCwgYWNjb3VudElkOiBlZmZlY3RpdmVBY2NvdW50SWQgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIE5PVEU6IERvbid0IHVwZGF0ZSB1bnJlYWQgY291bnRzIGhlcmUgLSB0aGF0J3Mgbm93IGhhbmRsZWQgYnkgdGhlIHVwZGF0ZVVucmVhZENvdW50cyBmdW5jdGlvblxuICAgICAgLy8gd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IHRoZSBlbWFpbCB1cGRhdGUgYWJvdmUgdmlhIHRoZSB1c2VFZmZlY3RcbiAgICAgIFxuICAgICAgLy8gTWFrZSBBUEkgY2FsbCB0byB1cGRhdGUgb24gc2VydmVyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAvYXBpL2NvdXJyaWVyLyR7ZW1haWxJZH0vbWFyay1yZWFkYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBpc1JlYWQsXG4gICAgICAgICAgZm9sZGVyOiBub3JtYWxpemVkRm9sZGVyLFxuICAgICAgICAgIGFjY291bnRJZDogZWZmZWN0aXZlQWNjb3VudElkXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBtYXJrIGVtYWlsIGFzIHJlYWQnKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0VtYWlsT3AoJ0VSUk9SJywgYEZhaWxlZCB0byBtYXJrIGVtYWlsIGFzIHJlYWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgdG9hc3Qoe1xuICAgICAgICB2YXJpYW50OiBcImRlc3RydWN0aXZlXCIsXG4gICAgICAgIHRpdGxlOiBcIkVycm9yXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnRmFpbGVkIHRvIHVwZGF0ZSBlbWFpbCByZWFkIHN0YXR1cydcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSwgW3N0YXRlLmVtYWlscywgc3RhdGUuY3VycmVudEZvbGRlciwgdG9hc3QsIGxvZ0VtYWlsT3BdKTtcblxuICAvLyBUb2dnbGUgc3RhcnJlZCBzdGF0dXNcbiAgY29uc3QgdG9nZ2xlU3RhcnJlZCA9IHVzZUNhbGxiYWNrKGFzeW5jIChlbWFpbElkOiBzdHJpbmcpID0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gRmluZCB0aGUgZW1haWwgaW4gY3VycmVudCBsaXN0XG4gICAgICBjb25zdCBlbWFpbCA9IHN0YXRlLmVtYWlscy5maW5kKGUgPT4gZS5pZCA9PT0gZW1haWxJZCk7XG4gICAgICBpZiAoIWVtYWlsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW1haWwgbm90IGZvdW5kJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IG5ld0ZsYWdnZWRTdGF0dXMgPSAhZW1haWwuZmxhZ3MuZmxhZ2dlZDtcbiAgICAgIGxvZ0VtYWlsT3AoJ1RPR0dMRV9TVEFSJywgYFNldHRpbmcgc3RhcnJlZCBzdGF0dXMgdG8gJHtuZXdGbGFnZ2VkU3RhdHVzfSBmb3IgZW1haWwgJHtlbWFpbElkfWApO1xuICAgICAgXG4gICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgb3B0aW1pc3RpYyB1cGRhdGVcbiAgICAgIFxuICAgICAgLy8gTWFrZSBBUEkgY2FsbFxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgL2FwaS9jb3Vycmllci8ke2VtYWlsSWR9L2ZsYWdgLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGZsYWdnZWQ6IG5ld0ZsYWdnZWRTdGF0dXMsXG4gICAgICAgICAgZm9sZGVyOiBlbWFpbC5mb2xkZXIsXG4gICAgICAgICAgYWNjb3VudElkOiBlbWFpbC5hY2NvdW50SWRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHVwZGF0ZSBzdGFyIHN0YXR1cycpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBSZWxvYWQgZW1haWxzIHRvIGdldCB1cGRhdGVkIHN0YXRlXG4gICAgICBsb2FkRW1haWxzKHN0YXRlLnBhZ2UsIHN0YXRlLnBlclBhZ2UsIHRydWUpO1xuICAgICAgXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nRW1haWxPcCgnRVJST1InLCBgRmFpbGVkIHRvIHRvZ2dsZSBzdGFyOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIHRvYXN0KHtcbiAgICAgICAgdmFyaWFudDogXCJkZXN0cnVjdGl2ZVwiLFxuICAgICAgICB0aXRsZTogXCJFcnJvclwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0ZhaWxlZCB0byB1cGRhdGUgc3RhciBzdGF0dXMnXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIFtzdGF0ZS5lbWFpbHMsIHRvYXN0LCBsb2FkRW1haWxzLCBsb2dFbWFpbE9wXSk7XG5cbiAgLy8gRnVuY3Rpb24gdG8gY2hlY2sgZm9yIG5ldyBlbWFpbHMgd2l0aG91dCBkaXNydXB0aW5nIHRoZSB1c2VyXG4gIGNvbnN0IGNoZWNrRm9yTmV3RW1haWxzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghc2Vzc2lvbj8udXNlcj8uaWQpIHJldHVybjtcbiAgICBcbiAgICAvLyBEb24ndCBjaGVjayBpZiBhbHJlYWR5IGxvYWRpbmcgZW1haWxzXG4gICAgaWYgKHN0YXRlLmlzTG9hZGluZykgcmV0dXJuO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgbm9ybWFsaXplZCBwYXJhbWV0ZXJzIHVzaW5nIGhlbHBlciBmdW5jdGlvblxuICAgICAgY29uc3QgYWNjb3VudElkID0gc3RhdGUuc2VsZWN0ZWRBY2NvdW50ID8gc3RhdGUuc2VsZWN0ZWRBY2NvdW50LmlkIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgeyBub3JtYWxpemVkRm9sZGVyLCBlZmZlY3RpdmVBY2NvdW50SWQsIHByZWZpeGVkRm9sZGVyIH0gPSBcbiAgICAgICAgbm9ybWFsaXplRm9sZGVyQW5kQWNjb3VudChzdGF0ZS5jdXJyZW50Rm9sZGVyLCBhY2NvdW50SWQpO1xuICAgICAgXG4gICAgICBsb2dFbWFpbE9wKCdDSEVDS19ORVdfRU1BSUxTJywgYENoZWNraW5nIGZvciBuZXcgZW1haWxzIGluICR7cHJlZml4ZWRGb2xkZXJ9YCk7XG4gICAgICBcbiAgICAgIC8vIFF1aWV0bHkgY2hlY2sgZm9yIG5ldyBlbWFpbHMgd2l0aCBhIHNwZWNpYWwgcGFyYW1ldGVyXG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBmb2xkZXI6IG5vcm1hbGl6ZWRGb2xkZXIsXG4gICAgICAgIHBhZ2U6ICcxJyxcbiAgICAgICAgcGVyUGFnZTogJzEnLCAvLyBXZSBvbmx5IG5lZWQgdG8gY2hlY2sgdGhlIG5ld2VzdCBlbWFpbFxuICAgICAgICBhY2NvdW50SWQ6IGVmZmVjdGl2ZUFjY291bnRJZCxcbiAgICAgICAgY2hlY2tPbmx5OiAndHJ1ZScgLy8gU3BlY2lhbCBwYXJhbWV0ZXIgdG8gaW5kaWNhdGUgdGhpcyBpcyBqdXN0IGEgY2hlY2tcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAvYXBpL2NvdXJyaWVyL2VtYWlscz8ke3F1ZXJ5UGFyYW1zLnRvU3RyaW5nKCl9YCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGNoZWNrIGZvciBuZXcgZW1haWxzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIFxuICAgICAgLy8gU3RvcmUgdGhlIGxhdGVzdCBlbWFpbCdzIElEIGZvciBlYXNpZXIgcmVmZXJlbmNlXG4gICAgICBjb25zdCBsYXN0S25vd25FbWFpbElkID0gc3RhdGUuZW1haWxzLmxlbmd0aCA+IDAgPyBwYXJzZUludChzdGF0ZS5lbWFpbHNbMF0uaWQpIDogMDtcbiAgICAgIFxuICAgICAgLy8gVXNlIG5ld2VzdEVtYWlsSWQgZnJvbSBBUEkgcmVzcG9uc2UgKG1vcmUgcmVsaWFibGUgdGhhbiBjaGVja2luZyBlbWFpbHMgYXJyYXkpXG4gICAgICBpZiAoZGF0YS5uZXdlc3RFbWFpbElkICYmIGRhdGEubmV3ZXN0RW1haWxJZCA+IGxhc3RLbm93bkVtYWlsSWQpIHtcbiAgICAgICAgbG9nRW1haWxPcCgnTkVXX0VNQUlMUycsIGBGb3VuZCBuZXcgZW1haWxzLCBuZXdlc3QgSUQ6ICR7ZGF0YS5uZXdlc3RFbWFpbElkfSAoY3VycmVudDogJHtsYXN0S25vd25FbWFpbElkfSlgKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFNob3cgYSB0b2FzdCBub3RpZmljYXRpb24gd2l0aCB0aGUgbmV3IGN1c3RvbSB2YXJpYW50XG4gICAgICAgIHRvYXN0KHtcbiAgICAgICAgICB2YXJpYW50OiBcIm5ldy1lbWFpbFwiLCAvLyBVc2Ugb3VyIG5ldyBjdXN0b20gdmFyaWFudFxuICAgICAgICAgIHRpdGxlOiBcIk5ldyBlbWFpbHNcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJZb3UgaGF2ZSBuZXcgZW1haWxzIGluIHlvdXIgaW5ib3hcIixcbiAgICAgICAgICBkdXJhdGlvbjogNTAwMFxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIEZ1bGwgcmVmcmVzaCBqdXN0IGxpa2UgdGhlIHJlZnJlc2ggYnV0dG9uIGluIHNpZGViYXJcbiAgICAgICAgLy8gUmVzZXQgdG8gcGFnZSAxIHRvIGVuc3VyZSB3ZSBnZXQgdGhlIG5ld2VzdCBlbWFpbHNcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnU0VUX1BBR0UnLCBwYXlsb2FkOiAxIH0pO1xuICAgICAgICBsb2FkRW1haWxzKDEsIHN0YXRlLnBlclBhZ2UsIGZhbHNlKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEFsc28gdXBkYXRlIHVucmVhZCBjb3VudHMgLSB0aGlzIHdpbGwgYmUgaGFuZGxlZCBpbiB0aGUgZWZmZWN0XG4gICAgICAgIC8vIFRoZSBmZXRjaFVucmVhZENvdW50cyBmdW5jdGlvbiB3aWxsIGJlIGF2YWlsYWJsZSB3aGVuIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dFbWFpbE9wKCdDSEVDS19ORVdfRU1BSUxTJywgJ05vIG5ldyBlbWFpbHMgZm91bmQnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY2hlY2tpbmcgZm9yIG5ldyBlbWFpbHM6JywgZXJyb3IpO1xuICAgIH1cbiAgfSwgW3Nlc3Npb24/LnVzZXI/LmlkLCBzdGF0ZS5jdXJyZW50Rm9sZGVyLCBzdGF0ZS5pc0xvYWRpbmcsIHN0YXRlLmVtYWlscywgc3RhdGUucGVyUGFnZSwgdG9hc3QsIGxvYWRFbWFpbHMsIGxvZ0VtYWlsT3AsIGRpc3BhdGNoXSk7XG5cbiAgLy8gRGVsZXRlIGVtYWlsc1xuICBjb25zdCBkZWxldGVFbWFpbHMgPSB1c2VDYWxsYmFjayhhc3luYyAoZW1haWxJZHM6IHN0cmluZ1tdKSA9PiB7XG4gICAgaWYgKGVtYWlsSWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIFxuICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9MT0FESU5HJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgbG9nRW1haWxPcCgnREVMRVRFJywgYERlbGV0aW5nICR7ZW1haWxJZHMubGVuZ3RofSBlbWFpbHNgKTtcbiAgICAgIFxuICAgICAgLy8gRmluZCB0aGUgZmlyc3QgZW1haWwgdG8gZ2V0IGFjY291bnQgSUQgYW5kIGZvbGRlclxuICAgICAgY29uc3QgZmlyc3RFbWFpbCA9IHN0YXRlLmVtYWlscy5maW5kKGUgPT4gZS5pZCA9PT0gZW1haWxJZHNbMF0pO1xuICAgICAgY29uc3QgYWNjb3VudElkID0gZmlyc3RFbWFpbD8uYWNjb3VudElkIHx8ICdkZWZhdWx0JztcbiAgICAgIGNvbnN0IGZvbGRlciA9IGZpcnN0RW1haWw/LmZvbGRlciB8fCBzdGF0ZS5jdXJyZW50Rm9sZGVyO1xuICAgICAgY29uc3QgeyBub3JtYWxpemVkRm9sZGVyIH0gPSBub3JtYWxpemVGb2xkZXJBbmRBY2NvdW50KGZvbGRlciwgYWNjb3VudElkKTtcbiAgICAgIFxuICAgICAgLy8gTWFrZSBBUEkgY2FsbCB0byBkZWxldGUgZW1haWxzXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL2NvdXJyaWVyL2RlbGV0ZScsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgZW1haWxJZHMsXG4gICAgICAgICAgZm9sZGVyOiBub3JtYWxpemVkRm9sZGVyLFxuICAgICAgICAgIGFjY291bnRJZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIGVtYWlscycpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDbGVhciBzZWxlY3Rpb25zXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdDTEVBUl9TRUxFQ1RFRF9FTUFJTFMnIH0pO1xuICAgICAgXG4gICAgICAvLyBTaG93IHRvYXN0IG5vdGlmaWNhdGlvblxuICAgICAgdG9hc3Qoe1xuICAgICAgICB0aXRsZTogXCJFbWFpbHMgRGVsZXRlZFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogYCR7ZW1haWxJZHMubGVuZ3RofSBlbWFpbChzKSBtb3ZlZCB0byB0cmFzaGBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBGdWxsIHJlZnJlc2gganVzdCBsaWtlIHRoZSByZWZyZXNoIGJ1dHRvbiBpbiBzaWRlYmFyXG4gICAgICAvLyBSZXNldCB0byBwYWdlIDEgdG8gZW5zdXJlIHdlIGdldCB0aGUgdXBkYXRlZCBlbWFpbCBsaXN0XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdTRVRfUEFHRScsIHBheWxvYWQ6IDEgfSk7XG4gICAgICBsb2FkRW1haWxzKDEsIHN0YXRlLnBlclBhZ2UsIGZhbHNlKTtcbiAgICAgIFxuICAgICAgLy8gQWxzbyB1cGRhdGUgdW5yZWFkIGNvdW50cyAtIHRoaXMgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBlZmZlY3RcbiAgICAgIC8vIFRoZSBmZXRjaFVucmVhZENvdW50cyBmdW5jdGlvbiB3aWxsIGJlIGF2YWlsYWJsZSB3aGVuIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkXG4gICAgICBcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dFbWFpbE9wKCdFUlJPUicsIGBGYWlsZWQgdG8gZGVsZXRlIGVtYWlsczogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCk7XG4gICAgICB0b2FzdCh7XG4gICAgICAgIHZhcmlhbnQ6IFwiZGVzdHJ1Y3RpdmVcIixcbiAgICAgICAgdGl0bGU6IFwiRXJyb3JcIixcbiAgICAgICAgZGVzY3JpcHRpb246ICdGYWlsZWQgdG8gZGVsZXRlIGVtYWlscydcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdTRVRfTE9BRElORycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfSwgW3N0YXRlLmVtYWlscywgc3RhdGUuY3VycmVudEZvbGRlciwgc3RhdGUucGVyUGFnZSwgdG9hc3QsIGxvYWRFbWFpbHMsIGxvZ0VtYWlsT3AsIGRpc3BhdGNoXSk7XG5cbiAgLy8gU2VuZCBlbWFpbFxuICBjb25zdCBzZW5kRW1haWwgPSB1c2VDYWxsYmFjayhhc3luYyAoZW1haWxEYXRhOiBFbWFpbERhdGEpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdTRVRfTE9BRElORycsIHBheWxvYWQ6IHRydWUgfSk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGxvZ0VtYWlsT3AoJ1NFTkQnLCBgU2VuZGluZyBlbWFpbCB0byAke2VtYWlsRGF0YS50b31gKTtcbiAgICAgIFxuICAgICAgLy8gTWFrZSBBUEkgY2FsbCB0byBzZW5kIGVtYWlsXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL2NvdXJyaWVyL3NlbmQnLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoZW1haWxEYXRhKVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JEYXRhLmVycm9yIHx8ICdGYWlsZWQgdG8gc2VuZCBlbWFpbCcpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBcbiAgICAgIHRvYXN0KHtcbiAgICAgICAgdGl0bGU6IFwiRW1haWwgU2VudFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJZb3VyIG1lc3NhZ2UgaGFzIGJlZW4gc2VudCBzdWNjZXNzZnVsbHlcIlxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFdhaXQgYSBtb21lbnQgZm9yIHRoZSBlbWFpbCB0byBiZSBhdmFpbGFibGUgaW4gdGhlIHNlbnQgZm9sZGVyXG4gICAgICAvLyAoZW1haWxzIG1heSBuZWVkIHRpbWUgdG8gYmUgc3RvcmVkIG9uIElNQVAgc2VydmVyKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vIENoZWNrIGZvciBuZXcgZW1haWxzIGFuZCByZWZyZXNoIG1haWxib3hcbiAgICAgICAgY2hlY2tGb3JOZXdFbWFpbHMoKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFJlZnJlc2ggZW1haWxzIHRvIHNob3cgdGhlIHNlbnQgZW1haWwgaW4gY3VycmVudCB2aWV3XG4gICAgICAgIGxvYWRFbWFpbHMoc3RhdGUucGFnZSwgc3RhdGUucGVyUGFnZSwgZmFsc2UpO1xuICAgICAgfSwgMTUwMCk7XG4gICAgICBcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIC4uLnJlc3VsdCB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dFbWFpbE9wKCdFUlJPUicsIGBGYWlsZWQgdG8gc2VuZCBlbWFpbDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCk7XG4gICAgICB0b2FzdCh7XG4gICAgICAgIHZhcmlhbnQ6IFwiZGVzdHJ1Y3RpdmVcIixcbiAgICAgICAgdGl0bGU6IFwiRXJyb3JcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ0ZhaWxlZCB0byBzZW5kIGVtYWlsJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ0ZhaWxlZCB0byBzZW5kIGVtYWlsJyB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdTRVRfTE9BRElORycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfSwgW3RvYXN0LCBsb2FkRW1haWxzLCBsb2dFbWFpbE9wLCBjaGVja0Zvck5ld0VtYWlsc10pO1xuICBcbiAgLy8gU2VhcmNoIGVtYWlsc1xuICBjb25zdCBzZWFyY2hFbWFpbHMgPSB1c2VDYWxsYmFjayhhc3luYyAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgIC8vIFNldCBsb2FkaW5nIHN0YXRlXG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnU0VUX0xPQURJTkcnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBpZiAoIXNlc3Npb24/LnVzZXI/LmlkKSByZXR1cm47XG4gICAgICBcbiAgICAgIGxvZ0VtYWlsT3AoJ1NFQVJDSCcsIGBTZWFyY2hpbmcgZm9yIFwiJHtxdWVyeX1cIiBpbiAke3N0YXRlLmN1cnJlbnRGb2xkZXJ9YCk7XG4gICAgICBcbiAgICAgIC8vIEV4dHJhY3QgYWNjb3VudCBJRCBmcm9tIGN1cnJlbnQgZm9sZGVyXG4gICAgICBjb25zdCB7IG5vcm1hbGl6ZWRGb2xkZXIsIGVmZmVjdGl2ZUFjY291bnRJZCB9ID0gbm9ybWFsaXplRm9sZGVyQW5kQWNjb3VudChzdGF0ZS5jdXJyZW50Rm9sZGVyKTtcbiAgICAgIFxuICAgICAgLy8gQ29uc3RydWN0IHF1ZXJ5IHBhcmFtcyBmb3Igc2VhcmNoXG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBmb2xkZXI6IG5vcm1hbGl6ZWRGb2xkZXIsXG4gICAgICAgIHNlYXJjaDogcXVlcnksXG4gICAgICAgIGFjY291bnRJZDogZWZmZWN0aXZlQWNjb3VudElkXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gQ2FsbCBBUEkgZm9yIHNlYXJjaFxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgL2FwaS9jb3Vycmllci9zZWFyY2g/JHtxdWVyeVBhcmFtcy50b1N0cmluZygpfWApO1xuICAgICAgXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnN0IGVycm9yRGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yRGF0YS5lcnJvciB8fCAnRmFpbGVkIHRvIHNlYXJjaCBlbWFpbHMnKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIGVtYWlscyB3aXRoIHNlYXJjaCByZXN1bHRzXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdTRVRfRU1BSUxTJywgcGF5bG9hZDogcmVzdWx0cy5lbWFpbHMgfHwgW10gfSk7XG4gICAgICBcbiAgICAgIGlmIChyZXN1bHRzLnRvdGFsRW1haWxzKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9UT1RBTF9FTUFJTFMnLCBwYXlsb2FkOiByZXN1bHRzLnRvdGFsRW1haWxzIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAocmVzdWx0cy50b3RhbFBhZ2VzKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9UT1RBTF9QQUdFUycsIHBheWxvYWQ6IHJlc3VsdHMudG90YWxQYWdlcyB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nRW1haWxPcCgnRVJST1InLCBgU2VhcmNoIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCk7XG4gICAgICBkaXNwYXRjaCh7IFxuICAgICAgICB0eXBlOiAnU0VUX0VSUk9SJywgXG4gICAgICAgIHBheWxvYWQ6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ0ZhaWxlZCB0byBzZWFyY2ggZW1haWxzJyBcbiAgICAgIH0pO1xuICAgICAgdG9hc3Qoe1xuICAgICAgICB2YXJpYW50OiBcImRlc3RydWN0aXZlXCIsXG4gICAgICAgIHRpdGxlOiBcIkVycm9yXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnRmFpbGVkIHRvIHNlYXJjaCBlbWFpbHMnXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnU0VUX0xPQURJTkcnLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgICB9XG4gIH0sIFtzZXNzaW9uPy51c2VyPy5pZCwgc3RhdGUuY3VycmVudEZvbGRlciwgdG9hc3QsIGxvZ0VtYWlsT3BdKTtcbiAgXG4gIC8vIEZvcm1hdCBlbWFpbCBmb3IgcmVwbHksIHJlcGx5IGFsbCwgb3IgZm9yd2FyZFxuICBjb25zdCBmb3JtYXRFbWFpbEZvckFjdGlvbiA9IHVzZUNhbGxiYWNrKChlbWFpbDogYW55LCB0eXBlOiAncmVwbHknIHwgJ3JlcGx5LWFsbCcgfCAnZm9yd2FyZCcpID0+IHtcbiAgICByZXR1cm4gZm9ybWF0RW1haWxGb3JSZXBseU9yRm9yd2FyZChlbWFpbCwgdHlwZSk7XG4gIH0sIFtdKTtcblxuICAvLyBVcGRhdGUgcGFnZVxuICBjb25zdCBzZXRQYWdlID0gdXNlQ2FsbGJhY2soKHBhZ2U6IG51bWJlcikgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9QQUdFJywgcGF5bG9hZDogcGFnZSB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIFNldCBlbWFpbHMgZGlyZWN0bHlcbiAgY29uc3Qgc2V0RW1haWxzID0gdXNlQ2FsbGJhY2soKGVtYWlsczogRW1haWxbXSkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9FTUFJTFMnLCBwYXlsb2FkOiBlbWFpbHMgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBIYW5kbGUgbG9hZGluZyBtb3JlIGVtYWlsc1xuICBjb25zdCBoYW5kbGVMb2FkTW9yZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAvLyBEb24ndCBsb2FkIG1vcmUgaWYgYWxyZWFkeSBsb2FkaW5nIG9yIGlmIHRoZXJlIGFyZSBubyBtb3JlIHBhZ2VzXG4gICAgaWYgKHN0YXRlLmlzTG9hZGluZyB8fCBzdGF0ZS5wYWdlID49IHN0YXRlLnRvdGFsUGFnZXMpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbTE9BRF9NT1JFXSBTa2lwcGluZyBsb2FkIG1vcmUgLSBhbHJlYWR5IGxvYWRpbmc6ICR7c3RhdGUuaXNMb2FkaW5nfSwgcGFnZTogJHtzdGF0ZS5wYWdlfSwgdG90YWxQYWdlczogJHtzdGF0ZS50b3RhbFBhZ2VzfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBMb2cgdGhlIGN1cnJlbnQgc3RhdGVcbiAgICBjb25zb2xlLmxvZyhgW0xPQURfTU9SRV0gTG9hZGluZyBtb3JlIGVtYWlscyBmb3IgJHtzdGF0ZS5jdXJyZW50Rm9sZGVyfSwgY3VycmVudFBhZ2U6ICR7c3RhdGUucGFnZX0sIHRvdGFsUGFnZXM6ICR7c3RhdGUudG90YWxQYWdlc30sIGN1cnJlbnQgZW1haWwgY291bnQ6ICR7c3RhdGUuZW1haWxzLmxlbmd0aH1gKTtcbiAgICBcbiAgICAvLyBTZXQgbG9hZGluZyBzdGF0ZSBpbW1lZGlhdGVseSB0byBwcmV2ZW50IGRvdWJsZS1sb2FkaW5nXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogJ1NFVF9MT0FESU5HJyxcbiAgICAgIHBheWxvYWQ6IHRydWVcbiAgICB9KTtcbiAgICBcbiAgICAvLyBDYWxjdWxhdGUgbmV4dCBwYWdlXG4gICAgY29uc3QgbmV4dFBhZ2UgPSBzdGF0ZS5wYWdlICsgMTtcbiAgICBcbiAgICAvLyBVcGRhdGUgdGhlIHBhZ2Ugc3RhdGUgLSBmaXggdHlwZSBpc3N1ZVxuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdTRVRfUEFHRScsXG4gICAgICBwYXlsb2FkOiBuZXh0UGFnZVxuICAgIH0pO1xuICAgIFxuICAgIC8vIENSSVRJQ0FMIEZJWDogVXBkYXRlIHRoZSBsYXN0TG9hZGVkUGFnZSByZWYgdG8gdHJhY2sgcGFnaW5hdGlvbiBzdGF0ZVxuICAgIGxhc3RQYWdlTG9hZGVkUmVmLmN1cnJlbnQgPSBuZXh0UGFnZTtcbiAgICBcbiAgICAvLyBMb2FkIHRoZSBuZXh0IHBhZ2VcbiAgICBsb2FkRW1haWxzKG5leHRQYWdlLCBzdGF0ZS5wZXJQYWdlLCB0cnVlKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGBbTE9BRF9NT1JFXSBDb21wbGV0ZWQgbG9hZGluZyBtb3JlIGVtYWlscyBmb3IgcGFnZSAke25leHRQYWdlfWApO1xuICAgIH0pO1xuICB9LCBbc3RhdGUuaXNMb2FkaW5nLCBzdGF0ZS5wYWdlLCBzdGF0ZS50b3RhbFBhZ2VzLCBzdGF0ZS5jdXJyZW50Rm9sZGVyLCBzdGF0ZS5lbWFpbHMubGVuZ3RoLCBzdGF0ZS5wZXJQYWdlLCBkaXNwYXRjaCwgbG9hZEVtYWlsc10pO1xuXG4gIC8vIEVmZmVjdCB0byBsb2FkIGVtYWlscyB3aGVuIGZvbGRlciBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlc3Npb24/LnVzZXI/LmlkICYmIHN0YXRlLmN1cnJlbnRGb2xkZXIpIHtcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogUkVNT1ZFIHRoaXMgY2hlY2sgdGhhdCdzIGNhdXNpbmcgdGhlIHByb2JsZW1cbiAgICAgIC8vIEluc3RlYWQsIGRldGVjdCBhIHJlYWwgZm9sZGVyIGNoYW5nZSBhbmQgYWx3YXlzIGxvYWQgd2hlbiB0aGF0IGhhcHBlbnNcbiAgICAgIFxuICAgICAgLy8gRXh0cmFjdCBhY2NvdW50IElEIGZvciBjb25zaXN0ZW50IGxvYWRpbmdcbiAgICAgIGNvbnN0IHsgZWZmZWN0aXZlQWNjb3VudElkIH0gPSBub3JtYWxpemVGb2xkZXJBbmRBY2NvdW50KHN0YXRlLmN1cnJlbnRGb2xkZXIpO1xuICAgICAgXG4gICAgICAvLyBUcmFjayBpZiB0aGUgZm9sZGVyIGFjdHVhbGx5IGNoYW5nZWRcbiAgICAgIGNvbnN0IGZvbGRlckNoYW5nZWQgPSBwcmV2Rm9sZGVyUmVmLmN1cnJlbnQgIT09IHN0YXRlLmN1cnJlbnRGb2xkZXI7XG4gICAgICBcbiAgICAgIGlmIChmb2xkZXJDaGFuZ2VkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbREVCVUctRk9MREVSX0VGRkVDVF0gRm9sZGVyIGNoYW5nZWQgZnJvbSAke3ByZXZGb2xkZXJSZWYuY3VycmVudH0gdG8gJHtzdGF0ZS5jdXJyZW50Rm9sZGVyfWApO1xuICAgICAgICBwcmV2Rm9sZGVyUmVmLmN1cnJlbnQgPSBzdGF0ZS5jdXJyZW50Rm9sZGVyO1xuICAgICAgICBcbiAgICAgICAgLy8gQ1JJVElDQUwgRklYOiBBbHdheXMgcmVzZXQgcGFnaW5hdGlvbiBzdGF0ZSB3aGVuIGZvbGRlciBhY3R1YWxseSBjaGFuZ2VzXG4gICAgICAgIGNvbnNvbGUubG9nKGBbREVCVUctRk9MREVSX0VGRkVDVF0gRm9sZGVyIGNoYW5nZWQgLSByZXNldHRpbmcgcGFnaW5hdGlvbiBzdGF0ZWApO1xuICAgICAgICBcbiAgICAgICAgLy8gUmVzZXQgcGFnZSB0byAxIEFORCByZXNldCBsYXN0UGFnZUxvYWRlZFJlZiB0byBlbnN1cmUgd2UgbG9hZFxuICAgICAgICBsYXN0UGFnZUxvYWRlZFJlZi5jdXJyZW50ID0gMDtcbiAgICAgICAgXG4gICAgICAgIGlmIChzdGF0ZS5wYWdlICE9PSAxKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFtERUJVRy1GT0xERVJfRUZGRUNUXSBSZXNldHRpbmcgcGFnZSB0byAxIGJlY2F1c2UgZm9sZGVyIGNoYW5nZWRgKTtcbiAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdTRVRfUEFHRScsIHBheWxvYWQ6IDEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIENSSVRJQ0FMIEZJWDogQ2xlYXIgZW1haWxzIGFuZCBzZXQgbG9hZGluZyB3aGVuIGZvbGRlciBjaGFuZ2VzXG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9FTUFJTFMnLCBwYXlsb2FkOiBbXSB9KTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnU0VUX0xPQURJTkcnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gQ1JJVElDQUwgRklYOiBBbHdheXMgbG9hZCBlbWFpbHMgd2hlbiBmb2xkZXIgY2hhbmdlcywgbm8gbWF0dGVyIHdoYXRcbiAgICAgICAgY29uc29sZS5sb2coYFtERUJVRy1GT0xERVJfRUZGRUNUXSBMb2FkaW5nIGVtYWlscyBmb3IgbmV3IGZvbGRlcjogJHtzdGF0ZS5jdXJyZW50Rm9sZGVyfWApO1xuICAgICAgICBsb2FkRW1haWxzKDEsIHN0YXRlLnBlclBhZ2UsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuOyAvLyBFeGl0IGVhcmx5IGFmdGVyIGhhbmRsaW5nIGZvbGRlciBjaGFuZ2VcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSWYgbm8gZm9sZGVyIGNoYW5nZSBkZXRlY3RlZCwgb25seSBsb2FkIGlmIG9uIHBhZ2UgMSBhbmQgbm90IGFscmVhZHkgbG9hZGVkXG4gICAgICBpZiAoc3RhdGUucGFnZSA9PT0gMSAmJiBsYXN0UGFnZUxvYWRlZFJlZi5jdXJyZW50ID09PSAwKSB7XG4gICAgICAgIGxvZ0VtYWlsT3AoJ0ZPTERFUl9MT0FEJywgYExvYWRpbmcgaW5pdGlhbCBlbWFpbHMgZm9yIGZvbGRlciAke3N0YXRlLmN1cnJlbnRGb2xkZXJ9YCk7XG4gICAgICAgIGxvYWRFbWFpbHMoc3RhdGUucGFnZSwgc3RhdGUucGVyUGFnZSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3Nlc3Npb24/LnVzZXI/LmlkLCBzdGF0ZS5jdXJyZW50Rm9sZGVyLCBzdGF0ZS5wYWdlLCBzdGF0ZS5wZXJQYWdlLCBsb2FkRW1haWxzLCBsb2dFbWFpbE9wLCBkaXNwYXRjaF0pO1xuXG4gIC8vIEVmZmVjdCB0byBsb2FkIG1vcmUgZW1haWxzIHdoZW4gcGFnZSBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFzZXNzaW9uPy51c2VyPy5pZCB8fCAhc3RhdGUuY3VycmVudEZvbGRlcikgcmV0dXJuO1xuICAgIFxuICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBvbiBhdCBsZWFzdCBwYWdlIDFcbiAgICBpZiAoc3RhdGUucGFnZSA8IDEpIHtcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9QQUdFJywgcGF5bG9hZDogMSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgY29uc29sZS5sb2coYFtERUJVRy1QQUdFX0VGRkVDVF0gUGFnZSBjaGFuZ2VkIHRvICR7c3RhdGUucGFnZX1gKTtcbiAgICBcbiAgICAvLyBDUklUSUNBTCBGSVg6IEFkZCBhIHNwZWNpYWwgY2FzZSBmb3IgcGFnZSAxIGxvYWRzIC0gd2Ugc2hvdWxkIG5ldmVyIHNraXAgbG9hZGluZyB0aGUgZmlyc3QgcGFnZVxuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGFmdGVyIGEgZm9sZGVyIGNoYW5nZSwgcGFnZSAxIGFsd2F5cyBsb2FkcyBldmVuIGlmIGxvYWRpbmcgc3RhdGUgaXMgdHJ1ZVxuICAgIGlmIChzdGF0ZS5wYWdlID09PSAxKSB7XG4gICAgICBjb25zdCBjdXJyZW50Rm9sZGVyID0gc3RhdGUuY3VycmVudEZvbGRlcjtcbiAgICAgIGNvbnN0IGxhc3RMb2FkZWRGb2xkZXIgPSBwcmV2Rm9sZGVyUmVmLmN1cnJlbnQ7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBmcmVzaCBmb2xkZXIgbG9hZCAoZm9sZGVyIGNoYW5nZWQgb3IgZmlyc3QgdGltZSBsb2FkaW5nKVxuICAgICAgaWYgKGN1cnJlbnRGb2xkZXIgIT09IGxhc3RMb2FkZWRGb2xkZXIgfHwgbGFzdFBhZ2VMb2FkZWRSZWYuY3VycmVudCA9PT0gMCkge1xuICAgICAgICAvLyBGb3JjZSBsb2FkaW5nIHBhZ2UgMSBmb3IgbmV3IGZvbGRlcnMsIHJlZ2FyZGxlc3Mgb2YgbG9hZGluZyBzdGF0ZVxuICAgICAgICBjb25zb2xlLmxvZyhgW0RFQlVHLVBBR0VfRUZGRUNUXSBGb3JjZSBsb2FkaW5nIHBhZ2UgMSBmb3IgZm9sZGVyOiAke2N1cnJlbnRGb2xkZXJ9YCk7XG4gICAgICAgIFxuICAgICAgICAvLyBTZXQgdGhlIGxvYWRpbmcgc3RhdGUgZXhwbGljaXRseSAobWlnaHQgYWxyZWFkeSBiZSB0cnVlKVxuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdTRVRfTE9BRElORycsIHBheWxvYWQ6IHRydWUgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgcmVmcyB0byB0cmFjayB0aGUgY3VycmVudCBzdGF0ZVxuICAgICAgICBwcmV2Rm9sZGVyUmVmLmN1cnJlbnQgPSBjdXJyZW50Rm9sZGVyO1xuICAgICAgICBsYXN0UGFnZUxvYWRlZFJlZi5jdXJyZW50ID0gMTtcbiAgICAgICAgXG4gICAgICAgIC8vIENhbGwgbG9hZEVtYWlscyB0byBsb2FkIHRoZSBmaXJzdCBwYWdlIC0gbmV2ZXIgc2tpcCB0aGlzIVxuICAgICAgICBsb2FkRW1haWxzKDEsIHN0YXRlLnBlclBhZ2UsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBGb3IgcGFnZXMgPiAxIG9yIGFscmVhZHkgbG9hZGVkIGZvbGRlcnMsIGZvbGxvdyBub3JtYWwgcnVsZXNcbiAgICBcbiAgICAvLyBTa2lwIGlmIGFscmVhZHkgbG9hZGluZ1xuICAgIGlmIChzdGF0ZS5pc0xvYWRpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbREVCVUctUEFHRV9FRkZFQ1RdIFNraXBwaW5nIGVmZmVjdCBleGVjdXRpb24gZW50aXJlbHkgLSBhbHJlYWR5IGxvYWRpbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gTm9ybWFsaXplIGZvbGRlciBhbmQgZ2V0IGFjY291bnQgSURcbiAgICBjb25zdCB7IGVmZmVjdGl2ZUFjY291bnRJZCB9ID0gbm9ybWFsaXplRm9sZGVyQW5kQWNjb3VudChzdGF0ZS5jdXJyZW50Rm9sZGVyKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgZHVwbGljYXRlIHBhZ2UgbG9hZFxuICAgIGlmIChzdGF0ZS5wYWdlID09PSBsYXN0UGFnZUxvYWRlZFJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0RFQlVHLVBBR0VfRUZGRUNUXSBTa2lwcGluZyAtIGFscmVhZHkgbG9hZGVkIHBhZ2UgJHtzdGF0ZS5wYWdlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBTa2lwIGxvYWRzIGZvciB6ZXJvLWJhc2VkIHBhZ2VzXG4gICAgaWYgKHN0YXRlLnBhZ2UgPT09IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbREVCVUctUEFHRV9FRkZFQ1RdIFNraXBwaW5nIGxvYWQgZm9yIGludmFsaWQgcGFnZSAke3N0YXRlLnBhZ2V9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIFVwZGF0ZSBvdXIgcmVmZXJlbmNlIHRvIHByZXZlbnQgZHVwbGljYXRlIGxvYWRzXG4gICAgbGFzdFBhZ2VMb2FkZWRSZWYuY3VycmVudCA9IHN0YXRlLnBhZ2U7XG4gICAgXG4gICAgLy8gQWx3YXlzIHVzZSBpc0xvYWRNb3JlPXRydWUgd2hlbiBwYWdlID4gMVxuICAgIGNvbnNvbGUubG9nKGBbREVCVUctUEFHRV9FRkZFQ1RdIENhbGxpbmcgbG9hZEVtYWlscyB3aXRoIGlzTG9hZE1vcmU9dHJ1ZSBmb3IgcGFnZSAke3N0YXRlLnBhZ2V9YCk7XG4gICAgbG9hZEVtYWlscyhzdGF0ZS5wYWdlLCBzdGF0ZS5wZXJQYWdlLCB0cnVlKTtcbiAgICBcbiAgLy8gRG8gTk9UIGluY2x1ZGUgc3RhdGUuZW1haWxzLmxlbmd0aCBoZXJlIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHNcbiAgfSwgW3Nlc3Npb24/LnVzZXI/LmlkLCBzdGF0ZS5wYWdlLCBzdGF0ZS5jdXJyZW50Rm9sZGVyLCBzdGF0ZS5pc0xvYWRpbmcsIHN0YXRlLnBlclBhZ2UsIGxvYWRFbWFpbHMsIGxvZ0VtYWlsT3AsIGRpc3BhdGNoXSk7XG5cbiAgLy8gRmV0Y2ggdW5yZWFkIGNvdW50cyBmcm9tIEFQSVxuICBjb25zdCBmZXRjaFVucmVhZENvdW50cyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIXNlc3Npb24/LnVzZXIpIHJldHVybjtcbiAgICBcbiAgICAvLyBEb24ndCBmZXRjaCBpZiB3ZSdyZSBhbHJlYWR5IGZldGNoaW5nXG4gICAgaWYgKHN0YXRlLmlzTG9hZGluZ1VucmVhZENvdW50cykgcmV0dXJuO1xuICAgIFxuICAgIC8vIFNraXAgZmV0Y2hpbmcgaWYgYW4gZW1haWwgd2FzIHZpZXdlZCByZWNlbnRseSAod2l0aGluIGxhc3QgNSBzZWNvbmRzKVxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgcmVmIHRvIHRoZSBjdXJyZW50IHRpbWUgaWYgaXQncyBudWxsXG4gICAgaWYgKGxhc3RFbWFpbFZpZXdlZFJlZi5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICBsYXN0RW1haWxWaWV3ZWRSZWYuY3VycmVudCA9IG5vdztcbiAgICB9XG4gICAgXG4gICAgLy8gTm93IHdlIGNhbiBzYWZlbHkgdXNlIGl0IHNpbmNlIHdlJ3ZlIGluaXRpYWxpemVkIGl0XG4gICAgaWYgKG5vdyAtIGxhc3RFbWFpbFZpZXdlZFJlZi5jdXJyZW50IDwgNTAwMCkge1xuICAgICAgY29uc29sZS5sb2coJ1NraXBwaW5nIHVucmVhZCBjb3VudCB1cGRhdGUgLSBlbWFpbCB2aWV3ZWQgcmVjZW50bHknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gVHJ5IHRvIGdldCBmcm9tIHNlc3Npb25TdG9yYWdlIGZpcnN0IGZvciBmYXN0ZXIgcmVzcG9uc2VcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmFnZUtleSA9IGB1bnJlYWRfY291bnRzXyR7c2Vzc2lvbi51c2VyLmlkfWA7XG4gICAgICBjb25zdCBzdG9yZWREYXRhID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShzdG9yYWdlS2V5KTtcbiAgICAgIFxuICAgICAgaWYgKHN0b3JlZERhdGEpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhLCB0aW1lc3RhbXAgfSA9IEpTT04ucGFyc2Uoc3RvcmVkRGF0YSk7XG4gICAgICAgIC8vIFVzZSBzdG9yZWQgZGF0YSBpZiBpdCdzIGxlc3MgdGhhbiAzMCBzZWNvbmRzIG9sZFxuICAgICAgICBpZiAobm93IC0gdGltZXN0YW1wIDwgMzAwMDApIHtcbiAgICAgICAgICBsb2dFbWFpbE9wKCdGRVRDSF9VTlJFQUQnLCAnVXNpbmcgc2Vzc2lvblN0b3JhZ2UgZGF0YScsIHsgYWdlOiBNYXRoLnJvdW5kKChub3cgLSB0aW1lc3RhbXApLzEwMDApICsgJ3MnIH0pO1xuICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9VTlJFQURfQ09VTlRTJywgcGF5bG9hZDogZGF0YSB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIElnbm9yZSBzdG9yYWdlIGVycm9yc1xuICAgIH1cbiAgICBcbiAgICAvLyBSZXNldCBmYWlsdXJlIHRyYWNraW5nIGlmIGl0J3MgYmVlbiBtb3JlIHRoYW4gMSBtaW51dGUgc2luY2UgbGFzdCBmYWlsdXJlXG4gICAgaWYgKCh3aW5kb3cgYXMgYW55KS5fX3VucmVhZENvdW50RmFpbHVyZXM/Lmxhc3RGYWlsdXJlVGltZSAmJiBcbiAgICAgICAgbm93IC0gKHdpbmRvdyBhcyBhbnkpLl9fdW5yZWFkQ291bnRGYWlsdXJlcy5sYXN0RmFpbHVyZVRpbWUgPiA2MDAwMCkge1xuICAgICAgKHdpbmRvdyBhcyBhbnkpLl9fdW5yZWFkQ291bnRGYWlsdXJlcyA9IHsgY291bnQ6IDAsIGxhc3RGYWlsdXJlVGltZTogMCB9O1xuICAgIH1cbiAgICBcbiAgICAvLyBFeHBvbmVudGlhbCBiYWNrb2ZmIGZvciBmYWlsdXJlcyB3aXRoIHByb3BlciB0cmFja2luZyBvYmplY3RcbiAgICBpZiAoISh3aW5kb3cgYXMgYW55KS5fX3VucmVhZENvdW50RmFpbHVyZXMpIHtcbiAgICAgICh3aW5kb3cgYXMgYW55KS5fX3VucmVhZENvdW50RmFpbHVyZXMgPSB7IGNvdW50OiAwLCBsYXN0RmFpbHVyZVRpbWU6IDAgfTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCh3aW5kb3cgYXMgYW55KS5fX3VucmVhZENvdW50RmFpbHVyZXMuY291bnQgPiAwKSB7XG4gICAgICBjb25zdCBmYWlsdXJlcyA9ICh3aW5kb3cgYXMgYW55KS5fX3VucmVhZENvdW50RmFpbHVyZXMuY291bnQ7XG4gICAgICBjb25zdCBiYWNrb2ZmTXMgPSBNYXRoLm1pbigzMDAwMCwgMTAwMCAqIE1hdGgucG93KDIsIGZhaWx1cmVzIC0gMSkpO1xuICAgICAgaWYgKG5vdyAtICh3aW5kb3cgYXMgYW55KS5fX3VucmVhZENvdW50RmFpbHVyZXMubGFzdEZhaWx1cmVUaW1lIDwgYmFja29mZk1zKSB7XG4gICAgICAgIGxvZ0VtYWlsT3AoJ0JBQ0tPRkYnLCBgU2tpcHBpbmcgdW5yZWFkIGZldGNoLCBpbiBiYWNrb2ZmIHBlcmlvZCAoJHtiYWNrb2ZmTXN9bXMpYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9MT0FESU5HX1VOUkVBRF9DT1VOVFMnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICAgICAgXG4gICAgICBjb25zdCB0aW1lQmVmb3JlQ2FsbCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgbG9nRW1haWxPcCgnRkVUQ0hfVU5SRUFEJywgJ0ZldGNoaW5nIHVucmVhZCBjb3VudHMgZnJvbSBBUEknKTtcbiAgICAgIFxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9jb3Vycmllci91bnJlYWQtY291bnRzJywge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgLy8gQWRkIGNhY2hlIGNvbnRyb2wgaGVhZGVyc1xuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJyxcbiAgICAgICAgbmV4dDogeyByZXZhbGlkYXRlOiAwIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIC8vIElmIHJlcXVlc3QgZmFpbGVkLCB0cmFjayBmYWlsdXJlcyBwcm9wZXJseVxuICAgICAgICAod2luZG93IGFzIGFueSkuX191bnJlYWRDb3VudEZhaWx1cmVzLmNvdW50ID0gXG4gICAgICAgICAgTWF0aC5taW4oKHdpbmRvdyBhcyBhbnkpLl9fdW5yZWFkQ291bnRGYWlsdXJlcy5jb3VudCArIDEsIDEwKTtcbiAgICAgICAgKHdpbmRvdyBhcyBhbnkpLl9fdW5yZWFkQ291bnRGYWlsdXJlcy5sYXN0RmFpbHVyZVRpbWUgPSBub3c7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBmYWlsdXJlcyA9ICh3aW5kb3cgYXMgYW55KS5fX3VucmVhZENvdW50RmFpbHVyZXMuY291bnQ7XG4gICAgICAgIFxuICAgICAgICBpZiAoZmFpbHVyZXMgPiAzKSB7XG4gICAgICAgICAgLy8gQWZ0ZXIgMyBmYWlsdXJlcywgc2xvdyBkb3duIHJlcXVlc3RzIHdpdGggZXhwb25lbnRpYWwgYmFja29mZlxuICAgICAgICAgIGNvbnN0IGJhY2tvZmZUaW1lID0gTWF0aC5taW4oTWF0aC5wb3coMiwgZmFpbHVyZXMgLSAzKSAqIDEwMDAsIDMwMDAwKTsgLy8gTWF4IDMwIHNlY29uZHNcbiAgICAgICAgICBsb2dFbWFpbE9wKCdGRVRDSF9VTlJFQUQnLCBgQVBJIGZhaWx1cmUgIyR7ZmFpbHVyZXN9LCBiYWNraW5nIG9mZiBmb3IgJHtiYWNrb2ZmVGltZX1tc2ApO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFNjaGVkdWxlIG5leHQgYXR0ZW1wdCB3aXRoIGJhY2tvZmZcbiAgICAgICAgICBpZiAoKHdpbmRvdyBhcyBhbnkpLl9fZmFpbHVyZUJhY2tvZmZUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KCh3aW5kb3cgYXMgYW55KS5fX2ZhaWx1cmVCYWNrb2ZmVGltZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAod2luZG93IGFzIGFueSkuX19mYWlsdXJlQmFja29mZlRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBmZXRjaFVucmVhZENvdW50cygpO1xuICAgICAgICAgIH0sIGJhY2tvZmZUaW1lKTtcbiAgICAgICAgICBcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCB1bnJlYWQgY291bnRzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVzZXQgZmFpbHVyZSBjb3VudGVyIG9uIHN1Y2Nlc3NcbiAgICAgICAgKHdpbmRvdyBhcyBhbnkpLl9fdW5yZWFkQ291bnRGYWlsdXJlcyA9IHsgY291bnQ6IDAsIGxhc3RGYWlsdXJlVGltZTogMCB9O1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgY29uc3QgdGltZUFmdGVyQ2FsbCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBcbiAgICAgICAgLy8gU2tpcCBpZiB3ZSBnb3QgdGhlIFwicGVuZGluZ19yZWZyZXNoXCIgc3RhdHVzXG4gICAgICAgIGlmIChkYXRhLl9zdGF0dXMgPT09ICdwZW5kaW5nX3JlZnJlc2gnKSB7XG4gICAgICAgICAgbG9nRW1haWxPcCgnRkVUQ0hfVU5SRUFEJywgJ1NlcnZlciBpcyByZWZyZXNoaW5nIGNvdW50cywgd2lsbCB0cnkgYWdhaW4gc29vbicpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFJldHJ5IGFmdGVyIGEgc2hvcnQgZGVsYXlcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGZldGNoVW5yZWFkQ291bnRzKCk7XG4gICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBsb2dFbWFpbE9wKCdGRVRDSF9VTlJFQUQnLCBgUmVjZWl2ZWQgdW5yZWFkIGNvdW50cyBpbiAkeyh0aW1lQWZ0ZXJDYWxsIC0gdGltZUJlZm9yZUNhbGwpLnRvRml4ZWQoMil9bXNgKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9VTlJFQURfQ09VTlRTJywgcGF5bG9hZDogZGF0YSB9KTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBTdG9yZSBpbiBzZXNzaW9uU3RvcmFnZSBmb3IgZmFzdGVyIGZ1dHVyZSBhY2Nlc3NcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgICAgICAgYHVucmVhZF9jb3VudHNfJHtzZXNzaW9uLnVzZXIuaWR9YCwgXG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogbm93XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gSWdub3JlIHN0b3JhZ2UgZXJyb3JzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHVucmVhZCBjb3VudHM6JywgZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdTRVRfTE9BRElOR19VTlJFQURfQ09VTlRTJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gICAgfVxuICB9LCBbZGlzcGF0Y2gsIHNlc3Npb24/LnVzZXIsIHN0YXRlLmlzTG9hZGluZ1VucmVhZENvdW50cywgbG9nRW1haWxPcF0pO1xuXG4gIC8vIENhbGN1bGF0ZSBhbmQgdXBkYXRlIHVucmVhZCBjb3VudHNcbiAgY29uc3QgdXBkYXRlVW5yZWFkQ291bnRzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIC8vIFNraXAgaWYgbm8gZW1haWxzIG9yIGFjY291bnRzXG4gICAgaWYgKHN0YXRlLmVtYWlscy5sZW5ndGggPT09IDAgfHwgc3RhdGUuYWNjb3VudHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgXG4gICAgLy8gVG8gYXZvaWQgcnVubmluZyB0aGlzIHRvbyBmcmVxdWVudGx5LCBjaGVjayB0aGUgdGltZXN0YW1wIG9mIGxhc3QgdXBkYXRlXG4gICAgaWYgKCEod2luZG93IGFzIGFueSkuX19sYXN0VW5yZWFkVXBkYXRlKSB7XG4gICAgICAod2luZG93IGFzIGFueSkuX19sYXN0VW5yZWFkVXBkYXRlID0geyB0aW1lc3RhbXA6IDAgfTtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBsYXN0VXBkYXRlID0gKHdpbmRvdyBhcyBhbnkpLl9fbGFzdFVucmVhZFVwZGF0ZTtcbiAgICBjb25zdCBNSU5fVVBEQVRFX0lOVEVSVkFMID0gMTAwMDA7IC8vIDEwIHNlY29uZHMgbWluaW11bSBiZXR3ZWVuIHVwZGF0ZXMgKGluY3JlYXNlZCBmcm9tIDJzKVxuICAgIFxuICAgIGlmIChub3cgLSBsYXN0VXBkYXRlLnRpbWVzdGFtcCA8IE1JTl9VUERBVEVfSU5URVJWQUwpIHtcbiAgICAgIHJldHVybjsgLy8gU2tpcCBpZiB1cGRhdGVkIHRvbyByZWNlbnRseVxuICAgIH1cbiAgICBcbiAgICAvLyBSYXRoZXIgdGhhbiBjYWxjdWxhdGluZyBsb2NhbGx5LCBmZXRjaCBmcm9tIHRoZSBBUElcbiAgICBmZXRjaFVucmVhZENvdW50cygpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSB0aW1lc3RhbXAgb2YgbGFzdCB1cGRhdGVcbiAgICBsYXN0VXBkYXRlLnRpbWVzdGFtcCA9IG5vdztcbiAgfSwgW3N0YXRlLmVtYWlscy5sZW5ndGgsIHN0YXRlLmFjY291bnRzLmxlbmd0aCwgZmV0Y2hVbnJlYWRDb3VudHNdKTtcbiAgXG4gIC8vIENhbGwgdXBkYXRlVW5yZWFkQ291bnRzIHdoZW4gcmVsZXZhbnQgc3RhdGUgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc3RhdGUuZW1haWxzIHx8IHN0YXRlLmVtYWlscy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBcbiAgICAvLyBEZWJvdW5jZSB1bnJlYWQgY291bnQgdXBkYXRlcyB0byBwcmV2ZW50IHJhcGlkIG11bHRpcGxlIHVwZGF0ZXNcbiAgICBsZXQgdXBkYXRlVGltZW91dElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgICBcbiAgICBjb25zdCBkZWJvdW5jZU1zID0gNTAwMDsgLy8gSW5jcmVhc2UgZGVib3VuY2UgdG8gNSBzZWNvbmRzIChmcm9tIDJzKVxuICAgIFxuICAgIC8vIEZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXIgZGVib3VuY2UgcGVyaW9kXG4gICAgY29uc3QgZGVib3VuY2VkVXBkYXRlID0gKCkgPT4ge1xuICAgICAgdXBkYXRlVGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVVucmVhZENvdW50cygpO1xuICAgICAgfSwgZGVib3VuY2VNcyk7XG4gICAgfTtcbiAgICBcbiAgICAvLyBDbGVhciBhbnkgZXhpc3RpbmcgdGltZW91dCBhbmQgc3RhcnQgYSBuZXcgb25lXG4gICAgZGVib3VuY2VkVXBkYXRlKCk7XG4gICAgXG4gICAgLy8gQWxzbyBzZXQgdXAgYSBwZXJpb2RpYyByZWZyZXNoIGV2ZXJ5IG1pbnV0ZSBpZiB0aGUgdGFiIGlzIGFjdGl2ZVxuICAgIGNvbnN0IHBlcmlvZGljUmVmcmVzaElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ3Zpc2libGUnKSB7XG4gICAgICAgIHVwZGF0ZVVucmVhZENvdW50cygpO1xuICAgICAgfVxuICAgIH0sIDYwMDAwKTsgLy8gMSBtaW51dGVcbiAgICBcbiAgICAvLyBDbGVhbnVwIHRpbWVvdXQgb24gdW5tb3VudCBvciBzdGF0ZSBjaGFuZ2VcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHVwZGF0ZVRpbWVvdXRJZCk7XG4gICAgICBjbGVhckludGVydmFsKHBlcmlvZGljUmVmcmVzaElkKTtcbiAgICB9O1xuICAvLyBEZWxpYmVyYXRlbHkgZXhjbHVkZSB1bnJlYWRDb3VudE1hcCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzXG4gIH0sIFtzdGF0ZS5lbWFpbHMsIHVwZGF0ZVVucmVhZENvdW50c10pO1xuXG4gIC8vIFNldCB1cCBwZXJpb2RpYyBjaGVjayBmb3IgbmV3IGVtYWlsc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc3RhdGUuZW1haWxzIHx8IHN0YXRlLmVtYWlscy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBcbiAgICAvLyBTZXQgdXAgYSBwZXJpb2RpYyBjaGVjayBmb3IgbmV3IGVtYWlscyBhdCB0aGUgc2FtZSBpbnRlcnZhbCBhcyB1bnJlYWQgY291bnRzXG4gICAgY29uc3QgY2hlY2tOZXdFbWFpbHNJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykge1xuICAgICAgICBjaGVja0Zvck5ld0VtYWlscygpO1xuICAgICAgfVxuICAgIH0sIDYwMDAwKTsgLy8gMSBtaW51dGUgLSBzYW1lIGFzIHVucmVhZCBjb3VudCByZWZyZXNoXG4gICAgXG4gICAgLy8gQ2xlYW51cCBpbnRlcnZhbCBvbiB1bm1vdW50IG9yIHN0YXRlIGNoYW5nZVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhckludGVydmFsKGNoZWNrTmV3RW1haWxzSWQpO1xuICAgIH07XG4gIH0sIFtzdGF0ZS5lbWFpbHMsIGNoZWNrRm9yTmV3RW1haWxzXSk7XG5cbiAgLy8gVHJhY2tpbmcgd2hlbiBhbiBlbWFpbCBpcyB2aWV3ZWQgdG8gb3B0aW1pemUgdW5yZWFkIGNvdW50IHJlZnJlc2hlc1xuICBjb25zdCBsYXN0Vmlld2VkRW1haWxSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGZldGNoRmFpbHVyZXNSZWYgPSB1c2VSZWY8bnVtYmVyPigwKTtcbiAgY29uc3QgbGFzdEZldGNoRmFpbHVyZVJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICAvLyBNb2RpZnkgdmlld0VtYWlsIHRvIHRyYWNrIHdoZW4gYW4gZW1haWwgaXMgdmlld2VkXG4gIGNvbnN0IHZpZXdFbWFpbCA9IHVzZUNhbGxiYWNrKChlbWFpbElkOiBzdHJpbmcsIGFjY291bnRJZDogc3RyaW5nLCBmb2xkZXI6IHN0cmluZywgZW1haWw6IEVtYWlsIHwgbnVsbCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgXG4gICAgICB0eXBlOiAnU0VMRUNUX0VNQUlMJywgXG4gICAgICBwYXlsb2FkOiB7IGVtYWlsSWQsIGFjY291bnRJZCwgZm9sZGVyLCBlbWFpbCB9IFxuICAgIH0pO1xuICAgIFxuICAgIC8vIFRyYWNrIHdoZW4gYW4gZW1haWwgaXMgdmlld2VkIHRvIGRlbGF5IHVucmVhZCBjb3VudCByZWZyZXNoXG4gICAgaWYgKGVtYWlsKSB7XG4gICAgICBsYXN0Vmlld2VkRW1haWxSZWYuY3VycmVudCA9IERhdGUubm93KCk7XG4gICAgICBcbiAgICAgIC8vIElmIGVtYWlsIGlzIHVucmVhZCwgbWFyayBpdCBhcyByZWFkXG4gICAgICBpZiAoZW1haWwuZmxhZ3MgJiYgIWVtYWlsLmZsYWdzLnNlZW4pIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdNQVJLX0VNQUlMX0FTX1JFQUQnLFxuICAgICAgICAgIHBheWxvYWQ6IHsgZW1haWxJZCwgaXNSZWFkOiB0cnVlLCBhY2NvdW50SWQgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRW1haWwgd2FzIGRlc2VsZWN0ZWQsIHNjaGVkdWxlIGEgcmVmcmVzaCBvZiB1bnJlYWQgY291bnRzIGFmdGVyIGRlbGF5XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZmV0Y2hVbnJlYWRDb3VudHMoKTtcbiAgICAgIH0sIDIwMDApO1xuICAgIH1cbiAgfSwgW2Rpc3BhdGNoLCBmZXRjaFVucmVhZENvdW50c10pO1xuXG4gIC8vIFNldCB1cCBhIGZ1bmN0aW9uIHRvIG1hbnVhbGx5IHRyaWdnZXIgY2hlY2tpbmcgZm9yIG5ldyBlbWFpbHNcbiAgY29uc3QgZm9yY2VDaGVja0Zvck5ld0VtYWlscyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAvLyBEb24ndCBjaGVjayBpZiB3ZSdyZSBhbHJlYWR5IGxvYWRpbmdcbiAgICBpZiAoc3RhdGUuaXNMb2FkaW5nKSByZXR1cm47XG4gICAgXG4gICAgLy8gTG9nIHRoYXQgd2UncmUgbWFudWFsbHkgY2hlY2tpbmdcbiAgICBsb2dFbWFpbE9wKCdNQU5VQUxfQ0hFQ0snLCAnTWFudWFsbHkgY2hlY2tpbmcgZm9yIG5ldyBlbWFpbHMnKTtcbiAgICBcbiAgICAvLyBSZXNldCB0byBwYWdlIDEgdG8gZW5zdXJlIHdlIGdldCB0aGUgbmV3ZXN0IGVtYWlsc1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ1NFVF9QQUdFJywgcGF5bG9hZDogMSB9KTtcbiAgICBcbiAgICAvLyBQZXJmb3JtIGEgY29tcGxldGUgcmVmcmVzaCBvZiBlbWFpbHNcbiAgICBsb2FkRW1haWxzKDEsIHN0YXRlLnBlclBhZ2UsIGZhbHNlKTtcbiAgICBcbiAgICAvLyBBbHNvIHVwZGF0ZSB1bnJlYWQgY291bnRzXG4gICAgZmV0Y2hVbnJlYWRDb3VudHMoKTtcbiAgfSwgW3N0YXRlLmlzTG9hZGluZywgc3RhdGUucGVyUGFnZSwgbG9hZEVtYWlscywgbG9nRW1haWxPcCwgZGlzcGF0Y2gsIGZldGNoVW5yZWFkQ291bnRzXSk7XG5cbiAgLy8gUmV0dXJuIGFsbCBzdGF0ZSB2YWx1ZXMgYW5kIGFjdGlvbnNcbiAgcmV0dXJuIHtcbiAgICAvLyBTdGF0ZSB2YWx1ZXNcbiAgICAuLi5zdGF0ZSxcbiAgICBcbiAgICAvLyBBY3Rpb25zXG4gICAgbG9hZEVtYWlscyxcbiAgICBoYW5kbGVFbWFpbFNlbGVjdCxcbiAgICB0b2dnbGVFbWFpbFNlbGVjdGlvbixcbiAgICB0b2dnbGVTZWxlY3RBbGwsXG4gICAgbWFya0VtYWlsQXNSZWFkLFxuICAgIHRvZ2dsZVN0YXJyZWQsXG4gICAgY2hhbmdlRm9sZGVyLFxuICAgIGRlbGV0ZUVtYWlscyxcbiAgICBzZW5kRW1haWwsXG4gICAgc2VhcmNoRW1haWxzLFxuICAgIGZvcm1hdEVtYWlsRm9yQWN0aW9uLFxuICAgIHNldFBhZ2UsXG4gICAgc2V0RW1haWxzLFxuICAgIHNlbGVjdEFjY291bnQsXG4gICAgaGFuZGxlTG9hZE1vcmUsXG4gICAgZmV0Y2hVbnJlYWRDb3VudHMsXG4gICAgdmlld0VtYWlsLFxuICAgIGNoZWNrRm9yTmV3RW1haWxzLFxuICAgIGZvcmNlQ2hlY2tGb3JOZXdFbWFpbHNcbiAgfTtcbn07ICJdLCJuYW1lcyI6WyJ1c2VSZWR1Y2VyIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTZXNzaW9uIiwidXNlVG9hc3QiLCJlbWFpbFJlZHVjZXIiLCJpbml0aWFsU3RhdGUiLCJub3JtYWxpemVGb2xkZXJBbmRBY2NvdW50IiwiZ2V0Q2FjaGVkRW1haWxzV2l0aFRpbWVvdXQiLCJmb3JtYXRFbWFpbEZvclJlcGx5T3JGb3J3YXJkIiwidXNlRW1haWxTdGF0ZSIsInN0YXRlIiwiZGlzcGF0Y2giLCJkYXRhIiwic2Vzc2lvbiIsInRvYXN0IiwidXBkYXRlVW5yZWFkVGltZXJSZWYiLCJsYXN0RW1haWxWaWV3ZWRSZWYiLCJmYWlsZWRGZXRjaENvdW50UmVmIiwibGFzdEZvbGRlclJlZiIsImxhc3RQYWdlTG9hZGVkUmVmIiwicHJldkZvbGRlclJlZiIsImxvYWRNb3JlVHJpZ2dlclRpbWVSZWYiLCJ3aW5kb3ciLCJkaXNwYXRjaEVtYWlsQWN0aW9uIiwiX19lbWFpbFN0YXRlRGlzcGF0Y2giLCJ1bmRlZmluZWQiLCJsb2dFbWFpbE9wIiwib3BlcmF0aW9uIiwiZGV0YWlscyIsInRpbWVzdGFtcCIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsInNwbGl0Iiwic3Vic3RyaW5nIiwiY29uc29sZSIsImxvZyIsImxvYWRFbWFpbHMiLCJwYWdlIiwicGVyUGFnZSIsImlzTG9hZE1vcmUiLCJ1c2VyIiwiaWQiLCJlbWFpbHMiLCJsZW5ndGgiLCJzdGFydEZvbGRlciIsImN1cnJlbnRGb2xkZXIiLCJzdGFydEFjY291bnQiLCJzZWxlY3RlZEFjY291bnQiLCJ0eXBlIiwicGF5bG9hZCIsImFjY291bnRJZCIsIm5vcm1hbGl6ZWRGb2xkZXIiLCJlZmZlY3RpdmVBY2NvdW50SWQiLCJwcmVmaXhlZEZvbGRlciIsInF1ZXJ5UGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiZm9sZGVyIiwidG9TdHJpbmciLCJjYWNoZWRFbWFpbHMiLCJBcnJheSIsImlzQXJyYXkiLCJ0b3RhbEVtYWlscyIsInRvdGFsUGFnZXMiLCJtYWlsYm94ZXMiLCJzZXRUaW1lb3V0IiwicmVzcG9uc2UiLCJmZXRjaCIsIm9rIiwic3RhdHVzIiwiZXJyb3JEYXRhIiwianNvbiIsIkVycm9yIiwiZXJyb3IiLCJzbGljZSIsIm1hcCIsImUiLCJzdWJqZWN0IiwiZGF0ZSIsImRhdGVPYmoiLCJnZXRUaW1lIiwiZm9yRWFjaCIsImVtYWlsIiwiaW5jbHVkZXMiLCJpc05hTiIsImVyciIsIm1lc3NhZ2UiLCJTdHJpbmciLCJ2YXJpYW50IiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImNoYW5nZUZvbGRlciIsImN1cnJlbnQiLCJzZWxlY3RBY2NvdW50IiwiYWNjb3VudCIsImhhbmRsZUVtYWlsU2VsZWN0IiwiZW1haWxJZCIsImV4aXN0aW5nRW1haWwiLCJmaW5kIiwiY29udGVudEZldGNoZWQiLCJmbGFncyIsInNlZW4iLCJtYXJrRW1haWxBc1JlYWQiLCJlbWFpbERhdGEiLCJ0b2dnbGVFbWFpbFNlbGVjdGlvbiIsInRvZ2dsZVNlbGVjdEFsbCIsImlzUmVhZCIsIm1ldGhvZCIsImhlYWRlcnMiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsInRvZ2dsZVN0YXJyZWQiLCJuZXdGbGFnZ2VkU3RhdHVzIiwiZmxhZ2dlZCIsImNoZWNrRm9yTmV3RW1haWxzIiwiaXNMb2FkaW5nIiwiY2hlY2tPbmx5IiwiY2FjaGUiLCJsYXN0S25vd25FbWFpbElkIiwicGFyc2VJbnQiLCJuZXdlc3RFbWFpbElkIiwiZHVyYXRpb24iLCJkZWxldGVFbWFpbHMiLCJlbWFpbElkcyIsImZpcnN0RW1haWwiLCJzZW5kRW1haWwiLCJ0byIsInJlc3VsdCIsInN1Y2Nlc3MiLCJzZWFyY2hFbWFpbHMiLCJxdWVyeSIsInNlYXJjaCIsInJlc3VsdHMiLCJmb3JtYXRFbWFpbEZvckFjdGlvbiIsInNldFBhZ2UiLCJzZXRFbWFpbHMiLCJoYW5kbGVMb2FkTW9yZSIsIm5leHRQYWdlIiwidGhlbiIsImZvbGRlckNoYW5nZWQiLCJsYXN0TG9hZGVkRm9sZGVyIiwiZmV0Y2hVbnJlYWRDb3VudHMiLCJpc0xvYWRpbmdVbnJlYWRDb3VudHMiLCJub3ciLCJzdG9yYWdlS2V5Iiwic3RvcmVkRGF0YSIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsInBhcnNlIiwiYWdlIiwiTWF0aCIsInJvdW5kIiwiX191bnJlYWRDb3VudEZhaWx1cmVzIiwibGFzdEZhaWx1cmVUaW1lIiwiY291bnQiLCJmYWlsdXJlcyIsImJhY2tvZmZNcyIsIm1pbiIsInBvdyIsInRpbWVCZWZvcmVDYWxsIiwicGVyZm9ybWFuY2UiLCJuZXh0IiwicmV2YWxpZGF0ZSIsImJhY2tvZmZUaW1lIiwiX19mYWlsdXJlQmFja29mZlRpbWVyIiwiY2xlYXJUaW1lb3V0IiwidGltZUFmdGVyQ2FsbCIsIl9zdGF0dXMiLCJ0b0ZpeGVkIiwic2V0SXRlbSIsInVwZGF0ZVVucmVhZENvdW50cyIsImFjY291bnRzIiwiX19sYXN0VW5yZWFkVXBkYXRlIiwibGFzdFVwZGF0ZSIsIk1JTl9VUERBVEVfSU5URVJWQUwiLCJ1cGRhdGVUaW1lb3V0SWQiLCJkZWJvdW5jZU1zIiwiZGVib3VuY2VkVXBkYXRlIiwicGVyaW9kaWNSZWZyZXNoSWQiLCJzZXRJbnRlcnZhbCIsImRvY3VtZW50IiwidmlzaWJpbGl0eVN0YXRlIiwiY2xlYXJJbnRlcnZhbCIsImNoZWNrTmV3RW1haWxzSWQiLCJsYXN0Vmlld2VkRW1haWxSZWYiLCJmZXRjaEZhaWx1cmVzUmVmIiwibGFzdEZldGNoRmFpbHVyZVJlZiIsInZpZXdFbWFpbCIsImZvcmNlQ2hlY2tGb3JOZXdFbWFpbHMiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./hooks/use-email-state.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./hooks/use-toast.ts":
|
|
/*!****************************!*\
|
|
!*** ./hooks/use-toast.ts ***!
|
|
\****************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ reducer: () => (/* binding */ reducer),\n/* harmony export */ toast: () => (/* binding */ toast),\n/* harmony export */ useToast: () => (/* binding */ useToast)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* __next_internal_client_entry_do_not_use__ reducer,useToast,toast auto */ // Inspired by react-hot-toast library\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 1000000;\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\"\n};\nlet count = 0;\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\nconst toastTimeouts = new Map();\nconst addToRemoveQueue = (toastId)=>{\n if (toastTimeouts.has(toastId)) {\n return;\n }\n const timeout = setTimeout(()=>{\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId\n });\n }, TOAST_REMOVE_DELAY);\n toastTimeouts.set(toastId, timeout);\n};\nconst reducer = (state, action)=>{\n switch(action.type){\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [\n action.toast,\n ...state.toasts\n ].slice(0, TOAST_LIMIT)\n };\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t)=>t.id === action.toast.id ? {\n ...t,\n ...action.toast\n } : t)\n };\n case \"DISMISS_TOAST\":\n {\n const { toastId } = action;\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast)=>{\n addToRemoveQueue(toast.id);\n });\n }\n return {\n ...state,\n toasts: state.toasts.map((t)=>t.id === toastId || toastId === undefined ? {\n ...t,\n open: false\n } : t)\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: []\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t)=>t.id !== action.toastId)\n };\n }\n};\nconst listeners = [];\nlet memoryState = {\n toasts: []\n};\nfunction dispatch(action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener)=>{\n listener(memoryState);\n });\n}\nfunction toast({ ...props }) {\n const id = genId();\n const update = (props)=>dispatch({\n type: \"UPDATE_TOAST\",\n toast: {\n ...props,\n id\n }\n });\n const dismiss = ()=>dispatch({\n type: \"DISMISS_TOAST\",\n toastId: id\n });\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open)=>{\n if (!open) dismiss();\n }\n }\n });\n return {\n id: id,\n dismiss,\n update\n };\n}\nfunction useToast() {\n const [state, setState] = react__WEBPACK_IMPORTED_MODULE_0__.useState(memoryState);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"useToast.useEffect\": ()=>{\n listeners.push(setState);\n return ({\n \"useToast.useEffect\": ()=>{\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n }\n })[\"useToast.useEffect\"];\n }\n }[\"useToast.useEffect\"], [\n state\n ]);\n return {\n ...state,\n toast,\n dismiss: (toastId)=>dispatch({\n type: \"DISMISS_TOAST\",\n toastId\n })\n };\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVUsSUFBTXJCLFNBQVM7WUFBRUMsTUFBTTtZQUFpQk4sU0FBU2dCO1FBQUc7SUFFcEVYLFNBQVM7UUFDUEMsTUFBTTtRQUNOTSxPQUFPO1lBQ0wsR0FBR1ksS0FBSztZQUNSUjtZQUNBRyxNQUFNO1lBQ05RLGNBQWMsQ0FBQ1I7Z0JBQ2IsSUFBSSxDQUFDQSxNQUFNTztZQUNiO1FBQ0Y7SUFDRjtJQUVBLE9BQU87UUFDTFYsSUFBSUE7UUFDSlU7UUFDQUQ7SUFDRjtBQUNGO0FBRUEsU0FBU0c7SUFDUCxNQUFNLENBQUNuQixPQUFPb0IsU0FBUyxHQUFHN0MsMkNBQWMsQ0FBUXNDO0lBRWhEdEMsNENBQWU7OEJBQUM7WUFDZHFDLFVBQVVXLElBQUksQ0FBQ0g7WUFDZjtzQ0FBTztvQkFDTCxNQUFNSSxRQUFRWixVQUFVYSxPQUFPLENBQUNMO29CQUNoQyxJQUFJSSxRQUFRLENBQUMsR0FBRzt3QkFDZFosVUFBVWMsTUFBTSxDQUFDRixPQUFPO29CQUMxQjtnQkFDRjs7UUFDRjs2QkFBRztRQUFDeEI7S0FBTTtJQUVWLE9BQU87UUFDTCxHQUFHQSxLQUFLO1FBQ1JHO1FBQ0FjLFNBQVMsQ0FBQzFCLFVBQXFCSyxTQUFTO2dCQUFFQyxNQUFNO2dCQUFpQk47WUFBUTtJQUMzRTtBQUNGO0FBRTBCIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2hvb2tzL3VzZS10b2FzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIlxuXG4vLyBJbnNwaXJlZCBieSByZWFjdC1ob3QtdG9hc3QgbGlicmFyeVxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCJcblxuaW1wb3J0IHR5cGUge1xuICBUb2FzdEFjdGlvbkVsZW1lbnQsXG4gIFRvYXN0UHJvcHMsXG59IGZyb20gXCJAL2NvbXBvbmVudHMvdWkvdG9hc3RcIlxuXG5jb25zdCBUT0FTVF9MSU1JVCA9IDFcbmNvbnN0IFRPQVNUX1JFTU9WRV9ERUxBWSA9IDEwMDAwMDBcblxudHlwZSBUb2FzdGVyVG9hc3QgPSBUb2FzdFByb3BzICYge1xuICBpZDogc3RyaW5nXG4gIHRpdGxlPzogUmVhY3QuUmVhY3ROb2RlXG4gIGRlc2NyaXB0aW9uPzogUmVhY3QuUmVhY3ROb2RlXG4gIGFjdGlvbj86IFRvYXN0QWN0aW9uRWxlbWVudFxufVxuXG5jb25zdCBhY3Rpb25UeXBlcyA9IHtcbiAgQUREX1RPQVNUOiBcIkFERF9UT0FTVFwiLFxuICBVUERBVEVfVE9BU1Q6IFwiVVBEQVRFX1RPQVNUXCIsXG4gIERJU01JU1NfVE9BU1Q6IFwiRElTTUlTU19UT0FTVFwiLFxuICBSRU1PVkVfVE9BU1Q6IFwiUkVNT1ZFX1RPQVNUXCIsXG59IGFzIGNvbnN0XG5cbmxldCBjb3VudCA9IDBcblxuZnVuY3Rpb24gZ2VuSWQoKSB7XG4gIGNvdW50ID0gKGNvdW50ICsgMSkgJSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICByZXR1cm4gY291bnQudG9TdHJpbmcoKVxufVxuXG50eXBlIEFjdGlvblR5cGUgPSB0eXBlb2YgYWN0aW9uVHlwZXNcblxudHlwZSBBY3Rpb24gPVxuICB8IHtcbiAgICAgIHR5cGU6IEFjdGlvblR5cGVbXCJBRERfVE9BU1RcIl1cbiAgICAgIHRvYXN0OiBUb2FzdGVyVG9hc3RcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogQWN0aW9uVHlwZVtcIlVQREFURV9UT0FTVFwiXVxuICAgICAgdG9hc3Q6IFBhcnRpYWw8VG9hc3RlclRvYXN0PlxuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBBY3Rpb25UeXBlW1wiRElTTUlTU19UT0FTVFwiXVxuICAgICAgdG9hc3RJZD86IFRvYXN0ZXJUb2FzdFtcImlkXCJdXG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IEFjdGlvblR5cGVbXCJSRU1PVkVfVE9BU1RcIl1cbiAgICAgIHRvYXN0SWQ/OiBUb2FzdGVyVG9hc3RbXCJpZFwiXVxuICAgIH1cblxuaW50ZXJmYWNlIFN0YXRlIHtcbiAgdG9hc3RzOiBUb2FzdGVyVG9hc3RbXVxufVxuXG5jb25zdCB0b2FzdFRpbWVvdXRzID0gbmV3IE1hcDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+PigpXG5cbmNvbnN0IGFkZFRvUmVtb3ZlUXVldWUgPSAodG9hc3RJZDogc3RyaW5nKSA9PiB7XG4gIGlmICh0b2FzdFRpbWVvdXRzLmhhcyh0b2FzdElkKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRvYXN0VGltZW91dHMuZGVsZXRlKHRvYXN0SWQpXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogXCJSRU1PVkVfVE9BU1RcIixcbiAgICAgIHRvYXN0SWQ6IHRvYXN0SWQsXG4gICAgfSlcbiAgfSwgVE9BU1RfUkVNT1ZFX0RFTEFZKVxuXG4gIHRvYXN0VGltZW91dHMuc2V0KHRvYXN0SWQsIHRpbWVvdXQpXG59XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VyID0gKHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pOiBTdGF0ZSA9PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIFwiQUREX1RPQVNUXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgdG9hc3RzOiBbYWN0aW9uLnRvYXN0LCAuLi5zdGF0ZS50b2FzdHNdLnNsaWNlKDAsIFRPQVNUX0xJTUlUKSxcbiAgICAgIH1cblxuICAgIGNhc2UgXCJVUERBVEVfVE9BU1RcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB0b2FzdHM6IHN0YXRlLnRvYXN0cy5tYXAoKHQpID0+XG4gICAgICAgICAgdC5pZCA9PT0gYWN0aW9uLnRvYXN0LmlkID8geyAuLi50LCAuLi5hY3Rpb24udG9hc3QgfSA6IHRcbiAgICAgICAgKSxcbiAgICAgIH1cblxuICAgIGNhc2UgXCJESVNNSVNTX1RPQVNUXCI6IHtcbiAgICAgIGNvbnN0IHsgdG9hc3RJZCB9ID0gYWN0aW9uXG5cbiAgICAgIC8vICEgU2lkZSBlZmZlY3RzICEgLSBUaGlzIGNvdWxkIGJlIGV4dHJhY3RlZCBpbnRvIGEgZGlzbWlzc1RvYXN0KCkgYWN0aW9uLFxuICAgICAgLy8gYnV0IEknbGwga2VlcCBpdCBoZXJlIGZvciBzaW1wbGljaXR5XG4gICAgICBpZiAodG9hc3RJZCkge1xuICAgICAgICBhZGRUb1JlbW92ZVF1ZXVlKHRvYXN0SWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS50b2FzdHMuZm9yRWFjaCgodG9hc3QpID0+IHtcbiAgICAgICAgICBhZGRUb1JlbW92ZVF1ZXVlKHRvYXN0LmlkKVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgdG9hc3RzOiBzdGF0ZS50b2FzdHMubWFwKCh0KSA9PlxuICAgICAgICAgIHQuaWQgPT09IHRvYXN0SWQgfHwgdG9hc3RJZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi50LFxuICAgICAgICAgICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHRcbiAgICAgICAgKSxcbiAgICAgIH1cbiAgICB9XG4gICAgY2FzZSBcIlJFTU9WRV9UT0FTVFwiOlxuICAgICAgaWYgKGFjdGlvbi50b2FzdElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICB0b2FzdHM6IFtdLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgdG9hc3RzOiBzdGF0ZS50b2FzdHMuZmlsdGVyKCh0KSA9PiB0LmlkICE9PSBhY3Rpb24udG9hc3RJZCksXG4gICAgICB9XG4gIH1cbn1cblxuY29uc3QgbGlzdGVuZXJzOiBBcnJheTwoc3RhdGU6IFN0YXRlKSA9PiB2b2lkPiA9IFtdXG5cbmxldCBtZW1vcnlTdGF0ZTogU3RhdGUgPSB7IHRvYXN0czogW10gfVxuXG5mdW5jdGlvbiBkaXNwYXRjaChhY3Rpb246IEFjdGlvbikge1xuICBtZW1vcnlTdGF0ZSA9IHJlZHVjZXIobWVtb3J5U3RhdGUsIGFjdGlvbilcbiAgbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgbGlzdGVuZXIobWVtb3J5U3RhdGUpXG4gIH0pXG59XG5cbnR5cGUgVG9hc3QgPSBPbWl0PFRvYXN0ZXJUb2FzdCwgXCJpZFwiPlxuXG5mdW5jdGlvbiB0b2FzdCh7IC4uLnByb3BzIH06IFRvYXN0KSB7XG4gIGNvbnN0IGlkID0gZ2VuSWQoKVxuXG4gIGNvbnN0IHVwZGF0ZSA9IChwcm9wczogVG9hc3RlclRvYXN0KSA9PlxuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFwiVVBEQVRFX1RPQVNUXCIsXG4gICAgICB0b2FzdDogeyAuLi5wcm9wcywgaWQgfSxcbiAgICB9KVxuICBjb25zdCBkaXNtaXNzID0gKCkgPT4gZGlzcGF0Y2goeyB0eXBlOiBcIkRJU01JU1NfVE9BU1RcIiwgdG9hc3RJZDogaWQgfSlcblxuICBkaXNwYXRjaCh7XG4gICAgdHlwZTogXCJBRERfVE9BU1RcIixcbiAgICB0b2FzdDoge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBpZCxcbiAgICAgIG9wZW46IHRydWUsXG4gICAgICBvbk9wZW5DaGFuZ2U6IChvcGVuKSA9PiB7XG4gICAgICAgIGlmICghb3BlbikgZGlzbWlzcygpXG4gICAgICB9LFxuICAgIH0sXG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBpZDogaWQsXG4gICAgZGlzbWlzcyxcbiAgICB1cGRhdGUsXG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlVG9hc3QoKSB7XG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gUmVhY3QudXNlU3RhdGU8U3RhdGU+KG1lbW9yeVN0YXRlKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGlzdGVuZXJzLnB1c2goc2V0U3RhdGUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2Yoc2V0U3RhdGUpXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3N0YXRlXSlcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHRvYXN0LFxuICAgIGRpc21pc3M6ICh0b2FzdElkPzogc3RyaW5nKSA9PiBkaXNwYXRjaCh7IHR5cGU6IFwiRElTTUlTU19UT0FTVFwiLCB0b2FzdElkIH0pLFxuICB9XG59XG5cbmV4cG9ydCB7IHVzZVRvYXN0LCB0b2FzdCB9XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJUT0FTVF9MSU1JVCIsIlRPQVNUX1JFTU9WRV9ERUxBWSIsImFjdGlvblR5cGVzIiwiQUREX1RPQVNUIiwiVVBEQVRFX1RPQVNUIiwiRElTTUlTU19UT0FTVCIsIlJFTU9WRV9UT0FTVCIsImNvdW50IiwiZ2VuSWQiLCJOdW1iZXIiLCJNQVhfU0FGRV9JTlRFR0VSIiwidG9TdHJpbmciLCJ0b2FzdFRpbWVvdXRzIiwiTWFwIiwiYWRkVG9SZW1vdmVRdWV1ZSIsInRvYXN0SWQiLCJoYXMiLCJ0aW1lb3V0Iiwic2V0VGltZW91dCIsImRlbGV0ZSIsImRpc3BhdGNoIiwidHlwZSIsInNldCIsInJlZHVjZXIiLCJzdGF0ZSIsImFjdGlvbiIsInRvYXN0cyIsInRvYXN0Iiwic2xpY2UiLCJtYXAiLCJ0IiwiaWQiLCJmb3JFYWNoIiwidW5kZWZpbmVkIiwib3BlbiIsImZpbHRlciIsImxpc3RlbmVycyIsIm1lbW9yeVN0YXRlIiwibGlzdGVuZXIiLCJwcm9wcyIsInVwZGF0ZSIsImRpc21pc3MiLCJvbk9wZW5DaGFuZ2UiLCJ1c2VUb2FzdCIsInNldFN0YXRlIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJwdXNoIiwiaW5kZXgiLCJpbmRleE9mIiwic3BsaWNlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./hooks/use-toast.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./lib/reducers/emailReducer.ts":
|
|
/*!**************************************!*\
|
|
!*** ./lib/reducers/emailReducer.ts ***!
|
|
\**************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ emailReducer: () => (/* binding */ emailReducer),\n/* harmony export */ initialState: () => (/* binding */ initialState),\n/* harmony export */ normalizeFolderAndAccount: () => (/* binding */ normalizeFolderAndAccount)\n/* harmony export */ });\n// Initial state\nconst initialState = {\n accounts: [],\n selectedAccount: null,\n selectedFolders: {},\n currentFolder: 'INBOX',\n emails: [],\n selectedEmail: null,\n selectedEmailIds: [],\n isLoading: false,\n isLoadingUnreadCounts: false,\n error: null,\n page: 1,\n perPage: 20,\n totalPages: 0,\n totalEmails: 0,\n mailboxes: [],\n unreadCountMap: {},\n showFolders: false\n};\n// Helper functions for consistency\nconst normalizeFolderAndAccount = (folder, accountId)=>{\n let normalizedFolder;\n let effectiveAccountId = accountId || 'default';\n // First, handle the folder format\n if (folder.includes(':')) {\n // Extract parts if folder already has a prefix\n const parts = folder.split(':');\n const folderAccountId = parts[0];\n normalizedFolder = parts[1];\n // If explicit accountId is provided, it ALWAYS takes precedence\n if (accountId) {\n console.log(`Using provided accountId (${accountId}) over folder prefix (${folderAccountId})`);\n effectiveAccountId = accountId;\n } else {\n effectiveAccountId = folderAccountId;\n }\n } else {\n // No folder prefix, use the folder name as is\n normalizedFolder = folder;\n }\n return {\n normalizedFolder,\n effectiveAccountId,\n prefixedFolder: `${effectiveAccountId}:${normalizedFolder}`\n };\n};\n// Reducer function\nfunction emailReducer(state, action) {\n console.log(`[EMAIL_REDUCER] Action: ${action.type}`, action);\n switch(action.type){\n case 'SET_ACCOUNTS':\n return {\n ...state,\n accounts: action.payload\n };\n case 'SELECT_ACCOUNT':\n {\n // This is a critical action that needs special handling\n const account = action.payload;\n const inboxFolder = `${account.id}:INBOX`;\n console.log(`[EMAIL_REDUCER] Selecting account: ${account.email} (${account.id})`);\n // Return a completely new state that's atomically consistent\n return {\n ...state,\n selectedAccount: account,\n currentFolder: inboxFolder,\n selectedFolders: {\n ...state.selectedFolders,\n [account.id]: inboxFolder\n },\n // Clear email selections as part of the atomic account switch\n selectedEmail: null,\n selectedEmailIds: [],\n emails: [],\n isLoading: true,\n showFolders: true,\n page: 1\n };\n }\n case 'CHANGE_FOLDER':\n {\n const { folder, accountId } = action.payload;\n // Use our helper to ensure consistent folder/account handling\n const { normalizedFolder, effectiveAccountId, prefixedFolder } = normalizeFolderAndAccount(folder, accountId);\n console.log(`[EMAIL_REDUCER] Changing folder to: ${prefixedFolder} (account: ${effectiveAccountId})`);\n // Return a new state with consistent folder and account info\n return {\n ...state,\n currentFolder: prefixedFolder,\n selectedFolders: {\n ...state.selectedFolders,\n [effectiveAccountId]: prefixedFolder\n },\n // Clear email-specific state when changing folders\n selectedEmail: null,\n selectedEmailIds: [],\n emails: [],\n isLoading: true,\n page: 1\n };\n }\n case 'SET_EMAILS':\n // Sort emails by date (newest first) to ensure consistent sorting\n // First make a copy to avoid mutating the input\n const unsortedEmails = [\n ...action.payload\n ];\n // For debugging - log a few emails before sorting\n if (unsortedEmails.length > 0) {\n console.log(`[EMAIL_REDUCER] Sorting ${unsortedEmails.length} emails`);\n // Log a sample of emails before sorting\n console.log('[EMAIL_REDUCER] Sample emails before sorting:', unsortedEmails.slice(0, 3).map((e)=>({\n id: e.id.substring(0, 8),\n subject: e.subject?.substring(0, 20),\n date: e.date,\n timestamp: new Date(e.date).getTime()\n })));\n }\n // CRITICAL FIX: Enhanced sorting function that ensures proper date handling\n const sortedEmails = unsortedEmails.sort((a, b)=>{\n // Convert all dates to timestamps for comparison\n let dateA, dateB;\n try {\n dateA = a.date instanceof Date ? a.date.getTime() : new Date(a.date).getTime();\n } catch (e) {\n dateA = 0; // Default to oldest if invalid\n }\n try {\n dateB = b.date instanceof Date ? b.date.getTime() : new Date(b.date).getTime();\n } catch (e) {\n dateB = 0; // Default to oldest if invalid\n }\n // Handle invalid dates\n if (isNaN(dateA) && isNaN(dateB)) return 0;\n if (isNaN(dateA)) return 1; // Put invalid dates at the end\n if (isNaN(dateB)) return -1;\n // Sort newest first\n return dateB - dateA;\n });\n // For debugging - log a few emails after sorting\n if (sortedEmails.length > 0) {\n console.log('[EMAIL_REDUCER] Sample emails after sorting:', sortedEmails.slice(0, 3).map((e)=>({\n id: e.id.substring(0, 8),\n subject: e.subject?.substring(0, 20),\n date: e.date,\n timestamp: new Date(e.date).getTime()\n })));\n }\n return {\n ...state,\n emails: sortedEmails,\n isLoading: false\n };\n case 'APPEND_EMAILS':\n {\n // Create a set of existing email IDs to avoid duplicates\n const existingIds = new Set(state.emails.map((email)=>email.id));\n console.log(`[DEBUG-REDUCER] APPEND_EMAILS - Got ${action.payload.length} emails to append, current list has ${state.emails.length}`);\n // Filter out any duplicates before appending\n const newEmails = action.payload.filter((email)=>!existingIds.has(email.id));\n // Log appending for debugging\n console.log(`[DEBUG-REDUCER] Filtered to ${newEmails.length} new non-duplicate emails`);\n // CRITICAL FIX: If no new emails were found, set isLoading to false but don't change the email list\n if (newEmails.length === 0) {\n console.log('[DEBUG-REDUCER] No new emails to append, returning current state with isLoading=false');\n return {\n ...state,\n isLoading: false\n };\n }\n // Debug the dates to check sorting\n if (newEmails.length > 0) {\n console.log('[DEBUG-REDUCER] Sample new emails before combining:', newEmails.slice(0, 3).map((e)=>({\n id: e.id.substring(0, 8),\n subject: e.subject?.substring(0, 20),\n date: e.date,\n timestamp: new Date(e.date).getTime()\n })));\n }\n // FIXED: Properly combine existing and new emails\n // We need to ensure we keep ALL emails when appending\n const combinedEmails = [\n ...state.emails,\n ...newEmails\n ];\n // Sort combined emails by date (newest first)\n const sortedEmails = combinedEmails.sort((a, b)=>{\n // Convert all dates to timestamps for comparison\n let dateA, dateB;\n try {\n dateA = a.date instanceof Date ? a.date.getTime() : new Date(a.date).getTime();\n } catch (e) {\n dateA = 0; // Default to oldest if invalid\n }\n try {\n dateB = b.date instanceof Date ? b.date.getTime() : new Date(b.date).getTime();\n } catch (e) {\n dateB = 0; // Default to oldest if invalid\n }\n // Handle invalid dates\n if (isNaN(dateA) && isNaN(dateB)) return 0;\n if (isNaN(dateA)) return 1; // Put invalid dates at the end\n if (isNaN(dateB)) return -1;\n // Sort newest first\n return dateB - dateA;\n });\n console.log(`[DEBUG-REDUCER] Final combined list has ${sortedEmails.length} emails (${state.emails.length} old + ${newEmails.length} new)`);\n return {\n ...state,\n emails: sortedEmails,\n isLoading: false\n };\n }\n case 'SELECT_EMAIL':\n return {\n ...state,\n selectedEmail: action.payload.email\n };\n case 'TOGGLE_EMAIL_SELECTION':\n {\n const emailId = action.payload;\n const isSelected = state.selectedEmailIds.includes(emailId);\n return {\n ...state,\n selectedEmailIds: isSelected ? state.selectedEmailIds.filter((id)=>id !== emailId) : [\n ...state.selectedEmailIds,\n emailId\n ]\n };\n }\n case 'TOGGLE_SELECT_ALL':\n {\n // If all emails are already selected, clear the selection\n const allEmailIds = state.emails.map((email)=>email.id);\n const allSelected = allEmailIds.every((id)=>state.selectedEmailIds.includes(id));\n return {\n ...state,\n selectedEmailIds: allSelected ? [] : allEmailIds\n };\n }\n case 'CLEAR_SELECTED_EMAILS':\n return {\n ...state,\n selectedEmailIds: [],\n selectedEmail: null\n };\n case 'SET_LOADING':\n return {\n ...state,\n isLoading: action.payload\n };\n case 'SET_LOADING_UNREAD_COUNTS':\n return {\n ...state,\n isLoadingUnreadCounts: action.payload\n };\n case 'SET_ERROR':\n return {\n ...state,\n error: action.payload,\n isLoading: false\n };\n case 'SET_PAGE':\n return {\n ...state,\n page: action.payload\n };\n case 'INCREMENT_PAGE':\n return {\n ...state,\n page: state.page + 1\n };\n case 'SET_TOTAL_PAGES':\n return {\n ...state,\n totalPages: action.payload\n };\n case 'SET_TOTAL_EMAILS':\n return {\n ...state,\n totalEmails: action.payload\n };\n case 'SET_MAILBOXES':\n return {\n ...state,\n mailboxes: action.payload\n };\n case 'UPDATE_UNREAD_COUNT':\n {\n const { accountId, folder, count } = action.payload;\n return {\n ...state,\n unreadCountMap: {\n ...state.unreadCountMap,\n [accountId]: {\n ...state.unreadCountMap[accountId] || {},\n [folder]: count\n }\n }\n };\n }\n case 'SET_UNREAD_COUNTS':\n return {\n ...state,\n unreadCountMap: action.payload\n };\n case 'TOGGLE_SHOW_FOLDERS':\n return {\n ...state,\n showFolders: action.payload\n };\n case 'MARK_EMAIL_AS_READ':\n {\n const { emailId, isRead, accountId } = action.payload;\n // Update emails list\n const updatedEmails = state.emails.map((email)=>email.id === emailId && (!accountId || email.accountId === accountId) ? {\n ...email,\n flags: {\n ...email.flags,\n seen: isRead\n }\n } : email);\n // Update selected email if it matches\n const updatedSelectedEmail = state.selectedEmail && state.selectedEmail.id === emailId && (!accountId || state.selectedEmail.accountId === accountId) ? {\n ...state.selectedEmail,\n flags: {\n ...state.selectedEmail.flags,\n seen: isRead\n }\n } : state.selectedEmail;\n return {\n ...state,\n emails: updatedEmails,\n selectedEmail: updatedSelectedEmail\n };\n }\n default:\n return state;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SzBCLFdBQzFCLEVBQUMzQyxhQUFhVyxNQUFNekIsYUFBYSxDQUFDYyxTQUFTLEtBQUtBLFNBQVEsSUFDckQ7b0JBQUUsR0FBR1csTUFBTXpCLGFBQWE7b0JBQUVpRSxPQUFPO3dCQUFFLEdBQUd4QyxNQUFNekIsYUFBYSxDQUFDaUUsS0FBSzt3QkFBRUMsTUFBTUg7b0JBQU87Z0JBQUUsSUFDaEZ0QyxNQUFNekIsYUFBYTtnQkFFekIsT0FBTztvQkFDTCxHQUFHeUIsS0FBSztvQkFDUjFCLFFBQVFpRTtvQkFDUmhFLGVBQWVtRTtnQkFDakI7WUFDRjtRQUVBO1lBQ0UsT0FBTzFDO0lBQ1g7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9saWIvcmVkdWNlcnMvZW1haWxSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVtYWlsIH0gZnJvbSAnQC9ob29rcy91c2UtY291cnJpZXInO1xuXG4vLyBEZWZpbmUgYWxsIHBvc3NpYmxlIHN0YXRlIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIEFjY291bnQge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIGNvbG9yOiBzdHJpbmc7XG4gIGZvbGRlcnM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsU3RhdGUge1xuICBhY2NvdW50czogQWNjb3VudFtdO1xuICBzZWxlY3RlZEFjY291bnQ6IEFjY291bnQgfCBudWxsO1xuICBzZWxlY3RlZEZvbGRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGN1cnJlbnRGb2xkZXI6IHN0cmluZztcbiAgZW1haWxzOiBFbWFpbFtdO1xuICBzZWxlY3RlZEVtYWlsOiBFbWFpbCB8IG51bGw7XG4gIHNlbGVjdGVkRW1haWxJZHM6IHN0cmluZ1tdO1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIGlzTG9hZGluZ1VucmVhZENvdW50czogYm9vbGVhbjtcbiAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gIHBhZ2U6IG51bWJlcjtcbiAgcGVyUGFnZTogbnVtYmVyO1xuICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gIHRvdGFsRW1haWxzOiBudW1iZXI7XG4gIG1haWxib3hlczogc3RyaW5nW107XG4gIHVucmVhZENvdW50TWFwOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PjtcbiAgc2hvd0ZvbGRlcnM6IGJvb2xlYW47XG4gIGN1cnJlbnRBY2NvdW50SWQ/OiBzdHJpbmc7XG59XG5cbi8vIERlZmluZSBhbGwgcG9zc2libGUgYWN0aW9uIHR5cGVzXG5leHBvcnQgdHlwZSBFbWFpbEFjdGlvbiA9IFxuICB8IHsgdHlwZTogJ1NFVF9BQ0NPVU5UUycsIHBheWxvYWQ6IEFjY291bnRbXSB9XG4gIHwgeyB0eXBlOiAnU0VMRUNUX0FDQ09VTlQnLCBwYXlsb2FkOiBBY2NvdW50IH1cbiAgfCB7IHR5cGU6ICdDSEFOR0VfRk9MREVSJywgcGF5bG9hZDogeyBmb2xkZXI6IHN0cmluZywgYWNjb3VudElkOiBzdHJpbmcgfSB9XG4gIHwgeyB0eXBlOiAnU0VUX0VNQUlMUycsIHBheWxvYWQ6IEVtYWlsW10gfVxuICB8IHsgdHlwZTogJ0FQUEVORF9FTUFJTFMnLCBwYXlsb2FkOiBFbWFpbFtdIH1cbiAgfCB7IHR5cGU6ICdTRUxFQ1RfRU1BSUwnLCBwYXlsb2FkOiB7IGVtYWlsSWQ6IHN0cmluZywgYWNjb3VudElkOiBzdHJpbmcsIGZvbGRlcjogc3RyaW5nLCBlbWFpbDogRW1haWwgfCBudWxsIH0gfVxuICB8IHsgdHlwZTogJ1RPR0dMRV9FTUFJTF9TRUxFQ1RJT04nLCBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ1RPR0dMRV9TRUxFQ1RfQUxMJyB9XG4gIHwgeyB0eXBlOiAnQ0xFQVJfU0VMRUNURURfRU1BSUxTJyB9XG4gIHwgeyB0eXBlOiAnU0VUX0xPQURJTkcnLCBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdTRVRfTE9BRElOR19VTlJFQURfQ09VTlRTJywgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnU0VUX0VSUk9SJywgcGF5bG9hZDogc3RyaW5nIHwgbnVsbCB9XG4gIHwgeyB0eXBlOiAnU0VUX1BBR0UnLCBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ0lOQ1JFTUVOVF9QQUdFJyB9XG4gIHwgeyB0eXBlOiAnU0VUX1RPVEFMX1BBR0VTJywgcGF5bG9hZDogbnVtYmVyIH1cbiAgfCB7IHR5cGU6ICdTRVRfVE9UQUxfRU1BSUxTJywgcGF5bG9hZDogbnVtYmVyIH1cbiAgfCB7IHR5cGU6ICdTRVRfTUFJTEJPWEVTJywgcGF5bG9hZDogc3RyaW5nW10gfVxuICB8IHsgdHlwZTogJ1VQREFURV9VTlJFQURfQ09VTlQnLCBwYXlsb2FkOiB7IGFjY291bnRJZDogc3RyaW5nLCBmb2xkZXI6IHN0cmluZywgY291bnQ6IG51bWJlciB9IH1cbiAgfCB7IHR5cGU6ICdTRVRfVU5SRUFEX0NPVU5UUycsIHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIG51bWJlcj4+IH1cbiAgfCB7IHR5cGU6ICdUT0dHTEVfU0hPV19GT0xERVJTJywgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnTUFSS19FTUFJTF9BU19SRUFEJywgcGF5bG9hZDogeyBlbWFpbElkOiBzdHJpbmcsIGlzUmVhZDogYm9vbGVhbiwgYWNjb3VudElkPzogc3RyaW5nIH0gfTtcblxuLy8gSW5pdGlhbCBzdGF0ZVxuZXhwb3J0IGNvbnN0IGluaXRpYWxTdGF0ZTogRW1haWxTdGF0ZSA9IHtcbiAgYWNjb3VudHM6IFtdLFxuICBzZWxlY3RlZEFjY291bnQ6IG51bGwsXG4gIHNlbGVjdGVkRm9sZGVyczoge30sXG4gIGN1cnJlbnRGb2xkZXI6ICdJTkJPWCcsXG4gIGVtYWlsczogW10sXG4gIHNlbGVjdGVkRW1haWw6IG51bGwsXG4gIHNlbGVjdGVkRW1haWxJZHM6IFtdLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBpc0xvYWRpbmdVbnJlYWRDb3VudHM6IGZhbHNlLFxuICBlcnJvcjogbnVsbCxcbiAgcGFnZTogMSxcbiAgcGVyUGFnZTogMjAsXG4gIHRvdGFsUGFnZXM6IDAsXG4gIHRvdGFsRW1haWxzOiAwLFxuICBtYWlsYm94ZXM6IFtdLFxuICB1bnJlYWRDb3VudE1hcDoge30sXG4gIHNob3dGb2xkZXJzOiBmYWxzZVxufTtcblxuLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgY29uc2lzdGVuY3lcbmV4cG9ydCBjb25zdCBub3JtYWxpemVGb2xkZXJBbmRBY2NvdW50ID0gKGZvbGRlcjogc3RyaW5nLCBhY2NvdW50SWQ/OiBzdHJpbmcpID0+IHtcbiAgbGV0IG5vcm1hbGl6ZWRGb2xkZXI6IHN0cmluZztcbiAgbGV0IGVmZmVjdGl2ZUFjY291bnRJZDogc3RyaW5nID0gYWNjb3VudElkIHx8ICdkZWZhdWx0JztcbiAgXG4gIC8vIEZpcnN0LCBoYW5kbGUgdGhlIGZvbGRlciBmb3JtYXRcbiAgaWYgKGZvbGRlci5pbmNsdWRlcygnOicpKSB7XG4gICAgLy8gRXh0cmFjdCBwYXJ0cyBpZiBmb2xkZXIgYWxyZWFkeSBoYXMgYSBwcmVmaXhcbiAgICBjb25zdCBwYXJ0cyA9IGZvbGRlci5zcGxpdCgnOicpO1xuICAgIGNvbnN0IGZvbGRlckFjY291bnRJZCA9IHBhcnRzWzBdO1xuICAgIG5vcm1hbGl6ZWRGb2xkZXIgPSBwYXJ0c1sxXTtcbiAgICBcbiAgICAvLyBJZiBleHBsaWNpdCBhY2NvdW50SWQgaXMgcHJvdmlkZWQsIGl0IEFMV0FZUyB0YWtlcyBwcmVjZWRlbmNlXG4gICAgaWYgKGFjY291bnRJZCkge1xuICAgICAgY29uc29sZS5sb2coYFVzaW5nIHByb3ZpZGVkIGFjY291bnRJZCAoJHthY2NvdW50SWR9KSBvdmVyIGZvbGRlciBwcmVmaXggKCR7Zm9sZGVyQWNjb3VudElkfSlgKTtcbiAgICAgIGVmZmVjdGl2ZUFjY291bnRJZCA9IGFjY291bnRJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgZWZmZWN0aXZlQWNjb3VudElkID0gZm9sZGVyQWNjb3VudElkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBObyBmb2xkZXIgcHJlZml4LCB1c2UgdGhlIGZvbGRlciBuYW1lIGFzIGlzXG4gICAgbm9ybWFsaXplZEZvbGRlciA9IGZvbGRlcjtcbiAgfVxuICBcbiAgcmV0dXJuIHtcbiAgICBub3JtYWxpemVkRm9sZGVyLFxuICAgIGVmZmVjdGl2ZUFjY291bnRJZCxcbiAgICBwcmVmaXhlZEZvbGRlcjogYCR7ZWZmZWN0aXZlQWNjb3VudElkfToke25vcm1hbGl6ZWRGb2xkZXJ9YFxuICB9O1xufTtcblxuLy8gUmVkdWNlciBmdW5jdGlvblxuZXhwb3J0IGZ1bmN0aW9uIGVtYWlsUmVkdWNlcihzdGF0ZTogRW1haWxTdGF0ZSwgYWN0aW9uOiBFbWFpbEFjdGlvbik6IEVtYWlsU3RhdGUge1xuICBjb25zb2xlLmxvZyhgW0VNQUlMX1JFRFVDRVJdIEFjdGlvbjogJHthY3Rpb24udHlwZX1gLCBhY3Rpb24pO1xuICBcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ1NFVF9BQ0NPVU5UUyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYWNjb3VudHM6IGFjdGlvbi5wYXlsb2FkXG4gICAgICB9O1xuICAgIFxuICAgIGNhc2UgJ1NFTEVDVF9BQ0NPVU5UJzoge1xuICAgICAgLy8gVGhpcyBpcyBhIGNyaXRpY2FsIGFjdGlvbiB0aGF0IG5lZWRzIHNwZWNpYWwgaGFuZGxpbmdcbiAgICAgIGNvbnN0IGFjY291bnQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIGNvbnN0IGluYm94Rm9sZGVyID0gYCR7YWNjb3VudC5pZH06SU5CT1hgO1xuICAgICAgXG4gICAgICBjb25zb2xlLmxvZyhgW0VNQUlMX1JFRFVDRVJdIFNlbGVjdGluZyBhY2NvdW50OiAke2FjY291bnQuZW1haWx9ICgke2FjY291bnQuaWR9KWApO1xuICAgICAgXG4gICAgICAvLyBSZXR1cm4gYSBjb21wbGV0ZWx5IG5ldyBzdGF0ZSB0aGF0J3MgYXRvbWljYWxseSBjb25zaXN0ZW50XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRBY2NvdW50OiBhY2NvdW50LFxuICAgICAgICBjdXJyZW50Rm9sZGVyOiBpbmJveEZvbGRlcixcbiAgICAgICAgc2VsZWN0ZWRGb2xkZXJzOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2VsZWN0ZWRGb2xkZXJzLFxuICAgICAgICAgIFthY2NvdW50LmlkXTogaW5ib3hGb2xkZXJcbiAgICAgICAgfSxcbiAgICAgICAgLy8gQ2xlYXIgZW1haWwgc2VsZWN0aW9ucyBhcyBwYXJ0IG9mIHRoZSBhdG9taWMgYWNjb3VudCBzd2l0Y2hcbiAgICAgICAgc2VsZWN0ZWRFbWFpbDogbnVsbCxcbiAgICAgICAgc2VsZWN0ZWRFbWFpbElkczogW10sXG4gICAgICAgIGVtYWlsczogW10sXG4gICAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgICAgc2hvd0ZvbGRlcnM6IHRydWUsXG4gICAgICAgIHBhZ2U6IDFcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIGNhc2UgJ0NIQU5HRV9GT0xERVInOiB7XG4gICAgICBjb25zdCB7IGZvbGRlciwgYWNjb3VudElkIH0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIFxuICAgICAgLy8gVXNlIG91ciBoZWxwZXIgdG8gZW5zdXJlIGNvbnNpc3RlbnQgZm9sZGVyL2FjY291bnQgaGFuZGxpbmdcbiAgICAgIGNvbnN0IHsgbm9ybWFsaXplZEZvbGRlciwgZWZmZWN0aXZlQWNjb3VudElkLCBwcmVmaXhlZEZvbGRlciB9ID0gXG4gICAgICAgIG5vcm1hbGl6ZUZvbGRlckFuZEFjY291bnQoZm9sZGVyLCBhY2NvdW50SWQpO1xuICAgICAgXG4gICAgICBjb25zb2xlLmxvZyhgW0VNQUlMX1JFRFVDRVJdIENoYW5naW5nIGZvbGRlciB0bzogJHtwcmVmaXhlZEZvbGRlcn0gKGFjY291bnQ6ICR7ZWZmZWN0aXZlQWNjb3VudElkfSlgKTtcbiAgICAgIFxuICAgICAgLy8gUmV0dXJuIGEgbmV3IHN0YXRlIHdpdGggY29uc2lzdGVudCBmb2xkZXIgYW5kIGFjY291bnQgaW5mb1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGN1cnJlbnRGb2xkZXI6IHByZWZpeGVkRm9sZGVyLFxuICAgICAgICBzZWxlY3RlZEZvbGRlcnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5zZWxlY3RlZEZvbGRlcnMsXG4gICAgICAgICAgW2VmZmVjdGl2ZUFjY291bnRJZF06IHByZWZpeGVkRm9sZGVyXG4gICAgICAgIH0sXG4gICAgICAgIC8vIENsZWFyIGVtYWlsLXNwZWNpZmljIHN0YXRlIHdoZW4gY2hhbmdpbmcgZm9sZGVyc1xuICAgICAgICBzZWxlY3RlZEVtYWlsOiBudWxsLFxuICAgICAgICBzZWxlY3RlZEVtYWlsSWRzOiBbXSxcbiAgICAgICAgZW1haWxzOiBbXSxcbiAgICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgICBwYWdlOiAxXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICBjYXNlICdTRVRfRU1BSUxTJzpcbiAgICAgIC8vIFNvcnQgZW1haWxzIGJ5IGRhdGUgKG5ld2VzdCBmaXJzdCkgdG8gZW5zdXJlIGNvbnNpc3RlbnQgc29ydGluZ1xuICAgICAgLy8gRmlyc3QgbWFrZSBhIGNvcHkgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIGlucHV0XG4gICAgICBjb25zdCB1bnNvcnRlZEVtYWlscyA9IFsuLi5hY3Rpb24ucGF5bG9hZF07XG4gICAgICBcbiAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgLSBsb2cgYSBmZXcgZW1haWxzIGJlZm9yZSBzb3J0aW5nXG4gICAgICBpZiAodW5zb3J0ZWRFbWFpbHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0VNQUlMX1JFRFVDRVJdIFNvcnRpbmcgJHt1bnNvcnRlZEVtYWlscy5sZW5ndGh9IGVtYWlsc2ApO1xuICAgICAgICBcbiAgICAgICAgLy8gTG9nIGEgc2FtcGxlIG9mIGVtYWlscyBiZWZvcmUgc29ydGluZ1xuICAgICAgICBjb25zb2xlLmxvZygnW0VNQUlMX1JFRFVDRVJdIFNhbXBsZSBlbWFpbHMgYmVmb3JlIHNvcnRpbmc6JyxcbiAgICAgICAgICB1bnNvcnRlZEVtYWlscy5zbGljZSgwLCAzKS5tYXAoZSA9PiAoe1xuICAgICAgICAgICAgaWQ6IGUuaWQuc3Vic3RyaW5nKDAsIDgpLFxuICAgICAgICAgICAgc3ViamVjdDogZS5zdWJqZWN0Py5zdWJzdHJpbmcoMCwgMjApLFxuICAgICAgICAgICAgZGF0ZTogZS5kYXRlLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZShlLmRhdGUpLmdldFRpbWUoKVxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDUklUSUNBTCBGSVg6IEVuaGFuY2VkIHNvcnRpbmcgZnVuY3Rpb24gdGhhdCBlbnN1cmVzIHByb3BlciBkYXRlIGhhbmRsaW5nXG4gICAgICBjb25zdCBzb3J0ZWRFbWFpbHMgPSB1bnNvcnRlZEVtYWlscy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIC8vIENvbnZlcnQgYWxsIGRhdGVzIHRvIHRpbWVzdGFtcHMgZm9yIGNvbXBhcmlzb25cbiAgICAgICAgbGV0IGRhdGVBOiBudW1iZXIsIGRhdGVCOiBudW1iZXI7XG4gICAgICAgIFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGRhdGVBID0gYS5kYXRlIGluc3RhbmNlb2YgRGF0ZSA/IGEuZGF0ZS5nZXRUaW1lKCkgOiBuZXcgRGF0ZShhLmRhdGUpLmdldFRpbWUoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGRhdGVBID0gMDsgLy8gRGVmYXVsdCB0byBvbGRlc3QgaWYgaW52YWxpZFxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGRhdGVCID0gYi5kYXRlIGluc3RhbmNlb2YgRGF0ZSA/IGIuZGF0ZS5nZXRUaW1lKCkgOiBuZXcgRGF0ZShiLmRhdGUpLmdldFRpbWUoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGRhdGVCID0gMDsgLy8gRGVmYXVsdCB0byBvbGRlc3QgaWYgaW52YWxpZFxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBIYW5kbGUgaW52YWxpZCBkYXRlc1xuICAgICAgICBpZiAoaXNOYU4oZGF0ZUEpICYmIGlzTmFOKGRhdGVCKSkgcmV0dXJuIDA7XG4gICAgICAgIGlmIChpc05hTihkYXRlQSkpIHJldHVybiAxOyAvLyBQdXQgaW52YWxpZCBkYXRlcyBhdCB0aGUgZW5kXG4gICAgICAgIGlmIChpc05hTihkYXRlQikpIHJldHVybiAtMTtcbiAgICAgICAgXG4gICAgICAgIC8vIFNvcnQgbmV3ZXN0IGZpcnN0XG4gICAgICAgIHJldHVybiBkYXRlQiAtIGRhdGVBO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgLSBsb2cgYSBmZXcgZW1haWxzIGFmdGVyIHNvcnRpbmdcbiAgICAgIGlmIChzb3J0ZWRFbWFpbHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnW0VNQUlMX1JFRFVDRVJdIFNhbXBsZSBlbWFpbHMgYWZ0ZXIgc29ydGluZzonLFxuICAgICAgICAgIHNvcnRlZEVtYWlscy5zbGljZSgwLCAzKS5tYXAoZSA9PiAoe1xuICAgICAgICAgICAgaWQ6IGUuaWQuc3Vic3RyaW5nKDAsIDgpLFxuICAgICAgICAgICAgc3ViamVjdDogZS5zdWJqZWN0Py5zdWJzdHJpbmcoMCwgMjApLFxuICAgICAgICAgICAgZGF0ZTogZS5kYXRlLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZShlLmRhdGUpLmdldFRpbWUoKVxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZW1haWxzOiBzb3J0ZWRFbWFpbHMsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgIH07XG4gICAgXG4gICAgY2FzZSAnQVBQRU5EX0VNQUlMUyc6IHtcbiAgICAgIC8vIENyZWF0ZSBhIHNldCBvZiBleGlzdGluZyBlbWFpbCBJRHMgdG8gYXZvaWQgZHVwbGljYXRlc1xuICAgICAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KHN0YXRlLmVtYWlscy5tYXAoZW1haWwgPT4gZW1haWwuaWQpKTtcbiAgICAgIFxuICAgICAgY29uc29sZS5sb2coYFtERUJVRy1SRURVQ0VSXSBBUFBFTkRfRU1BSUxTIC0gR290ICR7YWN0aW9uLnBheWxvYWQubGVuZ3RofSBlbWFpbHMgdG8gYXBwZW5kLCBjdXJyZW50IGxpc3QgaGFzICR7c3RhdGUuZW1haWxzLmxlbmd0aH1gKTtcbiAgICAgIFxuICAgICAgLy8gRmlsdGVyIG91dCBhbnkgZHVwbGljYXRlcyBiZWZvcmUgYXBwZW5kaW5nXG4gICAgICBjb25zdCBuZXdFbWFpbHMgPSBhY3Rpb24ucGF5bG9hZC5maWx0ZXIoZW1haWwgPT4gIWV4aXN0aW5nSWRzLmhhcyhlbWFpbC5pZCkpO1xuICAgICAgXG4gICAgICAvLyBMb2cgYXBwZW5kaW5nIGZvciBkZWJ1Z2dpbmdcbiAgICAgIGNvbnNvbGUubG9nKGBbREVCVUctUkVEVUNFUl0gRmlsdGVyZWQgdG8gJHtuZXdFbWFpbHMubGVuZ3RofSBuZXcgbm9uLWR1cGxpY2F0ZSBlbWFpbHNgKTtcbiAgICAgIFxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBJZiBubyBuZXcgZW1haWxzIHdlcmUgZm91bmQsIHNldCBpc0xvYWRpbmcgdG8gZmFsc2UgYnV0IGRvbid0IGNoYW5nZSB0aGUgZW1haWwgbGlzdFxuICAgICAgaWYgKG5ld0VtYWlscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tERUJVRy1SRURVQ0VSXSBObyBuZXcgZW1haWxzIHRvIGFwcGVuZCwgcmV0dXJuaW5nIGN1cnJlbnQgc3RhdGUgd2l0aCBpc0xvYWRpbmc9ZmFsc2UnKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIERlYnVnIHRoZSBkYXRlcyB0byBjaGVjayBzb3J0aW5nXG4gICAgICBpZiAobmV3RW1haWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tERUJVRy1SRURVQ0VSXSBTYW1wbGUgbmV3IGVtYWlscyBiZWZvcmUgY29tYmluaW5nOicsXG4gICAgICAgICAgbmV3RW1haWxzLnNsaWNlKDAsIDMpLm1hcChlID0+ICh7XG4gICAgICAgICAgICBpZDogZS5pZC5zdWJzdHJpbmcoMCwgOCksXG4gICAgICAgICAgICBzdWJqZWN0OiBlLnN1YmplY3Q/LnN1YnN0cmluZygwLCAyMCksXG4gICAgICAgICAgICBkYXRlOiBlLmRhdGUsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKGUuZGF0ZSkuZ2V0VGltZSgpXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZJWEVEOiBQcm9wZXJseSBjb21iaW5lIGV4aXN0aW5nIGFuZCBuZXcgZW1haWxzXG4gICAgICAvLyBXZSBuZWVkIHRvIGVuc3VyZSB3ZSBrZWVwIEFMTCBlbWFpbHMgd2hlbiBhcHBlbmRpbmdcbiAgICAgIGNvbnN0IGNvbWJpbmVkRW1haWxzID0gWy4uLnN0YXRlLmVtYWlscywgLi4ubmV3RW1haWxzXTtcbiAgICAgIFxuICAgICAgLy8gU29ydCBjb21iaW5lZCBlbWFpbHMgYnkgZGF0ZSAobmV3ZXN0IGZpcnN0KVxuICAgICAgY29uc3Qgc29ydGVkRW1haWxzID0gY29tYmluZWRFbWFpbHMuc29ydChcbiAgICAgICAgKGEsIGIpID0+IHtcbiAgICAgICAgICAvLyBDb252ZXJ0IGFsbCBkYXRlcyB0byB0aW1lc3RhbXBzIGZvciBjb21wYXJpc29uXG4gICAgICAgICAgbGV0IGRhdGVBOiBudW1iZXIsIGRhdGVCOiBudW1iZXI7XG4gICAgICAgICAgXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRhdGVBID0gYS5kYXRlIGluc3RhbmNlb2YgRGF0ZSA/IGEuZGF0ZS5nZXRUaW1lKCkgOiBuZXcgRGF0ZShhLmRhdGUpLmdldFRpbWUoKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkYXRlQSA9IDA7IC8vIERlZmF1bHQgdG8gb2xkZXN0IGlmIGludmFsaWRcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRhdGVCID0gYi5kYXRlIGluc3RhbmNlb2YgRGF0ZSA/IGIuZGF0ZS5nZXRUaW1lKCkgOiBuZXcgRGF0ZShiLmRhdGUpLmdldFRpbWUoKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkYXRlQiA9IDA7IC8vIERlZmF1bHQgdG8gb2xkZXN0IGlmIGludmFsaWRcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gSGFuZGxlIGludmFsaWQgZGF0ZXNcbiAgICAgICAgICBpZiAoaXNOYU4oZGF0ZUEpICYmIGlzTmFOKGRhdGVCKSkgcmV0dXJuIDA7XG4gICAgICAgICAgaWYgKGlzTmFOKGRhdGVBKSkgcmV0dXJuIDE7IC8vIFB1dCBpbnZhbGlkIGRhdGVzIGF0IHRoZSBlbmRcbiAgICAgICAgICBpZiAoaXNOYU4oZGF0ZUIpKSByZXR1cm4gLTE7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU29ydCBuZXdlc3QgZmlyc3RcbiAgICAgICAgICByZXR1cm4gZGF0ZUIgLSBkYXRlQTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIFxuICAgICAgY29uc29sZS5sb2coYFtERUJVRy1SRURVQ0VSXSBGaW5hbCBjb21iaW5lZCBsaXN0IGhhcyAke3NvcnRlZEVtYWlscy5sZW5ndGh9IGVtYWlscyAoJHtzdGF0ZS5lbWFpbHMubGVuZ3RofSBvbGQgKyAke25ld0VtYWlscy5sZW5ndGh9IG5ldylgKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGVtYWlsczogc29ydGVkRW1haWxzLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICBjYXNlICdTRUxFQ1RfRU1BSUwnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkRW1haWw6IGFjdGlvbi5wYXlsb2FkLmVtYWlsLFxuICAgICAgICAvLyBEb24ndCBtb2RpZnkgc2VsZWN0ZWRFbWFpbElkcyB3aGVuIGp1c3Qgc2VsZWN0aW5nIGFuIGVtYWlsIGZvciBwcmV2aWV3XG4gICAgICB9O1xuICAgIFxuICAgIGNhc2UgJ1RPR0dMRV9FTUFJTF9TRUxFQ1RJT04nOiB7XG4gICAgICBjb25zdCBlbWFpbElkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICBjb25zdCBpc1NlbGVjdGVkID0gc3RhdGUuc2VsZWN0ZWRFbWFpbElkcy5pbmNsdWRlcyhlbWFpbElkKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkRW1haWxJZHM6IGlzU2VsZWN0ZWRcbiAgICAgICAgICA/IHN0YXRlLnNlbGVjdGVkRW1haWxJZHMuZmlsdGVyKGlkID0+IGlkICE9PSBlbWFpbElkKVxuICAgICAgICAgIDogWy4uLnN0YXRlLnNlbGVjdGVkRW1haWxJZHMsIGVtYWlsSWRdXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICBjYXNlICdUT0dHTEVfU0VMRUNUX0FMTCc6IHtcbiAgICAgIC8vIElmIGFsbCBlbWFpbHMgYXJlIGFscmVhZHkgc2VsZWN0ZWQsIGNsZWFyIHRoZSBzZWxlY3Rpb25cbiAgICAgIGNvbnN0IGFsbEVtYWlsSWRzID0gc3RhdGUuZW1haWxzLm1hcChlbWFpbCA9PiBlbWFpbC5pZCk7XG4gICAgICBjb25zdCBhbGxTZWxlY3RlZCA9IGFsbEVtYWlsSWRzLmV2ZXJ5KGlkID0+IHN0YXRlLnNlbGVjdGVkRW1haWxJZHMuaW5jbHVkZXMoaWQpKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkRW1haWxJZHM6IGFsbFNlbGVjdGVkID8gW10gOiBhbGxFbWFpbElkc1xuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgY2FzZSAnQ0xFQVJfU0VMRUNURURfRU1BSUxTJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZEVtYWlsSWRzOiBbXSxcbiAgICAgICAgc2VsZWN0ZWRFbWFpbDogbnVsbFxuICAgICAgfTtcbiAgICBcbiAgICBjYXNlICdTRVRfTE9BRElORyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZFxuICAgICAgfTtcbiAgICBcbiAgICBjYXNlICdTRVRfTE9BRElOR19VTlJFQURfQ09VTlRTJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc0xvYWRpbmdVbnJlYWRDb3VudHM6IGFjdGlvbi5wYXlsb2FkXG4gICAgICB9O1xuICAgIFxuICAgIGNhc2UgJ1NFVF9FUlJPUic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZXJyb3I6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICB9O1xuICAgIFxuICAgIGNhc2UgJ1NFVF9QQUdFJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBwYWdlOiBhY3Rpb24ucGF5bG9hZFxuICAgICAgfTtcbiAgICBcbiAgICBjYXNlICdJTkNSRU1FTlRfUEFHRSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgcGFnZTogc3RhdGUucGFnZSArIDFcbiAgICAgIH07XG4gICAgXG4gICAgY2FzZSAnU0VUX1RPVEFMX1BBR0VTJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB0b3RhbFBhZ2VzOiBhY3Rpb24ucGF5bG9hZFxuICAgICAgfTtcbiAgICBcbiAgICBjYXNlICdTRVRfVE9UQUxfRU1BSUxTJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB0b3RhbEVtYWlsczogYWN0aW9uLnBheWxvYWRcbiAgICAgIH07XG4gICAgXG4gICAgY2FzZSAnU0VUX01BSUxCT1hFUyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbWFpbGJveGVzOiBhY3Rpb24ucGF5bG9hZFxuICAgICAgfTtcbiAgICBcbiAgICBjYXNlICdVUERBVEVfVU5SRUFEX0NPVU5UJzoge1xuICAgICAgY29uc3QgeyBhY2NvdW50SWQsIGZvbGRlciwgY291bnQgfSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgdW5yZWFkQ291bnRNYXA6IHtcbiAgICAgICAgICAuLi5zdGF0ZS51bnJlYWRDb3VudE1hcCxcbiAgICAgICAgICBbYWNjb3VudElkXToge1xuICAgICAgICAgICAgLi4uKHN0YXRlLnVucmVhZENvdW50TWFwW2FjY291bnRJZF0gfHwge30pLFxuICAgICAgICAgICAgW2ZvbGRlcl06IGNvdW50XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICBjYXNlICdTRVRfVU5SRUFEX0NPVU5UUyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgdW5yZWFkQ291bnRNYXA6IGFjdGlvbi5wYXlsb2FkXG4gICAgICB9O1xuICAgIFxuICAgIGNhc2UgJ1RPR0dMRV9TSE9XX0ZPTERFUlMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNob3dGb2xkZXJzOiBhY3Rpb24ucGF5bG9hZFxuICAgICAgfTtcbiAgICBcbiAgICBjYXNlICdNQVJLX0VNQUlMX0FTX1JFQUQnOiB7XG4gICAgICBjb25zdCB7IGVtYWlsSWQsIGlzUmVhZCwgYWNjb3VudElkIH0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIGVtYWlscyBsaXN0XG4gICAgICBjb25zdCB1cGRhdGVkRW1haWxzID0gc3RhdGUuZW1haWxzLm1hcChlbWFpbCA9PiBcbiAgICAgICAgKGVtYWlsLmlkID09PSBlbWFpbElkICYmICghYWNjb3VudElkIHx8IGVtYWlsLmFjY291bnRJZCA9PT0gYWNjb3VudElkKSlcbiAgICAgICAgICA/IHsgLi4uZW1haWwsIGZsYWdzOiB7IC4uLmVtYWlsLmZsYWdzLCBzZWVuOiBpc1JlYWQgfSB9XG4gICAgICAgICAgOiBlbWFpbFxuICAgICAgKTtcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIHNlbGVjdGVkIGVtYWlsIGlmIGl0IG1hdGNoZXNcbiAgICAgIGNvbnN0IHVwZGF0ZWRTZWxlY3RlZEVtYWlsID0gc3RhdGUuc2VsZWN0ZWRFbWFpbCAmJiBcbiAgICAgICAgc3RhdGUuc2VsZWN0ZWRFbWFpbC5pZCA9PT0gZW1haWxJZCAmJiBcbiAgICAgICAgKCFhY2NvdW50SWQgfHwgc3RhdGUuc2VsZWN0ZWRFbWFpbC5hY2NvdW50SWQgPT09IGFjY291bnRJZClcbiAgICAgICAgICA/IHsgLi4uc3RhdGUuc2VsZWN0ZWRFbWFpbCwgZmxhZ3M6IHsgLi4uc3RhdGUuc2VsZWN0ZWRFbWFpbC5mbGFncywgc2VlbjogaXNSZWFkIH0gfVxuICAgICAgICAgIDogc3RhdGUuc2VsZWN0ZWRFbWFpbDtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGVtYWlsczogdXBkYXRlZEVtYWlscyxcbiAgICAgICAgc2VsZWN0ZWRFbWFpbDogdXBkYXRlZFNlbGVjdGVkRW1haWxcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn0gIl0sIm5hbWVzIjpbImluaXRpYWxTdGF0ZSIsImFjY291bnRzIiwic2VsZWN0ZWRBY2NvdW50Iiwic2VsZWN0ZWRGb2xkZXJzIiwiY3VycmVudEZvbGRlciIsImVtYWlscyIsInNlbGVjdGVkRW1haWwiLCJzZWxlY3RlZEVtYWlsSWRzIiwiaXNMb2FkaW5nIiwiaXNMb2FkaW5nVW5yZWFkQ291bnRzIiwiZXJyb3IiLCJwYWdlIiwicGVyUGFnZSIsInRvdGFsUGFnZXMiLCJ0b3RhbEVtYWlscyIsIm1haWxib3hlcyIsInVucmVhZENvdW50TWFwIiwic2hvd0ZvbGRlcnMiLCJub3JtYWxpemVGb2xkZXJBbmRBY2NvdW50IiwiZm9sZGVyIiwiYWNjb3VudElkIiwibm9ybWFsaXplZEZvbGRlciIsImVmZmVjdGl2ZUFjY291bnRJZCIsImluY2x1ZGVzIiwicGFydHMiLCJzcGxpdCIsImZvbGRlckFjY291bnRJZCIsImNvbnNvbGUiLCJsb2ciLCJwcmVmaXhlZEZvbGRlciIsImVtYWlsUmVkdWNlciIsInN0YXRlIiwiYWN0aW9uIiwidHlwZSIsInBheWxvYWQiLCJhY2NvdW50IiwiaW5ib3hGb2xkZXIiLCJpZCIsImVtYWlsIiwidW5zb3J0ZWRFbWFpbHMiLCJsZW5ndGgiLCJzbGljZSIsIm1hcCIsImUiLCJzdWJzdHJpbmciLCJzdWJqZWN0IiwiZGF0ZSIsInRpbWVzdGFtcCIsIkRhdGUiLCJnZXRUaW1lIiwic29ydGVkRW1haWxzIiwic29ydCIsImEiLCJiIiwiZGF0ZUEiLCJkYXRlQiIsImlzTmFOIiwiZXhpc3RpbmdJZHMiLCJTZXQiLCJuZXdFbWFpbHMiLCJmaWx0ZXIiLCJoYXMiLCJjb21iaW5lZEVtYWlscyIsImVtYWlsSWQiLCJpc1NlbGVjdGVkIiwiYWxsRW1haWxJZHMiLCJhbGxTZWxlY3RlZCIsImV2ZXJ5IiwiY291bnQiLCJpc1JlYWQiLCJ1cGRhdGVkRW1haWxzIiwiZmxhZ3MiLCJzZWVuIiwidXBkYXRlZFNlbGVjdGVkRW1haWwiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./lib/reducers/emailReducer.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./lib/services/prefetch-service.ts":
|
|
/*!******************************************!*\
|
|
!*** ./lib/services/prefetch-service.ts ***!
|
|
\******************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getCachedEmailsWithTimeout: () => (/* binding */ getCachedEmailsWithTimeout),\n/* harmony export */ prefetchFolderEmails: () => (/* binding */ prefetchFolderEmails),\n/* harmony export */ prefetchUserEmailData: () => (/* binding */ prefetchUserEmailData),\n/* harmony export */ refreshEmailsInBackground: () => (/* binding */ refreshEmailsInBackground)\n/* harmony export */ });\n/* harmony import */ var private_next_rsc_action_client_wrapper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! private-next-rsc-action-client-wrapper */ \"(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/action-client-wrapper.js\");\n/* harmony import */ var private_next_rsc_action_client_wrapper__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(private_next_rsc_action_client_wrapper__WEBPACK_IMPORTED_MODULE_0__);\n/* __next_internal_action_entry_do_not_use__ {\"40b6acbd16ee963a18ba6de32b5c63b379909103e9\":\"prefetchUserEmailData\",\"7cf3883d51675d568256e1b2498cf8fe78875b65ee\":\"refreshEmailsInBackground\",\"7cfa4fcce0a70a3d3b703a31abefda0e79d9e1097a\":\"prefetchFolderEmails\",\"7e95e703e87cb496134c69dc010f054d10451a2f57\":\"getCachedEmailsWithTimeout\"} */ \nvar getCachedEmailsWithTimeout = /*#__PURE__*/ (0,private_next_rsc_action_client_wrapper__WEBPACK_IMPORTED_MODULE_0__.createServerReference)(\"7e95e703e87cb496134c69dc010f054d10451a2f57\", private_next_rsc_action_client_wrapper__WEBPACK_IMPORTED_MODULE_0__.callServer, void 0, private_next_rsc_action_client_wrapper__WEBPACK_IMPORTED_MODULE_0__.findSourceMapURL, \"getCachedEmailsWithTimeout\");\nvar refreshEmailsInBackground = /*#__PURE__*/ (0,private_next_rsc_action_client_wrapper__WEBPACK_IMPORTED_MODULE_0__.createServerReference)(\"7cf3883d51675d568256e1b2498cf8fe78875b65ee\", private_next_rsc_action_client_wrapper__WEBPACK_IMPORTED_MODULE_0__.callServer, void 0, private_next_rsc_action_client_wrapper__WEBPACK_IMPORTED_MODULE_0__.findSourceMapURL, \"refreshEmailsInBackground\");\nvar prefetchUserEmailData = /*#__PURE__*/ (0,private_next_rsc_action_client_wrapper__WEBPACK_IMPORTED_MODULE_0__.createServerReference)(\"40b6acbd16ee963a18ba6de32b5c63b379909103e9\", private_next_rsc_action_client_wrapper__WEBPACK_IMPORTED_MODULE_0__.callServer, void 0, private_next_rsc_action_client_wrapper__WEBPACK_IMPORTED_MODULE_0__.findSourceMapURL, \"prefetchUserEmailData\");\nvar prefetchFolderEmails = /*#__PURE__*/ (0,private_next_rsc_action_client_wrapper__WEBPACK_IMPORTED_MODULE_0__.createServerReference)(\"7cfa4fcce0a70a3d3b703a31abefda0e79d9e1097a\", private_next_rsc_action_client_wrapper__WEBPACK_IMPORTED_MODULE_0__.callServer, void 0, private_next_rsc_action_client_wrapper__WEBPACK_IMPORTED_MODULE_0__.findSourceMapURL, \"prefetchFolderEmails\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9saWIvc2VydmljZXMvcHJlZmV0Y2gtc2VydmljZS50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0lBNERzQkEsMkNBQUFBLDZGQUFBQSwrQ0FBQUEsOEVBQUFBLFVBQUFBLG9GQUFBQTtJQTBFQUMsMENBQUFBLDZGQUFBQSwrQ0FBQUEsOEVBQUFBLFVBQUFBLG9GQUFBQTtJQStDQUMsc0NBQUFBLDZGQUFBQSwrQ0FBQUEsOEVBQUFBLFVBQUFBLG9GQUFBQTtJQW9GQUMscUNBQUFBLDZGQUFBQSwrQ0FBQUEsOEVBQUFBLFVBQUFBLG9GQUFBQSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9saWIvc2VydmljZXMvcHJlZmV0Y2gtc2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcic7XG5cbmltcG9ydCB7IGdldEltYXBDb25uZWN0aW9uLCBnZXRFbWFpbHMsIGdldEVtYWlsQ29udGVudCB9IGZyb20gJy4vZW1haWwtc2VydmljZSc7XG5pbXBvcnQge1xuICBjYWNoZUVtYWlsTGlzdCxcbiAgY2FjaGVFbWFpbENvbnRlbnQsXG4gIGNhY2hlSW1hcFNlc3Npb24sXG4gIGdldENhY2hlZEVtYWlsTGlzdCxcbiAgZ2V0UmVkaXNDbGllbnQsXG4gIHdhcm11cFJlZGlzQ2FjaGVcbn0gZnJvbSAnQC9saWIvcmVkaXMnO1xuXG4vLyBLZWVwIHRyYWNrIG9mIG9uZ29pbmcgcHJlZmV0Y2ggb3BlcmF0aW9ucyB0byBwcmV2ZW50IGR1cGxpY2F0ZXNcbmNvbnN0IHByZWZldGNoSW5Qcm9ncmVzcyA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuY29uc3QgbGFzdFByZWZldGNoVGltZSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5jb25zdCBQUkVGRVRDSF9DT09MRE9XTl9NUyA9IDMwMDAwOyAvLyAzMCBzZWNvbmRzIGJldHdlZW4gcHJlZmV0Y2ggb3BlcmF0aW9uc1xuXG4vLyBUcmFjayByZWNlbnQgcmVmcmVzaGVzIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHNcbmNvbnN0IHJlY2VudFJlZnJlc2hlcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5jb25zdCBDT09MRE9XTl9QRVJJT0QgPSA2MDAwMDsgLy8gNjAgc2Vjb25kcyBjb29sZG93biBiZXR3ZWVuIHJlZnJlc2hlc1xuXG4vKipcbiAqIENoZWNrIGlmIHdlIHNob3VsZCBwcmVmZXRjaCBmb3IgYSB1c2VyIGJhc2VkIG9uIGNvb2xkb3duXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFByZWZldGNoKHVzZXJJZDogc3RyaW5nLCBrZXk6IHN0cmluZyA9ICdnZW5lcmFsJyk6IGJvb2xlYW4ge1xuICBjb25zdCBwcmVmZXRjaEtleSA9IGAke3VzZXJJZH06JHtrZXl9YDtcbiAgXG4gIC8vIENoZWNrIGlmIHByZWZldGNoIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcbiAgaWYgKHByZWZldGNoSW5Qcm9ncmVzcy5nZXQocHJlZmV0Y2hLZXkpKSB7XG4gICAgY29uc29sZS5sb2coYFByZWZldGNoIGFscmVhZHkgaW4gcHJvZ3Jlc3MgZm9yICR7cHJlZmV0Y2hLZXl9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIFxuICAvLyBDaGVjayBjb29sZG93blxuICBjb25zdCBsYXN0VGltZSA9IGxhc3RQcmVmZXRjaFRpbWUuZ2V0KHByZWZldGNoS2V5KSB8fCAwO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBcbiAgaWYgKG5vdyAtIGxhc3RUaW1lIDwgUFJFRkVUQ0hfQ09PTERPV05fTVMpIHtcbiAgICBjb25zb2xlLmxvZyhgUHJlZmV0Y2ggY29vbGRvd24gYWN0aXZlIGZvciAke3ByZWZldGNoS2V5fSwgbGFzdCB3YXMgJHtNYXRoLnJvdW5kKChub3cgLSBsYXN0VGltZSkvMTAwMCl9cyBhZ29gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgXG4gIC8vIE1hcmsgYXMgaW4gcHJvZ3Jlc3MgYW5kIHVwZGF0ZSBsYXN0IHRpbWVcbiAgcHJlZmV0Y2hJblByb2dyZXNzLnNldChwcmVmZXRjaEtleSwgdHJ1ZSk7XG4gIGxhc3RQcmVmZXRjaFRpbWUuc2V0KHByZWZldGNoS2V5LCBub3cpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBNYXJrIHByZWZldGNoIGFzIGNvbXBsZXRlZFxuICovXG5mdW5jdGlvbiBtYXJrUHJlZmV0Y2hDb21wbGV0ZWQodXNlcklkOiBzdHJpbmcsIGtleTogc3RyaW5nID0gJ2dlbmVyYWwnKTogdm9pZCB7XG4gIGNvbnN0IHByZWZldGNoS2V5ID0gYCR7dXNlcklkfToke2tleX1gO1xuICBwcmVmZXRjaEluUHJvZ3Jlc3Muc2V0KHByZWZldGNoS2V5LCBmYWxzZSk7XG59XG5cbi8qKlxuICogR2V0IGNhY2hlZCBlbWFpbHMgd2l0aCB0aW1lb3V0IHRvIGVuc3VyZSBmYXN0IFVJIHJlc3BvbnNlXG4gKiBJZiBjYWNoZSBhY2Nlc3MgdGFrZXMgbG9uZ2VyIHRoYW4gdGltZW91dCwgcmV0dXJuIG51bGwgdG8gdXNlIHJlZ3VsYXIgSU1BUCBmZXRjaFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2FjaGVkRW1haWxzV2l0aFRpbWVvdXQoXG4gIHVzZXJJZDogc3RyaW5nLFxuICBmb2xkZXI6IHN0cmluZyxcbiAgcGFnZTogbnVtYmVyLFxuICBwZXJQYWdlOiBudW1iZXIsXG4gIHRpbWVvdXRNczogbnVtYmVyID0gMTAwLFxuICBhY2NvdW50SWQ/OiBzdHJpbmdcbik6IFByb21pc2U8YW55IHwgbnVsbD4ge1xuICAvLyBTa2lwIGNhY2hlIGlmIGFjY291bnRJZCBpcyAnbG9hZGluZy1hY2NvdW50J1xuICBpZiAoYWNjb3VudElkID09PSAnbG9hZGluZy1hY2NvdW50Jykge1xuICAgIGNvbnNvbGUubG9nKGBTa2lwcGluZyBjYWNoZSBmb3IgbG9hZGluZyBhY2NvdW50YCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDUklUSUNBTCBGSVg6IFByb3BlciBmb2xkZXIgYW5kIGFjY291bnQgSUQgbm9ybWFsaXphdGlvblxuICAvLyBUaGlzIGlzIGNyaXRpY2FsIGZvciBjb25zaXN0ZW50IGNhY2hlIGtleXNcbiAgbGV0IGVmZmVjdGl2ZUFjY291bnRJZDogc3RyaW5nO1xuICBsZXQgbm9ybWFsaXplZEZvbGRlcjogc3RyaW5nO1xuXG4gIC8vIEZpcnN0LCBoYW5kbGUgdGhlIGZvbGRlciBmb3JtYXRcbiAgaWYgKGZvbGRlci5pbmNsdWRlcygnOicpKSB7XG4gICAgLy8gRXh0cmFjdCBwYXJ0cyBpZiBmb2xkZXIgYWxyZWFkeSBoYXMgYSBwcmVmaXhcbiAgICBjb25zdCBwYXJ0cyA9IGZvbGRlci5zcGxpdCgnOicpO1xuICAgIGNvbnN0IGZvbGRlckFjY291bnRJZCA9IHBhcnRzWzBdO1xuICAgIG5vcm1hbGl6ZWRGb2xkZXIgPSBwYXJ0c1sxXTtcbiAgICBcbiAgICAvLyBDUklUSUNBTCBGSVg6IElmIGV4cGxpY2l0IGFjY291bnRJZCBpcyBwcm92aWRlZCwgaXQgQUxXQVlTIHRha2VzIHByZWNlZGVuY2VcbiAgICAvLyBUaGlzIGVuc3VyZXMgYWNjb3VudCBzd2l0Y2hpbmcgd29ya3MgY29ycmVjdGx5XG4gICAgaWYgKGFjY291bnRJZCkge1xuICAgICAgY29uc29sZS5sb2coYFtnZXRDYWNoZWRFbWFpbHNXaXRoVGltZW91dF0gVXNpbmcgcHJvdmlkZWQgYWNjb3VudElkICgke2FjY291bnRJZH0pIG92ZXIgZm9sZGVyIHByZWZpeCAoJHtmb2xkZXJBY2NvdW50SWR9KWApO1xuICAgICAgZWZmZWN0aXZlQWNjb3VudElkID0gYWNjb3VudElkO1xuICAgIH0gZWxzZSB7XG4gICAgICBlZmZlY3RpdmVBY2NvdW50SWQgPSBmb2xkZXJBY2NvdW50SWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE5vIGZvbGRlciBwcmVmaXgsIHVzZSB0aGUgZm9sZGVyIG5hbWUgYXMgaXNcbiAgICBub3JtYWxpemVkRm9sZGVyID0gZm9sZGVyO1xuICAgIGVmZmVjdGl2ZUFjY291bnRJZCA9IGFjY291bnRJZCB8fCAnZGVmYXVsdCc7XG4gIH1cbiAgXG4gIC8vIExvZyB0aGUgbm9ybWFsaXphdGlvbiBmb3IgZGVidWdnaW5nXG4gIGNvbnNvbGUubG9nKGBbZ2V0Q2FjaGVkRW1haWxzV2l0aFRpbWVvdXRdIE5vcm1hbGl6ZWQ6IGZvbGRlcj0ke25vcm1hbGl6ZWRGb2xkZXJ9LCBhY2NvdW50SWQ9JHtlZmZlY3RpdmVBY2NvdW50SWR9IChmcm9tICR7Zm9sZGVyfSlgKTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGBDYWNoZSBhY2Nlc3MgdGltZW91dCBmb3IgJHt1c2VySWR9OiR7ZWZmZWN0aXZlQWNjb3VudElkfToke25vcm1hbGl6ZWRGb2xkZXJ9OiR7cGFnZX06JHtwZXJQYWdlfWApO1xuICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICB9LCB0aW1lb3V0TXMpO1xuXG4gICAgLy8gQ1JJVElDQUwgRklYOiBVc2UgdGhlIG5vcm1hbGl6ZWQgcGFyYW1ldGVycyBjb25zaXN0ZW50bHlcbiAgICAvLyBUaGlzIGVuc3VyZXMgd2UncmUgbG9va2luZyB1cCB0aGUgcmlnaHQgY2FjaGUgZW50cmllc1xuICAgIGdldENhY2hlZEVtYWlsTGlzdCh1c2VySWQsIGVmZmVjdGl2ZUFjY291bnRJZCwgbm9ybWFsaXplZEZvbGRlciwgcGFnZSwgcGVyUGFnZSlcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFtnZXRDYWNoZWRFbWFpbHNXaXRoVGltZW91dF0gQ2FjaGUgaGl0IGZvciAke3VzZXJJZH06JHtlZmZlY3RpdmVBY2NvdW50SWR9OiR7bm9ybWFsaXplZEZvbGRlcn06JHtwYWdlfToke3BlclBhZ2V9YCk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBbZ2V0Q2FjaGVkRW1haWxzV2l0aFRpbWVvdXRdIENhY2hlIG1pc3MgZm9yICR7dXNlcklkfToke2VmZmVjdGl2ZUFjY291bnRJZH06JHtub3JtYWxpemVkRm9sZGVyfToke3BhZ2V9OiR7cGVyUGFnZX1gKTtcbiAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbZ2V0Q2FjaGVkRW1haWxzV2l0aFRpbWVvdXRdIEVycm9yIGFjY2Vzc2luZyBjYWNoZTonLCBlcnIpO1xuICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlZnJlc2ggZW1haWxzIGluIGJhY2tncm91bmQgd2l0aG91dCBibG9ja2luZyBVSVxuICogVGhpcyBhbGxvd3MgdGhlIFVJIHRvIHNob3cgY2FjaGVkIGRhdGEgaW1tZWRpYXRlbHkgd2hpbGUgcmVmcmVzaGluZyBpbiBiYWNrZ3JvdW5kXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWZyZXNoRW1haWxzSW5CYWNrZ3JvdW5kKFxuICB1c2VySWQ6IHN0cmluZywgXG4gIGZvbGRlcjogc3RyaW5nLFxuICBwYWdlOiBudW1iZXIsXG4gIHBlclBhZ2U6IG51bWJlcixcbiAgYWNjb3VudElkPzogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICAvLyBGaXJzdCBjaGVjayBpZiBmb2xkZXIgaGFzIHRoZSBhY2NvdW50SWQgcHJlZml4XG4gICAgY29uc29sZS5sb2coYFtyZWZyZXNoRW1haWxzSW5CYWNrZ3JvdW5kXSBOb3JtYWxpemVkOiBmb2xkZXI9JHtmb2xkZXJ9LCBhY2NvdW50SWQ9JHthY2NvdW50SWR9IChmcm9tICR7Zm9sZGVyfSlgKTtcbiAgICBcbiAgICAvLyBDcmVhdGUgYSB1bmlxdWUga2V5IGZvciB0aGlzIHJlZnJlc2ggcmVxdWVzdFxuICAgIGNvbnN0IHJlZnJlc2hLZXkgPSBgJHt1c2VySWR9OnJlZnJlc2g6JHthY2NvdW50SWQgfHwgJ2RlZmF1bHQnfToke2ZvbGRlcn06JHtwYWdlfWA7XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBleGFjdCByZWZyZXNoIHdhcyBkb25lIHJlY2VudGx5IC0gUFJFVkVOVCBJTkZJTklURSBMT09QU1xuICAgIGNvbnN0IGxhc3RSZWZyZXNoZWQgPSByZWNlbnRSZWZyZXNoZXMuZ2V0KHJlZnJlc2hLZXkpO1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgXG4gICAgaWYgKGxhc3RSZWZyZXNoZWQgJiYgbm93IC0gbGFzdFJlZnJlc2hlZCA8IENPT0xET1dOX1BFUklPRCkge1xuICAgICAgY29uc29sZS5sb2coYFByZWZldGNoIGNvb2xkb3duIGFjdGl2ZSBmb3IgJHtyZWZyZXNoS2V5fSwgbGFzdCB3YXMgJHtNYXRoLmZsb29yKChub3cgLSBsYXN0UmVmcmVzaGVkKS8xMDAwKX1zIGFnb2ApO1xuICAgICAgcmV0dXJuOyAvLyBTa2lwIGlmIHdlIHJlZnJlc2hlZCB0aGlzIGV4YWN0IGRhdGEgcmVjZW50bHlcbiAgICB9XG4gICAgXG4gICAgLy8gVXBkYXRlIHRoZSByZWZyZXNoIHRpbWVzdGFtcFxuICAgIHJlY2VudFJlZnJlc2hlcy5zZXQocmVmcmVzaEtleSwgbm93KTtcbiAgICBcbiAgICAvLyBQcnVuZSBvbGQgZW50cmllcyBmcm9tIHRoZSBtYXAgKGtlZXAgb25seSByZWNlbnQgb25lcylcbiAgICBmb3IgKGNvbnN0IFtrZXksIHRpbWVzdGFtcF0gb2YgcmVjZW50UmVmcmVzaGVzLmVudHJpZXMoKSkge1xuICAgICAgaWYgKG5vdyAtIHRpbWVzdGFtcCA+IENPT0xET1dOX1BFUklPRCkge1xuICAgICAgICByZWNlbnRSZWZyZXNoZXMuZGVsZXRlKGtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIENSSVRJQ0FMIEZJWDogUHJldmVudCBhbnkgYmFja2dyb3VuZCByZWZyZXNoIGJ5IGltbWVkaWF0ZWx5IHJldHVybmluZ1xuICAgIGNvbnNvbGUubG9nKGBbcmVmcmVzaEVtYWlsc0luQmFja2dyb3VuZF0gRElTQUJMRUQgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wc2ApO1xuICAgIHJldHVybjtcbiAgICBcbiAgICAvLyBSZWFsIGltcGxlbWVudGF0aW9uIG9mIHJlZnJlc2ggd291bGQgYmUgaGVyZVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIHJlZnJlc2hFbWFpbHNJbkJhY2tncm91bmQ6JywgZXJyb3IpO1xuICB9XG59XG5cbi8qKlxuICogUHJlZmV0Y2ggYmFzaWMgZW1haWwgZGF0YSBmb3IgZmFzdGVyIGluaXRpYWwgbG9hZGluZ1xuICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYSB1c2VyIGxvZ3MgaW5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZWZldGNoVXNlckVtYWlsRGF0YSh1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAvLyBTa2lwIGlmIGFscmVhZHkgaW4gcHJvZ3Jlc3Mgb3IgaW4gY29vbGRvd25cbiAgaWYgKCFzaG91bGRQcmVmZXRjaCh1c2VySWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIFxuICBjb25zb2xlLmxvZyhgU3RhcnRpbmcgZW1haWwgcHJlZmV0Y2ggZm9yIHVzZXIgJHt1c2VySWR9YCk7XG4gIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgdHJ5IHtcbiAgICAvLyBDb25uZWN0IHRvIElNQVAgc2VydmVyXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0SW1hcENvbm5lY3Rpb24odXNlcklkKTtcbiAgICBcbiAgICAvLyAxLiBQcmVmZXRjaCBtYWlsYm94IGxpc3RcbiAgICBjb25zdCBtYWlsYm94ZXMgPSBhd2FpdCBjbGllbnQubGlzdCgpO1xuICAgIGNvbnN0IG1haWxib3hQYXRocyA9IG1haWxib3hlcy5tYXAobWFpbGJveCA9PiBtYWlsYm94LnBhdGgpO1xuICAgIFxuICAgIC8vIENhY2hlIG1haWxib3ggbGlzdCBpbiBzZXNzaW9uIGRhdGFcbiAgICBhd2FpdCBjYWNoZUltYXBTZXNzaW9uKHVzZXJJZCwge1xuICAgICAgbGFzdEFjdGl2ZTogRGF0ZS5ub3coKSxcbiAgICAgIG1haWxib3hlczogbWFpbGJveFBhdGhzXG4gICAgfSk7XG4gICAgXG4gICAgY29uc29sZS5sb2coYFByZWZldGNoZWQgJHttYWlsYm94UGF0aHMubGVuZ3RofSBmb2xkZXJzIGZvciB1c2VyICR7dXNlcklkfWApO1xuICAgIFxuICAgIC8vIDIuIFByZWZldGNoIGVtYWlsIGxpc3RzIGZvciBpbXBvcnRhbnQgZm9sZGVyc1xuICAgIGNvbnN0IGltcG9ydGFudEZvbGRlcnMgPSBbXG4gICAgICAnSU5CT1gnLFxuICAgICAgbWFpbGJveFBhdGhzLmZpbmQocGF0aCA9PiBwYXRoLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3NlbnQnKSkgfHwgJ1NlbnQnLFxuICAgICAgbWFpbGJveFBhdGhzLmZpbmQocGF0aCA9PiBwYXRoLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2RyYWZ0JykpIHx8ICdEcmFmdHMnXG4gICAgXS5maWx0ZXIoQm9vbGVhbik7XG4gICAgXG4gICAgLy8gRmV0Y2ggZmlyc3QgcGFnZSBvZiBlYWNoIGltcG9ydGFudCBmb2xkZXJcbiAgICBmb3IgKGNvbnN0IGZvbGRlciBvZiBpbXBvcnRhbnRGb2xkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUHJlZmV0Y2hpbmcgZW1haWxzIGZvciAke2ZvbGRlcn1gKTtcbiAgICAgICAgY29uc3QgZW1haWxMaXN0ID0gYXdhaXQgZ2V0RW1haWxzKHVzZXJJZCwgZm9sZGVyLCAxLCAyMCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBQcmVmZXRjaGVkICR7ZW1haWxMaXN0LmVtYWlscy5sZW5ndGh9IGVtYWlscyBmb3IgJHtmb2xkZXJ9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBwcmVmZXRjaGluZyBlbWFpbHMgZm9yIGZvbGRlciAke2ZvbGRlcn06YCwgZXJyb3IpO1xuICAgICAgICAvLyBDb250aW51ZSB3aXRoIG90aGVyIGZvbGRlcnMgZXZlbiBpZiBvbmUgZmFpbHNcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gMy4gUHJlZmV0Y2ggY29udGVudCBvZiByZWNlbnQgdW5yZWFkIGVtYWlscyBpbiBJTkJPWFxuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgdGhlIGxpc3QgYWdhaW4gKGl0J3MgYWxyZWFkeSBjYWNoZWQgc28gdGhpcyB3aWxsIGJlIGZhc3QpXG4gICAgICBjb25zdCBpbmJveExpc3QgPSBhd2FpdCBnZXRFbWFpbHModXNlcklkLCAnSU5CT1gnLCAxLCAyMCk7XG4gICAgICBcbiAgICAgIC8vIFByZWZldGNoIGNvbnRlbnQgZm9yIHVwIHRvIDUgcmVjZW50IHVucmVhZCBlbWFpbHNcbiAgICAgIGNvbnN0IHVucmVhZEVtYWlscyA9IGluYm94TGlzdC5lbWFpbHNcbiAgICAgICAgLmZpbHRlcihlbWFpbCA9PiAhZW1haWwuZmxhZ3Muc2VlbilcbiAgICAgICAgLnNsaWNlKDAsIDUpO1xuICAgICAgXG4gICAgICBpZiAodW5yZWFkRW1haWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coYFByZWZldGNoaW5nIGNvbnRlbnQgZm9yICR7dW5yZWFkRW1haWxzLmxlbmd0aH0gdW5yZWFkIGVtYWlsc2ApO1xuICAgICAgICBcbiAgICAgICAgLy8gRmV0Y2ggY29udGVudCBpbiBwYXJhbGxlbCBmb3Igc3BlZWRcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgICAgIHVucmVhZEVtYWlscy5tYXAoZW1haWwgPT4gXG4gICAgICAgICAgICBnZXRFbWFpbENvbnRlbnQodXNlcklkLCBlbWFpbC5pZCwgJ0lOQk9YJylcbiAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKGBFcnJvciBwcmVmZXRjaGluZyBlbWFpbCAke2VtYWlsLmlkfTpgLCBlcnIpKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnNvbGUubG9nKGBDb21wbGV0ZWQgcHJlZmV0Y2hpbmcgY29udGVudCBmb3IgdW5yZWFkIGVtYWlsc2ApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwcmVmZXRjaGluZyB1bnJlYWQgZW1haWwgY29udGVudDonLCBlcnJvcik7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGR1cmF0aW9uID0gKERhdGUubm93KCkgLSBzdGFydFRpbWUpIC8gMTAwMDtcbiAgICBjb25zb2xlLmxvZyhgRW1haWwgcHJlZmV0Y2ggY29tcGxldGVkIGZvciB1c2VyICR7dXNlcklkfSBpbiAke2R1cmF0aW9uLnRvRml4ZWQoMil9c2ApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBlbWFpbCBwcmVmZXRjaDonLCBlcnJvcik7XG4gIH0gZmluYWxseSB7XG4gICAgbWFya1ByZWZldGNoQ29tcGxldGVkKHVzZXJJZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBQcmVmZXRjaCBhIHNwZWNpZmljIGZvbGRlcidzIGVtYWlsc1xuICogVGhpcyBjYW4gYmUgdXNlZCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyB0byBhIGZvbGRlciB0byBwcmVsb2FkIG1vcmUgcGFnZXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZWZldGNoRm9sZGVyRW1haWxzKFxuICB1c2VySWQ6IHN0cmluZyxcbiAgZm9sZGVyOiBzdHJpbmcsXG4gIHBhZ2VzOiBudW1iZXIgPSAzLFxuICBzdGFydFBhZ2U6IG51bWJlciA9IDEsXG4gIGFjY291bnRJZD86IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIEV4dHJhY3QgYWNjb3VudCBJRCBmcm9tIGZvbGRlciBuYW1lIGlmIHByZXNlbnQgYW5kIG5vbmUgd2FzIGV4cGxpY2l0bHkgcHJvdmlkZWRcbiAgY29uc3QgZm9sZGVyQWNjb3VudElkID0gZm9sZGVyLmluY2x1ZGVzKCc6JykgPyBmb2xkZXIuc3BsaXQoJzonKVswXSA6IGFjY291bnRJZDtcbiAgXG4gIC8vIFVzZSB0aGUgbW9zdCBzcGVjaWZpYyBhY2NvdW50IElEIGF2YWlsYWJsZVxuICBjb25zdCBlZmZlY3RpdmVBY2NvdW50SWQgPSBmb2xkZXJBY2NvdW50SWQgfHwgYWNjb3VudElkIHx8ICdkZWZhdWx0JztcbiAgXG4gIC8vIE5vcm1hbGl6ZSBmb2xkZXIgbmFtZSBieSByZW1vdmluZyBhY2NvdW50IHByZWZpeCBpZiBwcmVzZW50XG4gIGNvbnN0IG5vcm1hbGl6ZWRGb2xkZXIgPSBmb2xkZXIuaW5jbHVkZXMoJzonKSA/IGZvbGRlci5zcGxpdCgnOicpWzFdIDogZm9sZGVyO1xuICBcbiAgY29uc3QgcHJlZmV0Y2hLZXkgPSBgZm9sZGVyOiR7bm9ybWFsaXplZEZvbGRlcn06JHtzdGFydFBhZ2V9OiR7ZWZmZWN0aXZlQWNjb3VudElkfWA7XG4gIFxuICAvLyBTa2lwIGlmIGFscmVhZHkgaW4gcHJvZ3Jlc3Mgb3IgaW4gY29vbGRvd25cbiAgaWYgKCFzaG91bGRQcmVmZXRjaCh1c2VySWQsIHByZWZldGNoS2V5KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBcbiAgdHJ5IHtcbiAgICBjb25zb2xlLmxvZyhgUHJlZmV0Y2hpbmcgJHtwYWdlc30gcGFnZXMgb2YgZW1haWxzIGZvciBmb2xkZXIgJHtub3JtYWxpemVkRm9sZGVyfSBzdGFydGluZyBmcm9tIHBhZ2UgJHtzdGFydFBhZ2V9IGZvciBhY2NvdW50ICR7ZWZmZWN0aXZlQWNjb3VudElkfWApO1xuICAgIFxuICAgIC8vIENhbGN1bGF0ZSB0aGUgcmFuZ2Ugb2YgcGFnZXMgdG8gcHJlZmV0Y2hcbiAgICBjb25zdCBwYWdlc1RvRmV0Y2ggPSBBcnJheS5mcm9tKFxuICAgICAgeyBsZW5ndGg6IHBhZ2VzIH0sIFxuICAgICAgKF8sIGkpID0+IHN0YXJ0UGFnZSArIGlcbiAgICApO1xuICAgIFxuICAgIGNvbnNvbGUubG9nKGBXaWxsIHByZWZldGNoIHBhZ2VzOiAke3BhZ2VzVG9GZXRjaC5qb2luKCcsICcpfWApO1xuICAgIFxuICAgIC8vIEZldGNoIG11bHRpcGxlIHBhZ2VzIGluIHBhcmFsbGVsXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgcGFnZXNUb0ZldGNoLm1hcChwYWdlID0+XG4gICAgICAgIGdldEVtYWlscyh1c2VySWQsIG5vcm1hbGl6ZWRGb2xkZXIsIHBhZ2UsIDIwLCBlZmZlY3RpdmVBY2NvdW50SWQpXG4gICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTdWNjZXNzZnVsbHkgcHJlZmV0Y2hlZCBhbmQgY2FjaGVkIHBhZ2UgJHtwYWdlfSBvZiAke25vcm1hbGl6ZWRGb2xkZXJ9IHdpdGggJHtyZXN1bHQuZW1haWxzLmxlbmd0aH0gZW1haWxzIGZvciBhY2NvdW50ICR7ZWZmZWN0aXZlQWNjb3VudElkfWApO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgcHJlZmV0Y2hpbmcgcGFnZSAke3BhZ2V9IG9mICR7bm9ybWFsaXplZEZvbGRlcn0gZm9yIGFjY291bnQgJHtlZmZlY3RpdmVBY2NvdW50SWR9OmAsIGVycik7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gICAgXG4gICAgY29uc29sZS5sb2coYENvbXBsZXRlZCBwcmVmZXRjaGluZyAke3BhZ2VzfSBwYWdlcyBmb3IgJHtub3JtYWxpemVkRm9sZGVyfSBpbiBhY2NvdW50ICR7ZWZmZWN0aXZlQWNjb3VudElkfWApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGR1cmluZyBmb2xkZXIgcHJlZmV0Y2g6YCwgZXJyb3IpO1xuICB9IGZpbmFsbHkge1xuICAgIG1hcmtQcmVmZXRjaENvbXBsZXRlZCh1c2VySWQsIHByZWZldGNoS2V5KTtcbiAgfVxufSAiXSwibmFtZXMiOlsiZ2V0Q2FjaGVkRW1haWxzV2l0aFRpbWVvdXQiLCJyZWZyZXNoRW1haWxzSW5CYWNrZ3JvdW5kIiwicHJlZmV0Y2hVc2VyRW1haWxEYXRhIiwicHJlZmV0Y2hGb2xkZXJFbWFpbHMiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./lib/services/prefetch-service.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./lib/utils.ts":
|
|
/*!**********************!*\
|
|
!*** ./lib/utils.ts ***!
|
|
\**********************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ cn: () => (/* binding */ cn),\n/* harmony export */ formatDate: () => (/* binding */ formatDate)\n/* harmony export */ });\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! clsx */ \"(ssr)/./node_modules/clsx/dist/clsx.mjs\");\n/* harmony import */ var tailwind_merge__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tailwind-merge */ \"(ssr)/./node_modules/tailwind-merge/dist/bundle-mjs.mjs\");\n\n\nfunction cn(...inputs) {\n return (0,tailwind_merge__WEBPACK_IMPORTED_MODULE_1__.twMerge)((0,clsx__WEBPACK_IMPORTED_MODULE_0__.clsx)(inputs));\n}\nfunction formatDate(dateString) {\n try {\n const date = new Date(dateString);\n return new Intl.DateTimeFormat('en-US', {\n month: '2-digit',\n day: '2-digit',\n year: 'numeric'\n }).format(date);\n } catch {\n return '';\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9saWIvdXRpbHMudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE2QztBQUNKO0FBRWxDLFNBQVNFLEdBQUcsR0FBR0MsTUFBb0I7SUFDeEMsT0FBT0YsdURBQU9BLENBQUNELDBDQUFJQSxDQUFDRztBQUN0QjtBQUVPLFNBQVNDLFdBQVdDLFVBQWtCO0lBQzNDLElBQUk7UUFDRixNQUFNQyxPQUFPLElBQUlDLEtBQUtGO1FBQ3RCLE9BQU8sSUFBSUcsS0FBS0MsY0FBYyxDQUFDLFNBQVM7WUFDdENDLE9BQU87WUFDUEMsS0FBSztZQUNMQyxNQUFNO1FBQ1IsR0FBR0MsTUFBTSxDQUFDUDtJQUNaLEVBQUUsT0FBTTtRQUNOLE9BQU87SUFDVDtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2xpYi91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIENsYXNzVmFsdWUsIGNsc3ggfSBmcm9tIFwiY2xzeFwiO1xuaW1wb3J0IHsgdHdNZXJnZSB9IGZyb20gXCJ0YWlsd2luZC1tZXJnZVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY24oLi4uaW5wdXRzOiBDbGFzc1ZhbHVlW10pIHtcbiAgcmV0dXJuIHR3TWVyZ2UoY2xzeChpbnB1dHMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZVN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgIH0pLmZvcm1hdChkYXRlKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbiJdLCJuYW1lcyI6WyJjbHN4IiwidHdNZXJnZSIsImNuIiwiaW5wdXRzIiwiZm9ybWF0RGF0ZSIsImRhdGVTdHJpbmciLCJkYXRlIiwiRGF0ZSIsIkludGwiLCJEYXRlVGltZUZvcm1hdCIsIm1vbnRoIiwiZGF5IiwieWVhciIsImZvcm1hdCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./lib/utils.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./lib/utils/dom-purify-config.ts":
|
|
/*!****************************************!*\
|
|
!*** ./lib/utils/dom-purify-config.ts ***!
|
|
\****************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getDOMPurify: () => (/* binding */ getDOMPurify),\n/* harmony export */ sanitizeHtml: () => (/* binding */ sanitizeHtml)\n/* harmony export */ });\n/* harmony import */ var isomorphic_dompurify__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! isomorphic-dompurify */ \"(ssr)/./node_modules/isomorphic-dompurify/index.js\");\n/* harmony import */ var isomorphic_dompurify__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(isomorphic_dompurify__WEBPACK_IMPORTED_MODULE_0__);\n/**\n * CENTRALIZED DOMPURIFY CONFIGURATION\n * \n * This file provides a consistent, centralized configuration for DOMPurify\n * used throughout the application. All components that need to sanitize HTML\n * should import from this file instead of configuring DOMPurify directly.\n */ \n// Reset any existing hooks to start with a clean slate\nisomorphic_dompurify__WEBPACK_IMPORTED_MODULE_0___default().removeAllHooks();\n// Configure DOMPurify with settings appropriate for email content\nisomorphic_dompurify__WEBPACK_IMPORTED_MODULE_0___default().setConfig({\n ADD_TAGS: [\n 'html',\n 'head',\n 'body',\n 'style',\n 'link',\n 'meta',\n 'title',\n 'table',\n 'caption',\n 'col',\n 'colgroup',\n 'thead',\n 'tbody',\n 'tfoot',\n 'tr',\n 'td',\n 'th',\n 'div',\n 'span',\n 'img',\n 'br',\n 'hr',\n 'section',\n 'article',\n 'header',\n 'footer',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'blockquote',\n 'pre',\n 'code',\n 'ul',\n 'ol',\n 'li',\n 'dl',\n 'dt',\n 'dd',\n 'a',\n 'b',\n 'i',\n 'u',\n 'em',\n 'strong',\n 'del',\n 'ins',\n 'mark',\n 'small',\n 'sub',\n 'sup',\n 'q',\n 'abbr',\n 'font' // Allow legacy font tag often found in emails\n ],\n ADD_ATTR: [\n 'style',\n 'class',\n 'id',\n 'name',\n 'href',\n 'src',\n 'alt',\n 'title',\n 'width',\n 'height',\n 'border',\n 'cellspacing',\n 'cellpadding',\n 'bgcolor',\n 'background',\n 'color',\n 'align',\n 'valign',\n 'dir',\n 'lang',\n 'target',\n 'rel',\n 'charset',\n 'media',\n 'colspan',\n 'rowspan',\n 'scope',\n 'span',\n 'size',\n 'face',\n 'hspace',\n 'vspace',\n 'data-*',\n 'start',\n 'type',\n 'value',\n 'cite',\n 'datetime',\n 'wrap',\n 'summary'\n ],\n KEEP_CONTENT: true,\n WHOLE_DOCUMENT: false,\n ALLOW_DATA_ATTR: true,\n ALLOW_UNKNOWN_PROTOCOLS: true,\n FORBID_TAGS: [\n 'script',\n 'iframe',\n 'object',\n 'embed',\n 'form',\n 'input',\n 'button',\n 'select',\n 'textarea'\n ],\n FORBID_ATTR: [\n 'onerror',\n 'onload',\n 'onclick',\n 'onmouseover',\n 'onmouseout'\n ],\n FORCE_BODY: false,\n USE_PROFILES: {\n html: true\n } // Use HTML profile for more permissive sanitization for emails\n});\n/**\n * Sanitizes HTML content with the centralized DOMPurify configuration\n * @param html HTML content to sanitize\n * @returns Sanitized HTML\n */ function sanitizeHtml(html) {\n if (!html) return '';\n try {\n // Use DOMPurify with our central configuration\n const clean = isomorphic_dompurify__WEBPACK_IMPORTED_MODULE_0___default().sanitize(html, {\n ADD_ATTR: [\n 'style',\n 'class',\n 'id',\n 'align',\n 'valign',\n 'colspan',\n 'rowspan',\n 'cellspacing',\n 'cellpadding',\n 'bgcolor'\n ]\n });\n // Fix common email rendering issues\n const fixedHtml = clean// Fix for Outlook WebVML content\n .replace(/<!--\\[if\\s+gte\\s+mso/g, '<!--[if gte mso')// Fix for broken image paths that might be relative\n .replace(/(src|background)=\"(?!http|data|https|cid)/gi, '$1=\"https://');\n return fixedHtml;\n } catch (e) {\n console.error('Error sanitizing HTML:', e);\n // Fall back to a basic sanitization approach\n return html.replace(/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi, '').replace(/on\\w+=\"[^\"]*\"/g, '').replace(/(javascript|jscript|vbscript|mocha):/gi, 'removed:');\n }\n}\n/**\n * Get the configured DOMPurify instance\n * Use this if you need to perform custom sanitization beyond the standard function\n */ function getDOMPurify() {\n return (isomorphic_dompurify__WEBPACK_IMPORTED_MODULE_0___default());\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9saWIvdXRpbHMvZG9tLXB1cmlmeS1jb25maWcudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7Ozs7Q0FNQyxHQUU0QztBQUU3Qyx1REFBdUQ7QUFDdkRBLDBFQUF3QjtBQUV4QixrRUFBa0U7QUFDbEVBLHFFQUFtQixDQUFDO0lBQ2xCRyxVQUFVO1FBQ1I7UUFBUTtRQUFRO1FBQVE7UUFBUztRQUFRO1FBQVE7UUFDakQ7UUFBUztRQUFXO1FBQU87UUFBWTtRQUFTO1FBQVM7UUFBUztRQUFNO1FBQU07UUFDOUU7UUFBTztRQUFRO1FBQU87UUFBTTtRQUFNO1FBQVc7UUFBVztRQUFVO1FBQ2xFO1FBQU07UUFBTTtRQUFNO1FBQU07UUFBTTtRQUFNO1FBQUs7UUFBYztRQUFPO1FBQzlEO1FBQU07UUFBTTtRQUFNO1FBQU07UUFBTTtRQUFNO1FBQUs7UUFBSztRQUFLO1FBQUs7UUFDeEQ7UUFBVTtRQUFPO1FBQU87UUFBUTtRQUFTO1FBQU87UUFBTztRQUFLO1FBQzVELE9BQU8sOENBQThDO0tBQ3REO0lBQ0RDLFVBQVU7UUFDUjtRQUFTO1FBQVM7UUFBTTtRQUFRO1FBQVE7UUFBTztRQUFPO1FBQVM7UUFBUztRQUN4RTtRQUFVO1FBQWU7UUFBZTtRQUFXO1FBQWM7UUFDakU7UUFBUztRQUFVO1FBQU87UUFBUTtRQUFVO1FBQU87UUFBVztRQUM5RDtRQUFXO1FBQVc7UUFBUztRQUFRO1FBQVE7UUFBUTtRQUFVO1FBQ2pFO1FBQ0E7UUFBUztRQUFRO1FBQVM7UUFBUTtRQUFZO1FBQVE7S0FDdkQ7SUFDREMsY0FBYztJQUNkQyxnQkFBZ0I7SUFDaEJDLGlCQUFpQjtJQUNqQkMseUJBQXlCO0lBQ3pCQyxhQUFhO1FBQUM7UUFBVTtRQUFVO1FBQVU7UUFBUztRQUFRO1FBQVM7UUFBVTtRQUFVO0tBQVc7SUFDckdDLGFBQWE7UUFBQztRQUFXO1FBQVU7UUFBVztRQUFlO0tBQWE7SUFDMUVDLFlBQVk7SUFDWkMsY0FBYztRQUFFQyxNQUFNO0lBQUssRUFBRSwrREFBK0Q7QUFDOUY7QUFFQTs7OztDQUlDLEdBQ00sU0FBU0MsYUFBYUQsSUFBWTtJQUN2QyxJQUFJLENBQUNBLE1BQU0sT0FBTztJQUVsQixJQUFJO1FBQ0YsK0NBQStDO1FBQy9DLE1BQU1FLFFBQVFmLG9FQUFrQixDQUFDYSxNQUFNO1lBQ3JDVCxVQUFVO2dCQUFDO2dCQUFTO2dCQUFTO2dCQUFNO2dCQUFTO2dCQUFVO2dCQUFXO2dCQUFXO2dCQUFlO2dCQUFlO2FBQVU7UUFDdEg7UUFFQSxvQ0FBb0M7UUFDcEMsTUFBTWEsWUFBWUYsS0FDaEIsaUNBQWlDO1NBQ2hDRyxPQUFPLENBQUMseUJBQXlCLGtCQUNsQyxvREFBb0Q7U0FDbkRBLE9BQU8sQ0FBQywrQ0FBK0M7UUFFMUQsT0FBT0Q7SUFDVCxFQUFFLE9BQU9FLEdBQUc7UUFDVkMsUUFBUUMsS0FBSyxDQUFDLDBCQUEwQkY7UUFDeEMsNkNBQTZDO1FBQzdDLE9BQU9OLEtBQ0pLLE9BQU8sQ0FBQyx1REFBdUQsSUFDL0RBLE9BQU8sQ0FBQyxrQkFBa0IsSUFDMUJBLE9BQU8sQ0FBQywwQ0FBMEM7SUFDdkQ7QUFDRjtBQUVBOzs7Q0FHQyxHQUNNLFNBQVNJO0lBQ2QsT0FBT3RCLDZEQUFTQTtBQUNsQiIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9saWIvdXRpbHMvZG9tLXB1cmlmeS1jb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDRU5UUkFMSVpFRCBET01QVVJJRlkgQ09ORklHVVJBVElPTlxuICogXG4gKiBUaGlzIGZpbGUgcHJvdmlkZXMgYSBjb25zaXN0ZW50LCBjZW50cmFsaXplZCBjb25maWd1cmF0aW9uIGZvciBET01QdXJpZnlcbiAqIHVzZWQgdGhyb3VnaG91dCB0aGUgYXBwbGljYXRpb24uIEFsbCBjb21wb25lbnRzIHRoYXQgbmVlZCB0byBzYW5pdGl6ZSBIVE1MXG4gKiBzaG91bGQgaW1wb3J0IGZyb20gdGhpcyBmaWxlIGluc3RlYWQgb2YgY29uZmlndXJpbmcgRE9NUHVyaWZ5IGRpcmVjdGx5LlxuICovXG5cbmltcG9ydCBET01QdXJpZnkgZnJvbSAnaXNvbW9ycGhpYy1kb21wdXJpZnknO1xuXG4vLyBSZXNldCBhbnkgZXhpc3RpbmcgaG9va3MgdG8gc3RhcnQgd2l0aCBhIGNsZWFuIHNsYXRlXG5ET01QdXJpZnkucmVtb3ZlQWxsSG9va3MoKTtcblxuLy8gQ29uZmlndXJlIERPTVB1cmlmeSB3aXRoIHNldHRpbmdzIGFwcHJvcHJpYXRlIGZvciBlbWFpbCBjb250ZW50XG5ET01QdXJpZnkuc2V0Q29uZmlnKHtcbiAgQUREX1RBR1M6IFtcbiAgICAnaHRtbCcsICdoZWFkJywgJ2JvZHknLCAnc3R5bGUnLCAnbGluaycsICdtZXRhJywgJ3RpdGxlJyxcbiAgICAndGFibGUnLCAnY2FwdGlvbicsICdjb2wnLCAnY29sZ3JvdXAnLCAndGhlYWQnLCAndGJvZHknLCAndGZvb3QnLCAndHInLCAndGQnLCAndGgnLFxuICAgICdkaXYnLCAnc3BhbicsICdpbWcnLCAnYnInLCAnaHInLCAnc2VjdGlvbicsICdhcnRpY2xlJywgJ2hlYWRlcicsICdmb290ZXInLFxuICAgICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdwJywgJ2Jsb2NrcXVvdGUnLCAncHJlJywgJ2NvZGUnLFxuICAgICd1bCcsICdvbCcsICdsaScsICdkbCcsICdkdCcsICdkZCcsICdhJywgJ2InLCAnaScsICd1JywgJ2VtJyxcbiAgICAnc3Ryb25nJywgJ2RlbCcsICdpbnMnLCAnbWFyaycsICdzbWFsbCcsICdzdWInLCAnc3VwJywgJ3EnLCAnYWJicicsXG4gICAgJ2ZvbnQnIC8vIEFsbG93IGxlZ2FjeSBmb250IHRhZyBvZnRlbiBmb3VuZCBpbiBlbWFpbHNcbiAgXSxcbiAgQUREX0FUVFI6IFtcbiAgICAnc3R5bGUnLCAnY2xhc3MnLCAnaWQnLCAnbmFtZScsICdocmVmJywgJ3NyYycsICdhbHQnLCAndGl0bGUnLCAnd2lkdGgnLCAnaGVpZ2h0JyxcbiAgICAnYm9yZGVyJywgJ2NlbGxzcGFjaW5nJywgJ2NlbGxwYWRkaW5nJywgJ2JnY29sb3InLCAnYmFja2dyb3VuZCcsICdjb2xvcicsXG4gICAgJ2FsaWduJywgJ3ZhbGlnbicsICdkaXInLCAnbGFuZycsICd0YXJnZXQnLCAncmVsJywgJ2NoYXJzZXQnLCAnbWVkaWEnLFxuICAgICdjb2xzcGFuJywgJ3Jvd3NwYW4nLCAnc2NvcGUnLCAnc3BhbicsICdzaXplJywgJ2ZhY2UnLCAnaHNwYWNlJywgJ3ZzcGFjZScsXG4gICAgJ2RhdGEtKicsXG4gICAgJ3N0YXJ0JywgJ3R5cGUnLCAndmFsdWUnLCAnY2l0ZScsICdkYXRldGltZScsICd3cmFwJywgJ3N1bW1hcnknXG4gIF0sXG4gIEtFRVBfQ09OVEVOVDogdHJ1ZSxcbiAgV0hPTEVfRE9DVU1FTlQ6IGZhbHNlLFxuICBBTExPV19EQVRBX0FUVFI6IHRydWUsXG4gIEFMTE9XX1VOS05PV05fUFJPVE9DT0xTOiB0cnVlLCAvLyBOZWVkZWQgZm9yIHNvbWUgZW1haWwgY2xpZW50c1xuICBGT1JCSURfVEFHUzogWydzY3JpcHQnLCAnaWZyYW1lJywgJ29iamVjdCcsICdlbWJlZCcsICdmb3JtJywgJ2lucHV0JywgJ2J1dHRvbicsICdzZWxlY3QnLCAndGV4dGFyZWEnXSxcbiAgRk9SQklEX0FUVFI6IFsnb25lcnJvcicsICdvbmxvYWQnLCAnb25jbGljaycsICdvbm1vdXNlb3ZlcicsICdvbm1vdXNlb3V0J10sXG4gIEZPUkNFX0JPRFk6IGZhbHNlLFxuICBVU0VfUFJPRklMRVM6IHsgaHRtbDogdHJ1ZSB9IC8vIFVzZSBIVE1MIHByb2ZpbGUgZm9yIG1vcmUgcGVybWlzc2l2ZSBzYW5pdGl6YXRpb24gZm9yIGVtYWlsc1xufSk7XG5cbi8qKlxuICogU2FuaXRpemVzIEhUTUwgY29udGVudCB3aXRoIHRoZSBjZW50cmFsaXplZCBET01QdXJpZnkgY29uZmlndXJhdGlvblxuICogQHBhcmFtIGh0bWwgSFRNTCBjb250ZW50IHRvIHNhbml0aXplXG4gKiBAcmV0dXJucyBTYW5pdGl6ZWQgSFRNTFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaHRtbCkgcmV0dXJuICcnO1xuICBcbiAgdHJ5IHtcbiAgICAvLyBVc2UgRE9NUHVyaWZ5IHdpdGggb3VyIGNlbnRyYWwgY29uZmlndXJhdGlvblxuICAgIGNvbnN0IGNsZWFuID0gRE9NUHVyaWZ5LnNhbml0aXplKGh0bWwsIHtcbiAgICAgIEFERF9BVFRSOiBbJ3N0eWxlJywgJ2NsYXNzJywgJ2lkJywgJ2FsaWduJywgJ3ZhbGlnbicsICdjb2xzcGFuJywgJ3Jvd3NwYW4nLCAnY2VsbHNwYWNpbmcnLCAnY2VsbHBhZGRpbmcnLCAnYmdjb2xvciddXG4gICAgfSk7XG4gICAgXG4gICAgLy8gRml4IGNvbW1vbiBlbWFpbCByZW5kZXJpbmcgaXNzdWVzXG4gICAgY29uc3QgZml4ZWRIdG1sID0gY2xlYW5cbiAgICAgIC8vIEZpeCBmb3IgT3V0bG9vayBXZWJWTUwgY29udGVudFxuICAgICAgLnJlcGxhY2UoLzwhLS1cXFtpZlxccytndGVcXHMrbXNvL2csICc8IS0tW2lmIGd0ZSBtc28nKVxuICAgICAgLy8gRml4IGZvciBicm9rZW4gaW1hZ2UgcGF0aHMgdGhhdCBtaWdodCBiZSByZWxhdGl2ZVxuICAgICAgLnJlcGxhY2UoLyhzcmN8YmFja2dyb3VuZCk9XCIoPyFodHRwfGRhdGF8aHR0cHN8Y2lkKS9naSwgJyQxPVwiaHR0cHM6Ly8nKTtcbiAgICBcbiAgICByZXR1cm4gZml4ZWRIdG1sO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3Igc2FuaXRpemluZyBIVE1MOicsIGUpO1xuICAgIC8vIEZhbGwgYmFjayB0byBhIGJhc2ljIHNhbml0aXphdGlvbiBhcHByb2FjaFxuICAgIHJldHVybiBodG1sXG4gICAgICAucmVwbGFjZSgvPHNjcmlwdFxcYltePF0qKD86KD8hPFxcL3NjcmlwdD4pPFtePF0qKSo8XFwvc2NyaXB0Pi9naSwgJycpXG4gICAgICAucmVwbGFjZSgvb25cXHcrPVwiW15cIl0qXCIvZywgJycpXG4gICAgICAucmVwbGFjZSgvKGphdmFzY3JpcHR8anNjcmlwdHx2YnNjcmlwdHxtb2NoYSk6L2dpLCAncmVtb3ZlZDonKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgY29uZmlndXJlZCBET01QdXJpZnkgaW5zdGFuY2VcbiAqIFVzZSB0aGlzIGlmIHlvdSBuZWVkIHRvIHBlcmZvcm0gY3VzdG9tIHNhbml0aXphdGlvbiBiZXlvbmQgdGhlIHN0YW5kYXJkIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRET01QdXJpZnkoKTogdHlwZW9mIERPTVB1cmlmeSB7XG4gIHJldHVybiBET01QdXJpZnk7XG59ICJdLCJuYW1lcyI6WyJET01QdXJpZnkiLCJyZW1vdmVBbGxIb29rcyIsInNldENvbmZpZyIsIkFERF9UQUdTIiwiQUREX0FUVFIiLCJLRUVQX0NPTlRFTlQiLCJXSE9MRV9ET0NVTUVOVCIsIkFMTE9XX0RBVEFfQVRUUiIsIkFMTE9XX1VOS05PV05fUFJPVE9DT0xTIiwiRk9SQklEX1RBR1MiLCJGT1JCSURfQVRUUiIsIkZPUkNFX0JPRFkiLCJVU0VfUFJPRklMRVMiLCJodG1sIiwic2FuaXRpemVIdG1sIiwiY2xlYW4iLCJzYW5pdGl6ZSIsImZpeGVkSHRtbCIsInJlcGxhY2UiLCJlIiwiY29uc29sZSIsImVycm9yIiwiZ2V0RE9NUHVyaWZ5Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./lib/utils/dom-purify-config.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./lib/utils/email-adapters.ts":
|
|
/*!*************************************!*\
|
|
!*** ./lib/utils/email-adapters.ts ***!
|
|
\*************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ adaptLegacyEmail: () => (/* binding */ adaptLegacyEmail),\n/* harmony export */ adaptMimeEmail: () => (/* binding */ adaptMimeEmail),\n/* harmony export */ isMimeFormat: () => (/* binding */ isMimeFormat)\n/* harmony export */ });\n/* harmony import */ var _lib_utils_email_content__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/lib/utils/email-content */ \"(ssr)/./lib/utils/email-content.ts\");\n/* harmony import */ var _lib_utils_text_direction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/lib/utils/text-direction */ \"(ssr)/./lib/utils/text-direction.ts\");\n\n\n/**\n * Adapts a legacy email format to the standardized EmailMessage format\n */ function adaptLegacyEmail(email) {\n if (!email) {\n throw new Error('Cannot adapt null or undefined email');\n }\n // Process content\n const content = normalizeContent(email);\n // Convert email addresses to string format as required by EmailMessage interface\n // Handle both array and string formats for email fields\n let from;\n let to;\n let cc;\n let bcc;\n // Handle 'from' field\n if (Array.isArray(email.from)) {\n from = formatAddressesToString(normalizeAddresses(email.from));\n } else if (typeof email.from === 'object' && 'address' in email.from) {\n from = formatAddressesToString([\n email.from\n ]);\n } else {\n from = String(email.from || '');\n }\n // Handle 'to' field\n if (Array.isArray(email.to)) {\n to = formatAddressesToString(normalizeAddresses(email.to));\n } else if (typeof email.to === 'object' && 'address' in email.to) {\n to = formatAddressesToString([\n email.to\n ]);\n } else {\n to = String(email.to || '');\n }\n // Handle optional 'cc' field\n if (email.cc) {\n if (Array.isArray(email.cc)) {\n cc = formatAddressesToString(normalizeAddresses(email.cc));\n } else if (typeof email.cc === 'object' && 'address' in email.cc) {\n cc = formatAddressesToString([\n email.cc\n ]);\n } else {\n cc = String(email.cc);\n }\n }\n // Handle optional 'bcc' field\n if (email.bcc) {\n if (Array.isArray(email.bcc)) {\n bcc = formatAddressesToString(normalizeAddresses(email.bcc));\n } else if (typeof email.bcc === 'object' && 'address' in email.bcc) {\n bcc = formatAddressesToString([\n email.bcc\n ]);\n } else {\n bcc = String(email.bcc);\n }\n }\n // Convert flags if needed\n const flags = normalizeFlags(email.flags);\n // Create standardized email message\n return {\n id: email.id || '',\n from,\n to,\n cc,\n bcc,\n subject: email.subject || '',\n content,\n date: email.date || new Date().toISOString(),\n flags,\n attachments: normalizeAttachments(email.attachments),\n _originalFormat: email // Store original for debugging\n };\n}\n/**\n * Detects if an email is in MIME format\n */ function isMimeFormat(email) {\n // Simple check for MIME format indicators\n if (!email) return false;\n // Check for typical MIME format properties\n return !!(email.mimeContent || email.headers && (email.bodyParts || email.body) || typeof email.content === 'string' && email.content.includes('MIME-Version'));\n}\n/**\n * Adapts a MIME format email to the standardized EmailMessage format\n * This is a placeholder - actual implementation would depend on the MIME library\n */ function adaptMimeEmail(mimeEmail) {\n // Placeholder implementation\n const content = {\n text: mimeEmail.text || mimeEmail.plainText || '',\n html: mimeEmail.html || undefined,\n isHtml: !!mimeEmail.html,\n direction: 'ltr'\n };\n return {\n id: mimeEmail.id || '',\n from: mimeEmail.from || '',\n to: mimeEmail.to || '',\n cc: mimeEmail.cc,\n bcc: mimeEmail.bcc,\n subject: mimeEmail.subject || '',\n content,\n date: mimeEmail.date || new Date().toISOString(),\n flags: [],\n _originalFormat: mimeEmail\n };\n}\n/**\n * Formats an array of EmailAddress objects to string format\n */ function formatAddressesToString(addresses) {\n return addresses.map((addr)=>{\n if (addr.name && addr.name !== addr.address) {\n return `${addr.name} <${addr.address}>`;\n }\n return addr.address;\n }).join(', ');\n}\n/**\n * Normalizes content from various formats into the standard EmailContent format\n */ function normalizeContent(email) {\n try {\n // Extract content based on possible formats to pass to the centralized processor\n let initialContent = {};\n if (email.content && typeof email.content === 'object') {\n initialContent = email.content;\n } else if (typeof email.content === 'string') {\n // Check if the string content is HTML\n if (email.content.trim().startsWith('<') && (email.content.includes('<html') || email.content.includes('<body') || email.content.includes('<div') || email.content.includes('<p>'))) {\n initialContent.html = email.content;\n } else {\n initialContent.text = email.content;\n }\n } else {\n // Extract from separate properties\n if (email.html) initialContent.html = email.html;\n if (email.text) initialContent.text = email.text;\n else if (email.plainText) initialContent.text = email.plainText;\n else if (email.formattedContent) initialContent.html = email.formattedContent;\n }\n // Use extractEmailContent from our centralized utilities\n const { html, text } = (0,_lib_utils_email_content__WEBPACK_IMPORTED_MODULE_0__.extractEmailContent)(initialContent);\n // Detect direction from text\n const direction = (0,_lib_utils_text_direction__WEBPACK_IMPORTED_MODULE_1__.detectTextDirection)(text || '');\n return {\n html,\n text,\n isHtml: !!html,\n direction\n };\n } catch (error) {\n console.error('Error normalizing email content:', error);\n // Return minimal valid content in case of error\n return {\n text: 'Error loading email content',\n isHtml: false,\n direction: 'ltr'\n };\n }\n}\n/**\n * Normalizes addresses to EmailAddress objects\n */ function normalizeAddresses(addresses) {\n if (!addresses) {\n return [];\n }\n // Handle string\n if (typeof addresses === 'string') {\n // Check if format is \"Name <email@example.com>\"\n const match = addresses.match(/^([^<]+)<([^>]+)>$/);\n if (match) {\n return [\n {\n name: match[1].trim(),\n address: match[2].trim()\n }\n ];\n }\n // Simple email address\n return [\n {\n name: addresses.split('@')[0] || '',\n address: addresses\n }\n ];\n }\n // Handle array\n if (Array.isArray(addresses)) {\n // If already in EmailAddress format, return as is\n if (addresses.length > 0 && typeof addresses[0] === 'object' && 'address' in addresses[0]) {\n return addresses;\n }\n // Otherwise convert string elements to EmailAddress objects\n return addresses.map((addr)=>{\n if (typeof addr === 'string') {\n // Check if format is \"Name <email@example.com>\"\n const match = addr.match(/^([^<]+)<([^>]+)>$/);\n if (match) {\n return {\n name: match[1].trim(),\n address: match[2].trim()\n };\n }\n return {\n name: addr.split('@')[0] || '',\n address: addr\n };\n }\n // If it's already an object with address property\n if (typeof addr === 'object' && addr !== null && 'address' in addr) {\n return {\n name: addr.name || addr.address.split('@')[0] || '',\n address: addr.address\n };\n }\n // Fallback for unexpected formats\n return {\n name: '',\n address: String(addr || '')\n };\n });\n }\n // Unexpected type - return empty array\n console.warn(`Unexpected addresses format: ${typeof addresses}`, addresses);\n return [];\n}\n/**\n * Normalizes email flags to string array format\n */ function normalizeFlags(flags) {\n if (!flags) {\n return [];\n }\n if (Array.isArray(flags)) {\n return flags;\n }\n // Convert object format to array\n return Object.entries(flags).filter(([_, value])=>value === true).map(([key])=>key);\n}\n/**\n * Normalizes attachments to the expected format\n */ function normalizeAttachments(attachments) {\n if (!attachments || !Array.isArray(attachments)) {\n return [];\n }\n return attachments.map((att)=>({\n filename: att.filename || att.name || 'unknown',\n contentType: att.contentType || 'application/octet-stream',\n encoding: att.encoding,\n content: att.content\n }));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFHLENBQUNxQixDQUFBQSxNQUFRO1lBQzdCQyxVQUFVRCxJQUFJQyxRQUFRLElBQUlELElBQUluQixJQUFJLElBQUk7WUFDdENxQixhQUFhRixJQUFJRSxXQUFXLElBQUk7WUFDaENDLFVBQVVILElBQUlHLFFBQVE7WUFDdEI1RCxTQUFTeUQsSUFBSXpELE9BQU87UUFDdEI7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9saWIvdXRpbHMvZW1haWwtYWRhcHRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW1haWxNZXNzYWdlLCBFbWFpbENvbnRlbnQsIEVtYWlsQWRkcmVzcywgTGVnYWN5RW1haWxNZXNzYWdlIH0gZnJvbSAnQC90eXBlcy9lbWFpbCc7XG5pbXBvcnQgeyBleHRyYWN0RW1haWxDb250ZW50IH0gZnJvbSAnQC9saWIvdXRpbHMvZW1haWwtY29udGVudCc7XG5pbXBvcnQgeyBkZXRlY3RUZXh0RGlyZWN0aW9uIH0gZnJvbSAnQC9saWIvdXRpbHMvdGV4dC1kaXJlY3Rpb24nO1xuXG4vKipcbiAqIEFkYXB0cyBhIGxlZ2FjeSBlbWFpbCBmb3JtYXQgdG8gdGhlIHN0YW5kYXJkaXplZCBFbWFpbE1lc3NhZ2UgZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGFwdExlZ2FjeUVtYWlsKGVtYWlsOiBMZWdhY3lFbWFpbE1lc3NhZ2UpOiBFbWFpbE1lc3NhZ2Uge1xuICBpZiAoIWVtYWlsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWRhcHQgbnVsbCBvciB1bmRlZmluZWQgZW1haWwnKTtcbiAgfVxuXG4gIC8vIFByb2Nlc3MgY29udGVudFxuICBjb25zdCBjb250ZW50OiBFbWFpbENvbnRlbnQgPSBub3JtYWxpemVDb250ZW50KGVtYWlsKTtcblxuICAvLyBDb252ZXJ0IGVtYWlsIGFkZHJlc3NlcyB0byBzdHJpbmcgZm9ybWF0IGFzIHJlcXVpcmVkIGJ5IEVtYWlsTWVzc2FnZSBpbnRlcmZhY2VcbiAgLy8gSGFuZGxlIGJvdGggYXJyYXkgYW5kIHN0cmluZyBmb3JtYXRzIGZvciBlbWFpbCBmaWVsZHNcbiAgbGV0IGZyb206IHN0cmluZztcbiAgbGV0IHRvOiBzdHJpbmc7XG4gIGxldCBjYzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsZXQgYmNjOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLy8gSGFuZGxlICdmcm9tJyBmaWVsZFxuICBpZiAoQXJyYXkuaXNBcnJheShlbWFpbC5mcm9tKSkge1xuICAgIGZyb20gPSBmb3JtYXRBZGRyZXNzZXNUb1N0cmluZyhub3JtYWxpemVBZGRyZXNzZXMoZW1haWwuZnJvbSkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWFpbC5mcm9tID09PSAnb2JqZWN0JyAmJiAnYWRkcmVzcycgaW4gZW1haWwuZnJvbSkge1xuICAgIGZyb20gPSBmb3JtYXRBZGRyZXNzZXNUb1N0cmluZyhbZW1haWwuZnJvbSBhcyBFbWFpbEFkZHJlc3NdKTtcbiAgfSBlbHNlIHtcbiAgICBmcm9tID0gU3RyaW5nKGVtYWlsLmZyb20gfHwgJycpO1xuICB9XG5cbiAgLy8gSGFuZGxlICd0bycgZmllbGRcbiAgaWYgKEFycmF5LmlzQXJyYXkoZW1haWwudG8pKSB7XG4gICAgdG8gPSBmb3JtYXRBZGRyZXNzZXNUb1N0cmluZyhub3JtYWxpemVBZGRyZXNzZXMoZW1haWwudG8pKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZW1haWwudG8gPT09ICdvYmplY3QnICYmICdhZGRyZXNzJyBpbiBlbWFpbC50bykge1xuICAgIHRvID0gZm9ybWF0QWRkcmVzc2VzVG9TdHJpbmcoW2VtYWlsLnRvIGFzIEVtYWlsQWRkcmVzc10pO1xuICB9IGVsc2Uge1xuICAgIHRvID0gU3RyaW5nKGVtYWlsLnRvIHx8ICcnKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBvcHRpb25hbCAnY2MnIGZpZWxkXG4gIGlmIChlbWFpbC5jYykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGVtYWlsLmNjKSkge1xuICAgICAgY2MgPSBmb3JtYXRBZGRyZXNzZXNUb1N0cmluZyhub3JtYWxpemVBZGRyZXNzZXMoZW1haWwuY2MpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbWFpbC5jYyA9PT0gJ29iamVjdCcgJiYgJ2FkZHJlc3MnIGluIGVtYWlsLmNjKSB7XG4gICAgICBjYyA9IGZvcm1hdEFkZHJlc3Nlc1RvU3RyaW5nKFtlbWFpbC5jYyBhcyBFbWFpbEFkZHJlc3NdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2MgPSBTdHJpbmcoZW1haWwuY2MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBvcHRpb25hbCAnYmNjJyBmaWVsZFxuICBpZiAoZW1haWwuYmNjKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZW1haWwuYmNjKSkge1xuICAgICAgYmNjID0gZm9ybWF0QWRkcmVzc2VzVG9TdHJpbmcobm9ybWFsaXplQWRkcmVzc2VzKGVtYWlsLmJjYykpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVtYWlsLmJjYyA9PT0gJ29iamVjdCcgJiYgJ2FkZHJlc3MnIGluIGVtYWlsLmJjYykge1xuICAgICAgYmNjID0gZm9ybWF0QWRkcmVzc2VzVG9TdHJpbmcoW2VtYWlsLmJjYyBhcyBFbWFpbEFkZHJlc3NdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmNjID0gU3RyaW5nKGVtYWlsLmJjYyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29udmVydCBmbGFncyBpZiBuZWVkZWRcbiAgY29uc3QgZmxhZ3M6IHN0cmluZ1tdID0gbm9ybWFsaXplRmxhZ3MoZW1haWwuZmxhZ3MpO1xuXG4gIC8vIENyZWF0ZSBzdGFuZGFyZGl6ZWQgZW1haWwgbWVzc2FnZVxuICByZXR1cm4ge1xuICAgIGlkOiBlbWFpbC5pZCB8fCAnJyxcbiAgICBmcm9tLFxuICAgIHRvLFxuICAgIGNjLFxuICAgIGJjYyxcbiAgICBzdWJqZWN0OiBlbWFpbC5zdWJqZWN0IHx8ICcnLFxuICAgIGNvbnRlbnQsXG4gICAgZGF0ZTogZW1haWwuZGF0ZSB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgZmxhZ3MsXG4gICAgYXR0YWNobWVudHM6IG5vcm1hbGl6ZUF0dGFjaG1lbnRzKGVtYWlsLmF0dGFjaG1lbnRzKSxcbiAgICBfb3JpZ2luYWxGb3JtYXQ6IGVtYWlsIC8vIFN0b3JlIG9yaWdpbmFsIGZvciBkZWJ1Z2dpbmdcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIGlmIGFuIGVtYWlsIGlzIGluIE1JTUUgZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01pbWVGb3JtYXQoZW1haWw6IGFueSk6IGJvb2xlYW4ge1xuICAvLyBTaW1wbGUgY2hlY2sgZm9yIE1JTUUgZm9ybWF0IGluZGljYXRvcnNcbiAgaWYgKCFlbWFpbCkgcmV0dXJuIGZhbHNlO1xuICBcbiAgLy8gQ2hlY2sgZm9yIHR5cGljYWwgTUlNRSBmb3JtYXQgcHJvcGVydGllc1xuICByZXR1cm4gISEoXG4gICAgZW1haWwubWltZUNvbnRlbnQgfHwgXG4gICAgKGVtYWlsLmhlYWRlcnMgJiYgKGVtYWlsLmJvZHlQYXJ0cyB8fCBlbWFpbC5ib2R5KSkgfHxcbiAgICAodHlwZW9mIGVtYWlsLmNvbnRlbnQgPT09ICdzdHJpbmcnICYmIGVtYWlsLmNvbnRlbnQuaW5jbHVkZXMoJ01JTUUtVmVyc2lvbicpKVxuICApO1xufVxuXG4vKipcbiAqIEFkYXB0cyBhIE1JTUUgZm9ybWF0IGVtYWlsIHRvIHRoZSBzdGFuZGFyZGl6ZWQgRW1haWxNZXNzYWdlIGZvcm1hdFxuICogVGhpcyBpcyBhIHBsYWNlaG9sZGVyIC0gYWN0dWFsIGltcGxlbWVudGF0aW9uIHdvdWxkIGRlcGVuZCBvbiB0aGUgTUlNRSBsaWJyYXJ5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGFwdE1pbWVFbWFpbChtaW1lRW1haWw6IGFueSk6IEVtYWlsTWVzc2FnZSB7XG4gIC8vIFBsYWNlaG9sZGVyIGltcGxlbWVudGF0aW9uXG4gIGNvbnN0IGNvbnRlbnQ6IEVtYWlsQ29udGVudCA9IHtcbiAgICB0ZXh0OiBtaW1lRW1haWwudGV4dCB8fCBtaW1lRW1haWwucGxhaW5UZXh0IHx8ICcnLFxuICAgIGh0bWw6IG1pbWVFbWFpbC5odG1sIHx8IHVuZGVmaW5lZCxcbiAgICBpc0h0bWw6ICEhbWltZUVtYWlsLmh0bWwsXG4gICAgZGlyZWN0aW9uOiAnbHRyJ1xuICB9O1xuICBcbiAgcmV0dXJuIHtcbiAgICBpZDogbWltZUVtYWlsLmlkIHx8ICcnLFxuICAgIGZyb206IG1pbWVFbWFpbC5mcm9tIHx8ICcnLFxuICAgIHRvOiBtaW1lRW1haWwudG8gfHwgJycsXG4gICAgY2M6IG1pbWVFbWFpbC5jYyxcbiAgICBiY2M6IG1pbWVFbWFpbC5iY2MsXG4gICAgc3ViamVjdDogbWltZUVtYWlsLnN1YmplY3QgfHwgJycsXG4gICAgY29udGVudCxcbiAgICBkYXRlOiBtaW1lRW1haWwuZGF0ZSB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgZmxhZ3M6IFtdLFxuICAgIF9vcmlnaW5hbEZvcm1hdDogbWltZUVtYWlsXG4gIH07XG59XG5cbi8qKlxuICogRm9ybWF0cyBhbiBhcnJheSBvZiBFbWFpbEFkZHJlc3Mgb2JqZWN0cyB0byBzdHJpbmcgZm9ybWF0XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEFkZHJlc3Nlc1RvU3RyaW5nKGFkZHJlc3NlczogRW1haWxBZGRyZXNzW10pOiBzdHJpbmcge1xuICByZXR1cm4gYWRkcmVzc2VzLm1hcChhZGRyID0+IHtcbiAgICBpZiAoYWRkci5uYW1lICYmIGFkZHIubmFtZSAhPT0gYWRkci5hZGRyZXNzKSB7XG4gICAgICByZXR1cm4gYCR7YWRkci5uYW1lfSA8JHthZGRyLmFkZHJlc3N9PmA7XG4gICAgfVxuICAgIHJldHVybiBhZGRyLmFkZHJlc3M7XG4gIH0pLmpvaW4oJywgJyk7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBjb250ZW50IGZyb20gdmFyaW91cyBmb3JtYXRzIGludG8gdGhlIHN0YW5kYXJkIEVtYWlsQ29udGVudCBmb3JtYXRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQ29udGVudChlbWFpbDogTGVnYWN5RW1haWxNZXNzYWdlKTogRW1haWxDb250ZW50IHtcbiAgdHJ5IHtcbiAgICAvLyBFeHRyYWN0IGNvbnRlbnQgYmFzZWQgb24gcG9zc2libGUgZm9ybWF0cyB0byBwYXNzIHRvIHRoZSBjZW50cmFsaXplZCBwcm9jZXNzb3JcbiAgICBsZXQgaW5pdGlhbENvbnRlbnQ6IGFueSA9IHt9O1xuICAgIFxuICAgIGlmIChlbWFpbC5jb250ZW50ICYmIHR5cGVvZiBlbWFpbC5jb250ZW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgaW5pdGlhbENvbnRlbnQgPSBlbWFpbC5jb250ZW50O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVtYWlsLmNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgc3RyaW5nIGNvbnRlbnQgaXMgSFRNTFxuICAgICAgaWYgKGVtYWlsLmNvbnRlbnQudHJpbSgpLnN0YXJ0c1dpdGgoJzwnKSAmJiBcbiAgICAgICAgICAoZW1haWwuY29udGVudC5pbmNsdWRlcygnPGh0bWwnKSB8fCBcbiAgICAgICAgICAgZW1haWwuY29udGVudC5pbmNsdWRlcygnPGJvZHknKSB8fCBcbiAgICAgICAgICAgZW1haWwuY29udGVudC5pbmNsdWRlcygnPGRpdicpIHx8IFxuICAgICAgICAgICBlbWFpbC5jb250ZW50LmluY2x1ZGVzKCc8cD4nKSkpIHtcbiAgICAgICAgaW5pdGlhbENvbnRlbnQuaHRtbCA9IGVtYWlsLmNvbnRlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsQ29udGVudC50ZXh0ID0gZW1haWwuY29udGVudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRXh0cmFjdCBmcm9tIHNlcGFyYXRlIHByb3BlcnRpZXNcbiAgICAgIGlmIChlbWFpbC5odG1sKSBpbml0aWFsQ29udGVudC5odG1sID0gZW1haWwuaHRtbDtcbiAgICAgIGlmIChlbWFpbC50ZXh0KSBpbml0aWFsQ29udGVudC50ZXh0ID0gZW1haWwudGV4dDtcbiAgICAgIGVsc2UgaWYgKGVtYWlsLnBsYWluVGV4dCkgaW5pdGlhbENvbnRlbnQudGV4dCA9IGVtYWlsLnBsYWluVGV4dDtcbiAgICAgIGVsc2UgaWYgKGVtYWlsLmZvcm1hdHRlZENvbnRlbnQpIGluaXRpYWxDb250ZW50Lmh0bWwgPSBlbWFpbC5mb3JtYXR0ZWRDb250ZW50O1xuICAgIH1cbiAgICBcbiAgICAvLyBVc2UgZXh0cmFjdEVtYWlsQ29udGVudCBmcm9tIG91ciBjZW50cmFsaXplZCB1dGlsaXRpZXNcbiAgICBjb25zdCB7IGh0bWwsIHRleHQgfSA9IGV4dHJhY3RFbWFpbENvbnRlbnQoaW5pdGlhbENvbnRlbnQpO1xuICAgIFxuICAgIC8vIERldGVjdCBkaXJlY3Rpb24gZnJvbSB0ZXh0XG4gICAgY29uc3QgZGlyZWN0aW9uID0gZGV0ZWN0VGV4dERpcmVjdGlvbih0ZXh0IHx8ICcnKTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgaHRtbCxcbiAgICAgIHRleHQsXG4gICAgICBpc0h0bWw6ICEhaHRtbCxcbiAgICAgIGRpcmVjdGlvblxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3Igbm9ybWFsaXppbmcgZW1haWwgY29udGVudDonLCBlcnJvcik7XG4gICAgXG4gICAgLy8gUmV0dXJuIG1pbmltYWwgdmFsaWQgY29udGVudCBpbiBjYXNlIG9mIGVycm9yXG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHQ6ICdFcnJvciBsb2FkaW5nIGVtYWlsIGNvbnRlbnQnLFxuICAgICAgaXNIdG1sOiBmYWxzZSxcbiAgICAgIGRpcmVjdGlvbjogJ2x0cidcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhZGRyZXNzZXMgdG8gRW1haWxBZGRyZXNzIG9iamVjdHNcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQWRkcmVzc2VzKGFkZHJlc3Nlczogc3RyaW5nIHwgRW1haWxBZGRyZXNzW10gfCB1bmRlZmluZWQpOiBFbWFpbEFkZHJlc3NbXSB7XG4gIGlmICghYWRkcmVzc2VzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gSGFuZGxlIHN0cmluZ1xuICBpZiAodHlwZW9mIGFkZHJlc3NlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBDaGVjayBpZiBmb3JtYXQgaXMgXCJOYW1lIDxlbWFpbEBleGFtcGxlLmNvbT5cIlxuICAgIGNvbnN0IG1hdGNoID0gYWRkcmVzc2VzLm1hdGNoKC9eKFtePF0rKTwoW14+XSspPiQvKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIHJldHVybiBbe1xuICAgICAgICBuYW1lOiBtYXRjaFsxXS50cmltKCksXG4gICAgICAgIGFkZHJlc3M6IG1hdGNoWzJdLnRyaW0oKVxuICAgICAgfV07XG4gICAgfVxuICAgIFxuICAgIC8vIFNpbXBsZSBlbWFpbCBhZGRyZXNzXG4gICAgcmV0dXJuIFt7XG4gICAgICBuYW1lOiBhZGRyZXNzZXMuc3BsaXQoJ0AnKVswXSB8fCAnJyxcbiAgICAgIGFkZHJlc3M6IGFkZHJlc3Nlc1xuICAgIH1dO1xuICB9XG5cbiAgLy8gSGFuZGxlIGFycmF5XG4gIGlmIChBcnJheS5pc0FycmF5KGFkZHJlc3NlcykpIHtcbiAgICAvLyBJZiBhbHJlYWR5IGluIEVtYWlsQWRkcmVzcyBmb3JtYXQsIHJldHVybiBhcyBpc1xuICAgIGlmIChhZGRyZXNzZXMubGVuZ3RoID4gMCAmJiB0eXBlb2YgYWRkcmVzc2VzWzBdID09PSAnb2JqZWN0JyAmJiAnYWRkcmVzcycgaW4gYWRkcmVzc2VzWzBdKSB7XG4gICAgICByZXR1cm4gYWRkcmVzc2VzIGFzIEVtYWlsQWRkcmVzc1tdO1xuICAgIH1cbiAgICBcbiAgICAvLyBPdGhlcndpc2UgY29udmVydCBzdHJpbmcgZWxlbWVudHMgdG8gRW1haWxBZGRyZXNzIG9iamVjdHNcbiAgICByZXR1cm4gYWRkcmVzc2VzLm1hcCgoYWRkcjogYW55KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFkZHIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGZvcm1hdCBpcyBcIk5hbWUgPGVtYWlsQGV4YW1wbGUuY29tPlwiXG4gICAgICAgIGNvbnN0IG1hdGNoID0gYWRkci5tYXRjaCgvXihbXjxdKyk8KFtePl0rKT4kLyk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBtYXRjaFsxXS50cmltKCksXG4gICAgICAgICAgICBhZGRyZXNzOiBtYXRjaFsyXS50cmltKClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IGFkZHIuc3BsaXQoJ0AnKVswXSB8fCAnJyxcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBhbiBvYmplY3Qgd2l0aCBhZGRyZXNzIHByb3BlcnR5XG4gICAgICBpZiAodHlwZW9mIGFkZHIgPT09ICdvYmplY3QnICYmIGFkZHIgIT09IG51bGwgJiYgJ2FkZHJlc3MnIGluIGFkZHIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBhZGRyLm5hbWUgfHwgYWRkci5hZGRyZXNzLnNwbGl0KCdAJylbMF0gfHwgJycsXG4gICAgICAgICAgYWRkcmVzczogYWRkci5hZGRyZXNzXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZhbGxiYWNrIGZvciB1bmV4cGVjdGVkIGZvcm1hdHNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBhZGRyZXNzOiBTdHJpbmcoYWRkciB8fCAnJylcbiAgICAgIH07XG4gICAgfSk7XG4gIH0gXG5cbiAgLy8gVW5leHBlY3RlZCB0eXBlIC0gcmV0dXJuIGVtcHR5IGFycmF5XG4gIGNvbnNvbGUud2FybihgVW5leHBlY3RlZCBhZGRyZXNzZXMgZm9ybWF0OiAke3R5cGVvZiBhZGRyZXNzZXN9YCwgYWRkcmVzc2VzKTtcbiAgcmV0dXJuIFtdO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgZW1haWwgZmxhZ3MgdG8gc3RyaW5nIGFycmF5IGZvcm1hdFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGbGFncyhmbGFnczogc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcbiAgaWYgKCFmbGFncykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBcbiAgaWYgKEFycmF5LmlzQXJyYXkoZmxhZ3MpKSB7XG4gICAgcmV0dXJuIGZsYWdzO1xuICB9XG4gIFxuICAvLyBDb252ZXJ0IG9iamVjdCBmb3JtYXQgdG8gYXJyYXlcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGZsYWdzKVxuICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlID09PSB0cnVlKVxuICAgIC5tYXAoKFtrZXldKSA9PiBrZXkpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYXR0YWNobWVudHMgdG8gdGhlIGV4cGVjdGVkIGZvcm1hdFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVBdHRhY2htZW50cyhhdHRhY2htZW50czogYW55W10gfCB1bmRlZmluZWQpOiBBcnJheTx7XG4gIGZpbGVuYW1lOiBzdHJpbmc7XG4gIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gIGVuY29kaW5nPzogc3RyaW5nO1xuICBjb250ZW50Pzogc3RyaW5nO1xufT4ge1xuICBpZiAoIWF0dGFjaG1lbnRzIHx8ICFBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBcbiAgcmV0dXJuIGF0dGFjaG1lbnRzLm1hcChhdHQgPT4gKHtcbiAgICBmaWxlbmFtZTogYXR0LmZpbGVuYW1lIHx8IGF0dC5uYW1lIHx8ICd1bmtub3duJyxcbiAgICBjb250ZW50VHlwZTogYXR0LmNvbnRlbnRUeXBlIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLFxuICAgIGVuY29kaW5nOiBhdHQuZW5jb2RpbmcsXG4gICAgY29udGVudDogYXR0LmNvbnRlbnRcbiAgfSkpO1xufSAiXSwibmFtZXMiOlsiZXh0cmFjdEVtYWlsQ29udGVudCIsImRldGVjdFRleHREaXJlY3Rpb24iLCJhZGFwdExlZ2FjeUVtYWlsIiwiZW1haWwiLCJFcnJvciIsImNvbnRlbnQiLCJub3JtYWxpemVDb250ZW50IiwiZnJvbSIsInRvIiwiY2MiLCJiY2MiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JtYXRBZGRyZXNzZXNUb1N0cmluZyIsIm5vcm1hbGl6ZUFkZHJlc3NlcyIsIlN0cmluZyIsImZsYWdzIiwibm9ybWFsaXplRmxhZ3MiLCJpZCIsInN1YmplY3QiLCJkYXRlIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwiYXR0YWNobWVudHMiLCJub3JtYWxpemVBdHRhY2htZW50cyIsIl9vcmlnaW5hbEZvcm1hdCIsImlzTWltZUZvcm1hdCIsIm1pbWVDb250ZW50IiwiaGVhZGVycyIsImJvZHlQYXJ0cyIsImJvZHkiLCJpbmNsdWRlcyIsImFkYXB0TWltZUVtYWlsIiwibWltZUVtYWlsIiwidGV4dCIsInBsYWluVGV4dCIsImh0bWwiLCJ1bmRlZmluZWQiLCJpc0h0bWwiLCJkaXJlY3Rpb24iLCJhZGRyZXNzZXMiLCJtYXAiLCJhZGRyIiwibmFtZSIsImFkZHJlc3MiLCJqb2luIiwiaW5pdGlhbENvbnRlbnQiLCJ0cmltIiwic3RhcnRzV2l0aCIsImZvcm1hdHRlZENvbnRlbnQiLCJlcnJvciIsImNvbnNvbGUiLCJtYXRjaCIsInNwbGl0IiwibGVuZ3RoIiwid2FybiIsIk9iamVjdCIsImVudHJpZXMiLCJmaWx0ZXIiLCJfIiwidmFsdWUiLCJrZXkiLCJhdHQiLCJmaWxlbmFtZSIsImNvbnRlbnRUeXBlIiwiZW5jb2RpbmciXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./lib/utils/email-adapters.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./lib/utils/email-content.ts":
|
|
/*!************************************!*\
|
|
!*** ./lib/utils/email-content.ts ***!
|
|
\************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ extractEmailContent: () => (/* binding */ extractEmailContent),\n/* harmony export */ extractTextFromHtml: () => (/* binding */ extractTextFromHtml),\n/* harmony export */ formatEmailContent: () => (/* binding */ formatEmailContent),\n/* harmony export */ formatPlainTextToHtml: () => (/* binding */ formatPlainTextToHtml),\n/* harmony export */ isHtmlContent: () => (/* binding */ isHtmlContent),\n/* harmony export */ processHtmlContent: () => (/* binding */ processHtmlContent)\n/* harmony export */ });\n/* harmony import */ var _dom_purify_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom-purify-config */ \"(ssr)/./lib/utils/dom-purify-config.ts\");\n/* harmony import */ var _text_direction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text-direction */ \"(ssr)/./lib/utils/text-direction.ts\");\n/**\n * Centralized Email Content Utilities\n * \n * This file contains all core functions for email content processing:\n * - Content extraction\n * - HTML sanitization\n * - Text direction handling\n * - URL fixing\n * \n * Other modules should import from this file rather than implementing their own versions.\n */ \n\n/**\n * Extract content from various possible email formats\n * Centralized implementation to reduce duplication across the codebase\n */ function extractEmailContent(email) {\n // Default empty values\n let textContent = '';\n let htmlContent = '';\n // Early exit if no email\n if (!email) {\n console.log('extractEmailContent: No email provided');\n return {\n text: '',\n html: ''\n };\n }\n try {\n // Extract based on common formats\n if (email.content && typeof email.content === 'object') {\n // Standard format with content object\n textContent = email.content.text || '';\n htmlContent = email.content.html || '';\n // Handle complex email formats where content might be nested\n if (!textContent && !htmlContent) {\n // Try to find content in deeper nested structure\n if (email.content.body) {\n if (typeof email.content.body === 'string') {\n // Determine if body is HTML or text\n if (isHtmlContent(email.content.body)) {\n htmlContent = email.content.body;\n } else {\n textContent = email.content.body;\n }\n } else if (typeof email.content.body === 'object' && email.content.body) {\n // Some email formats nest content inside body\n htmlContent = email.content.body.html || '';\n textContent = email.content.body.text || '';\n }\n }\n // Check for data property which some email services use\n if (!textContent && !htmlContent && email.content.data) {\n if (typeof email.content.data === 'string') {\n // Check if data looks like HTML\n if (isHtmlContent(email.content.data)) {\n htmlContent = email.content.data;\n } else {\n textContent = email.content.data;\n }\n }\n }\n }\n } else if (typeof email.content === 'string') {\n // Check if content is likely HTML\n if (isHtmlContent(email.content)) {\n htmlContent = email.content;\n } else {\n textContent = email.content;\n }\n } else {\n // Check other common properties\n htmlContent = email.html || '';\n textContent = email.text || '';\n // If still no content, check for less common properties\n if (!htmlContent && !textContent) {\n // Try additional properties that some email clients use\n htmlContent = email.body?.html || email.bodyHtml || email.htmlBody || '';\n textContent = email.body?.text || email.bodyText || email.plainText || '';\n }\n }\n } catch (error) {\n console.error('Error extracting email content:', error);\n }\n // Ensure we always have at least some text content\n if (!textContent && htmlContent) {\n textContent = extractTextFromHtml(htmlContent);\n }\n // Log extraction results\n console.log('Extracted email content:', {\n hasHtml: !!htmlContent,\n htmlLength: htmlContent?.length || 0,\n hasText: !!textContent,\n textLength: textContent?.length || 0\n });\n return {\n text: textContent,\n html: htmlContent\n };\n}\n/**\n * Extract plain text from HTML content\n */ function extractTextFromHtml(html) {\n if (!html) return '';\n try {\n // Use DOM API if available\n if (false) {} else {\n // Simple regex fallback for non-browser environments\n return html.replace(/<[^>]*>/g, ' ').replace(/ /g, ' ').replace(/</g, '<').replace(/>/g, '>').replace(/&/g, '&').replace(/\\s+/g, ' ').trim();\n }\n } catch (e) {\n console.error('Error extracting text from HTML:', e);\n // Fallback to basic strip\n return html.replace(/<[^>]*>/g, ' ').trim();\n }\n}\n/**\n * Check if a string is likely HTML content\n */ function isHtmlContent(content) {\n if (!content) return false;\n return content.trim().startsWith('<') && (content.includes('<html') || content.includes('<body') || content.includes('<div') || content.includes('<p>') || content.includes('<br>'));\n}\n/**\n * Format and standardize email content for display following email industry standards.\n * This is the main entry point for rendering email content.\n */ function formatEmailContent(email) {\n if (!email) {\n console.log('formatEmailContent: No email provided');\n return '';\n }\n try {\n // Extract content from email\n const { text, html } = extractEmailContent(email);\n console.log('formatEmailContent processing:', {\n hasHtml: !!html,\n htmlLength: html?.length || 0,\n hasText: !!text,\n textLength: text?.length || 0,\n emailType: typeof email === 'string' ? 'string' : 'object'\n });\n // If we have HTML content, sanitize and standardize it\n if (html) {\n // Process HTML content\n let processedHtml = processHtmlContent(html, text);\n console.log('HTML content processed:', {\n processedLength: processedHtml?.length || 0,\n isEmpty: !processedHtml || processedHtml.trim().length === 0\n });\n // Apply styling\n return `<div class=\"email-content\" style=\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; line-height: 1.6; color: #333; max-width: 100%; overflow-x: auto; overflow-wrap: break-word; word-wrap: break-word;\" dir=\"${(0,_text_direction__WEBPACK_IMPORTED_MODULE_1__.detectTextDirection)(text)}\">${processedHtml}</div>`;\n } else if (text) {\n console.log('Using plain text formatting');\n return formatPlainTextToHtml(text);\n }\n // Default case: empty or unrecognized content\n return '<div class=\"email-content-empty\" style=\"padding: 20px; text-align: center; color: #666;\">No content available</div>';\n } catch (error) {\n console.error('formatEmailContent: Error formatting email content:', error);\n return `<div class=\"email-content-error\" style=\"padding: 15px; color: #721c24; background-color: #f8d7da; border: 1px solid #f5c6cb; border-radius: 4px;\"><p>Error displaying email content</p><p style=\"font-size: 12px; margin-top: 10px;\">${error instanceof Error ? error.message : 'Unknown error'}</p></div>`;\n }\n}\n/**\n * Process HTML content to fix common email rendering issues\n */ function processHtmlContent(htmlContent, textContent) {\n if (!htmlContent) return '';\n try {\n console.log('processHtmlContent input:', {\n length: htmlContent.length,\n startsWithHtml: htmlContent.trim().startsWith('<html'),\n startsWithDiv: htmlContent.trim().startsWith('<div'),\n hasBody: htmlContent.includes('<body'),\n containsForwardedMessage: htmlContent.includes('---------- Forwarded message ----------'),\n containsQuoteHeader: htmlContent.includes('wrote:'),\n hasBlockquote: htmlContent.includes('<blockquote'),\n hasTable: htmlContent.includes('<table')\n });\n // Check for browser environment (DOMParser is browser-only)\n const hasHtmlTag = htmlContent.includes('<html');\n const hasBodyTag = htmlContent.includes('<body');\n // Preserve original HTML for debugging\n let originalHtml = htmlContent;\n // Extract body content if we have a complete HTML document and in browser environment\n if (hasHtmlTag && hasBodyTag && \"undefined\" !== 'undefined' && 0) {}\n // Use the centralized sanitizeHtml function\n let sanitizedContent = (0,_dom_purify_config__WEBPACK_IMPORTED_MODULE_0__.sanitizeHtml)(htmlContent);\n console.log('After sanitizeHtml:', {\n originalLength: originalHtml.length,\n sanitizedLength: sanitizedContent.length,\n difference: originalHtml.length - sanitizedContent.length,\n percentRemoved: ((originalHtml.length - sanitizedContent.length) / originalHtml.length * 100).toFixed(2) + '%',\n containsForwardedMessage: sanitizedContent.includes('---------- Forwarded message ----------'),\n hasTable: sanitizedContent.includes('<table'),\n hasBlockquote: sanitizedContent.includes('<blockquote')\n });\n // Fix URL encoding issues and clean up content\n try {\n if (false) {}\n } catch (e) {\n console.error('Error fixing content:', e);\n }\n // Fix common email client quirks without breaking cid: URLs\n return sanitizedContent// Fix for Outlook WebVML content\n .replace(/<!--\\[if\\s+gte\\s+mso/g, '<!--[if gte mso')// Fix for broken image paths WITHOUT replacing cid: URLs\n .replace(/(src|background)=\"(?!(?:https?:|data:|cid:))/gi, '$1=\"https://')// Fix for base64 images that might be broken across lines\n .replace(/src=\"data:image\\/[^;]+;base64,\\s*([^\"]+)\\s*\"/gi, (match, p1)=>{\n return `src=\"data:image/png;base64,${p1.replace(/\\s+/g, '')}\"`;\n })// Remove excessive whitespace from the HTML string itself\n .replace(/>\\s+</g, '> <');\n } catch (error) {\n console.error('Error processing HTML content:', error);\n return htmlContent;\n }\n}\n/**\n * Format plain text to HTML with proper line breaks and styling\n */ function formatPlainTextToHtml(text) {\n if (!text) return '';\n // Detect text direction\n const direction = (0,_text_direction__WEBPACK_IMPORTED_MODULE_1__.detectTextDirection)(text);\n // Escape HTML characters to prevent XSS\n const escapedText = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"').replace(/'/g, ''');\n // Format plain text with proper line breaks and paragraphs\n const formattedText = escapedText.replace(/\\r\\n|\\r|\\n/g, '<br>') // Convert all newlines to <br>\n .replace(/((?:<br>){2,})/g, '</p><p>') // Convert multiple newlines to paragraphs\n .replace(/<br><\\/p>/g, '</p>') // Fix any <br></p> combinations\n .replace(/<p><br>/g, '<p>'); // Fix any <p><br> combinations\n return `<div class=\"email-content\" style=\"font-family: -apple-system, BlinkMacSystemFont, Menlo, Monaco, Consolas, 'Courier New', monospace; white-space: pre-wrap; line-height: 1.5; color: #333; padding: 15px; max-width: 100%; overflow-wrap: break-word;\" dir=\"${direction}\"><p>${formattedText}</p></div>`;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUE0UCxFQUFFZ0UsVUFBVSxLQUFLLEVBQUVFLGNBQWMsVUFBVSxDQUFDO0FBQ2xUIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL2xpYi91dGlscy9lbWFpbC1jb250ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2VudHJhbGl6ZWQgRW1haWwgQ29udGVudCBVdGlsaXRpZXNcbiAqIFxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCBjb3JlIGZ1bmN0aW9ucyBmb3IgZW1haWwgY29udGVudCBwcm9jZXNzaW5nOlxuICogLSBDb250ZW50IGV4dHJhY3Rpb25cbiAqIC0gSFRNTCBzYW5pdGl6YXRpb25cbiAqIC0gVGV4dCBkaXJlY3Rpb24gaGFuZGxpbmdcbiAqIC0gVVJMIGZpeGluZ1xuICogXG4gKiBPdGhlciBtb2R1bGVzIHNob3VsZCBpbXBvcnQgZnJvbSB0aGlzIGZpbGUgcmF0aGVyIHRoYW4gaW1wbGVtZW50aW5nIHRoZWlyIG93biB2ZXJzaW9ucy5cbiAqL1xuXG5pbXBvcnQgeyBzYW5pdGl6ZUh0bWwgfSBmcm9tICcuL2RvbS1wdXJpZnktY29uZmlnJztcbmltcG9ydCB7IGRldGVjdFRleHREaXJlY3Rpb24gfSBmcm9tICcuL3RleHQtZGlyZWN0aW9uJztcbmltcG9ydCB7IEVtYWlsQ29udGVudCB9IGZyb20gJ0AvdHlwZXMvZW1haWwnO1xuXG4vKipcbiAqIEV4dHJhY3QgY29udGVudCBmcm9tIHZhcmlvdXMgcG9zc2libGUgZW1haWwgZm9ybWF0c1xuICogQ2VudHJhbGl6ZWQgaW1wbGVtZW50YXRpb24gdG8gcmVkdWNlIGR1cGxpY2F0aW9uIGFjcm9zcyB0aGUgY29kZWJhc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RFbWFpbENvbnRlbnQoZW1haWw6IGFueSk6IHsgdGV4dDogc3RyaW5nOyBodG1sOiBzdHJpbmcgfSB7XG4gIC8vIERlZmF1bHQgZW1wdHkgdmFsdWVzXG4gIGxldCB0ZXh0Q29udGVudCA9ICcnO1xuICBsZXQgaHRtbENvbnRlbnQgPSAnJztcblxuICAvLyBFYXJseSBleGl0IGlmIG5vIGVtYWlsXG4gIGlmICghZW1haWwpIHtcbiAgICBjb25zb2xlLmxvZygnZXh0cmFjdEVtYWlsQ29udGVudDogTm8gZW1haWwgcHJvdmlkZWQnKTtcbiAgICByZXR1cm4geyB0ZXh0OiAnJywgaHRtbDogJycgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gRXh0cmFjdCBiYXNlZCBvbiBjb21tb24gZm9ybWF0c1xuICAgIGlmIChlbWFpbC5jb250ZW50ICYmIHR5cGVvZiBlbWFpbC5jb250ZW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgLy8gU3RhbmRhcmQgZm9ybWF0IHdpdGggY29udGVudCBvYmplY3RcbiAgICAgIHRleHRDb250ZW50ID0gZW1haWwuY29udGVudC50ZXh0IHx8ICcnO1xuICAgICAgaHRtbENvbnRlbnQgPSBlbWFpbC5jb250ZW50Lmh0bWwgfHwgJyc7XG4gICAgICBcbiAgICAgIC8vIEhhbmRsZSBjb21wbGV4IGVtYWlsIGZvcm1hdHMgd2hlcmUgY29udGVudCBtaWdodCBiZSBuZXN0ZWRcbiAgICAgIGlmICghdGV4dENvbnRlbnQgJiYgIWh0bWxDb250ZW50KSB7XG4gICAgICAgIC8vIFRyeSB0byBmaW5kIGNvbnRlbnQgaW4gZGVlcGVyIG5lc3RlZCBzdHJ1Y3R1cmVcbiAgICAgICAgaWYgKGVtYWlsLmNvbnRlbnQuYm9keSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgZW1haWwuY29udGVudC5ib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIGJvZHkgaXMgSFRNTCBvciB0ZXh0XG4gICAgICAgICAgICBpZiAoaXNIdG1sQ29udGVudChlbWFpbC5jb250ZW50LmJvZHkpKSB7XG4gICAgICAgICAgICAgIGh0bWxDb250ZW50ID0gZW1haWwuY29udGVudC5ib2R5O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGV4dENvbnRlbnQgPSBlbWFpbC5jb250ZW50LmJvZHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW1haWwuY29udGVudC5ib2R5ID09PSAnb2JqZWN0JyAmJiBlbWFpbC5jb250ZW50LmJvZHkpIHtcbiAgICAgICAgICAgIC8vIFNvbWUgZW1haWwgZm9ybWF0cyBuZXN0IGNvbnRlbnQgaW5zaWRlIGJvZHlcbiAgICAgICAgICAgIGh0bWxDb250ZW50ID0gZW1haWwuY29udGVudC5ib2R5Lmh0bWwgfHwgJyc7XG4gICAgICAgICAgICB0ZXh0Q29udGVudCA9IGVtYWlsLmNvbnRlbnQuYm9keS50ZXh0IHx8ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGRhdGEgcHJvcGVydHkgd2hpY2ggc29tZSBlbWFpbCBzZXJ2aWNlcyB1c2VcbiAgICAgICAgaWYgKCF0ZXh0Q29udGVudCAmJiAhaHRtbENvbnRlbnQgJiYgZW1haWwuY29udGVudC5kYXRhKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBlbWFpbC5jb250ZW50LmRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBkYXRhIGxvb2tzIGxpa2UgSFRNTFxuICAgICAgICAgICAgaWYgKGlzSHRtbENvbnRlbnQoZW1haWwuY29udGVudC5kYXRhKSkge1xuICAgICAgICAgICAgICBodG1sQ29udGVudCA9IGVtYWlsLmNvbnRlbnQuZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRleHRDb250ZW50ID0gZW1haWwuY29udGVudC5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVtYWlsLmNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBDaGVjayBpZiBjb250ZW50IGlzIGxpa2VseSBIVE1MXG4gICAgICBpZiAoaXNIdG1sQ29udGVudChlbWFpbC5jb250ZW50KSkge1xuICAgICAgICBodG1sQ29udGVudCA9IGVtYWlsLmNvbnRlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0Q29udGVudCA9IGVtYWlsLmNvbnRlbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENoZWNrIG90aGVyIGNvbW1vbiBwcm9wZXJ0aWVzXG4gICAgICBodG1sQ29udGVudCA9IGVtYWlsLmh0bWwgfHwgJyc7XG4gICAgICB0ZXh0Q29udGVudCA9IGVtYWlsLnRleHQgfHwgJyc7XG4gICAgICBcbiAgICAgIC8vIElmIHN0aWxsIG5vIGNvbnRlbnQsIGNoZWNrIGZvciBsZXNzIGNvbW1vbiBwcm9wZXJ0aWVzXG4gICAgICBpZiAoIWh0bWxDb250ZW50ICYmICF0ZXh0Q29udGVudCkge1xuICAgICAgICAvLyBUcnkgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRoYXQgc29tZSBlbWFpbCBjbGllbnRzIHVzZVxuICAgICAgICBodG1sQ29udGVudCA9IGVtYWlsLmJvZHk/Lmh0bWwgfHwgZW1haWwuYm9keUh0bWwgfHwgZW1haWwuaHRtbEJvZHkgfHwgJyc7XG4gICAgICAgIHRleHRDb250ZW50ID0gZW1haWwuYm9keT8udGV4dCB8fCBlbWFpbC5ib2R5VGV4dCB8fCBlbWFpbC5wbGFpblRleHQgfHwgJyc7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGV4dHJhY3RpbmcgZW1haWwgY29udGVudDonLCBlcnJvcik7XG4gIH1cblxuICAvLyBFbnN1cmUgd2UgYWx3YXlzIGhhdmUgYXQgbGVhc3Qgc29tZSB0ZXh0IGNvbnRlbnRcbiAgaWYgKCF0ZXh0Q29udGVudCAmJiBodG1sQ29udGVudCkge1xuICAgIHRleHRDb250ZW50ID0gZXh0cmFjdFRleHRGcm9tSHRtbChodG1sQ29udGVudCk7XG4gIH1cblxuICAvLyBMb2cgZXh0cmFjdGlvbiByZXN1bHRzXG4gIGNvbnNvbGUubG9nKCdFeHRyYWN0ZWQgZW1haWwgY29udGVudDonLCB7IFxuICAgIGhhc0h0bWw6ICEhaHRtbENvbnRlbnQsIFxuICAgIGh0bWxMZW5ndGg6IGh0bWxDb250ZW50Py5sZW5ndGggfHwgMCxcbiAgICBoYXNUZXh0OiAhIXRleHRDb250ZW50LCBcbiAgICB0ZXh0TGVuZ3RoOiB0ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDBcbiAgfSk7XG5cbiAgcmV0dXJuIHsgdGV4dDogdGV4dENvbnRlbnQsIGh0bWw6IGh0bWxDb250ZW50IH07XG59XG5cbi8qKlxuICogRXh0cmFjdCBwbGFpbiB0ZXh0IGZyb20gSFRNTCBjb250ZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VGV4dEZyb21IdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaHRtbCkgcmV0dXJuICcnO1xuICBcbiAgdHJ5IHtcbiAgICAvLyBVc2UgRE9NIEFQSSBpZiBhdmFpbGFibGVcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgcmV0dXJuIHRlbXBEaXYudGV4dENvbnRlbnQgfHwgdGVtcERpdi5pbm5lclRleHQgfHwgJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNpbXBsZSByZWdleCBmYWxsYmFjayBmb3Igbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRzXG4gICAgICByZXR1cm4gaHRtbC5yZXBsYWNlKC88W14+XSo+L2csICcgJylcbiAgICAgICAgLnJlcGxhY2UoLyZuYnNwOy9nLCAnICcpXG4gICAgICAgIC5yZXBsYWNlKC8mbHQ7L2csICc8JylcbiAgICAgICAgLnJlcGxhY2UoLyZndDsvZywgJz4nKVxuICAgICAgICAucmVwbGFjZSgvJmFtcDsvZywgJyYnKVxuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnICcpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgZXh0cmFjdGluZyB0ZXh0IGZyb20gSFRNTDonLCBlKTtcbiAgICAvLyBGYWxsYmFjayB0byBiYXNpYyBzdHJpcFxuICAgIHJldHVybiBodG1sLnJlcGxhY2UoLzxbXj5dKj4vZywgJyAnKS50cmltKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHN0cmluZyBpcyBsaWtlbHkgSFRNTCBjb250ZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0h0bWxDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIWNvbnRlbnQpIHJldHVybiBmYWxzZTtcbiAgXG4gIHJldHVybiBjb250ZW50LnRyaW0oKS5zdGFydHNXaXRoKCc8JykgJiYgXG4gICAgKGNvbnRlbnQuaW5jbHVkZXMoJzxodG1sJykgfHwgXG4gICAgIGNvbnRlbnQuaW5jbHVkZXMoJzxib2R5JykgfHwgXG4gICAgIGNvbnRlbnQuaW5jbHVkZXMoJzxkaXYnKSB8fFxuICAgICBjb250ZW50LmluY2x1ZGVzKCc8cD4nKSB8fFxuICAgICBjb250ZW50LmluY2x1ZGVzKCc8YnI+JykpO1xufVxuXG4vKipcbiAqIEZvcm1hdCBhbmQgc3RhbmRhcmRpemUgZW1haWwgY29udGVudCBmb3IgZGlzcGxheSBmb2xsb3dpbmcgZW1haWwgaW5kdXN0cnkgc3RhbmRhcmRzLlxuICogVGhpcyBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgcmVuZGVyaW5nIGVtYWlsIGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRFbWFpbENvbnRlbnQoZW1haWw6IGFueSk6IHN0cmluZyB7XG4gIGlmICghZW1haWwpIHtcbiAgICBjb25zb2xlLmxvZygnZm9ybWF0RW1haWxDb250ZW50OiBObyBlbWFpbCBwcm92aWRlZCcpO1xuICAgIHJldHVybiAnJztcbiAgfVxuICBcbiAgdHJ5IHtcbiAgICAvLyBFeHRyYWN0IGNvbnRlbnQgZnJvbSBlbWFpbFxuICAgIGNvbnN0IHsgdGV4dCwgaHRtbCB9ID0gZXh0cmFjdEVtYWlsQ29udGVudChlbWFpbCk7XG4gICAgXG4gICAgY29uc29sZS5sb2coJ2Zvcm1hdEVtYWlsQ29udGVudCBwcm9jZXNzaW5nOicsIHsgXG4gICAgICBoYXNIdG1sOiAhIWh0bWwsIFxuICAgICAgaHRtbExlbmd0aDogaHRtbD8ubGVuZ3RoIHx8IDAsXG4gICAgICBoYXNUZXh0OiAhIXRleHQsIFxuICAgICAgdGV4dExlbmd0aDogdGV4dD8ubGVuZ3RoIHx8IDAsXG4gICAgICBlbWFpbFR5cGU6IHR5cGVvZiBlbWFpbCA9PT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdvYmplY3QnXG4gICAgfSk7XG4gICAgXG4gICAgLy8gSWYgd2UgaGF2ZSBIVE1MIGNvbnRlbnQsIHNhbml0aXplIGFuZCBzdGFuZGFyZGl6ZSBpdFxuICAgIGlmIChodG1sKSB7XG4gICAgICAvLyBQcm9jZXNzIEhUTUwgY29udGVudFxuICAgICAgbGV0IHByb2Nlc3NlZEh0bWwgPSBwcm9jZXNzSHRtbENvbnRlbnQoaHRtbCwgdGV4dCk7XG4gICAgICBcbiAgICAgIGNvbnNvbGUubG9nKCdIVE1MIGNvbnRlbnQgcHJvY2Vzc2VkOicsIHsgXG4gICAgICAgIHByb2Nlc3NlZExlbmd0aDogcHJvY2Vzc2VkSHRtbD8ubGVuZ3RoIHx8IDAsXG4gICAgICAgIGlzRW1wdHk6ICFwcm9jZXNzZWRIdG1sIHx8IHByb2Nlc3NlZEh0bWwudHJpbSgpLmxlbmd0aCA9PT0gMFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIEFwcGx5IHN0eWxpbmdcbiAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImVtYWlsLWNvbnRlbnRcIiBzdHlsZT1cImZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsgbGluZS1oZWlnaHQ6IDEuNjsgY29sb3I6ICMzMzM7IG1heC13aWR0aDogMTAwJTsgb3ZlcmZsb3cteDogYXV0bzsgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsgd29yZC13cmFwOiBicmVhay13b3JkO1wiIGRpcj1cIiR7ZGV0ZWN0VGV4dERpcmVjdGlvbih0ZXh0KX1cIj4ke3Byb2Nlc3NlZEh0bWx9PC9kaXY+YDtcbiAgICB9IFxuICAgIC8vIElmIHdlIG9ubHkgaGF2ZSB0ZXh0IGNvbnRlbnQsIGZvcm1hdCBpdCBwcm9wZXJseVxuICAgIGVsc2UgaWYgKHRleHQpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdVc2luZyBwbGFpbiB0ZXh0IGZvcm1hdHRpbmcnKTtcbiAgICAgIHJldHVybiBmb3JtYXRQbGFpblRleHRUb0h0bWwodGV4dCk7XG4gICAgfVxuICAgIFxuICAgIC8vIERlZmF1bHQgY2FzZTogZW1wdHkgb3IgdW5yZWNvZ25pemVkIGNvbnRlbnRcbiAgICByZXR1cm4gJzxkaXYgY2xhc3M9XCJlbWFpbC1jb250ZW50LWVtcHR5XCIgc3R5bGU9XCJwYWRkaW5nOiAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjNjY2O1wiPk5vIGNvbnRlbnQgYXZhaWxhYmxlPC9kaXY+JztcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdmb3JtYXRFbWFpbENvbnRlbnQ6IEVycm9yIGZvcm1hdHRpbmcgZW1haWwgY29udGVudDonLCBlcnJvcik7XG4gICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZW1haWwtY29udGVudC1lcnJvclwiIHN0eWxlPVwicGFkZGluZzogMTVweDsgY29sb3I6ICM3MjFjMjQ7IGJhY2tncm91bmQtY29sb3I6ICNmOGQ3ZGE7IGJvcmRlcjogMXB4IHNvbGlkICNmNWM2Y2I7IGJvcmRlci1yYWRpdXM6IDRweDtcIj48cD5FcnJvciBkaXNwbGF5aW5nIGVtYWlsIGNvbnRlbnQ8L3A+PHAgc3R5bGU9XCJmb250LXNpemU6IDEycHg7IG1hcmdpbi10b3A6IDEwcHg7XCI+JHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ308L3A+PC9kaXY+YDtcbiAgfVxufVxuXG4vKipcbiAqIFByb2Nlc3MgSFRNTCBjb250ZW50IHRvIGZpeCBjb21tb24gZW1haWwgcmVuZGVyaW5nIGlzc3Vlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0h0bWxDb250ZW50KGh0bWxDb250ZW50OiBzdHJpbmcsIHRleHRDb250ZW50Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFodG1sQ29udGVudCkgcmV0dXJuICcnO1xuICBcbiAgdHJ5IHtcbiAgICBjb25zb2xlLmxvZygncHJvY2Vzc0h0bWxDb250ZW50IGlucHV0OicsIHtcbiAgICAgIGxlbmd0aDogaHRtbENvbnRlbnQubGVuZ3RoLFxuICAgICAgc3RhcnRzV2l0aEh0bWw6IGh0bWxDb250ZW50LnRyaW0oKS5zdGFydHNXaXRoKCc8aHRtbCcpLFxuICAgICAgc3RhcnRzV2l0aERpdjogaHRtbENvbnRlbnQudHJpbSgpLnN0YXJ0c1dpdGgoJzxkaXYnKSxcbiAgICAgIGhhc0JvZHk6IGh0bWxDb250ZW50LmluY2x1ZGVzKCc8Ym9keScpLFxuICAgICAgY29udGFpbnNGb3J3YXJkZWRNZXNzYWdlOiBodG1sQ29udGVudC5pbmNsdWRlcygnLS0tLS0tLS0tLSBGb3J3YXJkZWQgbWVzc2FnZSAtLS0tLS0tLS0tJyksXG4gICAgICBjb250YWluc1F1b3RlSGVhZGVyOiBodG1sQ29udGVudC5pbmNsdWRlcygnd3JvdGU6JyksXG4gICAgICBoYXNCbG9ja3F1b3RlOiBodG1sQ29udGVudC5pbmNsdWRlcygnPGJsb2NrcXVvdGUnKSxcbiAgICAgIGhhc1RhYmxlOiBodG1sQ29udGVudC5pbmNsdWRlcygnPHRhYmxlJylcbiAgICB9KTtcbiAgICBcbiAgICAvLyBDaGVjayBmb3IgYnJvd3NlciBlbnZpcm9ubWVudCAoRE9NUGFyc2VyIGlzIGJyb3dzZXItb25seSlcbiAgICBjb25zdCBoYXNIdG1sVGFnID0gaHRtbENvbnRlbnQuaW5jbHVkZXMoJzxodG1sJyk7XG4gICAgY29uc3QgaGFzQm9keVRhZyA9IGh0bWxDb250ZW50LmluY2x1ZGVzKCc8Ym9keScpO1xuICAgIFxuICAgIC8vIFByZXNlcnZlIG9yaWdpbmFsIEhUTUwgZm9yIGRlYnVnZ2luZ1xuICAgIGxldCBvcmlnaW5hbEh0bWwgPSBodG1sQ29udGVudDtcbiAgICBcbiAgICAvLyBFeHRyYWN0IGJvZHkgY29udGVudCBpZiB3ZSBoYXZlIGEgY29tcGxldGUgSFRNTCBkb2N1bWVudCBhbmQgaW4gYnJvd3NlciBlbnZpcm9ubWVudFxuICAgIGlmIChoYXNIdG1sVGFnICYmIGhhc0JvZHlUYWcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIERPTVBhcnNlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIERPTSBwYXJzZXIgdG8gZXh0cmFjdCBqdXN0IHRoZSBib2R5IGNvbnRlbnRcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICBjb25zdCBkb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGh0bWxDb250ZW50LCAndGV4dC9odG1sJyk7XG4gICAgICAgIGNvbnN0IGJvZHlDb250ZW50ID0gZG9jLmJvZHkuaW5uZXJIVE1MO1xuICAgICAgICBcbiAgICAgICAgaWYgKGJvZHlDb250ZW50KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0V4dHJhY3RlZCBib2R5IGNvbnRlbnQgZnJvbSBIVE1MIGRvY3VtZW50LCBsZW5ndGg6JywgYm9keUNvbnRlbnQubGVuZ3RoKTtcbiAgICAgICAgICBodG1sQ29udGVudCA9IGJvZHlDb250ZW50O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBleHRyYWN0aW5nIGJvZHkgY29udGVudDonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFVzZSB0aGUgY2VudHJhbGl6ZWQgc2FuaXRpemVIdG1sIGZ1bmN0aW9uXG4gICAgbGV0IHNhbml0aXplZENvbnRlbnQgPSBzYW5pdGl6ZUh0bWwoaHRtbENvbnRlbnQpO1xuICAgIFxuICAgIGNvbnNvbGUubG9nKCdBZnRlciBzYW5pdGl6ZUh0bWw6Jywge1xuICAgICAgb3JpZ2luYWxMZW5ndGg6IG9yaWdpbmFsSHRtbC5sZW5ndGgsXG4gICAgICBzYW5pdGl6ZWRMZW5ndGg6IHNhbml0aXplZENvbnRlbnQubGVuZ3RoLFxuICAgICAgZGlmZmVyZW5jZTogb3JpZ2luYWxIdG1sLmxlbmd0aCAtIHNhbml0aXplZENvbnRlbnQubGVuZ3RoLFxuICAgICAgcGVyY2VudFJlbW92ZWQ6ICgob3JpZ2luYWxIdG1sLmxlbmd0aCAtIHNhbml0aXplZENvbnRlbnQubGVuZ3RoKSAvIG9yaWdpbmFsSHRtbC5sZW5ndGggKiAxMDApLnRvRml4ZWQoMikgKyAnJScsXG4gICAgICBjb250YWluc0ZvcndhcmRlZE1lc3NhZ2U6IHNhbml0aXplZENvbnRlbnQuaW5jbHVkZXMoJy0tLS0tLS0tLS0gRm9yd2FyZGVkIG1lc3NhZ2UgLS0tLS0tLS0tLScpLFxuICAgICAgaGFzVGFibGU6IHNhbml0aXplZENvbnRlbnQuaW5jbHVkZXMoJzx0YWJsZScpLFxuICAgICAgaGFzQmxvY2txdW90ZTogc2FuaXRpemVkQ29udGVudC5pbmNsdWRlcygnPGJsb2NrcXVvdGUnKVxuICAgIH0pO1xuICAgIFxuICAgIC8vIEZpeCBVUkwgZW5jb2RpbmcgaXNzdWVzIGFuZCBjbGVhbiB1cCBjb250ZW50XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIFRlbXBvcmFyeSBlbGVtZW50IHRvIG1hbmlwdWxhdGUgdGhlIEhUTUxcbiAgICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0ZW1wRGl2LmlubmVySFRNTCA9IHNhbml0aXplZENvbnRlbnQ7XG4gICAgICAgIFxuICAgICAgICAvLyBGaXggYWxsIGxpbmtzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGRvdWJsZS1lbmNvZGVkXG4gICAgICAgIGNvbnN0IGxpbmtzID0gdGVtcERpdi5xdWVyeVNlbGVjdG9yQWxsKCdhJyk7XG4gICAgICAgIGxpbmtzLmZvckVhY2gobGluayA9PiB7XG4gICAgICAgICAgY29uc3QgaHJlZiA9IGxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgICAgICAgaWYgKGhyZWYgJiYgaHJlZi5pbmNsdWRlcygnJScpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAvLyBUcnkgdG8gZGVjb2RlIFVSTHMgdGhhdCBtaWdodCBoYXZlIGJlZW4gZG91YmxlLWVuY29kZWRcbiAgICAgICAgICAgICAgY29uc3QgZGVjb2RlZEhyZWYgPSBkZWNvZGVVUklDb21wb25lbnQoaHJlZik7XG4gICAgICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgZGVjb2RlZEhyZWYpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAvLyBJZiBkZWNvZGluZyBmYWlscywga2VlcCB0aGUgb3JpZ2luYWxcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gZGVjb2RlIGhyZWY6JywgaHJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIEZpeCBpbWFnZSBVUkxzIC0gcHJlc2VydmUgY2lkOiBVUkxzIGZvciBlbWFpbCBhdHRhY2htZW50c1xuICAgICAgICBjb25zdCBpbWFnZXMgPSB0ZW1wRGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpO1xuICAgICAgICBpbWFnZXMuZm9yRWFjaChpbWcgPT4ge1xuICAgICAgICAgIGNvbnN0IHNyYyA9IGltZy5nZXRBdHRyaWJ1dGUoJ3NyYycpO1xuICAgICAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgICAgIC8vIERvbid0IG1vZGlmeSBjaWQ6IFVSTHMgYXMgdGhleSBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgaW4gZW1haWwgY2xpZW50c1xuICAgICAgICAgICAgaWYgKHNyYy5zdGFydHNXaXRoKCdjaWQ6JykpIHtcbiAgICAgICAgICAgICAgLy8gS2VlcCBjaWQ6IFVSTHMgYXMgdGhleSBhcmVcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1ByZXNlcnZpbmcgQ0lEIHJlZmVyZW5jZTonLCBzcmMpO1xuICAgICAgICAgICAgfSBcbiAgICAgICAgICAgIC8vIEZpeCBodHRwOi8vIFVSTHMgdG8gaHR0cHM6Ly8gZm9yIHNlY3VyaXR5XG4gICAgICAgICAgICBlbHNlIGlmIChzcmMuc3RhcnRzV2l0aCgnaHR0cDovLycpKSB7XG4gICAgICAgICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHNyYy5yZXBsYWNlKCdodHRwOi8vJywgJ2h0dHBzOi8vJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSGFuZGxlIHJlbGF0aXZlIFVSTHMgdGhhdCBtaWdodCBiZSBicm9rZW5cbiAgICAgICAgICAgIGVsc2UgaWYgKCFzcmMuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSAmJiAhc3JjLnN0YXJ0c1dpdGgoJ2RhdGE6JykpIHtcbiAgICAgICAgICAgICAgaWYgKHNyYy5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCBgaHR0cHM6Ly9leGFtcGxlLmNvbSR7c3JjfWApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIGBodHRwczovL2V4YW1wbGUuY29tLyR7c3JjfWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIENsZWFuIHVwIGV4Y2Vzc2l2ZSB3aGl0ZXNwYWNlIGFuZCBlbXB0eSBlbGVtZW50c1xuICAgICAgICAvLyBGaW5kIGFsbCB0ZXh0IG5vZGVzIGFuZCBub3JtYWxpemUgd2hpdGVzcGFjZVxuICAgICAgICBjb25zdCB3YWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuICAgICAgICAgIHRlbXBEaXYsXG4gICAgICAgICAgTm9kZUZpbHRlci5TSE9XX1RFWFQsXG4gICAgICAgICAgbnVsbFxuICAgICAgICApO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgdGV4dE5vZGVzID0gW107XG4gICAgICAgIHdoaWxlICh3YWxrZXIubmV4dE5vZGUoKSkge1xuICAgICAgICAgIHRleHROb2Rlcy5wdXNoKHdhbGtlci5jdXJyZW50Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFByb2Nlc3MgdGV4dCBub2RlcyB0byBub3JtYWxpemUgd2hpdGVzcGFjZVxuICAgICAgICB0ZXh0Tm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICBpZiAobm9kZS5ub2RlVmFsdWUpIHtcbiAgICAgICAgICAgIC8vIFJlcGxhY2Ugc2VxdWVuY2VzIG9mIHdoaXRlc3BhY2Ugd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICAgICAgbm9kZS5ub2RlVmFsdWUgPSBub2RlLm5vZGVWYWx1ZS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBSZW1vdmUgZW1wdHkgcGFyYWdyYXBocyBhbmQgZGl2cyB0aGF0IGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXG4gICAgICAgIGNvbnN0IGVtcHR5RWxlbWVudHMgPSB0ZW1wRGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ3AsIGRpdiwgc3BhbicpO1xuICAgICAgICBlbXB0eUVsZW1lbnRzLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgIGlmIChlbC5pbm5lckhUTUwudHJpbSgpID09PSAnJyB8fCBlbC5pbm5lckhUTUwgPT09ICcmbmJzcDsnKSB7XG4gICAgICAgICAgICBlbC5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChlbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIFJlbW92ZSBleGNlc3NpdmUgY29uc2VjdXRpdmUgPGJyPiB0YWdzIChtb3JlIHRoYW4gMilcbiAgICAgICAgbGV0IGh0bWwgPSB0ZW1wRGl2LmlubmVySFRNTDtcbiAgICAgICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvKDxiclxccypcXC8/PlxccyopezMsfS9naSwgJzxicj48YnI+Jyk7XG4gICAgICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgICAgXG4gICAgICAgIC8vIEdldCB0aGUgZml4ZWQgSFRNTFxuICAgICAgICBzYW5pdGl6ZWRDb250ZW50ID0gdGVtcERpdi5pbm5lckhUTUw7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZml4aW5nIGNvbnRlbnQ6JywgZSk7XG4gICAgfVxuICAgIFxuICAgIC8vIEZpeCBjb21tb24gZW1haWwgY2xpZW50IHF1aXJrcyB3aXRob3V0IGJyZWFraW5nIGNpZDogVVJMc1xuICAgIHJldHVybiBzYW5pdGl6ZWRDb250ZW50XG4gICAgICAvLyBGaXggZm9yIE91dGxvb2sgV2ViVk1MIGNvbnRlbnRcbiAgICAgIC5yZXBsYWNlKC88IS0tXFxbaWZcXHMrZ3RlXFxzK21zby9nLCAnPCEtLVtpZiBndGUgbXNvJylcbiAgICAgIC8vIEZpeCBmb3IgYnJva2VuIGltYWdlIHBhdGhzIFdJVEhPVVQgcmVwbGFjaW5nIGNpZDogVVJMc1xuICAgICAgLnJlcGxhY2UoLyhzcmN8YmFja2dyb3VuZCk9XCIoPyEoPzpodHRwcz86fGRhdGE6fGNpZDopKS9naSwgJyQxPVwiaHR0cHM6Ly8nKVxuICAgICAgLy8gRml4IGZvciBiYXNlNjQgaW1hZ2VzIHRoYXQgbWlnaHQgYmUgYnJva2VuIGFjcm9zcyBsaW5lc1xuICAgICAgLnJlcGxhY2UoL3NyYz1cImRhdGE6aW1hZ2VcXC9bXjtdKztiYXNlNjQsXFxzKihbXlwiXSspXFxzKlwiL2dpLCAobWF0Y2gsIHAxKSA9PiB7XG4gICAgICAgIHJldHVybiBgc3JjPVwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7cDEucmVwbGFjZSgvXFxzKy9nLCAnJyl9XCJgO1xuICAgICAgfSlcbiAgICAgIC8vIFJlbW92ZSBleGNlc3NpdmUgd2hpdGVzcGFjZSBmcm9tIHRoZSBIVE1MIHN0cmluZyBpdHNlbGZcbiAgICAgIC5yZXBsYWNlKC8+XFxzKzwvZywgJz4gPCcpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHByb2Nlc3NpbmcgSFRNTCBjb250ZW50OicsIGVycm9yKTtcbiAgICByZXR1cm4gaHRtbENvbnRlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3JtYXQgcGxhaW4gdGV4dCB0byBIVE1MIHdpdGggcHJvcGVyIGxpbmUgYnJlYWtzIGFuZCBzdHlsaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRQbGFpblRleHRUb0h0bWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCF0ZXh0KSByZXR1cm4gJyc7XG4gIFxuICAvLyBEZXRlY3QgdGV4dCBkaXJlY3Rpb25cbiAgY29uc3QgZGlyZWN0aW9uID0gZGV0ZWN0VGV4dERpcmVjdGlvbih0ZXh0KTtcbiAgXG4gIC8vIEVzY2FwZSBIVE1MIGNoYXJhY3RlcnMgdG8gcHJldmVudCBYU1NcbiAgY29uc3QgZXNjYXBlZFRleHQgPSB0ZXh0XG4gICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAucmVwbGFjZSgvJy9nLCAnJiMwMzk7Jyk7XG4gIFxuICAvLyBGb3JtYXQgcGxhaW4gdGV4dCB3aXRoIHByb3BlciBsaW5lIGJyZWFrcyBhbmQgcGFyYWdyYXBoc1xuICBjb25zdCBmb3JtYXR0ZWRUZXh0ID0gZXNjYXBlZFRleHRcbiAgICAucmVwbGFjZSgvXFxyXFxufFxccnxcXG4vZywgJzxicj4nKSAvLyBDb252ZXJ0IGFsbCBuZXdsaW5lcyB0byA8YnI+XG4gICAgLnJlcGxhY2UoLygoPzo8YnI+KXsyLH0pL2csICc8L3A+PHA+JykgLy8gQ29udmVydCBtdWx0aXBsZSBuZXdsaW5lcyB0byBwYXJhZ3JhcGhzXG4gICAgLnJlcGxhY2UoLzxicj48XFwvcD4vZywgJzwvcD4nKSAvLyBGaXggYW55IDxicj48L3A+IGNvbWJpbmF0aW9uc1xuICAgIC5yZXBsYWNlKC88cD48YnI+L2csICc8cD4nKTsgLy8gRml4IGFueSA8cD48YnI+IGNvbWJpbmF0aW9uc1xuICBcbiAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZW1haWwtY29udGVudFwiIHN0eWxlPVwiZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyBsaW5lLWhlaWdodDogMS41OyBjb2xvcjogIzMzMzsgcGFkZGluZzogMTVweDsgbWF4LXdpZHRoOiAxMDAlOyBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1wiIGRpcj1cIiR7ZGlyZWN0aW9ufVwiPjxwPiR7Zm9ybWF0dGVkVGV4dH08L3A+PC9kaXY+YDtcbn0gIl0sIm5hbWVzIjpbInNhbml0aXplSHRtbCIsImRldGVjdFRleHREaXJlY3Rpb24iLCJleHRyYWN0RW1haWxDb250ZW50IiwiZW1haWwiLCJ0ZXh0Q29udGVudCIsImh0bWxDb250ZW50IiwiY29uc29sZSIsImxvZyIsInRleHQiLCJodG1sIiwiY29udGVudCIsImJvZHkiLCJpc0h0bWxDb250ZW50IiwiZGF0YSIsImJvZHlIdG1sIiwiaHRtbEJvZHkiLCJib2R5VGV4dCIsInBsYWluVGV4dCIsImVycm9yIiwiZXh0cmFjdFRleHRGcm9tSHRtbCIsImhhc0h0bWwiLCJodG1sTGVuZ3RoIiwibGVuZ3RoIiwiaGFzVGV4dCIsInRleHRMZW5ndGgiLCJkb2N1bWVudCIsInRlbXBEaXYiLCJjcmVhdGVFbGVtZW50IiwiaW5uZXJIVE1MIiwiaW5uZXJUZXh0IiwicmVwbGFjZSIsInRyaW0iLCJlIiwic3RhcnRzV2l0aCIsImluY2x1ZGVzIiwiZm9ybWF0RW1haWxDb250ZW50IiwiZW1haWxUeXBlIiwicHJvY2Vzc2VkSHRtbCIsInByb2Nlc3NIdG1sQ29udGVudCIsInByb2Nlc3NlZExlbmd0aCIsImlzRW1wdHkiLCJmb3JtYXRQbGFpblRleHRUb0h0bWwiLCJFcnJvciIsIm1lc3NhZ2UiLCJzdGFydHNXaXRoSHRtbCIsInN0YXJ0c1dpdGhEaXYiLCJoYXNCb2R5IiwiY29udGFpbnNGb3J3YXJkZWRNZXNzYWdlIiwiY29udGFpbnNRdW90ZUhlYWRlciIsImhhc0Jsb2NrcXVvdGUiLCJoYXNUYWJsZSIsImhhc0h0bWxUYWciLCJoYXNCb2R5VGFnIiwib3JpZ2luYWxIdG1sIiwiRE9NUGFyc2VyIiwicGFyc2VyIiwiZG9jIiwicGFyc2VGcm9tU3RyaW5nIiwiYm9keUNvbnRlbnQiLCJzYW5pdGl6ZWRDb250ZW50Iiwib3JpZ2luYWxMZW5ndGgiLCJzYW5pdGl6ZWRMZW5ndGgiLCJkaWZmZXJlbmNlIiwicGVyY2VudFJlbW92ZWQiLCJ0b0ZpeGVkIiwibGlua3MiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImxpbmsiLCJocmVmIiwiZ2V0QXR0cmlidXRlIiwiZGVjb2RlZEhyZWYiLCJkZWNvZGVVUklDb21wb25lbnQiLCJzZXRBdHRyaWJ1dGUiLCJ3YXJuIiwiaW1hZ2VzIiwiaW1nIiwic3JjIiwid2Fsa2VyIiwiY3JlYXRlVHJlZVdhbGtlciIsIk5vZGVGaWx0ZXIiLCJTSE9XX1RFWFQiLCJ0ZXh0Tm9kZXMiLCJuZXh0Tm9kZSIsInB1c2giLCJjdXJyZW50Tm9kZSIsIm5vZGUiLCJub2RlVmFsdWUiLCJlbXB0eUVsZW1lbnRzIiwiZWwiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJtYXRjaCIsInAxIiwiZGlyZWN0aW9uIiwiZXNjYXBlZFRleHQiLCJmb3JtYXR0ZWRUZXh0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./lib/utils/email-content.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./lib/utils/email-mime-decoder.ts":
|
|
/*!*****************************************!*\
|
|
!*** ./lib/utils/email-mime-decoder.ts ***!
|
|
\*****************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ adaptMimeEmail: () => (/* binding */ adaptMimeEmail),\n/* harmony export */ cleanHtml: () => (/* binding */ cleanHtml),\n/* harmony export */ decodeInfomaniakEmail: () => (/* binding */ decodeInfomaniakEmail),\n/* harmony export */ isMimeFormat: () => (/* binding */ isMimeFormat)\n/* harmony export */ });\n/**\n * Infomaniak Email MIME Decoder\n * \n * This module provides specialized functions to decode MIME-encoded email content\n * from Infomaniak servers for proper display in a frontend application.\n * It handles multipart messages, different encodings, and character set conversions.\n */ /**\n * Main function to decode Infomaniak Email in MIME format\n */ function decodeInfomaniakEmail(rawEmailContent) {\n // Check if it's a multipart email\n const headers = extractHeaders(rawEmailContent);\n const headerInfo = parseEmailHeaders(headers);\n if (headerInfo.contentType.includes('multipart')) {\n return processMultipartEmail(rawEmailContent, headerInfo);\n } else {\n return processSinglePartEmail(rawEmailContent, headerInfo);\n }\n}\n/**\n * Process a single part email\n */ function processSinglePartEmail(rawEmail, headerInfo) {\n const splitEmail = rawEmail.split('\\r\\n\\r\\n');\n const headers = splitEmail[0];\n const body = splitEmail.slice(1).join('\\r\\n\\r\\n');\n const parsedHeaders = parseHeadersToObject(headers);\n const decodedBody = decodeMimeContent(body, headerInfo.encoding);\n const content = convertCharset(decodedBody, headerInfo.charset);\n const result = {\n subject: decodeHeaderValue(parsedHeaders['subject'] || ''),\n from: decodeHeaderValue(parsedHeaders['from'] || ''),\n to: decodeHeaderValue(parsedHeaders['to'] || ''),\n cc: parsedHeaders['cc'] ? decodeHeaderValue(parsedHeaders['cc']) : undefined,\n bcc: parsedHeaders['bcc'] ? decodeHeaderValue(parsedHeaders['bcc']) : undefined,\n date: parsedHeaders['date'] || '',\n headers: parsedHeaders\n };\n if (headerInfo.contentType.includes('text/plain')) {\n result.text = content;\n } else if (headerInfo.contentType.includes('text/html')) {\n result.html = content;\n }\n return result;\n}\n/**\n * Process a multipart email\n */ function processMultipartEmail(rawEmail, headerInfo) {\n if (!headerInfo.boundary) {\n throw new Error('Multipart email missing boundary');\n }\n const boundary = headerInfo.boundary;\n const splitEmail = rawEmail.split('\\r\\n\\r\\n');\n const headers = splitEmail[0];\n const parsedHeaders = parseHeadersToObject(headers);\n const result = {\n subject: decodeHeaderValue(parsedHeaders['subject'] || ''),\n from: decodeHeaderValue(parsedHeaders['from'] || ''),\n to: decodeHeaderValue(parsedHeaders['to'] || ''),\n cc: parsedHeaders['cc'] ? decodeHeaderValue(parsedHeaders['cc']) : undefined,\n bcc: parsedHeaders['bcc'] ? decodeHeaderValue(parsedHeaders['bcc']) : undefined,\n date: parsedHeaders['date'] || '',\n attachments: [],\n headers: parsedHeaders\n };\n // Split by boundary\n const bodyContent = rawEmail.split('--' + boundary);\n // Process each part (skip first as it's headers and last as it's boundary end)\n for(let i = 1; i < bodyContent.length - 1; i++){\n const part = bodyContent[i];\n const partHeaders = extractHeaders(part);\n const partHeaderInfo = parseEmailHeaders(partHeaders);\n // Handle sub-multipart (nested multipart)\n if (partHeaderInfo.contentType.includes('multipart') && partHeaderInfo.boundary) {\n const subMultipart = processMultipartEmail(part, partHeaderInfo);\n if (subMultipart.html) result.html = subMultipart.html;\n if (subMultipart.text) result.text = subMultipart.text;\n if (subMultipart.attachments) {\n result.attachments = [\n ...result.attachments || [],\n ...subMultipart.attachments\n ];\n }\n continue;\n }\n // Get content after headers\n const partContent = part.split('\\r\\n\\r\\n').slice(1).join('\\r\\n\\r\\n');\n const decodedContent = decodeMimeContent(partContent, partHeaderInfo.encoding);\n const content = convertCharset(decodedContent, partHeaderInfo.charset);\n // Check content disposition\n const contentDisposition = getHeaderValue(partHeaders, 'Content-Disposition') || '';\n if (contentDisposition.includes('attachment')) {\n // This is an attachment\n const filename = extractFilename(contentDisposition);\n if (result.attachments && filename) {\n result.attachments.push({\n filename,\n contentType: partHeaderInfo.contentType,\n encoding: partHeaderInfo.encoding,\n content: decodedContent\n });\n }\n } else {\n // This is a content part\n if (partHeaderInfo.contentType.includes('text/plain')) {\n result.text = content;\n } else if (partHeaderInfo.contentType.includes('text/html')) {\n result.html = content;\n }\n }\n }\n return result;\n}\n/**\n * Extract headers from an email or part\n */ function extractHeaders(content) {\n const headerEnd = content.indexOf('\\r\\n\\r\\n');\n if (headerEnd === -1) return content;\n return content.substring(0, headerEnd);\n}\n/**\n * Parse email headers into an object\n */ function parseHeadersToObject(headers) {\n const result = {};\n const lines = headers.split('\\r\\n');\n let currentHeader = '';\n let currentValue = '';\n for (const line of lines){\n // If line starts with a space or tab, it's a continuation\n if (line.startsWith(' ') || line.startsWith('\\t')) {\n currentValue += ' ' + line.trim();\n } else {\n // Save previous header if exists\n if (currentHeader) {\n result[currentHeader.toLowerCase()] = currentValue;\n }\n const colonIndex = line.indexOf(':');\n if (colonIndex !== -1) {\n currentHeader = line.substring(0, colonIndex).trim();\n currentValue = line.substring(colonIndex + 1).trim();\n }\n }\n }\n // Save the last header\n if (currentHeader) {\n result[currentHeader.toLowerCase()] = currentValue;\n }\n return result;\n}\n/**\n * Parse email headers to extract content type, encoding and charset\n */ function parseEmailHeaders(headers) {\n const contentType = getHeaderValue(headers, 'Content-Type') || 'text/plain';\n const encoding = getHeaderValue(headers, 'Content-Transfer-Encoding') || '7bit';\n // Extract charset\n let charset = 'utf-8';\n const charsetMatch = contentType.match(/charset\\s*=\\s*[\"']?([^\"';\\s]+)/i);\n if (charsetMatch) {\n charset = charsetMatch[1];\n }\n // Extract boundary for multipart emails\n let boundary;\n const boundaryMatch = contentType.match(/boundary\\s*=\\s*[\"']?([^\"';\\s]+)/i);\n if (boundaryMatch) {\n boundary = boundaryMatch[1];\n }\n return {\n contentType,\n encoding,\n charset,\n boundary\n };\n}\n/**\n * Get a specific header value\n */ function getHeaderValue(headers, name) {\n const regex = new RegExp(`${name}:\\\\s*([^\\\\r\\\\n]+)`, 'i');\n const match = headers.match(regex);\n return match ? match[1].trim() : null;\n}\n/**\n * Extract filename from Content-Disposition header\n */ function extractFilename(contentDisposition) {\n const filenameMatch = contentDisposition.match(/filename\\s*=\\s*[\"']?([^\"';\\s]+)/i);\n if (filenameMatch) return filenameMatch[1];\n // For encoded filenames\n const encodedFilenameMatch = contentDisposition.match(/filename\\*=([^']*)'[^']*'([^;]+)/i);\n if (encodedFilenameMatch) {\n try {\n return decodeURIComponent(encodedFilenameMatch[2].replace(/%([\\dA-F]{2})/g, '%$1'));\n } catch (e) {\n return encodedFilenameMatch[2];\n }\n }\n return 'attachment';\n}\n/**\n * Decode MIME content based on encoding\n */ function decodeMimeContent(content, encoding) {\n switch(encoding.toLowerCase()){\n case 'quoted-printable':\n return decodeQuotedPrintable(content);\n case 'base64':\n return decodeBase64(content);\n case '7bit':\n case '8bit':\n case 'binary':\n default:\n return content;\n }\n}\n/**\n * Decode quoted-printable content\n */ function decodeQuotedPrintable(content) {\n return content.replace(/=\\r\\n/g, '') // Remove soft line breaks\n .replace(/=([a-fA-F0-9]{2})/g, (match, p1)=>{\n return String.fromCharCode(parseInt(p1, 16));\n });\n}\n/**\n * Decode base64 content\n */ function decodeBase64(content) {\n // Remove any whitespace\n const cleanContent = content.replace(/\\s+/g, '');\n try {\n return atob(cleanContent);\n } catch (e) {\n console.error('Error decoding base64', e);\n return content;\n }\n}\n/**\n * Convert content from specified charset to UTF-8\n */ function convertCharset(content, charset) {\n // Basic charset conversion - for more complex cases, consider TextDecoder\n if (charset.toLowerCase() === 'utf-8' || charset.toLowerCase() === 'utf8') {\n return content;\n }\n try {\n // For browsers that support TextDecoder\n if (typeof TextDecoder !== 'undefined') {\n // Convert string to ArrayBuffer\n const buffer = new Uint8Array(content.length);\n for(let i = 0; i < content.length; i++){\n buffer[i] = content.charCodeAt(i);\n }\n const decoder = new TextDecoder(charset);\n return decoder.decode(buffer);\n }\n } catch (e) {\n console.warn('TextDecoder not supported or failed for charset:', charset);\n }\n // Fallback for simpler encodings\n if (charset.toLowerCase() === 'iso-8859-1' || charset.toLowerCase() === 'latin1') {\n return content; // Browser will handle this reasonably\n }\n console.warn('Unsupported charset:', charset);\n return content; // Return as-is if we can't convert\n}\n/**\n * Decode encoded header values (RFC 2047)\n */ function decodeHeaderValue(value) {\n // Decode headers like =?UTF-8?Q?Subject?=\n return value.replace(/=\\?([^?]+)\\?([BQ])\\?([^?]*)\\?=/gi, (match, charset, encoding, text)=>{\n if (encoding.toUpperCase() === 'B') {\n // Base64 encoding\n try {\n const decoded = atob(text);\n return convertCharset(decoded, charset);\n } catch (e) {\n return text;\n }\n } else if (encoding.toUpperCase() === 'Q') {\n // Quoted-printable\n try {\n const decoded = text.replace(/_/g, ' ').replace(/=([\\da-fA-F]{2})/g, (m, hex)=>String.fromCharCode(parseInt(hex, 16)));\n return convertCharset(decoded, charset);\n } catch (e) {\n return text;\n }\n }\n return text;\n });\n}\n/**\n * Clean HTML content for safe rendering\n */ function cleanHtml(html) {\n // Basic sanitization - consider using DOMPurify in a real app\n return html.replace(/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi, '').replace(/on\\w+=\"[^\"]*\"/g, '').replace(/on\\w+='[^']*'/g, '').replace(/on\\w+=\\w+/g, '');\n}\n/**\n * Check if email content is likely in MIME format\n */ function isMimeFormat(content) {\n if (!content) return false;\n // Check for common MIME headers\n return content.includes('Content-Type:') && content.includes('MIME-Version:') && /\\r\\n\\r\\n/.test(content);\n}\n/**\n * Adapt legacy email to use the decoded MIME content\n */ function adaptMimeEmail(legacyEmail) {\n if (!legacyEmail.content || typeof legacyEmail.content !== 'string' || !isMimeFormat(legacyEmail.content)) {\n return legacyEmail;\n }\n try {\n const decoded = decodeInfomaniakEmail(legacyEmail.content);\n return {\n ...legacyEmail,\n html: decoded.html,\n text: decoded.text || '',\n subject: decoded.subject || legacyEmail.subject,\n // Keep original content for reference\n content: decoded.html || decoded.text || ''\n };\n } catch (e) {\n console.error('Failed to decode MIME email:', e);\n return legacyEmail;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTs7Q0FFQyxHQUNNLFNBQVMrRCxVQUFVOUQsSUFBWTtJQUNwQyw4REFBOEQ7SUFDOUQsT0FBT0EsS0FDSnNDLE9BQU8sQ0FBQyx1REFBdUQsSUFDL0RBLE9BQU8sQ0FBQyxrQkFBa0IsSUFDMUJBLE9BQU8sQ0FBQyxrQkFBa0IsSUFDMUJBLE9BQU8sQ0FBQyxjQUFjO0FBQzNCO0FBRUE7O0NBRUMsR0FDTSxTQUFTeUIsYUFBYTVFLE9BQTJCO0lBQ3RELElBQUksQ0FBQ0EsU0FBUyxPQUFPO0lBRXJCLGdDQUFnQztJQUNoQyxPQUNFQSxRQUFRZCxRQUFRLENBQUMsb0JBQ2pCYyxRQUFRZCxRQUFRLENBQUMsb0JBQ2pCLFdBQVcyRixJQUFJLENBQUM3RTtBQUVwQjtBQUVBOztDQUVDLEdBQ00sU0FBUzhFLGVBQWVDLFdBQStCO0lBQzVELElBQUksQ0FBQ0EsWUFBWS9FLE9BQU8sSUFBSSxPQUFPK0UsWUFBWS9FLE9BQU8sS0FBSyxZQUFZLENBQUM0RSxhQUFhRyxZQUFZL0UsT0FBTyxHQUFHO1FBQ3pHLE9BQU8rRTtJQUNUO0lBRUEsSUFBSTtRQUNGLE1BQU1QLFVBQVU3RixzQkFBc0JvRyxZQUFZL0UsT0FBTztRQUV6RCxPQUFPO1lBQ0wsR0FBRytFLFdBQVc7WUFDZGxFLE1BQU0yRCxRQUFRM0QsSUFBSTtZQUNsQkQsTUFBTTRELFFBQVE1RCxJQUFJLElBQUk7WUFDdEJSLFNBQVNvRSxRQUFRcEUsT0FBTyxJQUFJMkUsWUFBWTNFLE9BQU87WUFDL0Msc0NBQXNDO1lBQ3RDSixTQUFTd0UsUUFBUTNELElBQUksSUFBSTJELFFBQVE1RCxJQUFJLElBQUk7UUFDM0M7SUFDRixFQUFFLE9BQU93QyxHQUFHO1FBQ1ZTLFFBQVFDLEtBQUssQ0FBQyxnQ0FBZ0NWO1FBQzlDLE9BQU8yQjtJQUNUO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbGliL3V0aWxzL2VtYWlsLW1pbWUtZGVjb2Rlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluZm9tYW5pYWsgRW1haWwgTUlNRSBEZWNvZGVyXG4gKiBcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHNwZWNpYWxpemVkIGZ1bmN0aW9ucyB0byBkZWNvZGUgTUlNRS1lbmNvZGVkIGVtYWlsIGNvbnRlbnRcbiAqIGZyb20gSW5mb21hbmlhayBzZXJ2ZXJzIGZvciBwcm9wZXIgZGlzcGxheSBpbiBhIGZyb250ZW5kIGFwcGxpY2F0aW9uLlxuICogSXQgaGFuZGxlcyBtdWx0aXBhcnQgbWVzc2FnZXMsIGRpZmZlcmVudCBlbmNvZGluZ3MsIGFuZCBjaGFyYWN0ZXIgc2V0IGNvbnZlcnNpb25zLlxuICovXG5cbmltcG9ydCB7IExlZ2FjeUVtYWlsTWVzc2FnZSB9IGZyb20gJ0AvdHlwZXMvZW1haWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlY29kZWRFbWFpbCB7XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgZnJvbTogc3RyaW5nO1xuICB0bzogc3RyaW5nO1xuICBjYz86IHN0cmluZztcbiAgYmNjPzogc3RyaW5nO1xuICBkYXRlOiBzdHJpbmc7XG4gIHRleHQ/OiBzdHJpbmc7XG4gIGh0bWw/OiBzdHJpbmc7XG4gIGF0dGFjaG1lbnRzPzogQXJyYXk8e1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgY29udGVudFR5cGU6IHN0cmluZztcbiAgICBlbmNvZGluZz86IHN0cmluZztcbiAgICBjb250ZW50Pzogc3RyaW5nO1xuICB9PjtcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxIZWFkZXJJbmZvIHtcbiAgY29udGVudFR5cGU6IHN0cmluZztcbiAgZW5jb2Rpbmc6IHN0cmluZztcbiAgY2hhcnNldDogc3RyaW5nO1xuICBib3VuZGFyeT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNYWluIGZ1bmN0aW9uIHRvIGRlY29kZSBJbmZvbWFuaWFrIEVtYWlsIGluIE1JTUUgZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVJbmZvbWFuaWFrRW1haWwocmF3RW1haWxDb250ZW50OiBzdHJpbmcpOiBEZWNvZGVkRW1haWwge1xuICAvLyBDaGVjayBpZiBpdCdzIGEgbXVsdGlwYXJ0IGVtYWlsXG4gIGNvbnN0IGhlYWRlcnMgPSBleHRyYWN0SGVhZGVycyhyYXdFbWFpbENvbnRlbnQpO1xuICBjb25zdCBoZWFkZXJJbmZvID0gcGFyc2VFbWFpbEhlYWRlcnMoaGVhZGVycyk7XG4gIFxuICBpZiAoaGVhZGVySW5mby5jb250ZW50VHlwZS5pbmNsdWRlcygnbXVsdGlwYXJ0JykpIHtcbiAgICByZXR1cm4gcHJvY2Vzc011bHRpcGFydEVtYWlsKHJhd0VtYWlsQ29udGVudCwgaGVhZGVySW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJvY2Vzc1NpbmdsZVBhcnRFbWFpbChyYXdFbWFpbENvbnRlbnQsIGhlYWRlckluZm8pO1xuICB9XG59XG5cbi8qKlxuICogUHJvY2VzcyBhIHNpbmdsZSBwYXJ0IGVtYWlsXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NTaW5nbGVQYXJ0RW1haWwocmF3RW1haWw6IHN0cmluZywgaGVhZGVySW5mbzogRW1haWxIZWFkZXJJbmZvKTogRGVjb2RlZEVtYWlsIHtcbiAgY29uc3Qgc3BsaXRFbWFpbCA9IHJhd0VtYWlsLnNwbGl0KCdcXHJcXG5cXHJcXG4nKTtcbiAgY29uc3QgaGVhZGVycyA9IHNwbGl0RW1haWxbMF07XG4gIGNvbnN0IGJvZHkgPSBzcGxpdEVtYWlsLnNsaWNlKDEpLmpvaW4oJ1xcclxcblxcclxcbicpO1xuICBcbiAgY29uc3QgcGFyc2VkSGVhZGVycyA9IHBhcnNlSGVhZGVyc1RvT2JqZWN0KGhlYWRlcnMpO1xuICBjb25zdCBkZWNvZGVkQm9keSA9IGRlY29kZU1pbWVDb250ZW50KGJvZHksIGhlYWRlckluZm8uZW5jb2RpbmcpO1xuICBjb25zdCBjb250ZW50ID0gY29udmVydENoYXJzZXQoZGVjb2RlZEJvZHksIGhlYWRlckluZm8uY2hhcnNldCk7XG4gIFxuICBjb25zdCByZXN1bHQ6IERlY29kZWRFbWFpbCA9IHtcbiAgICBzdWJqZWN0OiBkZWNvZGVIZWFkZXJWYWx1ZShwYXJzZWRIZWFkZXJzWydzdWJqZWN0J10gfHwgJycpLFxuICAgIGZyb206IGRlY29kZUhlYWRlclZhbHVlKHBhcnNlZEhlYWRlcnNbJ2Zyb20nXSB8fCAnJyksXG4gICAgdG86IGRlY29kZUhlYWRlclZhbHVlKHBhcnNlZEhlYWRlcnNbJ3RvJ10gfHwgJycpLFxuICAgIGNjOiBwYXJzZWRIZWFkZXJzWydjYyddID8gZGVjb2RlSGVhZGVyVmFsdWUocGFyc2VkSGVhZGVyc1snY2MnXSkgOiB1bmRlZmluZWQsXG4gICAgYmNjOiBwYXJzZWRIZWFkZXJzWydiY2MnXSA/IGRlY29kZUhlYWRlclZhbHVlKHBhcnNlZEhlYWRlcnNbJ2JjYyddKSA6IHVuZGVmaW5lZCxcbiAgICBkYXRlOiBwYXJzZWRIZWFkZXJzWydkYXRlJ10gfHwgJycsXG4gICAgaGVhZGVyczogcGFyc2VkSGVhZGVyc1xuICB9O1xuICBcbiAgaWYgKGhlYWRlckluZm8uY29udGVudFR5cGUuaW5jbHVkZXMoJ3RleHQvcGxhaW4nKSkge1xuICAgIHJlc3VsdC50ZXh0ID0gY29udGVudDtcbiAgfSBlbHNlIGlmIChoZWFkZXJJbmZvLmNvbnRlbnRUeXBlLmluY2x1ZGVzKCd0ZXh0L2h0bWwnKSkge1xuICAgIHJlc3VsdC5odG1sID0gY29udGVudDtcbiAgfVxuICBcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBQcm9jZXNzIGEgbXVsdGlwYXJ0IGVtYWlsXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NNdWx0aXBhcnRFbWFpbChyYXdFbWFpbDogc3RyaW5nLCBoZWFkZXJJbmZvOiBFbWFpbEhlYWRlckluZm8pOiBEZWNvZGVkRW1haWwge1xuICBpZiAoIWhlYWRlckluZm8uYm91bmRhcnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ011bHRpcGFydCBlbWFpbCBtaXNzaW5nIGJvdW5kYXJ5Jyk7XG4gIH1cbiAgXG4gIGNvbnN0IGJvdW5kYXJ5ID0gaGVhZGVySW5mby5ib3VuZGFyeTtcbiAgY29uc3Qgc3BsaXRFbWFpbCA9IHJhd0VtYWlsLnNwbGl0KCdcXHJcXG5cXHJcXG4nKTtcbiAgY29uc3QgaGVhZGVycyA9IHNwbGl0RW1haWxbMF07XG4gIGNvbnN0IHBhcnNlZEhlYWRlcnMgPSBwYXJzZUhlYWRlcnNUb09iamVjdChoZWFkZXJzKTtcbiAgXG4gIGNvbnN0IHJlc3VsdDogRGVjb2RlZEVtYWlsID0ge1xuICAgIHN1YmplY3Q6IGRlY29kZUhlYWRlclZhbHVlKHBhcnNlZEhlYWRlcnNbJ3N1YmplY3QnXSB8fCAnJyksXG4gICAgZnJvbTogZGVjb2RlSGVhZGVyVmFsdWUocGFyc2VkSGVhZGVyc1snZnJvbSddIHx8ICcnKSxcbiAgICB0bzogZGVjb2RlSGVhZGVyVmFsdWUocGFyc2VkSGVhZGVyc1sndG8nXSB8fCAnJyksXG4gICAgY2M6IHBhcnNlZEhlYWRlcnNbJ2NjJ10gPyBkZWNvZGVIZWFkZXJWYWx1ZShwYXJzZWRIZWFkZXJzWydjYyddKSA6IHVuZGVmaW5lZCxcbiAgICBiY2M6IHBhcnNlZEhlYWRlcnNbJ2JjYyddID8gZGVjb2RlSGVhZGVyVmFsdWUocGFyc2VkSGVhZGVyc1snYmNjJ10pIDogdW5kZWZpbmVkLFxuICAgIGRhdGU6IHBhcnNlZEhlYWRlcnNbJ2RhdGUnXSB8fCAnJyxcbiAgICBhdHRhY2htZW50czogW10sXG4gICAgaGVhZGVyczogcGFyc2VkSGVhZGVyc1xuICB9O1xuICBcbiAgLy8gU3BsaXQgYnkgYm91bmRhcnlcbiAgY29uc3QgYm9keUNvbnRlbnQgPSByYXdFbWFpbC5zcGxpdCgnLS0nICsgYm91bmRhcnkpO1xuICBcbiAgLy8gUHJvY2VzcyBlYWNoIHBhcnQgKHNraXAgZmlyc3QgYXMgaXQncyBoZWFkZXJzIGFuZCBsYXN0IGFzIGl0J3MgYm91bmRhcnkgZW5kKVxuICBmb3IgKGxldCBpID0gMTsgaSA8IGJvZHlDb250ZW50Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGNvbnN0IHBhcnQgPSBib2R5Q29udGVudFtpXTtcbiAgICBjb25zdCBwYXJ0SGVhZGVycyA9IGV4dHJhY3RIZWFkZXJzKHBhcnQpO1xuICAgIGNvbnN0IHBhcnRIZWFkZXJJbmZvID0gcGFyc2VFbWFpbEhlYWRlcnMocGFydEhlYWRlcnMpO1xuICAgIFxuICAgIC8vIEhhbmRsZSBzdWItbXVsdGlwYXJ0IChuZXN0ZWQgbXVsdGlwYXJ0KVxuICAgIGlmIChwYXJ0SGVhZGVySW5mby5jb250ZW50VHlwZS5pbmNsdWRlcygnbXVsdGlwYXJ0JykgJiYgcGFydEhlYWRlckluZm8uYm91bmRhcnkpIHtcbiAgICAgIGNvbnN0IHN1Yk11bHRpcGFydCA9IHByb2Nlc3NNdWx0aXBhcnRFbWFpbChwYXJ0LCBwYXJ0SGVhZGVySW5mbyk7XG4gICAgICBpZiAoc3ViTXVsdGlwYXJ0Lmh0bWwpIHJlc3VsdC5odG1sID0gc3ViTXVsdGlwYXJ0Lmh0bWw7XG4gICAgICBpZiAoc3ViTXVsdGlwYXJ0LnRleHQpIHJlc3VsdC50ZXh0ID0gc3ViTXVsdGlwYXJ0LnRleHQ7XG4gICAgICBpZiAoc3ViTXVsdGlwYXJ0LmF0dGFjaG1lbnRzKSB7XG4gICAgICAgIHJlc3VsdC5hdHRhY2htZW50cyA9IFsuLi4ocmVzdWx0LmF0dGFjaG1lbnRzIHx8IFtdKSwgLi4uc3ViTXVsdGlwYXJ0LmF0dGFjaG1lbnRzXTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBHZXQgY29udGVudCBhZnRlciBoZWFkZXJzXG4gICAgY29uc3QgcGFydENvbnRlbnQgPSBwYXJ0LnNwbGl0KCdcXHJcXG5cXHJcXG4nKS5zbGljZSgxKS5qb2luKCdcXHJcXG5cXHJcXG4nKTtcbiAgICBjb25zdCBkZWNvZGVkQ29udGVudCA9IGRlY29kZU1pbWVDb250ZW50KHBhcnRDb250ZW50LCBwYXJ0SGVhZGVySW5mby5lbmNvZGluZyk7XG4gICAgY29uc3QgY29udGVudCA9IGNvbnZlcnRDaGFyc2V0KGRlY29kZWRDb250ZW50LCBwYXJ0SGVhZGVySW5mby5jaGFyc2V0KTtcbiAgICBcbiAgICAvLyBDaGVjayBjb250ZW50IGRpc3Bvc2l0aW9uXG4gICAgY29uc3QgY29udGVudERpc3Bvc2l0aW9uID0gZ2V0SGVhZGVyVmFsdWUocGFydEhlYWRlcnMsICdDb250ZW50LURpc3Bvc2l0aW9uJykgfHwgJyc7XG4gICAgXG4gICAgaWYgKGNvbnRlbnREaXNwb3NpdGlvbi5pbmNsdWRlcygnYXR0YWNobWVudCcpKSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIGF0dGFjaG1lbnRcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gZXh0cmFjdEZpbGVuYW1lKGNvbnRlbnREaXNwb3NpdGlvbik7XG4gICAgICBpZiAocmVzdWx0LmF0dGFjaG1lbnRzICYmIGZpbGVuYW1lKSB7XG4gICAgICAgIHJlc3VsdC5hdHRhY2htZW50cy5wdXNoKHtcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICBjb250ZW50VHlwZTogcGFydEhlYWRlckluZm8uY29udGVudFR5cGUsXG4gICAgICAgICAgZW5jb2Rpbmc6IHBhcnRIZWFkZXJJbmZvLmVuY29kaW5nLFxuICAgICAgICAgIGNvbnRlbnQ6IGRlY29kZWRDb250ZW50XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyBhIGNvbnRlbnQgcGFydFxuICAgICAgaWYgKHBhcnRIZWFkZXJJbmZvLmNvbnRlbnRUeXBlLmluY2x1ZGVzKCd0ZXh0L3BsYWluJykpIHtcbiAgICAgICAgcmVzdWx0LnRleHQgPSBjb250ZW50O1xuICAgICAgfSBlbHNlIGlmIChwYXJ0SGVhZGVySW5mby5jb250ZW50VHlwZS5pbmNsdWRlcygndGV4dC9odG1sJykpIHtcbiAgICAgICAgcmVzdWx0Lmh0bWwgPSBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IGhlYWRlcnMgZnJvbSBhbiBlbWFpbCBvciBwYXJ0XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RIZWFkZXJzKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGhlYWRlckVuZCA9IGNvbnRlbnQuaW5kZXhPZignXFxyXFxuXFxyXFxuJyk7XG4gIGlmIChoZWFkZXJFbmQgPT09IC0xKSByZXR1cm4gY29udGVudDtcbiAgcmV0dXJuIGNvbnRlbnQuc3Vic3RyaW5nKDAsIGhlYWRlckVuZCk7XG59XG5cbi8qKlxuICogUGFyc2UgZW1haWwgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICovXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnNUb09iamVjdChoZWFkZXJzOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGNvbnN0IGxpbmVzID0gaGVhZGVycy5zcGxpdCgnXFxyXFxuJyk7XG4gIFxuICBsZXQgY3VycmVudEhlYWRlciA9ICcnO1xuICBsZXQgY3VycmVudFZhbHVlID0gJyc7XG4gIFxuICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAvLyBJZiBsaW5lIHN0YXJ0cyB3aXRoIGEgc3BhY2Ugb3IgdGFiLCBpdCdzIGEgY29udGludWF0aW9uXG4gICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnICcpIHx8IGxpbmUuc3RhcnRzV2l0aCgnXFx0JykpIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSArPSAnICcgKyBsaW5lLnRyaW0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2F2ZSBwcmV2aW91cyBoZWFkZXIgaWYgZXhpc3RzXG4gICAgICBpZiAoY3VycmVudEhlYWRlcikge1xuICAgICAgICByZXN1bHRbY3VycmVudEhlYWRlci50b0xvd2VyQ2FzZSgpXSA9IGN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGNvbG9uSW5kZXggPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICAgIGlmIChjb2xvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICBjdXJyZW50SGVhZGVyID0gbGluZS5zdWJzdHJpbmcoMCwgY29sb25JbmRleCkudHJpbSgpO1xuICAgICAgICBjdXJyZW50VmFsdWUgPSBsaW5lLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSkudHJpbSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLy8gU2F2ZSB0aGUgbGFzdCBoZWFkZXJcbiAgaWYgKGN1cnJlbnRIZWFkZXIpIHtcbiAgICByZXN1bHRbY3VycmVudEhlYWRlci50b0xvd2VyQ2FzZSgpXSA9IGN1cnJlbnRWYWx1ZTtcbiAgfVxuICBcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBQYXJzZSBlbWFpbCBoZWFkZXJzIHRvIGV4dHJhY3QgY29udGVudCB0eXBlLCBlbmNvZGluZyBhbmQgY2hhcnNldFxuICovXG5mdW5jdGlvbiBwYXJzZUVtYWlsSGVhZGVycyhoZWFkZXJzOiBzdHJpbmcpOiBFbWFpbEhlYWRlckluZm8ge1xuICBjb25zdCBjb250ZW50VHlwZSA9IGdldEhlYWRlclZhbHVlKGhlYWRlcnMsICdDb250ZW50LVR5cGUnKSB8fCAndGV4dC9wbGFpbic7XG4gIGNvbnN0IGVuY29kaW5nID0gZ2V0SGVhZGVyVmFsdWUoaGVhZGVycywgJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnKSB8fCAnN2JpdCc7XG4gIFxuICAvLyBFeHRyYWN0IGNoYXJzZXRcbiAgbGV0IGNoYXJzZXQgPSAndXRmLTgnO1xuICBjb25zdCBjaGFyc2V0TWF0Y2ggPSBjb250ZW50VHlwZS5tYXRjaCgvY2hhcnNldFxccyo9XFxzKltcIiddPyhbXlwiJztcXHNdKykvaSk7XG4gIGlmIChjaGFyc2V0TWF0Y2gpIHtcbiAgICBjaGFyc2V0ID0gY2hhcnNldE1hdGNoWzFdO1xuICB9XG4gIFxuICAvLyBFeHRyYWN0IGJvdW5kYXJ5IGZvciBtdWx0aXBhcnQgZW1haWxzXG4gIGxldCBib3VuZGFyeTtcbiAgY29uc3QgYm91bmRhcnlNYXRjaCA9IGNvbnRlbnRUeXBlLm1hdGNoKC9ib3VuZGFyeVxccyo9XFxzKltcIiddPyhbXlwiJztcXHNdKykvaSk7XG4gIGlmIChib3VuZGFyeU1hdGNoKSB7XG4gICAgYm91bmRhcnkgPSBib3VuZGFyeU1hdGNoWzFdO1xuICB9XG4gIFxuICByZXR1cm4geyBjb250ZW50VHlwZSwgZW5jb2RpbmcsIGNoYXJzZXQsIGJvdW5kYXJ5IH07XG59XG5cbi8qKlxuICogR2V0IGEgc3BlY2lmaWMgaGVhZGVyIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlclZhbHVlKGhlYWRlcnM6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtuYW1lfTpcXFxccyooW15cXFxcclxcXFxuXSspYCwgJ2knKTtcbiAgY29uc3QgbWF0Y2ggPSBoZWFkZXJzLm1hdGNoKHJlZ2V4KTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0udHJpbSgpIDogbnVsbDtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IGZpbGVuYW1lIGZyb20gQ29udGVudC1EaXNwb3NpdGlvbiBoZWFkZXJcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEZpbGVuYW1lKGNvbnRlbnREaXNwb3NpdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZmlsZW5hbWVNYXRjaCA9IGNvbnRlbnREaXNwb3NpdGlvbi5tYXRjaCgvZmlsZW5hbWVcXHMqPVxccypbXCInXT8oW15cIic7XFxzXSspL2kpO1xuICBpZiAoZmlsZW5hbWVNYXRjaCkgcmV0dXJuIGZpbGVuYW1lTWF0Y2hbMV07XG4gIFxuICAvLyBGb3IgZW5jb2RlZCBmaWxlbmFtZXNcbiAgY29uc3QgZW5jb2RlZEZpbGVuYW1lTWF0Y2ggPSBjb250ZW50RGlzcG9zaXRpb24ubWF0Y2goL2ZpbGVuYW1lXFwqPShbXiddKiknW14nXSonKFteO10rKS9pKTtcbiAgaWYgKGVuY29kZWRGaWxlbmFtZU1hdGNoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlZEZpbGVuYW1lTWF0Y2hbMl0ucmVwbGFjZSgvJShbXFxkQS1GXXsyfSkvZywgJyUkMScpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZW5jb2RlZEZpbGVuYW1lTWF0Y2hbMl07XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gJ2F0dGFjaG1lbnQnO1xufVxuXG4vKipcbiAqIERlY29kZSBNSU1FIGNvbnRlbnQgYmFzZWQgb24gZW5jb2RpbmdcbiAqL1xuZnVuY3Rpb24gZGVjb2RlTWltZUNvbnRlbnQoY29udGVudDogc3RyaW5nLCBlbmNvZGluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgc3dpdGNoIChlbmNvZGluZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAncXVvdGVkLXByaW50YWJsZSc6XG4gICAgICByZXR1cm4gZGVjb2RlUXVvdGVkUHJpbnRhYmxlKGNvbnRlbnQpO1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICByZXR1cm4gZGVjb2RlQmFzZTY0KGNvbnRlbnQpO1xuICAgIGNhc2UgJzdiaXQnOlxuICAgIGNhc2UgJzhiaXQnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjb250ZW50O1xuICB9XG59XG5cbi8qKlxuICogRGVjb2RlIHF1b3RlZC1wcmludGFibGUgY29udGVudFxuICovXG5mdW5jdGlvbiBkZWNvZGVRdW90ZWRQcmludGFibGUoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNvbnRlbnRcbiAgICAucmVwbGFjZSgvPVxcclxcbi9nLCAnJykgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHNvZnQgbGluZSBicmVha3NcbiAgICAucmVwbGFjZSgvPShbYS1mQS1GMC05XXsyfSkvZywgKG1hdGNoLCBwMSkgPT4geyAgLy8gUmVwbGFjZSBoZXggY29kZXMgd2l0aCBjaGFyc1xuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQocDEsIDE2KSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogRGVjb2RlIGJhc2U2NCBjb250ZW50XG4gKi9cbmZ1bmN0aW9uIGRlY29kZUJhc2U2NChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBSZW1vdmUgYW55IHdoaXRlc3BhY2VcbiAgY29uc3QgY2xlYW5Db250ZW50ID0gY29udGVudC5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXRvYihjbGVhbkNvbnRlbnQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgZGVjb2RpbmcgYmFzZTY0JywgZSk7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IGNvbnRlbnQgZnJvbSBzcGVjaWZpZWQgY2hhcnNldCB0byBVVEYtOFxuICovXG5mdW5jdGlvbiBjb252ZXJ0Q2hhcnNldChjb250ZW50OiBzdHJpbmcsIGNoYXJzZXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEJhc2ljIGNoYXJzZXQgY29udmVyc2lvbiAtIGZvciBtb3JlIGNvbXBsZXggY2FzZXMsIGNvbnNpZGVyIFRleHREZWNvZGVyXG4gIGlmIChjaGFyc2V0LnRvTG93ZXJDYXNlKCkgPT09ICd1dGYtOCcgfHwgY2hhcnNldC50b0xvd2VyQ2FzZSgpID09PSAndXRmOCcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBcbiAgdHJ5IHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IFRleHREZWNvZGVyXG4gICAgaWYgKHR5cGVvZiBUZXh0RGVjb2RlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIEFycmF5QnVmZmVyXG4gICAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShjb250ZW50Lmxlbmd0aCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYnVmZmVyW2ldID0gY29udGVudC5jaGFyQ29kZUF0KGkpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKGNoYXJzZXQpO1xuICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKGJ1ZmZlcik7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS53YXJuKCdUZXh0RGVjb2RlciBub3Qgc3VwcG9ydGVkIG9yIGZhaWxlZCBmb3IgY2hhcnNldDonLCBjaGFyc2V0KTtcbn1cblxuICAvLyBGYWxsYmFjayBmb3Igc2ltcGxlciBlbmNvZGluZ3NcbiAgaWYgKGNoYXJzZXQudG9Mb3dlckNhc2UoKSA9PT0gJ2lzby04ODU5LTEnIHx8IGNoYXJzZXQudG9Mb3dlckNhc2UoKSA9PT0gJ2xhdGluMScpIHtcbiAgICByZXR1cm4gY29udGVudDsgIC8vIEJyb3dzZXIgd2lsbCBoYW5kbGUgdGhpcyByZWFzb25hYmx5XG4gIH1cbiAgXG4gIGNvbnNvbGUud2FybignVW5zdXBwb3J0ZWQgY2hhcnNldDonLCBjaGFyc2V0KTtcbiAgcmV0dXJuIGNvbnRlbnQ7ICAvLyBSZXR1cm4gYXMtaXMgaWYgd2UgY2FuJ3QgY29udmVydFxufVxuXG4vKipcbiAqIERlY29kZSBlbmNvZGVkIGhlYWRlciB2YWx1ZXMgKFJGQyAyMDQ3KVxuICovXG5mdW5jdGlvbiBkZWNvZGVIZWFkZXJWYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gRGVjb2RlIGhlYWRlcnMgbGlrZSA9P1VURi04P1E/U3ViamVjdD89XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC89XFw/KFteP10rKVxcPyhbQlFdKVxcPyhbXj9dKilcXD89L2dpLCAobWF0Y2gsIGNoYXJzZXQsIGVuY29kaW5nLCB0ZXh0KSA9PiB7XG4gICAgaWYgKGVuY29kaW5nLnRvVXBwZXJDYXNlKCkgPT09ICdCJykge1xuICAgICAgLy8gQmFzZTY0IGVuY29kaW5nXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkZWNvZGVkID0gYXRvYih0ZXh0KTtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRDaGFyc2V0KGRlY29kZWQsIGNoYXJzZXQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbn1cbiAgICB9IGVsc2UgaWYgKGVuY29kaW5nLnRvVXBwZXJDYXNlKCkgPT09ICdRJykge1xuICAgICAgLy8gUXVvdGVkLXByaW50YWJsZVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IHRleHRcbiAgICAgICAgICAucmVwbGFjZSgvXy9nLCAnICcpXG4gICAgICAgICAgLnJlcGxhY2UoLz0oW1xcZGEtZkEtRl17Mn0pL2csIChtOiBzdHJpbmcsIGhleDogc3RyaW5nKSA9PiBcbiAgICAgICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoaGV4LCAxNikpXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRDaGFyc2V0KGRlY29kZWQsIGNoYXJzZXQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRleHQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIENsZWFuIEhUTUwgY29udGVudCBmb3Igc2FmZSByZW5kZXJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBCYXNpYyBzYW5pdGl6YXRpb24gLSBjb25zaWRlciB1c2luZyBET01QdXJpZnkgaW4gYSByZWFsIGFwcFxuICByZXR1cm4gaHRtbFxuICAgIC5yZXBsYWNlKC88c2NyaXB0XFxiW148XSooPzooPyE8XFwvc2NyaXB0Pik8W148XSopKjxcXC9zY3JpcHQ+L2dpLCAnJylcbiAgICAucmVwbGFjZSgvb25cXHcrPVwiW15cIl0qXCIvZywgJycpXG4gICAgLnJlcGxhY2UoL29uXFx3Kz0nW14nXSonL2csICcnKVxuICAgIC5yZXBsYWNlKC9vblxcdys9XFx3Ky9nLCAnJyk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgZW1haWwgY29udGVudCBpcyBsaWtlbHkgaW4gTUlNRSBmb3JtYXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWltZUZvcm1hdChjb250ZW50OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgaWYgKCFjb250ZW50KSByZXR1cm4gZmFsc2U7XG4gIFxuICAvLyBDaGVjayBmb3IgY29tbW9uIE1JTUUgaGVhZGVyc1xuICByZXR1cm4gKFxuICAgIGNvbnRlbnQuaW5jbHVkZXMoJ0NvbnRlbnQtVHlwZTonKSAmJlxuICAgIGNvbnRlbnQuaW5jbHVkZXMoJ01JTUUtVmVyc2lvbjonKSAmJlxuICAgIC9cXHJcXG5cXHJcXG4vLnRlc3QoY29udGVudClcbiAgKTtcbn1cblxuLyoqXG4gKiBBZGFwdCBsZWdhY3kgZW1haWwgdG8gdXNlIHRoZSBkZWNvZGVkIE1JTUUgY29udGVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRhcHRNaW1lRW1haWwobGVnYWN5RW1haWw6IExlZ2FjeUVtYWlsTWVzc2FnZSk6IExlZ2FjeUVtYWlsTWVzc2FnZSB7XG4gIGlmICghbGVnYWN5RW1haWwuY29udGVudCB8fCB0eXBlb2YgbGVnYWN5RW1haWwuY29udGVudCAhPT0gJ3N0cmluZycgfHwgIWlzTWltZUZvcm1hdChsZWdhY3lFbWFpbC5jb250ZW50KSkge1xuICAgIHJldHVybiBsZWdhY3lFbWFpbDtcbiAgfVxuICBcbiAgdHJ5IHtcbiAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlSW5mb21hbmlha0VtYWlsKGxlZ2FjeUVtYWlsLmNvbnRlbnQpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICAuLi5sZWdhY3lFbWFpbCxcbiAgICAgIGh0bWw6IGRlY29kZWQuaHRtbCxcbiAgICAgIHRleHQ6IGRlY29kZWQudGV4dCB8fCAnJyxcbiAgICAgIHN1YmplY3Q6IGRlY29kZWQuc3ViamVjdCB8fCBsZWdhY3lFbWFpbC5zdWJqZWN0LFxuICAgICAgLy8gS2VlcCBvcmlnaW5hbCBjb250ZW50IGZvciByZWZlcmVuY2VcbiAgICAgIGNvbnRlbnQ6IGRlY29kZWQuaHRtbCB8fCBkZWNvZGVkLnRleHQgfHwgJydcbiAgICB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRlY29kZSBNSU1FIGVtYWlsOicsIGUpO1xuICAgIHJldHVybiBsZWdhY3lFbWFpbDtcbiAgfVxufSAiXSwibmFtZXMiOlsiZGVjb2RlSW5mb21hbmlha0VtYWlsIiwicmF3RW1haWxDb250ZW50IiwiaGVhZGVycyIsImV4dHJhY3RIZWFkZXJzIiwiaGVhZGVySW5mbyIsInBhcnNlRW1haWxIZWFkZXJzIiwiY29udGVudFR5cGUiLCJpbmNsdWRlcyIsInByb2Nlc3NNdWx0aXBhcnRFbWFpbCIsInByb2Nlc3NTaW5nbGVQYXJ0RW1haWwiLCJyYXdFbWFpbCIsInNwbGl0RW1haWwiLCJzcGxpdCIsImJvZHkiLCJzbGljZSIsImpvaW4iLCJwYXJzZWRIZWFkZXJzIiwicGFyc2VIZWFkZXJzVG9PYmplY3QiLCJkZWNvZGVkQm9keSIsImRlY29kZU1pbWVDb250ZW50IiwiZW5jb2RpbmciLCJjb250ZW50IiwiY29udmVydENoYXJzZXQiLCJjaGFyc2V0IiwicmVzdWx0Iiwic3ViamVjdCIsImRlY29kZUhlYWRlclZhbHVlIiwiZnJvbSIsInRvIiwiY2MiLCJ1bmRlZmluZWQiLCJiY2MiLCJkYXRlIiwidGV4dCIsImh0bWwiLCJib3VuZGFyeSIsIkVycm9yIiwiYXR0YWNobWVudHMiLCJib2R5Q29udGVudCIsImkiLCJsZW5ndGgiLCJwYXJ0IiwicGFydEhlYWRlcnMiLCJwYXJ0SGVhZGVySW5mbyIsInN1Yk11bHRpcGFydCIsInBhcnRDb250ZW50IiwiZGVjb2RlZENvbnRlbnQiLCJjb250ZW50RGlzcG9zaXRpb24iLCJnZXRIZWFkZXJWYWx1ZSIsImZpbGVuYW1lIiwiZXh0cmFjdEZpbGVuYW1lIiwicHVzaCIsImhlYWRlckVuZCIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJsaW5lcyIsImN1cnJlbnRIZWFkZXIiLCJjdXJyZW50VmFsdWUiLCJsaW5lIiwic3RhcnRzV2l0aCIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImNvbG9uSW5kZXgiLCJjaGFyc2V0TWF0Y2giLCJtYXRjaCIsImJvdW5kYXJ5TWF0Y2giLCJuYW1lIiwicmVnZXgiLCJSZWdFeHAiLCJmaWxlbmFtZU1hdGNoIiwiZW5jb2RlZEZpbGVuYW1lTWF0Y2giLCJkZWNvZGVVUklDb21wb25lbnQiLCJyZXBsYWNlIiwiZSIsImRlY29kZVF1b3RlZFByaW50YWJsZSIsImRlY29kZUJhc2U2NCIsInAxIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwicGFyc2VJbnQiLCJjbGVhbkNvbnRlbnQiLCJhdG9iIiwiY29uc29sZSIsImVycm9yIiwiVGV4dERlY29kZXIiLCJidWZmZXIiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsImRlY29kZXIiLCJkZWNvZGUiLCJ3YXJuIiwidmFsdWUiLCJ0b1VwcGVyQ2FzZSIsImRlY29kZWQiLCJtIiwiaGV4IiwiY2xlYW5IdG1sIiwiaXNNaW1lRm9ybWF0IiwidGVzdCIsImFkYXB0TWltZUVtYWlsIiwibGVnYWN5RW1haWwiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./lib/utils/email-mime-decoder.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./lib/utils/email-utils.ts":
|
|
/*!**********************************!*\
|
|
!*** ./lib/utils/email-utils.ts ***!
|
|
\**********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ applyTextDirection: () => (/* reexport safe */ _text_direction__WEBPACK_IMPORTED_MODULE_1__.applyTextDirection),\n/* harmony export */ detectTextDirection: () => (/* reexport safe */ _text_direction__WEBPACK_IMPORTED_MODULE_1__.detectTextDirection),\n/* harmony export */ extractEmailContent: () => (/* reexport safe */ _email_content__WEBPACK_IMPORTED_MODULE_2__.extractEmailContent),\n/* harmony export */ formatEmailAddresses: () => (/* binding */ formatEmailAddresses),\n/* harmony export */ formatEmailContent: () => (/* reexport safe */ _email_content__WEBPACK_IMPORTED_MODULE_2__.formatEmailContent),\n/* harmony export */ formatEmailDate: () => (/* binding */ formatEmailDate),\n/* harmony export */ formatEmailForReplyOrForward: () => (/* binding */ formatEmailForReplyOrForward),\n/* harmony export */ formatForwardedEmail: () => (/* binding */ formatForwardedEmail),\n/* harmony export */ formatPlainTextToHtml: () => (/* reexport safe */ _email_content__WEBPACK_IMPORTED_MODULE_2__.formatPlainTextToHtml),\n/* harmony export */ formatReplyEmail: () => (/* binding */ formatReplyEmail),\n/* harmony export */ normalizeEmailContent: () => (/* binding */ normalizeEmailContent),\n/* harmony export */ processHtmlContent: () => (/* reexport safe */ _email_content__WEBPACK_IMPORTED_MODULE_2__.processHtmlContent),\n/* harmony export */ renderEmailContent: () => (/* binding */ renderEmailContent),\n/* harmony export */ sanitizeHtml: () => (/* reexport safe */ _dom_purify_config__WEBPACK_IMPORTED_MODULE_0__.sanitizeHtml)\n/* harmony export */ });\n/* harmony import */ var _dom_purify_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom-purify-config */ \"(ssr)/./lib/utils/dom-purify-config.ts\");\n/* harmony import */ var _text_direction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text-direction */ \"(ssr)/./lib/utils/text-direction.ts\");\n/* harmony import */ var _email_content__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./email-content */ \"(ssr)/./lib/utils/email-content.ts\");\n/* harmony import */ var _lib_utils_email_adapters__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/utils/email-adapters */ \"(ssr)/./lib/utils/email-adapters.ts\");\n/* harmony import */ var _email_mime_decoder__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./email-mime-decoder */ \"(ssr)/./lib/utils/email-mime-decoder.ts\");\n/**\n * Unified Email Utilities\n * \n * This file provides backward compatibility for email utilities.\n * New code should import directly from the specialized modules:\n * - email-content.ts (content processing)\n * - text-direction.ts (direction handling)\n * - dom-purify-config.ts (sanitization)\n */ // Import from specialized modules\n\n\n\n\n\n// Re-export important functions for backward compatibility\n\n/**\n * Format email addresses for display\n * Can handle both array of EmailAddress objects or a string\n */ function formatEmailAddresses(addresses) {\n if (!addresses) return '';\n // If already a string, return as is\n if (typeof addresses === 'string') {\n return addresses;\n }\n // If array, format each address\n if (Array.isArray(addresses) && addresses.length > 0) {\n return addresses.map((addr)=>addr.name && addr.name !== addr.address ? `${addr.name} <${addr.address}>` : addr.address).join(', ');\n }\n return '';\n}\n/**\n * Format date for display\n */ function formatEmailDate(date) {\n if (!date) return '';\n try {\n const dateObj = typeof date === 'string' ? new Date(date) : date;\n return dateObj.toLocaleString('en-US', {\n weekday: 'short',\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n });\n } catch (e) {\n return typeof date === 'string' ? date : date.toString();\n }\n}\n/**\n * Normalize email content to our standard format regardless of input format\n */ function normalizeEmailContent(email) {\n if (!email) {\n throw new Error('Cannot normalize null or undefined email');\n }\n // First check if this is a MIME format email that needs decoding\n if (email.content && (0,_email_mime_decoder__WEBPACK_IMPORTED_MODULE_4__.isMimeFormat)(email.content)) {\n try {\n console.log('Detected MIME format email, decoding...');\n // We need to force cast here due to type incompatibility between EmailMessage and the mime result\n const adaptedEmail = (0,_email_mime_decoder__WEBPACK_IMPORTED_MODULE_4__.adaptMimeEmail)(email);\n return {\n ...adaptedEmail,\n flags: adaptedEmail.flags || [] // Ensure flags is always an array\n };\n } catch (error) {\n console.error('Error decoding MIME email:', error);\n // Continue with regular normalization if MIME decoding fails\n }\n }\n // Check if it's already in the standardized format\n if (email.content && typeof email.content === 'object' && (email.content.html !== undefined || email.content.text !== undefined)) {\n // Already in the correct format\n return email;\n }\n // Otherwise, adapt from legacy format\n // We need to force cast here due to type incompatibility\n const adaptedEmail = (0,_lib_utils_email_adapters__WEBPACK_IMPORTED_MODULE_3__.adaptLegacyEmail)(email);\n return {\n ...adaptedEmail,\n flags: adaptedEmail.flags || [] // Ensure flags is always an array\n };\n}\n/**\n * Render normalized email content into HTML for display\n */ function renderEmailContent(content) {\n if (!content) {\n return '<div class=\"email-content-empty\">No content available</div>';\n }\n // Create a simple object that can be processed by formatEmailContent\n const emailObj = {\n content\n };\n // Use the centralized formatting function\n return (0,_email_content__WEBPACK_IMPORTED_MODULE_2__.formatEmailContent)(emailObj);\n}\n/**\n * Get recipient addresses from an email for reply or forward\n */ function getRecipientAddresses(email, type) {\n // Format the recipients\n const to = Array.isArray(email.from) ? email.from.map((addr)=>{\n if (typeof addr === 'string') return addr;\n return addr.address ? addr.address : '';\n }).filter(Boolean).join(', ') : typeof email.from === 'string' ? email.from : '';\n // For reply-all, include other recipients in CC\n let cc = '';\n if (type === 'reply-all') {\n const toRecipients = Array.isArray(email.to) ? email.to.map((addr)=>{\n if (typeof addr === 'string') return addr;\n return addr.address ? addr.address : '';\n }).filter(Boolean) : typeof email.to === 'string' ? [\n email.to\n ] : [];\n const ccRecipients = Array.isArray(email.cc) ? email.cc.map((addr)=>{\n if (typeof addr === 'string') return addr;\n return addr.address ? addr.address : '';\n }).filter(Boolean) : typeof email.cc === 'string' ? [\n email.cc\n ] : [];\n cc = [\n ...toRecipients,\n ...ccRecipients\n ].join(', ');\n }\n return {\n to,\n cc\n };\n}\n/**\n * Get formatted header information for reply or forward\n */ function getFormattedHeaderInfo(email) {\n // Format the subject\n const subject = email.subject && !email.subject.startsWith('Re:') && !email.subject.startsWith('Fwd:') ? email.subject : email.subject || '';\n // Format the date\n const dateStr = email.date ? new Date(email.date).toLocaleString() : 'Unknown Date';\n // Format sender\n const fromStr = Array.isArray(email.from) ? email.from.map((addr)=>{\n if (typeof addr === 'string') return addr;\n return addr.name ? `${addr.name} <${addr.address}>` : addr.address;\n }).join(', ') : typeof email.from === 'string' ? email.from : 'Unknown Sender';\n // Format recipients\n const toStr = Array.isArray(email.to) ? email.to.map((addr)=>{\n if (typeof addr === 'string') return addr;\n return addr.name ? `${addr.name} <${addr.address}>` : addr.address;\n }).join(', ') : typeof email.to === 'string' ? email.to : '';\n // Format CC \n const ccStr = Array.isArray(email.cc) ? email.cc.map((addr)=>{\n if (typeof addr === 'string') return addr;\n return addr.name ? `${addr.name} <${addr.address}>` : addr.address;\n }).join(', ') : typeof email.cc === 'string' ? email.cc : '';\n return {\n fromStr,\n toStr,\n ccStr,\n dateStr,\n subject\n };\n}\n/**\n * Format email for reply\n */ function formatReplyEmail(originalEmail, type = 'reply') {\n console.log('formatReplyEmail called:', {\n type,\n emailId: originalEmail?.id\n });\n if (!originalEmail) {\n console.warn('formatReplyEmail: No original email provided');\n return {\n to: '',\n subject: '',\n content: {\n text: '',\n html: '',\n isHtml: false,\n direction: 'ltr'\n }\n };\n }\n // Adapt legacy format if needed\n const email = 'content' in originalEmail ? originalEmail : (0,_lib_utils_email_adapters__WEBPACK_IMPORTED_MODULE_3__.adaptLegacyEmail)(originalEmail);\n // Format subject with Re: prefix\n const subject = email.subject ? email.subject.toLowerCase().startsWith('re:') ? email.subject : `Re: ${email.subject}` : 'Re: ';\n // Get recipient addresses\n const { to, cc } = getRecipientAddresses(email, type);\n // Get quote header\n const { fromStr, dateStr } = getFormattedHeaderInfo(email);\n // Use the from name if available, otherwise use email address\n const sender = fromStr;\n const date = dateStr;\n // Extract raw content from the original email\n const { text: originalTextContent, html: originalHtmlContent } = (0,_email_content__WEBPACK_IMPORTED_MODULE_2__.extractEmailContent)(email.content);\n // First sanitize the original content\n const sanitizedContent = (0,_dom_purify_config__WEBPACK_IMPORTED_MODULE_0__.sanitizeHtml)(originalHtmlContent || originalTextContent);\n // Build the reply structure with sanitized but not yet fully formatted content\n const replyStructure = `\n <div style=\"margin: 20px 0 10px 0; color: #666; border-bottom: 1px solid #ddd; padding-bottom: 5px;\">\n On ${date}, ${sender} wrote:\n </div>\n <blockquote style=\"margin: 0; padding-left: 10px; border-left: 3px solid #ddd; color: #505050; background-color: #f9f9f9; padding: 10px;\">\n ${sanitizedContent}\n </blockquote>\n `;\n // Format plain text reply if available\n let formattedTextContent = '';\n if (originalTextContent) {\n const lines = originalTextContent.split(/\\r\\n|\\r|\\n/);\n formattedTextContent = `On ${date}, ${sender} wrote:\\n\\n${lines.map((line)=>`> ${line}`).join('\\n')}`;\n }\n const result = {\n to,\n cc: cc || undefined,\n subject,\n content: {\n html: replyStructure,\n text: formattedTextContent || originalTextContent,\n isHtml: true,\n direction: typeof email.content === 'object' && email.content ? email.content.direction || 'ltr' : 'ltr'\n },\n attachments: email.attachments?.map((att)=>{\n // Create properly typed attachment\n if ('name' in att) {\n return {\n filename: att.filename || att.name || 'attachment',\n contentType: att.contentType || 'application/octet-stream',\n content: att.content\n };\n }\n return {\n filename: att.filename || 'attachment',\n contentType: att.contentType || 'application/octet-stream',\n content: att.content\n };\n })\n };\n console.log('formatReplyEmail result:', {\n to: result.to,\n subject: result.subject,\n hasHtml: !!result.content.html,\n htmlLength: result.content.html?.length || 0,\n hasText: !!result.content.text,\n textLength: result.content.text?.length || 0\n });\n return result;\n}\n/**\n * Format email for forwarding\n */ function formatForwardedEmail(originalEmail) {\n console.log('formatForwardedEmail called:', {\n emailId: originalEmail?.id\n });\n if (!originalEmail) {\n console.warn('formatForwardedEmail: No original email provided');\n return {\n to: '',\n subject: '',\n content: {\n text: '',\n html: '',\n isHtml: false,\n direction: 'ltr'\n }\n };\n }\n // Adapt legacy format if needed\n const email = 'content' in originalEmail ? originalEmail : (0,_lib_utils_email_adapters__WEBPACK_IMPORTED_MODULE_3__.adaptLegacyEmail)(originalEmail);\n // Format subject with Fwd: prefix\n const subject = email.subject ? email.subject.toLowerCase().startsWith('fwd:') ? email.subject : `Fwd: ${email.subject}` : 'Fwd: ';\n // Get original email info for headers\n const { fromStr, toStr, ccStr, dateStr } = getFormattedHeaderInfo(email);\n console.log('Forward header info:', {\n fromStr,\n toStr,\n dateStr,\n subject\n });\n // Original sent date\n const date = dateStr;\n // Extract raw content from the original email\n const { text: originalTextContent, html: originalHtmlContent } = (0,_email_content__WEBPACK_IMPORTED_MODULE_2__.extractEmailContent)(email.content);\n // First sanitize the original content\n const sanitizedContent = (0,_dom_purify_config__WEBPACK_IMPORTED_MODULE_0__.sanitizeHtml)(originalHtmlContent || originalTextContent);\n // Build the forward structure with sanitized but not yet fully formatted content\n const forwardStructure = `\n <div style=\"margin: 20px 0 10px 0; color: #666; font-family: Arial, sans-serif;\">\n ---------- Forwarded message ----------<br>\n <table style=\"margin: 10px 0 15px 0; border-collapse: collapse; font-size: 13px; color: #333;\">\n <tbody>\n <tr>\n <td style=\"padding: 3px 10px 3px 0; font-weight: bold; text-align: right; vertical-align: top;\">From:</td>\n <td style=\"padding: 3px 0;\">${fromStr}</td>\n </tr>\n <tr>\n <td style=\"padding: 3px 10px 3px 0; font-weight: bold; text-align: right; vertical-align: top;\">Date:</td>\n <td style=\"padding: 3px 0;\">${date}</td>\n </tr>\n <tr>\n <td style=\"padding: 3px 10px 3px 0; font-weight: bold; text-align: right; vertical-align: top;\">Subject:</td>\n <td style=\"padding: 3px 0;\">${email.subject || ''}</td>\n </tr>\n <tr>\n <td style=\"padding: 3px 10px 3px 0; font-weight: bold; text-align: right; vertical-align: top;\">To:</td>\n <td style=\"padding: 3px 0;\">${toStr}</td>\n </tr>\n ${ccStr ? `\n <tr>\n <td style=\"padding: 3px 10px 3px 0; font-weight: bold; text-align: right; vertical-align: top;\">Cc:</td>\n <td style=\"padding: 3px 0;\">${ccStr}</td>\n </tr>\n ` : ''}\n </tbody>\n </table>\n </div>\n <blockquote style=\"margin: 0; padding-left: 10px; border-left: 3px solid #ddd; color: #505050; background-color: #f9f9f9; padding: 10px;\">\n ${sanitizedContent}\n </blockquote>\n `;\n // Format plain text version\n let formattedTextContent = '';\n if (originalTextContent) {\n formattedTextContent = `\n---------- Forwarded message ----------\nFrom: ${fromStr}\nDate: ${date}\nSubject: ${email.subject || ''}\nTo: ${toStr}\n${ccStr ? `Cc: ${ccStr}\\n` : ''}\n\n${originalTextContent}\n `.trim();\n }\n const result = {\n to: '',\n subject,\n content: {\n html: forwardStructure,\n text: formattedTextContent || originalTextContent,\n isHtml: true,\n direction: typeof email.content === 'object' && email.content ? email.content.direction || 'ltr' : 'ltr'\n },\n attachments: email.attachments?.map((att)=>{\n // Create properly typed attachment\n if ('name' in att) {\n return {\n filename: att.filename || att.name || 'attachment',\n contentType: att.contentType || 'application/octet-stream',\n content: att.content\n };\n }\n return {\n filename: att.filename || 'attachment',\n contentType: att.contentType || 'application/octet-stream',\n content: att.content\n };\n })\n };\n console.log('formatForwardedEmail result:', {\n subject: result.subject,\n hasHtml: !!result.content.html,\n htmlLength: result.content.html?.length || 0,\n hasText: !!result.content.text,\n textLength: result.content.text?.length || 0\n });\n return result;\n}\n/**\n * Format an email for reply or reply-all - canonical implementation\n */ function formatEmailForReplyOrForward(email, type) {\n // Use our dedicated formatters\n if (type === 'forward') {\n return formatForwardedEmail(email);\n } else {\n return formatReplyEmail(email, type);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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R0FDTSxTQUFTWSw2QkFDZDFELEtBQStDLEVBQy9DYyxJQUF1QztJQUV2QywrQkFBK0I7SUFDL0IsSUFBSUEsU0FBUyxXQUFXO1FBQ3RCLE9BQU95QyxxQkFBcUJ2RDtJQUM5QixPQUFPO1FBQ0wsT0FBTzZCLGlCQUFpQjdCLE9BQU9jO0lBQ2pDO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbGliL3V0aWxzL2VtYWlsLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCBFbWFpbCBVdGlsaXRpZXNcbiAqIFxuICogVGhpcyBmaWxlIHByb3ZpZGVzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIGVtYWlsIHV0aWxpdGllcy5cbiAqIE5ldyBjb2RlIHNob3VsZCBpbXBvcnQgZGlyZWN0bHkgZnJvbSB0aGUgc3BlY2lhbGl6ZWQgbW9kdWxlczpcbiAqIC0gZW1haWwtY29udGVudC50cyAoY29udGVudCBwcm9jZXNzaW5nKVxuICogLSB0ZXh0LWRpcmVjdGlvbi50cyAoZGlyZWN0aW9uIGhhbmRsaW5nKVxuICogLSBkb20tcHVyaWZ5LWNvbmZpZy50cyAoc2FuaXRpemF0aW9uKVxuICovXG5cbi8vIEltcG9ydCBmcm9tIHNwZWNpYWxpemVkIG1vZHVsZXNcbmltcG9ydCB7IHNhbml0aXplSHRtbCB9IGZyb20gJy4vZG9tLXB1cmlmeS1jb25maWcnO1xuaW1wb3J0IHsgZGV0ZWN0VGV4dERpcmVjdGlvbiwgYXBwbHlUZXh0RGlyZWN0aW9uIH0gZnJvbSAnLi90ZXh0LWRpcmVjdGlvbic7XG5pbXBvcnQgeyBcbiAgZXh0cmFjdEVtYWlsQ29udGVudCwgXG4gIGZvcm1hdEVtYWlsQ29udGVudCwgXG4gIHByb2Nlc3NIdG1sQ29udGVudCxcbiAgZm9ybWF0UGxhaW5UZXh0VG9IdG1sLFxuICBpc0h0bWxDb250ZW50LFxuICBleHRyYWN0VGV4dEZyb21IdG1sXG59IGZyb20gJy4vZW1haWwtY29udGVudCc7XG5cbmltcG9ydCB7IFxuICBFbWFpbE1lc3NhZ2UsIFxuICBFbWFpbENvbnRlbnQsIFxuICBFbWFpbEFkZHJlc3MsXG4gIExlZ2FjeUVtYWlsTWVzc2FnZSBcbn0gZnJvbSAnQC90eXBlcy9lbWFpbCc7XG5pbXBvcnQgeyBhZGFwdExlZ2FjeUVtYWlsIH0gZnJvbSAnQC9saWIvdXRpbHMvZW1haWwtYWRhcHRlcnMnO1xuaW1wb3J0IHsgZGVjb2RlSW5mb21hbmlha0VtYWlsLCBhZGFwdE1pbWVFbWFpbCwgaXNNaW1lRm9ybWF0IH0gZnJvbSAnLi9lbWFpbC1taW1lLWRlY29kZXInO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMnO1xuXG4vLyBSZS1leHBvcnQgaW1wb3J0YW50IGZ1bmN0aW9ucyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuZXhwb3J0IHsgXG4gIHNhbml0aXplSHRtbCxcbiAgZXh0cmFjdEVtYWlsQ29udGVudCxcbiAgZm9ybWF0RW1haWxDb250ZW50LFxuICBwcm9jZXNzSHRtbENvbnRlbnQsXG4gIGZvcm1hdFBsYWluVGV4dFRvSHRtbCxcbiAgZGV0ZWN0VGV4dERpcmVjdGlvbixcbiAgYXBwbHlUZXh0RGlyZWN0aW9uXG59O1xuXG4vKipcbiAqIFN0YW5kYXJkIGludGVyZmFjZSBmb3IgZm9ybWF0dGVkIGVtYWlsIHJlc3BvbnNlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdHRlZEVtYWlsIHtcbiAgdG86IHN0cmluZztcbiAgY2M/OiBzdHJpbmc7XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgY29udGVudDogRW1haWxDb250ZW50O1xuICBhdHRhY2htZW50cz86IEFycmF5PHtcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gICAgY29udGVudD86IHN0cmluZztcbiAgfT47XG59XG5cbi8qKlxuICogRm9ybWF0IGVtYWlsIGFkZHJlc3NlcyBmb3IgZGlzcGxheVxuICogQ2FuIGhhbmRsZSBib3RoIGFycmF5IG9mIEVtYWlsQWRkcmVzcyBvYmplY3RzIG9yIGEgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRFbWFpbEFkZHJlc3NlcyhhZGRyZXNzZXM6IEVtYWlsQWRkcmVzc1tdIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgaWYgKCFhZGRyZXNzZXMpIHJldHVybiAnJztcbiAgXG4gIC8vIElmIGFscmVhZHkgYSBzdHJpbmcsIHJldHVybiBhcyBpc1xuICBpZiAodHlwZW9mIGFkZHJlc3NlcyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gYWRkcmVzc2VzO1xuICB9XG4gIFxuICAvLyBJZiBhcnJheSwgZm9ybWF0IGVhY2ggYWRkcmVzc1xuICBpZiAoQXJyYXkuaXNBcnJheShhZGRyZXNzZXMpICYmIGFkZHJlc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGFkZHJlc3Nlcy5tYXAoYWRkciA9PiBcbiAgICAgIGFkZHIubmFtZSAmJiBhZGRyLm5hbWUgIT09IGFkZHIuYWRkcmVzcyBcbiAgICAgICAgPyBgJHthZGRyLm5hbWV9IDwke2FkZHIuYWRkcmVzc30+YFxuICAgICAgICA6IGFkZHIuYWRkcmVzc1xuICAgICkuam9pbignLCAnKTtcbiAgfVxuICBcbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEZvcm1hdCBkYXRlIGZvciBkaXNwbGF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRFbWFpbERhdGUoZGF0ZTogRGF0ZSB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGlmICghZGF0ZSkgcmV0dXJuICcnO1xuICBcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRlT2JqID0gdHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnID8gbmV3IERhdGUoZGF0ZSkgOiBkYXRlO1xuICAgIHJldHVybiBkYXRlT2JqLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgIHdlZWtkYXk6ICdzaG9ydCcsXG4gICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgbWludXRlOiAnMi1kaWdpdCdcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycgPyBkYXRlIDogZGF0ZS50b1N0cmluZygpO1xuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGVtYWlsIGNvbnRlbnQgdG8gb3VyIHN0YW5kYXJkIGZvcm1hdCByZWdhcmRsZXNzIG9mIGlucHV0IGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRW1haWxDb250ZW50KGVtYWlsOiBhbnkpOiBFbWFpbE1lc3NhZ2Uge1xuICBpZiAoIWVtYWlsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgbm9ybWFsaXplIG51bGwgb3IgdW5kZWZpbmVkIGVtYWlsJyk7XG4gIH1cblxuICAvLyBGaXJzdCBjaGVjayBpZiB0aGlzIGlzIGEgTUlNRSBmb3JtYXQgZW1haWwgdGhhdCBuZWVkcyBkZWNvZGluZ1xuICBpZiAoZW1haWwuY29udGVudCAmJiBpc01pbWVGb3JtYXQoZW1haWwuY29udGVudCkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc29sZS5sb2coJ0RldGVjdGVkIE1JTUUgZm9ybWF0IGVtYWlsLCBkZWNvZGluZy4uLicpO1xuICAgICAgLy8gV2UgbmVlZCB0byBmb3JjZSBjYXN0IGhlcmUgZHVlIHRvIHR5cGUgaW5jb21wYXRpYmlsaXR5IGJldHdlZW4gRW1haWxNZXNzYWdlIGFuZCB0aGUgbWltZSByZXN1bHRcbiAgICAgIGNvbnN0IGFkYXB0ZWRFbWFpbCA9IGFkYXB0TWltZUVtYWlsKGVtYWlsKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFkYXB0ZWRFbWFpbCxcbiAgICAgICAgZmxhZ3M6IGFkYXB0ZWRFbWFpbC5mbGFncyB8fCBbXSAvLyBFbnN1cmUgZmxhZ3MgaXMgYWx3YXlzIGFuIGFycmF5XG4gICAgICB9IGFzIEVtYWlsTWVzc2FnZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZGVjb2RpbmcgTUlNRSBlbWFpbDonLCBlcnJvcik7XG4gICAgICAvLyBDb250aW51ZSB3aXRoIHJlZ3VsYXIgbm9ybWFsaXphdGlvbiBpZiBNSU1FIGRlY29kaW5nIGZhaWxzXG4gICAgfVxuICB9XG4gIFxuICAvLyBDaGVjayBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIHN0YW5kYXJkaXplZCBmb3JtYXRcbiAgaWYgKGVtYWlsLmNvbnRlbnQgJiYgdHlwZW9mIGVtYWlsLmNvbnRlbnQgPT09ICdvYmplY3QnICYmIFxuICAgICAgKGVtYWlsLmNvbnRlbnQuaHRtbCAhPT0gdW5kZWZpbmVkIHx8IGVtYWlsLmNvbnRlbnQudGV4dCAhPT0gdW5kZWZpbmVkKSkge1xuICAgIC8vIEFscmVhZHkgaW4gdGhlIGNvcnJlY3QgZm9ybWF0XG4gICAgcmV0dXJuIGVtYWlsIGFzIEVtYWlsTWVzc2FnZTtcbiAgfVxuICBcbiAgLy8gT3RoZXJ3aXNlLCBhZGFwdCBmcm9tIGxlZ2FjeSBmb3JtYXRcbiAgLy8gV2UgbmVlZCB0byBmb3JjZSBjYXN0IGhlcmUgZHVlIHRvIHR5cGUgaW5jb21wYXRpYmlsaXR5XG4gIGNvbnN0IGFkYXB0ZWRFbWFpbCA9IGFkYXB0TGVnYWN5RW1haWwoZW1haWwpO1xuICByZXR1cm4ge1xuICAgIC4uLmFkYXB0ZWRFbWFpbCxcbiAgICBmbGFnczogYWRhcHRlZEVtYWlsLmZsYWdzIHx8IFtdIC8vIEVuc3VyZSBmbGFncyBpcyBhbHdheXMgYW4gYXJyYXlcbiAgfSBhcyBFbWFpbE1lc3NhZ2U7XG59XG5cbi8qKlxuICogUmVuZGVyIG5vcm1hbGl6ZWQgZW1haWwgY29udGVudCBpbnRvIEhUTUwgZm9yIGRpc3BsYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckVtYWlsQ29udGVudChjb250ZW50OiBFbWFpbENvbnRlbnQgfCBudWxsKTogc3RyaW5nIHtcbiAgaWYgKCFjb250ZW50KSB7XG4gICAgcmV0dXJuICc8ZGl2IGNsYXNzPVwiZW1haWwtY29udGVudC1lbXB0eVwiPk5vIGNvbnRlbnQgYXZhaWxhYmxlPC9kaXY+JztcbiAgfVxuICBcbiAgLy8gQ3JlYXRlIGEgc2ltcGxlIG9iamVjdCB0aGF0IGNhbiBiZSBwcm9jZXNzZWQgYnkgZm9ybWF0RW1haWxDb250ZW50XG4gIGNvbnN0IGVtYWlsT2JqID0geyBjb250ZW50IH07XG4gIFxuICAvLyBVc2UgdGhlIGNlbnRyYWxpemVkIGZvcm1hdHRpbmcgZnVuY3Rpb25cbiAgcmV0dXJuIGZvcm1hdEVtYWlsQ29udGVudChlbWFpbE9iaik7XG59XG5cbi8qKlxuICogR2V0IHJlY2lwaWVudCBhZGRyZXNzZXMgZnJvbSBhbiBlbWFpbCBmb3IgcmVwbHkgb3IgZm9yd2FyZFxuICovXG5mdW5jdGlvbiBnZXRSZWNpcGllbnRBZGRyZXNzZXMoZW1haWw6IGFueSwgdHlwZTogJ3JlcGx5JyB8ICdyZXBseS1hbGwnKTogeyB0bzogc3RyaW5nOyBjYzogc3RyaW5nIH0ge1xuICAvLyBGb3JtYXQgdGhlIHJlY2lwaWVudHNcbiAgY29uc3QgdG8gPSBBcnJheS5pc0FycmF5KGVtYWlsLmZyb20pIFxuICAgID8gZW1haWwuZnJvbS5tYXAoKGFkZHI6IGFueSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGFkZHIgPT09ICdzdHJpbmcnKSByZXR1cm4gYWRkcjtcbiAgICAgICAgcmV0dXJuIGFkZHIuYWRkcmVzcyA/IGFkZHIuYWRkcmVzcyA6ICcnO1xuICAgICAgfSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJywgJykgXG4gICAgOiB0eXBlb2YgZW1haWwuZnJvbSA9PT0gJ3N0cmluZycgXG4gICAgICA/IGVtYWlsLmZyb20gXG4gICAgICA6ICcnO1xuXG4gIC8vIEZvciByZXBseS1hbGwsIGluY2x1ZGUgb3RoZXIgcmVjaXBpZW50cyBpbiBDQ1xuICBsZXQgY2MgPSAnJztcbiAgaWYgKHR5cGUgPT09ICdyZXBseS1hbGwnKSB7XG4gICAgY29uc3QgdG9SZWNpcGllbnRzID0gQXJyYXkuaXNBcnJheShlbWFpbC50bykgXG4gICAgICA/IGVtYWlsLnRvLm1hcCgoYWRkcjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhZGRyID09PSAnc3RyaW5nJykgcmV0dXJuIGFkZHI7XG4gICAgICAgICAgcmV0dXJuIGFkZHIuYWRkcmVzcyA/IGFkZHIuYWRkcmVzcyA6ICcnO1xuICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbilcbiAgICAgIDogdHlwZW9mIGVtYWlsLnRvID09PSAnc3RyaW5nJ1xuICAgICAgICA/IFtlbWFpbC50b11cbiAgICAgICAgOiBbXTtcbiAgICAgICAgXG4gICAgY29uc3QgY2NSZWNpcGllbnRzID0gQXJyYXkuaXNBcnJheShlbWFpbC5jYykgXG4gICAgICA/IGVtYWlsLmNjLm1hcCgoYWRkcjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhZGRyID09PSAnc3RyaW5nJykgcmV0dXJuIGFkZHI7XG4gICAgICAgICAgcmV0dXJuIGFkZHIuYWRkcmVzcyA/IGFkZHIuYWRkcmVzcyA6ICcnO1xuICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbilcbiAgICAgIDogdHlwZW9mIGVtYWlsLmNjID09PSAnc3RyaW5nJ1xuICAgICAgICA/IFtlbWFpbC5jY11cbiAgICAgICAgOiBbXTtcbiAgICBcbiAgICBjYyA9IFsuLi50b1JlY2lwaWVudHMsIC4uLmNjUmVjaXBpZW50c10uam9pbignLCAnKTtcbiAgfVxuXG4gIHJldHVybiB7IHRvLCBjYyB9O1xufVxuXG4vKipcbiAqIEdldCBmb3JtYXR0ZWQgaGVhZGVyIGluZm9ybWF0aW9uIGZvciByZXBseSBvciBmb3J3YXJkXG4gKi9cbmZ1bmN0aW9uIGdldEZvcm1hdHRlZEhlYWRlckluZm8oZW1haWw6IGFueSk6IHsgXG4gIGZyb21TdHI6IHN0cmluZzsgXG4gIHRvU3RyOiBzdHJpbmc7IFxuICBjY1N0cjogc3RyaW5nOyBcbiAgZGF0ZVN0cjogc3RyaW5nOyBcbiAgc3ViamVjdDogc3RyaW5nO1xufSB7XG4gIC8vIEZvcm1hdCB0aGUgc3ViamVjdFxuICBjb25zdCBzdWJqZWN0ID0gZW1haWwuc3ViamVjdCAmJiAhZW1haWwuc3ViamVjdC5zdGFydHNXaXRoKCdSZTonKSAmJiAhZW1haWwuc3ViamVjdC5zdGFydHNXaXRoKCdGd2Q6JylcbiAgICA/IGVtYWlsLnN1YmplY3RcbiAgICA6IGVtYWlsLnN1YmplY3QgfHwgJyc7XG5cbiAgLy8gRm9ybWF0IHRoZSBkYXRlXG4gIGNvbnN0IGRhdGVTdHIgPSBlbWFpbC5kYXRlID8gbmV3IERhdGUoZW1haWwuZGF0ZSkudG9Mb2NhbGVTdHJpbmcoKSA6ICdVbmtub3duIERhdGUnO1xuICBcbiAgLy8gRm9ybWF0IHNlbmRlclxuICBjb25zdCBmcm9tU3RyID0gQXJyYXkuaXNBcnJheShlbWFpbC5mcm9tKVxuICAgID8gZW1haWwuZnJvbS5tYXAoKGFkZHI6IGFueSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGFkZHIgPT09ICdzdHJpbmcnKSByZXR1cm4gYWRkcjtcbiAgICAgICAgcmV0dXJuIGFkZHIubmFtZSA/IGAke2FkZHIubmFtZX0gPCR7YWRkci5hZGRyZXNzfT5gIDogYWRkci5hZGRyZXNzO1xuICAgICAgfSkuam9pbignLCAnKVxuICAgIDogdHlwZW9mIGVtYWlsLmZyb20gPT09ICdzdHJpbmcnXG4gICAgICA/IGVtYWlsLmZyb21cbiAgICAgIDogJ1Vua25vd24gU2VuZGVyJztcbiAgXG4gIC8vIEZvcm1hdCByZWNpcGllbnRzXG4gIGNvbnN0IHRvU3RyID0gQXJyYXkuaXNBcnJheShlbWFpbC50bylcbiAgICA/IGVtYWlsLnRvLm1hcCgoYWRkcjogYW55KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgYWRkciA9PT0gJ3N0cmluZycpIHJldHVybiBhZGRyO1xuICAgICAgICByZXR1cm4gYWRkci5uYW1lID8gYCR7YWRkci5uYW1lfSA8JHthZGRyLmFkZHJlc3N9PmAgOiBhZGRyLmFkZHJlc3M7XG4gICAgICB9KS5qb2luKCcsICcpXG4gICAgOiB0eXBlb2YgZW1haWwudG8gPT09ICdzdHJpbmcnXG4gICAgICA/IGVtYWlsLnRvXG4gICAgICA6ICcnO1xuICBcbiAgLy8gRm9ybWF0IENDIFxuICBjb25zdCBjY1N0ciA9IEFycmF5LmlzQXJyYXkoZW1haWwuY2MpXG4gICAgPyBlbWFpbC5jYy5tYXAoKGFkZHI6IGFueSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGFkZHIgPT09ICdzdHJpbmcnKSByZXR1cm4gYWRkcjtcbiAgICAgICAgcmV0dXJuIGFkZHIubmFtZSA/IGAke2FkZHIubmFtZX0gPCR7YWRkci5hZGRyZXNzfT5gIDogYWRkci5hZGRyZXNzO1xuICAgICAgfSkuam9pbignLCAnKVxuICAgIDogdHlwZW9mIGVtYWlsLmNjID09PSAnc3RyaW5nJ1xuICAgICAgPyBlbWFpbC5jY1xuICAgICAgOiAnJztcblxuICByZXR1cm4geyBmcm9tU3RyLCB0b1N0ciwgY2NTdHIsIGRhdGVTdHIsIHN1YmplY3QgfTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgZW1haWwgZm9yIHJlcGx5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRSZXBseUVtYWlsKG9yaWdpbmFsRW1haWw6IEVtYWlsTWVzc2FnZSB8IExlZ2FjeUVtYWlsTWVzc2FnZSB8IG51bGwsIHR5cGU6ICdyZXBseScgfCAncmVwbHktYWxsJyA9ICdyZXBseScpOiBGb3JtYXR0ZWRFbWFpbCB7XG4gIGNvbnNvbGUubG9nKCdmb3JtYXRSZXBseUVtYWlsIGNhbGxlZDonLCB7IHR5cGUsIGVtYWlsSWQ6IG9yaWdpbmFsRW1haWw/LmlkIH0pO1xuICBcbiAgaWYgKCFvcmlnaW5hbEVtYWlsKSB7XG4gICAgY29uc29sZS53YXJuKCdmb3JtYXRSZXBseUVtYWlsOiBObyBvcmlnaW5hbCBlbWFpbCBwcm92aWRlZCcpO1xuICAgIHJldHVybiB7XG4gICAgICB0bzogJycsXG4gICAgICBzdWJqZWN0OiAnJyxcbiAgICAgIGNvbnRlbnQ6IHsgdGV4dDogJycsIGh0bWw6ICcnLCBpc0h0bWw6IGZhbHNlLCBkaXJlY3Rpb246ICdsdHInIH1cbiAgICB9O1xuICB9XG4gIFxuICAvLyBBZGFwdCBsZWdhY3kgZm9ybWF0IGlmIG5lZWRlZFxuICBjb25zdCBlbWFpbCA9ICdjb250ZW50JyBpbiBvcmlnaW5hbEVtYWlsID8gb3JpZ2luYWxFbWFpbCA6IGFkYXB0TGVnYWN5RW1haWwob3JpZ2luYWxFbWFpbCk7XG4gIFxuICAvLyBGb3JtYXQgc3ViamVjdCB3aXRoIFJlOiBwcmVmaXhcbiAgY29uc3Qgc3ViamVjdCA9IGVtYWlsLnN1YmplY3QgPyBcbiAgICAoZW1haWwuc3ViamVjdC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ3JlOicpID8gZW1haWwuc3ViamVjdCA6IGBSZTogJHtlbWFpbC5zdWJqZWN0fWApIDogXG4gICAgJ1JlOiAnO1xuICBcbiAgLy8gR2V0IHJlY2lwaWVudCBhZGRyZXNzZXNcbiAgY29uc3QgeyB0bywgY2MgfSA9IGdldFJlY2lwaWVudEFkZHJlc3NlcyhlbWFpbCwgdHlwZSk7XG4gIFxuICAvLyBHZXQgcXVvdGUgaGVhZGVyXG4gIGNvbnN0IHsgZnJvbVN0ciwgZGF0ZVN0ciB9ID0gZ2V0Rm9ybWF0dGVkSGVhZGVySW5mbyhlbWFpbCk7XG4gIFxuICAvLyBVc2UgdGhlIGZyb20gbmFtZSBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgZW1haWwgYWRkcmVzc1xuICBjb25zdCBzZW5kZXIgPSBmcm9tU3RyO1xuICBjb25zdCBkYXRlID0gZGF0ZVN0cjtcbiAgXG4gIC8vIEV4dHJhY3QgcmF3IGNvbnRlbnQgZnJvbSB0aGUgb3JpZ2luYWwgZW1haWxcbiAgY29uc3QgeyB0ZXh0OiBvcmlnaW5hbFRleHRDb250ZW50LCBodG1sOiBvcmlnaW5hbEh0bWxDb250ZW50IH0gPSBleHRyYWN0RW1haWxDb250ZW50KGVtYWlsLmNvbnRlbnQpO1xuICBcbiAgLy8gRmlyc3Qgc2FuaXRpemUgdGhlIG9yaWdpbmFsIGNvbnRlbnRcbiAgY29uc3Qgc2FuaXRpemVkQ29udGVudCA9IHNhbml0aXplSHRtbChvcmlnaW5hbEh0bWxDb250ZW50IHx8IG9yaWdpbmFsVGV4dENvbnRlbnQpO1xuICBcbiAgLy8gQnVpbGQgdGhlIHJlcGx5IHN0cnVjdHVyZSB3aXRoIHNhbml0aXplZCBidXQgbm90IHlldCBmdWxseSBmb3JtYXR0ZWQgY29udGVudFxuICBjb25zdCByZXBseVN0cnVjdHVyZSA9IGBcbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiAyMHB4IDAgMTBweCAwOyBjb2xvcjogIzY2NjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7IHBhZGRpbmctYm90dG9tOiA1cHg7XCI+XG4gICAgICBPbiAke2RhdGV9LCAke3NlbmRlcn0gd3JvdGU6XG4gICAgPC9kaXY+XG4gICAgPGJsb2NrcXVvdGUgc3R5bGU9XCJtYXJnaW46IDA7IHBhZGRpbmctbGVmdDogMTBweDsgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCAjZGRkOyBjb2xvcjogIzUwNTA1MDsgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTsgcGFkZGluZzogMTBweDtcIj5cbiAgICAgICR7c2FuaXRpemVkQ29udGVudH1cbiAgICA8L2Jsb2NrcXVvdGU+XG4gIGA7XG4gIFxuICAvLyBGb3JtYXQgcGxhaW4gdGV4dCByZXBseSBpZiBhdmFpbGFibGVcbiAgbGV0IGZvcm1hdHRlZFRleHRDb250ZW50ID0gJyc7XG4gIGlmIChvcmlnaW5hbFRleHRDb250ZW50KSB7XG4gICAgY29uc3QgbGluZXMgPSBvcmlnaW5hbFRleHRDb250ZW50LnNwbGl0KC9cXHJcXG58XFxyfFxcbi8pO1xuICAgIGZvcm1hdHRlZFRleHRDb250ZW50ID0gYE9uICR7ZGF0ZX0sICR7c2VuZGVyfSB3cm90ZTpcXG5cXG4ke2xpbmVzLm1hcChsaW5lID0+IGA+ICR7bGluZX1gKS5qb2luKCdcXG4nKX1gO1xuICB9XG4gIFxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdG8sXG4gICAgY2M6IGNjIHx8IHVuZGVmaW5lZCxcbiAgICBzdWJqZWN0LFxuICAgIGNvbnRlbnQ6IHtcbiAgICAgIGh0bWw6IHJlcGx5U3RydWN0dXJlLFxuICAgICAgdGV4dDogZm9ybWF0dGVkVGV4dENvbnRlbnQgfHwgb3JpZ2luYWxUZXh0Q29udGVudCxcbiAgICAgIGlzSHRtbDogdHJ1ZSxcbiAgICAgIGRpcmVjdGlvbjogdHlwZW9mIGVtYWlsLmNvbnRlbnQgPT09ICdvYmplY3QnICYmIGVtYWlsLmNvbnRlbnQgPyBlbWFpbC5jb250ZW50LmRpcmVjdGlvbiB8fCAnbHRyJyA6ICdsdHInLFxuICAgIH0sXG4gICAgYXR0YWNobWVudHM6IGVtYWlsLmF0dGFjaG1lbnRzPy5tYXAoYXR0ID0+IHtcbiAgICAgIC8vIENyZWF0ZSBwcm9wZXJseSB0eXBlZCBhdHRhY2htZW50XG4gICAgICBpZiAoJ25hbWUnIGluIGF0dCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpbGVuYW1lOiBhdHQuZmlsZW5hbWUgfHwgYXR0Lm5hbWUgfHwgJ2F0dGFjaG1lbnQnLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiBhdHQuY29udGVudFR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXG4gICAgICAgICAgY29udGVudDogYXR0LmNvbnRlbnRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGVuYW1lOiBhdHQuZmlsZW5hbWUgfHwgJ2F0dGFjaG1lbnQnLFxuICAgICAgICBjb250ZW50VHlwZTogYXR0LmNvbnRlbnRUeXBlIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLFxuICAgICAgICBjb250ZW50OiBhdHQuY29udGVudFxuICAgICAgfTtcbiAgICB9KVxuICB9O1xuICBcbiAgY29uc29sZS5sb2coJ2Zvcm1hdFJlcGx5RW1haWwgcmVzdWx0OicsIHsgXG4gICAgdG86IHJlc3VsdC50bywgXG4gICAgc3ViamVjdDogcmVzdWx0LnN1YmplY3QsXG4gICAgaGFzSHRtbDogISFyZXN1bHQuY29udGVudC5odG1sLFxuICAgIGh0bWxMZW5ndGg6IHJlc3VsdC5jb250ZW50Lmh0bWw/Lmxlbmd0aCB8fCAwLCBcbiAgICBoYXNUZXh0OiAhIXJlc3VsdC5jb250ZW50LnRleHQsXG4gICAgdGV4dExlbmd0aDogcmVzdWx0LmNvbnRlbnQudGV4dD8ubGVuZ3RoIHx8IDBcbiAgfSk7XG4gIFxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEZvcm1hdCBlbWFpbCBmb3IgZm9yd2FyZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Rm9yd2FyZGVkRW1haWwob3JpZ2luYWxFbWFpbDogRW1haWxNZXNzYWdlIHwgTGVnYWN5RW1haWxNZXNzYWdlIHwgbnVsbCk6IEZvcm1hdHRlZEVtYWlsIHtcbiAgY29uc29sZS5sb2coJ2Zvcm1hdEZvcndhcmRlZEVtYWlsIGNhbGxlZDonLCB7IGVtYWlsSWQ6IG9yaWdpbmFsRW1haWw/LmlkIH0pO1xuICBcbiAgaWYgKCFvcmlnaW5hbEVtYWlsKSB7XG4gICAgY29uc29sZS53YXJuKCdmb3JtYXRGb3J3YXJkZWRFbWFpbDogTm8gb3JpZ2luYWwgZW1haWwgcHJvdmlkZWQnKTtcbiAgICByZXR1cm4ge1xuICAgICAgdG86ICcnLFxuICAgICAgc3ViamVjdDogJycsXG4gICAgICBjb250ZW50OiB7IHRleHQ6ICcnLCBodG1sOiAnJywgaXNIdG1sOiBmYWxzZSwgZGlyZWN0aW9uOiAnbHRyJyB9XG4gICAgfTtcbiAgfVxuICBcbiAgLy8gQWRhcHQgbGVnYWN5IGZvcm1hdCBpZiBuZWVkZWRcbiAgY29uc3QgZW1haWwgPSAnY29udGVudCcgaW4gb3JpZ2luYWxFbWFpbCA/IG9yaWdpbmFsRW1haWwgOiBhZGFwdExlZ2FjeUVtYWlsKG9yaWdpbmFsRW1haWwpO1xuICBcbiAgLy8gRm9ybWF0IHN1YmplY3Qgd2l0aCBGd2Q6IHByZWZpeFxuICBjb25zdCBzdWJqZWN0ID0gZW1haWwuc3ViamVjdCA/IFxuICAgIChlbWFpbC5zdWJqZWN0LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnZndkOicpID8gZW1haWwuc3ViamVjdCA6IGBGd2Q6ICR7ZW1haWwuc3ViamVjdH1gKSA6IFxuICAgICdGd2Q6ICc7XG4gIFxuICAvLyBHZXQgb3JpZ2luYWwgZW1haWwgaW5mbyBmb3IgaGVhZGVyc1xuICBjb25zdCB7IGZyb21TdHIsIHRvU3RyLCBjY1N0ciwgZGF0ZVN0ciB9ID0gZ2V0Rm9ybWF0dGVkSGVhZGVySW5mbyhlbWFpbCk7XG4gIFxuICBjb25zb2xlLmxvZygnRm9yd2FyZCBoZWFkZXIgaW5mbzonLCB7IGZyb21TdHIsIHRvU3RyLCBkYXRlU3RyLCBzdWJqZWN0IH0pO1xuICBcbiAgLy8gT3JpZ2luYWwgc2VudCBkYXRlXG4gIGNvbnN0IGRhdGUgPSBkYXRlU3RyO1xuICBcbiAgLy8gRXh0cmFjdCByYXcgY29udGVudCBmcm9tIHRoZSBvcmlnaW5hbCBlbWFpbFxuICBjb25zdCB7IHRleHQ6IG9yaWdpbmFsVGV4dENvbnRlbnQsIGh0bWw6IG9yaWdpbmFsSHRtbENvbnRlbnQgfSA9IGV4dHJhY3RFbWFpbENvbnRlbnQoZW1haWwuY29udGVudCk7XG4gIFxuICAvLyBGaXJzdCBzYW5pdGl6ZSB0aGUgb3JpZ2luYWwgY29udGVudFxuICBjb25zdCBzYW5pdGl6ZWRDb250ZW50ID0gc2FuaXRpemVIdG1sKG9yaWdpbmFsSHRtbENvbnRlbnQgfHwgb3JpZ2luYWxUZXh0Q29udGVudCk7XG4gIFxuICAvLyBCdWlsZCB0aGUgZm9yd2FyZCBzdHJ1Y3R1cmUgd2l0aCBzYW5pdGl6ZWQgYnV0IG5vdCB5ZXQgZnVsbHkgZm9ybWF0dGVkIGNvbnRlbnRcbiAgY29uc3QgZm9yd2FyZFN0cnVjdHVyZSA9IGBcbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiAyMHB4IDAgMTBweCAwOyBjb2xvcjogIzY2NjsgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmO1wiPlxuICAgICAgLS0tLS0tLS0tLSBGb3J3YXJkZWQgbWVzc2FnZSAtLS0tLS0tLS0tPGJyPlxuICAgICAgPHRhYmxlIHN0eWxlPVwibWFyZ2luOiAxMHB4IDAgMTVweCAwOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBmb250LXNpemU6IDEzcHg7IGNvbG9yOiAjMzMzO1wiPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOiAzcHggMTBweCAzcHggMDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtYWxpZ246IHJpZ2h0OyB2ZXJ0aWNhbC1hbGlnbjogdG9wO1wiPkZyb206PC90ZD5cbiAgICAgICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOiAzcHggMDtcIj4ke2Zyb21TdHJ9PC90ZD5cbiAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6IDNweCAxMHB4IDNweCAwOyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiB0b3A7XCI+RGF0ZTo8L3RkPlxuICAgICAgICAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6IDNweCAwO1wiPiR7ZGF0ZX08L3RkPlxuICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzogM3B4IDEwcHggM3B4IDA7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiByaWdodDsgdmVydGljYWwtYWxpZ246IHRvcDtcIj5TdWJqZWN0OjwvdGQ+XG4gICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzogM3B4IDA7XCI+JHtlbWFpbC5zdWJqZWN0IHx8ICcnfTwvdGQ+XG4gICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOiAzcHggMTBweCAzcHggMDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtYWxpZ246IHJpZ2h0OyB2ZXJ0aWNhbC1hbGlnbjogdG9wO1wiPlRvOjwvdGQ+XG4gICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzogM3B4IDA7XCI+JHt0b1N0cn08L3RkPlxuICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAke2NjU3RyID8gYFxuICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzogM3B4IDEwcHggM3B4IDA7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiByaWdodDsgdmVydGljYWwtYWxpZ246IHRvcDtcIj5DYzo8L3RkPlxuICAgICAgICAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6IDNweCAwO1wiPiR7Y2NTdHJ9PC90ZD5cbiAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgYCA6ICcnfVxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8YmxvY2txdW90ZSBzdHlsZT1cIm1hcmdpbjogMDsgcGFkZGluZy1sZWZ0OiAxMHB4OyBib3JkZXItbGVmdDogM3B4IHNvbGlkICNkZGQ7IGNvbG9yOiAjNTA1MDUwOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5OyBwYWRkaW5nOiAxMHB4O1wiPlxuICAgICAgJHtzYW5pdGl6ZWRDb250ZW50fVxuICAgIDwvYmxvY2txdW90ZT5cbiAgYDtcbiAgXG4gIC8vIEZvcm1hdCBwbGFpbiB0ZXh0IHZlcnNpb25cbiAgbGV0IGZvcm1hdHRlZFRleHRDb250ZW50ID0gJyc7XG4gIGlmIChvcmlnaW5hbFRleHRDb250ZW50KSB7XG4gICAgZm9ybWF0dGVkVGV4dENvbnRlbnQgPSBgXG4tLS0tLS0tLS0tIEZvcndhcmRlZCBtZXNzYWdlIC0tLS0tLS0tLS1cbkZyb206ICR7ZnJvbVN0cn1cbkRhdGU6ICR7ZGF0ZX1cblN1YmplY3Q6ICR7ZW1haWwuc3ViamVjdCB8fCAnJ31cblRvOiAke3RvU3RyfVxuJHtjY1N0ciA/IGBDYzogJHtjY1N0cn1cXG5gIDogJyd9XG5cbiR7b3JpZ2luYWxUZXh0Q29udGVudH1cbiAgICBgLnRyaW0oKTtcbiAgfVxuICBcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHRvOiAnJyxcbiAgICBzdWJqZWN0LFxuICAgIGNvbnRlbnQ6IHtcbiAgICAgIGh0bWw6IGZvcndhcmRTdHJ1Y3R1cmUsXG4gICAgICB0ZXh0OiBmb3JtYXR0ZWRUZXh0Q29udGVudCB8fCBvcmlnaW5hbFRleHRDb250ZW50LFxuICAgICAgaXNIdG1sOiB0cnVlLFxuICAgICAgZGlyZWN0aW9uOiB0eXBlb2YgZW1haWwuY29udGVudCA9PT0gJ29iamVjdCcgJiYgZW1haWwuY29udGVudCA/IGVtYWlsLmNvbnRlbnQuZGlyZWN0aW9uIHx8ICdsdHInIDogJ2x0cicsXG4gICAgfSxcbiAgICBhdHRhY2htZW50czogZW1haWwuYXR0YWNobWVudHM/Lm1hcChhdHQgPT4ge1xuICAgICAgLy8gQ3JlYXRlIHByb3Blcmx5IHR5cGVkIGF0dGFjaG1lbnRcbiAgICAgIGlmICgnbmFtZScgaW4gYXR0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZmlsZW5hbWU6IGF0dC5maWxlbmFtZSB8fCBhdHQubmFtZSB8fCAnYXR0YWNobWVudCcsXG4gICAgICAgICAgY29udGVudFR5cGU6IGF0dC5jb250ZW50VHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyxcbiAgICAgICAgICBjb250ZW50OiBhdHQuY29udGVudFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZW5hbWU6IGF0dC5maWxlbmFtZSB8fCAnYXR0YWNobWVudCcsXG4gICAgICAgIGNvbnRlbnRUeXBlOiBhdHQuY29udGVudFR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXG4gICAgICAgIGNvbnRlbnQ6IGF0dC5jb250ZW50XG4gICAgICB9O1xuICAgIH0pXG4gIH07XG4gIFxuICBjb25zb2xlLmxvZygnZm9ybWF0Rm9yd2FyZGVkRW1haWwgcmVzdWx0OicsIHsgXG4gICAgc3ViamVjdDogcmVzdWx0LnN1YmplY3QsXG4gICAgaGFzSHRtbDogISFyZXN1bHQuY29udGVudC5odG1sLFxuICAgIGh0bWxMZW5ndGg6IHJlc3VsdC5jb250ZW50Lmh0bWw/Lmxlbmd0aCB8fCAwLCBcbiAgICBoYXNUZXh0OiAhIXJlc3VsdC5jb250ZW50LnRleHQsXG4gICAgdGV4dExlbmd0aDogcmVzdWx0LmNvbnRlbnQudGV4dD8ubGVuZ3RoIHx8IDBcbiAgfSk7XG4gIFxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEZvcm1hdCBhbiBlbWFpbCBmb3IgcmVwbHkgb3IgcmVwbHktYWxsIC0gY2Fub25pY2FsIGltcGxlbWVudGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRFbWFpbEZvclJlcGx5T3JGb3J3YXJkKFxuICBlbWFpbDogRW1haWxNZXNzYWdlIHwgTGVnYWN5RW1haWxNZXNzYWdlIHwgbnVsbCwgXG4gIHR5cGU6ICdyZXBseScgfCAncmVwbHktYWxsJyB8ICdmb3J3YXJkJ1xuKTogRm9ybWF0dGVkRW1haWwge1xuICAvLyBVc2Ugb3VyIGRlZGljYXRlZCBmb3JtYXR0ZXJzXG4gIGlmICh0eXBlID09PSAnZm9yd2FyZCcpIHtcbiAgICByZXR1cm4gZm9ybWF0Rm9yd2FyZGVkRW1haWwoZW1haWwpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmb3JtYXRSZXBseUVtYWlsKGVtYWlsLCB0eXBlIGFzICdyZXBseScgfCAncmVwbHktYWxsJyk7XG4gIH1cbn0gXG4iXSwibmFtZXMiOlsic2FuaXRpemVIdG1sIiwiZGV0ZWN0VGV4dERpcmVjdGlvbiIsImFwcGx5VGV4dERpcmVjdGlvbiIsImV4dHJhY3RFbWFpbENvbnRlbnQiLCJmb3JtYXRFbWFpbENvbnRlbnQiLCJwcm9jZXNzSHRtbENvbnRlbnQiLCJmb3JtYXRQbGFpblRleHRUb0h0bWwiLCJhZGFwdExlZ2FjeUVtYWlsIiwiYWRhcHRNaW1lRW1haWwiLCJpc01pbWVGb3JtYXQiLCJmb3JtYXRFbWFpbEFkZHJlc3NlcyIsImFkZHJlc3NlcyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsIm1hcCIsImFkZHIiLCJuYW1lIiwiYWRkcmVzcyIsImpvaW4iLCJmb3JtYXRFbWFpbERhdGUiLCJkYXRlIiwiZGF0ZU9iaiIsIkRhdGUiLCJ0b0xvY2FsZVN0cmluZyIsIndlZWtkYXkiLCJ5ZWFyIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwiZSIsInRvU3RyaW5nIiwibm9ybWFsaXplRW1haWxDb250ZW50IiwiZW1haWwiLCJFcnJvciIsImNvbnRlbnQiLCJjb25zb2xlIiwibG9nIiwiYWRhcHRlZEVtYWlsIiwiZmxhZ3MiLCJlcnJvciIsImh0bWwiLCJ1bmRlZmluZWQiLCJ0ZXh0IiwicmVuZGVyRW1haWxDb250ZW50IiwiZW1haWxPYmoiLCJnZXRSZWNpcGllbnRBZGRyZXNzZXMiLCJ0eXBlIiwidG8iLCJmcm9tIiwiZmlsdGVyIiwiQm9vbGVhbiIsImNjIiwidG9SZWNpcGllbnRzIiwiY2NSZWNpcGllbnRzIiwiZ2V0Rm9ybWF0dGVkSGVhZGVySW5mbyIsInN1YmplY3QiLCJzdGFydHNXaXRoIiwiZGF0ZVN0ciIsImZyb21TdHIiLCJ0b1N0ciIsImNjU3RyIiwiZm9ybWF0UmVwbHlFbWFpbCIsIm9yaWdpbmFsRW1haWwiLCJlbWFpbElkIiwiaWQiLCJ3YXJuIiwiaXNIdG1sIiwiZGlyZWN0aW9uIiwidG9Mb3dlckNhc2UiLCJzZW5kZXIiLCJvcmlnaW5hbFRleHRDb250ZW50Iiwib3JpZ2luYWxIdG1sQ29udGVudCIsInNhbml0aXplZENvbnRlbnQiLCJyZXBseVN0cnVjdHVyZSIsImZvcm1hdHRlZFRleHRDb250ZW50IiwibGluZXMiLCJzcGxpdCIsImxpbmUiLCJyZXN1bHQiLCJhdHRhY2htZW50cyIsImF0dCIsImZpbGVuYW1lIiwiY29udGVudFR5cGUiLCJoYXNIdG1sIiwiaHRtbExlbmd0aCIsImhhc1RleHQiLCJ0ZXh0TGVuZ3RoIiwiZm9ybWF0Rm9yd2FyZGVkRW1haWwiLCJmb3J3YXJkU3RydWN0dXJlIiwidHJpbSIsImZvcm1hdEVtYWlsRm9yUmVwbHlPckZvcndhcmQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./lib/utils/email-utils.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./lib/utils/text-direction.ts":
|
|
/*!*************************************!*\
|
|
!*** ./lib/utils/text-direction.ts ***!
|
|
\*************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ applyTextDirection: () => (/* binding */ applyTextDirection),\n/* harmony export */ detectTextDirection: () => (/* binding */ detectTextDirection)\n/* harmony export */ });\n/**\n * Text Direction Utilities\n * \n * Core utilities for handling text direction (RTL/LTR)\n * to ensure consistent behavior across the application.\n */ /**\n * Detects if text contains RTL characters and should be displayed right-to-left\n * Uses a comprehensive regex pattern that covers Arabic, Hebrew, and other RTL scripts\n * \n * @param text Text to analyze for direction\n * @returns 'rtl' if RTL characters are detected, otherwise 'ltr'\n */ function detectTextDirection(text) {\n if (!text) return 'ltr';\n // Comprehensive pattern for RTL languages:\n // - Arabic (0600-06FF, FB50-FDFF, FE70-FEFF)\n // - Hebrew (0590-05FF, FB1D-FB4F)\n // - RTL marks and controls (200F, 202B, 202E)\n const rtlPattern = /[\\u0591-\\u07FF\\u200F\\u202B\\u202E\\uFB1D-\\uFDFD\\uFE70-\\uFEFC]/;\n return rtlPattern.test(text) ? 'rtl' : 'ltr';\n}\n/**\n * Adds appropriate direction attribute to HTML content based on content analysis\n * \n * @param htmlContent HTML content to analyze and enhance with direction\n * @param textContent Plain text version for direction analysis (optional)\n * @returns HTML with appropriate direction attribute\n */ function applyTextDirection(htmlContent, textContent) {\n if (!htmlContent) return '';\n // If text content is provided, use it for direction detection\n // Otherwise extract text from HTML for direction detection\n const textForAnalysis = textContent || htmlContent.replace(/<[^>]*>/g, '').replace(/ /g, ' ').replace(/</g, '<').replace(/>/g, '>').replace(/&/g, '&');\n const direction = detectTextDirection(textForAnalysis);\n // If the HTML already has a dir attribute, don't override it\n if (htmlContent.includes('dir=\"rtl\"') || htmlContent.includes('dir=\"ltr\"')) {\n return htmlContent;\n }\n // Check if we already have an email-content wrapper\n if (htmlContent.startsWith('<div class=\"email-content')) {\n // Replace opening div with one that includes direction\n return htmlContent.replace(/<div class=\"email-content([^\"]*)\"/, `<div class=\"email-content$1\" dir=\"${direction}\"`);\n }\n // Otherwise, wrap the content with a direction-aware container\n return `<div class=\"email-content\" dir=\"${direction}\">${htmlContent}</div>`;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9saWIvdXRpbHMvdGV4dC1kaXJlY3Rpb24udHMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Q0FLQyxHQUVEOzs7Ozs7Q0FNQyxHQUNNLFNBQVNBLG9CQUFvQkMsSUFBK0I7SUFDakUsSUFBSSxDQUFDQSxNQUFNLE9BQU87SUFFbEIsMkNBQTJDO0lBQzNDLDZDQUE2QztJQUM3QyxrQ0FBa0M7SUFDbEMsOENBQThDO0lBQzlDLE1BQU1DLGFBQWE7SUFFbkIsT0FBT0EsV0FBV0MsSUFBSSxDQUFDRixRQUFRLFFBQVE7QUFDekM7QUFFQTs7Ozs7O0NBTUMsR0FDTSxTQUFTRyxtQkFBbUJDLFdBQW1CLEVBQUVDLFdBQW9CO0lBQzFFLElBQUksQ0FBQ0QsYUFBYSxPQUFPO0lBRXpCLDhEQUE4RDtJQUM5RCwyREFBMkQ7SUFDM0QsTUFBTUUsa0JBQWtCRCxlQUN0QkQsWUFBWUcsT0FBTyxDQUFDLFlBQVksSUFDcEJBLE9BQU8sQ0FBQyxXQUFXLEtBQ25CQSxPQUFPLENBQUMsU0FBUyxLQUNqQkEsT0FBTyxDQUFDLFNBQVMsS0FDakJBLE9BQU8sQ0FBQyxVQUFVO0lBRWhDLE1BQU1DLFlBQVlULG9CQUFvQk87SUFFdEMsNkRBQTZEO0lBQzdELElBQUlGLFlBQVlLLFFBQVEsQ0FBQyxnQkFBZ0JMLFlBQVlLLFFBQVEsQ0FBQyxjQUFjO1FBQzFFLE9BQU9MO0lBQ1Q7SUFFQSxvREFBb0Q7SUFDcEQsSUFBSUEsWUFBWU0sVUFBVSxDQUFDLDhCQUE4QjtRQUN2RCx1REFBdUQ7UUFDdkQsT0FBT04sWUFBWUcsT0FBTyxDQUN4QixxQ0FDQSxDQUFDLGtDQUFrQyxFQUFFQyxVQUFVLENBQUMsQ0FBQztJQUVyRDtJQUVBLCtEQUErRDtJQUMvRCxPQUFPLENBQUMsZ0NBQWdDLEVBQUVBLFVBQVUsRUFBRSxFQUFFSixZQUFZLE1BQU0sQ0FBQztBQUM3RSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9saWIvdXRpbHMvdGV4dC1kaXJlY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUZXh0IERpcmVjdGlvbiBVdGlsaXRpZXNcbiAqIFxuICogQ29yZSB1dGlsaXRpZXMgZm9yIGhhbmRsaW5nIHRleHQgZGlyZWN0aW9uIChSVEwvTFRSKVxuICogdG8gZW5zdXJlIGNvbnNpc3RlbnQgYmVoYXZpb3IgYWNyb3NzIHRoZSBhcHBsaWNhdGlvbi5cbiAqL1xuXG4vKipcbiAqIERldGVjdHMgaWYgdGV4dCBjb250YWlucyBSVEwgY2hhcmFjdGVycyBhbmQgc2hvdWxkIGJlIGRpc3BsYXllZCByaWdodC10by1sZWZ0XG4gKiBVc2VzIGEgY29tcHJlaGVuc2l2ZSByZWdleCBwYXR0ZXJuIHRoYXQgY292ZXJzIEFyYWJpYywgSGVicmV3LCBhbmQgb3RoZXIgUlRMIHNjcmlwdHNcbiAqIFxuICogQHBhcmFtIHRleHQgVGV4dCB0byBhbmFseXplIGZvciBkaXJlY3Rpb25cbiAqIEByZXR1cm5zICdydGwnIGlmIFJUTCBjaGFyYWN0ZXJzIGFyZSBkZXRlY3RlZCwgb3RoZXJ3aXNlICdsdHInXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RUZXh0RGlyZWN0aW9uKHRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiAnbHRyJyB8ICdydGwnIHtcbiAgaWYgKCF0ZXh0KSByZXR1cm4gJ2x0cic7XG4gIFxuICAvLyBDb21wcmVoZW5zaXZlIHBhdHRlcm4gZm9yIFJUTCBsYW5ndWFnZXM6XG4gIC8vIC0gQXJhYmljICgwNjAwLTA2RkYsIEZCNTAtRkRGRiwgRkU3MC1GRUZGKVxuICAvLyAtIEhlYnJldyAoMDU5MC0wNUZGLCBGQjFELUZCNEYpXG4gIC8vIC0gUlRMIG1hcmtzIGFuZCBjb250cm9scyAoMjAwRiwgMjAyQiwgMjAyRSlcbiAgY29uc3QgcnRsUGF0dGVybiA9IC9bXFx1MDU5MS1cXHUwN0ZGXFx1MjAwRlxcdTIwMkJcXHUyMDJFXFx1RkIxRC1cXHVGREZEXFx1RkU3MC1cXHVGRUZDXS87XG4gIFxuICByZXR1cm4gcnRsUGF0dGVybi50ZXN0KHRleHQpID8gJ3J0bCcgOiAnbHRyJztcbn1cblxuLyoqXG4gKiBBZGRzIGFwcHJvcHJpYXRlIGRpcmVjdGlvbiBhdHRyaWJ1dGUgdG8gSFRNTCBjb250ZW50IGJhc2VkIG9uIGNvbnRlbnQgYW5hbHlzaXNcbiAqIFxuICogQHBhcmFtIGh0bWxDb250ZW50IEhUTUwgY29udGVudCB0byBhbmFseXplIGFuZCBlbmhhbmNlIHdpdGggZGlyZWN0aW9uXG4gKiBAcGFyYW0gdGV4dENvbnRlbnQgUGxhaW4gdGV4dCB2ZXJzaW9uIGZvciBkaXJlY3Rpb24gYW5hbHlzaXMgKG9wdGlvbmFsKVxuICogQHJldHVybnMgSFRNTCB3aXRoIGFwcHJvcHJpYXRlIGRpcmVjdGlvbiBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5VGV4dERpcmVjdGlvbihodG1sQ29udGVudDogc3RyaW5nLCB0ZXh0Q29udGVudD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaHRtbENvbnRlbnQpIHJldHVybiAnJztcbiAgXG4gIC8vIElmIHRleHQgY29udGVudCBpcyBwcm92aWRlZCwgdXNlIGl0IGZvciBkaXJlY3Rpb24gZGV0ZWN0aW9uXG4gIC8vIE90aGVyd2lzZSBleHRyYWN0IHRleHQgZnJvbSBIVE1MIGZvciBkaXJlY3Rpb24gZGV0ZWN0aW9uXG4gIGNvbnN0IHRleHRGb3JBbmFseXNpcyA9IHRleHRDb250ZW50IHx8IFxuICAgIGh0bWxDb250ZW50LnJlcGxhY2UoLzxbXj5dKj4vZywgJycpXG4gICAgICAgICAgICAgICAucmVwbGFjZSgvJm5ic3A7L2csICcgJylcbiAgICAgICAgICAgICAgIC5yZXBsYWNlKC8mbHQ7L2csICc8JylcbiAgICAgICAgICAgICAgIC5yZXBsYWNlKC8mZ3Q7L2csICc+JylcbiAgICAgICAgICAgICAgIC5yZXBsYWNlKC8mYW1wOy9nLCAnJicpO1xuICAgICAgICAgICAgICAgXG4gIGNvbnN0IGRpcmVjdGlvbiA9IGRldGVjdFRleHREaXJlY3Rpb24odGV4dEZvckFuYWx5c2lzKTtcbiAgXG4gIC8vIElmIHRoZSBIVE1MIGFscmVhZHkgaGFzIGEgZGlyIGF0dHJpYnV0ZSwgZG9uJ3Qgb3ZlcnJpZGUgaXRcbiAgaWYgKGh0bWxDb250ZW50LmluY2x1ZGVzKCdkaXI9XCJydGxcIicpIHx8IGh0bWxDb250ZW50LmluY2x1ZGVzKCdkaXI9XCJsdHJcIicpKSB7XG4gICAgcmV0dXJuIGh0bWxDb250ZW50O1xuICB9XG4gIFxuICAvLyBDaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgYW4gZW1haWwtY29udGVudCB3cmFwcGVyXG4gIGlmIChodG1sQ29udGVudC5zdGFydHNXaXRoKCc8ZGl2IGNsYXNzPVwiZW1haWwtY29udGVudCcpKSB7XG4gICAgLy8gUmVwbGFjZSBvcGVuaW5nIGRpdiB3aXRoIG9uZSB0aGF0IGluY2x1ZGVzIGRpcmVjdGlvblxuICAgIHJldHVybiBodG1sQ29udGVudC5yZXBsYWNlKFxuICAgICAgLzxkaXYgY2xhc3M9XCJlbWFpbC1jb250ZW50KFteXCJdKilcIi8sXG4gICAgICBgPGRpdiBjbGFzcz1cImVtYWlsLWNvbnRlbnQkMVwiIGRpcj1cIiR7ZGlyZWN0aW9ufVwiYFxuICAgICk7XG4gIH1cbiAgXG4gIC8vIE90aGVyd2lzZSwgd3JhcCB0aGUgY29udGVudCB3aXRoIGEgZGlyZWN0aW9uLWF3YXJlIGNvbnRhaW5lclxuICByZXR1cm4gYDxkaXYgY2xhc3M9XCJlbWFpbC1jb250ZW50XCIgZGlyPVwiJHtkaXJlY3Rpb259XCI+JHtodG1sQ29udGVudH08L2Rpdj5gO1xufSAiXSwibmFtZXMiOlsiZGV0ZWN0VGV4dERpcmVjdGlvbiIsInRleHQiLCJydGxQYXR0ZXJuIiwidGVzdCIsImFwcGx5VGV4dERpcmVjdGlvbiIsImh0bWxDb250ZW50IiwidGV4dENvbnRlbnQiLCJ0ZXh0Rm9yQW5hbHlzaXMiLCJyZXBsYWNlIiwiZGlyZWN0aW9uIiwiaW5jbHVkZXMiLCJzdGFydHNXaXRoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./lib/utils/text-direction.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fapp%2Fcourrier%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true!":
|
|
/*!********************************************************************************************************************************************************************************************************************************!*\
|
|
!*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fapp%2Fcourrier%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***!
|
|
\********************************************************************************************************************************************************************************************************************************/
|
|
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/courrier/page.tsx */ \"(ssr)/./app/courrier/page.tsx\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRmFwcCUyRmNvdXJyaWVyJTJGcGFnZS50c3glMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0Qmc2VydmVyPXRydWUhIiwibWFwcGluZ3MiOiJBQUFBLDBKQUF1RiIsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9hcHAvY291cnJpZXIvcGFnZS50c3hcIik7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fapp%2Fcourrier%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true!\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fcomponents%2Flayout%2Flayout-wrapper.tsx%22%2C%22ids%22%3A%5B%22LayoutWrapper%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fcomponents%2Fproviders.tsx%22%2C%22ids%22%3A%5B%22Providers%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%5C%22path%5C%22%3A%5C%22app%2Flayout.tsx%5C%22%2C%5C%22import%5C%22%3A%5C%22Inter%5C%22%2C%5C%22arguments%5C%22%3A%5B%7B%5C%22subsets%5C%22%3A%5B%5C%22latin%5C%22%5D%7D%5D%2C%5C%22variableName%5C%22%3A%5C%22inter%5C%22%7D%22%2C%22ids%22%3A%5B%5D%7D&server=true!":
|
|
/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
|
|
!*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fcomponents%2Flayout%2Flayout-wrapper.tsx%22%2C%22ids%22%3A%5B%22LayoutWrapper%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fcomponents%2Fproviders.tsx%22%2C%22ids%22%3A%5B%22Providers%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%5C%22path%5C%22%3A%5C%22app%2Flayout.tsx%5C%22%2C%5C%22import%5C%22%3A%5C%22Inter%5C%22%2C%5C%22arguments%5C%22%3A%5B%7B%5C%22subsets%5C%22%3A%5B%5C%22latin%5C%22%5D%7D%5D%2C%5C%22variableName%5C%22%3A%5C%22inter%5C%22%7D%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***!
|
|
\*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
|
|
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./components/layout/layout-wrapper.tsx */ \"(ssr)/./components/layout/layout-wrapper.tsx\"));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./components/providers.tsx */ \"(ssr)/./components/providers.tsx\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRmFwcCUyRmdsb2JhbHMuY3NzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRmNvbXBvbmVudHMlMkZsYXlvdXQlMkZsYXlvdXQtd3JhcHBlci50c3glMjIlMkMlMjJpZHMlMjIlM0ElNUIlMjJMYXlvdXRXcmFwcGVyJTIyJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRmNvbXBvbmVudHMlMkZwcm92aWRlcnMudHN4JTIyJTJDJTIyaWRzJTIyJTNBJTVCJTIyUHJvdmlkZXJzJTIyJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZmb250JTJGZ29vZ2xlJTJGdGFyZ2V0LmNzcyUzRiU3QiU1QyUyMnBhdGglNUMlMjIlM0ElNUMlMjJhcHAlMkZsYXlvdXQudHN4JTVDJTIyJTJDJTVDJTIyaW1wb3J0JTVDJTIyJTNBJTVDJTIySW50ZXIlNUMlMjIlMkMlNUMlMjJhcmd1bWVudHMlNUMlMjIlM0ElNUIlN0IlNUMlMjJzdWJzZXRzJTVDJTIyJTNBJTVCJTVDJTIybGF0aW4lNUMlMjIlNUQlN0QlNUQlMkMlNUMlMjJ2YXJpYWJsZU5hbWUlNUMlMjIlM0ElNUMlMjJpbnRlciU1QyUyMiU3RCUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZzZXJ2ZXI9dHJ1ZSEiLCJtYXBwaW5ncyI6IkFBQUEsd0xBQXlJO0FBQ3pJO0FBQ0EsZ0tBQXlIIiwic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIsIHdlYnBhY2tFeHBvcnRzOiBbXCJMYXlvdXRXcmFwcGVyXCJdICovIFwiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9jb21wb25lbnRzL2xheW91dC9sYXlvdXQtd3JhcHBlci50c3hcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiwgd2VicGFja0V4cG9ydHM6IFtcIlByb3ZpZGVyc1wiXSAqLyBcIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvY29tcG9uZW50cy9wcm92aWRlcnMudHN4XCIpO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fcomponents%2Flayout%2Flayout-wrapper.tsx%22%2C%22ids%22%3A%5B%22LayoutWrapper%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fcomponents%2Fproviders.tsx%22%2C%22ids%22%3A%5B%22Providers%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%5C%22path%5C%22%3A%5C%22app%2Flayout.tsx%5C%22%2C%5C%22import%5C%22%3A%5C%22Inter%5C%22%2C%5C%22arguments%5C%22%3A%5B%7B%5C%22subsets%5C%22%3A%5B%5C%22latin%5C%22%5D%7D%5D%2C%5C%22variableName%5C%22%3A%5C%22inter%5C%22%7D%22%2C%22ids%22%3A%5B%5D%7D&server=true!\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-segment.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fhttp-access-fallback%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fmetadata%2Fasync-metadata.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fmetadata%2Fmetadata-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true!":
|
|
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
|
|
!*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-segment.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fhttp-access-fallback%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fmetadata%2Fasync-metadata.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fmetadata%2Fmetadata-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***!
|
|
\****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
|
|
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/client-page.js */ \"(ssr)/./node_modules/next/dist/client/components/client-page.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/client-segment.js */ \"(ssr)/./node_modules/next/dist/client/components/client-segment.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/error-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/error-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/http-access-fallback/error-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/http-access-fallback/error-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/layout-router.js */ \"(ssr)/./node_modules/next/dist/client/components/layout-router.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/metadata/async-metadata.js */ \"(ssr)/./node_modules/next/dist/client/components/metadata/async-metadata.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/metadata/metadata-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/metadata/metadata-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/render-from-template-context.js */ \"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js\", 23));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRmNsaWVudC1wYWdlLmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRmNsaWVudC1zZWdtZW50LmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRmVycm9yLWJvdW5kYXJ5LmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRmh0dHAtYWNjZXNzLWZhbGxiYWNrJTJGZXJyb3ItYm91bmRhcnkuanMlMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0QmbW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGaG9tZSUyRmFsbWElMkZuZXh0Z2VuJTJGTmVhaC1tYWlsJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGbGF5b3V0LXJvdXRlci5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZtb2R1bGVzPSU3QiUyMnJlcXVlc3QlMjIlM0ElMjIlMkZob21lJTJGYWxtYSUyRm5leHRnZW4lMkZOZWFoLW1haWwlMkZub2RlX21vZHVsZXMlMkZuZXh0JTJGZGlzdCUyRmNsaWVudCUyRmNvbXBvbmVudHMlMkZtZXRhZGF0YSUyRmFzeW5jLW1ldGFkYXRhLmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZhbG1hJTJGbmV4dGdlbiUyRk5lYWgtbWFpbCUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRm1ldGFkYXRhJTJGbWV0YWRhdGEtYm91bmRhcnkuanMlMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0QmbW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGaG9tZSUyRmFsbWElMkZuZXh0Z2VuJTJGTmVhaC1tYWlsJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGcmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dC5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZzZXJ2ZXI9dHJ1ZSEiLCJtYXBwaW5ncyI6IkFBQUEsb09BQXlIO0FBQ3pIO0FBQ0EsME9BQTRIO0FBQzVIO0FBQ0EsME9BQTRIO0FBQzVIO0FBQ0Esb1JBQWlKO0FBQ2pKO0FBQ0Esd09BQTJIO0FBQzNIO0FBQ0EsNFBBQXFJO0FBQ3JJO0FBQ0Esa1FBQXdJO0FBQ3hJO0FBQ0Esc1FBQTBJIiwic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvY2xpZW50LXBhZ2UuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9jbGllbnQtc2VnbWVudC5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2Vycm9yLWJvdW5kYXJ5LmpzXCIpO1xuO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvaHR0cC1hY2Nlc3MtZmFsbGJhY2svZXJyb3ItYm91bmRhcnkuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9sYXlvdXQtcm91dGVyLmpzXCIpO1xuO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbWV0YWRhdGEvYXN5bmMtbWV0YWRhdGEuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9tZXRhZGF0YS9tZXRhZGF0YS1ib3VuZGFyeS5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlbmRlci1mcm9tLXRlbXBsYXRlLWNvbnRleHQuanNcIik7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-segment.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fhttp-access-fallback%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fmetadata%2Fasync-metadata.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fmetadata%2Fmetadata-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true!\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?server=true!":
|
|
/*!******************************************************************************************************!*\
|
|
!*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?server=true! ***!
|
|
\******************************************************************************************************/
|
|
/***/ (() => {
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ "../app-render/action-async-storage.external":
|
|
/*!*******************************************************************************!*\
|
|
!*** external "next/dist/server/app-render/action-async-storage.external.js" ***!
|
|
\*******************************************************************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("next/dist/server/app-render/action-async-storage.external.js");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "../app-render/after-task-async-storage.external":
|
|
/*!***********************************************************************************!*\
|
|
!*** external "next/dist/server/app-render/after-task-async-storage.external.js" ***!
|
|
\***********************************************************************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("next/dist/server/app-render/after-task-async-storage.external.js");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "../app-render/work-async-storage.external":
|
|
/*!*****************************************************************************!*\
|
|
!*** external "next/dist/server/app-render/work-async-storage.external.js" ***!
|
|
\*****************************************************************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("next/dist/server/app-render/work-async-storage.external.js");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./work-unit-async-storage.external":
|
|
/*!**********************************************************************************!*\
|
|
!*** external "next/dist/server/app-render/work-unit-async-storage.external.js" ***!
|
|
\**********************************************************************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("next/dist/server/app-render/work-unit-async-storage.external.js");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "?d272":
|
|
/*!********************************!*\
|
|
!*** supports-color (ignored) ***!
|
|
\********************************/
|
|
/***/ (() => {
|
|
|
|
/* (ignored) */
|
|
|
|
/***/ }),
|
|
|
|
/***/ "@prisma/client":
|
|
/*!*********************************!*\
|
|
!*** external "@prisma/client" ***!
|
|
\*********************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("@prisma/client");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "assert":
|
|
/*!*************************!*\
|
|
!*** external "assert" ***!
|
|
\*************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("assert");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "buffer":
|
|
/*!*************************!*\
|
|
!*** external "buffer" ***!
|
|
\*************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("buffer");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "child_process":
|
|
/*!********************************!*\
|
|
!*** external "child_process" ***!
|
|
\********************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("child_process");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "crypto":
|
|
/*!*************************!*\
|
|
!*** external "crypto" ***!
|
|
\*************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("crypto");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "dns":
|
|
/*!**********************!*\
|
|
!*** external "dns" ***!
|
|
\**********************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("dns");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "events":
|
|
/*!*************************!*\
|
|
!*** external "events" ***!
|
|
\*************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("events");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "fs":
|
|
/*!*********************!*\
|
|
!*** external "fs" ***!
|
|
\*********************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("fs");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "http":
|
|
/*!***********************!*\
|
|
!*** external "http" ***!
|
|
\***********************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("http");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "https":
|
|
/*!************************!*\
|
|
!*** external "https" ***!
|
|
\************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("https");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "jsdom":
|
|
/*!************************!*\
|
|
!*** external "jsdom" ***!
|
|
\************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("jsdom");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "module":
|
|
/*!*************************!*\
|
|
!*** external "module" ***!
|
|
\*************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("module");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "net":
|
|
/*!**********************!*\
|
|
!*** external "net" ***!
|
|
\**********************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("net");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "next/dist/compiled/next-server/app-page.runtime.dev.js":
|
|
/*!*************************************************************************!*\
|
|
!*** external "next/dist/compiled/next-server/app-page.runtime.dev.js" ***!
|
|
\*************************************************************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("next/dist/compiled/next-server/app-page.runtime.dev.js");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "node:buffer":
|
|
/*!******************************!*\
|
|
!*** external "node:buffer" ***!
|
|
\******************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("node:buffer");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "node:events":
|
|
/*!******************************!*\
|
|
!*** external "node:events" ***!
|
|
\******************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("node:events");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "node:os":
|
|
/*!**************************!*\
|
|
!*** external "node:os" ***!
|
|
\**************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("node:os");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "node:path":
|
|
/*!****************************!*\
|
|
!*** external "node:path" ***!
|
|
\****************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("node:path");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "node:stream":
|
|
/*!******************************!*\
|
|
!*** external "node:stream" ***!
|
|
\******************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("node:stream");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "os":
|
|
/*!*********************!*\
|
|
!*** external "os" ***!
|
|
\*********************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("os");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "path":
|
|
/*!***********************!*\
|
|
!*** external "path" ***!
|
|
\***********************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("path");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "querystring":
|
|
/*!******************************!*\
|
|
!*** external "querystring" ***!
|
|
\******************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("querystring");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "stream":
|
|
/*!*************************!*\
|
|
!*** external "stream" ***!
|
|
\*************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("stream");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "string_decoder":
|
|
/*!*********************************!*\
|
|
!*** external "string_decoder" ***!
|
|
\*********************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("string_decoder");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "tls":
|
|
/*!**********************!*\
|
|
!*** external "tls" ***!
|
|
\**********************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("tls");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "tty":
|
|
/*!**********************!*\
|
|
!*** external "tty" ***!
|
|
\**********************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("tty");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "url":
|
|
/*!**********************!*\
|
|
!*** external "url" ***!
|
|
\**********************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("url");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "util":
|
|
/*!***********************!*\
|
|
!*** external "util" ***!
|
|
\***********************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("util");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "worker_threads":
|
|
/*!*********************************!*\
|
|
!*** external "worker_threads" ***!
|
|
\*********************************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("worker_threads");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "zlib":
|
|
/*!***********************!*\
|
|
!*** external "zlib" ***!
|
|
\***********************/
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("zlib");
|
|
|
|
/***/ })
|
|
|
|
};
|
|
;
|
|
|
|
// load runtime
|
|
var __webpack_require__ = require("../../webpack-runtime.js");
|
|
__webpack_require__.C(exports);
|
|
var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
|
|
var __webpack_exports__ = __webpack_require__.X(0, ["vendor-chunks/next","vendor-chunks/jose","vendor-chunks/next-auth","vendor-chunks/openid-client","vendor-chunks/@babel","vendor-chunks/oauth","vendor-chunks/preact","vendor-chunks/uuid","vendor-chunks/yallist","vendor-chunks/preact-render-to-string","vendor-chunks/cookie","vendor-chunks/oidc-token-hash","vendor-chunks/@panva","vendor-chunks/jwt-decode","vendor-chunks/crypto-js","vendor-chunks/ioredis","vendor-chunks/@ioredis","vendor-chunks/debug","vendor-chunks/lodash.defaults","vendor-chunks/redis-parser","vendor-chunks/denque","vendor-chunks/cluster-key-slot","vendor-chunks/lodash.isarguments","vendor-chunks/redis-errors","vendor-chunks/ms","vendor-chunks/standard-as-callback","vendor-chunks/@radix-ui","vendor-chunks/date-fns","vendor-chunks/@floating-ui","vendor-chunks/tailwind-merge","vendor-chunks/lucide-react","vendor-chunks/tslib","vendor-chunks/react-remove-scroll","vendor-chunks/aria-hidden","vendor-chunks/react-remove-scroll-bar","vendor-chunks/use-callback-ref","vendor-chunks/use-sidecar","vendor-chunks/class-variance-authority","vendor-chunks/react-style-singleton","vendor-chunks/@swc","vendor-chunks/clsx","vendor-chunks/get-nonce","vendor-chunks/quill","vendor-chunks/nodemailer","vendor-chunks/imapflow","vendor-chunks/encoding-japanese","vendor-chunks/iconv-lite","vendor-chunks/form-data","vendor-chunks/zod","vendor-chunks/axios","vendor-chunks/libmime","vendor-chunks/entities","vendor-chunks/he","vendor-chunks/html-to-text","vendor-chunks/htmlparser2","vendor-chunks/ip-address","vendor-chunks/mailparser","vendor-chunks/socks","vendor-chunks/smart-buffer","vendor-chunks/pino","vendor-chunks/mailsplit","vendor-chunks/jsbn","vendor-chunks/domutils","vendor-chunks/linkify-it","vendor-chunks/domhandler","vendor-chunks/follow-redirects","vendor-chunks/fast-redact","vendor-chunks/safe-stable-stringify","vendor-chunks/sonic-boom","vendor-chunks/thread-stream","vendor-chunks/selderee","vendor-chunks/get-intrinsic","vendor-chunks/parseley","vendor-chunks/punycode.js","vendor-chunks/peberminta","vendor-chunks/tlds","vendor-chunks/pino-std-serializers","vendor-chunks/dom-serializer","vendor-chunks/sprintf-js","vendor-chunks/libqp","vendor-chunks/asynckit","vendor-chunks/libbase64","vendor-chunks/uc.micro","vendor-chunks/combined-stream","vendor-chunks/deepmerge","vendor-chunks/proxy-from-env","vendor-chunks/@selderee","vendor-chunks/quick-format-unescaped","vendor-chunks/has-symbols","vendor-chunks/delayed-stream","vendor-chunks/function-bind","vendor-chunks/safer-buffer","vendor-chunks/domelementtype","vendor-chunks/on-exit-leak-free","vendor-chunks/leac","vendor-chunks/es-set-tostringtag","vendor-chunks/atomic-sleep","vendor-chunks/get-proto","vendor-chunks/call-bind-apply-helpers","vendor-chunks/dunder-proto","vendor-chunks/math-intrinsics","vendor-chunks/es-errors","vendor-chunks/gopd","vendor-chunks/es-define-property","vendor-chunks/hasown","vendor-chunks/has-tostringtag","vendor-chunks/es-object-atoms","vendor-chunks/styled-jsx","vendor-chunks/isomorphic-dompurify","vendor-chunks/dompurify"], () => (__webpack_exec__("(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js?name=app%2Fcourrier%2Fpage&page=%2Fcourrier%2Fpage&appPaths=%2Fcourrier%2Fpage&pagePath=private-next-app-dir%2Fcourrier%2Fpage.tsx&appDir=%2Fhome%2Falma%2Fnextgen%2FNeah-mail%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Falma%2Fnextgen%2FNeah-mail&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!")));
|
|
module.exports = __webpack_exports__;
|
|
|
|
})(); |