Files
Webklar.com/.next/server/vendor-chunks/@supabase.js
ANDJ 76791391d8 Prototyp fur die Navigationsleiste
Kleine anpassuungen Handy Ansicht
2025-12-14 17:27:12 +01:00

575 lines
1.2 MiB

"use strict";
/*
* 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/).
*/
exports.id = "vendor-chunks/@supabase";
exports.ids = ["vendor-chunks/@supabase"];
exports.modules = {
/***/ "(ssr)/./node_modules/@supabase/auth-js/dist/main/AuthAdminApi.js":
/*!******************************************************************!*\
!*** ./node_modules/@supabase/auth-js/dist/main/AuthAdminApi.js ***!
\******************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst GoTrueAdminApi_1 = __importDefault(__webpack_require__(/*! ./GoTrueAdminApi */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/GoTrueAdminApi.js\"));\r\nconst AuthAdminApi = GoTrueAdminApi_1.default;\r\nexports[\"default\"] = AuthAdminApi;\r\n//# sourceMappingURL=AuthAdminApi.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL0F1dGhBZG1pbkFwaS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHlDQUF5QyxtQkFBTyxDQUFDLDRGQUFrQjtBQUNuRTtBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL0F1dGhBZG1pbkFwaS5qcz85ODQxIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmNvbnN0IEdvVHJ1ZUFkbWluQXBpXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vR29UcnVlQWRtaW5BcGlcIikpO1xyXG5jb25zdCBBdXRoQWRtaW5BcGkgPSBHb1RydWVBZG1pbkFwaV8xLmRlZmF1bHQ7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IEF1dGhBZG1pbkFwaTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXV0aEFkbWluQXBpLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/auth-js/dist/main/AuthAdminApi.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/auth-js/dist/main/AuthClient.js":
/*!****************************************************************!*\
!*** ./node_modules/@supabase/auth-js/dist/main/AuthClient.js ***!
\****************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst GoTrueClient_1 = __importDefault(__webpack_require__(/*! ./GoTrueClient */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/GoTrueClient.js\"));\r\nconst AuthClient = GoTrueClient_1.default;\r\nexports[\"default\"] = AuthClient;\r\n//# sourceMappingURL=AuthClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL0F1dGhDbGllbnQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLDZDQUE2QztBQUM3QztBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCx1Q0FBdUMsbUJBQU8sQ0FBQyx3RkFBZ0I7QUFDL0Q7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbWFpbi9BdXRoQ2xpZW50LmpzPzJkOGMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuY29uc3QgR29UcnVlQ2xpZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vR29UcnVlQ2xpZW50XCIpKTtcclxuY29uc3QgQXV0aENsaWVudCA9IEdvVHJ1ZUNsaWVudF8xLmRlZmF1bHQ7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IEF1dGhDbGllbnQ7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF1dGhDbGllbnQuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/auth-js/dist/main/AuthClient.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/auth-js/dist/main/GoTrueAdminApi.js":
/*!********************************************************************!*\
!*** ./node_modules/@supabase/auth-js/dist/main/GoTrueAdminApi.js ***!
\********************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __rest = (this && this.__rest) || function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst fetch_1 = __webpack_require__(/*! ./lib/fetch */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/fetch.js\");\r\nconst helpers_1 = __webpack_require__(/*! ./lib/helpers */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/helpers.js\");\r\nconst types_1 = __webpack_require__(/*! ./lib/types */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/types.js\");\r\nconst errors_1 = __webpack_require__(/*! ./lib/errors */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/errors.js\");\r\nclass GoTrueAdminApi {\r\n constructor({ url = '', headers = {}, fetch, }) {\r\n this.url = url;\r\n this.headers = headers;\r\n this.fetch = (0, helpers_1.resolveFetch)(fetch);\r\n this.mfa = {\r\n listFactors: this._listFactors.bind(this),\r\n deleteFactor: this._deleteFactor.bind(this),\r\n };\r\n }\r\n /**\r\n * Removes a logged-in session.\r\n * @param jwt A valid, logged-in JWT.\r\n * @param scope The logout sope.\r\n */\r\n async signOut(jwt, scope = types_1.SIGN_OUT_SCOPES[0]) {\r\n if (types_1.SIGN_OUT_SCOPES.indexOf(scope) < 0) {\r\n throw new Error(`@supabase/auth-js: Parameter scope must be one of ${types_1.SIGN_OUT_SCOPES.join(', ')}`);\r\n }\r\n try {\r\n await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/logout?scope=${scope}`, {\r\n headers: this.headers,\r\n jwt,\r\n noResolveJson: true,\r\n });\r\n return { data: null, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Sends an invite link to an email address.\r\n * @param email The email address of the user.\r\n * @param options Additional options to be included when inviting.\r\n */\r\n async inviteUserByEmail(email, options = {}) {\r\n try {\r\n return await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/invite`, {\r\n body: { email, data: options.data },\r\n headers: this.headers,\r\n redirectTo: options.redirectTo,\r\n xform: fetch_1._userResponse,\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Generates email links and OTPs to be sent via a custom email provider.\r\n * @param email The user's email.\r\n * @param options.password User password. For signup only.\r\n * @param options.data Optional user metadata. For signup only.\r\n * @param options.redirectTo The redirect url which should be appended to the generated link\r\n */\r\n async generateLink(params) {\r\n try {\r\n const { options } = params, rest = __rest(params, [\"options\"]);\r\n const body = Object.assign(Object.assign({}, rest), options);\r\n if ('newEmail' in rest) {\r\n // replace newEmail with new_email in request body\r\n body.new_email = rest === null || rest === void 0 ? void 0 : rest.newEmail;\r\n delete body['newEmail'];\r\n }\r\n return await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/admin/generate_link`, {\r\n body: body,\r\n headers: this.headers,\r\n xform: fetch_1._generateLinkResponse,\r\n redirectTo: options === null || options === void 0 ? void 0 : options.redirectTo,\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return {\r\n data: {\r\n properties: null,\r\n user: null,\r\n },\r\n error,\r\n };\r\n }\r\n throw error;\r\n }\r\n }\r\n // User Admin API\r\n /**\r\n * Creates a new user.\r\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\r\n */\r\n async createUser(attributes) {\r\n try {\r\n return await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/admin/users`, {\r\n body: attributes,\r\n headers: this.headers,\r\n xform: fetch_1._userResponse,\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Get a list of users.\r\n *\r\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\r\n * @param params An object which supports `page` and `perPage` as numbers, to alter the paginated results.\r\n */\r\n async listUsers(params) {\r\n var _a, _b, _c, _d, _e, _f, _g;\r\n try {\r\n const pagination = { nextPage: null, lastPage: 0, total: 0 };\r\n const response = await (0, fetch_1._request)(this.fetch, 'GET', `${this.url}/admin/users`, {\r\n headers: this.headers,\r\n noResolveJson: true,\r\n query: {\r\n page: (_b = (_a = params === null || params === void 0 ? void 0 : params.page) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '',\r\n per_page: (_d = (_c = params === null || params === void 0 ? void 0 : params.perPage) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : '',\r\n },\r\n xform: fetch_1._noResolveJsonResponse,\r\n });\r\n if (response.error)\r\n throw response.error;\r\n const users = await response.json();\r\n const total = (_e = response.headers.get('x-total-count')) !== null && _e !== void 0 ? _e : 0;\r\n const links = (_g = (_f = response.headers.get('link')) === null || _f === void 0 ? void 0 : _f.split(',')) !== null && _g !== void 0 ? _g : [];\r\n if (links.length > 0) {\r\n links.forEach((link) => {\r\n const page = parseInt(link.split(';')[0].split('=')[1].substring(0, 1));\r\n const rel = JSON.parse(link.split(';')[1].split('=')[1]);\r\n pagination[`${rel}Page`] = page;\r\n });\r\n pagination.total = parseInt(total);\r\n }\r\n return { data: Object.assign(Object.assign({}, users), pagination), error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { users: [] }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Get user by id.\r\n *\r\n * @param uid The user's unique identifier\r\n *\r\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\r\n */\r\n async getUserById(uid) {\r\n (0, helpers_1.validateUUID)(uid);\r\n try {\r\n return await (0, fetch_1._request)(this.fetch, 'GET', `${this.url}/admin/users/${uid}`, {\r\n headers: this.headers,\r\n xform: fetch_1._userResponse,\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Updates the user data.\r\n *\r\n * @param attributes The data you want to update.\r\n *\r\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\r\n */\r\n async updateUserById(uid, attributes) {\r\n (0, helpers_1.validateUUID)(uid);\r\n try {\r\n return await (0, fetch_1._request)(this.fetch, 'PUT', `${this.url}/admin/users/${uid}`, {\r\n body: attributes,\r\n headers: this.headers,\r\n xform: fetch_1._userResponse,\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Delete a user. Requires a `service_role` key.\r\n *\r\n * @param id The user id you want to remove.\r\n * @param shouldSoftDelete If true, then the user will be soft-deleted from the auth schema. Soft deletion allows user identification from the hashed user ID but is not reversible.\r\n * Defaults to false for backward compatibility.\r\n *\r\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\r\n */\r\n async deleteUser(id, shouldSoftDelete = false) {\r\n (0, helpers_1.validateUUID)(id);\r\n try {\r\n return await (0, fetch_1._request)(this.fetch, 'DELETE', `${this.url}/admin/users/${id}`, {\r\n headers: this.headers,\r\n body: {\r\n should_soft_delete: shouldSoftDelete,\r\n },\r\n xform: fetch_1._userResponse,\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n async _listFactors(params) {\r\n (0, helpers_1.validateUUID)(params.userId);\r\n try {\r\n const { data, error } = await (0, fetch_1._request)(this.fetch, 'GET', `${this.url}/admin/users/${params.userId}/factors`, {\r\n headers: this.headers,\r\n xform: (factors) => {\r\n return { data: { factors }, error: null };\r\n },\r\n });\r\n return { data, error };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n async _deleteFactor(params) {\r\n (0, helpers_1.validateUUID)(params.userId);\r\n (0, helpers_1.validateUUID)(params.id);\r\n try {\r\n const data = await (0, fetch_1._request)(this.fetch, 'DELETE', `${this.url}/admin/users/${params.userId}/factors/${params.id}`, {\r\n headers: this.headers,\r\n });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n}\r\nexports[\"default\"] = GoTrueAdminApi;\r\n//# sourceMappingURL=GoTrueAdminApi.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL0dvVHJ1ZUFkbWluQXBpLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCxjQUFjO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsZ0JBQWdCLG1CQUFPLENBQUMsa0ZBQWE7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsc0ZBQWU7QUFDekMsZ0JBQWdCLG1CQUFPLENBQUMsa0ZBQWE7QUFDckMsaUJBQWlCLG1CQUFPLENBQUMsb0ZBQWM7QUFDdkM7QUFDQSxrQkFBa0Isc0JBQXNCLFVBQVU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUZBQWlGLG1DQUFtQztBQUNwSDtBQUNBO0FBQ0EsK0RBQStELFNBQVMsZ0JBQWdCLE1BQU07QUFDOUY7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0Esc0VBQXNFLFNBQVM7QUFDL0Usd0JBQXdCLDJCQUEyQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFFBQVEsWUFBWTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixVQUFVO0FBQzlCLHVEQUF1RDtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFLFNBQVM7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRUFBc0UsU0FBUztBQUMvRTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFFBQVEsWUFBWTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQywrRUFBK0UsU0FBUztBQUN4RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZELHdEQUF3RDtBQUN4RCxrQ0FBa0MsSUFBSTtBQUN0QyxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLHFCQUFxQixvQ0FBb0M7QUFDekQ7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFFBQVEsV0FBVztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUVBQXFFLFNBQVMsZUFBZSxJQUFJO0FBQ2pHO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFFBQVEsWUFBWTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUVBQXFFLFNBQVMsZUFBZSxJQUFJO0FBQ2pHO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUSxZQUFZO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFLFNBQVMsZUFBZSxHQUFHO0FBQ25HO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUSxZQUFZO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGNBQWMsb0RBQW9ELFNBQVMsZUFBZSxjQUFjO0FBQzVIO0FBQ0E7QUFDQSw2QkFBNkIsUUFBUSxTQUFTO0FBQzlDLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEVBQThFLFNBQVMsZUFBZSxjQUFjLFdBQVcsVUFBVTtBQUN6STtBQUNBLGFBQWE7QUFDYixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbWFpbi9Hb1RydWVBZG1pbkFwaS5qcz9kN2NiIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5jb25zdCBmZXRjaF8xID0gcmVxdWlyZShcIi4vbGliL2ZldGNoXCIpO1xyXG5jb25zdCBoZWxwZXJzXzEgPSByZXF1aXJlKFwiLi9saWIvaGVscGVyc1wiKTtcclxuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL2xpYi90eXBlc1wiKTtcclxuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi9saWIvZXJyb3JzXCIpO1xyXG5jbGFzcyBHb1RydWVBZG1pbkFwaSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHVybCA9ICcnLCBoZWFkZXJzID0ge30sIGZldGNoLCB9KSB7XHJcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcclxuICAgICAgICB0aGlzLmZldGNoID0gKDAsIGhlbHBlcnNfMS5yZXNvbHZlRmV0Y2gpKGZldGNoKTtcclxuICAgICAgICB0aGlzLm1mYSA9IHtcclxuICAgICAgICAgICAgbGlzdEZhY3RvcnM6IHRoaXMuX2xpc3RGYWN0b3JzLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGRlbGV0ZUZhY3RvcjogdGhpcy5fZGVsZXRlRmFjdG9yLmJpbmQodGhpcyksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIGxvZ2dlZC1pbiBzZXNzaW9uLlxyXG4gICAgICogQHBhcmFtIGp3dCBBIHZhbGlkLCBsb2dnZWQtaW4gSldULlxyXG4gICAgICogQHBhcmFtIHNjb3BlIFRoZSBsb2dvdXQgc29wZS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2lnbk91dChqd3QsIHNjb3BlID0gdHlwZXNfMS5TSUdOX09VVF9TQ09QRVNbMF0pIHtcclxuICAgICAgICBpZiAodHlwZXNfMS5TSUdOX09VVF9TQ09QRVMuaW5kZXhPZihzY29wZSkgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL2F1dGgtanM6IFBhcmFtZXRlciBzY29wZSBtdXN0IGJlIG9uZSBvZiAke3R5cGVzXzEuU0lHTl9PVVRfU0NPUEVTLmpvaW4oJywgJyl9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICgwLCBmZXRjaF8xLl9yZXF1ZXN0KSh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9sb2dvdXQ/c2NvcGU9JHtzY29wZX1gLCB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICBqd3QsXHJcbiAgICAgICAgICAgICAgICBub1Jlc29sdmVKc29uOiB0cnVlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNlbmRzIGFuIGludml0ZSBsaW5rIHRvIGFuIGVtYWlsIGFkZHJlc3MuXHJcbiAgICAgKiBAcGFyYW0gZW1haWwgVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBZGRpdGlvbmFsIG9wdGlvbnMgdG8gYmUgaW5jbHVkZWQgd2hlbiBpbnZpdGluZy5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW52aXRlVXNlckJ5RW1haWwoZW1haWwsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCAoMCwgZmV0Y2hfMS5fcmVxdWVzdCkodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vaW52aXRlYCwge1xyXG4gICAgICAgICAgICAgICAgYm9keTogeyBlbWFpbCwgZGF0YTogb3B0aW9ucy5kYXRhIH0sXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdFRvOiBvcHRpb25zLnJlZGlyZWN0VG8sXHJcbiAgICAgICAgICAgICAgICB4Zm9ybTogZmV0Y2hfMS5fdXNlclJlc3BvbnNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgZW1haWwgbGlua3MgYW5kIE9UUHMgdG8gYmUgc2VudCB2aWEgYSBjdXN0b20gZW1haWwgcHJvdmlkZXIuXHJcbiAgICAgKiBAcGFyYW0gZW1haWwgVGhlIHVzZXIncyBlbWFpbC5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLnBhc3N3b3JkIFVzZXIgcGFzc3dvcmQuIEZvciBzaWdudXAgb25seS5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmRhdGEgT3B0aW9uYWwgdXNlciBtZXRhZGF0YS4gRm9yIHNpZ251cCBvbmx5LlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMucmVkaXJlY3RUbyBUaGUgcmVkaXJlY3QgdXJsIHdoaWNoIHNob3VsZCBiZSBhcHBlbmRlZCB0byB0aGUgZ2VuZXJhdGVkIGxpbmtcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2VuZXJhdGVMaW5rKHBhcmFtcykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgb3B0aW9ucyB9ID0gcGFyYW1zLCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wib3B0aW9uc1wiXSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3QpLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgaWYgKCduZXdFbWFpbCcgaW4gcmVzdCkge1xyXG4gICAgICAgICAgICAgICAgLy8gcmVwbGFjZSBuZXdFbWFpbCB3aXRoIG5ld19lbWFpbCBpbiByZXF1ZXN0IGJvZHlcclxuICAgICAgICAgICAgICAgIGJvZHkubmV3X2VtYWlsID0gcmVzdCA9PT0gbnVsbCB8fCByZXN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN0Lm5ld0VtYWlsO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGJvZHlbJ25ld0VtYWlsJ107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0ICgwLCBmZXRjaF8xLl9yZXF1ZXN0KSh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9hZG1pbi9nZW5lcmF0ZV9saW5rYCwge1xyXG4gICAgICAgICAgICAgICAgYm9keTogYm9keSxcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgIHhmb3JtOiBmZXRjaF8xLl9nZW5lcmF0ZUxpbmtSZXNwb25zZSxcclxuICAgICAgICAgICAgICAgIHJlZGlyZWN0VG86IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yZWRpcmVjdFRvLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gVXNlciBBZG1pbiBBUElcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyB1c2VyLlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBzZXJ2ZXIuIE5ldmVyIGV4cG9zZSB5b3VyIGBzZXJ2aWNlX3JvbGVgIGtleSBpbiB0aGUgYnJvd3Nlci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgY3JlYXRlVXNlcihhdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0ICgwLCBmZXRjaF8xLl9yZXF1ZXN0KSh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9hZG1pbi91c2Vyc2AsIHtcclxuICAgICAgICAgICAgICAgIGJvZHk6IGF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICB4Zm9ybTogZmV0Y2hfMS5fdXNlclJlc3BvbnNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYSBsaXN0IG9mIHVzZXJzLlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGEgc2VydmVyLiBOZXZlciBleHBvc2UgeW91ciBgc2VydmljZV9yb2xlYCBrZXkgaW4gdGhlIGJyb3dzZXIuXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1zIEFuIG9iamVjdCB3aGljaCBzdXBwb3J0cyBgcGFnZWAgYW5kIGBwZXJQYWdlYCBhcyBudW1iZXJzLCB0byBhbHRlciB0aGUgcGFnaW5hdGVkIHJlc3VsdHMuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGxpc3RVc2VycyhwYXJhbXMpIHtcclxuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2c7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHsgbmV4dFBhZ2U6IG51bGwsIGxhc3RQYWdlOiAwLCB0b3RhbDogMCB9O1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0ICgwLCBmZXRjaF8xLl9yZXF1ZXN0KSh0aGlzLmZldGNoLCAnR0VUJywgYCR7dGhpcy51cmx9L2FkbWluL3VzZXJzYCwge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgbm9SZXNvbHZlSnNvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHF1ZXJ5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogKF9iID0gKF9hID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBhZ2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b1N0cmluZygpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBwZXJfcGFnZTogKF9kID0gKF9jID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBlclBhZ2UpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy50b1N0cmluZygpKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAnJyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB4Zm9ybTogZmV0Y2hfMS5fbm9SZXNvbHZlSnNvblJlc3BvbnNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2UuZXJyb3I7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJzID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IChfZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXRvdGFsLWNvdW50JykpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmtzID0gKF9nID0gKF9mID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2xpbmsnKSkgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLnNwbGl0KCcsJykpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IFtdO1xyXG4gICAgICAgICAgICBpZiAobGlua3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgbGlua3MuZm9yRWFjaCgobGluaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBwYXJzZUludChsaW5rLnNwbGl0KCc7JylbMF0uc3BsaXQoJz0nKVsxXS5zdWJzdHJpbmcoMCwgMSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbCA9IEpTT04ucGFyc2UobGluay5zcGxpdCgnOycpWzFdLnNwbGl0KCc9JylbMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZ2luYXRpb25bYCR7cmVsfVBhZ2VgXSA9IHBhZ2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb24udG90YWwgPSBwYXJzZUludCh0b3RhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB1c2VycyksIHBhZ2luYXRpb24pLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc0F1dGhFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXJzOiBbXSB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHVzZXIgYnkgaWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHVpZCBUaGUgdXNlcidzIHVuaXF1ZSBpZGVudGlmaWVyXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBzZXJ2ZXIuIE5ldmVyIGV4cG9zZSB5b3VyIGBzZXJ2aWNlX3JvbGVgIGtleSBpbiB0aGUgYnJvd3Nlci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0VXNlckJ5SWQodWlkKSB7XHJcbiAgICAgICAgKDAsIGhlbHBlcnNfMS52YWxpZGF0ZVVVSUQpKHVpZCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0ICgwLCBmZXRjaF8xLl9yZXF1ZXN0KSh0aGlzLmZldGNoLCAnR0VUJywgYCR7dGhpcy51cmx9L2FkbWluL3VzZXJzLyR7dWlkfWAsIHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgIHhmb3JtOiBmZXRjaF8xLl91c2VyUmVzcG9uc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc0F1dGhFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIHVzZXIgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYXR0cmlidXRlcyBUaGUgZGF0YSB5b3Ugd2FudCB0byB1cGRhdGUuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBzZXJ2ZXIuIE5ldmVyIGV4cG9zZSB5b3VyIGBzZXJ2aWNlX3JvbGVgIGtleSBpbiB0aGUgYnJvd3Nlci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdXBkYXRlVXNlckJ5SWQodWlkLCBhdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgKDAsIGhlbHBlcnNfMS52YWxpZGF0ZVVVSUQpKHVpZCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0ICgwLCBmZXRjaF8xLl9yZXF1ZXN0KSh0aGlzLmZldGNoLCAnUFVUJywgYCR7dGhpcy51cmx9L2FkbWluL3VzZXJzLyR7dWlkfWAsIHtcclxuICAgICAgICAgICAgICAgIGJvZHk6IGF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICB4Zm9ybTogZmV0Y2hfMS5fdXNlclJlc3BvbnNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxldGUgYSB1c2VyLiBSZXF1aXJlcyBhIGBzZXJ2aWNlX3JvbGVgIGtleS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gaWQgVGhlIHVzZXIgaWQgeW91IHdhbnQgdG8gcmVtb3ZlLlxyXG4gICAgICogQHBhcmFtIHNob3VsZFNvZnREZWxldGUgSWYgdHJ1ZSwgdGhlbiB0aGUgdXNlciB3aWxsIGJlIHNvZnQtZGVsZXRlZCBmcm9tIHRoZSBhdXRoIHNjaGVtYS4gU29mdCBkZWxldGlvbiBhbGxvd3MgdXNlciBpZGVudGlmaWNhdGlvbiBmcm9tIHRoZSBoYXNoZWQgdXNlciBJRCBidXQgaXMgbm90IHJldmVyc2libGUuXHJcbiAgICAgKiBEZWZhdWx0cyB0byBmYWxzZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBhIHNlcnZlci4gTmV2ZXIgZXhwb3NlIHlvdXIgYHNlcnZpY2Vfcm9sZWAga2V5IGluIHRoZSBicm93c2VyLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZWxldGVVc2VyKGlkLCBzaG91bGRTb2Z0RGVsZXRlID0gZmFsc2UpIHtcclxuICAgICAgICAoMCwgaGVscGVyc18xLnZhbGlkYXRlVVVJRCkoaWQpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCAoMCwgZmV0Y2hfMS5fcmVxdWVzdCkodGhpcy5mZXRjaCwgJ0RFTEVURScsIGAke3RoaXMudXJsfS9hZG1pbi91c2Vycy8ke2lkfWAsIHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICBzaG91bGRfc29mdF9kZWxldGU6IHNob3VsZFNvZnREZWxldGUsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgeGZvcm06IGZldGNoXzEuX3VzZXJSZXNwb25zZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoKDAsIGVycm9yc18xLmlzQXV0aEVycm9yKShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIF9saXN0RmFjdG9ycyhwYXJhbXMpIHtcclxuICAgICAgICAoMCwgaGVscGVyc18xLnZhbGlkYXRlVVVJRCkocGFyYW1zLnVzZXJJZCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgKDAsIGZldGNoXzEuX3JlcXVlc3QpKHRoaXMuZmV0Y2gsICdHRVQnLCBgJHt0aGlzLnVybH0vYWRtaW4vdXNlcnMvJHtwYXJhbXMudXNlcklkfS9mYWN0b3JzYCwge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgeGZvcm06IChmYWN0b3JzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyBmYWN0b3JzIH0sIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3IgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBfZGVsZXRlRmFjdG9yKHBhcmFtcykge1xyXG4gICAgICAgICgwLCBoZWxwZXJzXzEudmFsaWRhdGVVVUlEKShwYXJhbXMudXNlcklkKTtcclxuICAgICAgICAoMCwgaGVscGVyc18xLnZhbGlkYXRlVVVJRCkocGFyYW1zLmlkKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgKDAsIGZldGNoXzEuX3JlcXVlc3QpKHRoaXMuZmV0Y2gsICdERUxFVEUnLCBgJHt0aGlzLnVybH0vYWRtaW4vdXNlcnMvJHtwYXJhbXMudXNlcklkfS9mYWN0b3JzLyR7cGFyYW1zLmlkfWAsIHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGRhdGEsIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoKDAsIGVycm9yc18xLmlzQXV0aEVycm9yKShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IEdvVHJ1ZUFkbWluQXBpO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1Hb1RydWVBZG1pbkFwaS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/auth-js/dist/main/GoTrueAdminApi.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/auth-js/dist/main/GoTrueClient.js":
/*!******************************************************************!*\
!*** ./node_modules/@supabase/auth-js/dist/main/GoTrueClient.js ***!
\******************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst GoTrueAdminApi_1 = __importDefault(__webpack_require__(/*! ./GoTrueAdminApi */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/GoTrueAdminApi.js\"));\r\nconst constants_1 = __webpack_require__(/*! ./lib/constants */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/constants.js\");\r\nconst errors_1 = __webpack_require__(/*! ./lib/errors */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/errors.js\");\r\nconst fetch_1 = __webpack_require__(/*! ./lib/fetch */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/fetch.js\");\r\nconst helpers_1 = __webpack_require__(/*! ./lib/helpers */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/helpers.js\");\r\nconst local_storage_1 = __webpack_require__(/*! ./lib/local-storage */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/local-storage.js\");\r\nconst polyfills_1 = __webpack_require__(/*! ./lib/polyfills */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/polyfills.js\");\r\nconst version_1 = __webpack_require__(/*! ./lib/version */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/version.js\");\r\nconst locks_1 = __webpack_require__(/*! ./lib/locks */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/locks.js\");\r\nconst base64url_1 = __webpack_require__(/*! ./lib/base64url */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/base64url.js\");\r\nconst helpers_2 = __webpack_require__(/*! ./lib/helpers */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/helpers.js\");\r\n(0, polyfills_1.polyfillGlobalThis)(); // Make \"globalThis\" available\r\nconst DEFAULT_OPTIONS = {\r\n url: constants_1.GOTRUE_URL,\r\n storageKey: constants_1.STORAGE_KEY,\r\n autoRefreshToken: true,\r\n persistSession: true,\r\n detectSessionInUrl: true,\r\n headers: constants_1.DEFAULT_HEADERS,\r\n flowType: 'implicit',\r\n debug: false,\r\n hasCustomAuthorizationHeader: false,\r\n};\r\nasync function lockNoOp(name, acquireTimeout, fn) {\r\n return await fn();\r\n}\r\n/**\r\n * Caches JWKS values for all clients created in the same environment. This is\r\n * especially useful for shared-memory execution environments such as Vercel's\r\n * Fluid Compute, AWS Lambda or Supabase's Edge Functions. Regardless of how\r\n * many clients are created, if they share the same storage key they will use\r\n * the same JWKS cache, significantly speeding up getClaims() with asymmetric\r\n * JWTs.\r\n */\r\nconst GLOBAL_JWKS = {};\r\nclass GoTrueClient {\r\n /**\r\n * Create a new client for use in the browser.\r\n */\r\n constructor(options) {\r\n var _a, _b;\r\n /**\r\n * @experimental\r\n */\r\n this.userStorage = null;\r\n this.memoryStorage = null;\r\n this.stateChangeEmitters = new Map();\r\n this.autoRefreshTicker = null;\r\n this.visibilityChangedCallback = null;\r\n this.refreshingDeferred = null;\r\n /**\r\n * Keeps track of the async client initialization.\r\n * When null or not yet resolved the auth state is `unknown`\r\n * Once resolved the the auth state is known and it's save to call any further client methods.\r\n * Keep extra care to never reject or throw uncaught errors\r\n */\r\n this.initializePromise = null;\r\n this.detectSessionInUrl = true;\r\n this.hasCustomAuthorizationHeader = false;\r\n this.suppressGetSessionWarning = false;\r\n this.lockAcquired = false;\r\n this.pendingInLock = [];\r\n /**\r\n * Used to broadcast state change events to other tabs listening.\r\n */\r\n this.broadcastChannel = null;\r\n this.logger = console.log;\r\n this.instanceID = GoTrueClient.nextInstanceID;\r\n GoTrueClient.nextInstanceID += 1;\r\n if (this.instanceID > 0 && (0, helpers_1.isBrowser)()) {\r\n console.warn('Multiple GoTrueClient instances detected in the same browser context. It is not an error, but this should be avoided as it may produce undefined behavior when used concurrently under the same storage key.');\r\n }\r\n const settings = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);\r\n this.logDebugMessages = !!settings.debug;\r\n if (typeof settings.debug === 'function') {\r\n this.logger = settings.debug;\r\n }\r\n this.persistSession = settings.persistSession;\r\n this.storageKey = settings.storageKey;\r\n this.autoRefreshToken = settings.autoRefreshToken;\r\n this.admin = new GoTrueAdminApi_1.default({\r\n url: settings.url,\r\n headers: settings.headers,\r\n fetch: settings.fetch,\r\n });\r\n this.url = settings.url;\r\n this.headers = settings.headers;\r\n this.fetch = (0, helpers_1.resolveFetch)(settings.fetch);\r\n this.lock = settings.lock || lockNoOp;\r\n this.detectSessionInUrl = settings.detectSessionInUrl;\r\n this.flowType = settings.flowType;\r\n this.hasCustomAuthorizationHeader = settings.hasCustomAuthorizationHeader;\r\n if (settings.lock) {\r\n this.lock = settings.lock;\r\n }\r\n else if ((0, helpers_1.isBrowser)() && ((_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.navigator) === null || _a === void 0 ? void 0 : _a.locks)) {\r\n this.lock = locks_1.navigatorLock;\r\n }\r\n else {\r\n this.lock = lockNoOp;\r\n }\r\n if (!this.jwks) {\r\n this.jwks = { keys: [] };\r\n this.jwks_cached_at = Number.MIN_SAFE_INTEGER;\r\n }\r\n this.mfa = {\r\n verify: this._verify.bind(this),\r\n enroll: this._enroll.bind(this),\r\n unenroll: this._unenroll.bind(this),\r\n challenge: this._challenge.bind(this),\r\n listFactors: this._listFactors.bind(this),\r\n challengeAndVerify: this._challengeAndVerify.bind(this),\r\n getAuthenticatorAssuranceLevel: this._getAuthenticatorAssuranceLevel.bind(this),\r\n };\r\n if (this.persistSession) {\r\n if (settings.storage) {\r\n this.storage = settings.storage;\r\n }\r\n else {\r\n if ((0, helpers_1.supportsLocalStorage)()) {\r\n this.storage = globalThis.localStorage;\r\n }\r\n else {\r\n this.memoryStorage = {};\r\n this.storage = (0, local_storage_1.memoryLocalStorageAdapter)(this.memoryStorage);\r\n }\r\n }\r\n if (settings.userStorage) {\r\n this.userStorage = settings.userStorage;\r\n }\r\n }\r\n else {\r\n this.memoryStorage = {};\r\n this.storage = (0, local_storage_1.memoryLocalStorageAdapter)(this.memoryStorage);\r\n }\r\n if ((0, helpers_1.isBrowser)() && globalThis.BroadcastChannel && this.persistSession && this.storageKey) {\r\n try {\r\n this.broadcastChannel = new globalThis.BroadcastChannel(this.storageKey);\r\n }\r\n catch (e) {\r\n console.error('Failed to create a new BroadcastChannel, multi-tab state changes will not be available', e);\r\n }\r\n (_b = this.broadcastChannel) === null || _b === void 0 ? void 0 : _b.addEventListener('message', async (event) => {\r\n this._debug('received broadcast notification from other tab or client', event);\r\n await this._notifyAllSubscribers(event.data.event, event.data.session, false); // broadcast = false so we don't get an endless loop of messages\r\n });\r\n }\r\n this.initialize();\r\n }\r\n /**\r\n * The JWKS used for verifying asymmetric JWTs\r\n */\r\n get jwks() {\r\n var _a, _b;\r\n return (_b = (_a = GLOBAL_JWKS[this.storageKey]) === null || _a === void 0 ? void 0 : _a.jwks) !== null && _b !== void 0 ? _b : { keys: [] };\r\n }\r\n set jwks(value) {\r\n GLOBAL_JWKS[this.storageKey] = Object.assign(Object.assign({}, GLOBAL_JWKS[this.storageKey]), { jwks: value });\r\n }\r\n get jwks_cached_at() {\r\n var _a, _b;\r\n return (_b = (_a = GLOBAL_JWKS[this.storageKey]) === null || _a === void 0 ? void 0 : _a.cachedAt) !== null && _b !== void 0 ? _b : Number.MIN_SAFE_INTEGER;\r\n }\r\n set jwks_cached_at(value) {\r\n GLOBAL_JWKS[this.storageKey] = Object.assign(Object.assign({}, GLOBAL_JWKS[this.storageKey]), { cachedAt: value });\r\n }\r\n _debug(...args) {\r\n if (this.logDebugMessages) {\r\n this.logger(`GoTrueClient@${this.instanceID} (${version_1.version}) ${new Date().toISOString()}`, ...args);\r\n }\r\n return this;\r\n }\r\n /**\r\n * Initializes the client session either from the url or from storage.\r\n * This method is automatically called when instantiating the client, but should also be called\r\n * manually when checking for an error from an auth redirect (oauth, magiclink, password recovery, etc).\r\n */\r\n async initialize() {\r\n if (this.initializePromise) {\r\n return await this.initializePromise;\r\n }\r\n this.initializePromise = (async () => {\r\n return await this._acquireLock(-1, async () => {\r\n return await this._initialize();\r\n });\r\n })();\r\n return await this.initializePromise;\r\n }\r\n /**\r\n * IMPORTANT:\r\n * 1. Never throw in this method, as it is called from the constructor\r\n * 2. Never return a session from this method as it would be cached over\r\n * the whole lifetime of the client\r\n */\r\n async _initialize() {\r\n var _a;\r\n try {\r\n const params = (0, helpers_1.parseParametersFromURL)(window.location.href);\r\n let callbackUrlType = 'none';\r\n if (this._isImplicitGrantCallback(params)) {\r\n callbackUrlType = 'implicit';\r\n }\r\n else if (await this._isPKCECallback(params)) {\r\n callbackUrlType = 'pkce';\r\n }\r\n /**\r\n * Attempt to get the session from the URL only if these conditions are fulfilled\r\n *\r\n * Note: If the URL isn't one of the callback url types (implicit or pkce),\r\n * then there could be an existing session so we don't want to prematurely remove it\r\n */\r\n if ((0, helpers_1.isBrowser)() && this.detectSessionInUrl && callbackUrlType !== 'none') {\r\n const { data, error } = await this._getSessionFromURL(params, callbackUrlType);\r\n if (error) {\r\n this._debug('#_initialize()', 'error detecting session from URL', error);\r\n if ((0, errors_1.isAuthImplicitGrantRedirectError)(error)) {\r\n const errorCode = (_a = error.details) === null || _a === void 0 ? void 0 : _a.code;\r\n if (errorCode === 'identity_already_exists' ||\r\n errorCode === 'identity_not_found' ||\r\n errorCode === 'single_identity_not_deletable') {\r\n return { error };\r\n }\r\n }\r\n // failed login attempt via url,\r\n // remove old session as in verifyOtp, signUp and signInWith*\r\n await this._removeSession();\r\n return { error };\r\n }\r\n const { session, redirectType } = data;\r\n this._debug('#_initialize()', 'detected session in URL', session, 'redirect type', redirectType);\r\n await this._saveSession(session);\r\n setTimeout(async () => {\r\n if (redirectType === 'recovery') {\r\n await this._notifyAllSubscribers('PASSWORD_RECOVERY', session);\r\n }\r\n else {\r\n await this._notifyAllSubscribers('SIGNED_IN', session);\r\n }\r\n }, 0);\r\n return { error: null };\r\n }\r\n // no login attempt via callback url try to recover session from storage\r\n await this._recoverAndRefresh();\r\n return { error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { error };\r\n }\r\n return {\r\n error: new errors_1.AuthUnknownError('Unexpected error during initialization', error),\r\n };\r\n }\r\n finally {\r\n await this._handleVisibilityChange();\r\n this._debug('#_initialize()', 'end');\r\n }\r\n }\r\n /**\r\n * Creates a new anonymous user.\r\n *\r\n * @returns A session where the is_anonymous claim in the access token JWT set to true\r\n */\r\n async signInAnonymously(credentials) {\r\n var _a, _b, _c;\r\n try {\r\n const res = await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/signup`, {\r\n headers: this.headers,\r\n body: {\r\n data: (_b = (_a = credentials === null || credentials === void 0 ? void 0 : credentials.options) === null || _a === void 0 ? void 0 : _a.data) !== null && _b !== void 0 ? _b : {},\r\n gotrue_meta_security: { captcha_token: (_c = credentials === null || credentials === void 0 ? void 0 : credentials.options) === null || _c === void 0 ? void 0 : _c.captchaToken },\r\n },\r\n xform: fetch_1._sessionResponse,\r\n });\r\n const { data, error } = res;\r\n if (error || !data) {\r\n return { data: { user: null, session: null }, error: error };\r\n }\r\n const session = data.session;\r\n const user = data.user;\r\n if (data.session) {\r\n await this._saveSession(data.session);\r\n await this._notifyAllSubscribers('SIGNED_IN', session);\r\n }\r\n return { data: { user, session }, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Creates a new user.\r\n *\r\n * Be aware that if a user account exists in the system you may get back an\r\n * error message that attempts to hide this information from the user.\r\n * This method has support for PKCE via email signups. The PKCE flow cannot be used when autoconfirm is enabled.\r\n *\r\n * @returns A logged-in session if the server has \"autoconfirm\" ON\r\n * @returns A user if the server has \"autoconfirm\" OFF\r\n */\r\n async signUp(credentials) {\r\n var _a, _b, _c;\r\n try {\r\n let res;\r\n if ('email' in credentials) {\r\n const { email, password, options } = credentials;\r\n let codeChallenge = null;\r\n let codeChallengeMethod = null;\r\n if (this.flowType === 'pkce') {\r\n ;\r\n [codeChallenge, codeChallengeMethod] = await (0, helpers_1.getCodeChallengeAndMethod)(this.storage, this.storageKey);\r\n }\r\n res = await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/signup`, {\r\n headers: this.headers,\r\n redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\r\n body: {\r\n email,\r\n password,\r\n data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : {},\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n code_challenge: codeChallenge,\r\n code_challenge_method: codeChallengeMethod,\r\n },\r\n xform: fetch_1._sessionResponse,\r\n });\r\n }\r\n else if ('phone' in credentials) {\r\n const { phone, password, options } = credentials;\r\n res = await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/signup`, {\r\n headers: this.headers,\r\n body: {\r\n phone,\r\n password,\r\n data: (_b = options === null || options === void 0 ? void 0 : options.data) !== null && _b !== void 0 ? _b : {},\r\n channel: (_c = options === null || options === void 0 ? void 0 : options.channel) !== null && _c !== void 0 ? _c : 'sms',\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n },\r\n xform: fetch_1._sessionResponse,\r\n });\r\n }\r\n else {\r\n throw new errors_1.AuthInvalidCredentialsError('You must provide either an email or phone number and a password');\r\n }\r\n const { data, error } = res;\r\n if (error || !data) {\r\n return { data: { user: null, session: null }, error: error };\r\n }\r\n const session = data.session;\r\n const user = data.user;\r\n if (data.session) {\r\n await this._saveSession(data.session);\r\n await this._notifyAllSubscribers('SIGNED_IN', session);\r\n }\r\n return { data: { user, session }, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Log in an existing user with an email and password or phone and password.\r\n *\r\n * Be aware that you may get back an error message that will not distinguish\r\n * between the cases where the account does not exist or that the\r\n * email/phone and password combination is wrong or that the account can only\r\n * be accessed via social login.\r\n */\r\n async signInWithPassword(credentials) {\r\n try {\r\n let res;\r\n if ('email' in credentials) {\r\n const { email, password, options } = credentials;\r\n res = await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/token?grant_type=password`, {\r\n headers: this.headers,\r\n body: {\r\n email,\r\n password,\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n },\r\n xform: fetch_1._sessionResponsePassword,\r\n });\r\n }\r\n else if ('phone' in credentials) {\r\n const { phone, password, options } = credentials;\r\n res = await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/token?grant_type=password`, {\r\n headers: this.headers,\r\n body: {\r\n phone,\r\n password,\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n },\r\n xform: fetch_1._sessionResponsePassword,\r\n });\r\n }\r\n else {\r\n throw new errors_1.AuthInvalidCredentialsError('You must provide either an email or phone number and a password');\r\n }\r\n const { data, error } = res;\r\n if (error) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n else if (!data || !data.session || !data.user) {\r\n return { data: { user: null, session: null }, error: new errors_1.AuthInvalidTokenResponseError() };\r\n }\r\n if (data.session) {\r\n await this._saveSession(data.session);\r\n await this._notifyAllSubscribers('SIGNED_IN', data.session);\r\n }\r\n return {\r\n data: Object.assign({ user: data.user, session: data.session }, (data.weak_password ? { weakPassword: data.weak_password } : null)),\r\n error,\r\n };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Log in an existing user via a third-party provider.\r\n * This method supports the PKCE flow.\r\n */\r\n async signInWithOAuth(credentials) {\r\n var _a, _b, _c, _d;\r\n return await this._handleProviderSignIn(credentials.provider, {\r\n redirectTo: (_a = credentials.options) === null || _a === void 0 ? void 0 : _a.redirectTo,\r\n scopes: (_b = credentials.options) === null || _b === void 0 ? void 0 : _b.scopes,\r\n queryParams: (_c = credentials.options) === null || _c === void 0 ? void 0 : _c.queryParams,\r\n skipBrowserRedirect: (_d = credentials.options) === null || _d === void 0 ? void 0 : _d.skipBrowserRedirect,\r\n });\r\n }\r\n /**\r\n * Log in an existing user by exchanging an Auth Code issued during the PKCE flow.\r\n */\r\n async exchangeCodeForSession(authCode) {\r\n await this.initializePromise;\r\n return this._acquireLock(-1, async () => {\r\n return this._exchangeCodeForSession(authCode);\r\n });\r\n }\r\n /**\r\n * Signs in a user by verifying a message signed by the user's private key.\r\n * Only Solana supported at this time, using the Sign in with Solana standard.\r\n */\r\n async signInWithWeb3(credentials) {\r\n const { chain } = credentials;\r\n if (chain === 'solana') {\r\n return await this.signInWithSolana(credentials);\r\n }\r\n throw new Error(`@supabase/auth-js: Unsupported chain \"${chain}\"`);\r\n }\r\n async signInWithSolana(credentials) {\r\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\r\n let message;\r\n let signature;\r\n if ('message' in credentials) {\r\n message = credentials.message;\r\n signature = credentials.signature;\r\n }\r\n else {\r\n const { chain, wallet, statement, options } = credentials;\r\n let resolvedWallet;\r\n if (!(0, helpers_1.isBrowser)()) {\r\n if (typeof wallet !== 'object' || !(options === null || options === void 0 ? void 0 : options.url)) {\r\n throw new Error('@supabase/auth-js: Both wallet and url must be specified in non-browser environments.');\r\n }\r\n resolvedWallet = wallet;\r\n }\r\n else if (typeof wallet === 'object') {\r\n resolvedWallet = wallet;\r\n }\r\n else {\r\n const windowAny = window;\r\n if ('solana' in windowAny &&\r\n typeof windowAny.solana === 'object' &&\r\n (('signIn' in windowAny.solana && typeof windowAny.solana.signIn === 'function') ||\r\n ('signMessage' in windowAny.solana &&\r\n typeof windowAny.solana.signMessage === 'function'))) {\r\n resolvedWallet = windowAny.solana;\r\n }\r\n else {\r\n throw new Error(`@supabase/auth-js: No compatible Solana wallet interface on the window object (window.solana) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'solana', wallet: resolvedUserWallet }) instead.`);\r\n }\r\n }\r\n const url = new URL((_a = options === null || options === void 0 ? void 0 : options.url) !== null && _a !== void 0 ? _a : window.location.href);\r\n if ('signIn' in resolvedWallet && resolvedWallet.signIn) {\r\n const output = await resolvedWallet.signIn(Object.assign(Object.assign(Object.assign({ issuedAt: new Date().toISOString() }, options === null || options === void 0 ? void 0 : options.signInWithSolana), { \r\n // non-overridable properties\r\n version: '1', domain: url.host, uri: url.href }), (statement ? { statement } : null)));\r\n let outputToProcess;\r\n if (Array.isArray(output) && output[0] && typeof output[0] === 'object') {\r\n outputToProcess = output[0];\r\n }\r\n else if (output &&\r\n typeof output === 'object' &&\r\n 'signedMessage' in output &&\r\n 'signature' in output) {\r\n outputToProcess = output;\r\n }\r\n else {\r\n throw new Error('@supabase/auth-js: Wallet method signIn() returned unrecognized value');\r\n }\r\n if ('signedMessage' in outputToProcess &&\r\n 'signature' in outputToProcess &&\r\n (typeof outputToProcess.signedMessage === 'string' ||\r\n outputToProcess.signedMessage instanceof Uint8Array) &&\r\n outputToProcess.signature instanceof Uint8Array) {\r\n message =\r\n typeof outputToProcess.signedMessage === 'string'\r\n ? outputToProcess.signedMessage\r\n : new TextDecoder().decode(outputToProcess.signedMessage);\r\n signature = outputToProcess.signature;\r\n }\r\n else {\r\n throw new Error('@supabase/auth-js: Wallet method signIn() API returned object without signedMessage and signature fields');\r\n }\r\n }\r\n else {\r\n if (!('signMessage' in resolvedWallet) ||\r\n typeof resolvedWallet.signMessage !== 'function' ||\r\n !('publicKey' in resolvedWallet) ||\r\n typeof resolvedWallet !== 'object' ||\r\n !resolvedWallet.publicKey ||\r\n !('toBase58' in resolvedWallet.publicKey) ||\r\n typeof resolvedWallet.publicKey.toBase58 !== 'function') {\r\n throw new Error('@supabase/auth-js: Wallet does not have a compatible signMessage() and publicKey.toBase58() API');\r\n }\r\n message = [\r\n `${url.host} wants you to sign in with your Solana account:`,\r\n resolvedWallet.publicKey.toBase58(),\r\n ...(statement ? ['', statement, ''] : ['']),\r\n 'Version: 1',\r\n `URI: ${url.href}`,\r\n `Issued At: ${(_c = (_b = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _b === void 0 ? void 0 : _b.issuedAt) !== null && _c !== void 0 ? _c : new Date().toISOString()}`,\r\n ...(((_d = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _d === void 0 ? void 0 : _d.notBefore)\r\n ? [`Not Before: ${options.signInWithSolana.notBefore}`]\r\n : []),\r\n ...(((_e = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _e === void 0 ? void 0 : _e.expirationTime)\r\n ? [`Expiration Time: ${options.signInWithSolana.expirationTime}`]\r\n : []),\r\n ...(((_f = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _f === void 0 ? void 0 : _f.chainId)\r\n ? [`Chain ID: ${options.signInWithSolana.chainId}`]\r\n : []),\r\n ...(((_g = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _g === void 0 ? void 0 : _g.nonce) ? [`Nonce: ${options.signInWithSolana.nonce}`] : []),\r\n ...(((_h = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _h === void 0 ? void 0 : _h.requestId)\r\n ? [`Request ID: ${options.signInWithSolana.requestId}`]\r\n : []),\r\n ...(((_k = (_j = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _j === void 0 ? void 0 : _j.resources) === null || _k === void 0 ? void 0 : _k.length)\r\n ? [\r\n 'Resources',\r\n ...options.signInWithSolana.resources.map((resource) => `- ${resource}`),\r\n ]\r\n : []),\r\n ].join('\\n');\r\n const maybeSignature = await resolvedWallet.signMessage(new TextEncoder().encode(message), 'utf8');\r\n if (!maybeSignature || !(maybeSignature instanceof Uint8Array)) {\r\n throw new Error('@supabase/auth-js: Wallet signMessage() API returned an recognized value');\r\n }\r\n signature = maybeSignature;\r\n }\r\n }\r\n try {\r\n const { data, error } = await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/token?grant_type=web3`, {\r\n headers: this.headers,\r\n body: Object.assign({ chain: 'solana', message, signature: (0, base64url_1.bytesToBase64URL)(signature) }, (((_l = credentials.options) === null || _l === void 0 ? void 0 : _l.captchaToken)\r\n ? { gotrue_meta_security: { captcha_token: (_m = credentials.options) === null || _m === void 0 ? void 0 : _m.captchaToken } }\r\n : null)),\r\n xform: fetch_1._sessionResponse,\r\n });\r\n if (error) {\r\n throw error;\r\n }\r\n if (!data || !data.session || !data.user) {\r\n return {\r\n data: { user: null, session: null },\r\n error: new errors_1.AuthInvalidTokenResponseError(),\r\n };\r\n }\r\n if (data.session) {\r\n await this._saveSession(data.session);\r\n await this._notifyAllSubscribers('SIGNED_IN', data.session);\r\n }\r\n return { data: Object.assign({}, data), error };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n async _exchangeCodeForSession(authCode) {\r\n const storageItem = await (0, helpers_1.getItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\r\n const [codeVerifier, redirectType] = (storageItem !== null && storageItem !== void 0 ? storageItem : '').split('/');\r\n try {\r\n const { data, error } = await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/token?grant_type=pkce`, {\r\n headers: this.headers,\r\n body: {\r\n auth_code: authCode,\r\n code_verifier: codeVerifier,\r\n },\r\n xform: fetch_1._sessionResponse,\r\n });\r\n await (0, helpers_1.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\r\n if (error) {\r\n throw error;\r\n }\r\n if (!data || !data.session || !data.user) {\r\n return {\r\n data: { user: null, session: null, redirectType: null },\r\n error: new errors_1.AuthInvalidTokenResponseError(),\r\n };\r\n }\r\n if (data.session) {\r\n await this._saveSession(data.session);\r\n await this._notifyAllSubscribers('SIGNED_IN', data.session);\r\n }\r\n return { data: Object.assign(Object.assign({}, data), { redirectType: redirectType !== null && redirectType !== void 0 ? redirectType : null }), error };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null, session: null, redirectType: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Allows signing in with an OIDC ID token. The authentication provider used\r\n * should be enabled and configured.\r\n */\r\n async signInWithIdToken(credentials) {\r\n try {\r\n const { options, provider, token, access_token, nonce } = credentials;\r\n const res = await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/token?grant_type=id_token`, {\r\n headers: this.headers,\r\n body: {\r\n provider,\r\n id_token: token,\r\n access_token,\r\n nonce,\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n },\r\n xform: fetch_1._sessionResponse,\r\n });\r\n const { data, error } = res;\r\n if (error) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n else if (!data || !data.session || !data.user) {\r\n return {\r\n data: { user: null, session: null },\r\n error: new errors_1.AuthInvalidTokenResponseError(),\r\n };\r\n }\r\n if (data.session) {\r\n await this._saveSession(data.session);\r\n await this._notifyAllSubscribers('SIGNED_IN', data.session);\r\n }\r\n return { data, error };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Log in a user using magiclink or a one-time password (OTP).\r\n *\r\n * If the `{{ .ConfirmationURL }}` variable is specified in the email template, a magiclink will be sent.\r\n * If the `{{ .Token }}` variable is specified in the email template, an OTP will be sent.\r\n * If you're using phone sign-ins, only an OTP will be sent. You won't be able to send a magiclink for phone sign-ins.\r\n *\r\n * Be aware that you may get back an error message that will not distinguish\r\n * between the cases where the account does not exist or, that the account\r\n * can only be accessed via social login.\r\n *\r\n * Do note that you will need to configure a Whatsapp sender on Twilio\r\n * if you are using phone sign in with the 'whatsapp' channel. The whatsapp\r\n * channel is not supported on other providers\r\n * at this time.\r\n * This method supports PKCE when an email is passed.\r\n */\r\n async signInWithOtp(credentials) {\r\n var _a, _b, _c, _d, _e;\r\n try {\r\n if ('email' in credentials) {\r\n const { email, options } = credentials;\r\n let codeChallenge = null;\r\n let codeChallengeMethod = null;\r\n if (this.flowType === 'pkce') {\r\n ;\r\n [codeChallenge, codeChallengeMethod] = await (0, helpers_1.getCodeChallengeAndMethod)(this.storage, this.storageKey);\r\n }\r\n const { error } = await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/otp`, {\r\n headers: this.headers,\r\n body: {\r\n email,\r\n data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : {},\r\n create_user: (_b = options === null || options === void 0 ? void 0 : options.shouldCreateUser) !== null && _b !== void 0 ? _b : true,\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n code_challenge: codeChallenge,\r\n code_challenge_method: codeChallengeMethod,\r\n },\r\n redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\r\n });\r\n return { data: { user: null, session: null }, error };\r\n }\r\n if ('phone' in credentials) {\r\n const { phone, options } = credentials;\r\n const { data, error } = await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/otp`, {\r\n headers: this.headers,\r\n body: {\r\n phone,\r\n data: (_c = options === null || options === void 0 ? void 0 : options.data) !== null && _c !== void 0 ? _c : {},\r\n create_user: (_d = options === null || options === void 0 ? void 0 : options.shouldCreateUser) !== null && _d !== void 0 ? _d : true,\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n channel: (_e = options === null || options === void 0 ? void 0 : options.channel) !== null && _e !== void 0 ? _e : 'sms',\r\n },\r\n });\r\n return { data: { user: null, session: null, messageId: data === null || data === void 0 ? void 0 : data.message_id }, error };\r\n }\r\n throw new errors_1.AuthInvalidCredentialsError('You must provide either an email or phone number.');\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Log in a user given a User supplied OTP or TokenHash received through mobile or email.\r\n */\r\n async verifyOtp(params) {\r\n var _a, _b;\r\n try {\r\n let redirectTo = undefined;\r\n let captchaToken = undefined;\r\n if ('options' in params) {\r\n redirectTo = (_a = params.options) === null || _a === void 0 ? void 0 : _a.redirectTo;\r\n captchaToken = (_b = params.options) === null || _b === void 0 ? void 0 : _b.captchaToken;\r\n }\r\n const { data, error } = await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/verify`, {\r\n headers: this.headers,\r\n body: Object.assign(Object.assign({}, params), { gotrue_meta_security: { captcha_token: captchaToken } }),\r\n redirectTo,\r\n xform: fetch_1._sessionResponse,\r\n });\r\n if (error) {\r\n throw error;\r\n }\r\n if (!data) {\r\n throw new Error('An error occurred on token verification.');\r\n }\r\n const session = data.session;\r\n const user = data.user;\r\n if (session === null || session === void 0 ? void 0 : session.access_token) {\r\n await this._saveSession(session);\r\n await this._notifyAllSubscribers(params.type == 'recovery' ? 'PASSWORD_RECOVERY' : 'SIGNED_IN', session);\r\n }\r\n return { data: { user, session }, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Attempts a single-sign on using an enterprise Identity Provider. A\r\n * successful SSO attempt will redirect the current page to the identity\r\n * provider authorization page. The redirect URL is implementation and SSO\r\n * protocol specific.\r\n *\r\n * You can use it by providing a SSO domain. Typically you can extract this\r\n * domain by asking users for their email address. If this domain is\r\n * registered on the Auth instance the redirect will use that organization's\r\n * currently active SSO Identity Provider for the login.\r\n *\r\n * If you have built an organization-specific login page, you can use the\r\n * organization's SSO Identity Provider UUID directly instead.\r\n */\r\n async signInWithSSO(params) {\r\n var _a, _b, _c;\r\n try {\r\n let codeChallenge = null;\r\n let codeChallengeMethod = null;\r\n if (this.flowType === 'pkce') {\r\n ;\r\n [codeChallenge, codeChallengeMethod] = await (0, helpers_1.getCodeChallengeAndMethod)(this.storage, this.storageKey);\r\n }\r\n return await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/sso`, {\r\n body: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, ('providerId' in params ? { provider_id: params.providerId } : null)), ('domain' in params ? { domain: params.domain } : null)), { redirect_to: (_b = (_a = params.options) === null || _a === void 0 ? void 0 : _a.redirectTo) !== null && _b !== void 0 ? _b : undefined }), (((_c = params === null || params === void 0 ? void 0 : params.options) === null || _c === void 0 ? void 0 : _c.captchaToken)\r\n ? { gotrue_meta_security: { captcha_token: params.options.captchaToken } }\r\n : null)), { skip_http_redirect: true, code_challenge: codeChallenge, code_challenge_method: codeChallengeMethod }),\r\n headers: this.headers,\r\n xform: fetch_1._ssoResponse,\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Sends a reauthentication OTP to the user's email or phone number.\r\n * Requires the user to be signed-in.\r\n */\r\n async reauthenticate() {\r\n await this.initializePromise;\r\n return await this._acquireLock(-1, async () => {\r\n return await this._reauthenticate();\r\n });\r\n }\r\n async _reauthenticate() {\r\n try {\r\n return await this._useSession(async (result) => {\r\n const { data: { session }, error: sessionError, } = result;\r\n if (sessionError)\r\n throw sessionError;\r\n if (!session)\r\n throw new errors_1.AuthSessionMissingError();\r\n const { error } = await (0, fetch_1._request)(this.fetch, 'GET', `${this.url}/reauthenticate`, {\r\n headers: this.headers,\r\n jwt: session.access_token,\r\n });\r\n return { data: { user: null, session: null }, error };\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Resends an existing signup confirmation email, email change email, SMS OTP or phone change OTP.\r\n */\r\n async resend(credentials) {\r\n try {\r\n const endpoint = `${this.url}/resend`;\r\n if ('email' in credentials) {\r\n const { email, type, options } = credentials;\r\n const { error } = await (0, fetch_1._request)(this.fetch, 'POST', endpoint, {\r\n headers: this.headers,\r\n body: {\r\n email,\r\n type,\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n },\r\n redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\r\n });\r\n return { data: { user: null, session: null }, error };\r\n }\r\n else if ('phone' in credentials) {\r\n const { phone, type, options } = credentials;\r\n const { data, error } = await (0, fetch_1._request)(this.fetch, 'POST', endpoint, {\r\n headers: this.headers,\r\n body: {\r\n phone,\r\n type,\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n },\r\n });\r\n return { data: { user: null, session: null, messageId: data === null || data === void 0 ? void 0 : data.message_id }, error };\r\n }\r\n throw new errors_1.AuthInvalidCredentialsError('You must provide either an email or phone number and a type');\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Returns the session, refreshing it if necessary.\r\n *\r\n * The session returned can be null if the session is not detected which can happen in the event a user is not signed-in or has logged out.\r\n *\r\n * **IMPORTANT:** This method loads values directly from the storage attached\r\n * to the client. If that storage is based on request cookies for example,\r\n * the values in it may not be authentic and therefore it's strongly advised\r\n * against using this method and its results in such circumstances. A warning\r\n * will be emitted if this is detected. Use {@link #getUser()} instead.\r\n */\r\n async getSession() {\r\n await this.initializePromise;\r\n const result = await this._acquireLock(-1, async () => {\r\n return this._useSession(async (result) => {\r\n return result;\r\n });\r\n });\r\n return result;\r\n }\r\n /**\r\n * Acquires a global lock based on the storage key.\r\n */\r\n async _acquireLock(acquireTimeout, fn) {\r\n this._debug('#_acquireLock', 'begin', acquireTimeout);\r\n try {\r\n if (this.lockAcquired) {\r\n const last = this.pendingInLock.length\r\n ? this.pendingInLock[this.pendingInLock.length - 1]\r\n : Promise.resolve();\r\n const result = (async () => {\r\n await last;\r\n return await fn();\r\n })();\r\n this.pendingInLock.push((async () => {\r\n try {\r\n await result;\r\n }\r\n catch (e) {\r\n // we just care if it finished\r\n }\r\n })());\r\n return result;\r\n }\r\n return await this.lock(`lock:${this.storageKey}`, acquireTimeout, async () => {\r\n this._debug('#_acquireLock', 'lock acquired for storage key', this.storageKey);\r\n try {\r\n this.lockAcquired = true;\r\n const result = fn();\r\n this.pendingInLock.push((async () => {\r\n try {\r\n await result;\r\n }\r\n catch (e) {\r\n // we just care if it finished\r\n }\r\n })());\r\n await result;\r\n // keep draining the queue until there's nothing to wait on\r\n while (this.pendingInLock.length) {\r\n const waitOn = [...this.pendingInLock];\r\n await Promise.all(waitOn);\r\n this.pendingInLock.splice(0, waitOn.length);\r\n }\r\n return await result;\r\n }\r\n finally {\r\n this._debug('#_acquireLock', 'lock released for storage key', this.storageKey);\r\n this.lockAcquired = false;\r\n }\r\n });\r\n }\r\n finally {\r\n this._debug('#_acquireLock', 'end');\r\n }\r\n }\r\n /**\r\n * Use instead of {@link #getSession} inside the library. It is\r\n * semantically usually what you want, as getting a session involves some\r\n * processing afterwards that requires only one client operating on the\r\n * session at once across multiple tabs or processes.\r\n */\r\n async _useSession(fn) {\r\n this._debug('#_useSession', 'begin');\r\n try {\r\n // the use of __loadSession here is the only correct use of the function!\r\n const result = await this.__loadSession();\r\n return await fn(result);\r\n }\r\n finally {\r\n this._debug('#_useSession', 'end');\r\n }\r\n }\r\n /**\r\n * NEVER USE DIRECTLY!\r\n *\r\n * Always use {@link #_useSession}.\r\n */\r\n async __loadSession() {\r\n this._debug('#__loadSession()', 'begin');\r\n if (!this.lockAcquired) {\r\n this._debug('#__loadSession()', 'used outside of an acquired lock!', new Error().stack);\r\n }\r\n try {\r\n let currentSession = null;\r\n const maybeSession = await (0, helpers_1.getItemAsync)(this.storage, this.storageKey);\r\n this._debug('#getSession()', 'session from storage', maybeSession);\r\n if (maybeSession !== null) {\r\n if (this._isValidSession(maybeSession)) {\r\n currentSession = maybeSession;\r\n }\r\n else {\r\n this._debug('#getSession()', 'session from storage is not valid');\r\n await this._removeSession();\r\n }\r\n }\r\n if (!currentSession) {\r\n return { data: { session: null }, error: null };\r\n }\r\n // A session is considered expired before the access token _actually_\r\n // expires. When the autoRefreshToken option is off (or when the tab is\r\n // in the background), very eager users of getSession() -- like\r\n // realtime-js -- might send a valid JWT which will expire by the time it\r\n // reaches the server.\r\n const hasExpired = currentSession.expires_at\r\n ? currentSession.expires_at * 1000 - Date.now() < constants_1.EXPIRY_MARGIN_MS\r\n : false;\r\n this._debug('#__loadSession()', `session has${hasExpired ? '' : ' not'} expired`, 'expires_at', currentSession.expires_at);\r\n if (!hasExpired) {\r\n if (this.userStorage) {\r\n const maybeUser = (await (0, helpers_1.getItemAsync)(this.userStorage, this.storageKey + '-user'));\r\n if (maybeUser === null || maybeUser === void 0 ? void 0 : maybeUser.user) {\r\n currentSession.user = maybeUser.user;\r\n }\r\n else {\r\n currentSession.user = (0, helpers_1.userNotAvailableProxy)();\r\n }\r\n }\r\n if (this.storage.isServer && currentSession.user) {\r\n let suppressWarning = this.suppressGetSessionWarning;\r\n const proxySession = new Proxy(currentSession, {\r\n get: (target, prop, receiver) => {\r\n if (!suppressWarning && prop === 'user') {\r\n // only show warning when the user object is being accessed from the server\r\n console.warn('Using the user object as returned from supabase.auth.getSession() or from some supabase.auth.onAuthStateChange() events could be insecure! This value comes directly from the storage medium (usually cookies on the server) and may not be authentic. Use supabase.auth.getUser() instead which authenticates the data by contacting the Supabase Auth server.');\r\n suppressWarning = true; // keeps this proxy instance from logging additional warnings\r\n this.suppressGetSessionWarning = true; // keeps this client's future proxy instances from warning\r\n }\r\n return Reflect.get(target, prop, receiver);\r\n },\r\n });\r\n currentSession = proxySession;\r\n }\r\n return { data: { session: currentSession }, error: null };\r\n }\r\n const { session, error } = await this._callRefreshToken(currentSession.refresh_token);\r\n if (error) {\r\n return { data: { session: null }, error };\r\n }\r\n return { data: { session }, error: null };\r\n }\r\n finally {\r\n this._debug('#__loadSession()', 'end');\r\n }\r\n }\r\n /**\r\n * Gets the current user details if there is an existing session. This method\r\n * performs a network request to the Supabase Auth server, so the returned\r\n * value is authentic and can be used to base authorization rules on.\r\n *\r\n * @param jwt Takes in an optional access token JWT. If no JWT is provided, the JWT from the current session is used.\r\n */\r\n async getUser(jwt) {\r\n if (jwt) {\r\n return await this._getUser(jwt);\r\n }\r\n await this.initializePromise;\r\n const result = await this._acquireLock(-1, async () => {\r\n return await this._getUser();\r\n });\r\n return result;\r\n }\r\n async _getUser(jwt) {\r\n try {\r\n if (jwt) {\r\n return await (0, fetch_1._request)(this.fetch, 'GET', `${this.url}/user`, {\r\n headers: this.headers,\r\n jwt: jwt,\r\n xform: fetch_1._userResponse,\r\n });\r\n }\r\n return await this._useSession(async (result) => {\r\n var _a, _b, _c;\r\n const { data, error } = result;\r\n if (error) {\r\n throw error;\r\n }\r\n // returns an error if there is no access_token or custom authorization header\r\n if (!((_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token) && !this.hasCustomAuthorizationHeader) {\r\n return { data: { user: null }, error: new errors_1.AuthSessionMissingError() };\r\n }\r\n return await (0, fetch_1._request)(this.fetch, 'GET', `${this.url}/user`, {\r\n headers: this.headers,\r\n jwt: (_c = (_b = data.session) === null || _b === void 0 ? void 0 : _b.access_token) !== null && _c !== void 0 ? _c : undefined,\r\n xform: fetch_1._userResponse,\r\n });\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n if ((0, errors_1.isAuthSessionMissingError)(error)) {\r\n // JWT contains a `session_id` which does not correspond to an active\r\n // session in the database, indicating the user is signed out.\r\n await this._removeSession();\r\n await (0, helpers_1.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\r\n }\r\n return { data: { user: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Updates user data for a logged in user.\r\n */\r\n async updateUser(attributes, options = {}) {\r\n await this.initializePromise;\r\n return await this._acquireLock(-1, async () => {\r\n return await this._updateUser(attributes, options);\r\n });\r\n }\r\n async _updateUser(attributes, options = {}) {\r\n try {\r\n return await this._useSession(async (result) => {\r\n const { data: sessionData, error: sessionError } = result;\r\n if (sessionError) {\r\n throw sessionError;\r\n }\r\n if (!sessionData.session) {\r\n throw new errors_1.AuthSessionMissingError();\r\n }\r\n const session = sessionData.session;\r\n let codeChallenge = null;\r\n let codeChallengeMethod = null;\r\n if (this.flowType === 'pkce' && attributes.email != null) {\r\n ;\r\n [codeChallenge, codeChallengeMethod] = await (0, helpers_1.getCodeChallengeAndMethod)(this.storage, this.storageKey);\r\n }\r\n const { data, error: userError } = await (0, fetch_1._request)(this.fetch, 'PUT', `${this.url}/user`, {\r\n headers: this.headers,\r\n redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\r\n body: Object.assign(Object.assign({}, attributes), { code_challenge: codeChallenge, code_challenge_method: codeChallengeMethod }),\r\n jwt: session.access_token,\r\n xform: fetch_1._userResponse,\r\n });\r\n if (userError)\r\n throw userError;\r\n session.user = data.user;\r\n await this._saveSession(session);\r\n await this._notifyAllSubscribers('USER_UPDATED', session);\r\n return { data: { user: session.user }, error: null };\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Sets the session data from the current session. If the current session is expired, setSession will take care of refreshing it to obtain a new session.\r\n * If the refresh token or access token in the current session is invalid, an error will be thrown.\r\n * @param currentSession The current session that minimally contains an access token and refresh token.\r\n */\r\n async setSession(currentSession) {\r\n await this.initializePromise;\r\n return await this._acquireLock(-1, async () => {\r\n return await this._setSession(currentSession);\r\n });\r\n }\r\n async _setSession(currentSession) {\r\n try {\r\n if (!currentSession.access_token || !currentSession.refresh_token) {\r\n throw new errors_1.AuthSessionMissingError();\r\n }\r\n const timeNow = Date.now() / 1000;\r\n let expiresAt = timeNow;\r\n let hasExpired = true;\r\n let session = null;\r\n const { payload } = (0, helpers_1.decodeJWT)(currentSession.access_token);\r\n if (payload.exp) {\r\n expiresAt = payload.exp;\r\n hasExpired = expiresAt <= timeNow;\r\n }\r\n if (hasExpired) {\r\n const { session: refreshedSession, error } = await this._callRefreshToken(currentSession.refresh_token);\r\n if (error) {\r\n return { data: { user: null, session: null }, error: error };\r\n }\r\n if (!refreshedSession) {\r\n return { data: { user: null, session: null }, error: null };\r\n }\r\n session = refreshedSession;\r\n }\r\n else {\r\n const { data, error } = await this._getUser(currentSession.access_token);\r\n if (error) {\r\n throw error;\r\n }\r\n session = {\r\n access_token: currentSession.access_token,\r\n refresh_token: currentSession.refresh_token,\r\n user: data.user,\r\n token_type: 'bearer',\r\n expires_in: expiresAt - timeNow,\r\n expires_at: expiresAt,\r\n };\r\n await this._saveSession(session);\r\n await this._notifyAllSubscribers('SIGNED_IN', session);\r\n }\r\n return { data: { user: session.user, session }, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { session: null, user: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Returns a new session, regardless of expiry status.\r\n * Takes in an optional current session. If not passed in, then refreshSession() will attempt to retrieve it from getSession().\r\n * If the current session's refresh token is invalid, an error will be thrown.\r\n * @param currentSession The current session. If passed in, it must contain a refresh token.\r\n */\r\n async refreshSession(currentSession) {\r\n await this.initializePromise;\r\n return await this._acquireLock(-1, async () => {\r\n return await this._refreshSession(currentSession);\r\n });\r\n }\r\n async _refreshSession(currentSession) {\r\n try {\r\n return await this._useSession(async (result) => {\r\n var _a;\r\n if (!currentSession) {\r\n const { data, error } = result;\r\n if (error) {\r\n throw error;\r\n }\r\n currentSession = (_a = data.session) !== null && _a !== void 0 ? _a : undefined;\r\n }\r\n if (!(currentSession === null || currentSession === void 0 ? void 0 : currentSession.refresh_token)) {\r\n throw new errors_1.AuthSessionMissingError();\r\n }\r\n const { session, error } = await this._callRefreshToken(currentSession.refresh_token);\r\n if (error) {\r\n return { data: { user: null, session: null }, error: error };\r\n }\r\n if (!session) {\r\n return { data: { user: null, session: null }, error: null };\r\n }\r\n return { data: { user: session.user, session }, error: null };\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Gets the session data from a URL string\r\n */\r\n async _getSessionFromURL(params, callbackUrlType) {\r\n try {\r\n if (!(0, helpers_1.isBrowser)())\r\n throw new errors_1.AuthImplicitGrantRedirectError('No browser detected.');\r\n // If there's an error in the URL, it doesn't matter what flow it is, we just return the error.\r\n if (params.error || params.error_description || params.error_code) {\r\n // The error class returned implies that the redirect is from an implicit grant flow\r\n // but it could also be from a redirect error from a PKCE flow.\r\n throw new errors_1.AuthImplicitGrantRedirectError(params.error_description || 'Error in URL with unspecified error_description', {\r\n error: params.error || 'unspecified_error',\r\n code: params.error_code || 'unspecified_code',\r\n });\r\n }\r\n // Checks for mismatches between the flowType initialised in the client and the URL parameters\r\n switch (callbackUrlType) {\r\n case 'implicit':\r\n if (this.flowType === 'pkce') {\r\n throw new errors_1.AuthPKCEGrantCodeExchangeError('Not a valid PKCE flow url.');\r\n }\r\n break;\r\n case 'pkce':\r\n if (this.flowType === 'implicit') {\r\n throw new errors_1.AuthImplicitGrantRedirectError('Not a valid implicit grant flow url.');\r\n }\r\n break;\r\n default:\r\n // there's no mismatch so we continue\r\n }\r\n // Since this is a redirect for PKCE, we attempt to retrieve the code from the URL for the code exchange\r\n if (callbackUrlType === 'pkce') {\r\n this._debug('#_initialize()', 'begin', 'is PKCE flow', true);\r\n if (!params.code)\r\n throw new errors_1.AuthPKCEGrantCodeExchangeError('No code detected.');\r\n const { data, error } = await this._exchangeCodeForSession(params.code);\r\n if (error)\r\n throw error;\r\n const url = new URL(window.location.href);\r\n url.searchParams.delete('code');\r\n window.history.replaceState(window.history.state, '', url.toString());\r\n return { data: { session: data.session, redirectType: null }, error: null };\r\n }\r\n const { provider_token, provider_refresh_token, access_token, refresh_token, expires_in, expires_at, token_type, } = params;\r\n if (!access_token || !expires_in || !refresh_token || !token_type) {\r\n throw new errors_1.AuthImplicitGrantRedirectError('No session defined in URL');\r\n }\r\n const timeNow = Math.round(Date.now() / 1000);\r\n const expiresIn = parseInt(expires_in);\r\n let expiresAt = timeNow + expiresIn;\r\n if (expires_at) {\r\n expiresAt = parseInt(expires_at);\r\n }\r\n const actuallyExpiresIn = expiresAt - timeNow;\r\n if (actuallyExpiresIn * 1000 <= constants_1.AUTO_REFRESH_TICK_DURATION_MS) {\r\n console.warn(`@supabase/gotrue-js: Session as retrieved from URL expires in ${actuallyExpiresIn}s, should have been closer to ${expiresIn}s`);\r\n }\r\n const issuedAt = expiresAt - expiresIn;\r\n if (timeNow - issuedAt >= 120) {\r\n console.warn('@supabase/gotrue-js: Session as retrieved from URL was issued over 120s ago, URL could be stale', issuedAt, expiresAt, timeNow);\r\n }\r\n else if (timeNow - issuedAt < 0) {\r\n console.warn('@supabase/gotrue-js: Session as retrieved from URL was issued in the future? Check the device clock for skew', issuedAt, expiresAt, timeNow);\r\n }\r\n const { data, error } = await this._getUser(access_token);\r\n if (error)\r\n throw error;\r\n const session = {\r\n provider_token,\r\n provider_refresh_token,\r\n access_token,\r\n expires_in: expiresIn,\r\n expires_at: expiresAt,\r\n refresh_token,\r\n token_type,\r\n user: data.user,\r\n };\r\n // Remove tokens from URL\r\n window.location.hash = '';\r\n this._debug('#_getSessionFromURL()', 'clearing window.location.hash');\r\n return { data: { session, redirectType: params.type }, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { session: null, redirectType: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Checks if the current URL contains parameters given by an implicit oauth grant flow (https://www.rfc-editor.org/rfc/rfc6749.html#section-4.2)\r\n */\r\n _isImplicitGrantCallback(params) {\r\n return Boolean(params.access_token || params.error_description);\r\n }\r\n /**\r\n * Checks if the current URL and backing storage contain parameters given by a PKCE flow\r\n */\r\n async _isPKCECallback(params) {\r\n const currentStorageContent = await (0, helpers_1.getItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\r\n return !!(params.code && currentStorageContent);\r\n }\r\n /**\r\n * Inside a browser context, `signOut()` will remove the logged in user from the browser session and log them out - removing all items from localstorage and then trigger a `\"SIGNED_OUT\"` event.\r\n *\r\n * For server-side management, you can revoke all refresh tokens for a user by passing a user's JWT through to `auth.api.signOut(JWT: string)`.\r\n * There is no way to revoke a user's access token jwt until it expires. It is recommended to set a shorter expiry on the jwt for this reason.\r\n *\r\n * If using `others` scope, no `SIGNED_OUT` event is fired!\r\n */\r\n async signOut(options = { scope: 'global' }) {\r\n await this.initializePromise;\r\n return await this._acquireLock(-1, async () => {\r\n return await this._signOut(options);\r\n });\r\n }\r\n async _signOut({ scope } = { scope: 'global' }) {\r\n return await this._useSession(async (result) => {\r\n var _a;\r\n const { data, error: sessionError } = result;\r\n if (sessionError) {\r\n return { error: sessionError };\r\n }\r\n const accessToken = (_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token;\r\n if (accessToken) {\r\n const { error } = await this.admin.signOut(accessToken, scope);\r\n if (error) {\r\n // ignore 404s since user might not exist anymore\r\n // ignore 401s since an invalid or expired JWT should sign out the current session\r\n if (!((0, errors_1.isAuthApiError)(error) &&\r\n (error.status === 404 || error.status === 401 || error.status === 403))) {\r\n return { error };\r\n }\r\n }\r\n }\r\n if (scope !== 'others') {\r\n await this._removeSession();\r\n await (0, helpers_1.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\r\n }\r\n return { error: null };\r\n });\r\n }\r\n /**\r\n * Receive a notification every time an auth event happens.\r\n * @param callback A callback function to be invoked when an auth event happens.\r\n */\r\n onAuthStateChange(callback) {\r\n const id = (0, helpers_1.uuid)();\r\n const subscription = {\r\n id,\r\n callback,\r\n unsubscribe: () => {\r\n this._debug('#unsubscribe()', 'state change callback with id removed', id);\r\n this.stateChangeEmitters.delete(id);\r\n },\r\n };\r\n this._debug('#onAuthStateChange()', 'registered callback with id', id);\r\n this.stateChangeEmitters.set(id, subscription);\r\n (async () => {\r\n await this.initializePromise;\r\n await this._acquireLock(-1, async () => {\r\n this._emitInitialSession(id);\r\n });\r\n })();\r\n return { data: { subscription } };\r\n }\r\n async _emitInitialSession(id) {\r\n return await this._useSession(async (result) => {\r\n var _a, _b;\r\n try {\r\n const { data: { session }, error, } = result;\r\n if (error)\r\n throw error;\r\n await ((_a = this.stateChangeEmitters.get(id)) === null || _a === void 0 ? void 0 : _a.callback('INITIAL_SESSION', session));\r\n this._debug('INITIAL_SESSION', 'callback id', id, 'session', session);\r\n }\r\n catch (err) {\r\n await ((_b = this.stateChangeEmitters.get(id)) === null || _b === void 0 ? void 0 : _b.callback('INITIAL_SESSION', null));\r\n this._debug('INITIAL_SESSION', 'callback id', id, 'error', err);\r\n console.error(err);\r\n }\r\n });\r\n }\r\n /**\r\n * Sends a password reset request to an email address. This method supports the PKCE flow.\r\n *\r\n * @param email The email address of the user.\r\n * @param options.redirectTo The URL to send the user to after they click the password reset link.\r\n * @param options.captchaToken Verification token received when the user completes the captcha on the site.\r\n */\r\n async resetPasswordForEmail(email, options = {}) {\r\n let codeChallenge = null;\r\n let codeChallengeMethod = null;\r\n if (this.flowType === 'pkce') {\r\n ;\r\n [codeChallenge, codeChallengeMethod] = await (0, helpers_1.getCodeChallengeAndMethod)(this.storage, this.storageKey, true // isPasswordRecovery\r\n );\r\n }\r\n try {\r\n return await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/recover`, {\r\n body: {\r\n email,\r\n code_challenge: codeChallenge,\r\n code_challenge_method: codeChallengeMethod,\r\n gotrue_meta_security: { captcha_token: options.captchaToken },\r\n },\r\n headers: this.headers,\r\n redirectTo: options.redirectTo,\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Gets all the identities linked to a user.\r\n */\r\n async getUserIdentities() {\r\n var _a;\r\n try {\r\n const { data, error } = await this.getUser();\r\n if (error)\r\n throw error;\r\n return { data: { identities: (_a = data.user.identities) !== null && _a !== void 0 ? _a : [] }, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Links an oauth identity to an existing user.\r\n * This method supports the PKCE flow.\r\n */\r\n async linkIdentity(credentials) {\r\n var _a;\r\n try {\r\n const { data, error } = await this._useSession(async (result) => {\r\n var _a, _b, _c, _d, _e;\r\n const { data, error } = result;\r\n if (error)\r\n throw error;\r\n const url = await this._getUrlForProvider(`${this.url}/user/identities/authorize`, credentials.provider, {\r\n redirectTo: (_a = credentials.options) === null || _a === void 0 ? void 0 : _a.redirectTo,\r\n scopes: (_b = credentials.options) === null || _b === void 0 ? void 0 : _b.scopes,\r\n queryParams: (_c = credentials.options) === null || _c === void 0 ? void 0 : _c.queryParams,\r\n skipBrowserRedirect: true,\r\n });\r\n return await (0, fetch_1._request)(this.fetch, 'GET', url, {\r\n headers: this.headers,\r\n jwt: (_e = (_d = data.session) === null || _d === void 0 ? void 0 : _d.access_token) !== null && _e !== void 0 ? _e : undefined,\r\n });\r\n });\r\n if (error)\r\n throw error;\r\n if ((0, helpers_1.isBrowser)() && !((_a = credentials.options) === null || _a === void 0 ? void 0 : _a.skipBrowserRedirect)) {\r\n window.location.assign(data === null || data === void 0 ? void 0 : data.url);\r\n }\r\n return { data: { provider: credentials.provider, url: data === null || data === void 0 ? void 0 : data.url }, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { provider: credentials.provider, url: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Unlinks an identity from a user by deleting it. The user will no longer be able to sign in with that identity once it's unlinked.\r\n */\r\n async unlinkIdentity(identity) {\r\n try {\r\n return await this._useSession(async (result) => {\r\n var _a, _b;\r\n const { data, error } = result;\r\n if (error) {\r\n throw error;\r\n }\r\n return await (0, fetch_1._request)(this.fetch, 'DELETE', `${this.url}/user/identities/${identity.identity_id}`, {\r\n headers: this.headers,\r\n jwt: (_b = (_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token) !== null && _b !== void 0 ? _b : undefined,\r\n });\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Generates a new JWT.\r\n * @param refreshToken A valid refresh token that was returned on login.\r\n */\r\n async _refreshAccessToken(refreshToken) {\r\n const debugName = `#_refreshAccessToken(${refreshToken.substring(0, 5)}...)`;\r\n this._debug(debugName, 'begin');\r\n try {\r\n const startedAt = Date.now();\r\n // will attempt to refresh the token with exponential backoff\r\n return await (0, helpers_1.retryable)(async (attempt) => {\r\n if (attempt > 0) {\r\n await (0, helpers_1.sleep)(200 * Math.pow(2, attempt - 1)); // 200, 400, 800, ...\r\n }\r\n this._debug(debugName, 'refreshing attempt', attempt);\r\n return await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/token?grant_type=refresh_token`, {\r\n body: { refresh_token: refreshToken },\r\n headers: this.headers,\r\n xform: fetch_1._sessionResponse,\r\n });\r\n }, (attempt, error) => {\r\n const nextBackOffInterval = 200 * Math.pow(2, attempt);\r\n return (error &&\r\n (0, errors_1.isAuthRetryableFetchError)(error) &&\r\n // retryable only if the request can be sent before the backoff overflows the tick duration\r\n Date.now() + nextBackOffInterval - startedAt < constants_1.AUTO_REFRESH_TICK_DURATION_MS);\r\n });\r\n }\r\n catch (error) {\r\n this._debug(debugName, 'error', error);\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: { session: null, user: null }, error };\r\n }\r\n throw error;\r\n }\r\n finally {\r\n this._debug(debugName, 'end');\r\n }\r\n }\r\n _isValidSession(maybeSession) {\r\n const isValidSession = typeof maybeSession === 'object' &&\r\n maybeSession !== null &&\r\n 'access_token' in maybeSession &&\r\n 'refresh_token' in maybeSession &&\r\n 'expires_at' in maybeSession;\r\n return isValidSession;\r\n }\r\n async _handleProviderSignIn(provider, options) {\r\n const url = await this._getUrlForProvider(`${this.url}/authorize`, provider, {\r\n redirectTo: options.redirectTo,\r\n scopes: options.scopes,\r\n queryParams: options.queryParams,\r\n });\r\n this._debug('#_handleProviderSignIn()', 'provider', provider, 'options', options, 'url', url);\r\n // try to open on the browser\r\n if ((0, helpers_1.isBrowser)() && !options.skipBrowserRedirect) {\r\n window.location.assign(url);\r\n }\r\n return { data: { provider, url }, error: null };\r\n }\r\n /**\r\n * Recovers the session from LocalStorage and refreshes the token\r\n * Note: this method is async to accommodate for AsyncStorage e.g. in React native.\r\n */\r\n async _recoverAndRefresh() {\r\n var _a, _b;\r\n const debugName = '#_recoverAndRefresh()';\r\n this._debug(debugName, 'begin');\r\n try {\r\n const currentSession = (await (0, helpers_1.getItemAsync)(this.storage, this.storageKey));\r\n if (currentSession && this.userStorage) {\r\n let maybeUser = (await (0, helpers_1.getItemAsync)(this.userStorage, this.storageKey + '-user'));\r\n if (!this.storage.isServer && Object.is(this.storage, this.userStorage) && !maybeUser) {\r\n // storage and userStorage are the same storage medium, for example\r\n // window.localStorage if userStorage does not have the user from\r\n // storage stored, store it first thereby migrating the user object\r\n // from storage -> userStorage\r\n maybeUser = { user: currentSession.user };\r\n await (0, helpers_1.setItemAsync)(this.userStorage, this.storageKey + '-user', maybeUser);\r\n }\r\n currentSession.user = (_a = maybeUser === null || maybeUser === void 0 ? void 0 : maybeUser.user) !== null && _a !== void 0 ? _a : (0, helpers_1.userNotAvailableProxy)();\r\n }\r\n else if (currentSession && !currentSession.user) {\r\n // user storage is not set, let's check if it was previously enabled so\r\n // we bring back the storage as it should be\r\n if (!currentSession.user) {\r\n // test if userStorage was previously enabled and the storage medium was the same, to move the user back under the same key\r\n const separateUser = (await (0, helpers_1.getItemAsync)(this.storage, this.storageKey + '-user'));\r\n if (separateUser && (separateUser === null || separateUser === void 0 ? void 0 : separateUser.user)) {\r\n currentSession.user = separateUser.user;\r\n await (0, helpers_1.removeItemAsync)(this.storage, this.storageKey + '-user');\r\n await (0, helpers_1.setItemAsync)(this.storage, this.storageKey, currentSession);\r\n }\r\n else {\r\n currentSession.user = (0, helpers_1.userNotAvailableProxy)();\r\n }\r\n }\r\n }\r\n this._debug(debugName, 'session from storage', currentSession);\r\n if (!this._isValidSession(currentSession)) {\r\n this._debug(debugName, 'session is not valid');\r\n if (currentSession !== null) {\r\n await this._removeSession();\r\n }\r\n return;\r\n }\r\n const expiresWithMargin = ((_b = currentSession.expires_at) !== null && _b !== void 0 ? _b : Infinity) * 1000 - Date.now() < constants_1.EXPIRY_MARGIN_MS;\r\n this._debug(debugName, `session has${expiresWithMargin ? '' : ' not'} expired with margin of ${constants_1.EXPIRY_MARGIN_MS}s`);\r\n if (expiresWithMargin) {\r\n if (this.autoRefreshToken && currentSession.refresh_token) {\r\n const { error } = await this._callRefreshToken(currentSession.refresh_token);\r\n if (error) {\r\n console.error(error);\r\n if (!(0, errors_1.isAuthRetryableFetchError)(error)) {\r\n this._debug(debugName, 'refresh failed with a non-retryable error, removing the session', error);\r\n await this._removeSession();\r\n }\r\n }\r\n }\r\n }\r\n else if (currentSession.user &&\r\n currentSession.user.__isUserNotAvailableProxy === true) {\r\n // If we have a proxy user, try to get the real user data\r\n try {\r\n const { data, error: userError } = await this._getUser(currentSession.access_token);\r\n if (!userError && (data === null || data === void 0 ? void 0 : data.user)) {\r\n currentSession.user = data.user;\r\n await this._saveSession(currentSession);\r\n await this._notifyAllSubscribers('SIGNED_IN', currentSession);\r\n }\r\n else {\r\n this._debug(debugName, 'could not get user data, skipping SIGNED_IN notification');\r\n }\r\n }\r\n catch (getUserError) {\r\n console.error('Error getting user data:', getUserError);\r\n this._debug(debugName, 'error getting user data, skipping SIGNED_IN notification', getUserError);\r\n }\r\n }\r\n else {\r\n // no need to persist currentSession again, as we just loaded it from\r\n // local storage; persisting it again may overwrite a value saved by\r\n // another client with access to the same local storage\r\n await this._notifyAllSubscribers('SIGNED_IN', currentSession);\r\n }\r\n }\r\n catch (err) {\r\n this._debug(debugName, 'error', err);\r\n console.error(err);\r\n return;\r\n }\r\n finally {\r\n this._debug(debugName, 'end');\r\n }\r\n }\r\n async _callRefreshToken(refreshToken) {\r\n var _a, _b;\r\n if (!refreshToken) {\r\n throw new errors_1.AuthSessionMissingError();\r\n }\r\n // refreshing is already in progress\r\n if (this.refreshingDeferred) {\r\n return this.refreshingDeferred.promise;\r\n }\r\n const debugName = `#_callRefreshToken(${refreshToken.substring(0, 5)}...)`;\r\n this._debug(debugName, 'begin');\r\n try {\r\n this.refreshingDeferred = new helpers_1.Deferred();\r\n const { data, error } = await this._refreshAccessToken(refreshToken);\r\n if (error)\r\n throw error;\r\n if (!data.session)\r\n throw new errors_1.AuthSessionMissingError();\r\n await this._saveSession(data.session);\r\n await this._notifyAllSubscribers('TOKEN_REFRESHED', data.session);\r\n const result = { session: data.session, error: null };\r\n this.refreshingDeferred.resolve(result);\r\n return result;\r\n }\r\n catch (error) {\r\n this._debug(debugName, 'error', error);\r\n if ((0, errors_1.isAuthError)(error)) {\r\n const result = { session: null, error };\r\n if (!(0, errors_1.isAuthRetryableFetchError)(error)) {\r\n await this._removeSession();\r\n }\r\n (_a = this.refreshingDeferred) === null || _a === void 0 ? void 0 : _a.resolve(result);\r\n return result;\r\n }\r\n (_b = this.refreshingDeferred) === null || _b === void 0 ? void 0 : _b.reject(error);\r\n throw error;\r\n }\r\n finally {\r\n this.refreshingDeferred = null;\r\n this._debug(debugName, 'end');\r\n }\r\n }\r\n async _notifyAllSubscribers(event, session, broadcast = true) {\r\n const debugName = `#_notifyAllSubscribers(${event})`;\r\n this._debug(debugName, 'begin', session, `broadcast = ${broadcast}`);\r\n try {\r\n if (this.broadcastChannel && broadcast) {\r\n this.broadcastChannel.postMessage({ event, session });\r\n }\r\n const errors = [];\r\n const promises = Array.from(this.stateChangeEmitters.values()).map(async (x) => {\r\n try {\r\n await x.callback(event, session);\r\n }\r\n catch (e) {\r\n errors.push(e);\r\n }\r\n });\r\n await Promise.all(promises);\r\n if (errors.length > 0) {\r\n for (let i = 0; i < errors.length; i += 1) {\r\n console.error(errors[i]);\r\n }\r\n throw errors[0];\r\n }\r\n }\r\n finally {\r\n this._debug(debugName, 'end');\r\n }\r\n }\r\n /**\r\n * set currentSession and currentUser\r\n * process to _startAutoRefreshToken if possible\r\n */\r\n async _saveSession(session) {\r\n this._debug('#_saveSession()', session);\r\n // _saveSession is always called whenever a new session has been acquired\r\n // so we can safely suppress the warning returned by future getSession calls\r\n this.suppressGetSessionWarning = true;\r\n // Create a shallow copy to work with, to avoid mutating the original session object if it's used elsewhere\r\n const sessionToProcess = Object.assign({}, session);\r\n const userIsProxy = sessionToProcess.user && sessionToProcess.user.__isUserNotAvailableProxy === true;\r\n if (this.userStorage) {\r\n if (!userIsProxy && sessionToProcess.user) {\r\n // If it's a real user object, save it to userStorage.\r\n await (0, helpers_1.setItemAsync)(this.userStorage, this.storageKey + '-user', {\r\n user: sessionToProcess.user,\r\n });\r\n }\r\n else if (userIsProxy) {\r\n // If it's the proxy, it means user was not found in userStorage.\r\n // We should ensure no stale user data for this key exists in userStorage if we were to save null,\r\n // or simply not save the proxy. For now, we don't save the proxy here.\r\n // If there's a need to clear userStorage if user becomes proxy, that logic would go here.\r\n }\r\n // Prepare the main session data for primary storage: remove the user property before cloning\r\n // This is important because the original session.user might be the proxy\r\n const mainSessionData = Object.assign({}, sessionToProcess);\r\n delete mainSessionData.user; // Remove user (real or proxy) before cloning for main storage\r\n const clonedMainSessionData = (0, helpers_2.deepClone)(mainSessionData);\r\n await (0, helpers_1.setItemAsync)(this.storage, this.storageKey, clonedMainSessionData);\r\n }\r\n else {\r\n // No userStorage is configured.\r\n // In this case, session.user should ideally not be a proxy.\r\n // If it were, structuredClone would fail. This implies an issue elsewhere if user is a proxy here\r\n const clonedSession = (0, helpers_2.deepClone)(sessionToProcess); // sessionToProcess still has its original user property\r\n await (0, helpers_1.setItemAsync)(this.storage, this.storageKey, clonedSession);\r\n }\r\n }\r\n async _removeSession() {\r\n this._debug('#_removeSession()');\r\n await (0, helpers_1.removeItemAsync)(this.storage, this.storageKey);\r\n await (0, helpers_1.removeItemAsync)(this.storage, this.storageKey + '-code-verifier');\r\n await (0, helpers_1.removeItemAsync)(this.storage, this.storageKey + '-user');\r\n if (this.userStorage) {\r\n await (0, helpers_1.removeItemAsync)(this.userStorage, this.storageKey + '-user');\r\n }\r\n await this._notifyAllSubscribers('SIGNED_OUT', null);\r\n }\r\n /**\r\n * Removes any registered visibilitychange callback.\r\n *\r\n * {@see #startAutoRefresh}\r\n * {@see #stopAutoRefresh}\r\n */\r\n _removeVisibilityChangedCallback() {\r\n this._debug('#_removeVisibilityChangedCallback()');\r\n const callback = this.visibilityChangedCallback;\r\n this.visibilityChangedCallback = null;\r\n try {\r\n if (callback && (0, helpers_1.isBrowser)() && (window === null || window === void 0 ? void 0 : window.removeEventListener)) {\r\n window.removeEventListener('visibilitychange', callback);\r\n }\r\n }\r\n catch (e) {\r\n console.error('removing visibilitychange callback failed', e);\r\n }\r\n }\r\n /**\r\n * This is the private implementation of {@link #startAutoRefresh}. Use this\r\n * within the library.\r\n */\r\n async _startAutoRefresh() {\r\n await this._stopAutoRefresh();\r\n this._debug('#_startAutoRefresh()');\r\n const ticker = setInterval(() => this._autoRefreshTokenTick(), constants_1.AUTO_REFRESH_TICK_DURATION_MS);\r\n this.autoRefreshTicker = ticker;\r\n if (ticker && typeof ticker === 'object' && typeof ticker.unref === 'function') {\r\n // ticker is a NodeJS Timeout object that has an `unref` method\r\n // https://nodejs.org/api/timers.html#timeoutunref\r\n // When auto refresh is used in NodeJS (like for testing) the\r\n // `setInterval` is preventing the process from being marked as\r\n // finished and tests run endlessly. This can be prevented by calling\r\n // `unref()` on the returned object.\r\n ticker.unref();\r\n // @ts-expect-error TS has no context of Deno\r\n }\r\n else if (typeof Deno !== 'undefined' && typeof Deno.unrefTimer === 'function') {\r\n // similar like for NodeJS, but with the Deno API\r\n // https://deno.land/api@latest?unstable&s=Deno.unrefTimer\r\n // @ts-expect-error TS has no context of Deno\r\n Deno.unrefTimer(ticker);\r\n }\r\n // run the tick immediately, but in the next pass of the event loop so that\r\n // #_initialize can be allowed to complete without recursively waiting on\r\n // itself\r\n setTimeout(async () => {\r\n await this.initializePromise;\r\n await this._autoRefreshTokenTick();\r\n }, 0);\r\n }\r\n /**\r\n * This is the private implementation of {@link #stopAutoRefresh}. Use this\r\n * within the library.\r\n */\r\n async _stopAutoRefresh() {\r\n this._debug('#_stopAutoRefresh()');\r\n const ticker = this.autoRefreshTicker;\r\n this.autoRefreshTicker = null;\r\n if (ticker) {\r\n clearInterval(ticker);\r\n }\r\n }\r\n /**\r\n * Starts an auto-refresh process in the background. The session is checked\r\n * every few seconds. Close to the time of expiration a process is started to\r\n * refresh the session. If refreshing fails it will be retried for as long as\r\n * necessary.\r\n *\r\n * If you set the {@link GoTrueClientOptions#autoRefreshToken} you don't need\r\n * to call this function, it will be called for you.\r\n *\r\n * On browsers the refresh process works only when the tab/window is in the\r\n * foreground to conserve resources as well as prevent race conditions and\r\n * flooding auth with requests. If you call this method any managed\r\n * visibility change callback will be removed and you must manage visibility\r\n * changes on your own.\r\n *\r\n * On non-browser platforms the refresh process works *continuously* in the\r\n * background, which may not be desirable. You should hook into your\r\n * platform's foreground indication mechanism and call these methods\r\n * appropriately to conserve resources.\r\n *\r\n * {@see #stopAutoRefresh}\r\n */\r\n async startAutoRefresh() {\r\n this._removeVisibilityChangedCallback();\r\n await this._startAutoRefresh();\r\n }\r\n /**\r\n * Stops an active auto refresh process running in the background (if any).\r\n *\r\n * If you call this method any managed visibility change callback will be\r\n * removed and you must manage visibility changes on your own.\r\n *\r\n * See {@link #startAutoRefresh} for more details.\r\n */\r\n async stopAutoRefresh() {\r\n this._removeVisibilityChangedCallback();\r\n await this._stopAutoRefresh();\r\n }\r\n /**\r\n * Runs the auto refresh token tick.\r\n */\r\n async _autoRefreshTokenTick() {\r\n this._debug('#_autoRefreshTokenTick()', 'begin');\r\n try {\r\n await this._acquireLock(0, async () => {\r\n try {\r\n const now = Date.now();\r\n try {\r\n return await this._useSession(async (result) => {\r\n const { data: { session }, } = result;\r\n if (!session || !session.refresh_token || !session.expires_at) {\r\n this._debug('#_autoRefreshTokenTick()', 'no session');\r\n return;\r\n }\r\n // session will expire in this many ticks (or has already expired if <= 0)\r\n const expiresInTicks = Math.floor((session.expires_at * 1000 - now) / constants_1.AUTO_REFRESH_TICK_DURATION_MS);\r\n this._debug('#_autoRefreshTokenTick()', `access token expires in ${expiresInTicks} ticks, a tick lasts ${constants_1.AUTO_REFRESH_TICK_DURATION_MS}ms, refresh threshold is ${constants_1.AUTO_REFRESH_TICK_THRESHOLD} ticks`);\r\n if (expiresInTicks <= constants_1.AUTO_REFRESH_TICK_THRESHOLD) {\r\n await this._callRefreshToken(session.refresh_token);\r\n }\r\n });\r\n }\r\n catch (e) {\r\n console.error('Auto refresh tick failed with error. This is likely a transient error.', e);\r\n }\r\n }\r\n finally {\r\n this._debug('#_autoRefreshTokenTick()', 'end');\r\n }\r\n });\r\n }\r\n catch (e) {\r\n if (e.isAcquireTimeout || e instanceof locks_1.LockAcquireTimeoutError) {\r\n this._debug('auto refresh token tick lock not available');\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n }\r\n /**\r\n * Registers callbacks on the browser / platform, which in-turn run\r\n * algorithms when the browser window/tab are in foreground. On non-browser\r\n * platforms it assumes always foreground.\r\n */\r\n async _handleVisibilityChange() {\r\n this._debug('#_handleVisibilityChange()');\r\n if (!(0, helpers_1.isBrowser)() || !(window === null || window === void 0 ? void 0 : window.addEventListener)) {\r\n if (this.autoRefreshToken) {\r\n // in non-browser environments the refresh token ticker runs always\r\n this.startAutoRefresh();\r\n }\r\n return false;\r\n }\r\n try {\r\n this.visibilityChangedCallback = async () => await this._onVisibilityChanged(false);\r\n window === null || window === void 0 ? void 0 : window.addEventListener('visibilitychange', this.visibilityChangedCallback);\r\n // now immediately call the visbility changed callback to setup with the\r\n // current visbility state\r\n await this._onVisibilityChanged(true); // initial call\r\n }\r\n catch (error) {\r\n console.error('_handleVisibilityChange', error);\r\n }\r\n }\r\n /**\r\n * Callback registered with `window.addEventListener('visibilitychange')`.\r\n */\r\n async _onVisibilityChanged(calledFromInitialize) {\r\n const methodName = `#_onVisibilityChanged(${calledFromInitialize})`;\r\n this._debug(methodName, 'visibilityState', document.visibilityState);\r\n if (document.visibilityState === 'visible') {\r\n if (this.autoRefreshToken) {\r\n // in browser environments the refresh token ticker runs only on focused tabs\r\n // which prevents race conditions\r\n this._startAutoRefresh();\r\n }\r\n if (!calledFromInitialize) {\r\n // called when the visibility has changed, i.e. the browser\r\n // transitioned from hidden -> visible so we need to see if the session\r\n // should be recovered immediately... but to do that we need to acquire\r\n // the lock first asynchronously\r\n await this.initializePromise;\r\n await this._acquireLock(-1, async () => {\r\n if (document.visibilityState !== 'visible') {\r\n this._debug(methodName, 'acquired the lock to recover the session, but the browser visibilityState is no longer visible, aborting');\r\n // visibility has changed while waiting for the lock, abort\r\n return;\r\n }\r\n // recover the session\r\n await this._recoverAndRefresh();\r\n });\r\n }\r\n }\r\n else if (document.visibilityState === 'hidden') {\r\n if (this.autoRefreshToken) {\r\n this._stopAutoRefresh();\r\n }\r\n }\r\n }\r\n /**\r\n * Generates the relevant login URL for a third-party provider.\r\n * @param options.redirectTo A URL or mobile address to send the user to after they are confirmed.\r\n * @param options.scopes A space-separated list of scopes granted to the OAuth application.\r\n * @param options.queryParams An object of key-value pairs containing query parameters granted to the OAuth application.\r\n */\r\n async _getUrlForProvider(url, provider, options) {\r\n const urlParams = [`provider=${encodeURIComponent(provider)}`];\r\n if (options === null || options === void 0 ? void 0 : options.redirectTo) {\r\n urlParams.push(`redirect_to=${encodeURIComponent(options.redirectTo)}`);\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.scopes) {\r\n urlParams.push(`scopes=${encodeURIComponent(options.scopes)}`);\r\n }\r\n if (this.flowType === 'pkce') {\r\n const [codeChallenge, codeChallengeMethod] = await (0, helpers_1.getCodeChallengeAndMethod)(this.storage, this.storageKey);\r\n const flowParams = new URLSearchParams({\r\n code_challenge: `${encodeURIComponent(codeChallenge)}`,\r\n code_challenge_method: `${encodeURIComponent(codeChallengeMethod)}`,\r\n });\r\n urlParams.push(flowParams.toString());\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.queryParams) {\r\n const query = new URLSearchParams(options.queryParams);\r\n urlParams.push(query.toString());\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.skipBrowserRedirect) {\r\n urlParams.push(`skip_http_redirect=${options.skipBrowserRedirect}`);\r\n }\r\n return `${url}?${urlParams.join('&')}`;\r\n }\r\n async _unenroll(params) {\r\n try {\r\n return await this._useSession(async (result) => {\r\n var _a;\r\n const { data: sessionData, error: sessionError } = result;\r\n if (sessionError) {\r\n return { data: null, error: sessionError };\r\n }\r\n return await (0, fetch_1._request)(this.fetch, 'DELETE', `${this.url}/factors/${params.factorId}`, {\r\n headers: this.headers,\r\n jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\r\n });\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n async _enroll(params) {\r\n try {\r\n return await this._useSession(async (result) => {\r\n var _a, _b;\r\n const { data: sessionData, error: sessionError } = result;\r\n if (sessionError) {\r\n return { data: null, error: sessionError };\r\n }\r\n const body = Object.assign({ friendly_name: params.friendlyName, factor_type: params.factorType }, (params.factorType === 'phone' ? { phone: params.phone } : { issuer: params.issuer }));\r\n const { data, error } = await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/factors`, {\r\n body,\r\n headers: this.headers,\r\n jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\r\n });\r\n if (error) {\r\n return { data: null, error };\r\n }\r\n if (params.factorType === 'totp' && ((_b = data === null || data === void 0 ? void 0 : data.totp) === null || _b === void 0 ? void 0 : _b.qr_code)) {\r\n data.totp.qr_code = `data:image/svg+xml;utf-8,${data.totp.qr_code}`;\r\n }\r\n return { data, error: null };\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * {@see GoTrueMFAApi#verify}\r\n */\r\n async _verify(params) {\r\n return this._acquireLock(-1, async () => {\r\n try {\r\n return await this._useSession(async (result) => {\r\n var _a;\r\n const { data: sessionData, error: sessionError } = result;\r\n if (sessionError) {\r\n return { data: null, error: sessionError };\r\n }\r\n const { data, error } = await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/factors/${params.factorId}/verify`, {\r\n body: { code: params.code, challenge_id: params.challengeId },\r\n headers: this.headers,\r\n jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\r\n });\r\n if (error) {\r\n return { data: null, error };\r\n }\r\n await this._saveSession(Object.assign({ expires_at: Math.round(Date.now() / 1000) + data.expires_in }, data));\r\n await this._notifyAllSubscribers('MFA_CHALLENGE_VERIFIED', data);\r\n return { data, error };\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * {@see GoTrueMFAApi#challenge}\r\n */\r\n async _challenge(params) {\r\n return this._acquireLock(-1, async () => {\r\n try {\r\n return await this._useSession(async (result) => {\r\n var _a;\r\n const { data: sessionData, error: sessionError } = result;\r\n if (sessionError) {\r\n return { data: null, error: sessionError };\r\n }\r\n return await (0, fetch_1._request)(this.fetch, 'POST', `${this.url}/factors/${params.factorId}/challenge`, {\r\n body: { channel: params.channel },\r\n headers: this.headers,\r\n jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\r\n });\r\n });\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * {@see GoTrueMFAApi#challengeAndVerify}\r\n */\r\n async _challengeAndVerify(params) {\r\n // both _challenge and _verify independently acquire the lock, so no need\r\n // to acquire it here\r\n const { data: challengeData, error: challengeError } = await this._challenge({\r\n factorId: params.factorId,\r\n });\r\n if (challengeError) {\r\n return { data: null, error: challengeError };\r\n }\r\n return await this._verify({\r\n factorId: params.factorId,\r\n challengeId: challengeData.id,\r\n code: params.code,\r\n });\r\n }\r\n /**\r\n * {@see GoTrueMFAApi#listFactors}\r\n */\r\n async _listFactors() {\r\n // use #getUser instead of #_getUser as the former acquires a lock\r\n const { data: { user }, error: userError, } = await this.getUser();\r\n if (userError) {\r\n return { data: null, error: userError };\r\n }\r\n const factors = (user === null || user === void 0 ? void 0 : user.factors) || [];\r\n const totp = factors.filter((factor) => factor.factor_type === 'totp' && factor.status === 'verified');\r\n const phone = factors.filter((factor) => factor.factor_type === 'phone' && factor.status === 'verified');\r\n return {\r\n data: {\r\n all: factors,\r\n totp,\r\n phone,\r\n },\r\n error: null,\r\n };\r\n }\r\n /**\r\n * {@see GoTrueMFAApi#getAuthenticatorAssuranceLevel}\r\n */\r\n async _getAuthenticatorAssuranceLevel() {\r\n return this._acquireLock(-1, async () => {\r\n return await this._useSession(async (result) => {\r\n var _a, _b;\r\n const { data: { session }, error: sessionError, } = result;\r\n if (sessionError) {\r\n return { data: null, error: sessionError };\r\n }\r\n if (!session) {\r\n return {\r\n data: { currentLevel: null, nextLevel: null, currentAuthenticationMethods: [] },\r\n error: null,\r\n };\r\n }\r\n const { payload } = (0, helpers_1.decodeJWT)(session.access_token);\r\n let currentLevel = null;\r\n if (payload.aal) {\r\n currentLevel = payload.aal;\r\n }\r\n let nextLevel = currentLevel;\r\n const verifiedFactors = (_b = (_a = session.user.factors) === null || _a === void 0 ? void 0 : _a.filter((factor) => factor.status === 'verified')) !== null && _b !== void 0 ? _b : [];\r\n if (verifiedFactors.length > 0) {\r\n nextLevel = 'aal2';\r\n }\r\n const currentAuthenticationMethods = payload.amr || [];\r\n return { data: { currentLevel, nextLevel, currentAuthenticationMethods }, error: null };\r\n });\r\n });\r\n }\r\n async fetchJwk(kid, jwks = { keys: [] }) {\r\n // try fetching from the supplied jwks\r\n let jwk = jwks.keys.find((key) => key.kid === kid);\r\n if (jwk) {\r\n return jwk;\r\n }\r\n const now = Date.now();\r\n // try fetching from cache\r\n jwk = this.jwks.keys.find((key) => key.kid === kid);\r\n // jwk exists and jwks isn't stale\r\n if (jwk && this.jwks_cached_at + constants_1.JWKS_TTL > now) {\r\n return jwk;\r\n }\r\n // jwk isn't cached in memory so we need to fetch it from the well-known endpoint\r\n const { data, error } = await (0, fetch_1._request)(this.fetch, 'GET', `${this.url}/.well-known/jwks.json`, {\r\n headers: this.headers,\r\n });\r\n if (error) {\r\n throw error;\r\n }\r\n if (!data.keys || data.keys.length === 0) {\r\n return null;\r\n }\r\n this.jwks = data;\r\n this.jwks_cached_at = now;\r\n // Find the signing key\r\n jwk = data.keys.find((key) => key.kid === kid);\r\n if (!jwk) {\r\n return null;\r\n }\r\n return jwk;\r\n }\r\n /**\r\n * Extracts the JWT claims present in the access token by first verifying the\r\n * JWT against the server's JSON Web Key Set endpoint\r\n * `/.well-known/jwks.json` which is often cached, resulting in significantly\r\n * faster responses. Prefer this method over {@link #getUser} which always\r\n * sends a request to the Auth server for each JWT.\r\n *\r\n * If the project is not using an asymmetric JWT signing key (like ECC or\r\n * RSA) it always sends a request to the Auth server (similar to {@link\r\n * #getUser}) to verify the JWT.\r\n *\r\n * @param jwt An optional specific JWT you wish to verify, not the one you\r\n * can obtain from {@link #getSession}.\r\n * @param options Various additional options that allow you to customize the\r\n * behavior of this method.\r\n */\r\n async getClaims(jwt, options = {}) {\r\n try {\r\n let token = jwt;\r\n if (!token) {\r\n const { data, error } = await this.getSession();\r\n if (error || !data.session) {\r\n return { data: null, error };\r\n }\r\n token = data.session.access_token;\r\n }\r\n const { header, payload, signature, raw: { header: rawHeader, payload: rawPayload }, } = (0, helpers_1.decodeJWT)(token);\r\n if (!(options === null || options === void 0 ? void 0 : options.allowExpired)) {\r\n // Reject expired JWTs should only happen if jwt argument was passed\r\n (0, helpers_1.validateExp)(payload.exp);\r\n }\r\n const signingKey = !header.alg ||\r\n header.alg.startsWith('HS') ||\r\n !header.kid ||\r\n !('crypto' in globalThis && 'subtle' in globalThis.crypto)\r\n ? null\r\n : await this.fetchJwk(header.kid, (options === null || options === void 0 ? void 0 : options.keys) ? { keys: options.keys } : options === null || options === void 0 ? void 0 : options.jwks);\r\n // If symmetric algorithm or WebCrypto API is unavailable, fallback to getUser()\r\n if (!signingKey) {\r\n const { error } = await this.getUser(token);\r\n if (error) {\r\n throw error;\r\n }\r\n // getUser succeeds so the claims in the JWT can be trusted\r\n return {\r\n data: {\r\n claims: payload,\r\n header,\r\n signature,\r\n },\r\n error: null,\r\n };\r\n }\r\n const algorithm = (0, helpers_1.getAlgorithm)(header.alg);\r\n // Convert JWK to CryptoKey\r\n const publicKey = await crypto.subtle.importKey('jwk', signingKey, algorithm, true, [\r\n 'verify',\r\n ]);\r\n // Verify the signature\r\n const isValid = await crypto.subtle.verify(algorithm, publicKey, signature, (0, base64url_1.stringToUint8Array)(`${rawHeader}.${rawPayload}`));\r\n if (!isValid) {\r\n throw new errors_1.AuthInvalidJwtError('Invalid JWT signature');\r\n }\r\n // If verification succeeds, decode and return claims\r\n return {\r\n data: {\r\n claims: payload,\r\n header,\r\n signature,\r\n },\r\n error: null,\r\n };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n}\r\nexports[\"default\"] = GoTrueClient;\r\nGoTrueClient.nextInstanceID = 0;\r\n//# sourceMappingURL=GoTrueClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL0dvVHJ1ZUNsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHlDQUF5QyxtQkFBTyxDQUFDLDRGQUFrQjtBQUNuRSxvQkFBb0IsbUJBQU8sQ0FBQywwRkFBaUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsb0ZBQWM7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsa0ZBQWE7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsc0ZBQWU7QUFDekMsd0JBQXdCLG1CQUFPLENBQUMsa0dBQXFCO0FBQ3JELG9CQUFvQixtQkFBTyxDQUFDLDBGQUFpQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxzRkFBZTtBQUN6QyxnQkFBZ0IsbUJBQU8sQ0FBQyxrRkFBYTtBQUNyQyxvQkFBb0IsbUJBQU8sQ0FBQywwRkFBaUI7QUFDN0Msa0JBQWtCLG1CQUFPLENBQUMsc0ZBQWU7QUFDekMsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtGQUErRjtBQUMvRixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBJQUEwSTtBQUMxSTtBQUNBO0FBQ0EscUVBQXFFLG1DQUFtQyxhQUFhO0FBQ3JIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFFQUFxRSxtQ0FBbUMsaUJBQWlCO0FBQ3pIO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxpQkFBaUIsR0FBRyxrQkFBa0IsSUFBSSx5QkFBeUI7QUFDM0c7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGNBQWM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBLHdCQUF3Qix3QkFBd0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJFQUEyRSxTQUFTO0FBQ3BGO0FBQ0E7QUFDQSxzTUFBc007QUFDdE0sNENBQTRDLDBKQUEwSjtBQUN0TSxpQkFBaUI7QUFDakI7QUFDQSxhQUFhO0FBQ2Isb0JBQW9CLGNBQWM7QUFDbEM7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsUUFBUSxlQUFlO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixRQUFRLDJCQUEyQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwyQkFBMkI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUVBQXlFLFNBQVM7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVJQUF1STtBQUN2SSxnREFBZ0QsdUZBQXVGO0FBQ3ZJO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLHdCQUF3QiwyQkFBMkI7QUFDbkQseUVBQXlFLFNBQVM7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1SUFBdUk7QUFDdkk7QUFDQSxnREFBZ0QsdUZBQXVGO0FBQ3ZJLHFCQUFxQjtBQUNyQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixjQUFjO0FBQ2xDO0FBQ0EseUJBQXlCLFFBQVEsMkJBQTJCO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFFBQVEsZUFBZTtBQUM1QztBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMkJBQTJCO0FBQ25ELHlFQUF5RSxTQUFTO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELHVGQUF1RjtBQUN2SSxxQkFBcUI7QUFDckI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLHdCQUF3QiwyQkFBMkI7QUFDbkQseUVBQXlFLFNBQVM7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsdUZBQXVGO0FBQ3ZJLHFCQUFxQjtBQUNyQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixjQUFjO0FBQ2xDO0FBQ0EseUJBQXlCLFFBQVEsMkJBQTJCO0FBQzVEO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLHdDQUF3QywwQkFBMEIsbUNBQW1DO0FBQzNJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFLE1BQU07QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isb0NBQW9DO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtU0FBbVMsNkNBQTZDO0FBQ2hWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUdBQXVHLG9DQUFvQztBQUMzSTtBQUNBLG1FQUFtRSxrQkFBa0IsWUFBWTtBQUNqRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsVUFBVTtBQUNqQztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsU0FBUztBQUNyQyxrQ0FBa0Msb01BQW9NO0FBQ3RPO0FBQ0EsMENBQTBDLG1DQUFtQztBQUM3RTtBQUNBO0FBQ0EsK0NBQStDLHdDQUF3QztBQUN2RjtBQUNBO0FBQ0Esd0NBQXdDLGlDQUFpQztBQUN6RTtBQUNBLHVLQUF1SywrQkFBK0I7QUFDdE07QUFDQSwwQ0FBMEMsbUNBQW1DO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUZBQXlGLFNBQVM7QUFDbEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixjQUFjLHFEQUFxRCxTQUFTO0FBQ2hHO0FBQ0Esc0NBQXNDLG1GQUFtRjtBQUN6SCx3QkFBd0Isd0JBQXdCO0FBQ2hEO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QiwyQkFBMkI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsc0JBQXNCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixRQUFRLDJCQUEyQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFLGdCQUFnQjtBQUMvRjtBQUNBO0FBQ0Esb0JBQW9CLGNBQWMscURBQXFELFNBQVM7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxhQUFhO0FBQ2Isa0VBQWtFLGdCQUFnQjtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLCtDQUErQztBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixvQ0FBb0MsV0FBVyxzRkFBc0Y7QUFDMUo7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFFBQVEsK0NBQStDO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGdEQUFnRDtBQUNwRSwyRUFBMkUsU0FBUztBQUNwRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsdUZBQXVGO0FBQ25JLGlCQUFpQjtBQUNqQjtBQUNBLGFBQWE7QUFDYixvQkFBb0IsY0FBYztBQUNsQztBQUNBLHlCQUF5QixRQUFRLDJCQUEyQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsMkJBQTJCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixRQUFRLDJCQUEyQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixtQkFBbUI7QUFDckMsa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixRQUFRLHFEQUFxRCxTQUFTO0FBQzlGO0FBQ0E7QUFDQTtBQUNBLHVJQUF1STtBQUN2STtBQUNBLGdEQUFnRCx1RkFBdUY7QUFDdkk7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLGlCQUFpQjtBQUNqQix5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQ7QUFDQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekMsd0JBQXdCLGNBQWMscURBQXFELFNBQVM7QUFDcEc7QUFDQTtBQUNBO0FBQ0EsdUlBQXVJO0FBQ3ZJO0FBQ0EsZ0RBQWdELHVGQUF1RjtBQUN2STtBQUNBLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakIseUJBQXlCLFFBQVEsbUdBQW1HO0FBQ3BJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsY0FBYyxxREFBcUQsU0FBUztBQUNoRztBQUNBLG9EQUFvRCxhQUFhLHdCQUF3QiwrQkFBK0I7QUFDeEg7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsUUFBUSxlQUFlO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixRQUFRLDJCQUEyQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRUFBc0UsU0FBUztBQUMvRSw4RkFBOEYsOEJBQThCLGlDQUFpQyxrQ0FBa0Msd0JBQXdCLFlBQVkseUlBQXlJO0FBQzVXLHdCQUF3Qix3QkFBd0I7QUFDaEQsZ0NBQWdDLHFHQUFxRztBQUNySTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUSxTQUFTLHlCQUF5QjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixRQUFRLG9EQUFvRCxTQUFTO0FBQzdGO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIseUJBQXlCLFFBQVEsMkJBQTJCO0FBQzVELGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLFNBQVM7QUFDekM7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DLHdCQUF3QixRQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELHVGQUF1RjtBQUN2SSxxQkFBcUI7QUFDckI7QUFDQSxpQkFBaUI7QUFDakIseUJBQXlCLFFBQVEsMkJBQTJCO0FBQzVEO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DLHdCQUF3QixjQUFjO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELHVGQUF1RjtBQUN2SSxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCLHlCQUF5QixRQUFRLG1HQUFtRztBQUNwSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFFBQVEsMkJBQTJCO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELGtCQUFrQjtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsMkNBQTJDLGdCQUFnQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFFBQVEsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsMEJBQTBCO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQsdUVBQXVFO0FBQ3ZFO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekIscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUSx5QkFBeUI7QUFDMUQ7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0EseUJBQXlCLFFBQVEsZUFBZTtBQUNoRDtBQUNBLHFCQUFxQixRQUFRLFNBQVM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RSxTQUFTO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsY0FBYztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLFFBQVEsWUFBWTtBQUNqRDtBQUNBLHlFQUF5RSxTQUFTO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRUFBMEUsZ0JBQWdCO0FBQzFGO0FBQ0EseUJBQXlCLFFBQVEsWUFBWTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBLHdCQUF3Qix5Q0FBeUM7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IseUJBQXlCLG9EQUFvRCxTQUFTO0FBQzlHO0FBQ0E7QUFDQSx3REFBd0QsaUJBQWlCLDJFQUEyRTtBQUNwSjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUSxvQkFBb0I7QUFDckQsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixRQUFRLFlBQVk7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsVUFBVTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG1DQUFtQztBQUMzRDtBQUNBLDZCQUE2QixRQUFRLDJCQUEyQjtBQUNoRTtBQUNBO0FBQ0EsNkJBQTZCLFFBQVEsMkJBQTJCO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGNBQWM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixRQUFRLDZCQUE2QjtBQUMxRDtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsY0FBYztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBLDZCQUE2QixRQUFRLDJCQUEyQjtBQUNoRTtBQUNBO0FBQ0EsNkJBQTZCLFFBQVEsMkJBQTJCO0FBQ2hFO0FBQ0EseUJBQXlCLFFBQVEsNkJBQTZCO0FBQzlELGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixjQUFjO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUSwyQ0FBMkM7QUFDNUU7QUFDQSxvQkFBb0IsMkdBQTJHO0FBQy9IO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RkFBOEYsa0JBQWtCLGdDQUFnQyxVQUFVO0FBQzFKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsY0FBYztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsUUFBUSxvQ0FBb0M7QUFDakU7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFFBQVEsbUNBQW1DO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5RkFBeUYsZ0JBQWdCO0FBQ3pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGlCQUFpQjtBQUMvQztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxxQkFBcUIsUUFBUSxJQUFJLGlCQUFpQjtBQUNsRDtBQUNBO0FBQ0Esb0JBQW9CLDRCQUE0QjtBQUNoRDtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRUFBc0UsZ0JBQWdCO0FBQ3RGO0FBQ0EscUJBQXFCO0FBQ3JCLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1QsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixRQUFRLFNBQVMsV0FBVztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRUFBc0UsU0FBUztBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxxQ0FBcUM7QUFDakYsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGNBQWM7QUFDbEM7QUFDQTtBQUNBLHFCQUFxQixRQUFRLDZFQUE2RTtBQUMxRztBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixjQUFjO0FBQ2xDO0FBQ0Esd0JBQXdCLGNBQWM7QUFDdEM7QUFDQTtBQUNBLDZEQUE2RCxTQUFTO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixRQUFRLDJGQUEyRjtBQUN4SDtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUSwyQ0FBMkM7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixjQUFjO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLDRFQUE0RSxTQUFTLG1CQUFtQixxQkFBcUI7QUFDN0g7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCw2QkFBNkI7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0ZBQWdGO0FBQ2hGO0FBQ0E7QUFDQSwwRUFBMEUsU0FBUztBQUNuRiw0QkFBNEIsNkJBQTZCO0FBQ3pEO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsU0FBUztBQUM5RDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixRQUFRLGVBQWU7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsaUNBQWlDLHlCQUF5Qiw2QkFBNkI7QUFDeEk7QUFDQTtBQUNBLDRCQUE0QixRQUFRO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHlCQUF5QjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCw2QkFBNkI7QUFDN0U7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGNBQWM7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsTUFBTTtBQUMxRCxnRUFBZ0UsVUFBVTtBQUMxRTtBQUNBO0FBQ0Esb0RBQW9ELGdCQUFnQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGdDQUFnQyxtQkFBbUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRCx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RUFBOEU7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4Qyx3QkFBd0I7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsOENBQThDLHVCQUF1QjtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qiw0Q0FBNEM7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVkseUJBQXlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLFFBQVEsU0FBUyxJQUFJO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtGQUErRixnQkFBZ0Isc0JBQXNCLDBDQUEwQywyQkFBMkIseUNBQXlDO0FBQ25QO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELHFCQUFxQjtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLDZCQUE2QjtBQUNwRTtBQUNBLDBDQUEwQyx1Q0FBdUM7QUFDakY7QUFDQTtBQUNBLHFDQUFxQyxtQ0FBbUM7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsa0NBQWtDO0FBQ3JFLDBDQUEwQyx3Q0FBd0M7QUFDbEYsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELDRCQUE0QjtBQUM3RTtBQUNBLGtCQUFrQixJQUFJLEdBQUcsb0JBQW9CO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IseUNBQXlDO0FBQ2pFO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0EsNEVBQTRFLFNBQVMsV0FBVyxnQkFBZ0I7QUFDaEg7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IseUNBQXlDO0FBQ2pFO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0EsNkNBQTZDLG9FQUFvRSxxQ0FBcUMsc0JBQXNCLElBQUksdUJBQXVCO0FBQ3ZNLHdCQUF3QixjQUFjLHFEQUFxRCxTQUFTO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0EsNERBQTRELFFBQVEsa0JBQWtCO0FBQ3RGO0FBQ0EseUJBQXlCO0FBQ3pCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIseUNBQXlDO0FBQ3JFO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0EsNEJBQTRCLGNBQWMscURBQXFELFNBQVMsV0FBVyxnQkFBZ0I7QUFDbkksZ0NBQWdDLHFEQUFxRDtBQUNyRjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0EsNERBQTRELDZEQUE2RDtBQUN6SDtBQUNBLDZCQUE2QjtBQUM3QixpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix5Q0FBeUM7QUFDckU7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQSw4RUFBOEUsU0FBUyxXQUFXLGdCQUFnQjtBQUNsSCxnQ0FBZ0MseUJBQXlCO0FBQ3pEO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRLE1BQU0sc0JBQXNCO0FBQ3BEO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLFFBQVEsU0FBUyx5QkFBeUI7QUFDbEU7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHVFQUF1RTtBQUN2RztBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsVUFBVTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixRQUFRLHVEQUF1RDtBQUN4RixhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0EsaUNBQWlDLFVBQVU7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsY0FBYyxvREFBb0QsU0FBUztBQUMzRjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxnQkFBZ0I7QUFDbEU7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFO0FBQ3RFLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsbUNBQW1DLGtCQUFrQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGNBQWM7QUFDdEM7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG1DQUFtQyx3Q0FBd0MsSUFBSTtBQUNuRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1SEFBdUgscUJBQXFCO0FBQzVJO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0hBQStILFVBQVUsR0FBRyxXQUFXO0FBQ3ZKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZTtBQUNmO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL0dvVHJ1ZUNsaWVudC5qcz9mM2MyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmNvbnN0IEdvVHJ1ZUFkbWluQXBpXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vR29UcnVlQWRtaW5BcGlcIikpO1xyXG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2xpYi9jb25zdGFudHNcIik7XHJcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4vbGliL2Vycm9yc1wiKTtcclxuY29uc3QgZmV0Y2hfMSA9IHJlcXVpcmUoXCIuL2xpYi9mZXRjaFwiKTtcclxuY29uc3QgaGVscGVyc18xID0gcmVxdWlyZShcIi4vbGliL2hlbHBlcnNcIik7XHJcbmNvbnN0IGxvY2FsX3N0b3JhZ2VfMSA9IHJlcXVpcmUoXCIuL2xpYi9sb2NhbC1zdG9yYWdlXCIpO1xyXG5jb25zdCBwb2x5ZmlsbHNfMSA9IHJlcXVpcmUoXCIuL2xpYi9wb2x5ZmlsbHNcIik7XHJcbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL2xpYi92ZXJzaW9uXCIpO1xyXG5jb25zdCBsb2Nrc18xID0gcmVxdWlyZShcIi4vbGliL2xvY2tzXCIpO1xyXG5jb25zdCBiYXNlNjR1cmxfMSA9IHJlcXVpcmUoXCIuL2xpYi9iYXNlNjR1cmxcIik7XHJcbmNvbnN0IGhlbHBlcnNfMiA9IHJlcXVpcmUoXCIuL2xpYi9oZWxwZXJzXCIpO1xyXG4oMCwgcG9seWZpbGxzXzEucG9seWZpbGxHbG9iYWxUaGlzKSgpOyAvLyBNYWtlIFwiZ2xvYmFsVGhpc1wiIGF2YWlsYWJsZVxyXG5jb25zdCBERUZBVUxUX09QVElPTlMgPSB7XHJcbiAgICB1cmw6IGNvbnN0YW50c18xLkdPVFJVRV9VUkwsXHJcbiAgICBzdG9yYWdlS2V5OiBjb25zdGFudHNfMS5TVE9SQUdFX0tFWSxcclxuICAgIGF1dG9SZWZyZXNoVG9rZW46IHRydWUsXHJcbiAgICBwZXJzaXN0U2Vzc2lvbjogdHJ1ZSxcclxuICAgIGRldGVjdFNlc3Npb25JblVybDogdHJ1ZSxcclxuICAgIGhlYWRlcnM6IGNvbnN0YW50c18xLkRFRkFVTFRfSEVBREVSUyxcclxuICAgIGZsb3dUeXBlOiAnaW1wbGljaXQnLFxyXG4gICAgZGVidWc6IGZhbHNlLFxyXG4gICAgaGFzQ3VzdG9tQXV0aG9yaXphdGlvbkhlYWRlcjogZmFsc2UsXHJcbn07XHJcbmFzeW5jIGZ1bmN0aW9uIGxvY2tOb09wKG5hbWUsIGFjcXVpcmVUaW1lb3V0LCBmbikge1xyXG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XHJcbn1cclxuLyoqXHJcbiAqIENhY2hlcyBKV0tTIHZhbHVlcyBmb3IgYWxsIGNsaWVudHMgY3JlYXRlZCBpbiB0aGUgc2FtZSBlbnZpcm9ubWVudC4gVGhpcyBpc1xyXG4gKiBlc3BlY2lhbGx5IHVzZWZ1bCBmb3Igc2hhcmVkLW1lbW9yeSBleGVjdXRpb24gZW52aXJvbm1lbnRzIHN1Y2ggYXMgVmVyY2VsJ3NcclxuICogRmx1aWQgQ29tcHV0ZSwgQVdTIExhbWJkYSBvciBTdXBhYmFzZSdzIEVkZ2UgRnVuY3Rpb25zLiBSZWdhcmRsZXNzIG9mIGhvd1xyXG4gKiBtYW55IGNsaWVudHMgYXJlIGNyZWF0ZWQsIGlmIHRoZXkgc2hhcmUgdGhlIHNhbWUgc3RvcmFnZSBrZXkgdGhleSB3aWxsIHVzZVxyXG4gKiB0aGUgc2FtZSBKV0tTIGNhY2hlLCBzaWduaWZpY2FudGx5IHNwZWVkaW5nIHVwIGdldENsYWltcygpIHdpdGggYXN5bW1ldHJpY1xyXG4gKiBKV1RzLlxyXG4gKi9cclxuY29uc3QgR0xPQkFMX0pXS1MgPSB7fTtcclxuY2xhc3MgR29UcnVlQ2xpZW50IHtcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IGNsaWVudCBmb3IgdXNlIGluIHRoZSBicm93c2VyLlxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZXhwZXJpbWVudGFsXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy51c2VyU3RvcmFnZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlRW1pdHRlcnMgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy5hdXRvUmVmcmVzaFRpY2tlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICB0aGlzLnJlZnJlc2hpbmdEZWZlcnJlZCA9IG51bGw7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogS2VlcHMgdHJhY2sgb2YgdGhlIGFzeW5jIGNsaWVudCBpbml0aWFsaXphdGlvbi5cclxuICAgICAgICAgKiBXaGVuIG51bGwgb3Igbm90IHlldCByZXNvbHZlZCB0aGUgYXV0aCBzdGF0ZSBpcyBgdW5rbm93bmBcclxuICAgICAgICAgKiBPbmNlIHJlc29sdmVkIHRoZSB0aGUgYXV0aCBzdGF0ZSBpcyBrbm93biBhbmQgaXQncyBzYXZlIHRvIGNhbGwgYW55IGZ1cnRoZXIgY2xpZW50IG1ldGhvZHMuXHJcbiAgICAgICAgICogS2VlcCBleHRyYSBjYXJlIHRvIG5ldmVyIHJlamVjdCBvciB0aHJvdyB1bmNhdWdodCBlcnJvcnNcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmluaXRpYWxpemVQcm9taXNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRldGVjdFNlc3Npb25JblVybCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oYXNDdXN0b21BdXRob3JpemF0aW9uSGVhZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdXBwcmVzc0dldFNlc3Npb25XYXJuaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sb2NrQWNxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnBlbmRpbmdJbkxvY2sgPSBbXTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVc2VkIHRvIGJyb2FkY2FzdCBzdGF0ZSBjaGFuZ2UgZXZlbnRzIHRvIG90aGVyIHRhYnMgbGlzdGVuaW5nLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBjb25zb2xlLmxvZztcclxuICAgICAgICB0aGlzLmluc3RhbmNlSUQgPSBHb1RydWVDbGllbnQubmV4dEluc3RhbmNlSUQ7XHJcbiAgICAgICAgR29UcnVlQ2xpZW50Lm5leHRJbnN0YW5jZUlEICs9IDE7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2VJRCA+IDAgJiYgKDAsIGhlbHBlcnNfMS5pc0Jyb3dzZXIpKCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdNdWx0aXBsZSBHb1RydWVDbGllbnQgaW5zdGFuY2VzIGRldGVjdGVkIGluIHRoZSBzYW1lIGJyb3dzZXIgY29udGV4dC4gSXQgaXMgbm90IGFuIGVycm9yLCBidXQgdGhpcyBzaG91bGQgYmUgYXZvaWRlZCBhcyBpdCBtYXkgcHJvZHVjZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hlbiB1c2VkIGNvbmN1cnJlbnRseSB1bmRlciB0aGUgc2FtZSBzdG9yYWdlIGtleS4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUyksIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMubG9nRGVidWdNZXNzYWdlcyA9ICEhc2V0dGluZ3MuZGVidWc7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzZXR0aW5ncy5kZWJ1ZyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlciA9IHNldHRpbmdzLmRlYnVnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBlcnNpc3RTZXNzaW9uID0gc2V0dGluZ3MucGVyc2lzdFNlc3Npb247XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlS2V5ID0gc2V0dGluZ3Muc3RvcmFnZUtleTtcclxuICAgICAgICB0aGlzLmF1dG9SZWZyZXNoVG9rZW4gPSBzZXR0aW5ncy5hdXRvUmVmcmVzaFRva2VuO1xyXG4gICAgICAgIHRoaXMuYWRtaW4gPSBuZXcgR29UcnVlQWRtaW5BcGlfMS5kZWZhdWx0KHtcclxuICAgICAgICAgICAgdXJsOiBzZXR0aW5ncy51cmwsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHNldHRpbmdzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgIGZldGNoOiBzZXR0aW5ncy5mZXRjaCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnVybCA9IHNldHRpbmdzLnVybDtcclxuICAgICAgICB0aGlzLmhlYWRlcnMgPSBzZXR0aW5ncy5oZWFkZXJzO1xyXG4gICAgICAgIHRoaXMuZmV0Y2ggPSAoMCwgaGVscGVyc18xLnJlc29sdmVGZXRjaCkoc2V0dGluZ3MuZmV0Y2gpO1xyXG4gICAgICAgIHRoaXMubG9jayA9IHNldHRpbmdzLmxvY2sgfHwgbG9ja05vT3A7XHJcbiAgICAgICAgdGhpcy5kZXRlY3RTZXNzaW9uSW5VcmwgPSBzZXR0aW5ncy5kZXRlY3RTZXNzaW9uSW5Vcmw7XHJcbiAgICAgICAgdGhpcy5mbG93VHlwZSA9IHNldHRpbmdzLmZsb3dUeXBlO1xyXG4gICAgICAgIHRoaXMuaGFzQ3VzdG9tQXV0aG9yaXphdGlvbkhlYWRlciA9IHNldHRpbmdzLmhhc0N1c3RvbUF1dGhvcml6YXRpb25IZWFkZXI7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzLmxvY2spIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NrID0gc2V0dGluZ3MubG9jaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKDAsIGhlbHBlcnNfMS5pc0Jyb3dzZXIpKCkgJiYgKChfYSA9IGdsb2JhbFRoaXMgPT09IG51bGwgfHwgZ2xvYmFsVGhpcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ2xvYmFsVGhpcy5uYXZpZ2F0b3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sb2NrcykpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NrID0gbG9ja3NfMS5uYXZpZ2F0b3JMb2NrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NrID0gbG9ja05vT3A7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5qd2tzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuandrcyA9IHsga2V5czogW10gfTtcclxuICAgICAgICAgICAgdGhpcy5qd2tzX2NhY2hlZF9hdCA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1mYSA9IHtcclxuICAgICAgICAgICAgdmVyaWZ5OiB0aGlzLl92ZXJpZnkuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgZW5yb2xsOiB0aGlzLl9lbnJvbGwuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgdW5lbnJvbGw6IHRoaXMuX3VuZW5yb2xsLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGNoYWxsZW5nZTogdGhpcy5fY2hhbGxlbmdlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGxpc3RGYWN0b3JzOiB0aGlzLl9saXN0RmFjdG9ycy5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBjaGFsbGVuZ2VBbmRWZXJpZnk6IHRoaXMuX2NoYWxsZW5nZUFuZFZlcmlmeS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBnZXRBdXRoZW50aWNhdG9yQXNzdXJhbmNlTGV2ZWw6IHRoaXMuX2dldEF1dGhlbnRpY2F0b3JBc3N1cmFuY2VMZXZlbC5iaW5kKHRoaXMpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHRoaXMucGVyc2lzdFNlc3Npb24pIHtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmdzLnN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZSA9IHNldHRpbmdzLnN0b3JhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGhlbHBlcnNfMS5zdXBwb3J0c0xvY2FsU3RvcmFnZSkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZSA9IGdsb2JhbFRoaXMubG9jYWxTdG9yYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlID0gKDAsIGxvY2FsX3N0b3JhZ2VfMS5tZW1vcnlMb2NhbFN0b3JhZ2VBZGFwdGVyKSh0aGlzLm1lbW9yeVN0b3JhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy51c2VyU3RvcmFnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyU3RvcmFnZSA9IHNldHRpbmdzLnVzZXJTdG9yYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1lbW9yeVN0b3JhZ2UgPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlID0gKDAsIGxvY2FsX3N0b3JhZ2VfMS5tZW1vcnlMb2NhbFN0b3JhZ2VBZGFwdGVyKSh0aGlzLm1lbW9yeVN0b3JhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKDAsIGhlbHBlcnNfMS5pc0Jyb3dzZXIpKCkgJiYgZ2xvYmFsVGhpcy5Ccm9hZGNhc3RDaGFubmVsICYmIHRoaXMucGVyc2lzdFNlc3Npb24gJiYgdGhpcy5zdG9yYWdlS2V5KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyb2FkY2FzdENoYW5uZWwgPSBuZXcgZ2xvYmFsVGhpcy5Ccm9hZGNhc3RDaGFubmVsKHRoaXMuc3RvcmFnZUtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgQnJvYWRjYXN0Q2hhbm5lbCwgbXVsdGktdGFiIHN0YXRlIGNoYW5nZXMgd2lsbCBub3QgYmUgYXZhaWxhYmxlJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKF9iID0gdGhpcy5icm9hZGNhc3RDaGFubmVsKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGFzeW5jIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoJ3JlY2VpdmVkIGJyb2FkY2FzdCBub3RpZmljYXRpb24gZnJvbSBvdGhlciB0YWIgb3IgY2xpZW50JywgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoZXZlbnQuZGF0YS5ldmVudCwgZXZlbnQuZGF0YS5zZXNzaW9uLCBmYWxzZSk7IC8vIGJyb2FkY2FzdCA9IGZhbHNlIHNvIHdlIGRvbid0IGdldCBhbiBlbmRsZXNzIGxvb3Agb2YgbWVzc2FnZXNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgSldLUyB1c2VkIGZvciB2ZXJpZnlpbmcgYXN5bW1ldHJpYyBKV1RzXHJcbiAgICAgKi9cclxuICAgIGdldCBqd2tzKCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IEdMT0JBTF9KV0tTW3RoaXMuc3RvcmFnZUtleV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5qd2tzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB7IGtleXM6IFtdIH07XHJcbiAgICB9XHJcbiAgICBzZXQgandrcyh2YWx1ZSkge1xyXG4gICAgICAgIEdMT0JBTF9KV0tTW3RoaXMuc3RvcmFnZUtleV0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIEdMT0JBTF9KV0tTW3RoaXMuc3RvcmFnZUtleV0pLCB7IGp3a3M6IHZhbHVlIH0pO1xyXG4gICAgfVxyXG4gICAgZ2V0IGp3a3NfY2FjaGVkX2F0KCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IEdMT0JBTF9KV0tTW3RoaXMuc3RvcmFnZUtleV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWNoZWRBdCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI7XHJcbiAgICB9XHJcbiAgICBzZXQgandrc19jYWNoZWRfYXQodmFsdWUpIHtcclxuICAgICAgICBHTE9CQUxfSldLU1t0aGlzLnN0b3JhZ2VLZXldID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBHTE9CQUxfSldLU1t0aGlzLnN0b3JhZ2VLZXldKSwgeyBjYWNoZWRBdDogdmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgICBfZGVidWcoLi4uYXJncykge1xyXG4gICAgICAgIGlmICh0aGlzLmxvZ0RlYnVnTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIoYEdvVHJ1ZUNsaWVudEAke3RoaXMuaW5zdGFuY2VJRH0gKCR7dmVyc2lvbl8xLnZlcnNpb259KSAke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKX1gLCAuLi5hcmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIHRoZSBjbGllbnQgc2Vzc2lvbiBlaXRoZXIgZnJvbSB0aGUgdXJsIG9yIGZyb20gc3RvcmFnZS5cclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIHdoZW4gaW5zdGFudGlhdGluZyB0aGUgY2xpZW50LCBidXQgc2hvdWxkIGFsc28gYmUgY2FsbGVkXHJcbiAgICAgKiBtYW51YWxseSB3aGVuIGNoZWNraW5nIGZvciBhbiBlcnJvciBmcm9tIGFuIGF1dGggcmVkaXJlY3QgKG9hdXRoLCBtYWdpY2xpbmssIHBhc3N3b3JkIHJlY292ZXJ5LCBldGMpLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVQcm9taXNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRpYWxpemVQcm9taXNlID0gKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2FjcXVpcmVMb2NrKC0xLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5faW5pdGlhbGl6ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KSgpO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBJTVBPUlRBTlQ6XHJcbiAgICAgKiAxLiBOZXZlciB0aHJvdyBpbiB0aGlzIG1ldGhvZCwgYXMgaXQgaXMgY2FsbGVkIGZyb20gdGhlIGNvbnN0cnVjdG9yXHJcbiAgICAgKiAyLiBOZXZlciByZXR1cm4gYSBzZXNzaW9uIGZyb20gdGhpcyBtZXRob2QgYXMgaXQgd291bGQgYmUgY2FjaGVkIG92ZXJcclxuICAgICAqICAgIHRoZSB3aG9sZSBsaWZldGltZSBvZiB0aGUgY2xpZW50XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIF9pbml0aWFsaXplKCkge1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSAoMCwgaGVscGVyc18xLnBhcnNlUGFyYW1ldGVyc0Zyb21VUkwpKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcclxuICAgICAgICAgICAgbGV0IGNhbGxiYWNrVXJsVHlwZSA9ICdub25lJztcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW1wbGljaXRHcmFudENhbGxiYWNrKHBhcmFtcykpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrVXJsVHlwZSA9ICdpbXBsaWNpdCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoYXdhaXQgdGhpcy5faXNQS0NFQ2FsbGJhY2socGFyYW1zKSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tVcmxUeXBlID0gJ3BrY2UnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBBdHRlbXB0IHRvIGdldCB0aGUgc2Vzc2lvbiBmcm9tIHRoZSBVUkwgb25seSBpZiB0aGVzZSBjb25kaXRpb25zIGFyZSBmdWxmaWxsZWRcclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogTm90ZTogSWYgdGhlIFVSTCBpc24ndCBvbmUgb2YgdGhlIGNhbGxiYWNrIHVybCB0eXBlcyAoaW1wbGljaXQgb3IgcGtjZSksXHJcbiAgICAgICAgICAgICAqIHRoZW4gdGhlcmUgY291bGQgYmUgYW4gZXhpc3Rpbmcgc2Vzc2lvbiBzbyB3ZSBkb24ndCB3YW50IHRvIHByZW1hdHVyZWx5IHJlbW92ZSBpdFxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaWYgKCgwLCBoZWxwZXJzXzEuaXNCcm93c2VyKSgpICYmIHRoaXMuZGV0ZWN0U2Vzc2lvbkluVXJsICYmIGNhbGxiYWNrVXJsVHlwZSAhPT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCB0aGlzLl9nZXRTZXNzaW9uRnJvbVVSTChwYXJhbXMsIGNhbGxiYWNrVXJsVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI19pbml0aWFsaXplKCknLCAnZXJyb3IgZGV0ZWN0aW5nIHNlc3Npb24gZnJvbSBVUkwnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc0F1dGhJbXBsaWNpdEdyYW50UmVkaXJlY3RFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IChfYSA9IGVycm9yLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JDb2RlID09PSAnaWRlbnRpdHlfYWxyZWFkeV9leGlzdHMnIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGUgPT09ICdpZGVudGl0eV9ub3RfZm91bmQnIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGUgPT09ICdzaW5nbGVfaWRlbnRpdHlfbm90X2RlbGV0YWJsZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZmFpbGVkIGxvZ2luIGF0dGVtcHQgdmlhIHVybCxcclxuICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgb2xkIHNlc3Npb24gYXMgaW4gdmVyaWZ5T3RwLCBzaWduVXAgYW5kIHNpZ25JbldpdGgqXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVtb3ZlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNlc3Npb24sIHJlZGlyZWN0VHlwZSB9ID0gZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2luaXRpYWxpemUoKScsICdkZXRlY3RlZCBzZXNzaW9uIGluIFVSTCcsIHNlc3Npb24sICdyZWRpcmVjdCB0eXBlJywgcmVkaXJlY3RUeXBlKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKHNlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZGlyZWN0VHlwZSA9PT0gJ3JlY292ZXJ5Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9ub3RpZnlBbGxTdWJzY3JpYmVycygnUEFTU1dPUkRfUkVDT1ZFUlknLCBzZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKCdTSUdORURfSU4nLCBzZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gbm8gbG9naW4gYXR0ZW1wdCB2aWEgY2FsbGJhY2sgdXJsIHRyeSB0byByZWNvdmVyIHNlc3Npb24gZnJvbSBzdG9yYWdlXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlY292ZXJBbmRSZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoKDAsIGVycm9yc18xLmlzQXV0aEVycm9yKShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgZXJyb3JzXzEuQXV0aFVua25vd25FcnJvcignVW5leHBlY3RlZCBlcnJvciBkdXJpbmcgaW5pdGlhbGl6YXRpb24nLCBlcnJvciksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2luaXRpYWxpemUoKScsICdlbmQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgYW5vbnltb3VzIHVzZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgQSBzZXNzaW9uIHdoZXJlIHRoZSBpc19hbm9ueW1vdXMgY2xhaW0gaW4gdGhlIGFjY2VzcyB0b2tlbiBKV1Qgc2V0IHRvIHRydWVcclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2lnbkluQW5vbnltb3VzbHkoY3JlZGVudGlhbHMpIHtcclxuICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCAoMCwgZmV0Y2hfMS5fcmVxdWVzdCkodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vc2lnbnVwYCwge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IChfYiA9IChfYSA9IGNyZWRlbnRpYWxzID09PSBudWxsIHx8IGNyZWRlbnRpYWxzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjcmVkZW50aWFscy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGF0YSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge30sXHJcbiAgICAgICAgICAgICAgICAgICAgZ290cnVlX21ldGFfc2VjdXJpdHk6IHsgY2FwdGNoYV90b2tlbjogKF9jID0gY3JlZGVudGlhbHMgPT09IG51bGwgfHwgY3JlZGVudGlhbHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNyZWRlbnRpYWxzLm9wdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jYXB0Y2hhVG9rZW4gfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB4Zm9ybTogZmV0Y2hfMS5fc2Vzc2lvblJlc3BvbnNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gcmVzO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IgfHwgIWRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvcjogZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gZGF0YS5zZXNzaW9uO1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyID0gZGF0YS51c2VyO1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5zZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihkYXRhLnNlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1NJR05FRF9JTicsIHNlc3Npb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc0F1dGhFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgdXNlci5cclxuICAgICAqXHJcbiAgICAgKiBCZSBhd2FyZSB0aGF0IGlmIGEgdXNlciBhY2NvdW50IGV4aXN0cyBpbiB0aGUgc3lzdGVtIHlvdSBtYXkgZ2V0IGJhY2sgYW5cclxuICAgICAqIGVycm9yIG1lc3NhZ2UgdGhhdCBhdHRlbXB0cyB0byBoaWRlIHRoaXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgdXNlci5cclxuICAgICAqIFRoaXMgbWV0aG9kIGhhcyBzdXBwb3J0IGZvciBQS0NFIHZpYSBlbWFpbCBzaWdudXBzLiBUaGUgUEtDRSBmbG93IGNhbm5vdCBiZSB1c2VkIHdoZW4gYXV0b2NvbmZpcm0gaXMgZW5hYmxlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBBIGxvZ2dlZC1pbiBzZXNzaW9uIGlmIHRoZSBzZXJ2ZXIgaGFzIFwiYXV0b2NvbmZpcm1cIiBPTlxyXG4gICAgICogQHJldHVybnMgQSB1c2VyIGlmIHRoZSBzZXJ2ZXIgaGFzIFwiYXV0b2NvbmZpcm1cIiBPRkZcclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2lnblVwKGNyZWRlbnRpYWxzKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJlcztcclxuICAgICAgICAgICAgaWYgKCdlbWFpbCcgaW4gY3JlZGVudGlhbHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZW1haWwsIHBhc3N3b3JkLCBvcHRpb25zIH0gPSBjcmVkZW50aWFscztcclxuICAgICAgICAgICAgICAgIGxldCBjb2RlQ2hhbGxlbmdlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGxldCBjb2RlQ2hhbGxlbmdlTWV0aG9kID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZsb3dUeXBlID09PSAncGtjZScpIHtcclxuICAgICAgICAgICAgICAgICAgICA7XHJcbiAgICAgICAgICAgICAgICAgICAgW2NvZGVDaGFsbGVuZ2UsIGNvZGVDaGFsbGVuZ2VNZXRob2RdID0gYXdhaXQgKDAsIGhlbHBlcnNfMS5nZXRDb2RlQ2hhbGxlbmdlQW5kTWV0aG9kKSh0aGlzLnN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXMgPSBhd2FpdCAoMCwgZmV0Y2hfMS5fcmVxdWVzdCkodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vc2lnbnVwYCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFRvOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZW1haWxSZWRpcmVjdFRvLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1haWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZGF0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvdHJ1ZV9tZXRhX3NlY3VyaXR5OiB7IGNhcHRjaGFfdG9rZW46IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXB0Y2hhVG9rZW4gfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9jaGFsbGVuZ2U6IGNvZGVDaGFsbGVuZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfY2hhbGxlbmdlX21ldGhvZDogY29kZUNoYWxsZW5nZU1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHhmb3JtOiBmZXRjaF8xLl9zZXNzaW9uUmVzcG9uc2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgncGhvbmUnIGluIGNyZWRlbnRpYWxzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHBob25lLCBwYXNzd29yZCwgb3B0aW9ucyB9ID0gY3JlZGVudGlhbHM7XHJcbiAgICAgICAgICAgICAgICByZXMgPSBhd2FpdCAoMCwgZmV0Y2hfMS5fcmVxdWVzdCkodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vc2lnbnVwYCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICBib2R5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBob25lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmRhdGEpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsOiAoX2MgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2hhbm5lbCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogJ3NtcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvdHJ1ZV9tZXRhX3NlY3VyaXR5OiB7IGNhcHRjaGFfdG9rZW46IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXB0Y2hhVG9rZW4gfSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHhmb3JtOiBmZXRjaF8xLl9zZXNzaW9uUmVzcG9uc2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BdXRoSW52YWxpZENyZWRlbnRpYWxzRXJyb3IoJ1lvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIGFuIGVtYWlsIG9yIHBob25lIG51bWJlciBhbmQgYSBwYXNzd29yZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGVycm9yIHx8ICFkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3I6IGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGRhdGEuc2Vzc2lvbjtcclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IGRhdGEudXNlcjtcclxuICAgICAgICAgICAgaWYgKGRhdGEuc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2F2ZVNlc3Npb24oZGF0YS5zZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKCdTSUdORURfSU4nLCBzZXNzaW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2cgaW4gYW4gZXhpc3RpbmcgdXNlciB3aXRoIGFuIGVtYWlsIGFuZCBwYXNzd29yZCBvciBwaG9uZSBhbmQgcGFzc3dvcmQuXHJcbiAgICAgKlxyXG4gICAgICogQmUgYXdhcmUgdGhhdCB5b3UgbWF5IGdldCBiYWNrIGFuIGVycm9yIG1lc3NhZ2UgdGhhdCB3aWxsIG5vdCBkaXN0aW5ndWlzaFxyXG4gICAgICogYmV0d2VlbiB0aGUgY2FzZXMgd2hlcmUgdGhlIGFjY291bnQgZG9lcyBub3QgZXhpc3Qgb3IgdGhhdCB0aGVcclxuICAgICAqIGVtYWlsL3Bob25lIGFuZCBwYXNzd29yZCBjb21iaW5hdGlvbiBpcyB3cm9uZyBvciB0aGF0IHRoZSBhY2NvdW50IGNhbiBvbmx5XHJcbiAgICAgKiBiZSBhY2Nlc3NlZCB2aWEgc29jaWFsIGxvZ2luLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBzaWduSW5XaXRoUGFzc3dvcmQoY3JlZGVudGlhbHMpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmVzO1xyXG4gICAgICAgICAgICBpZiAoJ2VtYWlsJyBpbiBjcmVkZW50aWFscykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBlbWFpbCwgcGFzc3dvcmQsIG9wdGlvbnMgfSA9IGNyZWRlbnRpYWxzO1xyXG4gICAgICAgICAgICAgICAgcmVzID0gYXdhaXQgKDAsIGZldGNoXzEuX3JlcXVlc3QpKHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L3Rva2VuP2dyYW50X3R5cGU9cGFzc3dvcmRgLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1haWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnb3RydWVfbWV0YV9zZWN1cml0eTogeyBjYXB0Y2hhX3Rva2VuOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2FwdGNoYVRva2VuIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB4Zm9ybTogZmV0Y2hfMS5fc2Vzc2lvblJlc3BvbnNlUGFzc3dvcmQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgncGhvbmUnIGluIGNyZWRlbnRpYWxzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHBob25lLCBwYXNzd29yZCwgb3B0aW9ucyB9ID0gY3JlZGVudGlhbHM7XHJcbiAgICAgICAgICAgICAgICByZXMgPSBhd2FpdCAoMCwgZmV0Y2hfMS5fcmVxdWVzdCkodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vdG9rZW4/Z3JhbnRfdHlwZT1wYXNzd29yZGAsIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwaG9uZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvdHJ1ZV9tZXRhX3NlY3VyaXR5OiB7IGNhcHRjaGFfdG9rZW46IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXB0Y2hhVG9rZW4gfSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHhmb3JtOiBmZXRjaF8xLl9zZXNzaW9uUmVzcG9uc2VQYXNzd29yZCxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkF1dGhJbnZhbGlkQ3JlZGVudGlhbHNFcnJvcignWW91IG11c3QgcHJvdmlkZSBlaXRoZXIgYW4gZW1haWwgb3IgcGhvbmUgbnVtYmVyIGFuZCBhIHBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gcmVzO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFkYXRhIHx8ICFkYXRhLnNlc3Npb24gfHwgIWRhdGEudXNlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yOiBuZXcgZXJyb3JzXzEuQXV0aEludmFsaWRUb2tlblJlc3BvbnNlRXJyb3IoKSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkYXRhLnNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKGRhdGEuc2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9ub3RpZnlBbGxTdWJzY3JpYmVycygnU0lHTkVEX0lOJywgZGF0YS5zZXNzaW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7IHVzZXI6IGRhdGEudXNlciwgc2Vzc2lvbjogZGF0YS5zZXNzaW9uIH0sIChkYXRhLndlYWtfcGFzc3dvcmQgPyB7IHdlYWtQYXNzd29yZDogZGF0YS53ZWFrX3Bhc3N3b3JkIH0gOiBudWxsKSksXHJcbiAgICAgICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2cgaW4gYW4gZXhpc3RpbmcgdXNlciB2aWEgYSB0aGlyZC1wYXJ0eSBwcm92aWRlci5cclxuICAgICAqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIHRoZSBQS0NFIGZsb3cuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNpZ25JbldpdGhPQXV0aChjcmVkZW50aWFscykge1xyXG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5faGFuZGxlUHJvdmlkZXJTaWduSW4oY3JlZGVudGlhbHMucHJvdmlkZXIsIHtcclxuICAgICAgICAgICAgcmVkaXJlY3RUbzogKF9hID0gY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJlZGlyZWN0VG8sXHJcbiAgICAgICAgICAgIHNjb3BlczogKF9iID0gY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNjb3BlcyxcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IChfYyA9IGNyZWRlbnRpYWxzLm9wdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5xdWVyeVBhcmFtcyxcclxuICAgICAgICAgICAgc2tpcEJyb3dzZXJSZWRpcmVjdDogKF9kID0gY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLnNraXBCcm93c2VyUmVkaXJlY3QsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIExvZyBpbiBhbiBleGlzdGluZyB1c2VyIGJ5IGV4Y2hhbmdpbmcgYW4gQXV0aCBDb2RlIGlzc3VlZCBkdXJpbmcgdGhlIFBLQ0UgZmxvdy5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZXhjaGFuZ2VDb2RlRm9yU2Vzc2lvbihhdXRoQ29kZSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjcXVpcmVMb2NrKC0xLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9leGNoYW5nZUNvZGVGb3JTZXNzaW9uKGF1dGhDb2RlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2lnbnMgaW4gYSB1c2VyIGJ5IHZlcmlmeWluZyBhIG1lc3NhZ2Ugc2lnbmVkIGJ5IHRoZSB1c2VyJ3MgcHJpdmF0ZSBrZXkuXHJcbiAgICAgKiBPbmx5IFNvbGFuYSBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLCB1c2luZyB0aGUgU2lnbiBpbiB3aXRoIFNvbGFuYSBzdGFuZGFyZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2lnbkluV2l0aFdlYjMoY3JlZGVudGlhbHMpIHtcclxuICAgICAgICBjb25zdCB7IGNoYWluIH0gPSBjcmVkZW50aWFscztcclxuICAgICAgICBpZiAoY2hhaW4gPT09ICdzb2xhbmEnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNpZ25JbldpdGhTb2xhbmEoY3JlZGVudGlhbHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEBzdXBhYmFzZS9hdXRoLWpzOiBVbnN1cHBvcnRlZCBjaGFpbiBcIiR7Y2hhaW59XCJgKTtcclxuICAgIH1cclxuICAgIGFzeW5jIHNpZ25JbldpdGhTb2xhbmEoY3JlZGVudGlhbHMpIHtcclxuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2ssIF9sLCBfbTtcclxuICAgICAgICBsZXQgbWVzc2FnZTtcclxuICAgICAgICBsZXQgc2lnbmF0dXJlO1xyXG4gICAgICAgIGlmICgnbWVzc2FnZScgaW4gY3JlZGVudGlhbHMpIHtcclxuICAgICAgICAgICAgbWVzc2FnZSA9IGNyZWRlbnRpYWxzLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIHNpZ25hdHVyZSA9IGNyZWRlbnRpYWxzLnNpZ25hdHVyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgY2hhaW4sIHdhbGxldCwgc3RhdGVtZW50LCBvcHRpb25zIH0gPSBjcmVkZW50aWFscztcclxuICAgICAgICAgICAgbGV0IHJlc29sdmVkV2FsbGV0O1xyXG4gICAgICAgICAgICBpZiAoISgwLCBoZWxwZXJzXzEuaXNCcm93c2VyKSgpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdhbGxldCAhPT0gJ29iamVjdCcgfHwgIShvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudXJsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQHN1cGFiYXNlL2F1dGgtanM6IEJvdGggd2FsbGV0IGFuZCB1cmwgbXVzdCBiZSBzcGVjaWZpZWQgaW4gbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRzLicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRXYWxsZXQgPSB3YWxsZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHdhbGxldCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmVkV2FsbGV0ID0gd2FsbGV0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgd2luZG93QW55ID0gd2luZG93O1xyXG4gICAgICAgICAgICAgICAgaWYgKCdzb2xhbmEnIGluIHdpbmRvd0FueSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiB3aW5kb3dBbnkuc29sYW5hID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICgoJ3NpZ25JbicgaW4gd2luZG93QW55LnNvbGFuYSAmJiB0eXBlb2Ygd2luZG93QW55LnNvbGFuYS5zaWduSW4gPT09ICdmdW5jdGlvbicpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICgnc2lnbk1lc3NhZ2UnIGluIHdpbmRvd0FueS5zb2xhbmEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB3aW5kb3dBbnkuc29sYW5hLnNpZ25NZXNzYWdlID09PSAnZnVuY3Rpb24nKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFdhbGxldCA9IHdpbmRvd0FueS5zb2xhbmE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEBzdXBhYmFzZS9hdXRoLWpzOiBObyBjb21wYXRpYmxlIFNvbGFuYSB3YWxsZXQgaW50ZXJmYWNlIG9uIHRoZSB3aW5kb3cgb2JqZWN0ICh3aW5kb3cuc29sYW5hKSBkZXRlY3RlZC4gTWFrZSBzdXJlIHRoZSB1c2VyIGFscmVhZHkgaGFzIGEgd2FsbGV0IGluc3RhbGxlZCBhbmQgY29ubmVjdGVkIGZvciB0aGlzIGFwcC4gUHJlZmVyIHBhc3NpbmcgdGhlIHdhbGxldCBpbnRlcmZhY2Ugb2JqZWN0IGRpcmVjdGx5IHRvIHNpZ25JbldpdGhXZWIzKHsgY2hhaW46ICdzb2xhbmEnLCB3YWxsZXQ6IHJlc29sdmVkVXNlcldhbGxldCB9KSBpbnN0ZWFkLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnVybCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogd2luZG93LmxvY2F0aW9uLmhyZWYpO1xyXG4gICAgICAgICAgICBpZiAoJ3NpZ25JbicgaW4gcmVzb2x2ZWRXYWxsZXQgJiYgcmVzb2x2ZWRXYWxsZXQuc2lnbkluKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCByZXNvbHZlZFdhbGxldC5zaWduSW4oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBpc3N1ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zaWduSW5XaXRoU29sYW5hKSwgeyBcclxuICAgICAgICAgICAgICAgICAgICAvLyBub24tb3ZlcnJpZGFibGUgcHJvcGVydGllc1xyXG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246ICcxJywgZG9tYWluOiB1cmwuaG9zdCwgdXJpOiB1cmwuaHJlZiB9KSwgKHN0YXRlbWVudCA/IHsgc3RhdGVtZW50IH0gOiBudWxsKSkpO1xyXG4gICAgICAgICAgICAgICAgbGV0IG91dHB1dFRvUHJvY2VzcztcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG91dHB1dCkgJiYgb3V0cHV0WzBdICYmIHR5cGVvZiBvdXRwdXRbMF0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0VG9Qcm9jZXNzID0gb3V0cHV0WzBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0cHV0ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIG91dHB1dCA9PT0gJ29iamVjdCcgJiZcclxuICAgICAgICAgICAgICAgICAgICAnc2lnbmVkTWVzc2FnZScgaW4gb3V0cHV0ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgJ3NpZ25hdHVyZScgaW4gb3V0cHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0VG9Qcm9jZXNzID0gb3V0cHV0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdAc3VwYWJhc2UvYXV0aC1qczogV2FsbGV0IG1ldGhvZCBzaWduSW4oKSByZXR1cm5lZCB1bnJlY29nbml6ZWQgdmFsdWUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICgnc2lnbmVkTWVzc2FnZScgaW4gb3V0cHV0VG9Qcm9jZXNzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgJ3NpZ25hdHVyZScgaW4gb3V0cHV0VG9Qcm9jZXNzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBvdXRwdXRUb1Byb2Nlc3Muc2lnbmVkTWVzc2FnZSA9PT0gJ3N0cmluZycgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0VG9Qcm9jZXNzLnNpZ25lZE1lc3NhZ2UgaW5zdGFuY2VvZiBVaW50OEFycmF5KSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFRvUHJvY2Vzcy5zaWduYXR1cmUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBvdXRwdXRUb1Byb2Nlc3Muc2lnbmVkTWVzc2FnZSA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gb3V0cHV0VG9Qcm9jZXNzLnNpZ25lZE1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG91dHB1dFRvUHJvY2Vzcy5zaWduZWRNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgPSBvdXRwdXRUb1Byb2Nlc3Muc2lnbmF0dXJlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdAc3VwYWJhc2UvYXV0aC1qczogV2FsbGV0IG1ldGhvZCBzaWduSW4oKSBBUEkgcmV0dXJuZWQgb2JqZWN0IHdpdGhvdXQgc2lnbmVkTWVzc2FnZSBhbmQgc2lnbmF0dXJlIGZpZWxkcycpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoJ3NpZ25NZXNzYWdlJyBpbiByZXNvbHZlZFdhbGxldCkgfHxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVzb2x2ZWRXYWxsZXQuc2lnbk1lc3NhZ2UgIT09ICdmdW5jdGlvbicgfHxcclxuICAgICAgICAgICAgICAgICAgICAhKCdwdWJsaWNLZXknIGluIHJlc29sdmVkV2FsbGV0KSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXNvbHZlZFdhbGxldCAhPT0gJ29iamVjdCcgfHxcclxuICAgICAgICAgICAgICAgICAgICAhcmVzb2x2ZWRXYWxsZXQucHVibGljS2V5IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgISgndG9CYXNlNTgnIGluIHJlc29sdmVkV2FsbGV0LnB1YmxpY0tleSkgfHxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVzb2x2ZWRXYWxsZXQucHVibGljS2V5LnRvQmFzZTU4ICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdAc3VwYWJhc2UvYXV0aC1qczogV2FsbGV0IGRvZXMgbm90IGhhdmUgYSBjb21wYXRpYmxlIHNpZ25NZXNzYWdlKCkgYW5kIHB1YmxpY0tleS50b0Jhc2U1OCgpIEFQSScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IFtcclxuICAgICAgICAgICAgICAgICAgICBgJHt1cmwuaG9zdH0gd2FudHMgeW91IHRvIHNpZ24gaW4gd2l0aCB5b3VyIFNvbGFuYSBhY2NvdW50OmAsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRXYWxsZXQucHVibGljS2V5LnRvQmFzZTU4KCksXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uKHN0YXRlbWVudCA/IFsnJywgc3RhdGVtZW50LCAnJ10gOiBbJyddKSxcclxuICAgICAgICAgICAgICAgICAgICAnVmVyc2lvbjogMScsXHJcbiAgICAgICAgICAgICAgICAgICAgYFVSSTogJHt1cmwuaHJlZn1gLFxyXG4gICAgICAgICAgICAgICAgICAgIGBJc3N1ZWQgQXQ6ICR7KF9jID0gKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNpZ25JbldpdGhTb2xhbmEpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pc3N1ZWRBdCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uKCgoX2QgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2lnbkluV2l0aFNvbGFuYSkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLm5vdEJlZm9yZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBbYE5vdCBCZWZvcmU6ICR7b3B0aW9ucy5zaWduSW5XaXRoU29sYW5hLm5vdEJlZm9yZX1gXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFtdKSxcclxuICAgICAgICAgICAgICAgICAgICAuLi4oKChfZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zaWduSW5XaXRoU29sYW5hKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuZXhwaXJhdGlvblRpbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gW2BFeHBpcmF0aW9uIFRpbWU6ICR7b3B0aW9ucy5zaWduSW5XaXRoU29sYW5hLmV4cGlyYXRpb25UaW1lfWBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogW10pLFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLigoKF9mID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNpZ25JbldpdGhTb2xhbmEpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5jaGFpbklkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFtgQ2hhaW4gSUQ6ICR7b3B0aW9ucy5zaWduSW5XaXRoU29sYW5hLmNoYWluSWR9YF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbXSksXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uKCgoX2cgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2lnbkluV2l0aFNvbGFuYSkgPT09IG51bGwgfHwgX2cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9nLm5vbmNlKSA/IFtgTm9uY2U6ICR7b3B0aW9ucy5zaWduSW5XaXRoU29sYW5hLm5vbmNlfWBdIDogW10pLFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLigoKF9oID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNpZ25JbldpdGhTb2xhbmEpID09PSBudWxsIHx8IF9oID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaC5yZXF1ZXN0SWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gW2BSZXF1ZXN0IElEOiAke29wdGlvbnMuc2lnbkluV2l0aFNvbGFuYS5yZXF1ZXN0SWR9YF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbXSksXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uKCgoX2sgPSAoX2ogPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2lnbkluV2l0aFNvbGFuYSkgPT09IG51bGwgfHwgX2ogPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9qLnJlc291cmNlcykgPT09IG51bGwgfHwgX2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9rLmxlbmd0aClcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVzb3VyY2VzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMuc2lnbkluV2l0aFNvbGFuYS5yZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gYC0gJHtyZXNvdXJjZX1gKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFtdKSxcclxuICAgICAgICAgICAgICAgIF0uam9pbignXFxuJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXliZVNpZ25hdHVyZSA9IGF3YWl0IHJlc29sdmVkV2FsbGV0LnNpZ25NZXNzYWdlKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShtZXNzYWdlKSwgJ3V0ZjgnKTtcclxuICAgICAgICAgICAgICAgIGlmICghbWF5YmVTaWduYXR1cmUgfHwgIShtYXliZVNpZ25hdHVyZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdAc3VwYWJhc2UvYXV0aC1qczogV2FsbGV0IHNpZ25NZXNzYWdlKCkgQVBJIHJldHVybmVkIGFuIHJlY29nbml6ZWQgdmFsdWUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IG1heWJlU2lnbmF0dXJlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0ICgwLCBmZXRjaF8xLl9yZXF1ZXN0KSh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS90b2tlbj9ncmFudF90eXBlPXdlYjNgLCB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICBib2R5OiBPYmplY3QuYXNzaWduKHsgY2hhaW46ICdzb2xhbmEnLCBtZXNzYWdlLCBzaWduYXR1cmU6ICgwLCBiYXNlNjR1cmxfMS5ieXRlc1RvQmFzZTY0VVJMKShzaWduYXR1cmUpIH0sICgoKF9sID0gY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX2wgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9sLmNhcHRjaGFUb2tlbilcclxuICAgICAgICAgICAgICAgICAgICA/IHsgZ290cnVlX21ldGFfc2VjdXJpdHk6IHsgY2FwdGNoYV90b2tlbjogKF9tID0gY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX20gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9tLmNhcHRjaGFUb2tlbiB9IH1cclxuICAgICAgICAgICAgICAgICAgICA6IG51bGwpKSxcclxuICAgICAgICAgICAgICAgIHhmb3JtOiBmZXRjaF8xLl9zZXNzaW9uUmVzcG9uc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5zZXNzaW9uIHx8ICFkYXRhLnVzZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBlcnJvcnNfMS5BdXRoSW52YWxpZFRva2VuUmVzcG9uc2VFcnJvcigpLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGF0YS5zZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihkYXRhLnNlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1NJR05FRF9JTicsIGRhdGEuc2Vzc2lvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZGF0YSksIGVycm9yIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoKDAsIGVycm9yc18xLmlzQXV0aEVycm9yKShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIF9leGNoYW5nZUNvZGVGb3JTZXNzaW9uKGF1dGhDb2RlKSB7XHJcbiAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSBhd2FpdCAoMCwgaGVscGVyc18xLmdldEl0ZW1Bc3luYykodGhpcy5zdG9yYWdlLCBgJHt0aGlzLnN0b3JhZ2VLZXl9LWNvZGUtdmVyaWZpZXJgKTtcclxuICAgICAgICBjb25zdCBbY29kZVZlcmlmaWVyLCByZWRpcmVjdFR5cGVdID0gKHN0b3JhZ2VJdGVtICE9PSBudWxsICYmIHN0b3JhZ2VJdGVtICE9PSB2b2lkIDAgPyBzdG9yYWdlSXRlbSA6ICcnKS5zcGxpdCgnLycpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0ICgwLCBmZXRjaF8xLl9yZXF1ZXN0KSh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS90b2tlbj9ncmFudF90eXBlPXBrY2VgLCB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICBib2R5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXV0aF9jb2RlOiBhdXRoQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlX3ZlcmlmaWVyOiBjb2RlVmVyaWZpZXIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgeGZvcm06IGZldGNoXzEuX3Nlc3Npb25SZXNwb25zZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGF3YWl0ICgwLCBoZWxwZXJzXzEucmVtb3ZlSXRlbUFzeW5jKSh0aGlzLnN0b3JhZ2UsIGAke3RoaXMuc3RvcmFnZUtleX0tY29kZS12ZXJpZmllcmApO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5zZXNzaW9uIHx8ICFkYXRhLnVzZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsLCByZWRpcmVjdFR5cGU6IG51bGwgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogbmV3IGVycm9yc18xLkF1dGhJbnZhbGlkVG9rZW5SZXNwb25zZUVycm9yKCksXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkYXRhLnNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKGRhdGEuc2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9ub3RpZnlBbGxTdWJzY3JpYmVycygnU0lHTkVEX0lOJywgZGF0YS5zZXNzaW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyBkYXRhOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRhdGEpLCB7IHJlZGlyZWN0VHlwZTogcmVkaXJlY3RUeXBlICE9PSBudWxsICYmIHJlZGlyZWN0VHlwZSAhPT0gdm9pZCAwID8gcmVkaXJlY3RUeXBlIDogbnVsbCB9KSwgZXJyb3IgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsLCByZWRpcmVjdFR5cGU6IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEFsbG93cyBzaWduaW5nIGluIHdpdGggYW4gT0lEQyBJRCB0b2tlbi4gVGhlIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyIHVzZWRcclxuICAgICAqIHNob3VsZCBiZSBlbmFibGVkIGFuZCBjb25maWd1cmVkLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBzaWduSW5XaXRoSWRUb2tlbihjcmVkZW50aWFscykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgb3B0aW9ucywgcHJvdmlkZXIsIHRva2VuLCBhY2Nlc3NfdG9rZW4sIG5vbmNlIH0gPSBjcmVkZW50aWFscztcclxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgKDAsIGZldGNoXzEuX3JlcXVlc3QpKHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L3Rva2VuP2dyYW50X3R5cGU9aWRfdG9rZW5gLCB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICBib2R5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgaWRfdG9rZW46IHRva2VuLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2Vzc190b2tlbixcclxuICAgICAgICAgICAgICAgICAgICBub25jZSxcclxuICAgICAgICAgICAgICAgICAgICBnb3RydWVfbWV0YV9zZWN1cml0eTogeyBjYXB0Y2hhX3Rva2VuOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2FwdGNoYVRva2VuIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgeGZvcm06IGZldGNoXzEuX3Nlc3Npb25SZXNwb25zZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghZGF0YSB8fCAhZGF0YS5zZXNzaW9uIHx8ICFkYXRhLnVzZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBlcnJvcnNfMS5BdXRoSW52YWxpZFRva2VuUmVzcG9uc2VFcnJvcigpLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGF0YS5zZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihkYXRhLnNlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1NJR05FRF9JTicsIGRhdGEuc2Vzc2lvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3IgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2cgaW4gYSB1c2VyIHVzaW5nIG1hZ2ljbGluayBvciBhIG9uZS10aW1lIHBhc3N3b3JkIChPVFApLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBge3sgLkNvbmZpcm1hdGlvblVSTCB9fWAgdmFyaWFibGUgaXMgc3BlY2lmaWVkIGluIHRoZSBlbWFpbCB0ZW1wbGF0ZSwgYSBtYWdpY2xpbmsgd2lsbCBiZSBzZW50LlxyXG4gICAgICogSWYgdGhlIGB7eyAuVG9rZW4gfX1gIHZhcmlhYmxlIGlzIHNwZWNpZmllZCBpbiB0aGUgZW1haWwgdGVtcGxhdGUsIGFuIE9UUCB3aWxsIGJlIHNlbnQuXHJcbiAgICAgKiBJZiB5b3UncmUgdXNpbmcgcGhvbmUgc2lnbi1pbnMsIG9ubHkgYW4gT1RQIHdpbGwgYmUgc2VudC4gWW91IHdvbid0IGJlIGFibGUgdG8gc2VuZCBhIG1hZ2ljbGluayBmb3IgcGhvbmUgc2lnbi1pbnMuXHJcbiAgICAgKlxyXG4gICAgICogQmUgYXdhcmUgdGhhdCB5b3UgbWF5IGdldCBiYWNrIGFuIGVycm9yIG1lc3NhZ2UgdGhhdCB3aWxsIG5vdCBkaXN0aW5ndWlzaFxyXG4gICAgICogYmV0d2VlbiB0aGUgY2FzZXMgd2hlcmUgdGhlIGFjY291bnQgZG9lcyBub3QgZXhpc3Qgb3IsIHRoYXQgdGhlIGFjY291bnRcclxuICAgICAqIGNhbiBvbmx5IGJlIGFjY2Vzc2VkIHZpYSBzb2NpYWwgbG9naW4uXHJcbiAgICAgKlxyXG4gICAgICogRG8gbm90ZSB0aGF0IHlvdSB3aWxsIG5lZWQgdG8gY29uZmlndXJlIGEgV2hhdHNhcHAgc2VuZGVyIG9uIFR3aWxpb1xyXG4gICAgICogaWYgeW91IGFyZSB1c2luZyBwaG9uZSBzaWduIGluIHdpdGggdGhlICd3aGF0c2FwcCcgY2hhbm5lbC4gVGhlIHdoYXRzYXBwXHJcbiAgICAgKiBjaGFubmVsIGlzIG5vdCBzdXBwb3J0ZWQgb24gb3RoZXIgcHJvdmlkZXJzXHJcbiAgICAgKiBhdCB0aGlzIHRpbWUuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBQS0NFIHdoZW4gYW4gZW1haWwgaXMgcGFzc2VkLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBzaWduSW5XaXRoT3RwKGNyZWRlbnRpYWxzKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoJ2VtYWlsJyBpbiBjcmVkZW50aWFscykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBlbWFpbCwgb3B0aW9ucyB9ID0gY3JlZGVudGlhbHM7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29kZUNoYWxsZW5nZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29kZUNoYWxsZW5nZU1ldGhvZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mbG93VHlwZSA9PT0gJ3BrY2UnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgO1xyXG4gICAgICAgICAgICAgICAgICAgIFtjb2RlQ2hhbGxlbmdlLCBjb2RlQ2hhbGxlbmdlTWV0aG9kXSA9IGF3YWl0ICgwLCBoZWxwZXJzXzEuZ2V0Q29kZUNoYWxsZW5nZUFuZE1ldGhvZCkodGhpcy5zdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gYXdhaXQgKDAsIGZldGNoXzEuX3JlcXVlc3QpKHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L290cGAsIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWFpbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmRhdGEpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVfdXNlcjogKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNob3VsZENyZWF0ZVVzZXIpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvdHJ1ZV9tZXRhX3NlY3VyaXR5OiB7IGNhcHRjaGFfdG9rZW46IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXB0Y2hhVG9rZW4gfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9jaGFsbGVuZ2U6IGNvZGVDaGFsbGVuZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfY2hhbGxlbmdlX21ldGhvZDogY29kZUNoYWxsZW5nZU1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VG86IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5lbWFpbFJlZGlyZWN0VG8sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICgncGhvbmUnIGluIGNyZWRlbnRpYWxzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHBob25lLCBvcHRpb25zIH0gPSBjcmVkZW50aWFscztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0ICgwLCBmZXRjaF8xLl9yZXF1ZXN0KSh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9vdHBgLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IChfYyA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5kYXRhKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlX3VzZXI6IChfZCA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zaG91bGRDcmVhdGVVc2VyKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnb3RydWVfbWV0YV9zZWN1cml0eTogeyBjYXB0Y2hhX3Rva2VuOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2FwdGNoYVRva2VuIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWw6IChfZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jaGFubmVsKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiAnc21zJyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwsIG1lc3NhZ2VJZDogZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkYXRhLm1lc3NhZ2VfaWQgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXV0aEludmFsaWRDcmVkZW50aWFsc0Vycm9yKCdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXIuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoKDAsIGVycm9yc18xLmlzQXV0aEVycm9yKShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTG9nIGluIGEgdXNlciBnaXZlbiBhIFVzZXIgc3VwcGxpZWQgT1RQIG9yIFRva2VuSGFzaCByZWNlaXZlZCB0aHJvdWdoIG1vYmlsZSBvciBlbWFpbC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdmVyaWZ5T3RwKHBhcmFtcykge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJlZGlyZWN0VG8gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGxldCBjYXB0Y2hhVG9rZW4gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGlmICgnb3B0aW9ucycgaW4gcGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdFRvID0gKF9hID0gcGFyYW1zLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZWRpcmVjdFRvO1xyXG4gICAgICAgICAgICAgICAgY2FwdGNoYVRva2VuID0gKF9iID0gcGFyYW1zLm9wdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYXB0Y2hhVG9rZW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgKDAsIGZldGNoXzEuX3JlcXVlc3QpKHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L3ZlcmlmeWAsIHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgIGJvZHk6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKSwgeyBnb3RydWVfbWV0YV9zZWN1cml0eTogeyBjYXB0Y2hhX3Rva2VuOiBjYXB0Y2hhVG9rZW4gfSB9KSxcclxuICAgICAgICAgICAgICAgIHJlZGlyZWN0VG8sXHJcbiAgICAgICAgICAgICAgICB4Zm9ybTogZmV0Y2hfMS5fc2Vzc2lvblJlc3BvbnNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgb24gdG9rZW4gdmVyaWZpY2F0aW9uLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBkYXRhLnNlc3Npb247XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSBkYXRhLnVzZXI7XHJcbiAgICAgICAgICAgIGlmIChzZXNzaW9uID09PSBudWxsIHx8IHNlc3Npb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlc3Npb24uYWNjZXNzX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihzZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKHBhcmFtcy50eXBlID09ICdyZWNvdmVyeScgPyAnUEFTU1dPUkRfUkVDT1ZFUlknIDogJ1NJR05FRF9JTicsIHNlc3Npb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc0F1dGhFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEF0dGVtcHRzIGEgc2luZ2xlLXNpZ24gb24gdXNpbmcgYW4gZW50ZXJwcmlzZSBJZGVudGl0eSBQcm92aWRlci4gQVxyXG4gICAgICogc3VjY2Vzc2Z1bCBTU08gYXR0ZW1wdCB3aWxsIHJlZGlyZWN0IHRoZSBjdXJyZW50IHBhZ2UgdG8gdGhlIGlkZW50aXR5XHJcbiAgICAgKiBwcm92aWRlciBhdXRob3JpemF0aW9uIHBhZ2UuIFRoZSByZWRpcmVjdCBVUkwgaXMgaW1wbGVtZW50YXRpb24gYW5kIFNTT1xyXG4gICAgICogcHJvdG9jb2wgc3BlY2lmaWMuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiB1c2UgaXQgYnkgcHJvdmlkaW5nIGEgU1NPIGRvbWFpbi4gVHlwaWNhbGx5IHlvdSBjYW4gZXh0cmFjdCB0aGlzXHJcbiAgICAgKiBkb21haW4gYnkgYXNraW5nIHVzZXJzIGZvciB0aGVpciBlbWFpbCBhZGRyZXNzLiBJZiB0aGlzIGRvbWFpbiBpc1xyXG4gICAgICogcmVnaXN0ZXJlZCBvbiB0aGUgQXV0aCBpbnN0YW5jZSB0aGUgcmVkaXJlY3Qgd2lsbCB1c2UgdGhhdCBvcmdhbml6YXRpb24nc1xyXG4gICAgICogY3VycmVudGx5IGFjdGl2ZSBTU08gSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHRoZSBsb2dpbi5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3UgaGF2ZSBidWlsdCBhbiBvcmdhbml6YXRpb24tc3BlY2lmaWMgbG9naW4gcGFnZSwgeW91IGNhbiB1c2UgdGhlXHJcbiAgICAgKiBvcmdhbml6YXRpb24ncyBTU08gSWRlbnRpdHkgUHJvdmlkZXIgVVVJRCBkaXJlY3RseSBpbnN0ZWFkLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBzaWduSW5XaXRoU1NPKHBhcmFtcykge1xyXG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBjb2RlQ2hhbGxlbmdlID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGNvZGVDaGFsbGVuZ2VNZXRob2QgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mbG93VHlwZSA9PT0gJ3BrY2UnKSB7XHJcbiAgICAgICAgICAgICAgICA7XHJcbiAgICAgICAgICAgICAgICBbY29kZUNoYWxsZW5nZSwgY29kZUNoYWxsZW5nZU1ldGhvZF0gPSBhd2FpdCAoMCwgaGVscGVyc18xLmdldENvZGVDaGFsbGVuZ2VBbmRNZXRob2QpKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgKDAsIGZldGNoXzEuX3JlcXVlc3QpKHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L3Nzb2AsIHtcclxuICAgICAgICAgICAgICAgIGJvZHk6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgKCdwcm92aWRlcklkJyBpbiBwYXJhbXMgPyB7IHByb3ZpZGVyX2lkOiBwYXJhbXMucHJvdmlkZXJJZCB9IDogbnVsbCkpLCAoJ2RvbWFpbicgaW4gcGFyYW1zID8geyBkb21haW46IHBhcmFtcy5kb21haW4gfSA6IG51bGwpKSwgeyByZWRpcmVjdF90bzogKF9iID0gKF9hID0gcGFyYW1zLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZWRpcmVjdFRvKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB1bmRlZmluZWQgfSksICgoKF9jID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLm9wdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jYXB0Y2hhVG9rZW4pXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7IGdvdHJ1ZV9tZXRhX3NlY3VyaXR5OiB7IGNhcHRjaGFfdG9rZW46IHBhcmFtcy5vcHRpb25zLmNhcHRjaGFUb2tlbiB9IH1cclxuICAgICAgICAgICAgICAgICAgICA6IG51bGwpKSwgeyBza2lwX2h0dHBfcmVkaXJlY3Q6IHRydWUsIGNvZGVfY2hhbGxlbmdlOiBjb2RlQ2hhbGxlbmdlLCBjb2RlX2NoYWxsZW5nZV9tZXRob2Q6IGNvZGVDaGFsbGVuZ2VNZXRob2QgfSksXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICB4Zm9ybTogZmV0Y2hfMS5fc3NvUmVzcG9uc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc0F1dGhFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2VuZHMgYSByZWF1dGhlbnRpY2F0aW9uIE9UUCB0byB0aGUgdXNlcidzIGVtYWlsIG9yIHBob25lIG51bWJlci5cclxuICAgICAqIFJlcXVpcmVzIHRoZSB1c2VyIHRvIGJlIHNpZ25lZC1pbi5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgcmVhdXRoZW50aWNhdGUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUHJvbWlzZTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlYXV0aGVudGljYXRlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBhc3luYyBfcmVhdXRoZW50aWNhdGUoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3VzZVNlc3Npb24oYXN5bmMgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSwgZXJyb3I6IHNlc3Npb25FcnJvciwgfSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXJyb3IpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgc2Vzc2lvbkVycm9yO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BdXRoU2Vzc2lvbk1pc3NpbmdFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gYXdhaXQgKDAsIGZldGNoXzEuX3JlcXVlc3QpKHRoaXMuZmV0Y2gsICdHRVQnLCBgJHt0aGlzLnVybH0vcmVhdXRoZW50aWNhdGVgLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIGp3dDogc2Vzc2lvbi5hY2Nlc3NfdG9rZW4sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNlbmRzIGFuIGV4aXN0aW5nIHNpZ251cCBjb25maXJtYXRpb24gZW1haWwsIGVtYWlsIGNoYW5nZSBlbWFpbCwgU01TIE9UUCBvciBwaG9uZSBjaGFuZ2UgT1RQLlxyXG4gICAgICovXHJcbiAgICBhc3luYyByZXNlbmQoY3JlZGVudGlhbHMpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBlbmRwb2ludCA9IGAke3RoaXMudXJsfS9yZXNlbmRgO1xyXG4gICAgICAgICAgICBpZiAoJ2VtYWlsJyBpbiBjcmVkZW50aWFscykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBlbWFpbCwgdHlwZSwgb3B0aW9ucyB9ID0gY3JlZGVudGlhbHM7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCAoMCwgZmV0Y2hfMS5fcmVxdWVzdCkodGhpcy5mZXRjaCwgJ1BPU1QnLCBlbmRwb2ludCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICBib2R5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnb3RydWVfbWV0YV9zZWN1cml0eTogeyBjYXB0Y2hhX3Rva2VuOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2FwdGNoYVRva2VuIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFRvOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZW1haWxSZWRpcmVjdFRvLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgncGhvbmUnIGluIGNyZWRlbnRpYWxzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHBob25lLCB0eXBlLCBvcHRpb25zIH0gPSBjcmVkZW50aWFscztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0ICgwLCBmZXRjaF8xLl9yZXF1ZXN0KSh0aGlzLmZldGNoLCAnUE9TVCcsIGVuZHBvaW50LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvdHJ1ZV9tZXRhX3NlY3VyaXR5OiB7IGNhcHRjaGFfdG9rZW46IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXB0Y2hhVG9rZW4gfSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwsIG1lc3NhZ2VJZDogZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkYXRhLm1lc3NhZ2VfaWQgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXV0aEludmFsaWRDcmVkZW50aWFsc0Vycm9yKCdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXIgYW5kIGEgdHlwZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc0F1dGhFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHNlc3Npb24sIHJlZnJlc2hpbmcgaXQgaWYgbmVjZXNzYXJ5LlxyXG4gICAgICpcclxuICAgICAqIFRoZSBzZXNzaW9uIHJldHVybmVkIGNhbiBiZSBudWxsIGlmIHRoZSBzZXNzaW9uIGlzIG5vdCBkZXRlY3RlZCB3aGljaCBjYW4gaGFwcGVuIGluIHRoZSBldmVudCBhIHVzZXIgaXMgbm90IHNpZ25lZC1pbiBvciBoYXMgbG9nZ2VkIG91dC5cclxuICAgICAqXHJcbiAgICAgKiAqKklNUE9SVEFOVDoqKiBUaGlzIG1ldGhvZCBsb2FkcyB2YWx1ZXMgZGlyZWN0bHkgZnJvbSB0aGUgc3RvcmFnZSBhdHRhY2hlZFxyXG4gICAgICogdG8gdGhlIGNsaWVudC4gSWYgdGhhdCBzdG9yYWdlIGlzIGJhc2VkIG9uIHJlcXVlc3QgY29va2llcyBmb3IgZXhhbXBsZSxcclxuICAgICAqIHRoZSB2YWx1ZXMgaW4gaXQgbWF5IG5vdCBiZSBhdXRoZW50aWMgYW5kIHRoZXJlZm9yZSBpdCdzIHN0cm9uZ2x5IGFkdmlzZWRcclxuICAgICAqIGFnYWluc3QgdXNpbmcgdGhpcyBtZXRob2QgYW5kIGl0cyByZXN1bHRzIGluIHN1Y2ggY2lyY3Vtc3RhbmNlcy4gQSB3YXJuaW5nXHJcbiAgICAgKiB3aWxsIGJlIGVtaXR0ZWQgaWYgdGhpcyBpcyBkZXRlY3RlZC4gVXNlIHtAbGluayAjZ2V0VXNlcigpfSBpbnN0ZWFkLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRTZXNzaW9uKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZVNlc3Npb24oYXN5bmMgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQWNxdWlyZXMgYSBnbG9iYWwgbG9jayBiYXNlZCBvbiB0aGUgc3RvcmFnZSBrZXkuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIF9hY3F1aXJlTG9jayhhY3F1aXJlVGltZW91dCwgZm4pIHtcclxuICAgICAgICB0aGlzLl9kZWJ1ZygnI19hY3F1aXJlTG9jaycsICdiZWdpbicsIGFjcXVpcmVUaW1lb3V0KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sb2NrQWNxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLnBlbmRpbmdJbkxvY2subGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnBlbmRpbmdJbkxvY2tbdGhpcy5wZW5kaW5nSW5Mb2NrLmxlbmd0aCAtIDFdXHJcbiAgICAgICAgICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbGFzdDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgZm4oKTtcclxuICAgICAgICAgICAgICAgIH0pKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdJbkxvY2sucHVzaCgoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UganVzdCBjYXJlIGlmIGl0IGZpbmlzaGVkXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkoKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvY2soYGxvY2s6JHt0aGlzLnN0b3JhZ2VLZXl9YCwgYWNxdWlyZVRpbWVvdXQsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2FjcXVpcmVMb2NrJywgJ2xvY2sgYWNxdWlyZWQgZm9yIHN0b3JhZ2Uga2V5JywgdGhpcy5zdG9yYWdlS2V5KTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NrQWNxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nSW5Mb2NrLnB1c2goKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UganVzdCBjYXJlIGlmIGl0IGZpbmlzaGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSgpKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCBkcmFpbmluZyB0aGUgcXVldWUgdW50aWwgdGhlcmUncyBub3RoaW5nIHRvIHdhaXQgb25cclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5wZW5kaW5nSW5Mb2NrLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YWl0T24gPSBbLi4udGhpcy5wZW5kaW5nSW5Mb2NrXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwod2FpdE9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nSW5Mb2NrLnNwbGljZSgwLCB3YWl0T24ubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2FjcXVpcmVMb2NrJywgJ2xvY2sgcmVsZWFzZWQgZm9yIHN0b3JhZ2Uga2V5JywgdGhpcy5zdG9yYWdlS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2tBY3F1aXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2FjcXVpcmVMb2NrJywgJ2VuZCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXNlIGluc3RlYWQgb2Yge0BsaW5rICNnZXRTZXNzaW9ufSBpbnNpZGUgdGhlIGxpYnJhcnkuIEl0IGlzXHJcbiAgICAgKiBzZW1hbnRpY2FsbHkgdXN1YWxseSB3aGF0IHlvdSB3YW50LCBhcyBnZXR0aW5nIGEgc2Vzc2lvbiBpbnZvbHZlcyBzb21lXHJcbiAgICAgKiBwcm9jZXNzaW5nIGFmdGVyd2FyZHMgdGhhdCByZXF1aXJlcyBvbmx5IG9uZSBjbGllbnQgb3BlcmF0aW5nIG9uIHRoZVxyXG4gICAgICogc2Vzc2lvbiBhdCBvbmNlIGFjcm9zcyBtdWx0aXBsZSB0YWJzIG9yIHByb2Nlc3Nlcy5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgX3VzZVNlc3Npb24oZm4pIHtcclxuICAgICAgICB0aGlzLl9kZWJ1ZygnI191c2VTZXNzaW9uJywgJ2JlZ2luJyk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gdGhlIHVzZSBvZiBfX2xvYWRTZXNzaW9uIGhlcmUgaXMgdGhlIG9ubHkgY29ycmVjdCB1c2Ugb2YgdGhlIGZ1bmN0aW9uIVxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9fbG9hZFNlc3Npb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZuKHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI191c2VTZXNzaW9uJywgJ2VuZCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTkVWRVIgVVNFIERJUkVDVExZIVxyXG4gICAgICpcclxuICAgICAqIEFsd2F5cyB1c2Uge0BsaW5rICNfdXNlU2Vzc2lvbn0uXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIF9fbG9hZFNlc3Npb24oKSB7XHJcbiAgICAgICAgdGhpcy5fZGVidWcoJyNfX2xvYWRTZXNzaW9uKCknLCAnYmVnaW4nKTtcclxuICAgICAgICBpZiAoIXRoaXMubG9ja0FjcXVpcmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX19sb2FkU2Vzc2lvbigpJywgJ3VzZWQgb3V0c2lkZSBvZiBhbiBhY3F1aXJlZCBsb2NrIScsIG5ldyBFcnJvcigpLnN0YWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRTZXNzaW9uID0gbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgbWF5YmVTZXNzaW9uID0gYXdhaXQgKDAsIGhlbHBlcnNfMS5nZXRJdGVtQXN5bmMpKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5KTtcclxuICAgICAgICAgICAgdGhpcy5fZGVidWcoJyNnZXRTZXNzaW9uKCknLCAnc2Vzc2lvbiBmcm9tIHN0b3JhZ2UnLCBtYXliZVNlc3Npb24pO1xyXG4gICAgICAgICAgICBpZiAobWF5YmVTZXNzaW9uICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNWYWxpZFNlc3Npb24obWF5YmVTZXNzaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXNzaW9uID0gbWF5YmVTZXNzaW9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoJyNnZXRTZXNzaW9uKCknLCAnc2Vzc2lvbiBmcm9tIHN0b3JhZ2UgaXMgbm90IHZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVtb3ZlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghY3VycmVudFNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgc2Vzc2lvbjogbnVsbCB9LCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEEgc2Vzc2lvbiBpcyBjb25zaWRlcmVkIGV4cGlyZWQgYmVmb3JlIHRoZSBhY2Nlc3MgdG9rZW4gX2FjdHVhbGx5X1xyXG4gICAgICAgICAgICAvLyBleHBpcmVzLiBXaGVuIHRoZSBhdXRvUmVmcmVzaFRva2VuIG9wdGlvbiBpcyBvZmYgKG9yIHdoZW4gdGhlIHRhYiBpc1xyXG4gICAgICAgICAgICAvLyBpbiB0aGUgYmFja2dyb3VuZCksIHZlcnkgZWFnZXIgdXNlcnMgb2YgZ2V0U2Vzc2lvbigpIC0tIGxpa2VcclxuICAgICAgICAgICAgLy8gcmVhbHRpbWUtanMgLS0gbWlnaHQgc2VuZCBhIHZhbGlkIEpXVCB3aGljaCB3aWxsIGV4cGlyZSBieSB0aGUgdGltZSBpdFxyXG4gICAgICAgICAgICAvLyByZWFjaGVzIHRoZSBzZXJ2ZXIuXHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0V4cGlyZWQgPSBjdXJyZW50U2Vzc2lvbi5leHBpcmVzX2F0XHJcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnRTZXNzaW9uLmV4cGlyZXNfYXQgKiAxMDAwIC0gRGF0ZS5ub3coKSA8IGNvbnN0YW50c18xLkVYUElSWV9NQVJHSU5fTVNcclxuICAgICAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX19sb2FkU2Vzc2lvbigpJywgYHNlc3Npb24gaGFzJHtoYXNFeHBpcmVkID8gJycgOiAnIG5vdCd9IGV4cGlyZWRgLCAnZXhwaXJlc19hdCcsIGN1cnJlbnRTZXNzaW9uLmV4cGlyZXNfYXQpO1xyXG4gICAgICAgICAgICBpZiAoIWhhc0V4cGlyZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZXJTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF5YmVVc2VyID0gKGF3YWl0ICgwLCBoZWxwZXJzXzEuZ2V0SXRlbUFzeW5jKSh0aGlzLnVzZXJTdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXkgKyAnLXVzZXInKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1heWJlVXNlciA9PT0gbnVsbCB8fCBtYXliZVVzZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1heWJlVXNlci51c2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXNzaW9uLnVzZXIgPSBtYXliZVVzZXIudXNlcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXNzaW9uLnVzZXIgPSAoMCwgaGVscGVyc18xLnVzZXJOb3RBdmFpbGFibGVQcm94eSkoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdG9yYWdlLmlzU2VydmVyICYmIGN1cnJlbnRTZXNzaW9uLnVzZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3VwcHJlc3NXYXJuaW5nID0gdGhpcy5zdXBwcmVzc0dldFNlc3Npb25XYXJuaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3h5U2Vzc2lvbiA9IG5ldyBQcm94eShjdXJyZW50U2Vzc2lvbiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6ICh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1cHByZXNzV2FybmluZyAmJiBwcm9wID09PSAndXNlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHNob3cgd2FybmluZyB3aGVuIHRoZSB1c2VyIG9iamVjdCBpcyBiZWluZyBhY2Nlc3NlZCBmcm9tIHRoZSBzZXJ2ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1VzaW5nIHRoZSB1c2VyIG9iamVjdCBhcyByZXR1cm5lZCBmcm9tIHN1cGFiYXNlLmF1dGguZ2V0U2Vzc2lvbigpIG9yIGZyb20gc29tZSBzdXBhYmFzZS5hdXRoLm9uQXV0aFN0YXRlQ2hhbmdlKCkgZXZlbnRzIGNvdWxkIGJlIGluc2VjdXJlISBUaGlzIHZhbHVlIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlIHN0b3JhZ2UgbWVkaXVtICh1c3VhbGx5IGNvb2tpZXMgb24gdGhlIHNlcnZlcikgYW5kIG1heSBub3QgYmUgYXV0aGVudGljLiBVc2Ugc3VwYWJhc2UuYXV0aC5nZXRVc2VyKCkgaW5zdGVhZCB3aGljaCBhdXRoZW50aWNhdGVzIHRoZSBkYXRhIGJ5IGNvbnRhY3RpbmcgdGhlIFN1cGFiYXNlIEF1dGggc2VydmVyLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHByZXNzV2FybmluZyA9IHRydWU7IC8vIGtlZXBzIHRoaXMgcHJveHkgaW5zdGFuY2UgZnJvbSBsb2dnaW5nIGFkZGl0aW9uYWwgd2FybmluZ3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1cHByZXNzR2V0U2Vzc2lvbldhcm5pbmcgPSB0cnVlOyAvLyBrZWVwcyB0aGlzIGNsaWVudCdzIGZ1dHVyZSBwcm94eSBpbnN0YW5jZXMgZnJvbSB3YXJuaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlc3Npb24gPSBwcm94eVNlc3Npb247XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHNlc3Npb246IGN1cnJlbnRTZXNzaW9uIH0sIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgeyBzZXNzaW9uLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5fY2FsbFJlZnJlc2hUb2tlbihjdXJyZW50U2Vzc2lvbi5yZWZyZXNoX3Rva2VuKTtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHNlc3Npb246IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX19sb2FkU2Vzc2lvbigpJywgJ2VuZCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudCB1c2VyIGRldGFpbHMgaWYgdGhlcmUgaXMgYW4gZXhpc3Rpbmcgc2Vzc2lvbi4gVGhpcyBtZXRob2RcclxuICAgICAqIHBlcmZvcm1zIGEgbmV0d29yayByZXF1ZXN0IHRvIHRoZSBTdXBhYmFzZSBBdXRoIHNlcnZlciwgc28gdGhlIHJldHVybmVkXHJcbiAgICAgKiB2YWx1ZSBpcyBhdXRoZW50aWMgYW5kIGNhbiBiZSB1c2VkIHRvIGJhc2UgYXV0aG9yaXphdGlvbiBydWxlcyBvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gand0IFRha2VzIGluIGFuIG9wdGlvbmFsIGFjY2VzcyB0b2tlbiBKV1QuIElmIG5vIEpXVCBpcyBwcm92aWRlZCwgdGhlIEpXVCBmcm9tIHRoZSBjdXJyZW50IHNlc3Npb24gaXMgdXNlZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0VXNlcihqd3QpIHtcclxuICAgICAgICBpZiAoand0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9nZXRVc2VyKGp3dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2dldFVzZXIoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgYXN5bmMgX2dldFVzZXIoand0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGp3dCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0ICgwLCBmZXRjaF8xLl9yZXF1ZXN0KSh0aGlzLmZldGNoLCAnR0VUJywgYCR7dGhpcy51cmx9L3VzZXJgLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIGp3dDogand0LFxyXG4gICAgICAgICAgICAgICAgICAgIHhmb3JtOiBmZXRjaF8xLl91c2VyUmVzcG9uc2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gcmV0dXJucyBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBhY2Nlc3NfdG9rZW4gb3IgY3VzdG9tIGF1dGhvcml6YXRpb24gaGVhZGVyXHJcbiAgICAgICAgICAgICAgICBpZiAoISgoX2EgPSBkYXRhLnNlc3Npb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hY2Nlc3NfdG9rZW4pICYmICF0aGlzLmhhc0N1c3RvbUF1dGhvcml6YXRpb25IZWFkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwgfSwgZXJyb3I6IG5ldyBlcnJvcnNfMS5BdXRoU2Vzc2lvbk1pc3NpbmdFcnJvcigpIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgKDAsIGZldGNoXzEuX3JlcXVlc3QpKHRoaXMuZmV0Y2gsICdHRVQnLCBgJHt0aGlzLnVybH0vdXNlcmAsIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgand0OiAoX2MgPSAoX2IgPSBkYXRhLnNlc3Npb24pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5hY2Nlc3NfdG9rZW4pICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICB4Zm9ybTogZmV0Y2hfMS5fdXNlclJlc3BvbnNlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc0F1dGhFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGVycm9yc18xLmlzQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEpXVCBjb250YWlucyBhIGBzZXNzaW9uX2lkYCB3aGljaCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFuIGFjdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNlc3Npb24gaW4gdGhlIGRhdGFiYXNlLCBpbmRpY2F0aW5nIHRoZSB1c2VyIGlzIHNpZ25lZCBvdXQuXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVtb3ZlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0ICgwLCBoZWxwZXJzXzEucmVtb3ZlSXRlbUFzeW5jKSh0aGlzLnN0b3JhZ2UsIGAke3RoaXMuc3RvcmFnZUtleX0tY29kZS12ZXJpZmllcmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHVzZXIgZGF0YSBmb3IgYSBsb2dnZWQgaW4gdXNlci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdXBkYXRlVXNlcihhdHRyaWJ1dGVzLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9hY3F1aXJlTG9jaygtMSwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdXBkYXRlVXNlcihhdHRyaWJ1dGVzLCBvcHRpb25zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGFzeW5jIF91cGRhdGVVc2VyKGF0dHJpYnV0ZXMsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogc2Vzc2lvbkRhdGEsIGVycm9yOiBzZXNzaW9uRXJyb3IgfSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBzZXNzaW9uRXJyb3I7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNlc3Npb25EYXRhLnNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9uRGF0YS5zZXNzaW9uO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvZGVDaGFsbGVuZ2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvZGVDaGFsbGVuZ2VNZXRob2QgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmxvd1R5cGUgPT09ICdwa2NlJyAmJiBhdHRyaWJ1dGVzLmVtYWlsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICA7XHJcbiAgICAgICAgICAgICAgICAgICAgW2NvZGVDaGFsbGVuZ2UsIGNvZGVDaGFsbGVuZ2VNZXRob2RdID0gYXdhaXQgKDAsIGhlbHBlcnNfMS5nZXRDb2RlQ2hhbGxlbmdlQW5kTWV0aG9kKSh0aGlzLnN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yOiB1c2VyRXJyb3IgfSA9IGF3YWl0ICgwLCBmZXRjaF8xLl9yZXF1ZXN0KSh0aGlzLmZldGNoLCAnUFVUJywgYCR7dGhpcy51cmx9L3VzZXJgLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VG86IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5lbWFpbFJlZGlyZWN0VG8sXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhdHRyaWJ1dGVzKSwgeyBjb2RlX2NoYWxsZW5nZTogY29kZUNoYWxsZW5nZSwgY29kZV9jaGFsbGVuZ2VfbWV0aG9kOiBjb2RlQ2hhbGxlbmdlTWV0aG9kIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGp3dDogc2Vzc2lvbi5hY2Nlc3NfdG9rZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgeGZvcm06IGZldGNoXzEuX3VzZXJSZXNwb25zZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJFcnJvcilcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyB1c2VyRXJyb3I7XHJcbiAgICAgICAgICAgICAgICBzZXNzaW9uLnVzZXIgPSBkYXRhLnVzZXI7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihzZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKCdVU0VSX1VQREFURUQnLCBzZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyIH0sIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc0F1dGhFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHNlc3Npb24gZGF0YSBmcm9tIHRoZSBjdXJyZW50IHNlc3Npb24uIElmIHRoZSBjdXJyZW50IHNlc3Npb24gaXMgZXhwaXJlZCwgc2V0U2Vzc2lvbiB3aWxsIHRha2UgY2FyZSBvZiByZWZyZXNoaW5nIGl0IHRvIG9idGFpbiBhIG5ldyBzZXNzaW9uLlxyXG4gICAgICogSWYgdGhlIHJlZnJlc2ggdG9rZW4gb3IgYWNjZXNzIHRva2VuIGluIHRoZSBjdXJyZW50IHNlc3Npb24gaXMgaW52YWxpZCwgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24uXHJcbiAgICAgKiBAcGFyYW0gY3VycmVudFNlc3Npb24gVGhlIGN1cnJlbnQgc2Vzc2lvbiB0aGF0IG1pbmltYWxseSBjb250YWlucyBhbiBhY2Nlc3MgdG9rZW4gYW5kIHJlZnJlc2ggdG9rZW4uXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNldFNlc3Npb24oY3VycmVudFNlc3Npb24pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9hY3F1aXJlTG9jaygtMSwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fc2V0U2Vzc2lvbihjdXJyZW50U2Vzc2lvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBhc3luYyBfc2V0U2Vzc2lvbihjdXJyZW50U2Vzc2lvbikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICghY3VycmVudFNlc3Npb24uYWNjZXNzX3Rva2VuIHx8ICFjdXJyZW50U2Vzc2lvbi5yZWZyZXNoX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB0aW1lTm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XHJcbiAgICAgICAgICAgIGxldCBleHBpcmVzQXQgPSB0aW1lTm93O1xyXG4gICAgICAgICAgICBsZXQgaGFzRXhwaXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGxldCBzZXNzaW9uID0gbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgeyBwYXlsb2FkIH0gPSAoMCwgaGVscGVyc18xLmRlY29kZUpXVCkoY3VycmVudFNlc3Npb24uYWNjZXNzX3Rva2VuKTtcclxuICAgICAgICAgICAgaWYgKHBheWxvYWQuZXhwKSB7XHJcbiAgICAgICAgICAgICAgICBleHBpcmVzQXQgPSBwYXlsb2FkLmV4cDtcclxuICAgICAgICAgICAgICAgIGhhc0V4cGlyZWQgPSBleHBpcmVzQXQgPD0gdGltZU5vdztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaGFzRXhwaXJlZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBzZXNzaW9uOiByZWZyZXNoZWRTZXNzaW9uLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5fY2FsbFJlZnJlc2hUb2tlbihjdXJyZW50U2Vzc2lvbi5yZWZyZXNoX3Rva2VuKTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvcjogZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghcmVmcmVzaGVkU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2Vzc2lvbiA9IHJlZnJlc2hlZFNlc3Npb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCB0aGlzLl9nZXRVc2VyKGN1cnJlbnRTZXNzaW9uLmFjY2Vzc190b2tlbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNlc3Npb24gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiBjdXJyZW50U2Vzc2lvbi5hY2Nlc3NfdG9rZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogY3VycmVudFNlc3Npb24ucmVmcmVzaF90b2tlbixcclxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBkYXRhLnVzZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5fdHlwZTogJ2JlYXJlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwaXJlc19pbjogZXhwaXJlc0F0IC0gdGltZU5vdyxcclxuICAgICAgICAgICAgICAgICAgICBleHBpcmVzX2F0OiBleHBpcmVzQXQsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2F2ZVNlc3Npb24oc2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9ub3RpZnlBbGxTdWJzY3JpYmVycygnU0lHTkVEX0lOJywgc2Vzc2lvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyBzZXNzaW9uOiBudWxsLCB1c2VyOiBudWxsIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgbmV3IHNlc3Npb24sIHJlZ2FyZGxlc3Mgb2YgZXhwaXJ5IHN0YXR1cy5cclxuICAgICAqIFRha2VzIGluIGFuIG9wdGlvbmFsIGN1cnJlbnQgc2Vzc2lvbi4gSWYgbm90IHBhc3NlZCBpbiwgdGhlbiByZWZyZXNoU2Vzc2lvbigpIHdpbGwgYXR0ZW1wdCB0byByZXRyaWV2ZSBpdCBmcm9tIGdldFNlc3Npb24oKS5cclxuICAgICAqIElmIHRoZSBjdXJyZW50IHNlc3Npb24ncyByZWZyZXNoIHRva2VuIGlzIGludmFsaWQsIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxyXG4gICAgICogQHBhcmFtIGN1cnJlbnRTZXNzaW9uIFRoZSBjdXJyZW50IHNlc3Npb24uIElmIHBhc3NlZCBpbiwgaXQgbXVzdCBjb250YWluIGEgcmVmcmVzaCB0b2tlbi5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgcmVmcmVzaFNlc3Npb24oY3VycmVudFNlc3Npb24pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9hY3F1aXJlTG9jaygtMSwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVmcmVzaFNlc3Npb24oY3VycmVudFNlc3Npb24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgX3JlZnJlc2hTZXNzaW9uKGN1cnJlbnRTZXNzaW9uKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3VzZVNlc3Npb24oYXN5bmMgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50U2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXNzaW9uID0gKF9hID0gZGF0YS5zZXNzaW9uKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIShjdXJyZW50U2Vzc2lvbiA9PT0gbnVsbCB8fCBjdXJyZW50U2Vzc2lvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VycmVudFNlc3Npb24ucmVmcmVzaF90b2tlbikpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2Vzc2lvbiwgZXJyb3IgfSA9IGF3YWl0IHRoaXMuX2NhbGxSZWZyZXNoVG9rZW4oY3VycmVudFNlc3Npb24ucmVmcmVzaF90b2tlbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3I6IGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc0F1dGhFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHNlc3Npb24gZGF0YSBmcm9tIGEgVVJMIHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBhc3luYyBfZ2V0U2Vzc2lvbkZyb21VUkwocGFyYW1zLCBjYWxsYmFja1VybFR5cGUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoISgwLCBoZWxwZXJzXzEuaXNCcm93c2VyKSgpKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkF1dGhJbXBsaWNpdEdyYW50UmVkaXJlY3RFcnJvcignTm8gYnJvd3NlciBkZXRlY3RlZC4nKTtcclxuICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhbiBlcnJvciBpbiB0aGUgVVJMLCBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IGZsb3cgaXQgaXMsIHdlIGp1c3QgcmV0dXJuIHRoZSBlcnJvci5cclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5lcnJvciB8fCBwYXJhbXMuZXJyb3JfZGVzY3JpcHRpb24gfHwgcGFyYW1zLmVycm9yX2NvZGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRoZSBlcnJvciBjbGFzcyByZXR1cm5lZCBpbXBsaWVzIHRoYXQgdGhlIHJlZGlyZWN0IGlzIGZyb20gYW4gaW1wbGljaXQgZ3JhbnQgZmxvd1xyXG4gICAgICAgICAgICAgICAgLy8gYnV0IGl0IGNvdWxkIGFsc28gYmUgZnJvbSBhIHJlZGlyZWN0IGVycm9yIGZyb20gYSBQS0NFIGZsb3cuXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yKHBhcmFtcy5lcnJvcl9kZXNjcmlwdGlvbiB8fCAnRXJyb3IgaW4gVVJMIHdpdGggdW5zcGVjaWZpZWQgZXJyb3JfZGVzY3JpcHRpb24nLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHBhcmFtcy5lcnJvciB8fCAndW5zcGVjaWZpZWRfZXJyb3InLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IHBhcmFtcy5lcnJvcl9jb2RlIHx8ICd1bnNwZWNpZmllZF9jb2RlJyxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIENoZWNrcyBmb3IgbWlzbWF0Y2hlcyBiZXR3ZWVuIHRoZSBmbG93VHlwZSBpbml0aWFsaXNlZCBpbiB0aGUgY2xpZW50IGFuZCB0aGUgVVJMIHBhcmFtZXRlcnNcclxuICAgICAgICAgICAgc3dpdGNoIChjYWxsYmFja1VybFR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2ltcGxpY2l0JzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mbG93VHlwZSA9PT0gJ3BrY2UnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BdXRoUEtDRUdyYW50Q29kZUV4Y2hhbmdlRXJyb3IoJ05vdCBhIHZhbGlkIFBLQ0UgZmxvdyB1cmwuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncGtjZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmxvd1R5cGUgPT09ICdpbXBsaWNpdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkF1dGhJbXBsaWNpdEdyYW50UmVkaXJlY3RFcnJvcignTm90IGEgdmFsaWQgaW1wbGljaXQgZ3JhbnQgZmxvdyB1cmwuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIC8vIHRoZXJlJ3Mgbm8gbWlzbWF0Y2ggc28gd2UgY29udGludWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGlzIGEgcmVkaXJlY3QgZm9yIFBLQ0UsIHdlIGF0dGVtcHQgdG8gcmV0cmlldmUgdGhlIGNvZGUgZnJvbSB0aGUgVVJMIGZvciB0aGUgY29kZSBleGNoYW5nZVxyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2tVcmxUeXBlID09PSAncGtjZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2luaXRpYWxpemUoKScsICdiZWdpbicsICdpcyBQS0NFIGZsb3cnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIGlmICghcGFyYW1zLmNvZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkF1dGhQS0NFR3JhbnRDb2RlRXhjaGFuZ2VFcnJvcignTm8gY29kZSBkZXRlY3RlZC4nKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHRoaXMuX2V4Y2hhbmdlQ29kZUZvclNlc3Npb24ocGFyYW1zLmNvZGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICAgICAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLmRlbGV0ZSgnY29kZScpO1xyXG4gICAgICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHdpbmRvdy5oaXN0b3J5LnN0YXRlLCAnJywgdXJsLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyBzZXNzaW9uOiBkYXRhLnNlc3Npb24sIHJlZGlyZWN0VHlwZTogbnVsbCB9LCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcHJvdmlkZXJfdG9rZW4sIHByb3ZpZGVyX3JlZnJlc2hfdG9rZW4sIGFjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgZXhwaXJlc19pbiwgZXhwaXJlc19hdCwgdG9rZW5fdHlwZSwgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgaWYgKCFhY2Nlc3NfdG9rZW4gfHwgIWV4cGlyZXNfaW4gfHwgIXJlZnJlc2hfdG9rZW4gfHwgIXRva2VuX3R5cGUpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BdXRoSW1wbGljaXRHcmFudFJlZGlyZWN0RXJyb3IoJ05vIHNlc3Npb24gZGVmaW5lZCBpbiBVUkwnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB0aW1lTm93ID0gTWF0aC5yb3VuZChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4cGlyZXNJbiA9IHBhcnNlSW50KGV4cGlyZXNfaW4pO1xyXG4gICAgICAgICAgICBsZXQgZXhwaXJlc0F0ID0gdGltZU5vdyArIGV4cGlyZXNJbjtcclxuICAgICAgICAgICAgaWYgKGV4cGlyZXNfYXQpIHtcclxuICAgICAgICAgICAgICAgIGV4cGlyZXNBdCA9IHBhcnNlSW50KGV4cGlyZXNfYXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbGx5RXhwaXJlc0luID0gZXhwaXJlc0F0IC0gdGltZU5vdztcclxuICAgICAgICAgICAgaWYgKGFjdHVhbGx5RXhwaXJlc0luICogMTAwMCA8PSBjb25zdGFudHNfMS5BVVRPX1JFRlJFU0hfVElDS19EVVJBVElPTl9NUykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBAc3VwYWJhc2UvZ290cnVlLWpzOiBTZXNzaW9uIGFzIHJldHJpZXZlZCBmcm9tIFVSTCBleHBpcmVzIGluICR7YWN0dWFsbHlFeHBpcmVzSW59cywgc2hvdWxkIGhhdmUgYmVlbiBjbG9zZXIgdG8gJHtleHBpcmVzSW59c2ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGlzc3VlZEF0ID0gZXhwaXJlc0F0IC0gZXhwaXJlc0luO1xyXG4gICAgICAgICAgICBpZiAodGltZU5vdyAtIGlzc3VlZEF0ID49IDEyMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdAc3VwYWJhc2UvZ290cnVlLWpzOiBTZXNzaW9uIGFzIHJldHJpZXZlZCBmcm9tIFVSTCB3YXMgaXNzdWVkIG92ZXIgMTIwcyBhZ28sIFVSTCBjb3VsZCBiZSBzdGFsZScsIGlzc3VlZEF0LCBleHBpcmVzQXQsIHRpbWVOb3cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVOb3cgLSBpc3N1ZWRBdCA8IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignQHN1cGFiYXNlL2dvdHJ1ZS1qczogU2Vzc2lvbiBhcyByZXRyaWV2ZWQgZnJvbSBVUkwgd2FzIGlzc3VlZCBpbiB0aGUgZnV0dXJlPyBDaGVjayB0aGUgZGV2aWNlIGNsb2NrIGZvciBza2V3JywgaXNzdWVkQXQsIGV4cGlyZXNBdCwgdGltZU5vdyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5fZ2V0VXNlcihhY2Nlc3NfdG9rZW4pO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHtcclxuICAgICAgICAgICAgICAgIHByb3ZpZGVyX3Rva2VuLFxyXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJfcmVmcmVzaF90b2tlbixcclxuICAgICAgICAgICAgICAgIGFjY2Vzc190b2tlbixcclxuICAgICAgICAgICAgICAgIGV4cGlyZXNfaW46IGV4cGlyZXNJbixcclxuICAgICAgICAgICAgICAgIGV4cGlyZXNfYXQ6IGV4cGlyZXNBdCxcclxuICAgICAgICAgICAgICAgIHJlZnJlc2hfdG9rZW4sXHJcbiAgICAgICAgICAgICAgICB0b2tlbl90eXBlLFxyXG4gICAgICAgICAgICAgICAgdXNlcjogZGF0YS51c2VyLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgdG9rZW5zIGZyb20gVVJMXHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2dldFNlc3Npb25Gcm9tVVJMKCknLCAnY2xlYXJpbmcgd2luZG93LmxvY2F0aW9uLmhhc2gnKTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyBzZXNzaW9uLCByZWRpcmVjdFR5cGU6IHBhcmFtcy50eXBlIH0sIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoKDAsIGVycm9yc18xLmlzQXV0aEVycm9yKShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgc2Vzc2lvbjogbnVsbCwgcmVkaXJlY3RUeXBlOiBudWxsIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgVVJMIGNvbnRhaW5zIHBhcmFtZXRlcnMgZ2l2ZW4gYnkgYW4gaW1wbGljaXQgb2F1dGggZ3JhbnQgZmxvdyAoaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzY3NDkuaHRtbCNzZWN0aW9uLTQuMilcclxuICAgICAqL1xyXG4gICAgX2lzSW1wbGljaXRHcmFudENhbGxiYWNrKHBhcmFtcykge1xyXG4gICAgICAgIHJldHVybiBCb29sZWFuKHBhcmFtcy5hY2Nlc3NfdG9rZW4gfHwgcGFyYW1zLmVycm9yX2Rlc2NyaXB0aW9uKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IFVSTCBhbmQgYmFja2luZyBzdG9yYWdlIGNvbnRhaW4gcGFyYW1ldGVycyBnaXZlbiBieSBhIFBLQ0UgZmxvd1xyXG4gICAgICovXHJcbiAgICBhc3luYyBfaXNQS0NFQ2FsbGJhY2socGFyYW1zKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFN0b3JhZ2VDb250ZW50ID0gYXdhaXQgKDAsIGhlbHBlcnNfMS5nZXRJdGVtQXN5bmMpKHRoaXMuc3RvcmFnZSwgYCR7dGhpcy5zdG9yYWdlS2V5fS1jb2RlLXZlcmlmaWVyYCk7XHJcbiAgICAgICAgcmV0dXJuICEhKHBhcmFtcy5jb2RlICYmIGN1cnJlbnRTdG9yYWdlQ29udGVudCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEluc2lkZSBhIGJyb3dzZXIgY29udGV4dCwgYHNpZ25PdXQoKWAgd2lsbCByZW1vdmUgdGhlIGxvZ2dlZCBpbiB1c2VyIGZyb20gdGhlIGJyb3dzZXIgc2Vzc2lvbiBhbmQgbG9nIHRoZW0gb3V0IC0gcmVtb3ZpbmcgYWxsIGl0ZW1zIGZyb20gbG9jYWxzdG9yYWdlIGFuZCB0aGVuIHRyaWdnZXIgYSBgXCJTSUdORURfT1VUXCJgIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEZvciBzZXJ2ZXItc2lkZSBtYW5hZ2VtZW50LCB5b3UgY2FuIHJldm9rZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yIGEgdXNlciBieSBwYXNzaW5nIGEgdXNlcidzIEpXVCB0aHJvdWdoIHRvIGBhdXRoLmFwaS5zaWduT3V0KEpXVDogc3RyaW5nKWAuXHJcbiAgICAgKiBUaGVyZSBpcyBubyB3YXkgdG8gcmV2b2tlIGEgdXNlcidzIGFjY2VzcyB0b2tlbiBqd3QgdW50aWwgaXQgZXhwaXJlcy4gSXQgaXMgcmVjb21tZW5kZWQgdG8gc2V0IGEgc2hvcnRlciBleHBpcnkgb24gdGhlIGp3dCBmb3IgdGhpcyByZWFzb24uXHJcbiAgICAgKlxyXG4gICAgICogSWYgdXNpbmcgYG90aGVyc2Agc2NvcGUsIG5vIGBTSUdORURfT1VUYCBldmVudCBpcyBmaXJlZCFcclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2lnbk91dChvcHRpb25zID0geyBzY29wZTogJ2dsb2JhbCcgfSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2FjcXVpcmVMb2NrKC0xLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9zaWduT3V0KG9wdGlvbnMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgX3NpZ25PdXQoeyBzY29wZSB9ID0geyBzY29wZTogJ2dsb2JhbCcgfSkge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yOiBzZXNzaW9uRXJyb3IgfSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgaWYgKHNlc3Npb25FcnJvcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHNlc3Npb25FcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gKF9hID0gZGF0YS5zZXNzaW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgICBpZiAoYWNjZXNzVG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZXJyb3IgfSA9IGF3YWl0IHRoaXMuYWRtaW4uc2lnbk91dChhY2Nlc3NUb2tlbiwgc2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIDQwNHMgc2luY2UgdXNlciBtaWdodCBub3QgZXhpc3QgYW55bW9yZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSA0MDFzIHNpbmNlIGFuIGludmFsaWQgb3IgZXhwaXJlZCBKV1Qgc2hvdWxkIHNpZ24gb3V0IHRoZSBjdXJyZW50IHNlc3Npb25cclxuICAgICAgICAgICAgICAgICAgICBpZiAoISgoMCwgZXJyb3JzXzEuaXNBdXRoQXBpRXJyb3IpKGVycm9yKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3Iuc3RhdHVzID09PSA0MDQgfHwgZXJyb3Iuc3RhdHVzID09PSA0MDEgfHwgZXJyb3Iuc3RhdHVzID09PSA0MDMpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2NvcGUgIT09ICdvdGhlcnMnKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZW1vdmVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCAoMCwgaGVscGVyc18xLnJlbW92ZUl0ZW1Bc3luYykodGhpcy5zdG9yYWdlLCBgJHt0aGlzLnN0b3JhZ2VLZXl9LWNvZGUtdmVyaWZpZXJgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWNlaXZlIGEgbm90aWZpY2F0aW9uIGV2ZXJ5IHRpbWUgYW4gYXV0aCBldmVudCBoYXBwZW5zLlxyXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIEEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCB3aGVuIGFuIGF1dGggZXZlbnQgaGFwcGVucy5cclxuICAgICAqL1xyXG4gICAgb25BdXRoU3RhdGVDaGFuZ2UoY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBpZCA9ICgwLCBoZWxwZXJzXzEudXVpZCkoKTtcclxuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB7XHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgICBjYWxsYmFjayxcclxuICAgICAgICAgICAgdW5zdWJzY3JpYmU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjdW5zdWJzY3JpYmUoKScsICdzdGF0ZSBjaGFuZ2UgY2FsbGJhY2sgd2l0aCBpZCByZW1vdmVkJywgaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZUVtaXR0ZXJzLmRlbGV0ZShpZCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLl9kZWJ1ZygnI29uQXV0aFN0YXRlQ2hhbmdlKCknLCAncmVnaXN0ZXJlZCBjYWxsYmFjayB3aXRoIGlkJywgaWQpO1xyXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VFbWl0dGVycy5zZXQoaWQsIHN1YnNjcmlwdGlvbik7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUHJvbWlzZTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRJbml0aWFsU2Vzc2lvbihpZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogeyBzdWJzY3JpcHRpb24gfSB9O1xyXG4gICAgfVxyXG4gICAgYXN5bmMgX2VtaXRJbml0aWFsU2Vzc2lvbihpZCkge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0sIGVycm9yLCB9ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgKChfYSA9IHRoaXMuc3RhdGVDaGFuZ2VFbWl0dGVycy5nZXQoaWQpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbGJhY2soJ0lOSVRJQUxfU0VTU0lPTicsIHNlc3Npb24pKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCdJTklUSUFMX1NFU1NJT04nLCAnY2FsbGJhY2sgaWQnLCBpZCwgJ3Nlc3Npb24nLCBzZXNzaW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCAoKF9iID0gdGhpcy5zdGF0ZUNoYW5nZUVtaXR0ZXJzLmdldChpZCkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsYmFjaygnSU5JVElBTF9TRVNTSU9OJywgbnVsbCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoJ0lOSVRJQUxfU0VTU0lPTicsICdjYWxsYmFjayBpZCcsIGlkLCAnZXJyb3InLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNlbmRzIGEgcGFzc3dvcmQgcmVzZXQgcmVxdWVzdCB0byBhbiBlbWFpbCBhZGRyZXNzLiBUaGlzIG1ldGhvZCBzdXBwb3J0cyB0aGUgUEtDRSBmbG93LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlci5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLnJlZGlyZWN0VG8gVGhlIFVSTCB0byBzZW5kIHRoZSB1c2VyIHRvIGFmdGVyIHRoZXkgY2xpY2sgdGhlIHBhc3N3b3JkIHJlc2V0IGxpbmsuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5jYXB0Y2hhVG9rZW4gVmVyaWZpY2F0aW9uIHRva2VuIHJlY2VpdmVkIHdoZW4gdGhlIHVzZXIgY29tcGxldGVzIHRoZSBjYXB0Y2hhIG9uIHRoZSBzaXRlLlxyXG4gICAgICovXHJcbiAgICBhc3luYyByZXNldFBhc3N3b3JkRm9yRW1haWwoZW1haWwsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGxldCBjb2RlQ2hhbGxlbmdlID0gbnVsbDtcclxuICAgICAgICBsZXQgY29kZUNoYWxsZW5nZU1ldGhvZCA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuZmxvd1R5cGUgPT09ICdwa2NlJykge1xyXG4gICAgICAgICAgICA7XHJcbiAgICAgICAgICAgIFtjb2RlQ2hhbGxlbmdlLCBjb2RlQ2hhbGxlbmdlTWV0aG9kXSA9IGF3YWl0ICgwLCBoZWxwZXJzXzEuZ2V0Q29kZUNoYWxsZW5nZUFuZE1ldGhvZCkodGhpcy5zdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXksIHRydWUgLy8gaXNQYXNzd29yZFJlY292ZXJ5XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCAoMCwgZmV0Y2hfMS5fcmVxdWVzdCkodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vcmVjb3ZlcmAsIHtcclxuICAgICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICBlbWFpbCxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlX2NoYWxsZW5nZTogY29kZUNoYWxsZW5nZSxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlX2NoYWxsZW5nZV9tZXRob2Q6IGNvZGVDaGFsbGVuZ2VNZXRob2QsXHJcbiAgICAgICAgICAgICAgICAgICAgZ290cnVlX21ldGFfc2VjdXJpdHk6IHsgY2FwdGNoYV90b2tlbjogb3B0aW9ucy5jYXB0Y2hhVG9rZW4gfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdFRvOiBvcHRpb25zLnJlZGlyZWN0VG8sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc0F1dGhFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgdGhlIGlkZW50aXRpZXMgbGlua2VkIHRvIGEgdXNlci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0VXNlcklkZW50aXRpZXMoKSB7XHJcbiAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcigpO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyBpZGVudGl0aWVzOiAoX2EgPSBkYXRhLnVzZXIuaWRlbnRpdGllcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10gfSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIExpbmtzIGFuIG9hdXRoIGlkZW50aXR5IHRvIGFuIGV4aXN0aW5nIHVzZXIuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyB0aGUgUEtDRSBmbG93LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBsaW5rSWRlbnRpdHkoY3JlZGVudGlhbHMpIHtcclxuICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgdGhpcy5fZ2V0VXJsRm9yUHJvdmlkZXIoYCR7dGhpcy51cmx9L3VzZXIvaWRlbnRpdGllcy9hdXRob3JpemVgLCBjcmVkZW50aWFscy5wcm92aWRlciwge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VG86IChfYSA9IGNyZWRlbnRpYWxzLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZWRpcmVjdFRvLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlczogKF9iID0gY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNjb3BlcyxcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogKF9jID0gY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICAgIHNraXBCcm93c2VyUmVkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCAoMCwgZmV0Y2hfMS5fcmVxdWVzdCkodGhpcy5mZXRjaCwgJ0dFVCcsIHVybCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICBqd3Q6IChfZSA9IChfZCA9IGRhdGEuc2Vzc2lvbikgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmFjY2Vzc190b2tlbikgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgaWYgKCgwLCBoZWxwZXJzXzEuaXNCcm93c2VyKSgpICYmICEoKF9hID0gY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNraXBCcm93c2VyUmVkaXJlY3QpKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGF0YS51cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgcHJvdmlkZXI6IGNyZWRlbnRpYWxzLnByb3ZpZGVyLCB1cmw6IGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGF0YS51cmwgfSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyBwcm92aWRlcjogY3JlZGVudGlhbHMucHJvdmlkZXIsIHVybDogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVW5saW5rcyBhbiBpZGVudGl0eSBmcm9tIGEgdXNlciBieSBkZWxldGluZyBpdC4gVGhlIHVzZXIgd2lsbCBubyBsb25nZXIgYmUgYWJsZSB0byBzaWduIGluIHdpdGggdGhhdCBpZGVudGl0eSBvbmNlIGl0J3MgdW5saW5rZWQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHVubGlua0lkZW50aXR5KGlkZW50aXR5KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3VzZVNlc3Npb24oYXN5bmMgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0ICgwLCBmZXRjaF8xLl9yZXF1ZXN0KSh0aGlzLmZldGNoLCAnREVMRVRFJywgYCR7dGhpcy51cmx9L3VzZXIvaWRlbnRpdGllcy8ke2lkZW50aXR5LmlkZW50aXR5X2lkfWAsIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgand0OiAoX2IgPSAoX2EgPSBkYXRhLnNlc3Npb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hY2Nlc3NfdG9rZW4pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIG5ldyBKV1QuXHJcbiAgICAgKiBAcGFyYW0gcmVmcmVzaFRva2VuIEEgdmFsaWQgcmVmcmVzaCB0b2tlbiB0aGF0IHdhcyByZXR1cm5lZCBvbiBsb2dpbi5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgX3JlZnJlc2hBY2Nlc3NUb2tlbihyZWZyZXNoVG9rZW4pIHtcclxuICAgICAgICBjb25zdCBkZWJ1Z05hbWUgPSBgI19yZWZyZXNoQWNjZXNzVG9rZW4oJHtyZWZyZXNoVG9rZW4uc3Vic3RyaW5nKDAsIDUpfS4uLilgO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ2JlZ2luJyk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgLy8gd2lsbCBhdHRlbXB0IHRvIHJlZnJlc2ggdGhlIHRva2VuIHdpdGggZXhwb25lbnRpYWwgYmFja29mZlxyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgKDAsIGhlbHBlcnNfMS5yZXRyeWFibGUpKGFzeW5jIChhdHRlbXB0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXR0ZW1wdCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCAoMCwgaGVscGVyc18xLnNsZWVwKSgyMDAgKiBNYXRoLnBvdygyLCBhdHRlbXB0IC0gMSkpOyAvLyAyMDAsIDQwMCwgODAwLCAuLi5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ3JlZnJlc2hpbmcgYXR0ZW1wdCcsIGF0dGVtcHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0ICgwLCBmZXRjaF8xLl9yZXF1ZXN0KSh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS90b2tlbj9ncmFudF90eXBlPXJlZnJlc2hfdG9rZW5gLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogeyByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4gfSxcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgeGZvcm06IGZldGNoXzEuX3Nlc3Npb25SZXNwb25zZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LCAoYXR0ZW1wdCwgZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRCYWNrT2ZmSW50ZXJ2YWwgPSAyMDAgKiBNYXRoLnBvdygyLCBhdHRlbXB0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoZXJyb3IgJiZcclxuICAgICAgICAgICAgICAgICAgICAoMCwgZXJyb3JzXzEuaXNBdXRoUmV0cnlhYmxlRmV0Y2hFcnJvcikoZXJyb3IpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0cnlhYmxlIG9ubHkgaWYgdGhlIHJlcXVlc3QgY2FuIGJlIHNlbnQgYmVmb3JlIHRoZSBiYWNrb2ZmIG92ZXJmbG93cyB0aGUgdGljayBkdXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIERhdGUubm93KCkgKyBuZXh0QmFja09mZkludGVydmFsIC0gc3RhcnRlZEF0IDwgY29uc3RhbnRzXzEuQVVUT19SRUZSRVNIX1RJQ0tfRFVSQVRJT05fTVMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ2Vycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICBpZiAoKDAsIGVycm9yc18xLmlzQXV0aEVycm9yKShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgc2Vzc2lvbjogbnVsbCwgdXNlcjogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5fZGVidWcoZGVidWdOYW1lLCAnZW5kJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgX2lzVmFsaWRTZXNzaW9uKG1heWJlU2Vzc2lvbikge1xyXG4gICAgICAgIGNvbnN0IGlzVmFsaWRTZXNzaW9uID0gdHlwZW9mIG1heWJlU2Vzc2lvbiA9PT0gJ29iamVjdCcgJiZcclxuICAgICAgICAgICAgbWF5YmVTZXNzaW9uICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICdhY2Nlc3NfdG9rZW4nIGluIG1heWJlU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAncmVmcmVzaF90b2tlbicgaW4gbWF5YmVTZXNzaW9uICYmXHJcbiAgICAgICAgICAgICdleHBpcmVzX2F0JyBpbiBtYXliZVNlc3Npb247XHJcbiAgICAgICAgcmV0dXJuIGlzVmFsaWRTZXNzaW9uO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgX2hhbmRsZVByb3ZpZGVyU2lnbkluKHByb3ZpZGVyLCBvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgdGhpcy5fZ2V0VXJsRm9yUHJvdmlkZXIoYCR7dGhpcy51cmx9L2F1dGhvcml6ZWAsIHByb3ZpZGVyLCB7XHJcbiAgICAgICAgICAgIHJlZGlyZWN0VG86IG9wdGlvbnMucmVkaXJlY3RUbyxcclxuICAgICAgICAgICAgc2NvcGVzOiBvcHRpb25zLnNjb3BlcyxcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IG9wdGlvbnMucXVlcnlQYXJhbXMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fZGVidWcoJyNfaGFuZGxlUHJvdmlkZXJTaWduSW4oKScsICdwcm92aWRlcicsIHByb3ZpZGVyLCAnb3B0aW9ucycsIG9wdGlvbnMsICd1cmwnLCB1cmwpO1xyXG4gICAgICAgIC8vIHRyeSB0byBvcGVuIG9uIHRoZSBicm93c2VyXHJcbiAgICAgICAgaWYgKCgwLCBoZWxwZXJzXzEuaXNCcm93c2VyKSgpICYmICFvcHRpb25zLnNraXBCcm93c2VyUmVkaXJlY3QpIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBkYXRhOiB7IHByb3ZpZGVyLCB1cmwgfSwgZXJyb3I6IG51bGwgfTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVjb3ZlcnMgdGhlIHNlc3Npb24gZnJvbSBMb2NhbFN0b3JhZ2UgYW5kIHJlZnJlc2hlcyB0aGUgdG9rZW5cclxuICAgICAqIE5vdGU6IHRoaXMgbWV0aG9kIGlzIGFzeW5jIHRvIGFjY29tbW9kYXRlIGZvciBBc3luY1N0b3JhZ2UgZS5nLiBpbiBSZWFjdCBuYXRpdmUuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIF9yZWNvdmVyQW5kUmVmcmVzaCgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IGRlYnVnTmFtZSA9ICcjX3JlY292ZXJBbmRSZWZyZXNoKCknO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ2JlZ2luJyk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFNlc3Npb24gPSAoYXdhaXQgKDAsIGhlbHBlcnNfMS5nZXRJdGVtQXN5bmMpKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5KSk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50U2Vzc2lvbiAmJiB0aGlzLnVzZXJTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWF5YmVVc2VyID0gKGF3YWl0ICgwLCBoZWxwZXJzXzEuZ2V0SXRlbUFzeW5jKSh0aGlzLnVzZXJTdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXkgKyAnLXVzZXInKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RvcmFnZS5pc1NlcnZlciAmJiBPYmplY3QuaXModGhpcy5zdG9yYWdlLCB0aGlzLnVzZXJTdG9yYWdlKSAmJiAhbWF5YmVVc2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmFnZSBhbmQgdXNlclN0b3JhZ2UgYXJlIHRoZSBzYW1lIHN0b3JhZ2UgbWVkaXVtLCBmb3IgZXhhbXBsZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdpbmRvdy5sb2NhbFN0b3JhZ2UgaWYgdXNlclN0b3JhZ2UgZG9lcyBub3QgaGF2ZSB0aGUgdXNlciBmcm9tXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmFnZSBzdG9yZWQsIHN0b3JlIGl0IGZpcnN0IHRoZXJlYnkgbWlncmF0aW5nIHRoZSB1c2VyIG9iamVjdFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGZyb20gc3RvcmFnZSAtPiB1c2VyU3RvcmFnZVxyXG4gICAgICAgICAgICAgICAgICAgIG1heWJlVXNlciA9IHsgdXNlcjogY3VycmVudFNlc3Npb24udXNlciB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0ICgwLCBoZWxwZXJzXzEuc2V0SXRlbUFzeW5jKSh0aGlzLnVzZXJTdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXkgKyAnLXVzZXInLCBtYXliZVVzZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY3VycmVudFNlc3Npb24udXNlciA9IChfYSA9IG1heWJlVXNlciA9PT0gbnVsbCB8fCBtYXliZVVzZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1heWJlVXNlci51c2VyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoMCwgaGVscGVyc18xLnVzZXJOb3RBdmFpbGFibGVQcm94eSkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50U2Vzc2lvbiAmJiAhY3VycmVudFNlc3Npb24udXNlcikge1xyXG4gICAgICAgICAgICAgICAgLy8gdXNlciBzdG9yYWdlIGlzIG5vdCBzZXQsIGxldCdzIGNoZWNrIGlmIGl0IHdhcyBwcmV2aW91c2x5IGVuYWJsZWQgc29cclxuICAgICAgICAgICAgICAgIC8vIHdlIGJyaW5nIGJhY2sgdGhlIHN0b3JhZ2UgYXMgaXQgc2hvdWxkIGJlXHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRTZXNzaW9uLnVzZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0ZXN0IGlmIHVzZXJTdG9yYWdlIHdhcyBwcmV2aW91c2x5IGVuYWJsZWQgYW5kIHRoZSBzdG9yYWdlIG1lZGl1bSB3YXMgdGhlIHNhbWUsIHRvIG1vdmUgdGhlIHVzZXIgYmFjayB1bmRlciB0aGUgc2FtZSBrZXlcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXBhcmF0ZVVzZXIgPSAoYXdhaXQgKDAsIGhlbHBlcnNfMS5nZXRJdGVtQXN5bmMpKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5ICsgJy11c2VyJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXBhcmF0ZVVzZXIgJiYgKHNlcGFyYXRlVXNlciA9PT0gbnVsbCB8fCBzZXBhcmF0ZVVzZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlcGFyYXRlVXNlci51c2VyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Vzc2lvbi51c2VyID0gc2VwYXJhdGVVc2VyLnVzZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0ICgwLCBoZWxwZXJzXzEucmVtb3ZlSXRlbUFzeW5jKSh0aGlzLnN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSArICctdXNlcicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCAoMCwgaGVscGVyc18xLnNldEl0ZW1Bc3luYykodGhpcy5zdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXksIGN1cnJlbnRTZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXNzaW9uLnVzZXIgPSAoMCwgaGVscGVyc18xLnVzZXJOb3RBdmFpbGFibGVQcm94eSkoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZGVidWcoZGVidWdOYW1lLCAnc2Vzc2lvbiBmcm9tIHN0b3JhZ2UnLCBjdXJyZW50U2Vzc2lvbik7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5faXNWYWxpZFNlc3Npb24oY3VycmVudFNlc3Npb24pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdzZXNzaW9uIGlzIG5vdCB2YWxpZCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTZXNzaW9uICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVtb3ZlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGV4cGlyZXNXaXRoTWFyZ2luID0gKChfYiA9IGN1cnJlbnRTZXNzaW9uLmV4cGlyZXNfYXQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IEluZmluaXR5KSAqIDEwMDAgLSBEYXRlLm5vdygpIDwgY29uc3RhbnRzXzEuRVhQSVJZX01BUkdJTl9NUztcclxuICAgICAgICAgICAgdGhpcy5fZGVidWcoZGVidWdOYW1lLCBgc2Vzc2lvbiBoYXMke2V4cGlyZXNXaXRoTWFyZ2luID8gJycgOiAnIG5vdCd9IGV4cGlyZWQgd2l0aCBtYXJnaW4gb2YgJHtjb25zdGFudHNfMS5FWFBJUllfTUFSR0lOX01TfXNgKTtcclxuICAgICAgICAgICAgaWYgKGV4cGlyZXNXaXRoTWFyZ2luKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hdXRvUmVmcmVzaFRva2VuICYmIGN1cnJlbnRTZXNzaW9uLnJlZnJlc2hfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCB0aGlzLl9jYWxsUmVmcmVzaFRva2VuKGN1cnJlbnRTZXNzaW9uLnJlZnJlc2hfdG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgZXJyb3JzXzEuaXNBdXRoUmV0cnlhYmxlRmV0Y2hFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdyZWZyZXNoIGZhaWxlZCB3aXRoIGEgbm9uLXJldHJ5YWJsZSBlcnJvciwgcmVtb3ZpbmcgdGhlIHNlc3Npb24nLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZW1vdmVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudFNlc3Npb24udXNlciAmJlxyXG4gICAgICAgICAgICAgICAgY3VycmVudFNlc3Npb24udXNlci5fX2lzVXNlck5vdEF2YWlsYWJsZVByb3h5ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcHJveHkgdXNlciwgdHJ5IHRvIGdldCB0aGUgcmVhbCB1c2VyIGRhdGFcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvcjogdXNlckVycm9yIH0gPSBhd2FpdCB0aGlzLl9nZXRVc2VyKGN1cnJlbnRTZXNzaW9uLmFjY2Vzc190b2tlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VyRXJyb3IgJiYgKGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGF0YS51c2VyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Vzc2lvbi51c2VyID0gZGF0YS51c2VyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihjdXJyZW50U2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKCdTSUdORURfSU4nLCBjdXJyZW50U2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdjb3VsZCBub3QgZ2V0IHVzZXIgZGF0YSwgc2tpcHBpbmcgU0lHTkVEX0lOIG5vdGlmaWNhdGlvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChnZXRVc2VyRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBnZXR0aW5nIHVzZXIgZGF0YTonLCBnZXRVc2VyRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ2Vycm9yIGdldHRpbmcgdXNlciBkYXRhLCBza2lwcGluZyBTSUdORURfSU4gbm90aWZpY2F0aW9uJywgZ2V0VXNlckVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gcGVyc2lzdCBjdXJyZW50U2Vzc2lvbiBhZ2FpbiwgYXMgd2UganVzdCBsb2FkZWQgaXQgZnJvbVxyXG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgc3RvcmFnZTsgcGVyc2lzdGluZyBpdCBhZ2FpbiBtYXkgb3ZlcndyaXRlIGEgdmFsdWUgc2F2ZWQgYnlcclxuICAgICAgICAgICAgICAgIC8vIGFub3RoZXIgY2xpZW50IHdpdGggYWNjZXNzIHRvIHRoZSBzYW1lIGxvY2FsIHN0b3JhZ2VcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKCdTSUdORURfSU4nLCBjdXJyZW50U2Vzc2lvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdlcnJvcicsIGVycik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5fZGVidWcoZGVidWdOYW1lLCAnZW5kJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgX2NhbGxSZWZyZXNoVG9rZW4ocmVmcmVzaFRva2VuKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBpZiAoIXJlZnJlc2hUb2tlbikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVmcmVzaGluZyBpcyBhbHJlYWR5IGluIHByb2dyZXNzXHJcbiAgICAgICAgaWYgKHRoaXMucmVmcmVzaGluZ0RlZmVycmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnJlc2hpbmdEZWZlcnJlZC5wcm9taXNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkZWJ1Z05hbWUgPSBgI19jYWxsUmVmcmVzaFRva2VuKCR7cmVmcmVzaFRva2VuLnN1YnN0cmluZygwLCA1KX0uLi4pYDtcclxuICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdiZWdpbicpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaGluZ0RlZmVycmVkID0gbmV3IGhlbHBlcnNfMS5EZWZlcnJlZCgpO1xyXG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCB0aGlzLl9yZWZyZXNoQWNjZXNzVG9rZW4ocmVmcmVzaFRva2VuKTtcclxuICAgICAgICAgICAgaWYgKGVycm9yKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIGlmICghZGF0YS5zZXNzaW9uKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKGRhdGEuc2Vzc2lvbik7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKCdUT0tFTl9SRUZSRVNIRUQnLCBkYXRhLnNlc3Npb24pO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7IHNlc3Npb246IGRhdGEuc2Vzc2lvbiwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoaW5nRGVmZXJyZWQucmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGVidWcoZGVidWdOYW1lLCAnZXJyb3InLCBlcnJvcik7XHJcbiAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geyBzZXNzaW9uOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoMCwgZXJyb3JzXzEuaXNBdXRoUmV0cnlhYmxlRmV0Y2hFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVtb3ZlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKF9hID0gdGhpcy5yZWZyZXNoaW5nRGVmZXJyZWQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIChfYiA9IHRoaXMucmVmcmVzaGluZ0RlZmVycmVkKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hpbmdEZWZlcnJlZCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ2VuZCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIF9ub3RpZnlBbGxTdWJzY3JpYmVycyhldmVudCwgc2Vzc2lvbiwgYnJvYWRjYXN0ID0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IGRlYnVnTmFtZSA9IGAjX25vdGlmeUFsbFN1YnNjcmliZXJzKCR7ZXZlbnR9KWA7XHJcbiAgICAgICAgdGhpcy5fZGVidWcoZGVidWdOYW1lLCAnYmVnaW4nLCBzZXNzaW9uLCBgYnJvYWRjYXN0ID0gJHticm9hZGNhc3R9YCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCAmJiBicm9hZGNhc3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbC5wb3N0TWVzc2FnZSh7IGV2ZW50LCBzZXNzaW9uIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IEFycmF5LmZyb20odGhpcy5zdGF0ZUNoYW5nZUVtaXR0ZXJzLnZhbHVlcygpKS5tYXAoYXN5bmMgKHgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgeC5jYWxsYmFjayhldmVudCwgc2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcnNbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3JzWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdlbmQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHNldCBjdXJyZW50U2Vzc2lvbiBhbmQgY3VycmVudFVzZXJcclxuICAgICAqIHByb2Nlc3MgdG8gX3N0YXJ0QXV0b1JlZnJlc2hUb2tlbiBpZiBwb3NzaWJsZVxyXG4gICAgICovXHJcbiAgICBhc3luYyBfc2F2ZVNlc3Npb24oc2Vzc2lvbikge1xyXG4gICAgICAgIHRoaXMuX2RlYnVnKCcjX3NhdmVTZXNzaW9uKCknLCBzZXNzaW9uKTtcclxuICAgICAgICAvLyBfc2F2ZVNlc3Npb24gaXMgYWx3YXlzIGNhbGxlZCB3aGVuZXZlciBhIG5ldyBzZXNzaW9uIGhhcyBiZWVuIGFjcXVpcmVkXHJcbiAgICAgICAgLy8gc28gd2UgY2FuIHNhZmVseSBzdXBwcmVzcyB0aGUgd2FybmluZyByZXR1cm5lZCBieSBmdXR1cmUgZ2V0U2Vzc2lvbiBjYWxsc1xyXG4gICAgICAgIHRoaXMuc3VwcHJlc3NHZXRTZXNzaW9uV2FybmluZyA9IHRydWU7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgc2hhbGxvdyBjb3B5IHRvIHdvcmsgd2l0aCwgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIG9yaWdpbmFsIHNlc3Npb24gb2JqZWN0IGlmIGl0J3MgdXNlZCBlbHNld2hlcmVcclxuICAgICAgICBjb25zdCBzZXNzaW9uVG9Qcm9jZXNzID0gT2JqZWN0LmFzc2lnbih7fSwgc2Vzc2lvbik7XHJcbiAgICAgICAgY29uc3QgdXNlcklzUHJveHkgPSBzZXNzaW9uVG9Qcm9jZXNzLnVzZXIgJiYgc2Vzc2lvblRvUHJvY2Vzcy51c2VyLl9faXNVc2VyTm90QXZhaWxhYmxlUHJveHkgPT09IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlclN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgaWYgKCF1c2VySXNQcm94eSAmJiBzZXNzaW9uVG9Qcm9jZXNzLnVzZXIpIHtcclxuICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgYSByZWFsIHVzZXIgb2JqZWN0LCBzYXZlIGl0IHRvIHVzZXJTdG9yYWdlLlxyXG4gICAgICAgICAgICAgICAgYXdhaXQgKDAsIGhlbHBlcnNfMS5zZXRJdGVtQXN5bmMpKHRoaXMudXNlclN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSArICctdXNlcicsIHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBzZXNzaW9uVG9Qcm9jZXNzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh1c2VySXNQcm94eSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgaXQncyB0aGUgcHJveHksIGl0IG1lYW5zIHVzZXIgd2FzIG5vdCBmb3VuZCBpbiB1c2VyU3RvcmFnZS5cclxuICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBlbnN1cmUgbm8gc3RhbGUgdXNlciBkYXRhIGZvciB0aGlzIGtleSBleGlzdHMgaW4gdXNlclN0b3JhZ2UgaWYgd2Ugd2VyZSB0byBzYXZlIG51bGwsXHJcbiAgICAgICAgICAgICAgICAvLyBvciBzaW1wbHkgbm90IHNhdmUgdGhlIHByb3h5LiBGb3Igbm93LCB3ZSBkb24ndCBzYXZlIHRoZSBwcm94eSBoZXJlLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhIG5lZWQgdG8gY2xlYXIgdXNlclN0b3JhZ2UgaWYgdXNlciBiZWNvbWVzIHByb3h5LCB0aGF0IGxvZ2ljIHdvdWxkIGdvIGhlcmUuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUHJlcGFyZSB0aGUgbWFpbiBzZXNzaW9uIGRhdGEgZm9yIHByaW1hcnkgc3RvcmFnZTogcmVtb3ZlIHRoZSB1c2VyIHByb3BlcnR5IGJlZm9yZSBjbG9uaW5nXHJcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIG9yaWdpbmFsIHNlc3Npb24udXNlciBtaWdodCBiZSB0aGUgcHJveHlcclxuICAgICAgICAgICAgY29uc3QgbWFpblNlc3Npb25EYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgc2Vzc2lvblRvUHJvY2Vzcyk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBtYWluU2Vzc2lvbkRhdGEudXNlcjsgLy8gUmVtb3ZlIHVzZXIgKHJlYWwgb3IgcHJveHkpIGJlZm9yZSBjbG9uaW5nIGZvciBtYWluIHN0b3JhZ2VcclxuICAgICAgICAgICAgY29uc3QgY2xvbmVkTWFpblNlc3Npb25EYXRhID0gKDAsIGhlbHBlcnNfMi5kZWVwQ2xvbmUpKG1haW5TZXNzaW9uRGF0YSk7XHJcbiAgICAgICAgICAgIGF3YWl0ICgwLCBoZWxwZXJzXzEuc2V0SXRlbUFzeW5jKSh0aGlzLnN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSwgY2xvbmVkTWFpblNlc3Npb25EYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIE5vIHVzZXJTdG9yYWdlIGlzIGNvbmZpZ3VyZWQuXHJcbiAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgc2Vzc2lvbi51c2VyIHNob3VsZCBpZGVhbGx5IG5vdCBiZSBhIHByb3h5LlxyXG4gICAgICAgICAgICAvLyBJZiBpdCB3ZXJlLCBzdHJ1Y3R1cmVkQ2xvbmUgd291bGQgZmFpbC4gVGhpcyBpbXBsaWVzIGFuIGlzc3VlIGVsc2V3aGVyZSBpZiB1c2VyIGlzIGEgcHJveHkgaGVyZVxyXG4gICAgICAgICAgICBjb25zdCBjbG9uZWRTZXNzaW9uID0gKDAsIGhlbHBlcnNfMi5kZWVwQ2xvbmUpKHNlc3Npb25Ub1Byb2Nlc3MpOyAvLyBzZXNzaW9uVG9Qcm9jZXNzIHN0aWxsIGhhcyBpdHMgb3JpZ2luYWwgdXNlciBwcm9wZXJ0eVxyXG4gICAgICAgICAgICBhd2FpdCAoMCwgaGVscGVyc18xLnNldEl0ZW1Bc3luYykodGhpcy5zdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXksIGNsb25lZFNlc3Npb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIF9yZW1vdmVTZXNzaW9uKCkge1xyXG4gICAgICAgIHRoaXMuX2RlYnVnKCcjX3JlbW92ZVNlc3Npb24oKScpO1xyXG4gICAgICAgIGF3YWl0ICgwLCBoZWxwZXJzXzEucmVtb3ZlSXRlbUFzeW5jKSh0aGlzLnN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSk7XHJcbiAgICAgICAgYXdhaXQgKDAsIGhlbHBlcnNfMS5yZW1vdmVJdGVtQXN5bmMpKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5ICsgJy1jb2RlLXZlcmlmaWVyJyk7XHJcbiAgICAgICAgYXdhaXQgKDAsIGhlbHBlcnNfMS5yZW1vdmVJdGVtQXN5bmMpKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5ICsgJy11c2VyJyk7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlclN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgYXdhaXQgKDAsIGhlbHBlcnNfMS5yZW1vdmVJdGVtQXN5bmMpKHRoaXMudXNlclN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSArICctdXNlcicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl9ub3RpZnlBbGxTdWJzY3JpYmVycygnU0lHTkVEX09VVCcsIG51bGwpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGFueSByZWdpc3RlcmVkIHZpc2liaWxpdHljaGFuZ2UgY2FsbGJhY2suXHJcbiAgICAgKlxyXG4gICAgICoge0BzZWUgI3N0YXJ0QXV0b1JlZnJlc2h9XHJcbiAgICAgKiB7QHNlZSAjc3RvcEF1dG9SZWZyZXNofVxyXG4gICAgICovXHJcbiAgICBfcmVtb3ZlVmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjaygpIHtcclxuICAgICAgICB0aGlzLl9kZWJ1ZygnI19yZW1vdmVWaXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrKCknKTtcclxuICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMudmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjaztcclxuICAgICAgICB0aGlzLnZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAmJiAoMCwgaGVscGVyc18xLmlzQnJvd3NlcikoKSAmJiAod2luZG93ID09PSBudWxsIHx8IHdpbmRvdyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIpKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdyZW1vdmluZyB2aXNpYmlsaXR5Y2hhbmdlIGNhbGxiYWNrIGZhaWxlZCcsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyB0aGUgcHJpdmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgI3N0YXJ0QXV0b1JlZnJlc2h9LiBVc2UgdGhpc1xyXG4gICAgICogd2l0aGluIHRoZSBsaWJyYXJ5LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBfc3RhcnRBdXRvUmVmcmVzaCgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9zdG9wQXV0b1JlZnJlc2goKTtcclxuICAgICAgICB0aGlzLl9kZWJ1ZygnI19zdGFydEF1dG9SZWZyZXNoKCknKTtcclxuICAgICAgICBjb25zdCB0aWNrZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLl9hdXRvUmVmcmVzaFRva2VuVGljaygpLCBjb25zdGFudHNfMS5BVVRPX1JFRlJFU0hfVElDS19EVVJBVElPTl9NUyk7XHJcbiAgICAgICAgdGhpcy5hdXRvUmVmcmVzaFRpY2tlciA9IHRpY2tlcjtcclxuICAgICAgICBpZiAodGlja2VyICYmIHR5cGVvZiB0aWNrZXIgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0aWNrZXIudW5yZWYgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgLy8gdGlja2VyIGlzIGEgTm9kZUpTIFRpbWVvdXQgb2JqZWN0IHRoYXQgaGFzIGFuIGB1bnJlZmAgbWV0aG9kXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvdGltZXJzLmh0bWwjdGltZW91dHVucmVmXHJcbiAgICAgICAgICAgIC8vIFdoZW4gYXV0byByZWZyZXNoIGlzIHVzZWQgaW4gTm9kZUpTIChsaWtlIGZvciB0ZXN0aW5nKSB0aGVcclxuICAgICAgICAgICAgLy8gYHNldEludGVydmFsYCBpcyBwcmV2ZW50aW5nIHRoZSBwcm9jZXNzIGZyb20gYmVpbmcgbWFya2VkIGFzXHJcbiAgICAgICAgICAgIC8vIGZpbmlzaGVkIGFuZCB0ZXN0cyBydW4gZW5kbGVzc2x5LiBUaGlzIGNhbiBiZSBwcmV2ZW50ZWQgYnkgY2FsbGluZ1xyXG4gICAgICAgICAgICAvLyBgdW5yZWYoKWAgb24gdGhlIHJldHVybmVkIG9iamVjdC5cclxuICAgICAgICAgICAgdGlja2VyLnVucmVmKCk7XHJcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVFMgaGFzIG5vIGNvbnRleHQgb2YgRGVub1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgRGVubyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIERlbm8udW5yZWZUaW1lciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAvLyBzaW1pbGFyIGxpa2UgZm9yIE5vZGVKUywgYnV0IHdpdGggdGhlIERlbm8gQVBJXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGVuby5sYW5kL2FwaUBsYXRlc3Q/dW5zdGFibGUmcz1EZW5vLnVucmVmVGltZXJcclxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUUyBoYXMgbm8gY29udGV4dCBvZiBEZW5vXHJcbiAgICAgICAgICAgIERlbm8udW5yZWZUaW1lcih0aWNrZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBydW4gdGhlIHRpY2sgaW1tZWRpYXRlbHksIGJ1dCBpbiB0aGUgbmV4dCBwYXNzIG9mIHRoZSBldmVudCBsb29wIHNvIHRoYXRcclxuICAgICAgICAvLyAjX2luaXRpYWxpemUgY2FuIGJlIGFsbG93ZWQgdG8gY29tcGxldGUgd2l0aG91dCByZWN1cnNpdmVseSB3YWl0aW5nIG9uXHJcbiAgICAgICAgLy8gaXRzZWxmXHJcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2F1dG9SZWZyZXNoVG9rZW5UaWNrKCk7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgdGhlIHByaXZhdGUgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rICNzdG9wQXV0b1JlZnJlc2h9LiBVc2UgdGhpc1xyXG4gICAgICogd2l0aGluIHRoZSBsaWJyYXJ5LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBfc3RvcEF1dG9SZWZyZXNoKCkge1xyXG4gICAgICAgIHRoaXMuX2RlYnVnKCcjX3N0b3BBdXRvUmVmcmVzaCgpJyk7XHJcbiAgICAgICAgY29uc3QgdGlja2VyID0gdGhpcy5hdXRvUmVmcmVzaFRpY2tlcjtcclxuICAgICAgICB0aGlzLmF1dG9SZWZyZXNoVGlja2VyID0gbnVsbDtcclxuICAgICAgICBpZiAodGlja2VyKSB7XHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGlja2VyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyBhbiBhdXRvLXJlZnJlc2ggcHJvY2VzcyBpbiB0aGUgYmFja2dyb3VuZC4gVGhlIHNlc3Npb24gaXMgY2hlY2tlZFxyXG4gICAgICogZXZlcnkgZmV3IHNlY29uZHMuIENsb3NlIHRvIHRoZSB0aW1lIG9mIGV4cGlyYXRpb24gYSBwcm9jZXNzIGlzIHN0YXJ0ZWQgdG9cclxuICAgICAqIHJlZnJlc2ggdGhlIHNlc3Npb24uIElmIHJlZnJlc2hpbmcgZmFpbHMgaXQgd2lsbCBiZSByZXRyaWVkIGZvciBhcyBsb25nIGFzXHJcbiAgICAgKiBuZWNlc3NhcnkuXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IHNldCB0aGUge0BsaW5rIEdvVHJ1ZUNsaWVudE9wdGlvbnMjYXV0b1JlZnJlc2hUb2tlbn0geW91IGRvbid0IG5lZWRcclxuICAgICAqIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiwgaXQgd2lsbCBiZSBjYWxsZWQgZm9yIHlvdS5cclxuICAgICAqXHJcbiAgICAgKiBPbiBicm93c2VycyB0aGUgcmVmcmVzaCBwcm9jZXNzIHdvcmtzIG9ubHkgd2hlbiB0aGUgdGFiL3dpbmRvdyBpcyBpbiB0aGVcclxuICAgICAqIGZvcmVncm91bmQgdG8gY29uc2VydmUgcmVzb3VyY2VzIGFzIHdlbGwgYXMgcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYW5kXHJcbiAgICAgKiBmbG9vZGluZyBhdXRoIHdpdGggcmVxdWVzdHMuIElmIHlvdSBjYWxsIHRoaXMgbWV0aG9kIGFueSBtYW5hZ2VkXHJcbiAgICAgKiB2aXNpYmlsaXR5IGNoYW5nZSBjYWxsYmFjayB3aWxsIGJlIHJlbW92ZWQgYW5kIHlvdSBtdXN0IG1hbmFnZSB2aXNpYmlsaXR5XHJcbiAgICAgKiBjaGFuZ2VzIG9uIHlvdXIgb3duLlxyXG4gICAgICpcclxuICAgICAqIE9uIG5vbi1icm93c2VyIHBsYXRmb3JtcyB0aGUgcmVmcmVzaCBwcm9jZXNzIHdvcmtzICpjb250aW51b3VzbHkqIGluIHRoZVxyXG4gICAgICogYmFja2dyb3VuZCwgd2hpY2ggbWF5IG5vdCBiZSBkZXNpcmFibGUuIFlvdSBzaG91bGQgaG9vayBpbnRvIHlvdXJcclxuICAgICAqIHBsYXRmb3JtJ3MgZm9yZWdyb3VuZCBpbmRpY2F0aW9uIG1lY2hhbmlzbSBhbmQgY2FsbCB0aGVzZSBtZXRob2RzXHJcbiAgICAgKiBhcHByb3ByaWF0ZWx5IHRvIGNvbnNlcnZlIHJlc291cmNlcy5cclxuICAgICAqXHJcbiAgICAgKiB7QHNlZSAjc3RvcEF1dG9SZWZyZXNofVxyXG4gICAgICovXHJcbiAgICBhc3luYyBzdGFydEF1dG9SZWZyZXNoKCkge1xyXG4gICAgICAgIHRoaXMuX3JlbW92ZVZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9zdGFydEF1dG9SZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIGFuIGFjdGl2ZSBhdXRvIHJlZnJlc2ggcHJvY2VzcyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kIChpZiBhbnkpLlxyXG4gICAgICpcclxuICAgICAqIElmIHlvdSBjYWxsIHRoaXMgbWV0aG9kIGFueSBtYW5hZ2VkIHZpc2liaWxpdHkgY2hhbmdlIGNhbGxiYWNrIHdpbGwgYmVcclxuICAgICAqIHJlbW92ZWQgYW5kIHlvdSBtdXN0IG1hbmFnZSB2aXNpYmlsaXR5IGNoYW5nZXMgb24geW91ciBvd24uXHJcbiAgICAgKlxyXG4gICAgICogU2VlIHtAbGluayAjc3RhcnRBdXRvUmVmcmVzaH0gZm9yIG1vcmUgZGV0YWlscy5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgc3RvcEF1dG9SZWZyZXNoKCkge1xyXG4gICAgICAgIHRoaXMuX3JlbW92ZVZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9zdG9wQXV0b1JlZnJlc2goKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUnVucyB0aGUgYXV0byByZWZyZXNoIHRva2VuIHRpY2suXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIF9hdXRvUmVmcmVzaFRva2VuVGljaygpIHtcclxuICAgICAgICB0aGlzLl9kZWJ1ZygnI19hdXRvUmVmcmVzaFRva2VuVGljaygpJywgJ2JlZ2luJyk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fYWNxdWlyZUxvY2soMCwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0sIH0gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNlc3Npb24gfHwgIXNlc3Npb24ucmVmcmVzaF90b2tlbiB8fCAhc2Vzc2lvbi5leHBpcmVzX2F0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoJyNfYXV0b1JlZnJlc2hUb2tlblRpY2soKScsICdubyBzZXNzaW9uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2Vzc2lvbiB3aWxsIGV4cGlyZSBpbiB0aGlzIG1hbnkgdGlja3MgKG9yIGhhcyBhbHJlYWR5IGV4cGlyZWQgaWYgPD0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGlyZXNJblRpY2tzID0gTWF0aC5mbG9vcigoc2Vzc2lvbi5leHBpcmVzX2F0ICogMTAwMCAtIG5vdykgLyBjb25zdGFudHNfMS5BVVRPX1JFRlJFU0hfVElDS19EVVJBVElPTl9NUyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI19hdXRvUmVmcmVzaFRva2VuVGljaygpJywgYGFjY2VzcyB0b2tlbiBleHBpcmVzIGluICR7ZXhwaXJlc0luVGlja3N9IHRpY2tzLCBhIHRpY2sgbGFzdHMgJHtjb25zdGFudHNfMS5BVVRPX1JFRlJFU0hfVElDS19EVVJBVElPTl9NU31tcywgcmVmcmVzaCB0aHJlc2hvbGQgaXMgJHtjb25zdGFudHNfMS5BVVRPX1JFRlJFU0hfVElDS19USFJFU0hPTER9IHRpY2tzYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwaXJlc0luVGlja3MgPD0gY29uc3RhbnRzXzEuQVVUT19SRUZSRVNIX1RJQ0tfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2FsbFJlZnJlc2hUb2tlbihzZXNzaW9uLnJlZnJlc2hfdG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQXV0byByZWZyZXNoIHRpY2sgZmFpbGVkIHdpdGggZXJyb3IuIFRoaXMgaXMgbGlrZWx5IGEgdHJhbnNpZW50IGVycm9yLicsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2F1dG9SZWZyZXNoVG9rZW5UaWNrKCknLCAnZW5kJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoZS5pc0FjcXVpcmVUaW1lb3V0IHx8IGUgaW5zdGFuY2VvZiBsb2Nrc18xLkxvY2tBY3F1aXJlVGltZW91dEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygnYXV0byByZWZyZXNoIHRva2VuIHRpY2sgbG9jayBub3QgYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgY2FsbGJhY2tzIG9uIHRoZSBicm93c2VyIC8gcGxhdGZvcm0sIHdoaWNoIGluLXR1cm4gcnVuXHJcbiAgICAgKiBhbGdvcml0aG1zIHdoZW4gdGhlIGJyb3dzZXIgd2luZG93L3RhYiBhcmUgaW4gZm9yZWdyb3VuZC4gT24gbm9uLWJyb3dzZXJcclxuICAgICAqIHBsYXRmb3JtcyBpdCBhc3N1bWVzIGFsd2F5cyBmb3JlZ3JvdW5kLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBfaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLl9kZWJ1ZygnI19oYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKCknKTtcclxuICAgICAgICBpZiAoISgwLCBoZWxwZXJzXzEuaXNCcm93c2VyKSgpIHx8ICEod2luZG93ID09PSBudWxsIHx8IHdpbmRvdyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9SZWZyZXNoVG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIC8vIGluIG5vbi1icm93c2VyIGVudmlyb25tZW50cyB0aGUgcmVmcmVzaCB0b2tlbiB0aWNrZXIgcnVucyBhbHdheXNcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRBdXRvUmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrID0gYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5fb25WaXNpYmlsaXR5Q2hhbmdlZChmYWxzZSk7XHJcbiAgICAgICAgICAgIHdpbmRvdyA9PT0gbnVsbCB8fCB3aW5kb3cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgdGhpcy52aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICAgICAgLy8gbm93IGltbWVkaWF0ZWx5IGNhbGwgdGhlIHZpc2JpbGl0eSBjaGFuZ2VkIGNhbGxiYWNrIHRvIHNldHVwIHdpdGggdGhlXHJcbiAgICAgICAgICAgIC8vIGN1cnJlbnQgdmlzYmlsaXR5IHN0YXRlXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX29uVmlzaWJpbGl0eUNoYW5nZWQodHJ1ZSk7IC8vIGluaXRpYWwgY2FsbFxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignX2hhbmRsZVZpc2liaWxpdHlDaGFuZ2UnLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsYmFjayByZWdpc3RlcmVkIHdpdGggYHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJylgLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBfb25WaXNpYmlsaXR5Q2hhbmdlZChjYWxsZWRGcm9tSW5pdGlhbGl6ZSkge1xyXG4gICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBgI19vblZpc2liaWxpdHlDaGFuZ2VkKCR7Y2FsbGVkRnJvbUluaXRpYWxpemV9KWA7XHJcbiAgICAgICAgdGhpcy5fZGVidWcobWV0aG9kTmFtZSwgJ3Zpc2liaWxpdHlTdGF0ZScsIGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSk7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ3Zpc2libGUnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9SZWZyZXNoVG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIC8vIGluIGJyb3dzZXIgZW52aXJvbm1lbnRzIHRoZSByZWZyZXNoIHRva2VuIHRpY2tlciBydW5zIG9ubHkgb24gZm9jdXNlZCB0YWJzXHJcbiAgICAgICAgICAgICAgICAvLyB3aGljaCBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnNcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0QXV0b1JlZnJlc2goKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWNhbGxlZEZyb21Jbml0aWFsaXplKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjYWxsZWQgd2hlbiB0aGUgdmlzaWJpbGl0eSBoYXMgY2hhbmdlZCwgaS5lLiB0aGUgYnJvd3NlclxyXG4gICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbmVkIGZyb20gaGlkZGVuIC0+IHZpc2libGUgc28gd2UgbmVlZCB0byBzZWUgaWYgdGhlIHNlc3Npb25cclxuICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSByZWNvdmVyZWQgaW1tZWRpYXRlbHkuLi4gYnV0IHRvIGRvIHRoYXQgd2UgbmVlZCB0byBhY3F1aXJlXHJcbiAgICAgICAgICAgICAgICAvLyB0aGUgbG9jayBmaXJzdCBhc3luY2hyb25vdXNseVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUHJvbWlzZTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2FjcXVpcmVMb2NrKC0xLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSAhPT0gJ3Zpc2libGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKG1ldGhvZE5hbWUsICdhY3F1aXJlZCB0aGUgbG9jayB0byByZWNvdmVyIHRoZSBzZXNzaW9uLCBidXQgdGhlIGJyb3dzZXIgdmlzaWJpbGl0eVN0YXRlIGlzIG5vIGxvbmdlciB2aXNpYmxlLCBhYm9ydGluZycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB2aXNpYmlsaXR5IGhhcyBjaGFuZ2VkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBsb2NrLCBhYm9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlY292ZXIgdGhlIHNlc3Npb25cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZWNvdmVyQW5kUmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvUmVmcmVzaFRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9wQXV0b1JlZnJlc2goKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIHRoZSByZWxldmFudCBsb2dpbiBVUkwgZm9yIGEgdGhpcmQtcGFydHkgcHJvdmlkZXIuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5yZWRpcmVjdFRvIEEgVVJMIG9yIG1vYmlsZSBhZGRyZXNzIHRvIHNlbmQgdGhlIHVzZXIgdG8gYWZ0ZXIgdGhleSBhcmUgY29uZmlybWVkLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuc2NvcGVzIEEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2Ygc2NvcGVzIGdyYW50ZWQgdG8gdGhlIE9BdXRoIGFwcGxpY2F0aW9uLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMucXVlcnlQYXJhbXMgQW4gb2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyBjb250YWluaW5nIHF1ZXJ5IHBhcmFtZXRlcnMgZ3JhbnRlZCB0byB0aGUgT0F1dGggYXBwbGljYXRpb24uXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIF9nZXRVcmxGb3JQcm92aWRlcih1cmwsIHByb3ZpZGVyLCBvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gW2Bwcm92aWRlcj0ke2VuY29kZVVSSUNvbXBvbmVudChwcm92aWRlcil9YF07XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yZWRpcmVjdFRvKSB7XHJcbiAgICAgICAgICAgIHVybFBhcmFtcy5wdXNoKGByZWRpcmVjdF90bz0ke2VuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLnJlZGlyZWN0VG8pfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNjb3Blcykge1xyXG4gICAgICAgICAgICB1cmxQYXJhbXMucHVzaChgc2NvcGVzPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnMuc2NvcGVzKX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZmxvd1R5cGUgPT09ICdwa2NlJykge1xyXG4gICAgICAgICAgICBjb25zdCBbY29kZUNoYWxsZW5nZSwgY29kZUNoYWxsZW5nZU1ldGhvZF0gPSBhd2FpdCAoMCwgaGVscGVyc18xLmdldENvZGVDaGFsbGVuZ2VBbmRNZXRob2QpKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5KTtcclxuICAgICAgICAgICAgY29uc3QgZmxvd1BhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xyXG4gICAgICAgICAgICAgICAgY29kZV9jaGFsbGVuZ2U6IGAke2VuY29kZVVSSUNvbXBvbmVudChjb2RlQ2hhbGxlbmdlKX1gLFxyXG4gICAgICAgICAgICAgICAgY29kZV9jaGFsbGVuZ2VfbWV0aG9kOiBgJHtlbmNvZGVVUklDb21wb25lbnQoY29kZUNoYWxsZW5nZU1ldGhvZCl9YCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHVybFBhcmFtcy5wdXNoKGZsb3dQYXJhbXMudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucXVlcnlQYXJhbXMpIHtcclxuICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xyXG4gICAgICAgICAgICB1cmxQYXJhbXMucHVzaChxdWVyeS50b1N0cmluZygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5za2lwQnJvd3NlclJlZGlyZWN0KSB7XHJcbiAgICAgICAgICAgIHVybFBhcmFtcy5wdXNoKGBza2lwX2h0dHBfcmVkaXJlY3Q9JHtvcHRpb25zLnNraXBCcm93c2VyUmVkaXJlY3R9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHt1cmx9PyR7dXJsUGFyYW1zLmpvaW4oJyYnKX1gO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgX3VuZW5yb2xsKHBhcmFtcykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBfYTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogc2Vzc2lvbkRhdGEsIGVycm9yOiBzZXNzaW9uRXJyb3IgfSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvcjogc2Vzc2lvbkVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgKDAsIGZldGNoXzEuX3JlcXVlc3QpKHRoaXMuZmV0Y2gsICdERUxFVEUnLCBgJHt0aGlzLnVybH0vZmFjdG9ycy8ke3BhcmFtcy5mYWN0b3JJZH1gLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIGp3dDogKF9hID0gc2Vzc2lvbkRhdGEgPT09IG51bGwgfHwgc2Vzc2lvbkRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlc3Npb25EYXRhLnNlc3Npb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hY2Nlc3NfdG9rZW4sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoKDAsIGVycm9yc18xLmlzQXV0aEVycm9yKShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgX2Vucm9sbChwYXJhbXMpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhOiBzZXNzaW9uRGF0YSwgZXJyb3I6IHNlc3Npb25FcnJvciB9ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb25FcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yOiBzZXNzaW9uRXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBPYmplY3QuYXNzaWduKHsgZnJpZW5kbHlfbmFtZTogcGFyYW1zLmZyaWVuZGx5TmFtZSwgZmFjdG9yX3R5cGU6IHBhcmFtcy5mYWN0b3JUeXBlIH0sIChwYXJhbXMuZmFjdG9yVHlwZSA9PT0gJ3Bob25lJyA/IHsgcGhvbmU6IHBhcmFtcy5waG9uZSB9IDogeyBpc3N1ZXI6IHBhcmFtcy5pc3N1ZXIgfSkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgKDAsIGZldGNoXzEuX3JlcXVlc3QpKHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L2ZhY3RvcnNgLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keSxcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgand0OiAoX2EgPSBzZXNzaW9uRGF0YSA9PT0gbnVsbCB8fCBzZXNzaW9uRGF0YSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2Vzc2lvbkRhdGEuc2Vzc2lvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFjY2Vzc190b2tlbixcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuZmFjdG9yVHlwZSA9PT0gJ3RvdHAnICYmICgoX2IgPSBkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRhdGEudG90cCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnFyX2NvZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS50b3RwLnFyX2NvZGUgPSBgZGF0YTppbWFnZS9zdmcreG1sO3V0Zi04LCR7ZGF0YS50b3RwLnFyX2NvZGV9YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGEsIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc0F1dGhFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICoge0BzZWUgR29UcnVlTUZBQXBpI3ZlcmlmeX1cclxuICAgICAqL1xyXG4gICAgYXN5bmMgX3ZlcmlmeShwYXJhbXMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhOiBzZXNzaW9uRGF0YSwgZXJyb3I6IHNlc3Npb25FcnJvciB9ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3I6IHNlc3Npb25FcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCAoMCwgZmV0Y2hfMS5fcmVxdWVzdCkodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vZmFjdG9ycy8ke3BhcmFtcy5mYWN0b3JJZH0vdmVyaWZ5YCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiB7IGNvZGU6IHBhcmFtcy5jb2RlLCBjaGFsbGVuZ2VfaWQ6IHBhcmFtcy5jaGFsbGVuZ2VJZCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGp3dDogKF9hID0gc2Vzc2lvbkRhdGEgPT09IG51bGwgfHwgc2Vzc2lvbkRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlc3Npb25EYXRhLnNlc3Npb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hY2Nlc3NfdG9rZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKE9iamVjdC5hc3NpZ24oeyBleHBpcmVzX2F0OiBNYXRoLnJvdW5kKERhdGUubm93KCkgLyAxMDAwKSArIGRhdGEuZXhwaXJlc19pbiB9LCBkYXRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ01GQV9DSEFMTEVOR0VfVkVSSUZJRUQnLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGVycm9yc18xLmlzQXV0aEVycm9yKShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICoge0BzZWUgR29UcnVlTUZBQXBpI2NoYWxsZW5nZX1cclxuICAgICAqL1xyXG4gICAgYXN5bmMgX2NoYWxsZW5nZShwYXJhbXMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhOiBzZXNzaW9uRGF0YSwgZXJyb3I6IHNlc3Npb25FcnJvciB9ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3I6IHNlc3Npb25FcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgKDAsIGZldGNoXzEuX3JlcXVlc3QpKHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L2ZhY3RvcnMvJHtwYXJhbXMuZmFjdG9ySWR9L2NoYWxsZW5nZWAsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogeyBjaGFubmVsOiBwYXJhbXMuY2hhbm5lbCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGp3dDogKF9hID0gc2Vzc2lvbkRhdGEgPT09IG51bGwgfHwgc2Vzc2lvbkRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlc3Npb25EYXRhLnNlc3Npb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hY2Nlc3NfdG9rZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNBdXRoRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiB7QHNlZSBHb1RydWVNRkFBcGkjY2hhbGxlbmdlQW5kVmVyaWZ5fVxyXG4gICAgICovXHJcbiAgICBhc3luYyBfY2hhbGxlbmdlQW5kVmVyaWZ5KHBhcmFtcykge1xyXG4gICAgICAgIC8vIGJvdGggX2NoYWxsZW5nZSBhbmQgX3ZlcmlmeSBpbmRlcGVuZGVudGx5IGFjcXVpcmUgdGhlIGxvY2ssIHNvIG5vIG5lZWRcclxuICAgICAgICAvLyB0byBhY3F1aXJlIGl0IGhlcmVcclxuICAgICAgICBjb25zdCB7IGRhdGE6IGNoYWxsZW5nZURhdGEsIGVycm9yOiBjaGFsbGVuZ2VFcnJvciB9ID0gYXdhaXQgdGhpcy5fY2hhbGxlbmdlKHtcclxuICAgICAgICAgICAgZmFjdG9ySWQ6IHBhcmFtcy5mYWN0b3JJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoY2hhbGxlbmdlRXJyb3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3I6IGNoYWxsZW5nZUVycm9yIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl92ZXJpZnkoe1xyXG4gICAgICAgICAgICBmYWN0b3JJZDogcGFyYW1zLmZhY3RvcklkLFxyXG4gICAgICAgICAgICBjaGFsbGVuZ2VJZDogY2hhbGxlbmdlRGF0YS5pZCxcclxuICAgICAgICAgICAgY29kZTogcGFyYW1zLmNvZGUsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHtAc2VlIEdvVHJ1ZU1GQUFwaSNsaXN0RmFjdG9yc31cclxuICAgICAqL1xyXG4gICAgYXN5bmMgX2xpc3RGYWN0b3JzKCkge1xyXG4gICAgICAgIC8vIHVzZSAjZ2V0VXNlciBpbnN0ZWFkIG9mICNfZ2V0VXNlciBhcyB0aGUgZm9ybWVyIGFjcXVpcmVzIGEgbG9ja1xyXG4gICAgICAgIGNvbnN0IHsgZGF0YTogeyB1c2VyIH0sIGVycm9yOiB1c2VyRXJyb3IsIH0gPSBhd2FpdCB0aGlzLmdldFVzZXIoKTtcclxuICAgICAgICBpZiAodXNlckVycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yOiB1c2VyRXJyb3IgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZmFjdG9ycyA9ICh1c2VyID09PSBudWxsIHx8IHVzZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHVzZXIuZmFjdG9ycykgfHwgW107XHJcbiAgICAgICAgY29uc3QgdG90cCA9IGZhY3RvcnMuZmlsdGVyKChmYWN0b3IpID0+IGZhY3Rvci5mYWN0b3JfdHlwZSA9PT0gJ3RvdHAnICYmIGZhY3Rvci5zdGF0dXMgPT09ICd2ZXJpZmllZCcpO1xyXG4gICAgICAgIGNvbnN0IHBob25lID0gZmFjdG9ycy5maWx0ZXIoKGZhY3RvcikgPT4gZmFjdG9yLmZhY3Rvcl90eXBlID09PSAncGhvbmUnICYmIGZhY3Rvci5zdGF0dXMgPT09ICd2ZXJpZmllZCcpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIGFsbDogZmFjdG9ycyxcclxuICAgICAgICAgICAgICAgIHRvdHAsXHJcbiAgICAgICAgICAgICAgICBwaG9uZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICoge0BzZWUgR29UcnVlTUZBQXBpI2dldEF1dGhlbnRpY2F0b3JBc3N1cmFuY2VMZXZlbH1cclxuICAgICAqL1xyXG4gICAgYXN5bmMgX2dldEF1dGhlbnRpY2F0b3JBc3N1cmFuY2VMZXZlbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3VzZVNlc3Npb24oYXN5bmMgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0sIGVycm9yOiBzZXNzaW9uRXJyb3IsIH0gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbkVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3I6IHNlc3Npb25FcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogeyBjdXJyZW50TGV2ZWw6IG51bGwsIG5leHRMZXZlbDogbnVsbCwgY3VycmVudEF1dGhlbnRpY2F0aW9uTWV0aG9kczogW10gfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgcGF5bG9hZCB9ID0gKDAsIGhlbHBlcnNfMS5kZWNvZGVKV1QpKHNlc3Npb24uYWNjZXNzX3Rva2VuKTtcclxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TGV2ZWwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudExldmVsID0gcGF5bG9hZC5hYWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgbmV4dExldmVsID0gY3VycmVudExldmVsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmVyaWZpZWRGYWN0b3JzID0gKF9iID0gKF9hID0gc2Vzc2lvbi51c2VyLmZhY3RvcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5maWx0ZXIoKGZhY3RvcikgPT4gZmFjdG9yLnN0YXR1cyA9PT0gJ3ZlcmlmaWVkJykpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZlcmlmaWVkRmFjdG9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dExldmVsID0gJ2FhbDInO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEF1dGhlbnRpY2F0aW9uTWV0aG9kcyA9IHBheWxvYWQuYW1yIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyBjdXJyZW50TGV2ZWwsIG5leHRMZXZlbCwgY3VycmVudEF1dGhlbnRpY2F0aW9uTWV0aG9kcyB9LCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGFzeW5jIGZldGNoSndrKGtpZCwgandrcyA9IHsga2V5czogW10gfSkge1xyXG4gICAgICAgIC8vIHRyeSBmZXRjaGluZyBmcm9tIHRoZSBzdXBwbGllZCBqd2tzXHJcbiAgICAgICAgbGV0IGp3ayA9IGp3a3Mua2V5cy5maW5kKChrZXkpID0+IGtleS5raWQgPT09IGtpZCk7XHJcbiAgICAgICAgaWYgKGp3aykge1xyXG4gICAgICAgICAgICByZXR1cm4gandrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIC8vIHRyeSBmZXRjaGluZyBmcm9tIGNhY2hlXHJcbiAgICAgICAgandrID0gdGhpcy5qd2tzLmtleXMuZmluZCgoa2V5KSA9PiBrZXkua2lkID09PSBraWQpO1xyXG4gICAgICAgIC8vIGp3ayBleGlzdHMgYW5kIGp3a3MgaXNuJ3Qgc3RhbGVcclxuICAgICAgICBpZiAoandrICYmIHRoaXMuandrc19jYWNoZWRfYXQgKyBjb25zdGFudHNfMS5KV0tTX1RUTCA+IG5vdykge1xyXG4gICAgICAgICAgICByZXR1cm4gandrO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBqd2sgaXNuJ3QgY2FjaGVkIGluIG1lbW9yeSBzbyB3ZSBuZWVkIHRvIGZldGNoIGl0IGZyb20gdGhlIHdlbGwta25vd24gZW5kcG9pbnRcclxuICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCAoMCwgZmV0Y2hfMS5fcmVxdWVzdCkodGhpcy5mZXRjaCwgJ0dFVCcsIGAke3RoaXMudXJsfS8ud2VsbC1rbm93bi9qd2tzLmpzb25gLCB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZGF0YS5rZXlzIHx8IGRhdGEua2V5cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuandrcyA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5qd2tzX2NhY2hlZF9hdCA9IG5vdztcclxuICAgICAgICAvLyBGaW5kIHRoZSBzaWduaW5nIGtleVxyXG4gICAgICAgIGp3ayA9IGRhdGEua2V5cy5maW5kKChrZXkpID0+IGtleS5raWQgPT09IGtpZCk7XHJcbiAgICAgICAgaWYgKCFqd2spIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBqd2s7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEV4dHJhY3RzIHRoZSBKV1QgY2xhaW1zIHByZXNlbnQgaW4gdGhlIGFjY2VzcyB0b2tlbiBieSBmaXJzdCB2ZXJpZnlpbmcgdGhlXHJcbiAgICAgKiBKV1QgYWdhaW5zdCB0aGUgc2VydmVyJ3MgSlNPTiBXZWIgS2V5IFNldCBlbmRwb2ludFxyXG4gICAgICogYC8ud2VsbC1rbm93bi9qd2tzLmpzb25gIHdoaWNoIGlzIG9mdGVuIGNhY2hlZCwgcmVzdWx0aW5nIGluIHNpZ25pZmljYW50bHlcclxuICAgICAqIGZhc3RlciByZXNwb25zZXMuIFByZWZlciB0aGlzIG1ldGhvZCBvdmVyIHtAbGluayAjZ2V0VXNlcn0gd2hpY2ggYWx3YXlzXHJcbiAgICAgKiBzZW5kcyBhIHJlcXVlc3QgdG8gdGhlIEF1dGggc2VydmVyIGZvciBlYWNoIEpXVC5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgcHJvamVjdCBpcyBub3QgdXNpbmcgYW4gYXN5bW1ldHJpYyBKV1Qgc2lnbmluZyBrZXkgKGxpa2UgRUNDIG9yXHJcbiAgICAgKiBSU0EpIGl0IGFsd2F5cyBzZW5kcyBhIHJlcXVlc3QgdG8gdGhlIEF1dGggc2VydmVyIChzaW1pbGFyIHRvIHtAbGlua1xyXG4gICAgICogI2dldFVzZXJ9KSB0byB2ZXJpZnkgdGhlIEpXVC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gand0IEFuIG9wdGlvbmFsIHNwZWNpZmljIEpXVCB5b3Ugd2lzaCB0byB2ZXJpZnksIG5vdCB0aGUgb25lIHlvdVxyXG4gICAgICogICAgICAgICAgICBjYW4gb2J0YWluIGZyb20ge0BsaW5rICNnZXRTZXNzaW9ufS5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFZhcmlvdXMgYWRkaXRpb25hbCBvcHRpb25zIHRoYXQgYWxsb3cgeW91IHRvIGN1c3RvbWl6ZSB0aGVcclxuICAgICAqICAgICAgICAgICAgICAgIGJlaGF2aW9yIG9mIHRoaXMgbWV0aG9kLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRDbGFpbXMoand0LCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgdG9rZW4gPSBqd3Q7XHJcbiAgICAgICAgICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yIHx8ICFkYXRhLnNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdG9rZW4gPSBkYXRhLnNlc3Npb24uYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHsgaGVhZGVyLCBwYXlsb2FkLCBzaWduYXR1cmUsIHJhdzogeyBoZWFkZXI6IHJhd0hlYWRlciwgcGF5bG9hZDogcmF3UGF5bG9hZCB9LCB9ID0gKDAsIGhlbHBlcnNfMS5kZWNvZGVKV1QpKHRva2VuKTtcclxuICAgICAgICAgICAgaWYgKCEob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFsbG93RXhwaXJlZCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIFJlamVjdCBleHBpcmVkIEpXVHMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIGp3dCBhcmd1bWVudCB3YXMgcGFzc2VkXHJcbiAgICAgICAgICAgICAgICAoMCwgaGVscGVyc18xLnZhbGlkYXRlRXhwKShwYXlsb2FkLmV4cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2lnbmluZ0tleSA9ICFoZWFkZXIuYWxnIHx8XHJcbiAgICAgICAgICAgICAgICBoZWFkZXIuYWxnLnN0YXJ0c1dpdGgoJ0hTJykgfHxcclxuICAgICAgICAgICAgICAgICFoZWFkZXIua2lkIHx8XHJcbiAgICAgICAgICAgICAgICAhKCdjcnlwdG8nIGluIGdsb2JhbFRoaXMgJiYgJ3N1YnRsZScgaW4gZ2xvYmFsVGhpcy5jcnlwdG8pXHJcbiAgICAgICAgICAgICAgICA/IG51bGxcclxuICAgICAgICAgICAgICAgIDogYXdhaXQgdGhpcy5mZXRjaEp3ayhoZWFkZXIua2lkLCAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmtleXMpID8geyBrZXlzOiBvcHRpb25zLmtleXMgfSA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5qd2tzKTtcclxuICAgICAgICAgICAgLy8gSWYgc3ltbWV0cmljIGFsZ29yaXRobSBvciBXZWJDcnlwdG8gQVBJIGlzIHVuYXZhaWxhYmxlLCBmYWxsYmFjayB0byBnZXRVc2VyKClcclxuICAgICAgICAgICAgaWYgKCFzaWduaW5nS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCB0aGlzLmdldFVzZXIodG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBnZXRVc2VyIHN1Y2NlZWRzIHNvIHRoZSBjbGFpbXMgaW4gdGhlIEpXVCBjYW4gYmUgdHJ1c3RlZFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYWltczogcGF5bG9hZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYWxnb3JpdGhtID0gKDAsIGhlbHBlcnNfMS5nZXRBbGdvcml0aG0pKGhlYWRlci5hbGcpO1xyXG4gICAgICAgICAgICAvLyBDb252ZXJ0IEpXSyB0byBDcnlwdG9LZXlcclxuICAgICAgICAgICAgY29uc3QgcHVibGljS2V5ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoJ2p3aycsIHNpZ25pbmdLZXksIGFsZ29yaXRobSwgdHJ1ZSwgW1xyXG4gICAgICAgICAgICAgICAgJ3ZlcmlmeScsXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAvLyBWZXJpZnkgdGhlIHNpZ25hdHVyZVxyXG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gYXdhaXQgY3J5cHRvLnN1YnRsZS52ZXJpZnkoYWxnb3JpdGhtLCBwdWJsaWNLZXksIHNpZ25hdHVyZSwgKDAsIGJhc2U2NHVybF8xLnN0cmluZ1RvVWludDhBcnJheSkoYCR7cmF3SGVhZGVyfS4ke3Jhd1BheWxvYWR9YCkpO1xyXG4gICAgICAgICAgICBpZiAoIWlzVmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BdXRoSW52YWxpZEp3dEVycm9yKCdJbnZhbGlkIEpXVCBzaWduYXR1cmUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBJZiB2ZXJpZmljYXRpb24gc3VjY2VlZHMsIGRlY29kZSBhbmQgcmV0dXJuIGNsYWltc1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYWltczogcGF5bG9hZCxcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc0F1dGhFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSBHb1RydWVDbGllbnQ7XHJcbkdvVHJ1ZUNsaWVudC5uZXh0SW5zdGFuY2VJRCA9IDA7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUdvVHJ1ZUNsaWVudC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/auth-js/dist/main/GoTrueClient.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/auth-js/dist/main/index.js":
/*!***********************************************************!*\
!*** ./node_modules/@supabase/auth-js/dist/main/index.js ***!
\***********************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\r\n};\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.processLock = exports.lockInternals = exports.NavigatorLockAcquireTimeoutError = exports.navigatorLock = exports.AuthClient = exports.AuthAdminApi = exports.GoTrueClient = exports.GoTrueAdminApi = void 0;\r\nconst GoTrueAdminApi_1 = __importDefault(__webpack_require__(/*! ./GoTrueAdminApi */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/GoTrueAdminApi.js\"));\r\nexports.GoTrueAdminApi = GoTrueAdminApi_1.default;\r\nconst GoTrueClient_1 = __importDefault(__webpack_require__(/*! ./GoTrueClient */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/GoTrueClient.js\"));\r\nexports.GoTrueClient = GoTrueClient_1.default;\r\nconst AuthAdminApi_1 = __importDefault(__webpack_require__(/*! ./AuthAdminApi */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/AuthAdminApi.js\"));\r\nexports.AuthAdminApi = AuthAdminApi_1.default;\r\nconst AuthClient_1 = __importDefault(__webpack_require__(/*! ./AuthClient */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/AuthClient.js\"));\r\nexports.AuthClient = AuthClient_1.default;\r\n__exportStar(__webpack_require__(/*! ./lib/types */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/types.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./lib/errors */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/errors.js\"), exports);\r\nvar locks_1 = __webpack_require__(/*! ./lib/locks */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/locks.js\");\r\nObject.defineProperty(exports, \"navigatorLock\", ({ enumerable: true, get: function () { return locks_1.navigatorLock; } }));\r\nObject.defineProperty(exports, \"NavigatorLockAcquireTimeoutError\", ({ enumerable: true, get: function () { return locks_1.NavigatorLockAcquireTimeoutError; } }));\r\nObject.defineProperty(exports, \"lockInternals\", ({ enumerable: true, get: function () { return locks_1.internals; } }));\r\nObject.defineProperty(exports, \"processLock\", ({ enumerable: true, get: function () { return locks_1.processLock; } }));\r\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9DQUFvQztBQUNuRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsbUJBQW1CLEdBQUcscUJBQXFCLEdBQUcsd0NBQXdDLEdBQUcscUJBQXFCLEdBQUcsa0JBQWtCLEdBQUcsb0JBQW9CLEdBQUcsb0JBQW9CLEdBQUcsc0JBQXNCO0FBQzFNLHlDQUF5QyxtQkFBTyxDQUFDLDRGQUFrQjtBQUNuRSxzQkFBc0I7QUFDdEIsdUNBQXVDLG1CQUFPLENBQUMsd0ZBQWdCO0FBQy9ELG9CQUFvQjtBQUNwQix1Q0FBdUMsbUJBQU8sQ0FBQyx3RkFBZ0I7QUFDL0Qsb0JBQW9CO0FBQ3BCLHFDQUFxQyxtQkFBTyxDQUFDLG9GQUFjO0FBQzNELGtCQUFrQjtBQUNsQixhQUFhLG1CQUFPLENBQUMsa0ZBQWE7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLG9GQUFjO0FBQ25DLGNBQWMsbUJBQU8sQ0FBQyxrRkFBYTtBQUNuQyxpREFBZ0QsRUFBRSxxQ0FBcUMsaUNBQWlDLEVBQUM7QUFDekgsb0VBQW1FLEVBQUUscUNBQXFDLG9EQUFvRCxFQUFDO0FBQy9KLGlEQUFnRCxFQUFFLHFDQUFxQyw2QkFBNkIsRUFBQztBQUNySCwrQ0FBOEMsRUFBRSxxQ0FBcUMsK0JBQStCLEVBQUM7QUFDckgiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL2luZGV4LmpzPzFlODIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pKTtcclxudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XHJcbn07XHJcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5wcm9jZXNzTG9jayA9IGV4cG9ydHMubG9ja0ludGVybmFscyA9IGV4cG9ydHMuTmF2aWdhdG9yTG9ja0FjcXVpcmVUaW1lb3V0RXJyb3IgPSBleHBvcnRzLm5hdmlnYXRvckxvY2sgPSBleHBvcnRzLkF1dGhDbGllbnQgPSBleHBvcnRzLkF1dGhBZG1pbkFwaSA9IGV4cG9ydHMuR29UcnVlQ2xpZW50ID0gZXhwb3J0cy5Hb1RydWVBZG1pbkFwaSA9IHZvaWQgMDtcclxuY29uc3QgR29UcnVlQWRtaW5BcGlfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9Hb1RydWVBZG1pbkFwaVwiKSk7XHJcbmV4cG9ydHMuR29UcnVlQWRtaW5BcGkgPSBHb1RydWVBZG1pbkFwaV8xLmRlZmF1bHQ7XHJcbmNvbnN0IEdvVHJ1ZUNsaWVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0dvVHJ1ZUNsaWVudFwiKSk7XHJcbmV4cG9ydHMuR29UcnVlQ2xpZW50ID0gR29UcnVlQ2xpZW50XzEuZGVmYXVsdDtcclxuY29uc3QgQXV0aEFkbWluQXBpXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vQXV0aEFkbWluQXBpXCIpKTtcclxuZXhwb3J0cy5BdXRoQWRtaW5BcGkgPSBBdXRoQWRtaW5BcGlfMS5kZWZhdWx0O1xyXG5jb25zdCBBdXRoQ2xpZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vQXV0aENsaWVudFwiKSk7XHJcbmV4cG9ydHMuQXV0aENsaWVudCA9IEF1dGhDbGllbnRfMS5kZWZhdWx0O1xyXG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbGliL3R5cGVzXCIpLCBleHBvcnRzKTtcclxuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2xpYi9lcnJvcnNcIiksIGV4cG9ydHMpO1xyXG52YXIgbG9ja3NfMSA9IHJlcXVpcmUoXCIuL2xpYi9sb2Nrc1wiKTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmF2aWdhdG9yTG9ja1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9ja3NfMS5uYXZpZ2F0b3JMb2NrOyB9IH0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOYXZpZ2F0b3JMb2NrQWNxdWlyZVRpbWVvdXRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9ja3NfMS5OYXZpZ2F0b3JMb2NrQWNxdWlyZVRpbWVvdXRFcnJvcjsgfSB9KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG9ja0ludGVybmFsc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9ja3NfMS5pbnRlcm5hbHM7IH0gfSk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInByb2Nlc3NMb2NrXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsb2Nrc18xLnByb2Nlc3NMb2NrOyB9IH0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/auth-js/dist/main/index.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/base64url.js":
/*!*******************************************************************!*\
!*** ./node_modules/@supabase/auth-js/dist/main/lib/base64url.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\n/**\r\n * Avoid modifying this file. It's part of\r\n * https://github.com/supabase-community/base64url-js. Submit all fixes on\r\n * that repo!\r\n */\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.bytesToBase64URL = exports.stringToUint8Array = exports.base64UrlToUint8Array = exports.stringFromUTF8 = exports.stringToUTF8 = exports.codepointToUTF8 = exports.stringFromBase64URL = exports.stringToBase64URL = exports.byteFromBase64URL = exports.byteToBase64URL = void 0;\r\n/**\r\n * An array of characters that encode 6 bits into a Base64-URL alphabet\r\n * character.\r\n */\r\nconst TO_BASE64URL = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'.split('');\r\n/**\r\n * An array of characters that can appear in a Base64-URL encoded string but\r\n * should be ignored.\r\n */\r\nconst IGNORE_BASE64URL = ' \\t\\n\\r='.split('');\r\n/**\r\n * An array of 128 numbers that map a Base64-URL character to 6 bits, or if -2\r\n * used to skip the character, or if -1 used to error out.\r\n */\r\nconst FROM_BASE64URL = (() => {\r\n const charMap = new Array(128);\r\n for (let i = 0; i < charMap.length; i += 1) {\r\n charMap[i] = -1;\r\n }\r\n for (let i = 0; i < IGNORE_BASE64URL.length; i += 1) {\r\n charMap[IGNORE_BASE64URL[i].charCodeAt(0)] = -2;\r\n }\r\n for (let i = 0; i < TO_BASE64URL.length; i += 1) {\r\n charMap[TO_BASE64URL[i].charCodeAt(0)] = i;\r\n }\r\n return charMap;\r\n})();\r\n/**\r\n * Converts a byte to a Base64-URL string.\r\n *\r\n * @param byte The byte to convert, or null to flush at the end of the byte sequence.\r\n * @param state The Base64 conversion state. Pass an initial value of `{ queue: 0, queuedBits: 0 }`.\r\n * @param emit A function called with the next Base64 character when ready.\r\n */\r\nfunction byteToBase64URL(byte, state, emit) {\r\n if (byte !== null) {\r\n state.queue = (state.queue << 8) | byte;\r\n state.queuedBits += 8;\r\n while (state.queuedBits >= 6) {\r\n const pos = (state.queue >> (state.queuedBits - 6)) & 63;\r\n emit(TO_BASE64URL[pos]);\r\n state.queuedBits -= 6;\r\n }\r\n }\r\n else if (state.queuedBits > 0) {\r\n state.queue = state.queue << (6 - state.queuedBits);\r\n state.queuedBits = 6;\r\n while (state.queuedBits >= 6) {\r\n const pos = (state.queue >> (state.queuedBits - 6)) & 63;\r\n emit(TO_BASE64URL[pos]);\r\n state.queuedBits -= 6;\r\n }\r\n }\r\n}\r\nexports.byteToBase64URL = byteToBase64URL;\r\n/**\r\n * Converts a String char code (extracted using `string.charCodeAt(position)`) to a sequence of Base64-URL characters.\r\n *\r\n * @param charCode The char code of the JavaScript string.\r\n * @param state The Base64 state. Pass an initial value of `{ queue: 0, queuedBits: 0 }`.\r\n * @param emit A function called with the next byte.\r\n */\r\nfunction byteFromBase64URL(charCode, state, emit) {\r\n const bits = FROM_BASE64URL[charCode];\r\n if (bits > -1) {\r\n // valid Base64-URL character\r\n state.queue = (state.queue << 6) | bits;\r\n state.queuedBits += 6;\r\n while (state.queuedBits >= 8) {\r\n emit((state.queue >> (state.queuedBits - 8)) & 0xff);\r\n state.queuedBits -= 8;\r\n }\r\n }\r\n else if (bits === -2) {\r\n // ignore spaces, tabs, newlines, =\r\n return;\r\n }\r\n else {\r\n throw new Error(`Invalid Base64-URL character \"${String.fromCharCode(charCode)}\"`);\r\n }\r\n}\r\nexports.byteFromBase64URL = byteFromBase64URL;\r\n/**\r\n * Converts a JavaScript string (which may include any valid character) into a\r\n * Base64-URL encoded string. The string is first encoded in UTF-8 which is\r\n * then encoded as Base64-URL.\r\n *\r\n * @param str The string to convert.\r\n */\r\nfunction stringToBase64URL(str) {\r\n const base64 = [];\r\n const emitter = (char) => {\r\n base64.push(char);\r\n };\r\n const state = { queue: 0, queuedBits: 0 };\r\n stringToUTF8(str, (byte) => {\r\n byteToBase64URL(byte, state, emitter);\r\n });\r\n byteToBase64URL(null, state, emitter);\r\n return base64.join('');\r\n}\r\nexports.stringToBase64URL = stringToBase64URL;\r\n/**\r\n * Converts a Base64-URL encoded string into a JavaScript string. It is assumed\r\n * that the underlying string has been encoded as UTF-8.\r\n *\r\n * @param str The Base64-URL encoded string.\r\n */\r\nfunction stringFromBase64URL(str) {\r\n const conv = [];\r\n const utf8Emit = (codepoint) => {\r\n conv.push(String.fromCodePoint(codepoint));\r\n };\r\n const utf8State = {\r\n utf8seq: 0,\r\n codepoint: 0,\r\n };\r\n const b64State = { queue: 0, queuedBits: 0 };\r\n const byteEmit = (byte) => {\r\n stringFromUTF8(byte, utf8State, utf8Emit);\r\n };\r\n for (let i = 0; i < str.length; i += 1) {\r\n byteFromBase64URL(str.charCodeAt(i), b64State, byteEmit);\r\n }\r\n return conv.join('');\r\n}\r\nexports.stringFromBase64URL = stringFromBase64URL;\r\n/**\r\n * Converts a Unicode codepoint to a multi-byte UTF-8 sequence.\r\n *\r\n * @param codepoint The Unicode codepoint.\r\n * @param emit Function which will be called for each UTF-8 byte that represents the codepoint.\r\n */\r\nfunction codepointToUTF8(codepoint, emit) {\r\n if (codepoint <= 0x7f) {\r\n emit(codepoint);\r\n return;\r\n }\r\n else if (codepoint <= 0x7ff) {\r\n emit(0xc0 | (codepoint >> 6));\r\n emit(0x80 | (codepoint & 0x3f));\r\n return;\r\n }\r\n else if (codepoint <= 0xffff) {\r\n emit(0xe0 | (codepoint >> 12));\r\n emit(0x80 | ((codepoint >> 6) & 0x3f));\r\n emit(0x80 | (codepoint & 0x3f));\r\n return;\r\n }\r\n else if (codepoint <= 0x10ffff) {\r\n emit(0xf0 | (codepoint >> 18));\r\n emit(0x80 | ((codepoint >> 12) & 0x3f));\r\n emit(0x80 | ((codepoint >> 6) & 0x3f));\r\n emit(0x80 | (codepoint & 0x3f));\r\n return;\r\n }\r\n throw new Error(`Unrecognized Unicode codepoint: ${codepoint.toString(16)}`);\r\n}\r\nexports.codepointToUTF8 = codepointToUTF8;\r\n/**\r\n * Converts a JavaScript string to a sequence of UTF-8 bytes.\r\n *\r\n * @param str The string to convert to UTF-8.\r\n * @param emit Function which will be called for each UTF-8 byte of the string.\r\n */\r\nfunction stringToUTF8(str, emit) {\r\n for (let i = 0; i < str.length; i += 1) {\r\n let codepoint = str.charCodeAt(i);\r\n if (codepoint > 0xd7ff && codepoint <= 0xdbff) {\r\n // most UTF-16 codepoints are Unicode codepoints, except values in this\r\n // range where the next UTF-16 codepoint needs to be combined with the\r\n // current one to get the Unicode codepoint\r\n const highSurrogate = ((codepoint - 0xd800) * 0x400) & 0xffff;\r\n const lowSurrogate = (str.charCodeAt(i + 1) - 0xdc00) & 0xffff;\r\n codepoint = (lowSurrogate | highSurrogate) + 0x10000;\r\n i += 1;\r\n }\r\n codepointToUTF8(codepoint, emit);\r\n }\r\n}\r\nexports.stringToUTF8 = stringToUTF8;\r\n/**\r\n * Converts a UTF-8 byte to a Unicode codepoint.\r\n *\r\n * @param byte The UTF-8 byte next in the sequence.\r\n * @param state The shared state between consecutive UTF-8 bytes in the\r\n * sequence, an object with the shape `{ utf8seq: 0, codepoint: 0 }`.\r\n * @param emit Function which will be called for each codepoint.\r\n */\r\nfunction stringFromUTF8(byte, state, emit) {\r\n if (state.utf8seq === 0) {\r\n if (byte <= 0x7f) {\r\n emit(byte);\r\n return;\r\n }\r\n // count the number of 1 leading bits until you reach 0\r\n for (let leadingBit = 1; leadingBit < 6; leadingBit += 1) {\r\n if (((byte >> (7 - leadingBit)) & 1) === 0) {\r\n state.utf8seq = leadingBit;\r\n break;\r\n }\r\n }\r\n if (state.utf8seq === 2) {\r\n state.codepoint = byte & 31;\r\n }\r\n else if (state.utf8seq === 3) {\r\n state.codepoint = byte & 15;\r\n }\r\n else if (state.utf8seq === 4) {\r\n state.codepoint = byte & 7;\r\n }\r\n else {\r\n throw new Error('Invalid UTF-8 sequence');\r\n }\r\n state.utf8seq -= 1;\r\n }\r\n else if (state.utf8seq > 0) {\r\n if (byte <= 0x7f) {\r\n throw new Error('Invalid UTF-8 sequence');\r\n }\r\n state.codepoint = (state.codepoint << 6) | (byte & 63);\r\n state.utf8seq -= 1;\r\n if (state.utf8seq === 0) {\r\n emit(state.codepoint);\r\n }\r\n }\r\n}\r\nexports.stringFromUTF8 = stringFromUTF8;\r\n/**\r\n * Helper functions to convert different types of strings to Uint8Array\r\n */\r\nfunction base64UrlToUint8Array(str) {\r\n const result = [];\r\n const state = { queue: 0, queuedBits: 0 };\r\n const onByte = (byte) => {\r\n result.push(byte);\r\n };\r\n for (let i = 0; i < str.length; i += 1) {\r\n byteFromBase64URL(str.charCodeAt(i), state, onByte);\r\n }\r\n return new Uint8Array(result);\r\n}\r\nexports.base64UrlToUint8Array = base64UrlToUint8Array;\r\nfunction stringToUint8Array(str) {\r\n const result = [];\r\n stringToUTF8(str, (byte) => result.push(byte));\r\n return new Uint8Array(result);\r\n}\r\nexports.stringToUint8Array = stringToUint8Array;\r\nfunction bytesToBase64URL(bytes) {\r\n const result = [];\r\n const state = { queue: 0, queuedBits: 0 };\r\n const onChar = (char) => {\r\n result.push(char);\r\n };\r\n bytes.forEach((byte) => byteToBase64URL(byte, state, onChar));\r\n // always call with `null` after processing all bytes\r\n byteToBase64URL(null, state, onChar);\r\n return result.join('');\r\n}\r\nexports.bytesToBase64URL = bytesToBase64URL;\r\n//# sourceMappingURL=base64url.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL2xpYi9iYXNlNjR1cmwuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHdCQUF3QixHQUFHLDBCQUEwQixHQUFHLDZCQUE2QixHQUFHLHNCQUFzQixHQUFHLG9CQUFvQixHQUFHLHVCQUF1QixHQUFHLDJCQUEyQixHQUFHLHlCQUF5QixHQUFHLHlCQUF5QixHQUFHLHVCQUF1QjtBQUMvUTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixvQkFBb0I7QUFDeEM7QUFDQTtBQUNBLG9CQUFvQiw2QkFBNkI7QUFDakQ7QUFDQTtBQUNBLG9CQUFvQix5QkFBeUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUVBQXlFLHlCQUF5QjtBQUNsRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCx5QkFBeUI7QUFDdkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELDhCQUE4QjtBQUN2RjtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELHVCQUF1QjtBQUM5RTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCwwQkFBMEI7QUFDaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGdCQUFnQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbWFpbi9saWIvYmFzZTY0dXJsLmpzPzJkYmYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbi8qKlxyXG4gKiBBdm9pZCBtb2RpZnlpbmcgdGhpcyBmaWxlLiBJdCdzIHBhcnQgb2ZcclxuICogaHR0cHM6Ly9naXRodWIuY29tL3N1cGFiYXNlLWNvbW11bml0eS9iYXNlNjR1cmwtanMuICBTdWJtaXQgYWxsIGZpeGVzIG9uXHJcbiAqIHRoYXQgcmVwbyFcclxuICovXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5ieXRlc1RvQmFzZTY0VVJMID0gZXhwb3J0cy5zdHJpbmdUb1VpbnQ4QXJyYXkgPSBleHBvcnRzLmJhc2U2NFVybFRvVWludDhBcnJheSA9IGV4cG9ydHMuc3RyaW5nRnJvbVVURjggPSBleHBvcnRzLnN0cmluZ1RvVVRGOCA9IGV4cG9ydHMuY29kZXBvaW50VG9VVEY4ID0gZXhwb3J0cy5zdHJpbmdGcm9tQmFzZTY0VVJMID0gZXhwb3J0cy5zdHJpbmdUb0Jhc2U2NFVSTCA9IGV4cG9ydHMuYnl0ZUZyb21CYXNlNjRVUkwgPSBleHBvcnRzLmJ5dGVUb0Jhc2U2NFVSTCA9IHZvaWQgMDtcclxuLyoqXHJcbiAqIEFuIGFycmF5IG9mIGNoYXJhY3RlcnMgdGhhdCBlbmNvZGUgNiBiaXRzIGludG8gYSBCYXNlNjQtVVJMIGFscGhhYmV0XHJcbiAqIGNoYXJhY3Rlci5cclxuICovXHJcbmNvbnN0IFRPX0JBU0U2NFVSTCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fJy5zcGxpdCgnJyk7XHJcbi8qKlxyXG4gKiBBbiBhcnJheSBvZiBjaGFyYWN0ZXJzIHRoYXQgY2FuIGFwcGVhciBpbiBhIEJhc2U2NC1VUkwgZW5jb2RlZCBzdHJpbmcgYnV0XHJcbiAqIHNob3VsZCBiZSBpZ25vcmVkLlxyXG4gKi9cclxuY29uc3QgSUdOT1JFX0JBU0U2NFVSTCA9ICcgXFx0XFxuXFxyPScuc3BsaXQoJycpO1xyXG4vKipcclxuICogQW4gYXJyYXkgb2YgMTI4IG51bWJlcnMgdGhhdCBtYXAgYSBCYXNlNjQtVVJMIGNoYXJhY3RlciB0byA2IGJpdHMsIG9yIGlmIC0yXHJcbiAqIHVzZWQgdG8gc2tpcCB0aGUgY2hhcmFjdGVyLCBvciBpZiAtMSB1c2VkIHRvIGVycm9yIG91dC5cclxuICovXHJcbmNvbnN0IEZST01fQkFTRTY0VVJMID0gKCgpID0+IHtcclxuICAgIGNvbnN0IGNoYXJNYXAgPSBuZXcgQXJyYXkoMTI4KTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhck1hcC5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgIGNoYXJNYXBbaV0gPSAtMTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgSUdOT1JFX0JBU0U2NFVSTC5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgIGNoYXJNYXBbSUdOT1JFX0JBU0U2NFVSTFtpXS5jaGFyQ29kZUF0KDApXSA9IC0yO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBUT19CQVNFNjRVUkwubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICBjaGFyTWFwW1RPX0JBU0U2NFVSTFtpXS5jaGFyQ29kZUF0KDApXSA9IGk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2hhck1hcDtcclxufSkoKTtcclxuLyoqXHJcbiAqIENvbnZlcnRzIGEgYnl0ZSB0byBhIEJhc2U2NC1VUkwgc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gYnl0ZSBUaGUgYnl0ZSB0byBjb252ZXJ0LCBvciBudWxsIHRvIGZsdXNoIGF0IHRoZSBlbmQgb2YgdGhlIGJ5dGUgc2VxdWVuY2UuXHJcbiAqIEBwYXJhbSBzdGF0ZSBUaGUgQmFzZTY0IGNvbnZlcnNpb24gc3RhdGUuIFBhc3MgYW4gaW5pdGlhbCB2YWx1ZSBvZiBgeyBxdWV1ZTogMCwgcXVldWVkQml0czogMCB9YC5cclxuICogQHBhcmFtIGVtaXQgQSBmdW5jdGlvbiBjYWxsZWQgd2l0aCB0aGUgbmV4dCBCYXNlNjQgY2hhcmFjdGVyIHdoZW4gcmVhZHkuXHJcbiAqL1xyXG5mdW5jdGlvbiBieXRlVG9CYXNlNjRVUkwoYnl0ZSwgc3RhdGUsIGVtaXQpIHtcclxuICAgIGlmIChieXRlICE9PSBudWxsKSB7XHJcbiAgICAgICAgc3RhdGUucXVldWUgPSAoc3RhdGUucXVldWUgPDwgOCkgfCBieXRlO1xyXG4gICAgICAgIHN0YXRlLnF1ZXVlZEJpdHMgKz0gODtcclxuICAgICAgICB3aGlsZSAoc3RhdGUucXVldWVkQml0cyA+PSA2KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IChzdGF0ZS5xdWV1ZSA+PiAoc3RhdGUucXVldWVkQml0cyAtIDYpKSAmIDYzO1xyXG4gICAgICAgICAgICBlbWl0KFRPX0JBU0U2NFVSTFtwb3NdKTtcclxuICAgICAgICAgICAgc3RhdGUucXVldWVkQml0cyAtPSA2O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN0YXRlLnF1ZXVlZEJpdHMgPiAwKSB7XHJcbiAgICAgICAgc3RhdGUucXVldWUgPSBzdGF0ZS5xdWV1ZSA8PCAoNiAtIHN0YXRlLnF1ZXVlZEJpdHMpO1xyXG4gICAgICAgIHN0YXRlLnF1ZXVlZEJpdHMgPSA2O1xyXG4gICAgICAgIHdoaWxlIChzdGF0ZS5xdWV1ZWRCaXRzID49IDYpIHtcclxuICAgICAgICAgICAgY29uc3QgcG9zID0gKHN0YXRlLnF1ZXVlID4+IChzdGF0ZS5xdWV1ZWRCaXRzIC0gNikpICYgNjM7XHJcbiAgICAgICAgICAgIGVtaXQoVE9fQkFTRTY0VVJMW3Bvc10pO1xyXG4gICAgICAgICAgICBzdGF0ZS5xdWV1ZWRCaXRzIC09IDY7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuYnl0ZVRvQmFzZTY0VVJMID0gYnl0ZVRvQmFzZTY0VVJMO1xyXG4vKipcclxuICogQ29udmVydHMgYSBTdHJpbmcgY2hhciBjb2RlIChleHRyYWN0ZWQgdXNpbmcgYHN0cmluZy5jaGFyQ29kZUF0KHBvc2l0aW9uKWApIHRvIGEgc2VxdWVuY2Ugb2YgQmFzZTY0LVVSTCBjaGFyYWN0ZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0gY2hhckNvZGUgVGhlIGNoYXIgY29kZSBvZiB0aGUgSmF2YVNjcmlwdCBzdHJpbmcuXHJcbiAqIEBwYXJhbSBzdGF0ZSBUaGUgQmFzZTY0IHN0YXRlLiBQYXNzIGFuIGluaXRpYWwgdmFsdWUgb2YgYHsgcXVldWU6IDAsIHF1ZXVlZEJpdHM6IDAgfWAuXHJcbiAqIEBwYXJhbSBlbWl0IEEgZnVuY3Rpb24gY2FsbGVkIHdpdGggdGhlIG5leHQgYnl0ZS5cclxuICovXHJcbmZ1bmN0aW9uIGJ5dGVGcm9tQmFzZTY0VVJMKGNoYXJDb2RlLCBzdGF0ZSwgZW1pdCkge1xyXG4gICAgY29uc3QgYml0cyA9IEZST01fQkFTRTY0VVJMW2NoYXJDb2RlXTtcclxuICAgIGlmIChiaXRzID4gLTEpIHtcclxuICAgICAgICAvLyB2YWxpZCBCYXNlNjQtVVJMIGNoYXJhY3RlclxyXG4gICAgICAgIHN0YXRlLnF1ZXVlID0gKHN0YXRlLnF1ZXVlIDw8IDYpIHwgYml0cztcclxuICAgICAgICBzdGF0ZS5xdWV1ZWRCaXRzICs9IDY7XHJcbiAgICAgICAgd2hpbGUgKHN0YXRlLnF1ZXVlZEJpdHMgPj0gOCkge1xyXG4gICAgICAgICAgICBlbWl0KChzdGF0ZS5xdWV1ZSA+PiAoc3RhdGUucXVldWVkQml0cyAtIDgpKSAmIDB4ZmYpO1xyXG4gICAgICAgICAgICBzdGF0ZS5xdWV1ZWRCaXRzIC09IDg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoYml0cyA9PT0gLTIpIHtcclxuICAgICAgICAvLyBpZ25vcmUgc3BhY2VzLCB0YWJzLCBuZXdsaW5lcywgPVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBCYXNlNjQtVVJMIGNoYXJhY3RlciBcIiR7U3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSl9XCJgKTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLmJ5dGVGcm9tQmFzZTY0VVJMID0gYnl0ZUZyb21CYXNlNjRVUkw7XHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBhIEphdmFTY3JpcHQgc3RyaW5nICh3aGljaCBtYXkgaW5jbHVkZSBhbnkgdmFsaWQgY2hhcmFjdGVyKSBpbnRvIGFcclxuICogQmFzZTY0LVVSTCBlbmNvZGVkIHN0cmluZy4gVGhlIHN0cmluZyBpcyBmaXJzdCBlbmNvZGVkIGluIFVURi04IHdoaWNoIGlzXHJcbiAqIHRoZW4gZW5jb2RlZCBhcyBCYXNlNjQtVVJMLlxyXG4gKlxyXG4gKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gY29udmVydC5cclxuICovXHJcbmZ1bmN0aW9uIHN0cmluZ1RvQmFzZTY0VVJMKHN0cikge1xyXG4gICAgY29uc3QgYmFzZTY0ID0gW107XHJcbiAgICBjb25zdCBlbWl0dGVyID0gKGNoYXIpID0+IHtcclxuICAgICAgICBiYXNlNjQucHVzaChjaGFyKTtcclxuICAgIH07XHJcbiAgICBjb25zdCBzdGF0ZSA9IHsgcXVldWU6IDAsIHF1ZXVlZEJpdHM6IDAgfTtcclxuICAgIHN0cmluZ1RvVVRGOChzdHIsIChieXRlKSA9PiB7XHJcbiAgICAgICAgYnl0ZVRvQmFzZTY0VVJMKGJ5dGUsIHN0YXRlLCBlbWl0dGVyKTtcclxuICAgIH0pO1xyXG4gICAgYnl0ZVRvQmFzZTY0VVJMKG51bGwsIHN0YXRlLCBlbWl0dGVyKTtcclxuICAgIHJldHVybiBiYXNlNjQuam9pbignJyk7XHJcbn1cclxuZXhwb3J0cy5zdHJpbmdUb0Jhc2U2NFVSTCA9IHN0cmluZ1RvQmFzZTY0VVJMO1xyXG4vKipcclxuICogQ29udmVydHMgYSBCYXNlNjQtVVJMIGVuY29kZWQgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IHN0cmluZy4gSXQgaXMgYXNzdW1lZFxyXG4gKiB0aGF0IHRoZSB1bmRlcmx5aW5nIHN0cmluZyBoYXMgYmVlbiBlbmNvZGVkIGFzIFVURi04LlxyXG4gKlxyXG4gKiBAcGFyYW0gc3RyIFRoZSBCYXNlNjQtVVJMIGVuY29kZWQgc3RyaW5nLlxyXG4gKi9cclxuZnVuY3Rpb24gc3RyaW5nRnJvbUJhc2U2NFVSTChzdHIpIHtcclxuICAgIGNvbnN0IGNvbnYgPSBbXTtcclxuICAgIGNvbnN0IHV0ZjhFbWl0ID0gKGNvZGVwb2ludCkgPT4ge1xyXG4gICAgICAgIGNvbnYucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlcG9pbnQpKTtcclxuICAgIH07XHJcbiAgICBjb25zdCB1dGY4U3RhdGUgPSB7XHJcbiAgICAgICAgdXRmOHNlcTogMCxcclxuICAgICAgICBjb2RlcG9pbnQ6IDAsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgYjY0U3RhdGUgPSB7IHF1ZXVlOiAwLCBxdWV1ZWRCaXRzOiAwIH07XHJcbiAgICBjb25zdCBieXRlRW1pdCA9IChieXRlKSA9PiB7XHJcbiAgICAgICAgc3RyaW5nRnJvbVVURjgoYnl0ZSwgdXRmOFN0YXRlLCB1dGY4RW1pdCk7XHJcbiAgICB9O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICBieXRlRnJvbUJhc2U2NFVSTChzdHIuY2hhckNvZGVBdChpKSwgYjY0U3RhdGUsIGJ5dGVFbWl0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb252LmpvaW4oJycpO1xyXG59XHJcbmV4cG9ydHMuc3RyaW5nRnJvbUJhc2U2NFVSTCA9IHN0cmluZ0Zyb21CYXNlNjRVUkw7XHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBhIFVuaWNvZGUgY29kZXBvaW50IHRvIGEgbXVsdGktYnl0ZSBVVEYtOCBzZXF1ZW5jZS5cclxuICpcclxuICogQHBhcmFtIGNvZGVwb2ludCBUaGUgVW5pY29kZSBjb2RlcG9pbnQuXHJcbiAqIEBwYXJhbSBlbWl0ICAgICAgRnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggVVRGLTggYnl0ZSB0aGF0IHJlcHJlc2VudHMgdGhlIGNvZGVwb2ludC5cclxuICovXHJcbmZ1bmN0aW9uIGNvZGVwb2ludFRvVVRGOChjb2RlcG9pbnQsIGVtaXQpIHtcclxuICAgIGlmIChjb2RlcG9pbnQgPD0gMHg3Zikge1xyXG4gICAgICAgIGVtaXQoY29kZXBvaW50KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb2RlcG9pbnQgPD0gMHg3ZmYpIHtcclxuICAgICAgICBlbWl0KDB4YzAgfCAoY29kZXBvaW50ID4+IDYpKTtcclxuICAgICAgICBlbWl0KDB4ODAgfCAoY29kZXBvaW50ICYgMHgzZikpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvZGVwb2ludCA8PSAweGZmZmYpIHtcclxuICAgICAgICBlbWl0KDB4ZTAgfCAoY29kZXBvaW50ID4+IDEyKSk7XHJcbiAgICAgICAgZW1pdCgweDgwIHwgKChjb2RlcG9pbnQgPj4gNikgJiAweDNmKSk7XHJcbiAgICAgICAgZW1pdCgweDgwIHwgKGNvZGVwb2ludCAmIDB4M2YpKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb2RlcG9pbnQgPD0gMHgxMGZmZmYpIHtcclxuICAgICAgICBlbWl0KDB4ZjAgfCAoY29kZXBvaW50ID4+IDE4KSk7XHJcbiAgICAgICAgZW1pdCgweDgwIHwgKChjb2RlcG9pbnQgPj4gMTIpICYgMHgzZikpO1xyXG4gICAgICAgIGVtaXQoMHg4MCB8ICgoY29kZXBvaW50ID4+IDYpICYgMHgzZikpO1xyXG4gICAgICAgIGVtaXQoMHg4MCB8IChjb2RlcG9pbnQgJiAweDNmKSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgVW5pY29kZSBjb2RlcG9pbnQ6ICR7Y29kZXBvaW50LnRvU3RyaW5nKDE2KX1gKTtcclxufVxyXG5leHBvcnRzLmNvZGVwb2ludFRvVVRGOCA9IGNvZGVwb2ludFRvVVRGODtcclxuLyoqXHJcbiAqIENvbnZlcnRzIGEgSmF2YVNjcmlwdCBzdHJpbmcgdG8gYSBzZXF1ZW5jZSBvZiBVVEYtOCBieXRlcy5cclxuICpcclxuICogQHBhcmFtIHN0ciAgVGhlIHN0cmluZyB0byBjb252ZXJ0IHRvIFVURi04LlxyXG4gKiBAcGFyYW0gZW1pdCBGdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBVVEYtOCBieXRlIG9mIHRoZSBzdHJpbmcuXHJcbiAqL1xyXG5mdW5jdGlvbiBzdHJpbmdUb1VURjgoc3RyLCBlbWl0KSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgIGxldCBjb2RlcG9pbnQgPSBzdHIuY2hhckNvZGVBdChpKTtcclxuICAgICAgICBpZiAoY29kZXBvaW50ID4gMHhkN2ZmICYmIGNvZGVwb2ludCA8PSAweGRiZmYpIHtcclxuICAgICAgICAgICAgLy8gbW9zdCBVVEYtMTYgY29kZXBvaW50cyBhcmUgVW5pY29kZSBjb2RlcG9pbnRzLCBleGNlcHQgdmFsdWVzIGluIHRoaXNcclxuICAgICAgICAgICAgLy8gcmFuZ2Ugd2hlcmUgdGhlIG5leHQgVVRGLTE2IGNvZGVwb2ludCBuZWVkcyB0byBiZSBjb21iaW5lZCB3aXRoIHRoZVxyXG4gICAgICAgICAgICAvLyBjdXJyZW50IG9uZSB0byBnZXQgdGhlIFVuaWNvZGUgY29kZXBvaW50XHJcbiAgICAgICAgICAgIGNvbnN0IGhpZ2hTdXJyb2dhdGUgPSAoKGNvZGVwb2ludCAtIDB4ZDgwMCkgKiAweDQwMCkgJiAweGZmZmY7XHJcbiAgICAgICAgICAgIGNvbnN0IGxvd1N1cnJvZ2F0ZSA9IChzdHIuY2hhckNvZGVBdChpICsgMSkgLSAweGRjMDApICYgMHhmZmZmO1xyXG4gICAgICAgICAgICBjb2RlcG9pbnQgPSAobG93U3Vycm9nYXRlIHwgaGlnaFN1cnJvZ2F0ZSkgKyAweDEwMDAwO1xyXG4gICAgICAgICAgICBpICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvZGVwb2ludFRvVVRGOChjb2RlcG9pbnQsIGVtaXQpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuc3RyaW5nVG9VVEY4ID0gc3RyaW5nVG9VVEY4O1xyXG4vKipcclxuICogQ29udmVydHMgYSBVVEYtOCBieXRlIHRvIGEgVW5pY29kZSBjb2RlcG9pbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBieXRlICBUaGUgVVRGLTggYnl0ZSBuZXh0IGluIHRoZSBzZXF1ZW5jZS5cclxuICogQHBhcmFtIHN0YXRlIFRoZSBzaGFyZWQgc3RhdGUgYmV0d2VlbiBjb25zZWN1dGl2ZSBVVEYtOCBieXRlcyBpbiB0aGVcclxuICogICAgICAgICAgICAgIHNlcXVlbmNlLCBhbiBvYmplY3Qgd2l0aCB0aGUgc2hhcGUgYHsgdXRmOHNlcTogMCwgY29kZXBvaW50OiAwIH1gLlxyXG4gKiBAcGFyYW0gZW1pdCAgRnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggY29kZXBvaW50LlxyXG4gKi9cclxuZnVuY3Rpb24gc3RyaW5nRnJvbVVURjgoYnl0ZSwgc3RhdGUsIGVtaXQpIHtcclxuICAgIGlmIChzdGF0ZS51dGY4c2VxID09PSAwKSB7XHJcbiAgICAgICAgaWYgKGJ5dGUgPD0gMHg3Zikge1xyXG4gICAgICAgICAgICBlbWl0KGJ5dGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgMSBsZWFkaW5nIGJpdHMgdW50aWwgeW91IHJlYWNoIDBcclxuICAgICAgICBmb3IgKGxldCBsZWFkaW5nQml0ID0gMTsgbGVhZGluZ0JpdCA8IDY7IGxlYWRpbmdCaXQgKz0gMSkge1xyXG4gICAgICAgICAgICBpZiAoKChieXRlID4+ICg3IC0gbGVhZGluZ0JpdCkpICYgMSkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlLnV0ZjhzZXEgPSBsZWFkaW5nQml0O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN0YXRlLnV0ZjhzZXEgPT09IDIpIHtcclxuICAgICAgICAgICAgc3RhdGUuY29kZXBvaW50ID0gYnl0ZSAmIDMxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzdGF0ZS51dGY4c2VxID09PSAzKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmNvZGVwb2ludCA9IGJ5dGUgJiAxNTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3RhdGUudXRmOHNlcSA9PT0gNCkge1xyXG4gICAgICAgICAgICBzdGF0ZS5jb2RlcG9pbnQgPSBieXRlICYgNztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBVVEYtOCBzZXF1ZW5jZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdGF0ZS51dGY4c2VxIC09IDE7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzdGF0ZS51dGY4c2VxID4gMCkge1xyXG4gICAgICAgIGlmIChieXRlIDw9IDB4N2YpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFVURi04IHNlcXVlbmNlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXRlLmNvZGVwb2ludCA9IChzdGF0ZS5jb2RlcG9pbnQgPDwgNikgfCAoYnl0ZSAmIDYzKTtcclxuICAgICAgICBzdGF0ZS51dGY4c2VxIC09IDE7XHJcbiAgICAgICAgaWYgKHN0YXRlLnV0ZjhzZXEgPT09IDApIHtcclxuICAgICAgICAgICAgZW1pdChzdGF0ZS5jb2RlcG9pbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5leHBvcnRzLnN0cmluZ0Zyb21VVEY4ID0gc3RyaW5nRnJvbVVURjg7XHJcbi8qKlxyXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHRvIGNvbnZlcnQgZGlmZmVyZW50IHR5cGVzIG9mIHN0cmluZ3MgdG8gVWludDhBcnJheVxyXG4gKi9cclxuZnVuY3Rpb24gYmFzZTY0VXJsVG9VaW50OEFycmF5KHN0cikge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICBjb25zdCBzdGF0ZSA9IHsgcXVldWU6IDAsIHF1ZXVlZEJpdHM6IDAgfTtcclxuICAgIGNvbnN0IG9uQnl0ZSA9IChieXRlKSA9PiB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goYnl0ZSk7XHJcbiAgICB9O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICBieXRlRnJvbUJhc2U2NFVSTChzdHIuY2hhckNvZGVBdChpKSwgc3RhdGUsIG9uQnl0ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocmVzdWx0KTtcclxufVxyXG5leHBvcnRzLmJhc2U2NFVybFRvVWludDhBcnJheSA9IGJhc2U2NFVybFRvVWludDhBcnJheTtcclxuZnVuY3Rpb24gc3RyaW5nVG9VaW50OEFycmF5KHN0cikge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICBzdHJpbmdUb1VURjgoc3RyLCAoYnl0ZSkgPT4gcmVzdWx0LnB1c2goYnl0ZSkpO1xyXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlc3VsdCk7XHJcbn1cclxuZXhwb3J0cy5zdHJpbmdUb1VpbnQ4QXJyYXkgPSBzdHJpbmdUb1VpbnQ4QXJyYXk7XHJcbmZ1bmN0aW9uIGJ5dGVzVG9CYXNlNjRVUkwoYnl0ZXMpIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgY29uc3Qgc3RhdGUgPSB7IHF1ZXVlOiAwLCBxdWV1ZWRCaXRzOiAwIH07XHJcbiAgICBjb25zdCBvbkNoYXIgPSAoY2hhcikgPT4ge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKGNoYXIpO1xyXG4gICAgfTtcclxuICAgIGJ5dGVzLmZvckVhY2goKGJ5dGUpID0+IGJ5dGVUb0Jhc2U2NFVSTChieXRlLCBzdGF0ZSwgb25DaGFyKSk7XHJcbiAgICAvLyBhbHdheXMgY2FsbCB3aXRoIGBudWxsYCBhZnRlciBwcm9jZXNzaW5nIGFsbCBieXRlc1xyXG4gICAgYnl0ZVRvQmFzZTY0VVJMKG51bGwsIHN0YXRlLCBvbkNoYXIpO1xyXG4gICAgcmV0dXJuIHJlc3VsdC5qb2luKCcnKTtcclxufVxyXG5leHBvcnRzLmJ5dGVzVG9CYXNlNjRVUkwgPSBieXRlc1RvQmFzZTY0VVJMO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYXNlNjR1cmwuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/base64url.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/constants.js":
/*!*******************************************************************!*\
!*** ./node_modules/@supabase/auth-js/dist/main/lib/constants.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.JWKS_TTL = exports.BASE64URL_REGEX = exports.API_VERSIONS = exports.API_VERSION_HEADER_NAME = exports.NETWORK_FAILURE = exports.DEFAULT_HEADERS = exports.AUDIENCE = exports.STORAGE_KEY = exports.GOTRUE_URL = exports.EXPIRY_MARGIN_MS = exports.AUTO_REFRESH_TICK_THRESHOLD = exports.AUTO_REFRESH_TICK_DURATION_MS = void 0;\r\nconst version_1 = __webpack_require__(/*! ./version */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/version.js\");\r\n/** Current session will be checked for refresh at this interval. */\r\nexports.AUTO_REFRESH_TICK_DURATION_MS = 30 * 1000;\r\n/**\r\n * A token refresh will be attempted this many ticks before the current session expires. */\r\nexports.AUTO_REFRESH_TICK_THRESHOLD = 3;\r\n/*\r\n * Earliest time before an access token expires that the session should be refreshed.\r\n */\r\nexports.EXPIRY_MARGIN_MS = exports.AUTO_REFRESH_TICK_THRESHOLD * exports.AUTO_REFRESH_TICK_DURATION_MS;\r\nexports.GOTRUE_URL = 'http://localhost:9999';\r\nexports.STORAGE_KEY = 'supabase.auth.token';\r\nexports.AUDIENCE = '';\r\nexports.DEFAULT_HEADERS = { 'X-Client-Info': `gotrue-js/${version_1.version}` };\r\nexports.NETWORK_FAILURE = {\r\n MAX_RETRIES: 10,\r\n RETRY_INTERVAL: 2, // in deciseconds\r\n};\r\nexports.API_VERSION_HEADER_NAME = 'X-Supabase-Api-Version';\r\nexports.API_VERSIONS = {\r\n '2024-01-01': {\r\n timestamp: Date.parse('2024-01-01T00:00:00.0Z'),\r\n name: '2024-01-01',\r\n },\r\n};\r\nexports.BASE64URL_REGEX = /^([a-z0-9_-]{4})*($|[a-z0-9_-]{3}$|[a-z0-9_-]{2}$)$/i;\r\nexports.JWKS_TTL = 10 * 60 * 1000; // 10 minutes\r\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL2xpYi9jb25zdGFudHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsZ0JBQWdCLEdBQUcsdUJBQXVCLEdBQUcsb0JBQW9CLEdBQUcsK0JBQStCLEdBQUcsdUJBQXVCLEdBQUcsdUJBQXVCLEdBQUcsZ0JBQWdCLEdBQUcsbUJBQW1CLEdBQUcsa0JBQWtCLEdBQUcsd0JBQXdCLEdBQUcsbUNBQW1DLEdBQUcscUNBQXFDO0FBQzlULGtCQUFrQixtQkFBTyxDQUFDLGtGQUFXO0FBQ3JDO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCLGtCQUFrQjtBQUNsQixtQkFBbUI7QUFDbkIsZ0JBQWdCO0FBQ2hCLHVCQUF1QixLQUFLLDhCQUE4QixrQkFBa0I7QUFDNUUsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQixvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsdUJBQXVCLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRTtBQUMzRSxnQkFBZ0IsbUJBQW1CO0FBQ25DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbWFpbi9saWIvY29uc3RhbnRzLmpzP2EyOTEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5KV0tTX1RUTCA9IGV4cG9ydHMuQkFTRTY0VVJMX1JFR0VYID0gZXhwb3J0cy5BUElfVkVSU0lPTlMgPSBleHBvcnRzLkFQSV9WRVJTSU9OX0hFQURFUl9OQU1FID0gZXhwb3J0cy5ORVRXT1JLX0ZBSUxVUkUgPSBleHBvcnRzLkRFRkFVTFRfSEVBREVSUyA9IGV4cG9ydHMuQVVESUVOQ0UgPSBleHBvcnRzLlNUT1JBR0VfS0VZID0gZXhwb3J0cy5HT1RSVUVfVVJMID0gZXhwb3J0cy5FWFBJUllfTUFSR0lOX01TID0gZXhwb3J0cy5BVVRPX1JFRlJFU0hfVElDS19USFJFU0hPTEQgPSBleHBvcnRzLkFVVE9fUkVGUkVTSF9USUNLX0RVUkFUSU9OX01TID0gdm9pZCAwO1xyXG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xyXG4vKiogQ3VycmVudCBzZXNzaW9uIHdpbGwgYmUgY2hlY2tlZCBmb3IgcmVmcmVzaCBhdCB0aGlzIGludGVydmFsLiAqL1xyXG5leHBvcnRzLkFVVE9fUkVGUkVTSF9USUNLX0RVUkFUSU9OX01TID0gMzAgKiAxMDAwO1xyXG4vKipcclxuICogQSB0b2tlbiByZWZyZXNoIHdpbGwgYmUgYXR0ZW1wdGVkIHRoaXMgbWFueSB0aWNrcyBiZWZvcmUgdGhlIGN1cnJlbnQgc2Vzc2lvbiBleHBpcmVzLiAqL1xyXG5leHBvcnRzLkFVVE9fUkVGUkVTSF9USUNLX1RIUkVTSE9MRCA9IDM7XHJcbi8qXHJcbiAqIEVhcmxpZXN0IHRpbWUgYmVmb3JlIGFuIGFjY2VzcyB0b2tlbiBleHBpcmVzIHRoYXQgdGhlIHNlc3Npb24gc2hvdWxkIGJlIHJlZnJlc2hlZC5cclxuICovXHJcbmV4cG9ydHMuRVhQSVJZX01BUkdJTl9NUyA9IGV4cG9ydHMuQVVUT19SRUZSRVNIX1RJQ0tfVEhSRVNIT0xEICogZXhwb3J0cy5BVVRPX1JFRlJFU0hfVElDS19EVVJBVElPTl9NUztcclxuZXhwb3J0cy5HT1RSVUVfVVJMID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OSc7XHJcbmV4cG9ydHMuU1RPUkFHRV9LRVkgPSAnc3VwYWJhc2UuYXV0aC50b2tlbic7XHJcbmV4cG9ydHMuQVVESUVOQ0UgPSAnJztcclxuZXhwb3J0cy5ERUZBVUxUX0hFQURFUlMgPSB7ICdYLUNsaWVudC1JbmZvJzogYGdvdHJ1ZS1qcy8ke3ZlcnNpb25fMS52ZXJzaW9ufWAgfTtcclxuZXhwb3J0cy5ORVRXT1JLX0ZBSUxVUkUgPSB7XHJcbiAgICBNQVhfUkVUUklFUzogMTAsXHJcbiAgICBSRVRSWV9JTlRFUlZBTDogMiwgLy8gaW4gZGVjaXNlY29uZHNcclxufTtcclxuZXhwb3J0cy5BUElfVkVSU0lPTl9IRUFERVJfTkFNRSA9ICdYLVN1cGFiYXNlLUFwaS1WZXJzaW9uJztcclxuZXhwb3J0cy5BUElfVkVSU0lPTlMgPSB7XHJcbiAgICAnMjAyNC0wMS0wMSc6IHtcclxuICAgICAgICB0aW1lc3RhbXA6IERhdGUucGFyc2UoJzIwMjQtMDEtMDFUMDA6MDA6MDAuMFonKSxcclxuICAgICAgICBuYW1lOiAnMjAyNC0wMS0wMScsXHJcbiAgICB9LFxyXG59O1xyXG5leHBvcnRzLkJBU0U2NFVSTF9SRUdFWCA9IC9eKFthLXowLTlfLV17NH0pKigkfFthLXowLTlfLV17M30kfFthLXowLTlfLV17Mn0kKSQvaTtcclxuZXhwb3J0cy5KV0tTX1RUTCA9IDEwICogNjAgKiAxMDAwOyAvLyAxMCBtaW51dGVzXHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/constants.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/errors.js":
/*!****************************************************************!*\
!*** ./node_modules/@supabase/auth-js/dist/main/lib/errors.js ***!
\****************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.AuthInvalidJwtError = exports.isAuthWeakPasswordError = exports.AuthWeakPasswordError = exports.isAuthRetryableFetchError = exports.AuthRetryableFetchError = exports.AuthPKCEGrantCodeExchangeError = exports.isAuthImplicitGrantRedirectError = exports.AuthImplicitGrantRedirectError = exports.AuthInvalidCredentialsError = exports.AuthInvalidTokenResponseError = exports.isAuthSessionMissingError = exports.AuthSessionMissingError = exports.CustomAuthError = exports.AuthUnknownError = exports.isAuthApiError = exports.AuthApiError = exports.isAuthError = exports.AuthError = void 0;\r\nclass AuthError extends Error {\r\n constructor(message, status, code) {\r\n super(message);\r\n this.__isAuthError = true;\r\n this.name = 'AuthError';\r\n this.status = status;\r\n this.code = code;\r\n }\r\n}\r\nexports.AuthError = AuthError;\r\nfunction isAuthError(error) {\r\n return typeof error === 'object' && error !== null && '__isAuthError' in error;\r\n}\r\nexports.isAuthError = isAuthError;\r\nclass AuthApiError extends AuthError {\r\n constructor(message, status, code) {\r\n super(message, status, code);\r\n this.name = 'AuthApiError';\r\n this.status = status;\r\n this.code = code;\r\n }\r\n}\r\nexports.AuthApiError = AuthApiError;\r\nfunction isAuthApiError(error) {\r\n return isAuthError(error) && error.name === 'AuthApiError';\r\n}\r\nexports.isAuthApiError = isAuthApiError;\r\nclass AuthUnknownError extends AuthError {\r\n constructor(message, originalError) {\r\n super(message);\r\n this.name = 'AuthUnknownError';\r\n this.originalError = originalError;\r\n }\r\n}\r\nexports.AuthUnknownError = AuthUnknownError;\r\nclass CustomAuthError extends AuthError {\r\n constructor(message, name, status, code) {\r\n super(message, status, code);\r\n this.name = name;\r\n this.status = status;\r\n }\r\n}\r\nexports.CustomAuthError = CustomAuthError;\r\nclass AuthSessionMissingError extends CustomAuthError {\r\n constructor() {\r\n super('Auth session missing!', 'AuthSessionMissingError', 400, undefined);\r\n }\r\n}\r\nexports.AuthSessionMissingError = AuthSessionMissingError;\r\nfunction isAuthSessionMissingError(error) {\r\n return isAuthError(error) && error.name === 'AuthSessionMissingError';\r\n}\r\nexports.isAuthSessionMissingError = isAuthSessionMissingError;\r\nclass AuthInvalidTokenResponseError extends CustomAuthError {\r\n constructor() {\r\n super('Auth session or user missing', 'AuthInvalidTokenResponseError', 500, undefined);\r\n }\r\n}\r\nexports.AuthInvalidTokenResponseError = AuthInvalidTokenResponseError;\r\nclass AuthInvalidCredentialsError extends CustomAuthError {\r\n constructor(message) {\r\n super(message, 'AuthInvalidCredentialsError', 400, undefined);\r\n }\r\n}\r\nexports.AuthInvalidCredentialsError = AuthInvalidCredentialsError;\r\nclass AuthImplicitGrantRedirectError extends CustomAuthError {\r\n constructor(message, details = null) {\r\n super(message, 'AuthImplicitGrantRedirectError', 500, undefined);\r\n this.details = null;\r\n this.details = details;\r\n }\r\n toJSON() {\r\n return {\r\n name: this.name,\r\n message: this.message,\r\n status: this.status,\r\n details: this.details,\r\n };\r\n }\r\n}\r\nexports.AuthImplicitGrantRedirectError = AuthImplicitGrantRedirectError;\r\nfunction isAuthImplicitGrantRedirectError(error) {\r\n return isAuthError(error) && error.name === 'AuthImplicitGrantRedirectError';\r\n}\r\nexports.isAuthImplicitGrantRedirectError = isAuthImplicitGrantRedirectError;\r\nclass AuthPKCEGrantCodeExchangeError extends CustomAuthError {\r\n constructor(message, details = null) {\r\n super(message, 'AuthPKCEGrantCodeExchangeError', 500, undefined);\r\n this.details = null;\r\n this.details = details;\r\n }\r\n toJSON() {\r\n return {\r\n name: this.name,\r\n message: this.message,\r\n status: this.status,\r\n details: this.details,\r\n };\r\n }\r\n}\r\nexports.AuthPKCEGrantCodeExchangeError = AuthPKCEGrantCodeExchangeError;\r\nclass AuthRetryableFetchError extends CustomAuthError {\r\n constructor(message, status) {\r\n super(message, 'AuthRetryableFetchError', status, undefined);\r\n }\r\n}\r\nexports.AuthRetryableFetchError = AuthRetryableFetchError;\r\nfunction isAuthRetryableFetchError(error) {\r\n return isAuthError(error) && error.name === 'AuthRetryableFetchError';\r\n}\r\nexports.isAuthRetryableFetchError = isAuthRetryableFetchError;\r\n/**\r\n * This error is thrown on certain methods when the password used is deemed\r\n * weak. Inspect the reasons to identify what password strength rules are\r\n * inadequate.\r\n */\r\nclass AuthWeakPasswordError extends CustomAuthError {\r\n constructor(message, status, reasons) {\r\n super(message, 'AuthWeakPasswordError', status, 'weak_password');\r\n this.reasons = reasons;\r\n }\r\n}\r\nexports.AuthWeakPasswordError = AuthWeakPasswordError;\r\nfunction isAuthWeakPasswordError(error) {\r\n return isAuthError(error) && error.name === 'AuthWeakPasswordError';\r\n}\r\nexports.isAuthWeakPasswordError = isAuthWeakPasswordError;\r\nclass AuthInvalidJwtError extends CustomAuthError {\r\n constructor(message) {\r\n super(message, 'AuthInvalidJwtError', 400, 'invalid_jwt');\r\n }\r\n}\r\nexports.AuthInvalidJwtError = AuthInvalidJwtError;\r\n//# sourceMappingURL=errors.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL2xpYi9lcnJvcnMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsMkJBQTJCLEdBQUcsK0JBQStCLEdBQUcsNkJBQTZCLEdBQUcsaUNBQWlDLEdBQUcsK0JBQStCLEdBQUcsc0NBQXNDLEdBQUcsd0NBQXdDLEdBQUcsc0NBQXNDLEdBQUcsbUNBQW1DLEdBQUcscUNBQXFDLEdBQUcsaUNBQWlDLEdBQUcsK0JBQStCLEdBQUcsdUJBQXVCLEdBQUcsd0JBQXdCLEdBQUcsc0JBQXNCLEdBQUcsb0JBQW9CLEdBQUcsbUJBQW1CLEdBQUcsaUJBQWlCO0FBQ25rQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbWFpbi9saWIvZXJyb3JzLmpzP2ZhNDEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5BdXRoSW52YWxpZEp3dEVycm9yID0gZXhwb3J0cy5pc0F1dGhXZWFrUGFzc3dvcmRFcnJvciA9IGV4cG9ydHMuQXV0aFdlYWtQYXNzd29yZEVycm9yID0gZXhwb3J0cy5pc0F1dGhSZXRyeWFibGVGZXRjaEVycm9yID0gZXhwb3J0cy5BdXRoUmV0cnlhYmxlRmV0Y2hFcnJvciA9IGV4cG9ydHMuQXV0aFBLQ0VHcmFudENvZGVFeGNoYW5nZUVycm9yID0gZXhwb3J0cy5pc0F1dGhJbXBsaWNpdEdyYW50UmVkaXJlY3RFcnJvciA9IGV4cG9ydHMuQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yID0gZXhwb3J0cy5BdXRoSW52YWxpZENyZWRlbnRpYWxzRXJyb3IgPSBleHBvcnRzLkF1dGhJbnZhbGlkVG9rZW5SZXNwb25zZUVycm9yID0gZXhwb3J0cy5pc0F1dGhTZXNzaW9uTWlzc2luZ0Vycm9yID0gZXhwb3J0cy5BdXRoU2Vzc2lvbk1pc3NpbmdFcnJvciA9IGV4cG9ydHMuQ3VzdG9tQXV0aEVycm9yID0gZXhwb3J0cy5BdXRoVW5rbm93bkVycm9yID0gZXhwb3J0cy5pc0F1dGhBcGlFcnJvciA9IGV4cG9ydHMuQXV0aEFwaUVycm9yID0gZXhwb3J0cy5pc0F1dGhFcnJvciA9IGV4cG9ydHMuQXV0aEVycm9yID0gdm9pZCAwO1xyXG5jbGFzcyBBdXRoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzdGF0dXMsIGNvZGUpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9faXNBdXRoRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICdBdXRoRXJyb3InO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5BdXRoRXJyb3IgPSBBdXRoRXJyb3I7XHJcbmZ1bmN0aW9uIGlzQXV0aEVycm9yKGVycm9yKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiBlcnJvciAhPT0gbnVsbCAmJiAnX19pc0F1dGhFcnJvcicgaW4gZXJyb3I7XHJcbn1cclxuZXhwb3J0cy5pc0F1dGhFcnJvciA9IGlzQXV0aEVycm9yO1xyXG5jbGFzcyBBdXRoQXBpRXJyb3IgZXh0ZW5kcyBBdXRoRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzLCBjb2RlKSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgc3RhdHVzLCBjb2RlKTtcclxuICAgICAgICB0aGlzLm5hbWUgPSAnQXV0aEFwaUVycm9yJztcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcclxuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuQXV0aEFwaUVycm9yID0gQXV0aEFwaUVycm9yO1xyXG5mdW5jdGlvbiBpc0F1dGhBcGlFcnJvcihlcnJvcikge1xyXG4gICAgcmV0dXJuIGlzQXV0aEVycm9yKGVycm9yKSAmJiBlcnJvci5uYW1lID09PSAnQXV0aEFwaUVycm9yJztcclxufVxyXG5leHBvcnRzLmlzQXV0aEFwaUVycm9yID0gaXNBdXRoQXBpRXJyb3I7XHJcbmNsYXNzIEF1dGhVbmtub3duRXJyb3IgZXh0ZW5kcyBBdXRoRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgb3JpZ2luYWxFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICdBdXRoVW5rbm93bkVycm9yJztcclxuICAgICAgICB0aGlzLm9yaWdpbmFsRXJyb3IgPSBvcmlnaW5hbEVycm9yO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuQXV0aFVua25vd25FcnJvciA9IEF1dGhVbmtub3duRXJyb3I7XHJcbmNsYXNzIEN1c3RvbUF1dGhFcnJvciBleHRlbmRzIEF1dGhFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBuYW1lLCBzdGF0dXMsIGNvZGUpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlLCBzdGF0dXMsIGNvZGUpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5DdXN0b21BdXRoRXJyb3IgPSBDdXN0b21BdXRoRXJyb3I7XHJcbmNsYXNzIEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yIGV4dGVuZHMgQ3VzdG9tQXV0aEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCdBdXRoIHNlc3Npb24gbWlzc2luZyEnLCAnQXV0aFNlc3Npb25NaXNzaW5nRXJyb3InLCA0MDAsIHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5BdXRoU2Vzc2lvbk1pc3NpbmdFcnJvciA9IEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yO1xyXG5mdW5jdGlvbiBpc0F1dGhTZXNzaW9uTWlzc2luZ0Vycm9yKGVycm9yKSB7XHJcbiAgICByZXR1cm4gaXNBdXRoRXJyb3IoZXJyb3IpICYmIGVycm9yLm5hbWUgPT09ICdBdXRoU2Vzc2lvbk1pc3NpbmdFcnJvcic7XHJcbn1cclxuZXhwb3J0cy5pc0F1dGhTZXNzaW9uTWlzc2luZ0Vycm9yID0gaXNBdXRoU2Vzc2lvbk1pc3NpbmdFcnJvcjtcclxuY2xhc3MgQXV0aEludmFsaWRUb2tlblJlc3BvbnNlRXJyb3IgZXh0ZW5kcyBDdXN0b21BdXRoRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoJ0F1dGggc2Vzc2lvbiBvciB1c2VyIG1pc3NpbmcnLCAnQXV0aEludmFsaWRUb2tlblJlc3BvbnNlRXJyb3InLCA1MDAsIHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5BdXRoSW52YWxpZFRva2VuUmVzcG9uc2VFcnJvciA9IEF1dGhJbnZhbGlkVG9rZW5SZXNwb25zZUVycm9yO1xyXG5jbGFzcyBBdXRoSW52YWxpZENyZWRlbnRpYWxzRXJyb3IgZXh0ZW5kcyBDdXN0b21BdXRoRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsICdBdXRoSW52YWxpZENyZWRlbnRpYWxzRXJyb3InLCA0MDAsIHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5BdXRoSW52YWxpZENyZWRlbnRpYWxzRXJyb3IgPSBBdXRoSW52YWxpZENyZWRlbnRpYWxzRXJyb3I7XHJcbmNsYXNzIEF1dGhJbXBsaWNpdEdyYW50UmVkaXJlY3RFcnJvciBleHRlbmRzIEN1c3RvbUF1dGhFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBkZXRhaWxzID0gbnVsbCkge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsICdBdXRoSW1wbGljaXRHcmFudFJlZGlyZWN0RXJyb3InLCA1MDAsIHVuZGVmaW5lZCk7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxyXG4gICAgICAgICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxyXG4gICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmRldGFpbHMsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLkF1dGhJbXBsaWNpdEdyYW50UmVkaXJlY3RFcnJvciA9IEF1dGhJbXBsaWNpdEdyYW50UmVkaXJlY3RFcnJvcjtcclxuZnVuY3Rpb24gaXNBdXRoSW1wbGljaXRHcmFudFJlZGlyZWN0RXJyb3IoZXJyb3IpIHtcclxuICAgIHJldHVybiBpc0F1dGhFcnJvcihlcnJvcikgJiYgZXJyb3IubmFtZSA9PT0gJ0F1dGhJbXBsaWNpdEdyYW50UmVkaXJlY3RFcnJvcic7XHJcbn1cclxuZXhwb3J0cy5pc0F1dGhJbXBsaWNpdEdyYW50UmVkaXJlY3RFcnJvciA9IGlzQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yO1xyXG5jbGFzcyBBdXRoUEtDRUdyYW50Q29kZUV4Y2hhbmdlRXJyb3IgZXh0ZW5kcyBDdXN0b21BdXRoRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgZGV0YWlscyA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlLCAnQXV0aFBLQ0VHcmFudENvZGVFeGNoYW5nZUVycm9yJywgNTAwLCB1bmRlZmluZWQpO1xyXG4gICAgICAgIHRoaXMuZGV0YWlscyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcclxuICAgICAgICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcclxuICAgICAgICAgICAgZGV0YWlsczogdGhpcy5kZXRhaWxzLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5BdXRoUEtDRUdyYW50Q29kZUV4Y2hhbmdlRXJyb3IgPSBBdXRoUEtDRUdyYW50Q29kZUV4Y2hhbmdlRXJyb3I7XHJcbmNsYXNzIEF1dGhSZXRyeWFibGVGZXRjaEVycm9yIGV4dGVuZHMgQ3VzdG9tQXV0aEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHN0YXR1cykge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsICdBdXRoUmV0cnlhYmxlRmV0Y2hFcnJvcicsIHN0YXR1cywgdW5kZWZpbmVkKTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLkF1dGhSZXRyeWFibGVGZXRjaEVycm9yID0gQXV0aFJldHJ5YWJsZUZldGNoRXJyb3I7XHJcbmZ1bmN0aW9uIGlzQXV0aFJldHJ5YWJsZUZldGNoRXJyb3IoZXJyb3IpIHtcclxuICAgIHJldHVybiBpc0F1dGhFcnJvcihlcnJvcikgJiYgZXJyb3IubmFtZSA9PT0gJ0F1dGhSZXRyeWFibGVGZXRjaEVycm9yJztcclxufVxyXG5leHBvcnRzLmlzQXV0aFJldHJ5YWJsZUZldGNoRXJyb3IgPSBpc0F1dGhSZXRyeWFibGVGZXRjaEVycm9yO1xyXG4vKipcclxuICogVGhpcyBlcnJvciBpcyB0aHJvd24gb24gY2VydGFpbiBtZXRob2RzIHdoZW4gdGhlIHBhc3N3b3JkIHVzZWQgaXMgZGVlbWVkXHJcbiAqIHdlYWsuIEluc3BlY3QgdGhlIHJlYXNvbnMgdG8gaWRlbnRpZnkgd2hhdCBwYXNzd29yZCBzdHJlbmd0aCBydWxlcyBhcmVcclxuICogaW5hZGVxdWF0ZS5cclxuICovXHJcbmNsYXNzIEF1dGhXZWFrUGFzc3dvcmRFcnJvciBleHRlbmRzIEN1c3RvbUF1dGhFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzdGF0dXMsIHJlYXNvbnMpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlLCAnQXV0aFdlYWtQYXNzd29yZEVycm9yJywgc3RhdHVzLCAnd2Vha19wYXNzd29yZCcpO1xyXG4gICAgICAgIHRoaXMucmVhc29ucyA9IHJlYXNvbnM7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5BdXRoV2Vha1Bhc3N3b3JkRXJyb3IgPSBBdXRoV2Vha1Bhc3N3b3JkRXJyb3I7XHJcbmZ1bmN0aW9uIGlzQXV0aFdlYWtQYXNzd29yZEVycm9yKGVycm9yKSB7XHJcbiAgICByZXR1cm4gaXNBdXRoRXJyb3IoZXJyb3IpICYmIGVycm9yLm5hbWUgPT09ICdBdXRoV2Vha1Bhc3N3b3JkRXJyb3InO1xyXG59XHJcbmV4cG9ydHMuaXNBdXRoV2Vha1Bhc3N3b3JkRXJyb3IgPSBpc0F1dGhXZWFrUGFzc3dvcmRFcnJvcjtcclxuY2xhc3MgQXV0aEludmFsaWRKd3RFcnJvciBleHRlbmRzIEN1c3RvbUF1dGhFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgJ0F1dGhJbnZhbGlkSnd0RXJyb3InLCA0MDAsICdpbnZhbGlkX2p3dCcpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuQXV0aEludmFsaWRKd3RFcnJvciA9IEF1dGhJbnZhbGlkSnd0RXJyb3I7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/errors.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/fetch.js":
/*!***************************************************************!*\
!*** ./node_modules/@supabase/auth-js/dist/main/lib/fetch.js ***!
\***************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __rest = (this && this.__rest) || function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports._noResolveJsonResponse = exports._generateLinkResponse = exports._ssoResponse = exports._userResponse = exports._sessionResponsePassword = exports._sessionResponse = exports._request = exports.handleError = void 0;\r\nconst constants_1 = __webpack_require__(/*! ./constants */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/constants.js\");\r\nconst helpers_1 = __webpack_require__(/*! ./helpers */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/helpers.js\");\r\nconst errors_1 = __webpack_require__(/*! ./errors */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/errors.js\");\r\nconst _getErrorMessage = (err) => err.msg || err.message || err.error_description || err.error || JSON.stringify(err);\r\nconst NETWORK_ERROR_CODES = [502, 503, 504];\r\nasync function handleError(error) {\r\n var _a;\r\n if (!(0, helpers_1.looksLikeFetchResponse)(error)) {\r\n throw new errors_1.AuthRetryableFetchError(_getErrorMessage(error), 0);\r\n }\r\n if (NETWORK_ERROR_CODES.includes(error.status)) {\r\n // status in 500...599 range - server had an error, request might be retryed.\r\n throw new errors_1.AuthRetryableFetchError(_getErrorMessage(error), error.status);\r\n }\r\n let data;\r\n try {\r\n data = await error.json();\r\n }\r\n catch (e) {\r\n throw new errors_1.AuthUnknownError(_getErrorMessage(e), e);\r\n }\r\n let errorCode = undefined;\r\n const responseAPIVersion = (0, helpers_1.parseResponseAPIVersion)(error);\r\n if (responseAPIVersion &&\r\n responseAPIVersion.getTime() >= constants_1.API_VERSIONS['2024-01-01'].timestamp &&\r\n typeof data === 'object' &&\r\n data &&\r\n typeof data.code === 'string') {\r\n errorCode = data.code;\r\n }\r\n else if (typeof data === 'object' && data && typeof data.error_code === 'string') {\r\n errorCode = data.error_code;\r\n }\r\n if (!errorCode) {\r\n // Legacy support for weak password errors, when there were no error codes\r\n if (typeof data === 'object' &&\r\n data &&\r\n typeof data.weak_password === 'object' &&\r\n data.weak_password &&\r\n Array.isArray(data.weak_password.reasons) &&\r\n data.weak_password.reasons.length &&\r\n data.weak_password.reasons.reduce((a, i) => a && typeof i === 'string', true)) {\r\n throw new errors_1.AuthWeakPasswordError(_getErrorMessage(data), error.status, data.weak_password.reasons);\r\n }\r\n }\r\n else if (errorCode === 'weak_password') {\r\n throw new errors_1.AuthWeakPasswordError(_getErrorMessage(data), error.status, ((_a = data.weak_password) === null || _a === void 0 ? void 0 : _a.reasons) || []);\r\n }\r\n else if (errorCode === 'session_not_found') {\r\n // The `session_id` inside the JWT does not correspond to a row in the\r\n // `sessions` table. This usually means the user has signed out, has been\r\n // deleted, or their session has somehow been terminated.\r\n throw new errors_1.AuthSessionMissingError();\r\n }\r\n throw new errors_1.AuthApiError(_getErrorMessage(data), error.status || 500, errorCode);\r\n}\r\nexports.handleError = handleError;\r\nconst _getRequestParams = (method, options, parameters, body) => {\r\n const params = { method, headers: (options === null || options === void 0 ? void 0 : options.headers) || {} };\r\n if (method === 'GET') {\r\n return params;\r\n }\r\n params.headers = Object.assign({ 'Content-Type': 'application/json;charset=UTF-8' }, options === null || options === void 0 ? void 0 : options.headers);\r\n params.body = JSON.stringify(body);\r\n return Object.assign(Object.assign({}, params), parameters);\r\n};\r\nasync function _request(fetcher, method, url, options) {\r\n var _a;\r\n const headers = Object.assign({}, options === null || options === void 0 ? void 0 : options.headers);\r\n if (!headers[constants_1.API_VERSION_HEADER_NAME]) {\r\n headers[constants_1.API_VERSION_HEADER_NAME] = constants_1.API_VERSIONS['2024-01-01'].name;\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.jwt) {\r\n headers['Authorization'] = `Bearer ${options.jwt}`;\r\n }\r\n const qs = (_a = options === null || options === void 0 ? void 0 : options.query) !== null && _a !== void 0 ? _a : {};\r\n if (options === null || options === void 0 ? void 0 : options.redirectTo) {\r\n qs['redirect_to'] = options.redirectTo;\r\n }\r\n const queryString = Object.keys(qs).length ? '?' + new URLSearchParams(qs).toString() : '';\r\n const data = await _handleRequest(fetcher, method, url + queryString, {\r\n headers,\r\n noResolveJson: options === null || options === void 0 ? void 0 : options.noResolveJson,\r\n }, {}, options === null || options === void 0 ? void 0 : options.body);\r\n return (options === null || options === void 0 ? void 0 : options.xform) ? options === null || options === void 0 ? void 0 : options.xform(data) : { data: Object.assign({}, data), error: null };\r\n}\r\nexports._request = _request;\r\nasync function _handleRequest(fetcher, method, url, options, parameters, body) {\r\n const requestParams = _getRequestParams(method, options, parameters, body);\r\n let result;\r\n try {\r\n result = await fetcher(url, Object.assign({}, requestParams));\r\n }\r\n catch (e) {\r\n console.error(e);\r\n // fetch failed, likely due to a network or CORS error\r\n throw new errors_1.AuthRetryableFetchError(_getErrorMessage(e), 0);\r\n }\r\n if (!result.ok) {\r\n await handleError(result);\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.noResolveJson) {\r\n return result;\r\n }\r\n try {\r\n return await result.json();\r\n }\r\n catch (e) {\r\n await handleError(e);\r\n }\r\n}\r\nfunction _sessionResponse(data) {\r\n var _a;\r\n let session = null;\r\n if (hasSession(data)) {\r\n session = Object.assign({}, data);\r\n if (!data.expires_at) {\r\n session.expires_at = (0, helpers_1.expiresAt)(data.expires_in);\r\n }\r\n }\r\n const user = (_a = data.user) !== null && _a !== void 0 ? _a : data;\r\n return { data: { session, user }, error: null };\r\n}\r\nexports._sessionResponse = _sessionResponse;\r\nfunction _sessionResponsePassword(data) {\r\n const response = _sessionResponse(data);\r\n if (!response.error &&\r\n data.weak_password &&\r\n typeof data.weak_password === 'object' &&\r\n Array.isArray(data.weak_password.reasons) &&\r\n data.weak_password.reasons.length &&\r\n data.weak_password.message &&\r\n typeof data.weak_password.message === 'string' &&\r\n data.weak_password.reasons.reduce((a, i) => a && typeof i === 'string', true)) {\r\n response.data.weak_password = data.weak_password;\r\n }\r\n return response;\r\n}\r\nexports._sessionResponsePassword = _sessionResponsePassword;\r\nfunction _userResponse(data) {\r\n var _a;\r\n const user = (_a = data.user) !== null && _a !== void 0 ? _a : data;\r\n return { data: { user }, error: null };\r\n}\r\nexports._userResponse = _userResponse;\r\nfunction _ssoResponse(data) {\r\n return { data, error: null };\r\n}\r\nexports._ssoResponse = _ssoResponse;\r\nfunction _generateLinkResponse(data) {\r\n const { action_link, email_otp, hashed_token, redirect_to, verification_type } = data, rest = __rest(data, [\"action_link\", \"email_otp\", \"hashed_token\", \"redirect_to\", \"verification_type\"]);\r\n const properties = {\r\n action_link,\r\n email_otp,\r\n hashed_token,\r\n redirect_to,\r\n verification_type,\r\n };\r\n const user = Object.assign({}, rest);\r\n return {\r\n data: {\r\n properties,\r\n user,\r\n },\r\n error: null,\r\n };\r\n}\r\nexports._generateLinkResponse = _generateLinkResponse;\r\nfunction _noResolveJsonResponse(data) {\r\n return data;\r\n}\r\nexports._noResolveJsonResponse = _noResolveJsonResponse;\r\n/**\r\n * hasSession checks if the response object contains a valid session\r\n * @param data A response object\r\n * @returns true if a session is in the response\r\n */\r\nfunction hasSession(data) {\r\n return data.access_token && data.refresh_token && data.expires_in;\r\n}\r\n//# sourceMappingURL=fetch.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL2xpYi9mZXRjaC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQsY0FBYztBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDhCQUE4QixHQUFHLDZCQUE2QixHQUFHLG9CQUFvQixHQUFHLHFCQUFxQixHQUFHLGdDQUFnQyxHQUFHLHdCQUF3QixHQUFHLGdCQUFnQixHQUFHLG1CQUFtQjtBQUNwTixvQkFBb0IsbUJBQU8sQ0FBQyxzRkFBYTtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxrRkFBVztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxnRkFBVTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxrQ0FBa0MsZ0JBQWdCO0FBQ3ZGO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxZQUFZO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSTtBQUNULHlKQUF5SixzQkFBc0I7QUFDL0s7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRLGVBQWU7QUFDcEM7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVEsTUFBTTtBQUMzQjtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLGFBQWE7QUFDYjtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBLFlBQVksdUVBQXVFO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbWFpbi9saWIvZmV0Y2guanM/YmZhZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5fbm9SZXNvbHZlSnNvblJlc3BvbnNlID0gZXhwb3J0cy5fZ2VuZXJhdGVMaW5rUmVzcG9uc2UgPSBleHBvcnRzLl9zc29SZXNwb25zZSA9IGV4cG9ydHMuX3VzZXJSZXNwb25zZSA9IGV4cG9ydHMuX3Nlc3Npb25SZXNwb25zZVBhc3N3b3JkID0gZXhwb3J0cy5fc2Vzc2lvblJlc3BvbnNlID0gZXhwb3J0cy5fcmVxdWVzdCA9IGV4cG9ydHMuaGFuZGxlRXJyb3IgPSB2b2lkIDA7XHJcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xyXG5jb25zdCBoZWxwZXJzXzEgPSByZXF1aXJlKFwiLi9oZWxwZXJzXCIpO1xyXG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcclxuY29uc3QgX2dldEVycm9yTWVzc2FnZSA9IChlcnIpID0+IGVyci5tc2cgfHwgZXJyLm1lc3NhZ2UgfHwgZXJyLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGVyci5lcnJvciB8fCBKU09OLnN0cmluZ2lmeShlcnIpO1xyXG5jb25zdCBORVRXT1JLX0VSUk9SX0NPREVTID0gWzUwMiwgNTAzLCA1MDRdO1xyXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVFcnJvcihlcnJvcikge1xyXG4gICAgdmFyIF9hO1xyXG4gICAgaWYgKCEoMCwgaGVscGVyc18xLmxvb2tzTGlrZUZldGNoUmVzcG9uc2UpKGVycm9yKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BdXRoUmV0cnlhYmxlRmV0Y2hFcnJvcihfZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSwgMCk7XHJcbiAgICB9XHJcbiAgICBpZiAoTkVUV09SS19FUlJPUl9DT0RFUy5pbmNsdWRlcyhlcnJvci5zdGF0dXMpKSB7XHJcbiAgICAgICAgLy8gc3RhdHVzIGluIDUwMC4uLjU5OSByYW5nZSAtIHNlcnZlciBoYWQgYW4gZXJyb3IsIHJlcXVlc3QgbWlnaHQgYmUgcmV0cnllZC5cclxuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXV0aFJldHJ5YWJsZUZldGNoRXJyb3IoX2dldEVycm9yTWVzc2FnZShlcnJvciksIGVycm9yLnN0YXR1cyk7XHJcbiAgICB9XHJcbiAgICBsZXQgZGF0YTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgZGF0YSA9IGF3YWl0IGVycm9yLmpzb24oKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkF1dGhVbmtub3duRXJyb3IoX2dldEVycm9yTWVzc2FnZShlKSwgZSk7XHJcbiAgICB9XHJcbiAgICBsZXQgZXJyb3JDb2RlID0gdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgcmVzcG9uc2VBUElWZXJzaW9uID0gKDAsIGhlbHBlcnNfMS5wYXJzZVJlc3BvbnNlQVBJVmVyc2lvbikoZXJyb3IpO1xyXG4gICAgaWYgKHJlc3BvbnNlQVBJVmVyc2lvbiAmJlxyXG4gICAgICAgIHJlc3BvbnNlQVBJVmVyc2lvbi5nZXRUaW1lKCkgPj0gY29uc3RhbnRzXzEuQVBJX1ZFUlNJT05TWycyMDI0LTAxLTAxJ10udGltZXN0YW1wICYmXHJcbiAgICAgICAgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmXHJcbiAgICAgICAgZGF0YSAmJlxyXG4gICAgICAgIHR5cGVvZiBkYXRhLmNvZGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgZXJyb3JDb2RlID0gZGF0YS5jb2RlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIGRhdGEgJiYgdHlwZW9mIGRhdGEuZXJyb3JfY29kZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBlcnJvckNvZGUgPSBkYXRhLmVycm9yX2NvZGU7XHJcbiAgICB9XHJcbiAgICBpZiAoIWVycm9yQ29kZSkge1xyXG4gICAgICAgIC8vIExlZ2FjeSBzdXBwb3J0IGZvciB3ZWFrIHBhc3N3b3JkIGVycm9ycywgd2hlbiB0aGVyZSB3ZXJlIG5vIGVycm9yIGNvZGVzXHJcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICAgICAgICBkYXRhICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBkYXRhLndlYWtfcGFzc3dvcmQgPT09ICdvYmplY3QnICYmXHJcbiAgICAgICAgICAgIGRhdGEud2Vha19wYXNzd29yZCAmJlxyXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGRhdGEud2Vha19wYXNzd29yZC5yZWFzb25zKSAmJlxyXG4gICAgICAgICAgICBkYXRhLndlYWtfcGFzc3dvcmQucmVhc29ucy5sZW5ndGggJiZcclxuICAgICAgICAgICAgZGF0YS53ZWFrX3Bhc3N3b3JkLnJlYXNvbnMucmVkdWNlKChhLCBpKSA9PiBhICYmIHR5cGVvZiBpID09PSAnc3RyaW5nJywgdHJ1ZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkF1dGhXZWFrUGFzc3dvcmRFcnJvcihfZ2V0RXJyb3JNZXNzYWdlKGRhdGEpLCBlcnJvci5zdGF0dXMsIGRhdGEud2Vha19wYXNzd29yZC5yZWFzb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChlcnJvckNvZGUgPT09ICd3ZWFrX3Bhc3N3b3JkJykge1xyXG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BdXRoV2Vha1Bhc3N3b3JkRXJyb3IoX2dldEVycm9yTWVzc2FnZShkYXRhKSwgZXJyb3Iuc3RhdHVzLCAoKF9hID0gZGF0YS53ZWFrX3Bhc3N3b3JkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVhc29ucykgfHwgW10pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXJyb3JDb2RlID09PSAnc2Vzc2lvbl9ub3RfZm91bmQnKSB7XHJcbiAgICAgICAgLy8gVGhlIGBzZXNzaW9uX2lkYCBpbnNpZGUgdGhlIEpXVCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgcm93IGluIHRoZVxyXG4gICAgICAgIC8vIGBzZXNzaW9uc2AgdGFibGUuIFRoaXMgdXN1YWxseSBtZWFucyB0aGUgdXNlciBoYXMgc2lnbmVkIG91dCwgaGFzIGJlZW5cclxuICAgICAgICAvLyBkZWxldGVkLCBvciB0aGVpciBzZXNzaW9uIGhhcyBzb21laG93IGJlZW4gdGVybWluYXRlZC5cclxuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IoKTtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBlcnJvcnNfMS5BdXRoQXBpRXJyb3IoX2dldEVycm9yTWVzc2FnZShkYXRhKSwgZXJyb3Iuc3RhdHVzIHx8IDUwMCwgZXJyb3JDb2RlKTtcclxufVxyXG5leHBvcnRzLmhhbmRsZUVycm9yID0gaGFuZGxlRXJyb3I7XHJcbmNvbnN0IF9nZXRSZXF1ZXN0UGFyYW1zID0gKG1ldGhvZCwgb3B0aW9ucywgcGFyYW1ldGVycywgYm9keSkgPT4ge1xyXG4gICAgY29uc3QgcGFyYW1zID0geyBtZXRob2QsIGhlYWRlcnM6IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuaGVhZGVycykgfHwge30gfTtcclxuICAgIGlmIChtZXRob2QgPT09ICdHRVQnKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcmFtcztcclxuICAgIH1cclxuICAgIHBhcmFtcy5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04JyB9LCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuaGVhZGVycyk7XHJcbiAgICBwYXJhbXMuYm9keSA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKSwgcGFyYW1ldGVycyk7XHJcbn07XHJcbmFzeW5jIGZ1bmN0aW9uIF9yZXF1ZXN0KGZldGNoZXIsIG1ldGhvZCwgdXJsLCBvcHRpb25zKSB7XHJcbiAgICB2YXIgX2E7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmhlYWRlcnMpO1xyXG4gICAgaWYgKCFoZWFkZXJzW2NvbnN0YW50c18xLkFQSV9WRVJTSU9OX0hFQURFUl9OQU1FXSkge1xyXG4gICAgICAgIGhlYWRlcnNbY29uc3RhbnRzXzEuQVBJX1ZFUlNJT05fSEVBREVSX05BTUVdID0gY29uc3RhbnRzXzEuQVBJX1ZFUlNJT05TWycyMDI0LTAxLTAxJ10ubmFtZTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuand0KSB7XHJcbiAgICAgICAgaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke29wdGlvbnMuand0fWA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBxcyA9IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5xdWVyeSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnJlZGlyZWN0VG8pIHtcclxuICAgICAgICBxc1sncmVkaXJlY3RfdG8nXSA9IG9wdGlvbnMucmVkaXJlY3RUbztcclxuICAgIH1cclxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gT2JqZWN0LmtleXMocXMpLmxlbmd0aCA/ICc/JyArIG5ldyBVUkxTZWFyY2hQYXJhbXMocXMpLnRvU3RyaW5nKCkgOiAnJztcclxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBfaGFuZGxlUmVxdWVzdChmZXRjaGVyLCBtZXRob2QsIHVybCArIHF1ZXJ5U3RyaW5nLCB7XHJcbiAgICAgICAgaGVhZGVycyxcclxuICAgICAgICBub1Jlc29sdmVKc29uOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubm9SZXNvbHZlSnNvbixcclxuICAgIH0sIHt9LCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYm9keSk7XHJcbiAgICByZXR1cm4gKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy54Zm9ybSkgPyBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMueGZvcm0oZGF0YSkgOiB7IGRhdGE6IE9iamVjdC5hc3NpZ24oe30sIGRhdGEpLCBlcnJvcjogbnVsbCB9O1xyXG59XHJcbmV4cG9ydHMuX3JlcXVlc3QgPSBfcmVxdWVzdDtcclxuYXN5bmMgZnVuY3Rpb24gX2hhbmRsZVJlcXVlc3QoZmV0Y2hlciwgbWV0aG9kLCB1cmwsIG9wdGlvbnMsIHBhcmFtZXRlcnMsIGJvZHkpIHtcclxuICAgIGNvbnN0IHJlcXVlc3RQYXJhbXMgPSBfZ2V0UmVxdWVzdFBhcmFtcyhtZXRob2QsIG9wdGlvbnMsIHBhcmFtZXRlcnMsIGJvZHkpO1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgZmV0Y2hlcih1cmwsIE9iamVjdC5hc3NpZ24oe30sIHJlcXVlc3RQYXJhbXMpKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAvLyBmZXRjaCBmYWlsZWQsIGxpa2VseSBkdWUgdG8gYSBuZXR3b3JrIG9yIENPUlMgZXJyb3JcclxuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXV0aFJldHJ5YWJsZUZldGNoRXJyb3IoX2dldEVycm9yTWVzc2FnZShlKSwgMCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXJlc3VsdC5vaykge1xyXG4gICAgICAgIGF3YWl0IGhhbmRsZUVycm9yKHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm5vUmVzb2x2ZUpzb24pIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdWx0Lmpzb24oKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgYXdhaXQgaGFuZGxlRXJyb3IoZSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gX3Nlc3Npb25SZXNwb25zZShkYXRhKSB7XHJcbiAgICB2YXIgX2E7XHJcbiAgICBsZXQgc2Vzc2lvbiA9IG51bGw7XHJcbiAgICBpZiAoaGFzU2Vzc2lvbihkYXRhKSkge1xyXG4gICAgICAgIHNlc3Npb24gPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhKTtcclxuICAgICAgICBpZiAoIWRhdGEuZXhwaXJlc19hdCkge1xyXG4gICAgICAgICAgICBzZXNzaW9uLmV4cGlyZXNfYXQgPSAoMCwgaGVscGVyc18xLmV4cGlyZXNBdCkoZGF0YS5leHBpcmVzX2luKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCB1c2VyID0gKF9hID0gZGF0YS51c2VyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkYXRhO1xyXG4gICAgcmV0dXJuIHsgZGF0YTogeyBzZXNzaW9uLCB1c2VyIH0sIGVycm9yOiBudWxsIH07XHJcbn1cclxuZXhwb3J0cy5fc2Vzc2lvblJlc3BvbnNlID0gX3Nlc3Npb25SZXNwb25zZTtcclxuZnVuY3Rpb24gX3Nlc3Npb25SZXNwb25zZVBhc3N3b3JkKGRhdGEpIHtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gX3Nlc3Npb25SZXNwb25zZShkYXRhKTtcclxuICAgIGlmICghcmVzcG9uc2UuZXJyb3IgJiZcclxuICAgICAgICBkYXRhLndlYWtfcGFzc3dvcmQgJiZcclxuICAgICAgICB0eXBlb2YgZGF0YS53ZWFrX3Bhc3N3b3JkID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICAgIEFycmF5LmlzQXJyYXkoZGF0YS53ZWFrX3Bhc3N3b3JkLnJlYXNvbnMpICYmXHJcbiAgICAgICAgZGF0YS53ZWFrX3Bhc3N3b3JkLnJlYXNvbnMubGVuZ3RoICYmXHJcbiAgICAgICAgZGF0YS53ZWFrX3Bhc3N3b3JkLm1lc3NhZ2UgJiZcclxuICAgICAgICB0eXBlb2YgZGF0YS53ZWFrX3Bhc3N3b3JkLm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgZGF0YS53ZWFrX3Bhc3N3b3JkLnJlYXNvbnMucmVkdWNlKChhLCBpKSA9PiBhICYmIHR5cGVvZiBpID09PSAnc3RyaW5nJywgdHJ1ZSkpIHtcclxuICAgICAgICByZXNwb25zZS5kYXRhLndlYWtfcGFzc3dvcmQgPSBkYXRhLndlYWtfcGFzc3dvcmQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbn1cclxuZXhwb3J0cy5fc2Vzc2lvblJlc3BvbnNlUGFzc3dvcmQgPSBfc2Vzc2lvblJlc3BvbnNlUGFzc3dvcmQ7XHJcbmZ1bmN0aW9uIF91c2VyUmVzcG9uc2UoZGF0YSkge1xyXG4gICAgdmFyIF9hO1xyXG4gICAgY29uc3QgdXNlciA9IChfYSA9IGRhdGEudXNlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZGF0YTtcclxuICAgIHJldHVybiB7IGRhdGE6IHsgdXNlciB9LCBlcnJvcjogbnVsbCB9O1xyXG59XHJcbmV4cG9ydHMuX3VzZXJSZXNwb25zZSA9IF91c2VyUmVzcG9uc2U7XHJcbmZ1bmN0aW9uIF9zc29SZXNwb25zZShkYXRhKSB7XHJcbiAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xyXG59XHJcbmV4cG9ydHMuX3Nzb1Jlc3BvbnNlID0gX3Nzb1Jlc3BvbnNlO1xyXG5mdW5jdGlvbiBfZ2VuZXJhdGVMaW5rUmVzcG9uc2UoZGF0YSkge1xyXG4gICAgY29uc3QgeyBhY3Rpb25fbGluaywgZW1haWxfb3RwLCBoYXNoZWRfdG9rZW4sIHJlZGlyZWN0X3RvLCB2ZXJpZmljYXRpb25fdHlwZSB9ID0gZGF0YSwgcmVzdCA9IF9fcmVzdChkYXRhLCBbXCJhY3Rpb25fbGlua1wiLCBcImVtYWlsX290cFwiLCBcImhhc2hlZF90b2tlblwiLCBcInJlZGlyZWN0X3RvXCIsIFwidmVyaWZpY2F0aW9uX3R5cGVcIl0pO1xyXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHtcclxuICAgICAgICBhY3Rpb25fbGluayxcclxuICAgICAgICBlbWFpbF9vdHAsXHJcbiAgICAgICAgaGFzaGVkX3Rva2VuLFxyXG4gICAgICAgIHJlZGlyZWN0X3RvLFxyXG4gICAgICAgIHZlcmlmaWNhdGlvbl90eXBlLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHVzZXIgPSBPYmplY3QuYXNzaWduKHt9LCByZXN0KTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgICB1c2VyLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IG51bGwsXHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydHMuX2dlbmVyYXRlTGlua1Jlc3BvbnNlID0gX2dlbmVyYXRlTGlua1Jlc3BvbnNlO1xyXG5mdW5jdGlvbiBfbm9SZXNvbHZlSnNvblJlc3BvbnNlKGRhdGEpIHtcclxuICAgIHJldHVybiBkYXRhO1xyXG59XHJcbmV4cG9ydHMuX25vUmVzb2x2ZUpzb25SZXNwb25zZSA9IF9ub1Jlc29sdmVKc29uUmVzcG9uc2U7XHJcbi8qKlxyXG4gKiBoYXNTZXNzaW9uIGNoZWNrcyBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGNvbnRhaW5zIGEgdmFsaWQgc2Vzc2lvblxyXG4gKiBAcGFyYW0gZGF0YSBBIHJlc3BvbnNlIG9iamVjdFxyXG4gKiBAcmV0dXJucyB0cnVlIGlmIGEgc2Vzc2lvbiBpcyBpbiB0aGUgcmVzcG9uc2VcclxuICovXHJcbmZ1bmN0aW9uIGhhc1Nlc3Npb24oZGF0YSkge1xyXG4gICAgcmV0dXJuIGRhdGEuYWNjZXNzX3Rva2VuICYmIGRhdGEucmVmcmVzaF90b2tlbiAmJiBkYXRhLmV4cGlyZXNfaW47XHJcbn1cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmV0Y2guanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/fetch.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/helpers.js":
/*!*****************************************************************!*\
!*** ./node_modules/@supabase/auth-js/dist/main/lib/helpers.js ***!
\*****************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.deepClone = exports.userNotAvailableProxy = exports.validateUUID = exports.getAlgorithm = exports.validateExp = exports.parseResponseAPIVersion = exports.getCodeChallengeAndMethod = exports.generatePKCEChallenge = exports.generatePKCEVerifier = exports.retryable = exports.sleep = exports.decodeJWT = exports.Deferred = exports.removeItemAsync = exports.getItemAsync = exports.setItemAsync = exports.looksLikeFetchResponse = exports.resolveFetch = exports.parseParametersFromURL = exports.supportsLocalStorage = exports.isBrowser = exports.uuid = exports.expiresAt = void 0;\r\nconst constants_1 = __webpack_require__(/*! ./constants */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/constants.js\");\r\nconst errors_1 = __webpack_require__(/*! ./errors */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/errors.js\");\r\nconst base64url_1 = __webpack_require__(/*! ./base64url */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/base64url.js\");\r\nfunction expiresAt(expiresIn) {\r\n const timeNow = Math.round(Date.now() / 1000);\r\n return timeNow + expiresIn;\r\n}\r\nexports.expiresAt = expiresAt;\r\nfunction uuid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n const r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n}\r\nexports.uuid = uuid;\r\nconst isBrowser = () => typeof window !== 'undefined' && typeof document !== 'undefined';\r\nexports.isBrowser = isBrowser;\r\nconst localStorageWriteTests = {\r\n tested: false,\r\n writable: false,\r\n};\r\n/**\r\n * Checks whether localStorage is supported on this browser.\r\n */\r\nconst supportsLocalStorage = () => {\r\n if (!(0, exports.isBrowser)()) {\r\n return false;\r\n }\r\n try {\r\n if (typeof globalThis.localStorage !== 'object') {\r\n return false;\r\n }\r\n }\r\n catch (e) {\r\n // DOM exception when accessing `localStorage`\r\n return false;\r\n }\r\n if (localStorageWriteTests.tested) {\r\n return localStorageWriteTests.writable;\r\n }\r\n const randomKey = `lswt-${Math.random()}${Math.random()}`;\r\n try {\r\n globalThis.localStorage.setItem(randomKey, randomKey);\r\n globalThis.localStorage.removeItem(randomKey);\r\n localStorageWriteTests.tested = true;\r\n localStorageWriteTests.writable = true;\r\n }\r\n catch (e) {\r\n // localStorage can't be written to\r\n // https://www.chromium.org/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document\r\n localStorageWriteTests.tested = true;\r\n localStorageWriteTests.writable = false;\r\n }\r\n return localStorageWriteTests.writable;\r\n};\r\nexports.supportsLocalStorage = supportsLocalStorage;\r\n/**\r\n * Extracts parameters encoded in the URL both in the query and fragment.\r\n */\r\nfunction parseParametersFromURL(href) {\r\n const result = {};\r\n const url = new URL(href);\r\n if (url.hash && url.hash[0] === '#') {\r\n try {\r\n const hashSearchParams = new URLSearchParams(url.hash.substring(1));\r\n hashSearchParams.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n }\r\n catch (e) {\r\n // hash is not a query string\r\n }\r\n }\r\n // search parameters take precedence over hash parameters\r\n url.searchParams.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n return result;\r\n}\r\nexports.parseParametersFromURL = parseParametersFromURL;\r\nconst resolveFetch = (customFetch) => {\r\n let _fetch;\r\n if (customFetch) {\r\n _fetch = customFetch;\r\n }\r\n else if (typeof fetch === 'undefined') {\r\n _fetch = (...args) => Promise.resolve().then(() => __importStar(__webpack_require__(/*! @supabase/node-fetch */ \"(ssr)/./node_modules/@supabase/node-fetch/lib/index.js\"))).then(({ default: fetch }) => fetch(...args));\r\n }\r\n else {\r\n _fetch = fetch;\r\n }\r\n return (...args) => _fetch(...args);\r\n};\r\nexports.resolveFetch = resolveFetch;\r\nconst looksLikeFetchResponse = (maybeResponse) => {\r\n return (typeof maybeResponse === 'object' &&\r\n maybeResponse !== null &&\r\n 'status' in maybeResponse &&\r\n 'ok' in maybeResponse &&\r\n 'json' in maybeResponse &&\r\n typeof maybeResponse.json === 'function');\r\n};\r\nexports.looksLikeFetchResponse = looksLikeFetchResponse;\r\n// Storage helpers\r\nconst setItemAsync = async (storage, key, data) => {\r\n await storage.setItem(key, JSON.stringify(data));\r\n};\r\nexports.setItemAsync = setItemAsync;\r\nconst getItemAsync = async (storage, key) => {\r\n const value = await storage.getItem(key);\r\n if (!value) {\r\n return null;\r\n }\r\n try {\r\n return JSON.parse(value);\r\n }\r\n catch (_a) {\r\n return value;\r\n }\r\n};\r\nexports.getItemAsync = getItemAsync;\r\nconst removeItemAsync = async (storage, key) => {\r\n await storage.removeItem(key);\r\n};\r\nexports.removeItemAsync = removeItemAsync;\r\n/**\r\n * A deferred represents some asynchronous work that is not yet finished, which\r\n * may or may not culminate in a value.\r\n * Taken from: https://github.com/mike-north/types/blob/master/src/async.ts\r\n */\r\nclass Deferred {\r\n constructor() {\r\n // eslint-disable-next-line @typescript-eslint/no-extra-semi\r\n ;\r\n this.promise = new Deferred.promiseConstructor((res, rej) => {\r\n // eslint-disable-next-line @typescript-eslint/no-extra-semi\r\n ;\r\n this.resolve = res;\r\n this.reject = rej;\r\n });\r\n }\r\n}\r\nexports.Deferred = Deferred;\r\nDeferred.promiseConstructor = Promise;\r\nfunction decodeJWT(token) {\r\n const parts = token.split('.');\r\n if (parts.length !== 3) {\r\n throw new errors_1.AuthInvalidJwtError('Invalid JWT structure');\r\n }\r\n // Regex checks for base64url format\r\n for (let i = 0; i < parts.length; i++) {\r\n if (!constants_1.BASE64URL_REGEX.test(parts[i])) {\r\n throw new errors_1.AuthInvalidJwtError('JWT not in base64url format');\r\n }\r\n }\r\n const data = {\r\n // using base64url lib\r\n header: JSON.parse((0, base64url_1.stringFromBase64URL)(parts[0])),\r\n payload: JSON.parse((0, base64url_1.stringFromBase64URL)(parts[1])),\r\n signature: (0, base64url_1.base64UrlToUint8Array)(parts[2]),\r\n raw: {\r\n header: parts[0],\r\n payload: parts[1],\r\n },\r\n };\r\n return data;\r\n}\r\nexports.decodeJWT = decodeJWT;\r\n/**\r\n * Creates a promise that resolves to null after some time.\r\n */\r\nasync function sleep(time) {\r\n return await new Promise((accept) => {\r\n setTimeout(() => accept(null), time);\r\n });\r\n}\r\nexports.sleep = sleep;\r\n/**\r\n * Converts the provided async function into a retryable function. Each result\r\n * or thrown error is sent to the isRetryable function which should return true\r\n * if the function should run again.\r\n */\r\nfunction retryable(fn, isRetryable) {\r\n const promise = new Promise((accept, reject) => {\r\n // eslint-disable-next-line @typescript-eslint/no-extra-semi\r\n ;\r\n (async () => {\r\n for (let attempt = 0; attempt < Infinity; attempt++) {\r\n try {\r\n const result = await fn(attempt);\r\n if (!isRetryable(attempt, null, result)) {\r\n accept(result);\r\n return;\r\n }\r\n }\r\n catch (e) {\r\n if (!isRetryable(attempt, e)) {\r\n reject(e);\r\n return;\r\n }\r\n }\r\n }\r\n })();\r\n });\r\n return promise;\r\n}\r\nexports.retryable = retryable;\r\nfunction dec2hex(dec) {\r\n return ('0' + dec.toString(16)).substr(-2);\r\n}\r\n// Functions below taken from: https://stackoverflow.com/questions/63309409/creating-a-code-verifier-and-challenge-for-pkce-auth-on-spotify-api-in-reactjs\r\nfunction generatePKCEVerifier() {\r\n const verifierLength = 56;\r\n const array = new Uint32Array(verifierLength);\r\n if (typeof crypto === 'undefined') {\r\n const charSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';\r\n const charSetLen = charSet.length;\r\n let verifier = '';\r\n for (let i = 0; i < verifierLength; i++) {\r\n verifier += charSet.charAt(Math.floor(Math.random() * charSetLen));\r\n }\r\n return verifier;\r\n }\r\n crypto.getRandomValues(array);\r\n return Array.from(array, dec2hex).join('');\r\n}\r\nexports.generatePKCEVerifier = generatePKCEVerifier;\r\nasync function sha256(randomString) {\r\n const encoder = new TextEncoder();\r\n const encodedData = encoder.encode(randomString);\r\n const hash = await crypto.subtle.digest('SHA-256', encodedData);\r\n const bytes = new Uint8Array(hash);\r\n return Array.from(bytes)\r\n .map((c) => String.fromCharCode(c))\r\n .join('');\r\n}\r\nasync function generatePKCEChallenge(verifier) {\r\n const hasCryptoSupport = typeof crypto !== 'undefined' &&\r\n typeof crypto.subtle !== 'undefined' &&\r\n typeof TextEncoder !== 'undefined';\r\n if (!hasCryptoSupport) {\r\n console.warn('WebCrypto API is not supported. Code challenge method will default to use plain instead of sha256.');\r\n return verifier;\r\n }\r\n const hashed = await sha256(verifier);\r\n return btoa(hashed).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\r\n}\r\nexports.generatePKCEChallenge = generatePKCEChallenge;\r\nasync function getCodeChallengeAndMethod(storage, storageKey, isPasswordRecovery = false) {\r\n const codeVerifier = generatePKCEVerifier();\r\n let storedCodeVerifier = codeVerifier;\r\n if (isPasswordRecovery) {\r\n storedCodeVerifier += '/PASSWORD_RECOVERY';\r\n }\r\n await (0, exports.setItemAsync)(storage, `${storageKey}-code-verifier`, storedCodeVerifier);\r\n const codeChallenge = await generatePKCEChallenge(codeVerifier);\r\n const codeChallengeMethod = codeVerifier === codeChallenge ? 'plain' : 's256';\r\n return [codeChallenge, codeChallengeMethod];\r\n}\r\nexports.getCodeChallengeAndMethod = getCodeChallengeAndMethod;\r\n/** Parses the API version which is 2YYY-MM-DD. */\r\nconst API_VERSION_REGEX = /^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/i;\r\nfunction parseResponseAPIVersion(response) {\r\n const apiVersion = response.headers.get(constants_1.API_VERSION_HEADER_NAME);\r\n if (!apiVersion) {\r\n return null;\r\n }\r\n if (!apiVersion.match(API_VERSION_REGEX)) {\r\n return null;\r\n }\r\n try {\r\n const date = new Date(`${apiVersion}T00:00:00.0Z`);\r\n return date;\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n}\r\nexports.parseResponseAPIVersion = parseResponseAPIVersion;\r\nfunction validateExp(exp) {\r\n if (!exp) {\r\n throw new Error('Missing exp claim');\r\n }\r\n const timeNow = Math.floor(Date.now() / 1000);\r\n if (exp <= timeNow) {\r\n throw new Error('JWT has expired');\r\n }\r\n}\r\nexports.validateExp = validateExp;\r\nfunction getAlgorithm(alg) {\r\n switch (alg) {\r\n case 'RS256':\r\n return {\r\n name: 'RSASSA-PKCS1-v1_5',\r\n hash: { name: 'SHA-256' },\r\n };\r\n case 'ES256':\r\n return {\r\n name: 'ECDSA',\r\n namedCurve: 'P-256',\r\n hash: { name: 'SHA-256' },\r\n };\r\n default:\r\n throw new Error('Invalid alg claim');\r\n }\r\n}\r\nexports.getAlgorithm = getAlgorithm;\r\nconst UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;\r\nfunction validateUUID(str) {\r\n if (!UUID_REGEX.test(str)) {\r\n throw new Error('@supabase/auth-js: Expected parameter to be UUID but is not');\r\n }\r\n}\r\nexports.validateUUID = validateUUID;\r\nfunction userNotAvailableProxy() {\r\n const proxyTarget = {};\r\n return new Proxy(proxyTarget, {\r\n get: (target, prop) => {\r\n if (prop === '__isUserNotAvailableProxy') {\r\n return true;\r\n }\r\n // Preventative check for common problematic symbols during cloning/inspection\r\n // These symbols might be accessed by structuredClone or other internal mechanisms.\r\n if (typeof prop === 'symbol') {\r\n const sProp = prop.toString();\r\n if (sProp === 'Symbol(Symbol.toPrimitive)' ||\r\n sProp === 'Symbol(Symbol.toStringTag)' ||\r\n sProp === 'Symbol(util.inspect.custom)') {\r\n // Node.js util.inspect\r\n return undefined;\r\n }\r\n }\r\n throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Accessing the \"${prop}\" property of the session object is not supported. Please use getUser() instead.`);\r\n },\r\n set: (_target, prop) => {\r\n throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Setting the \"${prop}\" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`);\r\n },\r\n deleteProperty: (_target, prop) => {\r\n throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Deleting the \"${prop}\" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`);\r\n },\r\n });\r\n}\r\nexports.userNotAvailableProxy = userNotAvailableProxy;\r\n/**\r\n * Deep clones a JSON-serializable object using JSON.parse(JSON.stringify(obj)).\r\n * Note: Only works for JSON-safe data.\r\n */\r\nfunction deepClone(obj) {\r\n return JSON.parse(JSON.stringify(obj));\r\n}\r\nexports.deepClone = deepClone;\r\n//# sourceMappingURL=helpers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL2xpYi9oZWxwZXJzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9DQUFvQztBQUNuRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSwwQ0FBMEMsNEJBQTRCO0FBQ3RFLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxpQkFBaUIsR0FBRyw2QkFBNkIsR0FBRyxvQkFBb0IsR0FBRyxvQkFBb0IsR0FBRyxtQkFBbUIsR0FBRywrQkFBK0IsR0FBRyxpQ0FBaUMsR0FBRyw2QkFBNkIsR0FBRyw0QkFBNEIsR0FBRyxpQkFBaUIsR0FBRyxhQUFhLEdBQUcsaUJBQWlCLEdBQUcsZ0JBQWdCLEdBQUcsdUJBQXVCLEdBQUcsb0JBQW9CLEdBQUcsb0JBQW9CLEdBQUcsOEJBQThCLEdBQUcsb0JBQW9CLEdBQUcsOEJBQThCLEdBQUcsNEJBQTRCLEdBQUcsaUJBQWlCLEdBQUcsWUFBWSxHQUFHLGlCQUFpQjtBQUM1akIsb0JBQW9CLG1CQUFPLENBQUMsc0ZBQWE7QUFDekMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQVU7QUFDbkMsb0JBQW9CLG1CQUFPLENBQUMsc0ZBQWE7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxZQUFZO0FBQ1o7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixjQUFjLEVBQUUsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdFQUF3RSxtQkFBTyxDQUFDLG9GQUFzQixZQUFZLGdCQUFnQjtBQUNsSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0Msb0JBQW9CO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixvQkFBb0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsV0FBVztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLG1DQUFtQyxFQUFFO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxXQUFXO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQiw4QkFBOEIsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQUc7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4SkFBOEosS0FBSztBQUNuSyxTQUFTO0FBQ1Q7QUFDQSw0SkFBNEosS0FBSztBQUNqSyxTQUFTO0FBQ1Q7QUFDQSw2SkFBNkosS0FBSztBQUNsSyxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbWFpbi9saWIvaGVscGVycy5qcz9lOTIwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xyXG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcclxuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KSk7XHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufSk7XHJcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuZGVlcENsb25lID0gZXhwb3J0cy51c2VyTm90QXZhaWxhYmxlUHJveHkgPSBleHBvcnRzLnZhbGlkYXRlVVVJRCA9IGV4cG9ydHMuZ2V0QWxnb3JpdGhtID0gZXhwb3J0cy52YWxpZGF0ZUV4cCA9IGV4cG9ydHMucGFyc2VSZXNwb25zZUFQSVZlcnNpb24gPSBleHBvcnRzLmdldENvZGVDaGFsbGVuZ2VBbmRNZXRob2QgPSBleHBvcnRzLmdlbmVyYXRlUEtDRUNoYWxsZW5nZSA9IGV4cG9ydHMuZ2VuZXJhdGVQS0NFVmVyaWZpZXIgPSBleHBvcnRzLnJldHJ5YWJsZSA9IGV4cG9ydHMuc2xlZXAgPSBleHBvcnRzLmRlY29kZUpXVCA9IGV4cG9ydHMuRGVmZXJyZWQgPSBleHBvcnRzLnJlbW92ZUl0ZW1Bc3luYyA9IGV4cG9ydHMuZ2V0SXRlbUFzeW5jID0gZXhwb3J0cy5zZXRJdGVtQXN5bmMgPSBleHBvcnRzLmxvb2tzTGlrZUZldGNoUmVzcG9uc2UgPSBleHBvcnRzLnJlc29sdmVGZXRjaCA9IGV4cG9ydHMucGFyc2VQYXJhbWV0ZXJzRnJvbVVSTCA9IGV4cG9ydHMuc3VwcG9ydHNMb2NhbFN0b3JhZ2UgPSBleHBvcnRzLmlzQnJvd3NlciA9IGV4cG9ydHMudXVpZCA9IGV4cG9ydHMuZXhwaXJlc0F0ID0gdm9pZCAwO1xyXG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcclxuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi9lcnJvcnNcIik7XHJcbmNvbnN0IGJhc2U2NHVybF8xID0gcmVxdWlyZShcIi4vYmFzZTY0dXJsXCIpO1xyXG5mdW5jdGlvbiBleHBpcmVzQXQoZXhwaXJlc0luKSB7XHJcbiAgICBjb25zdCB0aW1lTm93ID0gTWF0aC5yb3VuZChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICByZXR1cm4gdGltZU5vdyArIGV4cGlyZXNJbjtcclxufVxyXG5leHBvcnRzLmV4cGlyZXNBdCA9IGV4cGlyZXNBdDtcclxuZnVuY3Rpb24gdXVpZCgpIHtcclxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgY29uc3QgciA9IChNYXRoLnJhbmRvbSgpICogMTYpIHwgMCwgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4ODtcclxuICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLnV1aWQgPSB1dWlkO1xyXG5jb25zdCBpc0Jyb3dzZXIgPSAoKSA9PiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xyXG5leHBvcnRzLmlzQnJvd3NlciA9IGlzQnJvd3NlcjtcclxuY29uc3QgbG9jYWxTdG9yYWdlV3JpdGVUZXN0cyA9IHtcclxuICAgIHRlc3RlZDogZmFsc2UsXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbn07XHJcbi8qKlxyXG4gKiBDaGVja3Mgd2hldGhlciBsb2NhbFN0b3JhZ2UgaXMgc3VwcG9ydGVkIG9uIHRoaXMgYnJvd3Nlci5cclxuICovXHJcbmNvbnN0IHN1cHBvcnRzTG9jYWxTdG9yYWdlID0gKCkgPT4ge1xyXG4gICAgaWYgKCEoMCwgZXhwb3J0cy5pc0Jyb3dzZXIpKCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5sb2NhbFN0b3JhZ2UgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIERPTSBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcgYGxvY2FsU3RvcmFnZWBcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAobG9jYWxTdG9yYWdlV3JpdGVUZXN0cy50ZXN0ZWQpIHtcclxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlV3JpdGVUZXN0cy53cml0YWJsZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJhbmRvbUtleSA9IGBsc3d0LSR7TWF0aC5yYW5kb20oKX0ke01hdGgucmFuZG9tKCl9YDtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgZ2xvYmFsVGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShyYW5kb21LZXksIHJhbmRvbUtleSk7XHJcbiAgICAgICAgZ2xvYmFsVGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShyYW5kb21LZXkpO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZVdyaXRlVGVzdHMudGVzdGVkID0gdHJ1ZTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2VXcml0ZVRlc3RzLndyaXRhYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgLy8gbG9jYWxTdG9yYWdlIGNhbid0IGJlIHdyaXR0ZW4gdG9cclxuICAgICAgICAvLyBodHRwczovL3d3dy5jaHJvbWl1bS5vcmcvZm9yLXRlc3RlcnMvYnVnLXJlcG9ydGluZy1ndWlkZWxpbmVzL3VuY2F1Z2h0LXNlY3VyaXR5ZXJyb3ItZmFpbGVkLXRvLXJlYWQtdGhlLWxvY2Fsc3RvcmFnZS1wcm9wZXJ0eS1mcm9tLXdpbmRvdy1hY2Nlc3MtaXMtZGVuaWVkLWZvci10aGlzLWRvY3VtZW50XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlV3JpdGVUZXN0cy50ZXN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZVdyaXRlVGVzdHMud3JpdGFibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2VXcml0ZVRlc3RzLndyaXRhYmxlO1xyXG59O1xyXG5leHBvcnRzLnN1cHBvcnRzTG9jYWxTdG9yYWdlID0gc3VwcG9ydHNMb2NhbFN0b3JhZ2U7XHJcbi8qKlxyXG4gKiBFeHRyYWN0cyBwYXJhbWV0ZXJzIGVuY29kZWQgaW4gdGhlIFVSTCBib3RoIGluIHRoZSBxdWVyeSBhbmQgZnJhZ21lbnQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZVBhcmFtZXRlcnNGcm9tVVJMKGhyZWYpIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChocmVmKTtcclxuICAgIGlmICh1cmwuaGFzaCAmJiB1cmwuaGFzaFswXSA9PT0gJyMnKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgaGFzaFNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModXJsLmhhc2guc3Vic3RyaW5nKDEpKTtcclxuICAgICAgICAgICAgaGFzaFNlYXJjaFBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gaGFzaCBpcyBub3QgYSBxdWVyeSBzdHJpbmdcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBzZWFyY2ggcGFyYW1ldGVycyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBoYXNoIHBhcmFtZXRlcnNcclxuICAgIHVybC5zZWFyY2hQYXJhbXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuZXhwb3J0cy5wYXJzZVBhcmFtZXRlcnNGcm9tVVJMID0gcGFyc2VQYXJhbWV0ZXJzRnJvbVVSTDtcclxuY29uc3QgcmVzb2x2ZUZldGNoID0gKGN1c3RvbUZldGNoKSA9PiB7XHJcbiAgICBsZXQgX2ZldGNoO1xyXG4gICAgaWYgKGN1c3RvbUZldGNoKSB7XHJcbiAgICAgICAgX2ZldGNoID0gY3VzdG9tRmV0Y2g7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZmV0Y2ggPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgX2ZldGNoID0gKC4uLmFyZ3MpID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gX19pbXBvcnRTdGFyKHJlcXVpcmUoJ0BzdXBhYmFzZS9ub2RlLWZldGNoJykpKS50aGVuKCh7IGRlZmF1bHQ6IGZldGNoIH0pID0+IGZldGNoKC4uLmFyZ3MpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIF9mZXRjaCA9IGZldGNoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICguLi5hcmdzKSA9PiBfZmV0Y2goLi4uYXJncyk7XHJcbn07XHJcbmV4cG9ydHMucmVzb2x2ZUZldGNoID0gcmVzb2x2ZUZldGNoO1xyXG5jb25zdCBsb29rc0xpa2VGZXRjaFJlc3BvbnNlID0gKG1heWJlUmVzcG9uc2UpID0+IHtcclxuICAgIHJldHVybiAodHlwZW9mIG1heWJlUmVzcG9uc2UgPT09ICdvYmplY3QnICYmXHJcbiAgICAgICAgbWF5YmVSZXNwb25zZSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICdzdGF0dXMnIGluIG1heWJlUmVzcG9uc2UgJiZcclxuICAgICAgICAnb2snIGluIG1heWJlUmVzcG9uc2UgJiZcclxuICAgICAgICAnanNvbicgaW4gbWF5YmVSZXNwb25zZSAmJlxyXG4gICAgICAgIHR5cGVvZiBtYXliZVJlc3BvbnNlLmpzb24gPT09ICdmdW5jdGlvbicpO1xyXG59O1xyXG5leHBvcnRzLmxvb2tzTGlrZUZldGNoUmVzcG9uc2UgPSBsb29rc0xpa2VGZXRjaFJlc3BvbnNlO1xyXG4vLyBTdG9yYWdlIGhlbHBlcnNcclxuY29uc3Qgc2V0SXRlbUFzeW5jID0gYXN5bmMgKHN0b3JhZ2UsIGtleSwgZGF0YSkgPT4ge1xyXG4gICAgYXdhaXQgc3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG59O1xyXG5leHBvcnRzLnNldEl0ZW1Bc3luYyA9IHNldEl0ZW1Bc3luYztcclxuY29uc3QgZ2V0SXRlbUFzeW5jID0gYXN5bmMgKHN0b3JhZ2UsIGtleSkgPT4ge1xyXG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCBzdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKF9hKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG5leHBvcnRzLmdldEl0ZW1Bc3luYyA9IGdldEl0ZW1Bc3luYztcclxuY29uc3QgcmVtb3ZlSXRlbUFzeW5jID0gYXN5bmMgKHN0b3JhZ2UsIGtleSkgPT4ge1xyXG4gICAgYXdhaXQgc3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbn07XHJcbmV4cG9ydHMucmVtb3ZlSXRlbUFzeW5jID0gcmVtb3ZlSXRlbUFzeW5jO1xyXG4vKipcclxuICogQSBkZWZlcnJlZCByZXByZXNlbnRzIHNvbWUgYXN5bmNocm9ub3VzIHdvcmsgdGhhdCBpcyBub3QgeWV0IGZpbmlzaGVkLCB3aGljaFxyXG4gKiBtYXkgb3IgbWF5IG5vdCBjdWxtaW5hdGUgaW4gYSB2YWx1ZS5cclxuICogVGFrZW4gZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL21pa2Utbm9ydGgvdHlwZXMvYmxvYi9tYXN0ZXIvc3JjL2FzeW5jLnRzXHJcbiAqL1xyXG5jbGFzcyBEZWZlcnJlZCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4dHJhLXNlbWlcclxuICAgICAgICA7XHJcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IERlZmVycmVkLnByb21pc2VDb25zdHJ1Y3RvcigocmVzLCByZWopID0+IHtcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHRyYS1zZW1pXHJcbiAgICAgICAgICAgIDtcclxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlID0gcmVzO1xyXG4gICAgICAgICAgICB0aGlzLnJlamVjdCA9IHJlajtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLkRlZmVycmVkID0gRGVmZXJyZWQ7XHJcbkRlZmVycmVkLnByb21pc2VDb25zdHJ1Y3RvciA9IFByb21pc2U7XHJcbmZ1bmN0aW9uIGRlY29kZUpXVCh0b2tlbikge1xyXG4gICAgY29uc3QgcGFydHMgPSB0b2tlbi5zcGxpdCgnLicpO1xyXG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykge1xyXG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BdXRoSW52YWxpZEp3dEVycm9yKCdJbnZhbGlkIEpXVCBzdHJ1Y3R1cmUnKTtcclxuICAgIH1cclxuICAgIC8vIFJlZ2V4IGNoZWNrcyBmb3IgYmFzZTY0dXJsIGZvcm1hdFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICghY29uc3RhbnRzXzEuQkFTRTY0VVJMX1JFR0VYLnRlc3QocGFydHNbaV0pKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BdXRoSW52YWxpZEp3dEVycm9yKCdKV1Qgbm90IGluIGJhc2U2NHVybCBmb3JtYXQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgIC8vIHVzaW5nIGJhc2U2NHVybCBsaWJcclxuICAgICAgICBoZWFkZXI6IEpTT04ucGFyc2UoKDAsIGJhc2U2NHVybF8xLnN0cmluZ0Zyb21CYXNlNjRVUkwpKHBhcnRzWzBdKSksXHJcbiAgICAgICAgcGF5bG9hZDogSlNPTi5wYXJzZSgoMCwgYmFzZTY0dXJsXzEuc3RyaW5nRnJvbUJhc2U2NFVSTCkocGFydHNbMV0pKSxcclxuICAgICAgICBzaWduYXR1cmU6ICgwLCBiYXNlNjR1cmxfMS5iYXNlNjRVcmxUb1VpbnQ4QXJyYXkpKHBhcnRzWzJdKSxcclxuICAgICAgICByYXc6IHtcclxuICAgICAgICAgICAgaGVhZGVyOiBwYXJ0c1swXSxcclxuICAgICAgICAgICAgcGF5bG9hZDogcGFydHNbMV0sXHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcbiAgICByZXR1cm4gZGF0YTtcclxufVxyXG5leHBvcnRzLmRlY29kZUpXVCA9IGRlY29kZUpXVDtcclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gbnVsbCBhZnRlciBzb21lIHRpbWUuXHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBzbGVlcCh0aW1lKSB7XHJcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKGFjY2VwdCkgPT4ge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gYWNjZXB0KG51bGwpLCB0aW1lKTtcclxuICAgIH0pO1xyXG59XHJcbmV4cG9ydHMuc2xlZXAgPSBzbGVlcDtcclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoZSBwcm92aWRlZCBhc3luYyBmdW5jdGlvbiBpbnRvIGEgcmV0cnlhYmxlIGZ1bmN0aW9uLiBFYWNoIHJlc3VsdFxyXG4gKiBvciB0aHJvd24gZXJyb3IgaXMgc2VudCB0byB0aGUgaXNSZXRyeWFibGUgZnVuY3Rpb24gd2hpY2ggc2hvdWxkIHJldHVybiB0cnVlXHJcbiAqIGlmIHRoZSBmdW5jdGlvbiBzaG91bGQgcnVuIGFnYWluLlxyXG4gKi9cclxuZnVuY3Rpb24gcmV0cnlhYmxlKGZuLCBpc1JldHJ5YWJsZSkge1xyXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChhY2NlcHQsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXh0cmEtc2VtaVxyXG4gICAgICAgIDtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IEluZmluaXR5OyBhdHRlbXB0KyspIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oYXR0ZW1wdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1JldHJ5YWJsZShhdHRlbXB0LCBudWxsLCByZXN1bHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmV0cnlhYmxlKGF0dGVtcHQsIGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9taXNlO1xyXG59XHJcbmV4cG9ydHMucmV0cnlhYmxlID0gcmV0cnlhYmxlO1xyXG5mdW5jdGlvbiBkZWMyaGV4KGRlYykge1xyXG4gICAgcmV0dXJuICgnMCcgKyBkZWMudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpO1xyXG59XHJcbi8vIEZ1bmN0aW9ucyBiZWxvdyB0YWtlbiBmcm9tOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82MzMwOTQwOS9jcmVhdGluZy1hLWNvZGUtdmVyaWZpZXItYW5kLWNoYWxsZW5nZS1mb3ItcGtjZS1hdXRoLW9uLXNwb3RpZnktYXBpLWluLXJlYWN0anNcclxuZnVuY3Rpb24gZ2VuZXJhdGVQS0NFVmVyaWZpZXIoKSB7XHJcbiAgICBjb25zdCB2ZXJpZmllckxlbmd0aCA9IDU2O1xyXG4gICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDMyQXJyYXkodmVyaWZpZXJMZW5ndGgpO1xyXG4gICAgaWYgKHR5cGVvZiBjcnlwdG8gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgY29uc3QgY2hhclNldCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS0uX34nO1xyXG4gICAgICAgIGNvbnN0IGNoYXJTZXRMZW4gPSBjaGFyU2V0Lmxlbmd0aDtcclxuICAgICAgICBsZXQgdmVyaWZpZXIgPSAnJztcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZlcmlmaWVyTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmVyaWZpZXIgKz0gY2hhclNldC5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhclNldExlbikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmVyaWZpZXI7XHJcbiAgICB9XHJcbiAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KTtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKGFycmF5LCBkZWMyaGV4KS5qb2luKCcnKTtcclxufVxyXG5leHBvcnRzLmdlbmVyYXRlUEtDRVZlcmlmaWVyID0gZ2VuZXJhdGVQS0NFVmVyaWZpZXI7XHJcbmFzeW5jIGZ1bmN0aW9uIHNoYTI1NihyYW5kb21TdHJpbmcpIHtcclxuICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcclxuICAgIGNvbnN0IGVuY29kZWREYXRhID0gZW5jb2Rlci5lbmNvZGUocmFuZG9tU3RyaW5nKTtcclxuICAgIGNvbnN0IGhhc2ggPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIGVuY29kZWREYXRhKTtcclxuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoaGFzaCk7XHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbShieXRlcylcclxuICAgICAgICAubWFwKChjKSA9PiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKVxyXG4gICAgICAgIC5qb2luKCcnKTtcclxufVxyXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVBLQ0VDaGFsbGVuZ2UodmVyaWZpZXIpIHtcclxuICAgIGNvbnN0IGhhc0NyeXB0b1N1cHBvcnQgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgICAgIHR5cGVvZiBjcnlwdG8uc3VidGxlICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgICAgIHR5cGVvZiBUZXh0RW5jb2RlciAhPT0gJ3VuZGVmaW5lZCc7XHJcbiAgICBpZiAoIWhhc0NyeXB0b1N1cHBvcnQpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ1dlYkNyeXB0byBBUEkgaXMgbm90IHN1cHBvcnRlZC4gQ29kZSBjaGFsbGVuZ2UgbWV0aG9kIHdpbGwgZGVmYXVsdCB0byB1c2UgcGxhaW4gaW5zdGVhZCBvZiBzaGEyNTYuJyk7XHJcbiAgICAgICAgcmV0dXJuIHZlcmlmaWVyO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaGFzaGVkID0gYXdhaXQgc2hhMjU2KHZlcmlmaWVyKTtcclxuICAgIHJldHVybiBidG9hKGhhc2hlZCkucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJykucmVwbGFjZSgvPSskLywgJycpO1xyXG59XHJcbmV4cG9ydHMuZ2VuZXJhdGVQS0NFQ2hhbGxlbmdlID0gZ2VuZXJhdGVQS0NFQ2hhbGxlbmdlO1xyXG5hc3luYyBmdW5jdGlvbiBnZXRDb2RlQ2hhbGxlbmdlQW5kTWV0aG9kKHN0b3JhZ2UsIHN0b3JhZ2VLZXksIGlzUGFzc3dvcmRSZWNvdmVyeSA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBjb2RlVmVyaWZpZXIgPSBnZW5lcmF0ZVBLQ0VWZXJpZmllcigpO1xyXG4gICAgbGV0IHN0b3JlZENvZGVWZXJpZmllciA9IGNvZGVWZXJpZmllcjtcclxuICAgIGlmIChpc1Bhc3N3b3JkUmVjb3ZlcnkpIHtcclxuICAgICAgICBzdG9yZWRDb2RlVmVyaWZpZXIgKz0gJy9QQVNTV09SRF9SRUNPVkVSWSc7XHJcbiAgICB9XHJcbiAgICBhd2FpdCAoMCwgZXhwb3J0cy5zZXRJdGVtQXN5bmMpKHN0b3JhZ2UsIGAke3N0b3JhZ2VLZXl9LWNvZGUtdmVyaWZpZXJgLCBzdG9yZWRDb2RlVmVyaWZpZXIpO1xyXG4gICAgY29uc3QgY29kZUNoYWxsZW5nZSA9IGF3YWl0IGdlbmVyYXRlUEtDRUNoYWxsZW5nZShjb2RlVmVyaWZpZXIpO1xyXG4gICAgY29uc3QgY29kZUNoYWxsZW5nZU1ldGhvZCA9IGNvZGVWZXJpZmllciA9PT0gY29kZUNoYWxsZW5nZSA/ICdwbGFpbicgOiAnczI1Nic7XHJcbiAgICByZXR1cm4gW2NvZGVDaGFsbGVuZ2UsIGNvZGVDaGFsbGVuZ2VNZXRob2RdO1xyXG59XHJcbmV4cG9ydHMuZ2V0Q29kZUNoYWxsZW5nZUFuZE1ldGhvZCA9IGdldENvZGVDaGFsbGVuZ2VBbmRNZXRob2Q7XHJcbi8qKiBQYXJzZXMgdGhlIEFQSSB2ZXJzaW9uIHdoaWNoIGlzIDJZWVktTU0tREQuICovXHJcbmNvbnN0IEFQSV9WRVJTSU9OX1JFR0VYID0gL14yWzAtOV17M30tKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18MVswLTldfDJbMC05XXwzWzAtMV0pJC9pO1xyXG5mdW5jdGlvbiBwYXJzZVJlc3BvbnNlQVBJVmVyc2lvbihyZXNwb25zZSkge1xyXG4gICAgY29uc3QgYXBpVmVyc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGNvbnN0YW50c18xLkFQSV9WRVJTSU9OX0hFQURFUl9OQU1FKTtcclxuICAgIGlmICghYXBpVmVyc2lvbikge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKCFhcGlWZXJzaW9uLm1hdGNoKEFQSV9WRVJTSU9OX1JFR0VYKSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoYCR7YXBpVmVyc2lvbn1UMDA6MDA6MDAuMFpgKTtcclxuICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5wYXJzZVJlc3BvbnNlQVBJVmVyc2lvbiA9IHBhcnNlUmVzcG9uc2VBUElWZXJzaW9uO1xyXG5mdW5jdGlvbiB2YWxpZGF0ZUV4cChleHApIHtcclxuICAgIGlmICghZXhwKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGV4cCBjbGFpbScpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdGltZU5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgaWYgKGV4cCA8PSB0aW1lTm93KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKV1QgaGFzIGV4cGlyZWQnKTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLnZhbGlkYXRlRXhwID0gdmFsaWRhdGVFeHA7XHJcbmZ1bmN0aW9uIGdldEFsZ29yaXRobShhbGcpIHtcclxuICAgIHN3aXRjaCAoYWxnKSB7XHJcbiAgICAgICAgY2FzZSAnUlMyNTYnOlxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ1JTQVNTQS1QS0NTMS12MV81JyxcclxuICAgICAgICAgICAgICAgIGhhc2g6IHsgbmFtZTogJ1NIQS0yNTYnIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgY2FzZSAnRVMyNTYnOlxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ0VDRFNBJyxcclxuICAgICAgICAgICAgICAgIG5hbWVkQ3VydmU6ICdQLTI1NicsXHJcbiAgICAgICAgICAgICAgICBoYXNoOiB7IG5hbWU6ICdTSEEtMjU2JyB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhbGcgY2xhaW0nKTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLmdldEFsZ29yaXRobSA9IGdldEFsZ29yaXRobTtcclxuY29uc3QgVVVJRF9SRUdFWCA9IC9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JC87XHJcbmZ1bmN0aW9uIHZhbGlkYXRlVVVJRChzdHIpIHtcclxuICAgIGlmICghVVVJRF9SRUdFWC50ZXN0KHN0cikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0BzdXBhYmFzZS9hdXRoLWpzOiBFeHBlY3RlZCBwYXJhbWV0ZXIgdG8gYmUgVVVJRCBidXQgaXMgbm90Jyk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy52YWxpZGF0ZVVVSUQgPSB2YWxpZGF0ZVVVSUQ7XHJcbmZ1bmN0aW9uIHVzZXJOb3RBdmFpbGFibGVQcm94eSgpIHtcclxuICAgIGNvbnN0IHByb3h5VGFyZ2V0ID0ge307XHJcbiAgICByZXR1cm4gbmV3IFByb3h5KHByb3h5VGFyZ2V0LCB7XHJcbiAgICAgICAgZ2V0OiAodGFyZ2V0LCBwcm9wKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwcm9wID09PSAnX19pc1VzZXJOb3RBdmFpbGFibGVQcm94eScpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFByZXZlbnRhdGl2ZSBjaGVjayBmb3IgY29tbW9uIHByb2JsZW1hdGljIHN5bWJvbHMgZHVyaW5nIGNsb25pbmcvaW5zcGVjdGlvblxyXG4gICAgICAgICAgICAvLyBUaGVzZSBzeW1ib2xzIG1pZ2h0IGJlIGFjY2Vzc2VkIGJ5IHN0cnVjdHVyZWRDbG9uZSBvciBvdGhlciBpbnRlcm5hbCBtZWNoYW5pc21zLlxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzeW1ib2wnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzUHJvcCA9IHByb3AudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIGlmIChzUHJvcCA9PT0gJ1N5bWJvbChTeW1ib2wudG9QcmltaXRpdmUpJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHNQcm9wID09PSAnU3ltYm9sKFN5bWJvbC50b1N0cmluZ1RhZyknIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc1Byb3AgPT09ICdTeW1ib2wodXRpbC5pbnNwZWN0LmN1c3RvbSknKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTm9kZS5qcyB1dGlsLmluc3BlY3RcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL2F1dGgtanM6IGNsaWVudCB3YXMgY3JlYXRlZCB3aXRoIHVzZXJTdG9yYWdlIG9wdGlvbiBhbmQgdGhlcmUgd2FzIG5vIHVzZXIgc3RvcmVkIGluIHRoZSB1c2VyIHN0b3JhZ2UuIEFjY2Vzc2luZyB0aGUgXCIke3Byb3B9XCIgcHJvcGVydHkgb2YgdGhlIHNlc3Npb24gb2JqZWN0IGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgZ2V0VXNlcigpIGluc3RlYWQuYCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IChfdGFyZ2V0LCBwcm9wKSA9PiB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL2F1dGgtanM6IGNsaWVudCB3YXMgY3JlYXRlZCB3aXRoIHVzZXJTdG9yYWdlIG9wdGlvbiBhbmQgdGhlcmUgd2FzIG5vIHVzZXIgc3RvcmVkIGluIHRoZSB1c2VyIHN0b3JhZ2UuIFNldHRpbmcgdGhlIFwiJHtwcm9wfVwiIHByb3BlcnR5IG9mIHRoZSBzZXNzaW9uIG9iamVjdCBpcyBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgdXNlIGdldFVzZXIoKSB0byBmZXRjaCBhIHVzZXIgb2JqZWN0IHlvdSBjYW4gbWFuaXB1bGF0ZS5gKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZVByb3BlcnR5OiAoX3RhcmdldCwgcHJvcCkgPT4ge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEBzdXBhYmFzZS9hdXRoLWpzOiBjbGllbnQgd2FzIGNyZWF0ZWQgd2l0aCB1c2VyU3RvcmFnZSBvcHRpb24gYW5kIHRoZXJlIHdhcyBubyB1c2VyIHN0b3JlZCBpbiB0aGUgdXNlciBzdG9yYWdlLiBEZWxldGluZyB0aGUgXCIke3Byb3B9XCIgcHJvcGVydHkgb2YgdGhlIHNlc3Npb24gb2JqZWN0IGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgZ2V0VXNlcigpIHRvIGZldGNoIGEgdXNlciBvYmplY3QgeW91IGNhbiBtYW5pcHVsYXRlLmApO1xyXG4gICAgICAgIH0sXHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLnVzZXJOb3RBdmFpbGFibGVQcm94eSA9IHVzZXJOb3RBdmFpbGFibGVQcm94eTtcclxuLyoqXHJcbiAqIERlZXAgY2xvbmVzIGEgSlNPTi1zZXJpYWxpemFibGUgb2JqZWN0IHVzaW5nIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSkuXHJcbiAqIE5vdGU6IE9ubHkgd29ya3MgZm9yIEpTT04tc2FmZSBkYXRhLlxyXG4gKi9cclxuZnVuY3Rpb24gZGVlcENsb25lKG9iaikge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSk7XHJcbn1cclxuZXhwb3J0cy5kZWVwQ2xvbmUgPSBkZWVwQ2xvbmU7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHBlcnMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/helpers.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/local-storage.js":
/*!***********************************************************************!*\
!*** ./node_modules/@supabase/auth-js/dist/main/lib/local-storage.js ***!
\***********************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.memoryLocalStorageAdapter = void 0;\r\n/**\r\n * Returns a localStorage-like object that stores the key-value pairs in\r\n * memory.\r\n */\r\nfunction memoryLocalStorageAdapter(store = {}) {\r\n return {\r\n getItem: (key) => {\r\n return store[key] || null;\r\n },\r\n setItem: (key, value) => {\r\n store[key] = value;\r\n },\r\n removeItem: (key) => {\r\n delete store[key];\r\n },\r\n };\r\n}\r\nexports.memoryLocalStorageAdapter = memoryLocalStorageAdapter;\r\n//# sourceMappingURL=local-storage.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL2xpYi9sb2NhbC1zdG9yYWdlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL2xpYi9sb2NhbC1zdG9yYWdlLmpzP2Q1MjIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5tZW1vcnlMb2NhbFN0b3JhZ2VBZGFwdGVyID0gdm9pZCAwO1xyXG4vKipcclxuICogUmV0dXJucyBhIGxvY2FsU3RvcmFnZS1saWtlIG9iamVjdCB0aGF0IHN0b3JlcyB0aGUga2V5LXZhbHVlIHBhaXJzIGluXHJcbiAqIG1lbW9yeS5cclxuICovXHJcbmZ1bmN0aW9uIG1lbW9yeUxvY2FsU3RvcmFnZUFkYXB0ZXIoc3RvcmUgPSB7fSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBnZXRJdGVtOiAoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdG9yZVtrZXldIHx8IG51bGw7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXRJdGVtOiAoa2V5LCB2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBzdG9yZVtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmVJdGVtOiAoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBzdG9yZVtrZXldO1xyXG4gICAgICAgIH0sXHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydHMubWVtb3J5TG9jYWxTdG9yYWdlQWRhcHRlciA9IG1lbW9yeUxvY2FsU3RvcmFnZUFkYXB0ZXI7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvY2FsLXN0b3JhZ2UuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/local-storage.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/locks.js":
/*!***************************************************************!*\
!*** ./node_modules/@supabase/auth-js/dist/main/lib/locks.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.processLock = exports.navigatorLock = exports.ProcessLockAcquireTimeoutError = exports.NavigatorLockAcquireTimeoutError = exports.LockAcquireTimeoutError = exports.internals = void 0;\r\nconst helpers_1 = __webpack_require__(/*! ./helpers */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/helpers.js\");\r\n/**\r\n * @experimental\r\n */\r\nexports.internals = {\r\n /**\r\n * @experimental\r\n */\r\n debug: !!(globalThis &&\r\n (0, helpers_1.supportsLocalStorage)() &&\r\n globalThis.localStorage &&\r\n globalThis.localStorage.getItem('supabase.gotrue-js.locks.debug') === 'true'),\r\n};\r\n/**\r\n * An error thrown when a lock cannot be acquired after some amount of time.\r\n *\r\n * Use the {@link #isAcquireTimeout} property instead of checking with `instanceof`.\r\n */\r\nclass LockAcquireTimeoutError extends Error {\r\n constructor(message) {\r\n super(message);\r\n this.isAcquireTimeout = true;\r\n }\r\n}\r\nexports.LockAcquireTimeoutError = LockAcquireTimeoutError;\r\nclass NavigatorLockAcquireTimeoutError extends LockAcquireTimeoutError {\r\n}\r\nexports.NavigatorLockAcquireTimeoutError = NavigatorLockAcquireTimeoutError;\r\nclass ProcessLockAcquireTimeoutError extends LockAcquireTimeoutError {\r\n}\r\nexports.ProcessLockAcquireTimeoutError = ProcessLockAcquireTimeoutError;\r\n/**\r\n * Implements a global exclusive lock using the Navigator LockManager API. It\r\n * is available on all browsers released after 2022-03-15 with Safari being the\r\n * last one to release support. If the API is not available, this function will\r\n * throw. Make sure you check availablility before configuring {@link\r\n * GoTrueClient}.\r\n *\r\n * You can turn on debugging by setting the `supabase.gotrue-js.locks.debug`\r\n * local storage item to `true`.\r\n *\r\n * Internals:\r\n *\r\n * Since the LockManager API does not preserve stack traces for the async\r\n * function passed in the `request` method, a trick is used where acquiring the\r\n * lock releases a previously started promise to run the operation in the `fn`\r\n * function. The lock waits for that promise to finish (with or without error),\r\n * while the function will finally wait for the result anyway.\r\n *\r\n * @param name Name of the lock to be acquired.\r\n * @param acquireTimeout If negative, no timeout. If 0 an error is thrown if\r\n * the lock can't be acquired without waiting. If positive, the lock acquire\r\n * will time out after so many milliseconds. An error is\r\n * a timeout if it has `isAcquireTimeout` set to true.\r\n * @param fn The operation to run once the lock is acquired.\r\n */\r\nasync function navigatorLock(name, acquireTimeout, fn) {\r\n if (exports.internals.debug) {\r\n console.log('@supabase/gotrue-js: navigatorLock: acquire lock', name, acquireTimeout);\r\n }\r\n const abortController = new globalThis.AbortController();\r\n if (acquireTimeout > 0) {\r\n setTimeout(() => {\r\n abortController.abort();\r\n if (exports.internals.debug) {\r\n console.log('@supabase/gotrue-js: navigatorLock acquire timed out', name);\r\n }\r\n }, acquireTimeout);\r\n }\r\n // MDN article: https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request\r\n // Wrapping navigator.locks.request() with a plain Promise is done as some\r\n // libraries like zone.js patch the Promise object to track the execution\r\n // context. However, it appears that most browsers use an internal promise\r\n // implementation when using the navigator.locks.request() API causing them\r\n // to lose context and emit confusing log messages or break certain features.\r\n // This wrapping is believed to help zone.js track the execution context\r\n // better.\r\n return await Promise.resolve().then(() => globalThis.navigator.locks.request(name, acquireTimeout === 0\r\n ? {\r\n mode: 'exclusive',\r\n ifAvailable: true,\r\n }\r\n : {\r\n mode: 'exclusive',\r\n signal: abortController.signal,\r\n }, async (lock) => {\r\n if (lock) {\r\n if (exports.internals.debug) {\r\n console.log('@supabase/gotrue-js: navigatorLock: acquired', name, lock.name);\r\n }\r\n try {\r\n return await fn();\r\n }\r\n finally {\r\n if (exports.internals.debug) {\r\n console.log('@supabase/gotrue-js: navigatorLock: released', name, lock.name);\r\n }\r\n }\r\n }\r\n else {\r\n if (acquireTimeout === 0) {\r\n if (exports.internals.debug) {\r\n console.log('@supabase/gotrue-js: navigatorLock: not immediately available', name);\r\n }\r\n throw new NavigatorLockAcquireTimeoutError(`Acquiring an exclusive Navigator LockManager lock \"${name}\" immediately failed`);\r\n }\r\n else {\r\n if (exports.internals.debug) {\r\n try {\r\n const result = await globalThis.navigator.locks.query();\r\n console.log('@supabase/gotrue-js: Navigator LockManager state', JSON.stringify(result, null, ' '));\r\n }\r\n catch (e) {\r\n console.warn('@supabase/gotrue-js: Error when querying Navigator LockManager state', e);\r\n }\r\n }\r\n // Browser is not following the Navigator LockManager spec, it\r\n // returned a null lock when we didn't use ifAvailable. So we can\r\n // pretend the lock is acquired in the name of backward compatibility\r\n // and user experience and just run the function.\r\n console.warn('@supabase/gotrue-js: Navigator LockManager returned a null lock when using #request without ifAvailable set to true, it appears this browser is not following the LockManager spec https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request');\r\n return await fn();\r\n }\r\n }\r\n }));\r\n}\r\nexports.navigatorLock = navigatorLock;\r\nconst PROCESS_LOCKS = {};\r\n/**\r\n * Implements a global exclusive lock that works only in the current process.\r\n * Useful for environments like React Native or other non-browser\r\n * single-process (i.e. no concept of \"tabs\") environments.\r\n *\r\n * Use {@link #navigatorLock} in browser environments.\r\n *\r\n * @param name Name of the lock to be acquired.\r\n * @param acquireTimeout If negative, no timeout. If 0 an error is thrown if\r\n * the lock can't be acquired without waiting. If positive, the lock acquire\r\n * will time out after so many milliseconds. An error is\r\n * a timeout if it has `isAcquireTimeout` set to true.\r\n * @param fn The operation to run once the lock is acquired.\r\n */\r\nasync function processLock(name, acquireTimeout, fn) {\r\n var _a;\r\n const previousOperation = (_a = PROCESS_LOCKS[name]) !== null && _a !== void 0 ? _a : Promise.resolve();\r\n const currentOperation = Promise.race([\r\n previousOperation.catch(() => {\r\n // ignore error of previous operation that we're waiting to finish\r\n return null;\r\n }),\r\n acquireTimeout >= 0\r\n ? new Promise((_, reject) => {\r\n setTimeout(() => {\r\n reject(new ProcessLockAcquireTimeoutError(`Acquring process lock with name \"${name}\" timed out`));\r\n }, acquireTimeout);\r\n })\r\n : null,\r\n ].filter((x) => x))\r\n .catch((e) => {\r\n if (e && e.isAcquireTimeout) {\r\n throw e;\r\n }\r\n return null;\r\n })\r\n .then(async () => {\r\n // previous operations finished and we didn't get a race on the acquire\r\n // timeout, so the current operation can finally start\r\n return await fn();\r\n });\r\n PROCESS_LOCKS[name] = currentOperation.catch(async (e) => {\r\n if (e && e.isAcquireTimeout) {\r\n // if the current operation timed out, it doesn't mean that the previous\r\n // operation finished, so we need contnue waiting for it to finish\r\n await previousOperation;\r\n return null;\r\n }\r\n throw e;\r\n });\r\n // finally wait for the current operation to finish successfully, with an\r\n // error or with an acquire timeout error\r\n return await currentOperation;\r\n}\r\nexports.processLock = processLock;\r\n//# sourceMappingURL=locks.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL2xpYi9sb2Nrcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxtQkFBbUIsR0FBRyxxQkFBcUIsR0FBRyxzQ0FBc0MsR0FBRyx3Q0FBd0MsR0FBRywrQkFBK0IsR0FBRyxpQkFBaUI7QUFDckwsa0JBQWtCLG1CQUFPLENBQUMsa0ZBQVc7QUFDckM7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHlCQUF5QjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7QUFDaEUsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlIQUFpSCxLQUFLO0FBQ3RIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsc0JBQXNCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxrR0FBa0csS0FBSztBQUN2RyxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL2xpYi9sb2Nrcy5qcz9lNTAyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMucHJvY2Vzc0xvY2sgPSBleHBvcnRzLm5hdmlnYXRvckxvY2sgPSBleHBvcnRzLlByb2Nlc3NMb2NrQWNxdWlyZVRpbWVvdXRFcnJvciA9IGV4cG9ydHMuTmF2aWdhdG9yTG9ja0FjcXVpcmVUaW1lb3V0RXJyb3IgPSBleHBvcnRzLkxvY2tBY3F1aXJlVGltZW91dEVycm9yID0gZXhwb3J0cy5pbnRlcm5hbHMgPSB2b2lkIDA7XHJcbmNvbnN0IGhlbHBlcnNfMSA9IHJlcXVpcmUoXCIuL2hlbHBlcnNcIik7XHJcbi8qKlxyXG4gKiBAZXhwZXJpbWVudGFsXHJcbiAqL1xyXG5leHBvcnRzLmludGVybmFscyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQGV4cGVyaW1lbnRhbFxyXG4gICAgICovXHJcbiAgICBkZWJ1ZzogISEoZ2xvYmFsVGhpcyAmJlxyXG4gICAgICAgICgwLCBoZWxwZXJzXzEuc3VwcG9ydHNMb2NhbFN0b3JhZ2UpKCkgJiZcclxuICAgICAgICBnbG9iYWxUaGlzLmxvY2FsU3RvcmFnZSAmJlxyXG4gICAgICAgIGdsb2JhbFRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N1cGFiYXNlLmdvdHJ1ZS1qcy5sb2Nrcy5kZWJ1ZycpID09PSAndHJ1ZScpLFxyXG59O1xyXG4vKipcclxuICogQW4gZXJyb3IgdGhyb3duIHdoZW4gYSBsb2NrIGNhbm5vdCBiZSBhY3F1aXJlZCBhZnRlciBzb21lIGFtb3VudCBvZiB0aW1lLlxyXG4gKlxyXG4gKiBVc2UgdGhlIHtAbGluayAjaXNBY3F1aXJlVGltZW91dH0gcHJvcGVydHkgaW5zdGVhZCBvZiBjaGVja2luZyB3aXRoIGBpbnN0YW5jZW9mYC5cclxuICovXHJcbmNsYXNzIExvY2tBY3F1aXJlVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuaXNBY3F1aXJlVGltZW91dCA9IHRydWU7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5Mb2NrQWNxdWlyZVRpbWVvdXRFcnJvciA9IExvY2tBY3F1aXJlVGltZW91dEVycm9yO1xyXG5jbGFzcyBOYXZpZ2F0b3JMb2NrQWNxdWlyZVRpbWVvdXRFcnJvciBleHRlbmRzIExvY2tBY3F1aXJlVGltZW91dEVycm9yIHtcclxufVxyXG5leHBvcnRzLk5hdmlnYXRvckxvY2tBY3F1aXJlVGltZW91dEVycm9yID0gTmF2aWdhdG9yTG9ja0FjcXVpcmVUaW1lb3V0RXJyb3I7XHJcbmNsYXNzIFByb2Nlc3NMb2NrQWNxdWlyZVRpbWVvdXRFcnJvciBleHRlbmRzIExvY2tBY3F1aXJlVGltZW91dEVycm9yIHtcclxufVxyXG5leHBvcnRzLlByb2Nlc3NMb2NrQWNxdWlyZVRpbWVvdXRFcnJvciA9IFByb2Nlc3NMb2NrQWNxdWlyZVRpbWVvdXRFcnJvcjtcclxuLyoqXHJcbiAqIEltcGxlbWVudHMgYSBnbG9iYWwgZXhjbHVzaXZlIGxvY2sgdXNpbmcgdGhlIE5hdmlnYXRvciBMb2NrTWFuYWdlciBBUEkuIEl0XHJcbiAqIGlzIGF2YWlsYWJsZSBvbiBhbGwgYnJvd3NlcnMgcmVsZWFzZWQgYWZ0ZXIgMjAyMi0wMy0xNSB3aXRoIFNhZmFyaSBiZWluZyB0aGVcclxuICogbGFzdCBvbmUgdG8gcmVsZWFzZSBzdXBwb3J0LiBJZiB0aGUgQVBJIGlzIG5vdCBhdmFpbGFibGUsIHRoaXMgZnVuY3Rpb24gd2lsbFxyXG4gKiB0aHJvdy4gTWFrZSBzdXJlIHlvdSBjaGVjayBhdmFpbGFibGlsaXR5IGJlZm9yZSBjb25maWd1cmluZyB7QGxpbmtcclxuICogR29UcnVlQ2xpZW50fS5cclxuICpcclxuICogWW91IGNhbiB0dXJuIG9uIGRlYnVnZ2luZyBieSBzZXR0aW5nIHRoZSBgc3VwYWJhc2UuZ290cnVlLWpzLmxvY2tzLmRlYnVnYFxyXG4gKiBsb2NhbCBzdG9yYWdlIGl0ZW0gdG8gYHRydWVgLlxyXG4gKlxyXG4gKiBJbnRlcm5hbHM6XHJcbiAqXHJcbiAqIFNpbmNlIHRoZSBMb2NrTWFuYWdlciBBUEkgZG9lcyBub3QgcHJlc2VydmUgc3RhY2sgdHJhY2VzIGZvciB0aGUgYXN5bmNcclxuICogZnVuY3Rpb24gcGFzc2VkIGluIHRoZSBgcmVxdWVzdGAgbWV0aG9kLCBhIHRyaWNrIGlzIHVzZWQgd2hlcmUgYWNxdWlyaW5nIHRoZVxyXG4gKiBsb2NrIHJlbGVhc2VzIGEgcHJldmlvdXNseSBzdGFydGVkIHByb21pc2UgdG8gcnVuIHRoZSBvcGVyYXRpb24gaW4gdGhlIGBmbmBcclxuICogZnVuY3Rpb24uIFRoZSBsb2NrIHdhaXRzIGZvciB0aGF0IHByb21pc2UgdG8gZmluaXNoICh3aXRoIG9yIHdpdGhvdXQgZXJyb3IpLFxyXG4gKiB3aGlsZSB0aGUgZnVuY3Rpb24gd2lsbCBmaW5hbGx5IHdhaXQgZm9yIHRoZSByZXN1bHQgYW55d2F5LlxyXG4gKlxyXG4gKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBsb2NrIHRvIGJlIGFjcXVpcmVkLlxyXG4gKiBAcGFyYW0gYWNxdWlyZVRpbWVvdXQgSWYgbmVnYXRpdmUsIG5vIHRpbWVvdXQuIElmIDAgYW4gZXJyb3IgaXMgdGhyb3duIGlmXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICB0aGUgbG9jayBjYW4ndCBiZSBhY3F1aXJlZCB3aXRob3V0IHdhaXRpbmcuIElmIHBvc2l0aXZlLCB0aGUgbG9jayBhY3F1aXJlXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHRpbWUgb3V0IGFmdGVyIHNvIG1hbnkgbWlsbGlzZWNvbmRzLiBBbiBlcnJvciBpc1xyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgYSB0aW1lb3V0IGlmIGl0IGhhcyBgaXNBY3F1aXJlVGltZW91dGAgc2V0IHRvIHRydWUuXHJcbiAqIEBwYXJhbSBmbiBUaGUgb3BlcmF0aW9uIHRvIHJ1biBvbmNlIHRoZSBsb2NrIGlzIGFjcXVpcmVkLlxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gbmF2aWdhdG9yTG9jayhuYW1lLCBhY3F1aXJlVGltZW91dCwgZm4pIHtcclxuICAgIGlmIChleHBvcnRzLmludGVybmFscy5kZWJ1Zykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdAc3VwYWJhc2UvZ290cnVlLWpzOiBuYXZpZ2F0b3JMb2NrOiBhY3F1aXJlIGxvY2snLCBuYW1lLCBhY3F1aXJlVGltZW91dCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgZ2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXIoKTtcclxuICAgIGlmIChhY3F1aXJlVGltZW91dCA+IDApIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgIGlmIChleHBvcnRzLmludGVybmFscy5kZWJ1Zykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0BzdXBhYmFzZS9nb3RydWUtanM6IG5hdmlnYXRvckxvY2sgYWNxdWlyZSB0aW1lZCBvdXQnLCBuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIGFjcXVpcmVUaW1lb3V0KTtcclxuICAgIH1cclxuICAgIC8vIE1ETiBhcnRpY2xlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTG9ja01hbmFnZXIvcmVxdWVzdFxyXG4gICAgLy8gV3JhcHBpbmcgbmF2aWdhdG9yLmxvY2tzLnJlcXVlc3QoKSB3aXRoIGEgcGxhaW4gUHJvbWlzZSBpcyBkb25lIGFzIHNvbWVcclxuICAgIC8vIGxpYnJhcmllcyBsaWtlIHpvbmUuanMgcGF0Y2ggdGhlIFByb21pc2Ugb2JqZWN0IHRvIHRyYWNrIHRoZSBleGVjdXRpb25cclxuICAgIC8vIGNvbnRleHQuIEhvd2V2ZXIsIGl0IGFwcGVhcnMgdGhhdCBtb3N0IGJyb3dzZXJzIHVzZSBhbiBpbnRlcm5hbCBwcm9taXNlXHJcbiAgICAvLyBpbXBsZW1lbnRhdGlvbiB3aGVuIHVzaW5nIHRoZSBuYXZpZ2F0b3IubG9ja3MucmVxdWVzdCgpIEFQSSBjYXVzaW5nIHRoZW1cclxuICAgIC8vIHRvIGxvc2UgY29udGV4dCBhbmQgZW1pdCBjb25mdXNpbmcgbG9nIG1lc3NhZ2VzIG9yIGJyZWFrIGNlcnRhaW4gZmVhdHVyZXMuXHJcbiAgICAvLyBUaGlzIHdyYXBwaW5nIGlzIGJlbGlldmVkIHRvIGhlbHAgem9uZS5qcyB0cmFjayB0aGUgZXhlY3V0aW9uIGNvbnRleHRcclxuICAgIC8vIGJldHRlci5cclxuICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IGdsb2JhbFRoaXMubmF2aWdhdG9yLmxvY2tzLnJlcXVlc3QobmFtZSwgYWNxdWlyZVRpbWVvdXQgPT09IDBcclxuICAgICAgICA/IHtcclxuICAgICAgICAgICAgbW9kZTogJ2V4Y2x1c2l2ZScsXHJcbiAgICAgICAgICAgIGlmQXZhaWxhYmxlOiB0cnVlLFxyXG4gICAgICAgIH1cclxuICAgICAgICA6IHtcclxuICAgICAgICAgICAgbW9kZTogJ2V4Y2x1c2l2ZScsXHJcbiAgICAgICAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICB9LCBhc3luYyAobG9jaykgPT4ge1xyXG4gICAgICAgIGlmIChsb2NrKSB7XHJcbiAgICAgICAgICAgIGlmIChleHBvcnRzLmludGVybmFscy5kZWJ1Zykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0BzdXBhYmFzZS9nb3RydWUtanM6IG5hdmlnYXRvckxvY2s6IGFjcXVpcmVkJywgbmFtZSwgbG9jay5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwb3J0cy5pbnRlcm5hbHMuZGVidWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQHN1cGFiYXNlL2dvdHJ1ZS1qczogbmF2aWdhdG9yTG9jazogcmVsZWFzZWQnLCBuYW1lLCBsb2NrLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoYWNxdWlyZVRpbWVvdXQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChleHBvcnRzLmludGVybmFscy5kZWJ1Zykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdAc3VwYWJhc2UvZ290cnVlLWpzOiBuYXZpZ2F0b3JMb2NrOiBub3QgaW1tZWRpYXRlbHkgYXZhaWxhYmxlJywgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTmF2aWdhdG9yTG9ja0FjcXVpcmVUaW1lb3V0RXJyb3IoYEFjcXVpcmluZyBhbiBleGNsdXNpdmUgTmF2aWdhdG9yIExvY2tNYW5hZ2VyIGxvY2sgXCIke25hbWV9XCIgaW1tZWRpYXRlbHkgZmFpbGVkYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwb3J0cy5pbnRlcm5hbHMuZGVidWcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnbG9iYWxUaGlzLm5hdmlnYXRvci5sb2Nrcy5xdWVyeSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQHN1cGFiYXNlL2dvdHJ1ZS1qczogTmF2aWdhdG9yIExvY2tNYW5hZ2VyIHN0YXRlJywgSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAnICAnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignQHN1cGFiYXNlL2dvdHJ1ZS1qczogRXJyb3Igd2hlbiBxdWVyeWluZyBOYXZpZ2F0b3IgTG9ja01hbmFnZXIgc3RhdGUnLCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBCcm93c2VyIGlzIG5vdCBmb2xsb3dpbmcgdGhlIE5hdmlnYXRvciBMb2NrTWFuYWdlciBzcGVjLCBpdFxyXG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuZWQgYSBudWxsIGxvY2sgd2hlbiB3ZSBkaWRuJ3QgdXNlIGlmQXZhaWxhYmxlLiBTbyB3ZSBjYW5cclxuICAgICAgICAgICAgICAgIC8vIHByZXRlbmQgdGhlIGxvY2sgaXMgYWNxdWlyZWQgaW4gdGhlIG5hbWUgb2YgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxyXG4gICAgICAgICAgICAgICAgLy8gYW5kIHVzZXIgZXhwZXJpZW5jZSBhbmQganVzdCBydW4gdGhlIGZ1bmN0aW9uLlxyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdAc3VwYWJhc2UvZ290cnVlLWpzOiBOYXZpZ2F0b3IgTG9ja01hbmFnZXIgcmV0dXJuZWQgYSBudWxsIGxvY2sgd2hlbiB1c2luZyAjcmVxdWVzdCB3aXRob3V0IGlmQXZhaWxhYmxlIHNldCB0byB0cnVlLCBpdCBhcHBlYXJzIHRoaXMgYnJvd3NlciBpcyBub3QgZm9sbG93aW5nIHRoZSBMb2NrTWFuYWdlciBzcGVjIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Mb2NrTWFuYWdlci9yZXF1ZXN0Jyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgZm4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pKTtcclxufVxyXG5leHBvcnRzLm5hdmlnYXRvckxvY2sgPSBuYXZpZ2F0b3JMb2NrO1xyXG5jb25zdCBQUk9DRVNTX0xPQ0tTID0ge307XHJcbi8qKlxyXG4gKiBJbXBsZW1lbnRzIGEgZ2xvYmFsIGV4Y2x1c2l2ZSBsb2NrIHRoYXQgd29ya3Mgb25seSBpbiB0aGUgY3VycmVudCBwcm9jZXNzLlxyXG4gKiBVc2VmdWwgZm9yIGVudmlyb25tZW50cyBsaWtlIFJlYWN0IE5hdGl2ZSBvciBvdGhlciBub24tYnJvd3NlclxyXG4gKiBzaW5nbGUtcHJvY2VzcyAoaS5lLiBubyBjb25jZXB0IG9mIFwidGFic1wiKSBlbnZpcm9ubWVudHMuXHJcbiAqXHJcbiAqIFVzZSB7QGxpbmsgI25hdmlnYXRvckxvY2t9IGluIGJyb3dzZXIgZW52aXJvbm1lbnRzLlxyXG4gKlxyXG4gKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBsb2NrIHRvIGJlIGFjcXVpcmVkLlxyXG4gKiBAcGFyYW0gYWNxdWlyZVRpbWVvdXQgSWYgbmVnYXRpdmUsIG5vIHRpbWVvdXQuIElmIDAgYW4gZXJyb3IgaXMgdGhyb3duIGlmXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICB0aGUgbG9jayBjYW4ndCBiZSBhY3F1aXJlZCB3aXRob3V0IHdhaXRpbmcuIElmIHBvc2l0aXZlLCB0aGUgbG9jayBhY3F1aXJlXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHRpbWUgb3V0IGFmdGVyIHNvIG1hbnkgbWlsbGlzZWNvbmRzLiBBbiBlcnJvciBpc1xyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgYSB0aW1lb3V0IGlmIGl0IGhhcyBgaXNBY3F1aXJlVGltZW91dGAgc2V0IHRvIHRydWUuXHJcbiAqIEBwYXJhbSBmbiBUaGUgb3BlcmF0aW9uIHRvIHJ1biBvbmNlIHRoZSBsb2NrIGlzIGFjcXVpcmVkLlxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0xvY2sobmFtZSwgYWNxdWlyZVRpbWVvdXQsIGZuKSB7XHJcbiAgICB2YXIgX2E7XHJcbiAgICBjb25zdCBwcmV2aW91c09wZXJhdGlvbiA9IChfYSA9IFBST0NFU1NfTE9DS1NbbmFtZV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgY29uc3QgY3VycmVudE9wZXJhdGlvbiA9IFByb21pc2UucmFjZShbXHJcbiAgICAgICAgcHJldmlvdXNPcGVyYXRpb24uY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3Igb2YgcHJldmlvdXMgb3BlcmF0aW9uIHRoYXQgd2UncmUgd2FpdGluZyB0byBmaW5pc2hcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgYWNxdWlyZVRpbWVvdXQgPj0gMFxyXG4gICAgICAgICAgICA/IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgUHJvY2Vzc0xvY2tBY3F1aXJlVGltZW91dEVycm9yKGBBY3F1cmluZyBwcm9jZXNzIGxvY2sgd2l0aCBuYW1lIFwiJHtuYW1lfVwiIHRpbWVkIG91dGApKTtcclxuICAgICAgICAgICAgICAgIH0sIGFjcXVpcmVUaW1lb3V0KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgXS5maWx0ZXIoKHgpID0+IHgpKVxyXG4gICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgIGlmIChlICYmIGUuaXNBY3F1aXJlVGltZW91dCkge1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0pXHJcbiAgICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIC8vIHByZXZpb3VzIG9wZXJhdGlvbnMgZmluaXNoZWQgYW5kIHdlIGRpZG4ndCBnZXQgYSByYWNlIG9uIHRoZSBhY3F1aXJlXHJcbiAgICAgICAgLy8gdGltZW91dCwgc28gdGhlIGN1cnJlbnQgb3BlcmF0aW9uIGNhbiBmaW5hbGx5IHN0YXJ0XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZuKCk7XHJcbiAgICB9KTtcclxuICAgIFBST0NFU1NfTE9DS1NbbmFtZV0gPSBjdXJyZW50T3BlcmF0aW9uLmNhdGNoKGFzeW5jIChlKSA9PiB7XHJcbiAgICAgICAgaWYgKGUgJiYgZS5pc0FjcXVpcmVUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IG9wZXJhdGlvbiB0aW1lZCBvdXQsIGl0IGRvZXNuJ3QgbWVhbiB0aGF0IHRoZSBwcmV2aW91c1xyXG4gICAgICAgICAgICAvLyBvcGVyYXRpb24gZmluaXNoZWQsIHNvIHdlIG5lZWQgY29udG51ZSB3YWl0aW5nIGZvciBpdCB0byBmaW5pc2hcclxuICAgICAgICAgICAgYXdhaXQgcHJldmlvdXNPcGVyYXRpb247XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBlO1xyXG4gICAgfSk7XHJcbiAgICAvLyBmaW5hbGx5IHdhaXQgZm9yIHRoZSBjdXJyZW50IG9wZXJhdGlvbiB0byBmaW5pc2ggc3VjY2Vzc2Z1bGx5LCB3aXRoIGFuXHJcbiAgICAvLyBlcnJvciBvciB3aXRoIGFuIGFjcXVpcmUgdGltZW91dCBlcnJvclxyXG4gICAgcmV0dXJuIGF3YWl0IGN1cnJlbnRPcGVyYXRpb247XHJcbn1cclxuZXhwb3J0cy5wcm9jZXNzTG9jayA9IHByb2Nlc3NMb2NrO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2Nrcy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/locks.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/polyfills.js":
/*!*******************************************************************!*\
!*** ./node_modules/@supabase/auth-js/dist/main/lib/polyfills.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.polyfillGlobalThis = void 0;\r\n/**\r\n * https://mathiasbynens.be/notes/globalthis\r\n */\r\nfunction polyfillGlobalThis() {\r\n if (typeof globalThis === 'object')\r\n return;\r\n try {\r\n Object.defineProperty(Object.prototype, '__magic__', {\r\n get: function () {\r\n return this;\r\n },\r\n configurable: true,\r\n });\r\n // @ts-expect-error 'Allow access to magic'\r\n __magic__.globalThis = __magic__;\r\n // @ts-expect-error 'Allow access to magic'\r\n delete Object.prototype.__magic__;\r\n }\r\n catch (e) {\r\n if (typeof self !== 'undefined') {\r\n // @ts-expect-error 'Allow access to globals'\r\n self.globalThis = self;\r\n }\r\n }\r\n}\r\nexports.polyfillGlobalThis = polyfillGlobalThis;\r\n//# sourceMappingURL=polyfills.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL2xpYi9wb2x5ZmlsbHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQiIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRqcy8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21haW4vbGliL3BvbHlmaWxscy5qcz9iYWI1Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMucG9seWZpbGxHbG9iYWxUaGlzID0gdm9pZCAwO1xyXG4vKipcclxuICogaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2dsb2JhbHRoaXNcclxuICovXHJcbmZ1bmN0aW9uIHBvbHlmaWxsR2xvYmFsVGhpcygpIHtcclxuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3RvdHlwZSwgJ19fbWFnaWNfXycsIHtcclxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgJ0FsbG93IGFjY2VzcyB0byBtYWdpYydcclxuICAgICAgICBfX21hZ2ljX18uZ2xvYmFsVGhpcyA9IF9fbWFnaWNfXztcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yICdBbGxvdyBhY2Nlc3MgdG8gbWFnaWMnXHJcbiAgICAgICAgZGVsZXRlIE9iamVjdC5wcm90b3R5cGUuX19tYWdpY19fO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgJ0FsbG93IGFjY2VzcyB0byBnbG9iYWxzJ1xyXG4gICAgICAgICAgICBzZWxmLmdsb2JhbFRoaXMgPSBzZWxmO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5leHBvcnRzLnBvbHlmaWxsR2xvYmFsVGhpcyA9IHBvbHlmaWxsR2xvYmFsVGhpcztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9seWZpbGxzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/polyfills.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/types.js":
/*!***************************************************************!*\
!*** ./node_modules/@supabase/auth-js/dist/main/lib/types.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.SIGN_OUT_SCOPES = void 0;\r\nexports.SIGN_OUT_SCOPES = ['global', 'local', 'others'];\r\n//# sourceMappingURL=types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL2xpYi90eXBlcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCx1QkFBdUI7QUFDdkIsdUJBQXVCO0FBQ3ZCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbWFpbi9saWIvdHlwZXMuanM/NDdhMSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLlNJR05fT1VUX1NDT1BFUyA9IHZvaWQgMDtcclxuZXhwb3J0cy5TSUdOX09VVF9TQ09QRVMgPSBbJ2dsb2JhbCcsICdsb2NhbCcsICdvdGhlcnMnXTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/types.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/version.js":
/*!*****************************************************************!*\
!*** ./node_modules/@supabase/auth-js/dist/main/lib/version.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.version = void 0;\r\nexports.version = '2.71.1';\r\n//# sourceMappingURL=version.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL2xpYi92ZXJzaW9uLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGVBQWU7QUFDZixlQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tYWluL2xpYi92ZXJzaW9uLmpzPzBmNzkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy52ZXJzaW9uID0gdm9pZCAwO1xyXG5leHBvcnRzLnZlcnNpb24gPSAnMi43MS4xJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/auth-js/dist/main/lib/version.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/functions-js/dist/main/FunctionsClient.js":
/*!**************************************************************************!*\
!*** ./node_modules/@supabase/functions-js/dist/main/FunctionsClient.js ***!
\**************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.FunctionsClient = void 0;\r\nconst helper_1 = __webpack_require__(/*! ./helper */ \"(ssr)/./node_modules/@supabase/functions-js/dist/main/helper.js\");\r\nconst types_1 = __webpack_require__(/*! ./types */ \"(ssr)/./node_modules/@supabase/functions-js/dist/main/types.js\");\r\nclass FunctionsClient {\r\n constructor(url, { headers = {}, customFetch, region = types_1.FunctionRegion.Any, } = {}) {\r\n this.url = url;\r\n this.headers = headers;\r\n this.region = region;\r\n this.fetch = (0, helper_1.resolveFetch)(customFetch);\r\n }\r\n /**\r\n * Updates the authorization header\r\n * @param token - the new jwt token sent in the authorisation header\r\n */\r\n setAuth(token) {\r\n this.headers.Authorization = `Bearer ${token}`;\r\n }\r\n /**\r\n * Invokes a function\r\n * @param functionName - The name of the Function to invoke.\r\n * @param options - Options for invoking the Function.\r\n */\r\n invoke(functionName, options = {}) {\r\n var _a;\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const { headers, method, body: functionArgs } = options;\r\n let _headers = {};\r\n let { region } = options;\r\n if (!region) {\r\n region = this.region;\r\n }\r\n // Add region as query parameter using URL API\r\n const url = new URL(`${this.url}/${functionName}`);\r\n if (region && region !== 'any') {\r\n _headers['x-region'] = region;\r\n url.searchParams.set('forceFunctionRegion', region);\r\n }\r\n let body;\r\n if (functionArgs &&\r\n ((headers && !Object.prototype.hasOwnProperty.call(headers, 'Content-Type')) || !headers)) {\r\n if ((typeof Blob !== 'undefined' && functionArgs instanceof Blob) ||\r\n functionArgs instanceof ArrayBuffer) {\r\n // will work for File as File inherits Blob\r\n // also works for ArrayBuffer as it is the same underlying structure as a Blob\r\n _headers['Content-Type'] = 'application/octet-stream';\r\n body = functionArgs;\r\n }\r\n else if (typeof functionArgs === 'string') {\r\n // plain string\r\n _headers['Content-Type'] = 'text/plain';\r\n body = functionArgs;\r\n }\r\n else if (typeof FormData !== 'undefined' && functionArgs instanceof FormData) {\r\n // don't set content-type headers\r\n // Request will automatically add the right boundary value\r\n body = functionArgs;\r\n }\r\n else {\r\n // default, assume this is JSON\r\n _headers['Content-Type'] = 'application/json';\r\n body = JSON.stringify(functionArgs);\r\n }\r\n }\r\n const response = yield this.fetch(url.toString(), {\r\n method: method || 'POST',\r\n // headers priority is (high to low):\r\n // 1. invoke-level headers\r\n // 2. client-level headers\r\n // 3. default Content-Type header\r\n headers: Object.assign(Object.assign(Object.assign({}, _headers), this.headers), headers),\r\n body,\r\n }).catch((fetchError) => {\r\n throw new types_1.FunctionsFetchError(fetchError);\r\n });\r\n const isRelayError = response.headers.get('x-relay-error');\r\n if (isRelayError && isRelayError === 'true') {\r\n throw new types_1.FunctionsRelayError(response);\r\n }\r\n if (!response.ok) {\r\n throw new types_1.FunctionsHttpError(response);\r\n }\r\n let responseType = ((_a = response.headers.get('Content-Type')) !== null && _a !== void 0 ? _a : 'text/plain').split(';')[0].trim();\r\n let data;\r\n if (responseType === 'application/json') {\r\n data = yield response.json();\r\n }\r\n else if (responseType === 'application/octet-stream') {\r\n data = yield response.blob();\r\n }\r\n else if (responseType === 'text/event-stream') {\r\n data = response;\r\n }\r\n else if (responseType === 'multipart/form-data') {\r\n data = yield response.formData();\r\n }\r\n else {\r\n // default to text\r\n data = yield response.text();\r\n }\r\n return { data, error: null, response };\r\n }\r\n catch (error) {\r\n return {\r\n data: null,\r\n error,\r\n response: error instanceof types_1.FunctionsHttpError || error instanceof types_1.FunctionsRelayError\r\n ? error.context\r\n : undefined,\r\n };\r\n }\r\n });\r\n }\r\n}\r\nexports.FunctionsClient = FunctionsClient;\r\n//# sourceMappingURL=FunctionsClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2Z1bmN0aW9ucy1qcy9kaXN0L21haW4vRnVuY3Rpb25zQ2xpZW50LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSw0QkFBNEIsK0RBQStELGlCQUFpQjtBQUM1RztBQUNBLG9DQUFvQyxNQUFNLCtCQUErQixZQUFZO0FBQ3JGLG1DQUFtQyxNQUFNLG1DQUFtQyxZQUFZO0FBQ3hGLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCx1QkFBdUI7QUFDdkIsaUJBQWlCLG1CQUFPLENBQUMsaUZBQVU7QUFDbkMsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQVM7QUFDakM7QUFDQSx1QkFBdUIsWUFBWSxzREFBc0QsSUFBSTtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxNQUFNO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0NBQXNDO0FBQzlEO0FBQ0Esc0JBQXNCLFNBQVM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsU0FBUyxHQUFHLGFBQWE7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUVBQXlFO0FBQ3pFO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUlBQXVJO0FBQ3ZJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QiIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRqcy8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvZnVuY3Rpb25zLWpzL2Rpc3QvbWFpbi9GdW5jdGlvbnNDbGllbnQuanM/ZTliMyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuRnVuY3Rpb25zQ2xpZW50ID0gdm9pZCAwO1xyXG5jb25zdCBoZWxwZXJfMSA9IHJlcXVpcmUoXCIuL2hlbHBlclwiKTtcclxuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xyXG5jbGFzcyBGdW5jdGlvbnNDbGllbnQge1xyXG4gICAgY29uc3RydWN0b3IodXJsLCB7IGhlYWRlcnMgPSB7fSwgY3VzdG9tRmV0Y2gsIHJlZ2lvbiA9IHR5cGVzXzEuRnVuY3Rpb25SZWdpb24uQW55LCB9ID0ge30pIHtcclxuICAgICAgICB0aGlzLnVybCA9IHVybDtcclxuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xyXG4gICAgICAgIHRoaXMucmVnaW9uID0gcmVnaW9uO1xyXG4gICAgICAgIHRoaXMuZmV0Y2ggPSAoMCwgaGVscGVyXzEucmVzb2x2ZUZldGNoKShjdXN0b21GZXRjaCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyXHJcbiAgICAgKiBAcGFyYW0gdG9rZW4gLSB0aGUgbmV3IGp3dCB0b2tlbiBzZW50IGluIHRoZSBhdXRob3Jpc2F0aW9uIGhlYWRlclxyXG4gICAgICovXHJcbiAgICBzZXRBdXRoKHRva2VuKSB7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgQmVhcmVyICR7dG9rZW59YDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSW52b2tlcyBhIGZ1bmN0aW9uXHJcbiAgICAgKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIEZ1bmN0aW9uIHRvIGludm9rZS5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgaW52b2tpbmcgdGhlIEZ1bmN0aW9uLlxyXG4gICAgICovXHJcbiAgICBpbnZva2UoZnVuY3Rpb25OYW1lLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgaGVhZGVycywgbWV0aG9kLCBib2R5OiBmdW5jdGlvbkFyZ3MgfSA9IG9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICBsZXQgX2hlYWRlcnMgPSB7fTtcclxuICAgICAgICAgICAgICAgIGxldCB7IHJlZ2lvbiB9ID0gb3B0aW9ucztcclxuICAgICAgICAgICAgICAgIGlmICghcmVnaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVnaW9uID0gdGhpcy5yZWdpb247XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBBZGQgcmVnaW9uIGFzIHF1ZXJ5IHBhcmFtZXRlciB1c2luZyBVUkwgQVBJXHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke3RoaXMudXJsfS8ke2Z1bmN0aW9uTmFtZX1gKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZWdpb24gJiYgcmVnaW9uICE9PSAnYW55Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIF9oZWFkZXJzWyd4LXJlZ2lvbiddID0gcmVnaW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdmb3JjZUZ1bmN0aW9uUmVnaW9uJywgcmVnaW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBib2R5O1xyXG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uQXJncyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICgoaGVhZGVycyAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhlYWRlcnMsICdDb250ZW50LVR5cGUnKSkgfHwgIWhlYWRlcnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgZnVuY3Rpb25BcmdzIGluc3RhbmNlb2YgQmxvYikgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25BcmdzIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCB3b3JrIGZvciBGaWxlIGFzIEZpbGUgaW5oZXJpdHMgQmxvYlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbHNvIHdvcmtzIGZvciBBcnJheUJ1ZmZlciBhcyBpdCBpcyB0aGUgc2FtZSB1bmRlcmx5aW5nIHN0cnVjdHVyZSBhcyBhIEJsb2JcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2hlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBmdW5jdGlvbkFyZ3M7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBmdW5jdGlvbkFyZ3MgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBsYWluIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBmdW5jdGlvbkFyZ3M7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgZnVuY3Rpb25BcmdzIGluc3RhbmNlb2YgRm9ybURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3Qgc2V0IGNvbnRlbnQtdHlwZSBoZWFkZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcXVlc3Qgd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCB0aGUgcmlnaHQgYm91bmRhcnkgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGZ1bmN0aW9uQXJncztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQsIGFzc3VtZSB0aGlzIGlzIEpTT05cclxuICAgICAgICAgICAgICAgICAgICAgICAgX2hlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkoZnVuY3Rpb25BcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMuZmV0Y2godXJsLnRvU3RyaW5nKCksIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCB8fCAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaGVhZGVycyBwcmlvcml0eSBpcyAoaGlnaCB0byBsb3cpOlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIDEuIGludm9rZS1sZXZlbCBoZWFkZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMi4gY2xpZW50LWxldmVsIGhlYWRlcnNcclxuICAgICAgICAgICAgICAgICAgICAvLyAzLiBkZWZhdWx0IENvbnRlbnQtVHlwZSBoZWFkZXJcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgX2hlYWRlcnMpLCB0aGlzLmhlYWRlcnMpLCBoZWFkZXJzKSxcclxuICAgICAgICAgICAgICAgICAgICBib2R5LFxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGZldGNoRXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5GdW5jdGlvbnNGZXRjaEVycm9yKGZldGNoRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc1JlbGF5RXJyb3IgPSByZXNwb25zZS5oZWFkZXJzLmdldCgneC1yZWxheS1lcnJvcicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUmVsYXlFcnJvciAmJiBpc1JlbGF5RXJyb3IgPT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyB0eXBlc18xLkZ1bmN0aW9uc1JlbGF5RXJyb3IocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyB0eXBlc18xLkZ1bmN0aW9uc0h0dHBFcnJvcihyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2VUeXBlID0gKChfYSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ3RleHQvcGxhaW4nKS5zcGxpdCgnOycpWzBdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHlpZWxkIHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhID0geWllbGQgcmVzcG9uc2UuYmxvYigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2VUeXBlID09PSAndGV4dC9ldmVudC1zdHJlYW0nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2VUeXBlID09PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhID0geWllbGQgcmVzcG9uc2UuZm9ybURhdGEoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gdGV4dFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSB5aWVsZCByZXNwb25zZS50ZXh0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCwgcmVzcG9uc2UgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZTogZXJyb3IgaW5zdGFuY2VvZiB0eXBlc18xLkZ1bmN0aW9uc0h0dHBFcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIHR5cGVzXzEuRnVuY3Rpb25zUmVsYXlFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGVycm9yLmNvbnRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5GdW5jdGlvbnNDbGllbnQgPSBGdW5jdGlvbnNDbGllbnQ7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZ1bmN0aW9uc0NsaWVudC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/functions-js/dist/main/FunctionsClient.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/functions-js/dist/main/helper.js":
/*!*****************************************************************!*\
!*** ./node_modules/@supabase/functions-js/dist/main/helper.js ***!
\*****************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.resolveFetch = void 0;\r\nconst resolveFetch = (customFetch) => {\r\n let _fetch;\r\n if (customFetch) {\r\n _fetch = customFetch;\r\n }\r\n else if (typeof fetch === 'undefined') {\r\n _fetch = (...args) => Promise.resolve().then(() => __importStar(__webpack_require__(/*! @supabase/node-fetch */ \"(ssr)/./node_modules/@supabase/node-fetch/lib/index.js\"))).then(({ default: fetch }) => fetch(...args));\r\n }\r\n else {\r\n _fetch = fetch;\r\n }\r\n return (...args) => _fetch(...args);\r\n};\r\nexports.resolveFetch = resolveFetch;\r\n//# sourceMappingURL=helper.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2Z1bmN0aW9ucy1qcy9kaXN0L21haW4vaGVscGVyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9DQUFvQztBQUNuRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSwwQ0FBMEMsNEJBQTRCO0FBQ3RFLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFLG1CQUFPLENBQUMsb0ZBQXNCLFlBQVksZ0JBQWdCO0FBQ2xJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQiIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRqcy8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvZnVuY3Rpb25zLWpzL2Rpc3QvbWFpbi9oZWxwZXIuanM/ZGMwMSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSkpO1xyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn0pO1xyXG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLnJlc29sdmVGZXRjaCA9IHZvaWQgMDtcclxuY29uc3QgcmVzb2x2ZUZldGNoID0gKGN1c3RvbUZldGNoKSA9PiB7XHJcbiAgICBsZXQgX2ZldGNoO1xyXG4gICAgaWYgKGN1c3RvbUZldGNoKSB7XHJcbiAgICAgICAgX2ZldGNoID0gY3VzdG9tRmV0Y2g7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZmV0Y2ggPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgX2ZldGNoID0gKC4uLmFyZ3MpID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gX19pbXBvcnRTdGFyKHJlcXVpcmUoJ0BzdXBhYmFzZS9ub2RlLWZldGNoJykpKS50aGVuKCh7IGRlZmF1bHQ6IGZldGNoIH0pID0+IGZldGNoKC4uLmFyZ3MpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIF9mZXRjaCA9IGZldGNoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICguLi5hcmdzKSA9PiBfZmV0Y2goLi4uYXJncyk7XHJcbn07XHJcbmV4cG9ydHMucmVzb2x2ZUZldGNoID0gcmVzb2x2ZUZldGNoO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWxwZXIuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/functions-js/dist/main/helper.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/functions-js/dist/main/index.js":
/*!****************************************************************!*\
!*** ./node_modules/@supabase/functions-js/dist/main/index.js ***!
\****************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.FunctionRegion = exports.FunctionsRelayError = exports.FunctionsHttpError = exports.FunctionsFetchError = exports.FunctionsError = exports.FunctionsClient = void 0;\r\nvar FunctionsClient_1 = __webpack_require__(/*! ./FunctionsClient */ \"(ssr)/./node_modules/@supabase/functions-js/dist/main/FunctionsClient.js\");\r\nObject.defineProperty(exports, \"FunctionsClient\", ({ enumerable: true, get: function () { return FunctionsClient_1.FunctionsClient; } }));\r\nvar types_1 = __webpack_require__(/*! ./types */ \"(ssr)/./node_modules/@supabase/functions-js/dist/main/types.js\");\r\nObject.defineProperty(exports, \"FunctionsError\", ({ enumerable: true, get: function () { return types_1.FunctionsError; } }));\r\nObject.defineProperty(exports, \"FunctionsFetchError\", ({ enumerable: true, get: function () { return types_1.FunctionsFetchError; } }));\r\nObject.defineProperty(exports, \"FunctionsHttpError\", ({ enumerable: true, get: function () { return types_1.FunctionsHttpError; } }));\r\nObject.defineProperty(exports, \"FunctionsRelayError\", ({ enumerable: true, get: function () { return types_1.FunctionsRelayError; } }));\r\nObject.defineProperty(exports, \"FunctionRegion\", ({ enumerable: true, get: function () { return types_1.FunctionRegion; } }));\r\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2Z1bmN0aW9ucy1qcy9kaXN0L21haW4vaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsc0JBQXNCLEdBQUcsMkJBQTJCLEdBQUcsMEJBQTBCLEdBQUcsMkJBQTJCLEdBQUcsc0JBQXNCLEdBQUcsdUJBQXVCO0FBQ2xLLHdCQUF3QixtQkFBTyxDQUFDLG1HQUFtQjtBQUNuRCxtREFBa0QsRUFBRSxxQ0FBcUMsNkNBQTZDLEVBQUM7QUFDdkksY0FBYyxtQkFBTyxDQUFDLCtFQUFTO0FBQy9CLGtEQUFpRCxFQUFFLHFDQUFxQyxrQ0FBa0MsRUFBQztBQUMzSCx1REFBc0QsRUFBRSxxQ0FBcUMsdUNBQXVDLEVBQUM7QUFDckksc0RBQXFELEVBQUUscUNBQXFDLHNDQUFzQyxFQUFDO0FBQ25JLHVEQUFzRCxFQUFFLHFDQUFxQyx1Q0FBdUMsRUFBQztBQUNySSxrREFBaUQsRUFBRSxxQ0FBcUMsa0NBQWtDLEVBQUM7QUFDM0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2Z1bmN0aW9ucy1qcy9kaXN0L21haW4vaW5kZXguanM/YmZkNiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLkZ1bmN0aW9uUmVnaW9uID0gZXhwb3J0cy5GdW5jdGlvbnNSZWxheUVycm9yID0gZXhwb3J0cy5GdW5jdGlvbnNIdHRwRXJyb3IgPSBleHBvcnRzLkZ1bmN0aW9uc0ZldGNoRXJyb3IgPSBleHBvcnRzLkZ1bmN0aW9uc0Vycm9yID0gZXhwb3J0cy5GdW5jdGlvbnNDbGllbnQgPSB2b2lkIDA7XHJcbnZhciBGdW5jdGlvbnNDbGllbnRfMSA9IHJlcXVpcmUoXCIuL0Z1bmN0aW9uc0NsaWVudFwiKTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRnVuY3Rpb25zQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBGdW5jdGlvbnNDbGllbnRfMS5GdW5jdGlvbnNDbGllbnQ7IH0gfSk7XHJcbnZhciB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZ1bmN0aW9uc0Vycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18xLkZ1bmN0aW9uc0Vycm9yOyB9IH0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGdW5jdGlvbnNGZXRjaEVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18xLkZ1bmN0aW9uc0ZldGNoRXJyb3I7IH0gfSk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZ1bmN0aW9uc0h0dHBFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMS5GdW5jdGlvbnNIdHRwRXJyb3I7IH0gfSk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZ1bmN0aW9uc1JlbGF5RXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzEuRnVuY3Rpb25zUmVsYXlFcnJvcjsgfSB9KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRnVuY3Rpb25SZWdpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzEuRnVuY3Rpb25SZWdpb247IH0gfSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/functions-js/dist/main/index.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/functions-js/dist/main/types.js":
/*!****************************************************************!*\
!*** ./node_modules/@supabase/functions-js/dist/main/types.js ***!
\****************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.FunctionRegion = exports.FunctionsHttpError = exports.FunctionsRelayError = exports.FunctionsFetchError = exports.FunctionsError = void 0;\r\nclass FunctionsError extends Error {\r\n constructor(message, name = 'FunctionsError', context) {\r\n super(message);\r\n this.name = name;\r\n this.context = context;\r\n }\r\n}\r\nexports.FunctionsError = FunctionsError;\r\nclass FunctionsFetchError extends FunctionsError {\r\n constructor(context) {\r\n super('Failed to send a request to the Edge Function', 'FunctionsFetchError', context);\r\n }\r\n}\r\nexports.FunctionsFetchError = FunctionsFetchError;\r\nclass FunctionsRelayError extends FunctionsError {\r\n constructor(context) {\r\n super('Relay Error invoking the Edge Function', 'FunctionsRelayError', context);\r\n }\r\n}\r\nexports.FunctionsRelayError = FunctionsRelayError;\r\nclass FunctionsHttpError extends FunctionsError {\r\n constructor(context) {\r\n super('Edge Function returned a non-2xx status code', 'FunctionsHttpError', context);\r\n }\r\n}\r\nexports.FunctionsHttpError = FunctionsHttpError;\r\n// Define the enum for the 'region' property\r\nvar FunctionRegion;\r\n(function (FunctionRegion) {\r\n FunctionRegion[\"Any\"] = \"any\";\r\n FunctionRegion[\"ApNortheast1\"] = \"ap-northeast-1\";\r\n FunctionRegion[\"ApNortheast2\"] = \"ap-northeast-2\";\r\n FunctionRegion[\"ApSouth1\"] = \"ap-south-1\";\r\n FunctionRegion[\"ApSoutheast1\"] = \"ap-southeast-1\";\r\n FunctionRegion[\"ApSoutheast2\"] = \"ap-southeast-2\";\r\n FunctionRegion[\"CaCentral1\"] = \"ca-central-1\";\r\n FunctionRegion[\"EuCentral1\"] = \"eu-central-1\";\r\n FunctionRegion[\"EuWest1\"] = \"eu-west-1\";\r\n FunctionRegion[\"EuWest2\"] = \"eu-west-2\";\r\n FunctionRegion[\"EuWest3\"] = \"eu-west-3\";\r\n FunctionRegion[\"SaEast1\"] = \"sa-east-1\";\r\n FunctionRegion[\"UsEast1\"] = \"us-east-1\";\r\n FunctionRegion[\"UsWest1\"] = \"us-west-1\";\r\n FunctionRegion[\"UsWest2\"] = \"us-west-2\";\r\n})(FunctionRegion = exports.FunctionRegion || (exports.FunctionRegion = {}));\r\n//# sourceMappingURL=types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2Z1bmN0aW9ucy1qcy9kaXN0L21haW4vdHlwZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsc0JBQXNCLEdBQUcsMEJBQTBCLEdBQUcsMkJBQTJCLEdBQUcsMkJBQTJCLEdBQUcsc0JBQXNCO0FBQ3hJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsOENBQThDLHNCQUFzQixLQUFLO0FBQzFFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9mdW5jdGlvbnMtanMvZGlzdC9tYWluL3R5cGVzLmpzPzlhNjYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5GdW5jdGlvblJlZ2lvbiA9IGV4cG9ydHMuRnVuY3Rpb25zSHR0cEVycm9yID0gZXhwb3J0cy5GdW5jdGlvbnNSZWxheUVycm9yID0gZXhwb3J0cy5GdW5jdGlvbnNGZXRjaEVycm9yID0gZXhwb3J0cy5GdW5jdGlvbnNFcnJvciA9IHZvaWQgMDtcclxuY2xhc3MgRnVuY3Rpb25zRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBuYW1lID0gJ0Z1bmN0aW9uc0Vycm9yJywgY29udGV4dCkge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLkZ1bmN0aW9uc0Vycm9yID0gRnVuY3Rpb25zRXJyb3I7XHJcbmNsYXNzIEZ1bmN0aW9uc0ZldGNoRXJyb3IgZXh0ZW5kcyBGdW5jdGlvbnNFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0KSB7XHJcbiAgICAgICAgc3VwZXIoJ0ZhaWxlZCB0byBzZW5kIGEgcmVxdWVzdCB0byB0aGUgRWRnZSBGdW5jdGlvbicsICdGdW5jdGlvbnNGZXRjaEVycm9yJywgY29udGV4dCk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5GdW5jdGlvbnNGZXRjaEVycm9yID0gRnVuY3Rpb25zRmV0Y2hFcnJvcjtcclxuY2xhc3MgRnVuY3Rpb25zUmVsYXlFcnJvciBleHRlbmRzIEZ1bmN0aW9uc0Vycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQpIHtcclxuICAgICAgICBzdXBlcignUmVsYXkgRXJyb3IgaW52b2tpbmcgdGhlIEVkZ2UgRnVuY3Rpb24nLCAnRnVuY3Rpb25zUmVsYXlFcnJvcicsIGNvbnRleHQpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuRnVuY3Rpb25zUmVsYXlFcnJvciA9IEZ1bmN0aW9uc1JlbGF5RXJyb3I7XHJcbmNsYXNzIEZ1bmN0aW9uc0h0dHBFcnJvciBleHRlbmRzIEZ1bmN0aW9uc0Vycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQpIHtcclxuICAgICAgICBzdXBlcignRWRnZSBGdW5jdGlvbiByZXR1cm5lZCBhIG5vbi0yeHggc3RhdHVzIGNvZGUnLCAnRnVuY3Rpb25zSHR0cEVycm9yJywgY29udGV4dCk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5GdW5jdGlvbnNIdHRwRXJyb3IgPSBGdW5jdGlvbnNIdHRwRXJyb3I7XHJcbi8vIERlZmluZSB0aGUgZW51bSBmb3IgdGhlICdyZWdpb24nIHByb3BlcnR5XHJcbnZhciBGdW5jdGlvblJlZ2lvbjtcclxuKGZ1bmN0aW9uIChGdW5jdGlvblJlZ2lvbikge1xyXG4gICAgRnVuY3Rpb25SZWdpb25bXCJBbnlcIl0gPSBcImFueVwiO1xyXG4gICAgRnVuY3Rpb25SZWdpb25bXCJBcE5vcnRoZWFzdDFcIl0gPSBcImFwLW5vcnRoZWFzdC0xXCI7XHJcbiAgICBGdW5jdGlvblJlZ2lvbltcIkFwTm9ydGhlYXN0MlwiXSA9IFwiYXAtbm9ydGhlYXN0LTJcIjtcclxuICAgIEZ1bmN0aW9uUmVnaW9uW1wiQXBTb3V0aDFcIl0gPSBcImFwLXNvdXRoLTFcIjtcclxuICAgIEZ1bmN0aW9uUmVnaW9uW1wiQXBTb3V0aGVhc3QxXCJdID0gXCJhcC1zb3V0aGVhc3QtMVwiO1xyXG4gICAgRnVuY3Rpb25SZWdpb25bXCJBcFNvdXRoZWFzdDJcIl0gPSBcImFwLXNvdXRoZWFzdC0yXCI7XHJcbiAgICBGdW5jdGlvblJlZ2lvbltcIkNhQ2VudHJhbDFcIl0gPSBcImNhLWNlbnRyYWwtMVwiO1xyXG4gICAgRnVuY3Rpb25SZWdpb25bXCJFdUNlbnRyYWwxXCJdID0gXCJldS1jZW50cmFsLTFcIjtcclxuICAgIEZ1bmN0aW9uUmVnaW9uW1wiRXVXZXN0MVwiXSA9IFwiZXUtd2VzdC0xXCI7XHJcbiAgICBGdW5jdGlvblJlZ2lvbltcIkV1V2VzdDJcIl0gPSBcImV1LXdlc3QtMlwiO1xyXG4gICAgRnVuY3Rpb25SZWdpb25bXCJFdVdlc3QzXCJdID0gXCJldS13ZXN0LTNcIjtcclxuICAgIEZ1bmN0aW9uUmVnaW9uW1wiU2FFYXN0MVwiXSA9IFwic2EtZWFzdC0xXCI7XHJcbiAgICBGdW5jdGlvblJlZ2lvbltcIlVzRWFzdDFcIl0gPSBcInVzLWVhc3QtMVwiO1xyXG4gICAgRnVuY3Rpb25SZWdpb25bXCJVc1dlc3QxXCJdID0gXCJ1cy13ZXN0LTFcIjtcclxuICAgIEZ1bmN0aW9uUmVnaW9uW1wiVXNXZXN0MlwiXSA9IFwidXMtd2VzdC0yXCI7XHJcbn0pKEZ1bmN0aW9uUmVnaW9uID0gZXhwb3J0cy5GdW5jdGlvblJlZ2lvbiB8fCAoZXhwb3J0cy5GdW5jdGlvblJlZ2lvbiA9IHt9KSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/functions-js/dist/main/types.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/node-fetch/lib/index.js":
/*!********************************************************!*\
!*** ./node_modules/@supabase/node-fetch/lib/index.js ***!
\********************************************************/
/***/ ((module, exports, __webpack_require__) => {
eval("\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n\r\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\r\n\r\nvar Stream = _interopDefault(__webpack_require__(/*! stream */ \"stream\"));\r\nvar http = _interopDefault(__webpack_require__(/*! http */ \"http\"));\r\nvar Url = _interopDefault(__webpack_require__(/*! url */ \"url\"));\r\nvar whatwgUrl = _interopDefault(__webpack_require__(/*! whatwg-url */ \"(ssr)/./node_modules/whatwg-url/lib/public-api.js\"));\r\nvar https = _interopDefault(__webpack_require__(/*! https */ \"https\"));\r\nvar zlib = _interopDefault(__webpack_require__(/*! zlib */ \"zlib\"));\r\n\r\n// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js\r\n\r\n// fix for \"Readable\" isn't a named export issue\r\nconst Readable = Stream.Readable;\r\n\r\nconst BUFFER = Symbol('buffer');\r\nconst TYPE = Symbol('type');\r\n\r\nclass Blob {\r\n\tconstructor() {\r\n\t\tthis[TYPE] = '';\r\n\r\n\t\tconst blobParts = arguments[0];\r\n\t\tconst options = arguments[1];\r\n\r\n\t\tconst buffers = [];\r\n\t\tlet size = 0;\r\n\r\n\t\tif (blobParts) {\r\n\t\t\tconst a = blobParts;\r\n\t\t\tconst length = Number(a.length);\r\n\t\t\tfor (let i = 0; i < length; i++) {\r\n\t\t\t\tconst element = a[i];\r\n\t\t\t\tlet buffer;\r\n\t\t\t\tif (element instanceof Buffer) {\r\n\t\t\t\t\tbuffer = element;\r\n\t\t\t\t} else if (ArrayBuffer.isView(element)) {\r\n\t\t\t\t\tbuffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);\r\n\t\t\t\t} else if (element instanceof ArrayBuffer) {\r\n\t\t\t\t\tbuffer = Buffer.from(element);\r\n\t\t\t\t} else if (element instanceof Blob) {\r\n\t\t\t\t\tbuffer = element[BUFFER];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tbuffer = Buffer.from(typeof element === 'string' ? element : String(element));\r\n\t\t\t\t}\r\n\t\t\t\tsize += buffer.length;\r\n\t\t\t\tbuffers.push(buffer);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis[BUFFER] = Buffer.concat(buffers);\r\n\r\n\t\tlet type = options && options.type !== undefined && String(options.type).toLowerCase();\r\n\t\tif (type && !/[^\\u0020-\\u007E]/.test(type)) {\r\n\t\t\tthis[TYPE] = type;\r\n\t\t}\r\n\t}\r\n\tget size() {\r\n\t\treturn this[BUFFER].length;\r\n\t}\r\n\tget type() {\r\n\t\treturn this[TYPE];\r\n\t}\r\n\ttext() {\r\n\t\treturn Promise.resolve(this[BUFFER].toString());\r\n\t}\r\n\tarrayBuffer() {\r\n\t\tconst buf = this[BUFFER];\r\n\t\tconst ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\r\n\t\treturn Promise.resolve(ab);\r\n\t}\r\n\tstream() {\r\n\t\tconst readable = new Readable();\r\n\t\treadable._read = function () {};\r\n\t\treadable.push(this[BUFFER]);\r\n\t\treadable.push(null);\r\n\t\treturn readable;\r\n\t}\r\n\ttoString() {\r\n\t\treturn '[object Blob]';\r\n\t}\r\n\tslice() {\r\n\t\tconst size = this.size;\r\n\r\n\t\tconst start = arguments[0];\r\n\t\tconst end = arguments[1];\r\n\t\tlet relativeStart, relativeEnd;\r\n\t\tif (start === undefined) {\r\n\t\t\trelativeStart = 0;\r\n\t\t} else if (start < 0) {\r\n\t\t\trelativeStart = Math.max(size + start, 0);\r\n\t\t} else {\r\n\t\t\trelativeStart = Math.min(start, size);\r\n\t\t}\r\n\t\tif (end === undefined) {\r\n\t\t\trelativeEnd = size;\r\n\t\t} else if (end < 0) {\r\n\t\t\trelativeEnd = Math.max(size + end, 0);\r\n\t\t} else {\r\n\t\t\trelativeEnd = Math.min(end, size);\r\n\t\t}\r\n\t\tconst span = Math.max(relativeEnd - relativeStart, 0);\r\n\r\n\t\tconst buffer = this[BUFFER];\r\n\t\tconst slicedBuffer = buffer.slice(relativeStart, relativeStart + span);\r\n\t\tconst blob = new Blob([], { type: arguments[2] });\r\n\t\tblob[BUFFER] = slicedBuffer;\r\n\t\treturn blob;\r\n\t}\r\n}\r\n\r\nObject.defineProperties(Blob.prototype, {\r\n\tsize: { enumerable: true },\r\n\ttype: { enumerable: true },\r\n\tslice: { enumerable: true }\r\n});\r\n\r\nObject.defineProperty(Blob.prototype, Symbol.toStringTag, {\r\n\tvalue: 'Blob',\r\n\twritable: false,\r\n\tenumerable: false,\r\n\tconfigurable: true\r\n});\r\n\r\n/**\r\n * fetch-error.js\r\n *\r\n * FetchError interface for operational errors\r\n */\r\n\r\n/**\r\n * Create FetchError instance\r\n *\r\n * @param String message Error message for human\r\n * @param String type Error type for machine\r\n * @param String systemError For Node.js system error\r\n * @return FetchError\r\n */\r\nfunction FetchError(message, type, systemError) {\r\n Error.call(this, message);\r\n\r\n this.message = message;\r\n this.type = type;\r\n\r\n // when err.type is `system`, err.code contains system error code\r\n if (systemError) {\r\n this.code = this.errno = systemError.code;\r\n }\r\n\r\n // hide custom error implementation details from end-users\r\n Error.captureStackTrace(this, this.constructor);\r\n}\r\n\r\nFetchError.prototype = Object.create(Error.prototype);\r\nFetchError.prototype.constructor = FetchError;\r\nFetchError.prototype.name = 'FetchError';\r\n\r\nlet convert;\r\n\r\nconst INTERNALS = Symbol('Body internals');\r\n\r\n// fix an issue where \"PassThrough\" isn't a named export for node <10\r\nconst PassThrough = Stream.PassThrough;\r\n\r\n/**\r\n * Body mixin\r\n *\r\n * Ref: https://fetch.spec.whatwg.org/#body\r\n *\r\n * @param Stream body Readable stream\r\n * @param Object opts Response options\r\n * @return Void\r\n */\r\nfunction Body(body) {\r\n\tvar _this = this;\r\n\r\n\tvar _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\r\n\t _ref$size = _ref.size;\r\n\r\n\tlet size = _ref$size === undefined ? 0 : _ref$size;\r\n\tvar _ref$timeout = _ref.timeout;\r\n\tlet timeout = _ref$timeout === undefined ? 0 : _ref$timeout;\r\n\r\n\tif (body == null) {\r\n\t\t// body is undefined or null\r\n\t\tbody = null;\r\n\t} else if (isURLSearchParams(body)) {\r\n\t\t// body is a URLSearchParams\r\n\t\tbody = Buffer.from(body.toString());\r\n\t} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\r\n\t\t// body is ArrayBuffer\r\n\t\tbody = Buffer.from(body);\r\n\t} else if (ArrayBuffer.isView(body)) {\r\n\t\t// body is ArrayBufferView\r\n\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\r\n\t} else if (body instanceof Stream) ; else {\r\n\t\t// none of the above\r\n\t\t// coerce to string then buffer\r\n\t\tbody = Buffer.from(String(body));\r\n\t}\r\n\tthis[INTERNALS] = {\r\n\t\tbody,\r\n\t\tdisturbed: false,\r\n\t\terror: null\r\n\t};\r\n\tthis.size = size;\r\n\tthis.timeout = timeout;\r\n\r\n\tif (body instanceof Stream) {\r\n\t\tbody.on('error', function (err) {\r\n\t\t\tconst error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);\r\n\t\t\t_this[INTERNALS].error = error;\r\n\t\t});\r\n\t}\r\n}\r\n\r\nBody.prototype = {\r\n\tget body() {\r\n\t\treturn this[INTERNALS].body;\r\n\t},\r\n\r\n\tget bodyUsed() {\r\n\t\treturn this[INTERNALS].disturbed;\r\n\t},\r\n\r\n\t/**\r\n * Decode response as ArrayBuffer\r\n *\r\n * @return Promise\r\n */\r\n\tarrayBuffer() {\r\n\t\treturn consumeBody.call(this).then(function (buf) {\r\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n * Return raw response as Blob\r\n *\r\n * @return Promise\r\n */\r\n\tblob() {\r\n\t\tlet ct = this.headers && this.headers.get('content-type') || '';\r\n\t\treturn consumeBody.call(this).then(function (buf) {\r\n\t\t\treturn Object.assign(\r\n\t\t\t// Prevent copying\r\n\t\t\tnew Blob([], {\r\n\t\t\t\ttype: ct.toLowerCase()\r\n\t\t\t}), {\r\n\t\t\t\t[BUFFER]: buf\r\n\t\t\t});\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n * Decode response as json\r\n *\r\n * @return Promise\r\n */\r\n\tjson() {\r\n\t\tvar _this2 = this;\r\n\r\n\t\treturn consumeBody.call(this).then(function (buffer) {\r\n\t\t\ttry {\r\n\t\t\t\treturn JSON.parse(buffer.toString());\r\n\t\t\t} catch (err) {\r\n\t\t\t\treturn Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n * Decode response as text\r\n *\r\n * @return Promise\r\n */\r\n\ttext() {\r\n\t\treturn consumeBody.call(this).then(function (buffer) {\r\n\t\t\treturn buffer.toString();\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n * Decode response as buffer (non-spec api)\r\n *\r\n * @return Promise\r\n */\r\n\tbuffer() {\r\n\t\treturn consumeBody.call(this);\r\n\t},\r\n\r\n\t/**\r\n * Decode response as text, while automatically detecting the encoding and\r\n * trying to decode to UTF-8 (non-spec api)\r\n *\r\n * @return Promise\r\n */\r\n\ttextConverted() {\r\n\t\tvar _this3 = this;\r\n\r\n\t\treturn consumeBody.call(this).then(function (buffer) {\r\n\t\t\treturn convertBody(buffer, _this3.headers);\r\n\t\t});\r\n\t}\r\n};\r\n\r\n// In browsers, all properties are enumerable.\r\nObject.defineProperties(Body.prototype, {\r\n\tbody: { enumerable: true },\r\n\tbodyUsed: { enumerable: true },\r\n\tarrayBuffer: { enumerable: true },\r\n\tblob: { enumerable: true },\r\n\tjson: { enumerable: true },\r\n\ttext: { enumerable: true }\r\n});\r\n\r\nBody.mixIn = function (proto) {\r\n\tfor (const name of Object.getOwnPropertyNames(Body.prototype)) {\r\n\t\t// istanbul ignore else: future proof\r\n\t\tif (!(name in proto)) {\r\n\t\t\tconst desc = Object.getOwnPropertyDescriptor(Body.prototype, name);\r\n\t\t\tObject.defineProperty(proto, name, desc);\r\n\t\t}\r\n\t}\r\n};\r\n\r\n/**\r\n * Consume and convert an entire Body to a Buffer.\r\n *\r\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\r\n *\r\n * @return Promise\r\n */\r\nfunction consumeBody() {\r\n\tvar _this4 = this;\r\n\r\n\tif (this[INTERNALS].disturbed) {\r\n\t\treturn Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));\r\n\t}\r\n\r\n\tthis[INTERNALS].disturbed = true;\r\n\r\n\tif (this[INTERNALS].error) {\r\n\t\treturn Body.Promise.reject(this[INTERNALS].error);\r\n\t}\r\n\r\n\tlet body = this.body;\r\n\r\n\t// body is null\r\n\tif (body === null) {\r\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\r\n\t}\r\n\r\n\t// body is blob\r\n\tif (isBlob(body)) {\r\n\t\tbody = body.stream();\r\n\t}\r\n\r\n\t// body is buffer\r\n\tif (Buffer.isBuffer(body)) {\r\n\t\treturn Body.Promise.resolve(body);\r\n\t}\r\n\r\n\t// istanbul ignore if: should never happen\r\n\tif (!(body instanceof Stream)) {\r\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\r\n\t}\r\n\r\n\t// body is stream\r\n\t// get ready to actually consume the body\r\n\tlet accum = [];\r\n\tlet accumBytes = 0;\r\n\tlet abort = false;\r\n\r\n\treturn new Body.Promise(function (resolve, reject) {\r\n\t\tlet resTimeout;\r\n\r\n\t\t// allow timeout on slow response body\r\n\t\tif (_this4.timeout) {\r\n\t\t\tresTimeout = setTimeout(function () {\r\n\t\t\t\tabort = true;\r\n\t\t\t\treject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));\r\n\t\t\t}, _this4.timeout);\r\n\t\t}\r\n\r\n\t\t// handle stream errors\r\n\t\tbody.on('error', function (err) {\r\n\t\t\tif (err.name === 'AbortError') {\r\n\t\t\t\t// if the request was aborted, reject with this Error\r\n\t\t\t\tabort = true;\r\n\t\t\t\treject(err);\r\n\t\t\t} else {\r\n\t\t\t\t// other errors, such as incorrect content-encoding\r\n\t\t\t\treject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tbody.on('data', function (chunk) {\r\n\t\t\tif (abort || chunk === null) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (_this4.size && accumBytes + chunk.length > _this4.size) {\r\n\t\t\t\tabort = true;\r\n\t\t\t\treject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\taccumBytes += chunk.length;\r\n\t\t\taccum.push(chunk);\r\n\t\t});\r\n\r\n\t\tbody.on('end', function () {\r\n\t\t\tif (abort) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tclearTimeout(resTimeout);\r\n\r\n\t\t\ttry {\r\n\t\t\t\tresolve(Buffer.concat(accum, accumBytes));\r\n\t\t\t} catch (err) {\r\n\t\t\t\t// handle streams that have accumulated too much data (issue #414)\r\n\t\t\t\treject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n}\r\n\r\n/**\r\n * Detect buffer encoding and convert to target encoding\r\n * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding\r\n *\r\n * @param Buffer buffer Incoming buffer\r\n * @param String encoding Target encoding\r\n * @return String\r\n */\r\nfunction convertBody(buffer, headers) {\r\n\t{\r\n\t\tthrow new Error('The package `encoding` must be installed to use the textConverted() function');\r\n\t}\r\n\r\n\tconst ct = headers.get('content-type');\r\n\tlet charset = 'utf-8';\r\n\tlet res, str;\r\n\r\n\t// header\r\n\tif (ct) {\r\n\t\tres = /charset=([^;]*)/i.exec(ct);\r\n\t}\r\n\r\n\t// no charset in content type, peek at response body for at most 1024 bytes\r\n\tstr = buffer.slice(0, 1024).toString();\r\n\r\n\t// html5\r\n\tif (!res && str) {\r\n\t\tres = /<meta.+?charset=(['\"])(.+?)\\1/i.exec(str);\r\n\t}\r\n\r\n\t// html4\r\n\tif (!res && str) {\r\n\t\tres = /<meta[\\s]+?http-equiv=(['\"])content-type\\1[\\s]+?content=(['\"])(.+?)\\2/i.exec(str);\r\n\t\tif (!res) {\r\n\t\t\tres = /<meta[\\s]+?content=(['\"])(.+?)\\1[\\s]+?http-equiv=(['\"])content-type\\3/i.exec(str);\r\n\t\t\tif (res) {\r\n\t\t\t\tres.pop(); // drop last quote\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (res) {\r\n\t\t\tres = /charset=(.*)/i.exec(res.pop());\r\n\t\t}\r\n\t}\r\n\r\n\t// xml\r\n\tif (!res && str) {\r\n\t\tres = /<\\?xml.+?encoding=(['\"])(.+?)\\1/i.exec(str);\r\n\t}\r\n\r\n\t// found charset\r\n\tif (res) {\r\n\t\tcharset = res.pop();\r\n\r\n\t\t// prevent decode issues when sites use incorrect encoding\r\n\t\t// ref: https://hsivonen.fi/encoding-menu/\r\n\t\tif (charset === 'gb2312' || charset === 'gbk') {\r\n\t\t\tcharset = 'gb18030';\r\n\t\t}\r\n\t}\r\n\r\n\t// turn raw buffers into a single utf-8 buffer\r\n\treturn convert(buffer, 'UTF-8', charset).toString();\r\n}\r\n\r\n/**\r\n * Detect a URLSearchParams object\r\n * ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143\r\n *\r\n * @param Object obj Object to detect by type or brand\r\n * @return String\r\n */\r\nfunction isURLSearchParams(obj) {\r\n\t// Duck-typing as a necessary condition.\r\n\tif (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {\r\n\t\treturn false;\r\n\t}\r\n\r\n\t// Brand-checking and more duck-typing as optional condition.\r\n\treturn obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';\r\n}\r\n\r\n/**\r\n * Check if `obj` is a W3C `Blob` object (which `File` inherits from)\r\n * @param {*} obj\r\n * @return {boolean}\r\n */\r\nfunction isBlob(obj) {\r\n\treturn typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);\r\n}\r\n\r\n/**\r\n * Clone body given Res/Req instance\r\n *\r\n * @param Mixed instance Response or Request instance\r\n * @return Mixed\r\n */\r\nfunction clone(instance) {\r\n\tlet p1, p2;\r\n\tlet body = instance.body;\r\n\r\n\t// don't allow cloning a used body\r\n\tif (instance.bodyUsed) {\r\n\t\tthrow new Error('cannot clone body after it is used');\r\n\t}\r\n\r\n\t// check that body is a stream and not form-data object\r\n\t// note: we can't clone the form-data object without having it as a dependency\r\n\tif (body instanceof Stream && typeof body.getBoundary !== 'function') {\r\n\t\t// tee instance body\r\n\t\tp1 = new PassThrough();\r\n\t\tp2 = new PassThrough();\r\n\t\tbody.pipe(p1);\r\n\t\tbody.pipe(p2);\r\n\t\t// set instance body to teed body and return the other teed body\r\n\t\tinstance[INTERNALS].body = p1;\r\n\t\tbody = p2;\r\n\t}\r\n\r\n\treturn body;\r\n}\r\n\r\n/**\r\n * Performs the operation \"extract a `Content-Type` value from |object|\" as\r\n * specified in the specification:\r\n * https://fetch.spec.whatwg.org/#concept-bodyinit-extract\r\n *\r\n * This function assumes that instance.body is present.\r\n *\r\n * @param Mixed instance Any options.body input\r\n */\r\nfunction extractContentType(body) {\r\n\tif (body === null) {\r\n\t\t// body is null\r\n\t\treturn null;\r\n\t} else if (typeof body === 'string') {\r\n\t\t// body is string\r\n\t\treturn 'text/plain;charset=UTF-8';\r\n\t} else if (isURLSearchParams(body)) {\r\n\t\t// body is a URLSearchParams\r\n\t\treturn 'application/x-www-form-urlencoded;charset=UTF-8';\r\n\t} else if (isBlob(body)) {\r\n\t\t// body is blob\r\n\t\treturn body.type || null;\r\n\t} else if (Buffer.isBuffer(body)) {\r\n\t\t// body is buffer\r\n\t\treturn null;\r\n\t} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\r\n\t\t// body is ArrayBuffer\r\n\t\treturn null;\r\n\t} else if (ArrayBuffer.isView(body)) {\r\n\t\t// body is ArrayBufferView\r\n\t\treturn null;\r\n\t} else if (typeof body.getBoundary === 'function') {\r\n\t\t// detect form data input from form-data module\r\n\t\treturn `multipart/form-data;boundary=${body.getBoundary()}`;\r\n\t} else if (body instanceof Stream) {\r\n\t\t// body is stream\r\n\t\t// can't really do much about this\r\n\t\treturn null;\r\n\t} else {\r\n\t\t// Body constructor defaults other things to string\r\n\t\treturn 'text/plain;charset=UTF-8';\r\n\t}\r\n}\r\n\r\n/**\r\n * The Fetch Standard treats this as if \"total bytes\" is a property on the body.\r\n * For us, we have to explicitly get it with a function.\r\n *\r\n * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes\r\n *\r\n * @param Body instance Instance of Body\r\n * @return Number? Number of bytes, or null if not possible\r\n */\r\nfunction getTotalBytes(instance) {\r\n\tconst body = instance.body;\r\n\r\n\r\n\tif (body === null) {\r\n\t\t// body is null\r\n\t\treturn 0;\r\n\t} else if (isBlob(body)) {\r\n\t\treturn body.size;\r\n\t} else if (Buffer.isBuffer(body)) {\r\n\t\t// body is buffer\r\n\t\treturn body.length;\r\n\t} else if (body && typeof body.getLengthSync === 'function') {\r\n\t\t// detect form data input from form-data module\r\n\t\tif (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x\r\n\t\tbody.hasKnownLength && body.hasKnownLength()) {\r\n\t\t\t// 2.x\r\n\t\t\treturn body.getLengthSync();\r\n\t\t}\r\n\t\treturn null;\r\n\t} else {\r\n\t\t// body is stream\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\n/**\r\n * Write a Body to a Node.js WritableStream (e.g. http.Request) object.\r\n *\r\n * @param Body instance Instance of Body\r\n * @return Void\r\n */\r\nfunction writeToStream(dest, instance) {\r\n\tconst body = instance.body;\r\n\r\n\r\n\tif (body === null) {\r\n\t\t// body is null\r\n\t\tdest.end();\r\n\t} else if (isBlob(body)) {\r\n\t\tbody.stream().pipe(dest);\r\n\t} else if (Buffer.isBuffer(body)) {\r\n\t\t// body is buffer\r\n\t\tdest.write(body);\r\n\t\tdest.end();\r\n\t} else {\r\n\t\t// body is stream\r\n\t\tbody.pipe(dest);\r\n\t}\r\n}\r\n\r\n// expose Promise\r\nBody.Promise = global.Promise;\r\n\r\n/**\r\n * headers.js\r\n *\r\n * Headers class offers convenient helpers\r\n */\r\n\r\nconst invalidTokenRegex = /[^\\^_`a-zA-Z\\-0-9!#$%&'*+.|~]/;\r\nconst invalidHeaderCharRegex = /[^\\t\\x20-\\x7e\\x80-\\xff]/;\r\n\r\nfunction validateName(name) {\r\n\tname = `${name}`;\r\n\tif (invalidTokenRegex.test(name) || name === '') {\r\n\t\tthrow new TypeError(`${name} is not a legal HTTP header name`);\r\n\t}\r\n}\r\n\r\nfunction validateValue(value) {\r\n\tvalue = `${value}`;\r\n\tif (invalidHeaderCharRegex.test(value)) {\r\n\t\tthrow new TypeError(`${value} is not a legal HTTP header value`);\r\n\t}\r\n}\r\n\r\n/**\r\n * Find the key in the map object given a header name.\r\n *\r\n * Returns undefined if not found.\r\n *\r\n * @param String name Header name\r\n * @return String|Undefined\r\n */\r\nfunction find(map, name) {\r\n\tname = name.toLowerCase();\r\n\tfor (const key in map) {\r\n\t\tif (key.toLowerCase() === name) {\r\n\t\t\treturn key;\r\n\t\t}\r\n\t}\r\n\treturn undefined;\r\n}\r\n\r\nconst MAP = Symbol('map');\r\nclass Headers {\r\n\t/**\r\n * Headers class\r\n *\r\n * @param Object headers Response headers\r\n * @return Void\r\n */\r\n\tconstructor() {\r\n\t\tlet init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\r\n\r\n\t\tthis[MAP] = Object.create(null);\r\n\r\n\t\tif (init instanceof Headers) {\r\n\t\t\tconst rawHeaders = init.raw();\r\n\t\t\tconst headerNames = Object.keys(rawHeaders);\r\n\r\n\t\t\tfor (const headerName of headerNames) {\r\n\t\t\t\tfor (const value of rawHeaders[headerName]) {\r\n\t\t\t\t\tthis.append(headerName, value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// We don't worry about converting prop to ByteString here as append()\r\n\t\t// will handle it.\r\n\t\tif (init == null) ; else if (typeof init === 'object') {\r\n\t\t\tconst method = init[Symbol.iterator];\r\n\t\t\tif (method != null) {\r\n\t\t\t\tif (typeof method !== 'function') {\r\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// sequence<sequence<ByteString>>\r\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\r\n\t\t\t\tconst pairs = [];\r\n\t\t\t\tfor (const pair of init) {\r\n\t\t\t\t\tif (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {\r\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be iterable');\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpairs.push(Array.from(pair));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (const pair of pairs) {\r\n\t\t\t\t\tif (pair.length !== 2) {\r\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.append(pair[0], pair[1]);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// record<ByteString, ByteString>\r\n\t\t\t\tfor (const key of Object.keys(init)) {\r\n\t\t\t\t\tconst value = init[key];\r\n\t\t\t\t\tthis.append(key, value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthrow new TypeError('Provided initializer must be an object');\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n * Return combined header value given name\r\n *\r\n * @param String name Header name\r\n * @return Mixed\r\n */\r\n\tget(name) {\r\n\t\tname = `${name}`;\r\n\t\tvalidateName(name);\r\n\t\tconst key = find(this[MAP], name);\r\n\t\tif (key === undefined) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn this[MAP][key].join(', ');\r\n\t}\r\n\r\n\t/**\r\n * Iterate over all headers\r\n *\r\n * @param Function callback Executed for each item with parameters (value, name, thisArg)\r\n * @param Boolean thisArg `this` context for callback function\r\n * @return Void\r\n */\r\n\tforEach(callback) {\r\n\t\tlet thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\r\n\r\n\t\tlet pairs = getHeaders(this);\r\n\t\tlet i = 0;\r\n\t\twhile (i < pairs.length) {\r\n\t\t\tvar _pairs$i = pairs[i];\r\n\t\t\tconst name = _pairs$i[0],\r\n\t\t\t value = _pairs$i[1];\r\n\r\n\t\t\tcallback.call(thisArg, value, name, this);\r\n\t\t\tpairs = getHeaders(this);\r\n\t\t\ti++;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n * Overwrite header values given name\r\n *\r\n * @param String name Header name\r\n * @param String value Header value\r\n * @return Void\r\n */\r\n\tset(name, value) {\r\n\t\tname = `${name}`;\r\n\t\tvalue = `${value}`;\r\n\t\tvalidateName(name);\r\n\t\tvalidateValue(value);\r\n\t\tconst key = find(this[MAP], name);\r\n\t\tthis[MAP][key !== undefined ? key : name] = [value];\r\n\t}\r\n\r\n\t/**\r\n * Append a value onto existing header\r\n *\r\n * @param String name Header name\r\n * @param String value Header value\r\n * @return Void\r\n */\r\n\tappend(name, value) {\r\n\t\tname = `${name}`;\r\n\t\tvalue = `${value}`;\r\n\t\tvalidateName(name);\r\n\t\tvalidateValue(value);\r\n\t\tconst key = find(this[MAP], name);\r\n\t\tif (key !== undefined) {\r\n\t\t\tthis[MAP][key].push(value);\r\n\t\t} else {\r\n\t\t\tthis[MAP][name] = [value];\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n * Check for header name existence\r\n *\r\n * @param String name Header name\r\n * @return Boolean\r\n */\r\n\thas(name) {\r\n\t\tname = `${name}`;\r\n\t\tvalidateName(name);\r\n\t\treturn find(this[MAP], name) !== undefined;\r\n\t}\r\n\r\n\t/**\r\n * Delete all header values given name\r\n *\r\n * @param String name Header name\r\n * @return Void\r\n */\r\n\tdelete(name) {\r\n\t\tname = `${name}`;\r\n\t\tvalidateName(name);\r\n\t\tconst key = find(this[MAP], name);\r\n\t\tif (key !== undefined) {\r\n\t\t\tdelete this[MAP][key];\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n * Return raw headers (non-spec api)\r\n *\r\n * @return Object\r\n */\r\n\traw() {\r\n\t\treturn this[MAP];\r\n\t}\r\n\r\n\t/**\r\n * Get an iterator on keys.\r\n *\r\n * @return Iterator\r\n */\r\n\tkeys() {\r\n\t\treturn createHeadersIterator(this, 'key');\r\n\t}\r\n\r\n\t/**\r\n * Get an iterator on values.\r\n *\r\n * @return Iterator\r\n */\r\n\tvalues() {\r\n\t\treturn createHeadersIterator(this, 'value');\r\n\t}\r\n\r\n\t/**\r\n * Get an iterator on entries.\r\n *\r\n * This is the default iterator of the Headers object.\r\n *\r\n * @return Iterator\r\n */\r\n\t[Symbol.iterator]() {\r\n\t\treturn createHeadersIterator(this, 'key+value');\r\n\t}\r\n}\r\nHeaders.prototype.entries = Headers.prototype[Symbol.iterator];\r\n\r\nObject.defineProperty(Headers.prototype, Symbol.toStringTag, {\r\n\tvalue: 'Headers',\r\n\twritable: false,\r\n\tenumerable: false,\r\n\tconfigurable: true\r\n});\r\n\r\nObject.defineProperties(Headers.prototype, {\r\n\tget: { enumerable: true },\r\n\tforEach: { enumerable: true },\r\n\tset: { enumerable: true },\r\n\tappend: { enumerable: true },\r\n\thas: { enumerable: true },\r\n\tdelete: { enumerable: true },\r\n\tkeys: { enumerable: true },\r\n\tvalues: { enumerable: true },\r\n\tentries: { enumerable: true }\r\n});\r\n\r\nfunction getHeaders(headers) {\r\n\tlet kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';\r\n\r\n\tconst keys = Object.keys(headers[MAP]).sort();\r\n\treturn keys.map(kind === 'key' ? function (k) {\r\n\t\treturn k.toLowerCase();\r\n\t} : kind === 'value' ? function (k) {\r\n\t\treturn headers[MAP][k].join(', ');\r\n\t} : function (k) {\r\n\t\treturn [k.toLowerCase(), headers[MAP][k].join(', ')];\r\n\t});\r\n}\r\n\r\nconst INTERNAL = Symbol('internal');\r\n\r\nfunction createHeadersIterator(target, kind) {\r\n\tconst iterator = Object.create(HeadersIteratorPrototype);\r\n\titerator[INTERNAL] = {\r\n\t\ttarget,\r\n\t\tkind,\r\n\t\tindex: 0\r\n\t};\r\n\treturn iterator;\r\n}\r\n\r\nconst HeadersIteratorPrototype = Object.setPrototypeOf({\r\n\tnext() {\r\n\t\t// istanbul ignore if\r\n\t\tif (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {\r\n\t\t\tthrow new TypeError('Value of `this` is not a HeadersIterator');\r\n\t\t}\r\n\r\n\t\tvar _INTERNAL = this[INTERNAL];\r\n\t\tconst target = _INTERNAL.target,\r\n\t\t kind = _INTERNAL.kind,\r\n\t\t index = _INTERNAL.index;\r\n\r\n\t\tconst values = getHeaders(target, kind);\r\n\t\tconst len = values.length;\r\n\t\tif (index >= len) {\r\n\t\t\treturn {\r\n\t\t\t\tvalue: undefined,\r\n\t\t\t\tdone: true\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tthis[INTERNAL].index = index + 1;\r\n\r\n\t\treturn {\r\n\t\t\tvalue: values[index],\r\n\t\t\tdone: false\r\n\t\t};\r\n\t}\r\n}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));\r\n\r\nObject.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {\r\n\tvalue: 'HeadersIterator',\r\n\twritable: false,\r\n\tenumerable: false,\r\n\tconfigurable: true\r\n});\r\n\r\n/**\r\n * Export the Headers object in a form that Node.js can consume.\r\n *\r\n * @param Headers headers\r\n * @return Object\r\n */\r\nfunction exportNodeCompatibleHeaders(headers) {\r\n\tconst obj = Object.assign({ __proto__: null }, headers[MAP]);\r\n\r\n\t// http.request() only supports string as Host header. This hack makes\r\n\t// specifying custom Host header possible.\r\n\tconst hostHeaderKey = find(headers[MAP], 'Host');\r\n\tif (hostHeaderKey !== undefined) {\r\n\t\tobj[hostHeaderKey] = obj[hostHeaderKey][0];\r\n\t}\r\n\r\n\treturn obj;\r\n}\r\n\r\n/**\r\n * Create a Headers object from an object of headers, ignoring those that do\r\n * not conform to HTTP grammar productions.\r\n *\r\n * @param Object obj Object of headers\r\n * @return Headers\r\n */\r\nfunction createHeadersLenient(obj) {\r\n\tconst headers = new Headers();\r\n\tfor (const name of Object.keys(obj)) {\r\n\t\tif (invalidTokenRegex.test(name)) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif (Array.isArray(obj[name])) {\r\n\t\t\tfor (const val of obj[name]) {\r\n\t\t\t\tif (invalidHeaderCharRegex.test(val)) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (headers[MAP][name] === undefined) {\r\n\t\t\t\t\theaders[MAP][name] = [val];\r\n\t\t\t\t} else {\r\n\t\t\t\t\theaders[MAP][name].push(val);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (!invalidHeaderCharRegex.test(obj[name])) {\r\n\t\t\theaders[MAP][name] = [obj[name]];\r\n\t\t}\r\n\t}\r\n\treturn headers;\r\n}\r\n\r\nconst INTERNALS$1 = Symbol('Response internals');\r\n\r\n// fix an issue where \"STATUS_CODES\" aren't a named export for node <10\r\nconst STATUS_CODES = http.STATUS_CODES;\r\n\r\n/**\r\n * Response class\r\n *\r\n * @param Stream body Readable stream\r\n * @param Object opts Response options\r\n * @return Void\r\n */\r\nclass Response {\r\n\tconstructor() {\r\n\t\tlet body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\r\n\t\tlet opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\r\n\r\n\t\tBody.call(this, body, opts);\r\n\r\n\t\tconst status = opts.status || 200;\r\n\t\tconst headers = new Headers(opts.headers);\r\n\r\n\t\tif (body != null && !headers.has('Content-Type')) {\r\n\t\t\tconst contentType = extractContentType(body);\r\n\t\t\tif (contentType) {\r\n\t\t\t\theaders.append('Content-Type', contentType);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis[INTERNALS$1] = {\r\n\t\t\turl: opts.url,\r\n\t\t\tstatus,\r\n\t\t\tstatusText: opts.statusText || STATUS_CODES[status],\r\n\t\t\theaders,\r\n\t\t\tcounter: opts.counter\r\n\t\t};\r\n\t}\r\n\r\n\tget url() {\r\n\t\treturn this[INTERNALS$1].url || '';\r\n\t}\r\n\r\n\tget status() {\r\n\t\treturn this[INTERNALS$1].status;\r\n\t}\r\n\r\n\t/**\r\n * Convenience property representing if the request ended normally\r\n */\r\n\tget ok() {\r\n\t\treturn this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;\r\n\t}\r\n\r\n\tget redirected() {\r\n\t\treturn this[INTERNALS$1].counter > 0;\r\n\t}\r\n\r\n\tget statusText() {\r\n\t\treturn this[INTERNALS$1].statusText;\r\n\t}\r\n\r\n\tget headers() {\r\n\t\treturn this[INTERNALS$1].headers;\r\n\t}\r\n\r\n\t/**\r\n * Clone this response\r\n *\r\n * @return Response\r\n */\r\n\tclone() {\r\n\t\treturn new Response(clone(this), {\r\n\t\t\turl: this.url,\r\n\t\t\tstatus: this.status,\r\n\t\t\tstatusText: this.statusText,\r\n\t\t\theaders: this.headers,\r\n\t\t\tok: this.ok,\r\n\t\t\tredirected: this.redirected\r\n\t\t});\r\n\t}\r\n}\r\n\r\nBody.mixIn(Response.prototype);\r\n\r\nObject.defineProperties(Response.prototype, {\r\n\turl: { enumerable: true },\r\n\tstatus: { enumerable: true },\r\n\tok: { enumerable: true },\r\n\tredirected: { enumerable: true },\r\n\tstatusText: { enumerable: true },\r\n\theaders: { enumerable: true },\r\n\tclone: { enumerable: true }\r\n});\r\n\r\nObject.defineProperty(Response.prototype, Symbol.toStringTag, {\r\n\tvalue: 'Response',\r\n\twritable: false,\r\n\tenumerable: false,\r\n\tconfigurable: true\r\n});\r\n\r\nconst INTERNALS$2 = Symbol('Request internals');\r\nconst URL = Url.URL || whatwgUrl.URL;\r\n\r\n// fix an issue where \"format\", \"parse\" aren't a named export for node <10\r\nconst parse_url = Url.parse;\r\nconst format_url = Url.format;\r\n\r\n/**\r\n * Wrapper around `new URL` to handle arbitrary URLs\r\n *\r\n * @param {string} urlStr\r\n * @return {void}\r\n */\r\nfunction parseURL(urlStr) {\r\n\t/*\r\n \tCheck whether the URL is absolute or not\r\n \t\tScheme: https://tools.ietf.org/html/rfc3986#section-3.1\r\n \tAbsolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\r\n */\r\n\tif (/^[a-zA-Z][a-zA-Z\\d+\\-.]*:/.exec(urlStr)) {\r\n\t\turlStr = new URL(urlStr).toString();\r\n\t}\r\n\r\n\t// Fallback to old implementation for arbitrary URLs\r\n\treturn parse_url(urlStr);\r\n}\r\n\r\nconst streamDestructionSupported = 'destroy' in Stream.Readable.prototype;\r\n\r\n/**\r\n * Check if a value is an instance of Request.\r\n *\r\n * @param Mixed input\r\n * @return Boolean\r\n */\r\nfunction isRequest(input) {\r\n\treturn typeof input === 'object' && typeof input[INTERNALS$2] === 'object';\r\n}\r\n\r\nfunction isAbortSignal(signal) {\r\n\tconst proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);\r\n\treturn !!(proto && proto.constructor.name === 'AbortSignal');\r\n}\r\n\r\n/**\r\n * Request class\r\n *\r\n * @param Mixed input Url or Request instance\r\n * @param Object init Custom options\r\n * @return Void\r\n */\r\nclass Request {\r\n\tconstructor(input) {\r\n\t\tlet init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\r\n\r\n\t\tlet parsedURL;\r\n\r\n\t\t// normalize input\r\n\t\tif (!isRequest(input)) {\r\n\t\t\tif (input && input.href) {\r\n\t\t\t\t// in order to support Node.js' Url objects; though WHATWG's URL objects\r\n\t\t\t\t// will fall into this branch also (since their `toString()` will return\r\n\t\t\t\t// `href` property anyway)\r\n\t\t\t\tparsedURL = parseURL(input.href);\r\n\t\t\t} else {\r\n\t\t\t\t// coerce input to a string before attempting to parse\r\n\t\t\t\tparsedURL = parseURL(`${input}`);\r\n\t\t\t}\r\n\t\t\tinput = {};\r\n\t\t} else {\r\n\t\t\tparsedURL = parseURL(input.url);\r\n\t\t}\r\n\r\n\t\tlet method = init.method || input.method || 'GET';\r\n\t\tmethod = method.toUpperCase();\r\n\r\n\t\tif ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {\r\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\r\n\t\t}\r\n\r\n\t\tlet inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;\r\n\r\n\t\tBody.call(this, inputBody, {\r\n\t\t\ttimeout: init.timeout || input.timeout || 0,\r\n\t\t\tsize: init.size || input.size || 0\r\n\t\t});\r\n\r\n\t\tconst headers = new Headers(init.headers || input.headers || {});\r\n\r\n\t\tif (inputBody != null && !headers.has('Content-Type')) {\r\n\t\t\tconst contentType = extractContentType(inputBody);\r\n\t\t\tif (contentType) {\r\n\t\t\t\theaders.append('Content-Type', contentType);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet signal = isRequest(input) ? input.signal : null;\r\n\t\tif ('signal' in init) signal = init.signal;\r\n\r\n\t\tif (signal != null && !isAbortSignal(signal)) {\r\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal');\r\n\t\t}\r\n\r\n\t\tthis[INTERNALS$2] = {\r\n\t\t\tmethod,\r\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\r\n\t\t\theaders,\r\n\t\t\tparsedURL,\r\n\t\t\tsignal\r\n\t\t};\r\n\r\n\t\t// node-fetch-only options\r\n\t\tthis.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;\r\n\t\tthis.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;\r\n\t\tthis.counter = init.counter || input.counter || 0;\r\n\t\tthis.agent = init.agent || input.agent;\r\n\t}\r\n\r\n\tget method() {\r\n\t\treturn this[INTERNALS$2].method;\r\n\t}\r\n\r\n\tget url() {\r\n\t\treturn format_url(this[INTERNALS$2].parsedURL);\r\n\t}\r\n\r\n\tget headers() {\r\n\t\treturn this[INTERNALS$2].headers;\r\n\t}\r\n\r\n\tget redirect() {\r\n\t\treturn this[INTERNALS$2].redirect;\r\n\t}\r\n\r\n\tget signal() {\r\n\t\treturn this[INTERNALS$2].signal;\r\n\t}\r\n\r\n\t/**\r\n * Clone this request\r\n *\r\n * @return Request\r\n */\r\n\tclone() {\r\n\t\treturn new Request(this);\r\n\t}\r\n}\r\n\r\nBody.mixIn(Request.prototype);\r\n\r\nObject.defineProperty(Request.prototype, Symbol.toStringTag, {\r\n\tvalue: 'Request',\r\n\twritable: false,\r\n\tenumerable: false,\r\n\tconfigurable: true\r\n});\r\n\r\nObject.defineProperties(Request.prototype, {\r\n\tmethod: { enumerable: true },\r\n\turl: { enumerable: true },\r\n\theaders: { enumerable: true },\r\n\tredirect: { enumerable: true },\r\n\tclone: { enumerable: true },\r\n\tsignal: { enumerable: true }\r\n});\r\n\r\n/**\r\n * Convert a Request to Node.js http request options.\r\n *\r\n * @param Request A Request instance\r\n * @return Object The options object to be passed to http.request\r\n */\r\nfunction getNodeRequestOptions(request) {\r\n\tconst parsedURL = request[INTERNALS$2].parsedURL;\r\n\tconst headers = new Headers(request[INTERNALS$2].headers);\r\n\r\n\t// fetch step 1.3\r\n\tif (!headers.has('Accept')) {\r\n\t\theaders.set('Accept', '*/*');\r\n\t}\r\n\r\n\t// Basic fetch\r\n\tif (!parsedURL.protocol || !parsedURL.hostname) {\r\n\t\tthrow new TypeError('Only absolute URLs are supported');\r\n\t}\r\n\r\n\tif (!/^https?:$/.test(parsedURL.protocol)) {\r\n\t\tthrow new TypeError('Only HTTP(S) protocols are supported');\r\n\t}\r\n\r\n\tif (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {\r\n\t\tthrow new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');\r\n\t}\r\n\r\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\r\n\tlet contentLengthValue = null;\r\n\tif (request.body == null && /^(POST|PUT)$/i.test(request.method)) {\r\n\t\tcontentLengthValue = '0';\r\n\t}\r\n\tif (request.body != null) {\r\n\t\tconst totalBytes = getTotalBytes(request);\r\n\t\tif (typeof totalBytes === 'number') {\r\n\t\t\tcontentLengthValue = String(totalBytes);\r\n\t\t}\r\n\t}\r\n\tif (contentLengthValue) {\r\n\t\theaders.set('Content-Length', contentLengthValue);\r\n\t}\r\n\r\n\t// HTTP-network-or-cache fetch step 2.11\r\n\tif (!headers.has('User-Agent')) {\r\n\t\theaders.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');\r\n\t}\r\n\r\n\t// HTTP-network-or-cache fetch step 2.15\r\n\tif (request.compress && !headers.has('Accept-Encoding')) {\r\n\t\theaders.set('Accept-Encoding', 'gzip,deflate');\r\n\t}\r\n\r\n\tlet agent = request.agent;\r\n\tif (typeof agent === 'function') {\r\n\t\tagent = agent(parsedURL);\r\n\t}\r\n\r\n\tif (!headers.has('Connection') && !agent) {\r\n\t\theaders.set('Connection', 'close');\r\n\t}\r\n\r\n\t// HTTP-network fetch step 4.2\r\n\t// chunked encoding is handled by Node.js\r\n\r\n\treturn Object.assign({}, parsedURL, {\r\n\t\tmethod: request.method,\r\n\t\theaders: exportNodeCompatibleHeaders(headers),\r\n\t\tagent\r\n\t});\r\n}\r\n\r\n/**\r\n * abort-error.js\r\n *\r\n * AbortError interface for cancelled requests\r\n */\r\n\r\n/**\r\n * Create AbortError instance\r\n *\r\n * @param String message Error message for human\r\n * @return AbortError\r\n */\r\nfunction AbortError(message) {\r\n Error.call(this, message);\r\n\r\n this.type = 'aborted';\r\n this.message = message;\r\n\r\n // hide custom error implementation details from end-users\r\n Error.captureStackTrace(this, this.constructor);\r\n}\r\n\r\nAbortError.prototype = Object.create(Error.prototype);\r\nAbortError.prototype.constructor = AbortError;\r\nAbortError.prototype.name = 'AbortError';\r\n\r\nconst URL$1 = Url.URL || whatwgUrl.URL;\r\n\r\n// fix an issue where \"PassThrough\", \"resolve\" aren't a named export for node <10\r\nconst PassThrough$1 = Stream.PassThrough;\r\n\r\nconst isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {\r\n\tconst orig = new URL$1(original).hostname;\r\n\tconst dest = new URL$1(destination).hostname;\r\n\r\n\treturn orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);\r\n};\r\n\r\n/**\r\n * isSameProtocol reports whether the two provided URLs use the same protocol.\r\n *\r\n * Both domains must already be in canonical form.\r\n * @param {string|URL} original\r\n * @param {string|URL} destination\r\n */\r\nconst isSameProtocol = function isSameProtocol(destination, original) {\r\n\tconst orig = new URL$1(original).protocol;\r\n\tconst dest = new URL$1(destination).protocol;\r\n\r\n\treturn orig === dest;\r\n};\r\n\r\n/**\r\n * Fetch function\r\n *\r\n * @param Mixed url Absolute url or Request instance\r\n * @param Object opts Fetch options\r\n * @return Promise\r\n */\r\nfunction fetch(url, opts) {\r\n\r\n\t// allow custom promise\r\n\tif (!fetch.Promise) {\r\n\t\tthrow new Error('native promise missing, set fetch.Promise to your favorite alternative');\r\n\t}\r\n\r\n\tBody.Promise = fetch.Promise;\r\n\r\n\t// wrap http.request into fetch\r\n\treturn new fetch.Promise(function (resolve, reject) {\r\n\t\t// build request object\r\n\t\tconst request = new Request(url, opts);\r\n\t\tconst options = getNodeRequestOptions(request);\r\n\r\n\t\tconst send = (options.protocol === 'https:' ? https : http).request;\r\n\t\tconst signal = request.signal;\r\n\r\n\t\tlet response = null;\r\n\r\n\t\tconst abort = function abort() {\r\n\t\t\tlet error = new AbortError('The user aborted a request.');\r\n\t\t\treject(error);\r\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\r\n\t\t\t\tdestroyStream(request.body, error);\r\n\t\t\t}\r\n\t\t\tif (!response || !response.body) return;\r\n\t\t\tresponse.body.emit('error', error);\r\n\t\t};\r\n\r\n\t\tif (signal && signal.aborted) {\r\n\t\t\tabort();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst abortAndFinalize = function abortAndFinalize() {\r\n\t\t\tabort();\r\n\t\t\tfinalize();\r\n\t\t};\r\n\r\n\t\t// send request\r\n\t\tconst req = send(options);\r\n\t\tlet reqTimeout;\r\n\r\n\t\tif (signal) {\r\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\r\n\t\t}\r\n\r\n\t\tfunction finalize() {\r\n\t\t\treq.abort();\r\n\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\r\n\t\t\tclearTimeout(reqTimeout);\r\n\t\t}\r\n\r\n\t\tif (request.timeout) {\r\n\t\t\treq.once('socket', function (socket) {\r\n\t\t\t\treqTimeout = setTimeout(function () {\r\n\t\t\t\t\treject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));\r\n\t\t\t\t\tfinalize();\r\n\t\t\t\t}, request.timeout);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treq.on('error', function (err) {\r\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));\r\n\r\n\t\t\tif (response && response.body) {\r\n\t\t\t\tdestroyStream(response.body, err);\r\n\t\t\t}\r\n\r\n\t\t\tfinalize();\r\n\t\t});\r\n\r\n\t\tfixResponseChunkedTransferBadEnding(req, function (err) {\r\n\t\t\tif (signal && signal.aborted) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (response && response.body) {\r\n\t\t\t\tdestroyStream(response.body, err);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t/* c8 ignore next 18 */\r\n\t\tif (parseInt(process.version.substring(1)) < 14) {\r\n\t\t\t// Before Node.js 14, pipeline() does not fully support async iterators and does not always\r\n\t\t\t// properly handle when the socket close/end events are out of order.\r\n\t\t\treq.on('socket', function (s) {\r\n\t\t\t\ts.addListener('close', function (hadError) {\r\n\t\t\t\t\t// if a data listener is still present we didn't end cleanly\r\n\t\t\t\t\tconst hasDataListener = s.listenerCount('data') > 0;\r\n\r\n\t\t\t\t\t// if end happened before close but the socket didn't emit an error, do it now\r\n\t\t\t\t\tif (response && hasDataListener && !hadError && !(signal && signal.aborted)) {\r\n\t\t\t\t\t\tconst err = new Error('Premature close');\r\n\t\t\t\t\t\terr.code = 'ERR_STREAM_PREMATURE_CLOSE';\r\n\t\t\t\t\t\tresponse.body.emit('error', err);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treq.on('response', function (res) {\r\n\t\t\tclearTimeout(reqTimeout);\r\n\r\n\t\t\tconst headers = createHeadersLenient(res.headers);\r\n\r\n\t\t\t// HTTP fetch step 5\r\n\t\t\tif (fetch.isRedirect(res.statusCode)) {\r\n\t\t\t\t// HTTP fetch step 5.2\r\n\t\t\t\tconst location = headers.get('Location');\r\n\r\n\t\t\t\t// HTTP fetch step 5.3\r\n\t\t\t\tlet locationURL = null;\r\n\t\t\t\ttry {\r\n\t\t\t\t\tlocationURL = location === null ? null : new URL$1(location, request.url).toString();\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\t// error here can only be invalid URL in Location: header\r\n\t\t\t\t\t// do not throw when options.redirect == manual\r\n\t\t\t\t\t// let the user extract the errorneous redirect URL\r\n\t\t\t\t\tif (request.redirect !== 'manual') {\r\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));\r\n\t\t\t\t\t\tfinalize();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// HTTP fetch step 5.5\r\n\t\t\t\tswitch (request.redirect) {\r\n\t\t\t\t\tcase 'error':\r\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));\r\n\t\t\t\t\t\tfinalize();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\tcase 'manual':\r\n\t\t\t\t\t\t// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.\r\n\t\t\t\t\t\tif (locationURL !== null) {\r\n\t\t\t\t\t\t\t// handle corrupted header\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\theaders.set('Location', locationURL);\r\n\t\t\t\t\t\t\t} catch (err) {\r\n\t\t\t\t\t\t\t\t// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request\r\n\t\t\t\t\t\t\t\treject(err);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'follow':\r\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\r\n\t\t\t\t\t\tif (locationURL === null) {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\r\n\t\t\t\t\t\tif (request.counter >= request.follow) {\r\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\r\n\t\t\t\t\t\t\tfinalize();\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\r\n\t\t\t\t\t\t// Create a new Request object.\r\n\t\t\t\t\t\tconst requestOpts = {\r\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\r\n\t\t\t\t\t\t\tfollow: request.follow,\r\n\t\t\t\t\t\t\tcounter: request.counter + 1,\r\n\t\t\t\t\t\t\tagent: request.agent,\r\n\t\t\t\t\t\t\tcompress: request.compress,\r\n\t\t\t\t\t\t\tmethod: request.method,\r\n\t\t\t\t\t\t\tbody: request.body,\r\n\t\t\t\t\t\t\tsignal: request.signal,\r\n\t\t\t\t\t\t\ttimeout: request.timeout,\r\n\t\t\t\t\t\t\tsize: request.size\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tif (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) {\r\n\t\t\t\t\t\t\tfor (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {\r\n\t\t\t\t\t\t\t\trequestOpts.headers.delete(name);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\r\n\t\t\t\t\t\tif (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {\r\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\r\n\t\t\t\t\t\t\tfinalize();\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\r\n\t\t\t\t\t\tif (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {\r\n\t\t\t\t\t\t\trequestOpts.method = 'GET';\r\n\t\t\t\t\t\t\trequestOpts.body = undefined;\r\n\t\t\t\t\t\t\trequestOpts.headers.delete('content-length');\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\r\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOpts)));\r\n\t\t\t\t\t\tfinalize();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// prepare response\r\n\t\t\tres.once('end', function () {\r\n\t\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\r\n\t\t\t});\r\n\t\t\tlet body = res.pipe(new PassThrough$1());\r\n\r\n\t\t\tconst response_options = {\r\n\t\t\t\turl: request.url,\r\n\t\t\t\tstatus: res.statusCode,\r\n\t\t\t\tstatusText: res.statusMessage,\r\n\t\t\t\theaders: headers,\r\n\t\t\t\tsize: request.size,\r\n\t\t\t\ttimeout: request.timeout,\r\n\t\t\t\tcounter: request.counter\r\n\t\t\t};\r\n\r\n\t\t\t// HTTP-network fetch step 12.1.1.3\r\n\t\t\tconst codings = headers.get('Content-Encoding');\r\n\r\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\r\n\r\n\t\t\t// in following scenarios we ignore compression support\r\n\t\t\t// 1. compression support is disabled\r\n\t\t\t// 2. HEAD request\r\n\t\t\t// 3. no Content-Encoding header\r\n\t\t\t// 4. no content response (204)\r\n\t\t\t// 5. content not modified response (304)\r\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {\r\n\t\t\t\tresponse = new Response(body, response_options);\r\n\t\t\t\tresolve(response);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// For Node v6+\r\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\r\n\t\t\t// servers send slightly invalid responses that are still accepted\r\n\t\t\t// by common browsers.\r\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\r\n\t\t\tconst zlibOptions = {\r\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\r\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\r\n\t\t\t};\r\n\r\n\t\t\t// for gzip\r\n\t\t\tif (codings == 'gzip' || codings == 'x-gzip') {\r\n\t\t\t\tbody = body.pipe(zlib.createGunzip(zlibOptions));\r\n\t\t\t\tresponse = new Response(body, response_options);\r\n\t\t\t\tresolve(response);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// for deflate\r\n\t\t\tif (codings == 'deflate' || codings == 'x-deflate') {\r\n\t\t\t\t// handle the infamous raw deflate response from old servers\r\n\t\t\t\t// a hack for old IIS and Apache servers\r\n\t\t\t\tconst raw = res.pipe(new PassThrough$1());\r\n\t\t\t\traw.once('data', function (chunk) {\r\n\t\t\t\t\t// see http://stackoverflow.com/questions/37519828\r\n\t\t\t\t\tif ((chunk[0] & 0x0F) === 0x08) {\r\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflate());\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflateRaw());\r\n\t\t\t\t\t}\r\n\t\t\t\t\tresponse = new Response(body, response_options);\r\n\t\t\t\t\tresolve(response);\r\n\t\t\t\t});\r\n\t\t\t\traw.on('end', function () {\r\n\t\t\t\t\t// some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted.\r\n\t\t\t\t\tif (!response) {\r\n\t\t\t\t\t\tresponse = new Response(body, response_options);\r\n\t\t\t\t\t\tresolve(response);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// for br\r\n\t\t\tif (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {\r\n\t\t\t\tbody = body.pipe(zlib.createBrotliDecompress());\r\n\t\t\t\tresponse = new Response(body, response_options);\r\n\t\t\t\tresolve(response);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// otherwise, use response as-is\r\n\t\t\tresponse = new Response(body, response_options);\r\n\t\t\tresolve(response);\r\n\t\t});\r\n\r\n\t\twriteToStream(req, request);\r\n\t});\r\n}\r\nfunction fixResponseChunkedTransferBadEnding(request, errorCallback) {\r\n\tlet socket;\r\n\r\n\trequest.on('socket', function (s) {\r\n\t\tsocket = s;\r\n\t});\r\n\r\n\trequest.on('response', function (response) {\r\n\t\tconst headers = response.headers;\r\n\r\n\t\tif (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) {\r\n\t\t\tresponse.once('close', function (hadError) {\r\n\t\t\t\t// tests for socket presence, as in some situations the\r\n\t\t\t\t// the 'socket' event is not triggered for the request\r\n\t\t\t\t// (happens in deno), avoids `TypeError`\r\n\t\t\t\t// if a data listener is still present we didn't end cleanly\r\n\t\t\t\tconst hasDataListener = socket && socket.listenerCount('data') > 0;\r\n\r\n\t\t\t\tif (hasDataListener && !hadError) {\r\n\t\t\t\t\tconst err = new Error('Premature close');\r\n\t\t\t\t\terr.code = 'ERR_STREAM_PREMATURE_CLOSE';\r\n\t\t\t\t\terrorCallback(err);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction destroyStream(stream, err) {\r\n\tif (stream.destroy) {\r\n\t\tstream.destroy(err);\r\n\t} else {\r\n\t\t// node < 8\r\n\t\tstream.emit('error', err);\r\n\t\tstream.end();\r\n\t}\r\n}\r\n\r\n/**\r\n * Redirect code matching\r\n *\r\n * @param Number code Status code\r\n * @return Boolean\r\n */\r\nfetch.isRedirect = function (code) {\r\n\treturn code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\r\n};\r\n\r\n// expose Promise\r\nfetch.Promise = global.Promise;\r\n\r\nmodule.exports = exports = fetch;\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports[\"default\"] = exports;\r\nexports.Headers = Headers;\r\nexports.Request = Request;\r\nexports.Response = Response;\r\nexports.FetchError = FetchError;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL25vZGUtZmV0Y2gvbGliL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Q7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQSw2QkFBNkIsbUJBQU8sQ0FBQyxzQkFBUTtBQUM3QywyQkFBMkIsbUJBQU8sQ0FBQyxrQkFBTTtBQUN6QywwQkFBMEIsbUJBQU8sQ0FBQyxnQkFBSztBQUN2QyxnQ0FBZ0MsbUJBQU8sQ0FBQyxxRUFBWTtBQUNwRCw0QkFBNEIsbUJBQU8sQ0FBQyxvQkFBTztBQUMzQywyQkFBMkIsbUJBQU8sQ0FBQyxrQkFBTTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixZQUFZO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixvQkFBb0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxrQkFBa0I7QUFDM0IsVUFBVTtBQUNWLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtGQUFrRjtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUcseUJBQXlCLGtDQUFrQztBQUM5RDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHLG1DQUFtQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUhBQWlILFVBQVUsSUFBSSxZQUFZO0FBQzNJO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSixHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCwrRUFBK0UsWUFBWSxVQUFVLFlBQVk7QUFDakg7QUFDQSxHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsa0JBQWtCO0FBQzNCLGFBQWEsa0JBQWtCO0FBQy9CLGdCQUFnQixrQkFBa0I7QUFDbEMsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUztBQUNULENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFFQUFxRSxTQUFTO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FLFlBQVksUUFBUSxlQUFlO0FBQ3ZHLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EseUVBQXlFLFdBQVcsSUFBSSxZQUFZO0FBQ3BHO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsWUFBWSxjQUFjLFlBQVk7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDRFQUE0RSxXQUFXLElBQUksWUFBWTtBQUN2RztBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLEdBQUc7QUFDZixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxxQkFBcUI7QUFDckIsR0FBRztBQUNIO0FBQ0EsNENBQTRDO0FBQzVDLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsOEJBQThCLFdBQVcsbUJBQW1CO0FBQzVELEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBLHlCQUF5QixNQUFNO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EseUJBQXlCLE9BQU87QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLEtBQUs7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLEtBQUs7QUFDakIsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLEtBQUs7QUFDakIsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksS0FBSztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxLQUFLO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxRQUFRLGtCQUFrQjtBQUMxQixZQUFZLGtCQUFrQjtBQUM5QixRQUFRLGtCQUFrQjtBQUMxQixXQUFXLGtCQUFrQjtBQUM3QixRQUFRLGtCQUFrQjtBQUMxQixXQUFXLGtCQUFrQjtBQUM3QixTQUFTLGtCQUFrQjtBQUMzQixXQUFXLGtCQUFrQjtBQUM3QixZQUFZO0FBQ1osQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixpQkFBaUI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGtCQUFrQjtBQUMxQixXQUFXLGtCQUFrQjtBQUM3QixPQUFPLGtCQUFrQjtBQUN6QixlQUFlLGtCQUFrQjtBQUNqQyxlQUFlLGtCQUFrQjtBQUNqQyxZQUFZLGtCQUFrQjtBQUM5QixVQUFVO0FBQ1YsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNEJBQTRCLE1BQU07QUFDbEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxpRUFBaUU7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFdBQVcsa0JBQWtCO0FBQzdCLFFBQVEsa0JBQWtCO0FBQzFCLFlBQVksa0JBQWtCO0FBQzlCLGFBQWEsa0JBQWtCO0FBQy9CLFVBQVUsa0JBQWtCO0FBQzVCLFdBQVc7QUFDWCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCLFdBQVcsWUFBWTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsWUFBWTtBQUM5RDtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGFBQWEsa0JBQWtCLFlBQVk7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxvRkFBb0YsU0FBUztBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0dBQXNHLFlBQVk7QUFDbEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCxZQUFZO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsa0JBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGdCQUFnQjtBQUNoQixrQkFBa0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL25vZGUtZmV0Y2gvbGliL2luZGV4LmpzPzgyYWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuXHJcbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdCAoZXgpIHsgcmV0dXJuIChleCAmJiAodHlwZW9mIGV4ID09PSAnb2JqZWN0JykgJiYgJ2RlZmF1bHQnIGluIGV4KSA/IGV4WydkZWZhdWx0J10gOiBleDsgfVxyXG5cclxudmFyIFN0cmVhbSA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdzdHJlYW0nKSk7XHJcbnZhciBodHRwID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ2h0dHAnKSk7XHJcbnZhciBVcmwgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgndXJsJykpO1xyXG52YXIgd2hhdHdnVXJsID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ3doYXR3Zy11cmwnKSk7XHJcbnZhciBodHRwcyA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdodHRwcycpKTtcclxudmFyIHpsaWIgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnemxpYicpKTtcclxuXHJcbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS90bXB2YXIvanNkb20vYmxvYi9hYTg1YjJhYmYwNzc2NmZmN2JmNWMxZjZkYWFmYjM3MjZmMmYyZGI1L2xpYi9qc2RvbS9saXZpbmcvYmxvYi5qc1xyXG5cclxuLy8gZml4IGZvciBcIlJlYWRhYmxlXCIgaXNuJ3QgYSBuYW1lZCBleHBvcnQgaXNzdWVcclxuY29uc3QgUmVhZGFibGUgPSBTdHJlYW0uUmVhZGFibGU7XHJcblxyXG5jb25zdCBCVUZGRVIgPSBTeW1ib2woJ2J1ZmZlcicpO1xyXG5jb25zdCBUWVBFID0gU3ltYm9sKCd0eXBlJyk7XHJcblxyXG5jbGFzcyBCbG9iIHtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXNbVFlQRV0gPSAnJztcclxuXHJcblx0XHRjb25zdCBibG9iUGFydHMgPSBhcmd1bWVudHNbMF07XHJcblx0XHRjb25zdCBvcHRpb25zID0gYXJndW1lbnRzWzFdO1xyXG5cclxuXHRcdGNvbnN0IGJ1ZmZlcnMgPSBbXTtcclxuXHRcdGxldCBzaXplID0gMDtcclxuXHJcblx0XHRpZiAoYmxvYlBhcnRzKSB7XHJcblx0XHRcdGNvbnN0IGEgPSBibG9iUGFydHM7XHJcblx0XHRcdGNvbnN0IGxlbmd0aCA9IE51bWJlcihhLmxlbmd0aCk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRjb25zdCBlbGVtZW50ID0gYVtpXTtcclxuXHRcdFx0XHRsZXQgYnVmZmVyO1xyXG5cdFx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgQnVmZmVyKSB7XHJcblx0XHRcdFx0XHRidWZmZXIgPSBlbGVtZW50O1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGVsZW1lbnQpKSB7XHJcblx0XHRcdFx0XHRidWZmZXIgPSBCdWZmZXIuZnJvbShlbGVtZW50LmJ1ZmZlciwgZWxlbWVudC5ieXRlT2Zmc2V0LCBlbGVtZW50LmJ5dGVMZW5ndGgpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XHJcblx0XHRcdFx0XHRidWZmZXIgPSBCdWZmZXIuZnJvbShlbGVtZW50KTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCbG9iKSB7XHJcblx0XHRcdFx0XHRidWZmZXIgPSBlbGVtZW50W0JVRkZFUl07XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJyA/IGVsZW1lbnQgOiBTdHJpbmcoZWxlbWVudCkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRzaXplICs9IGJ1ZmZlci5sZW5ndGg7XHJcblx0XHRcdFx0YnVmZmVycy5wdXNoKGJ1ZmZlcik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzW0JVRkZFUl0gPSBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpO1xyXG5cclxuXHRcdGxldCB0eXBlID0gb3B0aW9ucyAmJiBvcHRpb25zLnR5cGUgIT09IHVuZGVmaW5lZCAmJiBTdHJpbmcob3B0aW9ucy50eXBlKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0aWYgKHR5cGUgJiYgIS9bXlxcdTAwMjAtXFx1MDA3RV0vLnRlc3QodHlwZSkpIHtcclxuXHRcdFx0dGhpc1tUWVBFXSA9IHR5cGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdGdldCBzaXplKCkge1xyXG5cdFx0cmV0dXJuIHRoaXNbQlVGRkVSXS5sZW5ndGg7XHJcblx0fVxyXG5cdGdldCB0eXBlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXNbVFlQRV07XHJcblx0fVxyXG5cdHRleHQoKSB7XHJcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXNbQlVGRkVSXS50b1N0cmluZygpKTtcclxuXHR9XHJcblx0YXJyYXlCdWZmZXIoKSB7XHJcblx0XHRjb25zdCBidWYgPSB0aGlzW0JVRkZFUl07XHJcblx0XHRjb25zdCBhYiA9IGJ1Zi5idWZmZXIuc2xpY2UoYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlT2Zmc2V0ICsgYnVmLmJ5dGVMZW5ndGgpO1xyXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShhYik7XHJcblx0fVxyXG5cdHN0cmVhbSgpIHtcclxuXHRcdGNvbnN0IHJlYWRhYmxlID0gbmV3IFJlYWRhYmxlKCk7XHJcblx0XHRyZWFkYWJsZS5fcmVhZCA9IGZ1bmN0aW9uICgpIHt9O1xyXG5cdFx0cmVhZGFibGUucHVzaCh0aGlzW0JVRkZFUl0pO1xyXG5cdFx0cmVhZGFibGUucHVzaChudWxsKTtcclxuXHRcdHJldHVybiByZWFkYWJsZTtcclxuXHR9XHJcblx0dG9TdHJpbmcoKSB7XHJcblx0XHRyZXR1cm4gJ1tvYmplY3QgQmxvYl0nO1xyXG5cdH1cclxuXHRzbGljZSgpIHtcclxuXHRcdGNvbnN0IHNpemUgPSB0aGlzLnNpemU7XHJcblxyXG5cdFx0Y29uc3Qgc3RhcnQgPSBhcmd1bWVudHNbMF07XHJcblx0XHRjb25zdCBlbmQgPSBhcmd1bWVudHNbMV07XHJcblx0XHRsZXQgcmVsYXRpdmVTdGFydCwgcmVsYXRpdmVFbmQ7XHJcblx0XHRpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRyZWxhdGl2ZVN0YXJ0ID0gMDtcclxuXHRcdH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7XHJcblx0XHRcdHJlbGF0aXZlU3RhcnQgPSBNYXRoLm1heChzaXplICsgc3RhcnQsIDApO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmVsYXRpdmVTdGFydCA9IE1hdGgubWluKHN0YXJ0LCBzaXplKTtcclxuXHRcdH1cclxuXHRcdGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRyZWxhdGl2ZUVuZCA9IHNpemU7XHJcblx0XHR9IGVsc2UgaWYgKGVuZCA8IDApIHtcclxuXHRcdFx0cmVsYXRpdmVFbmQgPSBNYXRoLm1heChzaXplICsgZW5kLCAwKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJlbGF0aXZlRW5kID0gTWF0aC5taW4oZW5kLCBzaXplKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHNwYW4gPSBNYXRoLm1heChyZWxhdGl2ZUVuZCAtIHJlbGF0aXZlU3RhcnQsIDApO1xyXG5cclxuXHRcdGNvbnN0IGJ1ZmZlciA9IHRoaXNbQlVGRkVSXTtcclxuXHRcdGNvbnN0IHNsaWNlZEJ1ZmZlciA9IGJ1ZmZlci5zbGljZShyZWxhdGl2ZVN0YXJ0LCByZWxhdGl2ZVN0YXJ0ICsgc3Bhbik7XHJcblx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoW10sIHsgdHlwZTogYXJndW1lbnRzWzJdIH0pO1xyXG5cdFx0YmxvYltCVUZGRVJdID0gc2xpY2VkQnVmZmVyO1xyXG5cdFx0cmV0dXJuIGJsb2I7XHJcblx0fVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbG9iLnByb3RvdHlwZSwge1xyXG5cdHNpemU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxyXG5cdHR5cGU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxyXG5cdHNsaWNlOiB7IGVudW1lcmFibGU6IHRydWUgfVxyXG59KTtcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCbG9iLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XHJcblx0dmFsdWU6ICdCbG9iJyxcclxuXHR3cml0YWJsZTogZmFsc2UsXHJcblx0ZW51bWVyYWJsZTogZmFsc2UsXHJcblx0Y29uZmlndXJhYmxlOiB0cnVlXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIGZldGNoLWVycm9yLmpzXHJcbiAqXHJcbiAqIEZldGNoRXJyb3IgaW50ZXJmYWNlIGZvciBvcGVyYXRpb25hbCBlcnJvcnNcclxuICovXHJcblxyXG4vKipcclxuICogQ3JlYXRlIEZldGNoRXJyb3IgaW5zdGFuY2VcclxuICpcclxuICogQHBhcmFtICAgU3RyaW5nICAgICAgbWVzc2FnZSAgICAgIEVycm9yIG1lc3NhZ2UgZm9yIGh1bWFuXHJcbiAqIEBwYXJhbSAgIFN0cmluZyAgICAgIHR5cGUgICAgICAgICBFcnJvciB0eXBlIGZvciBtYWNoaW5lXHJcbiAqIEBwYXJhbSAgIFN0cmluZyAgICAgIHN5c3RlbUVycm9yICBGb3IgTm9kZS5qcyBzeXN0ZW0gZXJyb3JcclxuICogQHJldHVybiAgRmV0Y2hFcnJvclxyXG4gKi9cclxuZnVuY3Rpb24gRmV0Y2hFcnJvcihtZXNzYWdlLCB0eXBlLCBzeXN0ZW1FcnJvcikge1xyXG4gIEVycm9yLmNhbGwodGhpcywgbWVzc2FnZSk7XHJcblxyXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgdGhpcy50eXBlID0gdHlwZTtcclxuXHJcbiAgLy8gd2hlbiBlcnIudHlwZSBpcyBgc3lzdGVtYCwgZXJyLmNvZGUgY29udGFpbnMgc3lzdGVtIGVycm9yIGNvZGVcclxuICBpZiAoc3lzdGVtRXJyb3IpIHtcclxuICAgIHRoaXMuY29kZSA9IHRoaXMuZXJybm8gPSBzeXN0ZW1FcnJvci5jb2RlO1xyXG4gIH1cclxuXHJcbiAgLy8gaGlkZSBjdXN0b20gZXJyb3IgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmcm9tIGVuZC11c2Vyc1xyXG4gIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xyXG59XHJcblxyXG5GZXRjaEVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcclxuRmV0Y2hFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGZXRjaEVycm9yO1xyXG5GZXRjaEVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0ZldGNoRXJyb3InO1xyXG5cclxubGV0IGNvbnZlcnQ7XHJcblxyXG5jb25zdCBJTlRFUk5BTFMgPSBTeW1ib2woJ0JvZHkgaW50ZXJuYWxzJyk7XHJcblxyXG4vLyBmaXggYW4gaXNzdWUgd2hlcmUgXCJQYXNzVGhyb3VnaFwiIGlzbid0IGEgbmFtZWQgZXhwb3J0IGZvciBub2RlIDwxMFxyXG5jb25zdCBQYXNzVGhyb3VnaCA9IFN0cmVhbS5QYXNzVGhyb3VnaDtcclxuXHJcbi8qKlxyXG4gKiBCb2R5IG1peGluXHJcbiAqXHJcbiAqIFJlZjogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlcclxuICpcclxuICogQHBhcmFtICAgU3RyZWFtICBib2R5ICBSZWFkYWJsZSBzdHJlYW1cclxuICogQHBhcmFtICAgT2JqZWN0ICBvcHRzICBSZXNwb25zZSBvcHRpb25zXHJcbiAqIEByZXR1cm4gIFZvaWRcclxuICovXHJcbmZ1bmN0aW9uIEJvZHkoYm9keSkge1xyXG5cdHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG5cdHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcclxuXHQgICAgX3JlZiRzaXplID0gX3JlZi5zaXplO1xyXG5cclxuXHRsZXQgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdW5kZWZpbmVkID8gMCA6IF9yZWYkc2l6ZTtcclxuXHR2YXIgX3JlZiR0aW1lb3V0ID0gX3JlZi50aW1lb3V0O1xyXG5cdGxldCB0aW1lb3V0ID0gX3JlZiR0aW1lb3V0ID09PSB1bmRlZmluZWQgPyAwIDogX3JlZiR0aW1lb3V0O1xyXG5cclxuXHRpZiAoYm9keSA9PSBudWxsKSB7XHJcblx0XHQvLyBib2R5IGlzIHVuZGVmaW5lZCBvciBudWxsXHJcblx0XHRib2R5ID0gbnVsbDtcclxuXHR9IGVsc2UgaWYgKGlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XHJcblx0XHQvLyBib2R5IGlzIGEgVVJMU2VhcmNoUGFyYW1zXHJcblx0XHRib2R5ID0gQnVmZmVyLmZyb20oYm9keS50b1N0cmluZygpKTtcclxuXHR9IGVsc2UgaWYgKGlzQmxvYihib2R5KSkgOyBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIDsgZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nKSB7XHJcblx0XHQvLyBib2R5IGlzIEFycmF5QnVmZmVyXHJcblx0XHRib2R5ID0gQnVmZmVyLmZyb20oYm9keSk7XHJcblx0fSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcclxuXHRcdC8vIGJvZHkgaXMgQXJyYXlCdWZmZXJWaWV3XHJcblx0XHRib2R5ID0gQnVmZmVyLmZyb20oYm9keS5idWZmZXIsIGJvZHkuYnl0ZU9mZnNldCwgYm9keS5ieXRlTGVuZ3RoKTtcclxuXHR9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0pIDsgZWxzZSB7XHJcblx0XHQvLyBub25lIG9mIHRoZSBhYm92ZVxyXG5cdFx0Ly8gY29lcmNlIHRvIHN0cmluZyB0aGVuIGJ1ZmZlclxyXG5cdFx0Ym9keSA9IEJ1ZmZlci5mcm9tKFN0cmluZyhib2R5KSk7XHJcblx0fVxyXG5cdHRoaXNbSU5URVJOQUxTXSA9IHtcclxuXHRcdGJvZHksXHJcblx0XHRkaXN0dXJiZWQ6IGZhbHNlLFxyXG5cdFx0ZXJyb3I6IG51bGxcclxuXHR9O1xyXG5cdHRoaXMuc2l6ZSA9IHNpemU7XHJcblx0dGhpcy50aW1lb3V0ID0gdGltZW91dDtcclxuXHJcblx0aWYgKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0pIHtcclxuXHRcdGJvZHkub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xyXG5cdFx0XHRjb25zdCBlcnJvciA9IGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicgPyBlcnIgOiBuZXcgRmV0Y2hFcnJvcihgSW52YWxpZCByZXNwb25zZSBib2R5IHdoaWxlIHRyeWluZyB0byBmZXRjaCAke190aGlzLnVybH06ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycik7XHJcblx0XHRcdF90aGlzW0lOVEVSTkFMU10uZXJyb3IgPSBlcnJvcjtcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG5cclxuQm9keS5wcm90b3R5cGUgPSB7XHJcblx0Z2V0IGJvZHkoKSB7XHJcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFNdLmJvZHk7XHJcblx0fSxcclxuXHJcblx0Z2V0IGJvZHlVc2VkKCkge1xyXG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTXS5kaXN0dXJiZWQ7XHJcblx0fSxcclxuXHJcblx0LyoqXHJcbiAgKiBEZWNvZGUgcmVzcG9uc2UgYXMgQXJyYXlCdWZmZXJcclxuICAqXHJcbiAgKiBAcmV0dXJuICBQcm9taXNlXHJcbiAgKi9cclxuXHRhcnJheUJ1ZmZlcigpIHtcclxuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1Zikge1xyXG5cdFx0XHRyZXR1cm4gYnVmLmJ1ZmZlci5zbGljZShidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVPZmZzZXQgKyBidWYuYnl0ZUxlbmd0aCk7XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cclxuXHQvKipcclxuICAqIFJldHVybiByYXcgcmVzcG9uc2UgYXMgQmxvYlxyXG4gICpcclxuICAqIEByZXR1cm4gUHJvbWlzZVxyXG4gICovXHJcblx0YmxvYigpIHtcclxuXHRcdGxldCBjdCA9IHRoaXMuaGVhZGVycyAmJiB0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSB8fCAnJztcclxuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1Zikge1xyXG5cdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcclxuXHRcdFx0Ly8gUHJldmVudCBjb3B5aW5nXHJcblx0XHRcdG5ldyBCbG9iKFtdLCB7XHJcblx0XHRcdFx0dHlwZTogY3QudG9Mb3dlckNhc2UoKVxyXG5cdFx0XHR9KSwge1xyXG5cdFx0XHRcdFtCVUZGRVJdOiBidWZcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cclxuXHQvKipcclxuICAqIERlY29kZSByZXNwb25zZSBhcyBqc29uXHJcbiAgKlxyXG4gICogQHJldHVybiAgUHJvbWlzZVxyXG4gICovXHJcblx0anNvbigpIHtcclxuXHRcdHZhciBfdGhpczIgPSB0aGlzO1xyXG5cclxuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHJldHVybiBKU09OLnBhcnNlKGJ1ZmZlci50b1N0cmluZygpKTtcclxuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XHJcblx0XHRcdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZWplY3QobmV3IEZldGNoRXJyb3IoYGludmFsaWQganNvbiByZXNwb25zZSBib2R5IGF0ICR7X3RoaXMyLnVybH0gcmVhc29uOiAke2Vyci5tZXNzYWdlfWAsICdpbnZhbGlkLWpzb24nKSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH0sXHJcblxyXG5cdC8qKlxyXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIHRleHRcclxuICAqXHJcbiAgKiBAcmV0dXJuICBQcm9taXNlXHJcbiAgKi9cclxuXHR0ZXh0KCkge1xyXG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XHJcblx0XHRcdHJldHVybiBidWZmZXIudG9TdHJpbmcoKTtcclxuXHRcdH0pO1xyXG5cdH0sXHJcblxyXG5cdC8qKlxyXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIGJ1ZmZlciAobm9uLXNwZWMgYXBpKVxyXG4gICpcclxuICAqIEByZXR1cm4gIFByb21pc2VcclxuICAqL1xyXG5cdGJ1ZmZlcigpIHtcclxuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpO1xyXG5cdH0sXHJcblxyXG5cdC8qKlxyXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIHRleHQsIHdoaWxlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0aW5nIHRoZSBlbmNvZGluZyBhbmRcclxuICAqIHRyeWluZyB0byBkZWNvZGUgdG8gVVRGLTggKG5vbi1zcGVjIGFwaSlcclxuICAqXHJcbiAgKiBAcmV0dXJuICBQcm9taXNlXHJcbiAgKi9cclxuXHR0ZXh0Q29udmVydGVkKCkge1xyXG5cdFx0dmFyIF90aGlzMyA9IHRoaXM7XHJcblxyXG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XHJcblx0XHRcdHJldHVybiBjb252ZXJ0Qm9keShidWZmZXIsIF90aGlzMy5oZWFkZXJzKTtcclxuXHRcdH0pO1xyXG5cdH1cclxufTtcclxuXHJcbi8vIEluIGJyb3dzZXJzLCBhbGwgcHJvcGVydGllcyBhcmUgZW51bWVyYWJsZS5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQm9keS5wcm90b3R5cGUsIHtcclxuXHRib2R5OiB7IGVudW1lcmFibGU6IHRydWUgfSxcclxuXHRib2R5VXNlZDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXHJcblx0YXJyYXlCdWZmZXI6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxyXG5cdGJsb2I6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxyXG5cdGpzb246IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxyXG5cdHRleHQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XHJcbn0pO1xyXG5cclxuQm9keS5taXhJbiA9IGZ1bmN0aW9uIChwcm90bykge1xyXG5cdGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhCb2R5LnByb3RvdHlwZSkpIHtcclxuXHRcdC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBmdXR1cmUgcHJvb2ZcclxuXHRcdGlmICghKG5hbWUgaW4gcHJvdG8pKSB7XHJcblx0XHRcdGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEJvZHkucHJvdG90eXBlLCBuYW1lKTtcclxuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCBuYW1lLCBkZXNjKTtcclxuXHRcdH1cclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICogQ29uc3VtZSBhbmQgY29udmVydCBhbiBlbnRpcmUgQm9keSB0byBhIEJ1ZmZlci5cclxuICpcclxuICogUmVmOiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LWNvbnN1bWUtYm9keVxyXG4gKlxyXG4gKiBAcmV0dXJuICBQcm9taXNlXHJcbiAqL1xyXG5mdW5jdGlvbiBjb25zdW1lQm9keSgpIHtcclxuXHR2YXIgX3RoaXM0ID0gdGhpcztcclxuXHJcblx0aWYgKHRoaXNbSU5URVJOQUxTXS5kaXN0dXJiZWQpIHtcclxuXHRcdHJldHVybiBCb2R5LlByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoYGJvZHkgdXNlZCBhbHJlYWR5IGZvcjogJHt0aGlzLnVybH1gKSk7XHJcblx0fVxyXG5cclxuXHR0aGlzW0lOVEVSTkFMU10uZGlzdHVyYmVkID0gdHJ1ZTtcclxuXHJcblx0aWYgKHRoaXNbSU5URVJOQUxTXS5lcnJvcikge1xyXG5cdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZWplY3QodGhpc1tJTlRFUk5BTFNdLmVycm9yKTtcclxuXHR9XHJcblxyXG5cdGxldCBib2R5ID0gdGhpcy5ib2R5O1xyXG5cclxuXHQvLyBib2R5IGlzIG51bGxcclxuXHRpZiAoYm9keSA9PT0gbnVsbCkge1xyXG5cdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XHJcblx0fVxyXG5cclxuXHQvLyBib2R5IGlzIGJsb2JcclxuXHRpZiAoaXNCbG9iKGJvZHkpKSB7XHJcblx0XHRib2R5ID0gYm9keS5zdHJlYW0oKTtcclxuXHR9XHJcblxyXG5cdC8vIGJvZHkgaXMgYnVmZmVyXHJcblx0aWYgKEJ1ZmZlci5pc0J1ZmZlcihib2R5KSkge1xyXG5cdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZXNvbHZlKGJvZHkpO1xyXG5cdH1cclxuXHJcblx0Ly8gaXN0YW5idWwgaWdub3JlIGlmOiBzaG91bGQgbmV2ZXIgaGFwcGVuXHJcblx0aWYgKCEoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSkpIHtcclxuXHRcdHJldHVybiBCb2R5LlByb21pc2UucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xyXG5cdH1cclxuXHJcblx0Ly8gYm9keSBpcyBzdHJlYW1cclxuXHQvLyBnZXQgcmVhZHkgdG8gYWN0dWFsbHkgY29uc3VtZSB0aGUgYm9keVxyXG5cdGxldCBhY2N1bSA9IFtdO1xyXG5cdGxldCBhY2N1bUJ5dGVzID0gMDtcclxuXHRsZXQgYWJvcnQgPSBmYWxzZTtcclxuXHJcblx0cmV0dXJuIG5ldyBCb2R5LlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG5cdFx0bGV0IHJlc1RpbWVvdXQ7XHJcblxyXG5cdFx0Ly8gYWxsb3cgdGltZW91dCBvbiBzbG93IHJlc3BvbnNlIGJvZHlcclxuXHRcdGlmIChfdGhpczQudGltZW91dCkge1xyXG5cdFx0XHRyZXNUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0YWJvcnQgPSB0cnVlO1xyXG5cdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgUmVzcG9uc2UgdGltZW91dCB3aGlsZSB0cnlpbmcgdG8gZmV0Y2ggJHtfdGhpczQudXJsfSAob3ZlciAke190aGlzNC50aW1lb3V0fW1zKWAsICdib2R5LXRpbWVvdXQnKSk7XHJcblx0XHRcdH0sIF90aGlzNC50aW1lb3V0KTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBoYW5kbGUgc3RyZWFtIGVycm9yc1xyXG5cdFx0Ym9keS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XHJcblx0XHRcdGlmIChlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XHJcblx0XHRcdFx0Ly8gaWYgdGhlIHJlcXVlc3Qgd2FzIGFib3J0ZWQsIHJlamVjdCB3aXRoIHRoaXMgRXJyb3JcclxuXHRcdFx0XHRhYm9ydCA9IHRydWU7XHJcblx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gb3RoZXIgZXJyb3JzLCBzdWNoIGFzIGluY29ycmVjdCBjb250ZW50LWVuY29kaW5nXHJcblx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBJbnZhbGlkIHJlc3BvbnNlIGJvZHkgd2hpbGUgdHJ5aW5nIHRvIGZldGNoICR7X3RoaXM0LnVybH06ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycikpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHRib2R5Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XHJcblx0XHRcdGlmIChhYm9ydCB8fCBjaHVuayA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKF90aGlzNC5zaXplICYmIGFjY3VtQnl0ZXMgKyBjaHVuay5sZW5ndGggPiBfdGhpczQuc2l6ZSkge1xyXG5cdFx0XHRcdGFib3J0ID0gdHJ1ZTtcclxuXHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYGNvbnRlbnQgc2l6ZSBhdCAke190aGlzNC51cmx9IG92ZXIgbGltaXQ6ICR7X3RoaXM0LnNpemV9YCwgJ21heC1zaXplJykpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0YWNjdW1CeXRlcyArPSBjaHVuay5sZW5ndGg7XHJcblx0XHRcdGFjY3VtLnB1c2goY2h1bmspO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ym9keS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRpZiAoYWJvcnQpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNsZWFyVGltZW91dChyZXNUaW1lb3V0KTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0cmVzb2x2ZShCdWZmZXIuY29uY2F0KGFjY3VtLCBhY2N1bUJ5dGVzKSk7XHJcblx0XHRcdH0gY2F0Y2ggKGVycikge1xyXG5cdFx0XHRcdC8vIGhhbmRsZSBzdHJlYW1zIHRoYXQgaGF2ZSBhY2N1bXVsYXRlZCB0b28gbXVjaCBkYXRhIChpc3N1ZSAjNDE0KVxyXG5cdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgQ291bGQgbm90IGNyZWF0ZSBCdWZmZXIgZnJvbSByZXNwb25zZSBib2R5IGZvciAke190aGlzNC51cmx9OiAke2Vyci5tZXNzYWdlfWAsICdzeXN0ZW0nLCBlcnIpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZXRlY3QgYnVmZmVyIGVuY29kaW5nIGFuZCBjb252ZXJ0IHRvIHRhcmdldCBlbmNvZGluZ1xyXG4gKiByZWY6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvV0QtaHRtbDUtMjAxMTAxMTMvcGFyc2luZy5odG1sI2RldGVybWluaW5nLXRoZS1jaGFyYWN0ZXItZW5jb2RpbmdcclxuICpcclxuICogQHBhcmFtICAgQnVmZmVyICBidWZmZXIgICAgSW5jb21pbmcgYnVmZmVyXHJcbiAqIEBwYXJhbSAgIFN0cmluZyAgZW5jb2RpbmcgIFRhcmdldCBlbmNvZGluZ1xyXG4gKiBAcmV0dXJuICBTdHJpbmdcclxuICovXHJcbmZ1bmN0aW9uIGNvbnZlcnRCb2R5KGJ1ZmZlciwgaGVhZGVycykge1xyXG5cdHtcclxuXHRcdHRocm93IG5ldyBFcnJvcignVGhlIHBhY2thZ2UgYGVuY29kaW5nYCBtdXN0IGJlIGluc3RhbGxlZCB0byB1c2UgdGhlIHRleHRDb252ZXJ0ZWQoKSBmdW5jdGlvbicpO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgY3QgPSBoZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XHJcblx0bGV0IGNoYXJzZXQgPSAndXRmLTgnO1xyXG5cdGxldCByZXMsIHN0cjtcclxuXHJcblx0Ly8gaGVhZGVyXHJcblx0aWYgKGN0KSB7XHJcblx0XHRyZXMgPSAvY2hhcnNldD0oW147XSopL2kuZXhlYyhjdCk7XHJcblx0fVxyXG5cclxuXHQvLyBubyBjaGFyc2V0IGluIGNvbnRlbnQgdHlwZSwgcGVlayBhdCByZXNwb25zZSBib2R5IGZvciBhdCBtb3N0IDEwMjQgYnl0ZXNcclxuXHRzdHIgPSBidWZmZXIuc2xpY2UoMCwgMTAyNCkudG9TdHJpbmcoKTtcclxuXHJcblx0Ly8gaHRtbDVcclxuXHRpZiAoIXJlcyAmJiBzdHIpIHtcclxuXHRcdHJlcyA9IC88bWV0YS4rP2NoYXJzZXQ9KFsnXCJdKSguKz8pXFwxL2kuZXhlYyhzdHIpO1xyXG5cdH1cclxuXHJcblx0Ly8gaHRtbDRcclxuXHRpZiAoIXJlcyAmJiBzdHIpIHtcclxuXHRcdHJlcyA9IC88bWV0YVtcXHNdKz9odHRwLWVxdWl2PShbJ1wiXSljb250ZW50LXR5cGVcXDFbXFxzXSs/Y29udGVudD0oWydcIl0pKC4rPylcXDIvaS5leGVjKHN0cik7XHJcblx0XHRpZiAoIXJlcykge1xyXG5cdFx0XHRyZXMgPSAvPG1ldGFbXFxzXSs/Y29udGVudD0oWydcIl0pKC4rPylcXDFbXFxzXSs/aHR0cC1lcXVpdj0oWydcIl0pY29udGVudC10eXBlXFwzL2kuZXhlYyhzdHIpO1xyXG5cdFx0XHRpZiAocmVzKSB7XHJcblx0XHRcdFx0cmVzLnBvcCgpOyAvLyBkcm9wIGxhc3QgcXVvdGVcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXMpIHtcclxuXHRcdFx0cmVzID0gL2NoYXJzZXQ9KC4qKS9pLmV4ZWMocmVzLnBvcCgpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIHhtbFxyXG5cdGlmICghcmVzICYmIHN0cikge1xyXG5cdFx0cmVzID0gLzxcXD94bWwuKz9lbmNvZGluZz0oWydcIl0pKC4rPylcXDEvaS5leGVjKHN0cik7XHJcblx0fVxyXG5cclxuXHQvLyBmb3VuZCBjaGFyc2V0XHJcblx0aWYgKHJlcykge1xyXG5cdFx0Y2hhcnNldCA9IHJlcy5wb3AoKTtcclxuXHJcblx0XHQvLyBwcmV2ZW50IGRlY29kZSBpc3N1ZXMgd2hlbiBzaXRlcyB1c2UgaW5jb3JyZWN0IGVuY29kaW5nXHJcblx0XHQvLyByZWY6IGh0dHBzOi8vaHNpdm9uZW4uZmkvZW5jb2RpbmctbWVudS9cclxuXHRcdGlmIChjaGFyc2V0ID09PSAnZ2IyMzEyJyB8fCBjaGFyc2V0ID09PSAnZ2JrJykge1xyXG5cdFx0XHRjaGFyc2V0ID0gJ2diMTgwMzAnO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gdHVybiByYXcgYnVmZmVycyBpbnRvIGEgc2luZ2xlIHV0Zi04IGJ1ZmZlclxyXG5cdHJldHVybiBjb252ZXJ0KGJ1ZmZlciwgJ1VURi04JywgY2hhcnNldCkudG9TdHJpbmcoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIERldGVjdCBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcclxuICogcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYml0aW5uL25vZGUtZmV0Y2gvaXNzdWVzLzI5NiNpc3N1ZWNvbW1lbnQtMzA3NTk4MTQzXHJcbiAqXHJcbiAqIEBwYXJhbSAgIE9iamVjdCAgb2JqICAgICBPYmplY3QgdG8gZGV0ZWN0IGJ5IHR5cGUgb3IgYnJhbmRcclxuICogQHJldHVybiAgU3RyaW5nXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1VSTFNlYXJjaFBhcmFtcyhvYmopIHtcclxuXHQvLyBEdWNrLXR5cGluZyBhcyBhIG5lY2Vzc2FyeSBjb25kaXRpb24uXHJcblx0aWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmouYXBwZW5kICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouZGVsZXRlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouZ2V0QWxsICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouaGFzICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouc2V0ICE9PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBCcmFuZC1jaGVja2luZyBhbmQgbW9yZSBkdWNrLXR5cGluZyBhcyBvcHRpb25hbCBjb25kaXRpb24uXHJcblx0cmV0dXJuIG9iai5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVVJMU2VhcmNoUGFyYW1zJyB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgVVJMU2VhcmNoUGFyYW1zXScgfHwgdHlwZW9mIG9iai5zb3J0ID09PSAnZnVuY3Rpb24nO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgYG9iamAgaXMgYSBXM0MgYEJsb2JgIG9iamVjdCAod2hpY2ggYEZpbGVgIGluaGVyaXRzIGZyb20pXHJcbiAqIEBwYXJhbSAgeyp9IG9ialxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxuZnVuY3Rpb24gaXNCbG9iKG9iaikge1xyXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqLmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoudHlwZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIG9iai5zdHJlYW0gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5jb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdzdHJpbmcnICYmIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9iai5jb25zdHJ1Y3Rvci5uYW1lKSAmJiAvXihCbG9ifEZpbGUpJC8udGVzdChvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDbG9uZSBib2R5IGdpdmVuIFJlcy9SZXEgaW5zdGFuY2VcclxuICpcclxuICogQHBhcmFtICAgTWl4ZWQgIGluc3RhbmNlICBSZXNwb25zZSBvciBSZXF1ZXN0IGluc3RhbmNlXHJcbiAqIEByZXR1cm4gIE1peGVkXHJcbiAqL1xyXG5mdW5jdGlvbiBjbG9uZShpbnN0YW5jZSkge1xyXG5cdGxldCBwMSwgcDI7XHJcblx0bGV0IGJvZHkgPSBpbnN0YW5jZS5ib2R5O1xyXG5cclxuXHQvLyBkb24ndCBhbGxvdyBjbG9uaW5nIGEgdXNlZCBib2R5XHJcblx0aWYgKGluc3RhbmNlLmJvZHlVc2VkKSB7XHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBjbG9uZSBib2R5IGFmdGVyIGl0IGlzIHVzZWQnKTtcclxuXHR9XHJcblxyXG5cdC8vIGNoZWNrIHRoYXQgYm9keSBpcyBhIHN0cmVhbSBhbmQgbm90IGZvcm0tZGF0YSBvYmplY3RcclxuXHQvLyBub3RlOiB3ZSBjYW4ndCBjbG9uZSB0aGUgZm9ybS1kYXRhIG9iamVjdCB3aXRob3V0IGhhdmluZyBpdCBhcyBhIGRlcGVuZGVuY3lcclxuXHRpZiAoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSAmJiB0eXBlb2YgYm9keS5nZXRCb3VuZGFyeSAhPT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0Ly8gdGVlIGluc3RhbmNlIGJvZHlcclxuXHRcdHAxID0gbmV3IFBhc3NUaHJvdWdoKCk7XHJcblx0XHRwMiA9IG5ldyBQYXNzVGhyb3VnaCgpO1xyXG5cdFx0Ym9keS5waXBlKHAxKTtcclxuXHRcdGJvZHkucGlwZShwMik7XHJcblx0XHQvLyBzZXQgaW5zdGFuY2UgYm9keSB0byB0ZWVkIGJvZHkgYW5kIHJldHVybiB0aGUgb3RoZXIgdGVlZCBib2R5XHJcblx0XHRpbnN0YW5jZVtJTlRFUk5BTFNdLmJvZHkgPSBwMTtcclxuXHRcdGJvZHkgPSBwMjtcclxuXHR9XHJcblxyXG5cdHJldHVybiBib2R5O1xyXG59XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgdGhlIG9wZXJhdGlvbiBcImV4dHJhY3QgYSBgQ29udGVudC1UeXBlYCB2YWx1ZSBmcm9tIHxvYmplY3R8XCIgYXNcclxuICogc3BlY2lmaWVkIGluIHRoZSBzcGVjaWZpY2F0aW9uOlxyXG4gKiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5aW5pdC1leHRyYWN0XHJcbiAqXHJcbiAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGluc3RhbmNlLmJvZHkgaXMgcHJlc2VudC5cclxuICpcclxuICogQHBhcmFtICAgTWl4ZWQgIGluc3RhbmNlICBBbnkgb3B0aW9ucy5ib2R5IGlucHV0XHJcbiAqL1xyXG5mdW5jdGlvbiBleHRyYWN0Q29udGVudFR5cGUoYm9keSkge1xyXG5cdGlmIChib2R5ID09PSBudWxsKSB7XHJcblx0XHQvLyBib2R5IGlzIG51bGxcclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XHJcblx0XHQvLyBib2R5IGlzIHN0cmluZ1xyXG5cdFx0cmV0dXJuICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnO1xyXG5cdH0gZWxzZSBpZiAoaXNVUkxTZWFyY2hQYXJhbXMoYm9keSkpIHtcclxuXHRcdC8vIGJvZHkgaXMgYSBVUkxTZWFyY2hQYXJhbXNcclxuXHRcdHJldHVybiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnO1xyXG5cdH0gZWxzZSBpZiAoaXNCbG9iKGJvZHkpKSB7XHJcblx0XHQvLyBib2R5IGlzIGJsb2JcclxuXHRcdHJldHVybiBib2R5LnR5cGUgfHwgbnVsbDtcclxuXHR9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihib2R5KSkge1xyXG5cdFx0Ly8gYm9keSBpcyBidWZmZXJcclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nKSB7XHJcblx0XHQvLyBib2R5IGlzIEFycmF5QnVmZmVyXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhib2R5KSkge1xyXG5cdFx0Ly8gYm9keSBpcyBBcnJheUJ1ZmZlclZpZXdcclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH0gZWxzZSBpZiAodHlwZW9mIGJvZHkuZ2V0Qm91bmRhcnkgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdC8vIGRldGVjdCBmb3JtIGRhdGEgaW5wdXQgZnJvbSBmb3JtLWRhdGEgbW9kdWxlXHJcblx0XHRyZXR1cm4gYG11bHRpcGFydC9mb3JtLWRhdGE7Ym91bmRhcnk9JHtib2R5LmdldEJvdW5kYXJ5KCl9YDtcclxuXHR9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0pIHtcclxuXHRcdC8vIGJvZHkgaXMgc3RyZWFtXHJcblx0XHQvLyBjYW4ndCByZWFsbHkgZG8gbXVjaCBhYm91dCB0aGlzXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9IGVsc2Uge1xyXG5cdFx0Ly8gQm9keSBjb25zdHJ1Y3RvciBkZWZhdWx0cyBvdGhlciB0aGluZ3MgdG8gc3RyaW5nXHJcblx0XHRyZXR1cm4gJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCc7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogVGhlIEZldGNoIFN0YW5kYXJkIHRyZWF0cyB0aGlzIGFzIGlmIFwidG90YWwgYnl0ZXNcIiBpcyBhIHByb3BlcnR5IG9uIHRoZSBib2R5LlxyXG4gKiBGb3IgdXMsIHdlIGhhdmUgdG8gZXhwbGljaXRseSBnZXQgaXQgd2l0aCBhIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiByZWY6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktdG90YWwtYnl0ZXNcclxuICpcclxuICogQHBhcmFtICAgQm9keSAgICBpbnN0YW5jZSAgIEluc3RhbmNlIG9mIEJvZHlcclxuICogQHJldHVybiAgTnVtYmVyPyAgICAgICAgICAgIE51bWJlciBvZiBieXRlcywgb3IgbnVsbCBpZiBub3QgcG9zc2libGVcclxuICovXHJcbmZ1bmN0aW9uIGdldFRvdGFsQnl0ZXMoaW5zdGFuY2UpIHtcclxuXHRjb25zdCBib2R5ID0gaW5zdGFuY2UuYm9keTtcclxuXHJcblxyXG5cdGlmIChib2R5ID09PSBudWxsKSB7XHJcblx0XHQvLyBib2R5IGlzIG51bGxcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAoaXNCbG9iKGJvZHkpKSB7XHJcblx0XHRyZXR1cm4gYm9keS5zaXplO1xyXG5cdH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XHJcblx0XHQvLyBib2R5IGlzIGJ1ZmZlclxyXG5cdFx0cmV0dXJuIGJvZHkubGVuZ3RoO1xyXG5cdH0gZWxzZSBpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5nZXRMZW5ndGhTeW5jID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHQvLyBkZXRlY3QgZm9ybSBkYXRhIGlucHV0IGZyb20gZm9ybS1kYXRhIG1vZHVsZVxyXG5cdFx0aWYgKGJvZHkuX2xlbmd0aFJldHJpZXZlcnMgJiYgYm9keS5fbGVuZ3RoUmV0cmlldmVycy5sZW5ndGggPT0gMCB8fCAvLyAxLnhcclxuXHRcdGJvZHkuaGFzS25vd25MZW5ndGggJiYgYm9keS5oYXNLbm93bkxlbmd0aCgpKSB7XHJcblx0XHRcdC8vIDIueFxyXG5cdFx0XHRyZXR1cm4gYm9keS5nZXRMZW5ndGhTeW5jKCk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9IGVsc2Uge1xyXG5cdFx0Ly8gYm9keSBpcyBzdHJlYW1cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFdyaXRlIGEgQm9keSB0byBhIE5vZGUuanMgV3JpdGFibGVTdHJlYW0gKGUuZy4gaHR0cC5SZXF1ZXN0KSBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSAgIEJvZHkgICAgaW5zdGFuY2UgICBJbnN0YW5jZSBvZiBCb2R5XHJcbiAqIEByZXR1cm4gIFZvaWRcclxuICovXHJcbmZ1bmN0aW9uIHdyaXRlVG9TdHJlYW0oZGVzdCwgaW5zdGFuY2UpIHtcclxuXHRjb25zdCBib2R5ID0gaW5zdGFuY2UuYm9keTtcclxuXHJcblxyXG5cdGlmIChib2R5ID09PSBudWxsKSB7XHJcblx0XHQvLyBib2R5IGlzIG51bGxcclxuXHRcdGRlc3QuZW5kKCk7XHJcblx0fSBlbHNlIGlmIChpc0Jsb2IoYm9keSkpIHtcclxuXHRcdGJvZHkuc3RyZWFtKCkucGlwZShkZXN0KTtcclxuXHR9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihib2R5KSkge1xyXG5cdFx0Ly8gYm9keSBpcyBidWZmZXJcclxuXHRcdGRlc3Qud3JpdGUoYm9keSk7XHJcblx0XHRkZXN0LmVuZCgpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHQvLyBib2R5IGlzIHN0cmVhbVxyXG5cdFx0Ym9keS5waXBlKGRlc3QpO1xyXG5cdH1cclxufVxyXG5cclxuLy8gZXhwb3NlIFByb21pc2VcclxuQm9keS5Qcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XHJcblxyXG4vKipcclxuICogaGVhZGVycy5qc1xyXG4gKlxyXG4gKiBIZWFkZXJzIGNsYXNzIG9mZmVycyBjb252ZW5pZW50IGhlbHBlcnNcclxuICovXHJcblxyXG5jb25zdCBpbnZhbGlkVG9rZW5SZWdleCA9IC9bXlxcXl9gYS16QS1aXFwtMC05ISMkJSYnKisufH5dLztcclxuY29uc3QgaW52YWxpZEhlYWRlckNoYXJSZWdleCA9IC9bXlxcdFxceDIwLVxceDdlXFx4ODAtXFx4ZmZdLztcclxuXHJcbmZ1bmN0aW9uIHZhbGlkYXRlTmFtZShuYW1lKSB7XHJcblx0bmFtZSA9IGAke25hbWV9YDtcclxuXHRpZiAoaW52YWxpZFRva2VuUmVnZXgudGVzdChuYW1lKSB8fCBuYW1lID09PSAnJykge1xyXG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgJHtuYW1lfSBpcyBub3QgYSBsZWdhbCBIVFRQIGhlYWRlciBuYW1lYCk7XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiB2YWxpZGF0ZVZhbHVlKHZhbHVlKSB7XHJcblx0dmFsdWUgPSBgJHt2YWx1ZX1gO1xyXG5cdGlmIChpbnZhbGlkSGVhZGVyQ2hhclJlZ2V4LnRlc3QodmFsdWUpKSB7XHJcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGAke3ZhbHVlfSBpcyBub3QgYSBsZWdhbCBIVFRQIGhlYWRlciB2YWx1ZWApO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEZpbmQgdGhlIGtleSBpbiB0aGUgbWFwIG9iamVjdCBnaXZlbiBhIGhlYWRlciBuYW1lLlxyXG4gKlxyXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXHJcbiAqXHJcbiAqIEBwYXJhbSAgIFN0cmluZyAgbmFtZSAgSGVhZGVyIG5hbWVcclxuICogQHJldHVybiAgU3RyaW5nfFVuZGVmaW5lZFxyXG4gKi9cclxuZnVuY3Rpb24gZmluZChtYXAsIG5hbWUpIHtcclxuXHRuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xyXG5cdGZvciAoY29uc3Qga2V5IGluIG1hcCkge1xyXG5cdFx0aWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBuYW1lKSB7XHJcblx0XHRcdHJldHVybiBrZXk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmNvbnN0IE1BUCA9IFN5bWJvbCgnbWFwJyk7XHJcbmNsYXNzIEhlYWRlcnMge1xyXG5cdC8qKlxyXG4gICogSGVhZGVycyBjbGFzc1xyXG4gICpcclxuICAqIEBwYXJhbSAgIE9iamVjdCAgaGVhZGVycyAgUmVzcG9uc2UgaGVhZGVyc1xyXG4gICogQHJldHVybiAgVm9pZFxyXG4gICovXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRsZXQgaW5pdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkO1xyXG5cclxuXHRcdHRoaXNbTUFQXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcblxyXG5cdFx0aWYgKGluaXQgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XHJcblx0XHRcdGNvbnN0IHJhd0hlYWRlcnMgPSBpbml0LnJhdygpO1xyXG5cdFx0XHRjb25zdCBoZWFkZXJOYW1lcyA9IE9iamVjdC5rZXlzKHJhd0hlYWRlcnMpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIGhlYWRlck5hbWVzKSB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZSBvZiByYXdIZWFkZXJzW2hlYWRlck5hbWVdKSB7XHJcblx0XHRcdFx0XHR0aGlzLmFwcGVuZChoZWFkZXJOYW1lLCB2YWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gV2UgZG9uJ3Qgd29ycnkgYWJvdXQgY29udmVydGluZyBwcm9wIHRvIEJ5dGVTdHJpbmcgaGVyZSBhcyBhcHBlbmQoKVxyXG5cdFx0Ly8gd2lsbCBoYW5kbGUgaXQuXHJcblx0XHRpZiAoaW5pdCA9PSBudWxsKSA7IGVsc2UgaWYgKHR5cGVvZiBpbml0ID09PSAnb2JqZWN0Jykge1xyXG5cdFx0XHRjb25zdCBtZXRob2QgPSBpbml0W1N5bWJvbC5pdGVyYXRvcl07XHJcblx0XHRcdGlmIChtZXRob2QgIT0gbnVsbCkge1xyXG5cdFx0XHRcdGlmICh0eXBlb2YgbWV0aG9kICE9PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdIZWFkZXIgcGFpcnMgbXVzdCBiZSBpdGVyYWJsZScpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+XHJcblx0XHRcdFx0Ly8gTm90ZTogcGVyIHNwZWMgd2UgaGF2ZSB0byBmaXJzdCBleGhhdXN0IHRoZSBsaXN0cyB0aGVuIHByb2Nlc3MgdGhlbVxyXG5cdFx0XHRcdGNvbnN0IHBhaXJzID0gW107XHJcblx0XHRcdFx0Zm9yIChjb25zdCBwYWlyIG9mIGluaXQpIHtcclxuXHRcdFx0XHRcdGlmICh0eXBlb2YgcGFpciAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHBhaXJbU3ltYm9sLml0ZXJhdG9yXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFYWNoIGhlYWRlciBwYWlyIG11c3QgYmUgaXRlcmFibGUnKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHBhaXJzLnB1c2goQXJyYXkuZnJvbShwYWlyKSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcclxuXHRcdFx0XHRcdGlmIChwYWlyLmxlbmd0aCAhPT0gMikge1xyXG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFYWNoIGhlYWRlciBwYWlyIG11c3QgYmUgYSBuYW1lL3ZhbHVlIHR1cGxlJyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLmFwcGVuZChwYWlyWzBdLCBwYWlyWzFdKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gcmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+XHJcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaW5pdCkpIHtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gaW5pdFtrZXldO1xyXG5cdFx0XHRcdFx0dGhpcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBpbml0aWFsaXplciBtdXN0IGJlIGFuIG9iamVjdCcpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcbiAgKiBSZXR1cm4gY29tYmluZWQgaGVhZGVyIHZhbHVlIGdpdmVuIG5hbWVcclxuICAqXHJcbiAgKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgIEhlYWRlciBuYW1lXHJcbiAgKiBAcmV0dXJuICBNaXhlZFxyXG4gICovXHJcblx0Z2V0KG5hbWUpIHtcclxuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XHJcblx0XHR2YWxpZGF0ZU5hbWUobmFtZSk7XHJcblx0XHRjb25zdCBrZXkgPSBmaW5kKHRoaXNbTUFQXSwgbmFtZSk7XHJcblx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXNbTUFQXVtrZXldLmpvaW4oJywgJyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuICAqIEl0ZXJhdGUgb3ZlciBhbGwgaGVhZGVyc1xyXG4gICpcclxuICAqIEBwYXJhbSAgIEZ1bmN0aW9uICBjYWxsYmFjayAgRXhlY3V0ZWQgZm9yIGVhY2ggaXRlbSB3aXRoIHBhcmFtZXRlcnMgKHZhbHVlLCBuYW1lLCB0aGlzQXJnKVxyXG4gICogQHBhcmFtICAgQm9vbGVhbiAgIHRoaXNBcmcgICBgdGhpc2AgY29udGV4dCBmb3IgY2FsbGJhY2sgZnVuY3Rpb25cclxuICAqIEByZXR1cm4gIFZvaWRcclxuICAqL1xyXG5cdGZvckVhY2goY2FsbGJhY2spIHtcclxuXHRcdGxldCB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0bGV0IHBhaXJzID0gZ2V0SGVhZGVycyh0aGlzKTtcclxuXHRcdGxldCBpID0gMDtcclxuXHRcdHdoaWxlIChpIDwgcGFpcnMubGVuZ3RoKSB7XHJcblx0XHRcdHZhciBfcGFpcnMkaSA9IHBhaXJzW2ldO1xyXG5cdFx0XHRjb25zdCBuYW1lID0gX3BhaXJzJGlbMF0sXHJcblx0XHRcdCAgICAgIHZhbHVlID0gX3BhaXJzJGlbMV07XHJcblxyXG5cdFx0XHRjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHZhbHVlLCBuYW1lLCB0aGlzKTtcclxuXHRcdFx0cGFpcnMgPSBnZXRIZWFkZXJzKHRoaXMpO1xyXG5cdFx0XHRpKys7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuICAqIE92ZXJ3cml0ZSBoZWFkZXIgdmFsdWVzIGdpdmVuIG5hbWVcclxuICAqXHJcbiAgKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgICBIZWFkZXIgbmFtZVxyXG4gICogQHBhcmFtICAgU3RyaW5nICB2YWx1ZSAgSGVhZGVyIHZhbHVlXHJcbiAgKiBAcmV0dXJuICBWb2lkXHJcbiAgKi9cclxuXHRzZXQobmFtZSwgdmFsdWUpIHtcclxuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XHJcblx0XHR2YWx1ZSA9IGAke3ZhbHVlfWA7XHJcblx0XHR2YWxpZGF0ZU5hbWUobmFtZSk7XHJcblx0XHR2YWxpZGF0ZVZhbHVlKHZhbHVlKTtcclxuXHRcdGNvbnN0IGtleSA9IGZpbmQodGhpc1tNQVBdLCBuYW1lKTtcclxuXHRcdHRoaXNbTUFQXVtrZXkgIT09IHVuZGVmaW5lZCA/IGtleSA6IG5hbWVdID0gW3ZhbHVlXTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG4gICogQXBwZW5kIGEgdmFsdWUgb250byBleGlzdGluZyBoZWFkZXJcclxuICAqXHJcbiAgKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgICBIZWFkZXIgbmFtZVxyXG4gICogQHBhcmFtICAgU3RyaW5nICB2YWx1ZSAgSGVhZGVyIHZhbHVlXHJcbiAgKiBAcmV0dXJuICBWb2lkXHJcbiAgKi9cclxuXHRhcHBlbmQobmFtZSwgdmFsdWUpIHtcclxuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XHJcblx0XHR2YWx1ZSA9IGAke3ZhbHVlfWA7XHJcblx0XHR2YWxpZGF0ZU5hbWUobmFtZSk7XHJcblx0XHR2YWxpZGF0ZVZhbHVlKHZhbHVlKTtcclxuXHRcdGNvbnN0IGtleSA9IGZpbmQodGhpc1tNQVBdLCBuYW1lKTtcclxuXHRcdGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzW01BUF1ba2V5XS5wdXNoKHZhbHVlKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXNbTUFQXVtuYW1lXSA9IFt2YWx1ZV07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuICAqIENoZWNrIGZvciBoZWFkZXIgbmFtZSBleGlzdGVuY2VcclxuICAqXHJcbiAgKiBAcGFyYW0gICBTdHJpbmcgICBuYW1lICBIZWFkZXIgbmFtZVxyXG4gICogQHJldHVybiAgQm9vbGVhblxyXG4gICovXHJcblx0aGFzKG5hbWUpIHtcclxuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XHJcblx0XHR2YWxpZGF0ZU5hbWUobmFtZSk7XHJcblx0XHRyZXR1cm4gZmluZCh0aGlzW01BUF0sIG5hbWUpICE9PSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuICAqIERlbGV0ZSBhbGwgaGVhZGVyIHZhbHVlcyBnaXZlbiBuYW1lXHJcbiAgKlxyXG4gICogQHBhcmFtICAgU3RyaW5nICBuYW1lICBIZWFkZXIgbmFtZVxyXG4gICogQHJldHVybiAgVm9pZFxyXG4gICovXHJcblx0ZGVsZXRlKG5hbWUpIHtcclxuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XHJcblx0XHR2YWxpZGF0ZU5hbWUobmFtZSk7XHJcblx0XHRjb25zdCBrZXkgPSBmaW5kKHRoaXNbTUFQXSwgbmFtZSk7XHJcblx0XHRpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0ZGVsZXRlIHRoaXNbTUFQXVtrZXldO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcbiAgKiBSZXR1cm4gcmF3IGhlYWRlcnMgKG5vbi1zcGVjIGFwaSlcclxuICAqXHJcbiAgKiBAcmV0dXJuICBPYmplY3RcclxuICAqL1xyXG5cdHJhdygpIHtcclxuXHRcdHJldHVybiB0aGlzW01BUF07XHJcblx0fVxyXG5cclxuXHQvKipcclxuICAqIEdldCBhbiBpdGVyYXRvciBvbiBrZXlzLlxyXG4gICpcclxuICAqIEByZXR1cm4gIEl0ZXJhdG9yXHJcbiAgKi9cclxuXHRrZXlzKCkge1xyXG5cdFx0cmV0dXJuIGNyZWF0ZUhlYWRlcnNJdGVyYXRvcih0aGlzLCAna2V5Jyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuICAqIEdldCBhbiBpdGVyYXRvciBvbiB2YWx1ZXMuXHJcbiAgKlxyXG4gICogQHJldHVybiAgSXRlcmF0b3JcclxuICAqL1xyXG5cdHZhbHVlcygpIHtcclxuXHRcdHJldHVybiBjcmVhdGVIZWFkZXJzSXRlcmF0b3IodGhpcywgJ3ZhbHVlJyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuICAqIEdldCBhbiBpdGVyYXRvciBvbiBlbnRyaWVzLlxyXG4gICpcclxuICAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaXRlcmF0b3Igb2YgdGhlIEhlYWRlcnMgb2JqZWN0LlxyXG4gICpcclxuICAqIEByZXR1cm4gIEl0ZXJhdG9yXHJcbiAgKi9cclxuXHRbU3ltYm9sLml0ZXJhdG9yXSgpIHtcclxuXHRcdHJldHVybiBjcmVhdGVIZWFkZXJzSXRlcmF0b3IodGhpcywgJ2tleSt2YWx1ZScpO1xyXG5cdH1cclxufVxyXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXTtcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIZWFkZXJzLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XHJcblx0dmFsdWU6ICdIZWFkZXJzJyxcclxuXHR3cml0YWJsZTogZmFsc2UsXHJcblx0ZW51bWVyYWJsZTogZmFsc2UsXHJcblx0Y29uZmlndXJhYmxlOiB0cnVlXHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSGVhZGVycy5wcm90b3R5cGUsIHtcclxuXHRnZXQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxyXG5cdGZvckVhY2g6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxyXG5cdHNldDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXHJcblx0YXBwZW5kOiB7IGVudW1lcmFibGU6IHRydWUgfSxcclxuXHRoYXM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxyXG5cdGRlbGV0ZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXHJcblx0a2V5czogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXHJcblx0dmFsdWVzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcclxuXHRlbnRyaWVzOiB7IGVudW1lcmFibGU6IHRydWUgfVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIGdldEhlYWRlcnMoaGVhZGVycykge1xyXG5cdGxldCBraW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAna2V5K3ZhbHVlJztcclxuXHJcblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnNbTUFQXSkuc29ydCgpO1xyXG5cdHJldHVybiBrZXlzLm1hcChraW5kID09PSAna2V5JyA/IGZ1bmN0aW9uIChrKSB7XHJcblx0XHRyZXR1cm4gay50b0xvd2VyQ2FzZSgpO1xyXG5cdH0gOiBraW5kID09PSAndmFsdWUnID8gZnVuY3Rpb24gKGspIHtcclxuXHRcdHJldHVybiBoZWFkZXJzW01BUF1ba10uam9pbignLCAnKTtcclxuXHR9IDogZnVuY3Rpb24gKGspIHtcclxuXHRcdHJldHVybiBbay50b0xvd2VyQ2FzZSgpLCBoZWFkZXJzW01BUF1ba10uam9pbignLCAnKV07XHJcblx0fSk7XHJcbn1cclxuXHJcbmNvbnN0IElOVEVSTkFMID0gU3ltYm9sKCdpbnRlcm5hbCcpO1xyXG5cclxuZnVuY3Rpb24gY3JlYXRlSGVhZGVyc0l0ZXJhdG9yKHRhcmdldCwga2luZCkge1xyXG5cdGNvbnN0IGl0ZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShIZWFkZXJzSXRlcmF0b3JQcm90b3R5cGUpO1xyXG5cdGl0ZXJhdG9yW0lOVEVSTkFMXSA9IHtcclxuXHRcdHRhcmdldCxcclxuXHRcdGtpbmQsXHJcblx0XHRpbmRleDogMFxyXG5cdH07XHJcblx0cmV0dXJuIGl0ZXJhdG9yO1xyXG59XHJcblxyXG5jb25zdCBIZWFkZXJzSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Yoe1xyXG5cdG5leHQoKSB7XHJcblx0XHQvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcclxuXHRcdGlmICghdGhpcyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykgIT09IEhlYWRlcnNJdGVyYXRvclByb3RvdHlwZSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZSBvZiBgdGhpc2AgaXMgbm90IGEgSGVhZGVyc0l0ZXJhdG9yJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIF9JTlRFUk5BTCA9IHRoaXNbSU5URVJOQUxdO1xyXG5cdFx0Y29uc3QgdGFyZ2V0ID0gX0lOVEVSTkFMLnRhcmdldCxcclxuXHRcdCAgICAgIGtpbmQgPSBfSU5URVJOQUwua2luZCxcclxuXHRcdCAgICAgIGluZGV4ID0gX0lOVEVSTkFMLmluZGV4O1xyXG5cclxuXHRcdGNvbnN0IHZhbHVlcyA9IGdldEhlYWRlcnModGFyZ2V0LCBraW5kKTtcclxuXHRcdGNvbnN0IGxlbiA9IHZhbHVlcy5sZW5ndGg7XHJcblx0XHRpZiAoaW5kZXggPj0gbGVuKSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRkb25lOiB0cnVlXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpc1tJTlRFUk5BTF0uaW5kZXggPSBpbmRleCArIDE7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0dmFsdWU6IHZhbHVlc1tpbmRleF0sXHJcblx0XHRcdGRvbmU6IGZhbHNlXHJcblx0XHR9O1xyXG5cdH1cclxufSwgT2JqZWN0LmdldFByb3RvdHlwZU9mKE9iamVjdC5nZXRQcm90b3R5cGVPZihbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSGVhZGVyc0l0ZXJhdG9yUHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcclxuXHR2YWx1ZTogJ0hlYWRlcnNJdGVyYXRvcicsXHJcblx0d3JpdGFibGU6IGZhbHNlLFxyXG5cdGVudW1lcmFibGU6IGZhbHNlLFxyXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBFeHBvcnQgdGhlIEhlYWRlcnMgb2JqZWN0IGluIGEgZm9ybSB0aGF0IE5vZGUuanMgY2FuIGNvbnN1bWUuXHJcbiAqXHJcbiAqIEBwYXJhbSAgIEhlYWRlcnMgIGhlYWRlcnNcclxuICogQHJldHVybiAgT2JqZWN0XHJcbiAqL1xyXG5mdW5jdGlvbiBleHBvcnROb2RlQ29tcGF0aWJsZUhlYWRlcnMoaGVhZGVycykge1xyXG5cdGNvbnN0IG9iaiA9IE9iamVjdC5hc3NpZ24oeyBfX3Byb3RvX186IG51bGwgfSwgaGVhZGVyc1tNQVBdKTtcclxuXHJcblx0Ly8gaHR0cC5yZXF1ZXN0KCkgb25seSBzdXBwb3J0cyBzdHJpbmcgYXMgSG9zdCBoZWFkZXIuIFRoaXMgaGFjayBtYWtlc1xyXG5cdC8vIHNwZWNpZnlpbmcgY3VzdG9tIEhvc3QgaGVhZGVyIHBvc3NpYmxlLlxyXG5cdGNvbnN0IGhvc3RIZWFkZXJLZXkgPSBmaW5kKGhlYWRlcnNbTUFQXSwgJ0hvc3QnKTtcclxuXHRpZiAoaG9zdEhlYWRlcktleSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRvYmpbaG9zdEhlYWRlcktleV0gPSBvYmpbaG9zdEhlYWRlcktleV1bMF07XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gb2JqO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgSGVhZGVycyBvYmplY3QgZnJvbSBhbiBvYmplY3Qgb2YgaGVhZGVycywgaWdub3JpbmcgdGhvc2UgdGhhdCBkb1xyXG4gKiBub3QgY29uZm9ybSB0byBIVFRQIGdyYW1tYXIgcHJvZHVjdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSAgIE9iamVjdCAgb2JqICBPYmplY3Qgb2YgaGVhZGVyc1xyXG4gKiBAcmV0dXJuICBIZWFkZXJzXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVIZWFkZXJzTGVuaWVudChvYmopIHtcclxuXHRjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcclxuXHRmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMob2JqKSkge1xyXG5cdFx0aWYgKGludmFsaWRUb2tlblJlZ2V4LnRlc3QobmFtZSkpIHtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheShvYmpbbmFtZV0pKSB7XHJcblx0XHRcdGZvciAoY29uc3QgdmFsIG9mIG9ialtuYW1lXSkge1xyXG5cdFx0XHRcdGlmIChpbnZhbGlkSGVhZGVyQ2hhclJlZ2V4LnRlc3QodmFsKSkge1xyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChoZWFkZXJzW01BUF1bbmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0aGVhZGVyc1tNQVBdW25hbWVdID0gW3ZhbF07XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGhlYWRlcnNbTUFQXVtuYW1lXS5wdXNoKHZhbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKCFpbnZhbGlkSGVhZGVyQ2hhclJlZ2V4LnRlc3Qob2JqW25hbWVdKSkge1xyXG5cdFx0XHRoZWFkZXJzW01BUF1bbmFtZV0gPSBbb2JqW25hbWVdXTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGhlYWRlcnM7XHJcbn1cclxuXHJcbmNvbnN0IElOVEVSTkFMUyQxID0gU3ltYm9sKCdSZXNwb25zZSBpbnRlcm5hbHMnKTtcclxuXHJcbi8vIGZpeCBhbiBpc3N1ZSB3aGVyZSBcIlNUQVRVU19DT0RFU1wiIGFyZW4ndCBhIG5hbWVkIGV4cG9ydCBmb3Igbm9kZSA8MTBcclxuY29uc3QgU1RBVFVTX0NPREVTID0gaHR0cC5TVEFUVVNfQ09ERVM7XHJcblxyXG4vKipcclxuICogUmVzcG9uc2UgY2xhc3NcclxuICpcclxuICogQHBhcmFtICAgU3RyZWFtICBib2R5ICBSZWFkYWJsZSBzdHJlYW1cclxuICogQHBhcmFtICAgT2JqZWN0ICBvcHRzICBSZXNwb25zZSBvcHRpb25zXHJcbiAqIEByZXR1cm4gIFZvaWRcclxuICovXHJcbmNsYXNzIFJlc3BvbnNlIHtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdGxldCBib2R5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBudWxsO1xyXG5cdFx0bGV0IG9wdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xyXG5cclxuXHRcdEJvZHkuY2FsbCh0aGlzLCBib2R5LCBvcHRzKTtcclxuXHJcblx0XHRjb25zdCBzdGF0dXMgPSBvcHRzLnN0YXR1cyB8fCAyMDA7XHJcblx0XHRjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0cy5oZWFkZXJzKTtcclxuXHJcblx0XHRpZiAoYm9keSAhPSBudWxsICYmICFoZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJykpIHtcclxuXHRcdFx0Y29uc3QgY29udGVudFR5cGUgPSBleHRyYWN0Q29udGVudFR5cGUoYm9keSk7XHJcblx0XHRcdGlmIChjb250ZW50VHlwZSkge1xyXG5cdFx0XHRcdGhlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzW0lOVEVSTkFMUyQxXSA9IHtcclxuXHRcdFx0dXJsOiBvcHRzLnVybCxcclxuXHRcdFx0c3RhdHVzLFxyXG5cdFx0XHRzdGF0dXNUZXh0OiBvcHRzLnN0YXR1c1RleHQgfHwgU1RBVFVTX0NPREVTW3N0YXR1c10sXHJcblx0XHRcdGhlYWRlcnMsXHJcblx0XHRcdGNvdW50ZXI6IG9wdHMuY291bnRlclxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGdldCB1cmwoKSB7XHJcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0udXJsIHx8ICcnO1xyXG5cdH1cclxuXHJcblx0Z2V0IHN0YXR1cygpIHtcclxuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuICAqIENvbnZlbmllbmNlIHByb3BlcnR5IHJlcHJlc2VudGluZyBpZiB0aGUgcmVxdWVzdCBlbmRlZCBub3JtYWxseVxyXG4gICovXHJcblx0Z2V0IG9rKCkge1xyXG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDFdLnN0YXR1cyA+PSAyMDAgJiYgdGhpc1tJTlRFUk5BTFMkMV0uc3RhdHVzIDwgMzAwO1xyXG5cdH1cclxuXHJcblx0Z2V0IHJlZGlyZWN0ZWQoKSB7XHJcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uY291bnRlciA+IDA7XHJcblx0fVxyXG5cclxuXHRnZXQgc3RhdHVzVGV4dCgpIHtcclxuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXNUZXh0O1xyXG5cdH1cclxuXHJcblx0Z2V0IGhlYWRlcnMoKSB7XHJcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uaGVhZGVycztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG4gICogQ2xvbmUgdGhpcyByZXNwb25zZVxyXG4gICpcclxuICAqIEByZXR1cm4gIFJlc3BvbnNlXHJcbiAgKi9cclxuXHRjbG9uZSgpIHtcclxuXHRcdHJldHVybiBuZXcgUmVzcG9uc2UoY2xvbmUodGhpcyksIHtcclxuXHRcdFx0dXJsOiB0aGlzLnVybCxcclxuXHRcdFx0c3RhdHVzOiB0aGlzLnN0YXR1cyxcclxuXHRcdFx0c3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxyXG5cdFx0XHRoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcblx0XHRcdG9rOiB0aGlzLm9rLFxyXG5cdFx0XHRyZWRpcmVjdGVkOiB0aGlzLnJlZGlyZWN0ZWRcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG5cclxuQm9keS5taXhJbihSZXNwb25zZS5wcm90b3R5cGUpO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVzcG9uc2UucHJvdG90eXBlLCB7XHJcblx0dXJsOiB7IGVudW1lcmFibGU6IHRydWUgfSxcclxuXHRzdGF0dXM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxyXG5cdG9rOiB7IGVudW1lcmFibGU6IHRydWUgfSxcclxuXHRyZWRpcmVjdGVkOiB7IGVudW1lcmFibGU6IHRydWUgfSxcclxuXHRzdGF0dXNUZXh0OiB7IGVudW1lcmFibGU6IHRydWUgfSxcclxuXHRoZWFkZXJzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcclxuXHRjbG9uZTogeyBlbnVtZXJhYmxlOiB0cnVlIH1cclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVzcG9uc2UucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcclxuXHR2YWx1ZTogJ1Jlc3BvbnNlJyxcclxuXHR3cml0YWJsZTogZmFsc2UsXHJcblx0ZW51bWVyYWJsZTogZmFsc2UsXHJcblx0Y29uZmlndXJhYmxlOiB0cnVlXHJcbn0pO1xyXG5cclxuY29uc3QgSU5URVJOQUxTJDIgPSBTeW1ib2woJ1JlcXVlc3QgaW50ZXJuYWxzJyk7XHJcbmNvbnN0IFVSTCA9IFVybC5VUkwgfHwgd2hhdHdnVXJsLlVSTDtcclxuXHJcbi8vIGZpeCBhbiBpc3N1ZSB3aGVyZSBcImZvcm1hdFwiLCBcInBhcnNlXCIgYXJlbid0IGEgbmFtZWQgZXhwb3J0IGZvciBub2RlIDwxMFxyXG5jb25zdCBwYXJzZV91cmwgPSBVcmwucGFyc2U7XHJcbmNvbnN0IGZvcm1hdF91cmwgPSBVcmwuZm9ybWF0O1xyXG5cclxuLyoqXHJcbiAqIFdyYXBwZXIgYXJvdW5kIGBuZXcgVVJMYCB0byBoYW5kbGUgYXJiaXRyYXJ5IFVSTHNcclxuICpcclxuICogQHBhcmFtICB7c3RyaW5nfSB1cmxTdHJcclxuICogQHJldHVybiB7dm9pZH1cclxuICovXHJcbmZ1bmN0aW9uIHBhcnNlVVJMKHVybFN0cikge1xyXG5cdC8qXHJcbiBcdENoZWNrIHdoZXRoZXIgdGhlIFVSTCBpcyBhYnNvbHV0ZSBvciBub3RcclxuIFx0XHRTY2hlbWU6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4xXHJcbiBcdEFic29sdXRlIFVSTDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi00LjNcclxuICovXHJcblx0aWYgKC9eW2EtekEtWl1bYS16QS1aXFxkK1xcLS5dKjovLmV4ZWModXJsU3RyKSkge1xyXG5cdFx0dXJsU3RyID0gbmV3IFVSTCh1cmxTdHIpLnRvU3RyaW5nKCk7XHJcblx0fVxyXG5cclxuXHQvLyBGYWxsYmFjayB0byBvbGQgaW1wbGVtZW50YXRpb24gZm9yIGFyYml0cmFyeSBVUkxzXHJcblx0cmV0dXJuIHBhcnNlX3VybCh1cmxTdHIpO1xyXG59XHJcblxyXG5jb25zdCBzdHJlYW1EZXN0cnVjdGlvblN1cHBvcnRlZCA9ICdkZXN0cm95JyBpbiBTdHJlYW0uUmVhZGFibGUucHJvdG90eXBlO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIGEgdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgUmVxdWVzdC5cclxuICpcclxuICogQHBhcmFtICAgTWl4ZWQgICBpbnB1dFxyXG4gKiBAcmV0dXJuICBCb29sZWFuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1JlcXVlc3QoaW5wdXQpIHtcclxuXHRyZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgaW5wdXRbSU5URVJOQUxTJDJdID09PSAnb2JqZWN0JztcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBYm9ydFNpZ25hbChzaWduYWwpIHtcclxuXHRjb25zdCBwcm90byA9IHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsID09PSAnb2JqZWN0JyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc2lnbmFsKTtcclxuXHRyZXR1cm4gISEocHJvdG8gJiYgcHJvdG8uY29uc3RydWN0b3IubmFtZSA9PT0gJ0Fib3J0U2lnbmFsJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXF1ZXN0IGNsYXNzXHJcbiAqXHJcbiAqIEBwYXJhbSAgIE1peGVkICAgaW5wdXQgIFVybCBvciBSZXF1ZXN0IGluc3RhbmNlXHJcbiAqIEBwYXJhbSAgIE9iamVjdCAgaW5pdCAgIEN1c3RvbSBvcHRpb25zXHJcbiAqIEByZXR1cm4gIFZvaWRcclxuICovXHJcbmNsYXNzIFJlcXVlc3Qge1xyXG5cdGNvbnN0cnVjdG9yKGlucHV0KSB7XHJcblx0XHRsZXQgaW5pdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XHJcblxyXG5cdFx0bGV0IHBhcnNlZFVSTDtcclxuXHJcblx0XHQvLyBub3JtYWxpemUgaW5wdXRcclxuXHRcdGlmICghaXNSZXF1ZXN0KGlucHV0KSkge1xyXG5cdFx0XHRpZiAoaW5wdXQgJiYgaW5wdXQuaHJlZikge1xyXG5cdFx0XHRcdC8vIGluIG9yZGVyIHRvIHN1cHBvcnQgTm9kZS5qcycgVXJsIG9iamVjdHM7IHRob3VnaCBXSEFUV0cncyBVUkwgb2JqZWN0c1xyXG5cdFx0XHRcdC8vIHdpbGwgZmFsbCBpbnRvIHRoaXMgYnJhbmNoIGFsc28gKHNpbmNlIHRoZWlyIGB0b1N0cmluZygpYCB3aWxsIHJldHVyblxyXG5cdFx0XHRcdC8vIGBocmVmYCBwcm9wZXJ0eSBhbnl3YXkpXHJcblx0XHRcdFx0cGFyc2VkVVJMID0gcGFyc2VVUkwoaW5wdXQuaHJlZik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gY29lcmNlIGlucHV0IHRvIGEgc3RyaW5nIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHBhcnNlXHJcblx0XHRcdFx0cGFyc2VkVVJMID0gcGFyc2VVUkwoYCR7aW5wdXR9YCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aW5wdXQgPSB7fTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHBhcnNlZFVSTCA9IHBhcnNlVVJMKGlucHV0LnVybCk7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IG1ldGhvZCA9IGluaXQubWV0aG9kIHx8IGlucHV0Lm1ldGhvZCB8fCAnR0VUJztcclxuXHRcdG1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xyXG5cclxuXHRcdGlmICgoaW5pdC5ib2R5ICE9IG51bGwgfHwgaXNSZXF1ZXN0KGlucHV0KSAmJiBpbnB1dC5ib2R5ICE9PSBudWxsKSAmJiAobWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdIRUFEJykpIHtcclxuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignUmVxdWVzdCB3aXRoIEdFVC9IRUFEIG1ldGhvZCBjYW5ub3QgaGF2ZSBib2R5Jyk7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IGlucHV0Qm9keSA9IGluaXQuYm9keSAhPSBudWxsID8gaW5pdC5ib2R5IDogaXNSZXF1ZXN0KGlucHV0KSAmJiBpbnB1dC5ib2R5ICE9PSBudWxsID8gY2xvbmUoaW5wdXQpIDogbnVsbDtcclxuXHJcblx0XHRCb2R5LmNhbGwodGhpcywgaW5wdXRCb2R5LCB7XHJcblx0XHRcdHRpbWVvdXQ6IGluaXQudGltZW91dCB8fCBpbnB1dC50aW1lb3V0IHx8IDAsXHJcblx0XHRcdHNpemU6IGluaXQuc2l6ZSB8fCBpbnB1dC5zaXplIHx8IDBcclxuXHRcdH0pO1xyXG5cclxuXHRcdGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbml0LmhlYWRlcnMgfHwgaW5wdXQuaGVhZGVycyB8fCB7fSk7XHJcblxyXG5cdFx0aWYgKGlucHV0Qm9keSAhPSBudWxsICYmICFoZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJykpIHtcclxuXHRcdFx0Y29uc3QgY29udGVudFR5cGUgPSBleHRyYWN0Q29udGVudFR5cGUoaW5wdXRCb2R5KTtcclxuXHRcdFx0aWYgKGNvbnRlbnRUeXBlKSB7XHJcblx0XHRcdFx0aGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBzaWduYWwgPSBpc1JlcXVlc3QoaW5wdXQpID8gaW5wdXQuc2lnbmFsIDogbnVsbDtcclxuXHRcdGlmICgnc2lnbmFsJyBpbiBpbml0KSBzaWduYWwgPSBpbml0LnNpZ25hbDtcclxuXHJcblx0XHRpZiAoc2lnbmFsICE9IG51bGwgJiYgIWlzQWJvcnRTaWduYWwoc2lnbmFsKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBzaWduYWwgdG8gYmUgYW4gaW5zdGFuY2VvZiBBYm9ydFNpZ25hbCcpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXNbSU5URVJOQUxTJDJdID0ge1xyXG5cdFx0XHRtZXRob2QsXHJcblx0XHRcdHJlZGlyZWN0OiBpbml0LnJlZGlyZWN0IHx8IGlucHV0LnJlZGlyZWN0IHx8ICdmb2xsb3cnLFxyXG5cdFx0XHRoZWFkZXJzLFxyXG5cdFx0XHRwYXJzZWRVUkwsXHJcblx0XHRcdHNpZ25hbFxyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBub2RlLWZldGNoLW9ubHkgb3B0aW9uc1xyXG5cdFx0dGhpcy5mb2xsb3cgPSBpbml0LmZvbGxvdyAhPT0gdW5kZWZpbmVkID8gaW5pdC5mb2xsb3cgOiBpbnB1dC5mb2xsb3cgIT09IHVuZGVmaW5lZCA/IGlucHV0LmZvbGxvdyA6IDIwO1xyXG5cdFx0dGhpcy5jb21wcmVzcyA9IGluaXQuY29tcHJlc3MgIT09IHVuZGVmaW5lZCA/IGluaXQuY29tcHJlc3MgOiBpbnB1dC5jb21wcmVzcyAhPT0gdW5kZWZpbmVkID8gaW5wdXQuY29tcHJlc3MgOiB0cnVlO1xyXG5cdFx0dGhpcy5jb3VudGVyID0gaW5pdC5jb3VudGVyIHx8IGlucHV0LmNvdW50ZXIgfHwgMDtcclxuXHRcdHRoaXMuYWdlbnQgPSBpbml0LmFnZW50IHx8IGlucHV0LmFnZW50O1xyXG5cdH1cclxuXHJcblx0Z2V0IG1ldGhvZCgpIHtcclxuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQyXS5tZXRob2Q7XHJcblx0fVxyXG5cclxuXHRnZXQgdXJsKCkge1xyXG5cdFx0cmV0dXJuIGZvcm1hdF91cmwodGhpc1tJTlRFUk5BTFMkMl0ucGFyc2VkVVJMKTtcclxuXHR9XHJcblxyXG5cdGdldCBoZWFkZXJzKCkge1xyXG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDJdLmhlYWRlcnM7XHJcblx0fVxyXG5cclxuXHRnZXQgcmVkaXJlY3QoKSB7XHJcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0ucmVkaXJlY3Q7XHJcblx0fVxyXG5cclxuXHRnZXQgc2lnbmFsKCkge1xyXG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDJdLnNpZ25hbDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG4gICogQ2xvbmUgdGhpcyByZXF1ZXN0XHJcbiAgKlxyXG4gICogQHJldHVybiAgUmVxdWVzdFxyXG4gICovXHJcblx0Y2xvbmUoKSB7XHJcblx0XHRyZXR1cm4gbmV3IFJlcXVlc3QodGhpcyk7XHJcblx0fVxyXG59XHJcblxyXG5Cb2R5Lm1peEluKFJlcXVlc3QucHJvdG90eXBlKTtcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZXF1ZXN0LnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XHJcblx0dmFsdWU6ICdSZXF1ZXN0JyxcclxuXHR3cml0YWJsZTogZmFsc2UsXHJcblx0ZW51bWVyYWJsZTogZmFsc2UsXHJcblx0Y29uZmlndXJhYmxlOiB0cnVlXHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVxdWVzdC5wcm90b3R5cGUsIHtcclxuXHRtZXRob2Q6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxyXG5cdHVybDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXHJcblx0aGVhZGVyczogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXHJcblx0cmVkaXJlY3Q6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxyXG5cdGNsb25lOiB7IGVudW1lcmFibGU6IHRydWUgfSxcclxuXHRzaWduYWw6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgYSBSZXF1ZXN0IHRvIE5vZGUuanMgaHR0cCByZXF1ZXN0IG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSAgIFJlcXVlc3QgIEEgUmVxdWVzdCBpbnN0YW5jZVxyXG4gKiBAcmV0dXJuICBPYmplY3QgICBUaGUgb3B0aW9ucyBvYmplY3QgdG8gYmUgcGFzc2VkIHRvIGh0dHAucmVxdWVzdFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0Tm9kZVJlcXVlc3RPcHRpb25zKHJlcXVlc3QpIHtcclxuXHRjb25zdCBwYXJzZWRVUkwgPSByZXF1ZXN0W0lOVEVSTkFMUyQyXS5wYXJzZWRVUkw7XHJcblx0Y29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHJlcXVlc3RbSU5URVJOQUxTJDJdLmhlYWRlcnMpO1xyXG5cclxuXHQvLyBmZXRjaCBzdGVwIDEuM1xyXG5cdGlmICghaGVhZGVycy5oYXMoJ0FjY2VwdCcpKSB7XHJcblx0XHRoZWFkZXJzLnNldCgnQWNjZXB0JywgJyovKicpO1xyXG5cdH1cclxuXHJcblx0Ly8gQmFzaWMgZmV0Y2hcclxuXHRpZiAoIXBhcnNlZFVSTC5wcm90b2NvbCB8fCAhcGFyc2VkVVJMLmhvc3RuYW1lKSB7XHJcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPbmx5IGFic29sdXRlIFVSTHMgYXJlIHN1cHBvcnRlZCcpO1xyXG5cdH1cclxuXHJcblx0aWYgKCEvXmh0dHBzPzokLy50ZXN0KHBhcnNlZFVSTC5wcm90b2NvbCkpIHtcclxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09ubHkgSFRUUChTKSBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZCcpO1xyXG5cdH1cclxuXHJcblx0aWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3QuYm9keSBpbnN0YW5jZW9mIFN0cmVhbS5SZWFkYWJsZSAmJiAhc3RyZWFtRGVzdHJ1Y3Rpb25TdXBwb3J0ZWQpIHtcclxuXHRcdHRocm93IG5ldyBFcnJvcignQ2FuY2VsbGF0aW9uIG9mIHN0cmVhbWVkIHJlcXVlc3RzIHdpdGggQWJvcnRTaWduYWwgaXMgbm90IHN1cHBvcnRlZCBpbiBub2RlIDwgOCcpO1xyXG5cdH1cclxuXHJcblx0Ly8gSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIHN0ZXBzIDIuNC0yLjdcclxuXHRsZXQgY29udGVudExlbmd0aFZhbHVlID0gbnVsbDtcclxuXHRpZiAocmVxdWVzdC5ib2R5ID09IG51bGwgJiYgL14oUE9TVHxQVVQpJC9pLnRlc3QocmVxdWVzdC5tZXRob2QpKSB7XHJcblx0XHRjb250ZW50TGVuZ3RoVmFsdWUgPSAnMCc7XHJcblx0fVxyXG5cdGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xyXG5cdFx0Y29uc3QgdG90YWxCeXRlcyA9IGdldFRvdGFsQnl0ZXMocmVxdWVzdCk7XHJcblx0XHRpZiAodHlwZW9mIHRvdGFsQnl0ZXMgPT09ICdudW1iZXInKSB7XHJcblx0XHRcdGNvbnRlbnRMZW5ndGhWYWx1ZSA9IFN0cmluZyh0b3RhbEJ5dGVzKTtcclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKGNvbnRlbnRMZW5ndGhWYWx1ZSkge1xyXG5cdFx0aGVhZGVycy5zZXQoJ0NvbnRlbnQtTGVuZ3RoJywgY29udGVudExlbmd0aFZhbHVlKTtcclxuXHR9XHJcblxyXG5cdC8vIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBzdGVwIDIuMTFcclxuXHRpZiAoIWhlYWRlcnMuaGFzKCdVc2VyLUFnZW50JykpIHtcclxuXHRcdGhlYWRlcnMuc2V0KCdVc2VyLUFnZW50JywgJ25vZGUtZmV0Y2gvMS4wICgraHR0cHM6Ly9naXRodWIuY29tL2JpdGlubi9ub2RlLWZldGNoKScpO1xyXG5cdH1cclxuXHJcblx0Ly8gSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIHN0ZXAgMi4xNVxyXG5cdGlmIChyZXF1ZXN0LmNvbXByZXNzICYmICFoZWFkZXJzLmhhcygnQWNjZXB0LUVuY29kaW5nJykpIHtcclxuXHRcdGhlYWRlcnMuc2V0KCdBY2NlcHQtRW5jb2RpbmcnLCAnZ3ppcCxkZWZsYXRlJyk7XHJcblx0fVxyXG5cclxuXHRsZXQgYWdlbnQgPSByZXF1ZXN0LmFnZW50O1xyXG5cdGlmICh0eXBlb2YgYWdlbnQgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdGFnZW50ID0gYWdlbnQocGFyc2VkVVJMKTtcclxuXHR9XHJcblxyXG5cdGlmICghaGVhZGVycy5oYXMoJ0Nvbm5lY3Rpb24nKSAmJiAhYWdlbnQpIHtcclxuXHRcdGhlYWRlcnMuc2V0KCdDb25uZWN0aW9uJywgJ2Nsb3NlJyk7XHJcblx0fVxyXG5cclxuXHQvLyBIVFRQLW5ldHdvcmsgZmV0Y2ggc3RlcCA0LjJcclxuXHQvLyBjaHVua2VkIGVuY29kaW5nIGlzIGhhbmRsZWQgYnkgTm9kZS5qc1xyXG5cclxuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcGFyc2VkVVJMLCB7XHJcblx0XHRtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxyXG5cdFx0aGVhZGVyczogZXhwb3J0Tm9kZUNvbXBhdGlibGVIZWFkZXJzKGhlYWRlcnMpLFxyXG5cdFx0YWdlbnRcclxuXHR9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIGFib3J0LWVycm9yLmpzXHJcbiAqXHJcbiAqIEFib3J0RXJyb3IgaW50ZXJmYWNlIGZvciBjYW5jZWxsZWQgcmVxdWVzdHNcclxuICovXHJcblxyXG4vKipcclxuICogQ3JlYXRlIEFib3J0RXJyb3IgaW5zdGFuY2VcclxuICpcclxuICogQHBhcmFtICAgU3RyaW5nICAgICAgbWVzc2FnZSAgICAgIEVycm9yIG1lc3NhZ2UgZm9yIGh1bWFuXHJcbiAqIEByZXR1cm4gIEFib3J0RXJyb3JcclxuICovXHJcbmZ1bmN0aW9uIEFib3J0RXJyb3IobWVzc2FnZSkge1xyXG4gIEVycm9yLmNhbGwodGhpcywgbWVzc2FnZSk7XHJcblxyXG4gIHRoaXMudHlwZSA9ICdhYm9ydGVkJztcclxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xyXG5cclxuICAvLyBoaWRlIGN1c3RvbSBlcnJvciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZyb20gZW5kLXVzZXJzXHJcbiAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XHJcbn1cclxuXHJcbkFib3J0RXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xyXG5BYm9ydEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFib3J0RXJyb3I7XHJcbkFib3J0RXJyb3IucHJvdG90eXBlLm5hbWUgPSAnQWJvcnRFcnJvcic7XHJcblxyXG5jb25zdCBVUkwkMSA9IFVybC5VUkwgfHwgd2hhdHdnVXJsLlVSTDtcclxuXHJcbi8vIGZpeCBhbiBpc3N1ZSB3aGVyZSBcIlBhc3NUaHJvdWdoXCIsIFwicmVzb2x2ZVwiIGFyZW4ndCBhIG5hbWVkIGV4cG9ydCBmb3Igbm9kZSA8MTBcclxuY29uc3QgUGFzc1Rocm91Z2gkMSA9IFN0cmVhbS5QYXNzVGhyb3VnaDtcclxuXHJcbmNvbnN0IGlzRG9tYWluT3JTdWJkb21haW4gPSBmdW5jdGlvbiBpc0RvbWFpbk9yU3ViZG9tYWluKGRlc3RpbmF0aW9uLCBvcmlnaW5hbCkge1xyXG5cdGNvbnN0IG9yaWcgPSBuZXcgVVJMJDEob3JpZ2luYWwpLmhvc3RuYW1lO1xyXG5cdGNvbnN0IGRlc3QgPSBuZXcgVVJMJDEoZGVzdGluYXRpb24pLmhvc3RuYW1lO1xyXG5cclxuXHRyZXR1cm4gb3JpZyA9PT0gZGVzdCB8fCBvcmlnW29yaWcubGVuZ3RoIC0gZGVzdC5sZW5ndGggLSAxXSA9PT0gJy4nICYmIG9yaWcuZW5kc1dpdGgoZGVzdCk7XHJcbn07XHJcblxyXG4vKipcclxuICogaXNTYW1lUHJvdG9jb2wgcmVwb3J0cyB3aGV0aGVyIHRoZSB0d28gcHJvdmlkZWQgVVJMcyB1c2UgdGhlIHNhbWUgcHJvdG9jb2wuXHJcbiAqXHJcbiAqIEJvdGggZG9tYWlucyBtdXN0IGFscmVhZHkgYmUgaW4gY2Fub25pY2FsIGZvcm0uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gb3JpZ2luYWxcclxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSBkZXN0aW5hdGlvblxyXG4gKi9cclxuY29uc3QgaXNTYW1lUHJvdG9jb2wgPSBmdW5jdGlvbiBpc1NhbWVQcm90b2NvbChkZXN0aW5hdGlvbiwgb3JpZ2luYWwpIHtcclxuXHRjb25zdCBvcmlnID0gbmV3IFVSTCQxKG9yaWdpbmFsKS5wcm90b2NvbDtcclxuXHRjb25zdCBkZXN0ID0gbmV3IFVSTCQxKGRlc3RpbmF0aW9uKS5wcm90b2NvbDtcclxuXHJcblx0cmV0dXJuIG9yaWcgPT09IGRlc3Q7XHJcbn07XHJcblxyXG4vKipcclxuICogRmV0Y2ggZnVuY3Rpb25cclxuICpcclxuICogQHBhcmFtICAgTWl4ZWQgICAgdXJsICAgQWJzb2x1dGUgdXJsIG9yIFJlcXVlc3QgaW5zdGFuY2VcclxuICogQHBhcmFtICAgT2JqZWN0ICAgb3B0cyAgRmV0Y2ggb3B0aW9uc1xyXG4gKiBAcmV0dXJuICBQcm9taXNlXHJcbiAqL1xyXG5mdW5jdGlvbiBmZXRjaCh1cmwsIG9wdHMpIHtcclxuXHJcblx0Ly8gYWxsb3cgY3VzdG9tIHByb21pc2VcclxuXHRpZiAoIWZldGNoLlByb21pc2UpIHtcclxuXHRcdHRocm93IG5ldyBFcnJvcignbmF0aXZlIHByb21pc2UgbWlzc2luZywgc2V0IGZldGNoLlByb21pc2UgdG8geW91ciBmYXZvcml0ZSBhbHRlcm5hdGl2ZScpO1xyXG5cdH1cclxuXHJcblx0Qm9keS5Qcm9taXNlID0gZmV0Y2guUHJvbWlzZTtcclxuXHJcblx0Ly8gd3JhcCBodHRwLnJlcXVlc3QgaW50byBmZXRjaFxyXG5cdHJldHVybiBuZXcgZmV0Y2guUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcblx0XHQvLyBidWlsZCByZXF1ZXN0IG9iamVjdFxyXG5cdFx0Y29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwgb3B0cyk7XHJcblx0XHRjb25zdCBvcHRpb25zID0gZ2V0Tm9kZVJlcXVlc3RPcHRpb25zKHJlcXVlc3QpO1xyXG5cclxuXHRcdGNvbnN0IHNlbmQgPSAob3B0aW9ucy5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyBodHRwcyA6IGh0dHApLnJlcXVlc3Q7XHJcblx0XHRjb25zdCBzaWduYWwgPSByZXF1ZXN0LnNpZ25hbDtcclxuXHJcblx0XHRsZXQgcmVzcG9uc2UgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGFib3J0ID0gZnVuY3Rpb24gYWJvcnQoKSB7XHJcblx0XHRcdGxldCBlcnJvciA9IG5ldyBBYm9ydEVycm9yKCdUaGUgdXNlciBhYm9ydGVkIGEgcmVxdWVzdC4nKTtcclxuXHRcdFx0cmVqZWN0KGVycm9yKTtcclxuXHRcdFx0aWYgKHJlcXVlc3QuYm9keSAmJiByZXF1ZXN0LmJvZHkgaW5zdGFuY2VvZiBTdHJlYW0uUmVhZGFibGUpIHtcclxuXHRcdFx0XHRkZXN0cm95U3RyZWFtKHJlcXVlc3QuYm9keSwgZXJyb3IpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLmJvZHkpIHJldHVybjtcclxuXHRcdFx0cmVzcG9uc2UuYm9keS5lbWl0KCdlcnJvcicsIGVycm9yKTtcclxuXHRcdH07XHJcblxyXG5cdFx0aWYgKHNpZ25hbCAmJiBzaWduYWwuYWJvcnRlZCkge1xyXG5cdFx0XHRhYm9ydCgpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgYWJvcnRBbmRGaW5hbGl6ZSA9IGZ1bmN0aW9uIGFib3J0QW5kRmluYWxpemUoKSB7XHJcblx0XHRcdGFib3J0KCk7XHJcblx0XHRcdGZpbmFsaXplKCk7XHJcblx0XHR9O1xyXG5cclxuXHRcdC8vIHNlbmQgcmVxdWVzdFxyXG5cdFx0Y29uc3QgcmVxID0gc2VuZChvcHRpb25zKTtcclxuXHRcdGxldCByZXFUaW1lb3V0O1xyXG5cclxuXHRcdGlmIChzaWduYWwpIHtcclxuXHRcdFx0c2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRBbmRGaW5hbGl6ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZnVuY3Rpb24gZmluYWxpemUoKSB7XHJcblx0XHRcdHJlcS5hYm9ydCgpO1xyXG5cdFx0XHRpZiAoc2lnbmFsKSBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEFuZEZpbmFsaXplKTtcclxuXHRcdFx0Y2xlYXJUaW1lb3V0KHJlcVRpbWVvdXQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXF1ZXN0LnRpbWVvdXQpIHtcclxuXHRcdFx0cmVxLm9uY2UoJ3NvY2tldCcsIGZ1bmN0aW9uIChzb2NrZXQpIHtcclxuXHRcdFx0XHRyZXFUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYG5ldHdvcmsgdGltZW91dCBhdDogJHtyZXF1ZXN0LnVybH1gLCAncmVxdWVzdC10aW1lb3V0JykpO1xyXG5cdFx0XHRcdFx0ZmluYWxpemUoKTtcclxuXHRcdFx0XHR9LCByZXF1ZXN0LnRpbWVvdXQpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xyXG5cdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYHJlcXVlc3QgdG8gJHtyZXF1ZXN0LnVybH0gZmFpbGVkLCByZWFzb246ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycikpO1xyXG5cclxuXHRcdFx0aWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmJvZHkpIHtcclxuXHRcdFx0XHRkZXN0cm95U3RyZWFtKHJlc3BvbnNlLmJvZHksIGVycik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZpbmFsaXplKCk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRmaXhSZXNwb25zZUNodW5rZWRUcmFuc2ZlckJhZEVuZGluZyhyZXEsIGZ1bmN0aW9uIChlcnIpIHtcclxuXHRcdFx0aWYgKHNpZ25hbCAmJiBzaWduYWwuYWJvcnRlZCkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmJvZHkpIHtcclxuXHRcdFx0XHRkZXN0cm95U3RyZWFtKHJlc3BvbnNlLmJvZHksIGVycik7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qIGM4IGlnbm9yZSBuZXh0IDE4ICovXHJcblx0XHRpZiAocGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9uLnN1YnN0cmluZygxKSkgPCAxNCkge1xyXG5cdFx0XHQvLyBCZWZvcmUgTm9kZS5qcyAxNCwgcGlwZWxpbmUoKSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0IGFzeW5jIGl0ZXJhdG9ycyBhbmQgZG9lcyBub3QgYWx3YXlzXHJcblx0XHRcdC8vIHByb3Blcmx5IGhhbmRsZSB3aGVuIHRoZSBzb2NrZXQgY2xvc2UvZW5kIGV2ZW50cyBhcmUgb3V0IG9mIG9yZGVyLlxyXG5cdFx0XHRyZXEub24oJ3NvY2tldCcsIGZ1bmN0aW9uIChzKSB7XHJcblx0XHRcdFx0cy5hZGRMaXN0ZW5lcignY2xvc2UnLCBmdW5jdGlvbiAoaGFkRXJyb3IpIHtcclxuXHRcdFx0XHRcdC8vIGlmIGEgZGF0YSBsaXN0ZW5lciBpcyBzdGlsbCBwcmVzZW50IHdlIGRpZG4ndCBlbmQgY2xlYW5seVxyXG5cdFx0XHRcdFx0Y29uc3QgaGFzRGF0YUxpc3RlbmVyID0gcy5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwO1xyXG5cclxuXHRcdFx0XHRcdC8vIGlmIGVuZCBoYXBwZW5lZCBiZWZvcmUgY2xvc2UgYnV0IHRoZSBzb2NrZXQgZGlkbid0IGVtaXQgYW4gZXJyb3IsIGRvIGl0IG5vd1xyXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlICYmIGhhc0RhdGFMaXN0ZW5lciAmJiAhaGFkRXJyb3IgJiYgIShzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGVyciA9IG5ldyBFcnJvcignUHJlbWF0dXJlIGNsb3NlJyk7XHJcblx0XHRcdFx0XHRcdGVyci5jb2RlID0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJztcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2UuYm9keS5lbWl0KCdlcnJvcicsIGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlcS5vbigncmVzcG9uc2UnLCBmdW5jdGlvbiAocmVzKSB7XHJcblx0XHRcdGNsZWFyVGltZW91dChyZXFUaW1lb3V0KTtcclxuXHJcblx0XHRcdGNvbnN0IGhlYWRlcnMgPSBjcmVhdGVIZWFkZXJzTGVuaWVudChyZXMuaGVhZGVycyk7XHJcblxyXG5cdFx0XHQvLyBIVFRQIGZldGNoIHN0ZXAgNVxyXG5cdFx0XHRpZiAoZmV0Y2guaXNSZWRpcmVjdChyZXMuc3RhdHVzQ29kZSkpIHtcclxuXHRcdFx0XHQvLyBIVFRQIGZldGNoIHN0ZXAgNS4yXHJcblx0XHRcdFx0Y29uc3QgbG9jYXRpb24gPSBoZWFkZXJzLmdldCgnTG9jYXRpb24nKTtcclxuXHJcblx0XHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDUuM1xyXG5cdFx0XHRcdGxldCBsb2NhdGlvblVSTCA9IG51bGw7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGxvY2F0aW9uVVJMID0gbG9jYXRpb24gPT09IG51bGwgPyBudWxsIDogbmV3IFVSTCQxKGxvY2F0aW9uLCByZXF1ZXN0LnVybCkudG9TdHJpbmcoKTtcclxuXHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcclxuXHRcdFx0XHRcdC8vIGVycm9yIGhlcmUgY2FuIG9ubHkgYmUgaW52YWxpZCBVUkwgaW4gTG9jYXRpb246IGhlYWRlclxyXG5cdFx0XHRcdFx0Ly8gZG8gbm90IHRocm93IHdoZW4gb3B0aW9ucy5yZWRpcmVjdCA9PSBtYW51YWxcclxuXHRcdFx0XHRcdC8vIGxldCB0aGUgdXNlciBleHRyYWN0IHRoZSBlcnJvcm5lb3VzIHJlZGlyZWN0IFVSTFxyXG5cdFx0XHRcdFx0aWYgKHJlcXVlc3QucmVkaXJlY3QgIT09ICdtYW51YWwnKSB7XHJcblx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgdXJpIHJlcXVlc3RlZCByZXNwb25kcyB3aXRoIGFuIGludmFsaWQgcmVkaXJlY3QgVVJMOiAke2xvY2F0aW9ufWAsICdpbnZhbGlkLXJlZGlyZWN0JykpO1xyXG5cdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBIVFRQIGZldGNoIHN0ZXAgNS41XHJcblx0XHRcdFx0c3dpdGNoIChyZXF1ZXN0LnJlZGlyZWN0KSB7XHJcblx0XHRcdFx0XHRjYXNlICdlcnJvcic6XHJcblx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgdXJpIHJlcXVlc3RlZCByZXNwb25kcyB3aXRoIGEgcmVkaXJlY3QsIHJlZGlyZWN0IG1vZGUgaXMgc2V0IHRvIGVycm9yOiAke3JlcXVlc3QudXJsfWAsICduby1yZWRpcmVjdCcpKTtcclxuXHRcdFx0XHRcdFx0ZmluYWxpemUoKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0Y2FzZSAnbWFudWFsJzpcclxuXHRcdFx0XHRcdFx0Ly8gbm9kZS1mZXRjaC1zcGVjaWZpYyBzdGVwOiBtYWtlIG1hbnVhbCByZWRpcmVjdCBhIGJpdCBlYXNpZXIgdG8gdXNlIGJ5IHNldHRpbmcgdGhlIExvY2F0aW9uIGhlYWRlciB2YWx1ZSB0byB0aGUgcmVzb2x2ZWQgVVJMLlxyXG5cdFx0XHRcdFx0XHRpZiAobG9jYXRpb25VUkwgIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBoYW5kbGUgY29ycnVwdGVkIGhlYWRlclxyXG5cdFx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0XHRoZWFkZXJzLnNldCgnTG9jYXRpb24nLCBsb2NhdGlvblVSTCk7XHJcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogbm9kZWpzIHNlcnZlciBwcmV2ZW50IGludmFsaWQgcmVzcG9uc2UgaGVhZGVycywgd2UgY2FuJ3QgdGVzdCB0aGlzIHRocm91Z2ggbm9ybWFsIHJlcXVlc3RcclxuXHRcdFx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgJ2ZvbGxvdyc6XHJcblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCAyXHJcblx0XHRcdFx0XHRcdGlmIChsb2NhdGlvblVSTCA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgNVxyXG5cdFx0XHRcdFx0XHRpZiAocmVxdWVzdC5jb3VudGVyID49IHJlcXVlc3QuZm9sbG93KSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBtYXhpbXVtIHJlZGlyZWN0IHJlYWNoZWQgYXQ6ICR7cmVxdWVzdC51cmx9YCwgJ21heC1yZWRpcmVjdCcpKTtcclxuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDYgKGNvdW50ZXIgaW5jcmVtZW50KVxyXG5cdFx0XHRcdFx0XHQvLyBDcmVhdGUgYSBuZXcgUmVxdWVzdCBvYmplY3QuXHJcblx0XHRcdFx0XHRcdGNvbnN0IHJlcXVlc3RPcHRzID0ge1xyXG5cdFx0XHRcdFx0XHRcdGhlYWRlcnM6IG5ldyBIZWFkZXJzKHJlcXVlc3QuaGVhZGVycyksXHJcblx0XHRcdFx0XHRcdFx0Zm9sbG93OiByZXF1ZXN0LmZvbGxvdyxcclxuXHRcdFx0XHRcdFx0XHRjb3VudGVyOiByZXF1ZXN0LmNvdW50ZXIgKyAxLFxyXG5cdFx0XHRcdFx0XHRcdGFnZW50OiByZXF1ZXN0LmFnZW50LFxyXG5cdFx0XHRcdFx0XHRcdGNvbXByZXNzOiByZXF1ZXN0LmNvbXByZXNzLFxyXG5cdFx0XHRcdFx0XHRcdG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXHJcblx0XHRcdFx0XHRcdFx0Ym9keTogcmVxdWVzdC5ib2R5LFxyXG5cdFx0XHRcdFx0XHRcdHNpZ25hbDogcmVxdWVzdC5zaWduYWwsXHJcblx0XHRcdFx0XHRcdFx0dGltZW91dDogcmVxdWVzdC50aW1lb3V0LFxyXG5cdFx0XHRcdFx0XHRcdHNpemU6IHJlcXVlc3Quc2l6ZVxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCFpc0RvbWFpbk9yU3ViZG9tYWluKHJlcXVlc3QudXJsLCBsb2NhdGlvblVSTCkgfHwgIWlzU2FtZVByb3RvY29sKHJlcXVlc3QudXJsLCBsb2NhdGlvblVSTCkpIHtcclxuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IG5hbWUgb2YgWydhdXRob3JpemF0aW9uJywgJ3d3dy1hdXRoZW50aWNhdGUnLCAnY29va2llJywgJ2Nvb2tpZTInXSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0cmVxdWVzdE9wdHMuaGVhZGVycy5kZWxldGUobmFtZSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgOVxyXG5cdFx0XHRcdFx0XHRpZiAocmVzLnN0YXR1c0NvZGUgIT09IDMwMyAmJiByZXF1ZXN0LmJvZHkgJiYgZ2V0VG90YWxCeXRlcyhyZXF1ZXN0KSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcignQ2Fubm90IGZvbGxvdyByZWRpcmVjdCB3aXRoIGJvZHkgYmVpbmcgYSByZWFkYWJsZSBzdHJlYW0nLCAndW5zdXBwb3J0ZWQtcmVkaXJlY3QnKSk7XHJcblx0XHRcdFx0XHRcdFx0ZmluYWxpemUoKTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCAxMVxyXG5cdFx0XHRcdFx0XHRpZiAocmVzLnN0YXR1c0NvZGUgPT09IDMwMyB8fCAocmVzLnN0YXR1c0NvZGUgPT09IDMwMSB8fCByZXMuc3RhdHVzQ29kZSA9PT0gMzAyKSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ1BPU1QnKSB7XHJcblx0XHRcdFx0XHRcdFx0cmVxdWVzdE9wdHMubWV0aG9kID0gJ0dFVCc7XHJcblx0XHRcdFx0XHRcdFx0cmVxdWVzdE9wdHMuYm9keSA9IHVuZGVmaW5lZDtcclxuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0T3B0cy5oZWFkZXJzLmRlbGV0ZSgnY29udGVudC1sZW5ndGgnKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDE1XHJcblx0XHRcdFx0XHRcdHJlc29sdmUoZmV0Y2gobmV3IFJlcXVlc3QobG9jYXRpb25VUkwsIHJlcXVlc3RPcHRzKSkpO1xyXG5cdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBwcmVwYXJlIHJlc3BvbnNlXHJcblx0XHRcdHJlcy5vbmNlKCdlbmQnLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0aWYgKHNpZ25hbCkgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRBbmRGaW5hbGl6ZSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRsZXQgYm9keSA9IHJlcy5waXBlKG5ldyBQYXNzVGhyb3VnaCQxKCkpO1xyXG5cclxuXHRcdFx0Y29uc3QgcmVzcG9uc2Vfb3B0aW9ucyA9IHtcclxuXHRcdFx0XHR1cmw6IHJlcXVlc3QudXJsLFxyXG5cdFx0XHRcdHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXHJcblx0XHRcdFx0c3RhdHVzVGV4dDogcmVzLnN0YXR1c01lc3NhZ2UsXHJcblx0XHRcdFx0aGVhZGVyczogaGVhZGVycyxcclxuXHRcdFx0XHRzaXplOiByZXF1ZXN0LnNpemUsXHJcblx0XHRcdFx0dGltZW91dDogcmVxdWVzdC50aW1lb3V0LFxyXG5cdFx0XHRcdGNvdW50ZXI6IHJlcXVlc3QuY291bnRlclxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Ly8gSFRUUC1uZXR3b3JrIGZldGNoIHN0ZXAgMTIuMS4xLjNcclxuXHRcdFx0Y29uc3QgY29kaW5ncyA9IGhlYWRlcnMuZ2V0KCdDb250ZW50LUVuY29kaW5nJyk7XHJcblxyXG5cdFx0XHQvLyBIVFRQLW5ldHdvcmsgZmV0Y2ggc3RlcCAxMi4xLjEuNDogaGFuZGxlIGNvbnRlbnQgY29kaW5nc1xyXG5cclxuXHRcdFx0Ly8gaW4gZm9sbG93aW5nIHNjZW5hcmlvcyB3ZSBpZ25vcmUgY29tcHJlc3Npb24gc3VwcG9ydFxyXG5cdFx0XHQvLyAxLiBjb21wcmVzc2lvbiBzdXBwb3J0IGlzIGRpc2FibGVkXHJcblx0XHRcdC8vIDIuIEhFQUQgcmVxdWVzdFxyXG5cdFx0XHQvLyAzLiBubyBDb250ZW50LUVuY29kaW5nIGhlYWRlclxyXG5cdFx0XHQvLyA0LiBubyBjb250ZW50IHJlc3BvbnNlICgyMDQpXHJcblx0XHRcdC8vIDUuIGNvbnRlbnQgbm90IG1vZGlmaWVkIHJlc3BvbnNlICgzMDQpXHJcblx0XHRcdGlmICghcmVxdWVzdC5jb21wcmVzcyB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnIHx8IGNvZGluZ3MgPT09IG51bGwgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDIwNCB8fCByZXMuc3RhdHVzQ29kZSA9PT0gMzA0KSB7XHJcblx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XHJcblx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBGb3IgTm9kZSB2NitcclxuXHRcdFx0Ly8gQmUgbGVzcyBzdHJpY3Qgd2hlbiBkZWNvZGluZyBjb21wcmVzc2VkIHJlc3BvbnNlcywgc2luY2Ugc29tZXRpbWVzXHJcblx0XHRcdC8vIHNlcnZlcnMgc2VuZCBzbGlnaHRseSBpbnZhbGlkIHJlc3BvbnNlcyB0aGF0IGFyZSBzdGlsbCBhY2NlcHRlZFxyXG5cdFx0XHQvLyBieSBjb21tb24gYnJvd3NlcnMuXHJcblx0XHRcdC8vIEFsd2F5cyB1c2luZyBaX1NZTkNfRkxVU0ggaXMgd2hhdCBjVVJMIGRvZXMuXHJcblx0XHRcdGNvbnN0IHpsaWJPcHRpb25zID0ge1xyXG5cdFx0XHRcdGZsdXNoOiB6bGliLlpfU1lOQ19GTFVTSCxcclxuXHRcdFx0XHRmaW5pc2hGbHVzaDogemxpYi5aX1NZTkNfRkxVU0hcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdC8vIGZvciBnemlwXHJcblx0XHRcdGlmIChjb2RpbmdzID09ICdnemlwJyB8fCBjb2RpbmdzID09ICd4LWd6aXAnKSB7XHJcblx0XHRcdFx0Ym9keSA9IGJvZHkucGlwZSh6bGliLmNyZWF0ZUd1bnppcCh6bGliT3B0aW9ucykpO1xyXG5cdFx0XHRcdHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGJvZHksIHJlc3BvbnNlX29wdGlvbnMpO1xyXG5cdFx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gZm9yIGRlZmxhdGVcclxuXHRcdFx0aWYgKGNvZGluZ3MgPT0gJ2RlZmxhdGUnIHx8IGNvZGluZ3MgPT0gJ3gtZGVmbGF0ZScpIHtcclxuXHRcdFx0XHQvLyBoYW5kbGUgdGhlIGluZmFtb3VzIHJhdyBkZWZsYXRlIHJlc3BvbnNlIGZyb20gb2xkIHNlcnZlcnNcclxuXHRcdFx0XHQvLyBhIGhhY2sgZm9yIG9sZCBJSVMgYW5kIEFwYWNoZSBzZXJ2ZXJzXHJcblx0XHRcdFx0Y29uc3QgcmF3ID0gcmVzLnBpcGUobmV3IFBhc3NUaHJvdWdoJDEoKSk7XHJcblx0XHRcdFx0cmF3Lm9uY2UoJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcclxuXHRcdFx0XHRcdC8vIHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM3NTE5ODI4XHJcblx0XHRcdFx0XHRpZiAoKGNodW5rWzBdICYgMHgwRikgPT09IDB4MDgpIHtcclxuXHRcdFx0XHRcdFx0Ym9keSA9IGJvZHkucGlwZSh6bGliLmNyZWF0ZUluZmxhdGUoKSk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRib2R5ID0gYm9keS5waXBlKHpsaWIuY3JlYXRlSW5mbGF0ZVJhdygpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGJvZHksIHJlc3BvbnNlX29wdGlvbnMpO1xyXG5cdFx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0cmF3Lm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHQvLyBzb21lIG9sZCBJSVMgc2VydmVycyByZXR1cm4gemVyby1sZW5ndGggT0sgZGVmbGF0ZSByZXNwb25zZXMsIHNvICdkYXRhJyBpcyBuZXZlciBlbWl0dGVkLlxyXG5cdFx0XHRcdFx0aWYgKCFyZXNwb25zZSkge1xyXG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcclxuXHRcdFx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBmb3IgYnJcclxuXHRcdFx0aWYgKGNvZGluZ3MgPT0gJ2JyJyAmJiB0eXBlb2YgemxpYi5jcmVhdGVCcm90bGlEZWNvbXByZXNzID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdFx0Ym9keSA9IGJvZHkucGlwZSh6bGliLmNyZWF0ZUJyb3RsaURlY29tcHJlc3MoKSk7XHJcblx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XHJcblx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBvdGhlcndpc2UsIHVzZSByZXNwb25zZSBhcy1pc1xyXG5cdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcclxuXHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHR3cml0ZVRvU3RyZWFtKHJlcSwgcmVxdWVzdCk7XHJcblx0fSk7XHJcbn1cclxuZnVuY3Rpb24gZml4UmVzcG9uc2VDaHVua2VkVHJhbnNmZXJCYWRFbmRpbmcocmVxdWVzdCwgZXJyb3JDYWxsYmFjaykge1xyXG5cdGxldCBzb2NrZXQ7XHJcblxyXG5cdHJlcXVlc3Qub24oJ3NvY2tldCcsIGZ1bmN0aW9uIChzKSB7XHJcblx0XHRzb2NrZXQgPSBzO1xyXG5cdH0pO1xyXG5cclxuXHRyZXF1ZXN0Lm9uKCdyZXNwb25zZScsIGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG5cdFx0Y29uc3QgaGVhZGVycyA9IHJlc3BvbnNlLmhlYWRlcnM7XHJcblxyXG5cdFx0aWYgKGhlYWRlcnNbJ3RyYW5zZmVyLWVuY29kaW5nJ10gPT09ICdjaHVua2VkJyAmJiAhaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSkge1xyXG5cdFx0XHRyZXNwb25zZS5vbmNlKCdjbG9zZScsIGZ1bmN0aW9uIChoYWRFcnJvcikge1xyXG5cdFx0XHRcdC8vIHRlc3RzIGZvciBzb2NrZXQgcHJlc2VuY2UsIGFzIGluIHNvbWUgc2l0dWF0aW9ucyB0aGVcclxuXHRcdFx0XHQvLyB0aGUgJ3NvY2tldCcgZXZlbnQgaXMgbm90IHRyaWdnZXJlZCBmb3IgdGhlIHJlcXVlc3RcclxuXHRcdFx0XHQvLyAoaGFwcGVucyBpbiBkZW5vKSwgYXZvaWRzIGBUeXBlRXJyb3JgXHJcblx0XHRcdFx0Ly8gaWYgYSBkYXRhIGxpc3RlbmVyIGlzIHN0aWxsIHByZXNlbnQgd2UgZGlkbid0IGVuZCBjbGVhbmx5XHJcblx0XHRcdFx0Y29uc3QgaGFzRGF0YUxpc3RlbmVyID0gc29ja2V0ICYmIHNvY2tldC5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwO1xyXG5cclxuXHRcdFx0XHRpZiAoaGFzRGF0YUxpc3RlbmVyICYmICFoYWRFcnJvcikge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyID0gbmV3IEVycm9yKCdQcmVtYXR1cmUgY2xvc2UnKTtcclxuXHRcdFx0XHRcdGVyci5jb2RlID0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJztcclxuXHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soZXJyKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkZXN0cm95U3RyZWFtKHN0cmVhbSwgZXJyKSB7XHJcblx0aWYgKHN0cmVhbS5kZXN0cm95KSB7XHJcblx0XHRzdHJlYW0uZGVzdHJveShlcnIpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHQvLyBub2RlIDwgOFxyXG5cdFx0c3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcclxuXHRcdHN0cmVhbS5lbmQoKTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWRpcmVjdCBjb2RlIG1hdGNoaW5nXHJcbiAqXHJcbiAqIEBwYXJhbSAgIE51bWJlciAgIGNvZGUgIFN0YXR1cyBjb2RlXHJcbiAqIEByZXR1cm4gIEJvb2xlYW5cclxuICovXHJcbmZldGNoLmlzUmVkaXJlY3QgPSBmdW5jdGlvbiAoY29kZSkge1xyXG5cdHJldHVybiBjb2RlID09PSAzMDEgfHwgY29kZSA9PT0gMzAyIHx8IGNvZGUgPT09IDMwMyB8fCBjb2RlID09PSAzMDcgfHwgY29kZSA9PT0gMzA4O1xyXG59O1xyXG5cclxuLy8gZXhwb3NlIFByb21pc2VcclxuZmV0Y2guUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmV0Y2g7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cztcclxuZXhwb3J0cy5IZWFkZXJzID0gSGVhZGVycztcclxuZXhwb3J0cy5SZXF1ZXN0ID0gUmVxdWVzdDtcclxuZXhwb3J0cy5SZXNwb25zZSA9IFJlc3BvbnNlO1xyXG5leHBvcnRzLkZldGNoRXJyb3IgPSBGZXRjaEVycm9yO1xyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/node-fetch/lib/index.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestBuilder.js":
/*!**************************************************************************!*\
!*** ./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestBuilder.js ***!
\**************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n// @ts-ignore\r\nconst node_fetch_1 = __importDefault(__webpack_require__(/*! @supabase/node-fetch */ \"(ssr)/./node_modules/@supabase/node-fetch/lib/index.js\"));\r\nconst PostgrestError_1 = __importDefault(__webpack_require__(/*! ./PostgrestError */ \"(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestError.js\"));\r\nclass PostgrestBuilder {\r\n constructor(builder) {\r\n this.shouldThrowOnError = false;\r\n this.method = builder.method;\r\n this.url = builder.url;\r\n this.headers = builder.headers;\r\n this.schema = builder.schema;\r\n this.body = builder.body;\r\n this.shouldThrowOnError = builder.shouldThrowOnError;\r\n this.signal = builder.signal;\r\n this.isMaybeSingle = builder.isMaybeSingle;\r\n if (builder.fetch) {\r\n this.fetch = builder.fetch;\r\n }\r\n else if (typeof fetch === 'undefined') {\r\n this.fetch = node_fetch_1.default;\r\n }\r\n else {\r\n this.fetch = fetch;\r\n }\r\n }\r\n /**\r\n * If there's an error with the query, throwOnError will reject the promise by\r\n * throwing the error instead of returning it as part of a successful response.\r\n *\r\n * {@link https://github.com/supabase/supabase-js/issues/92}\r\n */\r\n throwOnError() {\r\n this.shouldThrowOnError = true;\r\n return this;\r\n }\r\n /**\r\n * Set an HTTP header for the request.\r\n */\r\n setHeader(name, value) {\r\n this.headers = Object.assign({}, this.headers);\r\n this.headers[name] = value;\r\n return this;\r\n }\r\n then(onfulfilled, onrejected) {\r\n // https://postgrest.org/en/stable/api.html#switching-schemas\r\n if (this.schema === undefined) {\r\n // skip\r\n }\r\n else if (['GET', 'HEAD'].includes(this.method)) {\r\n this.headers['Accept-Profile'] = this.schema;\r\n }\r\n else {\r\n this.headers['Content-Profile'] = this.schema;\r\n }\r\n if (this.method !== 'GET' && this.method !== 'HEAD') {\r\n this.headers['Content-Type'] = 'application/json';\r\n }\r\n // NOTE: Invoke w/o `this` to avoid illegal invocation error.\r\n // https://github.com/supabase/postgrest-js/pull/247\r\n const _fetch = this.fetch;\r\n let res = _fetch(this.url.toString(), {\r\n method: this.method,\r\n headers: this.headers,\r\n body: JSON.stringify(this.body),\r\n signal: this.signal,\r\n }).then(async (res) => {\r\n var _a, _b, _c;\r\n let error = null;\r\n let data = null;\r\n let count = null;\r\n let status = res.status;\r\n let statusText = res.statusText;\r\n if (res.ok) {\r\n if (this.method !== 'HEAD') {\r\n const body = await res.text();\r\n if (body === '') {\r\n // Prefer: return=minimal\r\n }\r\n else if (this.headers['Accept'] === 'text/csv') {\r\n data = body;\r\n }\r\n else if (this.headers['Accept'] &&\r\n this.headers['Accept'].includes('application/vnd.pgrst.plan+text')) {\r\n data = body;\r\n }\r\n else {\r\n data = JSON.parse(body);\r\n }\r\n }\r\n const countHeader = (_a = this.headers['Prefer']) === null || _a === void 0 ? void 0 : _a.match(/count=(exact|planned|estimated)/);\r\n const contentRange = (_b = res.headers.get('content-range')) === null || _b === void 0 ? void 0 : _b.split('/');\r\n if (countHeader && contentRange && contentRange.length > 1) {\r\n count = parseInt(contentRange[1]);\r\n }\r\n // Temporary partial fix for https://github.com/supabase/postgrest-js/issues/361\r\n // Issue persists e.g. for `.insert([...]).select().maybeSingle()`\r\n if (this.isMaybeSingle && this.method === 'GET' && Array.isArray(data)) {\r\n if (data.length > 1) {\r\n error = {\r\n // https://github.com/PostgREST/postgrest/blob/a867d79c42419af16c18c3fb019eba8df992626f/src/PostgREST/Error.hs#L553\r\n code: 'PGRST116',\r\n details: `Results contain ${data.length} rows, application/vnd.pgrst.object+json requires 1 row`,\r\n hint: null,\r\n message: 'JSON object requested, multiple (or no) rows returned',\r\n };\r\n data = null;\r\n count = null;\r\n status = 406;\r\n statusText = 'Not Acceptable';\r\n }\r\n else if (data.length === 1) {\r\n data = data[0];\r\n }\r\n else {\r\n data = null;\r\n }\r\n }\r\n }\r\n else {\r\n const body = await res.text();\r\n try {\r\n error = JSON.parse(body);\r\n // Workaround for https://github.com/supabase/postgrest-js/issues/295\r\n if (Array.isArray(error) && res.status === 404) {\r\n data = [];\r\n error = null;\r\n status = 200;\r\n statusText = 'OK';\r\n }\r\n }\r\n catch (_d) {\r\n // Workaround for https://github.com/supabase/postgrest-js/issues/295\r\n if (res.status === 404 && body === '') {\r\n status = 204;\r\n statusText = 'No Content';\r\n }\r\n else {\r\n error = {\r\n message: body,\r\n };\r\n }\r\n }\r\n if (error && this.isMaybeSingle && ((_c = error === null || error === void 0 ? void 0 : error.details) === null || _c === void 0 ? void 0 : _c.includes('0 rows'))) {\r\n error = null;\r\n status = 200;\r\n statusText = 'OK';\r\n }\r\n if (error && this.shouldThrowOnError) {\r\n throw new PostgrestError_1.default(error);\r\n }\r\n }\r\n const postgrestResponse = {\r\n error,\r\n data,\r\n count,\r\n status,\r\n statusText,\r\n };\r\n return postgrestResponse;\r\n });\r\n if (!this.shouldThrowOnError) {\r\n res = res.catch((fetchError) => {\r\n var _a, _b, _c;\r\n return ({\r\n error: {\r\n message: `${(_a = fetchError === null || fetchError === void 0 ? void 0 : fetchError.name) !== null && _a !== void 0 ? _a : 'FetchError'}: ${fetchError === null || fetchError === void 0 ? void 0 : fetchError.message}`,\r\n details: `${(_b = fetchError === null || fetchError === void 0 ? void 0 : fetchError.stack) !== null && _b !== void 0 ? _b : ''}`,\r\n hint: '',\r\n code: `${(_c = fetchError === null || fetchError === void 0 ? void 0 : fetchError.code) !== null && _c !== void 0 ? _c : ''}`,\r\n },\r\n data: null,\r\n count: null,\r\n status: 0,\r\n statusText: '',\r\n });\r\n });\r\n }\r\n return res.then(onfulfilled, onrejected);\r\n }\r\n /**\r\n * Override the type of the returned `data`.\r\n *\r\n * @typeParam NewResult - The new result type to override with\r\n * @deprecated Use overrideTypes<yourType, { merge: false }>() method at the end of your call chain instead\r\n */\r\n returns() {\r\n /* istanbul ignore next */\r\n return this;\r\n }\r\n /**\r\n * Override the type of the returned `data` field in the response.\r\n *\r\n * @typeParam NewResult - The new type to cast the response data to\r\n * @typeParam Options - Optional type configuration (defaults to { merge: true })\r\n * @typeParam Options.merge - When true, merges the new type with existing return type. When false, replaces the existing types entirely (defaults to true)\r\n * @example\r\n * ```typescript\r\n * // Merge with existing types (default behavior)\r\n * const query = supabase\r\n * .from('users')\r\n * .select()\r\n * .overrideTypes<{ custom_field: string }>()\r\n *\r\n * // Replace existing types completely\r\n * const replaceQuery = supabase\r\n * .from('users')\r\n * .select()\r\n * .overrideTypes<{ id: number; name: string }, { merge: false }>()\r\n * ```\r\n * @returns A PostgrestBuilder instance with the new type\r\n */\r\n overrideTypes() {\r\n return this;\r\n }\r\n}\r\nexports[\"default\"] = PostgrestBuilder;\r\n//# sourceMappingURL=PostgrestBuilder.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Bvc3RncmVzdC1qcy9kaXN0L2Nqcy9Qb3N0Z3Jlc3RCdWlsZGVyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Q7QUFDQSxxQ0FBcUMsbUJBQU8sQ0FBQyxvRkFBc0I7QUFDbkUseUNBQXlDLG1CQUFPLENBQUMsZ0dBQWtCO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELGFBQWE7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsNkhBQTZILElBQUksMkVBQTJFO0FBQ2hQLG9DQUFvQyxvSEFBb0g7QUFDeEo7QUFDQSxpQ0FBaUMsbUhBQW1IO0FBQ3BKLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsY0FBYztBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUUsYUFBYTtBQUNwRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixzQkFBc0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixZQUFZLGNBQWMsSUFBSSxjQUFjO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRqcy8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcG9zdGdyZXN0LWpzL2Rpc3QvY2pzL1Bvc3RncmVzdEJ1aWxkZXIuanM/YWQyYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG4vLyBAdHMtaWdub3JlXHJcbmNvbnN0IG5vZGVfZmV0Y2hfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQHN1cGFiYXNlL25vZGUtZmV0Y2hcIikpO1xyXG5jb25zdCBQb3N0Z3Jlc3RFcnJvcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1Bvc3RncmVzdEVycm9yXCIpKTtcclxuY2xhc3MgUG9zdGdyZXN0QnVpbGRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihidWlsZGVyKSB7XHJcbiAgICAgICAgdGhpcy5zaG91bGRUaHJvd09uRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1ldGhvZCA9IGJ1aWxkZXIubWV0aG9kO1xyXG4gICAgICAgIHRoaXMudXJsID0gYnVpbGRlci51cmw7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gYnVpbGRlci5oZWFkZXJzO1xyXG4gICAgICAgIHRoaXMuc2NoZW1hID0gYnVpbGRlci5zY2hlbWE7XHJcbiAgICAgICAgdGhpcy5ib2R5ID0gYnVpbGRlci5ib2R5O1xyXG4gICAgICAgIHRoaXMuc2hvdWxkVGhyb3dPbkVycm9yID0gYnVpbGRlci5zaG91bGRUaHJvd09uRXJyb3I7XHJcbiAgICAgICAgdGhpcy5zaWduYWwgPSBidWlsZGVyLnNpZ25hbDtcclxuICAgICAgICB0aGlzLmlzTWF5YmVTaW5nbGUgPSBidWlsZGVyLmlzTWF5YmVTaW5nbGU7XHJcbiAgICAgICAgaWYgKGJ1aWxkZXIuZmV0Y2gpIHtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaCA9IGJ1aWxkZXIuZmV0Y2g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBmZXRjaCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaCA9IG5vZGVfZmV0Y2hfMS5kZWZhdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaCA9IGZldGNoO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhlcmUncyBhbiBlcnJvciB3aXRoIHRoZSBxdWVyeSwgdGhyb3dPbkVycm9yIHdpbGwgcmVqZWN0IHRoZSBwcm9taXNlIGJ5XHJcbiAgICAgKiB0aHJvd2luZyB0aGUgZXJyb3IgaW5zdGVhZCBvZiByZXR1cm5pbmcgaXQgYXMgcGFydCBvZiBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UuXHJcbiAgICAgKlxyXG4gICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBhYmFzZS9zdXBhYmFzZS1qcy9pc3N1ZXMvOTJ9XHJcbiAgICAgKi9cclxuICAgIHRocm93T25FcnJvcigpIHtcclxuICAgICAgICB0aGlzLnNob3VsZFRocm93T25FcnJvciA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNldCBhbiBIVFRQIGhlYWRlciBmb3IgdGhlIHJlcXVlc3QuXHJcbiAgICAgKi9cclxuICAgIHNldEhlYWRlcihuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuaGVhZGVycyk7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB0aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKSB7XHJcbiAgICAgICAgLy8gaHR0cHM6Ly9wb3N0Z3Jlc3Qub3JnL2VuL3N0YWJsZS9hcGkuaHRtbCNzd2l0Y2hpbmctc2NoZW1hc1xyXG4gICAgICAgIGlmICh0aGlzLnNjaGVtYSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIC8vIHNraXBcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoWydHRVQnLCAnSEVBRCddLmluY2x1ZGVzKHRoaXMubWV0aG9kKSkge1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRlcnNbJ0FjY2VwdC1Qcm9maWxlJ10gPSB0aGlzLnNjaGVtYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyc1snQ29udGVudC1Qcm9maWxlJ10gPSB0aGlzLnNjaGVtYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWV0aG9kICE9PSAnR0VUJyAmJiB0aGlzLm1ldGhvZCAhPT0gJ0hFQUQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE5PVEU6IEludm9rZSB3L28gYHRoaXNgIHRvIGF2b2lkIGlsbGVnYWwgaW52b2NhdGlvbiBlcnJvci5cclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3VwYWJhc2UvcG9zdGdyZXN0LWpzL3B1bGwvMjQ3XHJcbiAgICAgICAgY29uc3QgX2ZldGNoID0gdGhpcy5mZXRjaDtcclxuICAgICAgICBsZXQgcmVzID0gX2ZldGNoKHRoaXMudXJsLnRvU3RyaW5nKCksIHtcclxuICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcclxuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkpLFxyXG4gICAgICAgICAgICBzaWduYWw6IHRoaXMuc2lnbmFsLFxyXG4gICAgICAgIH0pLnRoZW4oYXN5bmMgKHJlcykgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgY291bnQgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgc3RhdHVzID0gcmVzLnN0YXR1cztcclxuICAgICAgICAgICAgbGV0IHN0YXR1c1RleHQgPSByZXMuc3RhdHVzVGV4dDtcclxuICAgICAgICAgICAgaWYgKHJlcy5vaykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWV0aG9kICE9PSAnSEVBRCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVzLnRleHQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYm9keSA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZmVyOiByZXR1cm49bWluaW1hbFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmhlYWRlcnNbJ0FjY2VwdCddID09PSAndGV4dC9jc3YnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmhlYWRlcnNbJ0FjY2VwdCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyc1snQWNjZXB0J10uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL3ZuZC5wZ3JzdC5wbGFuK3RleHQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50SGVhZGVyID0gKF9hID0gdGhpcy5oZWFkZXJzWydQcmVmZXInXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hdGNoKC9jb3VudD0oZXhhY3R8cGxhbm5lZHxlc3RpbWF0ZWQpLyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50UmFuZ2UgPSAoX2IgPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtcmFuZ2UnKSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnRIZWFkZXIgJiYgY29udGVudFJhbmdlICYmIGNvbnRlbnRSYW5nZS5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSBwYXJzZUludChjb250ZW50UmFuZ2VbMV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gVGVtcG9yYXJ5IHBhcnRpYWwgZml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vc3VwYWJhc2UvcG9zdGdyZXN0LWpzL2lzc3Vlcy8zNjFcclxuICAgICAgICAgICAgICAgIC8vIElzc3VlIHBlcnNpc3RzIGUuZy4gZm9yIGAuaW5zZXJ0KFsuLi5dKS5zZWxlY3QoKS5tYXliZVNpbmdsZSgpYFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNYXliZVNpbmdsZSAmJiB0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgJiYgQXJyYXkuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vUG9zdGdSRVNUL3Bvc3RncmVzdC9ibG9iL2E4NjdkNzljNDI0MTlhZjE2YzE4YzNmYjAxOWViYThkZjk5MjYyNmYvc3JjL1Bvc3RnUkVTVC9FcnJvci5ocyNMNTUzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUEdSU1QxMTYnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogYFJlc3VsdHMgY29udGFpbiAke2RhdGEubGVuZ3RofSByb3dzLCBhcHBsaWNhdGlvbi92bmQucGdyc3Qub2JqZWN0K2pzb24gcmVxdWlyZXMgMSByb3dgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdKU09OIG9iamVjdCByZXF1ZXN0ZWQsIG11bHRpcGxlIChvciBubykgcm93cyByZXR1cm5lZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDQwNjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICdOb3QgQWNjZXB0YWJsZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IHJlcy50ZXh0KCk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gSlNPTi5wYXJzZShib2R5KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vc3VwYWJhc2UvcG9zdGdyZXN0LWpzL2lzc3Vlcy8yOTVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlcnJvcikgJiYgcmVzLnN0YXR1cyA9PT0gNDA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAyMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSAnT0snO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChfZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBhYmFzZS9wb3N0Z3Jlc3QtanMvaXNzdWVzLzI5NVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDQgJiYgYm9keSA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMjA0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gJ05vIENvbnRlbnQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBib2R5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChlcnJvciAmJiB0aGlzLmlzTWF5YmVTaW5nbGUgJiYgKChfYyA9IGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5kZXRhaWxzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaW5jbHVkZXMoJzAgcm93cycpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAyMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICdPSyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgJiYgdGhpcy5zaG91bGRUaHJvd09uRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUG9zdGdyZXN0RXJyb3JfMS5kZWZhdWx0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwb3N0Z3Jlc3RSZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICAgIGNvdW50LFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzVGV4dCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHBvc3RncmVzdFJlc3BvbnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghdGhpcy5zaG91bGRUaHJvd09uRXJyb3IpIHtcclxuICAgICAgICAgICAgcmVzID0gcmVzLmNhdGNoKChmZXRjaEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgICAgIHJldHVybiAoe1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGAkeyhfYSA9IGZldGNoRXJyb3IgPT09IG51bGwgfHwgZmV0Y2hFcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmV0Y2hFcnJvci5uYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnRmV0Y2hFcnJvcid9OiAke2ZldGNoRXJyb3IgPT09IG51bGwgfHwgZmV0Y2hFcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmV0Y2hFcnJvci5tZXNzYWdlfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IGAkeyhfYiA9IGZldGNoRXJyb3IgPT09IG51bGwgfHwgZmV0Y2hFcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmV0Y2hFcnJvci5zdGFjaykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyd9YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGludDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGAkeyhfYyA9IGZldGNoRXJyb3IgPT09IG51bGwgfHwgZmV0Y2hFcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmV0Y2hFcnJvci5jb2RlKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAnJ31gLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBjb3VudDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dDogJycsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXMudGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE92ZXJyaWRlIHRoZSB0eXBlIG9mIHRoZSByZXR1cm5lZCBgZGF0YWAuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGVQYXJhbSBOZXdSZXN1bHQgLSBUaGUgbmV3IHJlc3VsdCB0eXBlIHRvIG92ZXJyaWRlIHdpdGhcclxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBvdmVycmlkZVR5cGVzPHlvdXJUeXBlLCB7IG1lcmdlOiBmYWxzZSB9PigpIG1ldGhvZCBhdCB0aGUgZW5kIG9mIHlvdXIgY2FsbCBjaGFpbiBpbnN0ZWFkXHJcbiAgICAgKi9cclxuICAgIHJldHVybnMoKSB7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogT3ZlcnJpZGUgdGhlIHR5cGUgb2YgdGhlIHJldHVybmVkIGBkYXRhYCBmaWVsZCBpbiB0aGUgcmVzcG9uc2UuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGVQYXJhbSBOZXdSZXN1bHQgLSBUaGUgbmV3IHR5cGUgdG8gY2FzdCB0aGUgcmVzcG9uc2UgZGF0YSB0b1xyXG4gICAgICogQHR5cGVQYXJhbSBPcHRpb25zIC0gT3B0aW9uYWwgdHlwZSBjb25maWd1cmF0aW9uIChkZWZhdWx0cyB0byB7IG1lcmdlOiB0cnVlIH0pXHJcbiAgICAgKiBAdHlwZVBhcmFtIE9wdGlvbnMubWVyZ2UgLSBXaGVuIHRydWUsIG1lcmdlcyB0aGUgbmV3IHR5cGUgd2l0aCBleGlzdGluZyByZXR1cm4gdHlwZS4gV2hlbiBmYWxzZSwgcmVwbGFjZXMgdGhlIGV4aXN0aW5nIHR5cGVzIGVudGlyZWx5IChkZWZhdWx0cyB0byB0cnVlKVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIC8vIE1lcmdlIHdpdGggZXhpc3RpbmcgdHlwZXMgKGRlZmF1bHQgYmVoYXZpb3IpXHJcbiAgICAgKiBjb25zdCBxdWVyeSA9IHN1cGFiYXNlXHJcbiAgICAgKiAgIC5mcm9tKCd1c2VycycpXHJcbiAgICAgKiAgIC5zZWxlY3QoKVxyXG4gICAgICogICAub3ZlcnJpZGVUeXBlczx7IGN1c3RvbV9maWVsZDogc3RyaW5nIH0+KClcclxuICAgICAqXHJcbiAgICAgKiAvLyBSZXBsYWNlIGV4aXN0aW5nIHR5cGVzIGNvbXBsZXRlbHlcclxuICAgICAqIGNvbnN0IHJlcGxhY2VRdWVyeSA9IHN1cGFiYXNlXHJcbiAgICAgKiAgIC5mcm9tKCd1c2VycycpXHJcbiAgICAgKiAgIC5zZWxlY3QoKVxyXG4gICAgICogICAub3ZlcnJpZGVUeXBlczx7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9LCB7IG1lcmdlOiBmYWxzZSB9PigpXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEByZXR1cm5zIEEgUG9zdGdyZXN0QnVpbGRlciBpbnN0YW5jZSB3aXRoIHRoZSBuZXcgdHlwZVxyXG4gICAgICovXHJcbiAgICBvdmVycmlkZVR5cGVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IFBvc3RncmVzdEJ1aWxkZXI7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBvc3RncmVzdEJ1aWxkZXIuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestBuilder.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestClient.js":
/*!*************************************************************************!*\
!*** ./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestClient.js ***!
\*************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst PostgrestQueryBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestQueryBuilder */ \"(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestQueryBuilder.js\"));\r\nconst PostgrestFilterBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestFilterBuilder */ \"(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestFilterBuilder.js\"));\r\nconst constants_1 = __webpack_require__(/*! ./constants */ \"(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/constants.js\");\r\n/**\r\n * PostgREST client.\r\n *\r\n * @typeParam Database - Types for the schema from the [type\r\n * generator](https://supabase.com/docs/reference/javascript/next/typescript-support)\r\n *\r\n * @typeParam SchemaName - Postgres schema to switch to. Must be a string\r\n * literal, the same one passed to the constructor. If the schema is not\r\n * `\"public\"`, this must be supplied manually.\r\n */\r\nclass PostgrestClient {\r\n // TODO: Add back shouldThrowOnError once we figure out the typings\r\n /**\r\n * Creates a PostgREST client.\r\n *\r\n * @param url - URL of the PostgREST endpoint\r\n * @param options - Named parameters\r\n * @param options.headers - Custom headers\r\n * @param options.schema - Postgres schema to switch to\r\n * @param options.fetch - Custom fetch\r\n */\r\n constructor(url, { headers = {}, schema, fetch, } = {}) {\r\n this.url = url;\r\n this.headers = Object.assign(Object.assign({}, constants_1.DEFAULT_HEADERS), headers);\r\n this.schemaName = schema;\r\n this.fetch = fetch;\r\n }\r\n /**\r\n * Perform a query on a table or a view.\r\n *\r\n * @param relation - The table or view name to query\r\n */\r\n from(relation) {\r\n const url = new URL(`${this.url}/${relation}`);\r\n return new PostgrestQueryBuilder_1.default(url, {\r\n headers: Object.assign({}, this.headers),\r\n schema: this.schemaName,\r\n fetch: this.fetch,\r\n });\r\n }\r\n /**\r\n * Select a schema to query or perform an function (rpc) call.\r\n *\r\n * The schema needs to be on the list of exposed schemas inside Supabase.\r\n *\r\n * @param schema - The schema to query\r\n */\r\n schema(schema) {\r\n return new PostgrestClient(this.url, {\r\n headers: this.headers,\r\n schema,\r\n fetch: this.fetch,\r\n });\r\n }\r\n /**\r\n * Perform a function call.\r\n *\r\n * @param fn - The function name to call\r\n * @param args - The arguments to pass to the function call\r\n * @param options - Named parameters\r\n * @param options.head - When set to `true`, `data` will not be returned.\r\n * Useful if you only need the count.\r\n * @param options.get - When set to `true`, the function will be called with\r\n * read-only access mode.\r\n * @param options.count - Count algorithm to use to count rows returned by the\r\n * function. Only applicable for [set-returning\r\n * functions](https://www.postgresql.org/docs/current/functions-srf.html).\r\n *\r\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\r\n * hood.\r\n *\r\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\r\n * statistics under the hood.\r\n *\r\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\r\n * numbers.\r\n */\r\n rpc(fn, args = {}, { head = false, get = false, count, } = {}) {\r\n let method;\r\n const url = new URL(`${this.url}/rpc/${fn}`);\r\n let body;\r\n if (head || get) {\r\n method = head ? 'HEAD' : 'GET';\r\n Object.entries(args)\r\n // params with undefined value needs to be filtered out, otherwise it'll\r\n // show up as `?param=undefined`\r\n .filter(([_, value]) => value !== undefined)\r\n // array values need special syntax\r\n .map(([name, value]) => [name, Array.isArray(value) ? `{${value.join(',')}}` : `${value}`])\r\n .forEach(([name, value]) => {\r\n url.searchParams.append(name, value);\r\n });\r\n }\r\n else {\r\n method = 'POST';\r\n body = args;\r\n }\r\n const headers = Object.assign({}, this.headers);\r\n if (count) {\r\n headers['Prefer'] = `count=${count}`;\r\n }\r\n return new PostgrestFilterBuilder_1.default({\r\n method,\r\n url,\r\n headers,\r\n schema: this.schemaName,\r\n body,\r\n fetch: this.fetch,\r\n allowEmpty: false,\r\n });\r\n }\r\n}\r\nexports[\"default\"] = PostgrestClient;\r\n//# sourceMappingURL=PostgrestClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Bvc3RncmVzdC1qcy9kaXN0L2Nqcy9Qb3N0Z3Jlc3RDbGllbnQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLDZDQUE2QztBQUM3QztBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxnREFBZ0QsbUJBQU8sQ0FBQyw4R0FBeUI7QUFDakYsaURBQWlELG1CQUFPLENBQUMsZ0hBQTBCO0FBQ25GLG9CQUFvQixtQkFBTyxDQUFDLHNGQUFhO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixZQUFZLG1CQUFtQixJQUFJO0FBQzFEO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixTQUFTLEdBQUcsU0FBUztBQUNwRDtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixJQUFJLG9DQUFvQyxJQUFJO0FBQ2pFO0FBQ0EsK0JBQStCLFNBQVMsT0FBTyxHQUFHO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RUFBd0UsRUFBRSxpQkFBaUIsT0FBTyxNQUFNO0FBQ3hHO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBLHlDQUF5QyxNQUFNO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRqcy8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcG9zdGdyZXN0LWpzL2Rpc3QvY2pzL1Bvc3RncmVzdENsaWVudC5qcz9jMTQwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmNvbnN0IFBvc3RncmVzdFF1ZXJ5QnVpbGRlcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1Bvc3RncmVzdFF1ZXJ5QnVpbGRlclwiKSk7XHJcbmNvbnN0IFBvc3RncmVzdEZpbHRlckJ1aWxkZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9Qb3N0Z3Jlc3RGaWx0ZXJCdWlsZGVyXCIpKTtcclxuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XHJcbi8qKlxyXG4gKiBQb3N0Z1JFU1QgY2xpZW50LlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIERhdGFiYXNlIC0gVHlwZXMgZm9yIHRoZSBzY2hlbWEgZnJvbSB0aGUgW3R5cGVcclxuICogZ2VuZXJhdG9yXShodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L25leHQvdHlwZXNjcmlwdC1zdXBwb3J0KVxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFNjaGVtYU5hbWUgLSBQb3N0Z3JlcyBzY2hlbWEgdG8gc3dpdGNoIHRvLiBNdXN0IGJlIGEgc3RyaW5nXHJcbiAqIGxpdGVyYWwsIHRoZSBzYW1lIG9uZSBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLiBJZiB0aGUgc2NoZW1hIGlzIG5vdFxyXG4gKiBgXCJwdWJsaWNcImAsIHRoaXMgbXVzdCBiZSBzdXBwbGllZCBtYW51YWxseS5cclxuICovXHJcbmNsYXNzIFBvc3RncmVzdENsaWVudCB7XHJcbiAgICAvLyBUT0RPOiBBZGQgYmFjayBzaG91bGRUaHJvd09uRXJyb3Igb25jZSB3ZSBmaWd1cmUgb3V0IHRoZSB0eXBpbmdzXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBQb3N0Z1JFU1QgY2xpZW50LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB1cmwgLSBVUkwgb2YgdGhlIFBvc3RnUkVTVCBlbmRwb2ludFxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBOYW1lZCBwYXJhbWV0ZXJzXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5oZWFkZXJzIC0gQ3VzdG9tIGhlYWRlcnNcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLnNjaGVtYSAtIFBvc3RncmVzIHNjaGVtYSB0byBzd2l0Y2ggdG9cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmZldGNoIC0gQ3VzdG9tIGZldGNoXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHVybCwgeyBoZWFkZXJzID0ge30sIHNjaGVtYSwgZmV0Y2gsIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgICAgIHRoaXMuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29uc3RhbnRzXzEuREVGQVVMVF9IRUFERVJTKSwgaGVhZGVycyk7XHJcbiAgICAgICAgdGhpcy5zY2hlbWFOYW1lID0gc2NoZW1hO1xyXG4gICAgICAgIHRoaXMuZmV0Y2ggPSBmZXRjaDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybSBhIHF1ZXJ5IG9uIGEgdGFibGUgb3IgYSB2aWV3LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSByZWxhdGlvbiAtIFRoZSB0YWJsZSBvciB2aWV3IG5hbWUgdG8gcXVlcnlcclxuICAgICAqL1xyXG4gICAgZnJvbShyZWxhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7dGhpcy51cmx9LyR7cmVsYXRpb259YCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQb3N0Z3Jlc3RRdWVyeUJ1aWxkZXJfMS5kZWZhdWx0KHVybCwge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmhlYWRlcnMpLFxyXG4gICAgICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hTmFtZSxcclxuICAgICAgICAgICAgZmV0Y2g6IHRoaXMuZmV0Y2gsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdCBhIHNjaGVtYSB0byBxdWVyeSBvciBwZXJmb3JtIGFuIGZ1bmN0aW9uIChycGMpIGNhbGwuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHNjaGVtYSBuZWVkcyB0byBiZSBvbiB0aGUgbGlzdCBvZiBleHBvc2VkIHNjaGVtYXMgaW5zaWRlIFN1cGFiYXNlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzY2hlbWEgLSBUaGUgc2NoZW1hIHRvIHF1ZXJ5XHJcbiAgICAgKi9cclxuICAgIHNjaGVtYShzY2hlbWEpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFBvc3RncmVzdENsaWVudCh0aGlzLnVybCwge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgIHNjaGVtYSxcclxuICAgICAgICAgICAgZmV0Y2g6IHRoaXMuZmV0Y2gsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm0gYSBmdW5jdGlvbiBjYWxsLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiBuYW1lIHRvIGNhbGxcclxuICAgICAqIEBwYXJhbSBhcmdzIC0gVGhlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbiBjYWxsXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE5hbWVkIHBhcmFtZXRlcnNcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmhlYWQgLSBXaGVuIHNldCB0byBgdHJ1ZWAsIGBkYXRhYCB3aWxsIG5vdCBiZSByZXR1cm5lZC5cclxuICAgICAqIFVzZWZ1bCBpZiB5b3Ugb25seSBuZWVkIHRoZSBjb3VudC5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmdldCAtIFdoZW4gc2V0IHRvIGB0cnVlYCwgdGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGhcclxuICAgICAqIHJlYWQtb25seSBhY2Nlc3MgbW9kZS5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmNvdW50IC0gQ291bnQgYWxnb3JpdGhtIHRvIHVzZSB0byBjb3VudCByb3dzIHJldHVybmVkIGJ5IHRoZVxyXG4gICAgICogZnVuY3Rpb24uIE9ubHkgYXBwbGljYWJsZSBmb3IgW3NldC1yZXR1cm5pbmdcclxuICAgICAqIGZ1bmN0aW9uc10oaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L2Z1bmN0aW9ucy1zcmYuaHRtbCkuXHJcbiAgICAgKlxyXG4gICAgICogYFwiZXhhY3RcImA6IEV4YWN0IGJ1dCBzbG93IGNvdW50IGFsZ29yaXRobS4gUGVyZm9ybXMgYSBgQ09VTlQoKilgIHVuZGVyIHRoZVxyXG4gICAgICogaG9vZC5cclxuICAgICAqXHJcbiAgICAgKiBgXCJwbGFubmVkXCJgOiBBcHByb3hpbWF0ZWQgYnV0IGZhc3QgY291bnQgYWxnb3JpdGhtLiBVc2VzIHRoZSBQb3N0Z3Jlc1xyXG4gICAgICogc3RhdGlzdGljcyB1bmRlciB0aGUgaG9vZC5cclxuICAgICAqXHJcbiAgICAgKiBgXCJlc3RpbWF0ZWRcImA6IFVzZXMgZXhhY3QgY291bnQgZm9yIGxvdyBudW1iZXJzIGFuZCBwbGFubmVkIGNvdW50IGZvciBoaWdoXHJcbiAgICAgKiBudW1iZXJzLlxyXG4gICAgICovXHJcbiAgICBycGMoZm4sIGFyZ3MgPSB7fSwgeyBoZWFkID0gZmFsc2UsIGdldCA9IGZhbHNlLCBjb3VudCwgfSA9IHt9KSB7XHJcbiAgICAgICAgbGV0IG1ldGhvZDtcclxuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke3RoaXMudXJsfS9ycGMvJHtmbn1gKTtcclxuICAgICAgICBsZXQgYm9keTtcclxuICAgICAgICBpZiAoaGVhZCB8fCBnZXQpIHtcclxuICAgICAgICAgICAgbWV0aG9kID0gaGVhZCA/ICdIRUFEJyA6ICdHRVQnO1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhhcmdzKVxyXG4gICAgICAgICAgICAgICAgLy8gcGFyYW1zIHdpdGggdW5kZWZpbmVkIHZhbHVlIG5lZWRzIHRvIGJlIGZpbHRlcmVkIG91dCwgb3RoZXJ3aXNlIGl0J2xsXHJcbiAgICAgICAgICAgICAgICAvLyBzaG93IHVwIGFzIGA/cGFyYW09dW5kZWZpbmVkYFxyXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgIC8vIGFycmF5IHZhbHVlcyBuZWVkIHNwZWNpYWwgc3ludGF4XHJcbiAgICAgICAgICAgICAgICAubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBbbmFtZSwgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBgeyR7dmFsdWUuam9pbignLCcpfX1gIDogYCR7dmFsdWV9YF0pXHJcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoW25hbWUsIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQobmFtZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1ldGhvZCA9ICdQT1NUJztcclxuICAgICAgICAgICAgYm9keSA9IGFyZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmhlYWRlcnMpO1xyXG4gICAgICAgIGlmIChjb3VudCkge1xyXG4gICAgICAgICAgICBoZWFkZXJzWydQcmVmZXInXSA9IGBjb3VudD0ke2NvdW50fWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUG9zdGdyZXN0RmlsdGVyQnVpbGRlcl8xLmRlZmF1bHQoe1xyXG4gICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgIHVybCxcclxuICAgICAgICAgICAgaGVhZGVycyxcclxuICAgICAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYU5hbWUsXHJcbiAgICAgICAgICAgIGJvZHksXHJcbiAgICAgICAgICAgIGZldGNoOiB0aGlzLmZldGNoLFxyXG4gICAgICAgICAgICBhbGxvd0VtcHR5OiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSBQb3N0Z3Jlc3RDbGllbnQ7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBvc3RncmVzdENsaWVudC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestClient.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestError.js":
/*!************************************************************************!*\
!*** ./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestError.js ***!
\************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n/**\r\n * Error format\r\n *\r\n * {@link https://postgrest.org/en/stable/api.html?highlight=options#errors-and-http-status-codes}\r\n */\r\nclass PostgrestError extends Error {\r\n constructor(context) {\r\n super(context.message);\r\n this.name = 'PostgrestError';\r\n this.details = context.details;\r\n this.hint = context.hint;\r\n this.code = context.code;\r\n }\r\n}\r\nexports[\"default\"] = PostgrestError;\r\n//# sourceMappingURL=PostgrestError.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Bvc3RncmVzdC1qcy9kaXN0L2Nqcy9Qb3N0Z3Jlc3RFcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9wb3N0Z3Jlc3QtanMvZGlzdC9janMvUG9zdGdyZXN0RXJyb3IuanM/ZjhlYSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG4vKipcclxuICogRXJyb3IgZm9ybWF0XHJcbiAqXHJcbiAqIHtAbGluayBodHRwczovL3Bvc3RncmVzdC5vcmcvZW4vc3RhYmxlL2FwaS5odG1sP2hpZ2hsaWdodD1vcHRpb25zI2Vycm9ycy1hbmQtaHR0cC1zdGF0dXMtY29kZXN9XHJcbiAqL1xyXG5jbGFzcyBQb3N0Z3Jlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQpIHtcclxuICAgICAgICBzdXBlcihjb250ZXh0Lm1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICdQb3N0Z3Jlc3RFcnJvcic7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gY29udGV4dC5kZXRhaWxzO1xyXG4gICAgICAgIHRoaXMuaGludCA9IGNvbnRleHQuaGludDtcclxuICAgICAgICB0aGlzLmNvZGUgPSBjb250ZXh0LmNvZGU7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0gUG9zdGdyZXN0RXJyb3I7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBvc3RncmVzdEVycm9yLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestError.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestFilterBuilder.js":
/*!********************************************************************************!*\
!*** ./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestFilterBuilder.js ***!
\********************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst PostgrestTransformBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestTransformBuilder */ \"(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestTransformBuilder.js\"));\r\nclass PostgrestFilterBuilder extends PostgrestTransformBuilder_1.default {\r\n /**\r\n * Match only rows where `column` is equal to `value`.\r\n *\r\n * To check if the value of `column` is NULL, you should use `.is()` instead.\r\n *\r\n * @param column - The column to filter on\r\n * @param value - The value to filter with\r\n */\r\n eq(column, value) {\r\n this.url.searchParams.append(column, `eq.${value}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` is not equal to `value`.\r\n *\r\n * @param column - The column to filter on\r\n * @param value - The value to filter with\r\n */\r\n neq(column, value) {\r\n this.url.searchParams.append(column, `neq.${value}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` is greater than `value`.\r\n *\r\n * @param column - The column to filter on\r\n * @param value - The value to filter with\r\n */\r\n gt(column, value) {\r\n this.url.searchParams.append(column, `gt.${value}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` is greater than or equal to `value`.\r\n *\r\n * @param column - The column to filter on\r\n * @param value - The value to filter with\r\n */\r\n gte(column, value) {\r\n this.url.searchParams.append(column, `gte.${value}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` is less than `value`.\r\n *\r\n * @param column - The column to filter on\r\n * @param value - The value to filter with\r\n */\r\n lt(column, value) {\r\n this.url.searchParams.append(column, `lt.${value}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` is less than or equal to `value`.\r\n *\r\n * @param column - The column to filter on\r\n * @param value - The value to filter with\r\n */\r\n lte(column, value) {\r\n this.url.searchParams.append(column, `lte.${value}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` matches `pattern` case-sensitively.\r\n *\r\n * @param column - The column to filter on\r\n * @param pattern - The pattern to match with\r\n */\r\n like(column, pattern) {\r\n this.url.searchParams.append(column, `like.${pattern}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` matches all of `patterns` case-sensitively.\r\n *\r\n * @param column - The column to filter on\r\n * @param patterns - The patterns to match with\r\n */\r\n likeAllOf(column, patterns) {\r\n this.url.searchParams.append(column, `like(all).{${patterns.join(',')}}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` matches any of `patterns` case-sensitively.\r\n *\r\n * @param column - The column to filter on\r\n * @param patterns - The patterns to match with\r\n */\r\n likeAnyOf(column, patterns) {\r\n this.url.searchParams.append(column, `like(any).{${patterns.join(',')}}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` matches `pattern` case-insensitively.\r\n *\r\n * @param column - The column to filter on\r\n * @param pattern - The pattern to match with\r\n */\r\n ilike(column, pattern) {\r\n this.url.searchParams.append(column, `ilike.${pattern}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` matches all of `patterns` case-insensitively.\r\n *\r\n * @param column - The column to filter on\r\n * @param patterns - The patterns to match with\r\n */\r\n ilikeAllOf(column, patterns) {\r\n this.url.searchParams.append(column, `ilike(all).{${patterns.join(',')}}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` matches any of `patterns` case-insensitively.\r\n *\r\n * @param column - The column to filter on\r\n * @param patterns - The patterns to match with\r\n */\r\n ilikeAnyOf(column, patterns) {\r\n this.url.searchParams.append(column, `ilike(any).{${patterns.join(',')}}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` IS `value`.\r\n *\r\n * For non-boolean columns, this is only relevant for checking if the value of\r\n * `column` is NULL by setting `value` to `null`.\r\n *\r\n * For boolean columns, you can also set `value` to `true` or `false` and it\r\n * will behave the same way as `.eq()`.\r\n *\r\n * @param column - The column to filter on\r\n * @param value - The value to filter with\r\n */\r\n is(column, value) {\r\n this.url.searchParams.append(column, `is.${value}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` is included in the `values` array.\r\n *\r\n * @param column - The column to filter on\r\n * @param values - The values array to filter with\r\n */\r\n in(column, values) {\r\n const cleanedValues = Array.from(new Set(values))\r\n .map((s) => {\r\n // handle postgrest reserved characters\r\n // https://postgrest.org/en/v7.0.0/api.html#reserved-characters\r\n if (typeof s === 'string' && new RegExp('[,()]').test(s))\r\n return `\"${s}\"`;\r\n else\r\n return `${s}`;\r\n })\r\n .join(',');\r\n this.url.searchParams.append(column, `in.(${cleanedValues})`);\r\n return this;\r\n }\r\n /**\r\n * Only relevant for jsonb, array, and range columns. Match only rows where\r\n * `column` contains every element appearing in `value`.\r\n *\r\n * @param column - The jsonb, array, or range column to filter on\r\n * @param value - The jsonb, array, or range value to filter with\r\n */\r\n contains(column, value) {\r\n if (typeof value === 'string') {\r\n // range types can be inclusive '[', ']' or exclusive '(', ')' so just\r\n // keep it simple and accept a string\r\n this.url.searchParams.append(column, `cs.${value}`);\r\n }\r\n else if (Array.isArray(value)) {\r\n // array\r\n this.url.searchParams.append(column, `cs.{${value.join(',')}}`);\r\n }\r\n else {\r\n // json\r\n this.url.searchParams.append(column, `cs.${JSON.stringify(value)}`);\r\n }\r\n return this;\r\n }\r\n /**\r\n * Only relevant for jsonb, array, and range columns. Match only rows where\r\n * every element appearing in `column` is contained by `value`.\r\n *\r\n * @param column - The jsonb, array, or range column to filter on\r\n * @param value - The jsonb, array, or range value to filter with\r\n */\r\n containedBy(column, value) {\r\n if (typeof value === 'string') {\r\n // range\r\n this.url.searchParams.append(column, `cd.${value}`);\r\n }\r\n else if (Array.isArray(value)) {\r\n // array\r\n this.url.searchParams.append(column, `cd.{${value.join(',')}}`);\r\n }\r\n else {\r\n // json\r\n this.url.searchParams.append(column, `cd.${JSON.stringify(value)}`);\r\n }\r\n return this;\r\n }\r\n /**\r\n * Only relevant for range columns. Match only rows where every element in\r\n * `column` is greater than any element in `range`.\r\n *\r\n * @param column - The range column to filter on\r\n * @param range - The range to filter with\r\n */\r\n rangeGt(column, range) {\r\n this.url.searchParams.append(column, `sr.${range}`);\r\n return this;\r\n }\r\n /**\r\n * Only relevant for range columns. Match only rows where every element in\r\n * `column` is either contained in `range` or greater than any element in\r\n * `range`.\r\n *\r\n * @param column - The range column to filter on\r\n * @param range - The range to filter with\r\n */\r\n rangeGte(column, range) {\r\n this.url.searchParams.append(column, `nxl.${range}`);\r\n return this;\r\n }\r\n /**\r\n * Only relevant for range columns. Match only rows where every element in\r\n * `column` is less than any element in `range`.\r\n *\r\n * @param column - The range column to filter on\r\n * @param range - The range to filter with\r\n */\r\n rangeLt(column, range) {\r\n this.url.searchParams.append(column, `sl.${range}`);\r\n return this;\r\n }\r\n /**\r\n * Only relevant for range columns. Match only rows where every element in\r\n * `column` is either contained in `range` or less than any element in\r\n * `range`.\r\n *\r\n * @param column - The range column to filter on\r\n * @param range - The range to filter with\r\n */\r\n rangeLte(column, range) {\r\n this.url.searchParams.append(column, `nxr.${range}`);\r\n return this;\r\n }\r\n /**\r\n * Only relevant for range columns. Match only rows where `column` is\r\n * mutually exclusive to `range` and there can be no element between the two\r\n * ranges.\r\n *\r\n * @param column - The range column to filter on\r\n * @param range - The range to filter with\r\n */\r\n rangeAdjacent(column, range) {\r\n this.url.searchParams.append(column, `adj.${range}`);\r\n return this;\r\n }\r\n /**\r\n * Only relevant for array and range columns. Match only rows where\r\n * `column` and `value` have an element in common.\r\n *\r\n * @param column - The array or range column to filter on\r\n * @param value - The array or range value to filter with\r\n */\r\n overlaps(column, value) {\r\n if (typeof value === 'string') {\r\n // range\r\n this.url.searchParams.append(column, `ov.${value}`);\r\n }\r\n else {\r\n // array\r\n this.url.searchParams.append(column, `ov.{${value.join(',')}}`);\r\n }\r\n return this;\r\n }\r\n /**\r\n * Only relevant for text and tsvector columns. Match only rows where\r\n * `column` matches the query string in `query`.\r\n *\r\n * @param column - The text or tsvector column to filter on\r\n * @param query - The query text to match with\r\n * @param options - Named parameters\r\n * @param options.config - The text search configuration to use\r\n * @param options.type - Change how the `query` text is interpreted\r\n */\r\n textSearch(column, query, { config, type } = {}) {\r\n let typePart = '';\r\n if (type === 'plain') {\r\n typePart = 'pl';\r\n }\r\n else if (type === 'phrase') {\r\n typePart = 'ph';\r\n }\r\n else if (type === 'websearch') {\r\n typePart = 'w';\r\n }\r\n const configPart = config === undefined ? '' : `(${config})`;\r\n this.url.searchParams.append(column, `${typePart}fts${configPart}.${query}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where each column in `query` keys is equal to its\r\n * associated value. Shorthand for multiple `.eq()`s.\r\n *\r\n * @param query - The object to filter with, with column names as keys mapped\r\n * to their filter values\r\n */\r\n match(query) {\r\n Object.entries(query).forEach(([column, value]) => {\r\n this.url.searchParams.append(column, `eq.${value}`);\r\n });\r\n return this;\r\n }\r\n /**\r\n * Match only rows which doesn't satisfy the filter.\r\n *\r\n * Unlike most filters, `opearator` and `value` are used as-is and need to\r\n * follow [PostgREST\r\n * syntax](https://postgrest.org/en/stable/api.html#operators). You also need\r\n * to make sure they are properly sanitized.\r\n *\r\n * @param column - The column to filter on\r\n * @param operator - The operator to be negated to filter with, following\r\n * PostgREST syntax\r\n * @param value - The value to filter with, following PostgREST syntax\r\n */\r\n not(column, operator, value) {\r\n this.url.searchParams.append(column, `not.${operator}.${value}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows which satisfy at least one of the filters.\r\n *\r\n * Unlike most filters, `filters` is used as-is and needs to follow [PostgREST\r\n * syntax](https://postgrest.org/en/stable/api.html#operators). You also need\r\n * to make sure it's properly sanitized.\r\n *\r\n * It's currently not possible to do an `.or()` filter across multiple tables.\r\n *\r\n * @param filters - The filters to use, following PostgREST syntax\r\n * @param options - Named parameters\r\n * @param options.referencedTable - Set this to filter on referenced tables\r\n * instead of the parent table\r\n * @param options.foreignTable - Deprecated, use `referencedTable` instead\r\n */\r\n or(filters, { foreignTable, referencedTable = foreignTable, } = {}) {\r\n const key = referencedTable ? `${referencedTable}.or` : 'or';\r\n this.url.searchParams.append(key, `(${filters})`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows which satisfy the filter. This is an escape hatch - you\r\n * should use the specific filter methods wherever possible.\r\n *\r\n * Unlike most filters, `opearator` and `value` are used as-is and need to\r\n * follow [PostgREST\r\n * syntax](https://postgrest.org/en/stable/api.html#operators). You also need\r\n * to make sure they are properly sanitized.\r\n *\r\n * @param column - The column to filter on\r\n * @param operator - The operator to filter with, following PostgREST syntax\r\n * @param value - The value to filter with, following PostgREST syntax\r\n */\r\n filter(column, operator, value) {\r\n this.url.searchParams.append(column, `${operator}.${value}`);\r\n return this;\r\n }\r\n}\r\nexports[\"default\"] = PostgrestFilterBuilder;\r\n//# sourceMappingURL=PostgrestFilterBuilder.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Bvc3RncmVzdC1qcy9kaXN0L2Nqcy9Qb3N0Z3Jlc3RGaWx0ZXJCdWlsZGVyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsb0RBQW9ELG1CQUFPLENBQUMsc0hBQTZCO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELE1BQU07QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELE1BQU07QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELE1BQU07QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELE1BQU07QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELE1BQU07QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELE1BQU07QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELFFBQVE7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELEVBQUUsb0JBQW9CO0FBQy9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxFQUFFLG9CQUFvQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsUUFBUTtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsRUFBRSxvQkFBb0I7QUFDaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELEVBQUUsb0JBQW9CO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxNQUFNO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsRUFBRTtBQUM3QjtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLFNBQVM7QUFDVDtBQUNBLG9EQUFvRCxjQUFjO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELE1BQU07QUFDN0Q7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELEVBQUUsaUJBQWlCO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxzQkFBc0I7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsTUFBTTtBQUM3RDtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsRUFBRSxpQkFBaUI7QUFDekU7QUFDQTtBQUNBO0FBQ0EsdURBQXVELHNCQUFzQjtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELE1BQU07QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxNQUFNO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELE1BQU07QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxNQUFNO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsTUFBTTtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsTUFBTTtBQUM3RDtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsRUFBRSxpQkFBaUI7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsZUFBZSxJQUFJO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJELE9BQU87QUFDbEUsZ0RBQWdELFNBQVMsS0FBSyxXQUFXLEdBQUcsTUFBTTtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELE1BQU07QUFDN0QsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELFNBQVMsR0FBRyxNQUFNO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsZ0RBQWdELElBQUk7QUFDdEUseUNBQXlDLGdCQUFnQjtBQUN6RCw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxTQUFTLEdBQUcsTUFBTTtBQUNsRTtBQUNBO0FBQ0E7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9wb3N0Z3Jlc3QtanMvZGlzdC9janMvUG9zdGdyZXN0RmlsdGVyQnVpbGRlci5qcz81ODJiIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmNvbnN0IFBvc3RncmVzdFRyYW5zZm9ybUJ1aWxkZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9Qb3N0Z3Jlc3RUcmFuc2Zvcm1CdWlsZGVyXCIpKTtcclxuY2xhc3MgUG9zdGdyZXN0RmlsdGVyQnVpbGRlciBleHRlbmRzIFBvc3RncmVzdFRyYW5zZm9ybUJ1aWxkZXJfMS5kZWZhdWx0IHtcclxuICAgIC8qKlxyXG4gICAgICogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIGlzIGVxdWFsIHRvIGB2YWx1ZWAuXHJcbiAgICAgKlxyXG4gICAgICogVG8gY2hlY2sgaWYgdGhlIHZhbHVlIG9mIGBjb2x1bW5gIGlzIE5VTEwsIHlvdSBzaG91bGQgdXNlIGAuaXMoKWAgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBmaWx0ZXIgd2l0aFxyXG4gICAgICovXHJcbiAgICBlcShjb2x1bW4sIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBlcS4ke3ZhbHVlfWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgYGNvbHVtbmAgaXMgbm90IGVxdWFsIHRvIGB2YWx1ZWAuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbHVtbiAtIFRoZSBjb2x1bW4gdG8gZmlsdGVyIG9uXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gZmlsdGVyIHdpdGhcclxuICAgICAqL1xyXG4gICAgbmVxKGNvbHVtbiwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYG5lcS4ke3ZhbHVlfWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgYGNvbHVtbmAgaXMgZ3JlYXRlciB0aGFuIGB2YWx1ZWAuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbHVtbiAtIFRoZSBjb2x1bW4gdG8gZmlsdGVyIG9uXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gZmlsdGVyIHdpdGhcclxuICAgICAqL1xyXG4gICAgZ3QoY29sdW1uLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgZ3QuJHt2YWx1ZX1gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgdmFsdWVgLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbHRlciB3aXRoXHJcbiAgICAgKi9cclxuICAgIGd0ZShjb2x1bW4sIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBndGUuJHt2YWx1ZX1gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIGlzIGxlc3MgdGhhbiBgdmFsdWVgLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbHRlciB3aXRoXHJcbiAgICAgKi9cclxuICAgIGx0KGNvbHVtbiwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGx0LiR7dmFsdWV9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBgY29sdW1uYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHZhbHVlYC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBmaWx0ZXIgd2l0aFxyXG4gICAgICovXHJcbiAgICBsdGUoY29sdW1uLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgbHRlLiR7dmFsdWV9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBgY29sdW1uYCBtYXRjaGVzIGBwYXR0ZXJuYCBjYXNlLXNlbnNpdGl2ZWx5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHBhdHRlcm4gLSBUaGUgcGF0dGVybiB0byBtYXRjaCB3aXRoXHJcbiAgICAgKi9cclxuICAgIGxpa2UoY29sdW1uLCBwYXR0ZXJuKSB7XHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBsaWtlLiR7cGF0dGVybn1gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIG1hdGNoZXMgYWxsIG9mIGBwYXR0ZXJuc2AgY2FzZS1zZW5zaXRpdmVseS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSBwYXR0ZXJucyAtIFRoZSBwYXR0ZXJucyB0byBtYXRjaCB3aXRoXHJcbiAgICAgKi9cclxuICAgIGxpa2VBbGxPZihjb2x1bW4sIHBhdHRlcm5zKSB7XHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBsaWtlKGFsbCkueyR7cGF0dGVybnMuam9pbignLCcpfX1gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIG1hdGNoZXMgYW55IG9mIGBwYXR0ZXJuc2AgY2FzZS1zZW5zaXRpdmVseS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSBwYXR0ZXJucyAtIFRoZSBwYXR0ZXJucyB0byBtYXRjaCB3aXRoXHJcbiAgICAgKi9cclxuICAgIGxpa2VBbnlPZihjb2x1bW4sIHBhdHRlcm5zKSB7XHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBsaWtlKGFueSkueyR7cGF0dGVybnMuam9pbignLCcpfX1gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIG1hdGNoZXMgYHBhdHRlcm5gIGNhc2UtaW5zZW5zaXRpdmVseS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSBwYXR0ZXJuIC0gVGhlIHBhdHRlcm4gdG8gbWF0Y2ggd2l0aFxyXG4gICAgICovXHJcbiAgICBpbGlrZShjb2x1bW4sIHBhdHRlcm4pIHtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGlsaWtlLiR7cGF0dGVybn1gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIG1hdGNoZXMgYWxsIG9mIGBwYXR0ZXJuc2AgY2FzZS1pbnNlbnNpdGl2ZWx5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHBhdHRlcm5zIC0gVGhlIHBhdHRlcm5zIHRvIG1hdGNoIHdpdGhcclxuICAgICAqL1xyXG4gICAgaWxpa2VBbGxPZihjb2x1bW4sIHBhdHRlcm5zKSB7XHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBpbGlrZShhbGwpLnske3BhdHRlcm5zLmpvaW4oJywnKX19YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBgY29sdW1uYCBtYXRjaGVzIGFueSBvZiBgcGF0dGVybnNgIGNhc2UtaW5zZW5zaXRpdmVseS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSBwYXR0ZXJucyAtIFRoZSBwYXR0ZXJucyB0byBtYXRjaCB3aXRoXHJcbiAgICAgKi9cclxuICAgIGlsaWtlQW55T2YoY29sdW1uLCBwYXR0ZXJucykge1xyXG4gICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgaWxpa2UoYW55KS57JHtwYXR0ZXJucy5qb2luKCcsJyl9fWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgYGNvbHVtbmAgSVMgYHZhbHVlYC5cclxuICAgICAqXHJcbiAgICAgKiBGb3Igbm9uLWJvb2xlYW4gY29sdW1ucywgdGhpcyBpcyBvbmx5IHJlbGV2YW50IGZvciBjaGVja2luZyBpZiB0aGUgdmFsdWUgb2ZcclxuICAgICAqIGBjb2x1bW5gIGlzIE5VTEwgYnkgc2V0dGluZyBgdmFsdWVgIHRvIGBudWxsYC5cclxuICAgICAqXHJcbiAgICAgKiBGb3IgYm9vbGVhbiBjb2x1bW5zLCB5b3UgY2FuIGFsc28gc2V0IGB2YWx1ZWAgdG8gYHRydWVgIG9yIGBmYWxzZWAgYW5kIGl0XHJcbiAgICAgKiB3aWxsIGJlaGF2ZSB0aGUgc2FtZSB3YXkgYXMgYC5lcSgpYC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBmaWx0ZXIgd2l0aFxyXG4gICAgICovXHJcbiAgICBpcyhjb2x1bW4sIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBpcy4ke3ZhbHVlfWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgYGNvbHVtbmAgaXMgaW5jbHVkZWQgaW4gdGhlIGB2YWx1ZXNgIGFycmF5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHZhbHVlcyAtIFRoZSB2YWx1ZXMgYXJyYXkgdG8gZmlsdGVyIHdpdGhcclxuICAgICAqL1xyXG4gICAgaW4oY29sdW1uLCB2YWx1ZXMpIHtcclxuICAgICAgICBjb25zdCBjbGVhbmVkVmFsdWVzID0gQXJyYXkuZnJvbShuZXcgU2V0KHZhbHVlcykpXHJcbiAgICAgICAgICAgIC5tYXAoKHMpID0+IHtcclxuICAgICAgICAgICAgLy8gaGFuZGxlIHBvc3RncmVzdCByZXNlcnZlZCBjaGFyYWN0ZXJzXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vcG9zdGdyZXN0Lm9yZy9lbi92Ny4wLjAvYXBpLmh0bWwjcmVzZXJ2ZWQtY2hhcmFjdGVyc1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHMgPT09ICdzdHJpbmcnICYmIG5ldyBSZWdFeHAoJ1ssKCldJykudGVzdChzKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBgXCIke3N9XCJgO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7c31gO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5qb2luKCcsJyk7XHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBpbi4oJHtjbGVhbmVkVmFsdWVzfSlgKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogT25seSByZWxldmFudCBmb3IganNvbmIsIGFycmF5LCBhbmQgcmFuZ2UgY29sdW1ucy4gTWF0Y2ggb25seSByb3dzIHdoZXJlXHJcbiAgICAgKiBgY29sdW1uYCBjb250YWlucyBldmVyeSBlbGVtZW50IGFwcGVhcmluZyBpbiBgdmFsdWVgLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUganNvbmIsIGFycmF5LCBvciByYW5nZSBjb2x1bW4gdG8gZmlsdGVyIG9uXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUganNvbmIsIGFycmF5LCBvciByYW5nZSB2YWx1ZSB0byBmaWx0ZXIgd2l0aFxyXG4gICAgICovXHJcbiAgICBjb250YWlucyhjb2x1bW4sIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgLy8gcmFuZ2UgdHlwZXMgY2FuIGJlIGluY2x1c2l2ZSAnWycsICddJyBvciBleGNsdXNpdmUgJygnLCAnKScgc28ganVzdFxyXG4gICAgICAgICAgICAvLyBrZWVwIGl0IHNpbXBsZSBhbmQgYWNjZXB0IGEgc3RyaW5nXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgY3MuJHt2YWx1ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgLy8gYXJyYXlcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBjcy57JHt2YWx1ZS5qb2luKCcsJyl9fWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8ganNvblxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGNzLiR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogT25seSByZWxldmFudCBmb3IganNvbmIsIGFycmF5LCBhbmQgcmFuZ2UgY29sdW1ucy4gTWF0Y2ggb25seSByb3dzIHdoZXJlXHJcbiAgICAgKiBldmVyeSBlbGVtZW50IGFwcGVhcmluZyBpbiBgY29sdW1uYCBpcyBjb250YWluZWQgYnkgYHZhbHVlYC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGpzb25iLCBhcnJheSwgb3IgcmFuZ2UgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGpzb25iLCBhcnJheSwgb3IgcmFuZ2UgdmFsdWUgdG8gZmlsdGVyIHdpdGhcclxuICAgICAqL1xyXG4gICAgY29udGFpbmVkQnkoY29sdW1uLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIC8vIHJhbmdlXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgY2QuJHt2YWx1ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgLy8gYXJyYXlcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBjZC57JHt2YWx1ZS5qb2luKCcsJyl9fWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8ganNvblxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGNkLiR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogT25seSByZWxldmFudCBmb3IgcmFuZ2UgY29sdW1ucy4gTWF0Y2ggb25seSByb3dzIHdoZXJlIGV2ZXJ5IGVsZW1lbnQgaW5cclxuICAgICAqIGBjb2x1bW5gIGlzIGdyZWF0ZXIgdGhhbiBhbnkgZWxlbWVudCBpbiBgcmFuZ2VgLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgcmFuZ2UgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHJhbmdlIC0gVGhlIHJhbmdlIHRvIGZpbHRlciB3aXRoXHJcbiAgICAgKi9cclxuICAgIHJhbmdlR3QoY29sdW1uLCByYW5nZSkge1xyXG4gICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgc3IuJHtyYW5nZX1gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogT25seSByZWxldmFudCBmb3IgcmFuZ2UgY29sdW1ucy4gTWF0Y2ggb25seSByb3dzIHdoZXJlIGV2ZXJ5IGVsZW1lbnQgaW5cclxuICAgICAqIGBjb2x1bW5gIGlzIGVpdGhlciBjb250YWluZWQgaW4gYHJhbmdlYCBvciBncmVhdGVyIHRoYW4gYW55IGVsZW1lbnQgaW5cclxuICAgICAqIGByYW5nZWAuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbHVtbiAtIFRoZSByYW5nZSBjb2x1bW4gdG8gZmlsdGVyIG9uXHJcbiAgICAgKiBAcGFyYW0gcmFuZ2UgLSBUaGUgcmFuZ2UgdG8gZmlsdGVyIHdpdGhcclxuICAgICAqL1xyXG4gICAgcmFuZ2VHdGUoY29sdW1uLCByYW5nZSkge1xyXG4gICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgbnhsLiR7cmFuZ2V9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE9ubHkgcmVsZXZhbnQgZm9yIHJhbmdlIGNvbHVtbnMuIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBldmVyeSBlbGVtZW50IGluXHJcbiAgICAgKiBgY29sdW1uYCBpcyBsZXNzIHRoYW4gYW55IGVsZW1lbnQgaW4gYHJhbmdlYC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIHJhbmdlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSByYW5nZSAtIFRoZSByYW5nZSB0byBmaWx0ZXIgd2l0aFxyXG4gICAgICovXHJcbiAgICByYW5nZUx0KGNvbHVtbiwgcmFuZ2UpIHtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYHNsLiR7cmFuZ2V9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE9ubHkgcmVsZXZhbnQgZm9yIHJhbmdlIGNvbHVtbnMuIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBldmVyeSBlbGVtZW50IGluXHJcbiAgICAgKiBgY29sdW1uYCBpcyBlaXRoZXIgY29udGFpbmVkIGluIGByYW5nZWAgb3IgbGVzcyB0aGFuIGFueSBlbGVtZW50IGluXHJcbiAgICAgKiBgcmFuZ2VgLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgcmFuZ2UgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHJhbmdlIC0gVGhlIHJhbmdlIHRvIGZpbHRlciB3aXRoXHJcbiAgICAgKi9cclxuICAgIHJhbmdlTHRlKGNvbHVtbiwgcmFuZ2UpIHtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYG54ci4ke3JhbmdlfWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBPbmx5IHJlbGV2YW50IGZvciByYW5nZSBjb2x1bW5zLiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgYGNvbHVtbmAgaXNcclxuICAgICAqIG11dHVhbGx5IGV4Y2x1c2l2ZSB0byBgcmFuZ2VgIGFuZCB0aGVyZSBjYW4gYmUgbm8gZWxlbWVudCBiZXR3ZWVuIHRoZSB0d29cclxuICAgICAqIHJhbmdlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIHJhbmdlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSByYW5nZSAtIFRoZSByYW5nZSB0byBmaWx0ZXIgd2l0aFxyXG4gICAgICovXHJcbiAgICByYW5nZUFkamFjZW50KGNvbHVtbiwgcmFuZ2UpIHtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGFkai4ke3JhbmdlfWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBPbmx5IHJlbGV2YW50IGZvciBhcnJheSBhbmQgcmFuZ2UgY29sdW1ucy4gTWF0Y2ggb25seSByb3dzIHdoZXJlXHJcbiAgICAgKiBgY29sdW1uYCBhbmQgYHZhbHVlYCBoYXZlIGFuIGVsZW1lbnQgaW4gY29tbW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgYXJyYXkgb3IgcmFuZ2UgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGFycmF5IG9yIHJhbmdlIHZhbHVlIHRvIGZpbHRlciB3aXRoXHJcbiAgICAgKi9cclxuICAgIG92ZXJsYXBzKGNvbHVtbiwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAvLyByYW5nZVxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYG92LiR7dmFsdWV9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBhcnJheVxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYG92Lnske3ZhbHVlLmpvaW4oJywnKX19YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBPbmx5IHJlbGV2YW50IGZvciB0ZXh0IGFuZCB0c3ZlY3RvciBjb2x1bW5zLiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmVcclxuICAgICAqIGBjb2x1bW5gIG1hdGNoZXMgdGhlIHF1ZXJ5IHN0cmluZyBpbiBgcXVlcnlgLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgdGV4dCBvciB0c3ZlY3RvciBjb2x1bW4gdG8gZmlsdGVyIG9uXHJcbiAgICAgKiBAcGFyYW0gcXVlcnkgLSBUaGUgcXVlcnkgdGV4dCB0byBtYXRjaCB3aXRoXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE5hbWVkIHBhcmFtZXRlcnNcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmNvbmZpZyAtIFRoZSB0ZXh0IHNlYXJjaCBjb25maWd1cmF0aW9uIHRvIHVzZVxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMudHlwZSAtIENoYW5nZSBob3cgdGhlIGBxdWVyeWAgdGV4dCBpcyBpbnRlcnByZXRlZFxyXG4gICAgICovXHJcbiAgICB0ZXh0U2VhcmNoKGNvbHVtbiwgcXVlcnksIHsgY29uZmlnLCB0eXBlIH0gPSB7fSkge1xyXG4gICAgICAgIGxldCB0eXBlUGFydCA9ICcnO1xyXG4gICAgICAgIGlmICh0eXBlID09PSAncGxhaW4nKSB7XHJcbiAgICAgICAgICAgIHR5cGVQYXJ0ID0gJ3BsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3BocmFzZScpIHtcclxuICAgICAgICAgICAgdHlwZVBhcnQgPSAncGgnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnd2Vic2VhcmNoJykge1xyXG4gICAgICAgICAgICB0eXBlUGFydCA9ICd3JztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29uZmlnUGFydCA9IGNvbmZpZyA9PT0gdW5kZWZpbmVkID8gJycgOiBgKCR7Y29uZmlnfSlgO1xyXG4gICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgJHt0eXBlUGFydH1mdHMke2NvbmZpZ1BhcnR9LiR7cXVlcnl9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBlYWNoIGNvbHVtbiBpbiBgcXVlcnlgIGtleXMgaXMgZXF1YWwgdG8gaXRzXHJcbiAgICAgKiBhc3NvY2lhdGVkIHZhbHVlLiBTaG9ydGhhbmQgZm9yIG11bHRpcGxlIGAuZXEoKWBzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBxdWVyeSAtIFRoZSBvYmplY3QgdG8gZmlsdGVyIHdpdGgsIHdpdGggY29sdW1uIG5hbWVzIGFzIGtleXMgbWFwcGVkXHJcbiAgICAgKiB0byB0aGVpciBmaWx0ZXIgdmFsdWVzXHJcbiAgICAgKi9cclxuICAgIG1hdGNoKHF1ZXJ5KSB7XHJcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocXVlcnkpLmZvckVhY2goKFtjb2x1bW4sIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGVxLiR7dmFsdWV9YCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1hdGNoIG9ubHkgcm93cyB3aGljaCBkb2Vzbid0IHNhdGlzZnkgdGhlIGZpbHRlci5cclxuICAgICAqXHJcbiAgICAgKiBVbmxpa2UgbW9zdCBmaWx0ZXJzLCBgb3BlYXJhdG9yYCBhbmQgYHZhbHVlYCBhcmUgdXNlZCBhcy1pcyBhbmQgbmVlZCB0b1xyXG4gICAgICogZm9sbG93IFtQb3N0Z1JFU1RcclxuICAgICAqIHN5bnRheF0oaHR0cHM6Ly9wb3N0Z3Jlc3Qub3JnL2VuL3N0YWJsZS9hcGkuaHRtbCNvcGVyYXRvcnMpLiBZb3UgYWxzbyBuZWVkXHJcbiAgICAgKiB0byBtYWtlIHN1cmUgdGhleSBhcmUgcHJvcGVybHkgc2FuaXRpemVkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIG9wZXJhdG9yIC0gVGhlIG9wZXJhdG9yIHRvIGJlIG5lZ2F0ZWQgdG8gZmlsdGVyIHdpdGgsIGZvbGxvd2luZ1xyXG4gICAgICogUG9zdGdSRVNUIHN5bnRheFxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbHRlciB3aXRoLCBmb2xsb3dpbmcgUG9zdGdSRVNUIHN5bnRheFxyXG4gICAgICovXHJcbiAgICBub3QoY29sdW1uLCBvcGVyYXRvciwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYG5vdC4ke29wZXJhdG9yfS4ke3ZhbHVlfWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXRjaCBvbmx5IHJvd3Mgd2hpY2ggc2F0aXNmeSBhdCBsZWFzdCBvbmUgb2YgdGhlIGZpbHRlcnMuXHJcbiAgICAgKlxyXG4gICAgICogVW5saWtlIG1vc3QgZmlsdGVycywgYGZpbHRlcnNgIGlzIHVzZWQgYXMtaXMgYW5kIG5lZWRzIHRvIGZvbGxvdyBbUG9zdGdSRVNUXHJcbiAgICAgKiBzeW50YXhdKGh0dHBzOi8vcG9zdGdyZXN0Lm9yZy9lbi9zdGFibGUvYXBpLmh0bWwjb3BlcmF0b3JzKS4gWW91IGFsc28gbmVlZFxyXG4gICAgICogdG8gbWFrZSBzdXJlIGl0J3MgcHJvcGVybHkgc2FuaXRpemVkLlxyXG4gICAgICpcclxuICAgICAqIEl0J3MgY3VycmVudGx5IG5vdCBwb3NzaWJsZSB0byBkbyBhbiBgLm9yKClgIGZpbHRlciBhY3Jvc3MgbXVsdGlwbGUgdGFibGVzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBmaWx0ZXJzIC0gVGhlIGZpbHRlcnMgdG8gdXNlLCBmb2xsb3dpbmcgUG9zdGdSRVNUIHN5bnRheFxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBOYW1lZCBwYXJhbWV0ZXJzXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5yZWZlcmVuY2VkVGFibGUgLSBTZXQgdGhpcyB0byBmaWx0ZXIgb24gcmVmZXJlbmNlZCB0YWJsZXNcclxuICAgICAqIGluc3RlYWQgb2YgdGhlIHBhcmVudCB0YWJsZVxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZm9yZWlnblRhYmxlIC0gRGVwcmVjYXRlZCwgdXNlIGByZWZlcmVuY2VkVGFibGVgIGluc3RlYWRcclxuICAgICAqL1xyXG4gICAgb3IoZmlsdGVycywgeyBmb3JlaWduVGFibGUsIHJlZmVyZW5jZWRUYWJsZSA9IGZvcmVpZ25UYWJsZSwgfSA9IHt9KSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gcmVmZXJlbmNlZFRhYmxlID8gYCR7cmVmZXJlbmNlZFRhYmxlfS5vcmAgOiAnb3InO1xyXG4gICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCBgKCR7ZmlsdGVyc30pYCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1hdGNoIG9ubHkgcm93cyB3aGljaCBzYXRpc2Z5IHRoZSBmaWx0ZXIuIFRoaXMgaXMgYW4gZXNjYXBlIGhhdGNoIC0geW91XHJcbiAgICAgKiBzaG91bGQgdXNlIHRoZSBzcGVjaWZpYyBmaWx0ZXIgbWV0aG9kcyB3aGVyZXZlciBwb3NzaWJsZS5cclxuICAgICAqXHJcbiAgICAgKiBVbmxpa2UgbW9zdCBmaWx0ZXJzLCBgb3BlYXJhdG9yYCBhbmQgYHZhbHVlYCBhcmUgdXNlZCBhcy1pcyBhbmQgbmVlZCB0b1xyXG4gICAgICogZm9sbG93IFtQb3N0Z1JFU1RcclxuICAgICAqIHN5bnRheF0oaHR0cHM6Ly9wb3N0Z3Jlc3Qub3JnL2VuL3N0YWJsZS9hcGkuaHRtbCNvcGVyYXRvcnMpLiBZb3UgYWxzbyBuZWVkXHJcbiAgICAgKiB0byBtYWtlIHN1cmUgdGhleSBhcmUgcHJvcGVybHkgc2FuaXRpemVkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIG9wZXJhdG9yIC0gVGhlIG9wZXJhdG9yIHRvIGZpbHRlciB3aXRoLCBmb2xsb3dpbmcgUG9zdGdSRVNUIHN5bnRheFxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbHRlciB3aXRoLCBmb2xsb3dpbmcgUG9zdGdSRVNUIHN5bnRheFxyXG4gICAgICovXHJcbiAgICBmaWx0ZXIoY29sdW1uLCBvcGVyYXRvciwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYCR7b3BlcmF0b3J9LiR7dmFsdWV9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0gUG9zdGdyZXN0RmlsdGVyQnVpbGRlcjtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UG9zdGdyZXN0RmlsdGVyQnVpbGRlci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestFilterBuilder.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestQueryBuilder.js":
/*!*******************************************************************************!*\
!*** ./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestQueryBuilder.js ***!
\*******************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst PostgrestFilterBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestFilterBuilder */ \"(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestFilterBuilder.js\"));\r\nclass PostgrestQueryBuilder {\r\n constructor(url, { headers = {}, schema, fetch, }) {\r\n this.url = url;\r\n this.headers = headers;\r\n this.schema = schema;\r\n this.fetch = fetch;\r\n }\r\n /**\r\n * Perform a SELECT query on the table or view.\r\n *\r\n * @param columns - The columns to retrieve, separated by commas. Columns can be renamed when returned with `customName:columnName`\r\n *\r\n * @param options - Named parameters\r\n *\r\n * @param options.head - When set to `true`, `data` will not be returned.\r\n * Useful if you only need the count.\r\n *\r\n * @param options.count - Count algorithm to use to count rows in the table or view.\r\n *\r\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\r\n * hood.\r\n *\r\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\r\n * statistics under the hood.\r\n *\r\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\r\n * numbers.\r\n */\r\n select(columns, { head = false, count, } = {}) {\r\n const method = head ? 'HEAD' : 'GET';\r\n // Remove whitespaces except when quoted\r\n let quoted = false;\r\n const cleanedColumns = (columns !== null && columns !== void 0 ? columns : '*')\r\n .split('')\r\n .map((c) => {\r\n if (/\\s/.test(c) && !quoted) {\r\n return '';\r\n }\r\n if (c === '\"') {\r\n quoted = !quoted;\r\n }\r\n return c;\r\n })\r\n .join('');\r\n this.url.searchParams.set('select', cleanedColumns);\r\n if (count) {\r\n this.headers['Prefer'] = `count=${count}`;\r\n }\r\n return new PostgrestFilterBuilder_1.default({\r\n method,\r\n url: this.url,\r\n headers: this.headers,\r\n schema: this.schema,\r\n fetch: this.fetch,\r\n allowEmpty: false,\r\n });\r\n }\r\n /**\r\n * Perform an INSERT into the table or view.\r\n *\r\n * By default, inserted rows are not returned. To return it, chain the call\r\n * with `.select()`.\r\n *\r\n * @param values - The values to insert. Pass an object to insert a single row\r\n * or an array to insert multiple rows.\r\n *\r\n * @param options - Named parameters\r\n *\r\n * @param options.count - Count algorithm to use to count inserted rows.\r\n *\r\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\r\n * hood.\r\n *\r\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\r\n * statistics under the hood.\r\n *\r\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\r\n * numbers.\r\n *\r\n * @param options.defaultToNull - Make missing fields default to `null`.\r\n * Otherwise, use the default value for the column. Only applies for bulk\r\n * inserts.\r\n */\r\n insert(values, { count, defaultToNull = true, } = {}) {\r\n const method = 'POST';\r\n const prefersHeaders = [];\r\n if (this.headers['Prefer']) {\r\n prefersHeaders.push(this.headers['Prefer']);\r\n }\r\n if (count) {\r\n prefersHeaders.push(`count=${count}`);\r\n }\r\n if (!defaultToNull) {\r\n prefersHeaders.push('missing=default');\r\n }\r\n this.headers['Prefer'] = prefersHeaders.join(',');\r\n if (Array.isArray(values)) {\r\n const columns = values.reduce((acc, x) => acc.concat(Object.keys(x)), []);\r\n if (columns.length > 0) {\r\n const uniqueColumns = [...new Set(columns)].map((column) => `\"${column}\"`);\r\n this.url.searchParams.set('columns', uniqueColumns.join(','));\r\n }\r\n }\r\n return new PostgrestFilterBuilder_1.default({\r\n method,\r\n url: this.url,\r\n headers: this.headers,\r\n schema: this.schema,\r\n body: values,\r\n fetch: this.fetch,\r\n allowEmpty: false,\r\n });\r\n }\r\n /**\r\n * Perform an UPSERT on the table or view. Depending on the column(s) passed\r\n * to `onConflict`, `.upsert()` allows you to perform the equivalent of\r\n * `.insert()` if a row with the corresponding `onConflict` columns doesn't\r\n * exist, or if it does exist, perform an alternative action depending on\r\n * `ignoreDuplicates`.\r\n *\r\n * By default, upserted rows are not returned. To return it, chain the call\r\n * with `.select()`.\r\n *\r\n * @param values - The values to upsert with. Pass an object to upsert a\r\n * single row or an array to upsert multiple rows.\r\n *\r\n * @param options - Named parameters\r\n *\r\n * @param options.onConflict - Comma-separated UNIQUE column(s) to specify how\r\n * duplicate rows are determined. Two rows are duplicates if all the\r\n * `onConflict` columns are equal.\r\n *\r\n * @param options.ignoreDuplicates - If `true`, duplicate rows are ignored. If\r\n * `false`, duplicate rows are merged with existing rows.\r\n *\r\n * @param options.count - Count algorithm to use to count upserted rows.\r\n *\r\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\r\n * hood.\r\n *\r\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\r\n * statistics under the hood.\r\n *\r\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\r\n * numbers.\r\n *\r\n * @param options.defaultToNull - Make missing fields default to `null`.\r\n * Otherwise, use the default value for the column. This only applies when\r\n * inserting new rows, not when merging with existing rows under\r\n * `ignoreDuplicates: false`. This also only applies when doing bulk upserts.\r\n */\r\n upsert(values, { onConflict, ignoreDuplicates = false, count, defaultToNull = true, } = {}) {\r\n const method = 'POST';\r\n const prefersHeaders = [`resolution=${ignoreDuplicates ? 'ignore' : 'merge'}-duplicates`];\r\n if (onConflict !== undefined)\r\n this.url.searchParams.set('on_conflict', onConflict);\r\n if (this.headers['Prefer']) {\r\n prefersHeaders.push(this.headers['Prefer']);\r\n }\r\n if (count) {\r\n prefersHeaders.push(`count=${count}`);\r\n }\r\n if (!defaultToNull) {\r\n prefersHeaders.push('missing=default');\r\n }\r\n this.headers['Prefer'] = prefersHeaders.join(',');\r\n if (Array.isArray(values)) {\r\n const columns = values.reduce((acc, x) => acc.concat(Object.keys(x)), []);\r\n if (columns.length > 0) {\r\n const uniqueColumns = [...new Set(columns)].map((column) => `\"${column}\"`);\r\n this.url.searchParams.set('columns', uniqueColumns.join(','));\r\n }\r\n }\r\n return new PostgrestFilterBuilder_1.default({\r\n method,\r\n url: this.url,\r\n headers: this.headers,\r\n schema: this.schema,\r\n body: values,\r\n fetch: this.fetch,\r\n allowEmpty: false,\r\n });\r\n }\r\n /**\r\n * Perform an UPDATE on the table or view.\r\n *\r\n * By default, updated rows are not returned. To return it, chain the call\r\n * with `.select()` after filters.\r\n *\r\n * @param values - The values to update with\r\n *\r\n * @param options - Named parameters\r\n *\r\n * @param options.count - Count algorithm to use to count updated rows.\r\n *\r\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\r\n * hood.\r\n *\r\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\r\n * statistics under the hood.\r\n *\r\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\r\n * numbers.\r\n */\r\n update(values, { count, } = {}) {\r\n const method = 'PATCH';\r\n const prefersHeaders = [];\r\n if (this.headers['Prefer']) {\r\n prefersHeaders.push(this.headers['Prefer']);\r\n }\r\n if (count) {\r\n prefersHeaders.push(`count=${count}`);\r\n }\r\n this.headers['Prefer'] = prefersHeaders.join(',');\r\n return new PostgrestFilterBuilder_1.default({\r\n method,\r\n url: this.url,\r\n headers: this.headers,\r\n schema: this.schema,\r\n body: values,\r\n fetch: this.fetch,\r\n allowEmpty: false,\r\n });\r\n }\r\n /**\r\n * Perform a DELETE on the table or view.\r\n *\r\n * By default, deleted rows are not returned. To return it, chain the call\r\n * with `.select()` after filters.\r\n *\r\n * @param options - Named parameters\r\n *\r\n * @param options.count - Count algorithm to use to count deleted rows.\r\n *\r\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\r\n * hood.\r\n *\r\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\r\n * statistics under the hood.\r\n *\r\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\r\n * numbers.\r\n */\r\n delete({ count, } = {}) {\r\n const method = 'DELETE';\r\n const prefersHeaders = [];\r\n if (count) {\r\n prefersHeaders.push(`count=${count}`);\r\n }\r\n if (this.headers['Prefer']) {\r\n prefersHeaders.unshift(this.headers['Prefer']);\r\n }\r\n this.headers['Prefer'] = prefersHeaders.join(',');\r\n return new PostgrestFilterBuilder_1.default({\r\n method,\r\n url: this.url,\r\n headers: this.headers,\r\n schema: this.schema,\r\n fetch: this.fetch,\r\n allowEmpty: false,\r\n });\r\n }\r\n}\r\nexports[\"default\"] = PostgrestQueryBuilder;\r\n//# sourceMappingURL=PostgrestQueryBuilder.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Bvc3RncmVzdC1qcy9kaXN0L2Nqcy9Qb3N0Z3Jlc3RRdWVyeUJ1aWxkZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLDZDQUE2QztBQUM3QztBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxpREFBaUQsbUJBQU8sQ0FBQyxnSEFBMEI7QUFDbkY7QUFDQSx1QkFBdUIsWUFBWSxrQkFBa0I7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix1QkFBdUIsSUFBSTtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsTUFBTTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiwrQkFBK0IsSUFBSTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsTUFBTTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0ZBQWdGLE9BQU87QUFDdkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIscUVBQXFFLElBQUk7QUFDOUY7QUFDQSw4Q0FBOEMsc0NBQXNDO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxNQUFNO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRkFBZ0YsT0FBTztBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFNBQVMsSUFBSTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsTUFBTTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxTQUFTLElBQUk7QUFDMUI7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLE1BQU07QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9wb3N0Z3Jlc3QtanMvZGlzdC9janMvUG9zdGdyZXN0UXVlcnlCdWlsZGVyLmpzPzAxYzYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuY29uc3QgUG9zdGdyZXN0RmlsdGVyQnVpbGRlcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1Bvc3RncmVzdEZpbHRlckJ1aWxkZXJcIikpO1xyXG5jbGFzcyBQb3N0Z3Jlc3RRdWVyeUJ1aWxkZXIge1xyXG4gICAgY29uc3RydWN0b3IodXJsLCB7IGhlYWRlcnMgPSB7fSwgc2NoZW1hLCBmZXRjaCwgfSkge1xyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XHJcbiAgICAgICAgdGhpcy5zY2hlbWEgPSBzY2hlbWE7XHJcbiAgICAgICAgdGhpcy5mZXRjaCA9IGZldGNoO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtIGEgU0VMRUNUIHF1ZXJ5IG9uIHRoZSB0YWJsZSBvciB2aWV3LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW5zIC0gVGhlIGNvbHVtbnMgdG8gcmV0cmlldmUsIHNlcGFyYXRlZCBieSBjb21tYXMuIENvbHVtbnMgY2FuIGJlIHJlbmFtZWQgd2hlbiByZXR1cm5lZCB3aXRoIGBjdXN0b21OYW1lOmNvbHVtbk5hbWVgXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBOYW1lZCBwYXJhbWV0ZXJzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuaGVhZCAtIFdoZW4gc2V0IHRvIGB0cnVlYCwgYGRhdGFgIHdpbGwgbm90IGJlIHJldHVybmVkLlxyXG4gICAgICogVXNlZnVsIGlmIHlvdSBvbmx5IG5lZWQgdGhlIGNvdW50LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmNvdW50IC0gQ291bnQgYWxnb3JpdGhtIHRvIHVzZSB0byBjb3VudCByb3dzIGluIHRoZSB0YWJsZSBvciB2aWV3LlxyXG4gICAgICpcclxuICAgICAqIGBcImV4YWN0XCJgOiBFeGFjdCBidXQgc2xvdyBjb3VudCBhbGdvcml0aG0uIFBlcmZvcm1zIGEgYENPVU5UKCopYCB1bmRlciB0aGVcclxuICAgICAqIGhvb2QuXHJcbiAgICAgKlxyXG4gICAgICogYFwicGxhbm5lZFwiYDogQXBwcm94aW1hdGVkIGJ1dCBmYXN0IGNvdW50IGFsZ29yaXRobS4gVXNlcyB0aGUgUG9zdGdyZXNcclxuICAgICAqIHN0YXRpc3RpY3MgdW5kZXIgdGhlIGhvb2QuXHJcbiAgICAgKlxyXG4gICAgICogYFwiZXN0aW1hdGVkXCJgOiBVc2VzIGV4YWN0IGNvdW50IGZvciBsb3cgbnVtYmVycyBhbmQgcGxhbm5lZCBjb3VudCBmb3IgaGlnaFxyXG4gICAgICogbnVtYmVycy5cclxuICAgICAqL1xyXG4gICAgc2VsZWN0KGNvbHVtbnMsIHsgaGVhZCA9IGZhbHNlLCBjb3VudCwgfSA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgbWV0aG9kID0gaGVhZCA/ICdIRUFEJyA6ICdHRVQnO1xyXG4gICAgICAgIC8vIFJlbW92ZSB3aGl0ZXNwYWNlcyBleGNlcHQgd2hlbiBxdW90ZWRcclxuICAgICAgICBsZXQgcXVvdGVkID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgY2xlYW5lZENvbHVtbnMgPSAoY29sdW1ucyAhPT0gbnVsbCAmJiBjb2x1bW5zICE9PSB2b2lkIDAgPyBjb2x1bW5zIDogJyonKVxyXG4gICAgICAgICAgICAuc3BsaXQoJycpXHJcbiAgICAgICAgICAgIC5tYXAoKGMpID0+IHtcclxuICAgICAgICAgICAgaWYgKC9cXHMvLnRlc3QoYykgJiYgIXF1b3RlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjID09PSAnXCInKSB7XHJcbiAgICAgICAgICAgICAgICBxdW90ZWQgPSAhcXVvdGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5qb2luKCcnKTtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuc2V0KCdzZWxlY3QnLCBjbGVhbmVkQ29sdW1ucyk7XHJcbiAgICAgICAgaWYgKGNvdW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyc1snUHJlZmVyJ10gPSBgY291bnQ9JHtjb3VudH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFBvc3RncmVzdEZpbHRlckJ1aWxkZXJfMS5kZWZhdWx0KHtcclxuICAgICAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEsXHJcbiAgICAgICAgICAgIGZldGNoOiB0aGlzLmZldGNoLFxyXG4gICAgICAgICAgICBhbGxvd0VtcHR5OiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybSBhbiBJTlNFUlQgaW50byB0aGUgdGFibGUgb3Igdmlldy5cclxuICAgICAqXHJcbiAgICAgKiBCeSBkZWZhdWx0LCBpbnNlcnRlZCByb3dzIGFyZSBub3QgcmV0dXJuZWQuIFRvIHJldHVybiBpdCwgY2hhaW4gdGhlIGNhbGxcclxuICAgICAqIHdpdGggYC5zZWxlY3QoKWAuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlcyAtIFRoZSB2YWx1ZXMgdG8gaW5zZXJ0LiBQYXNzIGFuIG9iamVjdCB0byBpbnNlcnQgYSBzaW5nbGUgcm93XHJcbiAgICAgKiBvciBhbiBhcnJheSB0byBpbnNlcnQgbXVsdGlwbGUgcm93cy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE5hbWVkIHBhcmFtZXRlcnNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5jb3VudCAtIENvdW50IGFsZ29yaXRobSB0byB1c2UgdG8gY291bnQgaW5zZXJ0ZWQgcm93cy5cclxuICAgICAqXHJcbiAgICAgKiBgXCJleGFjdFwiYDogRXhhY3QgYnV0IHNsb3cgY291bnQgYWxnb3JpdGhtLiBQZXJmb3JtcyBhIGBDT1VOVCgqKWAgdW5kZXIgdGhlXHJcbiAgICAgKiBob29kLlxyXG4gICAgICpcclxuICAgICAqIGBcInBsYW5uZWRcImA6IEFwcHJveGltYXRlZCBidXQgZmFzdCBjb3VudCBhbGdvcml0aG0uIFVzZXMgdGhlIFBvc3RncmVzXHJcbiAgICAgKiBzdGF0aXN0aWNzIHVuZGVyIHRoZSBob29kLlxyXG4gICAgICpcclxuICAgICAqIGBcImVzdGltYXRlZFwiYDogVXNlcyBleGFjdCBjb3VudCBmb3IgbG93IG51bWJlcnMgYW5kIHBsYW5uZWQgY291bnQgZm9yIGhpZ2hcclxuICAgICAqIG51bWJlcnMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZGVmYXVsdFRvTnVsbCAtIE1ha2UgbWlzc2luZyBmaWVsZHMgZGVmYXVsdCB0byBgbnVsbGAuXHJcbiAgICAgKiBPdGhlcndpc2UsIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbHVtbi4gT25seSBhcHBsaWVzIGZvciBidWxrXHJcbiAgICAgKiBpbnNlcnRzLlxyXG4gICAgICovXHJcbiAgICBpbnNlcnQodmFsdWVzLCB7IGNvdW50LCBkZWZhdWx0VG9OdWxsID0gdHJ1ZSwgfSA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgbWV0aG9kID0gJ1BPU1QnO1xyXG4gICAgICAgIGNvbnN0IHByZWZlcnNIZWFkZXJzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyc1snUHJlZmVyJ10pIHtcclxuICAgICAgICAgICAgcHJlZmVyc0hlYWRlcnMucHVzaCh0aGlzLmhlYWRlcnNbJ1ByZWZlciddKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvdW50KSB7XHJcbiAgICAgICAgICAgIHByZWZlcnNIZWFkZXJzLnB1c2goYGNvdW50PSR7Y291bnR9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZGVmYXVsdFRvTnVsbCkge1xyXG4gICAgICAgICAgICBwcmVmZXJzSGVhZGVycy5wdXNoKCdtaXNzaW5nPWRlZmF1bHQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzWydQcmVmZXInXSA9IHByZWZlcnNIZWFkZXJzLmpvaW4oJywnKTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB2YWx1ZXMucmVkdWNlKChhY2MsIHgpID0+IGFjYy5jb25jYXQoT2JqZWN0LmtleXMoeCkpLCBbXSk7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVuaXF1ZUNvbHVtbnMgPSBbLi4ubmV3IFNldChjb2x1bW5zKV0ubWFwKChjb2x1bW4pID0+IGBcIiR7Y29sdW1ufVwiYCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuc2V0KCdjb2x1bW5zJywgdW5pcXVlQ29sdW1ucy5qb2luKCcsJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUG9zdGdyZXN0RmlsdGVyQnVpbGRlcl8xLmRlZmF1bHQoe1xyXG4gICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgIHVybDogdGhpcy51cmwsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYSxcclxuICAgICAgICAgICAgYm9keTogdmFsdWVzLFxyXG4gICAgICAgICAgICBmZXRjaDogdGhpcy5mZXRjaCxcclxuICAgICAgICAgICAgYWxsb3dFbXB0eTogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm0gYW4gVVBTRVJUIG9uIHRoZSB0YWJsZSBvciB2aWV3LiBEZXBlbmRpbmcgb24gdGhlIGNvbHVtbihzKSBwYXNzZWRcclxuICAgICAqIHRvIGBvbkNvbmZsaWN0YCwgYC51cHNlcnQoKWAgYWxsb3dzIHlvdSB0byBwZXJmb3JtIHRoZSBlcXVpdmFsZW50IG9mXHJcbiAgICAgKiBgLmluc2VydCgpYCBpZiBhIHJvdyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGBvbkNvbmZsaWN0YCBjb2x1bW5zIGRvZXNuJ3RcclxuICAgICAqIGV4aXN0LCBvciBpZiBpdCBkb2VzIGV4aXN0LCBwZXJmb3JtIGFuIGFsdGVybmF0aXZlIGFjdGlvbiBkZXBlbmRpbmcgb25cclxuICAgICAqIGBpZ25vcmVEdXBsaWNhdGVzYC5cclxuICAgICAqXHJcbiAgICAgKiBCeSBkZWZhdWx0LCB1cHNlcnRlZCByb3dzIGFyZSBub3QgcmV0dXJuZWQuIFRvIHJldHVybiBpdCwgY2hhaW4gdGhlIGNhbGxcclxuICAgICAqIHdpdGggYC5zZWxlY3QoKWAuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlcyAtIFRoZSB2YWx1ZXMgdG8gdXBzZXJ0IHdpdGguIFBhc3MgYW4gb2JqZWN0IHRvIHVwc2VydCBhXHJcbiAgICAgKiBzaW5nbGUgcm93IG9yIGFuIGFycmF5IHRvIHVwc2VydCBtdWx0aXBsZSByb3dzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gTmFtZWQgcGFyYW1ldGVyc1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLm9uQ29uZmxpY3QgLSBDb21tYS1zZXBhcmF0ZWQgVU5JUVVFIGNvbHVtbihzKSB0byBzcGVjaWZ5IGhvd1xyXG4gICAgICogZHVwbGljYXRlIHJvd3MgYXJlIGRldGVybWluZWQuIFR3byByb3dzIGFyZSBkdXBsaWNhdGVzIGlmIGFsbCB0aGVcclxuICAgICAqIGBvbkNvbmZsaWN0YCBjb2x1bW5zIGFyZSBlcXVhbC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5pZ25vcmVEdXBsaWNhdGVzIC0gSWYgYHRydWVgLCBkdXBsaWNhdGUgcm93cyBhcmUgaWdub3JlZC4gSWZcclxuICAgICAqIGBmYWxzZWAsIGR1cGxpY2F0ZSByb3dzIGFyZSBtZXJnZWQgd2l0aCBleGlzdGluZyByb3dzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmNvdW50IC0gQ291bnQgYWxnb3JpdGhtIHRvIHVzZSB0byBjb3VudCB1cHNlcnRlZCByb3dzLlxyXG4gICAgICpcclxuICAgICAqIGBcImV4YWN0XCJgOiBFeGFjdCBidXQgc2xvdyBjb3VudCBhbGdvcml0aG0uIFBlcmZvcm1zIGEgYENPVU5UKCopYCB1bmRlciB0aGVcclxuICAgICAqIGhvb2QuXHJcbiAgICAgKlxyXG4gICAgICogYFwicGxhbm5lZFwiYDogQXBwcm94aW1hdGVkIGJ1dCBmYXN0IGNvdW50IGFsZ29yaXRobS4gVXNlcyB0aGUgUG9zdGdyZXNcclxuICAgICAqIHN0YXRpc3RpY3MgdW5kZXIgdGhlIGhvb2QuXHJcbiAgICAgKlxyXG4gICAgICogYFwiZXN0aW1hdGVkXCJgOiBVc2VzIGV4YWN0IGNvdW50IGZvciBsb3cgbnVtYmVycyBhbmQgcGxhbm5lZCBjb3VudCBmb3IgaGlnaFxyXG4gICAgICogbnVtYmVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5kZWZhdWx0VG9OdWxsIC0gTWFrZSBtaXNzaW5nIGZpZWxkcyBkZWZhdWx0IHRvIGBudWxsYC5cclxuICAgICAqIE90aGVyd2lzZSwgdXNlIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgY29sdW1uLiBUaGlzIG9ubHkgYXBwbGllcyB3aGVuXHJcbiAgICAgKiBpbnNlcnRpbmcgbmV3IHJvd3MsIG5vdCB3aGVuIG1lcmdpbmcgd2l0aCBleGlzdGluZyByb3dzIHVuZGVyXHJcbiAgICAgKiBgaWdub3JlRHVwbGljYXRlczogZmFsc2VgLiBUaGlzIGFsc28gb25seSBhcHBsaWVzIHdoZW4gZG9pbmcgYnVsayB1cHNlcnRzLlxyXG4gICAgICovXHJcbiAgICB1cHNlcnQodmFsdWVzLCB7IG9uQ29uZmxpY3QsIGlnbm9yZUR1cGxpY2F0ZXMgPSBmYWxzZSwgY291bnQsIGRlZmF1bHRUb051bGwgPSB0cnVlLCB9ID0ge30pIHtcclxuICAgICAgICBjb25zdCBtZXRob2QgPSAnUE9TVCc7XHJcbiAgICAgICAgY29uc3QgcHJlZmVyc0hlYWRlcnMgPSBbYHJlc29sdXRpb249JHtpZ25vcmVEdXBsaWNhdGVzID8gJ2lnbm9yZScgOiAnbWVyZ2UnfS1kdXBsaWNhdGVzYF07XHJcbiAgICAgICAgaWYgKG9uQ29uZmxpY3QgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLnNldCgnb25fY29uZmxpY3QnLCBvbkNvbmZsaWN0KTtcclxuICAgICAgICBpZiAodGhpcy5oZWFkZXJzWydQcmVmZXInXSkge1xyXG4gICAgICAgICAgICBwcmVmZXJzSGVhZGVycy5wdXNoKHRoaXMuaGVhZGVyc1snUHJlZmVyJ10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY291bnQpIHtcclxuICAgICAgICAgICAgcHJlZmVyc0hlYWRlcnMucHVzaChgY291bnQ9JHtjb3VudH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFkZWZhdWx0VG9OdWxsKSB7XHJcbiAgICAgICAgICAgIHByZWZlcnNIZWFkZXJzLnB1c2goJ21pc3Npbmc9ZGVmYXVsdCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmhlYWRlcnNbJ1ByZWZlciddID0gcHJlZmVyc0hlYWRlcnMuam9pbignLCcpO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IHZhbHVlcy5yZWR1Y2UoKGFjYywgeCkgPT4gYWNjLmNvbmNhdChPYmplY3Qua2V5cyh4KSksIFtdKTtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdW5pcXVlQ29sdW1ucyA9IFsuLi5uZXcgU2V0KGNvbHVtbnMpXS5tYXAoKGNvbHVtbikgPT4gYFwiJHtjb2x1bW59XCJgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2NvbHVtbnMnLCB1bmlxdWVDb2x1bW5zLmpvaW4oJywnKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQb3N0Z3Jlc3RGaWx0ZXJCdWlsZGVyXzEuZGVmYXVsdCh7XHJcbiAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgdXJsOiB0aGlzLnVybCxcclxuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hLFxyXG4gICAgICAgICAgICBib2R5OiB2YWx1ZXMsXHJcbiAgICAgICAgICAgIGZldGNoOiB0aGlzLmZldGNoLFxyXG4gICAgICAgICAgICBhbGxvd0VtcHR5OiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybSBhbiBVUERBVEUgb24gdGhlIHRhYmxlIG9yIHZpZXcuXHJcbiAgICAgKlxyXG4gICAgICogQnkgZGVmYXVsdCwgdXBkYXRlZCByb3dzIGFyZSBub3QgcmV0dXJuZWQuIFRvIHJldHVybiBpdCwgY2hhaW4gdGhlIGNhbGxcclxuICAgICAqIHdpdGggYC5zZWxlY3QoKWAgYWZ0ZXIgZmlsdGVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWVzIC0gVGhlIHZhbHVlcyB0byB1cGRhdGUgd2l0aFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gTmFtZWQgcGFyYW1ldGVyc1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmNvdW50IC0gQ291bnQgYWxnb3JpdGhtIHRvIHVzZSB0byBjb3VudCB1cGRhdGVkIHJvd3MuXHJcbiAgICAgKlxyXG4gICAgICogYFwiZXhhY3RcImA6IEV4YWN0IGJ1dCBzbG93IGNvdW50IGFsZ29yaXRobS4gUGVyZm9ybXMgYSBgQ09VTlQoKilgIHVuZGVyIHRoZVxyXG4gICAgICogaG9vZC5cclxuICAgICAqXHJcbiAgICAgKiBgXCJwbGFubmVkXCJgOiBBcHByb3hpbWF0ZWQgYnV0IGZhc3QgY291bnQgYWxnb3JpdGhtLiBVc2VzIHRoZSBQb3N0Z3Jlc1xyXG4gICAgICogc3RhdGlzdGljcyB1bmRlciB0aGUgaG9vZC5cclxuICAgICAqXHJcbiAgICAgKiBgXCJlc3RpbWF0ZWRcImA6IFVzZXMgZXhhY3QgY291bnQgZm9yIGxvdyBudW1iZXJzIGFuZCBwbGFubmVkIGNvdW50IGZvciBoaWdoXHJcbiAgICAgKiBudW1iZXJzLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGUodmFsdWVzLCB7IGNvdW50LCB9ID0ge30pIHtcclxuICAgICAgICBjb25zdCBtZXRob2QgPSAnUEFUQ0gnO1xyXG4gICAgICAgIGNvbnN0IHByZWZlcnNIZWFkZXJzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyc1snUHJlZmVyJ10pIHtcclxuICAgICAgICAgICAgcHJlZmVyc0hlYWRlcnMucHVzaCh0aGlzLmhlYWRlcnNbJ1ByZWZlciddKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvdW50KSB7XHJcbiAgICAgICAgICAgIHByZWZlcnNIZWFkZXJzLnB1c2goYGNvdW50PSR7Y291bnR9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaGVhZGVyc1snUHJlZmVyJ10gPSBwcmVmZXJzSGVhZGVycy5qb2luKCcsJyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQb3N0Z3Jlc3RGaWx0ZXJCdWlsZGVyXzEuZGVmYXVsdCh7XHJcbiAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgdXJsOiB0aGlzLnVybCxcclxuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hLFxyXG4gICAgICAgICAgICBib2R5OiB2YWx1ZXMsXHJcbiAgICAgICAgICAgIGZldGNoOiB0aGlzLmZldGNoLFxyXG4gICAgICAgICAgICBhbGxvd0VtcHR5OiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybSBhIERFTEVURSBvbiB0aGUgdGFibGUgb3Igdmlldy5cclxuICAgICAqXHJcbiAgICAgKiBCeSBkZWZhdWx0LCBkZWxldGVkIHJvd3MgYXJlIG5vdCByZXR1cm5lZC4gVG8gcmV0dXJuIGl0LCBjaGFpbiB0aGUgY2FsbFxyXG4gICAgICogd2l0aCBgLnNlbGVjdCgpYCBhZnRlciBmaWx0ZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gTmFtZWQgcGFyYW1ldGVyc1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmNvdW50IC0gQ291bnQgYWxnb3JpdGhtIHRvIHVzZSB0byBjb3VudCBkZWxldGVkIHJvd3MuXHJcbiAgICAgKlxyXG4gICAgICogYFwiZXhhY3RcImA6IEV4YWN0IGJ1dCBzbG93IGNvdW50IGFsZ29yaXRobS4gUGVyZm9ybXMgYSBgQ09VTlQoKilgIHVuZGVyIHRoZVxyXG4gICAgICogaG9vZC5cclxuICAgICAqXHJcbiAgICAgKiBgXCJwbGFubmVkXCJgOiBBcHByb3hpbWF0ZWQgYnV0IGZhc3QgY291bnQgYWxnb3JpdGhtLiBVc2VzIHRoZSBQb3N0Z3Jlc1xyXG4gICAgICogc3RhdGlzdGljcyB1bmRlciB0aGUgaG9vZC5cclxuICAgICAqXHJcbiAgICAgKiBgXCJlc3RpbWF0ZWRcImA6IFVzZXMgZXhhY3QgY291bnQgZm9yIGxvdyBudW1iZXJzIGFuZCBwbGFubmVkIGNvdW50IGZvciBoaWdoXHJcbiAgICAgKiBudW1iZXJzLlxyXG4gICAgICovXHJcbiAgICBkZWxldGUoeyBjb3VudCwgfSA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgbWV0aG9kID0gJ0RFTEVURSc7XHJcbiAgICAgICAgY29uc3QgcHJlZmVyc0hlYWRlcnMgPSBbXTtcclxuICAgICAgICBpZiAoY291bnQpIHtcclxuICAgICAgICAgICAgcHJlZmVyc0hlYWRlcnMucHVzaChgY291bnQ9JHtjb3VudH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyc1snUHJlZmVyJ10pIHtcclxuICAgICAgICAgICAgcHJlZmVyc0hlYWRlcnMudW5zaGlmdCh0aGlzLmhlYWRlcnNbJ1ByZWZlciddKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzWydQcmVmZXInXSA9IHByZWZlcnNIZWFkZXJzLmpvaW4oJywnKTtcclxuICAgICAgICByZXR1cm4gbmV3IFBvc3RncmVzdEZpbHRlckJ1aWxkZXJfMS5kZWZhdWx0KHtcclxuICAgICAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEsXHJcbiAgICAgICAgICAgIGZldGNoOiB0aGlzLmZldGNoLFxyXG4gICAgICAgICAgICBhbGxvd0VtcHR5OiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSBQb3N0Z3Jlc3RRdWVyeUJ1aWxkZXI7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBvc3RncmVzdFF1ZXJ5QnVpbGRlci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestQueryBuilder.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestTransformBuilder.js":
/*!***********************************************************************************!*\
!*** ./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestTransformBuilder.js ***!
\***********************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst PostgrestBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestBuilder */ \"(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestBuilder.js\"));\r\nclass PostgrestTransformBuilder extends PostgrestBuilder_1.default {\r\n /**\r\n * Perform a SELECT on the query result.\r\n *\r\n * By default, `.insert()`, `.update()`, `.upsert()`, and `.delete()` do not\r\n * return modified rows. By calling this method, modified rows are returned in\r\n * `data`.\r\n *\r\n * @param columns - The columns to retrieve, separated by commas\r\n */\r\n select(columns) {\r\n // Remove whitespaces except when quoted\r\n let quoted = false;\r\n const cleanedColumns = (columns !== null && columns !== void 0 ? columns : '*')\r\n .split('')\r\n .map((c) => {\r\n if (/\\s/.test(c) && !quoted) {\r\n return '';\r\n }\r\n if (c === '\"') {\r\n quoted = !quoted;\r\n }\r\n return c;\r\n })\r\n .join('');\r\n this.url.searchParams.set('select', cleanedColumns);\r\n if (this.headers['Prefer']) {\r\n this.headers['Prefer'] += ',';\r\n }\r\n this.headers['Prefer'] += 'return=representation';\r\n return this;\r\n }\r\n /**\r\n * Order the query result by `column`.\r\n *\r\n * You can call this method multiple times to order by multiple columns.\r\n *\r\n * You can order referenced tables, but it only affects the ordering of the\r\n * parent table if you use `!inner` in the query.\r\n *\r\n * @param column - The column to order by\r\n * @param options - Named parameters\r\n * @param options.ascending - If `true`, the result will be in ascending order\r\n * @param options.nullsFirst - If `true`, `null`s appear first. If `false`,\r\n * `null`s appear last.\r\n * @param options.referencedTable - Set this to order a referenced table by\r\n * its columns\r\n * @param options.foreignTable - Deprecated, use `options.referencedTable`\r\n * instead\r\n */\r\n order(column, { ascending = true, nullsFirst, foreignTable, referencedTable = foreignTable, } = {}) {\r\n const key = referencedTable ? `${referencedTable}.order` : 'order';\r\n const existingOrder = this.url.searchParams.get(key);\r\n this.url.searchParams.set(key, `${existingOrder ? `${existingOrder},` : ''}${column}.${ascending ? 'asc' : 'desc'}${nullsFirst === undefined ? '' : nullsFirst ? '.nullsfirst' : '.nullslast'}`);\r\n return this;\r\n }\r\n /**\r\n * Limit the query result by `count`.\r\n *\r\n * @param count - The maximum number of rows to return\r\n * @param options - Named parameters\r\n * @param options.referencedTable - Set this to limit rows of referenced\r\n * tables instead of the parent table\r\n * @param options.foreignTable - Deprecated, use `options.referencedTable`\r\n * instead\r\n */\r\n limit(count, { foreignTable, referencedTable = foreignTable, } = {}) {\r\n const key = typeof referencedTable === 'undefined' ? 'limit' : `${referencedTable}.limit`;\r\n this.url.searchParams.set(key, `${count}`);\r\n return this;\r\n }\r\n /**\r\n * Limit the query result by starting at an offset `from` and ending at the offset `to`.\r\n * Only records within this range are returned.\r\n * This respects the query order and if there is no order clause the range could behave unexpectedly.\r\n * The `from` and `to` values are 0-based and inclusive: `range(1, 3)` will include the second, third\r\n * and fourth rows of the query.\r\n *\r\n * @param from - The starting index from which to limit the result\r\n * @param to - The last index to which to limit the result\r\n * @param options - Named parameters\r\n * @param options.referencedTable - Set this to limit rows of referenced\r\n * tables instead of the parent table\r\n * @param options.foreignTable - Deprecated, use `options.referencedTable`\r\n * instead\r\n */\r\n range(from, to, { foreignTable, referencedTable = foreignTable, } = {}) {\r\n const keyOffset = typeof referencedTable === 'undefined' ? 'offset' : `${referencedTable}.offset`;\r\n const keyLimit = typeof referencedTable === 'undefined' ? 'limit' : `${referencedTable}.limit`;\r\n this.url.searchParams.set(keyOffset, `${from}`);\r\n // Range is inclusive, so add 1\r\n this.url.searchParams.set(keyLimit, `${to - from + 1}`);\r\n return this;\r\n }\r\n /**\r\n * Set the AbortSignal for the fetch request.\r\n *\r\n * @param signal - The AbortSignal to use for the fetch request\r\n */\r\n abortSignal(signal) {\r\n this.signal = signal;\r\n return this;\r\n }\r\n /**\r\n * Return `data` as a single object instead of an array of objects.\r\n *\r\n * Query result must be one row (e.g. using `.limit(1)`), otherwise this\r\n * returns an error.\r\n */\r\n single() {\r\n this.headers['Accept'] = 'application/vnd.pgrst.object+json';\r\n return this;\r\n }\r\n /**\r\n * Return `data` as a single object instead of an array of objects.\r\n *\r\n * Query result must be zero or one row (e.g. using `.limit(1)`), otherwise\r\n * this returns an error.\r\n */\r\n maybeSingle() {\r\n // Temporary partial fix for https://github.com/supabase/postgrest-js/issues/361\r\n // Issue persists e.g. for `.insert([...]).select().maybeSingle()`\r\n if (this.method === 'GET') {\r\n this.headers['Accept'] = 'application/json';\r\n }\r\n else {\r\n this.headers['Accept'] = 'application/vnd.pgrst.object+json';\r\n }\r\n this.isMaybeSingle = true;\r\n return this;\r\n }\r\n /**\r\n * Return `data` as a string in CSV format.\r\n */\r\n csv() {\r\n this.headers['Accept'] = 'text/csv';\r\n return this;\r\n }\r\n /**\r\n * Return `data` as an object in [GeoJSON](https://geojson.org) format.\r\n */\r\n geojson() {\r\n this.headers['Accept'] = 'application/geo+json';\r\n return this;\r\n }\r\n /**\r\n * Return `data` as the EXPLAIN plan for the query.\r\n *\r\n * You need to enable the\r\n * [db_plan_enabled](https://supabase.com/docs/guides/database/debugging-performance#enabling-explain)\r\n * setting before using this method.\r\n *\r\n * @param options - Named parameters\r\n *\r\n * @param options.analyze - If `true`, the query will be executed and the\r\n * actual run time will be returned\r\n *\r\n * @param options.verbose - If `true`, the query identifier will be returned\r\n * and `data` will include the output columns of the query\r\n *\r\n * @param options.settings - If `true`, include information on configuration\r\n * parameters that affect query planning\r\n *\r\n * @param options.buffers - If `true`, include information on buffer usage\r\n *\r\n * @param options.wal - If `true`, include information on WAL record generation\r\n *\r\n * @param options.format - The format of the output, can be `\"text\"` (default)\r\n * or `\"json\"`\r\n */\r\n explain({ analyze = false, verbose = false, settings = false, buffers = false, wal = false, format = 'text', } = {}) {\r\n var _a;\r\n const options = [\r\n analyze ? 'analyze' : null,\r\n verbose ? 'verbose' : null,\r\n settings ? 'settings' : null,\r\n buffers ? 'buffers' : null,\r\n wal ? 'wal' : null,\r\n ]\r\n .filter(Boolean)\r\n .join('|');\r\n // An Accept header can carry multiple media types but postgrest-js always sends one\r\n const forMediatype = (_a = this.headers['Accept']) !== null && _a !== void 0 ? _a : 'application/json';\r\n this.headers['Accept'] = `application/vnd.pgrst.plan+${format}; for=\"${forMediatype}\"; options=${options};`;\r\n if (format === 'json')\r\n return this;\r\n else\r\n return this;\r\n }\r\n /**\r\n * Rollback the query.\r\n *\r\n * `data` will still be returned, but the query is not committed.\r\n */\r\n rollback() {\r\n var _a;\r\n if (((_a = this.headers['Prefer']) !== null && _a !== void 0 ? _a : '').trim().length > 0) {\r\n this.headers['Prefer'] += ',tx=rollback';\r\n }\r\n else {\r\n this.headers['Prefer'] = 'tx=rollback';\r\n }\r\n return this;\r\n }\r\n /**\r\n * Override the type of the returned `data`.\r\n *\r\n * @typeParam NewResult - The new result type to override with\r\n * @deprecated Use overrideTypes<yourType, { merge: false }>() method at the end of your call chain instead\r\n */\r\n returns() {\r\n return this;\r\n }\r\n}\r\nexports[\"default\"] = PostgrestTransformBuilder;\r\n//# sourceMappingURL=PostgrestTransformBuilder.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Bvc3RncmVzdC1qcy9kaXN0L2Nqcy9Qb3N0Z3Jlc3RUcmFuc2Zvcm1CdWlsZGVyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsMkNBQTJDLG1CQUFPLENBQUMsb0dBQW9CO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiw4RUFBOEUsSUFBSTtBQUN0Ryx5Q0FBeUMsZ0JBQWdCO0FBQ3pEO0FBQ0EsMENBQTBDLG1CQUFtQixjQUFjLFFBQVEsRUFBRSxPQUFPLEdBQUcsMkJBQTJCLEVBQUUsMEVBQTBFO0FBQ3RNO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixnREFBZ0QsSUFBSTtBQUN2RSwwRUFBMEUsZ0JBQWdCO0FBQzFGLDBDQUEwQyxNQUFNO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsZ0RBQWdELElBQUk7QUFDMUUsaUZBQWlGLGdCQUFnQjtBQUNqRywrRUFBK0UsZ0JBQWdCO0FBQy9GLGdEQUFnRCxLQUFLO0FBQ3JEO0FBQ0EsK0NBQStDLGNBQWM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxxR0FBcUcsSUFBSTtBQUN2SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0QsU0FBUyxPQUFPLGFBQWEsR0FBRyxVQUFVLFNBQVM7QUFDbEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELGNBQWM7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Bvc3RncmVzdC1qcy9kaXN0L2Nqcy9Qb3N0Z3Jlc3RUcmFuc2Zvcm1CdWlsZGVyLmpzPzA3NjciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuY29uc3QgUG9zdGdyZXN0QnVpbGRlcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1Bvc3RncmVzdEJ1aWxkZXJcIikpO1xyXG5jbGFzcyBQb3N0Z3Jlc3RUcmFuc2Zvcm1CdWlsZGVyIGV4dGVuZHMgUG9zdGdyZXN0QnVpbGRlcl8xLmRlZmF1bHQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtIGEgU0VMRUNUIG9uIHRoZSBxdWVyeSByZXN1bHQuXHJcbiAgICAgKlxyXG4gICAgICogQnkgZGVmYXVsdCwgYC5pbnNlcnQoKWAsIGAudXBkYXRlKClgLCBgLnVwc2VydCgpYCwgYW5kIGAuZGVsZXRlKClgIGRvIG5vdFxyXG4gICAgICogcmV0dXJuIG1vZGlmaWVkIHJvd3MuIEJ5IGNhbGxpbmcgdGhpcyBtZXRob2QsIG1vZGlmaWVkIHJvd3MgYXJlIHJldHVybmVkIGluXHJcbiAgICAgKiBgZGF0YWAuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgLSBUaGUgY29sdW1ucyB0byByZXRyaWV2ZSwgc2VwYXJhdGVkIGJ5IGNvbW1hc1xyXG4gICAgICovXHJcbiAgICBzZWxlY3QoY29sdW1ucykge1xyXG4gICAgICAgIC8vIFJlbW92ZSB3aGl0ZXNwYWNlcyBleGNlcHQgd2hlbiBxdW90ZWRcclxuICAgICAgICBsZXQgcXVvdGVkID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgY2xlYW5lZENvbHVtbnMgPSAoY29sdW1ucyAhPT0gbnVsbCAmJiBjb2x1bW5zICE9PSB2b2lkIDAgPyBjb2x1bW5zIDogJyonKVxyXG4gICAgICAgICAgICAuc3BsaXQoJycpXHJcbiAgICAgICAgICAgIC5tYXAoKGMpID0+IHtcclxuICAgICAgICAgICAgaWYgKC9cXHMvLnRlc3QoYykgJiYgIXF1b3RlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjID09PSAnXCInKSB7XHJcbiAgICAgICAgICAgICAgICBxdW90ZWQgPSAhcXVvdGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5qb2luKCcnKTtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuc2V0KCdzZWxlY3QnLCBjbGVhbmVkQ29sdW1ucyk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyc1snUHJlZmVyJ10pIHtcclxuICAgICAgICAgICAgdGhpcy5oZWFkZXJzWydQcmVmZXInXSArPSAnLCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaGVhZGVyc1snUHJlZmVyJ10gKz0gJ3JldHVybj1yZXByZXNlbnRhdGlvbic7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE9yZGVyIHRoZSBxdWVyeSByZXN1bHQgYnkgYGNvbHVtbmAuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIG11bHRpcGxlIHRpbWVzIHRvIG9yZGVyIGJ5IG11bHRpcGxlIGNvbHVtbnMuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBvcmRlciByZWZlcmVuY2VkIHRhYmxlcywgYnV0IGl0IG9ubHkgYWZmZWN0cyB0aGUgb3JkZXJpbmcgb2YgdGhlXHJcbiAgICAgKiBwYXJlbnQgdGFibGUgaWYgeW91IHVzZSBgIWlubmVyYCBpbiB0aGUgcXVlcnkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbHVtbiAtIFRoZSBjb2x1bW4gdG8gb3JkZXIgYnlcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gTmFtZWQgcGFyYW1ldGVyc1xyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuYXNjZW5kaW5nIC0gSWYgYHRydWVgLCB0aGUgcmVzdWx0IHdpbGwgYmUgaW4gYXNjZW5kaW5nIG9yZGVyXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5udWxsc0ZpcnN0IC0gSWYgYHRydWVgLCBgbnVsbGBzIGFwcGVhciBmaXJzdC4gSWYgYGZhbHNlYCxcclxuICAgICAqIGBudWxsYHMgYXBwZWFyIGxhc3QuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5yZWZlcmVuY2VkVGFibGUgLSBTZXQgdGhpcyB0byBvcmRlciBhIHJlZmVyZW5jZWQgdGFibGUgYnlcclxuICAgICAqIGl0cyBjb2x1bW5zXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5mb3JlaWduVGFibGUgLSBEZXByZWNhdGVkLCB1c2UgYG9wdGlvbnMucmVmZXJlbmNlZFRhYmxlYFxyXG4gICAgICogaW5zdGVhZFxyXG4gICAgICovXHJcbiAgICBvcmRlcihjb2x1bW4sIHsgYXNjZW5kaW5nID0gdHJ1ZSwgbnVsbHNGaXJzdCwgZm9yZWlnblRhYmxlLCByZWZlcmVuY2VkVGFibGUgPSBmb3JlaWduVGFibGUsIH0gPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IHJlZmVyZW5jZWRUYWJsZSA/IGAke3JlZmVyZW5jZWRUYWJsZX0ub3JkZXJgIDogJ29yZGVyJztcclxuICAgICAgICBjb25zdCBleGlzdGluZ09yZGVyID0gdGhpcy51cmwuc2VhcmNoUGFyYW1zLmdldChrZXkpO1xyXG4gICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCBgJHtleGlzdGluZ09yZGVyID8gYCR7ZXhpc3RpbmdPcmRlcn0sYCA6ICcnfSR7Y29sdW1ufS4ke2FzY2VuZGluZyA/ICdhc2MnIDogJ2Rlc2MnfSR7bnVsbHNGaXJzdCA9PT0gdW5kZWZpbmVkID8gJycgOiBudWxsc0ZpcnN0ID8gJy5udWxsc2ZpcnN0JyA6ICcubnVsbHNsYXN0J31gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTGltaXQgdGhlIHF1ZXJ5IHJlc3VsdCBieSBgY291bnRgLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb3VudCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIHJldHVyblxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBOYW1lZCBwYXJhbWV0ZXJzXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5yZWZlcmVuY2VkVGFibGUgLSBTZXQgdGhpcyB0byBsaW1pdCByb3dzIG9mIHJlZmVyZW5jZWRcclxuICAgICAqIHRhYmxlcyBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQgdGFibGVcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmZvcmVpZ25UYWJsZSAtIERlcHJlY2F0ZWQsIHVzZSBgb3B0aW9ucy5yZWZlcmVuY2VkVGFibGVgXHJcbiAgICAgKiBpbnN0ZWFkXHJcbiAgICAgKi9cclxuICAgIGxpbWl0KGNvdW50LCB7IGZvcmVpZ25UYWJsZSwgcmVmZXJlbmNlZFRhYmxlID0gZm9yZWlnblRhYmxlLCB9ID0ge30pIHtcclxuICAgICAgICBjb25zdCBrZXkgPSB0eXBlb2YgcmVmZXJlbmNlZFRhYmxlID09PSAndW5kZWZpbmVkJyA/ICdsaW1pdCcgOiBgJHtyZWZlcmVuY2VkVGFibGV9LmxpbWl0YDtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuc2V0KGtleSwgYCR7Y291bnR9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIExpbWl0IHRoZSBxdWVyeSByZXN1bHQgYnkgc3RhcnRpbmcgYXQgYW4gb2Zmc2V0IGBmcm9tYCBhbmQgZW5kaW5nIGF0IHRoZSBvZmZzZXQgYHRvYC5cclxuICAgICAqIE9ubHkgcmVjb3JkcyB3aXRoaW4gdGhpcyByYW5nZSBhcmUgcmV0dXJuZWQuXHJcbiAgICAgKiBUaGlzIHJlc3BlY3RzIHRoZSBxdWVyeSBvcmRlciBhbmQgaWYgdGhlcmUgaXMgbm8gb3JkZXIgY2xhdXNlIHRoZSByYW5nZSBjb3VsZCBiZWhhdmUgdW5leHBlY3RlZGx5LlxyXG4gICAgICogVGhlIGBmcm9tYCBhbmQgYHRvYCB2YWx1ZXMgYXJlIDAtYmFzZWQgYW5kIGluY2x1c2l2ZTogYHJhbmdlKDEsIDMpYCB3aWxsIGluY2x1ZGUgdGhlIHNlY29uZCwgdGhpcmRcclxuICAgICAqIGFuZCBmb3VydGggcm93cyBvZiB0aGUgcXVlcnkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGZyb20gLSBUaGUgc3RhcnRpbmcgaW5kZXggZnJvbSB3aGljaCB0byBsaW1pdCB0aGUgcmVzdWx0XHJcbiAgICAgKiBAcGFyYW0gdG8gLSBUaGUgbGFzdCBpbmRleCB0byB3aGljaCB0byBsaW1pdCB0aGUgcmVzdWx0XHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE5hbWVkIHBhcmFtZXRlcnNcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLnJlZmVyZW5jZWRUYWJsZSAtIFNldCB0aGlzIHRvIGxpbWl0IHJvd3Mgb2YgcmVmZXJlbmNlZFxyXG4gICAgICogdGFibGVzIGluc3RlYWQgb2YgdGhlIHBhcmVudCB0YWJsZVxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZm9yZWlnblRhYmxlIC0gRGVwcmVjYXRlZCwgdXNlIGBvcHRpb25zLnJlZmVyZW5jZWRUYWJsZWBcclxuICAgICAqIGluc3RlYWRcclxuICAgICAqL1xyXG4gICAgcmFuZ2UoZnJvbSwgdG8sIHsgZm9yZWlnblRhYmxlLCByZWZlcmVuY2VkVGFibGUgPSBmb3JlaWduVGFibGUsIH0gPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IGtleU9mZnNldCA9IHR5cGVvZiByZWZlcmVuY2VkVGFibGUgPT09ICd1bmRlZmluZWQnID8gJ29mZnNldCcgOiBgJHtyZWZlcmVuY2VkVGFibGV9Lm9mZnNldGA7XHJcbiAgICAgICAgY29uc3Qga2V5TGltaXQgPSB0eXBlb2YgcmVmZXJlbmNlZFRhYmxlID09PSAndW5kZWZpbmVkJyA/ICdsaW1pdCcgOiBgJHtyZWZlcmVuY2VkVGFibGV9LmxpbWl0YDtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuc2V0KGtleU9mZnNldCwgYCR7ZnJvbX1gKTtcclxuICAgICAgICAvLyBSYW5nZSBpcyBpbmNsdXNpdmUsIHNvIGFkZCAxXHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLnNldChrZXlMaW1pdCwgYCR7dG8gLSBmcm9tICsgMX1gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBBYm9ydFNpZ25hbCBmb3IgdGhlIGZldGNoIHJlcXVlc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNpZ25hbCAtIFRoZSBBYm9ydFNpZ25hbCB0byB1c2UgZm9yIHRoZSBmZXRjaCByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGFib3J0U2lnbmFsKHNpZ25hbCkge1xyXG4gICAgICAgIHRoaXMuc2lnbmFsID0gc2lnbmFsO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gYGRhdGFgIGFzIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5IG9mIG9iamVjdHMuXHJcbiAgICAgKlxyXG4gICAgICogUXVlcnkgcmVzdWx0IG11c3QgYmUgb25lIHJvdyAoZS5nLiB1c2luZyBgLmxpbWl0KDEpYCksIG90aGVyd2lzZSB0aGlzXHJcbiAgICAgKiByZXR1cm5zIGFuIGVycm9yLlxyXG4gICAgICovXHJcbiAgICBzaW5nbGUoKSB7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzWydBY2NlcHQnXSA9ICdhcHBsaWNhdGlvbi92bmQucGdyc3Qub2JqZWN0K2pzb24nO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gYGRhdGFgIGFzIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5IG9mIG9iamVjdHMuXHJcbiAgICAgKlxyXG4gICAgICogUXVlcnkgcmVzdWx0IG11c3QgYmUgemVybyBvciBvbmUgcm93IChlLmcuIHVzaW5nIGAubGltaXQoMSlgKSwgb3RoZXJ3aXNlXHJcbiAgICAgKiB0aGlzIHJldHVybnMgYW4gZXJyb3IuXHJcbiAgICAgKi9cclxuICAgIG1heWJlU2luZ2xlKCkge1xyXG4gICAgICAgIC8vIFRlbXBvcmFyeSBwYXJ0aWFsIGZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL3N1cGFiYXNlL3Bvc3RncmVzdC1qcy9pc3N1ZXMvMzYxXHJcbiAgICAgICAgLy8gSXNzdWUgcGVyc2lzdHMgZS5nLiBmb3IgYC5pbnNlcnQoWy4uLl0pLnNlbGVjdCgpLm1heWJlU2luZ2xlKClgXHJcbiAgICAgICAgaWYgKHRoaXMubWV0aG9kID09PSAnR0VUJykge1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRlcnNbJ0FjY2VwdCddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5oZWFkZXJzWydBY2NlcHQnXSA9ICdhcHBsaWNhdGlvbi92bmQucGdyc3Qub2JqZWN0K2pzb24nO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzTWF5YmVTaW5nbGUgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gYGRhdGFgIGFzIGEgc3RyaW5nIGluIENTViBmb3JtYXQuXHJcbiAgICAgKi9cclxuICAgIGNzdigpIHtcclxuICAgICAgICB0aGlzLmhlYWRlcnNbJ0FjY2VwdCddID0gJ3RleHQvY3N2JztcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIGBkYXRhYCBhcyBhbiBvYmplY3QgaW4gW0dlb0pTT05dKGh0dHBzOi8vZ2VvanNvbi5vcmcpIGZvcm1hdC5cclxuICAgICAqL1xyXG4gICAgZ2VvanNvbigpIHtcclxuICAgICAgICB0aGlzLmhlYWRlcnNbJ0FjY2VwdCddID0gJ2FwcGxpY2F0aW9uL2dlbytqc29uJztcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIGBkYXRhYCBhcyB0aGUgRVhQTEFJTiBwbGFuIGZvciB0aGUgcXVlcnkuXHJcbiAgICAgKlxyXG4gICAgICogWW91IG5lZWQgdG8gZW5hYmxlIHRoZVxyXG4gICAgICogW2RiX3BsYW5fZW5hYmxlZF0oaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9ndWlkZXMvZGF0YWJhc2UvZGVidWdnaW5nLXBlcmZvcm1hbmNlI2VuYWJsaW5nLWV4cGxhaW4pXHJcbiAgICAgKiBzZXR0aW5nIGJlZm9yZSB1c2luZyB0aGlzIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE5hbWVkIHBhcmFtZXRlcnNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5hbmFseXplIC0gSWYgYHRydWVgLCB0aGUgcXVlcnkgd2lsbCBiZSBleGVjdXRlZCBhbmQgdGhlXHJcbiAgICAgKiBhY3R1YWwgcnVuIHRpbWUgd2lsbCBiZSByZXR1cm5lZFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLnZlcmJvc2UgLSBJZiBgdHJ1ZWAsIHRoZSBxdWVyeSBpZGVudGlmaWVyIHdpbGwgYmUgcmV0dXJuZWRcclxuICAgICAqIGFuZCBgZGF0YWAgd2lsbCBpbmNsdWRlIHRoZSBvdXRwdXQgY29sdW1ucyBvZiB0aGUgcXVlcnlcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5zZXR0aW5ncyAtIElmIGB0cnVlYCwgaW5jbHVkZSBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmF0aW9uXHJcbiAgICAgKiBwYXJhbWV0ZXJzIHRoYXQgYWZmZWN0IHF1ZXJ5IHBsYW5uaW5nXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuYnVmZmVycyAtIElmIGB0cnVlYCwgaW5jbHVkZSBpbmZvcm1hdGlvbiBvbiBidWZmZXIgdXNhZ2VcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy53YWwgLSBJZiBgdHJ1ZWAsIGluY2x1ZGUgaW5mb3JtYXRpb24gb24gV0FMIHJlY29yZCBnZW5lcmF0aW9uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZm9ybWF0IC0gVGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0LCBjYW4gYmUgYFwidGV4dFwiYCAoZGVmYXVsdClcclxuICAgICAqIG9yIGBcImpzb25cImBcclxuICAgICAqL1xyXG4gICAgZXhwbGFpbih7IGFuYWx5emUgPSBmYWxzZSwgdmVyYm9zZSA9IGZhbHNlLCBzZXR0aW5ncyA9IGZhbHNlLCBidWZmZXJzID0gZmFsc2UsIHdhbCA9IGZhbHNlLCBmb3JtYXQgPSAndGV4dCcsIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gW1xyXG4gICAgICAgICAgICBhbmFseXplID8gJ2FuYWx5emUnIDogbnVsbCxcclxuICAgICAgICAgICAgdmVyYm9zZSA/ICd2ZXJib3NlJyA6IG51bGwsXHJcbiAgICAgICAgICAgIHNldHRpbmdzID8gJ3NldHRpbmdzJyA6IG51bGwsXHJcbiAgICAgICAgICAgIGJ1ZmZlcnMgPyAnYnVmZmVycycgOiBudWxsLFxyXG4gICAgICAgICAgICB3YWwgPyAnd2FsJyA6IG51bGwsXHJcbiAgICAgICAgXVxyXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXHJcbiAgICAgICAgICAgIC5qb2luKCd8Jyk7XHJcbiAgICAgICAgLy8gQW4gQWNjZXB0IGhlYWRlciBjYW4gY2FycnkgbXVsdGlwbGUgbWVkaWEgdHlwZXMgYnV0IHBvc3RncmVzdC1qcyBhbHdheXMgc2VuZHMgb25lXHJcbiAgICAgICAgY29uc3QgZm9yTWVkaWF0eXBlID0gKF9hID0gdGhpcy5oZWFkZXJzWydBY2NlcHQnXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ2FwcGxpY2F0aW9uL2pzb24nO1xyXG4gICAgICAgIHRoaXMuaGVhZGVyc1snQWNjZXB0J10gPSBgYXBwbGljYXRpb24vdm5kLnBncnN0LnBsYW4rJHtmb3JtYXR9OyBmb3I9XCIke2Zvck1lZGlhdHlwZX1cIjsgb3B0aW9ucz0ke29wdGlvbnN9O2A7XHJcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSb2xsYmFjayB0aGUgcXVlcnkuXHJcbiAgICAgKlxyXG4gICAgICogYGRhdGFgIHdpbGwgc3RpbGwgYmUgcmV0dXJuZWQsIGJ1dCB0aGUgcXVlcnkgaXMgbm90IGNvbW1pdHRlZC5cclxuICAgICAqL1xyXG4gICAgcm9sbGJhY2soKSB7XHJcbiAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgIGlmICgoKF9hID0gdGhpcy5oZWFkZXJzWydQcmVmZXInXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJycpLnRyaW0oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyc1snUHJlZmVyJ10gKz0gJyx0eD1yb2xsYmFjayc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRlcnNbJ1ByZWZlciddID0gJ3R4PXJvbGxiYWNrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE92ZXJyaWRlIHRoZSB0eXBlIG9mIHRoZSByZXR1cm5lZCBgZGF0YWAuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGVQYXJhbSBOZXdSZXN1bHQgLSBUaGUgbmV3IHJlc3VsdCB0eXBlIHRvIG92ZXJyaWRlIHdpdGhcclxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBvdmVycmlkZVR5cGVzPHlvdXJUeXBlLCB7IG1lcmdlOiBmYWxzZSB9PigpIG1ldGhvZCBhdCB0aGUgZW5kIG9mIHlvdXIgY2FsbCBjaGFpbiBpbnN0ZWFkXHJcbiAgICAgKi9cclxuICAgIHJldHVybnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0gUG9zdGdyZXN0VHJhbnNmb3JtQnVpbGRlcjtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UG9zdGdyZXN0VHJhbnNmb3JtQnVpbGRlci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestTransformBuilder.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/constants.js":
/*!*******************************************************************!*\
!*** ./node_modules/@supabase/postgrest-js/dist/cjs/constants.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.DEFAULT_HEADERS = void 0;\r\nconst version_1 = __webpack_require__(/*! ./version */ \"(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/version.js\");\r\nexports.DEFAULT_HEADERS = { 'X-Client-Info': `postgrest-js/${version_1.version}` };\r\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Bvc3RncmVzdC1qcy9kaXN0L2Nqcy9jb25zdGFudHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsdUJBQXVCO0FBQ3ZCLGtCQUFrQixtQkFBTyxDQUFDLGtGQUFXO0FBQ3JDLHVCQUF1QixLQUFLLGlDQUFpQyxrQkFBa0I7QUFDL0UiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Bvc3RncmVzdC1qcy9kaXN0L2Nqcy9jb25zdGFudHMuanM/MzBmNiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLkRFRkFVTFRfSEVBREVSUyA9IHZvaWQgMDtcclxuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcclxuZXhwb3J0cy5ERUZBVUxUX0hFQURFUlMgPSB7ICdYLUNsaWVudC1JbmZvJzogYHBvc3RncmVzdC1qcy8ke3ZlcnNpb25fMS52ZXJzaW9ufWAgfTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/constants.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/index.js":
/*!***************************************************************!*\
!*** ./node_modules/@supabase/postgrest-js/dist/cjs/index.js ***!
\***************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.PostgrestError = exports.PostgrestBuilder = exports.PostgrestTransformBuilder = exports.PostgrestFilterBuilder = exports.PostgrestQueryBuilder = exports.PostgrestClient = void 0;\r\n// Always update wrapper.mjs when updating this file.\r\nconst PostgrestClient_1 = __importDefault(__webpack_require__(/*! ./PostgrestClient */ \"(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestClient.js\"));\r\nexports.PostgrestClient = PostgrestClient_1.default;\r\nconst PostgrestQueryBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestQueryBuilder */ \"(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestQueryBuilder.js\"));\r\nexports.PostgrestQueryBuilder = PostgrestQueryBuilder_1.default;\r\nconst PostgrestFilterBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestFilterBuilder */ \"(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestFilterBuilder.js\"));\r\nexports.PostgrestFilterBuilder = PostgrestFilterBuilder_1.default;\r\nconst PostgrestTransformBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestTransformBuilder */ \"(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestTransformBuilder.js\"));\r\nexports.PostgrestTransformBuilder = PostgrestTransformBuilder_1.default;\r\nconst PostgrestBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestBuilder */ \"(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestBuilder.js\"));\r\nexports.PostgrestBuilder = PostgrestBuilder_1.default;\r\nconst PostgrestError_1 = __importDefault(__webpack_require__(/*! ./PostgrestError */ \"(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestError.js\"));\r\nexports.PostgrestError = PostgrestError_1.default;\r\nexports[\"default\"] = {\r\n PostgrestClient: PostgrestClient_1.default,\r\n PostgrestQueryBuilder: PostgrestQueryBuilder_1.default,\r\n PostgrestFilterBuilder: PostgrestFilterBuilder_1.default,\r\n PostgrestTransformBuilder: PostgrestTransformBuilder_1.default,\r\n PostgrestBuilder: PostgrestBuilder_1.default,\r\n PostgrestError: PostgrestError_1.default,\r\n};\r\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Bvc3RncmVzdC1qcy9kaXN0L2Nqcy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHNCQUFzQixHQUFHLHdCQUF3QixHQUFHLGlDQUFpQyxHQUFHLDhCQUE4QixHQUFHLDZCQUE2QixHQUFHLHVCQUF1QjtBQUNoTDtBQUNBLDBDQUEwQyxtQkFBTyxDQUFDLGtHQUFtQjtBQUNyRSx1QkFBdUI7QUFDdkIsZ0RBQWdELG1CQUFPLENBQUMsOEdBQXlCO0FBQ2pGLDZCQUE2QjtBQUM3QixpREFBaUQsbUJBQU8sQ0FBQyxnSEFBMEI7QUFDbkYsOEJBQThCO0FBQzlCLG9EQUFvRCxtQkFBTyxDQUFDLHNIQUE2QjtBQUN6RixpQ0FBaUM7QUFDakMsMkNBQTJDLG1CQUFPLENBQUMsb0dBQW9CO0FBQ3ZFLHdCQUF3QjtBQUN4Qix5Q0FBeUMsbUJBQU8sQ0FBQyxnR0FBa0I7QUFDbkUsc0JBQXNCO0FBQ3RCLGtCQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRqcy8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcG9zdGdyZXN0LWpzL2Rpc3QvY2pzL2luZGV4LmpzP2M2NGIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5Qb3N0Z3Jlc3RFcnJvciA9IGV4cG9ydHMuUG9zdGdyZXN0QnVpbGRlciA9IGV4cG9ydHMuUG9zdGdyZXN0VHJhbnNmb3JtQnVpbGRlciA9IGV4cG9ydHMuUG9zdGdyZXN0RmlsdGVyQnVpbGRlciA9IGV4cG9ydHMuUG9zdGdyZXN0UXVlcnlCdWlsZGVyID0gZXhwb3J0cy5Qb3N0Z3Jlc3RDbGllbnQgPSB2b2lkIDA7XHJcbi8vIEFsd2F5cyB1cGRhdGUgd3JhcHBlci5tanMgd2hlbiB1cGRhdGluZyB0aGlzIGZpbGUuXHJcbmNvbnN0IFBvc3RncmVzdENsaWVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1Bvc3RncmVzdENsaWVudFwiKSk7XHJcbmV4cG9ydHMuUG9zdGdyZXN0Q2xpZW50ID0gUG9zdGdyZXN0Q2xpZW50XzEuZGVmYXVsdDtcclxuY29uc3QgUG9zdGdyZXN0UXVlcnlCdWlsZGVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vUG9zdGdyZXN0UXVlcnlCdWlsZGVyXCIpKTtcclxuZXhwb3J0cy5Qb3N0Z3Jlc3RRdWVyeUJ1aWxkZXIgPSBQb3N0Z3Jlc3RRdWVyeUJ1aWxkZXJfMS5kZWZhdWx0O1xyXG5jb25zdCBQb3N0Z3Jlc3RGaWx0ZXJCdWlsZGVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vUG9zdGdyZXN0RmlsdGVyQnVpbGRlclwiKSk7XHJcbmV4cG9ydHMuUG9zdGdyZXN0RmlsdGVyQnVpbGRlciA9IFBvc3RncmVzdEZpbHRlckJ1aWxkZXJfMS5kZWZhdWx0O1xyXG5jb25zdCBQb3N0Z3Jlc3RUcmFuc2Zvcm1CdWlsZGVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vUG9zdGdyZXN0VHJhbnNmb3JtQnVpbGRlclwiKSk7XHJcbmV4cG9ydHMuUG9zdGdyZXN0VHJhbnNmb3JtQnVpbGRlciA9IFBvc3RncmVzdFRyYW5zZm9ybUJ1aWxkZXJfMS5kZWZhdWx0O1xyXG5jb25zdCBQb3N0Z3Jlc3RCdWlsZGVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vUG9zdGdyZXN0QnVpbGRlclwiKSk7XHJcbmV4cG9ydHMuUG9zdGdyZXN0QnVpbGRlciA9IFBvc3RncmVzdEJ1aWxkZXJfMS5kZWZhdWx0O1xyXG5jb25zdCBQb3N0Z3Jlc3RFcnJvcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1Bvc3RncmVzdEVycm9yXCIpKTtcclxuZXhwb3J0cy5Qb3N0Z3Jlc3RFcnJvciA9IFBvc3RncmVzdEVycm9yXzEuZGVmYXVsdDtcclxuZXhwb3J0cy5kZWZhdWx0ID0ge1xyXG4gICAgUG9zdGdyZXN0Q2xpZW50OiBQb3N0Z3Jlc3RDbGllbnRfMS5kZWZhdWx0LFxyXG4gICAgUG9zdGdyZXN0UXVlcnlCdWlsZGVyOiBQb3N0Z3Jlc3RRdWVyeUJ1aWxkZXJfMS5kZWZhdWx0LFxyXG4gICAgUG9zdGdyZXN0RmlsdGVyQnVpbGRlcjogUG9zdGdyZXN0RmlsdGVyQnVpbGRlcl8xLmRlZmF1bHQsXHJcbiAgICBQb3N0Z3Jlc3RUcmFuc2Zvcm1CdWlsZGVyOiBQb3N0Z3Jlc3RUcmFuc2Zvcm1CdWlsZGVyXzEuZGVmYXVsdCxcclxuICAgIFBvc3RncmVzdEJ1aWxkZXI6IFBvc3RncmVzdEJ1aWxkZXJfMS5kZWZhdWx0LFxyXG4gICAgUG9zdGdyZXN0RXJyb3I6IFBvc3RncmVzdEVycm9yXzEuZGVmYXVsdCxcclxufTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/index.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/version.js":
/*!*****************************************************************!*\
!*** ./node_modules/@supabase/postgrest-js/dist/cjs/version.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.version = void 0;\r\nexports.version = '0.0.0-automated';\r\n//# sourceMappingURL=version.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Bvc3RncmVzdC1qcy9kaXN0L2Nqcy92ZXJzaW9uLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGVBQWU7QUFDZixlQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Bvc3RncmVzdC1qcy9kaXN0L2Nqcy92ZXJzaW9uLmpzPzU1MDYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy52ZXJzaW9uID0gdm9pZCAwO1xyXG5leHBvcnRzLnZlcnNpb24gPSAnMC4wLjAtYXV0b21hdGVkJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/version.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/realtime-js/dist/main/RealtimeChannel.js":
/*!*************************************************************************!*\
!*** ./node_modules/@supabase/realtime-js/dist/main/RealtimeChannel.js ***!
\*************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || (function () {\r\n var ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n };\r\n return function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n };\r\n})();\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.REALTIME_CHANNEL_STATES = exports.REALTIME_SUBSCRIBE_STATES = exports.REALTIME_LISTEN_TYPES = exports.REALTIME_POSTGRES_CHANGES_LISTEN_EVENT = void 0;\r\nconst constants_1 = __webpack_require__(/*! ./lib/constants */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/constants.js\");\r\nconst push_1 = __importDefault(__webpack_require__(/*! ./lib/push */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/push.js\"));\r\nconst timer_1 = __importDefault(__webpack_require__(/*! ./lib/timer */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/timer.js\"));\r\nconst RealtimePresence_1 = __importDefault(__webpack_require__(/*! ./RealtimePresence */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/RealtimePresence.js\"));\r\nconst Transformers = __importStar(__webpack_require__(/*! ./lib/transformers */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/transformers.js\"));\r\nconst transformers_1 = __webpack_require__(/*! ./lib/transformers */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/transformers.js\");\r\nvar REALTIME_POSTGRES_CHANGES_LISTEN_EVENT;\r\n(function (REALTIME_POSTGRES_CHANGES_LISTEN_EVENT) {\r\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"ALL\"] = \"*\";\r\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"INSERT\"] = \"INSERT\";\r\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"UPDATE\"] = \"UPDATE\";\r\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"DELETE\"] = \"DELETE\";\r\n})(REALTIME_POSTGRES_CHANGES_LISTEN_EVENT || (exports.REALTIME_POSTGRES_CHANGES_LISTEN_EVENT = REALTIME_POSTGRES_CHANGES_LISTEN_EVENT = {}));\r\nvar REALTIME_LISTEN_TYPES;\r\n(function (REALTIME_LISTEN_TYPES) {\r\n REALTIME_LISTEN_TYPES[\"BROADCAST\"] = \"broadcast\";\r\n REALTIME_LISTEN_TYPES[\"PRESENCE\"] = \"presence\";\r\n REALTIME_LISTEN_TYPES[\"POSTGRES_CHANGES\"] = \"postgres_changes\";\r\n REALTIME_LISTEN_TYPES[\"SYSTEM\"] = \"system\";\r\n})(REALTIME_LISTEN_TYPES || (exports.REALTIME_LISTEN_TYPES = REALTIME_LISTEN_TYPES = {}));\r\nvar REALTIME_SUBSCRIBE_STATES;\r\n(function (REALTIME_SUBSCRIBE_STATES) {\r\n REALTIME_SUBSCRIBE_STATES[\"SUBSCRIBED\"] = \"SUBSCRIBED\";\r\n REALTIME_SUBSCRIBE_STATES[\"TIMED_OUT\"] = \"TIMED_OUT\";\r\n REALTIME_SUBSCRIBE_STATES[\"CLOSED\"] = \"CLOSED\";\r\n REALTIME_SUBSCRIBE_STATES[\"CHANNEL_ERROR\"] = \"CHANNEL_ERROR\";\r\n})(REALTIME_SUBSCRIBE_STATES || (exports.REALTIME_SUBSCRIBE_STATES = REALTIME_SUBSCRIBE_STATES = {}));\r\nexports.REALTIME_CHANNEL_STATES = constants_1.CHANNEL_STATES;\r\n/** A channel is the basic building block of Realtime\r\n * and narrows the scope of data flow to subscribed clients.\r\n * You can think of a channel as a chatroom where participants are able to see who's online\r\n * and send and receive messages.\r\n */\r\nclass RealtimeChannel {\r\n constructor(\r\n /** Topic name can be any string. */\r\n topic, params = { config: {} }, socket) {\r\n this.topic = topic;\r\n this.params = params;\r\n this.socket = socket;\r\n this.bindings = {};\r\n this.state = constants_1.CHANNEL_STATES.closed;\r\n this.joinedOnce = false;\r\n this.pushBuffer = [];\r\n this.subTopic = topic.replace(/^realtime:/i, '');\r\n this.params.config = Object.assign({\r\n broadcast: { ack: false, self: false },\r\n presence: { key: '' },\r\n private: false,\r\n }, params.config);\r\n this.timeout = this.socket.timeout;\r\n this.joinPush = new push_1.default(this, constants_1.CHANNEL_EVENTS.join, this.params, this.timeout);\r\n this.rejoinTimer = new timer_1.default(() => this._rejoinUntilConnected(), this.socket.reconnectAfterMs);\r\n this.joinPush.receive('ok', () => {\r\n this.state = constants_1.CHANNEL_STATES.joined;\r\n this.rejoinTimer.reset();\r\n this.pushBuffer.forEach((pushEvent) => pushEvent.send());\r\n this.pushBuffer = [];\r\n });\r\n this._onClose(() => {\r\n this.rejoinTimer.reset();\r\n this.socket.log('channel', `close ${this.topic} ${this._joinRef()}`);\r\n this.state = constants_1.CHANNEL_STATES.closed;\r\n this.socket._remove(this);\r\n });\r\n this._onError((reason) => {\r\n if (this._isLeaving() || this._isClosed()) {\r\n return;\r\n }\r\n this.socket.log('channel', `error ${this.topic}`, reason);\r\n this.state = constants_1.CHANNEL_STATES.errored;\r\n this.rejoinTimer.scheduleTimeout();\r\n });\r\n this.joinPush.receive('timeout', () => {\r\n if (!this._isJoining()) {\r\n return;\r\n }\r\n this.socket.log('channel', `timeout ${this.topic}`, this.joinPush.timeout);\r\n this.state = constants_1.CHANNEL_STATES.errored;\r\n this.rejoinTimer.scheduleTimeout();\r\n });\r\n this._on(constants_1.CHANNEL_EVENTS.reply, {}, (payload, ref) => {\r\n this._trigger(this._replyEventName(ref), payload);\r\n });\r\n this.presence = new RealtimePresence_1.default(this);\r\n this.broadcastEndpointURL =\r\n (0, transformers_1.httpEndpointURL)(this.socket.endPoint) + '/api/broadcast';\r\n this.private = this.params.config.private || false;\r\n }\r\n /** Subscribe registers your client with the server */\r\n subscribe(callback, timeout = this.timeout) {\r\n var _a, _b;\r\n if (!this.socket.isConnected()) {\r\n this.socket.connect();\r\n }\r\n if (this.state == constants_1.CHANNEL_STATES.closed) {\r\n const { config: { broadcast, presence, private: isPrivate }, } = this.params;\r\n this._onError((e) => callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, e));\r\n this._onClose(() => callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CLOSED));\r\n const accessTokenPayload = {};\r\n const config = {\r\n broadcast,\r\n presence,\r\n postgres_changes: (_b = (_a = this.bindings.postgres_changes) === null || _a === void 0 ? void 0 : _a.map((r) => r.filter)) !== null && _b !== void 0 ? _b : [],\r\n private: isPrivate,\r\n };\r\n if (this.socket.accessTokenValue) {\r\n accessTokenPayload.access_token = this.socket.accessTokenValue;\r\n }\r\n this.updateJoinPayload(Object.assign({ config }, accessTokenPayload));\r\n this.joinedOnce = true;\r\n this._rejoin(timeout);\r\n this.joinPush\r\n .receive('ok', async ({ postgres_changes }) => {\r\n var _a;\r\n this.socket.setAuth();\r\n if (postgres_changes === undefined) {\r\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.SUBSCRIBED);\r\n return;\r\n }\r\n else {\r\n const clientPostgresBindings = this.bindings.postgres_changes;\r\n const bindingsLen = (_a = clientPostgresBindings === null || clientPostgresBindings === void 0 ? void 0 : clientPostgresBindings.length) !== null && _a !== void 0 ? _a : 0;\r\n const newPostgresBindings = [];\r\n for (let i = 0; i < bindingsLen; i++) {\r\n const clientPostgresBinding = clientPostgresBindings[i];\r\n const { filter: { event, schema, table, filter }, } = clientPostgresBinding;\r\n const serverPostgresFilter = postgres_changes && postgres_changes[i];\r\n if (serverPostgresFilter &&\r\n serverPostgresFilter.event === event &&\r\n serverPostgresFilter.schema === schema &&\r\n serverPostgresFilter.table === table &&\r\n serverPostgresFilter.filter === filter) {\r\n newPostgresBindings.push(Object.assign(Object.assign({}, clientPostgresBinding), { id: serverPostgresFilter.id }));\r\n }\r\n else {\r\n this.unsubscribe();\r\n this.state = constants_1.CHANNEL_STATES.errored;\r\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, new Error('mismatch between server and client bindings for postgres changes'));\r\n return;\r\n }\r\n }\r\n this.bindings.postgres_changes = newPostgresBindings;\r\n callback && callback(REALTIME_SUBSCRIBE_STATES.SUBSCRIBED);\r\n return;\r\n }\r\n })\r\n .receive('error', (error) => {\r\n this.state = constants_1.CHANNEL_STATES.errored;\r\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, new Error(JSON.stringify(Object.values(error).join(', ') || 'error')));\r\n return;\r\n })\r\n .receive('timeout', () => {\r\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.TIMED_OUT);\r\n return;\r\n });\r\n }\r\n return this;\r\n }\r\n presenceState() {\r\n return this.presence.state;\r\n }\r\n async track(payload, opts = {}) {\r\n return await this.send({\r\n type: 'presence',\r\n event: 'track',\r\n payload,\r\n }, opts.timeout || this.timeout);\r\n }\r\n async untrack(opts = {}) {\r\n return await this.send({\r\n type: 'presence',\r\n event: 'untrack',\r\n }, opts);\r\n }\r\n on(type, filter, callback) {\r\n return this._on(type, filter, callback);\r\n }\r\n /**\r\n * Sends a message into the channel.\r\n *\r\n * @param args Arguments to send to channel\r\n * @param args.type The type of event to send\r\n * @param args.event The name of the event being sent\r\n * @param args.payload Payload to be sent\r\n * @param opts Options to be used during the send process\r\n */\r\n async send(args, opts = {}) {\r\n var _a, _b;\r\n if (!this._canPush() && args.type === 'broadcast') {\r\n const { event, payload: endpoint_payload } = args;\r\n const authorization = this.socket.accessTokenValue\r\n ? `Bearer ${this.socket.accessTokenValue}`\r\n : '';\r\n const options = {\r\n method: 'POST',\r\n headers: {\r\n Authorization: authorization,\r\n apikey: this.socket.apiKey ? this.socket.apiKey : '',\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n messages: [\r\n {\r\n topic: this.subTopic,\r\n event,\r\n payload: endpoint_payload,\r\n private: this.private,\r\n },\r\n ],\r\n }),\r\n };\r\n try {\r\n const response = await this._fetchWithTimeout(this.broadcastEndpointURL, options, (_a = opts.timeout) !== null && _a !== void 0 ? _a : this.timeout);\r\n await ((_b = response.body) === null || _b === void 0 ? void 0 : _b.cancel());\r\n return response.ok ? 'ok' : 'error';\r\n }\r\n catch (error) {\r\n if (error.name === 'AbortError') {\r\n return 'timed out';\r\n }\r\n else {\r\n return 'error';\r\n }\r\n }\r\n }\r\n else {\r\n return new Promise((resolve) => {\r\n var _a, _b, _c;\r\n const push = this._push(args.type, args, opts.timeout || this.timeout);\r\n if (args.type === 'broadcast' && !((_c = (_b = (_a = this.params) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b.broadcast) === null || _c === void 0 ? void 0 : _c.ack)) {\r\n resolve('ok');\r\n }\r\n push.receive('ok', () => resolve('ok'));\r\n push.receive('error', () => resolve('error'));\r\n push.receive('timeout', () => resolve('timed out'));\r\n });\r\n }\r\n }\r\n updateJoinPayload(payload) {\r\n this.joinPush.updatePayload(payload);\r\n }\r\n /**\r\n * Leaves the channel.\r\n *\r\n * Unsubscribes from server events, and instructs channel to terminate on server.\r\n * Triggers onClose() hooks.\r\n *\r\n * To receive leave acknowledgements, use the a `receive` hook to bind to the server ack, ie:\r\n * channel.unsubscribe().receive(\"ok\", () => alert(\"left!\") )\r\n */\r\n unsubscribe(timeout = this.timeout) {\r\n this.state = constants_1.CHANNEL_STATES.leaving;\r\n const onClose = () => {\r\n this.socket.log('channel', `leave ${this.topic}`);\r\n this._trigger(constants_1.CHANNEL_EVENTS.close, 'leave', this._joinRef());\r\n };\r\n this.joinPush.destroy();\r\n let leavePush = null;\r\n return new Promise((resolve) => {\r\n leavePush = new push_1.default(this, constants_1.CHANNEL_EVENTS.leave, {}, timeout);\r\n leavePush\r\n .receive('ok', () => {\r\n onClose();\r\n resolve('ok');\r\n })\r\n .receive('timeout', () => {\r\n onClose();\r\n resolve('timed out');\r\n })\r\n .receive('error', () => {\r\n resolve('error');\r\n });\r\n leavePush.send();\r\n if (!this._canPush()) {\r\n leavePush.trigger('ok', {});\r\n }\r\n }).finally(() => {\r\n leavePush === null || leavePush === void 0 ? void 0 : leavePush.destroy();\r\n });\r\n }\r\n /**\r\n * Teardown the channel.\r\n *\r\n * Destroys and stops related timers.\r\n */\r\n teardown() {\r\n this.pushBuffer.forEach((push) => push.destroy());\r\n this.rejoinTimer && clearTimeout(this.rejoinTimer.timer);\r\n this.joinPush.destroy();\r\n }\r\n /** @internal */\r\n async _fetchWithTimeout(url, options, timeout) {\r\n const controller = new AbortController();\r\n const id = setTimeout(() => controller.abort(), timeout);\r\n const response = await this.socket.fetch(url, Object.assign(Object.assign({}, options), { signal: controller.signal }));\r\n clearTimeout(id);\r\n return response;\r\n }\r\n /** @internal */\r\n _push(event, payload, timeout = this.timeout) {\r\n if (!this.joinedOnce) {\r\n throw `tried to push '${event}' to '${this.topic}' before joining. Use channel.subscribe() before pushing events`;\r\n }\r\n let pushEvent = new push_1.default(this, event, payload, timeout);\r\n if (this._canPush()) {\r\n pushEvent.send();\r\n }\r\n else {\r\n pushEvent.startTimeout();\r\n this.pushBuffer.push(pushEvent);\r\n }\r\n return pushEvent;\r\n }\r\n /**\r\n * Overridable message hook\r\n *\r\n * Receives all events for specialized message handling before dispatching to the channel callbacks.\r\n * Must return the payload, modified or unmodified.\r\n *\r\n * @internal\r\n */\r\n _onMessage(_event, payload, _ref) {\r\n return payload;\r\n }\r\n /** @internal */\r\n _isMember(topic) {\r\n return this.topic === topic;\r\n }\r\n /** @internal */\r\n _joinRef() {\r\n return this.joinPush.ref;\r\n }\r\n /** @internal */\r\n _trigger(type, payload, ref) {\r\n var _a, _b;\r\n const typeLower = type.toLocaleLowerCase();\r\n const { close, error, leave, join } = constants_1.CHANNEL_EVENTS;\r\n const events = [close, error, leave, join];\r\n if (ref && events.indexOf(typeLower) >= 0 && ref !== this._joinRef()) {\r\n return;\r\n }\r\n let handledPayload = this._onMessage(typeLower, payload, ref);\r\n if (payload && !handledPayload) {\r\n throw 'channel onMessage callbacks must return the payload, modified or unmodified';\r\n }\r\n if (['insert', 'update', 'delete'].includes(typeLower)) {\r\n (_a = this.bindings.postgres_changes) === null || _a === void 0 ? void 0 : _a.filter((bind) => {\r\n var _a, _b, _c;\r\n return (((_a = bind.filter) === null || _a === void 0 ? void 0 : _a.event) === '*' ||\r\n ((_c = (_b = bind.filter) === null || _b === void 0 ? void 0 : _b.event) === null || _c === void 0 ? void 0 : _c.toLocaleLowerCase()) === typeLower);\r\n }).map((bind) => bind.callback(handledPayload, ref));\r\n }\r\n else {\r\n (_b = this.bindings[typeLower]) === null || _b === void 0 ? void 0 : _b.filter((bind) => {\r\n var _a, _b, _c, _d, _e, _f;\r\n if (['broadcast', 'presence', 'postgres_changes'].includes(typeLower)) {\r\n if ('id' in bind) {\r\n const bindId = bind.id;\r\n const bindEvent = (_a = bind.filter) === null || _a === void 0 ? void 0 : _a.event;\r\n return (bindId &&\r\n ((_b = payload.ids) === null || _b === void 0 ? void 0 : _b.includes(bindId)) &&\r\n (bindEvent === '*' ||\r\n (bindEvent === null || bindEvent === void 0 ? void 0 : bindEvent.toLocaleLowerCase()) ===\r\n ((_c = payload.data) === null || _c === void 0 ? void 0 : _c.type.toLocaleLowerCase())));\r\n }\r\n else {\r\n const bindEvent = (_e = (_d = bind === null || bind === void 0 ? void 0 : bind.filter) === null || _d === void 0 ? void 0 : _d.event) === null || _e === void 0 ? void 0 : _e.toLocaleLowerCase();\r\n return (bindEvent === '*' ||\r\n bindEvent === ((_f = payload === null || payload === void 0 ? void 0 : payload.event) === null || _f === void 0 ? void 0 : _f.toLocaleLowerCase()));\r\n }\r\n }\r\n else {\r\n return bind.type.toLocaleLowerCase() === typeLower;\r\n }\r\n }).map((bind) => {\r\n if (typeof handledPayload === 'object' && 'ids' in handledPayload) {\r\n const postgresChanges = handledPayload.data;\r\n const { schema, table, commit_timestamp, type, errors } = postgresChanges;\r\n const enrichedPayload = {\r\n schema: schema,\r\n table: table,\r\n commit_timestamp: commit_timestamp,\r\n eventType: type,\r\n new: {},\r\n old: {},\r\n errors: errors,\r\n };\r\n handledPayload = Object.assign(Object.assign({}, enrichedPayload), this._getPayloadRecords(postgresChanges));\r\n }\r\n bind.callback(handledPayload, ref);\r\n });\r\n }\r\n }\r\n /** @internal */\r\n _isClosed() {\r\n return this.state === constants_1.CHANNEL_STATES.closed;\r\n }\r\n /** @internal */\r\n _isJoined() {\r\n return this.state === constants_1.CHANNEL_STATES.joined;\r\n }\r\n /** @internal */\r\n _isJoining() {\r\n return this.state === constants_1.CHANNEL_STATES.joining;\r\n }\r\n /** @internal */\r\n _isLeaving() {\r\n return this.state === constants_1.CHANNEL_STATES.leaving;\r\n }\r\n /** @internal */\r\n _replyEventName(ref) {\r\n return `chan_reply_${ref}`;\r\n }\r\n /** @internal */\r\n _on(type, filter, callback) {\r\n const typeLower = type.toLocaleLowerCase();\r\n const binding = {\r\n type: typeLower,\r\n filter: filter,\r\n callback: callback,\r\n };\r\n if (this.bindings[typeLower]) {\r\n this.bindings[typeLower].push(binding);\r\n }\r\n else {\r\n this.bindings[typeLower] = [binding];\r\n }\r\n return this;\r\n }\r\n /** @internal */\r\n _off(type, filter) {\r\n const typeLower = type.toLocaleLowerCase();\r\n this.bindings[typeLower] = this.bindings[typeLower].filter((bind) => {\r\n var _a;\r\n return !(((_a = bind.type) === null || _a === void 0 ? void 0 : _a.toLocaleLowerCase()) === typeLower &&\r\n RealtimeChannel.isEqual(bind.filter, filter));\r\n });\r\n return this;\r\n }\r\n /** @internal */\r\n static isEqual(obj1, obj2) {\r\n if (Object.keys(obj1).length !== Object.keys(obj2).length) {\r\n return false;\r\n }\r\n for (const k in obj1) {\r\n if (obj1[k] !== obj2[k]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n /** @internal */\r\n _rejoinUntilConnected() {\r\n this.rejoinTimer.scheduleTimeout();\r\n if (this.socket.isConnected()) {\r\n this._rejoin();\r\n }\r\n }\r\n /**\r\n * Registers a callback that will be executed when the channel closes.\r\n *\r\n * @internal\r\n */\r\n _onClose(callback) {\r\n this._on(constants_1.CHANNEL_EVENTS.close, {}, callback);\r\n }\r\n /**\r\n * Registers a callback that will be executed when the channel encounteres an error.\r\n *\r\n * @internal\r\n */\r\n _onError(callback) {\r\n this._on(constants_1.CHANNEL_EVENTS.error, {}, (reason) => callback(reason));\r\n }\r\n /**\r\n * Returns `true` if the socket is connected and the channel has been joined.\r\n *\r\n * @internal\r\n */\r\n _canPush() {\r\n return this.socket.isConnected() && this._isJoined();\r\n }\r\n /** @internal */\r\n _rejoin(timeout = this.timeout) {\r\n if (this._isLeaving()) {\r\n return;\r\n }\r\n this.socket._leaveOpenTopic(this.topic);\r\n this.state = constants_1.CHANNEL_STATES.joining;\r\n this.joinPush.resend(timeout);\r\n }\r\n /** @internal */\r\n _getPayloadRecords(payload) {\r\n const records = {\r\n new: {},\r\n old: {},\r\n };\r\n if (payload.type === 'INSERT' || payload.type === 'UPDATE') {\r\n records.new = Transformers.convertChangeData(payload.columns, payload.record);\r\n }\r\n if (payload.type === 'UPDATE' || payload.type === 'DELETE') {\r\n records.old = Transformers.convertChangeData(payload.columns, payload.old_record);\r\n }\r\n return records;\r\n }\r\n}\r\nexports[\"default\"] = RealtimeChannel;\r\n//# sourceMappingURL=RealtimeChannel.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbWFpbi9SZWFsdGltZUNoYW5uZWwuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0NBQW9DO0FBQ25EO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLDBDQUEwQyw0QkFBNEI7QUFDdEUsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxjQUFjO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLDZDQUE2QztBQUM3QztBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCwrQkFBK0IsR0FBRyxpQ0FBaUMsR0FBRyw2QkFBNkIsR0FBRyw4Q0FBOEM7QUFDcEosb0JBQW9CLG1CQUFPLENBQUMsOEZBQWlCO0FBQzdDLCtCQUErQixtQkFBTyxDQUFDLG9GQUFZO0FBQ25ELGdDQUFnQyxtQkFBTyxDQUFDLHNGQUFhO0FBQ3JELDJDQUEyQyxtQkFBTyxDQUFDLG9HQUFvQjtBQUN2RSxrQ0FBa0MsbUJBQU8sQ0FBQyxvR0FBb0I7QUFDOUQsdUJBQXVCLG1CQUFPLENBQUMsb0dBQW9CO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsNkNBQTZDLDhDQUE4Qyw4Q0FBOEM7QUFDMUk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyw0QkFBNEIsNkJBQTZCLDZCQUE2QjtBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGdDQUFnQyxpQ0FBaUMsaUNBQWlDO0FBQ25HLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLFlBQVk7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLHlCQUF5QjtBQUNsRCx3QkFBd0IsU0FBUztBQUNqQztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxnREFBZ0QsWUFBWSxFQUFFLGdCQUFnQjtBQUM5RTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELFdBQVc7QUFDM0Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxXQUFXO0FBQzdEO0FBQ0E7QUFDQSxTQUFTO0FBQ1QscURBQXFEO0FBQ3JEO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixVQUFVLHlDQUF5QyxJQUFJO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxRQUFRO0FBQzNEO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxrQkFBa0I7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsaUJBQWlCO0FBQ3JEO0FBQ0EsZ0NBQWdDLFVBQVUsOEJBQThCLElBQUk7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUZBQW1GLDRCQUE0Qiw2QkFBNkI7QUFDNUk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQSxvQkFBb0IsbUNBQW1DO0FBQ3ZEO0FBQ0EsNEJBQTRCLDZCQUE2QjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELFdBQVc7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFGQUFxRjtBQUNyRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9GQUFvRixjQUFjLDJCQUEyQjtBQUM3SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsTUFBTSxRQUFRLFdBQVc7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLDRCQUE0QixnREFBZ0Q7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQiwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBLG1FQUFtRTtBQUNuRTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsSUFBSTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQixtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9yZWFsdGltZS1qcy9kaXN0L21haW4vUmVhbHRpbWVDaGFubmVsLmpzPzQ0MWIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pKTtcclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59KTtcclxudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIG93bktleXMgPSBmdW5jdGlvbihvKSB7XHJcbiAgICAgICAgb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgICAgIHZhciBhciA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xyXG4gICAgICAgICAgICByZXR1cm4gYXI7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gb3duS2V5cyhvKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IG93bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XHJcbiAgICAgICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxufSkoKTtcclxudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLlJFQUxUSU1FX0NIQU5ORUxfU1RBVEVTID0gZXhwb3J0cy5SRUFMVElNRV9TVUJTQ1JJQkVfU1RBVEVTID0gZXhwb3J0cy5SRUFMVElNRV9MSVNURU5fVFlQRVMgPSBleHBvcnRzLlJFQUxUSU1FX1BPU1RHUkVTX0NIQU5HRVNfTElTVEVOX0VWRU5UID0gdm9pZCAwO1xyXG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2xpYi9jb25zdGFudHNcIik7XHJcbmNvbnN0IHB1c2hfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9saWIvcHVzaFwiKSk7XHJcbmNvbnN0IHRpbWVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vbGliL3RpbWVyXCIpKTtcclxuY29uc3QgUmVhbHRpbWVQcmVzZW5jZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1JlYWx0aW1lUHJlc2VuY2VcIikpO1xyXG5jb25zdCBUcmFuc2Zvcm1lcnMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vbGliL3RyYW5zZm9ybWVyc1wiKSk7XHJcbmNvbnN0IHRyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vbGliL3RyYW5zZm9ybWVyc1wiKTtcclxudmFyIFJFQUxUSU1FX1BPU1RHUkVTX0NIQU5HRVNfTElTVEVOX0VWRU5UO1xyXG4oZnVuY3Rpb24gKFJFQUxUSU1FX1BPU1RHUkVTX0NIQU5HRVNfTElTVEVOX0VWRU5UKSB7XHJcbiAgICBSRUFMVElNRV9QT1NUR1JFU19DSEFOR0VTX0xJU1RFTl9FVkVOVFtcIkFMTFwiXSA9IFwiKlwiO1xyXG4gICAgUkVBTFRJTUVfUE9TVEdSRVNfQ0hBTkdFU19MSVNURU5fRVZFTlRbXCJJTlNFUlRcIl0gPSBcIklOU0VSVFwiO1xyXG4gICAgUkVBTFRJTUVfUE9TVEdSRVNfQ0hBTkdFU19MSVNURU5fRVZFTlRbXCJVUERBVEVcIl0gPSBcIlVQREFURVwiO1xyXG4gICAgUkVBTFRJTUVfUE9TVEdSRVNfQ0hBTkdFU19MSVNURU5fRVZFTlRbXCJERUxFVEVcIl0gPSBcIkRFTEVURVwiO1xyXG59KShSRUFMVElNRV9QT1NUR1JFU19DSEFOR0VTX0xJU1RFTl9FVkVOVCB8fCAoZXhwb3J0cy5SRUFMVElNRV9QT1NUR1JFU19DSEFOR0VTX0xJU1RFTl9FVkVOVCA9IFJFQUxUSU1FX1BPU1RHUkVTX0NIQU5HRVNfTElTVEVOX0VWRU5UID0ge30pKTtcclxudmFyIFJFQUxUSU1FX0xJU1RFTl9UWVBFUztcclxuKGZ1bmN0aW9uIChSRUFMVElNRV9MSVNURU5fVFlQRVMpIHtcclxuICAgIFJFQUxUSU1FX0xJU1RFTl9UWVBFU1tcIkJST0FEQ0FTVFwiXSA9IFwiYnJvYWRjYXN0XCI7XHJcbiAgICBSRUFMVElNRV9MSVNURU5fVFlQRVNbXCJQUkVTRU5DRVwiXSA9IFwicHJlc2VuY2VcIjtcclxuICAgIFJFQUxUSU1FX0xJU1RFTl9UWVBFU1tcIlBPU1RHUkVTX0NIQU5HRVNcIl0gPSBcInBvc3RncmVzX2NoYW5nZXNcIjtcclxuICAgIFJFQUxUSU1FX0xJU1RFTl9UWVBFU1tcIlNZU1RFTVwiXSA9IFwic3lzdGVtXCI7XHJcbn0pKFJFQUxUSU1FX0xJU1RFTl9UWVBFUyB8fCAoZXhwb3J0cy5SRUFMVElNRV9MSVNURU5fVFlQRVMgPSBSRUFMVElNRV9MSVNURU5fVFlQRVMgPSB7fSkpO1xyXG52YXIgUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFUztcclxuKGZ1bmN0aW9uIChSRUFMVElNRV9TVUJTQ1JJQkVfU1RBVEVTKSB7XHJcbiAgICBSRUFMVElNRV9TVUJTQ1JJQkVfU1RBVEVTW1wiU1VCU0NSSUJFRFwiXSA9IFwiU1VCU0NSSUJFRFwiO1xyXG4gICAgUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFU1tcIlRJTUVEX09VVFwiXSA9IFwiVElNRURfT1VUXCI7XHJcbiAgICBSRUFMVElNRV9TVUJTQ1JJQkVfU1RBVEVTW1wiQ0xPU0VEXCJdID0gXCJDTE9TRURcIjtcclxuICAgIFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVNbXCJDSEFOTkVMX0VSUk9SXCJdID0gXCJDSEFOTkVMX0VSUk9SXCI7XHJcbn0pKFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVMgfHwgKGV4cG9ydHMuUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFUyA9IFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVMgPSB7fSkpO1xyXG5leHBvcnRzLlJFQUxUSU1FX0NIQU5ORUxfU1RBVEVTID0gY29uc3RhbnRzXzEuQ0hBTk5FTF9TVEFURVM7XHJcbi8qKiBBIGNoYW5uZWwgaXMgdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrIG9mIFJlYWx0aW1lXHJcbiAqIGFuZCBuYXJyb3dzIHRoZSBzY29wZSBvZiBkYXRhIGZsb3cgdG8gc3Vic2NyaWJlZCBjbGllbnRzLlxyXG4gKiBZb3UgY2FuIHRoaW5rIG9mIGEgY2hhbm5lbCBhcyBhIGNoYXRyb29tIHdoZXJlIHBhcnRpY2lwYW50cyBhcmUgYWJsZSB0byBzZWUgd2hvJ3Mgb25saW5lXHJcbiAqIGFuZCBzZW5kIGFuZCByZWNlaXZlIG1lc3NhZ2VzLlxyXG4gKi9cclxuY2xhc3MgUmVhbHRpbWVDaGFubmVsIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgLyoqIFRvcGljIG5hbWUgY2FuIGJlIGFueSBzdHJpbmcuICovXHJcbiAgICB0b3BpYywgcGFyYW1zID0geyBjb25maWc6IHt9IH0sIHNvY2tldCkge1xyXG4gICAgICAgIHRoaXMudG9waWMgPSB0b3BpYztcclxuICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcclxuICAgICAgICB0aGlzLnNvY2tldCA9IHNvY2tldDtcclxuICAgICAgICB0aGlzLmJpbmRpbmdzID0ge307XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IGNvbnN0YW50c18xLkNIQU5ORUxfU1RBVEVTLmNsb3NlZDtcclxuICAgICAgICB0aGlzLmpvaW5lZE9uY2UgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnB1c2hCdWZmZXIgPSBbXTtcclxuICAgICAgICB0aGlzLnN1YlRvcGljID0gdG9waWMucmVwbGFjZSgvXnJlYWx0aW1lOi9pLCAnJyk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuY29uZmlnID0gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIGJyb2FkY2FzdDogeyBhY2s6IGZhbHNlLCBzZWxmOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICBwcmVzZW5jZTogeyBrZXk6ICcnIH0sXHJcbiAgICAgICAgICAgIHByaXZhdGU6IGZhbHNlLFxyXG4gICAgICAgIH0sIHBhcmFtcy5jb25maWcpO1xyXG4gICAgICAgIHRoaXMudGltZW91dCA9IHRoaXMuc29ja2V0LnRpbWVvdXQ7XHJcbiAgICAgICAgdGhpcy5qb2luUHVzaCA9IG5ldyBwdXNoXzEuZGVmYXVsdCh0aGlzLCBjb25zdGFudHNfMS5DSEFOTkVMX0VWRU5UUy5qb2luLCB0aGlzLnBhcmFtcywgdGhpcy50aW1lb3V0KTtcclxuICAgICAgICB0aGlzLnJlam9pblRpbWVyID0gbmV3IHRpbWVyXzEuZGVmYXVsdCgoKSA9PiB0aGlzLl9yZWpvaW5VbnRpbENvbm5lY3RlZCgpLCB0aGlzLnNvY2tldC5yZWNvbm5lY3RBZnRlck1zKTtcclxuICAgICAgICB0aGlzLmpvaW5QdXNoLnJlY2VpdmUoJ29rJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gY29uc3RhbnRzXzEuQ0hBTk5FTF9TVEFURVMuam9pbmVkO1xyXG4gICAgICAgICAgICB0aGlzLnJlam9pblRpbWVyLnJlc2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucHVzaEJ1ZmZlci5mb3JFYWNoKChwdXNoRXZlbnQpID0+IHB1c2hFdmVudC5zZW5kKCkpO1xyXG4gICAgICAgICAgICB0aGlzLnB1c2hCdWZmZXIgPSBbXTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9vbkNsb3NlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZWpvaW5UaW1lci5yZXNldCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5sb2coJ2NoYW5uZWwnLCBgY2xvc2UgJHt0aGlzLnRvcGljfSAke3RoaXMuX2pvaW5SZWYoKX1gKTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IGNvbnN0YW50c18xLkNIQU5ORUxfU1RBVEVTLmNsb3NlZDtcclxuICAgICAgICAgICAgdGhpcy5zb2NrZXQuX3JlbW92ZSh0aGlzKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9vbkVycm9yKChyZWFzb24pID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzTGVhdmluZygpIHx8IHRoaXMuX2lzQ2xvc2VkKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5sb2coJ2NoYW5uZWwnLCBgZXJyb3IgJHt0aGlzLnRvcGljfWAsIHJlYXNvbik7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBjb25zdGFudHNfMS5DSEFOTkVMX1NUQVRFUy5lcnJvcmVkO1xyXG4gICAgICAgICAgICB0aGlzLnJlam9pblRpbWVyLnNjaGVkdWxlVGltZW91dCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuam9pblB1c2gucmVjZWl2ZSgndGltZW91dCcsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0pvaW5pbmcoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LmxvZygnY2hhbm5lbCcsIGB0aW1lb3V0ICR7dGhpcy50b3BpY31gLCB0aGlzLmpvaW5QdXNoLnRpbWVvdXQpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gY29uc3RhbnRzXzEuQ0hBTk5FTF9TVEFURVMuZXJyb3JlZDtcclxuICAgICAgICAgICAgdGhpcy5yZWpvaW5UaW1lci5zY2hlZHVsZVRpbWVvdXQoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9vbihjb25zdGFudHNfMS5DSEFOTkVMX0VWRU5UUy5yZXBseSwge30sIChwYXlsb2FkLCByZWYpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcih0aGlzLl9yZXBseUV2ZW50TmFtZShyZWYpLCBwYXlsb2FkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnByZXNlbmNlID0gbmV3IFJlYWx0aW1lUHJlc2VuY2VfMS5kZWZhdWx0KHRoaXMpO1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0RW5kcG9pbnRVUkwgPVxyXG4gICAgICAgICAgICAoMCwgdHJhbnNmb3JtZXJzXzEuaHR0cEVuZHBvaW50VVJMKSh0aGlzLnNvY2tldC5lbmRQb2ludCkgKyAnL2FwaS9icm9hZGNhc3QnO1xyXG4gICAgICAgIHRoaXMucHJpdmF0ZSA9IHRoaXMucGFyYW1zLmNvbmZpZy5wcml2YXRlIHx8IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLyoqIFN1YnNjcmliZSByZWdpc3RlcnMgeW91ciBjbGllbnQgd2l0aCB0aGUgc2VydmVyICovXHJcbiAgICBzdWJzY3JpYmUoY2FsbGJhY2ssIHRpbWVvdXQgPSB0aGlzLnRpbWVvdXQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGlmICghdGhpcy5zb2NrZXQuaXNDb25uZWN0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jb25uZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09IGNvbnN0YW50c18xLkNIQU5ORUxfU1RBVEVTLmNsb3NlZCkge1xyXG4gICAgICAgICAgICBjb25zdCB7IGNvbmZpZzogeyBicm9hZGNhc3QsIHByZXNlbmNlLCBwcml2YXRlOiBpc1ByaXZhdGUgfSwgfSA9IHRoaXMucGFyYW1zO1xyXG4gICAgICAgICAgICB0aGlzLl9vbkVycm9yKChlKSA9PiBjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FsbGJhY2soUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFUy5DSEFOTkVMX0VSUk9SLCBlKSk7XHJcbiAgICAgICAgICAgIHRoaXMuX29uQ2xvc2UoKCkgPT4gY2FsbGJhY2sgPT09IG51bGwgfHwgY2FsbGJhY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhbGxiYWNrKFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVMuQ0xPU0VEKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuUGF5bG9hZCA9IHt9O1xyXG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICBicm9hZGNhc3QsXHJcbiAgICAgICAgICAgICAgICBwcmVzZW5jZSxcclxuICAgICAgICAgICAgICAgIHBvc3RncmVzX2NoYW5nZXM6IChfYiA9IChfYSA9IHRoaXMuYmluZGluZ3MucG9zdGdyZXNfY2hhbmdlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcCgocikgPT4gci5maWx0ZXIpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGU6IGlzUHJpdmF0ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc29ja2V0LmFjY2Vzc1Rva2VuVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGFjY2Vzc1Rva2VuUGF5bG9hZC5hY2Nlc3NfdG9rZW4gPSB0aGlzLnNvY2tldC5hY2Nlc3NUb2tlblZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSm9pblBheWxvYWQoT2JqZWN0LmFzc2lnbih7IGNvbmZpZyB9LCBhY2Nlc3NUb2tlblBheWxvYWQpKTtcclxuICAgICAgICAgICAgdGhpcy5qb2luZWRPbmNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fcmVqb2luKHRpbWVvdXQpO1xyXG4gICAgICAgICAgICB0aGlzLmpvaW5QdXNoXHJcbiAgICAgICAgICAgICAgICAucmVjZWl2ZSgnb2snLCBhc3luYyAoeyBwb3N0Z3Jlc19jaGFuZ2VzIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBfYTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LnNldEF1dGgoKTtcclxuICAgICAgICAgICAgICAgIGlmIChwb3N0Z3Jlc19jaGFuZ2VzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FsbGJhY2soUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFUy5TVUJTQ1JJQkVEKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGllbnRQb3N0Z3Jlc0JpbmRpbmdzID0gdGhpcy5iaW5kaW5ncy5wb3N0Z3Jlc19jaGFuZ2VzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJpbmRpbmdzTGVuID0gKF9hID0gY2xpZW50UG9zdGdyZXNCaW5kaW5ncyA9PT0gbnVsbCB8fCBjbGllbnRQb3N0Z3Jlc0JpbmRpbmdzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGllbnRQb3N0Z3Jlc0JpbmRpbmdzLmxlbmd0aCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdQb3N0Z3Jlc0JpbmRpbmdzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaW5kaW5nc0xlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsaWVudFBvc3RncmVzQmluZGluZyA9IGNsaWVudFBvc3RncmVzQmluZGluZ3NbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlsdGVyOiB7IGV2ZW50LCBzY2hlbWEsIHRhYmxlLCBmaWx0ZXIgfSwgfSA9IGNsaWVudFBvc3RncmVzQmluZGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VydmVyUG9zdGdyZXNGaWx0ZXIgPSBwb3N0Z3Jlc19jaGFuZ2VzICYmIHBvc3RncmVzX2NoYW5nZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXJ2ZXJQb3N0Z3Jlc0ZpbHRlciAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyUG9zdGdyZXNGaWx0ZXIuZXZlbnQgPT09IGV2ZW50ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJQb3N0Z3Jlc0ZpbHRlci5zY2hlbWEgPT09IHNjaGVtYSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyUG9zdGdyZXNGaWx0ZXIudGFibGUgPT09IHRhYmxlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJQb3N0Z3Jlc0ZpbHRlci5maWx0ZXIgPT09IGZpbHRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UG9zdGdyZXNCaW5kaW5ncy5wdXNoKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY2xpZW50UG9zdGdyZXNCaW5kaW5nKSwgeyBpZDogc2VydmVyUG9zdGdyZXNGaWx0ZXIuaWQgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IGNvbnN0YW50c18xLkNIQU5ORUxfU1RBVEVTLmVycm9yZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FsbGJhY2soUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFUy5DSEFOTkVMX0VSUk9SLCBuZXcgRXJyb3IoJ21pc21hdGNoIGJldHdlZW4gc2VydmVyIGFuZCBjbGllbnQgYmluZGluZ3MgZm9yIHBvc3RncmVzIGNoYW5nZXMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kaW5ncy5wb3N0Z3Jlc19jaGFuZ2VzID0gbmV3UG9zdGdyZXNCaW5kaW5ncztcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhSRUFMVElNRV9TVUJTQ1JJQkVfU1RBVEVTLlNVQlNDUklCRUQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5yZWNlaXZlKCdlcnJvcicsIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IGNvbnN0YW50c18xLkNIQU5ORUxfU1RBVEVTLmVycm9yZWQ7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FsbGJhY2soUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFUy5DSEFOTkVMX0VSUk9SLCBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoT2JqZWN0LnZhbHVlcyhlcnJvcikuam9pbignLCAnKSB8fCAnZXJyb3InKSkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnJlY2VpdmUoJ3RpbWVvdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FsbGJhY2soUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFUy5USU1FRF9PVVQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBwcmVzZW5jZVN0YXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByZXNlbmNlLnN0YXRlO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgdHJhY2socGF5bG9hZCwgb3B0cyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZCh7XHJcbiAgICAgICAgICAgIHR5cGU6ICdwcmVzZW5jZScsXHJcbiAgICAgICAgICAgIGV2ZW50OiAndHJhY2snLFxyXG4gICAgICAgICAgICBwYXlsb2FkLFxyXG4gICAgICAgIH0sIG9wdHMudGltZW91dCB8fCB0aGlzLnRpbWVvdXQpO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgdW50cmFjayhvcHRzID0ge30pIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kKHtcclxuICAgICAgICAgICAgdHlwZTogJ3ByZXNlbmNlJyxcclxuICAgICAgICAgICAgZXZlbnQ6ICd1bnRyYWNrJyxcclxuICAgICAgICB9LCBvcHRzKTtcclxuICAgIH1cclxuICAgIG9uKHR5cGUsIGZpbHRlciwgY2FsbGJhY2spIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fb24odHlwZSwgZmlsdGVyLCBjYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNlbmRzIGEgbWVzc2FnZSBpbnRvIHRoZSBjaGFubmVsLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBhcmdzIEFyZ3VtZW50cyB0byBzZW5kIHRvIGNoYW5uZWxcclxuICAgICAqIEBwYXJhbSBhcmdzLnR5cGUgVGhlIHR5cGUgb2YgZXZlbnQgdG8gc2VuZFxyXG4gICAgICogQHBhcmFtIGFyZ3MuZXZlbnQgVGhlIG5hbWUgb2YgdGhlIGV2ZW50IGJlaW5nIHNlbnRcclxuICAgICAqIEBwYXJhbSBhcmdzLnBheWxvYWQgUGF5bG9hZCB0byBiZSBzZW50XHJcbiAgICAgKiBAcGFyYW0gb3B0cyBPcHRpb25zIHRvIGJlIHVzZWQgZHVyaW5nIHRoZSBzZW5kIHByb2Nlc3NcclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2VuZChhcmdzLCBvcHRzID0ge30pIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGlmICghdGhpcy5fY2FuUHVzaCgpICYmIGFyZ3MudHlwZSA9PT0gJ2Jyb2FkY2FzdCcpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBldmVudCwgcGF5bG9hZDogZW5kcG9pbnRfcGF5bG9hZCB9ID0gYXJncztcclxuICAgICAgICAgICAgY29uc3QgYXV0aG9yaXphdGlvbiA9IHRoaXMuc29ja2V0LmFjY2Vzc1Rva2VuVmFsdWVcclxuICAgICAgICAgICAgICAgID8gYEJlYXJlciAke3RoaXMuc29ja2V0LmFjY2Vzc1Rva2VuVmFsdWV9YFxyXG4gICAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGF1dGhvcml6YXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgYXBpa2V5OiB0aGlzLnNvY2tldC5hcGlLZXkgPyB0aGlzLnNvY2tldC5hcGlLZXkgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BpYzogdGhpcy5zdWJUb3BpYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogZW5kcG9pbnRfcGF5bG9hZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGU6IHRoaXMucHJpdmF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuX2ZldGNoV2l0aFRpbWVvdXQodGhpcy5icm9hZGNhc3RFbmRwb2ludFVSTCwgb3B0aW9ucywgKF9hID0gb3B0cy50aW1lb3V0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnRpbWVvdXQpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgKChfYiA9IHJlc3BvbnNlLmJvZHkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYW5jZWwoKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2Uub2sgPyAnb2snIDogJ2Vycm9yJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RpbWVkIG91dCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHB1c2ggPSB0aGlzLl9wdXNoKGFyZ3MudHlwZSwgYXJncywgb3B0cy50aW1lb3V0IHx8IHRoaXMudGltZW91dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJncy50eXBlID09PSAnYnJvYWRjYXN0JyAmJiAhKChfYyA9IChfYiA9IChfYSA9IHRoaXMucGFyYW1zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29uZmlnKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuYnJvYWRjYXN0KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuYWNrKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoJ29rJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwdXNoLnJlY2VpdmUoJ29rJywgKCkgPT4gcmVzb2x2ZSgnb2snKSk7XHJcbiAgICAgICAgICAgICAgICBwdXNoLnJlY2VpdmUoJ2Vycm9yJywgKCkgPT4gcmVzb2x2ZSgnZXJyb3InKSk7XHJcbiAgICAgICAgICAgICAgICBwdXNoLnJlY2VpdmUoJ3RpbWVvdXQnLCAoKSA9PiByZXNvbHZlKCd0aW1lZCBvdXQnKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHVwZGF0ZUpvaW5QYXlsb2FkKHBheWxvYWQpIHtcclxuICAgICAgICB0aGlzLmpvaW5QdXNoLnVwZGF0ZVBheWxvYWQocGF5bG9hZCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIExlYXZlcyB0aGUgY2hhbm5lbC5cclxuICAgICAqXHJcbiAgICAgKiBVbnN1YnNjcmliZXMgZnJvbSBzZXJ2ZXIgZXZlbnRzLCBhbmQgaW5zdHJ1Y3RzIGNoYW5uZWwgdG8gdGVybWluYXRlIG9uIHNlcnZlci5cclxuICAgICAqIFRyaWdnZXJzIG9uQ2xvc2UoKSBob29rcy5cclxuICAgICAqXHJcbiAgICAgKiBUbyByZWNlaXZlIGxlYXZlIGFja25vd2xlZGdlbWVudHMsIHVzZSB0aGUgYSBgcmVjZWl2ZWAgaG9vayB0byBiaW5kIHRvIHRoZSBzZXJ2ZXIgYWNrLCBpZTpcclxuICAgICAqIGNoYW5uZWwudW5zdWJzY3JpYmUoKS5yZWNlaXZlKFwib2tcIiwgKCkgPT4gYWxlcnQoXCJsZWZ0IVwiKSApXHJcbiAgICAgKi9cclxuICAgIHVuc3Vic2NyaWJlKHRpbWVvdXQgPSB0aGlzLnRpbWVvdXQpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gY29uc3RhbnRzXzEuQ0hBTk5FTF9TVEFURVMubGVhdmluZztcclxuICAgICAgICBjb25zdCBvbkNsb3NlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5sb2coJ2NoYW5uZWwnLCBgbGVhdmUgJHt0aGlzLnRvcGljfWApO1xyXG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyKGNvbnN0YW50c18xLkNIQU5ORUxfRVZFTlRTLmNsb3NlLCAnbGVhdmUnLCB0aGlzLl9qb2luUmVmKCkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5qb2luUHVzaC5kZXN0cm95KCk7XHJcbiAgICAgICAgbGV0IGxlYXZlUHVzaCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGxlYXZlUHVzaCA9IG5ldyBwdXNoXzEuZGVmYXVsdCh0aGlzLCBjb25zdGFudHNfMS5DSEFOTkVMX0VWRU5UUy5sZWF2ZSwge30sIHRpbWVvdXQpO1xyXG4gICAgICAgICAgICBsZWF2ZVB1c2hcclxuICAgICAgICAgICAgICAgIC5yZWNlaXZlKCdvaycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoJ29rJyk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAucmVjZWl2ZSgndGltZW91dCcsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoJ3RpbWVkIG91dCcpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnJlY2VpdmUoJ2Vycm9yJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgnZXJyb3InKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxlYXZlUHVzaC5zZW5kKCk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fY2FuUHVzaCgpKSB7XHJcbiAgICAgICAgICAgICAgICBsZWF2ZVB1c2gudHJpZ2dlcignb2snLCB7fSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgbGVhdmVQdXNoID09PSBudWxsIHx8IGxlYXZlUHVzaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGVhdmVQdXNoLmRlc3Ryb3koKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVGVhcmRvd24gdGhlIGNoYW5uZWwuXHJcbiAgICAgKlxyXG4gICAgICogRGVzdHJveXMgYW5kIHN0b3BzIHJlbGF0ZWQgdGltZXJzLlxyXG4gICAgICovXHJcbiAgICB0ZWFyZG93bigpIHtcclxuICAgICAgICB0aGlzLnB1c2hCdWZmZXIuZm9yRWFjaCgocHVzaCkgPT4gcHVzaC5kZXN0cm95KCkpO1xyXG4gICAgICAgIHRoaXMucmVqb2luVGltZXIgJiYgY2xlYXJUaW1lb3V0KHRoaXMucmVqb2luVGltZXIudGltZXIpO1xyXG4gICAgICAgIHRoaXMuam9pblB1c2guZGVzdHJveSgpO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgYXN5bmMgX2ZldGNoV2l0aFRpbWVvdXQodXJsLCBvcHRpb25zLCB0aW1lb3V0KSB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgICAgICBjb25zdCBpZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCB0aW1lb3V0KTtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc29ja2V0LmZldGNoKHVybCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pKTtcclxuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIF9wdXNoKGV2ZW50LCBwYXlsb2FkLCB0aW1lb3V0ID0gdGhpcy50aW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmpvaW5lZE9uY2UpIHtcclxuICAgICAgICAgICAgdGhyb3cgYHRyaWVkIHRvIHB1c2ggJyR7ZXZlbnR9JyB0byAnJHt0aGlzLnRvcGljfScgYmVmb3JlIGpvaW5pbmcuIFVzZSBjaGFubmVsLnN1YnNjcmliZSgpIGJlZm9yZSBwdXNoaW5nIGV2ZW50c2A7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwdXNoRXZlbnQgPSBuZXcgcHVzaF8xLmRlZmF1bHQodGhpcywgZXZlbnQsIHBheWxvYWQsIHRpbWVvdXQpO1xyXG4gICAgICAgIGlmICh0aGlzLl9jYW5QdXNoKCkpIHtcclxuICAgICAgICAgICAgcHVzaEV2ZW50LnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHB1c2hFdmVudC5zdGFydFRpbWVvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wdXNoQnVmZmVyLnB1c2gocHVzaEV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHB1c2hFdmVudDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogT3ZlcnJpZGFibGUgbWVzc2FnZSBob29rXHJcbiAgICAgKlxyXG4gICAgICogUmVjZWl2ZXMgYWxsIGV2ZW50cyBmb3Igc3BlY2lhbGl6ZWQgbWVzc2FnZSBoYW5kbGluZyBiZWZvcmUgZGlzcGF0Y2hpbmcgdG8gdGhlIGNoYW5uZWwgY2FsbGJhY2tzLlxyXG4gICAgICogTXVzdCByZXR1cm4gdGhlIHBheWxvYWQsIG1vZGlmaWVkIG9yIHVubW9kaWZpZWQuXHJcbiAgICAgKlxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIF9vbk1lc3NhZ2UoX2V2ZW50LCBwYXlsb2FkLCBfcmVmKSB7XHJcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBfaXNNZW1iZXIodG9waWMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b3BpYyA9PT0gdG9waWM7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBfam9pblJlZigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5qb2luUHVzaC5yZWY7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBfdHJpZ2dlcih0eXBlLCBwYXlsb2FkLCByZWYpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHR5cGVMb3dlciA9IHR5cGUudG9Mb2NhbGVMb3dlckNhc2UoKTtcclxuICAgICAgICBjb25zdCB7IGNsb3NlLCBlcnJvciwgbGVhdmUsIGpvaW4gfSA9IGNvbnN0YW50c18xLkNIQU5ORUxfRVZFTlRTO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IFtjbG9zZSwgZXJyb3IsIGxlYXZlLCBqb2luXTtcclxuICAgICAgICBpZiAocmVmICYmIGV2ZW50cy5pbmRleE9mKHR5cGVMb3dlcikgPj0gMCAmJiByZWYgIT09IHRoaXMuX2pvaW5SZWYoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBoYW5kbGVkUGF5bG9hZCA9IHRoaXMuX29uTWVzc2FnZSh0eXBlTG93ZXIsIHBheWxvYWQsIHJlZik7XHJcbiAgICAgICAgaWYgKHBheWxvYWQgJiYgIWhhbmRsZWRQYXlsb2FkKSB7XHJcbiAgICAgICAgICAgIHRocm93ICdjaGFubmVsIG9uTWVzc2FnZSBjYWxsYmFja3MgbXVzdCByZXR1cm4gdGhlIHBheWxvYWQsIG1vZGlmaWVkIG9yIHVubW9kaWZpZWQnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoWydpbnNlcnQnLCAndXBkYXRlJywgJ2RlbGV0ZSddLmluY2x1ZGVzKHR5cGVMb3dlcikpIHtcclxuICAgICAgICAgICAgKF9hID0gdGhpcy5iaW5kaW5ncy5wb3N0Z3Jlc19jaGFuZ2VzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZmlsdGVyKChiaW5kKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgICAgIHJldHVybiAoKChfYSA9IGJpbmQuZmlsdGVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXZlbnQpID09PSAnKicgfHxcclxuICAgICAgICAgICAgICAgICAgICAoKF9jID0gKF9iID0gYmluZC5maWx0ZXIpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5ldmVudCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnRvTG9jYWxlTG93ZXJDYXNlKCkpID09PSB0eXBlTG93ZXIpO1xyXG4gICAgICAgICAgICB9KS5tYXAoKGJpbmQpID0+IGJpbmQuY2FsbGJhY2soaGFuZGxlZFBheWxvYWQsIHJlZikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgKF9iID0gdGhpcy5iaW5kaW5nc1t0eXBlTG93ZXJdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZmlsdGVyKChiaW5kKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZjtcclxuICAgICAgICAgICAgICAgIGlmIChbJ2Jyb2FkY2FzdCcsICdwcmVzZW5jZScsICdwb3N0Z3Jlc19jaGFuZ2VzJ10uaW5jbHVkZXModHlwZUxvd2VyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgnaWQnIGluIGJpbmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmluZElkID0gYmluZC5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmluZEV2ZW50ID0gKF9hID0gYmluZC5maWx0ZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ldmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChiaW5kSWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX2IgPSBwYXlsb2FkLmlkcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmluY2x1ZGVzKGJpbmRJZCkpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmluZEV2ZW50ID09PSAnKicgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmluZEV2ZW50ID09PSBudWxsIHx8IGJpbmRFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYmluZEV2ZW50LnRvTG9jYWxlTG93ZXJDYXNlKCkpID09PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9jID0gcGF5bG9hZC5kYXRhKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MudHlwZS50b0xvY2FsZUxvd2VyQ2FzZSgpKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmluZEV2ZW50ID0gKF9lID0gKF9kID0gYmluZCA9PT0gbnVsbCB8fCBiaW5kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBiaW5kLmZpbHRlcikgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmV2ZW50KSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UudG9Mb2NhbGVMb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChiaW5kRXZlbnQgPT09ICcqJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZEV2ZW50ID09PSAoKF9mID0gcGF5bG9hZCA9PT0gbnVsbCB8fCBwYXlsb2FkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXlsb2FkLmV2ZW50KSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2YudG9Mb2NhbGVMb3dlckNhc2UoKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiaW5kLnR5cGUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdHlwZUxvd2VyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5tYXAoKGJpbmQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaGFuZGxlZFBheWxvYWQgPT09ICdvYmplY3QnICYmICdpZHMnIGluIGhhbmRsZWRQYXlsb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zdGdyZXNDaGFuZ2VzID0gaGFuZGxlZFBheWxvYWQuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHNjaGVtYSwgdGFibGUsIGNvbW1pdF90aW1lc3RhbXAsIHR5cGUsIGVycm9ycyB9ID0gcG9zdGdyZXNDaGFuZ2VzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVucmljaGVkUGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0X3RpbWVzdGFtcDogY29tbWl0X3RpbWVzdGFtcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXc6IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbGQ6IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IGVycm9ycyxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZWRQYXlsb2FkID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBlbnJpY2hlZFBheWxvYWQpLCB0aGlzLl9nZXRQYXlsb2FkUmVjb3Jkcyhwb3N0Z3Jlc0NoYW5nZXMpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJpbmQuY2FsbGJhY2soaGFuZGxlZFBheWxvYWQsIHJlZik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIF9pc0Nsb3NlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gY29uc3RhbnRzXzEuQ0hBTk5FTF9TVEFURVMuY2xvc2VkO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgX2lzSm9pbmVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBjb25zdGFudHNfMS5DSEFOTkVMX1NUQVRFUy5qb2luZWQ7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBfaXNKb2luaW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBjb25zdGFudHNfMS5DSEFOTkVMX1NUQVRFUy5qb2luaW5nO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgX2lzTGVhdmluZygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gY29uc3RhbnRzXzEuQ0hBTk5FTF9TVEFURVMubGVhdmluZztcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIF9yZXBseUV2ZW50TmFtZShyZWYpIHtcclxuICAgICAgICByZXR1cm4gYGNoYW5fcmVwbHlfJHtyZWZ9YDtcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIF9vbih0eXBlLCBmaWx0ZXIsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgdHlwZUxvd2VyID0gdHlwZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGNvbnN0IGJpbmRpbmcgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IHR5cGVMb3dlcixcclxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLmJpbmRpbmdzW3R5cGVMb3dlcl0pIHtcclxuICAgICAgICAgICAgdGhpcy5iaW5kaW5nc1t0eXBlTG93ZXJdLnB1c2goYmluZGluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmJpbmRpbmdzW3R5cGVMb3dlcl0gPSBbYmluZGluZ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgX29mZih0eXBlLCBmaWx0ZXIpIHtcclxuICAgICAgICBjb25zdCB0eXBlTG93ZXIgPSB0eXBlLnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgdGhpcy5iaW5kaW5nc1t0eXBlTG93ZXJdID0gdGhpcy5iaW5kaW5nc1t0eXBlTG93ZXJdLmZpbHRlcigoYmluZCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgIHJldHVybiAhKCgoX2EgPSBiaW5kLnR5cGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b0xvY2FsZUxvd2VyQ2FzZSgpKSA9PT0gdHlwZUxvd2VyICYmXHJcbiAgICAgICAgICAgICAgICBSZWFsdGltZUNoYW5uZWwuaXNFcXVhbChiaW5kLmZpbHRlciwgZmlsdGVyKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBzdGF0aWMgaXNFcXVhbChvYmoxLCBvYmoyKSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG9iajEpLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMob2JqMikubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCBrIGluIG9iajEpIHtcclxuICAgICAgICAgICAgaWYgKG9iajFba10gIT09IG9iajJba10pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIF9yZWpvaW5VbnRpbENvbm5lY3RlZCgpIHtcclxuICAgICAgICB0aGlzLnJlam9pblRpbWVyLnNjaGVkdWxlVGltZW91dCgpO1xyXG4gICAgICAgIGlmICh0aGlzLnNvY2tldC5pc0Nvbm5lY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlam9pbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGNoYW5uZWwgY2xvc2VzLlxyXG4gICAgICpcclxuICAgICAqIEBpbnRlcm5hbFxyXG4gICAgICovXHJcbiAgICBfb25DbG9zZShjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuX29uKGNvbnN0YW50c18xLkNIQU5ORUxfRVZFTlRTLmNsb3NlLCB7fSwgY2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgY2hhbm5lbCBlbmNvdW50ZXJlcyBhbiBlcnJvci5cclxuICAgICAqXHJcbiAgICAgKiBAaW50ZXJuYWxcclxuICAgICAqL1xyXG4gICAgX29uRXJyb3IoY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLl9vbihjb25zdGFudHNfMS5DSEFOTkVMX0VWRU5UUy5lcnJvciwge30sIChyZWFzb24pID0+IGNhbGxiYWNrKHJlYXNvbikpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc29ja2V0IGlzIGNvbm5lY3RlZCBhbmQgdGhlIGNoYW5uZWwgaGFzIGJlZW4gam9pbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBpbnRlcm5hbFxyXG4gICAgICovXHJcbiAgICBfY2FuUHVzaCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXQuaXNDb25uZWN0ZWQoKSAmJiB0aGlzLl9pc0pvaW5lZCgpO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgX3Jlam9pbih0aW1lb3V0ID0gdGhpcy50aW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzTGVhdmluZygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zb2NrZXQuX2xlYXZlT3BlblRvcGljKHRoaXMudG9waWMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBjb25zdGFudHNfMS5DSEFOTkVMX1NUQVRFUy5qb2luaW5nO1xyXG4gICAgICAgIHRoaXMuam9pblB1c2gucmVzZW5kKHRpbWVvdXQpO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgX2dldFBheWxvYWRSZWNvcmRzKHBheWxvYWQpIHtcclxuICAgICAgICBjb25zdCByZWNvcmRzID0ge1xyXG4gICAgICAgICAgICBuZXc6IHt9LFxyXG4gICAgICAgICAgICBvbGQ6IHt9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHBheWxvYWQudHlwZSA9PT0gJ0lOU0VSVCcgfHwgcGF5bG9hZC50eXBlID09PSAnVVBEQVRFJykge1xyXG4gICAgICAgICAgICByZWNvcmRzLm5ldyA9IFRyYW5zZm9ybWVycy5jb252ZXJ0Q2hhbmdlRGF0YShwYXlsb2FkLmNvbHVtbnMsIHBheWxvYWQucmVjb3JkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBheWxvYWQudHlwZSA9PT0gJ1VQREFURScgfHwgcGF5bG9hZC50eXBlID09PSAnREVMRVRFJykge1xyXG4gICAgICAgICAgICByZWNvcmRzLm9sZCA9IFRyYW5zZm9ybWVycy5jb252ZXJ0Q2hhbmdlRGF0YShwYXlsb2FkLmNvbHVtbnMsIHBheWxvYWQub2xkX3JlY29yZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZWNvcmRzO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IFJlYWx0aW1lQ2hhbm5lbDtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVhbHRpbWVDaGFubmVsLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/realtime-js/dist/main/RealtimeChannel.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/realtime-js/dist/main/RealtimeClient.js":
/*!************************************************************************!*\
!*** ./node_modules/@supabase/realtime-js/dist/main/RealtimeClient.js ***!
\************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || (function () {\r\n var ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n };\r\n return function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n };\r\n})();\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst isows_1 = __webpack_require__(/*! isows */ \"(ssr)/./node_modules/isows/_cjs/index.js\");\r\nconst constants_1 = __webpack_require__(/*! ./lib/constants */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/constants.js\");\r\nconst serializer_1 = __importDefault(__webpack_require__(/*! ./lib/serializer */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/serializer.js\"));\r\nconst timer_1 = __importDefault(__webpack_require__(/*! ./lib/timer */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/timer.js\"));\r\nconst transformers_1 = __webpack_require__(/*! ./lib/transformers */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/transformers.js\");\r\nconst RealtimeChannel_1 = __importDefault(__webpack_require__(/*! ./RealtimeChannel */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/RealtimeChannel.js\"));\r\nconst noop = () => { };\r\nconst WORKER_SCRIPT = `\r\n addEventListener(\"message\", (e) => {\r\n if (e.data.event === \"start\") {\r\n setInterval(() => postMessage({ event: \"keepAlive\" }), e.data.interval);\r\n }\r\n });`;\r\nclass RealtimeClient {\r\n /**\r\n * Initializes the Socket.\r\n *\r\n * @param endPoint The string WebSocket endpoint, ie, \"ws://example.com/socket\", \"wss://example.com\", \"/socket\" (inherited host & protocol)\r\n * @param httpEndpoint The string HTTP endpoint, ie, \"https://example.com\", \"/\" (inherited host & protocol)\r\n * @param options.transport The Websocket Transport, for example WebSocket. This can be a custom implementation\r\n * @param options.timeout The default timeout in milliseconds to trigger push timeouts.\r\n * @param options.params The optional params to pass when connecting.\r\n * @param options.headers Deprecated: headers cannot be set on websocket connections and this option will be removed in the future.\r\n * @param options.heartbeatIntervalMs The millisec interval to send a heartbeat message.\r\n * @param options.logger The optional function for specialized logging, ie: logger: (kind, msg, data) => { console.log(`${kind}: ${msg}`, data) }\r\n * @param options.logLevel Sets the log level for Realtime\r\n * @param options.encode The function to encode outgoing messages. Defaults to JSON: (payload, callback) => callback(JSON.stringify(payload))\r\n * @param options.decode The function to decode incoming messages. Defaults to Serializer's decode.\r\n * @param options.reconnectAfterMs he optional function that returns the millsec reconnect interval. Defaults to stepped backoff off.\r\n * @param options.worker Use Web Worker to set a side flow. Defaults to false.\r\n * @param options.workerUrl The URL of the worker script. Defaults to https://realtime.supabase.com/worker.js that includes a heartbeat event call to keep the connection alive.\r\n */\r\n constructor(endPoint, options) {\r\n var _a;\r\n this.accessTokenValue = null;\r\n this.apiKey = null;\r\n this.channels = new Array();\r\n this.endPoint = '';\r\n this.httpEndpoint = '';\r\n /** @deprecated headers cannot be set on websocket connections */\r\n this.headers = {};\r\n this.params = {};\r\n this.timeout = constants_1.DEFAULT_TIMEOUT;\r\n this.heartbeatIntervalMs = 25000;\r\n this.heartbeatTimer = undefined;\r\n this.pendingHeartbeatRef = null;\r\n this.heartbeatCallback = noop;\r\n this.ref = 0;\r\n this.logger = noop;\r\n this.conn = null;\r\n this.sendBuffer = [];\r\n this.serializer = new serializer_1.default();\r\n this.stateChangeCallbacks = {\r\n open: [],\r\n close: [],\r\n error: [],\r\n message: [],\r\n };\r\n this.accessToken = null;\r\n /**\r\n * Use either custom fetch, if provided, or default fetch to make HTTP requests\r\n *\r\n * @internal\r\n */\r\n this._resolveFetch = (customFetch) => {\r\n let _fetch;\r\n if (customFetch) {\r\n _fetch = customFetch;\r\n }\r\n else if (typeof fetch === 'undefined') {\r\n _fetch = (...args) => Promise.resolve(`${'@supabase/node-fetch'}`).then(s => __importStar(__webpack_require__(\"(ssr)/./node_modules/@supabase/realtime-js/dist/main sync recursive\")(s))).then(({ default: fetch }) => fetch(...args));\r\n }\r\n else {\r\n _fetch = fetch;\r\n }\r\n return (...args) => _fetch(...args);\r\n };\r\n this.endPoint = `${endPoint}/${constants_1.TRANSPORTS.websocket}`;\r\n this.httpEndpoint = (0, transformers_1.httpEndpointURL)(endPoint);\r\n if (options === null || options === void 0 ? void 0 : options.transport) {\r\n this.transport = options.transport;\r\n }\r\n else {\r\n this.transport = null;\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.params)\r\n this.params = options.params;\r\n if (options === null || options === void 0 ? void 0 : options.timeout)\r\n this.timeout = options.timeout;\r\n if (options === null || options === void 0 ? void 0 : options.logger)\r\n this.logger = options.logger;\r\n if ((options === null || options === void 0 ? void 0 : options.logLevel) || (options === null || options === void 0 ? void 0 : options.log_level)) {\r\n this.logLevel = options.logLevel || options.log_level;\r\n this.params = Object.assign(Object.assign({}, this.params), { log_level: this.logLevel });\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.heartbeatIntervalMs)\r\n this.heartbeatIntervalMs = options.heartbeatIntervalMs;\r\n const accessTokenValue = (_a = options === null || options === void 0 ? void 0 : options.params) === null || _a === void 0 ? void 0 : _a.apikey;\r\n if (accessTokenValue) {\r\n this.accessTokenValue = accessTokenValue;\r\n this.apiKey = accessTokenValue;\r\n }\r\n this.reconnectAfterMs = (options === null || options === void 0 ? void 0 : options.reconnectAfterMs)\r\n ? options.reconnectAfterMs\r\n : (tries) => {\r\n return [1000, 2000, 5000, 10000][tries - 1] || 10000;\r\n };\r\n this.encode = (options === null || options === void 0 ? void 0 : options.encode)\r\n ? options.encode\r\n : (payload, callback) => {\r\n return callback(JSON.stringify(payload));\r\n };\r\n this.decode = (options === null || options === void 0 ? void 0 : options.decode)\r\n ? options.decode\r\n : this.serializer.decode.bind(this.serializer);\r\n this.reconnectTimer = new timer_1.default(async () => {\r\n this.disconnect();\r\n this.connect();\r\n }, this.reconnectAfterMs);\r\n this.fetch = this._resolveFetch(options === null || options === void 0 ? void 0 : options.fetch);\r\n if (options === null || options === void 0 ? void 0 : options.worker) {\r\n if (typeof window !== 'undefined' && !window.Worker) {\r\n throw new Error('Web Worker is not supported');\r\n }\r\n this.worker = (options === null || options === void 0 ? void 0 : options.worker) || false;\r\n this.workerUrl = options === null || options === void 0 ? void 0 : options.workerUrl;\r\n }\r\n this.accessToken = (options === null || options === void 0 ? void 0 : options.accessToken) || null;\r\n }\r\n /**\r\n * Connects the socket, unless already connected.\r\n */\r\n connect() {\r\n if (this.conn) {\r\n return;\r\n }\r\n if (!this.transport) {\r\n this.transport = isows_1.WebSocket;\r\n }\r\n if (!this.transport) {\r\n throw new Error('No transport provided');\r\n }\r\n this.conn = new this.transport(this.endpointURL());\r\n this.setupConnection();\r\n }\r\n /**\r\n * Returns the URL of the websocket.\r\n * @returns string The URL of the websocket.\r\n */\r\n endpointURL() {\r\n return this._appendParams(this.endPoint, Object.assign({}, this.params, { vsn: constants_1.VSN }));\r\n }\r\n /**\r\n * Disconnects the socket.\r\n *\r\n * @param code A numeric status code to send on disconnect.\r\n * @param reason A custom reason for the disconnect.\r\n */\r\n disconnect(code, reason) {\r\n if (this.conn) {\r\n this.conn.onclose = function () { }; // noop\r\n if (code) {\r\n this.conn.close(code, reason !== null && reason !== void 0 ? reason : '');\r\n }\r\n else {\r\n this.conn.close();\r\n }\r\n this.conn = null;\r\n // remove open handles\r\n this.heartbeatTimer && clearInterval(this.heartbeatTimer);\r\n this.reconnectTimer.reset();\r\n this.channels.forEach((channel) => channel.teardown());\r\n }\r\n }\r\n /**\r\n * Returns all created channels\r\n */\r\n getChannels() {\r\n return this.channels;\r\n }\r\n /**\r\n * Unsubscribes and removes a single channel\r\n * @param channel A RealtimeChannel instance\r\n */\r\n async removeChannel(channel) {\r\n const status = await channel.unsubscribe();\r\n if (this.channels.length === 0) {\r\n this.disconnect();\r\n }\r\n return status;\r\n }\r\n /**\r\n * Unsubscribes and removes all channels\r\n */\r\n async removeAllChannels() {\r\n const values_1 = await Promise.all(this.channels.map((channel) => channel.unsubscribe()));\r\n this.channels = [];\r\n this.disconnect();\r\n return values_1;\r\n }\r\n /**\r\n * Logs the message.\r\n *\r\n * For customized logging, `this.logger` can be overridden.\r\n */\r\n log(kind, msg, data) {\r\n this.logger(kind, msg, data);\r\n }\r\n /**\r\n * Returns the current state of the socket.\r\n */\r\n connectionState() {\r\n switch (this.conn && this.conn.readyState) {\r\n case constants_1.SOCKET_STATES.connecting:\r\n return constants_1.CONNECTION_STATE.Connecting;\r\n case constants_1.SOCKET_STATES.open:\r\n return constants_1.CONNECTION_STATE.Open;\r\n case constants_1.SOCKET_STATES.closing:\r\n return constants_1.CONNECTION_STATE.Closing;\r\n default:\r\n return constants_1.CONNECTION_STATE.Closed;\r\n }\r\n }\r\n /**\r\n * Returns `true` is the connection is open.\r\n */\r\n isConnected() {\r\n return this.connectionState() === constants_1.CONNECTION_STATE.Open;\r\n }\r\n channel(topic, params = { config: {} }) {\r\n const realtimeTopic = `realtime:${topic}`;\r\n const exists = this.getChannels().find((c) => c.topic === realtimeTopic);\r\n if (!exists) {\r\n const chan = new RealtimeChannel_1.default(`realtime:${topic}`, params, this);\r\n this.channels.push(chan);\r\n return chan;\r\n }\r\n else {\r\n return exists;\r\n }\r\n }\r\n /**\r\n * Push out a message if the socket is connected.\r\n *\r\n * If the socket is not connected, the message gets enqueued within a local buffer, and sent out when a connection is next established.\r\n */\r\n push(data) {\r\n const { topic, event, payload, ref } = data;\r\n const callback = () => {\r\n this.encode(data, (result) => {\r\n var _a;\r\n (_a = this.conn) === null || _a === void 0 ? void 0 : _a.send(result);\r\n });\r\n };\r\n this.log('push', `${topic} ${event} (${ref})`, payload);\r\n if (this.isConnected()) {\r\n callback();\r\n }\r\n else {\r\n this.sendBuffer.push(callback);\r\n }\r\n }\r\n /**\r\n * Sets the JWT access token used for channel subscription authorization and Realtime RLS.\r\n *\r\n * If param is null it will use the `accessToken` callback function or the token set on the client.\r\n *\r\n * On callback used, it will set the value of the token internal to the client.\r\n *\r\n * @param token A JWT string to override the token set on the client.\r\n */\r\n async setAuth(token = null) {\r\n let tokenToSend = token ||\r\n (this.accessToken && (await this.accessToken())) ||\r\n this.accessTokenValue;\r\n if (this.accessTokenValue != tokenToSend) {\r\n this.accessTokenValue = tokenToSend;\r\n this.channels.forEach((channel) => {\r\n const payload = {\r\n access_token: tokenToSend,\r\n version: constants_1.DEFAULT_VERSION,\r\n };\r\n tokenToSend && channel.updateJoinPayload(payload);\r\n if (channel.joinedOnce && channel._isJoined()) {\r\n channel._push(constants_1.CHANNEL_EVENTS.access_token, {\r\n access_token: tokenToSend,\r\n });\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * Sends a heartbeat message if the socket is connected.\r\n */\r\n async sendHeartbeat() {\r\n var _a;\r\n if (!this.isConnected()) {\r\n this.heartbeatCallback('disconnected');\r\n return;\r\n }\r\n if (this.pendingHeartbeatRef) {\r\n this.pendingHeartbeatRef = null;\r\n this.log('transport', 'heartbeat timeout. Attempting to re-establish connection');\r\n this.heartbeatCallback('timeout');\r\n (_a = this.conn) === null || _a === void 0 ? void 0 : _a.close(constants_1.WS_CLOSE_NORMAL, 'hearbeat timeout');\r\n return;\r\n }\r\n this.pendingHeartbeatRef = this._makeRef();\r\n this.push({\r\n topic: 'phoenix',\r\n event: 'heartbeat',\r\n payload: {},\r\n ref: this.pendingHeartbeatRef,\r\n });\r\n this.heartbeatCallback('sent');\r\n await this.setAuth();\r\n }\r\n onHeartbeat(callback) {\r\n this.heartbeatCallback = callback;\r\n }\r\n /**\r\n * Flushes send buffer\r\n */\r\n flushSendBuffer() {\r\n if (this.isConnected() && this.sendBuffer.length > 0) {\r\n this.sendBuffer.forEach((callback) => callback());\r\n this.sendBuffer = [];\r\n }\r\n }\r\n /**\r\n * Return the next message ref, accounting for overflows\r\n *\r\n * @internal\r\n */\r\n _makeRef() {\r\n let newRef = this.ref + 1;\r\n if (newRef === this.ref) {\r\n this.ref = 0;\r\n }\r\n else {\r\n this.ref = newRef;\r\n }\r\n return this.ref.toString();\r\n }\r\n /**\r\n * Unsubscribe from channels with the specified topic.\r\n *\r\n * @internal\r\n */\r\n _leaveOpenTopic(topic) {\r\n let dupChannel = this.channels.find((c) => c.topic === topic && (c._isJoined() || c._isJoining()));\r\n if (dupChannel) {\r\n this.log('transport', `leaving duplicate topic \"${topic}\"`);\r\n dupChannel.unsubscribe();\r\n }\r\n }\r\n /**\r\n * Removes a subscription from the socket.\r\n *\r\n * @param channel An open subscription.\r\n *\r\n * @internal\r\n */\r\n _remove(channel) {\r\n this.channels = this.channels.filter((c) => c.topic !== channel.topic);\r\n }\r\n /**\r\n * Sets up connection handlers.\r\n *\r\n * @internal\r\n */\r\n setupConnection() {\r\n if (this.conn) {\r\n this.conn.binaryType = 'arraybuffer';\r\n this.conn.onopen = () => this._onConnOpen();\r\n this.conn.onerror = (error) => this._onConnError(error);\r\n this.conn.onmessage = (event) => this._onConnMessage(event);\r\n this.conn.onclose = (event) => this._onConnClose(event);\r\n }\r\n }\r\n /** @internal */\r\n _onConnMessage(rawMessage) {\r\n this.decode(rawMessage.data, (msg) => {\r\n let { topic, event, payload, ref } = msg;\r\n if (topic === 'phoenix' && event === 'phx_reply') {\r\n this.heartbeatCallback(msg.payload.status == 'ok' ? 'ok' : 'error');\r\n }\r\n if (ref && ref === this.pendingHeartbeatRef) {\r\n this.pendingHeartbeatRef = null;\r\n }\r\n this.log('receive', `${payload.status || ''} ${topic} ${event} ${(ref && '(' + ref + ')') || ''}`, payload);\r\n Array.from(this.channels)\r\n .filter((channel) => channel._isMember(topic))\r\n .forEach((channel) => channel._trigger(event, payload, ref));\r\n this.stateChangeCallbacks.message.forEach((callback) => callback(msg));\r\n });\r\n }\r\n /** @internal */\r\n _onConnOpen() {\r\n this.log('transport', `connected to ${this.endpointURL()}`);\r\n this.flushSendBuffer();\r\n this.reconnectTimer.reset();\r\n if (!this.worker) {\r\n this._startHeartbeat();\r\n }\r\n else {\r\n if (!this.workerRef) {\r\n this._startWorkerHeartbeat();\r\n }\r\n }\r\n this.stateChangeCallbacks.open.forEach((callback) => callback());\r\n }\r\n /** @internal */\r\n _startHeartbeat() {\r\n this.heartbeatTimer && clearInterval(this.heartbeatTimer);\r\n this.heartbeatTimer = setInterval(() => this.sendHeartbeat(), this.heartbeatIntervalMs);\r\n }\r\n /** @internal */\r\n _startWorkerHeartbeat() {\r\n if (this.workerUrl) {\r\n this.log('worker', `starting worker for from ${this.workerUrl}`);\r\n }\r\n else {\r\n this.log('worker', `starting default worker`);\r\n }\r\n const objectUrl = this._workerObjectUrl(this.workerUrl);\r\n this.workerRef = new Worker(objectUrl);\r\n this.workerRef.onerror = (error) => {\r\n this.log('worker', 'worker error', error.message);\r\n this.workerRef.terminate();\r\n };\r\n this.workerRef.onmessage = (event) => {\r\n if (event.data.event === 'keepAlive') {\r\n this.sendHeartbeat();\r\n }\r\n };\r\n this.workerRef.postMessage({\r\n event: 'start',\r\n interval: this.heartbeatIntervalMs,\r\n });\r\n }\r\n /** @internal */\r\n _onConnClose(event) {\r\n this.log('transport', 'close', event);\r\n this._triggerChanError();\r\n this.heartbeatTimer && clearInterval(this.heartbeatTimer);\r\n this.reconnectTimer.scheduleTimeout();\r\n this.stateChangeCallbacks.close.forEach((callback) => callback(event));\r\n }\r\n /** @internal */\r\n _onConnError(error) {\r\n this.log('transport', `${error}`);\r\n this._triggerChanError();\r\n this.stateChangeCallbacks.error.forEach((callback) => callback(error));\r\n }\r\n /** @internal */\r\n _triggerChanError() {\r\n this.channels.forEach((channel) => channel._trigger(constants_1.CHANNEL_EVENTS.error));\r\n }\r\n /** @internal */\r\n _appendParams(url, params) {\r\n if (Object.keys(params).length === 0) {\r\n return url;\r\n }\r\n const prefix = url.match(/\\?/) ? '&' : '?';\r\n const query = new URLSearchParams(params);\r\n return `${url}${prefix}${query}`;\r\n }\r\n _workerObjectUrl(url) {\r\n let result_url;\r\n if (url) {\r\n result_url = url;\r\n }\r\n else {\r\n const blob = new Blob([WORKER_SCRIPT], { type: 'application/javascript' });\r\n result_url = URL.createObjectURL(blob);\r\n }\r\n return result_url;\r\n }\r\n}\r\nexports[\"default\"] = RealtimeClient;\r\n//# sourceMappingURL=RealtimeClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbWFpbi9SZWFsdGltZUNsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQ0FBb0M7QUFDbkQ7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsMENBQTBDLDRCQUE0QjtBQUN0RSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJELGNBQWM7QUFDekU7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGdCQUFnQixtQkFBTyxDQUFDLHVEQUFPO0FBQy9CLG9CQUFvQixtQkFBTyxDQUFDLDhGQUFpQjtBQUM3QyxxQ0FBcUMsbUJBQU8sQ0FBQyxnR0FBa0I7QUFDL0QsZ0NBQWdDLG1CQUFPLENBQUMsc0ZBQWE7QUFDckQsdUJBQXVCLG1CQUFPLENBQUMsb0dBQW9CO0FBQ25ELDBDQUEwQyxtQkFBTyxDQUFDLGtHQUFtQjtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxvQkFBb0I7QUFDMUQ7QUFDQSxHQUFHLEVBQUU7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0dBQStHLGVBQWUsS0FBSyxJQUFJLElBQUk7QUFDM0k7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELHVCQUF1QiwwQkFBMEIsMkZBQVEsQ0FBQyxDQUFDLFdBQVcsZ0JBQWdCO0FBQy9JO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixTQUFTLEdBQUcsaUNBQWlDO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCxrQkFBa0IsMEJBQTBCO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRSxpQkFBaUIsc0JBQXNCO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFlBQVk7QUFDMUMsMENBQTBDLE1BQU07QUFDaEQ7QUFDQTtBQUNBLG1FQUFtRSxNQUFNO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLDRCQUE0QixPQUFPLEVBQUUsT0FBTyxHQUFHLElBQUk7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCxNQUFNO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiw2QkFBNkI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLHNCQUFzQixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsK0JBQStCO0FBQzVHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxtQkFBbUI7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxlQUFlO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLE1BQU07QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU07QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsZ0NBQWdDO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9yZWFsdGltZS1qcy9kaXN0L21haW4vUmVhbHRpbWVDbGllbnQuanM/MDEzMCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSkpO1xyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn0pO1xyXG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgb3duS2V5cyA9IGZ1bmN0aW9uKG8pIHtcclxuICAgICAgICBvd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICAgICAgdmFyIGFyID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XHJcbiAgICAgICAgICAgIHJldHVybiBhcjtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBvd25LZXlzKG8pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICAgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICAgICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcclxuICAgICAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG59KSgpO1xyXG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmNvbnN0IGlzb3dzXzEgPSByZXF1aXJlKFwiaXNvd3NcIik7XHJcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vbGliL2NvbnN0YW50c1wiKTtcclxuY29uc3Qgc2VyaWFsaXplcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2xpYi9zZXJpYWxpemVyXCIpKTtcclxuY29uc3QgdGltZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9saWIvdGltZXJcIikpO1xyXG5jb25zdCB0cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2xpYi90cmFuc2Zvcm1lcnNcIik7XHJcbmNvbnN0IFJlYWx0aW1lQ2hhbm5lbF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1JlYWx0aW1lQ2hhbm5lbFwiKSk7XHJcbmNvbnN0IG5vb3AgPSAoKSA9PiB7IH07XHJcbmNvbnN0IFdPUktFUl9TQ1JJUFQgPSBgXHJcbiAgYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKGUpID0+IHtcclxuICAgIGlmIChlLmRhdGEuZXZlbnQgPT09IFwic3RhcnRcIikge1xyXG4gICAgICBzZXRJbnRlcnZhbCgoKSA9PiBwb3N0TWVzc2FnZSh7IGV2ZW50OiBcImtlZXBBbGl2ZVwiIH0pLCBlLmRhdGEuaW50ZXJ2YWwpO1xyXG4gICAgfVxyXG4gIH0pO2A7XHJcbmNsYXNzIFJlYWx0aW1lQ2xpZW50IHtcclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgdGhlIFNvY2tldC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZW5kUG9pbnQgVGhlIHN0cmluZyBXZWJTb2NrZXQgZW5kcG9pbnQsIGllLCBcIndzOi8vZXhhbXBsZS5jb20vc29ja2V0XCIsIFwid3NzOi8vZXhhbXBsZS5jb21cIiwgXCIvc29ja2V0XCIgKGluaGVyaXRlZCBob3N0ICYgcHJvdG9jb2wpXHJcbiAgICAgKiBAcGFyYW0gaHR0cEVuZHBvaW50IFRoZSBzdHJpbmcgSFRUUCBlbmRwb2ludCwgaWUsIFwiaHR0cHM6Ly9leGFtcGxlLmNvbVwiLCBcIi9cIiAoaW5oZXJpdGVkIGhvc3QgJiBwcm90b2NvbClcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLnRyYW5zcG9ydCBUaGUgV2Vic29ja2V0IFRyYW5zcG9ydCwgZm9yIGV4YW1wbGUgV2ViU29ja2V0LiBUaGlzIGNhbiBiZSBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvblxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMudGltZW91dCBUaGUgZGVmYXVsdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byB0cmlnZ2VyIHB1c2ggdGltZW91dHMuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5wYXJhbXMgVGhlIG9wdGlvbmFsIHBhcmFtcyB0byBwYXNzIHdoZW4gY29ubmVjdGluZy5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmhlYWRlcnMgRGVwcmVjYXRlZDogaGVhZGVycyBjYW5ub3QgYmUgc2V0IG9uIHdlYnNvY2tldCBjb25uZWN0aW9ucyBhbmQgdGhpcyBvcHRpb24gd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5oZWFydGJlYXRJbnRlcnZhbE1zIFRoZSBtaWxsaXNlYyBpbnRlcnZhbCB0byBzZW5kIGEgaGVhcnRiZWF0IG1lc3NhZ2UuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5sb2dnZXIgVGhlIG9wdGlvbmFsIGZ1bmN0aW9uIGZvciBzcGVjaWFsaXplZCBsb2dnaW5nLCBpZTogbG9nZ2VyOiAoa2luZCwgbXNnLCBkYXRhKSA9PiB7IGNvbnNvbGUubG9nKGAke2tpbmR9OiAke21zZ31gLCBkYXRhKSB9XHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5sb2dMZXZlbCBTZXRzIHRoZSBsb2cgbGV2ZWwgZm9yIFJlYWx0aW1lXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5lbmNvZGUgVGhlIGZ1bmN0aW9uIHRvIGVuY29kZSBvdXRnb2luZyBtZXNzYWdlcy4gRGVmYXVsdHMgdG8gSlNPTjogKHBheWxvYWQsIGNhbGxiYWNrKSA9PiBjYWxsYmFjayhKU09OLnN0cmluZ2lmeShwYXlsb2FkKSlcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmRlY29kZSBUaGUgZnVuY3Rpb24gdG8gZGVjb2RlIGluY29taW5nIG1lc3NhZ2VzLiBEZWZhdWx0cyB0byBTZXJpYWxpemVyJ3MgZGVjb2RlLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMucmVjb25uZWN0QWZ0ZXJNcyBoZSBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG1pbGxzZWMgcmVjb25uZWN0IGludGVydmFsLiBEZWZhdWx0cyB0byBzdGVwcGVkIGJhY2tvZmYgb2ZmLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMud29ya2VyIFVzZSBXZWIgV29ya2VyIHRvIHNldCBhIHNpZGUgZmxvdy4gRGVmYXVsdHMgdG8gZmFsc2UuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy53b3JrZXJVcmwgVGhlIFVSTCBvZiB0aGUgd29ya2VyIHNjcmlwdC4gRGVmYXVsdHMgdG8gaHR0cHM6Ly9yZWFsdGltZS5zdXBhYmFzZS5jb20vd29ya2VyLmpzIHRoYXQgaW5jbHVkZXMgYSBoZWFydGJlYXQgZXZlbnQgY2FsbCB0byBrZWVwIHRoZSBjb25uZWN0aW9uIGFsaXZlLlxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihlbmRQb2ludCwgb3B0aW9ucykge1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuVmFsdWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYXBpS2V5ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNoYW5uZWxzID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9ICcnO1xyXG4gICAgICAgIHRoaXMuaHR0cEVuZHBvaW50ID0gJyc7XHJcbiAgICAgICAgLyoqIEBkZXByZWNhdGVkIGhlYWRlcnMgY2Fubm90IGJlIHNldCBvbiB3ZWJzb2NrZXQgY29ubmVjdGlvbnMgKi9cclxuICAgICAgICB0aGlzLmhlYWRlcnMgPSB7fTtcclxuICAgICAgICB0aGlzLnBhcmFtcyA9IHt9O1xyXG4gICAgICAgIHRoaXMudGltZW91dCA9IGNvbnN0YW50c18xLkRFRkFVTFRfVElNRU9VVDtcclxuICAgICAgICB0aGlzLmhlYXJ0YmVhdEludGVydmFsTXMgPSAyNTAwMDtcclxuICAgICAgICB0aGlzLmhlYXJ0YmVhdFRpbWVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5oZWFydGJlYXRDYWxsYmFjayA9IG5vb3A7XHJcbiAgICAgICAgdGhpcy5yZWYgPSAwO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyID0gbm9vcDtcclxuICAgICAgICB0aGlzLmNvbm4gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VuZEJ1ZmZlciA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VyaWFsaXplciA9IG5ldyBzZXJpYWxpemVyXzEuZGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3MgPSB7XHJcbiAgICAgICAgICAgIG9wZW46IFtdLFxyXG4gICAgICAgICAgICBjbG9zZTogW10sXHJcbiAgICAgICAgICAgIGVycm9yOiBbXSxcclxuICAgICAgICAgICAgbWVzc2FnZTogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gbnVsbDtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVc2UgZWl0aGVyIGN1c3RvbSBmZXRjaCwgaWYgcHJvdmlkZWQsIG9yIGRlZmF1bHQgZmV0Y2ggdG8gbWFrZSBIVFRQIHJlcXVlc3RzXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAaW50ZXJuYWxcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9yZXNvbHZlRmV0Y2ggPSAoY3VzdG9tRmV0Y2gpID0+IHtcclxuICAgICAgICAgICAgbGV0IF9mZXRjaDtcclxuICAgICAgICAgICAgaWYgKGN1c3RvbUZldGNoKSB7XHJcbiAgICAgICAgICAgICAgICBfZmV0Y2ggPSBjdXN0b21GZXRjaDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZmV0Y2ggPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICBfZmV0Y2ggPSAoLi4uYXJncykgPT4gUHJvbWlzZS5yZXNvbHZlKGAkeydAc3VwYWJhc2Uvbm9kZS1mZXRjaCd9YCkudGhlbihzID0+IF9faW1wb3J0U3RhcihyZXF1aXJlKHMpKSkudGhlbigoeyBkZWZhdWx0OiBmZXRjaCB9KSA9PiBmZXRjaCguLi5hcmdzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBfZmV0Y2ggPSBmZXRjaDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IF9mZXRjaCguLi5hcmdzKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZW5kUG9pbnQgPSBgJHtlbmRQb2ludH0vJHtjb25zdGFudHNfMS5UUkFOU1BPUlRTLndlYnNvY2tldH1gO1xyXG4gICAgICAgIHRoaXMuaHR0cEVuZHBvaW50ID0gKDAsIHRyYW5zZm9ybWVyc18xLmh0dHBFbmRwb2ludFVSTCkoZW5kUG9pbnQpO1xyXG4gICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudHJhbnNwb3J0KSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0ID0gb3B0aW9ucy50cmFuc3BvcnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zcG9ydCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucGFyYW1zKVxyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcyA9IG9wdGlvbnMucGFyYW1zO1xyXG4gICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudGltZW91dClcclxuICAgICAgICAgICAgdGhpcy50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0O1xyXG4gICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubG9nZ2VyKVxyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyO1xyXG4gICAgICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxvZ0xldmVsKSB8fCAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxvZ19sZXZlbCkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dMZXZlbCA9IG9wdGlvbnMubG9nTGV2ZWwgfHwgb3B0aW9ucy5sb2dfbGV2ZWw7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBhcmFtcyksIHsgbG9nX2xldmVsOiB0aGlzLmxvZ0xldmVsIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmhlYXJ0YmVhdEludGVydmFsTXMpXHJcbiAgICAgICAgICAgIHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWxNcyA9IG9wdGlvbnMuaGVhcnRiZWF0SW50ZXJ2YWxNcztcclxuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlblZhbHVlID0gKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnBhcmFtcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFwaWtleTtcclxuICAgICAgICBpZiAoYWNjZXNzVG9rZW5WYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuVmFsdWUgPSBhY2Nlc3NUb2tlblZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLmFwaUtleSA9IGFjY2Vzc1Rva2VuVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVjb25uZWN0QWZ0ZXJNcyA9IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmVjb25uZWN0QWZ0ZXJNcylcclxuICAgICAgICAgICAgPyBvcHRpb25zLnJlY29ubmVjdEFmdGVyTXNcclxuICAgICAgICAgICAgOiAodHJpZXMpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbMTAwMCwgMjAwMCwgNTAwMCwgMTAwMDBdW3RyaWVzIC0gMV0gfHwgMTAwMDA7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5lbmNvZGUgPSAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmVuY29kZSlcclxuICAgICAgICAgICAgPyBvcHRpb25zLmVuY29kZVxyXG4gICAgICAgICAgICA6IChwYXlsb2FkLCBjYWxsYmFjaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmRlY29kZSA9IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZGVjb2RlKVxyXG4gICAgICAgICAgICA/IG9wdGlvbnMuZGVjb2RlXHJcbiAgICAgICAgICAgIDogdGhpcy5zZXJpYWxpemVyLmRlY29kZS5iaW5kKHRoaXMuc2VyaWFsaXplcik7XHJcbiAgICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lciA9IG5ldyB0aW1lcl8xLmRlZmF1bHQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgICAgdGhpcy5jb25uZWN0KCk7XHJcbiAgICAgICAgfSwgdGhpcy5yZWNvbm5lY3RBZnRlck1zKTtcclxuICAgICAgICB0aGlzLmZldGNoID0gdGhpcy5fcmVzb2x2ZUZldGNoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5mZXRjaCk7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53b3JrZXIpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICF3aW5kb3cuV29ya2VyKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYiBXb3JrZXIgaXMgbm90IHN1cHBvcnRlZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMud29ya2VyID0gKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53b3JrZXIpIHx8IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLndvcmtlclVybCA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53b3JrZXJVcmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFjY2Vzc1Rva2VuKSB8fCBudWxsO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25uZWN0cyB0aGUgc29ja2V0LCB1bmxlc3MgYWxyZWFkeSBjb25uZWN0ZWQuXHJcbiAgICAgKi9cclxuICAgIGNvbm5lY3QoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29ubikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy50cmFuc3BvcnQpIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc3BvcnQgPSBpc293c18xLldlYlNvY2tldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnRyYW5zcG9ydCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRyYW5zcG9ydCBwcm92aWRlZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbm4gPSBuZXcgdGhpcy50cmFuc3BvcnQodGhpcy5lbmRwb2ludFVSTCgpKTtcclxuICAgICAgICB0aGlzLnNldHVwQ29ubmVjdGlvbigpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBVUkwgb2YgdGhlIHdlYnNvY2tldC5cclxuICAgICAqIEByZXR1cm5zIHN0cmluZyBUaGUgVVJMIG9mIHRoZSB3ZWJzb2NrZXQuXHJcbiAgICAgKi9cclxuICAgIGVuZHBvaW50VVJMKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBlbmRQYXJhbXModGhpcy5lbmRQb2ludCwgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wYXJhbXMsIHsgdnNuOiBjb25zdGFudHNfMS5WU04gfSkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNjb25uZWN0cyB0aGUgc29ja2V0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2RlIEEgbnVtZXJpYyBzdGF0dXMgY29kZSB0byBzZW5kIG9uIGRpc2Nvbm5lY3QuXHJcbiAgICAgKiBAcGFyYW0gcmVhc29uIEEgY3VzdG9tIHJlYXNvbiBmb3IgdGhlIGRpc2Nvbm5lY3QuXHJcbiAgICAgKi9cclxuICAgIGRpc2Nvbm5lY3QoY29kZSwgcmVhc29uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29ubikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbm4ub25jbG9zZSA9IGZ1bmN0aW9uICgpIHsgfTsgLy8gbm9vcFxyXG4gICAgICAgICAgICBpZiAoY29kZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25uLmNsb3NlKGNvZGUsIHJlYXNvbiAhPT0gbnVsbCAmJiByZWFzb24gIT09IHZvaWQgMCA/IHJlYXNvbiA6ICcnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29ubi5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY29ubiA9IG51bGw7XHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSBvcGVuIGhhbmRsZXNcclxuICAgICAgICAgICAgdGhpcy5oZWFydGJlYXRUaW1lciAmJiBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0VGltZXIpO1xyXG4gICAgICAgICAgICB0aGlzLnJlY29ubmVjdFRpbWVyLnJlc2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHMuZm9yRWFjaCgoY2hhbm5lbCkgPT4gY2hhbm5lbC50ZWFyZG93bigpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYWxsIGNyZWF0ZWQgY2hhbm5lbHNcclxuICAgICAqL1xyXG4gICAgZ2V0Q2hhbm5lbHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhbm5lbHM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVuc3Vic2NyaWJlcyBhbmQgcmVtb3ZlcyBhIHNpbmdsZSBjaGFubmVsXHJcbiAgICAgKiBAcGFyYW0gY2hhbm5lbCBBIFJlYWx0aW1lQ2hhbm5lbCBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBhc3luYyByZW1vdmVDaGFubmVsKGNoYW5uZWwpIHtcclxuICAgICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBjaGFubmVsLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhbm5lbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RhdHVzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVbnN1YnNjcmliZXMgYW5kIHJlbW92ZXMgYWxsIGNoYW5uZWxzXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHJlbW92ZUFsbENoYW5uZWxzKCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlc18xID0gYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5jaGFubmVscy5tYXAoKGNoYW5uZWwpID0+IGNoYW5uZWwudW5zdWJzY3JpYmUoKSkpO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbHMgPSBbXTtcclxuICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICByZXR1cm4gdmFsdWVzXzE7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIExvZ3MgdGhlIG1lc3NhZ2UuXHJcbiAgICAgKlxyXG4gICAgICogRm9yIGN1c3RvbWl6ZWQgbG9nZ2luZywgYHRoaXMubG9nZ2VyYCBjYW4gYmUgb3ZlcnJpZGRlbi5cclxuICAgICAqL1xyXG4gICAgbG9nKGtpbmQsIG1zZywgZGF0YSkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyKGtpbmQsIG1zZywgZGF0YSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNvY2tldC5cclxuICAgICAqL1xyXG4gICAgY29ubmVjdGlvblN0YXRlKCkge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5jb25uICYmIHRoaXMuY29ubi5yZWFkeVN0YXRlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgY29uc3RhbnRzXzEuU09DS0VUX1NUQVRFUy5jb25uZWN0aW5nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50c18xLkNPTk5FQ1RJT05fU1RBVEUuQ29ubmVjdGluZztcclxuICAgICAgICAgICAgY2FzZSBjb25zdGFudHNfMS5TT0NLRVRfU1RBVEVTLm9wZW46XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRzXzEuQ09OTkVDVElPTl9TVEFURS5PcGVuO1xyXG4gICAgICAgICAgICBjYXNlIGNvbnN0YW50c18xLlNPQ0tFVF9TVEFURVMuY2xvc2luZzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb25zdGFudHNfMS5DT05ORUNUSU9OX1NUQVRFLkNsb3Npbmc7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRzXzEuQ09OTkVDVElPTl9TVEFURS5DbG9zZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpcyB0aGUgY29ubmVjdGlvbiBpcyBvcGVuLlxyXG4gICAgICovXHJcbiAgICBpc0Nvbm5lY3RlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uU3RhdGUoKSA9PT0gY29uc3RhbnRzXzEuQ09OTkVDVElPTl9TVEFURS5PcGVuO1xyXG4gICAgfVxyXG4gICAgY2hhbm5lbCh0b3BpYywgcGFyYW1zID0geyBjb25maWc6IHt9IH0pIHtcclxuICAgICAgICBjb25zdCByZWFsdGltZVRvcGljID0gYHJlYWx0aW1lOiR7dG9waWN9YDtcclxuICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLmdldENoYW5uZWxzKCkuZmluZCgoYykgPT4gYy50b3BpYyA9PT0gcmVhbHRpbWVUb3BpYyk7XHJcbiAgICAgICAgaWYgKCFleGlzdHMpIHtcclxuICAgICAgICAgICAgY29uc3QgY2hhbiA9IG5ldyBSZWFsdGltZUNoYW5uZWxfMS5kZWZhdWx0KGByZWFsdGltZToke3RvcGljfWAsIHBhcmFtcywgdGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHMucHVzaChjaGFuKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNoYW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZXhpc3RzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUHVzaCBvdXQgYSBtZXNzYWdlIGlmIHRoZSBzb2NrZXQgaXMgY29ubmVjdGVkLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBzb2NrZXQgaXMgbm90IGNvbm5lY3RlZCwgdGhlIG1lc3NhZ2UgZ2V0cyBlbnF1ZXVlZCB3aXRoaW4gYSBsb2NhbCBidWZmZXIsIGFuZCBzZW50IG91dCB3aGVuIGEgY29ubmVjdGlvbiBpcyBuZXh0IGVzdGFibGlzaGVkLlxyXG4gICAgICovXHJcbiAgICBwdXNoKGRhdGEpIHtcclxuICAgICAgICBjb25zdCB7IHRvcGljLCBldmVudCwgcGF5bG9hZCwgcmVmIH0gPSBkYXRhO1xyXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVuY29kZShkYXRhLCAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgICAgICAoX2EgPSB0aGlzLmNvbm4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZW5kKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5sb2coJ3B1c2gnLCBgJHt0b3BpY30gJHtldmVudH0gKCR7cmVmfSlgLCBwYXlsb2FkKTtcclxuICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbmRCdWZmZXIucHVzaChjYWxsYmFjayk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBKV1QgYWNjZXNzIHRva2VuIHVzZWQgZm9yIGNoYW5uZWwgc3Vic2NyaXB0aW9uIGF1dGhvcml6YXRpb24gYW5kIFJlYWx0aW1lIFJMUy5cclxuICAgICAqXHJcbiAgICAgKiBJZiBwYXJhbSBpcyBudWxsIGl0IHdpbGwgdXNlIHRoZSBgYWNjZXNzVG9rZW5gIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIHRoZSB0b2tlbiBzZXQgb24gdGhlIGNsaWVudC5cclxuICAgICAqXHJcbiAgICAgKiBPbiBjYWxsYmFjayB1c2VkLCBpdCB3aWxsIHNldCB0aGUgdmFsdWUgb2YgdGhlIHRva2VuIGludGVybmFsIHRvIHRoZSBjbGllbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHRva2VuIEEgSldUIHN0cmluZyB0byBvdmVycmlkZSB0aGUgdG9rZW4gc2V0IG9uIHRoZSBjbGllbnQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNldEF1dGgodG9rZW4gPSBudWxsKSB7XHJcbiAgICAgICAgbGV0IHRva2VuVG9TZW5kID0gdG9rZW4gfHxcclxuICAgICAgICAgICAgKHRoaXMuYWNjZXNzVG9rZW4gJiYgKGF3YWl0IHRoaXMuYWNjZXNzVG9rZW4oKSkpIHx8XHJcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW5WYWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5hY2Nlc3NUb2tlblZhbHVlICE9IHRva2VuVG9TZW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW5WYWx1ZSA9IHRva2VuVG9TZW5kO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxzLmZvckVhY2goKGNoYW5uZWwpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiB0b2tlblRvU2VuZCxcclxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiBjb25zdGFudHNfMS5ERUZBVUxUX1ZFUlNJT04sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdG9rZW5Ub1NlbmQgJiYgY2hhbm5lbC51cGRhdGVKb2luUGF5bG9hZChwYXlsb2FkKTtcclxuICAgICAgICAgICAgICAgIGlmIChjaGFubmVsLmpvaW5lZE9uY2UgJiYgY2hhbm5lbC5faXNKb2luZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWwuX3B1c2goY29uc3RhbnRzXzEuQ0hBTk5FTF9FVkVOVFMuYWNjZXNzX3Rva2VuLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc190b2tlbjogdG9rZW5Ub1NlbmQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2VuZHMgYSBoZWFydGJlYXQgbWVzc2FnZSBpZiB0aGUgc29ja2V0IGlzIGNvbm5lY3RlZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2VuZEhlYXJ0YmVhdCgpIHtcclxuICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29ubmVjdGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5oZWFydGJlYXRDYWxsYmFjaygnZGlzY29ubmVjdGVkJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZikge1xyXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmxvZygndHJhbnNwb3J0JywgJ2hlYXJ0YmVhdCB0aW1lb3V0LiBBdHRlbXB0aW5nIHRvIHJlLWVzdGFibGlzaCBjb25uZWN0aW9uJyk7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhcnRiZWF0Q2FsbGJhY2soJ3RpbWVvdXQnKTtcclxuICAgICAgICAgICAgKF9hID0gdGhpcy5jb25uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2xvc2UoY29uc3RhbnRzXzEuV1NfQ0xPU0VfTk9STUFMLCAnaGVhcmJlYXQgdGltZW91dCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZiA9IHRoaXMuX21ha2VSZWYoKTtcclxuICAgICAgICB0aGlzLnB1c2goe1xyXG4gICAgICAgICAgICB0b3BpYzogJ3Bob2VuaXgnLFxyXG4gICAgICAgICAgICBldmVudDogJ2hlYXJ0YmVhdCcsXHJcbiAgICAgICAgICAgIHBheWxvYWQ6IHt9LFxyXG4gICAgICAgICAgICByZWY6IHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZixcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmhlYXJ0YmVhdENhbGxiYWNrKCdzZW50Jyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRBdXRoKCk7XHJcbiAgICB9XHJcbiAgICBvbkhlYXJ0YmVhdChjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuaGVhcnRiZWF0Q2FsbGJhY2sgPSBjYWxsYmFjaztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRmx1c2hlcyBzZW5kIGJ1ZmZlclxyXG4gICAgICovXHJcbiAgICBmbHVzaFNlbmRCdWZmZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQoKSAmJiB0aGlzLnNlbmRCdWZmZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbmRCdWZmZXIuZm9yRWFjaCgoY2FsbGJhY2spID0+IGNhbGxiYWNrKCkpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmRCdWZmZXIgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybiB0aGUgbmV4dCBtZXNzYWdlIHJlZiwgYWNjb3VudGluZyBmb3Igb3ZlcmZsb3dzXHJcbiAgICAgKlxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIF9tYWtlUmVmKCkge1xyXG4gICAgICAgIGxldCBuZXdSZWYgPSB0aGlzLnJlZiArIDE7XHJcbiAgICAgICAgaWYgKG5ld1JlZiA9PT0gdGhpcy5yZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWYgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZWYgPSBuZXdSZWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZi50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVbnN1YnNjcmliZSBmcm9tIGNoYW5uZWxzIHdpdGggdGhlIHNwZWNpZmllZCB0b3BpYy5cclxuICAgICAqXHJcbiAgICAgKiBAaW50ZXJuYWxcclxuICAgICAqL1xyXG4gICAgX2xlYXZlT3BlblRvcGljKHRvcGljKSB7XHJcbiAgICAgICAgbGV0IGR1cENoYW5uZWwgPSB0aGlzLmNoYW5uZWxzLmZpbmQoKGMpID0+IGMudG9waWMgPT09IHRvcGljICYmIChjLl9pc0pvaW5lZCgpIHx8IGMuX2lzSm9pbmluZygpKSk7XHJcbiAgICAgICAgaWYgKGR1cENoYW5uZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2coJ3RyYW5zcG9ydCcsIGBsZWF2aW5nIGR1cGxpY2F0ZSB0b3BpYyBcIiR7dG9waWN9XCJgKTtcclxuICAgICAgICAgICAgZHVwQ2hhbm5lbC51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIHN1YnNjcmlwdGlvbiBmcm9tIHRoZSBzb2NrZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNoYW5uZWwgQW4gb3BlbiBzdWJzY3JpcHRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIF9yZW1vdmUoY2hhbm5lbCkge1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbHMgPSB0aGlzLmNoYW5uZWxzLmZpbHRlcigoYykgPT4gYy50b3BpYyAhPT0gY2hhbm5lbC50b3BpYyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdXAgY29ubmVjdGlvbiBoYW5kbGVycy5cclxuICAgICAqXHJcbiAgICAgKiBAaW50ZXJuYWxcclxuICAgICAqL1xyXG4gICAgc2V0dXBDb25uZWN0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbm4pIHtcclxuICAgICAgICAgICAgdGhpcy5jb25uLmJpbmFyeVR5cGUgPSAnYXJyYXlidWZmZXInO1xyXG4gICAgICAgICAgICB0aGlzLmNvbm4ub25vcGVuID0gKCkgPT4gdGhpcy5fb25Db25uT3BlbigpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbm4ub25lcnJvciA9IChlcnJvcikgPT4gdGhpcy5fb25Db25uRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbm4ub25tZXNzYWdlID0gKGV2ZW50KSA9PiB0aGlzLl9vbkNvbm5NZXNzYWdlKGV2ZW50KTtcclxuICAgICAgICAgICAgdGhpcy5jb25uLm9uY2xvc2UgPSAoZXZlbnQpID0+IHRoaXMuX29uQ29ubkNsb3NlKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBfb25Db25uTWVzc2FnZShyYXdNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5kZWNvZGUocmF3TWVzc2FnZS5kYXRhLCAobXNnKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB7IHRvcGljLCBldmVudCwgcGF5bG9hZCwgcmVmIH0gPSBtc2c7XHJcbiAgICAgICAgICAgIGlmICh0b3BpYyA9PT0gJ3Bob2VuaXgnICYmIGV2ZW50ID09PSAncGh4X3JlcGx5Jykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWFydGJlYXRDYWxsYmFjayhtc2cucGF5bG9hZC5zdGF0dXMgPT0gJ29rJyA/ICdvaycgOiAnZXJyb3InKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVmICYmIHJlZiA9PT0gdGhpcy5wZW5kaW5nSGVhcnRiZWF0UmVmKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9nKCdyZWNlaXZlJywgYCR7cGF5bG9hZC5zdGF0dXMgfHwgJyd9ICR7dG9waWN9ICR7ZXZlbnR9ICR7KHJlZiAmJiAnKCcgKyByZWYgKyAnKScpIHx8ICcnfWAsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuY2hhbm5lbHMpXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChjaGFubmVsKSA9PiBjaGFubmVsLl9pc01lbWJlcih0b3BpYykpXHJcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoY2hhbm5lbCkgPT4gY2hhbm5lbC5fdHJpZ2dlcihldmVudCwgcGF5bG9hZCwgcmVmKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3MubWVzc2FnZS5mb3JFYWNoKChjYWxsYmFjaykgPT4gY2FsbGJhY2sobXNnKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBfb25Db25uT3BlbigpIHtcclxuICAgICAgICB0aGlzLmxvZygndHJhbnNwb3J0JywgYGNvbm5lY3RlZCB0byAke3RoaXMuZW5kcG9pbnRVUkwoKX1gKTtcclxuICAgICAgICB0aGlzLmZsdXNoU2VuZEJ1ZmZlcigpO1xyXG4gICAgICAgIHRoaXMucmVjb25uZWN0VGltZXIucmVzZXQoKTtcclxuICAgICAgICBpZiAoIXRoaXMud29ya2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0SGVhcnRiZWF0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMud29ya2VyUmVmKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydFdvcmtlckhlYXJ0YmVhdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3Mub3Blbi5mb3JFYWNoKChjYWxsYmFjaykgPT4gY2FsbGJhY2soKSk7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBfc3RhcnRIZWFydGJlYXQoKSB7XHJcbiAgICAgICAgdGhpcy5oZWFydGJlYXRUaW1lciAmJiBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0VGltZXIpO1xyXG4gICAgICAgIHRoaXMuaGVhcnRiZWF0VGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLnNlbmRIZWFydGJlYXQoKSwgdGhpcy5oZWFydGJlYXRJbnRlcnZhbE1zKTtcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIF9zdGFydFdvcmtlckhlYXJ0YmVhdCgpIHtcclxuICAgICAgICBpZiAodGhpcy53b3JrZXJVcmwpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2coJ3dvcmtlcicsIGBzdGFydGluZyB3b3JrZXIgZm9yIGZyb20gJHt0aGlzLndvcmtlclVybH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKCd3b3JrZXInLCBgc3RhcnRpbmcgZGVmYXVsdCB3b3JrZXJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0VXJsID0gdGhpcy5fd29ya2VyT2JqZWN0VXJsKHRoaXMud29ya2VyVXJsKTtcclxuICAgICAgICB0aGlzLndvcmtlclJlZiA9IG5ldyBXb3JrZXIob2JqZWN0VXJsKTtcclxuICAgICAgICB0aGlzLndvcmtlclJlZi5vbmVycm9yID0gKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKCd3b3JrZXInLCAnd29ya2VyIGVycm9yJywgZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMud29ya2VyUmVmLnRlcm1pbmF0ZSgpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy53b3JrZXJSZWYub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50ID09PSAna2VlcEFsaXZlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kSGVhcnRiZWF0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMud29ya2VyUmVmLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgZXZlbnQ6ICdzdGFydCcsXHJcbiAgICAgICAgICAgIGludGVydmFsOiB0aGlzLmhlYXJ0YmVhdEludGVydmFsTXMsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBfb25Db25uQ2xvc2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmxvZygndHJhbnNwb3J0JywgJ2Nsb3NlJywgZXZlbnQpO1xyXG4gICAgICAgIHRoaXMuX3RyaWdnZXJDaGFuRXJyb3IoKTtcclxuICAgICAgICB0aGlzLmhlYXJ0YmVhdFRpbWVyICYmIGNsZWFySW50ZXJ2YWwodGhpcy5oZWFydGJlYXRUaW1lcik7XHJcbiAgICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lci5zY2hlZHVsZVRpbWVvdXQoKTtcclxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLmNsb3NlLmZvckVhY2goKGNhbGxiYWNrKSA9PiBjYWxsYmFjayhldmVudCkpO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgX29uQ29ubkVycm9yKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5sb2coJ3RyYW5zcG9ydCcsIGAke2Vycm9yfWApO1xyXG4gICAgICAgIHRoaXMuX3RyaWdnZXJDaGFuRXJyb3IoKTtcclxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLmVycm9yLmZvckVhY2goKGNhbGxiYWNrKSA9PiBjYWxsYmFjayhlcnJvcikpO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgX3RyaWdnZXJDaGFuRXJyb3IoKSB7XHJcbiAgICAgICAgdGhpcy5jaGFubmVscy5mb3JFYWNoKChjaGFubmVsKSA9PiBjaGFubmVsLl90cmlnZ2VyKGNvbnN0YW50c18xLkNIQU5ORUxfRVZFTlRTLmVycm9yKSk7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBfYXBwZW5kUGFyYW1zKHVybCwgcGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1cmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHVybC5tYXRjaCgvXFw/LykgPyAnJicgOiAnPyc7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIGAke3VybH0ke3ByZWZpeH0ke3F1ZXJ5fWA7XHJcbiAgICB9XHJcbiAgICBfd29ya2VyT2JqZWN0VXJsKHVybCkge1xyXG4gICAgICAgIGxldCByZXN1bHRfdXJsO1xyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgcmVzdWx0X3VybCA9IHVybDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbV09SS0VSX1NDUklQVF0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnIH0pO1xyXG4gICAgICAgICAgICByZXN1bHRfdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdF91cmw7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0gUmVhbHRpbWVDbGllbnQ7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlYWx0aW1lQ2xpZW50LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/realtime-js/dist/main/RealtimeClient.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/realtime-js/dist/main/RealtimePresence.js":
/*!**************************************************************************!*\
!*** ./node_modules/@supabase/realtime-js/dist/main/RealtimePresence.js ***!
\**************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\n/*\r\n This file draws heavily from https://github.com/phoenixframework/phoenix/blob/d344ec0a732ab4ee204215b31de69cf4be72e3bf/assets/js/phoenix/presence.js\r\n License: https://github.com/phoenixframework/phoenix/blob/d344ec0a732ab4ee204215b31de69cf4be72e3bf/LICENSE.md\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.REALTIME_PRESENCE_LISTEN_EVENTS = void 0;\r\nvar REALTIME_PRESENCE_LISTEN_EVENTS;\r\n(function (REALTIME_PRESENCE_LISTEN_EVENTS) {\r\n REALTIME_PRESENCE_LISTEN_EVENTS[\"SYNC\"] = \"sync\";\r\n REALTIME_PRESENCE_LISTEN_EVENTS[\"JOIN\"] = \"join\";\r\n REALTIME_PRESENCE_LISTEN_EVENTS[\"LEAVE\"] = \"leave\";\r\n})(REALTIME_PRESENCE_LISTEN_EVENTS || (exports.REALTIME_PRESENCE_LISTEN_EVENTS = REALTIME_PRESENCE_LISTEN_EVENTS = {}));\r\nclass RealtimePresence {\r\n /**\r\n * Initializes the Presence.\r\n *\r\n * @param channel - The RealtimeChannel\r\n * @param opts - The options,\r\n * for example `{events: {state: 'state', diff: 'diff'}}`\r\n */\r\n constructor(channel, opts) {\r\n this.channel = channel;\r\n this.state = {};\r\n this.pendingDiffs = [];\r\n this.joinRef = null;\r\n this.caller = {\r\n onJoin: () => { },\r\n onLeave: () => { },\r\n onSync: () => { },\r\n };\r\n const events = (opts === null || opts === void 0 ? void 0 : opts.events) || {\r\n state: 'presence_state',\r\n diff: 'presence_diff',\r\n };\r\n this.channel._on(events.state, {}, (newState) => {\r\n const { onJoin, onLeave, onSync } = this.caller;\r\n this.joinRef = this.channel._joinRef();\r\n this.state = RealtimePresence.syncState(this.state, newState, onJoin, onLeave);\r\n this.pendingDiffs.forEach((diff) => {\r\n this.state = RealtimePresence.syncDiff(this.state, diff, onJoin, onLeave);\r\n });\r\n this.pendingDiffs = [];\r\n onSync();\r\n });\r\n this.channel._on(events.diff, {}, (diff) => {\r\n const { onJoin, onLeave, onSync } = this.caller;\r\n if (this.inPendingSyncState()) {\r\n this.pendingDiffs.push(diff);\r\n }\r\n else {\r\n this.state = RealtimePresence.syncDiff(this.state, diff, onJoin, onLeave);\r\n onSync();\r\n }\r\n });\r\n this.onJoin((key, currentPresences, newPresences) => {\r\n this.channel._trigger('presence', {\r\n event: 'join',\r\n key,\r\n currentPresences,\r\n newPresences,\r\n });\r\n });\r\n this.onLeave((key, currentPresences, leftPresences) => {\r\n this.channel._trigger('presence', {\r\n event: 'leave',\r\n key,\r\n currentPresences,\r\n leftPresences,\r\n });\r\n });\r\n this.onSync(() => {\r\n this.channel._trigger('presence', { event: 'sync' });\r\n });\r\n }\r\n /**\r\n * Used to sync the list of presences on the server with the\r\n * client's state.\r\n *\r\n * An optional `onJoin` and `onLeave` callback can be provided to\r\n * react to changes in the client's local presences across\r\n * disconnects and reconnects with the server.\r\n *\r\n * @internal\r\n */\r\n static syncState(currentState, newState, onJoin, onLeave) {\r\n const state = this.cloneDeep(currentState);\r\n const transformedState = this.transformState(newState);\r\n const joins = {};\r\n const leaves = {};\r\n this.map(state, (key, presences) => {\r\n if (!transformedState[key]) {\r\n leaves[key] = presences;\r\n }\r\n });\r\n this.map(transformedState, (key, newPresences) => {\r\n const currentPresences = state[key];\r\n if (currentPresences) {\r\n const newPresenceRefs = newPresences.map((m) => m.presence_ref);\r\n const curPresenceRefs = currentPresences.map((m) => m.presence_ref);\r\n const joinedPresences = newPresences.filter((m) => curPresenceRefs.indexOf(m.presence_ref) < 0);\r\n const leftPresences = currentPresences.filter((m) => newPresenceRefs.indexOf(m.presence_ref) < 0);\r\n if (joinedPresences.length > 0) {\r\n joins[key] = joinedPresences;\r\n }\r\n if (leftPresences.length > 0) {\r\n leaves[key] = leftPresences;\r\n }\r\n }\r\n else {\r\n joins[key] = newPresences;\r\n }\r\n });\r\n return this.syncDiff(state, { joins, leaves }, onJoin, onLeave);\r\n }\r\n /**\r\n * Used to sync a diff of presence join and leave events from the\r\n * server, as they happen.\r\n *\r\n * Like `syncState`, `syncDiff` accepts optional `onJoin` and\r\n * `onLeave` callbacks to react to a user joining or leaving from a\r\n * device.\r\n *\r\n * @internal\r\n */\r\n static syncDiff(state, diff, onJoin, onLeave) {\r\n const { joins, leaves } = {\r\n joins: this.transformState(diff.joins),\r\n leaves: this.transformState(diff.leaves),\r\n };\r\n if (!onJoin) {\r\n onJoin = () => { };\r\n }\r\n if (!onLeave) {\r\n onLeave = () => { };\r\n }\r\n this.map(joins, (key, newPresences) => {\r\n var _a;\r\n const currentPresences = (_a = state[key]) !== null && _a !== void 0 ? _a : [];\r\n state[key] = this.cloneDeep(newPresences);\r\n if (currentPresences.length > 0) {\r\n const joinedPresenceRefs = state[key].map((m) => m.presence_ref);\r\n const curPresences = currentPresences.filter((m) => joinedPresenceRefs.indexOf(m.presence_ref) < 0);\r\n state[key].unshift(...curPresences);\r\n }\r\n onJoin(key, currentPresences, newPresences);\r\n });\r\n this.map(leaves, (key, leftPresences) => {\r\n let currentPresences = state[key];\r\n if (!currentPresences)\r\n return;\r\n const presenceRefsToRemove = leftPresences.map((m) => m.presence_ref);\r\n currentPresences = currentPresences.filter((m) => presenceRefsToRemove.indexOf(m.presence_ref) < 0);\r\n state[key] = currentPresences;\r\n onLeave(key, currentPresences, leftPresences);\r\n if (currentPresences.length === 0)\r\n delete state[key];\r\n });\r\n return state;\r\n }\r\n /** @internal */\r\n static map(obj, func) {\r\n return Object.getOwnPropertyNames(obj).map((key) => func(key, obj[key]));\r\n }\r\n /**\r\n * Remove 'metas' key\r\n * Change 'phx_ref' to 'presence_ref'\r\n * Remove 'phx_ref' and 'phx_ref_prev'\r\n *\r\n * @example\r\n * // returns {\r\n * abc123: [\r\n * { presence_ref: '2', user_id: 1 },\r\n * { presence_ref: '3', user_id: 2 }\r\n * ]\r\n * }\r\n * RealtimePresence.transformState({\r\n * abc123: {\r\n * metas: [\r\n * { phx_ref: '2', phx_ref_prev: '1' user_id: 1 },\r\n * { phx_ref: '3', user_id: 2 }\r\n * ]\r\n * }\r\n * })\r\n *\r\n * @internal\r\n */\r\n static transformState(state) {\r\n state = this.cloneDeep(state);\r\n return Object.getOwnPropertyNames(state).reduce((newState, key) => {\r\n const presences = state[key];\r\n if ('metas' in presences) {\r\n newState[key] = presences.metas.map((presence) => {\r\n presence['presence_ref'] = presence['phx_ref'];\r\n delete presence['phx_ref'];\r\n delete presence['phx_ref_prev'];\r\n return presence;\r\n });\r\n }\r\n else {\r\n newState[key] = presences;\r\n }\r\n return newState;\r\n }, {});\r\n }\r\n /** @internal */\r\n static cloneDeep(obj) {\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n /** @internal */\r\n onJoin(callback) {\r\n this.caller.onJoin = callback;\r\n }\r\n /** @internal */\r\n onLeave(callback) {\r\n this.caller.onLeave = callback;\r\n }\r\n /** @internal */\r\n onSync(callback) {\r\n this.caller.onSync = callback;\r\n }\r\n /** @internal */\r\n inPendingSyncState() {\r\n return !this.joinRef || this.joinRef !== this.channel._joinRef();\r\n }\r\n}\r\nexports[\"default\"] = RealtimePresence;\r\n//# sourceMappingURL=RealtimePresence.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbWFpbi9SZWFsdGltZVByZXNlbmNlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHNDQUFzQyx1Q0FBdUMsdUNBQXVDO0FBQ3JIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixTQUFTLDhCQUE4QjtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3Qiw4QkFBOEI7QUFDOUIsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekMsb0JBQW9CLDBCQUEwQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNULHdDQUF3QztBQUN4QyxvQkFBb0IsMEJBQTBCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBLGdEQUFnRCxlQUFlO0FBQy9ELFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsc0NBQXNDLGVBQWU7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGdCQUFnQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSwrQkFBK0I7QUFDM0MsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLDRDQUE0QztBQUMxRCxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxJQUFJO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9yZWFsdGltZS1qcy9kaXN0L21haW4vUmVhbHRpbWVQcmVzZW5jZS5qcz80YjA4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG4vKlxyXG4gIFRoaXMgZmlsZSBkcmF3cyBoZWF2aWx5IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Bob2VuaXhmcmFtZXdvcmsvcGhvZW5peC9ibG9iL2QzNDRlYzBhNzMyYWI0ZWUyMDQyMTViMzFkZTY5Y2Y0YmU3MmUzYmYvYXNzZXRzL2pzL3Bob2VuaXgvcHJlc2VuY2UuanNcclxuICBMaWNlbnNlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvZW5peGZyYW1ld29yay9waG9lbml4L2Jsb2IvZDM0NGVjMGE3MzJhYjRlZTIwNDIxNWIzMWRlNjljZjRiZTcyZTNiZi9MSUNFTlNFLm1kXHJcbiovXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5SRUFMVElNRV9QUkVTRU5DRV9MSVNURU5fRVZFTlRTID0gdm9pZCAwO1xyXG52YXIgUkVBTFRJTUVfUFJFU0VOQ0VfTElTVEVOX0VWRU5UUztcclxuKGZ1bmN0aW9uIChSRUFMVElNRV9QUkVTRU5DRV9MSVNURU5fRVZFTlRTKSB7XHJcbiAgICBSRUFMVElNRV9QUkVTRU5DRV9MSVNURU5fRVZFTlRTW1wiU1lOQ1wiXSA9IFwic3luY1wiO1xyXG4gICAgUkVBTFRJTUVfUFJFU0VOQ0VfTElTVEVOX0VWRU5UU1tcIkpPSU5cIl0gPSBcImpvaW5cIjtcclxuICAgIFJFQUxUSU1FX1BSRVNFTkNFX0xJU1RFTl9FVkVOVFNbXCJMRUFWRVwiXSA9IFwibGVhdmVcIjtcclxufSkoUkVBTFRJTUVfUFJFU0VOQ0VfTElTVEVOX0VWRU5UUyB8fCAoZXhwb3J0cy5SRUFMVElNRV9QUkVTRU5DRV9MSVNURU5fRVZFTlRTID0gUkVBTFRJTUVfUFJFU0VOQ0VfTElTVEVOX0VWRU5UUyA9IHt9KSk7XHJcbmNsYXNzIFJlYWx0aW1lUHJlc2VuY2Uge1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgUHJlc2VuY2UuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNoYW5uZWwgLSBUaGUgUmVhbHRpbWVDaGFubmVsXHJcbiAgICAgKiBAcGFyYW0gb3B0cyAtIFRoZSBvcHRpb25zLFxyXG4gICAgICogICAgICAgIGZvciBleGFtcGxlIGB7ZXZlbnRzOiB7c3RhdGU6ICdzdGF0ZScsIGRpZmY6ICdkaWZmJ319YFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihjaGFubmVsLCBvcHRzKSB7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbDtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge307XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nRGlmZnMgPSBbXTtcclxuICAgICAgICB0aGlzLmpvaW5SZWYgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2FsbGVyID0ge1xyXG4gICAgICAgICAgICBvbkpvaW46ICgpID0+IHsgfSxcclxuICAgICAgICAgICAgb25MZWF2ZTogKCkgPT4geyB9LFxyXG4gICAgICAgICAgICBvblN5bmM6ICgpID0+IHsgfSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IChvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdHMuZXZlbnRzKSB8fCB7XHJcbiAgICAgICAgICAgIHN0YXRlOiAncHJlc2VuY2Vfc3RhdGUnLFxyXG4gICAgICAgICAgICBkaWZmOiAncHJlc2VuY2VfZGlmZicsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNoYW5uZWwuX29uKGV2ZW50cy5zdGF0ZSwge30sIChuZXdTdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7IG9uSm9pbiwgb25MZWF2ZSwgb25TeW5jIH0gPSB0aGlzLmNhbGxlcjtcclxuICAgICAgICAgICAgdGhpcy5qb2luUmVmID0gdGhpcy5jaGFubmVsLl9qb2luUmVmKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBSZWFsdGltZVByZXNlbmNlLnN5bmNTdGF0ZSh0aGlzLnN0YXRlLCBuZXdTdGF0ZSwgb25Kb2luLCBvbkxlYXZlKTtcclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nRGlmZnMuZm9yRWFjaCgoZGlmZikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFJlYWx0aW1lUHJlc2VuY2Uuc3luY0RpZmYodGhpcy5zdGF0ZSwgZGlmZiwgb25Kb2luLCBvbkxlYXZlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0RpZmZzID0gW107XHJcbiAgICAgICAgICAgIG9uU3luYygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbC5fb24oZXZlbnRzLmRpZmYsIHt9LCAoZGlmZikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7IG9uSm9pbiwgb25MZWF2ZSwgb25TeW5jIH0gPSB0aGlzLmNhbGxlcjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5QZW5kaW5nU3luY1N0YXRlKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0RpZmZzLnB1c2goZGlmZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gUmVhbHRpbWVQcmVzZW5jZS5zeW5jRGlmZih0aGlzLnN0YXRlLCBkaWZmLCBvbkpvaW4sIG9uTGVhdmUpO1xyXG4gICAgICAgICAgICAgICAgb25TeW5jKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm9uSm9pbigoa2V5LCBjdXJyZW50UHJlc2VuY2VzLCBuZXdQcmVzZW5jZXMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jaGFubmVsLl90cmlnZ2VyKCdwcmVzZW5jZScsIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50OiAnam9pbicsXHJcbiAgICAgICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50UHJlc2VuY2VzLFxyXG4gICAgICAgICAgICAgICAgbmV3UHJlc2VuY2VzLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm9uTGVhdmUoKGtleSwgY3VycmVudFByZXNlbmNlcywgbGVmdFByZXNlbmNlcykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWwuX3RyaWdnZXIoJ3ByZXNlbmNlJywge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdsZWF2ZScsXHJcbiAgICAgICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50UHJlc2VuY2VzLFxyXG4gICAgICAgICAgICAgICAgbGVmdFByZXNlbmNlcyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5vblN5bmMoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWwuX3RyaWdnZXIoJ3ByZXNlbmNlJywgeyBldmVudDogJ3N5bmMnIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIHRvIHN5bmMgdGhlIGxpc3Qgb2YgcHJlc2VuY2VzIG9uIHRoZSBzZXJ2ZXIgd2l0aCB0aGVcclxuICAgICAqIGNsaWVudCdzIHN0YXRlLlxyXG4gICAgICpcclxuICAgICAqIEFuIG9wdGlvbmFsIGBvbkpvaW5gIGFuZCBgb25MZWF2ZWAgY2FsbGJhY2sgY2FuIGJlIHByb3ZpZGVkIHRvXHJcbiAgICAgKiByZWFjdCB0byBjaGFuZ2VzIGluIHRoZSBjbGllbnQncyBsb2NhbCBwcmVzZW5jZXMgYWNyb3NzXHJcbiAgICAgKiBkaXNjb25uZWN0cyBhbmQgcmVjb25uZWN0cyB3aXRoIHRoZSBzZXJ2ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzeW5jU3RhdGUoY3VycmVudFN0YXRlLCBuZXdTdGF0ZSwgb25Kb2luLCBvbkxlYXZlKSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNsb25lRGVlcChjdXJyZW50U3RhdGUpO1xyXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkU3RhdGUgPSB0aGlzLnRyYW5zZm9ybVN0YXRlKG5ld1N0YXRlKTtcclxuICAgICAgICBjb25zdCBqb2lucyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IGxlYXZlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMubWFwKHN0YXRlLCAoa2V5LCBwcmVzZW5jZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1lZFN0YXRlW2tleV0pIHtcclxuICAgICAgICAgICAgICAgIGxlYXZlc1trZXldID0gcHJlc2VuY2VzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5tYXAodHJhbnNmb3JtZWRTdGF0ZSwgKGtleSwgbmV3UHJlc2VuY2VzKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQcmVzZW5jZXMgPSBzdGF0ZVtrZXldO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFByZXNlbmNlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UHJlc2VuY2VSZWZzID0gbmV3UHJlc2VuY2VzLm1hcCgobSkgPT4gbS5wcmVzZW5jZV9yZWYpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VyUHJlc2VuY2VSZWZzID0gY3VycmVudFByZXNlbmNlcy5tYXAoKG0pID0+IG0ucHJlc2VuY2VfcmVmKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpvaW5lZFByZXNlbmNlcyA9IG5ld1ByZXNlbmNlcy5maWx0ZXIoKG0pID0+IGN1clByZXNlbmNlUmVmcy5pbmRleE9mKG0ucHJlc2VuY2VfcmVmKSA8IDApO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdFByZXNlbmNlcyA9IGN1cnJlbnRQcmVzZW5jZXMuZmlsdGVyKChtKSA9PiBuZXdQcmVzZW5jZVJlZnMuaW5kZXhPZihtLnByZXNlbmNlX3JlZikgPCAwKTtcclxuICAgICAgICAgICAgICAgIGlmIChqb2luZWRQcmVzZW5jZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGpvaW5zW2tleV0gPSBqb2luZWRQcmVzZW5jZXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobGVmdFByZXNlbmNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVhdmVzW2tleV0gPSBsZWZ0UHJlc2VuY2VzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgam9pbnNba2V5XSA9IG5ld1ByZXNlbmNlcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN5bmNEaWZmKHN0YXRlLCB7IGpvaW5zLCBsZWF2ZXMgfSwgb25Kb2luLCBvbkxlYXZlKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXNlZCB0byBzeW5jIGEgZGlmZiBvZiBwcmVzZW5jZSBqb2luIGFuZCBsZWF2ZSBldmVudHMgZnJvbSB0aGVcclxuICAgICAqIHNlcnZlciwgYXMgdGhleSBoYXBwZW4uXHJcbiAgICAgKlxyXG4gICAgICogTGlrZSBgc3luY1N0YXRlYCwgYHN5bmNEaWZmYCBhY2NlcHRzIG9wdGlvbmFsIGBvbkpvaW5gIGFuZFxyXG4gICAgICogYG9uTGVhdmVgIGNhbGxiYWNrcyB0byByZWFjdCB0byBhIHVzZXIgam9pbmluZyBvciBsZWF2aW5nIGZyb20gYVxyXG4gICAgICogZGV2aWNlLlxyXG4gICAgICpcclxuICAgICAqIEBpbnRlcm5hbFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgc3luY0RpZmYoc3RhdGUsIGRpZmYsIG9uSm9pbiwgb25MZWF2ZSkge1xyXG4gICAgICAgIGNvbnN0IHsgam9pbnMsIGxlYXZlcyB9ID0ge1xyXG4gICAgICAgICAgICBqb2luczogdGhpcy50cmFuc2Zvcm1TdGF0ZShkaWZmLmpvaW5zKSxcclxuICAgICAgICAgICAgbGVhdmVzOiB0aGlzLnRyYW5zZm9ybVN0YXRlKGRpZmYubGVhdmVzKSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICghb25Kb2luKSB7XHJcbiAgICAgICAgICAgIG9uSm9pbiA9ICgpID0+IHsgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFvbkxlYXZlKSB7XHJcbiAgICAgICAgICAgIG9uTGVhdmUgPSAoKSA9PiB7IH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWFwKGpvaW5zLCAoa2V5LCBuZXdQcmVzZW5jZXMpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UHJlc2VuY2VzID0gKF9hID0gc3RhdGVba2V5XSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XHJcbiAgICAgICAgICAgIHN0YXRlW2tleV0gPSB0aGlzLmNsb25lRGVlcChuZXdQcmVzZW5jZXMpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFByZXNlbmNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqb2luZWRQcmVzZW5jZVJlZnMgPSBzdGF0ZVtrZXldLm1hcCgobSkgPT4gbS5wcmVzZW5jZV9yZWYpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VyUHJlc2VuY2VzID0gY3VycmVudFByZXNlbmNlcy5maWx0ZXIoKG0pID0+IGpvaW5lZFByZXNlbmNlUmVmcy5pbmRleE9mKG0ucHJlc2VuY2VfcmVmKSA8IDApO1xyXG4gICAgICAgICAgICAgICAgc3RhdGVba2V5XS51bnNoaWZ0KC4uLmN1clByZXNlbmNlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb25Kb2luKGtleSwgY3VycmVudFByZXNlbmNlcywgbmV3UHJlc2VuY2VzKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm1hcChsZWF2ZXMsIChrZXksIGxlZnRQcmVzZW5jZXMpID0+IHtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRQcmVzZW5jZXMgPSBzdGF0ZVtrZXldO1xyXG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRQcmVzZW5jZXMpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHByZXNlbmNlUmVmc1RvUmVtb3ZlID0gbGVmdFByZXNlbmNlcy5tYXAoKG0pID0+IG0ucHJlc2VuY2VfcmVmKTtcclxuICAgICAgICAgICAgY3VycmVudFByZXNlbmNlcyA9IGN1cnJlbnRQcmVzZW5jZXMuZmlsdGVyKChtKSA9PiBwcmVzZW5jZVJlZnNUb1JlbW92ZS5pbmRleE9mKG0ucHJlc2VuY2VfcmVmKSA8IDApO1xyXG4gICAgICAgICAgICBzdGF0ZVtrZXldID0gY3VycmVudFByZXNlbmNlcztcclxuICAgICAgICAgICAgb25MZWF2ZShrZXksIGN1cnJlbnRQcmVzZW5jZXMsIGxlZnRQcmVzZW5jZXMpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFByZXNlbmNlcy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgc3RhdGVba2V5XTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gc3RhdGU7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBzdGF0aWMgbWFwKG9iaiwgZnVuYykge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLm1hcCgoa2V5KSA9PiBmdW5jKGtleSwgb2JqW2tleV0pKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlICdtZXRhcycga2V5XHJcbiAgICAgKiBDaGFuZ2UgJ3BoeF9yZWYnIHRvICdwcmVzZW5jZV9yZWYnXHJcbiAgICAgKiBSZW1vdmUgJ3BoeF9yZWYnIGFuZCAncGh4X3JlZl9wcmV2J1xyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiAvLyByZXR1cm5zIHtcclxuICAgICAqICBhYmMxMjM6IFtcclxuICAgICAqICAgIHsgcHJlc2VuY2VfcmVmOiAnMicsIHVzZXJfaWQ6IDEgfSxcclxuICAgICAqICAgIHsgcHJlc2VuY2VfcmVmOiAnMycsIHVzZXJfaWQ6IDIgfVxyXG4gICAgICogIF1cclxuICAgICAqIH1cclxuICAgICAqIFJlYWx0aW1lUHJlc2VuY2UudHJhbnNmb3JtU3RhdGUoe1xyXG4gICAgICogIGFiYzEyMzoge1xyXG4gICAgICogICAgbWV0YXM6IFtcclxuICAgICAqICAgICAgeyBwaHhfcmVmOiAnMicsIHBoeF9yZWZfcHJldjogJzEnIHVzZXJfaWQ6IDEgfSxcclxuICAgICAqICAgICAgeyBwaHhfcmVmOiAnMycsIHVzZXJfaWQ6IDIgfVxyXG4gICAgICogICAgXVxyXG4gICAgICogIH1cclxuICAgICAqIH0pXHJcbiAgICAgKlxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0cmFuc2Zvcm1TdGF0ZShzdGF0ZSkge1xyXG4gICAgICAgIHN0YXRlID0gdGhpcy5jbG9uZURlZXAoc3RhdGUpO1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzdGF0ZSkucmVkdWNlKChuZXdTdGF0ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZXNlbmNlcyA9IHN0YXRlW2tleV07XHJcbiAgICAgICAgICAgIGlmICgnbWV0YXMnIGluIHByZXNlbmNlcykge1xyXG4gICAgICAgICAgICAgICAgbmV3U3RhdGVba2V5XSA9IHByZXNlbmNlcy5tZXRhcy5tYXAoKHByZXNlbmNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlc2VuY2VbJ3ByZXNlbmNlX3JlZiddID0gcHJlc2VuY2VbJ3BoeF9yZWYnXTtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcHJlc2VuY2VbJ3BoeF9yZWYnXTtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcHJlc2VuY2VbJ3BoeF9yZWZfcHJldiddO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVzZW5jZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbmV3U3RhdGVba2V5XSA9IHByZXNlbmNlcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3U3RhdGU7XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgc3RhdGljIGNsb25lRGVlcChvYmopIHtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTtcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIG9uSm9pbihjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuY2FsbGVyLm9uSm9pbiA9IGNhbGxiYWNrO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgb25MZWF2ZShjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuY2FsbGVyLm9uTGVhdmUgPSBjYWxsYmFjaztcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIG9uU3luYyhjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuY2FsbGVyLm9uU3luYyA9IGNhbGxiYWNrO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgaW5QZW5kaW5nU3luY1N0YXRlKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5qb2luUmVmIHx8IHRoaXMuam9pblJlZiAhPT0gdGhpcy5jaGFubmVsLl9qb2luUmVmKCk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0gUmVhbHRpbWVQcmVzZW5jZTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVhbHRpbWVQcmVzZW5jZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/realtime-js/dist/main/RealtimePresence.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/realtime-js/dist/main/index.js":
/*!***************************************************************!*\
!*** ./node_modules/@supabase/realtime-js/dist/main/index.js ***!
\***************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || (function () {\r\n var ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n };\r\n return function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n };\r\n})();\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.REALTIME_CHANNEL_STATES = exports.REALTIME_SUBSCRIBE_STATES = exports.REALTIME_PRESENCE_LISTEN_EVENTS = exports.REALTIME_POSTGRES_CHANGES_LISTEN_EVENT = exports.REALTIME_LISTEN_TYPES = exports.RealtimeClient = exports.RealtimeChannel = exports.RealtimePresence = void 0;\r\nconst RealtimeClient_1 = __importDefault(__webpack_require__(/*! ./RealtimeClient */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/RealtimeClient.js\"));\r\nexports.RealtimeClient = RealtimeClient_1.default;\r\nconst RealtimeChannel_1 = __importStar(__webpack_require__(/*! ./RealtimeChannel */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/RealtimeChannel.js\"));\r\nexports.RealtimeChannel = RealtimeChannel_1.default;\r\nObject.defineProperty(exports, \"REALTIME_LISTEN_TYPES\", ({ enumerable: true, get: function () { return RealtimeChannel_1.REALTIME_LISTEN_TYPES; } }));\r\nObject.defineProperty(exports, \"REALTIME_POSTGRES_CHANGES_LISTEN_EVENT\", ({ enumerable: true, get: function () { return RealtimeChannel_1.REALTIME_POSTGRES_CHANGES_LISTEN_EVENT; } }));\r\nObject.defineProperty(exports, \"REALTIME_SUBSCRIBE_STATES\", ({ enumerable: true, get: function () { return RealtimeChannel_1.REALTIME_SUBSCRIBE_STATES; } }));\r\nObject.defineProperty(exports, \"REALTIME_CHANNEL_STATES\", ({ enumerable: true, get: function () { return RealtimeChannel_1.REALTIME_CHANNEL_STATES; } }));\r\nconst RealtimePresence_1 = __importStar(__webpack_require__(/*! ./RealtimePresence */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/RealtimePresence.js\"));\r\nexports.RealtimePresence = RealtimePresence_1.default;\r\nObject.defineProperty(exports, \"REALTIME_PRESENCE_LISTEN_EVENTS\", ({ enumerable: true, get: function () { return RealtimePresence_1.REALTIME_PRESENCE_LISTEN_EVENTS; } }));\r\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbWFpbi9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQ0FBb0M7QUFDbkQ7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsMENBQTBDLDRCQUE0QjtBQUN0RSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJELGNBQWM7QUFDekU7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELCtCQUErQixHQUFHLGlDQUFpQyxHQUFHLHVDQUF1QyxHQUFHLDhDQUE4QyxHQUFHLDZCQUE2QixHQUFHLHNCQUFzQixHQUFHLHVCQUF1QixHQUFHLHdCQUF3QjtBQUM1USx5Q0FBeUMsbUJBQU8sQ0FBQyxnR0FBa0I7QUFDbkUsc0JBQXNCO0FBQ3RCLHVDQUF1QyxtQkFBTyxDQUFDLGtHQUFtQjtBQUNsRSx1QkFBdUI7QUFDdkIseURBQXdELEVBQUUscUNBQXFDLG1EQUFtRCxFQUFDO0FBQ25KLDBFQUF5RSxFQUFFLHFDQUFxQyxvRUFBb0UsRUFBQztBQUNyTCw2REFBNEQsRUFBRSxxQ0FBcUMsdURBQXVELEVBQUM7QUFDM0osMkRBQTBELEVBQUUscUNBQXFDLHFEQUFxRCxFQUFDO0FBQ3ZKLHdDQUF3QyxtQkFBTyxDQUFDLG9HQUFvQjtBQUNwRSx3QkFBd0I7QUFDeEIsbUVBQWtFLEVBQUUscUNBQXFDLDhEQUE4RCxFQUFDO0FBQ3hLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9yZWFsdGltZS1qcy9kaXN0L21haW4vaW5kZXguanM/MjY5NCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSkpO1xyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn0pO1xyXG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgb3duS2V5cyA9IGZ1bmN0aW9uKG8pIHtcclxuICAgICAgICBvd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICAgICAgdmFyIGFyID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XHJcbiAgICAgICAgICAgIHJldHVybiBhcjtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBvd25LZXlzKG8pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICAgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICAgICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcclxuICAgICAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG59KSgpO1xyXG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuUkVBTFRJTUVfQ0hBTk5FTF9TVEFURVMgPSBleHBvcnRzLlJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVMgPSBleHBvcnRzLlJFQUxUSU1FX1BSRVNFTkNFX0xJU1RFTl9FVkVOVFMgPSBleHBvcnRzLlJFQUxUSU1FX1BPU1RHUkVTX0NIQU5HRVNfTElTVEVOX0VWRU5UID0gZXhwb3J0cy5SRUFMVElNRV9MSVNURU5fVFlQRVMgPSBleHBvcnRzLlJlYWx0aW1lQ2xpZW50ID0gZXhwb3J0cy5SZWFsdGltZUNoYW5uZWwgPSBleHBvcnRzLlJlYWx0aW1lUHJlc2VuY2UgPSB2b2lkIDA7XHJcbmNvbnN0IFJlYWx0aW1lQ2xpZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vUmVhbHRpbWVDbGllbnRcIikpO1xyXG5leHBvcnRzLlJlYWx0aW1lQ2xpZW50ID0gUmVhbHRpbWVDbGllbnRfMS5kZWZhdWx0O1xyXG5jb25zdCBSZWFsdGltZUNoYW5uZWxfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9SZWFsdGltZUNoYW5uZWxcIikpO1xyXG5leHBvcnRzLlJlYWx0aW1lQ2hhbm5lbCA9IFJlYWx0aW1lQ2hhbm5lbF8xLmRlZmF1bHQ7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJFQUxUSU1FX0xJU1RFTl9UWVBFU1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVhbHRpbWVDaGFubmVsXzEuUkVBTFRJTUVfTElTVEVOX1RZUEVTOyB9IH0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSRUFMVElNRV9QT1NUR1JFU19DSEFOR0VTX0xJU1RFTl9FVkVOVFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVhbHRpbWVDaGFubmVsXzEuUkVBTFRJTUVfUE9TVEdSRVNfQ0hBTkdFU19MSVNURU5fRVZFTlQ7IH0gfSk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFJlYWx0aW1lQ2hhbm5lbF8xLlJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVM7IH0gfSk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJFQUxUSU1FX0NIQU5ORUxfU1RBVEVTXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBSZWFsdGltZUNoYW5uZWxfMS5SRUFMVElNRV9DSEFOTkVMX1NUQVRFUzsgfSB9KTtcclxuY29uc3QgUmVhbHRpbWVQcmVzZW5jZV8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL1JlYWx0aW1lUHJlc2VuY2VcIikpO1xyXG5leHBvcnRzLlJlYWx0aW1lUHJlc2VuY2UgPSBSZWFsdGltZVByZXNlbmNlXzEuZGVmYXVsdDtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUkVBTFRJTUVfUFJFU0VOQ0VfTElTVEVOX0VWRU5UU1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVhbHRpbWVQcmVzZW5jZV8xLlJFQUxUSU1FX1BSRVNFTkNFX0xJU1RFTl9FVkVOVFM7IH0gfSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/realtime-js/dist/main/index.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/constants.js":
/*!***********************************************************************!*\
!*** ./node_modules/@supabase/realtime-js/dist/main/lib/constants.js ***!
\***********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.CONNECTION_STATE = exports.TRANSPORTS = exports.CHANNEL_EVENTS = exports.CHANNEL_STATES = exports.SOCKET_STATES = exports.WS_CLOSE_NORMAL = exports.DEFAULT_TIMEOUT = exports.VERSION = exports.VSN = exports.DEFAULT_VERSION = void 0;\r\nconst version_1 = __webpack_require__(/*! ./version */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/version.js\");\r\nexports.DEFAULT_VERSION = `realtime-js/${version_1.version}`;\r\nexports.VSN = '1.0.0';\r\nexports.VERSION = version_1.version;\r\nexports.DEFAULT_TIMEOUT = 10000;\r\nexports.WS_CLOSE_NORMAL = 1000;\r\nvar SOCKET_STATES;\r\n(function (SOCKET_STATES) {\r\n SOCKET_STATES[SOCKET_STATES[\"connecting\"] = 0] = \"connecting\";\r\n SOCKET_STATES[SOCKET_STATES[\"open\"] = 1] = \"open\";\r\n SOCKET_STATES[SOCKET_STATES[\"closing\"] = 2] = \"closing\";\r\n SOCKET_STATES[SOCKET_STATES[\"closed\"] = 3] = \"closed\";\r\n})(SOCKET_STATES || (exports.SOCKET_STATES = SOCKET_STATES = {}));\r\nvar CHANNEL_STATES;\r\n(function (CHANNEL_STATES) {\r\n CHANNEL_STATES[\"closed\"] = \"closed\";\r\n CHANNEL_STATES[\"errored\"] = \"errored\";\r\n CHANNEL_STATES[\"joined\"] = \"joined\";\r\n CHANNEL_STATES[\"joining\"] = \"joining\";\r\n CHANNEL_STATES[\"leaving\"] = \"leaving\";\r\n})(CHANNEL_STATES || (exports.CHANNEL_STATES = CHANNEL_STATES = {}));\r\nvar CHANNEL_EVENTS;\r\n(function (CHANNEL_EVENTS) {\r\n CHANNEL_EVENTS[\"close\"] = \"phx_close\";\r\n CHANNEL_EVENTS[\"error\"] = \"phx_error\";\r\n CHANNEL_EVENTS[\"join\"] = \"phx_join\";\r\n CHANNEL_EVENTS[\"reply\"] = \"phx_reply\";\r\n CHANNEL_EVENTS[\"leave\"] = \"phx_leave\";\r\n CHANNEL_EVENTS[\"access_token\"] = \"access_token\";\r\n})(CHANNEL_EVENTS || (exports.CHANNEL_EVENTS = CHANNEL_EVENTS = {}));\r\nvar TRANSPORTS;\r\n(function (TRANSPORTS) {\r\n TRANSPORTS[\"websocket\"] = \"websocket\";\r\n})(TRANSPORTS || (exports.TRANSPORTS = TRANSPORTS = {}));\r\nvar CONNECTION_STATE;\r\n(function (CONNECTION_STATE) {\r\n CONNECTION_STATE[\"Connecting\"] = \"connecting\";\r\n CONNECTION_STATE[\"Open\"] = \"open\";\r\n CONNECTION_STATE[\"Closing\"] = \"closing\";\r\n CONNECTION_STATE[\"Closed\"] = \"closed\";\r\n})(CONNECTION_STATE || (exports.CONNECTION_STATE = CONNECTION_STATE = {}));\r\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbWFpbi9saWIvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHdCQUF3QixHQUFHLGtCQUFrQixHQUFHLHNCQUFzQixHQUFHLHNCQUFzQixHQUFHLHFCQUFxQixHQUFHLHVCQUF1QixHQUFHLHVCQUF1QixHQUFHLGVBQWUsR0FBRyxXQUFXLEdBQUcsdUJBQXVCO0FBQ3JPLGtCQUFrQixtQkFBTyxDQUFDLHNGQUFXO0FBQ3JDLHVCQUF1QixrQkFBa0Isa0JBQWtCO0FBQzNELFdBQVc7QUFDWCxlQUFlO0FBQ2YsdUJBQXVCO0FBQ3ZCLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLG9CQUFvQixxQkFBcUIscUJBQXFCO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxxQkFBcUIsc0JBQXNCLHNCQUFzQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxxQkFBcUIsc0JBQXNCLHNCQUFzQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGlCQUFpQixrQkFBa0Isa0JBQWtCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsdUJBQXVCLHdCQUF3Qix3QkFBd0I7QUFDeEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbWFpbi9saWIvY29uc3RhbnRzLmpzP2I2ZWMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5DT05ORUNUSU9OX1NUQVRFID0gZXhwb3J0cy5UUkFOU1BPUlRTID0gZXhwb3J0cy5DSEFOTkVMX0VWRU5UUyA9IGV4cG9ydHMuQ0hBTk5FTF9TVEFURVMgPSBleHBvcnRzLlNPQ0tFVF9TVEFURVMgPSBleHBvcnRzLldTX0NMT1NFX05PUk1BTCA9IGV4cG9ydHMuREVGQVVMVF9USU1FT1VUID0gZXhwb3J0cy5WRVJTSU9OID0gZXhwb3J0cy5WU04gPSBleHBvcnRzLkRFRkFVTFRfVkVSU0lPTiA9IHZvaWQgMDtcclxuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcclxuZXhwb3J0cy5ERUZBVUxUX1ZFUlNJT04gPSBgcmVhbHRpbWUtanMvJHt2ZXJzaW9uXzEudmVyc2lvbn1gO1xyXG5leHBvcnRzLlZTTiA9ICcxLjAuMCc7XHJcbmV4cG9ydHMuVkVSU0lPTiA9IHZlcnNpb25fMS52ZXJzaW9uO1xyXG5leHBvcnRzLkRFRkFVTFRfVElNRU9VVCA9IDEwMDAwO1xyXG5leHBvcnRzLldTX0NMT1NFX05PUk1BTCA9IDEwMDA7XHJcbnZhciBTT0NLRVRfU1RBVEVTO1xyXG4oZnVuY3Rpb24gKFNPQ0tFVF9TVEFURVMpIHtcclxuICAgIFNPQ0tFVF9TVEFURVNbU09DS0VUX1NUQVRFU1tcImNvbm5lY3RpbmdcIl0gPSAwXSA9IFwiY29ubmVjdGluZ1wiO1xyXG4gICAgU09DS0VUX1NUQVRFU1tTT0NLRVRfU1RBVEVTW1wib3BlblwiXSA9IDFdID0gXCJvcGVuXCI7XHJcbiAgICBTT0NLRVRfU1RBVEVTW1NPQ0tFVF9TVEFURVNbXCJjbG9zaW5nXCJdID0gMl0gPSBcImNsb3NpbmdcIjtcclxuICAgIFNPQ0tFVF9TVEFURVNbU09DS0VUX1NUQVRFU1tcImNsb3NlZFwiXSA9IDNdID0gXCJjbG9zZWRcIjtcclxufSkoU09DS0VUX1NUQVRFUyB8fCAoZXhwb3J0cy5TT0NLRVRfU1RBVEVTID0gU09DS0VUX1NUQVRFUyA9IHt9KSk7XHJcbnZhciBDSEFOTkVMX1NUQVRFUztcclxuKGZ1bmN0aW9uIChDSEFOTkVMX1NUQVRFUykge1xyXG4gICAgQ0hBTk5FTF9TVEFURVNbXCJjbG9zZWRcIl0gPSBcImNsb3NlZFwiO1xyXG4gICAgQ0hBTk5FTF9TVEFURVNbXCJlcnJvcmVkXCJdID0gXCJlcnJvcmVkXCI7XHJcbiAgICBDSEFOTkVMX1NUQVRFU1tcImpvaW5lZFwiXSA9IFwiam9pbmVkXCI7XHJcbiAgICBDSEFOTkVMX1NUQVRFU1tcImpvaW5pbmdcIl0gPSBcImpvaW5pbmdcIjtcclxuICAgIENIQU5ORUxfU1RBVEVTW1wibGVhdmluZ1wiXSA9IFwibGVhdmluZ1wiO1xyXG59KShDSEFOTkVMX1NUQVRFUyB8fCAoZXhwb3J0cy5DSEFOTkVMX1NUQVRFUyA9IENIQU5ORUxfU1RBVEVTID0ge30pKTtcclxudmFyIENIQU5ORUxfRVZFTlRTO1xyXG4oZnVuY3Rpb24gKENIQU5ORUxfRVZFTlRTKSB7XHJcbiAgICBDSEFOTkVMX0VWRU5UU1tcImNsb3NlXCJdID0gXCJwaHhfY2xvc2VcIjtcclxuICAgIENIQU5ORUxfRVZFTlRTW1wiZXJyb3JcIl0gPSBcInBoeF9lcnJvclwiO1xyXG4gICAgQ0hBTk5FTF9FVkVOVFNbXCJqb2luXCJdID0gXCJwaHhfam9pblwiO1xyXG4gICAgQ0hBTk5FTF9FVkVOVFNbXCJyZXBseVwiXSA9IFwicGh4X3JlcGx5XCI7XHJcbiAgICBDSEFOTkVMX0VWRU5UU1tcImxlYXZlXCJdID0gXCJwaHhfbGVhdmVcIjtcclxuICAgIENIQU5ORUxfRVZFTlRTW1wiYWNjZXNzX3Rva2VuXCJdID0gXCJhY2Nlc3NfdG9rZW5cIjtcclxufSkoQ0hBTk5FTF9FVkVOVFMgfHwgKGV4cG9ydHMuQ0hBTk5FTF9FVkVOVFMgPSBDSEFOTkVMX0VWRU5UUyA9IHt9KSk7XHJcbnZhciBUUkFOU1BPUlRTO1xyXG4oZnVuY3Rpb24gKFRSQU5TUE9SVFMpIHtcclxuICAgIFRSQU5TUE9SVFNbXCJ3ZWJzb2NrZXRcIl0gPSBcIndlYnNvY2tldFwiO1xyXG59KShUUkFOU1BPUlRTIHx8IChleHBvcnRzLlRSQU5TUE9SVFMgPSBUUkFOU1BPUlRTID0ge30pKTtcclxudmFyIENPTk5FQ1RJT05fU1RBVEU7XHJcbihmdW5jdGlvbiAoQ09OTkVDVElPTl9TVEFURSkge1xyXG4gICAgQ09OTkVDVElPTl9TVEFURVtcIkNvbm5lY3RpbmdcIl0gPSBcImNvbm5lY3RpbmdcIjtcclxuICAgIENPTk5FQ1RJT05fU1RBVEVbXCJPcGVuXCJdID0gXCJvcGVuXCI7XHJcbiAgICBDT05ORUNUSU9OX1NUQVRFW1wiQ2xvc2luZ1wiXSA9IFwiY2xvc2luZ1wiO1xyXG4gICAgQ09OTkVDVElPTl9TVEFURVtcIkNsb3NlZFwiXSA9IFwiY2xvc2VkXCI7XHJcbn0pKENPTk5FQ1RJT05fU1RBVEUgfHwgKGV4cG9ydHMuQ09OTkVDVElPTl9TVEFURSA9IENPTk5FQ1RJT05fU1RBVEUgPSB7fSkpO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/constants.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/push.js":
/*!******************************************************************!*\
!*** ./node_modules/@supabase/realtime-js/dist/main/lib/push.js ***!
\******************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst constants_1 = __webpack_require__(/*! ../lib/constants */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/constants.js\");\r\nclass Push {\r\n /**\r\n * Initializes the Push\r\n *\r\n * @param channel The Channel\r\n * @param event The event, for example `\"phx_join\"`\r\n * @param payload The payload, for example `{user_id: 123}`\r\n * @param timeout The push timeout in milliseconds\r\n */\r\n constructor(channel, event, payload = {}, timeout = constants_1.DEFAULT_TIMEOUT) {\r\n this.channel = channel;\r\n this.event = event;\r\n this.payload = payload;\r\n this.timeout = timeout;\r\n this.sent = false;\r\n this.timeoutTimer = undefined;\r\n this.ref = '';\r\n this.receivedResp = null;\r\n this.recHooks = [];\r\n this.refEvent = null;\r\n }\r\n resend(timeout) {\r\n this.timeout = timeout;\r\n this._cancelRefEvent();\r\n this.ref = '';\r\n this.refEvent = null;\r\n this.receivedResp = null;\r\n this.sent = false;\r\n this.send();\r\n }\r\n send() {\r\n if (this._hasReceived('timeout')) {\r\n return;\r\n }\r\n this.startTimeout();\r\n this.sent = true;\r\n this.channel.socket.push({\r\n topic: this.channel.topic,\r\n event: this.event,\r\n payload: this.payload,\r\n ref: this.ref,\r\n join_ref: this.channel._joinRef(),\r\n });\r\n }\r\n updatePayload(payload) {\r\n this.payload = Object.assign(Object.assign({}, this.payload), payload);\r\n }\r\n receive(status, callback) {\r\n var _a;\r\n if (this._hasReceived(status)) {\r\n callback((_a = this.receivedResp) === null || _a === void 0 ? void 0 : _a.response);\r\n }\r\n this.recHooks.push({ status, callback });\r\n return this;\r\n }\r\n startTimeout() {\r\n if (this.timeoutTimer) {\r\n return;\r\n }\r\n this.ref = this.channel.socket._makeRef();\r\n this.refEvent = this.channel._replyEventName(this.ref);\r\n const callback = (payload) => {\r\n this._cancelRefEvent();\r\n this._cancelTimeout();\r\n this.receivedResp = payload;\r\n this._matchReceive(payload);\r\n };\r\n this.channel._on(this.refEvent, {}, callback);\r\n this.timeoutTimer = setTimeout(() => {\r\n this.trigger('timeout', {});\r\n }, this.timeout);\r\n }\r\n trigger(status, response) {\r\n if (this.refEvent)\r\n this.channel._trigger(this.refEvent, { status, response });\r\n }\r\n destroy() {\r\n this._cancelRefEvent();\r\n this._cancelTimeout();\r\n }\r\n _cancelRefEvent() {\r\n if (!this.refEvent) {\r\n return;\r\n }\r\n this.channel._off(this.refEvent, {});\r\n }\r\n _cancelTimeout() {\r\n clearTimeout(this.timeoutTimer);\r\n this.timeoutTimer = undefined;\r\n }\r\n _matchReceive({ status, response, }) {\r\n this.recHooks\r\n .filter((h) => h.status === status)\r\n .forEach((h) => h.callback(response));\r\n }\r\n _hasReceived(status) {\r\n return this.receivedResp && this.receivedResp.status === status;\r\n }\r\n}\r\nexports[\"default\"] = Push;\r\n//# sourceMappingURL=push.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbWFpbi9saWIvcHVzaC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxvQkFBb0IsbUJBQU8sQ0FBQywrRkFBa0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELGFBQWE7QUFDOUQ7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLGtCQUFrQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0Esc0NBQXNDO0FBQ3RDLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsa0JBQWtCO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG1CQUFtQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRqcy8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tYWluL2xpYi9wdXNoLmpzPzZlMGYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi4vbGliL2NvbnN0YW50c1wiKTtcclxuY2xhc3MgUHVzaCB7XHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIHRoZSBQdXNoXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNoYW5uZWwgVGhlIENoYW5uZWxcclxuICAgICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQsIGZvciBleGFtcGxlIGBcInBoeF9qb2luXCJgXHJcbiAgICAgKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCwgZm9yIGV4YW1wbGUgYHt1c2VyX2lkOiAxMjN9YFxyXG4gICAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHB1c2ggdGltZW91dCBpbiBtaWxsaXNlY29uZHNcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoY2hhbm5lbCwgZXZlbnQsIHBheWxvYWQgPSB7fSwgdGltZW91dCA9IGNvbnN0YW50c18xLkRFRkFVTFRfVElNRU9VVCkge1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbCA9IGNoYW5uZWw7XHJcbiAgICAgICAgdGhpcy5ldmVudCA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMucGF5bG9hZCA9IHBheWxvYWQ7XHJcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDtcclxuICAgICAgICB0aGlzLnNlbnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRpbWVvdXRUaW1lciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnJlZiA9ICcnO1xyXG4gICAgICAgIHRoaXMucmVjZWl2ZWRSZXNwID0gbnVsbDtcclxuICAgICAgICB0aGlzLnJlY0hvb2tzID0gW107XHJcbiAgICAgICAgdGhpcy5yZWZFdmVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXNlbmQodGltZW91dCkge1xyXG4gICAgICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XHJcbiAgICAgICAgdGhpcy5fY2FuY2VsUmVmRXZlbnQoKTtcclxuICAgICAgICB0aGlzLnJlZiA9ICcnO1xyXG4gICAgICAgIHRoaXMucmVmRXZlbnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmVjZWl2ZWRSZXNwID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgIH1cclxuICAgIHNlbmQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2hhc1JlY2VpdmVkKCd0aW1lb3V0JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZW91dCgpO1xyXG4gICAgICAgIHRoaXMuc2VudCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsLnNvY2tldC5wdXNoKHtcclxuICAgICAgICAgICAgdG9waWM6IHRoaXMuY2hhbm5lbC50b3BpYyxcclxuICAgICAgICAgICAgZXZlbnQ6IHRoaXMuZXZlbnQsXHJcbiAgICAgICAgICAgIHBheWxvYWQ6IHRoaXMucGF5bG9hZCxcclxuICAgICAgICAgICAgcmVmOiB0aGlzLnJlZixcclxuICAgICAgICAgICAgam9pbl9yZWY6IHRoaXMuY2hhbm5lbC5fam9pblJlZigpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdXBkYXRlUGF5bG9hZChwYXlsb2FkKSB7XHJcbiAgICAgICAgdGhpcy5wYXlsb2FkID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBheWxvYWQpLCBwYXlsb2FkKTtcclxuICAgIH1cclxuICAgIHJlY2VpdmUoc3RhdHVzLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgICAgICBpZiAodGhpcy5faGFzUmVjZWl2ZWQoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICBjYWxsYmFjaygoX2EgPSB0aGlzLnJlY2VpdmVkUmVzcCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZWNIb29rcy5wdXNoKHsgc3RhdHVzLCBjYWxsYmFjayB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHN0YXJ0VGltZW91dCgpIHtcclxuICAgICAgICBpZiAodGhpcy50aW1lb3V0VGltZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZiA9IHRoaXMuY2hhbm5lbC5zb2NrZXQuX21ha2VSZWYoKTtcclxuICAgICAgICB0aGlzLnJlZkV2ZW50ID0gdGhpcy5jaGFubmVsLl9yZXBseUV2ZW50TmFtZSh0aGlzLnJlZik7XHJcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSAocGF5bG9hZCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9jYW5jZWxSZWZFdmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9jYW5jZWxUaW1lb3V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVjZWl2ZWRSZXNwID0gcGF5bG9hZDtcclxuICAgICAgICAgICAgdGhpcy5fbWF0Y2hSZWNlaXZlKHBheWxvYWQpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5jaGFubmVsLl9vbih0aGlzLnJlZkV2ZW50LCB7fSwgY2FsbGJhY2spO1xyXG4gICAgICAgIHRoaXMudGltZW91dFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndGltZW91dCcsIHt9KTtcclxuICAgICAgICB9LCB0aGlzLnRpbWVvdXQpO1xyXG4gICAgfVxyXG4gICAgdHJpZ2dlcihzdGF0dXMsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVmRXZlbnQpXHJcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbC5fdHJpZ2dlcih0aGlzLnJlZkV2ZW50LCB7IHN0YXR1cywgcmVzcG9uc2UgfSk7XHJcbiAgICB9XHJcbiAgICBkZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuX2NhbmNlbFJlZkV2ZW50KCk7XHJcbiAgICAgICAgdGhpcy5fY2FuY2VsVGltZW91dCgpO1xyXG4gICAgfVxyXG4gICAgX2NhbmNlbFJlZkV2ZW50KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5yZWZFdmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hhbm5lbC5fb2ZmKHRoaXMucmVmRXZlbnQsIHt9KTtcclxuICAgIH1cclxuICAgIF9jYW5jZWxUaW1lb3V0KCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRUaW1lcik7XHJcbiAgICAgICAgdGhpcy50aW1lb3V0VGltZXIgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBfbWF0Y2hSZWNlaXZlKHsgc3RhdHVzLCByZXNwb25zZSwgfSkge1xyXG4gICAgICAgIHRoaXMucmVjSG9va3NcclxuICAgICAgICAgICAgLmZpbHRlcigoaCkgPT4gaC5zdGF0dXMgPT09IHN0YXR1cylcclxuICAgICAgICAgICAgLmZvckVhY2goKGgpID0+IGguY2FsbGJhY2socmVzcG9uc2UpKTtcclxuICAgIH1cclxuICAgIF9oYXNSZWNlaXZlZChzdGF0dXMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWNlaXZlZFJlc3AgJiYgdGhpcy5yZWNlaXZlZFJlc3Auc3RhdHVzID09PSBzdGF0dXM7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0gUHVzaDtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHVzaC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/push.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/serializer.js":
/*!************************************************************************!*\
!*** ./node_modules/@supabase/realtime-js/dist/main/lib/serializer.js ***!
\************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\n// This file draws heavily from https://github.com/phoenixframework/phoenix/commit/cf098e9cf7a44ee6479d31d911a97d3c7430c6fe\r\n// License: https://github.com/phoenixframework/phoenix/blob/master/LICENSE.md\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nclass Serializer {\r\n constructor() {\r\n this.HEADER_LENGTH = 1;\r\n }\r\n decode(rawPayload, callback) {\r\n if (rawPayload.constructor === ArrayBuffer) {\r\n return callback(this._binaryDecode(rawPayload));\r\n }\r\n if (typeof rawPayload === 'string') {\r\n return callback(JSON.parse(rawPayload));\r\n }\r\n return callback({});\r\n }\r\n _binaryDecode(buffer) {\r\n const view = new DataView(buffer);\r\n const decoder = new TextDecoder();\r\n return this._decodeBroadcast(buffer, view, decoder);\r\n }\r\n _decodeBroadcast(buffer, view, decoder) {\r\n const topicSize = view.getUint8(1);\r\n const eventSize = view.getUint8(2);\r\n let offset = this.HEADER_LENGTH + 2;\r\n const topic = decoder.decode(buffer.slice(offset, offset + topicSize));\r\n offset = offset + topicSize;\r\n const event = decoder.decode(buffer.slice(offset, offset + eventSize));\r\n offset = offset + eventSize;\r\n const data = JSON.parse(decoder.decode(buffer.slice(offset, buffer.byteLength)));\r\n return { ref: null, topic: topic, event: event, payload: data };\r\n }\r\n}\r\nexports[\"default\"] = Serializer;\r\n//# sourceMappingURL=serializer.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbWFpbi9saWIvc2VyaWFsaXplci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbWFpbi9saWIvc2VyaWFsaXplci5qcz81OTRlIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG4vLyBUaGlzIGZpbGUgZHJhd3MgaGVhdmlseSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9waG9lbml4ZnJhbWV3b3JrL3Bob2VuaXgvY29tbWl0L2NmMDk4ZTljZjdhNDRlZTY0NzlkMzFkOTExYTk3ZDNjNzQzMGM2ZmVcclxuLy8gTGljZW5zZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob2VuaXhmcmFtZXdvcmsvcGhvZW5peC9ibG9iL21hc3Rlci9MSUNFTlNFLm1kXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuY2xhc3MgU2VyaWFsaXplciB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLkhFQURFUl9MRU5HVEggPSAxO1xyXG4gICAgfVxyXG4gICAgZGVjb2RlKHJhd1BheWxvYWQsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKHJhd1BheWxvYWQuY29uc3RydWN0b3IgPT09IEFycmF5QnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayh0aGlzLl9iaW5hcnlEZWNvZGUocmF3UGF5bG9hZCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIHJhd1BheWxvYWQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhKU09OLnBhcnNlKHJhd1BheWxvYWQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHt9KTtcclxuICAgIH1cclxuICAgIF9iaW5hcnlEZWNvZGUoYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIpO1xyXG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGVjb2RlQnJvYWRjYXN0KGJ1ZmZlciwgdmlldywgZGVjb2Rlcik7XHJcbiAgICB9XHJcbiAgICBfZGVjb2RlQnJvYWRjYXN0KGJ1ZmZlciwgdmlldywgZGVjb2Rlcikge1xyXG4gICAgICAgIGNvbnN0IHRvcGljU2l6ZSA9IHZpZXcuZ2V0VWludDgoMSk7XHJcbiAgICAgICAgY29uc3QgZXZlbnRTaXplID0gdmlldy5nZXRVaW50OCgyKTtcclxuICAgICAgICBsZXQgb2Zmc2V0ID0gdGhpcy5IRUFERVJfTEVOR1RIICsgMjtcclxuICAgICAgICBjb25zdCB0b3BpYyA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHRvcGljU2l6ZSkpO1xyXG4gICAgICAgIG9mZnNldCA9IG9mZnNldCArIHRvcGljU2l6ZTtcclxuICAgICAgICBjb25zdCBldmVudCA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIGV2ZW50U2l6ZSkpO1xyXG4gICAgICAgIG9mZnNldCA9IG9mZnNldCArIGV2ZW50U2l6ZTtcclxuICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aCkpKTtcclxuICAgICAgICByZXR1cm4geyByZWY6IG51bGwsIHRvcGljOiB0b3BpYywgZXZlbnQ6IGV2ZW50LCBwYXlsb2FkOiBkYXRhIH07XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0gU2VyaWFsaXplcjtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VyaWFsaXplci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/serializer.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/timer.js":
/*!*******************************************************************!*\
!*** ./node_modules/@supabase/realtime-js/dist/main/lib/timer.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n/**\r\n * Creates a timer that accepts a `timerCalc` function to perform calculated timeout retries, such as exponential backoff.\r\n *\r\n * @example\r\n * let reconnectTimer = new Timer(() => this.connect(), function(tries){\r\n * return [1000, 5000, 10000][tries - 1] || 10000\r\n * })\r\n * reconnectTimer.scheduleTimeout() // fires after 1000\r\n * reconnectTimer.scheduleTimeout() // fires after 5000\r\n * reconnectTimer.reset()\r\n * reconnectTimer.scheduleTimeout() // fires after 1000\r\n */\r\nclass Timer {\r\n constructor(callback, timerCalc) {\r\n this.callback = callback;\r\n this.timerCalc = timerCalc;\r\n this.timer = undefined;\r\n this.tries = 0;\r\n this.callback = callback;\r\n this.timerCalc = timerCalc;\r\n }\r\n reset() {\r\n this.tries = 0;\r\n clearTimeout(this.timer);\r\n }\r\n // Cancels any previous scheduleTimeout and schedules callback\r\n scheduleTimeout() {\r\n clearTimeout(this.timer);\r\n this.timer = setTimeout(() => {\r\n this.tries = this.tries + 1;\r\n this.callback();\r\n }, this.timerCalc(this.tries + 1));\r\n }\r\n}\r\nexports[\"default\"] = Timer;\r\n//# sourceMappingURL=timer.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbWFpbi9saWIvdGltZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRqcy8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tYWluL2xpYi90aW1lci5qcz8zYTJiIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgdGltZXIgdGhhdCBhY2NlcHRzIGEgYHRpbWVyQ2FsY2AgZnVuY3Rpb24gdG8gcGVyZm9ybSBjYWxjdWxhdGVkIHRpbWVvdXQgcmV0cmllcywgc3VjaCBhcyBleHBvbmVudGlhbCBiYWNrb2ZmLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICBsZXQgcmVjb25uZWN0VGltZXIgPSBuZXcgVGltZXIoKCkgPT4gdGhpcy5jb25uZWN0KCksIGZ1bmN0aW9uKHRyaWVzKXtcclxuICogICAgICByZXR1cm4gWzEwMDAsIDUwMDAsIDEwMDAwXVt0cmllcyAtIDFdIHx8IDEwMDAwXHJcbiAqICAgIH0pXHJcbiAqICAgIHJlY29ubmVjdFRpbWVyLnNjaGVkdWxlVGltZW91dCgpIC8vIGZpcmVzIGFmdGVyIDEwMDBcclxuICogICAgcmVjb25uZWN0VGltZXIuc2NoZWR1bGVUaW1lb3V0KCkgLy8gZmlyZXMgYWZ0ZXIgNTAwMFxyXG4gKiAgICByZWNvbm5lY3RUaW1lci5yZXNldCgpXHJcbiAqICAgIHJlY29ubmVjdFRpbWVyLnNjaGVkdWxlVGltZW91dCgpIC8vIGZpcmVzIGFmdGVyIDEwMDBcclxuICovXHJcbmNsYXNzIFRpbWVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrLCB0aW1lckNhbGMpIHtcclxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy50aW1lckNhbGMgPSB0aW1lckNhbGM7XHJcbiAgICAgICAgdGhpcy50aW1lciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnRyaWVzID0gMDtcclxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy50aW1lckNhbGMgPSB0aW1lckNhbGM7XHJcbiAgICB9XHJcbiAgICByZXNldCgpIHtcclxuICAgICAgICB0aGlzLnRyaWVzID0gMDtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XHJcbiAgICB9XHJcbiAgICAvLyBDYW5jZWxzIGFueSBwcmV2aW91cyBzY2hlZHVsZVRpbWVvdXQgYW5kIHNjaGVkdWxlcyBjYWxsYmFja1xyXG4gICAgc2NoZWR1bGVUaW1lb3V0KCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcclxuICAgICAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZXMgPSB0aGlzLnRyaWVzICsgMTtcclxuICAgICAgICAgICAgdGhpcy5jYWxsYmFjaygpO1xyXG4gICAgICAgIH0sIHRoaXMudGltZXJDYWxjKHRoaXMudHJpZXMgKyAxKSk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0gVGltZXI7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVyLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/timer.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/transformers.js":
/*!**************************************************************************!*\
!*** ./node_modules/@supabase/realtime-js/dist/main/lib/transformers.js ***!
\**************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\n/**\r\n * Helpers to convert the change Payload into native JS types.\r\n */\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.httpEndpointURL = exports.toTimestampString = exports.toArray = exports.toJson = exports.toNumber = exports.toBoolean = exports.convertCell = exports.convertColumn = exports.convertChangeData = exports.PostgresTypes = void 0;\r\n// Adapted from epgsql (src/epgsql_binary.erl), this module licensed under\r\n// 3-clause BSD found here: https://raw.githubusercontent.com/epgsql/epgsql/devel/LICENSE\r\nvar PostgresTypes;\r\n(function (PostgresTypes) {\r\n PostgresTypes[\"abstime\"] = \"abstime\";\r\n PostgresTypes[\"bool\"] = \"bool\";\r\n PostgresTypes[\"date\"] = \"date\";\r\n PostgresTypes[\"daterange\"] = \"daterange\";\r\n PostgresTypes[\"float4\"] = \"float4\";\r\n PostgresTypes[\"float8\"] = \"float8\";\r\n PostgresTypes[\"int2\"] = \"int2\";\r\n PostgresTypes[\"int4\"] = \"int4\";\r\n PostgresTypes[\"int4range\"] = \"int4range\";\r\n PostgresTypes[\"int8\"] = \"int8\";\r\n PostgresTypes[\"int8range\"] = \"int8range\";\r\n PostgresTypes[\"json\"] = \"json\";\r\n PostgresTypes[\"jsonb\"] = \"jsonb\";\r\n PostgresTypes[\"money\"] = \"money\";\r\n PostgresTypes[\"numeric\"] = \"numeric\";\r\n PostgresTypes[\"oid\"] = \"oid\";\r\n PostgresTypes[\"reltime\"] = \"reltime\";\r\n PostgresTypes[\"text\"] = \"text\";\r\n PostgresTypes[\"time\"] = \"time\";\r\n PostgresTypes[\"timestamp\"] = \"timestamp\";\r\n PostgresTypes[\"timestamptz\"] = \"timestamptz\";\r\n PostgresTypes[\"timetz\"] = \"timetz\";\r\n PostgresTypes[\"tsrange\"] = \"tsrange\";\r\n PostgresTypes[\"tstzrange\"] = \"tstzrange\";\r\n})(PostgresTypes || (exports.PostgresTypes = PostgresTypes = {}));\r\n/**\r\n * Takes an array of columns and an object of string values then converts each string value\r\n * to its mapped type.\r\n *\r\n * @param {{name: String, type: String}[]} columns\r\n * @param {Object} record\r\n * @param {Object} options The map of various options that can be applied to the mapper\r\n * @param {Array} options.skipTypes The array of types that should not be converted\r\n *\r\n * @example convertChangeData([{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age:'33'}, {})\r\n * //=>{ first_name: 'Paul', age: 33 }\r\n */\r\nconst convertChangeData = (columns, record, options = {}) => {\r\n var _a;\r\n const skipTypes = (_a = options.skipTypes) !== null && _a !== void 0 ? _a : [];\r\n return Object.keys(record).reduce((acc, rec_key) => {\r\n acc[rec_key] = (0, exports.convertColumn)(rec_key, columns, record, skipTypes);\r\n return acc;\r\n }, {});\r\n};\r\nexports.convertChangeData = convertChangeData;\r\n/**\r\n * Converts the value of an individual column.\r\n *\r\n * @param {String} columnName The column that you want to convert\r\n * @param {{name: String, type: String}[]} columns All of the columns\r\n * @param {Object} record The map of string values\r\n * @param {Array} skipTypes An array of types that should not be converted\r\n * @return {object} Useless information\r\n *\r\n * @example convertColumn('age', [{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age: '33'}, [])\r\n * //=> 33\r\n * @example convertColumn('age', [{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age: '33'}, ['int4'])\r\n * //=> \"33\"\r\n */\r\nconst convertColumn = (columnName, columns, record, skipTypes) => {\r\n const column = columns.find((x) => x.name === columnName);\r\n const colType = column === null || column === void 0 ? void 0 : column.type;\r\n const value = record[columnName];\r\n if (colType && !skipTypes.includes(colType)) {\r\n return (0, exports.convertCell)(colType, value);\r\n }\r\n return noop(value);\r\n};\r\nexports.convertColumn = convertColumn;\r\n/**\r\n * If the value of the cell is `null`, returns null.\r\n * Otherwise converts the string value to the correct type.\r\n * @param {String} type A postgres column type\r\n * @param {String} value The cell value\r\n *\r\n * @example convertCell('bool', 't')\r\n * //=> true\r\n * @example convertCell('int8', '10')\r\n * //=> 10\r\n * @example convertCell('_int4', '{1,2,3,4}')\r\n * //=> [1,2,3,4]\r\n */\r\nconst convertCell = (type, value) => {\r\n // if data type is an array\r\n if (type.charAt(0) === '_') {\r\n const dataType = type.slice(1, type.length);\r\n return (0, exports.toArray)(value, dataType);\r\n }\r\n // If not null, convert to correct type.\r\n switch (type) {\r\n case PostgresTypes.bool:\r\n return (0, exports.toBoolean)(value);\r\n case PostgresTypes.float4:\r\n case PostgresTypes.float8:\r\n case PostgresTypes.int2:\r\n case PostgresTypes.int4:\r\n case PostgresTypes.int8:\r\n case PostgresTypes.numeric:\r\n case PostgresTypes.oid:\r\n return (0, exports.toNumber)(value);\r\n case PostgresTypes.json:\r\n case PostgresTypes.jsonb:\r\n return (0, exports.toJson)(value);\r\n case PostgresTypes.timestamp:\r\n return (0, exports.toTimestampString)(value); // Format to be consistent with PostgREST\r\n case PostgresTypes.abstime: // To allow users to cast it based on Timezone\r\n case PostgresTypes.date: // To allow users to cast it based on Timezone\r\n case PostgresTypes.daterange:\r\n case PostgresTypes.int4range:\r\n case PostgresTypes.int8range:\r\n case PostgresTypes.money:\r\n case PostgresTypes.reltime: // To allow users to cast it based on Timezone\r\n case PostgresTypes.text:\r\n case PostgresTypes.time: // To allow users to cast it based on Timezone\r\n case PostgresTypes.timestamptz: // To allow users to cast it based on Timezone\r\n case PostgresTypes.timetz: // To allow users to cast it based on Timezone\r\n case PostgresTypes.tsrange:\r\n case PostgresTypes.tstzrange:\r\n return noop(value);\r\n default:\r\n // Return the value for remaining types\r\n return noop(value);\r\n }\r\n};\r\nexports.convertCell = convertCell;\r\nconst noop = (value) => {\r\n return value;\r\n};\r\nconst toBoolean = (value) => {\r\n switch (value) {\r\n case 't':\r\n return true;\r\n case 'f':\r\n return false;\r\n default:\r\n return value;\r\n }\r\n};\r\nexports.toBoolean = toBoolean;\r\nconst toNumber = (value) => {\r\n if (typeof value === 'string') {\r\n const parsedValue = parseFloat(value);\r\n if (!Number.isNaN(parsedValue)) {\r\n return parsedValue;\r\n }\r\n }\r\n return value;\r\n};\r\nexports.toNumber = toNumber;\r\nconst toJson = (value) => {\r\n if (typeof value === 'string') {\r\n try {\r\n return JSON.parse(value);\r\n }\r\n catch (error) {\r\n console.log(`JSON parse error: ${error}`);\r\n return value;\r\n }\r\n }\r\n return value;\r\n};\r\nexports.toJson = toJson;\r\n/**\r\n * Converts a Postgres Array into a native JS array\r\n *\r\n * @example toArray('{}', 'int4')\r\n * //=> []\r\n * @example toArray('{\"[2021-01-01,2021-12-31)\",\"(2021-01-01,2021-12-32]\"}', 'daterange')\r\n * //=> ['[2021-01-01,2021-12-31)', '(2021-01-01,2021-12-32]']\r\n * @example toArray([1,2,3,4], 'int4')\r\n * //=> [1,2,3,4]\r\n */\r\nconst toArray = (value, type) => {\r\n if (typeof value !== 'string') {\r\n return value;\r\n }\r\n const lastIdx = value.length - 1;\r\n const closeBrace = value[lastIdx];\r\n const openBrace = value[0];\r\n // Confirm value is a Postgres array by checking curly brackets\r\n if (openBrace === '{' && closeBrace === '}') {\r\n let arr;\r\n const valTrim = value.slice(1, lastIdx);\r\n // TODO: find a better solution to separate Postgres array data\r\n try {\r\n arr = JSON.parse('[' + valTrim + ']');\r\n }\r\n catch (_) {\r\n // WARNING: splitting on comma does not cover all edge cases\r\n arr = valTrim ? valTrim.split(',') : [];\r\n }\r\n return arr.map((val) => (0, exports.convertCell)(type, val));\r\n }\r\n return value;\r\n};\r\nexports.toArray = toArray;\r\n/**\r\n * Fixes timestamp to be ISO-8601. Swaps the space between the date and time for a 'T'\r\n * See https://github.com/supabase/supabase/issues/18\r\n *\r\n * @example toTimestampString('2019-09-10 00:00:00')\r\n * //=> '2019-09-10T00:00:00'\r\n */\r\nconst toTimestampString = (value) => {\r\n if (typeof value === 'string') {\r\n return value.replace(' ', 'T');\r\n }\r\n return value;\r\n};\r\nexports.toTimestampString = toTimestampString;\r\nconst httpEndpointURL = (socketUrl) => {\r\n let url = socketUrl;\r\n url = url.replace(/^ws/i, 'http');\r\n url = url.replace(/(\\/socket\\/websocket|\\/socket|\\/websocket)\\/?$/i, '');\r\n return url.replace(/\\/+$/, '');\r\n};\r\nexports.httpEndpointURL = httpEndpointURL;\r\n//# sourceMappingURL=transformers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbWFpbi9saWIvdHJhbnNmb3JtZXJzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHVCQUF1QixHQUFHLHlCQUF5QixHQUFHLGVBQWUsR0FBRyxjQUFjLEdBQUcsZ0JBQWdCLEdBQUcsaUJBQWlCLEdBQUcsbUJBQW1CLEdBQUcscUJBQXFCLEdBQUcseUJBQXlCLEdBQUcscUJBQXFCO0FBQy9OO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxvQkFBb0IscUJBQXFCLHFCQUFxQjtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksMkJBQTJCLElBQUk7QUFDM0MsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEI7QUFDQSxnQ0FBZ0MsaUNBQWlDLEdBQUcsMEJBQTBCLElBQUksNkJBQTZCLElBQUk7QUFDbkksU0FBUztBQUNUO0FBQ0Esd0RBQXdEO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUk7QUFDVDtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWSwyQkFBMkIsSUFBSTtBQUMzQyxXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFlBQVksUUFBUTtBQUNwQjtBQUNBLG1DQUFtQyxpQ0FBaUMsR0FBRywwQkFBMEIsSUFBSSw4QkFBOEI7QUFDbkk7QUFDQSxtQ0FBbUMsaUNBQWlDLEdBQUcsMEJBQTBCLElBQUksOEJBQThCO0FBQ25JO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLFFBQVE7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsTUFBTTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLHNCQUFzQixvREFBb0Q7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QiIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRqcy8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tYWluL2xpYi90cmFuc2Zvcm1lcnMuanM/M2E0MCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuLyoqXHJcbiAqIEhlbHBlcnMgdG8gY29udmVydCB0aGUgY2hhbmdlIFBheWxvYWQgaW50byBuYXRpdmUgSlMgdHlwZXMuXHJcbiAqL1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuaHR0cEVuZHBvaW50VVJMID0gZXhwb3J0cy50b1RpbWVzdGFtcFN0cmluZyA9IGV4cG9ydHMudG9BcnJheSA9IGV4cG9ydHMudG9Kc29uID0gZXhwb3J0cy50b051bWJlciA9IGV4cG9ydHMudG9Cb29sZWFuID0gZXhwb3J0cy5jb252ZXJ0Q2VsbCA9IGV4cG9ydHMuY29udmVydENvbHVtbiA9IGV4cG9ydHMuY29udmVydENoYW5nZURhdGEgPSBleHBvcnRzLlBvc3RncmVzVHlwZXMgPSB2b2lkIDA7XHJcbi8vIEFkYXB0ZWQgZnJvbSBlcGdzcWwgKHNyYy9lcGdzcWxfYmluYXJ5LmVybCksIHRoaXMgbW9kdWxlIGxpY2Vuc2VkIHVuZGVyXHJcbi8vIDMtY2xhdXNlIEJTRCBmb3VuZCBoZXJlOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZXBnc3FsL2VwZ3NxbC9kZXZlbC9MSUNFTlNFXHJcbnZhciBQb3N0Z3Jlc1R5cGVzO1xyXG4oZnVuY3Rpb24gKFBvc3RncmVzVHlwZXMpIHtcclxuICAgIFBvc3RncmVzVHlwZXNbXCJhYnN0aW1lXCJdID0gXCJhYnN0aW1lXCI7XHJcbiAgICBQb3N0Z3Jlc1R5cGVzW1wiYm9vbFwiXSA9IFwiYm9vbFwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcImRhdGVcIl0gPSBcImRhdGVcIjtcclxuICAgIFBvc3RncmVzVHlwZXNbXCJkYXRlcmFuZ2VcIl0gPSBcImRhdGVyYW5nZVwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcImZsb2F0NFwiXSA9IFwiZmxvYXQ0XCI7XHJcbiAgICBQb3N0Z3Jlc1R5cGVzW1wiZmxvYXQ4XCJdID0gXCJmbG9hdDhcIjtcclxuICAgIFBvc3RncmVzVHlwZXNbXCJpbnQyXCJdID0gXCJpbnQyXCI7XHJcbiAgICBQb3N0Z3Jlc1R5cGVzW1wiaW50NFwiXSA9IFwiaW50NFwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcImludDRyYW5nZVwiXSA9IFwiaW50NHJhbmdlXCI7XHJcbiAgICBQb3N0Z3Jlc1R5cGVzW1wiaW50OFwiXSA9IFwiaW50OFwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcImludDhyYW5nZVwiXSA9IFwiaW50OHJhbmdlXCI7XHJcbiAgICBQb3N0Z3Jlc1R5cGVzW1wianNvblwiXSA9IFwianNvblwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcImpzb25iXCJdID0gXCJqc29uYlwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcIm1vbmV5XCJdID0gXCJtb25leVwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcIm51bWVyaWNcIl0gPSBcIm51bWVyaWNcIjtcclxuICAgIFBvc3RncmVzVHlwZXNbXCJvaWRcIl0gPSBcIm9pZFwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcInJlbHRpbWVcIl0gPSBcInJlbHRpbWVcIjtcclxuICAgIFBvc3RncmVzVHlwZXNbXCJ0ZXh0XCJdID0gXCJ0ZXh0XCI7XHJcbiAgICBQb3N0Z3Jlc1R5cGVzW1widGltZVwiXSA9IFwidGltZVwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcInRpbWVzdGFtcFwiXSA9IFwidGltZXN0YW1wXCI7XHJcbiAgICBQb3N0Z3Jlc1R5cGVzW1widGltZXN0YW1wdHpcIl0gPSBcInRpbWVzdGFtcHR6XCI7XHJcbiAgICBQb3N0Z3Jlc1R5cGVzW1widGltZXR6XCJdID0gXCJ0aW1ldHpcIjtcclxuICAgIFBvc3RncmVzVHlwZXNbXCJ0c3JhbmdlXCJdID0gXCJ0c3JhbmdlXCI7XHJcbiAgICBQb3N0Z3Jlc1R5cGVzW1widHN0enJhbmdlXCJdID0gXCJ0c3R6cmFuZ2VcIjtcclxufSkoUG9zdGdyZXNUeXBlcyB8fCAoZXhwb3J0cy5Qb3N0Z3Jlc1R5cGVzID0gUG9zdGdyZXNUeXBlcyA9IHt9KSk7XHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBjb2x1bW5zIGFuZCBhbiBvYmplY3Qgb2Ygc3RyaW5nIHZhbHVlcyB0aGVuIGNvbnZlcnRzIGVhY2ggc3RyaW5nIHZhbHVlXHJcbiAqIHRvIGl0cyBtYXBwZWQgdHlwZS5cclxuICpcclxuICogQHBhcmFtIHt7bmFtZTogU3RyaW5nLCB0eXBlOiBTdHJpbmd9W119IGNvbHVtbnNcclxuICogQHBhcmFtIHtPYmplY3R9IHJlY29yZFxyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgbWFwIG9mIHZhcmlvdXMgb3B0aW9ucyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBtYXBwZXJcclxuICogQHBhcmFtIHtBcnJheX0gb3B0aW9ucy5za2lwVHlwZXMgVGhlIGFycmF5IG9mIHR5cGVzIHRoYXQgc2hvdWxkIG5vdCBiZSBjb252ZXJ0ZWRcclxuICpcclxuICogQGV4YW1wbGUgY29udmVydENoYW5nZURhdGEoW3tuYW1lOiAnZmlyc3RfbmFtZScsIHR5cGU6ICd0ZXh0J30sIHtuYW1lOiAnYWdlJywgdHlwZTogJ2ludDQnfV0sIHtmaXJzdF9uYW1lOiAnUGF1bCcsIGFnZTonMzMnfSwge30pXHJcbiAqIC8vPT57IGZpcnN0X25hbWU6ICdQYXVsJywgYWdlOiAzMyB9XHJcbiAqL1xyXG5jb25zdCBjb252ZXJ0Q2hhbmdlRGF0YSA9IChjb2x1bW5zLCByZWNvcmQsIG9wdGlvbnMgPSB7fSkgPT4ge1xyXG4gICAgdmFyIF9hO1xyXG4gICAgY29uc3Qgc2tpcFR5cGVzID0gKF9hID0gb3B0aW9ucy5za2lwVHlwZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlY29yZCkucmVkdWNlKChhY2MsIHJlY19rZXkpID0+IHtcclxuICAgICAgICBhY2NbcmVjX2tleV0gPSAoMCwgZXhwb3J0cy5jb252ZXJ0Q29sdW1uKShyZWNfa2V5LCBjb2x1bW5zLCByZWNvcmQsIHNraXBUeXBlcyk7XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIHt9KTtcclxufTtcclxuZXhwb3J0cy5jb252ZXJ0Q2hhbmdlRGF0YSA9IGNvbnZlcnRDaGFuZ2VEYXRhO1xyXG4vKipcclxuICogQ29udmVydHMgdGhlIHZhbHVlIG9mIGFuIGluZGl2aWR1YWwgY29sdW1uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1uTmFtZSBUaGUgY29sdW1uIHRoYXQgeW91IHdhbnQgdG8gY29udmVydFxyXG4gKiBAcGFyYW0ge3tuYW1lOiBTdHJpbmcsIHR5cGU6IFN0cmluZ31bXX0gY29sdW1ucyBBbGwgb2YgdGhlIGNvbHVtbnNcclxuICogQHBhcmFtIHtPYmplY3R9IHJlY29yZCBUaGUgbWFwIG9mIHN0cmluZyB2YWx1ZXNcclxuICogQHBhcmFtIHtBcnJheX0gc2tpcFR5cGVzIEFuIGFycmF5IG9mIHR5cGVzIHRoYXQgc2hvdWxkIG5vdCBiZSBjb252ZXJ0ZWRcclxuICogQHJldHVybiB7b2JqZWN0fSBVc2VsZXNzIGluZm9ybWF0aW9uXHJcbiAqXHJcbiAqIEBleGFtcGxlIGNvbnZlcnRDb2x1bW4oJ2FnZScsIFt7bmFtZTogJ2ZpcnN0X25hbWUnLCB0eXBlOiAndGV4dCd9LCB7bmFtZTogJ2FnZScsIHR5cGU6ICdpbnQ0J31dLCB7Zmlyc3RfbmFtZTogJ1BhdWwnLCBhZ2U6ICczMyd9LCBbXSlcclxuICogLy89PiAzM1xyXG4gKiBAZXhhbXBsZSBjb252ZXJ0Q29sdW1uKCdhZ2UnLCBbe25hbWU6ICdmaXJzdF9uYW1lJywgdHlwZTogJ3RleHQnfSwge25hbWU6ICdhZ2UnLCB0eXBlOiAnaW50NCd9XSwge2ZpcnN0X25hbWU6ICdQYXVsJywgYWdlOiAnMzMnfSwgWydpbnQ0J10pXHJcbiAqIC8vPT4gXCIzM1wiXHJcbiAqL1xyXG5jb25zdCBjb252ZXJ0Q29sdW1uID0gKGNvbHVtbk5hbWUsIGNvbHVtbnMsIHJlY29yZCwgc2tpcFR5cGVzKSA9PiB7XHJcbiAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoKHgpID0+IHgubmFtZSA9PT0gY29sdW1uTmFtZSk7XHJcbiAgICBjb25zdCBjb2xUeXBlID0gY29sdW1uID09PSBudWxsIHx8IGNvbHVtbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29sdW1uLnR5cGU7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHJlY29yZFtjb2x1bW5OYW1lXTtcclxuICAgIGlmIChjb2xUeXBlICYmICFza2lwVHlwZXMuaW5jbHVkZXMoY29sVHlwZSkpIHtcclxuICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMuY29udmVydENlbGwpKGNvbFR5cGUsIHZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBub29wKHZhbHVlKTtcclxufTtcclxuZXhwb3J0cy5jb252ZXJ0Q29sdW1uID0gY29udmVydENvbHVtbjtcclxuLyoqXHJcbiAqIElmIHRoZSB2YWx1ZSBvZiB0aGUgY2VsbCBpcyBgbnVsbGAsIHJldHVybnMgbnVsbC5cclxuICogT3RoZXJ3aXNlIGNvbnZlcnRzIHRoZSBzdHJpbmcgdmFsdWUgdG8gdGhlIGNvcnJlY3QgdHlwZS5cclxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgQSBwb3N0Z3JlcyBjb2x1bW4gdHlwZVxyXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgVGhlIGNlbGwgdmFsdWVcclxuICpcclxuICogQGV4YW1wbGUgY29udmVydENlbGwoJ2Jvb2wnLCAndCcpXHJcbiAqIC8vPT4gdHJ1ZVxyXG4gKiBAZXhhbXBsZSBjb252ZXJ0Q2VsbCgnaW50OCcsICcxMCcpXHJcbiAqIC8vPT4gMTBcclxuICogQGV4YW1wbGUgY29udmVydENlbGwoJ19pbnQ0JywgJ3sxLDIsMyw0fScpXHJcbiAqIC8vPT4gWzEsMiwzLDRdXHJcbiAqL1xyXG5jb25zdCBjb252ZXJ0Q2VsbCA9ICh0eXBlLCB2YWx1ZSkgPT4ge1xyXG4gICAgLy8gaWYgZGF0YSB0eXBlIGlzIGFuIGFycmF5XHJcbiAgICBpZiAodHlwZS5jaGFyQXQoMCkgPT09ICdfJykge1xyXG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0gdHlwZS5zbGljZSgxLCB0eXBlLmxlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLnRvQXJyYXkpKHZhbHVlLCBkYXRhVHlwZSk7XHJcbiAgICB9XHJcbiAgICAvLyBJZiBub3QgbnVsbCwgY29udmVydCB0byBjb3JyZWN0IHR5cGUuXHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMuYm9vbDpcclxuICAgICAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLnRvQm9vbGVhbikodmFsdWUpO1xyXG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy5mbG9hdDQ6XHJcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLmZsb2F0ODpcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMuaW50MjpcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMuaW50NDpcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMuaW50ODpcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMubnVtZXJpYzpcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMub2lkOlxyXG4gICAgICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMudG9OdW1iZXIpKHZhbHVlKTtcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMuanNvbjpcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMuanNvbmI6XHJcbiAgICAgICAgICAgIHJldHVybiAoMCwgZXhwb3J0cy50b0pzb24pKHZhbHVlKTtcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMudGltZXN0YW1wOlxyXG4gICAgICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMudG9UaW1lc3RhbXBTdHJpbmcpKHZhbHVlKTsgLy8gRm9ybWF0IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBQb3N0Z1JFU1RcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMuYWJzdGltZTogLy8gVG8gYWxsb3cgdXNlcnMgdG8gY2FzdCBpdCBiYXNlZCBvbiBUaW1lem9uZVxyXG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy5kYXRlOiAvLyBUbyBhbGxvdyB1c2VycyB0byBjYXN0IGl0IGJhc2VkIG9uIFRpbWV6b25lXHJcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLmRhdGVyYW5nZTpcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMuaW50NHJhbmdlOlxyXG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy5pbnQ4cmFuZ2U6XHJcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLm1vbmV5OlxyXG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy5yZWx0aW1lOiAvLyBUbyBhbGxvdyB1c2VycyB0byBjYXN0IGl0IGJhc2VkIG9uIFRpbWV6b25lXHJcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLnRleHQ6XHJcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLnRpbWU6IC8vIFRvIGFsbG93IHVzZXJzIHRvIGNhc3QgaXQgYmFzZWQgb24gVGltZXpvbmVcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMudGltZXN0YW1wdHo6IC8vIFRvIGFsbG93IHVzZXJzIHRvIGNhc3QgaXQgYmFzZWQgb24gVGltZXpvbmVcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMudGltZXR6OiAvLyBUbyBhbGxvdyB1c2VycyB0byBjYXN0IGl0IGJhc2VkIG9uIFRpbWV6b25lXHJcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLnRzcmFuZ2U6XHJcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLnRzdHpyYW5nZTpcclxuICAgICAgICAgICAgcmV0dXJuIG5vb3AodmFsdWUpO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIC8vIFJldHVybiB0aGUgdmFsdWUgZm9yIHJlbWFpbmluZyB0eXBlc1xyXG4gICAgICAgICAgICByZXR1cm4gbm9vcCh2YWx1ZSk7XHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydHMuY29udmVydENlbGwgPSBjb252ZXJ0Q2VsbDtcclxuY29uc3Qgbm9vcCA9ICh2YWx1ZSkgPT4ge1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59O1xyXG5jb25zdCB0b0Jvb2xlYW4gPSAodmFsdWUpID0+IHtcclxuICAgIHN3aXRjaCAodmFsdWUpIHtcclxuICAgICAgICBjYXNlICd0JzpcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgY2FzZSAnZic6XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydHMudG9Cb29sZWFuID0gdG9Cb29sZWFuO1xyXG5jb25zdCB0b051bWJlciA9ICh2YWx1ZSkgPT4ge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKHBhcnNlZFZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59O1xyXG5leHBvcnRzLnRvTnVtYmVyID0gdG9OdW1iZXI7XHJcbmNvbnN0IHRvSnNvbiA9ICh2YWx1ZSkgPT4ge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgSlNPTiBwYXJzZSBlcnJvcjogJHtlcnJvcn1gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxufTtcclxuZXhwb3J0cy50b0pzb24gPSB0b0pzb247XHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBhIFBvc3RncmVzIEFycmF5IGludG8gYSBuYXRpdmUgSlMgYXJyYXlcclxuICpcclxuICogQGV4YW1wbGUgdG9BcnJheSgne30nLCAnaW50NCcpXHJcbiAqIC8vPT4gW11cclxuICogQGV4YW1wbGUgdG9BcnJheSgne1wiWzIwMjEtMDEtMDEsMjAyMS0xMi0zMSlcIixcIigyMDIxLTAxLTAxLDIwMjEtMTItMzJdXCJ9JywgJ2RhdGVyYW5nZScpXHJcbiAqIC8vPT4gWydbMjAyMS0wMS0wMSwyMDIxLTEyLTMxKScsICcoMjAyMS0wMS0wMSwyMDIxLTEyLTMyXSddXHJcbiAqIEBleGFtcGxlIHRvQXJyYXkoWzEsMiwzLDRdLCAnaW50NCcpXHJcbiAqIC8vPT4gWzEsMiwzLDRdXHJcbiAqL1xyXG5jb25zdCB0b0FycmF5ID0gKHZhbHVlLCB0eXBlKSA9PiB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxhc3RJZHggPSB2YWx1ZS5sZW5ndGggLSAxO1xyXG4gICAgY29uc3QgY2xvc2VCcmFjZSA9IHZhbHVlW2xhc3RJZHhdO1xyXG4gICAgY29uc3Qgb3BlbkJyYWNlID0gdmFsdWVbMF07XHJcbiAgICAvLyBDb25maXJtIHZhbHVlIGlzIGEgUG9zdGdyZXMgYXJyYXkgYnkgY2hlY2tpbmcgY3VybHkgYnJhY2tldHNcclxuICAgIGlmIChvcGVuQnJhY2UgPT09ICd7JyAmJiBjbG9zZUJyYWNlID09PSAnfScpIHtcclxuICAgICAgICBsZXQgYXJyO1xyXG4gICAgICAgIGNvbnN0IHZhbFRyaW0gPSB2YWx1ZS5zbGljZSgxLCBsYXN0SWR4KTtcclxuICAgICAgICAvLyBUT0RPOiBmaW5kIGEgYmV0dGVyIHNvbHV0aW9uIHRvIHNlcGFyYXRlIFBvc3RncmVzIGFycmF5IGRhdGFcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhcnIgPSBKU09OLnBhcnNlKCdbJyArIHZhbFRyaW0gKyAnXScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoXykge1xyXG4gICAgICAgICAgICAvLyBXQVJOSU5HOiBzcGxpdHRpbmcgb24gY29tbWEgZG9lcyBub3QgY292ZXIgYWxsIGVkZ2UgY2FzZXNcclxuICAgICAgICAgICAgYXJyID0gdmFsVHJpbSA/IHZhbFRyaW0uc3BsaXQoJywnKSA6IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXJyLm1hcCgodmFsKSA9PiAoMCwgZXhwb3J0cy5jb252ZXJ0Q2VsbCkodHlwZSwgdmFsKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn07XHJcbmV4cG9ydHMudG9BcnJheSA9IHRvQXJyYXk7XHJcbi8qKlxyXG4gKiBGaXhlcyB0aW1lc3RhbXAgdG8gYmUgSVNPLTg2MDEuIFN3YXBzIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBkYXRlIGFuZCB0aW1lIGZvciBhICdUJ1xyXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1cGFiYXNlL3N1cGFiYXNlL2lzc3Vlcy8xOFxyXG4gKlxyXG4gKiBAZXhhbXBsZSB0b1RpbWVzdGFtcFN0cmluZygnMjAxOS0wOS0xMCAwMDowMDowMCcpXHJcbiAqIC8vPT4gJzIwMTktMDktMTBUMDA6MDA6MDAnXHJcbiAqL1xyXG5jb25zdCB0b1RpbWVzdGFtcFN0cmluZyA9ICh2YWx1ZSkgPT4ge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgnICcsICdUJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn07XHJcbmV4cG9ydHMudG9UaW1lc3RhbXBTdHJpbmcgPSB0b1RpbWVzdGFtcFN0cmluZztcclxuY29uc3QgaHR0cEVuZHBvaW50VVJMID0gKHNvY2tldFVybCkgPT4ge1xyXG4gICAgbGV0IHVybCA9IHNvY2tldFVybDtcclxuICAgIHVybCA9IHVybC5yZXBsYWNlKC9ed3MvaSwgJ2h0dHAnKTtcclxuICAgIHVybCA9IHVybC5yZXBsYWNlKC8oXFwvc29ja2V0XFwvd2Vic29ja2V0fFxcL3NvY2tldHxcXC93ZWJzb2NrZXQpXFwvPyQvaSwgJycpO1xyXG4gICAgcmV0dXJuIHVybC5yZXBsYWNlKC9cXC8rJC8sICcnKTtcclxufTtcclxuZXhwb3J0cy5odHRwRW5kcG9pbnRVUkwgPSBodHRwRW5kcG9pbnRVUkw7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYW5zZm9ybWVycy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/transformers.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/version.js":
/*!*********************************************************************!*\
!*** ./node_modules/@supabase/realtime-js/dist/main/lib/version.js ***!
\*********************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.version = void 0;\r\nexports.version = '2.11.15';\r\n//# sourceMappingURL=version.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbWFpbi9saWIvdmVyc2lvbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxlQUFlO0FBQ2YsZUFBZTtBQUNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9yZWFsdGltZS1qcy9kaXN0L21haW4vbGliL3ZlcnNpb24uanM/ODQ2NyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLnZlcnNpb24gPSB2b2lkIDA7XHJcbmV4cG9ydHMudmVyc2lvbiA9ICcyLjExLjE1JztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/realtime-js/dist/main/lib/version.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/storage-js/dist/main/StorageClient.js":
/*!**********************************************************************!*\
!*** ./node_modules/@supabase/storage-js/dist/main/StorageClient.js ***!
\**********************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.StorageClient = void 0;\r\nconst StorageFileApi_1 = __importDefault(__webpack_require__(/*! ./packages/StorageFileApi */ \"(ssr)/./node_modules/@supabase/storage-js/dist/main/packages/StorageFileApi.js\"));\r\nconst StorageBucketApi_1 = __importDefault(__webpack_require__(/*! ./packages/StorageBucketApi */ \"(ssr)/./node_modules/@supabase/storage-js/dist/main/packages/StorageBucketApi.js\"));\r\nclass StorageClient extends StorageBucketApi_1.default {\r\n constructor(url, headers = {}, fetch) {\r\n super(url, headers, fetch);\r\n }\r\n /**\r\n * Perform file operation in a bucket.\r\n *\r\n * @param id The bucket id to operate on.\r\n */\r\n from(id) {\r\n return new StorageFileApi_1.default(this.url, this.headers, id, this.fetch);\r\n }\r\n}\r\nexports.StorageClient = StorageClient;\r\n//# sourceMappingURL=StorageClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tYWluL1N0b3JhZ2VDbGllbnQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLDZDQUE2QztBQUM3QztBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxxQkFBcUI7QUFDckIseUNBQXlDLG1CQUFPLENBQUMsaUhBQTJCO0FBQzVFLDJDQUEyQyxtQkFBTyxDQUFDLHFIQUE2QjtBQUNoRjtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9zdG9yYWdlLWpzL2Rpc3QvbWFpbi9TdG9yYWdlQ2xpZW50LmpzP2I4YTYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5TdG9yYWdlQ2xpZW50ID0gdm9pZCAwO1xyXG5jb25zdCBTdG9yYWdlRmlsZUFwaV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3BhY2thZ2VzL1N0b3JhZ2VGaWxlQXBpXCIpKTtcclxuY29uc3QgU3RvcmFnZUJ1Y2tldEFwaV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3BhY2thZ2VzL1N0b3JhZ2VCdWNrZXRBcGlcIikpO1xyXG5jbGFzcyBTdG9yYWdlQ2xpZW50IGV4dGVuZHMgU3RvcmFnZUJ1Y2tldEFwaV8xLmRlZmF1bHQge1xyXG4gICAgY29uc3RydWN0b3IodXJsLCBoZWFkZXJzID0ge30sIGZldGNoKSB7XHJcbiAgICAgICAgc3VwZXIodXJsLCBoZWFkZXJzLCBmZXRjaCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm0gZmlsZSBvcGVyYXRpb24gaW4gYSBidWNrZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGlkIFRoZSBidWNrZXQgaWQgdG8gb3BlcmF0ZSBvbi5cclxuICAgICAqL1xyXG4gICAgZnJvbShpZCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgU3RvcmFnZUZpbGVBcGlfMS5kZWZhdWx0KHRoaXMudXJsLCB0aGlzLmhlYWRlcnMsIGlkLCB0aGlzLmZldGNoKTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLlN0b3JhZ2VDbGllbnQgPSBTdG9yYWdlQ2xpZW50O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdG9yYWdlQ2xpZW50LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/storage-js/dist/main/StorageClient.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/storage-js/dist/main/index.js":
/*!**************************************************************!*\
!*** ./node_modules/@supabase/storage-js/dist/main/index.js ***!
\**************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.StorageClient = void 0;\r\nvar StorageClient_1 = __webpack_require__(/*! ./StorageClient */ \"(ssr)/./node_modules/@supabase/storage-js/dist/main/StorageClient.js\");\r\nObject.defineProperty(exports, \"StorageClient\", ({ enumerable: true, get: function () { return StorageClient_1.StorageClient; } }));\r\n__exportStar(__webpack_require__(/*! ./lib/types */ \"(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/types.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./lib/errors */ \"(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/errors.js\"), exports);\r\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tYWluL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9DQUFvQztBQUNuRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHFCQUFxQjtBQUNyQixzQkFBc0IsbUJBQU8sQ0FBQyw2RkFBaUI7QUFDL0MsaURBQWdELEVBQUUscUNBQXFDLHlDQUF5QyxFQUFDO0FBQ2pJLGFBQWEsbUJBQU8sQ0FBQyxxRkFBYTtBQUNsQyxhQUFhLG1CQUFPLENBQUMsdUZBQWM7QUFDbkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tYWluL2luZGV4LmpzPzEzM2UiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pKTtcclxudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5TdG9yYWdlQ2xpZW50ID0gdm9pZCAwO1xyXG52YXIgU3RvcmFnZUNsaWVudF8xID0gcmVxdWlyZShcIi4vU3RvcmFnZUNsaWVudFwiKTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3RvcmFnZUNsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU3RvcmFnZUNsaWVudF8xLlN0b3JhZ2VDbGllbnQ7IH0gfSk7XHJcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9saWIvdHlwZXNcIiksIGV4cG9ydHMpO1xyXG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbGliL2Vycm9yc1wiKSwgZXhwb3J0cyk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/storage-js/dist/main/index.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/constants.js":
/*!**********************************************************************!*\
!*** ./node_modules/@supabase/storage-js/dist/main/lib/constants.js ***!
\**********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.DEFAULT_HEADERS = void 0;\r\nconst version_1 = __webpack_require__(/*! ./version */ \"(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/version.js\");\r\nexports.DEFAULT_HEADERS = { 'X-Client-Info': `storage-js/${version_1.version}` };\r\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tYWluL2xpYi9jb25zdGFudHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsdUJBQXVCO0FBQ3ZCLGtCQUFrQixtQkFBTyxDQUFDLHFGQUFXO0FBQ3JDLHVCQUF1QixLQUFLLCtCQUErQixrQkFBa0I7QUFDN0UiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tYWluL2xpYi9jb25zdGFudHMuanM/NzQwNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLkRFRkFVTFRfSEVBREVSUyA9IHZvaWQgMDtcclxuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcclxuZXhwb3J0cy5ERUZBVUxUX0hFQURFUlMgPSB7ICdYLUNsaWVudC1JbmZvJzogYHN0b3JhZ2UtanMvJHt2ZXJzaW9uXzEudmVyc2lvbn1gIH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/constants.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/errors.js":
/*!*******************************************************************!*\
!*** ./node_modules/@supabase/storage-js/dist/main/lib/errors.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.StorageUnknownError = exports.StorageApiError = exports.isStorageError = exports.StorageError = void 0;\r\nclass StorageError extends Error {\r\n constructor(message) {\r\n super(message);\r\n this.__isStorageError = true;\r\n this.name = 'StorageError';\r\n }\r\n}\r\nexports.StorageError = StorageError;\r\nfunction isStorageError(error) {\r\n return typeof error === 'object' && error !== null && '__isStorageError' in error;\r\n}\r\nexports.isStorageError = isStorageError;\r\nclass StorageApiError extends StorageError {\r\n constructor(message, status) {\r\n super(message);\r\n this.name = 'StorageApiError';\r\n this.status = status;\r\n }\r\n toJSON() {\r\n return {\r\n name: this.name,\r\n message: this.message,\r\n status: this.status,\r\n };\r\n }\r\n}\r\nexports.StorageApiError = StorageApiError;\r\nclass StorageUnknownError extends StorageError {\r\n constructor(message, originalError) {\r\n super(message);\r\n this.name = 'StorageUnknownError';\r\n this.originalError = originalError;\r\n }\r\n}\r\nexports.StorageUnknownError = StorageUnknownError;\r\n//# sourceMappingURL=errors.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tYWluL2xpYi9lcnJvcnMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsMkJBQTJCLEdBQUcsdUJBQXVCLEdBQUcsc0JBQXNCLEdBQUcsb0JBQW9CO0FBQ3JHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9zdG9yYWdlLWpzL2Rpc3QvbWFpbi9saWIvZXJyb3JzLmpzPzE3MzUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5TdG9yYWdlVW5rbm93bkVycm9yID0gZXhwb3J0cy5TdG9yYWdlQXBpRXJyb3IgPSBleHBvcnRzLmlzU3RvcmFnZUVycm9yID0gZXhwb3J0cy5TdG9yYWdlRXJyb3IgPSB2b2lkIDA7XHJcbmNsYXNzIFN0b3JhZ2VFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9faXNTdG9yYWdlRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICdTdG9yYWdlRXJyb3InO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuU3RvcmFnZUVycm9yID0gU3RvcmFnZUVycm9yO1xyXG5mdW5jdGlvbiBpc1N0b3JhZ2VFcnJvcihlcnJvcikge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3IgIT09IG51bGwgJiYgJ19faXNTdG9yYWdlRXJyb3InIGluIGVycm9yO1xyXG59XHJcbmV4cG9ydHMuaXNTdG9yYWdlRXJyb3IgPSBpc1N0b3JhZ2VFcnJvcjtcclxuY2xhc3MgU3RvcmFnZUFwaUVycm9yIGV4dGVuZHMgU3RvcmFnZUVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHN0YXR1cykge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICdTdG9yYWdlQXBpRXJyb3InO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxyXG4gICAgICAgICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5TdG9yYWdlQXBpRXJyb3IgPSBTdG9yYWdlQXBpRXJyb3I7XHJcbmNsYXNzIFN0b3JhZ2VVbmtub3duRXJyb3IgZXh0ZW5kcyBTdG9yYWdlRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgb3JpZ2luYWxFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICdTdG9yYWdlVW5rbm93bkVycm9yJztcclxuICAgICAgICB0aGlzLm9yaWdpbmFsRXJyb3IgPSBvcmlnaW5hbEVycm9yO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuU3RvcmFnZVVua25vd25FcnJvciA9IFN0b3JhZ2VVbmtub3duRXJyb3I7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/errors.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/fetch.js":
/*!******************************************************************!*\
!*** ./node_modules/@supabase/storage-js/dist/main/lib/fetch.js ***!
\******************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.remove = exports.head = exports.put = exports.post = exports.get = void 0;\r\nconst errors_1 = __webpack_require__(/*! ./errors */ \"(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/errors.js\");\r\nconst helpers_1 = __webpack_require__(/*! ./helpers */ \"(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/helpers.js\");\r\nconst _getErrorMessage = (err) => err.msg || err.message || err.error_description || err.error || JSON.stringify(err);\r\nconst handleError = (error, reject, options) => __awaiter(void 0, void 0, void 0, function* () {\r\n const Res = yield (0, helpers_1.resolveResponse)();\r\n if (error instanceof Res && !(options === null || options === void 0 ? void 0 : options.noResolveJson)) {\r\n error\r\n .json()\r\n .then((err) => {\r\n reject(new errors_1.StorageApiError(_getErrorMessage(err), error.status || 500));\r\n })\r\n .catch((err) => {\r\n reject(new errors_1.StorageUnknownError(_getErrorMessage(err), err));\r\n });\r\n }\r\n else {\r\n reject(new errors_1.StorageUnknownError(_getErrorMessage(error), error));\r\n }\r\n});\r\nconst _getRequestParams = (method, options, parameters, body) => {\r\n const params = { method, headers: (options === null || options === void 0 ? void 0 : options.headers) || {} };\r\n if (method === 'GET') {\r\n return params;\r\n }\r\n params.headers = Object.assign({ 'Content-Type': 'application/json' }, options === null || options === void 0 ? void 0 : options.headers);\r\n if (body) {\r\n params.body = JSON.stringify(body);\r\n }\r\n return Object.assign(Object.assign({}, params), parameters);\r\n};\r\nfunction _handleRequest(fetcher, method, url, options, parameters, body) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return new Promise((resolve, reject) => {\r\n fetcher(url, _getRequestParams(method, options, parameters, body))\r\n .then((result) => {\r\n if (!result.ok)\r\n throw result;\r\n if (options === null || options === void 0 ? void 0 : options.noResolveJson)\r\n return result;\r\n return result.json();\r\n })\r\n .then((data) => resolve(data))\r\n .catch((error) => handleError(error, reject, options));\r\n });\r\n });\r\n}\r\nfunction get(fetcher, url, options, parameters) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return _handleRequest(fetcher, 'GET', url, options, parameters);\r\n });\r\n}\r\nexports.get = get;\r\nfunction post(fetcher, url, body, options, parameters) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return _handleRequest(fetcher, 'POST', url, options, parameters, body);\r\n });\r\n}\r\nexports.post = post;\r\nfunction put(fetcher, url, body, options, parameters) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return _handleRequest(fetcher, 'PUT', url, options, parameters, body);\r\n });\r\n}\r\nexports.put = put;\r\nfunction head(fetcher, url, options, parameters) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return _handleRequest(fetcher, 'HEAD', url, Object.assign(Object.assign({}, options), { noResolveJson: true }), parameters);\r\n });\r\n}\r\nexports.head = head;\r\nfunction remove(fetcher, url, body, options, parameters) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return _handleRequest(fetcher, 'DELETE', url, options, parameters, body);\r\n });\r\n}\r\nexports.remove = remove;\r\n//# sourceMappingURL=fetch.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tYWluL2xpYi9mZXRjaC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsNEJBQTRCLCtEQUErRCxpQkFBaUI7QUFDNUc7QUFDQSxvQ0FBb0MsTUFBTSwrQkFBK0IsWUFBWTtBQUNyRixtQ0FBbUMsTUFBTSxtQ0FBbUMsWUFBWTtBQUN4RixnQ0FBZ0M7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsY0FBYyxHQUFHLFlBQVksR0FBRyxXQUFXLEdBQUcsWUFBWSxHQUFHLFdBQVc7QUFDeEUsaUJBQWlCLG1CQUFPLENBQUMsbUZBQVU7QUFDbkMsa0JBQWtCLG1CQUFPLENBQUMscUZBQVc7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxvQ0FBb0M7QUFDekU7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0Esa0ZBQWtGLGNBQWMscUJBQXFCO0FBQ3JILEtBQUs7QUFDTDtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxjQUFjO0FBQ2QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tYWluL2xpYi9mZXRjaC5qcz9iMGE4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5yZW1vdmUgPSBleHBvcnRzLmhlYWQgPSBleHBvcnRzLnB1dCA9IGV4cG9ydHMucG9zdCA9IGV4cG9ydHMuZ2V0ID0gdm9pZCAwO1xyXG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcclxuY29uc3QgaGVscGVyc18xID0gcmVxdWlyZShcIi4vaGVscGVyc1wiKTtcclxuY29uc3QgX2dldEVycm9yTWVzc2FnZSA9IChlcnIpID0+IGVyci5tc2cgfHwgZXJyLm1lc3NhZ2UgfHwgZXJyLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGVyci5lcnJvciB8fCBKU09OLnN0cmluZ2lmeShlcnIpO1xyXG5jb25zdCBoYW5kbGVFcnJvciA9IChlcnJvciwgcmVqZWN0LCBvcHRpb25zKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgIGNvbnN0IFJlcyA9IHlpZWxkICgwLCBoZWxwZXJzXzEucmVzb2x2ZVJlc3BvbnNlKSgpO1xyXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUmVzICYmICEob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm5vUmVzb2x2ZUpzb24pKSB7XHJcbiAgICAgICAgZXJyb3JcclxuICAgICAgICAgICAgLmpzb24oKVxyXG4gICAgICAgICAgICAudGhlbigoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgZXJyb3JzXzEuU3RvcmFnZUFwaUVycm9yKF9nZXRFcnJvck1lc3NhZ2UoZXJyKSwgZXJyb3Iuc3RhdHVzIHx8IDUwMCkpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgZXJyb3JzXzEuU3RvcmFnZVVua25vd25FcnJvcihfZ2V0RXJyb3JNZXNzYWdlKGVyciksIGVycikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmVqZWN0KG5ldyBlcnJvcnNfMS5TdG9yYWdlVW5rbm93bkVycm9yKF9nZXRFcnJvck1lc3NhZ2UoZXJyb3IpLCBlcnJvcikpO1xyXG4gICAgfVxyXG59KTtcclxuY29uc3QgX2dldFJlcXVlc3RQYXJhbXMgPSAobWV0aG9kLCBvcHRpb25zLCBwYXJhbWV0ZXJzLCBib2R5KSA9PiB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSB7IG1ldGhvZCwgaGVhZGVyczogKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5oZWFkZXJzKSB8fCB7fSB9O1xyXG4gICAgaWYgKG1ldGhvZCA9PT0gJ0dFVCcpIHtcclxuICAgICAgICByZXR1cm4gcGFyYW1zO1xyXG4gICAgfVxyXG4gICAgcGFyYW1zLmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuaGVhZGVycyk7XHJcbiAgICBpZiAoYm9keSkge1xyXG4gICAgICAgIHBhcmFtcy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpLCBwYXJhbWV0ZXJzKTtcclxufTtcclxuZnVuY3Rpb24gX2hhbmRsZVJlcXVlc3QoZmV0Y2hlciwgbWV0aG9kLCB1cmwsIG9wdGlvbnMsIHBhcmFtZXRlcnMsIGJvZHkpIHtcclxuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgZmV0Y2hlcih1cmwsIF9nZXRSZXF1ZXN0UGFyYW1zKG1ldGhvZCwgb3B0aW9ucywgcGFyYW1ldGVycywgYm9keSkpXHJcbiAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5vaylcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm5vUmVzb2x2ZUpzb24pXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuanNvbigpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHJlc29sdmUoZGF0YSkpXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiBoYW5kbGVFcnJvcihlcnJvciwgcmVqZWN0LCBvcHRpb25zKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBnZXQoZmV0Y2hlciwgdXJsLCBvcHRpb25zLCBwYXJhbWV0ZXJzKSB7XHJcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgIHJldHVybiBfaGFuZGxlUmVxdWVzdChmZXRjaGVyLCAnR0VUJywgdXJsLCBvcHRpb25zLCBwYXJhbWV0ZXJzKTtcclxuICAgIH0pO1xyXG59XHJcbmV4cG9ydHMuZ2V0ID0gZ2V0O1xyXG5mdW5jdGlvbiBwb3N0KGZldGNoZXIsIHVybCwgYm9keSwgb3B0aW9ucywgcGFyYW1ldGVycykge1xyXG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICByZXR1cm4gX2hhbmRsZVJlcXVlc3QoZmV0Y2hlciwgJ1BPU1QnLCB1cmwsIG9wdGlvbnMsIHBhcmFtZXRlcnMsIGJvZHkpO1xyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0cy5wb3N0ID0gcG9zdDtcclxuZnVuY3Rpb24gcHV0KGZldGNoZXIsIHVybCwgYm9keSwgb3B0aW9ucywgcGFyYW1ldGVycykge1xyXG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICByZXR1cm4gX2hhbmRsZVJlcXVlc3QoZmV0Y2hlciwgJ1BVVCcsIHVybCwgb3B0aW9ucywgcGFyYW1ldGVycywgYm9keSk7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLnB1dCA9IHB1dDtcclxuZnVuY3Rpb24gaGVhZChmZXRjaGVyLCB1cmwsIG9wdGlvbnMsIHBhcmFtZXRlcnMpIHtcclxuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9oYW5kbGVSZXF1ZXN0KGZldGNoZXIsICdIRUFEJywgdXJsLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IG5vUmVzb2x2ZUpzb246IHRydWUgfSksIHBhcmFtZXRlcnMpO1xyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0cy5oZWFkID0gaGVhZDtcclxuZnVuY3Rpb24gcmVtb3ZlKGZldGNoZXIsIHVybCwgYm9keSwgb3B0aW9ucywgcGFyYW1ldGVycykge1xyXG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICByZXR1cm4gX2hhbmRsZVJlcXVlc3QoZmV0Y2hlciwgJ0RFTEVURScsIHVybCwgb3B0aW9ucywgcGFyYW1ldGVycywgYm9keSk7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLnJlbW92ZSA9IHJlbW92ZTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmV0Y2guanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/fetch.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/helpers.js":
/*!********************************************************************!*\
!*** ./node_modules/@supabase/storage-js/dist/main/lib/helpers.js ***!
\********************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.recursiveToCamel = exports.resolveResponse = exports.resolveFetch = void 0;\r\nconst resolveFetch = (customFetch) => {\r\n let _fetch;\r\n if (customFetch) {\r\n _fetch = customFetch;\r\n }\r\n else if (typeof fetch === 'undefined') {\r\n _fetch = (...args) => Promise.resolve().then(() => __importStar(__webpack_require__(/*! @supabase/node-fetch */ \"(ssr)/./node_modules/@supabase/node-fetch/lib/index.js\"))).then(({ default: fetch }) => fetch(...args));\r\n }\r\n else {\r\n _fetch = fetch;\r\n }\r\n return (...args) => _fetch(...args);\r\n};\r\nexports.resolveFetch = resolveFetch;\r\nconst resolveResponse = () => __awaiter(void 0, void 0, void 0, function* () {\r\n if (typeof Response === 'undefined') {\r\n // @ts-ignore\r\n return (yield Promise.resolve().then(() => __importStar(__webpack_require__(/*! @supabase/node-fetch */ \"(ssr)/./node_modules/@supabase/node-fetch/lib/index.js\")))).Response;\r\n }\r\n return Response;\r\n});\r\nexports.resolveResponse = resolveResponse;\r\nconst recursiveToCamel = (item) => {\r\n if (Array.isArray(item)) {\r\n return item.map((el) => (0, exports.recursiveToCamel)(el));\r\n }\r\n else if (typeof item === 'function' || item !== Object(item)) {\r\n return item;\r\n }\r\n const result = {};\r\n Object.entries(item).forEach(([key, value]) => {\r\n const newKey = key.replace(/([-_][a-z])/gi, (c) => c.toUpperCase().replace(/[-_]/g, ''));\r\n result[newKey] = (0, exports.recursiveToCamel)(value);\r\n });\r\n return result;\r\n};\r\nexports.recursiveToCamel = recursiveToCamel;\r\n//# sourceMappingURL=helpers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tYWluL2xpYi9oZWxwZXJzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9DQUFvQztBQUNuRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSwwQ0FBMEMsNEJBQTRCO0FBQ3RFLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLCtEQUErRCxpQkFBaUI7QUFDNUc7QUFDQSxvQ0FBb0MsTUFBTSwrQkFBK0IsWUFBWTtBQUNyRixtQ0FBbUMsTUFBTSxtQ0FBbUMsWUFBWTtBQUN4RixnQ0FBZ0M7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsd0JBQXdCLEdBQUcsdUJBQXVCLEdBQUcsb0JBQW9CO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdFQUF3RSxtQkFBTyxDQUFDLG9GQUFzQixZQUFZLGdCQUFnQjtBQUNsSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFLG1CQUFPLENBQUMsb0ZBQXNCO0FBQzlGO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QiIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRqcy8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3RvcmFnZS1qcy9kaXN0L21haW4vbGliL2hlbHBlcnMuanM/MGM0NyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSkpO1xyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn0pO1xyXG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufTtcclxudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMucmVjdXJzaXZlVG9DYW1lbCA9IGV4cG9ydHMucmVzb2x2ZVJlc3BvbnNlID0gZXhwb3J0cy5yZXNvbHZlRmV0Y2ggPSB2b2lkIDA7XHJcbmNvbnN0IHJlc29sdmVGZXRjaCA9IChjdXN0b21GZXRjaCkgPT4ge1xyXG4gICAgbGV0IF9mZXRjaDtcclxuICAgIGlmIChjdXN0b21GZXRjaCkge1xyXG4gICAgICAgIF9mZXRjaCA9IGN1c3RvbUZldGNoO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGZldGNoID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIF9mZXRjaCA9ICguLi5hcmdzKSA9PiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IF9faW1wb3J0U3RhcihyZXF1aXJlKCdAc3VwYWJhc2Uvbm9kZS1mZXRjaCcpKSkudGhlbigoeyBkZWZhdWx0OiBmZXRjaCB9KSA9PiBmZXRjaCguLi5hcmdzKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBfZmV0Y2ggPSBmZXRjaDtcclxuICAgIH1cclxuICAgIHJldHVybiAoLi4uYXJncykgPT4gX2ZldGNoKC4uLmFyZ3MpO1xyXG59O1xyXG5leHBvcnRzLnJlc29sdmVGZXRjaCA9IHJlc29sdmVGZXRjaDtcclxuY29uc3QgcmVzb2x2ZVJlc3BvbnNlID0gKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlc3BvbnNlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICByZXR1cm4gKHlpZWxkIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gX19pbXBvcnRTdGFyKHJlcXVpcmUoJ0BzdXBhYmFzZS9ub2RlLWZldGNoJykpKSkuUmVzcG9uc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVzcG9uc2U7XHJcbn0pO1xyXG5leHBvcnRzLnJlc29sdmVSZXNwb25zZSA9IHJlc29sdmVSZXNwb25zZTtcclxuY29uc3QgcmVjdXJzaXZlVG9DYW1lbCA9IChpdGVtKSA9PiB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLm1hcCgoZWwpID0+ICgwLCBleHBvcnRzLnJlY3Vyc2l2ZVRvQ2FtZWwpKGVsKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gJ2Z1bmN0aW9uJyB8fCBpdGVtICE9PSBPYmplY3QoaXRlbSkpIHtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG4gICAgT2JqZWN0LmVudHJpZXMoaXRlbSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbmV3S2V5ID0ga2V5LnJlcGxhY2UoLyhbLV9dW2Etel0pL2dpLCAoYykgPT4gYy50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoL1stX10vZywgJycpKTtcclxuICAgICAgICByZXN1bHRbbmV3S2V5XSA9ICgwLCBleHBvcnRzLnJlY3Vyc2l2ZVRvQ2FtZWwpKHZhbHVlKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufTtcclxuZXhwb3J0cy5yZWN1cnNpdmVUb0NhbWVsID0gcmVjdXJzaXZlVG9DYW1lbDtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGVscGVycy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/helpers.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/types.js":
/*!******************************************************************!*\
!*** ./node_modules/@supabase/storage-js/dist/main/lib/types.js ***!
\******************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n//# sourceMappingURL=types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tYWluL2xpYi90eXBlcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRqcy8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3RvcmFnZS1qcy9kaXN0L21haW4vbGliL3R5cGVzLmpzP2FjNGIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/types.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/version.js":
/*!********************************************************************!*\
!*** ./node_modules/@supabase/storage-js/dist/main/lib/version.js ***!
\********************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.version = void 0;\r\n// generated by genversion\r\nexports.version = '2.7.1';\r\n//# sourceMappingURL=version.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tYWluL2xpYi92ZXJzaW9uLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGVBQWU7QUFDZjtBQUNBLGVBQWU7QUFDZiIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRqcy8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3RvcmFnZS1qcy9kaXN0L21haW4vbGliL3ZlcnNpb24uanM/NWI2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLnZlcnNpb24gPSB2b2lkIDA7XHJcbi8vIGdlbmVyYXRlZCBieSBnZW52ZXJzaW9uXHJcbmV4cG9ydHMudmVyc2lvbiA9ICcyLjcuMSc7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/version.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/storage-js/dist/main/packages/StorageBucketApi.js":
/*!**********************************************************************************!*\
!*** ./node_modules/@supabase/storage-js/dist/main/packages/StorageBucketApi.js ***!
\**********************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst constants_1 = __webpack_require__(/*! ../lib/constants */ \"(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/constants.js\");\r\nconst errors_1 = __webpack_require__(/*! ../lib/errors */ \"(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/errors.js\");\r\nconst fetch_1 = __webpack_require__(/*! ../lib/fetch */ \"(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/fetch.js\");\r\nconst helpers_1 = __webpack_require__(/*! ../lib/helpers */ \"(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/helpers.js\");\r\nclass StorageBucketApi {\r\n constructor(url, headers = {}, fetch) {\r\n this.url = url;\r\n this.headers = Object.assign(Object.assign({}, constants_1.DEFAULT_HEADERS), headers);\r\n this.fetch = (0, helpers_1.resolveFetch)(fetch);\r\n }\r\n /**\r\n * Retrieves the details of all Storage buckets within an existing project.\r\n */\r\n listBuckets() {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0, fetch_1.get)(this.fetch, `${this.url}/bucket`, { headers: this.headers });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Retrieves the details of an existing Storage bucket.\r\n *\r\n * @param id The unique identifier of the bucket you would like to retrieve.\r\n */\r\n getBucket(id) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0, fetch_1.get)(this.fetch, `${this.url}/bucket/${id}`, { headers: this.headers });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Creates a new Storage bucket\r\n *\r\n * @param id A unique identifier for the bucket you are creating.\r\n * @param options.public The visibility of the bucket. Public buckets don't require an authorization token to download objects, but still require a valid token for all other operations. By default, buckets are private.\r\n * @param options.fileSizeLimit specifies the max file size in bytes that can be uploaded to this bucket.\r\n * The global file size limit takes precedence over this value.\r\n * The default value is null, which doesn't set a per bucket file size limit.\r\n * @param options.allowedMimeTypes specifies the allowed mime types that this bucket can accept during upload.\r\n * The default value is null, which allows files with all mime types to be uploaded.\r\n * Each mime type specified can be a wildcard, e.g. image/*, or a specific mime type, e.g. image/png.\r\n * @returns newly created bucket id\r\n */\r\n createBucket(id, options = {\r\n public: false,\r\n }) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0, fetch_1.post)(this.fetch, `${this.url}/bucket`, {\r\n id,\r\n name: id,\r\n public: options.public,\r\n file_size_limit: options.fileSizeLimit,\r\n allowed_mime_types: options.allowedMimeTypes,\r\n }, { headers: this.headers });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Updates a Storage bucket\r\n *\r\n * @param id A unique identifier for the bucket you are updating.\r\n * @param options.public The visibility of the bucket. Public buckets don't require an authorization token to download objects, but still require a valid token for all other operations.\r\n * @param options.fileSizeLimit specifies the max file size in bytes that can be uploaded to this bucket.\r\n * The global file size limit takes precedence over this value.\r\n * The default value is null, which doesn't set a per bucket file size limit.\r\n * @param options.allowedMimeTypes specifies the allowed mime types that this bucket can accept during upload.\r\n * The default value is null, which allows files with all mime types to be uploaded.\r\n * Each mime type specified can be a wildcard, e.g. image/*, or a specific mime type, e.g. image/png.\r\n */\r\n updateBucket(id, options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0, fetch_1.put)(this.fetch, `${this.url}/bucket/${id}`, {\r\n id,\r\n name: id,\r\n public: options.public,\r\n file_size_limit: options.fileSizeLimit,\r\n allowed_mime_types: options.allowedMimeTypes,\r\n }, { headers: this.headers });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Removes all objects inside a single bucket.\r\n *\r\n * @param id The unique identifier of the bucket you would like to empty.\r\n */\r\n emptyBucket(id) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0, fetch_1.post)(this.fetch, `${this.url}/bucket/${id}/empty`, {}, { headers: this.headers });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Deletes an existing bucket. A bucket can't be deleted with existing objects inside it.\r\n * You must first `empty()` the bucket.\r\n *\r\n * @param id The unique identifier of the bucket you would like to delete.\r\n */\r\n deleteBucket(id) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0, fetch_1.remove)(this.fetch, `${this.url}/bucket/${id}`, {}, { headers: this.headers });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n}\r\nexports[\"default\"] = StorageBucketApi;\r\n//# sourceMappingURL=StorageBucketApi.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tYWluL3BhY2thZ2VzL1N0b3JhZ2VCdWNrZXRBcGkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLDRCQUE0QiwrREFBK0QsaUJBQWlCO0FBQzVHO0FBQ0Esb0NBQW9DLE1BQU0sK0JBQStCLFlBQVk7QUFDckYsbUNBQW1DLE1BQU0sbUNBQW1DLFlBQVk7QUFDeEYsZ0NBQWdDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELG9CQUFvQixtQkFBTyxDQUFDLDhGQUFrQjtBQUM5QyxpQkFBaUIsbUJBQU8sQ0FBQyx3RkFBZTtBQUN4QyxnQkFBZ0IsbUJBQU8sQ0FBQyxzRkFBYztBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQywwRkFBZ0I7QUFDMUM7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRSxTQUFTLFlBQVksdUJBQXVCO0FBQy9HLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRSxTQUFTLFVBQVUsR0FBRyxLQUFLLHVCQUF1QjtBQUNySCx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0Esb0VBQW9FLFNBQVM7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixJQUFJLHVCQUF1QjtBQUM1Qyx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRSxTQUFTLFVBQVUsR0FBRztBQUN6RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLElBQUksdUJBQXVCO0FBQzVDLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRSxTQUFTLFVBQVUsR0FBRyxXQUFXLElBQUksdUJBQXVCO0FBQ2hJLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFLFNBQVMsVUFBVSxHQUFHLEtBQUssSUFBSSx1QkFBdUI7QUFDNUgseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tYWluL3BhY2thZ2VzL1N0b3JhZ2VCdWNrZXRBcGkuanM/ZjQ1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4uL2xpYi9jb25zdGFudHNcIik7XHJcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2xpYi9lcnJvcnNcIik7XHJcbmNvbnN0IGZldGNoXzEgPSByZXF1aXJlKFwiLi4vbGliL2ZldGNoXCIpO1xyXG5jb25zdCBoZWxwZXJzXzEgPSByZXF1aXJlKFwiLi4vbGliL2hlbHBlcnNcIik7XHJcbmNsYXNzIFN0b3JhZ2VCdWNrZXRBcGkge1xyXG4gICAgY29uc3RydWN0b3IodXJsLCBoZWFkZXJzID0ge30sIGZldGNoKSB7XHJcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb25zdGFudHNfMS5ERUZBVUxUX0hFQURFUlMpLCBoZWFkZXJzKTtcclxuICAgICAgICB0aGlzLmZldGNoID0gKDAsIGhlbHBlcnNfMS5yZXNvbHZlRmV0Y2gpKGZldGNoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSBkZXRhaWxzIG9mIGFsbCBTdG9yYWdlIGJ1Y2tldHMgd2l0aGluIGFuIGV4aXN0aW5nIHByb2plY3QuXHJcbiAgICAgKi9cclxuICAgIGxpc3RCdWNrZXRzKCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geWllbGQgKDAsIGZldGNoXzEuZ2V0KSh0aGlzLmZldGNoLCBgJHt0aGlzLnVybH0vYnVja2V0YCwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc1N0b3JhZ2VFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgZGV0YWlscyBvZiBhbiBleGlzdGluZyBTdG9yYWdlIGJ1Y2tldC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gaWQgVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBidWNrZXQgeW91IHdvdWxkIGxpa2UgdG8gcmV0cmlldmUuXHJcbiAgICAgKi9cclxuICAgIGdldEJ1Y2tldChpZCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geWllbGQgKDAsIGZldGNoXzEuZ2V0KSh0aGlzLmZldGNoLCBgJHt0aGlzLnVybH0vYnVja2V0LyR7aWR9YCwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc1N0b3JhZ2VFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgU3RvcmFnZSBidWNrZXRcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gaWQgQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGJ1Y2tldCB5b3UgYXJlIGNyZWF0aW5nLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMucHVibGljIFRoZSB2aXNpYmlsaXR5IG9mIHRoZSBidWNrZXQuIFB1YmxpYyBidWNrZXRzIGRvbid0IHJlcXVpcmUgYW4gYXV0aG9yaXphdGlvbiB0b2tlbiB0byBkb3dubG9hZCBvYmplY3RzLCBidXQgc3RpbGwgcmVxdWlyZSBhIHZhbGlkIHRva2VuIGZvciBhbGwgb3RoZXIgb3BlcmF0aW9ucy4gQnkgZGVmYXVsdCwgYnVja2V0cyBhcmUgcHJpdmF0ZS5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmZpbGVTaXplTGltaXQgc3BlY2lmaWVzIHRoZSBtYXggZmlsZSBzaXplIGluIGJ5dGVzIHRoYXQgY2FuIGJlIHVwbG9hZGVkIHRvIHRoaXMgYnVja2V0LlxyXG4gICAgICogVGhlIGdsb2JhbCBmaWxlIHNpemUgbGltaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoaXMgdmFsdWUuXHJcbiAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBudWxsLCB3aGljaCBkb2Vzbid0IHNldCBhIHBlciBidWNrZXQgZmlsZSBzaXplIGxpbWl0LlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuYWxsb3dlZE1pbWVUeXBlcyBzcGVjaWZpZXMgdGhlIGFsbG93ZWQgbWltZSB0eXBlcyB0aGF0IHRoaXMgYnVja2V0IGNhbiBhY2NlcHQgZHVyaW5nIHVwbG9hZC5cclxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG51bGwsIHdoaWNoIGFsbG93cyBmaWxlcyB3aXRoIGFsbCBtaW1lIHR5cGVzIHRvIGJlIHVwbG9hZGVkLlxyXG4gICAgICogRWFjaCBtaW1lIHR5cGUgc3BlY2lmaWVkIGNhbiBiZSBhIHdpbGRjYXJkLCBlLmcuIGltYWdlLyosIG9yIGEgc3BlY2lmaWMgbWltZSB0eXBlLCBlLmcuIGltYWdlL3BuZy5cclxuICAgICAqIEByZXR1cm5zIG5ld2x5IGNyZWF0ZWQgYnVja2V0IGlkXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUJ1Y2tldChpZCwgb3B0aW9ucyA9IHtcclxuICAgICAgICBwdWJsaWM6IGZhbHNlLFxyXG4gICAgfSkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geWllbGQgKDAsIGZldGNoXzEucG9zdCkodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L2J1Y2tldGAsIHtcclxuICAgICAgICAgICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpZCxcclxuICAgICAgICAgICAgICAgICAgICBwdWJsaWM6IG9wdGlvbnMucHVibGljLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVfc2l6ZV9saW1pdDogb3B0aW9ucy5maWxlU2l6ZUxpbWl0LFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRfbWltZV90eXBlczogb3B0aW9ucy5hbGxvd2VkTWltZVR5cGVzLFxyXG4gICAgICAgICAgICAgICAgfSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc1N0b3JhZ2VFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgYSBTdG9yYWdlIGJ1Y2tldFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpZCBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgYnVja2V0IHlvdSBhcmUgdXBkYXRpbmcuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5wdWJsaWMgVGhlIHZpc2liaWxpdHkgb2YgdGhlIGJ1Y2tldC4gUHVibGljIGJ1Y2tldHMgZG9uJ3QgcmVxdWlyZSBhbiBhdXRob3JpemF0aW9uIHRva2VuIHRvIGRvd25sb2FkIG9iamVjdHMsIGJ1dCBzdGlsbCByZXF1aXJlIGEgdmFsaWQgdG9rZW4gZm9yIGFsbCBvdGhlciBvcGVyYXRpb25zLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZmlsZVNpemVMaW1pdCBzcGVjaWZpZXMgdGhlIG1heCBmaWxlIHNpemUgaW4gYnl0ZXMgdGhhdCBjYW4gYmUgdXBsb2FkZWQgdG8gdGhpcyBidWNrZXQuXHJcbiAgICAgKiBUaGUgZ2xvYmFsIGZpbGUgc2l6ZSBsaW1pdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhpcyB2YWx1ZS5cclxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG51bGwsIHdoaWNoIGRvZXNuJ3Qgc2V0IGEgcGVyIGJ1Y2tldCBmaWxlIHNpemUgbGltaXQuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5hbGxvd2VkTWltZVR5cGVzIHNwZWNpZmllcyB0aGUgYWxsb3dlZCBtaW1lIHR5cGVzIHRoYXQgdGhpcyBidWNrZXQgY2FuIGFjY2VwdCBkdXJpbmcgdXBsb2FkLlxyXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgbnVsbCwgd2hpY2ggYWxsb3dzIGZpbGVzIHdpdGggYWxsIG1pbWUgdHlwZXMgdG8gYmUgdXBsb2FkZWQuXHJcbiAgICAgKiBFYWNoIG1pbWUgdHlwZSBzcGVjaWZpZWQgY2FuIGJlIGEgd2lsZGNhcmQsIGUuZy4gaW1hZ2UvKiwgb3IgYSBzcGVjaWZpYyBtaW1lIHR5cGUsIGUuZy4gaW1hZ2UvcG5nLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVCdWNrZXQoaWQsIG9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkICgwLCBmZXRjaF8xLnB1dCkodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L2J1Y2tldC8ke2lkfWAsIHtcclxuICAgICAgICAgICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpZCxcclxuICAgICAgICAgICAgICAgICAgICBwdWJsaWM6IG9wdGlvbnMucHVibGljLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVfc2l6ZV9saW1pdDogb3B0aW9ucy5maWxlU2l6ZUxpbWl0LFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRfbWltZV90eXBlczogb3B0aW9ucy5hbGxvd2VkTWltZVR5cGVzLFxyXG4gICAgICAgICAgICAgICAgfSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc1N0b3JhZ2VFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIG9iamVjdHMgaW5zaWRlIGEgc2luZ2xlIGJ1Y2tldC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gaWQgVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBidWNrZXQgeW91IHdvdWxkIGxpa2UgdG8gZW1wdHkuXHJcbiAgICAgKi9cclxuICAgIGVtcHR5QnVja2V0KGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCAoMCwgZmV0Y2hfMS5wb3N0KSh0aGlzLmZldGNoLCBgJHt0aGlzLnVybH0vYnVja2V0LyR7aWR9L2VtcHR5YCwge30sIHsgaGVhZGVyczogdGhpcy5oZWFkZXJzIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNTdG9yYWdlRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxldGVzIGFuIGV4aXN0aW5nIGJ1Y2tldC4gQSBidWNrZXQgY2FuJ3QgYmUgZGVsZXRlZCB3aXRoIGV4aXN0aW5nIG9iamVjdHMgaW5zaWRlIGl0LlxyXG4gICAgICogWW91IG11c3QgZmlyc3QgYGVtcHR5KClgIHRoZSBidWNrZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgYnVja2V0IHlvdSB3b3VsZCBsaWtlIHRvIGRlbGV0ZS5cclxuICAgICAqL1xyXG4gICAgZGVsZXRlQnVja2V0KGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCAoMCwgZmV0Y2hfMS5yZW1vdmUpKHRoaXMuZmV0Y2gsIGAke3RoaXMudXJsfS9idWNrZXQvJHtpZH1gLCB7fSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc1N0b3JhZ2VFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0gU3RvcmFnZUJ1Y2tldEFwaTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3RvcmFnZUJ1Y2tldEFwaS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/storage-js/dist/main/packages/StorageBucketApi.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/storage-js/dist/main/packages/StorageFileApi.js":
/*!********************************************************************************!*\
!*** ./node_modules/@supabase/storage-js/dist/main/packages/StorageFileApi.js ***!
\********************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst errors_1 = __webpack_require__(/*! ../lib/errors */ \"(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/errors.js\");\r\nconst fetch_1 = __webpack_require__(/*! ../lib/fetch */ \"(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/fetch.js\");\r\nconst helpers_1 = __webpack_require__(/*! ../lib/helpers */ \"(ssr)/./node_modules/@supabase/storage-js/dist/main/lib/helpers.js\");\r\nconst DEFAULT_SEARCH_OPTIONS = {\r\n limit: 100,\r\n offset: 0,\r\n sortBy: {\r\n column: 'name',\r\n order: 'asc',\r\n },\r\n};\r\nconst DEFAULT_FILE_OPTIONS = {\r\n cacheControl: '3600',\r\n contentType: 'text/plain;charset=UTF-8',\r\n upsert: false,\r\n};\r\nclass StorageFileApi {\r\n constructor(url, headers = {}, bucketId, fetch) {\r\n this.url = url;\r\n this.headers = headers;\r\n this.bucketId = bucketId;\r\n this.fetch = (0, helpers_1.resolveFetch)(fetch);\r\n }\r\n /**\r\n * Uploads a file to an existing bucket or replaces an existing file at the specified path with a new one.\r\n *\r\n * @param method HTTP method.\r\n * @param path The relative file path. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\r\n * @param fileBody The body of the file to be stored in the bucket.\r\n */\r\n uploadOrUpdate(method, path, fileBody, fileOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n let body;\r\n const options = Object.assign(Object.assign({}, DEFAULT_FILE_OPTIONS), fileOptions);\r\n let headers = Object.assign(Object.assign({}, this.headers), (method === 'POST' && { 'x-upsert': String(options.upsert) }));\r\n const metadata = options.metadata;\r\n if (typeof Blob !== 'undefined' && fileBody instanceof Blob) {\r\n body = new FormData();\r\n body.append('cacheControl', options.cacheControl);\r\n if (metadata) {\r\n body.append('metadata', this.encodeMetadata(metadata));\r\n }\r\n body.append('', fileBody);\r\n }\r\n else if (typeof FormData !== 'undefined' && fileBody instanceof FormData) {\r\n body = fileBody;\r\n body.append('cacheControl', options.cacheControl);\r\n if (metadata) {\r\n body.append('metadata', this.encodeMetadata(metadata));\r\n }\r\n }\r\n else {\r\n body = fileBody;\r\n headers['cache-control'] = `max-age=${options.cacheControl}`;\r\n headers['content-type'] = options.contentType;\r\n if (metadata) {\r\n headers['x-metadata'] = this.toBase64(this.encodeMetadata(metadata));\r\n }\r\n }\r\n if (fileOptions === null || fileOptions === void 0 ? void 0 : fileOptions.headers) {\r\n headers = Object.assign(Object.assign({}, headers), fileOptions.headers);\r\n }\r\n const cleanPath = this._removeEmptyFolders(path);\r\n const _path = this._getFinalPath(cleanPath);\r\n const res = yield this.fetch(`${this.url}/object/${_path}`, Object.assign({ method, body: body, headers }, ((options === null || options === void 0 ? void 0 : options.duplex) ? { duplex: options.duplex } : {})));\r\n const data = yield res.json();\r\n if (res.ok) {\r\n return {\r\n data: { path: cleanPath, id: data.Id, fullPath: data.Key },\r\n error: null,\r\n };\r\n }\r\n else {\r\n const error = data;\r\n return { data: null, error };\r\n }\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Uploads a file to an existing bucket.\r\n *\r\n * @param path The file path, including the file name. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\r\n * @param fileBody The body of the file to be stored in the bucket.\r\n */\r\n upload(path, fileBody, fileOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.uploadOrUpdate('POST', path, fileBody, fileOptions);\r\n });\r\n }\r\n /**\r\n * Upload a file with a token generated from `createSignedUploadUrl`.\r\n * @param path The file path, including the file name. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\r\n * @param token The token generated from `createSignedUploadUrl`\r\n * @param fileBody The body of the file to be stored in the bucket.\r\n */\r\n uploadToSignedUrl(path, token, fileBody, fileOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const cleanPath = this._removeEmptyFolders(path);\r\n const _path = this._getFinalPath(cleanPath);\r\n const url = new URL(this.url + `/object/upload/sign/${_path}`);\r\n url.searchParams.set('token', token);\r\n try {\r\n let body;\r\n const options = Object.assign({ upsert: DEFAULT_FILE_OPTIONS.upsert }, fileOptions);\r\n const headers = Object.assign(Object.assign({}, this.headers), { 'x-upsert': String(options.upsert) });\r\n if (typeof Blob !== 'undefined' && fileBody instanceof Blob) {\r\n body = new FormData();\r\n body.append('cacheControl', options.cacheControl);\r\n body.append('', fileBody);\r\n }\r\n else if (typeof FormData !== 'undefined' && fileBody instanceof FormData) {\r\n body = fileBody;\r\n body.append('cacheControl', options.cacheControl);\r\n }\r\n else {\r\n body = fileBody;\r\n headers['cache-control'] = `max-age=${options.cacheControl}`;\r\n headers['content-type'] = options.contentType;\r\n }\r\n const res = yield this.fetch(url.toString(), {\r\n method: 'PUT',\r\n body: body,\r\n headers,\r\n });\r\n const data = yield res.json();\r\n if (res.ok) {\r\n return {\r\n data: { path: cleanPath, fullPath: data.Key },\r\n error: null,\r\n };\r\n }\r\n else {\r\n const error = data;\r\n return { data: null, error };\r\n }\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Creates a signed upload URL.\r\n * Signed upload URLs can be used to upload files to the bucket without further authentication.\r\n * They are valid for 2 hours.\r\n * @param path The file path, including the current file name. For example `folder/image.png`.\r\n * @param options.upsert If set to true, allows the file to be overwritten if it already exists.\r\n */\r\n createSignedUploadUrl(path, options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n let _path = this._getFinalPath(path);\r\n const headers = Object.assign({}, this.headers);\r\n if (options === null || options === void 0 ? void 0 : options.upsert) {\r\n headers['x-upsert'] = 'true';\r\n }\r\n const data = yield (0, fetch_1.post)(this.fetch, `${this.url}/object/upload/sign/${_path}`, {}, { headers });\r\n const url = new URL(this.url + data.url);\r\n const token = url.searchParams.get('token');\r\n if (!token) {\r\n throw new errors_1.StorageError('No token returned by API');\r\n }\r\n return { data: { signedUrl: url.toString(), path, token }, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Replaces an existing file at the specified path with a new one.\r\n *\r\n * @param path The relative file path. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to update.\r\n * @param fileBody The body of the file to be stored in the bucket.\r\n */\r\n update(path, fileBody, fileOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.uploadOrUpdate('PUT', path, fileBody, fileOptions);\r\n });\r\n }\r\n /**\r\n * Moves an existing file to a new path in the same bucket.\r\n *\r\n * @param fromPath The original file path, including the current file name. For example `folder/image.png`.\r\n * @param toPath The new file path, including the new file name. For example `folder/image-new.png`.\r\n * @param options The destination options.\r\n */\r\n move(fromPath, toPath, options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0, fetch_1.post)(this.fetch, `${this.url}/object/move`, {\r\n bucketId: this.bucketId,\r\n sourceKey: fromPath,\r\n destinationKey: toPath,\r\n destinationBucket: options === null || options === void 0 ? void 0 : options.destinationBucket,\r\n }, { headers: this.headers });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Copies an existing file to a new path in the same bucket.\r\n *\r\n * @param fromPath The original file path, including the current file name. For example `folder/image.png`.\r\n * @param toPath The new file path, including the new file name. For example `folder/image-copy.png`.\r\n * @param options The destination options.\r\n */\r\n copy(fromPath, toPath, options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0, fetch_1.post)(this.fetch, `${this.url}/object/copy`, {\r\n bucketId: this.bucketId,\r\n sourceKey: fromPath,\r\n destinationKey: toPath,\r\n destinationBucket: options === null || options === void 0 ? void 0 : options.destinationBucket,\r\n }, { headers: this.headers });\r\n return { data: { path: data.Key }, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Creates a signed URL. Use a signed URL to share a file for a fixed amount of time.\r\n *\r\n * @param path The file path, including the current file name. For example `folder/image.png`.\r\n * @param expiresIn The number of seconds until the signed URL expires. For example, `60` for a URL which is valid for one minute.\r\n * @param options.download triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\r\n * @param options.transform Transform the asset before serving it to the client.\r\n */\r\n createSignedUrl(path, expiresIn, options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n let _path = this._getFinalPath(path);\r\n let data = yield (0, fetch_1.post)(this.fetch, `${this.url}/object/sign/${_path}`, Object.assign({ expiresIn }, ((options === null || options === void 0 ? void 0 : options.transform) ? { transform: options.transform } : {})), { headers: this.headers });\r\n const downloadQueryParam = (options === null || options === void 0 ? void 0 : options.download)\r\n ? `&download=${options.download === true ? '' : options.download}`\r\n : '';\r\n const signedUrl = encodeURI(`${this.url}${data.signedURL}${downloadQueryParam}`);\r\n data = { signedUrl };\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Creates multiple signed URLs. Use a signed URL to share a file for a fixed amount of time.\r\n *\r\n * @param paths The file paths to be downloaded, including the current file names. For example `['folder/image.png', 'folder2/image2.png']`.\r\n * @param expiresIn The number of seconds until the signed URLs expire. For example, `60` for URLs which are valid for one minute.\r\n * @param options.download triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\r\n */\r\n createSignedUrls(paths, expiresIn, options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0, fetch_1.post)(this.fetch, `${this.url}/object/sign/${this.bucketId}`, { expiresIn, paths }, { headers: this.headers });\r\n const downloadQueryParam = (options === null || options === void 0 ? void 0 : options.download)\r\n ? `&download=${options.download === true ? '' : options.download}`\r\n : '';\r\n return {\r\n data: data.map((datum) => (Object.assign(Object.assign({}, datum), { signedUrl: datum.signedURL\r\n ? encodeURI(`${this.url}${datum.signedURL}${downloadQueryParam}`)\r\n : null }))),\r\n error: null,\r\n };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Downloads a file from a private bucket. For public buckets, make a request to the URL returned from `getPublicUrl` instead.\r\n *\r\n * @param path The full path and file name of the file to be downloaded. For example `folder/image.png`.\r\n * @param options.transform Transform the asset before serving it to the client.\r\n */\r\n download(path, options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const wantsTransformation = typeof (options === null || options === void 0 ? void 0 : options.transform) !== 'undefined';\r\n const renderPath = wantsTransformation ? 'render/image/authenticated' : 'object';\r\n const transformationQuery = this.transformOptsToQueryString((options === null || options === void 0 ? void 0 : options.transform) || {});\r\n const queryString = transformationQuery ? `?${transformationQuery}` : '';\r\n try {\r\n const _path = this._getFinalPath(path);\r\n const res = yield (0, fetch_1.get)(this.fetch, `${this.url}/${renderPath}/${_path}${queryString}`, {\r\n headers: this.headers,\r\n noResolveJson: true,\r\n });\r\n const data = yield res.blob();\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Retrieves the details of an existing file.\r\n * @param path\r\n */\r\n info(path) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const _path = this._getFinalPath(path);\r\n try {\r\n const data = yield (0, fetch_1.get)(this.fetch, `${this.url}/object/info/${_path}`, {\r\n headers: this.headers,\r\n });\r\n return { data: (0, helpers_1.recursiveToCamel)(data), error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Checks the existence of a file.\r\n * @param path\r\n */\r\n exists(path) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const _path = this._getFinalPath(path);\r\n try {\r\n yield (0, fetch_1.head)(this.fetch, `${this.url}/object/${_path}`, {\r\n headers: this.headers,\r\n });\r\n return { data: true, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error) && error instanceof errors_1.StorageUnknownError) {\r\n const originalError = error.originalError;\r\n if ([400, 404].includes(originalError === null || originalError === void 0 ? void 0 : originalError.status)) {\r\n return { data: false, error };\r\n }\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * A simple convenience function to get the URL for an asset in a public bucket. If you do not want to use this function, you can construct the public URL by concatenating the bucket URL with the path to the asset.\r\n * This function does not verify if the bucket is public. If a public URL is created for a bucket which is not public, you will not be able to download the asset.\r\n *\r\n * @param path The path and name of the file to generate the public URL for. For example `folder/image.png`.\r\n * @param options.download Triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\r\n * @param options.transform Transform the asset before serving it to the client.\r\n */\r\n getPublicUrl(path, options) {\r\n const _path = this._getFinalPath(path);\r\n const _queryString = [];\r\n const downloadQueryParam = (options === null || options === void 0 ? void 0 : options.download)\r\n ? `download=${options.download === true ? '' : options.download}`\r\n : '';\r\n if (downloadQueryParam !== '') {\r\n _queryString.push(downloadQueryParam);\r\n }\r\n const wantsTransformation = typeof (options === null || options === void 0 ? void 0 : options.transform) !== 'undefined';\r\n const renderPath = wantsTransformation ? 'render/image' : 'object';\r\n const transformationQuery = this.transformOptsToQueryString((options === null || options === void 0 ? void 0 : options.transform) || {});\r\n if (transformationQuery !== '') {\r\n _queryString.push(transformationQuery);\r\n }\r\n let queryString = _queryString.join('&');\r\n if (queryString !== '') {\r\n queryString = `?${queryString}`;\r\n }\r\n return {\r\n data: { publicUrl: encodeURI(`${this.url}/${renderPath}/public/${_path}${queryString}`) },\r\n };\r\n }\r\n /**\r\n * Deletes files within the same bucket\r\n *\r\n * @param paths An array of files to delete, including the path and file name. For example [`'folder/image.png'`].\r\n */\r\n remove(paths) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0, fetch_1.remove)(this.fetch, `${this.url}/object/${this.bucketId}`, { prefixes: paths }, { headers: this.headers });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Get file metadata\r\n * @param id the file id to retrieve metadata\r\n */\r\n // async getMetadata(\r\n // id: string\r\n // ): Promise<\r\n // | {\r\n // data: Metadata\r\n // error: null\r\n // }\r\n // | {\r\n // data: null\r\n // error: StorageError\r\n // }\r\n // > {\r\n // try {\r\n // const data = await get(this.fetch, `${this.url}/metadata/${id}`, { headers: this.headers })\r\n // return { data, error: null }\r\n // } catch (error) {\r\n // if (isStorageError(error)) {\r\n // return { data: null, error }\r\n // }\r\n // throw error\r\n // }\r\n // }\r\n /**\r\n * Update file metadata\r\n * @param id the file id to update metadata\r\n * @param meta the new file metadata\r\n */\r\n // async updateMetadata(\r\n // id: string,\r\n // meta: Metadata\r\n // ): Promise<\r\n // | {\r\n // data: Metadata\r\n // error: null\r\n // }\r\n // | {\r\n // data: null\r\n // error: StorageError\r\n // }\r\n // > {\r\n // try {\r\n // const data = await post(\r\n // this.fetch,\r\n // `${this.url}/metadata/${id}`,\r\n // { ...meta },\r\n // { headers: this.headers }\r\n // )\r\n // return { data, error: null }\r\n // } catch (error) {\r\n // if (isStorageError(error)) {\r\n // return { data: null, error }\r\n // }\r\n // throw error\r\n // }\r\n // }\r\n /**\r\n * Lists all the files within a bucket.\r\n * @param path The folder path.\r\n */\r\n list(path, options, parameters) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const body = Object.assign(Object.assign(Object.assign({}, DEFAULT_SEARCH_OPTIONS), options), { prefix: path || '' });\r\n const data = yield (0, fetch_1.post)(this.fetch, `${this.url}/object/list/${this.bucketId}`, body, { headers: this.headers }, parameters);\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0, errors_1.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n encodeMetadata(metadata) {\r\n return JSON.stringify(metadata);\r\n }\r\n toBase64(data) {\r\n if (typeof Buffer !== 'undefined') {\r\n return Buffer.from(data).toString('base64');\r\n }\r\n return btoa(data);\r\n }\r\n _getFinalPath(path) {\r\n return `${this.bucketId}/${path}`;\r\n }\r\n _removeEmptyFolders(path) {\r\n return path.replace(/^\\/|\\/$/g, '').replace(/\\/+/g, '/');\r\n }\r\n transformOptsToQueryString(transform) {\r\n const params = [];\r\n if (transform.width) {\r\n params.push(`width=${transform.width}`);\r\n }\r\n if (transform.height) {\r\n params.push(`height=${transform.height}`);\r\n }\r\n if (transform.resize) {\r\n params.push(`resize=${transform.resize}`);\r\n }\r\n if (transform.format) {\r\n params.push(`format=${transform.format}`);\r\n }\r\n if (transform.quality) {\r\n params.push(`quality=${transform.quality}`);\r\n }\r\n return params.join('&');\r\n }\r\n}\r\nexports[\"default\"] = StorageFileApi;\r\n//# sourceMappingURL=StorageFileApi.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tYWluL3BhY2thZ2VzL1N0b3JhZ2VGaWxlQXBpLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSw0QkFBNEIsK0RBQStELGlCQUFpQjtBQUM1RztBQUNBLG9DQUFvQyxNQUFNLCtCQUErQixZQUFZO0FBQ3JGLG1DQUFtQyxNQUFNLG1DQUFtQyxZQUFZO0FBQ3hGLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxpQkFBaUIsbUJBQU8sQ0FBQyx3RkFBZTtBQUN4QyxnQkFBZ0IsbUJBQU8sQ0FBQyxzRkFBYztBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQywwRkFBZ0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQ7QUFDOUQsNERBQTRELHlDQUF5QyxvQ0FBb0M7QUFDekk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELHFCQUFxQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELFNBQVMsVUFBVSxNQUFNLG1CQUFtQiw2QkFBNkIsMEVBQTBFLHlCQUF5QixJQUFJO0FBQ2hPO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxrREFBa0Q7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRSxNQUFNO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxxQ0FBcUM7QUFDckYsOERBQThELG1CQUFtQixvQ0FBb0M7QUFDckg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRCxxQkFBcUI7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQ0FBcUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRSxTQUFTLHNCQUFzQixNQUFNLEtBQUssSUFBSSxTQUFTO0FBQzNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUSx3Q0FBd0M7QUFDekU7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FLFNBQVM7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsSUFBSSx1QkFBdUI7QUFDNUMseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRSxTQUFTO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLElBQUksdUJBQXVCO0FBQzVDLHlCQUF5QixRQUFRLGdCQUFnQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFLFNBQVMsZUFBZSxNQUFNLG1CQUFtQixXQUFXLDZFQUE2RSwrQkFBK0IsSUFBSSxNQUFNLHVCQUF1QjtBQUMzUTtBQUNBLG1DQUFtQyxrREFBa0Q7QUFDckY7QUFDQSwrQ0FBK0MsU0FBUyxFQUFFLGVBQWUsRUFBRSxtQkFBbUI7QUFDOUYseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvRUFBb0UsU0FBUyxlQUFlLGNBQWMsS0FBSyxrQkFBa0IsSUFBSSx1QkFBdUI7QUFDNUo7QUFDQSxtQ0FBbUMsa0RBQWtEO0FBQ3JGO0FBQ0E7QUFDQSw2RUFBNkUsWUFBWTtBQUN6RiwyQ0FBMkMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQjtBQUMzRixvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1KQUFtSjtBQUNuSiwwREFBMEQsb0JBQW9CO0FBQzlFO0FBQ0E7QUFDQSxrRUFBa0UsU0FBUyxHQUFHLFdBQVcsR0FBRyxNQUFNLEVBQUUsWUFBWTtBQUNoSDtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FLFNBQVMsZUFBZSxNQUFNO0FBQ2pHO0FBQ0EsaUJBQWlCO0FBQ2pCLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxTQUFTLFVBQVUsTUFBTTtBQUNoRjtBQUNBLGlCQUFpQjtBQUNqQix5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixrREFBa0Q7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0lBQStJO0FBQy9JO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsWUFBWTtBQUMxQztBQUNBO0FBQ0Esb0JBQW9CLHdCQUF3QixTQUFTLEdBQUcsV0FBVyxVQUFVLE1BQU0sRUFBRSxZQUFZLElBQUk7QUFDckc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRUFBc0UsU0FBUyxVQUFVLGNBQWMsS0FBSyxpQkFBaUIsSUFBSSx1QkFBdUI7QUFDeEoseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELFNBQVMsWUFBWSxHQUFHLEtBQUssdUJBQXVCO0FBQ3JHLG9CQUFvQjtBQUNwQixXQUFXO0FBQ1g7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsU0FBUyxZQUFZLEdBQUc7QUFDeEMsZUFBZSxTQUFTO0FBQ3hCLGVBQWU7QUFDZjtBQUNBLG9CQUFvQjtBQUNwQixXQUFXO0FBQ1g7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RSx1Q0FBdUMsb0JBQW9CO0FBQ3BJLG9FQUFvRSxTQUFTLGVBQWUsY0FBYyxXQUFXLHVCQUF1QjtBQUM1SSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGNBQWMsR0FBRyxLQUFLO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGdCQUFnQjtBQUNqRDtBQUNBO0FBQ0Esa0NBQWtDLGlCQUFpQjtBQUNuRDtBQUNBO0FBQ0Esa0NBQWtDLGlCQUFpQjtBQUNuRDtBQUNBO0FBQ0Esa0NBQWtDLGlCQUFpQjtBQUNuRDtBQUNBO0FBQ0EsbUNBQW1DLGtCQUFrQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tYWluL3BhY2thZ2VzL1N0b3JhZ2VGaWxlQXBpLmpzP2U5MTQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9saWIvZXJyb3JzXCIpO1xyXG5jb25zdCBmZXRjaF8xID0gcmVxdWlyZShcIi4uL2xpYi9mZXRjaFwiKTtcclxuY29uc3QgaGVscGVyc18xID0gcmVxdWlyZShcIi4uL2xpYi9oZWxwZXJzXCIpO1xyXG5jb25zdCBERUZBVUxUX1NFQVJDSF9PUFRJT05TID0ge1xyXG4gICAgbGltaXQ6IDEwMCxcclxuICAgIG9mZnNldDogMCxcclxuICAgIHNvcnRCeToge1xyXG4gICAgICAgIGNvbHVtbjogJ25hbWUnLFxyXG4gICAgICAgIG9yZGVyOiAnYXNjJyxcclxuICAgIH0sXHJcbn07XHJcbmNvbnN0IERFRkFVTFRfRklMRV9PUFRJT05TID0ge1xyXG4gICAgY2FjaGVDb250cm9sOiAnMzYwMCcsXHJcbiAgICBjb250ZW50VHlwZTogJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcsXHJcbiAgICB1cHNlcnQ6IGZhbHNlLFxyXG59O1xyXG5jbGFzcyBTdG9yYWdlRmlsZUFwaSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih1cmwsIGhlYWRlcnMgPSB7fSwgYnVja2V0SWQsIGZldGNoKSB7XHJcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcclxuICAgICAgICB0aGlzLmJ1Y2tldElkID0gYnVja2V0SWQ7XHJcbiAgICAgICAgdGhpcy5mZXRjaCA9ICgwLCBoZWxwZXJzXzEucmVzb2x2ZUZldGNoKShmZXRjaCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwbG9hZHMgYSBmaWxlIHRvIGFuIGV4aXN0aW5nIGJ1Y2tldCBvciByZXBsYWNlcyBhbiBleGlzdGluZyBmaWxlIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCB3aXRoIGEgbmV3IG9uZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbWV0aG9kIEhUVFAgbWV0aG9kLlxyXG4gICAgICogQHBhcmFtIHBhdGggVGhlIHJlbGF0aXZlIGZpbGUgcGF0aC4gU2hvdWxkIGJlIG9mIHRoZSBmb3JtYXQgYGZvbGRlci9zdWJmb2xkZXIvZmlsZW5hbWUucG5nYC4gVGhlIGJ1Y2tldCBtdXN0IGFscmVhZHkgZXhpc3QgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXBsb2FkLlxyXG4gICAgICogQHBhcmFtIGZpbGVCb2R5IFRoZSBib2R5IG9mIHRoZSBmaWxlIHRvIGJlIHN0b3JlZCBpbiB0aGUgYnVja2V0LlxyXG4gICAgICovXHJcbiAgICB1cGxvYWRPclVwZGF0ZShtZXRob2QsIHBhdGgsIGZpbGVCb2R5LCBmaWxlT3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYm9keTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfRklMRV9PUFRJT05TKSwgZmlsZU9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMuaGVhZGVycyksIChtZXRob2QgPT09ICdQT1NUJyAmJiB7ICd4LXVwc2VydCc6IFN0cmluZyhvcHRpb25zLnVwc2VydCkgfSkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBmaWxlQm9keSBpbnN0YW5jZW9mIEJsb2IpIHtcclxuICAgICAgICAgICAgICAgICAgICBib2R5ID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keS5hcHBlbmQoJ2NhY2hlQ29udHJvbCcsIG9wdGlvbnMuY2FjaGVDb250cm9sKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keS5hcHBlbmQoJ21ldGFkYXRhJywgdGhpcy5lbmNvZGVNZXRhZGF0YShtZXRhZGF0YSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBib2R5LmFwcGVuZCgnJywgZmlsZUJvZHkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyAmJiBmaWxlQm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keSA9IGZpbGVCb2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKCdjYWNoZUNvbnRyb2wnLCBvcHRpb25zLmNhY2hlQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGFkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKCdtZXRhZGF0YScsIHRoaXMuZW5jb2RlTWV0YWRhdGEobWV0YWRhdGEpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBib2R5ID0gZmlsZUJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1snY2FjaGUtY29udHJvbCddID0gYG1heC1hZ2U9JHtvcHRpb25zLmNhY2hlQ29udHJvbH1gO1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gb3B0aW9ucy5jb250ZW50VHlwZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1sneC1tZXRhZGF0YSddID0gdGhpcy50b0Jhc2U2NCh0aGlzLmVuY29kZU1ldGFkYXRhKG1ldGFkYXRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGZpbGVPcHRpb25zID09PSBudWxsIHx8IGZpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmaWxlT3B0aW9ucy5oZWFkZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgaGVhZGVycyksIGZpbGVPcHRpb25zLmhlYWRlcnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xlYW5QYXRoID0gdGhpcy5fcmVtb3ZlRW1wdHlGb2xkZXJzKHBhdGgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgX3BhdGggPSB0aGlzLl9nZXRGaW5hbFBhdGgoY2xlYW5QYXRoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIHRoaXMuZmV0Y2goYCR7dGhpcy51cmx9L29iamVjdC8ke19wYXRofWAsIE9iamVjdC5hc3NpZ24oeyBtZXRob2QsIGJvZHk6IGJvZHksIGhlYWRlcnMgfSwgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZHVwbGV4KSA/IHsgZHVwbGV4OiBvcHRpb25zLmR1cGxleCB9IDoge30pKSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geWllbGQgcmVzLmpzb24oKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMub2spIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IHBhdGg6IGNsZWFuUGF0aCwgaWQ6IGRhdGEuSWQsIGZ1bGxQYXRoOiBkYXRhLktleSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGVycm9yc18xLmlzU3RvcmFnZUVycm9yKShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXBsb2FkcyBhIGZpbGUgdG8gYW4gZXhpc3RpbmcgYnVja2V0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBwYXRoIFRoZSBmaWxlIHBhdGgsIGluY2x1ZGluZyB0aGUgZmlsZSBuYW1lLiBTaG91bGQgYmUgb2YgdGhlIGZvcm1hdCBgZm9sZGVyL3N1YmZvbGRlci9maWxlbmFtZS5wbmdgLiBUaGUgYnVja2V0IG11c3QgYWxyZWFkeSBleGlzdCBiZWZvcmUgYXR0ZW1wdGluZyB0byB1cGxvYWQuXHJcbiAgICAgKiBAcGFyYW0gZmlsZUJvZHkgVGhlIGJvZHkgb2YgdGhlIGZpbGUgdG8gYmUgc3RvcmVkIGluIHRoZSBidWNrZXQuXHJcbiAgICAgKi9cclxuICAgIHVwbG9hZChwYXRoLCBmaWxlQm9keSwgZmlsZU9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRPclVwZGF0ZSgnUE9TVCcsIHBhdGgsIGZpbGVCb2R5LCBmaWxlT3B0aW9ucyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwbG9hZCBhIGZpbGUgd2l0aCBhIHRva2VuIGdlbmVyYXRlZCBmcm9tIGBjcmVhdGVTaWduZWRVcGxvYWRVcmxgLlxyXG4gICAgICogQHBhcmFtIHBhdGggVGhlIGZpbGUgcGF0aCwgaW5jbHVkaW5nIHRoZSBmaWxlIG5hbWUuIFNob3VsZCBiZSBvZiB0aGUgZm9ybWF0IGBmb2xkZXIvc3ViZm9sZGVyL2ZpbGVuYW1lLnBuZ2AuIFRoZSBidWNrZXQgbXVzdCBhbHJlYWR5IGV4aXN0IGJlZm9yZSBhdHRlbXB0aW5nIHRvIHVwbG9hZC5cclxuICAgICAqIEBwYXJhbSB0b2tlbiBUaGUgdG9rZW4gZ2VuZXJhdGVkIGZyb20gYGNyZWF0ZVNpZ25lZFVwbG9hZFVybGBcclxuICAgICAqIEBwYXJhbSBmaWxlQm9keSBUaGUgYm9keSBvZiB0aGUgZmlsZSB0byBiZSBzdG9yZWQgaW4gdGhlIGJ1Y2tldC5cclxuICAgICAqL1xyXG4gICAgdXBsb2FkVG9TaWduZWRVcmwocGF0aCwgdG9rZW4sIGZpbGVCb2R5LCBmaWxlT3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsZWFuUGF0aCA9IHRoaXMuX3JlbW92ZUVtcHR5Rm9sZGVycyhwYXRoKTtcclxuICAgICAgICAgICAgY29uc3QgX3BhdGggPSB0aGlzLl9nZXRGaW5hbFBhdGgoY2xlYW5QYXRoKTtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLnVybCArIGAvb2JqZWN0L3VwbG9hZC9zaWduLyR7X3BhdGh9YCk7XHJcbiAgICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCd0b2tlbicsIHRva2VuKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGxldCBib2R5O1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyB1cHNlcnQ6IERFRkFVTFRfRklMRV9PUFRJT05TLnVwc2VydCB9LCBmaWxlT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLmhlYWRlcnMpLCB7ICd4LXVwc2VydCc6IFN0cmluZyhvcHRpb25zLnVwc2VydCkgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIGZpbGVCb2R5IGluc3RhbmNlb2YgQmxvYikge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICBib2R5LmFwcGVuZCgnY2FjaGVDb250cm9sJywgb3B0aW9ucy5jYWNoZUNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKCcnLCBmaWxlQm9keSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnICYmIGZpbGVCb2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBib2R5ID0gZmlsZUJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keS5hcHBlbmQoJ2NhY2hlQ29udHJvbCcsIG9wdGlvbnMuY2FjaGVDb250cm9sKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSBmaWxlQm9keTtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzWydjYWNoZS1jb250cm9sJ10gPSBgbWF4LWFnZT0ke29wdGlvbnMuY2FjaGVDb250cm9sfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBvcHRpb25zLmNvbnRlbnRUeXBlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0geWllbGQgdGhpcy5mZXRjaCh1cmwudG9TdHJpbmcoKSwge1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogYm9keSxcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geWllbGQgcmVzLmpzb24oKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMub2spIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IHBhdGg6IGNsZWFuUGF0aCwgZnVsbFBhdGg6IGRhdGEuS2V5IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNTdG9yYWdlRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgc2lnbmVkIHVwbG9hZCBVUkwuXHJcbiAgICAgKiBTaWduZWQgdXBsb2FkIFVSTHMgY2FuIGJlIHVzZWQgdG8gdXBsb2FkIGZpbGVzIHRvIHRoZSBidWNrZXQgd2l0aG91dCBmdXJ0aGVyIGF1dGhlbnRpY2F0aW9uLlxyXG4gICAgICogVGhleSBhcmUgdmFsaWQgZm9yIDIgaG91cnMuXHJcbiAgICAgKiBAcGFyYW0gcGF0aCBUaGUgZmlsZSBwYXRoLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgZmlsZSBuYW1lLiBGb3IgZXhhbXBsZSBgZm9sZGVyL2ltYWdlLnBuZ2AuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy51cHNlcnQgSWYgc2V0IHRvIHRydWUsIGFsbG93cyB0aGUgZmlsZSB0byBiZSBvdmVyd3JpdHRlbiBpZiBpdCBhbHJlYWR5IGV4aXN0cy5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlU2lnbmVkVXBsb2FkVXJsKHBhdGgsIG9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbGV0IF9wYXRoID0gdGhpcy5fZ2V0RmluYWxQYXRoKHBhdGgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuaGVhZGVycyk7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnVwc2VydCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbJ3gtdXBzZXJ0J10gPSAndHJ1ZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geWllbGQgKDAsIGZldGNoXzEucG9zdCkodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L29iamVjdC91cGxvYWQvc2lnbi8ke19wYXRofWAsIHt9LCB7IGhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHRoaXMudXJsICsgZGF0YS51cmwpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgndG9rZW4nKTtcclxuICAgICAgICAgICAgICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuU3RvcmFnZUVycm9yKCdObyB0b2tlbiByZXR1cm5lZCBieSBBUEknKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgc2lnbmVkVXJsOiB1cmwudG9TdHJpbmcoKSwgcGF0aCwgdG9rZW4gfSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNTdG9yYWdlRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXBsYWNlcyBhbiBleGlzdGluZyBmaWxlIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCB3aXRoIGEgbmV3IG9uZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcGF0aCBUaGUgcmVsYXRpdmUgZmlsZSBwYXRoLiBTaG91bGQgYmUgb2YgdGhlIGZvcm1hdCBgZm9sZGVyL3N1YmZvbGRlci9maWxlbmFtZS5wbmdgLiBUaGUgYnVja2V0IG11c3QgYWxyZWFkeSBleGlzdCBiZWZvcmUgYXR0ZW1wdGluZyB0byB1cGRhdGUuXHJcbiAgICAgKiBAcGFyYW0gZmlsZUJvZHkgVGhlIGJvZHkgb2YgdGhlIGZpbGUgdG8gYmUgc3RvcmVkIGluIHRoZSBidWNrZXQuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZShwYXRoLCBmaWxlQm9keSwgZmlsZU9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRPclVwZGF0ZSgnUFVUJywgcGF0aCwgZmlsZUJvZHksIGZpbGVPcHRpb25zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgYW4gZXhpc3RpbmcgZmlsZSB0byBhIG5ldyBwYXRoIGluIHRoZSBzYW1lIGJ1Y2tldC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZnJvbVBhdGggVGhlIG9yaWdpbmFsIGZpbGUgcGF0aCwgaW5jbHVkaW5nIHRoZSBjdXJyZW50IGZpbGUgbmFtZS4gRm9yIGV4YW1wbGUgYGZvbGRlci9pbWFnZS5wbmdgLlxyXG4gICAgICogQHBhcmFtIHRvUGF0aCBUaGUgbmV3IGZpbGUgcGF0aCwgaW5jbHVkaW5nIHRoZSBuZXcgZmlsZSBuYW1lLiBGb3IgZXhhbXBsZSBgZm9sZGVyL2ltYWdlLW5ldy5wbmdgLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIGRlc3RpbmF0aW9uIG9wdGlvbnMuXHJcbiAgICAgKi9cclxuICAgIG1vdmUoZnJvbVBhdGgsIHRvUGF0aCwgb3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geWllbGQgKDAsIGZldGNoXzEucG9zdCkodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L29iamVjdC9tb3ZlYCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldElkOiB0aGlzLmJ1Y2tldElkLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUtleTogZnJvbVBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25LZXk6IHRvUGF0aCxcclxuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmRlc3RpbmF0aW9uQnVja2V0LFxyXG4gICAgICAgICAgICAgICAgfSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc1N0b3JhZ2VFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENvcGllcyBhbiBleGlzdGluZyBmaWxlIHRvIGEgbmV3IHBhdGggaW4gdGhlIHNhbWUgYnVja2V0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBmcm9tUGF0aCBUaGUgb3JpZ2luYWwgZmlsZSBwYXRoLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgZmlsZSBuYW1lLiBGb3IgZXhhbXBsZSBgZm9sZGVyL2ltYWdlLnBuZ2AuXHJcbiAgICAgKiBAcGFyYW0gdG9QYXRoIFRoZSBuZXcgZmlsZSBwYXRoLCBpbmNsdWRpbmcgdGhlIG5ldyBmaWxlIG5hbWUuIEZvciBleGFtcGxlIGBmb2xkZXIvaW1hZ2UtY29weS5wbmdgLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIGRlc3RpbmF0aW9uIG9wdGlvbnMuXHJcbiAgICAgKi9cclxuICAgIGNvcHkoZnJvbVBhdGgsIHRvUGF0aCwgb3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geWllbGQgKDAsIGZldGNoXzEucG9zdCkodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L29iamVjdC9jb3B5YCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldElkOiB0aGlzLmJ1Y2tldElkLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUtleTogZnJvbVBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25LZXk6IHRvUGF0aCxcclxuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmRlc3RpbmF0aW9uQnVja2V0LFxyXG4gICAgICAgICAgICAgICAgfSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHBhdGg6IGRhdGEuS2V5IH0sIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGVycm9yc18xLmlzU3RvcmFnZUVycm9yKShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIHNpZ25lZCBVUkwuIFVzZSBhIHNpZ25lZCBVUkwgdG8gc2hhcmUgYSBmaWxlIGZvciBhIGZpeGVkIGFtb3VudCBvZiB0aW1lLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBwYXRoIFRoZSBmaWxlIHBhdGgsIGluY2x1ZGluZyB0aGUgY3VycmVudCBmaWxlIG5hbWUuIEZvciBleGFtcGxlIGBmb2xkZXIvaW1hZ2UucG5nYC5cclxuICAgICAqIEBwYXJhbSBleHBpcmVzSW4gVGhlIG51bWJlciBvZiBzZWNvbmRzIHVudGlsIHRoZSBzaWduZWQgVVJMIGV4cGlyZXMuIEZvciBleGFtcGxlLCBgNjBgIGZvciBhIFVSTCB3aGljaCBpcyB2YWxpZCBmb3Igb25lIG1pbnV0ZS5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmRvd25sb2FkIHRyaWdnZXJzIHRoZSBmaWxlIGFzIGEgZG93bmxvYWQgaWYgc2V0IHRvIHRydWUuIFNldCB0aGlzIHBhcmFtZXRlciBhcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBpZiB5b3Ugd2FudCB0byB0cmlnZ2VyIHRoZSBkb3dubG9hZCB3aXRoIGEgZGlmZmVyZW50IGZpbGVuYW1lLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMudHJhbnNmb3JtIFRyYW5zZm9ybSB0aGUgYXNzZXQgYmVmb3JlIHNlcnZpbmcgaXQgdG8gdGhlIGNsaWVudC5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlU2lnbmVkVXJsKHBhdGgsIGV4cGlyZXNJbiwgb3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgX3BhdGggPSB0aGlzLl9nZXRGaW5hbFBhdGgocGF0aCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHlpZWxkICgwLCBmZXRjaF8xLnBvc3QpKHRoaXMuZmV0Y2gsIGAke3RoaXMudXJsfS9vYmplY3Qvc2lnbi8ke19wYXRofWAsIE9iamVjdC5hc3NpZ24oeyBleHBpcmVzSW4gfSwgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudHJhbnNmb3JtKSA/IHsgdHJhbnNmb3JtOiBvcHRpb25zLnRyYW5zZm9ybSB9IDoge30pKSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb3dubG9hZFF1ZXJ5UGFyYW0gPSAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmRvd25sb2FkKVxyXG4gICAgICAgICAgICAgICAgICAgID8gYCZkb3dubG9hZD0ke29wdGlvbnMuZG93bmxvYWQgPT09IHRydWUgPyAnJyA6IG9wdGlvbnMuZG93bmxvYWR9YFxyXG4gICAgICAgICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduZWRVcmwgPSBlbmNvZGVVUkkoYCR7dGhpcy51cmx9JHtkYXRhLnNpZ25lZFVSTH0ke2Rvd25sb2FkUXVlcnlQYXJhbX1gKTtcclxuICAgICAgICAgICAgICAgIGRhdGEgPSB7IHNpZ25lZFVybCB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNTdG9yYWdlRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIG11bHRpcGxlIHNpZ25lZCBVUkxzLiBVc2UgYSBzaWduZWQgVVJMIHRvIHNoYXJlIGEgZmlsZSBmb3IgYSBmaXhlZCBhbW91bnQgb2YgdGltZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcGF0aHMgVGhlIGZpbGUgcGF0aHMgdG8gYmUgZG93bmxvYWRlZCwgaW5jbHVkaW5nIHRoZSBjdXJyZW50IGZpbGUgbmFtZXMuIEZvciBleGFtcGxlIGBbJ2ZvbGRlci9pbWFnZS5wbmcnLCAnZm9sZGVyMi9pbWFnZTIucG5nJ11gLlxyXG4gICAgICogQHBhcmFtIGV4cGlyZXNJbiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgdW50aWwgdGhlIHNpZ25lZCBVUkxzIGV4cGlyZS4gRm9yIGV4YW1wbGUsIGA2MGAgZm9yIFVSTHMgd2hpY2ggYXJlIHZhbGlkIGZvciBvbmUgbWludXRlLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZG93bmxvYWQgdHJpZ2dlcnMgdGhlIGZpbGUgYXMgYSBkb3dubG9hZCBpZiBzZXQgdG8gdHJ1ZS4gU2V0IHRoaXMgcGFyYW1ldGVyIGFzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGlmIHlvdSB3YW50IHRvIHRyaWdnZXIgdGhlIGRvd25sb2FkIHdpdGggYSBkaWZmZXJlbnQgZmlsZW5hbWUuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZVNpZ25lZFVybHMocGF0aHMsIGV4cGlyZXNJbiwgb3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geWllbGQgKDAsIGZldGNoXzEucG9zdCkodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L29iamVjdC9zaWduLyR7dGhpcy5idWNrZXRJZH1gLCB7IGV4cGlyZXNJbiwgcGF0aHMgfSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb3dubG9hZFF1ZXJ5UGFyYW0gPSAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmRvd25sb2FkKVxyXG4gICAgICAgICAgICAgICAgICAgID8gYCZkb3dubG9hZD0ke29wdGlvbnMuZG93bmxvYWQgPT09IHRydWUgPyAnJyA6IG9wdGlvbnMuZG93bmxvYWR9YFxyXG4gICAgICAgICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEubWFwKChkYXR1bSkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGF0dW0pLCB7IHNpZ25lZFVybDogZGF0dW0uc2lnbmVkVVJMXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGVuY29kZVVSSShgJHt0aGlzLnVybH0ke2RhdHVtLnNpZ25lZFVSTH0ke2Rvd25sb2FkUXVlcnlQYXJhbX1gKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsIH0pKSksXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc1N0b3JhZ2VFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIERvd25sb2FkcyBhIGZpbGUgZnJvbSBhIHByaXZhdGUgYnVja2V0LiBGb3IgcHVibGljIGJ1Y2tldHMsIG1ha2UgYSByZXF1ZXN0IHRvIHRoZSBVUkwgcmV0dXJuZWQgZnJvbSBgZ2V0UHVibGljVXJsYCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBwYXRoIFRoZSBmdWxsIHBhdGggYW5kIGZpbGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkLiBGb3IgZXhhbXBsZSBgZm9sZGVyL2ltYWdlLnBuZ2AuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy50cmFuc2Zvcm0gVHJhbnNmb3JtIHRoZSBhc3NldCBiZWZvcmUgc2VydmluZyBpdCB0byB0aGUgY2xpZW50LlxyXG4gICAgICovXHJcbiAgICBkb3dubG9hZChwYXRoLCBvcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgY29uc3Qgd2FudHNUcmFuc2Zvcm1hdGlvbiA9IHR5cGVvZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnRyYW5zZm9ybSkgIT09ICd1bmRlZmluZWQnO1xyXG4gICAgICAgICAgICBjb25zdCByZW5kZXJQYXRoID0gd2FudHNUcmFuc2Zvcm1hdGlvbiA/ICdyZW5kZXIvaW1hZ2UvYXV0aGVudGljYXRlZCcgOiAnb2JqZWN0JztcclxuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtYXRpb25RdWVyeSA9IHRoaXMudHJhbnNmb3JtT3B0c1RvUXVlcnlTdHJpbmcoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50cmFuc2Zvcm0pIHx8IHt9KTtcclxuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSB0cmFuc2Zvcm1hdGlvblF1ZXJ5ID8gYD8ke3RyYW5zZm9ybWF0aW9uUXVlcnl9YCA6ICcnO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgX3BhdGggPSB0aGlzLl9nZXRGaW5hbFBhdGgocGF0aCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCAoMCwgZmV0Y2hfMS5nZXQpKHRoaXMuZmV0Y2gsIGAke3RoaXMudXJsfS8ke3JlbmRlclBhdGh9LyR7X3BhdGh9JHtxdWVyeVN0cmluZ31gLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vUmVzb2x2ZUpzb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCByZXMuYmxvYigpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNTdG9yYWdlRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGRldGFpbHMgb2YgYW4gZXhpc3RpbmcgZmlsZS5cclxuICAgICAqIEBwYXJhbSBwYXRoXHJcbiAgICAgKi9cclxuICAgIGluZm8ocGF0aCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IF9wYXRoID0gdGhpcy5fZ2V0RmluYWxQYXRoKHBhdGgpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkICgwLCBmZXRjaF8xLmdldCkodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L29iamVjdC9pbmZvLyR7X3BhdGh9YCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogKDAsIGhlbHBlcnNfMS5yZWN1cnNpdmVUb0NhbWVsKShkYXRhKSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoMCwgZXJyb3JzXzEuaXNTdG9yYWdlRXJyb3IpKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdGhlIGV4aXN0ZW5jZSBvZiBhIGZpbGUuXHJcbiAgICAgKiBAcGFyYW0gcGF0aFxyXG4gICAgICovXHJcbiAgICBleGlzdHMocGF0aCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IF9wYXRoID0gdGhpcy5fZ2V0RmluYWxQYXRoKHBhdGgpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgeWllbGQgKDAsIGZldGNoXzEuaGVhZCkodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L29iamVjdC8ke19wYXRofWAsIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHRydWUsIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGVycm9yc18xLmlzU3RvcmFnZUVycm9yKShlcnJvcikgJiYgZXJyb3IgaW5zdGFuY2VvZiBlcnJvcnNfMS5TdG9yYWdlVW5rbm93bkVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxFcnJvciA9IGVycm9yLm9yaWdpbmFsRXJyb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFs0MDAsIDQwNF0uaW5jbHVkZXMob3JpZ2luYWxFcnJvciA9PT0gbnVsbCB8fCBvcmlnaW5hbEVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcmlnaW5hbEVycm9yLnN0YXR1cykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogZmFsc2UsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQSBzaW1wbGUgY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gZ2V0IHRoZSBVUkwgZm9yIGFuIGFzc2V0IGluIGEgcHVibGljIGJ1Y2tldC4gSWYgeW91IGRvIG5vdCB3YW50IHRvIHVzZSB0aGlzIGZ1bmN0aW9uLCB5b3UgY2FuIGNvbnN0cnVjdCB0aGUgcHVibGljIFVSTCBieSBjb25jYXRlbmF0aW5nIHRoZSBidWNrZXQgVVJMIHdpdGggdGhlIHBhdGggdG8gdGhlIGFzc2V0LlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB2ZXJpZnkgaWYgdGhlIGJ1Y2tldCBpcyBwdWJsaWMuIElmIGEgcHVibGljIFVSTCBpcyBjcmVhdGVkIGZvciBhIGJ1Y2tldCB3aGljaCBpcyBub3QgcHVibGljLCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBkb3dubG9hZCB0aGUgYXNzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHBhdGggVGhlIHBhdGggYW5kIG5hbWUgb2YgdGhlIGZpbGUgdG8gZ2VuZXJhdGUgdGhlIHB1YmxpYyBVUkwgZm9yLiBGb3IgZXhhbXBsZSBgZm9sZGVyL2ltYWdlLnBuZ2AuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5kb3dubG9hZCBUcmlnZ2VycyB0aGUgZmlsZSBhcyBhIGRvd25sb2FkIGlmIHNldCB0byB0cnVlLiBTZXQgdGhpcyBwYXJhbWV0ZXIgYXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgaWYgeW91IHdhbnQgdG8gdHJpZ2dlciB0aGUgZG93bmxvYWQgd2l0aCBhIGRpZmZlcmVudCBmaWxlbmFtZS5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLnRyYW5zZm9ybSBUcmFuc2Zvcm0gdGhlIGFzc2V0IGJlZm9yZSBzZXJ2aW5nIGl0IHRvIHRoZSBjbGllbnQuXHJcbiAgICAgKi9cclxuICAgIGdldFB1YmxpY1VybChwYXRoLCBvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgX3BhdGggPSB0aGlzLl9nZXRGaW5hbFBhdGgocGF0aCk7XHJcbiAgICAgICAgY29uc3QgX3F1ZXJ5U3RyaW5nID0gW107XHJcbiAgICAgICAgY29uc3QgZG93bmxvYWRRdWVyeVBhcmFtID0gKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5kb3dubG9hZClcclxuICAgICAgICAgICAgPyBgZG93bmxvYWQ9JHtvcHRpb25zLmRvd25sb2FkID09PSB0cnVlID8gJycgOiBvcHRpb25zLmRvd25sb2FkfWBcclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICBpZiAoZG93bmxvYWRRdWVyeVBhcmFtICE9PSAnJykge1xyXG4gICAgICAgICAgICBfcXVlcnlTdHJpbmcucHVzaChkb3dubG9hZFF1ZXJ5UGFyYW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3YW50c1RyYW5zZm9ybWF0aW9uID0gdHlwZW9mIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudHJhbnNmb3JtKSAhPT0gJ3VuZGVmaW5lZCc7XHJcbiAgICAgICAgY29uc3QgcmVuZGVyUGF0aCA9IHdhbnRzVHJhbnNmb3JtYXRpb24gPyAncmVuZGVyL2ltYWdlJyA6ICdvYmplY3QnO1xyXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWF0aW9uUXVlcnkgPSB0aGlzLnRyYW5zZm9ybU9wdHNUb1F1ZXJ5U3RyaW5nKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudHJhbnNmb3JtKSB8fCB7fSk7XHJcbiAgICAgICAgaWYgKHRyYW5zZm9ybWF0aW9uUXVlcnkgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIF9xdWVyeVN0cmluZy5wdXNoKHRyYW5zZm9ybWF0aW9uUXVlcnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcXVlcnlTdHJpbmcgPSBfcXVlcnlTdHJpbmcuam9pbignJicpO1xyXG4gICAgICAgIGlmIChxdWVyeVN0cmluZyAhPT0gJycpIHtcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSBgPyR7cXVlcnlTdHJpbmd9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGF0YTogeyBwdWJsaWNVcmw6IGVuY29kZVVSSShgJHt0aGlzLnVybH0vJHtyZW5kZXJQYXRofS9wdWJsaWMvJHtfcGF0aH0ke3F1ZXJ5U3RyaW5nfWApIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRGVsZXRlcyBmaWxlcyB3aXRoaW4gdGhlIHNhbWUgYnVja2V0XHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHBhdGhzIEFuIGFycmF5IG9mIGZpbGVzIHRvIGRlbGV0ZSwgaW5jbHVkaW5nIHRoZSBwYXRoIGFuZCBmaWxlIG5hbWUuIEZvciBleGFtcGxlIFtgJ2ZvbGRlci9pbWFnZS5wbmcnYF0uXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZShwYXRocykge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geWllbGQgKDAsIGZldGNoXzEucmVtb3ZlKSh0aGlzLmZldGNoLCBgJHt0aGlzLnVybH0vb2JqZWN0LyR7dGhpcy5idWNrZXRJZH1gLCB7IHByZWZpeGVzOiBwYXRocyB9LCB7IGhlYWRlcnM6IHRoaXMuaGVhZGVycyB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGEsIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGVycm9yc18xLmlzU3RvcmFnZUVycm9yKShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGZpbGUgbWV0YWRhdGFcclxuICAgICAqIEBwYXJhbSBpZCB0aGUgZmlsZSBpZCB0byByZXRyaWV2ZSBtZXRhZGF0YVxyXG4gICAgICovXHJcbiAgICAvLyBhc3luYyBnZXRNZXRhZGF0YShcclxuICAgIC8vICAgaWQ6IHN0cmluZ1xyXG4gICAgLy8gKTogUHJvbWlzZTxcclxuICAgIC8vICAgfCB7XHJcbiAgICAvLyAgICAgICBkYXRhOiBNZXRhZGF0YVxyXG4gICAgLy8gICAgICAgZXJyb3I6IG51bGxcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIHwge1xyXG4gICAgLy8gICAgICAgZGF0YTogbnVsbFxyXG4gICAgLy8gICAgICAgZXJyb3I6IFN0b3JhZ2VFcnJvclxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vID4ge1xyXG4gICAgLy8gICB0cnkge1xyXG4gICAgLy8gICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXQodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L21ldGFkYXRhLyR7aWR9YCwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSlcclxuICAgIC8vICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9XHJcbiAgICAvLyAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAvLyAgICAgaWYgKGlzU3RvcmFnZUVycm9yKGVycm9yKSkge1xyXG4gICAgLy8gICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICB0aHJvdyBlcnJvclxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBmaWxlIG1ldGFkYXRhXHJcbiAgICAgKiBAcGFyYW0gaWQgdGhlIGZpbGUgaWQgdG8gdXBkYXRlIG1ldGFkYXRhXHJcbiAgICAgKiBAcGFyYW0gbWV0YSB0aGUgbmV3IGZpbGUgbWV0YWRhdGFcclxuICAgICAqL1xyXG4gICAgLy8gYXN5bmMgdXBkYXRlTWV0YWRhdGEoXHJcbiAgICAvLyAgIGlkOiBzdHJpbmcsXHJcbiAgICAvLyAgIG1ldGE6IE1ldGFkYXRhXHJcbiAgICAvLyApOiBQcm9taXNlPFxyXG4gICAgLy8gICB8IHtcclxuICAgIC8vICAgICAgIGRhdGE6IE1ldGFkYXRhXHJcbiAgICAvLyAgICAgICBlcnJvcjogbnVsbFxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfCB7XHJcbiAgICAvLyAgICAgICBkYXRhOiBudWxsXHJcbiAgICAvLyAgICAgICBlcnJvcjogU3RvcmFnZUVycm9yXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gPiB7XHJcbiAgICAvLyAgIHRyeSB7XHJcbiAgICAvLyAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHBvc3QoXHJcbiAgICAvLyAgICAgICB0aGlzLmZldGNoLFxyXG4gICAgLy8gICAgICAgYCR7dGhpcy51cmx9L21ldGFkYXRhLyR7aWR9YCxcclxuICAgIC8vICAgICAgIHsgLi4ubWV0YSB9LFxyXG4gICAgLy8gICAgICAgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfVxyXG4gICAgLy8gICAgIClcclxuICAgIC8vICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9XHJcbiAgICAvLyAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAvLyAgICAgaWYgKGlzU3RvcmFnZUVycm9yKGVycm9yKSkge1xyXG4gICAgLy8gICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICB0aHJvdyBlcnJvclxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgICAvKipcclxuICAgICAqIExpc3RzIGFsbCB0aGUgZmlsZXMgd2l0aGluIGEgYnVja2V0LlxyXG4gICAgICogQHBhcmFtIHBhdGggVGhlIGZvbGRlciBwYXRoLlxyXG4gICAgICovXHJcbiAgICBsaXN0KHBhdGgsIG9wdGlvbnMsIHBhcmFtZXRlcnMpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1NFQVJDSF9PUFRJT05TKSwgb3B0aW9ucyksIHsgcHJlZml4OiBwYXRoIHx8ICcnIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkICgwLCBmZXRjaF8xLnBvc3QpKHRoaXMuZmV0Y2gsIGAke3RoaXMudXJsfS9vYmplY3QvbGlzdC8ke3RoaXMuYnVja2V0SWR9YCwgYm9keSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSwgcGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCgwLCBlcnJvcnNfMS5pc1N0b3JhZ2VFcnJvcikoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbmNvZGVNZXRhZGF0YShtZXRhZGF0YSkge1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShtZXRhZGF0YSk7XHJcbiAgICB9XHJcbiAgICB0b0Jhc2U2NChkYXRhKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShkYXRhKS50b1N0cmluZygnYmFzZTY0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBidG9hKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgX2dldEZpbmFsUGF0aChwYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuYnVja2V0SWR9LyR7cGF0aH1gO1xyXG4gICAgfVxyXG4gICAgX3JlbW92ZUVtcHR5Rm9sZGVycyhwYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXlxcL3xcXC8kL2csICcnKS5yZXBsYWNlKC9cXC8rL2csICcvJyk7XHJcbiAgICB9XHJcbiAgICB0cmFuc2Zvcm1PcHRzVG9RdWVyeVN0cmluZyh0cmFuc2Zvcm0pIHtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSBbXTtcclxuICAgICAgICBpZiAodHJhbnNmb3JtLndpZHRoKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKGB3aWR0aD0ke3RyYW5zZm9ybS53aWR0aH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRyYW5zZm9ybS5oZWlnaHQpIHtcclxuICAgICAgICAgICAgcGFyYW1zLnB1c2goYGhlaWdodD0ke3RyYW5zZm9ybS5oZWlnaHR9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0cmFuc2Zvcm0ucmVzaXplKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKGByZXNpemU9JHt0cmFuc2Zvcm0ucmVzaXplfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHJhbnNmb3JtLmZvcm1hdCkge1xyXG4gICAgICAgICAgICBwYXJhbXMucHVzaChgZm9ybWF0PSR7dHJhbnNmb3JtLmZvcm1hdH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRyYW5zZm9ybS5xdWFsaXR5KSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKGBxdWFsaXR5PSR7dHJhbnNmb3JtLnF1YWxpdHl9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJhbXMuam9pbignJicpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IFN0b3JhZ2VGaWxlQXBpO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdG9yYWdlRmlsZUFwaS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/storage-js/dist/main/packages/StorageFileApi.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/supabase-js/dist/main/SupabaseClient.js":
/*!************************************************************************!*\
!*** ./node_modules/@supabase/supabase-js/dist/main/SupabaseClient.js ***!
\************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst functions_js_1 = __webpack_require__(/*! @supabase/functions-js */ \"(ssr)/./node_modules/@supabase/functions-js/dist/main/index.js\");\r\nconst postgrest_js_1 = __webpack_require__(/*! @supabase/postgrest-js */ \"(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/index.js\");\r\nconst realtime_js_1 = __webpack_require__(/*! @supabase/realtime-js */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/index.js\");\r\nconst storage_js_1 = __webpack_require__(/*! @supabase/storage-js */ \"(ssr)/./node_modules/@supabase/storage-js/dist/main/index.js\");\r\nconst constants_1 = __webpack_require__(/*! ./lib/constants */ \"(ssr)/./node_modules/@supabase/supabase-js/dist/main/lib/constants.js\");\r\nconst fetch_1 = __webpack_require__(/*! ./lib/fetch */ \"(ssr)/./node_modules/@supabase/supabase-js/dist/main/lib/fetch.js\");\r\nconst helpers_1 = __webpack_require__(/*! ./lib/helpers */ \"(ssr)/./node_modules/@supabase/supabase-js/dist/main/lib/helpers.js\");\r\nconst SupabaseAuthClient_1 = __webpack_require__(/*! ./lib/SupabaseAuthClient */ \"(ssr)/./node_modules/@supabase/supabase-js/dist/main/lib/SupabaseAuthClient.js\");\r\n/**\r\n * Supabase Client.\r\n *\r\n * An isomorphic Javascript client for interacting with Postgres.\r\n */\r\nclass SupabaseClient {\r\n /**\r\n * Create a new client for use in the browser.\r\n * @param supabaseUrl The unique Supabase URL which is supplied when you create a new project in your project dashboard.\r\n * @param supabaseKey The unique Supabase Key which is supplied when you create a new project in your project dashboard.\r\n * @param options.db.schema You can switch in between schemas. The schema needs to be on the list of exposed schemas inside Supabase.\r\n * @param options.auth.autoRefreshToken Set to \"true\" if you want to automatically refresh the token before expiring.\r\n * @param options.auth.persistSession Set to \"true\" if you want to automatically save the user session into local storage.\r\n * @param options.auth.detectSessionInUrl Set to \"true\" if you want to automatically detects OAuth grants in the URL and signs in the user.\r\n * @param options.realtime Options passed along to realtime-js constructor.\r\n * @param options.global.fetch A custom fetch implementation.\r\n * @param options.global.headers Any additional headers to send with each network request.\r\n */\r\n constructor(supabaseUrl, supabaseKey, options) {\r\n var _a, _b, _c;\r\n this.supabaseUrl = supabaseUrl;\r\n this.supabaseKey = supabaseKey;\r\n if (!supabaseUrl)\r\n throw new Error('supabaseUrl is required.');\r\n if (!supabaseKey)\r\n throw new Error('supabaseKey is required.');\r\n const _supabaseUrl = (0, helpers_1.ensureTrailingSlash)(supabaseUrl);\r\n const baseUrl = new URL(_supabaseUrl);\r\n this.realtimeUrl = new URL('realtime/v1', baseUrl);\r\n this.realtimeUrl.protocol = this.realtimeUrl.protocol.replace('http', 'ws');\r\n this.authUrl = new URL('auth/v1', baseUrl);\r\n this.storageUrl = new URL('storage/v1', baseUrl);\r\n this.functionsUrl = new URL('functions/v1', baseUrl);\r\n // default storage key uses the supabase project ref as a namespace\r\n const defaultStorageKey = `sb-${baseUrl.hostname.split('.')[0]}-auth-token`;\r\n const DEFAULTS = {\r\n db: constants_1.DEFAULT_DB_OPTIONS,\r\n realtime: constants_1.DEFAULT_REALTIME_OPTIONS,\r\n auth: Object.assign(Object.assign({}, constants_1.DEFAULT_AUTH_OPTIONS), { storageKey: defaultStorageKey }),\r\n global: constants_1.DEFAULT_GLOBAL_OPTIONS,\r\n };\r\n const settings = (0, helpers_1.applySettingDefaults)(options !== null && options !== void 0 ? options : {}, DEFAULTS);\r\n this.storageKey = (_a = settings.auth.storageKey) !== null && _a !== void 0 ? _a : '';\r\n this.headers = (_b = settings.global.headers) !== null && _b !== void 0 ? _b : {};\r\n if (!settings.accessToken) {\r\n this.auth = this._initSupabaseAuthClient((_c = settings.auth) !== null && _c !== void 0 ? _c : {}, this.headers, settings.global.fetch);\r\n }\r\n else {\r\n this.accessToken = settings.accessToken;\r\n this.auth = new Proxy({}, {\r\n get: (_, prop) => {\r\n throw new Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(prop)} is not possible`);\r\n },\r\n });\r\n }\r\n this.fetch = (0, fetch_1.fetchWithAuth)(supabaseKey, this._getAccessToken.bind(this), settings.global.fetch);\r\n this.realtime = this._initRealtimeClient(Object.assign({ headers: this.headers, accessToken: this._getAccessToken.bind(this) }, settings.realtime));\r\n this.rest = new postgrest_js_1.PostgrestClient(new URL('rest/v1', baseUrl).href, {\r\n headers: this.headers,\r\n schema: settings.db.schema,\r\n fetch: this.fetch,\r\n });\r\n if (!settings.accessToken) {\r\n this._listenForAuthEvents();\r\n }\r\n }\r\n /**\r\n * Supabase Functions allows you to deploy and invoke edge functions.\r\n */\r\n get functions() {\r\n return new functions_js_1.FunctionsClient(this.functionsUrl.href, {\r\n headers: this.headers,\r\n customFetch: this.fetch,\r\n });\r\n }\r\n /**\r\n * Supabase Storage allows you to manage user-generated content, such as photos or videos.\r\n */\r\n get storage() {\r\n return new storage_js_1.StorageClient(this.storageUrl.href, this.headers, this.fetch);\r\n }\r\n /**\r\n * Perform a query on a table or a view.\r\n *\r\n * @param relation - The table or view name to query\r\n */\r\n from(relation) {\r\n return this.rest.from(relation);\r\n }\r\n // NOTE: signatures must be kept in sync with PostgrestClient.schema\r\n /**\r\n * Select a schema to query or perform an function (rpc) call.\r\n *\r\n * The schema needs to be on the list of exposed schemas inside Supabase.\r\n *\r\n * @param schema - The schema to query\r\n */\r\n schema(schema) {\r\n return this.rest.schema(schema);\r\n }\r\n // NOTE: signatures must be kept in sync with PostgrestClient.rpc\r\n /**\r\n * Perform a function call.\r\n *\r\n * @param fn - The function name to call\r\n * @param args - The arguments to pass to the function call\r\n * @param options - Named parameters\r\n * @param options.head - When set to `true`, `data` will not be returned.\r\n * Useful if you only need the count.\r\n * @param options.get - When set to `true`, the function will be called with\r\n * read-only access mode.\r\n * @param options.count - Count algorithm to use to count rows returned by the\r\n * function. Only applicable for [set-returning\r\n * functions](https://www.postgresql.org/docs/current/functions-srf.html).\r\n *\r\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\r\n * hood.\r\n *\r\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\r\n * statistics under the hood.\r\n *\r\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\r\n * numbers.\r\n */\r\n rpc(fn, args = {}, options = {}) {\r\n return this.rest.rpc(fn, args, options);\r\n }\r\n /**\r\n * Creates a Realtime channel with Broadcast, Presence, and Postgres Changes.\r\n *\r\n * @param {string} name - The name of the Realtime channel.\r\n * @param {Object} opts - The options to pass to the Realtime channel.\r\n *\r\n */\r\n channel(name, opts = { config: {} }) {\r\n return this.realtime.channel(name, opts);\r\n }\r\n /**\r\n * Returns all Realtime channels.\r\n */\r\n getChannels() {\r\n return this.realtime.getChannels();\r\n }\r\n /**\r\n * Unsubscribes and removes Realtime channel from Realtime client.\r\n *\r\n * @param {RealtimeChannel} channel - The name of the Realtime channel.\r\n *\r\n */\r\n removeChannel(channel) {\r\n return this.realtime.removeChannel(channel);\r\n }\r\n /**\r\n * Unsubscribes and removes all Realtime channels from Realtime client.\r\n */\r\n removeAllChannels() {\r\n return this.realtime.removeAllChannels();\r\n }\r\n _getAccessToken() {\r\n var _a, _b;\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (this.accessToken) {\r\n return yield this.accessToken();\r\n }\r\n const { data } = yield this.auth.getSession();\r\n return (_b = (_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token) !== null && _b !== void 0 ? _b : null;\r\n });\r\n }\r\n _initSupabaseAuthClient({ autoRefreshToken, persistSession, detectSessionInUrl, storage, storageKey, flowType, lock, debug, }, headers, fetch) {\r\n const authHeaders = {\r\n Authorization: `Bearer ${this.supabaseKey}`,\r\n apikey: `${this.supabaseKey}`,\r\n };\r\n return new SupabaseAuthClient_1.SupabaseAuthClient({\r\n url: this.authUrl.href,\r\n headers: Object.assign(Object.assign({}, authHeaders), headers),\r\n storageKey: storageKey,\r\n autoRefreshToken,\r\n persistSession,\r\n detectSessionInUrl,\r\n storage,\r\n flowType,\r\n lock,\r\n debug,\r\n fetch,\r\n // auth checks if there is a custom authorizaiton header using this flag\r\n // so it knows whether to return an error when getUser is called with no session\r\n hasCustomAuthorizationHeader: 'Authorization' in this.headers,\r\n });\r\n }\r\n _initRealtimeClient(options) {\r\n return new realtime_js_1.RealtimeClient(this.realtimeUrl.href, Object.assign(Object.assign({}, options), { params: Object.assign({ apikey: this.supabaseKey }, options === null || options === void 0 ? void 0 : options.params) }));\r\n }\r\n _listenForAuthEvents() {\r\n let data = this.auth.onAuthStateChange((event, session) => {\r\n this._handleTokenChanged(event, 'CLIENT', session === null || session === void 0 ? void 0 : session.access_token);\r\n });\r\n return data;\r\n }\r\n _handleTokenChanged(event, source, token) {\r\n if ((event === 'TOKEN_REFRESHED' || event === 'SIGNED_IN') &&\r\n this.changedAccessToken !== token) {\r\n this.changedAccessToken = token;\r\n }\r\n else if (event === 'SIGNED_OUT') {\r\n this.realtime.setAuth();\r\n if (source == 'STORAGE')\r\n this.auth.signOut();\r\n this.changedAccessToken = undefined;\r\n }\r\n }\r\n}\r\nexports[\"default\"] = SupabaseClient;\r\n//# sourceMappingURL=SupabaseClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N1cGFiYXNlLWpzL2Rpc3QvbWFpbi9TdXBhYmFzZUNsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsNEJBQTRCLCtEQUErRCxpQkFBaUI7QUFDNUc7QUFDQSxvQ0FBb0MsTUFBTSwrQkFBK0IsWUFBWTtBQUNyRixtQ0FBbUMsTUFBTSxtQ0FBbUMsWUFBWTtBQUN4RixnQ0FBZ0M7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsdUJBQXVCLG1CQUFPLENBQUMsOEZBQXdCO0FBQ3ZELHVCQUF1QixtQkFBTyxDQUFDLDZGQUF3QjtBQUN2RCxzQkFBc0IsbUJBQU8sQ0FBQyw0RkFBdUI7QUFDckQscUJBQXFCLG1CQUFPLENBQUMsMEZBQXNCO0FBQ25ELG9CQUFvQixtQkFBTyxDQUFDLDhGQUFpQjtBQUM3QyxnQkFBZ0IsbUJBQU8sQ0FBQyxzRkFBYTtBQUNyQyxrQkFBa0IsbUJBQU8sQ0FBQywwRkFBZTtBQUN6Qyw2QkFBNkIsbUJBQU8sQ0FBQyxnSEFBMEI7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsK0JBQStCO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCx1Q0FBdUMsK0JBQStCO0FBQ3RIO0FBQ0E7QUFDQSxrSEFBa0g7QUFDbEg7QUFDQTtBQUNBO0FBQ0EsNkdBQTZHO0FBQzdHO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBLGlKQUFpSixjQUFjO0FBQy9KLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBLGlFQUFpRSxxRUFBcUU7QUFDdEk7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGNBQWM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBLDJCQUEyQixZQUFZO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7QUFDQSxTQUFTO0FBQ1Q7QUFDQSw4QkFBOEIsbUdBQW1HO0FBQ2pJO0FBQ0EscUNBQXFDLGlCQUFpQjtBQUN0RCx1QkFBdUIsaUJBQWlCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHFHQUFxRyxjQUFjLHdCQUF3QiwwQkFBMEIscUVBQXFFO0FBQzFPO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N1cGFiYXNlLWpzL2Rpc3QvbWFpbi9TdXBhYmFzZUNsaWVudC5qcz9jNDZiIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuY29uc3QgZnVuY3Rpb25zX2pzXzEgPSByZXF1aXJlKFwiQHN1cGFiYXNlL2Z1bmN0aW9ucy1qc1wiKTtcclxuY29uc3QgcG9zdGdyZXN0X2pzXzEgPSByZXF1aXJlKFwiQHN1cGFiYXNlL3Bvc3RncmVzdC1qc1wiKTtcclxuY29uc3QgcmVhbHRpbWVfanNfMSA9IHJlcXVpcmUoXCJAc3VwYWJhc2UvcmVhbHRpbWUtanNcIik7XHJcbmNvbnN0IHN0b3JhZ2VfanNfMSA9IHJlcXVpcmUoXCJAc3VwYWJhc2Uvc3RvcmFnZS1qc1wiKTtcclxuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9saWIvY29uc3RhbnRzXCIpO1xyXG5jb25zdCBmZXRjaF8xID0gcmVxdWlyZShcIi4vbGliL2ZldGNoXCIpO1xyXG5jb25zdCBoZWxwZXJzXzEgPSByZXF1aXJlKFwiLi9saWIvaGVscGVyc1wiKTtcclxuY29uc3QgU3VwYWJhc2VBdXRoQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9saWIvU3VwYWJhc2VBdXRoQ2xpZW50XCIpO1xyXG4vKipcclxuICogU3VwYWJhc2UgQ2xpZW50LlxyXG4gKlxyXG4gKiBBbiBpc29tb3JwaGljIEphdmFzY3JpcHQgY2xpZW50IGZvciBpbnRlcmFjdGluZyB3aXRoIFBvc3RncmVzLlxyXG4gKi9cclxuY2xhc3MgU3VwYWJhc2VDbGllbnQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSBuZXcgY2xpZW50IGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuXHJcbiAgICAgKiBAcGFyYW0gc3VwYWJhc2VVcmwgVGhlIHVuaXF1ZSBTdXBhYmFzZSBVUkwgd2hpY2ggaXMgc3VwcGxpZWQgd2hlbiB5b3UgY3JlYXRlIGEgbmV3IHByb2plY3QgaW4geW91ciBwcm9qZWN0IGRhc2hib2FyZC5cclxuICAgICAqIEBwYXJhbSBzdXBhYmFzZUtleSBUaGUgdW5pcXVlIFN1cGFiYXNlIEtleSB3aGljaCBpcyBzdXBwbGllZCB3aGVuIHlvdSBjcmVhdGUgYSBuZXcgcHJvamVjdCBpbiB5b3VyIHByb2plY3QgZGFzaGJvYXJkLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZGIuc2NoZW1hIFlvdSBjYW4gc3dpdGNoIGluIGJldHdlZW4gc2NoZW1hcy4gVGhlIHNjaGVtYSBuZWVkcyB0byBiZSBvbiB0aGUgbGlzdCBvZiBleHBvc2VkIHNjaGVtYXMgaW5zaWRlIFN1cGFiYXNlLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuYXV0aC5hdXRvUmVmcmVzaFRva2VuIFNldCB0byBcInRydWVcIiBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IHJlZnJlc2ggdGhlIHRva2VuIGJlZm9yZSBleHBpcmluZy5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmF1dGgucGVyc2lzdFNlc3Npb24gU2V0IHRvIFwidHJ1ZVwiIGlmIHlvdSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgc2F2ZSB0aGUgdXNlciBzZXNzaW9uIGludG8gbG9jYWwgc3RvcmFnZS5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmF1dGguZGV0ZWN0U2Vzc2lvbkluVXJsIFNldCB0byBcInRydWVcIiBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IGRldGVjdHMgT0F1dGggZ3JhbnRzIGluIHRoZSBVUkwgYW5kIHNpZ25zIGluIHRoZSB1c2VyLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMucmVhbHRpbWUgT3B0aW9ucyBwYXNzZWQgYWxvbmcgdG8gcmVhbHRpbWUtanMgY29uc3RydWN0b3IuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5nbG9iYWwuZmV0Y2ggQSBjdXN0b20gZmV0Y2ggaW1wbGVtZW50YXRpb24uXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5nbG9iYWwuaGVhZGVycyBBbnkgYWRkaXRpb25hbCBoZWFkZXJzIHRvIHNlbmQgd2l0aCBlYWNoIG5ldHdvcmsgcmVxdWVzdC5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3Ioc3VwYWJhc2VVcmwsIHN1cGFiYXNlS2V5LCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgdGhpcy5zdXBhYmFzZVVybCA9IHN1cGFiYXNlVXJsO1xyXG4gICAgICAgIHRoaXMuc3VwYWJhc2VLZXkgPSBzdXBhYmFzZUtleTtcclxuICAgICAgICBpZiAoIXN1cGFiYXNlVXJsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N1cGFiYXNlVXJsIGlzIHJlcXVpcmVkLicpO1xyXG4gICAgICAgIGlmICghc3VwYWJhc2VLZXkpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3VwYWJhc2VLZXkgaXMgcmVxdWlyZWQuJyk7XHJcbiAgICAgICAgY29uc3QgX3N1cGFiYXNlVXJsID0gKDAsIGhlbHBlcnNfMS5lbnN1cmVUcmFpbGluZ1NsYXNoKShzdXBhYmFzZVVybCk7XHJcbiAgICAgICAgY29uc3QgYmFzZVVybCA9IG5ldyBVUkwoX3N1cGFiYXNlVXJsKTtcclxuICAgICAgICB0aGlzLnJlYWx0aW1lVXJsID0gbmV3IFVSTCgncmVhbHRpbWUvdjEnLCBiYXNlVXJsKTtcclxuICAgICAgICB0aGlzLnJlYWx0aW1lVXJsLnByb3RvY29sID0gdGhpcy5yZWFsdGltZVVybC5wcm90b2NvbC5yZXBsYWNlKCdodHRwJywgJ3dzJyk7XHJcbiAgICAgICAgdGhpcy5hdXRoVXJsID0gbmV3IFVSTCgnYXV0aC92MScsIGJhc2VVcmwpO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVVybCA9IG5ldyBVUkwoJ3N0b3JhZ2UvdjEnLCBiYXNlVXJsKTtcclxuICAgICAgICB0aGlzLmZ1bmN0aW9uc1VybCA9IG5ldyBVUkwoJ2Z1bmN0aW9ucy92MScsIGJhc2VVcmwpO1xyXG4gICAgICAgIC8vIGRlZmF1bHQgc3RvcmFnZSBrZXkgdXNlcyB0aGUgc3VwYWJhc2UgcHJvamVjdCByZWYgYXMgYSBuYW1lc3BhY2VcclxuICAgICAgICBjb25zdCBkZWZhdWx0U3RvcmFnZUtleSA9IGBzYi0ke2Jhc2VVcmwuaG9zdG5hbWUuc3BsaXQoJy4nKVswXX0tYXV0aC10b2tlbmA7XHJcbiAgICAgICAgY29uc3QgREVGQVVMVFMgPSB7XHJcbiAgICAgICAgICAgIGRiOiBjb25zdGFudHNfMS5ERUZBVUxUX0RCX09QVElPTlMsXHJcbiAgICAgICAgICAgIHJlYWx0aW1lOiBjb25zdGFudHNfMS5ERUZBVUxUX1JFQUxUSU1FX09QVElPTlMsXHJcbiAgICAgICAgICAgIGF1dGg6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29uc3RhbnRzXzEuREVGQVVMVF9BVVRIX09QVElPTlMpLCB7IHN0b3JhZ2VLZXk6IGRlZmF1bHRTdG9yYWdlS2V5IH0pLFxyXG4gICAgICAgICAgICBnbG9iYWw6IGNvbnN0YW50c18xLkRFRkFVTFRfR0xPQkFMX09QVElPTlMsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9ICgwLCBoZWxwZXJzXzEuYXBwbHlTZXR0aW5nRGVmYXVsdHMpKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9LCBERUZBVUxUUyk7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlS2V5ID0gKF9hID0gc2V0dGluZ3MuYXV0aC5zdG9yYWdlS2V5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcclxuICAgICAgICB0aGlzLmhlYWRlcnMgPSAoX2IgPSBzZXR0aW5ncy5nbG9iYWwuaGVhZGVycykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge307XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncy5hY2Nlc3NUb2tlbikge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGggPSB0aGlzLl9pbml0U3VwYWJhc2VBdXRoQ2xpZW50KChfYyA9IHNldHRpbmdzLmF1dGgpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IHt9LCB0aGlzLmhlYWRlcnMsIHNldHRpbmdzLmdsb2JhbC5mZXRjaCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gc2V0dGluZ3MuYWNjZXNzVG9rZW47XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aCA9IG5ldyBQcm94eSh7fSwge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiAoXywgcHJvcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL3N1cGFiYXNlLWpzOiBTdXBhYmFzZSBDbGllbnQgaXMgY29uZmlndXJlZCB3aXRoIHRoZSBhY2Nlc3NUb2tlbiBvcHRpb24sIGFjY2Vzc2luZyBzdXBhYmFzZS5hdXRoLiR7U3RyaW5nKHByb3ApfSBpcyBub3QgcG9zc2libGVgKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZldGNoID0gKDAsIGZldGNoXzEuZmV0Y2hXaXRoQXV0aCkoc3VwYWJhc2VLZXksIHRoaXMuX2dldEFjY2Vzc1Rva2VuLmJpbmQodGhpcyksIHNldHRpbmdzLmdsb2JhbC5mZXRjaCk7XHJcbiAgICAgICAgdGhpcy5yZWFsdGltZSA9IHRoaXMuX2luaXRSZWFsdGltZUNsaWVudChPYmplY3QuYXNzaWduKHsgaGVhZGVyczogdGhpcy5oZWFkZXJzLCBhY2Nlc3NUb2tlbjogdGhpcy5fZ2V0QWNjZXNzVG9rZW4uYmluZCh0aGlzKSB9LCBzZXR0aW5ncy5yZWFsdGltZSkpO1xyXG4gICAgICAgIHRoaXMucmVzdCA9IG5ldyBwb3N0Z3Jlc3RfanNfMS5Qb3N0Z3Jlc3RDbGllbnQobmV3IFVSTCgncmVzdC92MScsIGJhc2VVcmwpLmhyZWYsIHtcclxuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICBzY2hlbWE6IHNldHRpbmdzLmRiLnNjaGVtYSxcclxuICAgICAgICAgICAgZmV0Y2g6IHRoaXMuZmV0Y2gsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncy5hY2Nlc3NUb2tlbikge1xyXG4gICAgICAgICAgICB0aGlzLl9saXN0ZW5Gb3JBdXRoRXZlbnRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTdXBhYmFzZSBGdW5jdGlvbnMgYWxsb3dzIHlvdSB0byBkZXBsb3kgYW5kIGludm9rZSBlZGdlIGZ1bmN0aW9ucy5cclxuICAgICAqL1xyXG4gICAgZ2V0IGZ1bmN0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gbmV3IGZ1bmN0aW9uc19qc18xLkZ1bmN0aW9uc0NsaWVudCh0aGlzLmZ1bmN0aW9uc1VybC5ocmVmLCB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgY3VzdG9tRmV0Y2g6IHRoaXMuZmV0Y2gsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFN1cGFiYXNlIFN0b3JhZ2UgYWxsb3dzIHlvdSB0byBtYW5hZ2UgdXNlci1nZW5lcmF0ZWQgY29udGVudCwgc3VjaCBhcyBwaG90b3Mgb3IgdmlkZW9zLlxyXG4gICAgICovXHJcbiAgICBnZXQgc3RvcmFnZSgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IHN0b3JhZ2VfanNfMS5TdG9yYWdlQ2xpZW50KHRoaXMuc3RvcmFnZVVybC5ocmVmLCB0aGlzLmhlYWRlcnMsIHRoaXMuZmV0Y2gpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtIGEgcXVlcnkgb24gYSB0YWJsZSBvciBhIHZpZXcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJlbGF0aW9uIC0gVGhlIHRhYmxlIG9yIHZpZXcgbmFtZSB0byBxdWVyeVxyXG4gICAgICovXHJcbiAgICBmcm9tKHJlbGF0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdC5mcm9tKHJlbGF0aW9uKTtcclxuICAgIH1cclxuICAgIC8vIE5PVEU6IHNpZ25hdHVyZXMgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBQb3N0Z3Jlc3RDbGllbnQuc2NoZW1hXHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdCBhIHNjaGVtYSB0byBxdWVyeSBvciBwZXJmb3JtIGFuIGZ1bmN0aW9uIChycGMpIGNhbGwuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHNjaGVtYSBuZWVkcyB0byBiZSBvbiB0aGUgbGlzdCBvZiBleHBvc2VkIHNjaGVtYXMgaW5zaWRlIFN1cGFiYXNlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzY2hlbWEgLSBUaGUgc2NoZW1hIHRvIHF1ZXJ5XHJcbiAgICAgKi9cclxuICAgIHNjaGVtYShzY2hlbWEpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXN0LnNjaGVtYShzY2hlbWEpO1xyXG4gICAgfVxyXG4gICAgLy8gTk9URTogc2lnbmF0dXJlcyBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIFBvc3RncmVzdENsaWVudC5ycGNcclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybSBhIGZ1bmN0aW9uIGNhbGwuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbFxyXG4gICAgICogQHBhcmFtIGFyZ3MgLSBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uIGNhbGxcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gTmFtZWQgcGFyYW1ldGVyc1xyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuaGVhZCAtIFdoZW4gc2V0IHRvIGB0cnVlYCwgYGRhdGFgIHdpbGwgbm90IGJlIHJldHVybmVkLlxyXG4gICAgICogVXNlZnVsIGlmIHlvdSBvbmx5IG5lZWQgdGhlIGNvdW50LlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZ2V0IC0gV2hlbiBzZXQgdG8gYHRydWVgLCB0aGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aFxyXG4gICAgICogcmVhZC1vbmx5IGFjY2VzcyBtb2RlLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuY291bnQgLSBDb3VudCBhbGdvcml0aG0gdG8gdXNlIHRvIGNvdW50IHJvd3MgcmV0dXJuZWQgYnkgdGhlXHJcbiAgICAgKiBmdW5jdGlvbi4gT25seSBhcHBsaWNhYmxlIGZvciBbc2V0LXJldHVybmluZ1xyXG4gICAgICogZnVuY3Rpb25zXShodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzL2N1cnJlbnQvZnVuY3Rpb25zLXNyZi5odG1sKS5cclxuICAgICAqXHJcbiAgICAgKiBgXCJleGFjdFwiYDogRXhhY3QgYnV0IHNsb3cgY291bnQgYWxnb3JpdGhtLiBQZXJmb3JtcyBhIGBDT1VOVCgqKWAgdW5kZXIgdGhlXHJcbiAgICAgKiBob29kLlxyXG4gICAgICpcclxuICAgICAqIGBcInBsYW5uZWRcImA6IEFwcHJveGltYXRlZCBidXQgZmFzdCBjb3VudCBhbGdvcml0aG0uIFVzZXMgdGhlIFBvc3RncmVzXHJcbiAgICAgKiBzdGF0aXN0aWNzIHVuZGVyIHRoZSBob29kLlxyXG4gICAgICpcclxuICAgICAqIGBcImVzdGltYXRlZFwiYDogVXNlcyBleGFjdCBjb3VudCBmb3IgbG93IG51bWJlcnMgYW5kIHBsYW5uZWQgY291bnQgZm9yIGhpZ2hcclxuICAgICAqIG51bWJlcnMuXHJcbiAgICAgKi9cclxuICAgIHJwYyhmbiwgYXJncyA9IHt9LCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXN0LnJwYyhmbiwgYXJncywgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBSZWFsdGltZSBjaGFubmVsIHdpdGggQnJvYWRjYXN0LCBQcmVzZW5jZSwgYW5kIFBvc3RncmVzIENoYW5nZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgUmVhbHRpbWUgY2hhbm5lbC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgUmVhbHRpbWUgY2hhbm5lbC5cclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIGNoYW5uZWwobmFtZSwgb3B0cyA9IHsgY29uZmlnOiB7fSB9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhbHRpbWUuY2hhbm5lbChuYW1lLCBvcHRzKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwgUmVhbHRpbWUgY2hhbm5lbHMuXHJcbiAgICAgKi9cclxuICAgIGdldENoYW5uZWxzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWx0aW1lLmdldENoYW5uZWxzKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVuc3Vic2NyaWJlcyBhbmQgcmVtb3ZlcyBSZWFsdGltZSBjaGFubmVsIGZyb20gUmVhbHRpbWUgY2xpZW50LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UmVhbHRpbWVDaGFubmVsfSBjaGFubmVsIC0gVGhlIG5hbWUgb2YgdGhlIFJlYWx0aW1lIGNoYW5uZWwuXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICByZW1vdmVDaGFubmVsKGNoYW5uZWwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFsdGltZS5yZW1vdmVDaGFubmVsKGNoYW5uZWwpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVbnN1YnNjcmliZXMgYW5kIHJlbW92ZXMgYWxsIFJlYWx0aW1lIGNoYW5uZWxzIGZyb20gUmVhbHRpbWUgY2xpZW50LlxyXG4gICAgICovXHJcbiAgICByZW1vdmVBbGxDaGFubmVscygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFsdGltZS5yZW1vdmVBbGxDaGFubmVscygpO1xyXG4gICAgfVxyXG4gICAgX2dldEFjY2Vzc1Rva2VuKCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYWNjZXNzVG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCB0aGlzLmFjY2Vzc1Rva2VuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgeyBkYXRhIH0gPSB5aWVsZCB0aGlzLmF1dGguZ2V0U2Vzc2lvbigpO1xyXG4gICAgICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gZGF0YS5zZXNzaW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWNjZXNzX3Rva2VuKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX2luaXRTdXBhYmFzZUF1dGhDbGllbnQoeyBhdXRvUmVmcmVzaFRva2VuLCBwZXJzaXN0U2Vzc2lvbiwgZGV0ZWN0U2Vzc2lvbkluVXJsLCBzdG9yYWdlLCBzdG9yYWdlS2V5LCBmbG93VHlwZSwgbG9jaywgZGVidWcsIH0sIGhlYWRlcnMsIGZldGNoKSB7XHJcbiAgICAgICAgY29uc3QgYXV0aEhlYWRlcnMgPSB7XHJcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLnN1cGFiYXNlS2V5fWAsXHJcbiAgICAgICAgICAgIGFwaWtleTogYCR7dGhpcy5zdXBhYmFzZUtleX1gLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTdXBhYmFzZUF1dGhDbGllbnRfMS5TdXBhYmFzZUF1dGhDbGllbnQoe1xyXG4gICAgICAgICAgICB1cmw6IHRoaXMuYXV0aFVybC5ocmVmLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGF1dGhIZWFkZXJzKSwgaGVhZGVycyksXHJcbiAgICAgICAgICAgIHN0b3JhZ2VLZXk6IHN0b3JhZ2VLZXksXHJcbiAgICAgICAgICAgIGF1dG9SZWZyZXNoVG9rZW4sXHJcbiAgICAgICAgICAgIHBlcnNpc3RTZXNzaW9uLFxyXG4gICAgICAgICAgICBkZXRlY3RTZXNzaW9uSW5VcmwsXHJcbiAgICAgICAgICAgIHN0b3JhZ2UsXHJcbiAgICAgICAgICAgIGZsb3dUeXBlLFxyXG4gICAgICAgICAgICBsb2NrLFxyXG4gICAgICAgICAgICBkZWJ1ZyxcclxuICAgICAgICAgICAgZmV0Y2gsXHJcbiAgICAgICAgICAgIC8vIGF1dGggY2hlY2tzIGlmIHRoZXJlIGlzIGEgY3VzdG9tIGF1dGhvcml6YWl0b24gaGVhZGVyIHVzaW5nIHRoaXMgZmxhZ1xyXG4gICAgICAgICAgICAvLyBzbyBpdCBrbm93cyB3aGV0aGVyIHRvIHJldHVybiBhbiBlcnJvciB3aGVuIGdldFVzZXIgaXMgY2FsbGVkIHdpdGggbm8gc2Vzc2lvblxyXG4gICAgICAgICAgICBoYXNDdXN0b21BdXRob3JpemF0aW9uSGVhZGVyOiAnQXV0aG9yaXphdGlvbicgaW4gdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX2luaXRSZWFsdGltZUNsaWVudChvcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyByZWFsdGltZV9qc18xLlJlYWx0aW1lQ2xpZW50KHRoaXMucmVhbHRpbWVVcmwuaHJlZiwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBwYXJhbXM6IE9iamVjdC5hc3NpZ24oeyBhcGlrZXk6IHRoaXMuc3VwYWJhc2VLZXkgfSwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnBhcmFtcykgfSkpO1xyXG4gICAgfVxyXG4gICAgX2xpc3RlbkZvckF1dGhFdmVudHMoKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmF1dGgub25BdXRoU3RhdGVDaGFuZ2UoKGV2ZW50LCBzZXNzaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVRva2VuQ2hhbmdlZChldmVudCwgJ0NMSUVOVCcsIHNlc3Npb24gPT09IG51bGwgfHwgc2Vzc2lvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2Vzc2lvbi5hY2Nlc3NfdG9rZW4pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG4gICAgX2hhbmRsZVRva2VuQ2hhbmdlZChldmVudCwgc291cmNlLCB0b2tlbikge1xyXG4gICAgICAgIGlmICgoZXZlbnQgPT09ICdUT0tFTl9SRUZSRVNIRUQnIHx8IGV2ZW50ID09PSAnU0lHTkVEX0lOJykgJiZcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkQWNjZXNzVG9rZW4gIT09IHRva2VuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZEFjY2Vzc1Rva2VuID0gdG9rZW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV2ZW50ID09PSAnU0lHTkVEX09VVCcpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWFsdGltZS5zZXRBdXRoKCk7XHJcbiAgICAgICAgICAgIGlmIChzb3VyY2UgPT0gJ1NUT1JBR0UnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRoLnNpZ25PdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkQWNjZXNzVG9rZW4gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IFN1cGFiYXNlQ2xpZW50O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdXBhYmFzZUNsaWVudC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/supabase-js/dist/main/SupabaseClient.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/supabase-js/dist/main/index.js":
/*!***************************************************************!*\
!*** ./node_modules/@supabase/supabase-js/dist/main/index.js ***!
\***************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\r\n};\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.createClient = exports.SupabaseClient = exports.FunctionRegion = exports.FunctionsError = exports.FunctionsRelayError = exports.FunctionsFetchError = exports.FunctionsHttpError = exports.PostgrestError = void 0;\r\nconst SupabaseClient_1 = __importDefault(__webpack_require__(/*! ./SupabaseClient */ \"(ssr)/./node_modules/@supabase/supabase-js/dist/main/SupabaseClient.js\"));\r\n__exportStar(__webpack_require__(/*! @supabase/auth-js */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/index.js\"), exports);\r\nvar postgrest_js_1 = __webpack_require__(/*! @supabase/postgrest-js */ \"(ssr)/./node_modules/@supabase/postgrest-js/dist/cjs/index.js\");\r\nObject.defineProperty(exports, \"PostgrestError\", ({ enumerable: true, get: function () { return postgrest_js_1.PostgrestError; } }));\r\nvar functions_js_1 = __webpack_require__(/*! @supabase/functions-js */ \"(ssr)/./node_modules/@supabase/functions-js/dist/main/index.js\");\r\nObject.defineProperty(exports, \"FunctionsHttpError\", ({ enumerable: true, get: function () { return functions_js_1.FunctionsHttpError; } }));\r\nObject.defineProperty(exports, \"FunctionsFetchError\", ({ enumerable: true, get: function () { return functions_js_1.FunctionsFetchError; } }));\r\nObject.defineProperty(exports, \"FunctionsRelayError\", ({ enumerable: true, get: function () { return functions_js_1.FunctionsRelayError; } }));\r\nObject.defineProperty(exports, \"FunctionsError\", ({ enumerable: true, get: function () { return functions_js_1.FunctionsError; } }));\r\nObject.defineProperty(exports, \"FunctionRegion\", ({ enumerable: true, get: function () { return functions_js_1.FunctionRegion; } }));\r\n__exportStar(__webpack_require__(/*! @supabase/realtime-js */ \"(ssr)/./node_modules/@supabase/realtime-js/dist/main/index.js\"), exports);\r\nvar SupabaseClient_2 = __webpack_require__(/*! ./SupabaseClient */ \"(ssr)/./node_modules/@supabase/supabase-js/dist/main/SupabaseClient.js\");\r\nObject.defineProperty(exports, \"SupabaseClient\", ({ enumerable: true, get: function () { return __importDefault(SupabaseClient_2).default; } }));\r\n/**\r\n * Creates a new Supabase Client.\r\n */\r\nconst createClient = (supabaseUrl, supabaseKey, options) => {\r\n return new SupabaseClient_1.default(supabaseUrl, supabaseKey, options);\r\n};\r\nexports.createClient = createClient;\r\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N1cGFiYXNlLWpzL2Rpc3QvbWFpbi9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQ0FBb0M7QUFDbkQ7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELG9CQUFvQixHQUFHLHNCQUFzQixHQUFHLHNCQUFzQixHQUFHLHNCQUFzQixHQUFHLDJCQUEyQixHQUFHLDJCQUEyQixHQUFHLDBCQUEwQixHQUFHLHNCQUFzQjtBQUNqTix5Q0FBeUMsbUJBQU8sQ0FBQyxnR0FBa0I7QUFDbkUsYUFBYSxtQkFBTyxDQUFDLG9GQUFtQjtBQUN4QyxxQkFBcUIsbUJBQU8sQ0FBQyw2RkFBd0I7QUFDckQsa0RBQWlELEVBQUUscUNBQXFDLHlDQUF5QyxFQUFDO0FBQ2xJLHFCQUFxQixtQkFBTyxDQUFDLDhGQUF3QjtBQUNyRCxzREFBcUQsRUFBRSxxQ0FBcUMsNkNBQTZDLEVBQUM7QUFDMUksdURBQXNELEVBQUUscUNBQXFDLDhDQUE4QyxFQUFDO0FBQzVJLHVEQUFzRCxFQUFFLHFDQUFxQyw4Q0FBOEMsRUFBQztBQUM1SSxrREFBaUQsRUFBRSxxQ0FBcUMseUNBQXlDLEVBQUM7QUFDbEksa0RBQWlELEVBQUUscUNBQXFDLHlDQUF5QyxFQUFDO0FBQ2xJLGFBQWEsbUJBQU8sQ0FBQyw0RkFBdUI7QUFDNUMsdUJBQXVCLG1CQUFPLENBQUMsZ0dBQWtCO0FBQ2pELGtEQUFpRCxFQUFFLHFDQUFxQyxxREFBcUQsRUFBQztBQUM5STtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0anMvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N1cGFiYXNlLWpzL2Rpc3QvbWFpbi9pbmRleC5qcz9lY2U3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xyXG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcclxuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KSk7XHJcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xyXG59O1xyXG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuY3JlYXRlQ2xpZW50ID0gZXhwb3J0cy5TdXBhYmFzZUNsaWVudCA9IGV4cG9ydHMuRnVuY3Rpb25SZWdpb24gPSBleHBvcnRzLkZ1bmN0aW9uc0Vycm9yID0gZXhwb3J0cy5GdW5jdGlvbnNSZWxheUVycm9yID0gZXhwb3J0cy5GdW5jdGlvbnNGZXRjaEVycm9yID0gZXhwb3J0cy5GdW5jdGlvbnNIdHRwRXJyb3IgPSBleHBvcnRzLlBvc3RncmVzdEVycm9yID0gdm9pZCAwO1xyXG5jb25zdCBTdXBhYmFzZUNsaWVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1N1cGFiYXNlQ2xpZW50XCIpKTtcclxuX19leHBvcnRTdGFyKHJlcXVpcmUoXCJAc3VwYWJhc2UvYXV0aC1qc1wiKSwgZXhwb3J0cyk7XHJcbnZhciBwb3N0Z3Jlc3RfanNfMSA9IHJlcXVpcmUoXCJAc3VwYWJhc2UvcG9zdGdyZXN0LWpzXCIpO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQb3N0Z3Jlc3RFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcG9zdGdyZXN0X2pzXzEuUG9zdGdyZXN0RXJyb3I7IH0gfSk7XHJcbnZhciBmdW5jdGlvbnNfanNfMSA9IHJlcXVpcmUoXCJAc3VwYWJhc2UvZnVuY3Rpb25zLWpzXCIpO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGdW5jdGlvbnNIdHRwRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZ1bmN0aW9uc19qc18xLkZ1bmN0aW9uc0h0dHBFcnJvcjsgfSB9KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRnVuY3Rpb25zRmV0Y2hFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb25zX2pzXzEuRnVuY3Rpb25zRmV0Y2hFcnJvcjsgfSB9KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRnVuY3Rpb25zUmVsYXlFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb25zX2pzXzEuRnVuY3Rpb25zUmVsYXlFcnJvcjsgfSB9KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRnVuY3Rpb25zRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZ1bmN0aW9uc19qc18xLkZ1bmN0aW9uc0Vycm9yOyB9IH0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGdW5jdGlvblJlZ2lvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb25zX2pzXzEuRnVuY3Rpb25SZWdpb247IH0gfSk7XHJcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiQHN1cGFiYXNlL3JlYWx0aW1lLWpzXCIpLCBleHBvcnRzKTtcclxudmFyIFN1cGFiYXNlQ2xpZW50XzIgPSByZXF1aXJlKFwiLi9TdXBhYmFzZUNsaWVudFwiKTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3VwYWJhc2VDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChTdXBhYmFzZUNsaWVudF8yKS5kZWZhdWx0OyB9IH0pO1xyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBTdXBhYmFzZSBDbGllbnQuXHJcbiAqL1xyXG5jb25zdCBjcmVhdGVDbGllbnQgPSAoc3VwYWJhc2VVcmwsIHN1cGFiYXNlS2V5LCBvcHRpb25zKSA9PiB7XHJcbiAgICByZXR1cm4gbmV3IFN1cGFiYXNlQ2xpZW50XzEuZGVmYXVsdChzdXBhYmFzZVVybCwgc3VwYWJhc2VLZXksIG9wdGlvbnMpO1xyXG59O1xyXG5leHBvcnRzLmNyZWF0ZUNsaWVudCA9IGNyZWF0ZUNsaWVudDtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/supabase-js/dist/main/index.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/supabase-js/dist/main/lib/SupabaseAuthClient.js":
/*!********************************************************************************!*\
!*** ./node_modules/@supabase/supabase-js/dist/main/lib/SupabaseAuthClient.js ***!
\********************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.SupabaseAuthClient = void 0;\r\nconst auth_js_1 = __webpack_require__(/*! @supabase/auth-js */ \"(ssr)/./node_modules/@supabase/auth-js/dist/main/index.js\");\r\nclass SupabaseAuthClient extends auth_js_1.AuthClient {\r\n constructor(options) {\r\n super(options);\r\n }\r\n}\r\nexports.SupabaseAuthClient = SupabaseAuthClient;\r\n//# sourceMappingURL=SupabaseAuthClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N1cGFiYXNlLWpzL2Rpc3QvbWFpbi9saWIvU3VwYWJhc2VBdXRoQ2xpZW50LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDBCQUEwQjtBQUMxQixrQkFBa0IsbUJBQU8sQ0FBQyxvRkFBbUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQiIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRqcy8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3VwYWJhc2UtanMvZGlzdC9tYWluL2xpYi9TdXBhYmFzZUF1dGhDbGllbnQuanM/MGQzMyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLlN1cGFiYXNlQXV0aENsaWVudCA9IHZvaWQgMDtcclxuY29uc3QgYXV0aF9qc18xID0gcmVxdWlyZShcIkBzdXBhYmFzZS9hdXRoLWpzXCIpO1xyXG5jbGFzcyBTdXBhYmFzZUF1dGhDbGllbnQgZXh0ZW5kcyBhdXRoX2pzXzEuQXV0aENsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5TdXBhYmFzZUF1dGhDbGllbnQgPSBTdXBhYmFzZUF1dGhDbGllbnQ7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN1cGFiYXNlQXV0aENsaWVudC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/supabase-js/dist/main/lib/SupabaseAuthClient.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/supabase-js/dist/main/lib/constants.js":
/*!***********************************************************************!*\
!*** ./node_modules/@supabase/supabase-js/dist/main/lib/constants.js ***!
\***********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.DEFAULT_REALTIME_OPTIONS = exports.DEFAULT_AUTH_OPTIONS = exports.DEFAULT_DB_OPTIONS = exports.DEFAULT_GLOBAL_OPTIONS = exports.DEFAULT_HEADERS = void 0;\r\nconst version_1 = __webpack_require__(/*! ./version */ \"(ssr)/./node_modules/@supabase/supabase-js/dist/main/lib/version.js\");\r\nlet JS_ENV = '';\r\n// @ts-ignore\r\nif (typeof Deno !== 'undefined') {\r\n JS_ENV = 'deno';\r\n}\r\nelse if (typeof document !== 'undefined') {\r\n JS_ENV = 'web';\r\n}\r\nelse if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\r\n JS_ENV = 'react-native';\r\n}\r\nelse {\r\n JS_ENV = 'node';\r\n}\r\nexports.DEFAULT_HEADERS = { 'X-Client-Info': `supabase-js-${JS_ENV}/${version_1.version}` };\r\nexports.DEFAULT_GLOBAL_OPTIONS = {\r\n headers: exports.DEFAULT_HEADERS,\r\n};\r\nexports.DEFAULT_DB_OPTIONS = {\r\n schema: 'public',\r\n};\r\nexports.DEFAULT_AUTH_OPTIONS = {\r\n autoRefreshToken: true,\r\n persistSession: true,\r\n detectSessionInUrl: true,\r\n flowType: 'implicit',\r\n};\r\nexports.DEFAULT_REALTIME_OPTIONS = {};\r\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N1cGFiYXNlLWpzL2Rpc3QvbWFpbi9saWIvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGdDQUFnQyxHQUFHLDRCQUE0QixHQUFHLDBCQUEwQixHQUFHLDhCQUE4QixHQUFHLHVCQUF1QjtBQUN2SixrQkFBa0IsbUJBQU8sQ0FBQyxzRkFBVztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLEtBQUssZ0NBQWdDLE9BQU8sR0FBRyxrQkFBa0I7QUFDeEYsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9zdXBhYmFzZS1qcy9kaXN0L21haW4vbGliL2NvbnN0YW50cy5qcz8yZWFiIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuREVGQVVMVF9SRUFMVElNRV9PUFRJT05TID0gZXhwb3J0cy5ERUZBVUxUX0FVVEhfT1BUSU9OUyA9IGV4cG9ydHMuREVGQVVMVF9EQl9PUFRJT05TID0gZXhwb3J0cy5ERUZBVUxUX0dMT0JBTF9PUFRJT05TID0gZXhwb3J0cy5ERUZBVUxUX0hFQURFUlMgPSB2b2lkIDA7XHJcbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XHJcbmxldCBKU19FTlYgPSAnJztcclxuLy8gQHRzLWlnbm9yZVxyXG5pZiAodHlwZW9mIERlbm8gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBKU19FTlYgPSAnZGVubyc7XHJcbn1cclxuZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgSlNfRU5WID0gJ3dlYic7XHJcbn1cclxuZWxzZSBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScpIHtcclxuICAgIEpTX0VOViA9ICdyZWFjdC1uYXRpdmUnO1xyXG59XHJcbmVsc2Uge1xyXG4gICAgSlNfRU5WID0gJ25vZGUnO1xyXG59XHJcbmV4cG9ydHMuREVGQVVMVF9IRUFERVJTID0geyAnWC1DbGllbnQtSW5mbyc6IGBzdXBhYmFzZS1qcy0ke0pTX0VOVn0vJHt2ZXJzaW9uXzEudmVyc2lvbn1gIH07XHJcbmV4cG9ydHMuREVGQVVMVF9HTE9CQUxfT1BUSU9OUyA9IHtcclxuICAgIGhlYWRlcnM6IGV4cG9ydHMuREVGQVVMVF9IRUFERVJTLFxyXG59O1xyXG5leHBvcnRzLkRFRkFVTFRfREJfT1BUSU9OUyA9IHtcclxuICAgIHNjaGVtYTogJ3B1YmxpYycsXHJcbn07XHJcbmV4cG9ydHMuREVGQVVMVF9BVVRIX09QVElPTlMgPSB7XHJcbiAgICBhdXRvUmVmcmVzaFRva2VuOiB0cnVlLFxyXG4gICAgcGVyc2lzdFNlc3Npb246IHRydWUsXHJcbiAgICBkZXRlY3RTZXNzaW9uSW5Vcmw6IHRydWUsXHJcbiAgICBmbG93VHlwZTogJ2ltcGxpY2l0JyxcclxufTtcclxuZXhwb3J0cy5ERUZBVUxUX1JFQUxUSU1FX09QVElPTlMgPSB7fTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/supabase-js/dist/main/lib/constants.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/supabase-js/dist/main/lib/fetch.js":
/*!*******************************************************************!*\
!*** ./node_modules/@supabase/supabase-js/dist/main/lib/fetch.js ***!
\*******************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
eval("\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.fetchWithAuth = exports.resolveHeadersConstructor = exports.resolveFetch = void 0;\r\n// @ts-ignore\r\nconst node_fetch_1 = __importStar(__webpack_require__(/*! @supabase/node-fetch */ \"(ssr)/./node_modules/@supabase/node-fetch/lib/index.js\"));\r\nconst resolveFetch = (customFetch) => {\r\n let _fetch;\r\n if (customFetch) {\r\n _fetch = customFetch;\r\n }\r\n else if (typeof fetch === 'undefined') {\r\n _fetch = node_fetch_1.default;\r\n }\r\n else {\r\n _fetch = fetch;\r\n }\r\n return (...args) => _fetch(...args);\r\n};\r\nexports.resolveFetch = resolveFetch;\r\nconst resolveHeadersConstructor = () => {\r\n if (typeof Headers === 'undefined') {\r\n return node_fetch_1.Headers;\r\n }\r\n return Headers;\r\n};\r\nexports.resolveHeadersConstructor = resolveHeadersConstructor;\r\nconst fetchWithAuth = (supabaseKey, getAccessToken, customFetch) => {\r\n const fetch = (0, exports.resolveFetch)(customFetch);\r\n const HeadersConstructor = (0, exports.resolveHeadersConstructor)();\r\n return (input, init) => __awaiter(void 0, void 0, void 0, function* () {\r\n var _a;\r\n const accessToken = (_a = (yield getAccessToken())) !== null && _a !== void 0 ? _a : supabaseKey;\r\n let headers = new HeadersConstructor(init === null || init === void 0 ? void 0 : init.headers);\r\n if (!headers.has('apikey')) {\r\n headers.set('apikey', supabaseKey);\r\n }\r\n if (!headers.has('Authorization')) {\r\n headers.set('Authorization', `Bearer ${accessToken}`);\r\n }\r\n return fetch(input, Object.assign(Object.assign({}, init), { headers }));\r\n });\r\n};\r\nexports.fetchWithAuth = fetchWithAuth;\r\n//# sourceMappingURL=fetch.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N1cGFiYXNlLWpzL2Rpc3QvbWFpbi9saWIvZmV0Y2guanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0NBQW9DO0FBQ25EO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLDBDQUEwQyw0QkFBNEI7QUFDdEUsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsK0RBQStELGlCQUFpQjtBQUM1RztBQUNBLG9DQUFvQyxNQUFNLCtCQUErQixZQUFZO0FBQ3JGLG1DQUFtQyxNQUFNLG1DQUFtQyxZQUFZO0FBQ3hGLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxxQkFBcUIsR0FBRyxpQ0FBaUMsR0FBRyxvQkFBb0I7QUFDaEY7QUFDQSxrQ0FBa0MsbUJBQU8sQ0FBQyxvRkFBc0I7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsWUFBWTtBQUMvRDtBQUNBLDBEQUEwRCxXQUFXLFNBQVM7QUFDOUUsS0FBSztBQUNMO0FBQ0EscUJBQXFCO0FBQ3JCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9zdXBhYmFzZS1qcy9kaXN0L21haW4vbGliL2ZldGNoLmpzPzVhZDkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pKTtcclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59KTtcclxudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn07XHJcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLmZldGNoV2l0aEF1dGggPSBleHBvcnRzLnJlc29sdmVIZWFkZXJzQ29uc3RydWN0b3IgPSBleHBvcnRzLnJlc29sdmVGZXRjaCA9IHZvaWQgMDtcclxuLy8gQHRzLWlnbm9yZVxyXG5jb25zdCBub2RlX2ZldGNoXzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBzdXBhYmFzZS9ub2RlLWZldGNoXCIpKTtcclxuY29uc3QgcmVzb2x2ZUZldGNoID0gKGN1c3RvbUZldGNoKSA9PiB7XHJcbiAgICBsZXQgX2ZldGNoO1xyXG4gICAgaWYgKGN1c3RvbUZldGNoKSB7XHJcbiAgICAgICAgX2ZldGNoID0gY3VzdG9tRmV0Y2g7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZmV0Y2ggPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgX2ZldGNoID0gbm9kZV9mZXRjaF8xLmRlZmF1bHQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBfZmV0Y2ggPSBmZXRjaDtcclxuICAgIH1cclxuICAgIHJldHVybiAoLi4uYXJncykgPT4gX2ZldGNoKC4uLmFyZ3MpO1xyXG59O1xyXG5leHBvcnRzLnJlc29sdmVGZXRjaCA9IHJlc29sdmVGZXRjaDtcclxuY29uc3QgcmVzb2x2ZUhlYWRlcnNDb25zdHJ1Y3RvciA9ICgpID0+IHtcclxuICAgIGlmICh0eXBlb2YgSGVhZGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gbm9kZV9mZXRjaF8xLkhlYWRlcnM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gSGVhZGVycztcclxufTtcclxuZXhwb3J0cy5yZXNvbHZlSGVhZGVyc0NvbnN0cnVjdG9yID0gcmVzb2x2ZUhlYWRlcnNDb25zdHJ1Y3RvcjtcclxuY29uc3QgZmV0Y2hXaXRoQXV0aCA9IChzdXBhYmFzZUtleSwgZ2V0QWNjZXNzVG9rZW4sIGN1c3RvbUZldGNoKSA9PiB7XHJcbiAgICBjb25zdCBmZXRjaCA9ICgwLCBleHBvcnRzLnJlc29sdmVGZXRjaCkoY3VzdG9tRmV0Y2gpO1xyXG4gICAgY29uc3QgSGVhZGVyc0NvbnN0cnVjdG9yID0gKDAsIGV4cG9ydHMucmVzb2x2ZUhlYWRlcnNDb25zdHJ1Y3RvcikoKTtcclxuICAgIHJldHVybiAoaW5wdXQsIGluaXQpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IChfYSA9ICh5aWVsZCBnZXRBY2Nlc3NUb2tlbigpKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogc3VwYWJhc2VLZXk7XHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSGVhZGVyc0NvbnN0cnVjdG9yKGluaXQgPT09IG51bGwgfHwgaW5pdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5pdC5oZWFkZXJzKTtcclxuICAgICAgICBpZiAoIWhlYWRlcnMuaGFzKCdhcGlrZXknKSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzLnNldCgnYXBpa2V5Jywgc3VwYWJhc2VLZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWhlYWRlcnMuaGFzKCdBdXRob3JpemF0aW9uJykpIHtcclxuICAgICAgICAgICAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmZXRjaChpbnB1dCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBpbml0KSwgeyBoZWFkZXJzIH0pKTtcclxuICAgIH0pO1xyXG59O1xyXG5leHBvcnRzLmZldGNoV2l0aEF1dGggPSBmZXRjaFdpdGhBdXRoO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1mZXRjaC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/supabase-js/dist/main/lib/fetch.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/supabase-js/dist/main/lib/helpers.js":
/*!*********************************************************************!*\
!*** ./node_modules/@supabase/supabase-js/dist/main/lib/helpers.js ***!
\*********************************************************************/
/***/ (function(__unused_webpack_module, exports) {
eval("\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.applySettingDefaults = exports.isBrowser = exports.ensureTrailingSlash = exports.uuid = void 0;\r\nfunction uuid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n}\r\nexports.uuid = uuid;\r\nfunction ensureTrailingSlash(url) {\r\n return url.endsWith('/') ? url : url + '/';\r\n}\r\nexports.ensureTrailingSlash = ensureTrailingSlash;\r\nconst isBrowser = () => typeof window !== 'undefined';\r\nexports.isBrowser = isBrowser;\r\nfunction applySettingDefaults(options, defaults) {\r\n var _a, _b;\r\n const { db: dbOptions, auth: authOptions, realtime: realtimeOptions, global: globalOptions, } = options;\r\n const { db: DEFAULT_DB_OPTIONS, auth: DEFAULT_AUTH_OPTIONS, realtime: DEFAULT_REALTIME_OPTIONS, global: DEFAULT_GLOBAL_OPTIONS, } = defaults;\r\n const result = {\r\n db: Object.assign(Object.assign({}, DEFAULT_DB_OPTIONS), dbOptions),\r\n auth: Object.assign(Object.assign({}, DEFAULT_AUTH_OPTIONS), authOptions),\r\n realtime: Object.assign(Object.assign({}, DEFAULT_REALTIME_OPTIONS), realtimeOptions),\r\n global: Object.assign(Object.assign(Object.assign({}, DEFAULT_GLOBAL_OPTIONS), globalOptions), { headers: Object.assign(Object.assign({}, ((_a = DEFAULT_GLOBAL_OPTIONS === null || DEFAULT_GLOBAL_OPTIONS === void 0 ? void 0 : DEFAULT_GLOBAL_OPTIONS.headers) !== null && _a !== void 0 ? _a : {})), ((_b = globalOptions === null || globalOptions === void 0 ? void 0 : globalOptions.headers) !== null && _b !== void 0 ? _b : {})) }),\r\n accessToken: () => __awaiter(this, void 0, void 0, function* () { return ''; }),\r\n };\r\n if (options.accessToken) {\r\n result.accessToken = options.accessToken;\r\n }\r\n else {\r\n // hack around Required<>\r\n delete result.accessToken;\r\n }\r\n return result;\r\n}\r\nexports.applySettingDefaults = applySettingDefaults;\r\n//# sourceMappingURL=helpers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N1cGFiYXNlLWpzL2Rpc3QvbWFpbi9saWIvaGVscGVycy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsNEJBQTRCLCtEQUErRCxpQkFBaUI7QUFDNUc7QUFDQSxvQ0FBb0MsTUFBTSwrQkFBK0IsWUFBWTtBQUNyRixtQ0FBbUMsTUFBTSxtQ0FBbUMsWUFBWTtBQUN4RixnQ0FBZ0M7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsNEJBQTRCLEdBQUcsaUJBQWlCLEdBQUcsMkJBQTJCLEdBQUcsWUFBWTtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLFlBQVksc0ZBQXNGO0FBQ2xHLFlBQVksMEhBQTBIO0FBQ3RJO0FBQ0EsMENBQTBDO0FBQzFDLDRDQUE0QztBQUM1QyxnREFBZ0Q7QUFDaEQsNERBQTRELDZDQUE2Qyx1Q0FBdUMsNEpBQTRKLG1JQUFtSSxJQUFJO0FBQ25iLDBFQUEwRSxZQUFZO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9zdXBhYmFzZS1qcy9kaXN0L21haW4vbGliL2hlbHBlcnMuanM/MDlmZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuYXBwbHlTZXR0aW5nRGVmYXVsdHMgPSBleHBvcnRzLmlzQnJvd3NlciA9IGV4cG9ydHMuZW5zdXJlVHJhaWxpbmdTbGFzaCA9IGV4cG9ydHMudXVpZCA9IHZvaWQgMDtcclxuZnVuY3Rpb24gdXVpZCgpIHtcclxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgdmFyIHIgPSAoTWF0aC5yYW5kb20oKSAqIDE2KSB8IDAsIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDg7XHJcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0cy51dWlkID0gdXVpZDtcclxuZnVuY3Rpb24gZW5zdXJlVHJhaWxpbmdTbGFzaCh1cmwpIHtcclxuICAgIHJldHVybiB1cmwuZW5kc1dpdGgoJy8nKSA/IHVybCA6IHVybCArICcvJztcclxufVxyXG5leHBvcnRzLmVuc3VyZVRyYWlsaW5nU2xhc2ggPSBlbnN1cmVUcmFpbGluZ1NsYXNoO1xyXG5jb25zdCBpc0Jyb3dzZXIgPSAoKSA9PiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcclxuZXhwb3J0cy5pc0Jyb3dzZXIgPSBpc0Jyb3dzZXI7XHJcbmZ1bmN0aW9uIGFwcGx5U2V0dGluZ0RlZmF1bHRzKG9wdGlvbnMsIGRlZmF1bHRzKSB7XHJcbiAgICB2YXIgX2EsIF9iO1xyXG4gICAgY29uc3QgeyBkYjogZGJPcHRpb25zLCBhdXRoOiBhdXRoT3B0aW9ucywgcmVhbHRpbWU6IHJlYWx0aW1lT3B0aW9ucywgZ2xvYmFsOiBnbG9iYWxPcHRpb25zLCB9ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IHsgZGI6IERFRkFVTFRfREJfT1BUSU9OUywgYXV0aDogREVGQVVMVF9BVVRIX09QVElPTlMsIHJlYWx0aW1lOiBERUZBVUxUX1JFQUxUSU1FX09QVElPTlMsIGdsb2JhbDogREVGQVVMVF9HTE9CQUxfT1BUSU9OUywgfSA9IGRlZmF1bHRzO1xyXG4gICAgY29uc3QgcmVzdWx0ID0ge1xyXG4gICAgICAgIGRiOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfREJfT1BUSU9OUyksIGRiT3B0aW9ucyksXHJcbiAgICAgICAgYXV0aDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX0FVVEhfT1BUSU9OUyksIGF1dGhPcHRpb25zKSxcclxuICAgICAgICByZWFsdGltZTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1JFQUxUSU1FX09QVElPTlMpLCByZWFsdGltZU9wdGlvbnMpLFxyXG4gICAgICAgIGdsb2JhbDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfR0xPQkFMX09QVElPTlMpLCBnbG9iYWxPcHRpb25zKSwgeyBoZWFkZXJzOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICgoX2EgPSBERUZBVUxUX0dMT0JBTF9PUFRJT05TID09PSBudWxsIHx8IERFRkFVTFRfR0xPQkFMX09QVElPTlMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IERFRkFVTFRfR0xPQkFMX09QVElPTlMuaGVhZGVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pKSwgKChfYiA9IGdsb2JhbE9wdGlvbnMgPT09IG51bGwgfHwgZ2xvYmFsT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ2xvYmFsT3B0aW9ucy5oZWFkZXJzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB7fSkpIH0pLFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuOiAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHJldHVybiAnJzsgfSksXHJcbiAgICB9O1xyXG4gICAgaWYgKG9wdGlvbnMuYWNjZXNzVG9rZW4pIHtcclxuICAgICAgICByZXN1bHQuYWNjZXNzVG9rZW4gPSBvcHRpb25zLmFjY2Vzc1Rva2VuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gaGFjayBhcm91bmQgUmVxdWlyZWQ8PlxyXG4gICAgICAgIGRlbGV0ZSByZXN1bHQuYWNjZXNzVG9rZW47XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbmV4cG9ydHMuYXBwbHlTZXR0aW5nRGVmYXVsdHMgPSBhcHBseVNldHRpbmdEZWZhdWx0cztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGVscGVycy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/supabase-js/dist/main/lib/helpers.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@supabase/supabase-js/dist/main/lib/version.js":
/*!*********************************************************************!*\
!*** ./node_modules/@supabase/supabase-js/dist/main/lib/version.js ***!
\*********************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.version = void 0;\r\nexports.version = '2.52.0';\r\n//# sourceMappingURL=version.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N1cGFiYXNlLWpzL2Rpc3QvbWFpbi9saWIvdmVyc2lvbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxlQUFlO0FBQ2YsZUFBZTtBQUNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGpzLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9zdXBhYmFzZS1qcy9kaXN0L21haW4vbGliL3ZlcnNpb24uanM/M2QwOCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLnZlcnNpb24gPSB2b2lkIDA7XHJcbmV4cG9ydHMudmVyc2lvbiA9ICcyLjUyLjAnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@supabase/supabase-js/dist/main/lib/version.js\n");
/***/ })
};
;