@kameleoon/javascript-sdk-core 5.17.2 → 5.17.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/javascript-sdk-core.browser.cjs.js.map +1 -1
- package/dist/javascript-sdk-core.browser.es.js.map +1 -1
- package/dist/javascript-sdk-core.cjs.js.map +1 -1
- package/dist/javascript-sdk-core.es.js.map +1 -1
- package/dist/requester/types.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"javascript-sdk-core.browser.cjs.js","sources":["../../../node_modules/ts-res/build/main.js","../../../node_modules/ts-res/build/index.js","../../../node_modules/tslib/tslib.es6.js","../src/kameleoonError/types.ts","../src/kameleoonError/constants.ts","../src/kameleoonError/helpers.ts","../src/kameleoonError/kameleoonError.ts","../src/requester/types.ts","../src/requester/constants.ts","../src/logging/types.ts","../src/logging/defaultLogger.ts","../src/logging/kameleoonLogger.ts","../src/requester/requester.ts","../src/sdkInfoTypes.ts","../src/requester/urlProvider.ts","../src/types.ts","../src/cacheManager/cacheManager.ts","../src/clientConfiguration/types.ts","../src/eventManager/eventManager.ts","../src/eventManager/types.ts","../src/clientConfiguration/constants.ts","../src/clientConfiguration/meGroup.ts","../src/clientConfiguration/clientConfiguration.ts","../src/kameleoonData/helpers.ts","../src/kameleoonData/types.ts","../src/constants.ts","../src/targeting/types.ts","../src/utilities/types.ts","../src/utilities/constants.ts","../src/utilities/validator.ts","../src/utilities/utilities.ts","../src/utilities/listUtilities.ts","../src/kameleoonData/pageView.ts","../src/kameleoonData/customData.ts","../src/kameleoonData/conversion.ts","../src/kameleoonData/browser.ts","../src/kameleoonData/device.ts","../src/kameleoonData/operatingSystem.ts","../src/kameleoonData/geolocation.ts","../src/kameleoonData/visitsData.ts","../src/kameleoonData/kameleoonConversionScore.ts","../src/kameleoonData/personalization.ts","../src/kameleoonData/cbScores.ts","../src/kameleoonData/visitProcessor.ts","../src/utilities/parser.ts","../src/clientSettings/clientSettings.ts","../src/kameleoonData/cookie.ts","../src/kameleoonData/userAgent.ts","../src/kameleoonData/uniqueIdentifier.ts","../src/kameleoonData/applicationVersion.ts","../src/kameleoonData/dataProcessor.ts","../src/kameleoonData/staticData.ts","../src/targeting/conditions/conditionFactoryInstance.ts","../src/targeting/node.ts","../src/targeting/tree.ts","../src/targeting/conditions/device.ts","../src/targeting/conditions/browser.ts","../src/targeting/conditions/conversion.ts","../src/targeting/conditions/customData.ts","../src/targeting/conditions/utilities.ts","../src/targeting/conditions/pageTitle.ts","../src/targeting/conditions/pageUrl.ts","../src/targeting/conditions/sdkLanguage.ts","../src/targeting/conditions/visitorCode.ts","../src/targeting/conditions/cookie.ts","../src/targeting/conditions/operatingSystem.ts","../src/targeting/conditions/geolocation.ts","../src/targeting/conditions/segment.ts","../src/targeting/conditions/targetFeatureFlag.ts","../src/targeting/conditions/previousPage.ts","../src/targeting/conditions/visitedPages.ts","../src/targeting/conditions/firstVisit.ts","../src/targeting/conditions/lastVisit.ts","../src/targeting/conditions/sameDayVisits.ts","../src/targeting/conditions/visits.ts","../src/targeting/conditions/newVisitor.ts","../src/targeting/conditions/applicationVersion.ts","../src/targeting/conditions/conversionLikelihood.ts","../src/targeting/conditions/exclusiveExperiment.ts","../src/targeting/conditions/targetExperiment.ts","../src/targeting/conditions/targetPersonalization.ts","../src/targeting/conditions/conditionFactory.ts","../src/storage/constants.ts","../src/storage/integrityChecker.ts","../src/storage/storage.ts","../src/storage/storageCleanupManager.ts","../src/storage/types.ts","../src/kameleoonData/targetedSegment.ts","../src/kameleoonData/dataManager.ts","../../../node_modules/crypto-js/core.js","../../../node_modules/crypto-js/sha256.js","../src/hasher/hasher.ts","../src/variationConfiguration/variationConfiguration.ts","../src/eventSource/constants.ts","../src/eventSource/eventSource.ts","../src/visitorCodeManager/constants.ts","../src/visitorCodeManager/visitorCodeManager.ts","../src/tracking/constants.ts","../src/tracking/bodyProvider.ts","../src/tracking/tracker.ts","../src/kameleoonClient.ts","../src/kameleoonUtils.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Err = exports.Ok = void 0;\n// --- Note ---\n// `throw` is a reserved keyword\nfunction throwErr(message) {\n if (!this.ok) {\n if (typeof this.error === \"string\" || typeof this.error === \"undefined\") {\n var defaultMessage = \"There was an error! No specific error message was provided.\";\n throw new Error(message || this.error || defaultMessage);\n }\n if (message) {\n this.error.message = message;\n }\n throw this.error;\n }\n return this.data;\n}\n// --- Note ---\n// `else` is a reserved keyword\nfunction elseDo(callback) {\n if (this.ok) {\n return this.data;\n }\n // TODO:\n // - Tackle the problem of callback return type not being enforced when using `void` | `undefined` as `T`\n // - In the same situation `or` works well\n return callback(this.error);\n}\nfunction or(orValue) {\n if (this.ok) {\n return this.data;\n }\n return orValue;\n}\nfunction and(callback) {\n if (this.ok) {\n callback(this.data);\n }\n return this;\n}\nfunction Ok(data) {\n return { ok: true, data: data, throw: throwErr, else: elseDo, or: or, and: and };\n}\nexports.Ok = Ok;\nfunction Err(error) {\n return { ok: false, error: error, throw: throwErr, else: elseDo, or: or, and: and };\n}\nexports.Err = Err;\n//# sourceMappingURL=main.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Err = exports.Ok = void 0;\nvar main_1 = require(\"./main\");\nObject.defineProperty(exports, \"Ok\", { enumerable: true, get: function () { return main_1.Ok; } });\nObject.defineProperty(exports, \"Err\", { enumerable: true, get: function () { return main_1.Err; } });\n//# sourceMappingURL=index.js.map","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(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\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(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\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __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\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __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\n\r\nvar 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\r\nexport function __importStar(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\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of exception types `KameleoonError`\n * */\nexport enum KameleoonException {\n Credentials = 'Credentials',\n EventSourceInitialization = 'EventSourceInitialization',\n FeatureFlagConfigurationNotFound = 'FeatureFlagConfigurationNotFound',\n FeatureFlagVariableNotFound = 'FeatureFlagVariableNotFound',\n FeatureFlagVariationNotFound = 'FeatureFlagVariationNotFound',\n FeatureFlagExperimentNotFound = 'FeatureFlagExperimentNotFound',\n FeatureFlagEnvironmentDisabled = 'FeatureFlagEnvironmentDisabled',\n VisitAmount = 'VisitAmount',\n VisitorCodeMaxLength = 'VisitorCodeMaxLength',\n VisitorCodeEmpty = 'VisitorCodeEmpty',\n StorageInitialization = 'StorageInitialization',\n StorageWrite = 'StorageWrite',\n StorageRead = 'StorageRead',\n StorageParse = 'StorageParse',\n StorageEmpty = 'StorageEmpty',\n ClientConfiguration = 'ClientConfiguration',\n TargetingCondition = 'TargetingCondition',\n AmongValuesCheck = 'AmongValuesCheck',\n RangeCheck = 'RangeCheck',\n Initialization = 'Initialization',\n JSONParse = 'JSONParse',\n NumberParse = 'NumberParse',\n VersionParse = 'VersionParse',\n CookieParse = 'CookieParse',\n SemanticVersionParse = 'SemanticVersionParse',\n RemoteData = 'RemoteData',\n MaximumRetriesReached = 'MaximumRetriesReached',\n}\n","import { KameleoonStorageKey } from 'src/storage';\nimport { TargetingType } from 'src/targeting';\nimport { KameleoonException } from './types';\n\nexport const ERROR_MESSAGES = {\n [KameleoonException.CookieParse]: (reason: string) =>\n `Couldn't parse cookie string: ${reason}`,\n [KameleoonException.JSONParse]: (err: unknown) =>\n `Couldn't parse JSON variable: ${err}`,\n [KameleoonException.NumberParse]: (value: string) =>\n `It's not possible to parse value ${value} to Number`,\n [KameleoonException.VersionParse]: (value: string) =>\n `It's not possible to parse a version value ${value} to Number, version should be in format x.x`,\n [KameleoonException.SemanticVersionParse]: (value: string) =>\n `It's not possible to parse a version value ${value} to Number, version should be in format x.x.x`,\n [KameleoonException.Initialization]: () =>\n \"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods\",\n [KameleoonException.Credentials]: () =>\n 'KameleoonClient can not be created without credentials',\n [KameleoonException.StorageInitialization]: () =>\n \"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed\",\n [KameleoonException.EventSourceInitialization]: () =>\n \"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed\",\n [KameleoonException.FeatureFlagConfigurationNotFound]: (featureKey: string) =>\n `No feature flag with key ${featureKey} was found.`,\n [KameleoonException.FeatureFlagEnvironmentDisabled]: (\n featureKey: string,\n environment: string,\n ) =>\n `Feature flag with key ${featureKey} is disabled in ${environment} environment.`,\n [KameleoonException.FeatureFlagVariableNotFound]: (\n variableKey: string,\n visitorCode: string,\n ) =>\n `No feature flag variable with key ${variableKey} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.FeatureFlagVariationNotFound]: (\n variationKey: string,\n visitorCode: string,\n ) =>\n `No feature flag variation with key ${variationKey} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.FeatureFlagExperimentNotFound]: (\n experimentId: number,\n visitorCode: string,\n ) =>\n `No feature flag experiment with id ${experimentId} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.VisitAmount]: () =>\n 'Visit amount must be a number between 1 and 25',\n [KameleoonException.VisitorCodeMaxLength]: () =>\n 'Visitor code can not be more than 255 characters long',\n [KameleoonException.VisitorCodeEmpty]: () => 'Visitor code can not be empty',\n [KameleoonException.StorageWrite]: (err: unknown) =>\n `Couldn't update storage for kameleoonClient: ${err}`,\n [KameleoonException.StorageRead]: (key: KameleoonStorageKey) =>\n `No data found in storage under ${key} key`,\n [KameleoonException.StorageEmpty]: () => 'No data found in storage',\n [KameleoonException.StorageParse]: (err: unknown, key: KameleoonStorageKey) =>\n `Couldn't parse ${key} storage data, the data may be corrupted. Error: ${err}`,\n [KameleoonException.ClientConfiguration]: (err: unknown) =>\n `Couldn't retrieve client configuration from Kameleoon Api. Error: ${err}`,\n [KameleoonException.TargetingCondition]: (targetingType: TargetingType) =>\n `${targetingType} targeting condition is not yet supported.`,\n [KameleoonException.AmongValuesCheck]: (err: unknown, value: string) =>\n `Couldn't parse value \"${value}\": ${err}`,\n [KameleoonException.RangeCheck]: (value?: number[] | null) =>\n `Couldn't parse value \"${value}\" as a range, value should be in format [x: number, y: number]`,\n [KameleoonException.RemoteData]: (err: unknown) =>\n `Couldn't retrieve data from Kameleoon server. Error: ${err}`,\n [KameleoonException.MaximumRetriesReached]: (err: unknown) =>\n `Maximum retries reached, request failed. Reason: ${err}`,\n};\n","export function exhaustCheck(option: never): never {\n throw new Error(`Reaching an impossible state because of ${option}`);\n}\n","import { KameleoonStorageKey } from 'src/storage';\nimport { TargetingType } from 'src/targeting';\nimport { ERROR_MESSAGES } from './constants';\nimport { exhaustCheck } from './helpers';\nimport { KameleoonException } from './types';\n\n/**\n * @class\n * KameleoonError - extends standard `Error` by adding custom `type` property with the type of `KameleoonException`\n * */\nexport class KameleoonError extends Error {\n private errorType: KameleoonException;\n\n /**\n * @param {KameleoonException} type - type of KameleoonError represented by `KameleoonException` enum\n * */\n constructor(\n type:\n | KameleoonException.Initialization\n | KameleoonException.Credentials\n | KameleoonException.VisitorCodeMaxLength\n | KameleoonException.VisitorCodeEmpty\n | KameleoonException.VisitAmount\n | KameleoonException.StorageInitialization\n | KameleoonException.EventSourceInitialization\n | KameleoonException.StorageEmpty,\n );\n constructor(\n type:\n | KameleoonException.FeatureFlagConfigurationNotFound\n | KameleoonException.FeatureFlagEnvironmentDisabled,\n featureKey: string,\n );\n constructor(\n type:\n | KameleoonException.FeatureFlagConfigurationNotFound\n | KameleoonException.FeatureFlagEnvironmentDisabled,\n featureKey: string,\n environment: string,\n );\n constructor(\n type: KameleoonException.FeatureFlagVariableNotFound,\n variableKey: string,\n visitorCode: string,\n );\n constructor(\n type: KameleoonException.FeatureFlagVariationNotFound,\n variationKey: string,\n visitorCode: string,\n );\n constructor(\n type: KameleoonException.FeatureFlagExperimentNotFound,\n experimentId: number,\n visitorCode: string,\n );\n constructor(type: KameleoonException.CookieParse, message: string);\n constructor(\n type:\n | KameleoonException.StorageWrite\n | KameleoonException.JSONParse\n | KameleoonException.RemoteData\n | KameleoonException.MaximumRetriesReached\n | KameleoonException.ClientConfiguration,\n err: unknown,\n );\n constructor(type: KameleoonException.StorageRead, storageKey: string);\n constructor(\n type: KameleoonException.StorageParse,\n err: unknown,\n key: KameleoonStorageKey,\n );\n constructor(\n type: KameleoonException.TargetingCondition,\n targetingType: TargetingType,\n );\n constructor(\n type: KameleoonException.AmongValuesCheck,\n err: unknown,\n value: string,\n );\n constructor(type: KameleoonException.RangeCheck, value?: number[] | null);\n constructor(\n type:\n | KameleoonException.NumberParse\n | KameleoonException.VersionParse\n | KameleoonException.SemanticVersionParse,\n value: string,\n );\n constructor(\n type: KameleoonException,\n secondParam?:\n | number\n | string\n | unknown\n | KameleoonStorageKey\n | TargetingType,\n thirdParam?: string | KameleoonStorageKey,\n ) {\n super(`Error: ${type}`);\n\n this.name = 'KameleoonError';\n this.errorType = type;\n\n switch (type) {\n case KameleoonException.Initialization:\n case KameleoonException.Credentials:\n case KameleoonException.VisitorCodeMaxLength:\n case KameleoonException.VisitorCodeEmpty:\n case KameleoonException.StorageInitialization:\n case KameleoonException.VisitAmount:\n case KameleoonException.EventSourceInitialization:\n case KameleoonException.StorageEmpty:\n this.message = ERROR_MESSAGES[type]();\n break;\n case KameleoonException.CookieParse:\n case KameleoonException.FeatureFlagConfigurationNotFound:\n case KameleoonException.NumberParse:\n case KameleoonException.ClientConfiguration:\n case KameleoonException.MaximumRetriesReached:\n case KameleoonException.RemoteData:\n case KameleoonException.VersionParse:\n case KameleoonException.SemanticVersionParse:\n this.message = ERROR_MESSAGES[type](secondParam as string);\n break;\n case KameleoonException.FeatureFlagExperimentNotFound:\n this.message = ERROR_MESSAGES[type](\n secondParam as number,\n thirdParam as string,\n );\n break;\n case KameleoonException.FeatureFlagVariationNotFound:\n case KameleoonException.FeatureFlagVariableNotFound:\n this.message = ERROR_MESSAGES[type](\n secondParam as string,\n thirdParam as string,\n );\n break;\n case KameleoonException.FeatureFlagEnvironmentDisabled:\n if (thirdParam !== undefined) {\n this.message = ERROR_MESSAGES[type](\n secondParam as string,\n thirdParam as string,\n );\n } else {\n this.message = secondParam as string;\n }\n break;\n case KameleoonException.StorageWrite:\n case KameleoonException.JSONParse:\n this.message = ERROR_MESSAGES[type](secondParam);\n break;\n case KameleoonException.StorageRead:\n this.message = ERROR_MESSAGES[type](secondParam as KameleoonStorageKey);\n break;\n case KameleoonException.StorageParse:\n this.message = ERROR_MESSAGES[type](\n secondParam,\n thirdParam as KameleoonStorageKey,\n );\n break;\n case KameleoonException.TargetingCondition:\n this.message = ERROR_MESSAGES[type](secondParam as TargetingType);\n break;\n case KameleoonException.AmongValuesCheck:\n this.message = ERROR_MESSAGES[type](secondParam, thirdParam as string);\n break;\n case KameleoonException.RangeCheck:\n this.message = ERROR_MESSAGES[type](\n secondParam as number[] | null | undefined,\n );\n break;\n default:\n exhaustCheck(type);\n }\n }\n\n get type(): KameleoonException {\n return this.errorType;\n }\n}\n","import { JSONType } from 'src/clientConfiguration';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport {\n BrowserIndexMap,\n BrowserType,\n OperatingSystemType,\n} from 'src/kameleoonData';\nimport {\n CBSType,\n DeviceType,\n KCSType,\n OperatingSystemIndexMap,\n} from 'src/kameleoonData/types';\nimport { Header } from './constants';\nimport { VisitorDataFiltersType } from 'src/utilities';\nimport { IUrlProvider } from './urlProvider';\nimport { LogLevel } from 'src/logging';\n\nexport enum UrlType {\n DataApi = 'dataApi',\n Events = 'events',\n ClientConfiguration = 'clientConfiguration',\n}\n\nexport type DomainsType = {\n [key in UrlType]: string;\n};\n\nexport type DomainType = {\n subdomain: string;\n topLevelDomain: string;\n secondLevelDomain: string;\n};\n\nexport type UrlProviderInitializeParamsType = {\n domain: string | null;\n siteCode: string;\n packageInfo: ExternalPackageInfoType;\n environment: string;\n};\n\nexport type RequesterParamsType = {\n useAbortController: boolean;\n urlProvider: IUrlProvider;\n packageInfo: ExternalPackageInfoType;\n externalRequester: IExternalRequester;\n trackRetryDelay: number;\n requestTimeout: number;\n};\n\nexport type GetVisitorDataParamsType = {\n visitorCode: string;\n filters: VisitorDataFiltersType;\n isMappingIdentifier?: boolean;\n};\n\nexport type GetVisitorDataUrlParamsType = {\n visitorCode: string;\n filters: VisitorDataFiltersType;\n isMappingIdentifier?: boolean;\n};\n\ntype EventDataType = {\n sdk?: {\n name: string;\n version: string;\n };\n itp: boolean;\n time: number;\n};\n\ntype CustomDataEventType = {\n data: {\n index: number;\n valuesCountMap: {\n [value: string]: number;\n };\n overwrite: boolean;\n mappingIdentifier: boolean;\n };\n} & EventDataType;\n\ntype ExperimentEventType = {\n data: {\n id: number;\n variationId: number;\n };\n} & EventDataType;\n\ntype ConversionEventType = {\n data: {\n goalId: number;\n revenue: number;\n negative: boolean;\n metadata?: CustomDataEventType[];\n };\n} & EventDataType;\n\ntype BrowserIndexType = (typeof BrowserIndexMap)[BrowserType];\ntype OperatingSystemIndexType =\n (typeof OperatingSystemIndexMap)[OperatingSystemType];\n\nexport type PageEventType = {\n data: {\n href: string;\n canonicalHref: string | null;\n title: string;\n keyPagesIndices: number[] | [null];\n referrerHref: string | null;\n referrersIndices: number[] | [null];\n };\n} & EventDataType;\n\nexport type GeolocationEventType = {\n data: {\n country: string;\n region: string | null;\n city: string | null;\n postalCode: string | null;\n latitude: number | null;\n longitude: number | null;\n };\n} & EventDataType;\n\nexport type PersonalizationEventType = {\n data: {\n id: number;\n variationId: number;\n };\n};\n\nexport type StaticDataEventType = {\n data: {\n visitNumber: number | null | undefined;\n timeSincePreviousVisit: number | null | undefined;\n firstReferrerHref: string | null;\n browser: BrowserType | null;\n browserIndex: BrowserIndexType | null;\n browserVersion: number | null;\n os: OperatingSystemType | null;\n osIndex: OperatingSystemIndexType | null;\n windowWidth: number | null;\n windowHeight: number | null;\n screenWidth: number | null;\n screenHeight: number | null;\n timeZoneId: string | null;\n localeLanguageTag: string | null;\n deviceType: DeviceType | null;\n mappingIdentifier: string | null;\n };\n} & EventDataType;\n\nexport type VisitType = {\n siteCode: string;\n visitorCode: string;\n timeStarted: number;\n timeLastEvent?: number;\n customDataEvents?: CustomDataEventType[];\n experimentEvents?: ExperimentEventType[];\n conversionEvents?: ConversionEventType[];\n geolocationEvents?: GeolocationEventType[];\n staticDataEvent?: StaticDataEventType;\n pageEvents?: PageEventType[];\n personalizationEvents?: PersonalizationEventType[];\n};\n\nexport type GetVisitorDataResultType = {\n previousVisits?: VisitType[];\n currentVisit?: VisitType;\n kcs?: KCSType;\n cbs?: CBSType;\n};\n\nexport enum HttpMethod {\n Get = 'GET',\n Post = 'POST',\n}\n\nexport enum DataApiQuery {\n VisitEvent,\n VisitData,\n DataMap,\n}\n\nconst EVENT_TYPE_KEYS = [\n 'customData',\n 'staticData',\n 'targetingSegment',\n 'page',\n 'conversion',\n 'geolocation',\n 'activity',\n 'experiment',\n] as const;\nconst PARAMETER_KEYS = [\n 'valuesCountMap',\n 'mappingValue',\n 'id',\n 'nonce',\n 'country',\n 'environment',\n 'city',\n 'region',\n 'latitude',\n 'geolocation',\n 'longitude',\n 'mappingIdentifier',\n 'postalCode',\n 'sdkName',\n 'sdkVersion',\n 'kcs',\n 'cbs',\n 'personalization',\n 'browserIndex',\n 'browserVersion',\n 'siteCode',\n 'visitorCode',\n 'currentVisit',\n 'maxNumberPreviousVisits',\n 'customData',\n 'negative',\n 'metadata',\n 'revenue',\n 'title',\n 'os',\n 'conversion',\n 'staticData',\n 'osIndex',\n 'browser',\n 'referrersIndices',\n 'overwrite',\n 'index',\n 'href',\n 'experiment',\n 'page',\n 'variationId',\n 'deviceType',\n 'goalId',\n 'ts',\n 'key',\n 'userAgent',\n 'bodyUa',\n 'timeSincePreviousVisit',\n 'visitNumber',\n] as const;\nconst TRACKING_KEYS = ['visit', 'map'] as const;\nconst QUERY_KEYS = ['sse', 'visitor', 'map', 'events'] as const;\n\nexport type TrackingType = Record<\n Capitalize<(typeof TRACKING_KEYS)[number]>,\n string\n>;\nexport type QueryType = Record<Capitalize<(typeof QUERY_KEYS)[number]>, string>;\nexport type ParameterType = Record<\n Capitalize<(typeof PARAMETER_KEYS)[number]>,\n string\n>;\nexport type EventType = Record<\n Capitalize<(typeof EVENT_TYPE_KEYS)[number]>,\n string\n>;\n\nexport type StrictTrackingRecord<T> = {\n [K in keyof T]: `${Uncapitalize<K & string>}/`;\n};\nexport type StrictQueryRecord<T> = {\n [K in keyof T]: `${Uncapitalize<K & string>}?siteCode=`;\n};\nexport type StrictEventTypeRecord<T> = {\n [K in keyof T]: `eventType=${Uncapitalize<K & string>}`;\n};\nexport type StrictParameterRecord<T> = {\n [K in keyof T]: `&${Uncapitalize<K & string>}=`;\n};\nexport type StrictFirstParameterRecord<T> = {\n [K in keyof T]: `?${Uncapitalize<K & string>}=`;\n};\n\n/**\n * @type `HeadersType` - a type of headers available in the request\n * */\nexport type HeadersType = Partial<Record<Header, string>>;\n\n/**\n * @type `RequestParametersType` - a type of parameters available in the request for each request type\n * */\nexport type RequestParametersType = {\n [RequestType.Configuration]: {\n headers?: HeadersType;\n signal: AbortSignal | null;\n method: HttpMethod.Get;\n };\n [RequestType.Tracking]: {\n headers?: HeadersType;\n body: string;\n signal: AbortSignal | null;\n method: HttpMethod.Post;\n };\n [RequestType.RemoteData]: {\n signal: AbortSignal | null;\n method: HttpMethod.Get;\n };\n};\n\n/**\n * @enum `RequestType` - an enum of available request types\n * */\nexport enum RequestType {\n Configuration = 'configuration',\n Tracking = 'tracking',\n RemoteData = 'remoteData',\n}\n\n/**\n * @type `RetryCountType` - a type of retry count available for each request type\n * @param {0 | 1 | 2} `RequestType.Configuration` - a count of retries for configuration request (`0` is the initial request)\n * @param {0 | 1 | 2} `RequestType.Tracking` - a count of retries for tracking request (`0` is the initial request)\n * @param {0} `RequestType.RemoteData` - a count of retries for remote data request (`0` is the initial request)\n * */\nexport type RetryCountType = {\n [RequestType.Configuration]: 0 | 1 | 2;\n [RequestType.Tracking]: 0 | 1 | 2;\n [RequestType.RemoteData]: 0;\n};\n\n/**\n * @type `SendRequestParametersType` - a type of parameters available to send a request\n * @param {T extends RequestType} T - a type of request constrained by `RequestType`\n * @param {string} url - url address\n * @param {RequestParametersType[T]} parameters - parameters of the request depending on the request type\n * @param {RetryCountType | undefined} retryCount - a count of retries, the possible count of retries depends on `RequestType`\n * */\nexport type SendRequestParametersType<T extends RequestType> = {\n requestType: T;\n url: string;\n retryCount?: RetryCountType[T];\n parameters: RequestParametersType[T];\n};\n\n/**\n * @type `KameleoonResponse` - a type of response that is assignable to most libraries `Response` objects\n * @property {number} status - a status of the response\n * @property {() => Promise<JSONType>} json - a method to parse the response to JSON\n * @property {() => Promise<string>} text - a method to parse the response to text\n * @property {boolean} ok - a boolean value that indicates if the response is ok\n * @property {Headers} headers - a headers of the response\n * */\nexport type KameleoonResponseType = {\n status: number;\n json: () => Promise<JSONType>;\n text: () => Promise<string>;\n ok: boolean;\n headers?: Iterable<[string, string]>;\n};\n\nexport type InternalSendRequestParametersType<T extends RequestType> = {\n url: string;\n requestType: RequestType;\n retryCount: number;\n parameters: Omit<RequestParametersType[T], 'signal'>;\n};\n\n/**\n * @interface `IExternalRequester` - an interface of External Requester which will be used to perform requests.\n * */\nexport interface IExternalRequester {\n /**\n * @method sendRequest - send a request\n * @param {SendRequestParametersType<T>} parameters - parameters of the request depending on the request type\n * @returns {Promise<KameleoonResponseType>} - a promise that resolves to the response\n * */\n sendRequest: <T extends RequestType>({\n requestType,\n url,\n parameters,\n }: SendRequestParametersType<T>) => Promise<KameleoonResponseType>;\n}\n\nexport type logRequestParametersType = {\n logLevel: LogLevel;\n message: string;\n error?: unknown;\n method: HttpMethod;\n url: string;\n response?: KameleoonResponseType;\n headers?: HeadersType;\n};\n\nexport type logResponse = {\n status: number;\n message: string;\n};\n","import {\n DomainsType,\n EventType,\n ParameterType,\n QueryType,\n UrlType,\n StrictEventTypeRecord,\n StrictFirstParameterRecord,\n StrictParameterRecord,\n StrictQueryRecord,\n StrictTrackingRecord,\n TrackingType,\n} from './types';\n\nexport const NUMBER_OF_RETRIES = 1;\n\nexport enum Header {\n UserAgent = 'User-Agent',\n ContentType = 'Content-Type',\n SdkVersion = 'X-Kameleoon-SDK-Version',\n SdkType = 'X-Kameleoon-SDK-Type',\n Authorization = 'Authorization',\n AcceptEncoding = 'Accept-Encoding',\n IfModifiedSince = 'If-Modified-Since',\n LastModified = 'Last-Modified',\n}\n\nexport const UrlEventType: StrictEventTypeRecord<EventType> = {\n CustomData: 'eventType=customData',\n StaticData: 'eventType=staticData',\n Page: 'eventType=page',\n Conversion: 'eventType=conversion',\n Activity: 'eventType=activity',\n Experiment: 'eventType=experiment',\n Geolocation: 'eventType=geolocation',\n TargetingSegment: 'eventType=targetingSegment',\n};\nexport const UrlParameter: StrictParameterRecord<ParameterType> = {\n Title: '&title=',\n ReferrersIndices: '&referrersIndices=',\n Negative: '&negative=',\n Revenue: '&revenue=',\n Overwrite: '&overwrite=',\n Index: '&index=',\n BrowserIndex: '&browserIndex=',\n BrowserVersion: '&browserVersion=',\n Href: '&href=',\n DeviceType: '&deviceType=',\n SiteCode: '&siteCode=',\n GoalId: '&goalId=',\n VisitorCode: '&visitorCode=',\n VariationId: '&variationId=',\n Ts: '&ts=',\n Key: '&key=',\n SdkName: '&sdkName=',\n SdkVersion: '&sdkVersion=',\n ValuesCountMap: '&valuesCountMap=',\n Nonce: '&nonce=',\n Id: '&id=',\n CustomData: '&customData=',\n CurrentVisit: '¤tVisit=',\n MaxNumberPreviousVisits: '&maxNumberPreviousVisits=',\n Os: '&os=',\n OsIndex: '&osIndex=',\n Country: '&country=',\n City: '&city=',\n Region: '®ion=',\n Latitude: '&latitude=',\n Longitude: '&longitude=',\n PostalCode: '&postalCode=',\n Conversion: '&conversion=',\n StaticData: '&staticData=',\n Geolocation: '&geolocation=',\n Page: '&page=',\n Experiment: '&experiment=',\n Browser: '&browser=',\n Environment: '&environment=',\n MappingIdentifier: '&mappingIdentifier=',\n MappingValue: '&mappingValue=',\n Kcs: '&kcs=',\n Personalization: '&personalization=',\n UserAgent: '&userAgent=',\n BodyUa: '&bodyUa=',\n Cbs: '&cbs=',\n Metadata: '&metadata=',\n VisitNumber: '&visitNumber=',\n TimeSincePreviousVisit: '&timeSincePreviousVisit=',\n};\nexport const UrlFirstParameter: StrictFirstParameterRecord<ParameterType> = {\n CustomData: '?customData=',\n StaticData: '?staticData=',\n Page: '?page=',\n Conversion: '?conversion=',\n Geolocation: '?geolocation=',\n Experiment: '?experiment=',\n ValuesCountMap: '?valuesCountMap=',\n Id: '?id=',\n Nonce: '?nonce=',\n Country: '?country=',\n Environment: '?environment=',\n City: '?city=',\n Region: '?region=',\n Latitude: '?latitude=',\n Longitude: '?longitude=',\n PostalCode: '?postalCode=',\n SdkName: '?sdkName=',\n SdkVersion: '?sdkVersion=',\n BrowserIndex: '?browserIndex=',\n BrowserVersion: '?browserVersion=',\n SiteCode: '?siteCode=',\n VisitorCode: '?visitorCode=',\n CurrentVisit: '?currentVisit=',\n MaxNumberPreviousVisits: '?maxNumberPreviousVisits=',\n Negative: '?negative=',\n Revenue: '?revenue=',\n Title: '?title=',\n Os: '?os=',\n OsIndex: '?osIndex=',\n Browser: '?browser=',\n ReferrersIndices: '?referrersIndices=',\n Overwrite: '?overwrite=',\n Index: '?index=',\n Href: '?href=',\n VariationId: '?variationId=',\n DeviceType: '?deviceType=',\n GoalId: '?goalId=',\n Ts: '?ts=',\n Key: '?key=',\n MappingIdentifier: '?mappingIdentifier=',\n MappingValue: '?mappingValue=',\n Kcs: '?kcs=',\n Personalization: '?personalization=',\n UserAgent: '?userAgent=',\n BodyUa: '?bodyUa=',\n Cbs: '?cbs=',\n Metadata: '?metadata=',\n VisitNumber: '?visitNumber=',\n TimeSincePreviousVisit: '?timeSincePreviousVisit=',\n};\nexport const UrlQuery: StrictQueryRecord<QueryType> = {\n Sse: 'sse?siteCode=',\n Map: 'map?siteCode=',\n Events: 'events?siteCode=',\n Visitor: 'visitor?siteCode=',\n};\nexport const UrlTracking: StrictTrackingRecord<TrackingType> = {\n Visit: 'visit/',\n Map: 'map/',\n};\n\nexport const DEFAULT_DOMAINS: DomainsType = {\n [UrlType.DataApi]: 'data.kameleoon.io',\n [UrlType.Events]: 'events.kameleoon.eu',\n [UrlType.ClientConfiguration]: 'sdk-config.kameleoon.eu',\n};\n","/**\n * Interface for a logger that accepts log messages at different levels.\n */\nexport interface IExternalLogger {\n /**\n * @method log - logs a message at the specified log level.\n *\n * @param {LogLevel} level the log level\n * @param {string} message the log message\n */\n log(level: LogLevel, message: string): void;\n}\n\n/**\n * Enumeration of log levels.\n */\nexport enum LogLevel {\n NONE,\n ERROR,\n WARNING,\n INFO,\n DEBUG,\n}\n\ntype LogLevelNames = {\n [K in string & keyof typeof LogLevel as (typeof LogLevel)[K]]: K;\n};\n\n/**\n * Mapping of log levels to their string representations.\n */\nexport const LOG_LEVEL_NAMES: LogLevelNames = {\n [LogLevel.NONE]: 'NONE',\n [LogLevel.ERROR]: 'ERROR',\n [LogLevel.WARNING]: 'WARNING',\n [LogLevel.INFO]: 'INFO',\n [LogLevel.DEBUG]: 'DEBUG',\n};\n\nexport type LogInputType = TemplateStringsArray | string | (() => string);\n\nexport type LogParametersType = {\n level: LogLevel;\n strings: LogInputType;\n keys?: unknown[];\n};\n","import { IExternalLogger, LogLevel } from 'src/logging/types';\n\n/**\n * A simple implementation of a logger that prints log messages to the console. This logger\n * implements the {@code IExternalLogger} interface.\n */\nexport class DefaultLogger implements IExternalLogger {\n /**\n * @method log - logs a message at the specified log level.\n *\n * @param {LogLevel} level - the log level\n * @param {string} message - the log message\n */\n public log(level: LogLevel, message: string): void {\n switch (level) {\n case LogLevel.DEBUG:\n console.debug(message);\n break;\n case LogLevel.INFO:\n console.info(message);\n break;\n case LogLevel.WARNING:\n console.warn(message);\n break;\n case LogLevel.ERROR:\n console.error(message);\n break;\n }\n }\n}\n","import {\n IExternalLogger,\n LogInputType,\n LogLevel,\n LOG_LEVEL_NAMES,\n LogParametersType,\n} from 'src/logging/types';\nimport { DefaultLogger } from 'src/logging/defaultLogger';\n\nconst replacer = (key: string, value: unknown) => {\n if (key === 'credentials') {\n return {\n clientId: `****`,\n clientSecret: `****`,\n };\n }\n\n if (value instanceof Map) {\n return Array.from(value.entries());\n }\n\n return value;\n};\n\nfunction template(strings: TemplateStringsArray, keys?: unknown[]): string {\n let res = '';\n\n if (keys) {\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n if (typeof key === 'object') {\n try {\n res += strings[i] + JSON.stringify(key, replacer);\n } catch (error) {\n res += strings[i] + \"{object}\";\n }\n } else if (typeof key === 'string') {\n res += strings[i] + \"'\" + key + \"'\";\n } else {\n res += strings[i] + key;\n }\n }\n }\n\n res += strings[strings.length - 1];\n return res;\n}\n\nexport class KameleoonLogger {\n private static logger: IExternalLogger = new DefaultLogger();\n private static logLevel: LogLevel = LogLevel.WARNING;\n\n public static setLogger(logger: IExternalLogger): void {\n KameleoonLogger.logger = logger;\n }\n\n public static setLogLevel(logLevel: LogLevel): void {\n KameleoonLogger.logLevel = logLevel;\n }\n\n public static log({ level, strings, keys }: LogParametersType): void {\n if (!KameleoonLogger.checkLevel(level)) return;\n\n let message: string;\n\n if (typeof strings === 'string') {\n message = strings;\n } else if (typeof strings === 'function') {\n try {\n message = strings();\n } catch (error) {\n message = 'Failed to log message';\n }\n } else {\n message = template(strings, keys);\n }\n\n KameleoonLogger.writeMessage(level, message);\n }\n\n public static info(strings: LogInputType, ...keys: unknown[]): void {\n KameleoonLogger.log({ level: LogLevel.INFO, strings, keys });\n }\n\n public static error(strings: LogInputType, ...keys: unknown[]): void {\n KameleoonLogger.log({ level: LogLevel.ERROR, strings, keys });\n }\n\n public static warning(strings: LogInputType, ...keys: unknown[]): void {\n KameleoonLogger.log({ level: LogLevel.WARNING, strings, keys });\n }\n\n public static debug(strings: LogInputType, ...keys: unknown[]): void {\n KameleoonLogger.log({ level: LogLevel.DEBUG, strings, keys });\n }\n\n public static checkLevel(level: LogLevel): boolean {\n return level <= KameleoonLogger.logLevel && level !== LogLevel.NONE;\n }\n\n private static writeMessage(level: LogLevel, message: string): void {\n KameleoonLogger.logger.log(\n level,\n `Kameleoon [${LOG_LEVEL_NAMES[level]}]: ${message}`,\n );\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { ConfigurationDataType, JSONType } from 'src/clientConfiguration';\nimport { Header, NUMBER_OF_RETRIES } from './constants';\nimport {\n RequesterParamsType,\n GetVisitorDataResultType,\n HeadersType,\n GetVisitorDataParamsType,\n IExternalRequester,\n RequestType,\n HttpMethod,\n InternalSendRequestParametersType,\n KameleoonResponseType,\n RequestParametersType,\n logRequestParametersType,\n logResponse,\n} from './types';\nimport { IUrlProvider } from './urlProvider';\nimport { KameleoonLogger, LogLevel } from 'src/logging';\nimport { ResultConfigurationDataType } from 'src/clientConfiguration/types';\n\nexport interface IRequester {\n getClientConfiguration: () => Promise<\n Result<ResultConfigurationDataType, KameleoonError>\n >;\n getRemoteData: (key: string) => Promise<Result<JSONType, KameleoonError>>;\n track: (\n body: string,\n isBodyUserAgent: boolean,\n ) => Promise<Result<void, void>>;\n}\n\nexport class Requester implements IRequester {\n private externalRequester: IExternalRequester;\n private urlProvider: IUrlProvider;\n private packageInfo: ExternalPackageInfoType;\n private trackRetryDelay: number;\n private useAbortController: boolean;\n private timeout: number;\n\n constructor({\n urlProvider,\n packageInfo,\n externalRequester,\n requestTimeout,\n trackRetryDelay,\n useAbortController,\n }: RequesterParamsType) {\n KameleoonLogger.debug`CALL: new Requester(urlProvider, packageInfo: ${packageInfo}, externalRequester, requestTimeout: ${requestTimeout}, trackRetryDelay: ${trackRetryDelay}, useAbortController: ${useAbortController})`;\n this.urlProvider = urlProvider;\n this.useAbortController = useAbortController;\n this.externalRequester = externalRequester;\n this.trackRetryDelay = trackRetryDelay;\n this.packageInfo = packageInfo;\n this.timeout = requestTimeout;\n KameleoonLogger.debug`RETURN: new Requester(urlProvider, packageInfo: ${packageInfo}, externalRequester, requestTimeout: ${requestTimeout}, trackRetryDelay: ${trackRetryDelay}, useAbortController: ${useAbortController})`;\n }\n\n public async getClientConfiguration(\n timeStamp?: number,\n modifiedSince?: string,\n ): Promise<Result<ResultConfigurationDataType, KameleoonError>> {\n const requestUrl = this.urlProvider.getClientConfigurationUrl(timeStamp);\n\n let headers: HeadersType = {\n [Header.SdkType]: this.packageInfo.type.toLowerCase(),\n [Header.SdkVersion]: this.packageInfo.version,\n ...(modifiedSince && { [Header.IfModifiedSince]: modifiedSince }),\n };\n\n // --- Note ---\n // Initial request + NUMBER_OF_RETRIES\n const requests = NUMBER_OF_RETRIES + 1;\n\n try {\n let responseInfo = { message: '' };\n\n KameleoonLogger.debug`Running configuration request Method: ${HttpMethod.Get}, Url: ${requestUrl}, Headers: ${headers}, with retry limit ${requests}`;\n for (let i = 0; i < requests; i++) {\n const response = await this.sendRequest<RequestType.Configuration>({\n url: requestUrl,\n requestType: RequestType.Configuration,\n retryCount: i,\n parameters: {\n method: HttpMethod.Get,\n headers,\n },\n });\n\n if (response.ok) {\n const data = await response.json();\n\n this.logReceivedConfigurationResponse(response.status, requestUrl, headers);\n\n const lastModified = this.getLastModifiedHeader(response);\n const configurationData = data as ConfigurationDataType;\n\n return Ok({\n configuration: configurationData,\n lastModified: lastModified,\n });\n }\n\n if (response.status === 304) {\n this.logReceivedConfigurationResponse(response.status, requestUrl, headers);\n\n return Ok({});\n }\n\n if (i === NUMBER_OF_RETRIES) {\n if (response.text) {\n const text = await response.text();\n responseInfo = JSON.parse(text);\n }\n KameleoonLogger.error`Failed to get configuration response ${{\n status: response.status,\n message: responseInfo.message,\n }} for request Method: ${\n HttpMethod.Get\n }, Url: ${requestUrl}, Headers: ${headers}`;\n } else {\n await this.logRequestError({\n logLevel: LogLevel.WARNING,\n message: 'Failed to get configuration response',\n response: response,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n }\n }\n\n return Err(\n new KameleoonError(\n KameleoonException.MaximumRetriesReached,\n responseInfo.message,\n ),\n );\n } catch (err) {\n await this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get configuration response',\n error: err,\n method: HttpMethod.Get,\n url: requestUrl,\n headers,\n });\n return Err(\n new KameleoonError(KameleoonException.ClientConfiguration, err),\n );\n }\n }\n\n public async getRemoteData(\n key: string,\n ): Promise<Result<JSONType, KameleoonError>> {\n const requestUrl = this.urlProvider.getRemoteDataUrl(key);\n\n KameleoonLogger.debug`Running remote data request Method: ${HttpMethod.Get}, Url: ${requestUrl}`;\n try {\n const response = await this.sendRequest<RequestType.RemoteData>({\n url: requestUrl,\n requestType: RequestType.RemoteData,\n retryCount: 0,\n parameters: {\n method: HttpMethod.Get,\n },\n });\n\n if (!response.ok) {\n await this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get remote data response',\n response: response,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n if (response.text) {\n const text = await response.text();\n const message = JSON.parse(text)?.message;\n\n return Err(\n new KameleoonError(KameleoonException.RemoteData, message),\n );\n }\n\n return Err(\n new KameleoonError(\n KameleoonException.RemoteData,\n 'Unknown Reason - no `text()` was found for a response',\n ),\n );\n }\n\n const data = await response.json();\n\n KameleoonLogger.debug`Received remote data response: ${{\n status: response.status,\n }} for request Method: ${HttpMethod.Get}, Url: ${requestUrl}`;\n return Ok(data);\n } catch (err) {\n await this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get remote data response',\n error: err,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n return Err(new KameleoonError(KameleoonException.RemoteData, err));\n }\n }\n\n public async getVisitorData({\n visitorCode,\n filters,\n isMappingIdentifier,\n }: GetVisitorDataParamsType): Promise<\n Result<GetVisitorDataResultType, KameleoonError>\n > {\n const requestUrl = this.urlProvider.getVisitorDataUrl({\n visitorCode,\n filters,\n isMappingIdentifier,\n });\n\n KameleoonLogger.debug`Running visitor data request Method: ${HttpMethod.Get}, Url: ${requestUrl}`;\n try {\n const response = await this.sendRequest<RequestType.RemoteData>({\n url: requestUrl,\n requestType: RequestType.RemoteData,\n retryCount: 0,\n parameters: {\n method: HttpMethod.Get,\n },\n });\n\n if (!response.ok) {\n await this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get visitor data response',\n response: response,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n if (typeof response.text === 'function') {\n const text = await response.text();\n\n if (text) {\n const message = JSON.parse(text)?.message;\n\n return Err(\n new KameleoonError(KameleoonException.RemoteData, message),\n );\n }\n }\n\n if (response.status) {\n return Err(\n new KameleoonError(\n KameleoonException.RemoteData,\n `No error message. Error status: ${response.status}`,\n ),\n );\n }\n\n return Err(\n new KameleoonError(\n KameleoonException.RemoteData,\n 'Unknown Reason - no text message or error status was found for a response',\n ),\n );\n }\n\n const data = await response.json();\n\n KameleoonLogger.debug`Received visitor data response: ${{\n status: response.status,\n }} for request Method: ${HttpMethod.Get}, Url: ${requestUrl}`;\n return Ok(data as GetVisitorDataResultType);\n } catch (err) {\n await this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get visitor data response',\n error: err,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n return Err(new KameleoonError(KameleoonException.RemoteData, err));\n }\n }\n\n public async track(\n body: string,\n isBodyUserAgent: boolean,\n ): Promise<Result<void, void>> {\n // --- Note ---\n // Initial request + NUMBER_OF_RETRIES\n const requests = NUMBER_OF_RETRIES + 1;\n const url = this.urlProvider.getTrackingUrl(isBodyUserAgent);\n\n KameleoonLogger.debug`Running tracking request Method: ${HttpMethod.Post}, Url: ${url}, Body: ${body}, with retry limit ${requests}, retry delay ${this.trackRetryDelay} ms`;\n for (let i = 0; i < requests; i++) {\n let response;\n try {\n response = await this.sendRequest<RequestType.Tracking>({\n url,\n retryCount: i,\n requestType: RequestType.Tracking,\n parameters: {\n body,\n method: HttpMethod.Post,\n headers: {\n [Header.ContentType]: '*/*',\n },\n },\n });\n\n if (response.ok) {\n KameleoonLogger.debug`Received tracking response: ${{\n status: response.status,\n }} for request Method: ${\n HttpMethod.Post\n }, Url: ${url}, Body: ${body}`;\n return Ok();\n }\n\n await this.logRequestError({\n logLevel: i == NUMBER_OF_RETRIES ? LogLevel.ERROR : LogLevel.WARNING,\n message: 'Failed to get tracking response',\n response: response,\n method: HttpMethod.Post,\n url,\n });\n } catch (error) {\n await this.logRequestError({\n logLevel: i == NUMBER_OF_RETRIES ? LogLevel.ERROR : LogLevel.WARNING,\n message: 'Failed to get tracking response',\n error,\n method: HttpMethod.Post,\n url,\n });\n }\n\n if (i < requests) {\n await new Promise((resolve) =>\n setTimeout(resolve, this.trackRetryDelay),\n );\n }\n }\n\n return Err();\n }\n\n private async sendRequest<T extends RequestType>({\n url,\n requestType,\n retryCount,\n parameters,\n }: InternalSendRequestParametersType<T>): Promise<KameleoonResponseType> {\n let response;\n\n if (this.useAbortController) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n response = await this.externalRequester.sendRequest({\n url,\n retryCount: retryCount as 0 | 1 | 2,\n requestType,\n parameters: {\n ...parameters,\n signal: controller.signal,\n } as RequestParametersType[T],\n });\n\n clearTimeout(timeoutId);\n } else {\n response = await this.externalRequester.sendRequest({\n url,\n retryCount: retryCount as 0 | 1 | 2,\n requestType,\n parameters: parameters as RequestParametersType[T],\n });\n }\n\n return response;\n }\n\n private async logRequestError({\n logLevel,\n message,\n error,\n method,\n url,\n response,\n headers,\n }: logRequestParametersType): Promise<void> {\n if (error) {\n let errorText = 'Unknown error';\n if (error instanceof Error) {\n errorText = error.message;\n }\n KameleoonLogger.log({\n level: logLevel,\n strings: () =>\n `${message} with error: ${errorText} for request Method: ${method}, Url: ${url}`,\n });\n } else if (response) {\n if (KameleoonLogger.checkLevel(logLevel)) {\n const logResponse = await this.parseResponse(response);\n KameleoonLogger.log({\n level: logLevel,\n strings: () =>\n `${message} response: Status: '${logResponse.status}' Message: '${logResponse.message}' for request Method: ${method}, Url: '${url}'` +\n (headers ? `, Headers: ${headers}` : ''),\n });\n }\n }\n }\n\n private async parseResponse(\n response: KameleoonResponseType,\n ): Promise<logResponse> {\n let message = '';\n try {\n if (typeof response.text === 'function') {\n const text = await response.text();\n if (text) {\n message = text;\n }\n }\n } catch (error) {}\n\n return {\n status: response.status,\n message: message,\n };\n }\n\n private getLastModifiedHeader(\n response: KameleoonResponseType,\n ): string | undefined {\n if (response.headers) {\n const targetKey = Header.LastModified.toLowerCase();\n for (const [key, value] of response.headers) {\n if (key.toLowerCase() === targetKey) {\n return value;\n }\n }\n }\n return undefined;\n }\n\n private logReceivedConfigurationResponse(responseStatus: number, requestUrl: string, headers: HeadersType): void {\n KameleoonLogger.debug`Received configuration response: ${{\n status: responseStatus,\n }} for request Method: ${\n HttpMethod.Get\n }, Url: ${requestUrl}, Headers: ${headers}`;\n }\n}\n","import { SdkLanguageType } from './constants';\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of environment, passed as an argument to KameleoonClient `configuration`s `environment` field\n * */\nexport enum Environment {\n Production = 'production',\n Staging = 'staging',\n Development = 'development',\n}\n\n/**\n * @param {SdkLanguageType} type - type of the SDK\n * @param {string} version - version of the package\n * @param {boolean} isServer - flag to indicate if the SDK is running on the server\n * */\nexport type ExternalPackageInfoType = {\n type: SdkLanguageType;\n version: string;\n isServer: boolean;\n};\n","import { Environment, ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport {\n UrlFirstParameter,\n UrlParameter,\n UrlTracking,\n UrlQuery,\n DEFAULT_DOMAINS,\n} from './constants';\nimport {\n DataApiQuery,\n DomainsType,\n GetVisitorDataUrlParamsType,\n UrlProviderInitializeParamsType,\n UrlType,\n} from './types';\n\nexport interface IUrlProvider {\n initialize(params: UrlProviderInitializeParamsType): void;\n getClientConfigurationUrl(timeStamp?: number): string;\n getEventSourceUrl(): string;\n getRemoteDataUrl(key: string): string;\n getVisitorDataUrl(params: GetVisitorDataUrlParamsType): string;\n getTrackingUrl(isBodyUserAgent: boolean): string;\n dataApiDomain: string;\n}\n\nexport class UrlProvider implements IUrlProvider {\n private ready = false;\n private isCustomDomain = false;\n private domains: DomainsType = DEFAULT_DOMAINS;\n private siteCode?: string;\n private environment?: string;\n private packageInfo?: ExternalPackageInfoType;\n\n public initialize({\n domain,\n siteCode,\n packageInfo,\n environment,\n }: UrlProviderInitializeParamsType) {\n this.siteCode = siteCode;\n this.environment = environment;\n this.packageInfo = packageInfo;\n this.ready = true;\n\n this.setDomains(domain);\n }\n\n set dataApiDomain(domain: string) {\n if (!this.isCustomDomain) {\n this.domains[UrlType.DataApi] = domain;\n return;\n }\n\n const subDomain = domain.split('.')[0];\n const currentDomain = this.domains[UrlType.DataApi];\n this.domains[UrlType.DataApi] = currentDomain.replace(/^[^.]+/, subDomain);\n }\n\n get dataApiDomain(): string {\n return this.domains[UrlType.DataApi];\n }\n\n public getClientConfigurationUrl(timeStamp?: number): string {\n this.isInitialized();\n\n const baseUrl = `https://${this.domains[UrlType.ClientConfiguration]}/v3/`;\n const environmentParam =\n this.environment === Environment.Production\n ? ''\n : UrlFirstParameter.Environment + encodeURIComponent(this.environment!);\n let timeStampParam = '';\n\n if (timeStamp) {\n if (environmentParam) {\n timeStampParam = UrlParameter.Ts + timeStamp;\n } else {\n timeStampParam = UrlFirstParameter.Ts + timeStamp;\n }\n }\n\n return baseUrl + this.siteCode + environmentParam + timeStampParam;\n }\n\n public getEventSourceUrl(): string {\n this.isInitialized();\n\n return `https://${this.domains[UrlType.Events]}:8110/${UrlQuery.Sse}${\n this.siteCode\n }`;\n }\n\n public getRemoteDataUrl(key: string): string {\n this.isInitialized();\n\n return (\n this.getDataApiUrl(DataApiQuery.DataMap) +\n this.siteCode +\n UrlParameter.Key +\n encodeURI(key)\n );\n }\n\n public getVisitorDataUrl({\n visitorCode,\n filters,\n isMappingIdentifier,\n }: GetVisitorDataUrlParamsType): string {\n this.isInitialized();\n\n const {\n customData,\n previousVisitAmount,\n currentVisit,\n conversions,\n geolocation,\n experiments,\n pageViews,\n device,\n browser,\n operatingSystem,\n kcs,\n personalization,\n visitorCode: visitorCodeFilter,\n cbs,\n } = filters;\n\n const identifierParameter = isMappingIdentifier\n ? UrlParameter.MappingValue\n : UrlParameter.VisitorCode;\n const customDataParameter =\n customData || visitorCodeFilter ? UrlParameter.CustomData + true : '';\n const conversionsParameter = conversions\n ? UrlParameter.Conversion + true\n : '';\n const geolocationParameter = geolocation\n ? UrlParameter.Geolocation + true\n : '';\n const experimentsParameter = experiments\n ? UrlParameter.Experiment + true\n : '';\n const pageViewsParameter = pageViews ? UrlParameter.Page + true : '';\n const staticDataParameter = UrlParameter.StaticData + true;\n const currentVisitParameter = currentVisit\n ? UrlParameter.CurrentVisit + true\n : '';\n const kcsParameter = kcs ? UrlParameter.Kcs + true : '';\n const personalizationParameter = personalization\n ? UrlParameter.Personalization + true\n : '';\n const previousVisitAmountParam =\n typeof previousVisitAmount !== 'number'\n ? UrlParameter.MaxNumberPreviousVisits + 1\n : UrlParameter.MaxNumberPreviousVisits + previousVisitAmount;\n const cbsParameter = cbs ? UrlParameter.Cbs + true : '';\n\n return (\n this.getDataApiUrl(DataApiQuery.VisitData) +\n this.siteCode +\n identifierParameter +\n visitorCode +\n previousVisitAmountParam +\n customDataParameter +\n conversionsParameter +\n geolocationParameter +\n experimentsParameter +\n pageViewsParameter +\n staticDataParameter +\n currentVisitParameter +\n kcsParameter +\n personalizationParameter +\n cbsParameter\n );\n }\n\n public getTrackingUrl(isBodyUserAgent: boolean): string {\n this.isInitialized();\n\n const { type, version } = this.packageInfo!;\n\n let url =\n this.getDataApiUrl(DataApiQuery.VisitEvent) +\n this.siteCode +\n UrlParameter.SdkName +\n type.toLowerCase() +\n UrlParameter.SdkVersion +\n version;\n\n if (isBodyUserAgent) {\n url += UrlParameter.BodyUa + true;\n }\n\n return url;\n }\n\n private isInitialized(): void {\n if (!this.ready) {\n throw new Error('UrlProvider is not initialized');\n }\n }\n\n private getDataApiUrl(query: DataApiQuery): string {\n if (!this.domains[UrlType.DataApi]) {\n throw new Error('Data API domain is not set');\n }\n\n const domain = `https://${this.domains[UrlType.DataApi]}`;\n\n switch (query) {\n case DataApiQuery.VisitEvent:\n return `${domain}/${UrlTracking.Visit + UrlQuery.Events}`;\n case DataApiQuery.VisitData:\n return `${domain}/${UrlTracking.Visit + UrlQuery.Visitor}`;\n case DataApiQuery.DataMap:\n return `${domain}/${UrlTracking.Map + UrlQuery.Map}`;\n }\n }\n\n private setDomains(domain: string | null): void {\n if (!domain) {\n return;\n }\n\n this.isCustomDomain = true;\n\n this.domains[UrlType.DataApi] = 'data.' + domain;\n this.domains[UrlType.Events] = 'events.' + domain;\n this.domains[UrlType.ClientConfiguration] = 'sdk-config.' + domain;\n }\n}\n","import {\n ClientConfigurationDataType,\n JSONType,\n RuleType,\n} from './clientConfiguration/types';\nimport { IExternalEventSource } from './eventSource';\nimport { IExternalRequester, IUrlProvider, RequestType } from './requester';\nimport { IExternalStorage } from './storage';\nimport { IExternalPRNG, VisitorDataFiltersType } from './utilities';\nimport { IVisitorCodeManager } from './visitorCodeManager';\nimport { IExternalLogger } from 'src/logging';\nimport { FeatureFlagType as ConfigFeatureFlagType } from 'src/clientConfiguration/types';\nimport { Environment, ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport { CustomData, DataManager } from 'src/kameleoonData';\n\n/**\n * @param {number} updateInterval - update interval in _minutes_ for sdk configuration, minimum value is 1 minute\n * @defaultvalue 60\n *\n * @param {Environment | string | undefined} environment - feature flag environment.\n * @defaultvalue Environment.Production\n *\n * @param {number | undefined} targetingDataCleanupInterval - interval in _minutes_ for cleaning up targeting data, minimum value is 1 minute\n * Note: if not specified, default value will be used\n * @defaultvalue\n * - JavaScript SDK: `undefined` (no cleanup)\n * - React/React Native SDK: `undefined` (no cleanup)\n * - NodeJS SDK: `30`\n *\n * @param {string | undefined} cookieDomain - domain which cookie which Kameleoon visitor code belongs to\n * @param {string | undefined} networkDomain - custom domain to be used in place of all requests URL, domain format is `example.com`, if the format is incorrect, default Kameleoon domain will be used\n * @param {number | undefined} requestTimeout - timeout in _milliseconds_ for requests\n * @defaultvalue `10_000` (10 seconds)\n * @param {number | undefined} trackingInterval - interval in _milliseconds_ for performing background tracking requests, must be a value between `100` to `1_000` milliseconds\n * @defaultvalue `1_000` (1 second)\n * @param {string | undefined} defaultDataFile - json string containing default configuration data, used to initialize the SDK when no data is available in the storage or when the data is not up-to-date\n * @defaultvalue `undefined` (no default data file)\n * */\nexport type SDKConfigurationType = {\n updateInterval?: number;\n environment?: Environment | string;\n targetingDataCleanupInterval?: number;\n requestTimeout?: number;\n networkDomain?: string;\n cookieDomain?: string;\n trackingInterval?: number;\n defaultDataFile?: string;\n};\n\n/**\n * @param {string} urlProvider - main source for all URLs used in the SDK\n * */\nexport type DependenciesType = {\n urlProvider?: IUrlProvider;\n};\n\n/**\n * @param {string} siteCode - client's siteCode defined on Kameleoon platform\n * @param {Partial<SDKConfigurationType>} configuration - client's configuration\n * @param {InternalSDKConfigurationType} internalConfiguration - internal configuration for sdk core to be initialized with certain parameters to certain type of JavaScript SDK\n * @param {DependenciesType | undefined} dependencies - internal dependencies meant primarily for testing purposes\n * @param {boolean | undefined} stubMode - When set to true, the client will operate in stub mode and perform no operations. In this mode, all method calls become no-ops, ensuring that no external actions or side effects occur.\n * */\nexport type SDKCoreParameters = {\n siteCode: string;\n internalConfiguration: InternalSDKConfigurationType;\n configuration?: Partial<SDKConfigurationType>;\n dependencies?: DependenciesType;\n stubMode?: boolean;\n};\n\n/**\n * @param {ExternalPackageInfoType} packageInfo - external package info, used to get package version and name\n * @param {IExternalPRNG | undefined} prng - external PRNG implementation\n * */\nexport type InternalsType = {\n packageInfo: ExternalPackageInfoType;\n prng?: IExternalPRNG;\n};\n\n/**\n * @param {IExternalStorage | undefined} externalStorage - external file system storage implemented outside client initialization\n * @param {IExternalEventSourceConstructor | undefined} externalEventSource - constructor for building external event source implementation\n * @param {ExternalPackageInfoType} externalPackageInfo - external package info, used to get package version and name\n * @param {IExternalRequester} externalRequester - external requester , used to track or get data\n * @param {IVisitorCodeManager} externalVisitorCodeManager - external visitor code manager, used to get or generate visitor code\n * @param {IExternalLogger | undefined} logger - external logger implementation\n * */\nexport type ExternalsType = {\n externalStorage: IExternalStorage;\n externalEventSource: IExternalEventSource;\n externalVisitorCodeManager: IVisitorCodeManager;\n externalPackageInfo: ExternalPackageInfoType;\n externalRequester: IExternalRequester;\n externalPRNG: IExternalPRNG;\n externalLogger?: IExternalLogger;\n};\n\n/**\n * @param {boolean} useAbortController - a flag to enable or disable usage of `AbortController` for requests allowing for `requestTimeout` to be respected\n * */\nexport type InternalSettingsType = {\n useAbortController: boolean;\n};\n\n/**\n * @param {ExternalsType} externals - external dependencies for the SDK\n * @param {InternalSettingsType} settings - internal settings for the SDK\n * */\nexport type InternalSDKConfigurationType = {\n externals: ExternalsType & InternalDependencies;\n settings: InternalSettingsType;\n};\n\nexport type InternalDependencies = {\n customDataManager?: DataManager;\n};\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of feature variable types\n * */\nexport enum VariableType {\n BOOLEAN = 'BOOLEAN',\n NUMBER = 'NUMBER',\n STRING = 'STRING',\n JSON = 'JSON',\n JS = 'JS',\n CSS = 'CSS',\n}\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants for data status\n * */\nexport enum TrackingStatus {\n Sent = 'sent',\n Unsent = 'unsent',\n Pending = 'pending',\n}\n\nexport type BooleanVariableType = {\n key: string;\n type: VariableType.BOOLEAN;\n value: boolean;\n};\n\nexport type NumberVariableType = {\n key: string;\n type: VariableType.NUMBER;\n value: number;\n};\n\nexport type StringVariableType = {\n key: string;\n type: VariableType.STRING;\n value: string;\n};\n\nexport type JSONVariableType = {\n key: string;\n type: VariableType.JSON;\n value: JSONType;\n};\n\nexport type JSVariableType = {\n key: string;\n type: VariableType.JS;\n value: string;\n};\n\nexport type CSSVariableType = {\n key: string;\n type: VariableType.CSS;\n value: string;\n};\n\n/**\n * @type `FeatureVariableResultType` - tuple of possible feature variable result types, each possible variation is an object containing `key`, `type` and `value` fields, `type` can be checked against `VariableType` enum, if the `type` is `VariableType.BOOLEAN` then the `value` type will be `boolean` and so on.\n * */\nexport type FeatureVariableResultType =\n | BooleanVariableType\n | NumberVariableType\n | JSVariableType\n | CSSVariableType\n | StringVariableType\n | JSONVariableType;\n\n/**\n * @type `FeatureFlagVariableType` - tuple of possible feature variable result types, each possible variation is an object containing `type` and `value` fields, `type` can be checked against `VariableType` enum, if the `type` is `VariableType.BOOLEAN` then the `value` type will be `boolean` and so on.\n * */\nexport type FeatureFlagVariableType = Omit<FeatureVariableResultType, 'key'>;\n\n/**\n * @readonly\n * @enum {number} a helper Enum for getting milliseconds for a second/minute/hour/day/week/month.\n * Month is considered as an average of 30 days\n * */\nexport enum Milliseconds {\n Second = 1000,\n Minute = 60 * Milliseconds.Second,\n Hour = 60 * Milliseconds.Minute,\n Day = 24 * Milliseconds.Hour,\n Week = 7 * Milliseconds.Day,\n Month = 30 * Milliseconds.Day,\n}\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {number} goalId - an id of a goal to track\n * @param {number | undefined} revenue - an optional parameter for revenue, default value is `0`\n * @param {boolean | undefined} negative Defines if the revenue is positive or negative, default value is `false`.\n * @param {CustomData[] | undefined} metadata Metadata of the conversion, default value is `undefined`.\n * */\nexport type TrackConversionParamsType = {\n visitorCode: string;\n goalId: number;\n revenue?: number;\n negative?: boolean;\n metadata?: CustomData[];\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {boolean | undefined} shouldAddData - optional parameter for adding retrieved data to the storage like `addData` method does, default value is `true`\n * @param {VisitorDataFiltersType | undefined} filters - optional parameter for specifying the filters for which data should be retrieved from what visit, by default only current and latest previous visits' `customData` is retrieved\n * */\nexport type RemoteVisitorDataParamsType = {\n visitorCode: string;\n shouldAddData?: boolean;\n filters?: VisitorDataFiltersType;\n};\n\n/**\n * @param {string | undefined} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {boolean | undefined} instant - Optional flag indicating whether the data should be sent instantly.\n * */\nexport type FlushParamsType = {\n visitorCode?: string;\n instant?: boolean;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {string} featureKey - key of the feature flag to look for, can be found on Kameleoon Platform\n * @param {boolean | undefined} track - a flag to enable or disable tracking request\n * @defaultvalue `true`\n * */\nexport type IsFeatureFlagActiveParamsType = {\n visitorCode: string;\n featureKey: string;\n track?: boolean;\n};\n\nexport type GetFeatureVariablesParamsType = {\n visitorCode: string;\n featureKey: string;\n variationKey: string;\n};\n\nexport type FeatureFlagType = {\n id: number;\n key: string;\n};\n\n/**\n * @deprecated Use `Variable` instead.\n *\n * @type `KameleoonVariableType` - tuple of possible feature variable result types, each possible variation is an object containing `key`, `type` and `value` fields, `type` can be checked against `VariableType` enum, if the `type` is `VariableType.BOOLEAN` then the `value` type will be `boolean` and so on.\n * */\nexport type KameleoonVariableType = FeatureVariableResultType;\n\n/**\n * @type `Variable` - tuple of possible feature variable result types, each possible variation is an object containing `key`, `type` and `value` fields, `type` can be checked against `VariableType` enum, if the `type` is `VariableType.BOOLEAN` then the `value` type will be `boolean` and so on.\n * */\nexport type Variable = FeatureVariableResultType;\n\n/**\n * @type `KameleoonVariationType` - object containing information about the variation and its variables\n * @param {string} name - name of the variation\n * @param {string} key - key of the variation\n * @param {number | null} id - id of the variation or `null` if the visitor hit default variation\n * @param {number | null} experimentId - id of the experiment or `null` if the visitor hit default variation\n * @param {Variable[]} variables - array of variables for the variation\n * */\nexport type KameleoonVariationType = {\n name?: string;\n key: string;\n id: number | null;\n experimentId: number | null;\n variables: Variable[];\n};\n\n// --- Note ---\n// During the next breaking change release,\n// `KameleoonVariableType` should be renamed to `VariableType`\n// `VariableType` should be renamed to something else, probably just `Variable`\n/**\n * @deprecated Use `Variation` instead.\n *\n * @type `VariationType` - an object containing information about the variation and its variables\n * @param {string} name - name of the variation\n * @param {string} key - key of the variation\n * @param {number | null} id - id of the variation or `null` if the visitor hit default variation\n * @param {number | null} experimentId - id of the experiment or `null` if the visitor hit default variation\n * @param {Map<string, Variable>} variables - map of variables for the variation, where key is the variable key and value is the variable object\n * */\nexport type VariationType = Omit<KameleoonVariationType, 'variables'> & {\n variables: Map<string, Variable>;\n};\n\n/**\n * @type `Variation` - an object containing information about the variation and its variables\n * @param {string} name - name of the variation\n * @param {string} key - key of the variation\n * @param {number | null} id - id of the variation or `null` if the visitor hit default variation\n * @param {number | null} experimentId - id of the experiment or `null` if the visitor hit default variation\n * @param {Map<string, Variable>} variables - map of variables for the variation, where key is the variable key and value is the variable object\n * */\nexport type Variation = VariationType;\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {string} featureKey - key of the feature flag to look for, can be found on Kameleoon Platform\n * @param {string} variableKey - key of the variable to be found for a feature flag with provided `featureKey`, can be found on Kameleoon Platform\n * */\nexport type GetFeatureFlagVariableParamsType = {\n visitorCode: string;\n featureKey: string;\n variableKey: string;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {number} customDataIndex - index of the custom data in the warehouse audience\n * @param {string | undefined} warehouseKey - unique key to identify the warehouse data (usually internal user ID)\n * If not specified, the `visitorCode` will be used as a `warehouseKey`\n * */\nexport type GetVisitorWarehouseAudienceParamsType = {\n visitorCode: string;\n customDataIndex: number;\n warehouseKey?: string;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {string} featureKey - key of the feature flag to look for, can be found on Kameleoon Platform\n * @param {boolean | undefined} track - a flag to enable or disable tracking request\n * @defaultvalue `true`\n * */\nexport type GetVariationParamsType = {\n visitorCode: string;\n featureKey: string;\n track?: boolean;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {boolean | undefined} onlyActive - an indicator to get only active variations\n * @defaultvalue `false`\n * @param {boolean | undefined} track - a flag to enable or disable tracking request\n * @defaultvalue `true`\n * */\nexport type GetVariationsParamsType = {\n visitorCode: string;\n onlyActive?: boolean;\n track?: boolean;\n};\n\nexport type WarehouseAudienceType = {\n // --- Note ---\n // Using `unknown` type here because we don't care about the type of the value\n warehouseAudiences: Record<string, unknown>;\n};\n\nexport type TrackingCacheItemType = {\n [experimentId: number]: {\n variationId: number;\n expirationTime: number;\n hasJsCssVariables: boolean;\n };\n};\n\nexport type SetDataCallbackParametersType = {\n visitorCode: string;\n maxAge: number;\n path: string;\n key: string;\n};\n\nexport type GetFeatureVariationParametersType = {\n visitorCode: string;\n featureKey: string;\n track: boolean;\n};\n\nexport type EvaluatedExperimentType = {\n experimentId: number | null;\n variationId: number | null;\n variationKey: string;\n ruleType: RuleType | null;\n isSimulated: boolean;\n};\n\nexport type EvaluateParametersType = {\n visitorCode: string;\n featureFlag: ConfigFeatureFlagType;\n track: boolean;\n save: boolean;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {boolean} consent - a value representing the legal consent status. - 'true' indicates the\n * visitor has given legal consent. - 'false' indicates the visitor has withdrawn or not\n * provided legal consent.\n * @param {(visitorCode: string) => void} setData - a callback to set a visitor code in cookie\n * */\nexport type SetUserConsentParametersType = {\n visitorCode: string;\n consent: boolean;\n setData: ({\n visitorCode,\n maxAge,\n path,\n }: SetDataCallbackParametersType) => void;\n};\n\n/**\n * @type `SimulateRequestDataType` a type of data provided to `simulateSuccessRequest` method depending on `RequestType`\n * */\nexport type SimulateRequestDataType = {\n [RequestType.Configuration]: ClientConfigurationDataType;\n [RequestType.RemoteData]: JSONType;\n [RequestType.Tracking]: null;\n};\n\n/**\n * @param {string} visitorCode - The unique visitor code identifying the visitor.\n * @param {number} experimentId - The identifier of the experiment you want to set/reset the forced variation for.\n * @param {string | null} variationKey - The identifier of the variation you want the experiment to be evaluated to.\n * Set to `null` to reset the forced variation.\n * @param {boolean} [forceTargeting=true] - If `true`, the visitor will be targeted to the experiment\n * regardless of its conditions. Otherwise, the normal targeting logic will be preserved.\n * Optional (defaults to `true`).\n */\nexport type SetForcedVariationParametersType = {\n visitorCode: string;\n experimentId: number;\n variationKey: string | null;\n forceTargeting?: boolean;\n};\n\nexport type DataFile = {\n featureFlags: Map<string, FeatureFlag>;\n};\n\nexport type FeatureFlag = {\n variations: Map<string, Variation>;\n environmentEnabled: boolean;\n rules: Rule[];\n defaultVariationKey: string;\n};\n\nexport type Rule = {\n variations: Map<string, Variation>;\n};\n","import { Milliseconds } from 'src/types';\nimport { AddParametersType, CacheItemType } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\ninterface ICacheManager<T> {\n /**\n * Add item to cache\n * @param {AddParametersType<T>} parameters - parameters for adding new item cache\n * @returns {void}\n */\n add({ key, data, lifetime }: AddParametersType<T>): void;\n /**\n * Get item that is not expired from cache\n * @param {string} key - key of item\n * @returns {T} an item that is not expired\n */\n getAliveItem(key: string): T | null;\n}\n\n/**\n * @class\n * CacheManager - a class for managing cache\n */\nexport class CacheManager<T> implements ICacheManager<T> {\n private cacheMap = new Map<string, CacheItemType<T>>();\n private intervalId: NodeJS.Timeout | null = null;\n private cleanupTimeout: number;\n\n /**\n * @param {number} cleanupTimeout - timeout for cleaning cache in seconds\n * generic type `T` is a type of data that will be stored in cache\n * @example\n * ```typescript\n * const cacheManager = new CacheManager<number>(60);\n * ```\n */\n constructor(cleanupTimeout: number) {\n this.cleanupTimeout = cleanupTimeout * Milliseconds.Second;\n }\n\n public add({ key, data, lifetime }: AddParametersType<T>): void {\n KameleoonLogger.debug`CALL: CacheManager.add(key: ${key}, data: ${data}, lifetime: ${lifetime})`;\n if (this.intervalId === null) {\n this.activate();\n }\n\n const expirationTime = lifetime * Milliseconds.Second;\n\n const cacheItem: CacheItemType<T> = {\n data,\n expirationTime: Date.now() + expirationTime,\n };\n\n this.cacheMap.set(key, cacheItem);\n KameleoonLogger.debug`RETURN: CacheManager.add(key: ${key}, data: ${data}, lifetime: ${lifetime})`;\n }\n\n public getAliveItem(key: string): T | null {\n KameleoonLogger.debug`CALL: CacheManager.getAliveItem(key: ${key})`;\n const cacheItem = this.cacheMap.get(key);\n\n if (cacheItem && cacheItem.expirationTime >= Date.now()) {\n const data = cacheItem.data;\n KameleoonLogger.debug`RETURN: CacheManager.getAliveItem(key: ${key}) -> (item: ${data})`;\n return data;\n }\n\n cacheItem && this.cacheMap.delete(key);\n\n KameleoonLogger.debug`RETURN: CacheManager.getAliveItem(key: ${key}) -> (item: null)`;\n return null;\n }\n\n private activate(): void {\n this.intervalId = setInterval(() => {\n const now = Date.now();\n\n for (const [key, item] of this.cacheMap) {\n if (item.expirationTime < now) {\n this.cacheMap.delete(key);\n }\n }\n\n if (!this.cacheMap.size) {\n this.cleanupInterval();\n }\n }, this.cleanupTimeout);\n }\n\n private cleanupInterval(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n}\n","import { IEventSource } from 'src/eventSource';\nimport { DataManager } from 'src/kameleoonData';\nimport { Requester } from 'src/requester';\nimport { IVisitorCodeManager } from 'src/visitorCodeManager';\nimport { ClientDataType, IStorage } from 'src/storage';\nimport { SegmentType } from 'src/targeting';\nimport { VariableType } from 'src/types';\nimport { EventManager } from 'src/eventManager';\nimport { IUrlProvider } from 'src/requester/urlProvider';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\n\nexport type ScheduleType = {\n dateStart: string;\n dateEnd: string;\n};\n\nexport enum UpdateType {\n Polling,\n RealTime,\n}\n\nexport type JSONValue =\n | string\n | number\n | boolean\n | { [x: string]: JSONValue }\n | JSONValue[];\n\nexport type JSONType = Record<string | number | symbol, JSONValue> | null;\n\nexport enum RuleType {\n TARGETED_DELIVERY = 'TARGETED_DELIVERY',\n EXPERIMENTATION = 'EXPERIMENTATION',\n}\n\nexport enum FeatureFlagSdkLanguageType {\n ANDROID = 'ANDROID',\n SWIFT = 'SWIFT',\n JAVA = 'JAVA',\n CSHARP = 'CSHARP',\n NODEJS = 'NODEJS',\n PHP = 'PHP',\n RUBY = 'RUBY',\n GO = 'GO',\n FLUTTER = 'FLUTTER',\n REACTJS = 'REACTJS',\n}\n\nexport enum FeatureStatus {\n ACTIVATED = 'ACTIVATED',\n DEACTIVATED = 'DEACTIVATED',\n SCHEDULED = 'SCHEDULED',\n}\n\nexport enum CustomDataScope {\n Visit = 'VISIT',\n Visitor = 'VISITOR',\n Page = 'Page',\n}\n\nexport enum ConsentType {\n Required = 'REQUIRED',\n NotRequired = 'NOT_REQUIRED',\n}\n\nexport enum ConsentBlockingBehaviour {\n PartiallyBlocked = 'PARTIALLY_BLOCK',\n CompletelyBlocked = 'FULLY_BLOCK',\n}\n\nexport type DeviationType = {\n variationId: string;\n value: number;\n};\n\nexport type FeatureFlagType = {\n id: number;\n featureKey: string;\n environmentEnabled: boolean;\n variations: FeatureVariationType[];\n defaultVariationKey: string;\n rules: RuleItemType[];\n mutuallyExclusiveGroup?: string | null;\n bucketingCustomDataId?: number | null;\n bucketingCustomDataIndex?: number | null;\n};\n\nexport type ExperimentType = {\n experimentId: number;\n variationByExposition: VariationByExpositionType[];\n};\n\nexport type FeatureVariationType = {\n name?: string;\n key: string;\n variables: FeatureVariableType[];\n};\n\nexport type FeatureVariableType = {\n key: string;\n type: VariableType;\n value: string | number | boolean;\n};\n\nexport type RuleItemType = {\n type: RuleType;\n id: number;\n respoolTime: number | null;\n order: number;\n exposition: number;\n experimentId: number;\n variationByExposition: VariationByExpositionType[];\n segment: SegmentType | null;\n segmentId?: number | null;\n};\n\nexport type MappedRuleType = {\n experimentId: number;\n featureId: number;\n // --- Note ---\n // Map<variationKey, variationId>\n variations: Map<string, number>;\n};\n\nexport type ExperimentInfoType = {\n type: RuleType;\n variations: Map<string, number>;\n};\n\nexport type VariationByExpositionType = {\n variationKey: string;\n variationId: number;\n exposition: number;\n};\n\nexport type ConfigurationDataType = {\n featureFlags: FeatureFlagType[];\n configuration: ConfigurationType;\n customData: CustomDataConfigurationType[];\n holdout?: ExperimentType;\n segments?: SegmentType[];\n dateModified?: number;\n};\n\nexport type ResultConfigurationDataType = {\n configuration?: ConfigurationDataType;\n lastModified?: string;\n};\n\nexport type ClientConfigurationDataType = Omit<\n ConfigurationDataType,\n 'featureFlags' | 'segments'\n>;\n\nexport type CustomDataConfigurationType = {\n id?: number;\n index: number;\n name?: string;\n localOnly: boolean;\n isMappingIdentifier: boolean;\n scope: CustomDataScope;\n};\n\nexport type ConfigurationType = {\n realTimeUpdate: boolean;\n consentType: ConsentType;\n dataApiDomain: string;\n consentOptOutBehavior: string;\n};\n\nexport type ClientConfigurationParametersType = {\n urlProvider: IUrlProvider;\n updateInterval: number;\n storage: IStorage<ClientDataType>;\n dataManager: DataManager;\n requester: Requester;\n eventSource: IEventSource;\n eventManager: EventManager;\n externalVisitorCodeManager: IVisitorCodeManager;\n externalPackageInfo: ExternalPackageInfoType;\n defaultDataFile?: string;\n};\n","import { EventCallbackType, EventDataType, EventType } from './types';\n\ninterface IEventManager<E extends EventType = EventType> {\n addEventHandler(eventType: E, callback: EventCallbackType<E>): void;\n fireEvent(eventType: E, data: EventDataType[E]): void;\n}\n\nexport class EventManager implements IEventManager {\n private eventHandlers?: Map<EventType, EventCallbackType<EventType>>;\n\n public addEventHandler<E extends EventType>(\n eventType: E,\n callback: EventCallbackType<E>,\n ): void {\n if (!this.eventHandlers) {\n this.eventHandlers = new Map();\n }\n\n this.eventHandlers.set(eventType, callback as EventCallbackType<EventType>);\n }\n\n public fireEvent<E extends EventType>(\n eventType: E,\n data: EventDataType[E],\n ): void {\n const eventHandler = this.eventHandlers?.get(eventType);\n\n if (eventHandler && data) {\n eventHandler(data);\n }\n }\n}\n","/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of event types\n * */\nexport enum EventType {\n Evaluation = 'evaluation',\n ConfigurationUpdate = 'configurationUpdate',\n}\n\n/**\n * @type EvaluationEventDataType - object containing information about the evaluation event data\n * */\nexport type EvaluationEventDataType = {\n featureKey: string;\n variation: {\n experimentId: number | null;\n id: number | null;\n key: string;\n };\n};\n\n/**\n * @type ConfigurationUpdateEventDataType - object containing information about the configuration update event data\n * */\nexport type ConfigurationUpdateEventDataType = {\n timestamp: number;\n};\n\n/**\n * @type EventDataType - mapped type containing the link between `EventType` and the corresponding data type\n * */\nexport type EventDataType = {\n [EventType.Evaluation]: EvaluationEventDataType;\n [EventType.ConfigurationUpdate]: ConfigurationUpdateEventDataType;\n};\n\n/**\n * @type EventCallbackType - a function that takes `EventDataType<EventType>` as an argument and returns `void`\n * */\nexport type EventCallbackType<E extends EventType> = (\n eventData: EventDataType[E],\n) => void;\n","import { ConfigurationDataType } from 'src/clientConfiguration';\nimport { ConsentBlockingBehaviour, ConsentType } from './types';\n\nexport const DEFAULT_DATA_FILE_CONFIGURATION: ConfigurationDataType = {\n customData: [],\n featureFlags: [],\n configuration: {\n realTimeUpdate: false,\n consentType: ConsentType.NotRequired,\n dataApiDomain: 'data.kameleoon.io',\n consentOptOutBehavior: ConsentBlockingBehaviour.PartiallyBlocked,\n },\n};\n","import { FeatureFlagType } from './types';\n\nexport class MEGroup {\n private readonly _featureFlags: FeatureFlagType[];\n\n constructor(featureFlags: FeatureFlagType[]) {\n this._featureFlags = featureFlags\n .slice()\n .sort((ff1, ff2) => ff1.id - ff2.id);\n }\n\n public getFeatureFlagByHash(hash: number): FeatureFlagType {\n let idx = Math.floor(hash * this._featureFlags.length);\n idx = Math.min(idx, this._featureFlags.length - 1);\n return this._featureFlags[idx];\n }\n\n get featureFlags(): FeatureFlagType[] {\n return this._featureFlags;\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError/kameleoonError';\nimport { DataManager } from 'src/kameleoonData';\nimport { Requester } from 'src/requester';\nimport { SegmentType } from 'src/targeting';\nimport { ClientDataType } from 'src/storage';\nimport { IEventSource } from 'src/eventSource';\nimport {\n ClientConfigurationDataType,\n ClientConfigurationParametersType,\n ConfigurationDataType,\n ConfigurationType,\n ConsentBlockingBehaviour,\n ConsentType,\n ExperimentInfoType,\n ExperimentType,\n FeatureFlagType,\n MappedRuleType,\n ResultConfigurationDataType,\n RuleType,\n UpdateType,\n} from './types';\nimport { IStorage } from 'src/storage/types';\nimport { IVisitorCodeManager } from 'src/visitorCodeManager';\nimport { EventManager, EventType } from 'src/eventManager';\nimport { IUrlProvider } from 'src/requester/urlProvider';\nimport { DEFAULT_DATA_FILE_CONFIGURATION } from './constants';\nimport { KameleoonLogger } from 'src/logging';\nimport { MEGroup } from 'src/clientConfiguration/meGroup';\nimport { Milliseconds } from 'src/types';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\n\ninterface IClientConfiguration {\n initialize: () => Promise<Result<void, KameleoonError>>;\n readonly featureFlags: Map<string, FeatureFlagType>;\n readonly configuration: ConfigurationType;\n readonly segments: Map<string, SegmentType>;\n readonly ruleMap: Map<number, MappedRuleType>;\n readonly experimentMap: Map<number, ExperimentInfoType>;\n readonly holdout: ExperimentType | null;\n readonly meGroups: Map<string, MEGroup>;\n}\n\nexport class ClientConfiguration implements IClientConfiguration {\n private updateConfigurationIntervalId: NodeJS.Timeout | null = null;\n private updateType: UpdateType = UpdateType.Polling;\n private configurationData: ClientConfigurationDataType =\n DEFAULT_DATA_FILE_CONFIGURATION;\n private featureFlagsData: Map<string, FeatureFlagType> = new Map();\n private isTargetedDeliveryRule: boolean | null = null;\n private segmentsData: Map<string, SegmentType> | null = null;\n private holdoutData: ExperimentType | null = null;\n private meGroupsData: Map<string, MEGroup> = new Map();\n private updateInterval: number;\n private lastUpdate: Date;\n private storage: IStorage<ClientDataType>;\n private requester: Requester;\n private eventSource: IEventSource;\n private mappedRules: Map<number, MappedRuleType> | null = null;\n private mappedExperiments: Map<number, ExperimentInfoType> | null = null;\n private dataManager: DataManager;\n private visitorCodeManager: IVisitorCodeManager;\n private eventManager: EventManager;\n private urlProvider: IUrlProvider;\n private lastModified?: string;\n private requestTime?: number;\n private externalPackageInfo: ExternalPackageInfoType;\n private usedDefaultDataFile: boolean = false;\n private defaultDataFile?: string;\n private blockingBehaviourMode: ConsentBlockingBehaviour =\n ConsentBlockingBehaviour.PartiallyBlocked;\n\n private readonly CACHE_REVALIDATE_PERIOD = 90 * Milliseconds.Minute;\n\n constructor({\n updateInterval,\n urlProvider,\n storage,\n requester,\n dataManager,\n eventSource,\n externalVisitorCodeManager,\n eventManager,\n externalPackageInfo,\n defaultDataFile,\n }: ClientConfigurationParametersType) {\n this.urlProvider = urlProvider;\n this.requester = requester;\n this.updateInterval = updateInterval;\n this.lastUpdate = new Date();\n this.storage = storage;\n this.dataManager = dataManager;\n this.eventManager = eventManager;\n this.visitorCodeManager = externalVisitorCodeManager;\n this.eventSource = eventSource;\n this.externalPackageInfo = externalPackageInfo;\n this.defaultDataFile = defaultDataFile;\n }\n\n public async initialize(): Promise<Result<void, KameleoonError>> {\n KameleoonLogger.debug('CALL: ClientConfiguration.initialize()');\n this.readStorageData();\n\n const shouldUpdate = this.checkShouldUpdate();\n\n if (shouldUpdate) {\n const updateResult = await this.updateClientConfiguration();\n\n if (!updateResult.ok) {\n KameleoonLogger.error(\n 'Error occurred during client configuration update',\n );\n return updateResult;\n }\n\n // --- Note ---\n // If update type is being toggled `initialize` will be called again\n // so we don't need to continue execution here\n const isUpdateTypeToggled = updateResult.data;\n\n if (isUpdateTypeToggled) {\n KameleoonLogger.debug('RETURN: ClientConfiguration.initialize()');\n return Ok();\n }\n }\n\n if (this.updateType === UpdateType.RealTime && !this.eventSource.isOpen) {\n this.handleRealTimeUpdates();\n\n KameleoonLogger.debug('RETURN: ClientConfiguration.initialize()');\n return Ok();\n }\n\n if (this.updateType === UpdateType.Polling) {\n this.handlePollingUpdates();\n }\n\n KameleoonLogger.debug('RETURN: ClientConfiguration.initialize()');\n return Ok();\n }\n\n private cleanupHandlers(): void {\n if (this.eventSource.isOpen) {\n this.eventSource.close();\n }\n\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n }\n\n private handleRealTimeUpdates(): void {\n this.cleanupHandlers();\n\n const updateEventCallback = (timestamp: number) => {\n this.updateClientConfiguration(timestamp).then((updateResult) => {\n if (updateResult.ok) {\n this.eventManager.fireEvent(EventType.ConfigurationUpdate, {\n timestamp,\n });\n }\n });\n };\n\n this.eventSource.open(updateEventCallback);\n this.eventSource.onError((error: Event) => {\n KameleoonLogger.error`Error occurred during real-time update: ${error}. Switching to polling updates while the connection is not restored.`;\n\n this.updateType = UpdateType.Polling;\n this.handlePollingUpdates();\n });\n }\n\n private handlePollingUpdates(): void {\n // --- Note ---\n // If `initialize` is called again the interval will be cleared\n // so theoretically we will constantly defer config update\n // but `this.lastUpdate` with `checkShouldUpdate` will prevent that\n this.cleanupHandlers();\n\n // --- Note ---\n // Error Handling is for `setInterval` emergency cleanup\n try {\n const lastUpdateTime = this.lastUpdate.getTime();\n const now = Date.now();\n const timeToNextUpdate = Math.max(\n this.updateInterval - (now - lastUpdateTime),\n 0,\n );\n\n setTimeout(async () => {\n await this.updateClientConfiguration();\n this.updateConfigurationIntervalId = setInterval(\n this.updateClientConfiguration.bind(this),\n this.updateInterval,\n );\n }, timeToNextUpdate);\n } catch (err) {\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n\n throw err;\n }\n }\n\n get featureFlags(): Map<string, FeatureFlagType> {\n return this.featureFlagsData;\n }\n\n get configuration(): ConfigurationType {\n return this.configurationData.configuration;\n }\n\n get segments(): Map<string, SegmentType> {\n if (this.segmentsData) {\n return this.segmentsData;\n }\n\n const segmentsData = new Map<string, SegmentType>();\n\n this.featureFlagsData.forEach((flag) => {\n flag.rules.forEach((rule) => {\n if (rule.segment && !segmentsData.has(rule.segment.id.toString())) {\n segmentsData.set(rule.segment.id.toString(), rule.segment);\n }\n });\n });\n\n this.segmentsData = segmentsData;\n\n return segmentsData;\n }\n\n get ruleMap(): Map<number, MappedRuleType> {\n if (this.mappedRules?.size) {\n return this.mappedRules;\n }\n\n const mappedRules = new Map<number, MappedRuleType>();\n\n for (const featureFlag of this.featureFlags.values()) {\n for (const rule of featureFlag.rules) {\n const { id, experimentId, variationByExposition } = rule;\n const variationMap = new Map<string, number>();\n\n variationByExposition.forEach(({ variationKey, variationId }) => {\n if (typeof variationId === 'number') {\n variationMap.set(variationKey, variationId);\n }\n });\n\n mappedRules.set(id, {\n featureId: featureFlag.id,\n experimentId,\n variations: variationMap,\n });\n }\n }\n\n this.mappedRules = mappedRules;\n\n return mappedRules;\n }\n\n get experimentMap(): Map<number, ExperimentInfoType> {\n if (this.mappedExperiments?.size) {\n return this.mappedExperiments;\n }\n\n const mappedExperiments = new Map<number, ExperimentInfoType>();\n\n for (const featureFlag of this.featureFlags.values()) {\n for (const rule of featureFlag.rules) {\n const { experimentId, variationByExposition } = rule;\n const variationMap = new Map<string, number>();\n\n variationByExposition.forEach(({ variationKey, variationId }) => {\n if (typeof variationId === 'number') {\n variationMap.set(variationKey, variationId);\n }\n });\n\n mappedExperiments.set(experimentId, {\n type: rule.type,\n variations: variationMap,\n });\n }\n }\n\n this.mappedExperiments = mappedExperiments;\n\n return mappedExperiments;\n }\n\n get holdout(): ExperimentType | null {\n return this.holdoutData;\n }\n\n get meGroups(): Map<string, MEGroup> {\n return this.meGroupsData;\n }\n\n get isConsentRequired(): boolean {\n return this.configuration.consentType === ConsentType.Required;\n }\n\n get consentBlockingBehaviour(): ConsentBlockingBehaviour {\n return this.blockingBehaviourMode;\n }\n\n get hasAnyTargetedDeliveryRule(): boolean {\n if (this.isTargetedDeliveryRule !== null) {\n return this.isTargetedDeliveryRule;\n }\n\n for (const featureFlag of this.featureFlags.values()) {\n if (\n featureFlag.environmentEnabled &&\n featureFlag.rules.some(\n (rule) => rule.type === RuleType.TARGETED_DELIVERY,\n )\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n private checkShouldUpdate(): boolean {\n const { configuration } = this.configurationData;\n\n this.updateType = configuration.realTimeUpdate\n ? UpdateType.RealTime\n : UpdateType.Polling;\n\n if (!this.featureFlags.size) {\n return true;\n }\n\n const lastUpdateTime = this.lastUpdate.getTime();\n const updateWindowEdge = Date.now() - this.updateInterval;\n\n return lastUpdateTime < updateWindowEdge;\n }\n\n private readStorageData(): void {\n KameleoonLogger.debug('CALL: ClientConfiguration.readStorageData()');\n const result = this.storage.read();\n\n if (result.ok) {\n let { data, lastUpdate, lastModified, requestTime } = result.data;\n\n let updateFeatureFlagsInfo = false;\n if (this.defaultDataFile) {\n try {\n const defaultDataFile = JSON.parse(\n this.defaultDataFile,\n ) as ConfigurationDataType;\n this.defaultDataFile = undefined;\n this.usedDefaultDataFile = true;\n const localDateModified = data.dateModified ?? requestTime ?? -1;\n const defaultDateModified = defaultDataFile.dateModified ?? 0;\n if (!requestTime || defaultDateModified > localDateModified) {\n data = defaultDataFile;\n updateFeatureFlagsInfo = true;\n }\n } catch (error) {\n KameleoonLogger.error`Error parsing default data file: ${String(\n error,\n )}`;\n }\n }\n\n this.updateConfigurationData(data, updateFeatureFlagsInfo);\n\n this.lastUpdate = this.usedDefaultDataFile\n ? new Date(0)\n : new Date(Date.parse(lastUpdate));\n this.lastModified = lastModified;\n this.requestTime = requestTime;\n }\n KameleoonLogger.debug`RETURN: ClientConfiguration.readStorageData() -> (result: ${result.ok})`;\n }\n\n /**\n * Updates client configuration\n *\n * @param timeStamp - timestamp for real-time configuration update\n *\n * @returns `true` if current update type should be toggled (SSE/Polling)\n */\n private async updateClientConfiguration(\n timestamp?: number,\n ): Promise<Result<boolean, KameleoonError>> {\n const currentTime = Date.now();\n\n if (this.usedDefaultDataFile) {\n this.updateClientConfigurationInBackground();\n return Ok(false);\n }\n\n if (this.requestTime && !timestamp && !this.externalPackageInfo.isServer) {\n if (currentTime - this.requestTime <= this.CACHE_REVALIDATE_PERIOD) {\n this.updateClientConfigurationInBackground();\n return Ok(false);\n } else {\n KameleoonLogger.debug`Cached configuration data has expired. Fetching fresh data.`;\n }\n }\n\n const clientConfigurationResult =\n await this.requester.getClientConfiguration(timestamp, this.lastModified);\n\n return this.applyNewConfigurationDataFromResponse(\n clientConfigurationResult,\n );\n }\n\n private updateClientConfigurationInBackground() {\n setTimeout(async () => {\n const clientConfigurationResult =\n await this.requester.getClientConfiguration(\n undefined,\n this.lastModified,\n );\n await this.applyNewConfigurationDataFromResponse(\n clientConfigurationResult,\n );\n }, 0);\n }\n\n private async applyNewConfigurationDataFromResponse(\n clientConfigurationResult: Result<\n ResultConfigurationDataType,\n KameleoonError\n >,\n ): Promise<Result<boolean, KameleoonError>> {\n this.requestTime = Date.now();\n if (!clientConfigurationResult.ok) {\n if (this.featureFlags.size) {\n KameleoonLogger.error(\n 'Error occurred while updating configuration. Existing configuration will be used as a fallback.',\n );\n return Ok(true);\n }\n\n return clientConfigurationResult;\n }\n\n if (clientConfigurationResult.data.configuration === undefined) {\n // If configuration is undefined, it means that the server returned 304 Not Modified\n // and we should not update the configuration, but need to update the lastUpdate in storage\n this.updateStorageData();\n return Ok(false);\n }\n\n const clientConfigurationData =\n clientConfigurationResult.data.configuration;\n\n this.updateConfigurationData(clientConfigurationData, true);\n\n this.dataManager.clearTrees();\n this.mappedRules?.clear();\n this.experimentMap?.clear();\n this.isTargetedDeliveryRule = null;\n\n if (clientConfigurationResult.data.lastModified) {\n this.lastModified = clientConfigurationResult.data.lastModified;\n }\n\n const result = this.updateStorageData();\n\n if (!result.ok) {\n return result;\n }\n\n const updateType = clientConfigurationData.configuration.realTimeUpdate\n ? UpdateType.RealTime\n : UpdateType.Polling;\n\n const toggleUpdateType = updateType !== this.updateType;\n\n if (toggleUpdateType) {\n this.updateType = updateType;\n KameleoonLogger.info`Configuration update type was toggled to ${UpdateType[updateType]}`;\n await this.initialize();\n }\n\n this.blockingBehaviourMode = this.consentBlockingBehaviourFromStr(\n clientConfigurationData.configuration.consentOptOutBehavior,\n );\n\n return Ok(toggleUpdateType);\n }\n\n private updateConfigurationData(\n data: ConfigurationDataType,\n updateFeatureFlagsInfo: boolean = true,\n ): void {\n const {\n configuration,\n featureFlags,\n customData,\n holdout,\n segments,\n dateModified,\n } = data;\n\n let segmentsMap: Map<string, SegmentType> | null = segments\n ? new Map(segments.map((segment) => [segment.id.toString(), segment]))\n : null;\n let customDataIndexById: Map<number, number> | null = null;\n\n if (updateFeatureFlagsInfo) {\n if (customData?.length) {\n customDataIndexById = new Map();\n for (let data of customData) {\n if (data.id !== undefined) {\n customDataIndexById.set(data.id, data.index);\n } else {\n customDataIndexById = null;\n break;\n }\n }\n }\n }\n\n const featureFlagsMap: Map<string, FeatureFlagType> = new Map();\n for (const featureFlag of featureFlags) {\n featureFlagsMap.set(featureFlag.featureKey, featureFlag);\n\n // configurationFeatureFlag data from storage not needed to be modified\n if (updateFeatureFlagsInfo) {\n this.updateFeatureFlagSegments(featureFlag, segmentsMap);\n this.updateFeatureFlagBucketingCustomDataId(\n featureFlag,\n customDataIndexById,\n );\n }\n }\n this.featureFlagsData = featureFlagsMap;\n\n if (customData?.length) {\n this.dataManager.customDataIndexes = customData;\n }\n\n this.meGroupsData = this.makeMEGroups(featureFlags);\n this.holdoutData = holdout ?? null;\n\n this.configurationData = {\n configuration,\n customData,\n holdout,\n dateModified,\n };\n\n this.urlProvider.dataApiDomain = data.configuration.dataApiDomain;\n\n this.updateConsentRequired();\n this.segmentsData = segmentsMap;\n }\n\n private updateFeatureFlagSegments(\n featureFlag: FeatureFlagType,\n segmentsMap: Map<string, SegmentType> | null,\n ): void {\n if (segmentsMap !== null) {\n featureFlag.rules.forEach((rule) => {\n const segmentId = rule.segmentId;\n rule.segment =\n segmentId != null\n ? segmentsMap.get(segmentId.toString()) ?? null\n : null;\n });\n }\n }\n\n private updateFeatureFlagBucketingCustomDataId(\n featureFlag: FeatureFlagType,\n customDataIndexById: Map<number, number> | null,\n ): void {\n const bucketingCustomDataId = featureFlag.bucketingCustomDataId;\n if (bucketingCustomDataId != null && customDataIndexById) {\n featureFlag.bucketingCustomDataIndex = customDataIndexById.get(\n bucketingCustomDataId,\n );\n }\n }\n\n private makeMEGroups(featureFlags: FeatureFlagType[]): Map<string, MEGroup> {\n const meGroupLists = new Map<string, FeatureFlagType[]>();\n\n featureFlags.forEach((featureFlag) => {\n const groupName = featureFlag.mutuallyExclusiveGroup;\n if (groupName) {\n let meGroupList = meGroupLists.get(groupName);\n if (meGroupList) {\n meGroupList.push(featureFlag);\n } else {\n meGroupLists.set(groupName, [featureFlag]);\n }\n }\n });\n\n const meGroups = new Map<string, MEGroup>();\n\n meGroupLists.forEach((featureFlags, groupName) => {\n meGroups.set(groupName, new MEGroup(featureFlags));\n });\n\n return meGroups;\n }\n\n private updateStorageData(): Result<void, KameleoonError> {\n this.lastUpdate = new Date();\n\n const configurationData = {\n ...this.configurationData,\n featureFlags: Array.from(this.featureFlags.values()),\n segments: this.segmentsData\n ? Array.from(this.segmentsData.values())\n : undefined,\n };\n\n const data: ClientDataType = {\n data: configurationData,\n lastUpdate: this.lastUpdate.toString(),\n lastModified: this.lastModified,\n requestTime: this.requestTime,\n };\n\n return this.storage.write(data);\n }\n\n private updateConsentRequired(): void {\n // --- Note ---\n // According to GDPR policy we should set visitorCode if legal consent isn't required\n // or we have at least one Targeted Delivery rule in configuration\n this.visitorCodeManager.consentRequired =\n this.isConsentRequired && !this.hasAnyTargetedDeliveryRule;\n }\n\n private consentBlockingBehaviourFromStr(\n str: string,\n ): ConsentBlockingBehaviour {\n if (\n str === ConsentBlockingBehaviour.PartiallyBlocked ||\n str === ConsentBlockingBehaviour.CompletelyBlocked\n ) {\n return str;\n }\n\n KameleoonLogger.error(`Unexpected consent blocking type '${str}'`);\n return ConsentBlockingBehaviour.PartiallyBlocked;\n }\n}\n","export function constructTypeMap<T extends string>(\n indexMap: Record<T, number>,\n): Record<number, T> {\n return Object.fromEntries(\n Object.entries(indexMap).map(([key, value]) => [value, key]),\n ) as Record<number, T>;\n}\n","import {\n DereferencedTargetingDataType,\n TargetingDataType,\n VisitorReference,\n} from 'src/targeting';\nimport { DataInfoType, FeatureFlagVariationsType, IStorage } from 'src/storage';\nimport {\n Browser,\n Conversion,\n Cookie,\n CustomData,\n Device,\n GeolocationData,\n OperatingSystem,\n PageView,\n UserAgent,\n ApplicationVersion,\n VisitsData,\n KameleoonConversionScore,\n DataManager,\n UniqueIdentifier,\n} from 'src/kameleoonData';\nimport { constructTypeMap } from './helpers';\nimport { VisitorDataFiltersType } from 'src/utilities';\nimport { TrackingStatus } from 'src/types';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport { Personalization } from 'src/kameleoonData/personalization';\nimport { CBScores } from 'src/kameleoonData/cbScores';\nimport { TargetedSegment } from 'src/kameleoonData/targetedSegment';\n\nexport type FieldParametersType = {\n expirationTime?: number;\n key: KameleoonData;\n value:\n | BrowserDataType\n | CookieDataType\n | DeviceDataType\n | GeolocationDataType\n | OperatingSystemDataType\n | UserAgentDataType\n | VisitsDataType;\n visitorCode: string;\n data: DereferencedTargetingDataType;\n};\n\nexport type VisitorProcessorParametersType = {\n filters: VisitorDataFiltersType;\n dataManager: DataManager;\n visitorCode: string;\n};\n\nexport type NestedFieldParametersType = {\n expirationTime?: number;\n visitorCode: string;\n key:\n | KameleoonData.CustomData\n | KameleoonData.PageView\n | KameleoonData.Conversion\n | KameleoonData.Personalization\n | KameleoonData.TargetedSegment;\n nestedKey: string;\n value:\n | CustomDataType\n | PageViewDataType\n | ConversionDataType\n | PersonalizationDataType\n | TargetedSegmentDataType;\n data: DereferencedTargetingDataType;\n};\n\nexport type DataFilterType = ({\n status,\n key,\n cdIndex,\n}: {\n status: TrackingStatus;\n key: KameleoonData;\n cdIndex?: number;\n}) => boolean;\n\nexport type MutAddUnsentDataType = {\n mutData: DataInfoType;\n visitorCode: string;\n dataType: KameleoonData;\n};\n\nexport type DereferenceTargetingDataResultType = {\n data: DereferencedTargetingDataType;\n visitorReference: string;\n isReference: boolean;\n};\n\nexport type DataManagerParametersType = {\n cleanupInterval: number | null;\n dataStorage: IStorage<TargetingDataType>;\n infoStorage: IStorage<DataInfoType>;\n packageInfo: ExternalPackageInfoType;\n};\n\nexport type KameleoonDataItemType =\n | IdentifierDataType\n | BrowserDataType\n | ConversionDataType\n | CustomDataType\n | DeviceDataType\n | PageViewDataType\n | UserAgentDataType\n | CookieDataType\n | GeolocationDataType\n | OperatingSystemDataType\n | ApplicationVersionDataType\n | KCSDataType\n | VisitsDataType\n | PersonalizationDataType\n | CBSDataType\n | TargetedSegmentDataType;\n\n/**\n * @interface an interface of KameleoonData\n * each class instance will have url getter method\n * for handling url of different data types\n * */\nexport interface IKameleoonData {\n /**\n * @property url - url for the current data type used for events tracking\n * */\n readonly url: string;\n /**\n * @property data - data of the current class instance\n * */\n readonly data: KameleoonDataItemType;\n /**\n * @property status - signifying if the data is tracked, not tracked or pending\n * */\n status: TrackingStatus;\n}\n\n/**\n * @type a tuple of each possible type of data for `addData` method\n * of KameleoonClient\n * */\nexport type KameleoonDataType =\n | UniqueIdentifier\n | Browser\n | Conversion\n | CustomData\n | Device\n | PageView\n | UserAgent\n | VisitsData\n | GeolocationData\n | OperatingSystem\n | Cookie\n | ApplicationVersion\n | KameleoonConversionScore\n | Personalization\n | CBScores\n | TargetedSegment;\n\nexport type ExpirationTimeType = {\n expirationTime: number;\n};\n\nexport type VisitorsDataType = {\n [visitorCode: string]: KameleoonDataType[];\n};\n\nexport type ExistingCustomDataType = NonNullable<\n KameleoonVisitorDataType[KameleoonData.CustomData]\n>;\n\nexport type ExistingPageViewDataType = NonNullable<\n KameleoonVisitorDataType[KameleoonData.PageView]\n>;\n\nexport type ExistingConversionDataType = NonNullable<\n KameleoonVisitorDataType[KameleoonData.Conversion]\n>;\n\nexport type ExistingPersonalizationDataType = NonNullable<\n KameleoonVisitorDataType[KameleoonData.Personalization]\n>;\n\nexport type ExistingTargetedSegmentDataType = NonNullable<\n KameleoonVisitorDataType[KameleoonData.TargetedSegment]\n>;\n\nexport type ExistingDataType<T extends KameleoonData> = NonNullable<\n KameleoonVisitorDataType[T]\n>;\n\nexport type ExistingNestedDataType =\n | ExistingCustomDataType\n | ExistingPageViewDataType\n | ExistingConversionDataType\n | ExistingPersonalizationDataType\n | ExistingTargetedSegmentDataType;\n\nexport type KameleoonVisitorDataType<T = ExpirationTimeType> = {\n [KameleoonData.CustomData]?: {\n [index: string]: (CustomDataType & T) | undefined;\n };\n [KameleoonData.Conversion]?: {\n [id: string]: (ConversionDataType & T) | undefined;\n };\n [KameleoonData.PageView]?: { [url: string]: PageViewDataType & T };\n [KameleoonData.UniqueIdentifier]?: IdentifierDataType & T;\n [KameleoonData.GeolocationData]?: GeolocationDataType & T;\n [KameleoonData.UserAgent]?: UserAgentDataType & T;\n [KameleoonData.Browser]?: BrowserDataType & T;\n [KameleoonData.Device]?: DeviceDataType & T;\n [KameleoonData.Cookie]?: CookieDataType & T;\n [KameleoonData.KameleoonConversionScore]?: KCSDataType & T;\n [KameleoonData.OperatingSystem]?: OperatingSystemDataType & T;\n [KameleoonData.ApplicationVersion]?: ApplicationVersionDataType & T;\n [KameleoonData.VisitsData]?: VisitsDataType & T;\n [KameleoonData.Personalization]?: {\n [id: string]: PersonalizationDataType & T;\n };\n [KameleoonData.CBScores]?: CBSDataType & T;\n [KameleoonData.TargetedSegment]?: {\n [id: string]: TargetedSegmentDataType & T;\n };\n};\n\nexport enum KameleoonData {\n UniqueIdentifier = 'uniqueIdentifier',\n CustomData = 'customData',\n PageView = 'pageView',\n GeolocationData = 'geolocation',\n Browser = 'browser',\n Conversion = 'conversion',\n Cookie = 'cookie',\n Device = 'device',\n OperatingSystem = 'operatingSystem',\n UserAgent = 'userAgent',\n ApplicationVersion = 'applicationVersion',\n VisitsData = 'visitsData',\n KameleoonConversionScore = 'kameleoonConversionScore',\n Personalization = 'personalization',\n CBScores = 'cbScores',\n TargetedSegment = 'targetedSegment',\n}\n\ntype CommonUpdateParametersType = {\n mutData: DereferencedTargetingDataType;\n visitorCode: string;\n expirationTime?: number;\n};\n\nexport type UpdateCustomDataParametersType = {\n customData: CustomData;\n} & CommonUpdateParametersType;\n\nexport type ProcessCustomDataManagerParametersType = {\n infoData: DataInfoType;\n mutData: TargetingDataType;\n customData: CustomData;\n visitorCode: string;\n};\n\nexport type UpdateConversionParametersType = {\n conversion: Conversion;\n} & CommonUpdateParametersType;\n\nexport type UpdateVisitsDataParametersType = {\n visitsData: VisitsData;\n} & CommonUpdateParametersType;\n\nexport type UpdatePersonalizationParametersType = {\n personalization: Personalization;\n} & CommonUpdateParametersType;\n\nexport type UpdateTargetSegmentParametersType = {\n targetedSegment: TargetedSegment;\n} & CommonUpdateParametersType;\n\nexport type UpdateCommonDataParametersType = {\n commonData: KameleoonDataType;\n} & CommonUpdateParametersType;\n\nexport type UpdatePageViewParametersType = {\n pageView: PageView;\n} & CommonUpdateParametersType;\n\nexport type MutUpdateDataParametersType = {\n infoData: DataInfoType;\n mutData: TargetingDataType;\n dataItem: KameleoonDataType;\n visitorCode: string;\n extendTtl: boolean;\n};\n\nexport type MutUpdateTargetingDataParametersType = {\n visitorCode: string;\n infoData: DataInfoType;\n kameleoonData: KameleoonDataType[];\n targetingData: TargetingDataType;\n extendTtl: boolean;\n};\n\nexport type ReferenceParametersType = {\n mutData: TargetingDataType;\n visitorCode: string;\n linkedVisitor: VisitorReference;\n infoData: DataInfoType;\n};\n\ntype SharedDataPropertiesType = {\n type: KameleoonData;\n status: TrackingStatus;\n};\n\nexport type IdentifierDataType = {\n value: boolean;\n} & SharedDataPropertiesType;\n\nexport type BrowserDataType = {\n browser: BrowserType;\n version?: number;\n} & SharedDataPropertiesType;\n\nexport type TargetedSegmentDataType = {\n id: number;\n} & SharedDataPropertiesType;\n\nexport type ConversionDataType = {\n id: number;\n goalId: number;\n revenue: number;\n negative: boolean;\n nonce?: string;\n metadata?: CustomDataType[];\n} & SharedDataPropertiesType;\n\nexport type CustomDataType = {\n index: number;\n name?: string;\n value: string[];\n isIdentifier: boolean;\n overwrite?: boolean;\n} & SharedDataPropertiesType;\n\nexport type DeviceDataType = {\n device: DeviceType;\n} & SharedDataPropertiesType;\n\nexport type KCSDataType = {\n kcs: KCSType;\n} & SharedDataPropertiesType;\n\nexport type CBSDataType = {\n cbs: CBSType;\n} & SharedDataPropertiesType;\n\nexport type PersonalizationDataType = {\n id: number;\n variationId: number;\n} & SharedDataPropertiesType;\n\nexport type VisitsDataType = {\n visits: VisitDataType[] | number[];\n visitNumber?: number;\n} & SharedDataPropertiesType;\n\nexport type VisitDataType = {\n timeStarted: number;\n timeLastActivity: number;\n};\n\nexport type OperatingSystemDataType = {\n operatingSystem: OperatingSystemType;\n} & SharedDataPropertiesType;\n\nexport type CookieDataType = {\n cookie: CookieType[];\n} & SharedDataPropertiesType;\n\nexport type GeolocationDataType = GeolocationInfoType &\n SharedDataPropertiesType;\n\nexport type PageViewDataType = {\n urlAddress: string;\n title: string;\n nonce?: string;\n referrers?: number[];\n timestamps: TimestampType[];\n} & SharedDataPropertiesType;\n\nexport type TimestampType = {\n time: number;\n status: TrackingStatus;\n};\n\nexport type UserAgentDataType = {\n value: string;\n} & SharedDataPropertiesType;\n\nexport type ApplicationVersionDataType = {\n version: string;\n} & SharedDataPropertiesType;\n\n/**\n * @param {number} goalId - an id of a goal to track\n * @param {number | undefined} revenue - an optional parameter for revenue, default value is `0`\n * @param {boolean | undefined} negative - an optional parameter identifying whether the conversion should be removed, default value is `false`\n * @param {CustomData[] | undefined} metadata - an optional parameter, default value is `undefined`\n * */\nexport type ConversionParametersType = {\n goalId: number;\n revenue?: number;\n negative?: boolean;\n metadata?: CustomData[];\n};\n\n/**\n * @param {string} urlAddress - url address of the page to track\n * @param {string} title - title of the web page\n * @param {number[] | undefined} referrers - an optional parameter containing a list of referrersIndices, has no default value\n * */\nexport type PageViewParametersType = {\n urlAddress: string;\n title: string;\n referrers?: number[];\n};\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants for device type\n * */\nexport enum DeviceType {\n Phone = 'PHONE',\n Tablet = 'TABLET',\n Desktop = 'DESKTOP',\n}\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants for operating system type\n * */\nexport enum OperatingSystemType {\n WindowsPhone = 'WINDOWS_PHONE',\n Windows = 'WINDOWS',\n Android = 'ANDROID',\n Linux = 'LINUX',\n Mac = 'MAC',\n IOS = 'IOS',\n}\n\n/**\n * @param {string} country - a country of a visitor\n * @param {string | undefined} region - an optional parameter containing a region of a visitor, has no default value\n * @param {string | undefined} city - an optional parameter containing a city of a visitor, has no default value\n * @param {string | undefined} postalCode - an optional parameter containing a postal code of a visitor, has no default value\n * @param {[number, number] | undefined} coordinates - an optional parameter containing a pair of coordinates (longitude and latitude) of a visitor, has no default value. Coordinate `number` represents decimal degrees (double that can be negative)\n * */\nexport type GeolocationInfoType = {\n country: string;\n region?: string;\n city?: string;\n postalCode?: string;\n coordinates?: [number, number];\n};\n\n/**\n * @param {string} key - a key of a cookie\n * @param {string} value - a value of a cookie\n * */\nexport type CookieType = {\n key: string;\n value: string;\n};\n\n/**\n * @type Nested object of key moments and goals with their respective scores\n * */\nexport type KCSType = {\n [keyMoment: string]: {\n [goalId: string]: number;\n };\n};\n\nexport type CBSType = {\n [key: string]: ScoredVarIds;\n};\n\nexport type ScoredVarIds = {\n [variationId: string]: number;\n};\n\nexport type VarGroup = {\n ids: number[];\n};\n\nexport type OptionalCookieType = Omit<CookieType, 'key'> & {\n key?: string;\n};\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants for browser type\n * */\nexport enum BrowserType {\n Chrome = 'CHROME',\n InternetExplorer = 'IE',\n Firefox = 'FIREFOX',\n Safari = 'SAFARI',\n Opera = 'OPERA',\n Other = 'OTHER',\n}\n\nexport const OperatingSystemIndexMap = {\n [OperatingSystemType.Windows]: 0,\n [OperatingSystemType.Mac]: 1,\n [OperatingSystemType.IOS]: 2,\n [OperatingSystemType.Linux]: 3,\n [OperatingSystemType.Android]: 4,\n [OperatingSystemType.WindowsPhone]: 5,\n} as const;\n\nexport const OperatingSystemTypeMap = constructTypeMap<OperatingSystemType>(\n OperatingSystemIndexMap,\n);\n\nexport const BrowserIndexMap = {\n [BrowserType.Chrome]: 0,\n [BrowserType.InternetExplorer]: 1,\n [BrowserType.Firefox]: 2,\n [BrowserType.Safari]: 3,\n [BrowserType.Opera]: 4,\n [BrowserType.Other]: 5,\n} as const;\n\nexport const BrowserTypeMap = constructTypeMap<BrowserType>(BrowserIndexMap);\n\nexport type SingleDataType = {\n [KameleoonData.Device]: Device | null;\n [KameleoonData.Browser]: Browser | null;\n [KameleoonData.GeolocationData]: GeolocationData | null;\n [KameleoonData.OperatingSystem]: OperatingSystem | null;\n [KameleoonData.KameleoonConversionScore]: KameleoonConversionScore | null;\n [KameleoonData.CBScores]: CBScores | null;\n};\n\nexport type MultipleDataType = {\n [KameleoonData.CustomData]: Map<number, CustomData>;\n [KameleoonData.PageView]: Map<string, PageView>;\n [KameleoonData.Conversion]: Map<number, Conversion>;\n [KameleoonData.Personalization]: Map<number, Personalization>;\n};\n\nexport type VisitProcessorDataType = {\n visitorData: KameleoonDataType[];\n storageVisitorData: KameleoonDataType[];\n visitsData: VisitsData;\n experimentData: FeatureFlagVariationsType;\n};\n\nexport type StaticDataType = {\n browserType?: BrowserType;\n browserVersion?: number;\n visitNumber?: number;\n timeSincePreviousVisit?: number;\n deviceType?: DeviceType;\n os?: OperatingSystemType;\n};\n","import { VisitorDataFiltersType } from './utilities/types';\n\nexport const OFF_VARIATION_KEY = 'off';\nexport const WAREHOUSE_AUDIENCE_KEY = 'warehouseAudiences';\nexport const CACHE_CLEANUP_TIMEOUT = 10;\nexport const CACHE_ITEM_LIFETIME = 5;\nexport const IN_HOLDOUT_VARIATION_KEY = 'in-holdout';\n\n/**\n * @readonly\n * @enum {string} an Enum of all the possible Kameleoon SDK types\n * */\nexport enum SdkLanguageType {\n ANDROID = 'ANDROID',\n IOS = 'IOS',\n JAVA = 'JAVA',\n CSHARP = 'CSHARP',\n NODEJS = 'NODEJS',\n PHP = 'PHP',\n RUBY = 'RUBY',\n GO = 'GO',\n FLUTTER = 'FLUTTER',\n REACT = 'REACT',\n PYTHON = 'PYTHON',\n JAVASCRIPT = 'JAVASCRIPT',\n RUST = 'RUST',\n}\n\nexport const DEFAULT_VISITOR_DATA_FILTERS: VisitorDataFiltersType = {\n previousVisitAmount: 1,\n currentVisit: true,\n customData: true,\n pageViews: false,\n geolocation: false,\n device: false,\n browser: false,\n operatingSystem: false,\n conversions: false,\n experiments: false,\n kcs: false,\n visitorCode: true,\n personalization: false,\n};\n","import { MappedRuleType } from 'src/clientConfiguration/types';\nimport { KameleoonVisitorDataType } from 'src/kameleoonData/types';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport { ConditionDataType, ConditionType } from './conditions';\nimport { Node } from './node';\nimport { Tree } from './tree';\n\nexport enum Operator {\n And = 'AND',\n Or = 'OR',\n}\n\nexport type NonLeafNodeType = {\n left: Node;\n right: Node;\n value: Operator;\n};\n\nexport type LeafNodeType = {\n left: undefined;\n right: undefined;\n value: ConditionType;\n};\n\nexport type NodeValueType = ConditionType | Operator;\n\nexport type ConditionLevelType = {\n orOperators: boolean[];\n conditions: ConditionDataType[];\n};\n\nexport type SegmentType = {\n id: string;\n name: string;\n audienceTracking?: boolean;\n conditionsData: {\n firstLevelOrOperators: boolean[];\n firstLevel: ConditionLevelType[];\n };\n};\n\nexport type NestedConditionGroupType = {\n operators: Operator[];\n conditions: ConditionDataType[];\n};\n\nexport type GroupedSegmentsType = {\n topLevelOperators: Operator[];\n nestedConditions: NestedConditionGroupType[];\n};\n\nexport type VisitorReference = string;\n\nexport type TargetingDataType = {\n [visitorCode: string]: KameleoonVisitorDataType | VisitorReference;\n};\n\nexport type DereferencedTargetingDataType = {\n [visitorCode: string]: KameleoonVisitorDataType;\n};\n\nexport type EvaluationDataType = {\n targetingData?: KameleoonVisitorDataType;\n variationData: FeatureFlagVariationsType;\n ruleMap?: Map<number, MappedRuleType>;\n sdkInfo: ExternalPackageInfoType;\n experimentId: number | null;\n visitorCode: string;\n segments?: Map<string, SegmentType>;\n trees?: Map<string, Tree>;\n};\n\nexport enum ValueMatchType {\n TRUE = 'TRUE',\n FALSE = 'FALSE',\n EXACT = 'EXACT',\n CONTAINS = 'CONTAINS',\n REGULAR_EXPRESSION = 'REGULAR_EXPRESSION',\n EQUAL = 'EQUAL',\n LOWER = 'LOWER',\n GREATER = 'GREATER',\n UNDEFINED = 'UNDEFINED',\n AMONG_VALUES = 'AMONG_VALUES',\n RANGE = 'RANGE',\n}\n\nexport enum VisitorType {\n NEW = 'NEW',\n RETURNING = 'RETURNING',\n}\n\nexport enum MatchTypeVariation {\n ANY = 'ANY',\n EXACT = 'EXACT',\n}\n\nexport enum MatchTypeTest {\n ALL = 'ALL',\n TEST = 'TEST',\n PERSO = 'PERSO',\n}\n\nexport enum CampaignType {\n Experiment = 'EXPERIMENT',\n Personalization = 'PERSONALIZATION',\n Any = 'ANY',\n}\n\n// --- Note ---\n// Starting the merge of `matchType` with the release of new conditions\n// Now it contains a couple of sub types, in future API version all match types\n// will be accumulated in this enum\nexport enum MatchType {\n // -- Sub Type One\n EXACT = 'EXACT',\n CONTAINS = 'CONTAINS',\n REGULAR_EXPRESSION = 'REGULAR_EXPRESSION',\n // -- Sub Type Two\n GREATER = 'GREATER',\n EQUAL = 'EQUAL',\n LOWER = 'LOWER',\n}\n\nexport enum VersionMatchType {\n GREATER = 'GREATER',\n EQUAL = 'EQUAL',\n LOWER = 'LOWER',\n}\n\nexport enum NameMatchType {\n EXACT = 'EXACT',\n CONTAINS = 'CONTAINS',\n REGULAR_EXPRESSION = 'REGULAR_EXPRESSION',\n OPTIONAL = 'OPTIONAL',\n}\n\nexport enum TargetingType {\n PAGE_URL = 'PAGE_URL',\n PAGE_TITLE = 'PAGE_TITLE',\n LANDING_PAGE = 'LANDING_PAGE',\n ORIGIN = 'ORIGIN',\n ORIGIN_TYPE = 'ORIGIN_TYPE',\n REFERRERS = 'REFERRERS',\n NEW_VISITORS = 'NEW_VISITORS',\n INTERESTS = 'INTERESTS',\n BROWSER_LANGUAGE = 'BROWSER_LANGUAGE',\n GEOLOCATION = 'GEOLOCATION',\n DEVICE_TYPE = 'DEVICE_TYPE',\n SCREEN_DIMENSION = 'SCREEN_DIMENSION',\n VISITOR_IP = 'VISITOR_IP',\n AD_BLOCKER = 'AD_BLOCKER',\n PREVIOUS_PAGE = 'PREVIOUS_PAGE',\n KEY_PAGES = 'KEY_PAGES',\n PAGE_VIEWS = 'PAGE_VIEWS',\n FIRST_VISIT = 'FIRST_VISIT',\n LAST_VISIT = 'LAST_VISIT',\n ACTIVE_SESSION = 'ACTIVE_SESSION',\n TIME_SINCE_PAGE_LOAD = 'TIME_SINCE_PAGE_LOAD',\n SAME_DAY_VISITS = 'SAME_DAY_VISITS',\n VISITS = 'VISITS',\n VISITS_BY_PAGE = 'VISITS_BY_PAGE',\n VISITOR_CODE = 'VISITOR_CODE',\n SDK_LANGUAGE = 'SDK_LANGUAGE',\n INTERNAL_SEARCH_KEYWORDS = 'INTERNAL_SEARCH_KEYWORDS',\n TABS_ON_SITE = 'TABS_ON_SITE',\n CONVERSION_PROBABILITY = 'CONVERSION_PROBABILITY',\n HEAT_SLICE = 'HEAT_SLICE',\n SKY_STATUS = 'SKY_STATUS',\n TEMPERATURE = 'TEMPERATURE',\n DAY_NIGHT = 'DAY_NIGHT',\n FORECAST_SKY_STATUS = 'FORECAST_SKY_STATUS',\n FORECAST_TEMPERATURE = 'FORECAST_TEMPERATURE',\n DAY_OF_WEEK = 'DAY_OF_WEEK',\n TIME_RANGE = 'TIME_RANGE',\n HOUR_MINUTE_RANGE = 'HOUR_MINUTE_RANGE',\n JS_CODE = 'JS_CODE',\n COOKIE = 'COOKIE',\n EVENT = 'EVENT',\n BROWSER = 'BROWSER',\n OPERATING_SYSTEM = 'OPERATING_SYSTEM',\n DOM_ELEMENT = 'DOM_ELEMENT',\n MOUSE_OUT = 'MOUSE_OUT',\n TARGET_EXPERIMENT = 'TARGET_EXPERIMENT',\n TARGET_FEATURE_FLAG = 'TARGET_FEATURE_FLAG',\n TARGET_PERSONALIZATION = 'TARGET_PERSONALIZATION',\n EXCLUSIVE_EXPERIMENT = 'EXCLUSIVE_EXPERIMENT',\n CONVERSIONS = 'CONVERSIONS',\n CUSTOM_DATUM = 'CUSTOM_DATUM',\n YSANCE_SEGMENT = 'YSANCE_SEGMENT',\n SEGMENT = 'SEGMENT',\n YSANCE_ATTRIBUT = 'YSANCE_ATTRIBUT',\n TEALIUM_BADGE = 'TEALIUM_BADGE',\n TEALIUM_AUDIENCE = 'TEALIUM_AUDIENCE',\n PRICE_OF_DISPLAYED_PAGE = 'PRICE_OF_DISPLAYED_PAGE',\n NUMBER_OF_VISITED_PAGES = 'NUMBER_OF_VISITED_PAGES',\n VISITED_PAGES = 'VISITED_PAGES',\n CUSTOM = 'CUSTOM',\n EXPLICIT_TRIGGER = 'EXPLICIT_TRIGGER',\n APPLICATION_VERSION = 'APPLICATION_VERSION',\n}\n","import { CacheManager } from 'src/cacheManager';\nimport { ClientConfiguration } from 'src/clientConfiguration';\nimport { DataManager } from 'src/kameleoonData';\nimport {\n KameleoonDataType,\n KameleoonVisitorDataType,\n VisitDataType,\n} from 'src/kameleoonData/types';\nimport { Requester } from 'src/requester';\nimport { GetVisitorDataResultType } from 'src/requester/types';\nimport { SegmentType } from 'src/targeting';\nimport { TrackingCacheItemType } from 'src/types';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport { VariationConfiguration } from 'src/variationConfiguration';\nimport { MappingIdentifierType } from 'src/storage/types';\n\nexport type CheckTargetingParametersType = {\n segment: SegmentType | null;\n experimentId: number | null;\n visitorCode: string;\n packageInfo: ExternalPackageInfoType;\n targetingData?: KameleoonVisitorDataType;\n clientConfiguration: ClientConfiguration;\n variationConfiguration?: VariationConfiguration;\n dataManager: DataManager;\n};\n\nexport enum TimeUnit {\n Minute = 'MINUTE',\n Hour = 'HOUR',\n Day = 'DAY',\n Week = 'WEEK',\n Month = 'MONTH',\n}\n\nexport enum Order {\n Ascending = 'asc',\n Descending = 'desc',\n}\n\nexport type InsertInOrderedListParametersType = {\n list: number[];\n element: number;\n order: Order;\n};\n\nexport type InsertVisitInOrderedListParametersType = {\n list: VisitDataType[];\n visit: VisitDataType;\n};\n\nexport type ParseVisitorDataParametersType = {\n data: GetVisitorDataResultType;\n filters: VisitorDataFiltersType;\n visitorCode: string;\n dataManager: DataManager;\n variationConfiguration: VariationConfiguration;\n};\n\nexport type ParseVisitorDataResultType = {\n storageVisitorData: KameleoonDataType[];\n visitorData: KameleoonDataType[];\n visitsData?: KameleoonDataType;\n mappingIdentifier?: MappingIdentifierType;\n};\n\nexport type ManageCacheParametersType = {\n hasJsCssVariables: boolean;\n cacheManager: CacheManager<TrackingCacheItemType>;\n visitorCode: string;\n experimentId: number;\n variationId: number;\n};\n\nexport type TrackDataParametersType = {\n visitorCode: string;\n dataManager: DataManager;\n requester: Requester;\n isConsentProvided: boolean;\n isOfflineModeOn?: boolean;\n isMappingIdentifier?: boolean;\n};\n\nexport type TrackExperimentParametersType = {\n clientConfiguration: ClientConfiguration;\n visitorCode: string;\n requester: Requester;\n variationId: number;\n experimentId: number;\n isUnallocated: boolean;\n isOfflineModeOn?: boolean;\n};\n\n/**\n * @param {number} previousVisitAmount - Number of previous visits to retrieve data from. Number between `1` and `25`\n * *Default*: `1`.\n * @param {number} currentVisit - If true, current visit data will be retrieved.\n * *Default*: `true`.\n * @param {boolean} customData - If true, custom data will be retrieved.\n * *Default*: `true`.\n * @param {boolean} pageViews - If true, page data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} geolocation - If true, geolocation data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} device - If true, device data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} browser - If true, browser data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} operatingSystem - If true, operating system data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} conversions - If true, conversion data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} experiments - If true, experiment data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} kcs - If true, Kameleoon Conversion Score data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} visitorCode - If true, visitor code will be retrieved.\n * *Default*: `true`.\n * @param {boolean} personalization - If true, personalization data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} cbs - If true, Contextual Bandit evaluations data will be retrieved.\n * *Default*: `false`.\n * */\nexport type VisitorDataFiltersType = {\n previousVisitAmount?: number;\n currentVisit?: boolean;\n pageViews?: boolean;\n geolocation?: boolean;\n device?: boolean;\n browser?: boolean;\n operatingSystem?: boolean;\n customData?: boolean;\n conversions?: boolean;\n experiments?: boolean;\n kcs?: boolean;\n visitorCode?: boolean;\n personalization?: boolean;\n cbs?: boolean;\n};\n\n/**\n * @interface `IExternalPRNG` - an interface for external PRNG (Pseudo-Random Number Generator) used to generate secure random numbers depending on the environment and platform\n * */\nexport interface IExternalPRNG {\n /**\n * @method getRandomNumber - a method to generate a secure random number\n * @returns {number} a secure random `number`, which must be a floating-point number between 0 and 1, similarly to `Math.random()`\n * */\n getRandomNumber(): number;\n}\n","export const HEX_CHARACTERS = '0123456789ABCDEF';\nexport const NONCE_LENGTH = 16;\nexport const HTTP = 'http://';\nexport const HTTPS = 'https://';\nexport const LOCALHOST = 'localhost';\nexport const REGEX_DOMAIN =\n /^(\\.?(([a-zA-Z\\d][a-zA-Z\\d-]*[a-zA-Z\\d])|[a-zA-Z\\d]))(\\.(([a-zA-Z\\d][a-zA-Z\\d-]*[a-zA-Z\\d])|[a-zA-Z\\d])){1,126}$/;\nexport const HIDDEN_SECRET_CHAR = '*';\nexport const SECRET_VISIBLE_LENGTH = 4;\nexport const VISITOR_VISIT_MAX_LENGTH = 26;\n","import { Err, Ok, Result } from 'ts-res';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { HTTP, HTTPS, LOCALHOST, REGEX_DOMAIN } from 'src/utilities/constants';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class Validator {\n static validateVersion(\n version: string,\n ): Result<[number, number, number], KameleoonError> {\n const versionParts = version.split('.').map((x) => parseInt(x, 10));\n\n while (versionParts.length < 3) {\n versionParts.push(0);\n }\n\n if (versionParts.some((item) => isNaN(item))) {\n return Err(\n new KameleoonError(KameleoonException.SemanticVersionParse, version),\n );\n }\n\n return Ok(versionParts.slice(0, 3) as [number, number, number]);\n }\n\n static validateDomain(domain: string | undefined): Result<string, void> {\n if (!domain) {\n return Err();\n }\n\n domain = Validator.checkAndTrimProtocol(domain.toLowerCase());\n\n if (!REGEX_DOMAIN.test(domain) && domain !== LOCALHOST) {\n KameleoonLogger.error`The top-level domain ${domain} is invalid. The value has been set as provided, but it does not meet the required format for proper SDK functionality. Please check the domain for correctness.`;\n return Ok(domain);\n }\n\n return Ok(domain);\n }\n\n static validateNetworkDomain(networkDomain: string | undefined): Result<string, void> {\n if (!networkDomain) {\n return Err();\n }\n\n networkDomain = Validator.checkAndTrimProtocol(networkDomain.toLowerCase());\n\n // replace first and last dot\n networkDomain = networkDomain.replace(/^\\.+|\\.+$/g, '');\n\n if (!REGEX_DOMAIN.test(networkDomain) && networkDomain !== LOCALHOST) {\n KameleoonLogger.error`The network domain ${networkDomain} is invalid.`;\n return Err();\n }\n\n return Ok(networkDomain);\n }\n\n private static checkAndTrimProtocol(domain: string): string {\n const protocols = [HTTP, HTTPS];\n for (const protocol of protocols) {\n if (domain.startsWith(protocol)) {\n domain = domain.substring(protocol.length);\n KameleoonLogger.warning`The domain contains ${protocol}. Domain after protocol trimming: ${domain}`;\n break;\n }\n }\n\n return domain;\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport { Milliseconds, TrackingCacheItemType } from 'src/types';\nimport { CustomData } from 'src/kameleoonData/customData';\nimport { KameleoonData, KameleoonDataType } from 'src/kameleoonData/types';\nimport { CACHE_ITEM_LIFETIME } from 'src/constants';\nimport { CacheManager } from 'src/cacheManager';\nimport { VersionMatchType, TargetingType } from 'src/targeting/types';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\nimport {\n CheckTargetingParametersType,\n ManageCacheParametersType,\n TimeUnit,\n IExternalPRNG,\n} from './types';\nimport { HEX_CHARACTERS, NONCE_LENGTH } from './constants';\nimport { Validator } from './validator';\nimport { KameleoonLogger } from 'src/logging';\nimport { VariationByExpositionType } from 'src/clientConfiguration/types';\n\nexport class Utilities {\n static getNonce(prng: IExternalPRNG): string {\n let nonce: string = '';\n\n for (let i = 0; i < NONCE_LENGTH; i++) {\n const randomNumber = prng.getRandomNumber();\n const randomIndex = Math.floor(randomNumber * NONCE_LENGTH);\n nonce += HEX_CHARACTERS.charAt(randomIndex);\n }\n\n return nonce;\n }\n\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n clientConfiguration,\n packageInfo,\n dataManager,\n }: CheckTargetingParametersType): Result<boolean, KameleoonError> {\n KameleoonLogger.debug`CALL: checkTargeting(segment, visitorCode: ${visitorCode}, targetingData: ${targetingData}, experimentId: ${experimentId}, variationConfiguration, clientConfiguration, packageInfo, dataManager)`;\n if (!segment || !segment.conditionsData.firstLevel.length) {\n const result = Ok(true);\n KameleoonLogger.debug`RETURN checkTargeting(segment, visitorCode: ${visitorCode}, targetingData: ${targetingData}, experimentId: ${experimentId}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${result})`;\n return result;\n }\n\n if (!variationConfiguration) {\n const result = Err(new KameleoonError(KameleoonException.Initialization));\n KameleoonLogger.debug`RETURN checkTargeting(segment, visitorCode: ${visitorCode}, targetingData: ${targetingData}, experimentId: ${experimentId}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${result})`;\n return result;\n }\n\n let variations: FeatureFlagVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getStoredVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = dataManager.getTree(segment);\n\n let trees = undefined;\n let ruleMap = undefined;\n let segments = undefined;\n\n // --- Note ---\n // Only getting trees and segments targeting type\n if (targetingTree.hasTargetingType(TargetingType.SEGMENT)) {\n trees = dataManager.trees;\n segments = clientConfiguration.segments;\n }\n\n // --- Note ---\n // Only constructing rule map for targeting type\n if (targetingTree.hasTargetingType(TargetingType.TARGET_FEATURE_FLAG)) {\n ruleMap = clientConfiguration.ruleMap;\n }\n\n const result = targetingTree.evaluate({\n variationData: variations,\n sdkInfo: packageInfo,\n segments,\n ruleMap,\n trees,\n targetingData,\n experimentId,\n visitorCode,\n });\n\n KameleoonLogger.debug`RETURN checkTargeting(segment, visitorCode: ${visitorCode}, targetingData: ${targetingData}, experimentId: ${experimentId}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${result})`;\n return result;\n }\n\n static convertTimeUnit(time: number, timeUnit: TimeUnit): number {\n const timeMap = {\n [TimeUnit.Minute]: Milliseconds.Minute,\n [TimeUnit.Hour]: Milliseconds.Hour,\n [TimeUnit.Day]: Milliseconds.Day,\n [TimeUnit.Week]: Milliseconds.Week,\n [TimeUnit.Month]: Milliseconds.Month,\n };\n\n return time / timeMap[timeUnit];\n }\n\n static isCustomData(dataItem: KameleoonDataType): dataItem is CustomData {\n return dataItem.data.type === KameleoonData.CustomData;\n }\n\n static updateCache({\n hasJsCssVariables,\n cacheManager,\n visitorCode,\n experimentId,\n variationId,\n }: ManageCacheParametersType): void {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n\n const newCacheData = cacheData ? { ...cacheData } : {};\n\n newCacheData[experimentId] = {\n variationId,\n hasJsCssVariables,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n\n static getTrackingCode(\n trackingCache: CacheManager<TrackingCacheItemType>,\n visitorCode: string,\n ): string {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n\n const cacheData = trackingCache.getAliveItem(visitorCode);\n\n if (!cacheData) {\n return resultString;\n }\n\n const updatedCacheData: TrackingCacheItemType = {};\n\n Object.entries(cacheData).forEach(\n ([experimentId, { variationId, expirationTime, hasJsCssVariables }]) => {\n const flag = !hasJsCssVariables;\n\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId},true]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},${flag}]);`;\n\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n hasJsCssVariables,\n };\n }\n },\n );\n\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n\n return resultString;\n }\n\n static compareSemVer({\n version,\n compareVersion,\n operator,\n }: {\n version: string;\n compareVersion: string;\n operator: VersionMatchType;\n }): Result<boolean, KameleoonError> {\n const versionResult = Validator.validateVersion(version);\n const compareVersionResult = Validator.validateVersion(compareVersion);\n\n if (!versionResult.ok) {\n return Err(versionResult.error);\n }\n\n if (!compareVersionResult.ok) {\n return Err(compareVersionResult.error);\n }\n\n const [major, minor, patch] = versionResult.data;\n const [compareMajor, compareMinor, comparePatch] =\n compareVersionResult.data;\n\n const [isMajorEqual, isMinorEqual, isPatchEqual] = [\n major === compareMajor,\n minor === compareMinor,\n patch === comparePatch,\n ];\n\n switch (operator) {\n case VersionMatchType.EQUAL:\n return Ok(isMajorEqual && isMinorEqual && isPatchEqual);\n case VersionMatchType.GREATER:\n return Ok(\n major > compareMajor ||\n (isMajorEqual && minor > compareMinor) ||\n (isMajorEqual && isMinorEqual && patch > comparePatch),\n );\n case VersionMatchType.LOWER:\n return Ok(\n major < compareMajor ||\n (isMajorEqual && minor < compareMinor) ||\n (isMajorEqual && isMinorEqual && patch < comparePatch),\n );\n default:\n KameleoonLogger.error`Unknown version match type: ${operator}`;\n exhaustCheck(operator);\n }\n }\n\n static getVariationByHash(\n variationByExposition: VariationByExpositionType[],\n hash: number,\n ): VariationByExpositionType | null {\n let total = 0;\n for (const varByExpItem of variationByExposition) {\n total += varByExpItem.exposition;\n if (total >= hash) {\n return varByExpItem;\n }\n }\n return null;\n }\n}\n","import {\n InsertInOrderedListParametersType,\n InsertVisitInOrderedListParametersType,\n Order,\n} from 'src/utilities/types';\nimport { VISITOR_VISIT_MAX_LENGTH } from 'src/utilities/constants';\n\nexport class ListUtilities {\n /**\n * Insert element in ordered list, if element already exists in list, does nothing\n * @param list - list to insert element\n * @param element - element to insert\n * @param order - order of list\n */\n static insertInOrderedListMutably({\n list,\n element,\n order,\n }: InsertInOrderedListParametersType): void {\n if (list.includes(element)) {\n return;\n }\n\n const index = list.findIndex((item) =>\n order === Order.Ascending ? item >= element : item <= element,\n );\n\n if (index === -1) {\n list.push(element as any);\n } else {\n list.splice(index, 0, element);\n }\n }\n\n /**\n * Insert visit in ordered list, if visit already exists in list, does nothing\n * @param list - list to insert element\n * @param visit - visit to insert\n */\n static insertVisitInOrderedListMutably({\n list,\n visit,\n }: InsertVisitInOrderedListParametersType): void {\n // Check if the visit already exists in the list\n const currentVisit = list.find((item) =>\n typeof item === 'number'\n ? item === visit.timeStarted\n : item.timeStarted === visit.timeStarted,\n );\n if (currentVisit) {\n return;\n }\n\n const index = list.findIndex((item) => {\n if (typeof item === 'number') {\n return item >= visit.timeStarted;\n }\n return item.timeStarted >= visit.timeStarted;\n });\n\n if (index === -1) {\n list.push(visit);\n } else {\n list.splice(index, 0, visit);\n }\n\n if (list.length > VISITOR_VISIT_MAX_LENGTH) {\n list.splice(0, list.length - VISITOR_VISIT_MAX_LENGTH);\n }\n }\n}\n","import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport {\n IKameleoonData,\n KameleoonData,\n PageViewDataType,\n PageViewParametersType,\n TimestampType,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * PageView - a class for creating an instance of a page view data\n * */\nexport class PageView implements IKameleoonData {\n // --- Note ---\n // Kept in ascending order\n public timestamps: TimestampType[];\n\n private urlAddress: string;\n private title: string;\n private nonce?: string;\n private referrers?: number[];\n\n /**\n * @param {PageViewParametersType} pageViewParameters - an object with page view parameters\n * */\n constructor({ urlAddress, title, referrers }: PageViewParametersType) {\n this.urlAddress = urlAddress;\n this.title = title;\n this.referrers = referrers;\n this.timestamps = [\n {\n time: Date.now(),\n status: TrackingStatus.Unsent,\n },\n ];\n }\n\n get url(): string {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.urlAddress) {\n return '';\n }\n\n const titleParameter = this.title\n ? UrlParameter.Title + encodeURIComponent(this.title)\n : '';\n\n const referrersParameter = this.referrers?.length\n ? UrlParameter.ReferrersIndices + JSON.stringify(this.referrers)\n : '';\n\n return (\n UrlEventType.Page +\n UrlParameter.Href +\n encodeURIComponent(this.urlAddress) +\n titleParameter +\n referrersParameter\n );\n }\n\n get status(): TrackingStatus {\n const {\n [TrackingStatus.Sent]: sent,\n [TrackingStatus.Unsent]: unsent,\n [TrackingStatus.Pending]: pending,\n } = this.timestamps.reduce(\n (acc, { status }) => {\n acc[status] = true;\n return acc;\n },\n {\n [TrackingStatus.Sent]: false,\n [TrackingStatus.Unsent]: false,\n [TrackingStatus.Pending]: false,\n },\n );\n\n if (sent && !unsent && !pending) {\n return TrackingStatus.Sent;\n }\n\n if (pending && !unsent) {\n return TrackingStatus.Pending;\n }\n\n return TrackingStatus.Unsent;\n }\n\n set status(status: TrackingStatus) {\n this.timestamps = this.timestamps.map((timestamp) => ({\n ...timestamp,\n status,\n }));\n }\n\n set _nonce(nonce: string) {\n this.nonce = nonce;\n }\n\n get data(): PageViewDataType {\n return {\n urlAddress: this.urlAddress,\n title: this.title,\n referrers: this.referrers,\n type: KameleoonData.PageView,\n timestamps: this.timestamps,\n status: this.status,\n nonce: this.nonce,\n };\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a PageView instance from raw data\n * @param {PageViewDataType} data - a raw data\n * @return {PageView} a PageView instance\n * */\n public static _fromRaw(data: PageViewDataType): PageView {\n const { urlAddress, title, referrers, timestamps, nonce } = data;\n const pageView = new PageView({\n urlAddress,\n title,\n referrers,\n });\n\n pageView.timestamps = timestamps;\n\n if (nonce) {\n pageView._nonce = nonce;\n }\n\n return pageView;\n }\n\n /**\n * @private\n * @method _updateFromVisit - an internal method for updating a list of page view data from a visit\n * @param {VisitType} visit - a visit\n * @param {Map<string, PageView>} dataMap - a map of page view data where we collect data\n * */\n public static _updateFromVisit(\n visit: VisitType,\n dataMap: Map<string, PageView>,\n ): void {\n const pageEvents = visit.pageEvents;\n\n if (pageEvents) {\n for (const pageEvent of pageEvents) {\n let referrers: number[] = [];\n\n const { time } = pageEvent;\n const { href, title, referrersIndices } = pageEvent.data;\n\n if (typeof referrersIndices[0] === 'number') {\n referrers = referrersIndices as number[];\n }\n\n let pageView: PageView;\n\n if (dataMap.has(href)) {\n const existingTimestamps = dataMap.get(href)!.timestamps;\n\n pageView = new PageView({\n urlAddress: href,\n title,\n referrers,\n });\n\n pageView.timestamps = [\n ...existingTimestamps,\n { time, status: TrackingStatus.Sent },\n ];\n } else {\n pageView = new PageView({\n urlAddress: href,\n title,\n referrers,\n });\n\n pageView.timestamps = [{ time, status: TrackingStatus.Sent }];\n }\n\n dataMap.set(href, pageView);\n }\n }\n }\n}\n","import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport { CustomDataType, IKameleoonData, KameleoonData } from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * CustomData - a class for creating an instance for user's custom data\n * */\nexport class CustomData implements IKameleoonData {\n static readonly UNDEFINED_INDEX = -1;\n\n private _status: TrackingStatus;\n private _index: number;\n private value: string[];\n private isIdentifier: boolean;\n private overwrite: boolean;\n private _name?: string;\n\n /**\n * @param {number|string} indexOrName - either:\n * - `number` — an index of custom data (configured in *Advanced Tools* section of Kameleoon Application)\n * - `string` — a custom name for the data\n * @param {boolean} [overwrite=true] - optional flag, whether to overwrite existing data\n * @param {...string} value - one or more values to store. Values must be strings (or stringified).\n *\n * @example\n * ```ts\n * // - Using index with single value\n * const cd1 = new CustomData(0, 'value_1');\n *\n * // - Using index with multiple values\n * const cd2 = new CustomData(0, 'value_1', 'value_2');\n *\n * // - Using index with overwrite flag\n * const cd3 = new CustomData(0, false, 'value_1', 'value_2');\n *\n * // - Using name with single value\n * const cd4 = new CustomData('name', 'value_1');\n *\n * // - Using name with multiple values\n * const cd5 = new CustomData('name', 'value_1', 'value_2');\n *\n * // - Using name with overwrite flag\n * const cd6 = new CustomData('name', false, 'value_1', 'value_2');\n * ```\n */\n constructor(index: number, ...value: string[]);\n constructor(index: number, overwrite: boolean, ...value: string[]);\n constructor(name: string, ...value: string[]);\n constructor(name: string, overwrite: boolean, ...value: string[]);\n constructor(\n first: number | string,\n second?: boolean | string,\n ...rest: string[]\n ) {\n this._status = TrackingStatus.Unsent;\n this.isIdentifier = false;\n\n const isNumber = typeof first === 'number';\n const isBoolean = typeof second === 'boolean';\n\n if (isNumber) {\n this._index = first as number;\n } else {\n this._name = first as string;\n this._index = CustomData.UNDEFINED_INDEX;\n }\n\n this.overwrite = isBoolean ? (second as boolean) : true;\n this.value = isBoolean\n ? rest\n : [second as string, ...rest].filter((v) => v != null);\n }\n\n get url(): string {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (typeof this._index !== 'number') {\n return '';\n }\n\n const uniqueValues = [...new Set(this.value)];\n let resultValue: Record<string, 1> = {};\n\n // --- Note ---\n // Final value should look like this `{ \"value_1\": 1, \"value_2\": 1, \"value_3\": 1 }`\n // With no duplicates\n uniqueValues.forEach((value) => {\n resultValue[value] = 1;\n });\n\n let identifierParameter = '';\n\n if (this.isIdentifier) {\n identifierParameter = UrlParameter.MappingIdentifier + String(true);\n }\n\n return (\n UrlEventType.CustomData +\n UrlParameter.Index +\n this._index +\n UrlParameter.ValuesCountMap +\n encodeURIComponent(JSON.stringify(resultValue)) +\n UrlParameter.Overwrite +\n String(this.overwrite) +\n identifierParameter\n );\n }\n\n get data(): CustomDataType {\n return {\n index: this._index,\n ...(this._name !== undefined ? { name: this._name } : {}),\n value: this.value,\n type: KameleoonData.CustomData,\n isIdentifier: this.isIdentifier,\n status: this.status,\n overwrite: this.overwrite,\n };\n }\n\n get status(): TrackingStatus {\n if (this._isMappingIdentifier) {\n return TrackingStatus.Unsent;\n }\n\n return this._status;\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a CustomData instance from raw data\n * @param {CustomDataType} data - a raw data\n * @return {CustomData} a CustomData instance\n * */\n public static _fromRaw(data: CustomDataType): CustomData {\n const { index, value, status, isIdentifier, name, overwrite } = data;\n let customData;\n if (name) {\n customData = new CustomData(name, overwrite ?? true, ...value);\n customData.index = index;\n } else {\n customData = new CustomData(index, overwrite ?? true, ...value);\n }\n\n customData.status = status;\n customData._isMappingIdentifier = isIdentifier;\n\n return customData;\n }\n\n /**\n * @property isMappingIdentifier - signifying if the data is a mapping identifier\n * @private\n * */\n set _isMappingIdentifier(value: boolean) {\n this.isIdentifier = value;\n }\n\n set status(status: TrackingStatus) {\n this._status = status;\n }\n\n /**\n * @private\n * @method _updateFromVisit - an internal method for updating a list of custom data from a visit\n * @param {VisitType} visit - a visit\n * */\n public static _updateFromVisit(\n visit: VisitType,\n dataMap: Map<number, CustomData>,\n ): void {\n if (visit.customDataEvents?.length) {\n for (let i = visit.customDataEvents.length - 1; i >= 0; i--) {\n const { index, valuesCountMap } = visit.customDataEvents[i].data;\n\n if (!dataMap.has(index)) {\n dataMap.set(\n index,\n new CustomData(index, ...Object.keys(valuesCountMap)),\n );\n }\n }\n }\n }\n\n /**\n * @private\n * @method index - an internal setter for setting index of custom data\n * @param {number} value - an index value\n * */\n public set index(value: number) {\n this._index = value;\n }\n\n /**\n * @private\n * @method index - an internal getter for index of custom data\n * */\n public get index(): number {\n return this._index;\n }\n\n /**\n * @private\n * @method name - an internal getter for a name of custom data\n * */\n public get name(): string | undefined {\n return this._name;\n }\n\n /**\n * @private\n * @method name - an internal getter for a name of custom data\n * */\n public get values(): string[] {\n return this.value;\n }\n}\n","import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport {\n ConversionDataType,\n ConversionParametersType,\n CustomDataType,\n IKameleoonData,\n KameleoonData,\n} from './types';\nimport { TrackingStatus } from 'src/types';\nimport { CustomData } from 'src/kameleoonData/customData';\n\n/**\n * @class\n * Conversion - a class for creating an instance for conversion tracking\n * */\nexport class Conversion implements IKameleoonData {\n public status: TrackingStatus;\n\n private goalId: number;\n private revenue: number;\n private negative: boolean;\n private id: number;\n private nonce: string | undefined;\n private metadata: CustomData[] | undefined;\n\n /**\n * @param {ConversionParametersType} conversionParameters - an object with conversion parameters\n * */\n constructor({\n goalId,\n revenue = 0,\n negative = false,\n metadata,\n }: ConversionParametersType) {\n this.goalId = goalId;\n this.revenue = revenue;\n this.negative = negative;\n this.status = TrackingStatus.Unsent;\n this.id = Math.floor(Math.random() * 1_000_000);\n this._metadata = metadata;\n }\n\n set _id(id: number) {\n this.id = id;\n }\n\n set _nonce(nonce: string) {\n this.nonce = nonce;\n }\n\n get url(): string {\n return (\n UrlEventType.Conversion +\n UrlParameter.GoalId +\n String(this.goalId) +\n UrlParameter.Revenue +\n String(this.revenue) +\n UrlParameter.Negative +\n String(this.negative) +\n (this.metadata?.length\n ? UrlParameter.Metadata + this._encodeMetadata()\n : '')\n );\n }\n\n /**\n * @private\n * @method metadata - an internal getter for a metadata of conversion\n * */\n get _metadata(): CustomData[] | undefined {\n return this.metadata;\n }\n\n /**\n * @private\n * @method metadata - an internal setter for setting metadata of conversion\n * @param {number} value - an index value\n * */\n public set _metadata(value: CustomData[] | undefined) {\n this.metadata = value;\n }\n\n get data(): ConversionDataType {\n return {\n goalId: this.goalId,\n nonce: this.nonce,\n revenue: this.revenue,\n negative: this.negative,\n type: KameleoonData.Conversion,\n status: this.status,\n id: this.id,\n metadata:\n this.metadata?.map((item: CustomData) => item.data) || undefined,\n };\n }\n\n private _encodeMetadata(): string {\n if (!this.metadata?.length) {\n return '';\n }\n const indices: Set<number> = new Set();\n return encodeURIComponent(\n JSON.stringify(\n this.metadata.reduce((acc: { [key: number]: string[] }, item) => {\n if (indices.has(item.data.index)) {\n return acc;\n }\n indices.add(item.data.index);\n acc[item.data.index] = item.data.value;\n return acc;\n }, {}),\n ),\n );\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Conversion instance from raw data\n * @param {ConversionDataType} data - a raw data\n * @return {Conversion} a Conversion instance\n * */\n public static _fromRaw(data: ConversionDataType): Conversion {\n const { goalId, revenue, negative, status, id, nonce, metadata } = data;\n\n const conversion = new Conversion({\n goalId,\n revenue,\n negative,\n metadata: Conversion.parseMetadata(metadata),\n });\n\n conversion._id = id;\n conversion.status = status;\n\n if (nonce) {\n conversion._nonce = nonce;\n }\n\n return conversion;\n }\n\n private static parseMetadata(\n metadata: CustomDataType[] | undefined,\n ): CustomData[] | undefined {\n return (\n metadata?.map((item: CustomDataType) => CustomData._fromRaw(item)) ||\n undefined\n );\n }\n\n /**\n * @private\n * @method _listFromVisit - an internal method for returning a list of all Conversion instances\n * @param {VisitType} visit - a visits\n * @return {Conversion[]} - a list of Conversion instances\n * */\n public static _listFromVisit(visit: VisitType): Conversion[] {\n const conversions: Conversion[] = [];\n\n if (!visit.conversionEvents?.length) {\n return [];\n }\n\n if (visit.conversionEvents?.length) {\n for (const conversionEvent of visit.conversionEvents) {\n const { goalId, revenue, negative } = conversionEvent.data;\n const conversion = new Conversion({ goalId, revenue, negative });\n\n // --- Note ---\n // Conversion is marked as sent, so the visitor won't be converted again just\n // by pulling visits data\n conversion.status = TrackingStatus.Sent;\n conversions.push(conversion);\n }\n }\n\n return conversions;\n }\n\n /**\n * @private\n * @method _updateFromVisit - an internal method for updating a list of Conversion instances with only goalId\n * @param {VisitType} visit - a visits\n * @param {Map<number, Conversion>} dataMap - a map of Conversion instances\n * */\n public static _updateFromVisit(\n visit: VisitType,\n dataMap: Map<number, Conversion>,\n ): void {\n if (visit.conversionEvents?.length) {\n for (const conversionEvent of visit.conversionEvents) {\n const { goalId } = conversionEvent.data;\n\n // --- Note ---\n // - We only take unique `goalId`s as and don't use `revenue` and `negative`\n // because we only utilize it for Conversion Condition and don't re-sent this data tracking\n // not to break server `revenue` calculations and not to cause extra conversions\n // - Moreover conversion is marked as sent, so the visitor won't be converted again just\n // by pulling visits data\n if (!dataMap.has(goalId)) {\n const conversion = new Conversion({ goalId });\n\n conversion.status = TrackingStatus.Sent;\n dataMap.set(goalId, conversion);\n }\n }\n }\n }\n}\n","import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport {\n BrowserDataType,\n BrowserType,\n BrowserIndexMap,\n IKameleoonData,\n KameleoonData,\n BrowserTypeMap,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * Browser - a class for creating an instance for browser of a certain type\n * */\nexport class Browser implements IKameleoonData {\n public status: TrackingStatus;\n\n private browser: BrowserType;\n private version?: number;\n\n /**\n * @param {BrowserType} browser - one of the browser types available for data, if browser can not be found in a list, it can be marked as `BrowserType.Other`\n * @param {number | undefined} version - version of the browser, floating point number represents major and minor version of the browser\n * @example\n * ```ts\n * const browser = new Browser(BrowserType.Chrome, 86);\n * const browser = new Browser(BrowserType.Safari, 14.1);\n * ```\n * */\n constructor(browser: BrowserType, version?: number) {\n this.browser = browser;\n this.version = version;\n this.status = TrackingStatus.Unsent;\n }\n\n get url(): string {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.browser) {\n return '';\n }\n\n const browserVersion = this.version\n ? UrlParameter.BrowserVersion + this.version\n : '';\n\n return (\n UrlEventType.StaticData +\n UrlParameter.Browser +\n this.browser +\n UrlParameter.BrowserIndex +\n BrowserIndexMap[this.browser] +\n browserVersion\n );\n }\n\n get data(): BrowserDataType {\n return {\n browser: this.browser,\n type: KameleoonData.Browser,\n version: this.version,\n status: this.status,\n };\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Browser instance from raw data\n * @param {BrowserDataType} data - a raw data\n * @return {Browser} a Browser instance\n * */\n public static _fromRaw(data: BrowserDataType): Browser {\n const { browser: browserType, version, status } = data;\n const browser = new Browser(browserType, version);\n\n browser.status = status;\n\n return browser;\n }\n\n /**\n * @private\n * @method _fromVisit - an internal method for creating an instance of Browser class from a visit\n * @param {VisitType} visit - a visit\n * @returns {Browser | undefined} an instance of Browser class or undefined if browser can not be found among visits\n * */\n public static _fromVisit(visit: VisitType): Browser | undefined {\n if (!visit.staticDataEvent) {\n return undefined;\n }\n\n const {\n browser: browserType,\n browserIndex,\n browserVersion,\n } = visit.staticDataEvent.data;\n\n if (browserType || typeof browserIndex === 'number') {\n const browser = browserType ?? BrowserTypeMap[browserIndex as number];\n\n if (browserVersion) {\n return new Browser(browser, browserVersion);\n } else {\n return new Browser(browser);\n }\n }\n\n return undefined;\n }\n}\n","import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport {\n DeviceDataType,\n DeviceType,\n IKameleoonData,\n KameleoonData,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * Device - a class for creating an instance for device of a certain type\n * */\nexport class Device implements IKameleoonData {\n public status: TrackingStatus;\n\n private device: DeviceType;\n\n /**\n * @param {DeviceType} device - one of the available device types from `DeviceType` enum\n * */\n constructor(device: DeviceType) {\n this.device = device;\n this.status = TrackingStatus.Unsent;\n }\n\n get url(): string {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.device) {\n return '';\n }\n\n return UrlEventType.StaticData + UrlParameter.DeviceType + this.device;\n }\n\n get data(): DeviceDataType {\n return {\n device: this.device,\n type: KameleoonData.Device,\n status: this.status,\n };\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Device instance from raw data\n * @param {DeviceDataType} data - a raw data\n * @return {Device} a Device instance\n * */\n public static _fromRaw(data: DeviceDataType): Device {\n const { device: deviceType, status } = data;\n const device = new Device(deviceType);\n\n device.status = status;\n\n return device;\n }\n\n /**\n * @private\n * @method _fromVisit - an internal method for creating an instance of Device class from a visit\n * @param {VisitType} visit - a visit\n * @returns {Device | undefined} an instance of Device class or undefined if browser can not be found among visits\n * */\n public static _fromVisit(visit: VisitType): Device | undefined {\n if (visit.staticDataEvent?.data.deviceType) {\n return new Device(visit.staticDataEvent.data.deviceType);\n }\n\n return undefined;\n }\n}\n","import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport {\n IKameleoonData,\n KameleoonData,\n OperatingSystemDataType,\n OperatingSystemIndexMap,\n OperatingSystemType,\n OperatingSystemTypeMap,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * OperatingSystem - a class for creating an instance for Operating System of a certain type\n * */\nexport class OperatingSystem implements IKameleoonData {\n private operatingSystem: OperatingSystemType;\n public status: TrackingStatus;\n\n /**\n * @param {OperatingSystemType} operatingSystem - one of the available operating system types from `OperatingSystemType` enum\n * */\n constructor(operatingSystem: OperatingSystemType) {\n this.operatingSystem = operatingSystem;\n this.status = TrackingStatus.Unsent;\n }\n\n get url(): string {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.operatingSystem) {\n return '';\n }\n\n return (\n UrlEventType.StaticData +\n UrlParameter.Os +\n this.operatingSystem +\n UrlParameter.OsIndex +\n OperatingSystemIndexMap[this.operatingSystem]\n );\n }\n\n get data(): OperatingSystemDataType {\n return {\n operatingSystem: this.operatingSystem,\n type: KameleoonData.OperatingSystem,\n status: this.status,\n };\n }\n\n /**\n * @private\n * @method _fromRaw - a static method for creating an instance of OperatingSystem class from raw data\n * @param {OperatingSystemDataType} data - a raw data\n * @returns {OperatingSystem} an instance of OperatingSystem class\n * */\n public static _fromRaw(data: OperatingSystemDataType): OperatingSystem {\n const { operatingSystem, status } = data;\n const os = new OperatingSystem(operatingSystem);\n\n os.status = status;\n\n return os;\n }\n\n /**\n * @private\n * @method _fromVisit - a static method for creating an instance of OperatingSystem class from a visit\n * @param {VisitType} visit - a visit\n * @returns {OperatingSystem | undefined} an instance of OperatingSystem class or undefined\n * */\n public static _fromVisit(visit: VisitType): OperatingSystem | undefined {\n if (!visit.staticDataEvent) {\n return undefined;\n }\n\n const { os: operatingSystemType, osIndex } = visit.staticDataEvent.data;\n\n if (operatingSystemType || typeof osIndex === 'number') {\n const operatingSystem =\n operatingSystemType ?? OperatingSystemTypeMap[osIndex as number];\n\n return new OperatingSystem(operatingSystem);\n }\n\n return undefined;\n }\n}\n","import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport { GeolocationEventType } from 'src/requester/types';\nimport {\n IKameleoonData,\n KameleoonData,\n GeolocationInfoType,\n GeolocationDataType,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * Geolocation - a class for creating an instance for geolocation data\n * */\nexport class GeolocationData implements IKameleoonData {\n public status: TrackingStatus;\n\n private country: string;\n private region?: string;\n private city?: string;\n private postalCode?: string;\n private coordinates?: [number, number];\n\n /**\n * @param {GeolocationInfoType} geolocationInfo - an object containing information about geolocation of a visitor\n * @example\n * ```ts\n * // Visitor is located at Triumph Arch in Paris, France\n * const location: GeolocationDataType = {\n * country: 'France',\n * region: 'Île-de-France',\n * city: 'Paris',\n * postalCode: '75008',\n * coordinates: [48.8738, 2.295]\n * };\n *\n * const geolocation = new GeolocationData(location);\n * ```\n *\n * */\n constructor({\n country,\n region,\n city,\n postalCode,\n coordinates,\n }: GeolocationInfoType) {\n this.country = country;\n this.region = region;\n this.city = city;\n this.postalCode = postalCode;\n this.coordinates = coordinates;\n this.status = TrackingStatus.Unsent;\n }\n\n get url(): string {\n const region = this.region\n ? UrlParameter.Region + encodeURIComponent(this.region)\n : '';\n const city = this.city\n ? UrlParameter.City + encodeURIComponent(this.city)\n : '';\n const postalCode = this.postalCode\n ? UrlParameter.PostalCode + encodeURIComponent(this.postalCode)\n : '';\n const coordinates = this.coordinates\n ? UrlParameter.Latitude +\n this.coordinates[0] +\n UrlParameter.Longitude +\n this.coordinates[1]\n : '';\n\n return (\n UrlEventType.Geolocation +\n UrlParameter.Country +\n encodeURIComponent(this.country) +\n region +\n city +\n postalCode +\n coordinates\n );\n }\n\n get data(): GeolocationDataType {\n return {\n type: KameleoonData.GeolocationData,\n country: this.country,\n region: this.region,\n city: this.city,\n postalCode: this.postalCode,\n coordinates: this.coordinates,\n status: this.status,\n };\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a GeolocationData instance from raw data\n * @param {GeolocationDataType} data - a raw data\n * @return {GeolocationData} a GeolocationData instance\n * */\n public static _fromRaw(data: GeolocationDataType): GeolocationData {\n const { country, region, city, postalCode, coordinates, status } = data;\n const geolocation = new GeolocationData({\n country,\n region,\n city,\n postalCode,\n coordinates,\n });\n\n geolocation.status = status;\n\n return geolocation;\n }\n\n /**\n * @private\n * @method _fromVisit - an internal method for creating an instance of GeolocationData class from a visit\n * @param {VisitType} visit - a visit\n * @returns {GeolocationData | undefined} an instance of GeolocationData class or undefined if geolocation can not be found among visits\n * */\n public static _fromVisit(visit: VisitType): GeolocationData | undefined {\n if (!visit.geolocationEvents?.length) {\n return undefined;\n }\n\n let geolocationData: GeolocationEventType['data'] | undefined = undefined;\n\n for (const geolocationEvent of visit.geolocationEvents) {\n const { data } = geolocationEvent;\n\n if (data.country) {\n geolocationData = data;\n }\n }\n\n // --- Note ---\n // We only take `country`, `region`, and `city` from geolocation event ignoring other fields\n // as they are not participating in targeting, and visits data won't be tracked again\n const { country, region, city } = geolocationData || {};\n\n if (country) {\n if (region && city) {\n return new GeolocationData({ country, region, city });\n } else if (region) {\n return new GeolocationData({ country, region });\n } else {\n return new GeolocationData({ country });\n }\n }\n }\n}\n","import { ListUtilities } from 'src/utilities/listUtilities';\nimport {\n IKameleoonData,\n KameleoonData,\n VisitDataType,\n VisitsDataType,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * Visits - a class for creating an instance of a stored visits data\n * */\nexport class VisitsData implements IKameleoonData {\n // --- Note ---\n // Ascending order\n private readonly visits: VisitDataType[];\n private _visitNumber: number;\n public status: TrackingStatus = TrackingStatus.Sent;\n\n /**\n * @param {number[]} visits - a list of visits\n * */\n constructor(visits: VisitDataType[]) {\n this.visits = visits;\n this._visitNumber = visits.length ? visits.length - 1 : 0;\n }\n\n get visitNumber(): number {\n return this._visitNumber;\n }\n\n get url(): string {\n return '';\n }\n\n get data(): VisitsDataType {\n return {\n visits: this.visits,\n visitNumber: this._visitNumber,\n type: KameleoonData.VisitsData,\n status: this.status,\n };\n }\n\n get isSent(): boolean {\n return true;\n }\n\n /**\n * Adds a single timestamp while ensuring the list remains sorted and unique\n * @param {VisitDataType} visit - The visit data to be added\n */\n set timestamp(visit: VisitDataType) {\n ListUtilities.insertVisitInOrderedListMutably({\n list: this.visits,\n visit,\n });\n\n this._visitNumber = this.visits.length ? this.visits.length - 1 : 0;\n }\n\n public updateVisitNumber(visitNumber: number): void {\n if (visitNumber > this._visitNumber) {\n this._visitNumber = visitNumber;\n }\n }\n}\n","import { IKameleoonData, KCSType, KCSDataType, KameleoonData } from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * KameleoonConversionScore - a class for creating an KCS Heat Range data\n * */\nexport class KameleoonConversionScore implements IKameleoonData {\n public status: TrackingStatus;\n\n private kcs: KCSType;\n\n /**\n * @param {KCSType} kcs - Kameleoon Conversion Score nested object\n * */\n constructor(kcs: KCSType) {\n this.kcs = kcs;\n this.status = TrackingStatus.Sent;\n }\n\n get url(): string {\n return '';\n }\n\n get data(): KCSDataType {\n return {\n kcs: this.kcs,\n type: KameleoonData.KameleoonConversionScore,\n status: this.status,\n };\n }\n}\n","import { TrackingStatus } from 'src/types';\nimport {\n IKameleoonData,\n KameleoonData,\n PersonalizationDataType,\n} from './types';\nimport { VisitType } from 'src/requester';\n\nexport class Personalization implements IKameleoonData {\n public status: TrackingStatus;\n\n private readonly id: number;\n private readonly variationId: number;\n\n /**\n * @param {number} id\n * @param {number} variationId\n * */\n constructor(id: number, variationId: number) {\n this.id = id;\n this.variationId = variationId;\n this.status = TrackingStatus.Sent;\n }\n\n get url(): string {\n return '';\n }\n\n get data(): PersonalizationDataType {\n return {\n id: this.id,\n variationId: this.variationId,\n type: KameleoonData.Personalization,\n status: TrackingStatus.Sent,\n };\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Personalization instance from raw data\n * @param {PersonalizationDataType} data - a raw data\n * @return {Personalization} a Personalization instance\n * */\n public static _fromRaw(data: PersonalizationDataType): Personalization {\n return new Personalization(data.id, data.variationId);\n }\n\n /**\n * @private\n * @method _updateFromVisit - an internal method for updating a list of Personalization instances\n * @param {VisitType} visit - a visits\n * @param {Map<number, Personalization>} dataMap - a map of Personalization instances\n * */\n public static _updateFromVisit(\n visit: VisitType,\n dataMap: Map<number, Personalization>,\n ): void {\n if (visit.personalizationEvents?.length) {\n for (const personalizationEvent of visit.personalizationEvents) {\n const { id, variationId } = personalizationEvent.data;\n\n if (!dataMap.has(id)) {\n const personalization = new Personalization(id, variationId);\n\n dataMap.set(id, personalization);\n }\n }\n }\n }\n}\n","import {\n IKameleoonData,\n KameleoonData,\n VarGroup,\n ScoredVarIds,\n CBSType,\n CBSDataType,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\nexport class CBScores implements IKameleoonData {\n public status: TrackingStatus;\n private readonly values: Map<number, VarGroup[]>;\n private readonly cbs: CBSType;\n\n constructor(cbsMap: CBSType) {\n this.values = new Map(\n Object.entries(cbsMap).map(([key, value]) => [\n Number(key),\n this.extractVarIds(value),\n ]),\n );\n this.cbs = cbsMap;\n this.status = TrackingStatus.Sent;\n }\n\n private extractVarIds(scores: ScoredVarIds): VarGroup[] {\n // keys = experiment IDs / values = list of variation IDs ordered descending\n // by score (there may be several variation ids with same score)\n const grouped = new Map<number, number[]>();\n\n Object.entries(scores).forEach(([variationId, score]) => {\n if (!grouped.has(score)) {\n grouped.set(score, []);\n }\n grouped.get(score)!.push(Number(variationId));\n });\n\n return Array.from(grouped.entries())\n .sort(([scoreA], [scoreB]) => scoreB - scoreA)\n .map(([, ids]) => ({ ids: ids.sort((a, b) => a - b) }));\n }\n\n getValues(): Map<number, VarGroup[]> {\n return this.values;\n }\n\n get url(): string {\n return '';\n }\n\n get data(): CBSDataType {\n return {\n cbs: this.cbs,\n type: KameleoonData.CBScores,\n status: this.status,\n };\n }\n\n public static _fromRaw(data: CBSDataType): CBScores {\n const cbScores = new CBScores(data.cbs);\n cbScores.status = data.status;\n return cbScores;\n }\n}\n","import { VisitType } from 'src/requester';\nimport { PageView } from './pageView';\nimport { VisitorDataFiltersType } from 'src/utilities/types';\nimport {\n KameleoonData,\n KameleoonDataType,\n SingleDataType,\n MultipleDataType,\n VisitProcessorDataType,\n KCSType,\n VisitorProcessorParametersType,\n CBSType,\n} from './types';\nimport { CustomData } from './customData';\nimport { Conversion } from './conversion';\nimport { Browser } from './browser';\nimport { Device } from './device';\nimport { OperatingSystem } from './operatingSystem';\nimport { GeolocationData } from './geolocation';\nimport { FeatureFlagVariationsType } from 'src/storage';\nimport { VisitsData } from './visitsData';\nimport { DataManager } from './dataManager';\nimport { KameleoonConversionScore } from './kameleoonConversionScore';\nimport { TrackingStatus } from 'src/types';\nimport { MappingIdentifierType } from 'src/storage/types';\nimport { Personalization } from './personalization';\nimport { CBScores } from 'src/kameleoonData/cbScores';\n\ninterface IVisitProcessor {\n processVisit(visit: VisitType): void;\n processKcs(kcsData?: KCSType): void;\n processCbs(cbsData?: CBSType): void;\n processMultipleDataTypes(): void;\n processMappingIdentifier(\n visit?: VisitType,\n ): MappingIdentifierType | undefined;\n processVisitsData(visit: VisitType): void;\n}\n\nexport class VisitProcessor implements IVisitProcessor {\n private readonly visitsData = new VisitsData([]);\n private readonly visitorData: KameleoonDataType[] = [];\n private readonly storageVisitorData: KameleoonDataType[] = [];\n private experimentData: FeatureFlagVariationsType = {};\n private readonly filters: VisitorDataFiltersType;\n private readonly visitorDataTypes: Set<KameleoonData>;\n private readonly dataManager: DataManager;\n private singleDataTypes: SingleDataType = {\n [KameleoonData.Device]: null,\n [KameleoonData.Browser]: null,\n [KameleoonData.GeolocationData]: null,\n [KameleoonData.OperatingSystem]: null,\n [KameleoonData.KameleoonConversionScore]: null,\n [KameleoonData.CBScores]: null,\n };\n private readonly multipleDataTypes: MultipleDataType = {\n [KameleoonData.CustomData]: new Map<number, CustomData>(),\n [KameleoonData.PageView]: new Map<string, PageView>(),\n [KameleoonData.Conversion]: new Map<number, Conversion>(),\n [KameleoonData.Personalization]: new Map<number, Personalization>(),\n };\n\n constructor({\n filters,\n dataManager,\n visitorCode,\n }: VisitorProcessorParametersType) {\n this.filters = filters;\n this.dataManager = dataManager;\n this.visitorDataTypes = dataManager.getVisitorStoredDataTypes(visitorCode);\n }\n\n get data(): VisitProcessorDataType {\n return {\n visitorData: this.visitorData,\n storageVisitorData: this.storageVisitorData,\n visitsData: this.visitsData,\n experimentData: this.experimentData,\n };\n }\n\n public processVisit(visit: VisitType): void {\n this.processBrowser(visit);\n this.processDevice(visit);\n this.processOperatingSystem(visit);\n this.processGeolocationData(visit);\n this.processCustomData(visit);\n this.processConversion(visit);\n this.processPageView(visit);\n this.processExperiments(visit);\n this.processPersonalization(visit);\n }\n\n public processMultipleDataTypes(): void {\n for (const [dataType, data] of Object.entries(this.multipleDataTypes)) {\n if (!data.size) {\n continue;\n }\n\n switch (dataType) {\n case KameleoonData.PageView: {\n this.visitorData.push(...data.values());\n this.storageVisitorData.push(...data.values());\n\n break;\n }\n case KameleoonData.Personalization:\n case KameleoonData.Conversion: {\n this.storageVisitorData.push(...data.values());\n\n break;\n }\n case KameleoonData.CustomData: {\n const dataItem = data as Map<number, CustomData>;\n\n dataItem.forEach((customData) => {\n this.visitorData.push(customData);\n\n if (\n !this.dataManager.storedCustomDataIndexes.has(\n customData.data.index,\n )\n ) {\n this.storageVisitorData.push(customData);\n }\n });\n\n break;\n }\n }\n }\n }\n\n public processKcs(kcsData?: KCSType): void {\n if (this.filters.kcs && kcsData) {\n const kcs = new KameleoonConversionScore(kcsData);\n\n this.storageVisitorData.push(kcs);\n }\n }\n\n public processVisitsData(visit: VisitType): void {\n this.visitsData.timestamp = {\n timeStarted: visit.timeStarted,\n timeLastActivity: visit.timeLastEvent ?? visit.timeStarted,\n };\n }\n\n public processVisitNumber(visit: VisitType, visitOffset: number): void {\n if (\n this.visitsData.visitNumber <= visitOffset &&\n visit.staticDataEvent?.data.visitNumber\n ) {\n const visitNumber = visit.staticDataEvent?.data.visitNumber ?? 0;\n this.visitsData.updateVisitNumber(visitNumber + visitOffset);\n }\n }\n\n public processCbs(cbsData?: CBSType): void {\n if (this.filters.cbs && cbsData) {\n const cbs = new CBScores(cbsData);\n\n this.storageVisitorData.push(cbs);\n }\n }\n\n private processBrowser(visit: VisitType): void {\n if (this.filters.browser && !this.singleDataTypes[KameleoonData.Browser]) {\n const browser = Browser._fromVisit(visit);\n\n if (browser) {\n if (!this.visitorDataTypes.has(KameleoonData.Browser)) {\n this.storageVisitorData.push(browser);\n }\n this.visitorData.push(browser);\n this.singleDataTypes[KameleoonData.Browser] = browser;\n }\n }\n }\n\n private processDevice(visit: VisitType): void {\n if (this.filters.device && !this.singleDataTypes[KameleoonData.Device]) {\n const device = Device._fromVisit(visit);\n\n if (device) {\n if (!this.visitorDataTypes.has(KameleoonData.Device)) {\n this.storageVisitorData.push(device);\n }\n\n this.visitorData.push(device);\n this.singleDataTypes[KameleoonData.Device] = device;\n }\n }\n }\n\n private processOperatingSystem(visit: VisitType): void {\n if (\n this.filters.operatingSystem &&\n !this.singleDataTypes[KameleoonData.OperatingSystem]\n ) {\n const operatingSystem = OperatingSystem._fromVisit(visit);\n\n if (operatingSystem) {\n if (!this.visitorDataTypes.has(KameleoonData.OperatingSystem)) {\n this.storageVisitorData.push(operatingSystem);\n }\n\n this.visitorData.push(operatingSystem);\n this.singleDataTypes[KameleoonData.OperatingSystem] = operatingSystem;\n }\n }\n }\n\n private processGeolocationData(visit: VisitType): void {\n if (\n this.filters.geolocation &&\n !this.singleDataTypes[KameleoonData.GeolocationData]\n ) {\n const geolocation = GeolocationData._fromVisit(visit);\n\n if (geolocation) {\n if (!this.visitorDataTypes.has(KameleoonData.GeolocationData)) {\n this.storageVisitorData.push(geolocation);\n }\n\n this.visitorData.push(geolocation);\n this.singleDataTypes[KameleoonData.GeolocationData] = geolocation;\n }\n }\n }\n\n private processCustomData(visit: VisitType): void {\n if (this.filters.customData) {\n CustomData._updateFromVisit(\n visit,\n this.multipleDataTypes[KameleoonData.CustomData],\n );\n }\n }\n\n private processConversion(visit: VisitType): void {\n if (this.filters.conversions) {\n // --- Note ---\n // We collect Conversion data with only unique goalId\n Conversion._updateFromVisit(\n visit,\n this.multipleDataTypes[KameleoonData.Conversion],\n );\n\n // --- Note ---\n // We collect all Conversion data with goalId, revenue and negative for all visits\n const conversions = Conversion._listFromVisit(visit);\n\n if (conversions.length) {\n this.visitorData.push(...conversions);\n }\n }\n }\n\n private processPageView(visit: VisitType): void {\n if (this.filters.pageViews) {\n PageView._updateFromVisit(\n visit,\n this.multipleDataTypes[KameleoonData.PageView],\n );\n }\n }\n\n private processExperiments(visit: VisitType): void {\n if (this.filters.experiments && visit.experimentEvents) {\n for (const experimentEvent of visit.experimentEvents) {\n const { id, variationId } = experimentEvent.data;\n\n this.experimentData[id] = {\n variationId,\n isTargetedRule: false,\n status: TrackingStatus.Unsent,\n };\n }\n }\n }\n\n private processPersonalization(visit: VisitType): void {\n if (this.filters.personalization) {\n Personalization._updateFromVisit(\n visit,\n this.multipleDataTypes[KameleoonData.Personalization],\n );\n }\n }\n\n public processMappingIdentifier(\n visit?: VisitType,\n ): MappingIdentifierType | undefined {\n if (!visit) {\n return;\n }\n const timestamp = visit.customDataEvents?.find(\n (event) => event.data.mappingIdentifier,\n )?.time;\n if (timestamp && visit.visitorCode) {\n return {\n mappingIdentifier: visit.visitorCode,\n timestamp,\n };\n }\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { FeatureVariableType, JSONType } from 'src/clientConfiguration';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport { FeatureVariableResultType, VariableType } from 'src/types';\nimport {\n ParseVisitorDataParametersType,\n ParseVisitorDataResultType,\n} from './types';\nimport { VisitProcessor } from 'src/kameleoonData/visitProcessor';\nimport {\n HIDDEN_SECRET_CHAR,\n SECRET_VISIBLE_LENGTH,\n} from 'src/utilities/constants';\nimport { VisitsData } from 'src/kameleoonData/visitsData';\n\nexport class Parser {\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { key, type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n key,\n type,\n value: Boolean(value),\n });\n case VariableType.JS:\n case VariableType.CSS:\n case VariableType.STRING:\n return Ok({\n key,\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n key,\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n key,\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData({\n data,\n filters,\n visitorCode,\n dataManager,\n variationConfiguration,\n }: ParseVisitorDataParametersType): ParseVisitorDataResultType {\n const visitProcessor = new VisitProcessor({\n filters,\n dataManager,\n visitorCode,\n });\n\n const { currentVisit, previousVisits, kcs, cbs } = data;\n\n if (!previousVisits?.length && !currentVisit) {\n return {\n visitorData: [],\n storageVisitorData: [],\n visitsData: new VisitsData([]),\n };\n }\n\n if (currentVisit) {\n visitProcessor.processVisit(currentVisit);\n visitProcessor.processVisitNumber(currentVisit, 0);\n }\n\n previousVisits?.forEach((visit, index) => {\n visitProcessor.processVisit(visit);\n visitProcessor.processVisitsData(visit);\n visitProcessor.processVisitNumber(visit, index + 1);\n });\n\n visitProcessor.processKcs(kcs);\n visitProcessor.processCbs(cbs);\n visitProcessor.processMultipleDataTypes();\n const mappingIdentifier = visitProcessor.processMappingIdentifier(\n currentVisit ?? previousVisits?.[0],\n );\n\n const { visitorData, storageVisitorData, visitsData, experimentData } =\n visitProcessor.data;\n\n variationConfiguration.updateStoredVariations(visitorCode, experimentData);\n\n return {\n visitorData,\n storageVisitorData,\n visitsData,\n mappingIdentifier,\n };\n }\n\n static parseRegExp(value: string): RegExp {\n if (value[0] === '/') {\n const [_, expression, flags] = value.split('/');\n\n return new RegExp(expression, flags);\n }\n\n return new RegExp(value);\n }\n\n static parseSecret(secret: string | null): string {\n if (secret === null) {\n return 'null';\n }\n\n const length = secret.length;\n\n if (length <= SECRET_VISIBLE_LENGTH) {\n return HIDDEN_SECRET_CHAR.repeat(length);\n }\n\n const hiddenLength = Math.max(\n length - SECRET_VISIBLE_LENGTH,\n SECRET_VISIBLE_LENGTH,\n );\n\n return (\n secret.substring(0, length - hiddenLength) +\n HIDDEN_SECRET_CHAR.repeat(hiddenLength)\n );\n }\n}\n","import { Milliseconds, SDKConfigurationType } from 'src/types';\nimport { ClientSettingsType } from './types';\nimport { Environment } from 'src/sdkInfoTypes';\nimport { KameleoonLogger } from 'src/logging';\nimport { Validator } from 'src/utilities';\n\nexport interface IClientSettings {\n readonly settings: ClientSettingsType;\n}\n\nexport class ClientSettings implements IClientSettings {\n private updateInterval: number;\n private environment: string;\n private networkDomain: string | null;\n private requestTimeout: number;\n private siteCode: string;\n private cleanupInterval: number | null;\n private trackRetryDelay: number;\n private trackingInterval: number;\n\n constructor(siteCode: string, configuration?: Partial<SDKConfigurationType>) {\n KameleoonLogger.debug`CALL: new ClientSettings(siteCode: ${siteCode}, configuration: ${configuration})`;\n this.siteCode = siteCode;\n\n this.environment = this.getEnvironment(configuration);\n this.networkDomain = this.getNetworkDomain(configuration);\n this.updateInterval = this.getUpdateInterval(configuration);\n this.cleanupInterval = this.getCleanupInterval(configuration);\n this.requestTimeout = this.getRequestTimeout(configuration);\n this.trackingInterval = this.getTrackingInterval(configuration);\n\n this.trackRetryDelay = 5 * Milliseconds.Second;\n KameleoonLogger.debug`RETURN: new ClientSettings(siteCode: ${siteCode}, configuration: ${configuration})`;\n }\n\n private getTrackingInterval(\n configuration?: Partial<SDKConfigurationType>,\n ): number {\n if (typeof configuration?.trackingInterval === 'number') {\n if (configuration.trackingInterval < 100) {\n KameleoonLogger.warning(\n 'Tracking interval must not be shorter than 100 ms. Minimum possible interval was applied.',\n );\n return 100;\n }\n\n if (configuration.trackingInterval > 1_000) {\n KameleoonLogger.warning(\n 'Tracking interval must not be longer than 1000 ms. Maximum possible interval was applied.',\n );\n return 1_000;\n }\n\n return configuration.trackingInterval;\n }\n\n return 1_000;\n }\n\n private getEnvironment(\n configuration?: Partial<SDKConfigurationType>,\n ): string {\n if (configuration?.environment) {\n return configuration.environment;\n }\n\n return Environment.Production;\n }\n\n private getCleanupInterval(\n configuration?: Partial<SDKConfigurationType>,\n ): number | null {\n if (typeof configuration?.targetingDataCleanupInterval === 'number') {\n if (configuration.targetingDataCleanupInterval < 1) {\n KameleoonLogger.warning(\n 'Targeting data cleanup interval must not be shorter than 1 minute. Minimum possible interval was applied.',\n );\n return 1 * Milliseconds.Minute;\n }\n\n return configuration.targetingDataCleanupInterval * Milliseconds.Minute;\n }\n\n return null;\n }\n\n private getUpdateInterval(\n configuration?: Partial<SDKConfigurationType>,\n ): number {\n if (typeof configuration?.updateInterval === 'number') {\n if (configuration.updateInterval < 1) {\n KameleoonLogger.warning(\n 'Update interval must not be shorter than 1 minute. Minimum possible interval was applied.',\n );\n return 1 * Milliseconds.Minute;\n }\n\n return configuration.updateInterval * Milliseconds.Minute;\n }\n\n return 60 * Milliseconds.Minute;\n }\n\n private getNetworkDomain(\n configuration?: Partial<SDKConfigurationType>,\n ): string | null {\n const result = Validator.validateNetworkDomain(configuration?.networkDomain);\n if (!result.ok) {\n return null;\n }\n\n return result.data;\n }\n\n private getRequestTimeout(\n configuration?: Partial<SDKConfigurationType>,\n ): number {\n if (typeof configuration?.requestTimeout === 'number') {\n return configuration.requestTimeout;\n }\n\n return 10 * Milliseconds.Second;\n }\n\n get settings(): ClientSettingsType {\n return {\n trackingInterval: this.trackingInterval,\n trackRetryDelay: this.trackRetryDelay,\n cleanupInterval: this.cleanupInterval,\n updateInterval: this.updateInterval,\n requestTimeout: this.requestTimeout,\n networkDomain: this.networkDomain,\n environment: this.environment,\n siteCode: this.siteCode,\n };\n }\n}\n","import {\n CookieDataType,\n CookieType,\n IKameleoonData,\n KameleoonData,\n} from './types';\nimport { TrackingStatus } from 'src/types';\nimport { KameleoonLogger } from 'src/logging';\n\n/**\n * @class\n * Cookie - a class for creating an instance for defining user's cookie\n * */\nexport class Cookie implements IKameleoonData {\n public status: TrackingStatus;\n\n private cookie: CookieType[];\n\n /**\n * @param {CookieType[]} cookie - a list of cookies\n * */\n constructor(cookie: CookieType[]) {\n this.cookie = cookie;\n this.status = TrackingStatus.Sent;\n }\n\n /**\n * @method fromString - a static method for creating an instance of `Cookie` from a string\n * @param {string} cookieString - a string containing a list of cookies\n * @returns {Cookie} an instance of `Cookie`\n * */\n static fromString(cookieString: string): Cookie {\n if (!cookieString) {\n return new Cookie([]);\n }\n\n const pairs = cookieString.split(';');\n\n const cookie = pairs\n .map((item) => {\n const [key, value] = item.trim().split('=');\n\n if (!key) {\n KameleoonLogger.warning`Cookie string has an empty key: ${cookieString}`;\n return null;\n }\n\n return { key, value };\n })\n .filter((item) => item !== null);\n\n return new Cookie(cookie as CookieType[]);\n }\n\n get url(): string {\n return '';\n }\n\n get data(): CookieDataType {\n return {\n cookie: this.cookie,\n type: KameleoonData.Cookie,\n status: this.status,\n };\n }\n}\n","import { UserAgentDataType, IKameleoonData, KameleoonData } from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * UserAgent - a class for creating an instance for user agent\n * */\nexport class UserAgent implements IKameleoonData {\n public status: TrackingStatus;\n\n private value: string;\n\n constructor(value: string) {\n this.value = value;\n this.status = TrackingStatus.Sent;\n }\n\n get url(): string {\n return '';\n }\n\n get data(): UserAgentDataType {\n return {\n value: this.value,\n type: KameleoonData.UserAgent,\n status: this.status,\n };\n }\n}\n","import { TrackingStatus } from 'src/types';\nimport { IKameleoonData, IdentifierDataType, KameleoonData } from './types';\n\nexport class UniqueIdentifier implements IKameleoonData {\n public status: TrackingStatus;\n\n private _value: boolean;\n\n /**\n * @param {boolean} value - a boolean value that indicates if the visitor has a unique identifier\n * */\n constructor(value: boolean) {\n this._value = value;\n this.status = TrackingStatus.Sent;\n }\n\n get url(): string {\n return '';\n }\n\n get data(): IdentifierDataType {\n return {\n value: this._value,\n type: KameleoonData.UniqueIdentifier,\n status: TrackingStatus.Sent,\n };\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a UniqueIdentifier instance from raw data\n * @param {IdentifierDataType} data - a raw data\n * @return {UniqueIdentifier} a UniqueIdentifier instance\n * */\n public static _fromRaw(data: IdentifierDataType): UniqueIdentifier {\n return new UniqueIdentifier(data.value);\n }\n}\n","import { TrackingStatus } from 'src/types';\nimport {\n IKameleoonData,\n KameleoonData,\n ApplicationVersionDataType,\n} from './types';\n\n/**\n * @class\n * ApplicationVersion - a class for creating an instance for app version\n * */\nexport class ApplicationVersion implements IKameleoonData {\n public status: TrackingStatus;\n\n private version: string;\n\n /**\n * @param {string} version - version of mobile application\n * */\n constructor(version: string) {\n this.version = version;\n this.status = TrackingStatus.Sent;\n }\n\n get url(): string {\n return '';\n }\n\n get data(): ApplicationVersionDataType {\n return {\n version: this.version,\n type: KameleoonData.ApplicationVersion,\n status: this.status,\n };\n }\n}\n","import {\n DereferencedTargetingDataType,\n TargetingDataType,\n VisitorReference,\n} from 'src/targeting';\nimport { ListUtilities } from 'src/utilities/listUtilities';\nimport {\n DereferenceTargetingDataResultType,\n ExistingDataType,\n ExistingNestedDataType,\n ExpirationTimeType,\n FieldParametersType,\n KameleoonData,\n KameleoonVisitorDataType,\n MutAddUnsentDataType,\n MutUpdateDataParametersType,\n NestedFieldParametersType,\n ReferenceParametersType,\n UpdateCommonDataParametersType,\n UpdateConversionParametersType,\n UpdateCustomDataParametersType,\n UpdatePageViewParametersType,\n UpdatePersonalizationParametersType,\n UpdateTargetSegmentParametersType,\n UpdateVisitsDataParametersType,\n VisitDataType,\n} from './types';\nimport { CustomData } from './customData';\nimport { VisitsData } from './visitsData';\nimport { Conversion } from './conversion';\nimport { PageView } from './pageView';\nimport { DataInfoType } from 'src/storage';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport { Personalization } from 'src/kameleoonData/personalization';\nimport { TargetedSegment } from 'src/kameleoonData/targetedSegment';\n\ninterface IDataProcessor {\n mutUpdateData({\n visitorCode,\n mutData,\n dataItem,\n extendTtl,\n }: MutUpdateDataParametersType): number | undefined;\n mutCleanupData(\n mutData: TargetingDataType,\n infoData: DataInfoType,\n ): number | null;\n createReference({\n mutData,\n visitorCode,\n linkedVisitor,\n infoData,\n }: ReferenceParametersType): void;\n dereferenceData(\n data: TargetingDataType,\n visitorCode: string,\n ): DereferenceTargetingDataResultType;\n mutAddUnsentData({\n mutData,\n visitorCode,\n dataType,\n }: MutAddUnsentDataType): void;\n}\n\nexport class DataProcessor implements IDataProcessor {\n private cleanupInterval: number | null;\n private packageInfo: ExternalPackageInfoType;\n\n constructor(\n cleanupInterval: number | null = null,\n packageInfo: ExternalPackageInfoType,\n ) {\n this.cleanupInterval = cleanupInterval;\n this.packageInfo = packageInfo;\n }\n\n public mutUpdateData({\n infoData,\n visitorCode,\n mutData,\n dataItem,\n extendTtl,\n }: MutUpdateDataParametersType): number | undefined {\n let { visitorReference, data, isReference } = this.dereferenceData(\n mutData,\n visitorCode,\n );\n\n if (\n this.packageInfo.isServer &&\n isReference &&\n !mutData[visitorReference]\n ) {\n if (infoData.mappingIdentifiers) {\n delete infoData.mappingIdentifiers[visitorCode];\n }\n delete mutData[visitorCode];\n visitorReference = visitorCode;\n }\n\n let expirationTime;\n if (extendTtl) {\n expirationTime = this.cleanupInterval\n ? Date.now() + this.cleanupInterval\n : 0;\n }\n\n switch (dataItem.data.type) {\n case KameleoonData.CustomData: {\n this.updateCustomData({\n expirationTime,\n customData: dataItem as CustomData,\n visitorCode: visitorReference,\n mutData: data,\n });\n\n break;\n }\n case KameleoonData.PageView: {\n this.updatePageView({\n expirationTime,\n pageView: dataItem as PageView,\n visitorCode: visitorReference,\n mutData: data,\n });\n\n break;\n }\n case KameleoonData.Conversion: {\n this.updateConversion({\n expirationTime,\n conversion: dataItem as Conversion,\n visitorCode: visitorReference,\n mutData: data,\n });\n\n break;\n }\n case KameleoonData.VisitsData: {\n this.updateVisitsData({\n expirationTime,\n visitsData: dataItem as VisitsData,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n case KameleoonData.Personalization: {\n this.updatePersonalization({\n expirationTime,\n personalization: dataItem as Personalization,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n case KameleoonData.TargetedSegment: {\n this.updateTargetedSegment({\n expirationTime,\n targetedSegment: dataItem as TargetedSegment,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n default: {\n this.updateCommonData({\n expirationTime,\n commonData: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n }\n }\n\n return expirationTime;\n }\n\n public mutCleanupData(\n mutData: TargetingDataType,\n infoData: DataInfoType,\n ): number | null {\n if (!this.cleanupInterval) {\n return null;\n }\n\n let nextCleanupTime = 0;\n\n for (const [visitorCode, data] of Object.entries(mutData)) {\n if (typeof data === 'string') {\n this.removeReference({\n mutData,\n visitorCode,\n linkedVisitor: data,\n infoData,\n });\n\n continue;\n }\n\n let closestCleanupTime = 0;\n\n for (const key of Object.keys(data)) {\n const dataKey = key as KameleoonData;\n\n let time;\n\n switch (dataKey) {\n case KameleoonData.CustomData:\n case KameleoonData.PageView:\n case KameleoonData.Conversion:\n case KameleoonData.Personalization: {\n time = this.deleteNestedExpiredField(data, dataKey);\n break;\n }\n default: {\n time = this.deleteExpiredField(data, dataKey);\n }\n }\n\n if (!closestCleanupTime || (time && time < closestCleanupTime)) {\n closestCleanupTime = time;\n }\n }\n\n if (!Object.keys(mutData[visitorCode]).length) {\n delete mutData[visitorCode];\n if (this.packageInfo.isServer) {\n infoData.mappingIdentifiers ??= {};\n delete infoData.mappingIdentifiers[visitorCode];\n }\n } else if (\n !nextCleanupTime ||\n (closestCleanupTime && closestCleanupTime < nextCleanupTime)\n ) {\n nextCleanupTime = closestCleanupTime;\n }\n }\n\n return nextCleanupTime;\n }\n\n public mutAddUnsentData({\n mutData,\n visitorCode,\n dataType,\n }: MutAddUnsentDataType): void {\n const unsentData = mutData.unsentData[visitorCode];\n\n if (!unsentData || !unsentData.length) {\n mutData.unsentData[visitorCode] = [dataType];\n } else {\n const set = new Set([...unsentData]);\n set.add(dataType);\n\n mutData.unsentData[visitorCode] = Array.from(set);\n }\n }\n\n public createReference({\n mutData,\n visitorCode,\n linkedVisitor,\n }: ReferenceParametersType): void {\n // --- Note ---\n // Provided(linked) visitor is now pointing to the visitor code\n mutData[linkedVisitor] = visitorCode;\n }\n\n public removeReference({\n mutData,\n visitorCode,\n linkedVisitor,\n infoData,\n }: ReferenceParametersType): void {\n if (this.packageInfo.isServer) {\n if (!mutData[linkedVisitor]) {\n delete mutData[visitorCode];\n if (infoData.mappingIdentifiers) {\n delete infoData.mappingIdentifiers[visitorCode];\n }\n }\n }\n }\n\n private updatePageView({\n visitorCode,\n mutData,\n pageView,\n expirationTime,\n }: UpdatePageViewParametersType): void {\n const { data } = pageView;\n\n const isExist =\n mutData[visitorCode] &&\n KameleoonData.PageView in mutData[visitorCode] &&\n data.urlAddress in mutData[visitorCode][KameleoonData.PageView]!;\n\n const parameters: NestedFieldParametersType = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.PageView,\n nestedKey: data.urlAddress,\n value: data,\n };\n\n if (isExist) {\n const existingData =\n mutData[visitorCode][KameleoonData.PageView]![data.urlAddress];\n const existingTimestamps = existingData.timestamps;\n\n // --- Note ---\n // Merging existing timestamps with added\n for (const existingTimestamp of existingTimestamps) {\n const { time: existingTime } = existingTimestamp;\n\n if (data.timestamps.some(({ time }) => time === existingTime)) {\n continue;\n }\n\n const index = data.timestamps.findIndex(\n ({ time }) => time >= existingTime,\n );\n\n if (index === -1) {\n data.timestamps.push(existingTimestamp);\n } else {\n data.timestamps.splice(index, 0, existingTimestamp);\n }\n }\n\n this.updateNestedField(parameters);\n } else {\n this.createNestedField(parameters);\n }\n }\n\n private updateCustomData({\n visitorCode,\n customData,\n mutData,\n expirationTime,\n }: UpdateCustomDataParametersType): void {\n const { data } = customData;\n const isExist =\n mutData[visitorCode] && KameleoonData.CustomData in mutData[visitorCode];\n\n const parameters: NestedFieldParametersType = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.CustomData,\n nestedKey: data.index.toString(),\n value: data,\n };\n\n if (isExist) {\n this.updateNestedField(parameters);\n } else {\n this.createNestedField(parameters);\n }\n }\n\n private updateConversion({\n conversion,\n mutData,\n visitorCode,\n expirationTime,\n }: UpdateConversionParametersType): void {\n const { data } = conversion;\n const isExist =\n mutData[visitorCode] && KameleoonData.Conversion in mutData[visitorCode];\n\n const parameters: NestedFieldParametersType = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.Conversion,\n nestedKey: data.id.toString(),\n value: data,\n };\n\n if (isExist) {\n this.updateNestedField(parameters);\n } else {\n this.createNestedField(parameters);\n }\n }\n\n private updateVisitsData({\n visitorCode,\n mutData,\n visitsData,\n expirationTime,\n }: UpdateVisitsDataParametersType): void {\n const { data } = visitsData;\n const isExist =\n mutData[visitorCode] && KameleoonData.VisitsData in mutData[visitorCode];\n\n const parameters: FieldParametersType = {\n expirationTime,\n data: mutData,\n key: KameleoonData.VisitsData,\n value: data,\n visitorCode,\n };\n\n if (isExist) {\n const existingVisits = mutData[visitorCode][KameleoonData.VisitsData]!;\n\n // --- Note ---\n // We are preserving the order of visits\n existingVisits.visits.forEach((visit) => {\n ListUtilities.insertVisitInOrderedListMutably({\n list: data.visits as VisitDataType[],\n visit: visit as VisitDataType,\n });\n });\n\n const visitNumber = Math.max(\n data.visitNumber ?? data.visits.length - 1,\n data.visits.length - 1,\n existingVisits.visitNumber ?? 0,\n );\n\n this.updateField({\n ...parameters,\n value: {\n ...data,\n visits: data.visits,\n visitNumber: visitNumber,\n },\n });\n } else {\n this.createField(parameters);\n }\n }\n\n private updatePersonalization({\n visitorCode,\n mutData,\n personalization,\n expirationTime,\n }: UpdatePersonalizationParametersType): void {\n const { data } = personalization;\n const isExist =\n mutData[visitorCode] &&\n KameleoonData.Personalization in mutData[visitorCode];\n\n const parameters: NestedFieldParametersType = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.Personalization,\n nestedKey: data.id.toString(),\n value: data,\n };\n\n if (isExist) {\n this.updateNestedField(parameters);\n } else {\n this.createNestedField(parameters);\n }\n }\n\n private updateTargetedSegment({\n visitorCode,\n mutData,\n targetedSegment,\n expirationTime,\n }: UpdateTargetSegmentParametersType): void {\n const { data } = targetedSegment;\n const isExist =\n mutData[visitorCode] &&\n KameleoonData.TargetedSegment in mutData[visitorCode];\n\n const parameters: NestedFieldParametersType = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.TargetedSegment,\n nestedKey: data.id.toString(),\n value: data,\n };\n\n if (isExist) {\n this.updateNestedField(parameters);\n } else {\n this.createNestedField(parameters);\n }\n }\n\n private updateCommonData({\n visitorCode,\n mutData,\n commonData,\n expirationTime,\n }: UpdateCommonDataParametersType): void {\n const { data } = commonData;\n const isExist = mutData[visitorCode] && data.type in mutData[visitorCode];\n\n const parameters: FieldParametersType = {\n expirationTime,\n data: mutData,\n key: data.type,\n visitorCode,\n value: data as FieldParametersType['value'],\n };\n\n if (isExist) {\n this.updateField(parameters);\n } else {\n this.createField(parameters);\n }\n }\n\n public dereferenceData(\n data: TargetingDataType,\n visitorCode: string,\n ): DereferenceTargetingDataResultType {\n // --- Note ---\n // Visitor reference can not point to another visitor reference\n if (typeof data[visitorCode] === 'string') {\n return {\n visitorReference: data[visitorCode] as VisitorReference,\n data: data as DereferencedTargetingDataType,\n isReference: true,\n };\n }\n\n return {\n visitorReference: visitorCode,\n data: data as DereferencedTargetingDataType,\n isReference: false,\n };\n }\n\n private deleteExpiredField(\n data: Omit<\n KameleoonVisitorDataType,\n | KameleoonData.Conversion\n | KameleoonData.CustomData\n | KameleoonData.PageView\n | KameleoonData.Personalization\n | KameleoonData.TargetedSegment\n >,\n key: KameleoonData,\n ): number {\n if (!data) {\n return 0;\n }\n\n const dataKey = key as keyof typeof data;\n const isExpired = data[dataKey]!.expirationTime < Date.now();\n\n if (!isExpired) {\n return data[dataKey]!.expirationTime;\n }\n\n delete data[dataKey];\n\n return 0;\n }\n\n private deleteNestedExpiredField(\n data: KameleoonVisitorDataType,\n key: KameleoonData,\n ): number {\n if (!data[key]) {\n return 0;\n }\n\n const existingData = data[key] as ExistingNestedDataType;\n\n let closestCleanupTime;\n\n for (const [nestedKey, value] of Object.entries(existingData)) {\n if (!value) {\n continue;\n }\n\n const isExpired = value.expirationTime < Date.now();\n\n if (isExpired) {\n delete existingData[nestedKey];\n } else if (\n !closestCleanupTime ||\n value.expirationTime < closestCleanupTime\n ) {\n closestCleanupTime = value.expirationTime;\n }\n }\n\n if (!Object.keys(existingData).length) {\n delete data[key];\n }\n\n return closestCleanupTime;\n }\n\n private updateField({\n key,\n value,\n data,\n visitorCode,\n expirationTime,\n }: FieldParametersType): void {\n const existing = data[visitorCode][key] as ExistingDataType<typeof key>;\n (data[visitorCode][key] as ExistingDataType<typeof key>) = {\n ...value,\n expirationTime:\n expirationTime ??\n (existing.expirationTime && (existing.expirationTime as number)) ??\n Date.now(),\n };\n }\n\n private createField({\n key,\n value,\n data,\n visitorCode,\n expirationTime,\n }: FieldParametersType): void {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: { ...value, expirationTime },\n };\n }\n\n private updateNestedField({\n key,\n nestedKey,\n value,\n data,\n visitorCode,\n expirationTime,\n }: NestedFieldParametersType): void {\n const existing = (data[visitorCode][key] as ExistingNestedDataType)[\n nestedKey\n ];\n (data[visitorCode][key] as ExistingNestedDataType)[nestedKey] = {\n ...value,\n expirationTime: expirationTime ?? existing?.expirationTime ?? Date.now(),\n };\n }\n\n private createNestedField({\n key,\n nestedKey,\n value,\n data,\n visitorCode,\n expirationTime,\n }: NestedFieldParametersType): void {\n if (!data[visitorCode]?.[key]) {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: {\n [nestedKey]: { ...value, expirationTime },\n },\n };\n } else {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: {\n ...data[visitorCode][key],\n [nestedKey]: { ...value, expirationTime },\n },\n };\n }\n }\n}\n","import { UrlEventType, UrlParameter } from 'src/requester';\nimport {\n BrowserType,\n BrowserIndexMap,\n StaticDataType,\n DeviceType,\n OperatingSystemType,\n OperatingSystemIndexMap,\n} from './types';\n\n/**\n * @class\n * StaticData - a class for creating static data for Kameleoon.\n * */\nexport class StaticData {\n private browserType?: BrowserType;\n private browserVersion?: number;\n private visitNumber?: number;\n private timeSincePreviousVisit?: number;\n private deviceType?: DeviceType;\n private os?: OperatingSystemType;\n\n constructor({\n browserType,\n visitNumber,\n timeSincePreviousVisit,\n os,\n deviceType,\n browserVersion,\n }: StaticDataType) {\n this.browserType = browserType;\n this.visitNumber = visitNumber;\n this.timeSincePreviousVisit = timeSincePreviousVisit;\n this.os = os;\n this.deviceType = deviceType;\n this.browserVersion = browserVersion;\n }\n\n get url(): string {\n const browserVersion = this.browserVersion\n ? UrlParameter.BrowserVersion + this.browserVersion\n : '';\n const browserType = this.browserType\n ? UrlParameter.Browser + this.browserType\n : '';\n const browserIndex = this.browserType\n ? UrlParameter.BrowserIndex + BrowserIndexMap[this.browserType]\n : '';\n const os = this.os ? UrlParameter.Os + this.os : '';\n const osIndex = this.os\n ? UrlParameter.OsIndex + OperatingSystemIndexMap[this.os]\n : '';\n const deviceType = this.deviceType\n ? UrlParameter.DeviceType + this.deviceType\n : '';\n const visitNumber =\n this.visitNumber !== undefined\n ? UrlParameter.VisitNumber + this.visitNumber\n : '';\n const timeSincePreviousVisit =\n this.timeSincePreviousVisit !== undefined\n ? UrlParameter.TimeSincePreviousVisit + this.timeSincePreviousVisit\n : '';\n\n return (\n UrlEventType.StaticData +\n browserType +\n browserIndex +\n browserVersion +\n visitNumber +\n timeSincePreviousVisit +\n os +\n osIndex +\n deviceType\n );\n }\n}\n","import {\n ConditionDataType,\n ConditionType,\n} from 'src/targeting/conditions/types';\nimport { Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\n\nexport interface IConditionFactory {\n createCondition(\n data: ConditionDataType,\n ): Result<ConditionType, KameleoonError>;\n}\n\nexport class ConditionFactoryInstance {\n static conditionFactoryInstance: IConditionFactory;\n\n static setConditionFactoryInstance(value: IConditionFactory): void {\n this.conditionFactoryInstance = value;\n }\n\n static createCondition(\n data: ConditionDataType,\n ): Result<ConditionType, KameleoonError> {\n return this.conditionFactoryInstance.createCondition(data);\n }\n}\n","import { KameleoonError } from 'src/kameleoonError';\nimport { ConditionDataType } from './conditions/types';\nimport { NodeValueType, Operator } from './types';\nimport { ConditionFactoryInstance } from 'src/targeting/conditions/conditionFactoryInstance';\n\nexport interface INode {\n readonly value?: NodeValueType;\n readonly left?: INode;\n readonly right?: INode;\n readonly error?: KameleoonError;\n}\n\nexport class Node implements INode {\n private nodeValue?: NodeValueType;\n private nodeError?: KameleoonError;\n private leftChild?: INode;\n private rightChild?: INode;\n private inverseResult: boolean = false;\n\n constructor(\n value: ConditionDataType | Operator,\n left?: INode,\n right?: INode,\n ) {\n if (this.isOperator(value)) {\n this.nodeValue = value;\n } else {\n const result = ConditionFactoryInstance.createCondition(value);\n this.inverseResult = !(value.isInclude ?? true);\n\n if (result.ok) {\n this.nodeValue = result.data;\n } else {\n this.nodeError = result.error;\n }\n }\n\n this.leftChild = left;\n this.rightChild = right;\n }\n\n get value(): NodeValueType | undefined {\n return this.nodeValue;\n }\n\n get error(): KameleoonError | undefined {\n return this.nodeError;\n }\n\n get left(): INode | undefined {\n return this.leftChild;\n }\n\n get right(): INode | undefined {\n return this.rightChild;\n }\n\n get inverse(): boolean {\n return this.inverseResult;\n }\n\n private isOperator(value: ConditionDataType | Operator): value is Operator {\n return value === Operator.And || value === Operator.Or;\n }\n}\n","import { Result, Ok, Err } from 'ts-res';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { INode, Node } from './node';\nimport {\n EvaluationDataType,\n GroupedSegmentsType,\n LeafNodeType,\n NestedConditionGroupType,\n NonLeafNodeType,\n Operator,\n SegmentType,\n TargetingType,\n} from './types';\nimport { KameleoonLogger } from 'src/logging';\n\ninterface ITree {\n evaluate: (data: EvaluationDataType) => Result<boolean, KameleoonError>;\n hasTargetingType: (targetingType: TargetingType) => boolean;\n}\n\nexport class Tree implements ITree {\n private tree: Node;\n private error: KameleoonError | null = null;\n private targetingTypes: Set<TargetingType> = new Set();\n\n constructor(segment: SegmentType) {\n KameleoonLogger.debug`CALL: new Tree(segment: ${segment})`;\n const { nestedConditions, topLevelOperators } =\n this.flattenSegment(segment);\n\n // --- Note ---\n // - Targeting tree is built bottom-up, it's the only way to both get the consistent logic\n // (grouping nested conditions) and have human readable tree representation.\n // - Here is an example of how tree is built (we use strict complete binary tree)\n // Let's say we have such a condition `value < 10 || value > 20 && value < 30`\n // Following is pseudo code for building tree:\n //\n // `const operators = [Operator.Or, Operator.And]`\n // `const conditions = [\n // {type: Condition.Less, value: 10},\n // {type: Condition.Greater, value: 20},\n // {type: Condition.Less, value: 30},\n // ]`\n //\n // After the first iteration we have node like this:\n // AND\n // / \\\n // <30 >20\n //\n // After the second iteration tree looks as follows:\n // OR\n // / \\\n // AND <10\n // / \\\n // <30 >20\n //\n // As you can see Leaf Nodes contain conditions and Non-Leaf Nodes contain logical operators\n const nestedNodes = nestedConditions.map(({ conditions, operators }) => {\n const nodes = conditions.map((condition) => {\n // --- Note ---\n // We keep condition types to optimize\n // some external operations depending on what conditions are present\n // in a tree\n this.targetingTypes.add(condition.targetingType);\n\n return new Node(condition);\n });\n\n return this.buildTree(nodes, operators);\n });\n\n this.tree = this.buildTree(nestedNodes, topLevelOperators);\n KameleoonLogger.debug`RETURN: new Tree(segment: ${segment})`;\n }\n\n public evaluate(data: EvaluationDataType): Result<boolean, KameleoonError> {\n const result = this.evaluateNode(this.tree, data);\n\n if (this.error) {\n return Err(this.error);\n }\n\n return Ok(result);\n }\n\n public hasTargetingType(targetingType: TargetingType): boolean {\n return this.targetingTypes.has(targetingType);\n }\n\n private evaluateNode(node: Node, data: EvaluationDataType): boolean {\n if (this.isLeafNode(node)) {\n if (node.error) {\n // --- Note ---\n // Non-existing condition should not break targeting tree\n // instead it should be treated as `true` condition\n if (node.error.type === KameleoonException.TargetingCondition) {\n return true;\n }\n\n return false;\n }\n\n const result = node.value.evaluate(data);\n\n if (!result.ok) {\n this.error = result.error;\n\n return false;\n }\n\n return node.inverse ? !result.data : result.data;\n }\n\n if (this.isNonLeafNode(node)) {\n switch (node.value) {\n case Operator.And: {\n return (\n this.evaluateNode(node.left, data) &&\n this.evaluateNode(node.right, data)\n );\n }\n case Operator.Or: {\n return (\n this.evaluateNode(node.left, data) ||\n this.evaluateNode(node.right, data)\n );\n }\n default:\n break;\n }\n }\n\n return false;\n }\n\n private isLeafNode(node: INode): node is LeafNodeType {\n return !Boolean(node.left && node.right);\n }\n\n private isNonLeafNode(node: INode): node is NonLeafNodeType {\n return Boolean(\n node.left &&\n node.right &&\n (node.value === Operator.Or || node.value === Operator.And),\n );\n }\n\n // --- Note ---\n // This method mutates `nodes` array\n // It's done for the sake of performance\n private buildTree(nodes: Node[], operators: Operator[]): Node {\n if (nodes.length === 1) {\n return nodes[0];\n }\n\n for (const operator of operators) {\n const left = nodes.shift();\n const right = nodes.shift();\n\n const newNode = new Node(operator, left, right);\n nodes.unshift(newNode);\n }\n\n return nodes[0];\n }\n\n private flattenSegment(segment: SegmentType): GroupedSegmentsType {\n const { firstLevel: conditions, firstLevelOrOperators: operators } =\n segment.conditionsData;\n\n const nestedConditions: NestedConditionGroupType[] = [];\n\n conditions.forEach((condition) => {\n const { conditions: conditionList, orOperators } = condition;\n\n const group = {\n operators: this.convertOperators(orOperators),\n conditions: conditionList,\n };\n\n nestedConditions.push(group);\n });\n\n return {\n topLevelOperators: this.convertOperators(operators),\n nestedConditions,\n };\n }\n\n private convertOperators(operators: boolean[]): Operator[] {\n return operators.map((operator) => (operator ? Operator.Or : Operator.And));\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { DeviceType, KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class Device implements ICondition {\n private device?: DeviceType | null;\n\n constructor({ device }: ConditionDataType) {\n this.device = device;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const deviceData = targetingData?.[KameleoonData.Device];\n\n if (deviceData) {\n const { device } = deviceData;\n\n return Ok(device === this.device);\n }\n\n return Ok(false);\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { KameleoonData, BrowserType, BrowserDataType } from 'src/kameleoonData/types';\nimport {\n exhaustCheck,\n KameleoonError,\n KameleoonException,\n} from 'src/kameleoonError';\nimport { EvaluationDataType, VersionMatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class Browser implements ICondition {\n private browser?: BrowserType | null;\n private version?: string | null;\n private versionMatchType?: VersionMatchType | null;\n private error?: KameleoonError;\n\n constructor({ browser, version, versionMatchType }: ConditionDataType) {\n this.browser = browser;\n this.version = version;\n this.versionMatchType = versionMatchType;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const browserData = targetingData?.[KameleoonData.Browser];\n\n if (browserData) {\n const result = this.checkCondition(browserData);\n\n if (this.error) {\n return Err(this.error);\n }\n\n return Ok(result);\n }\n\n return Ok(false);\n }\n\n private checkCondition(browserData: BrowserDataType): boolean {\n const { browser, version } = browserData;\n\n if (typeof this.browser !== 'string') {\n return false;\n }\n\n if (!this.version) {\n return browser === this.browser;\n }\n\n if (!this.versionMatchType || typeof version !== 'number') {\n return false;\n }\n\n const parsedVersion = parseFloat(this.version);\n\n if (isNaN(parsedVersion)) {\n KameleoonLogger.error`Failed to parse version: ${this.version} in Browser condition`;\n this.error = new KameleoonError(\n KameleoonException.VersionParse,\n this.version,\n );\n }\n\n switch (this.versionMatchType) {\n case VersionMatchType.EQUAL:\n return browser === this.browser && version === parsedVersion;\n case VersionMatchType.GREATER:\n return browser === this.browser && version > parsedVersion;\n case VersionMatchType.LOWER:\n return browser === this.browser && version < parsedVersion;\n default:\n KameleoonLogger.error`Unexpected comparing operation for Browser condition: ${this.versionMatchType}`;\n exhaustCheck(this.versionMatchType);\n }\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class Conversion implements ICondition {\n private conditionValue?: number | null;\n\n constructor({ goalId }: ConditionDataType) {\n this.conditionValue = goalId;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const conversionData = targetingData?.[KameleoonData.Conversion];\n\n if (!this.conditionValue) {\n return Ok(false);\n }\n\n if (conversionData) {\n if (Object.keys(conversionData).length && this.conditionValue === -1) {\n return Ok(true);\n }\n\n const conversions = Object.values(conversionData);\n\n return Ok(\n conversions.some((conversion) => {\n if (!conversion) {\n return false;\n }\n\n return conversion.goalId === this.conditionValue;\n }),\n );\n }\n\n return Ok(false);\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { CustomDataType, KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { EvaluationDataType, ValueMatchType } from 'src/targeting/types';\nimport { Parser } from 'src/utilities';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging/kameleoonLogger';\n\nexport class CustomData implements ICondition {\n private customDataIndex: number;\n private matchType?: ValueMatchType | null;\n private conditionValue?: string | null;\n private error?: KameleoonError;\n private range?: number[] | null;\n\n constructor({\n customDataIndex,\n valueMatchType,\n value,\n range,\n }: ConditionDataType) {\n this.customDataIndex = customDataIndex ? Number(customDataIndex) : -1;\n this.matchType = valueMatchType;\n this.conditionValue = value;\n this.range = range;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const customData =\n targetingData?.[KameleoonData.CustomData]?.[this.customDataIndex];\n\n if (this.matchType === ValueMatchType.UNDEFINED) {\n return Ok(!customData);\n }\n\n if (customData) {\n const { value: customDataValue } = customData;\n const result = this.checkCondition(customDataValue);\n\n if (this.error) {\n return Err(this.error);\n }\n\n return Ok(result);\n }\n\n return Ok(false);\n }\n\n private checkCondition(\n customDataValue: CustomDataType['value'] | string,\n ): boolean {\n if (\n typeof this.conditionValue !== 'string' &&\n this.matchType !== ValueMatchType.TRUE &&\n this.matchType !== ValueMatchType.FALSE &&\n this.matchType !== ValueMatchType.RANGE\n ) {\n KameleoonLogger.error`Unexpected condition value for CustomData condition: ${this.conditionValue}`;\n return false;\n }\n\n // --- Note ---\n // `TRUE`/`FALSE`/`RANGE` do not use condition value\n // so we can safely assume that `this.conditionValue` is a string at this point\n // for other match types\n const conditionValue = this.conditionValue as string;\n\n // --- Note ---\n // `AMONG_VALUES` and `RANGE` are checked separately to avoid recursion overhead\n // for `JSON.parse` inside `this.parseArray`\n if (this.matchType === ValueMatchType.AMONG_VALUES) {\n const result = this.parseArray(conditionValue);\n\n if (!result.ok) {\n this.error = result.error;\n\n return false;\n }\n\n const resultData = new Set(result.data);\n\n return Array.isArray(customDataValue)\n ? customDataValue.some((value) => resultData.has(value))\n : result.data.includes(customDataValue);\n }\n\n if (this.matchType === ValueMatchType.RANGE) {\n const result = this.parseRange(this.range);\n\n if (!result.ok) {\n this.error = result.error;\n\n return false;\n }\n\n const [lowerBound, upperBound] = result.data;\n\n const isInRange = (value: number) =>\n value >= lowerBound && value <= upperBound;\n\n return Array.isArray(customDataValue)\n ? customDataValue.some((value) => isInRange(Number(value)))\n : isInRange(Number(customDataValue));\n }\n\n if (Array.isArray(customDataValue)) {\n return customDataValue.some((value) => this.checkCondition(value));\n }\n\n switch (this.matchType) {\n case ValueMatchType.CONTAINS:\n return customDataValue.includes(conditionValue);\n case ValueMatchType.EXACT:\n return customDataValue === this.conditionValue;\n case ValueMatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(conditionValue).test(customDataValue);\n case ValueMatchType.LOWER:\n return Number(customDataValue) < Number(this.conditionValue);\n case ValueMatchType.EQUAL:\n return Number(customDataValue) === Number(this.conditionValue);\n case ValueMatchType.GREATER:\n return Number(customDataValue) > Number(this.conditionValue);\n case ValueMatchType.TRUE:\n return customDataValue.toLowerCase() === 'true';\n case ValueMatchType.FALSE:\n return customDataValue.toLowerCase() === 'false';\n default:\n KameleoonLogger.error`Unexpected comparing operation for CustomData condition: ${this.matchType}`;\n return false;\n }\n }\n\n private parseArray(value: string): Result<string[], KameleoonError> {\n try {\n const result = JSON.parse(value);\n\n if (Array.isArray(result)) {\n return Ok(result);\n }\n } catch (err) {\n KameleoonLogger.error`Failed to parse array: ${value} in CustomData condition`;\n return Err(\n new KameleoonError(KameleoonException.AmongValuesCheck, err, value),\n );\n }\n\n return Ok([]);\n }\n\n private parseRange(\n array?: number[] | null,\n ): Result<[number, number], KameleoonError> {\n if (!array || array.length !== 2) {\n KameleoonLogger.error`Failed to parse range: ${array} in CustomData condition`;\n return Err(new KameleoonError(KameleoonException.RangeCheck, array));\n }\n\n return Ok(array as [number, number]);\n }\n}\n","import { PageViewDataType } from 'src/kameleoonData';\nimport {\n KameleoonData,\n KameleoonVisitorDataType,\n} from 'src/kameleoonData/types';\n\nexport class PageUtils {\n public static getLatest(\n pageViewData: NonNullable<KameleoonVisitorDataType[KameleoonData.PageView]>,\n ): PageViewDataType {\n return Object.values(pageViewData).reduce((latest, current) =>\n latest.timestamps[latest.timestamps.length - 1].time >\n current.timestamps[current.timestamps.length - 1].time\n ? latest\n : current,\n );\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Parser } from 'src/utilities';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\nimport { PageUtils } from './utilities';\n\nexport class PageTitle implements ICondition {\n private matchType?: MatchType | null;\n private conditionValue?: string | null;\n\n constructor({ matchType, title }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = title;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const pageViewData = targetingData?.[KameleoonData.PageView];\n\n if (!pageViewData) {\n return Ok(false);\n }\n\n const latestPageView = PageUtils.getLatest(pageViewData);\n\n return Ok(this.checkCondition(latestPageView.title));\n }\n\n private checkCondition(title: string): boolean {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return title.includes(this.conditionValue);\n case MatchType.EXACT:\n return title === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(this.conditionValue).test(title);\n default:\n KameleoonLogger.error`Unexpected comparing operation for PageTitle condition: ${this.matchType}`;\n return false;\n }\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Parser } from 'src/utilities';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\nimport { PageUtils } from './utilities';\n\nexport class PageUrl implements ICondition {\n private matchType?: MatchType | null;\n private conditionValue?: string | null;\n\n constructor({ matchType, url }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = url;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const pageViewData = targetingData?.[KameleoonData.PageView];\n\n if (!pageViewData) {\n return Ok(false);\n }\n\n const latestPageView = PageUtils.getLatest(pageViewData);\n\n return Ok(this.checkCondition(latestPageView.urlAddress));\n }\n\n private checkCondition(url: string): boolean {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return url.includes(this.conditionValue);\n case MatchType.EXACT:\n return url === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(this.conditionValue).test(url);\n default:\n KameleoonLogger.error`Unexpected comparing operation for PageUrl condition: ${this.matchType}`;\n return false;\n }\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { SdkLanguageType } from 'src/constants';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Utilities } from 'src/utilities';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport { EvaluationDataType, VersionMatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class SdkLanguage implements ICondition {\n private sdkLanguage?: SdkLanguageType | null;\n private conditionValue?: string | null;\n private versionMatchType?: VersionMatchType | null;\n\n constructor({ sdkLanguage, version, versionMatchType }: ConditionDataType) {\n this.sdkLanguage = sdkLanguage;\n this.conditionValue = version;\n this.versionMatchType = versionMatchType;\n }\n\n public evaluate({\n sdkInfo,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n return this.checkCondition(sdkInfo);\n }\n\n private checkCondition(\n sdkInfo: ExternalPackageInfoType,\n ): Result<boolean, KameleoonError> {\n const { type: sdkType, version } = sdkInfo;\n\n if (!this.sdkLanguage) {\n return Ok(false);\n }\n\n if (typeof this.conditionValue !== 'string') {\n return Ok(sdkType === this.sdkLanguage);\n }\n\n if (!this.versionMatchType) {\n return Ok(false);\n }\n\n if (sdkType !== this.sdkLanguage) {\n return Ok(false);\n }\n\n const result = Utilities.compareSemVer({\n version,\n compareVersion: this.conditionValue,\n operator: this.versionMatchType,\n });\n\n if (!result.ok) {\n return Err(result.error);\n }\n\n return Ok(result.data);\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Parser } from 'src/utilities';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class VisitorCode implements ICondition {\n private matchType?: MatchType | null;\n private conditionValue?: string | null;\n\n constructor({ visitorCode, matchType }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = visitorCode;\n }\n\n public evaluate({\n visitorCode,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n return Ok(this.checkCondition(visitorCode));\n }\n\n private checkCondition(visitorCode: string): boolean {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return visitorCode.includes(this.conditionValue);\n case MatchType.EXACT:\n return visitorCode === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(this.conditionValue).test(visitorCode);\n default:\n KameleoonLogger.error`Unexpected comparing operation for VisitorCode condition: ${this.matchType}`;\n return false;\n }\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { Cookie as CookieData } from 'src/kameleoonData/cookie';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { exhaustCheck, KameleoonError } from 'src/kameleoonError';\nimport {\n EvaluationDataType,\n NameMatchType,\n ValueMatchType,\n} from 'src/targeting/types';\nimport { CookieType, OptionalCookieType } from 'src/kameleoonData/types';\nimport { Parser } from 'src/utilities';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class Cookie implements ICondition {\n private cookie: Partial<CookieType>;\n private keyMatchType?: NameMatchType | null;\n private valueMatchType?: ValueMatchType | null;\n\n constructor({\n name,\n value,\n nameMatchType,\n valueMatchType,\n }: ConditionDataType) {\n this.cookie = {\n key: name ?? undefined,\n value: value ?? undefined,\n };\n this.keyMatchType = nameMatchType;\n this.valueMatchType = valueMatchType;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const isEmptyCookie = !this.cookie.key && !this.cookie.value;\n const isValidMatchType =\n Boolean(this.valueMatchType) && Boolean(this.keyMatchType);\n\n if (isEmptyCookie || !isValidMatchType) {\n return Ok(false);\n }\n\n const extractedCookie = this.extractCookie();\n const cookieData = targetingData?.[KameleoonData.Cookie]?.cookie || [];\n\n return Ok(\n extractedCookie.some((pair) => this.checkCondition(pair)) ||\n cookieData.some((pair) => this.checkCondition(pair)),\n );\n }\n\n private extractCookie(): CookieType[] {\n if (typeof document !== 'undefined' && document.cookie) {\n return CookieData.fromString(document.cookie).data.cookie;\n }\n\n return [];\n }\n\n private checkCondition(dataCookie: CookieType): boolean {\n const cookieMatchType = this.keyMatchType!;\n const { key, value } = dataCookie;\n\n if (cookieMatchType === NameMatchType.OPTIONAL) {\n const conditionCookie = this.cookie;\n\n return this.isOptionalCookie(conditionCookie)\n ? this.compareCookieValue(value, conditionCookie.value)\n : false;\n }\n\n const { key: compareKey, value: compareValue } = this.cookie as CookieType;\n\n let keyMatch: boolean;\n\n switch (cookieMatchType) {\n case NameMatchType.EXACT:\n keyMatch = key === compareKey;\n break;\n case NameMatchType.CONTAINS:\n keyMatch = key.includes(compareKey);\n break;\n case NameMatchType.REGULAR_EXPRESSION:\n keyMatch = Parser.parseRegExp(compareKey).test(key);\n break;\n default:\n KameleoonLogger.error`Unexpected comparing operation for Cookie condition: ${cookieMatchType}`;\n exhaustCheck(cookieMatchType);\n }\n\n return keyMatch && this.compareCookieValue(value, compareValue);\n }\n\n private compareCookieValue(value: string, compareValue: string): boolean {\n const valueMatchType = this.valueMatchType!;\n\n switch (valueMatchType) {\n case ValueMatchType.EXACT:\n return value === compareValue;\n case ValueMatchType.CONTAINS:\n return value.includes(compareValue);\n case ValueMatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(compareValue).test(value);\n default:\n KameleoonLogger.error`Unexpected comparing operation for Cookie condition: ${valueMatchType}`;\n return false;\n }\n }\n\n private isOptionalCookie(\n cookie: Partial<CookieType>,\n ): cookie is OptionalCookieType {\n const { value } = cookie;\n\n return typeof value !== 'undefined';\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType } from 'src/targeting/types';\nimport { OperatingSystemType } from 'src/kameleoonData/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class OperatingSystem implements ICondition {\n private operatingSystem?: OperatingSystemType | null;\n\n constructor({ os }: ConditionDataType) {\n this.operatingSystem = os;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const operatingSystemData = targetingData?.[KameleoonData.OperatingSystem];\n\n if (operatingSystemData) {\n const { operatingSystem } = operatingSystemData;\n\n return Ok(operatingSystem === this.operatingSystem);\n }\n\n return Ok(false);\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\n// --- Note ---\n// `GeolocationCondition` uses `Condition` in the naming to avoid confusion with\n// native `Geolocation` API\nexport class GeolocationCondition implements ICondition {\n private country?: string | null;\n private region?: string | null;\n private city?: string | null;\n\n constructor({ country, region, city }: ConditionDataType) {\n this.country = country;\n this.region = region;\n this.city = city;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const geolocationData = targetingData?.[KameleoonData.GeolocationData];\n\n if (geolocationData) {\n const {\n country: dataCountry,\n region: dataRegion,\n city: dataCity,\n } = geolocationData;\n const [conditionCountry, conditionRegion, conditionCity] = [\n this.country,\n this.region,\n this.city,\n ];\n\n if (!conditionCountry || !dataCountry) {\n return Ok(false);\n }\n\n const result =\n dataCountry.toLowerCase() === conditionCountry.toLowerCase() &&\n (!conditionRegion ||\n dataRegion?.toLowerCase() === conditionRegion.toLowerCase()) &&\n (!conditionCity ||\n dataCity?.toLowerCase() === conditionCity.toLowerCase());\n\n return Ok(result);\n }\n\n return Ok(false);\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { Tree } from 'src/targeting/tree';\n\nexport class Segment implements ICondition {\n segmentId?: number | null;\n\n constructor({ segmentId }: ConditionDataType) {\n this.segmentId = segmentId;\n }\n\n public evaluate(\n evaluationData: EvaluationDataType,\n ): Result<boolean, KameleoonError> {\n const { segments, trees } = evaluationData;\n\n if (!this.segmentId) {\n return Ok(false);\n }\n\n const segment = segments?.get(this.segmentId.toString());\n\n if (!segment) {\n return Ok(false);\n }\n\n const tree = trees?.get(this.segmentId.toString());\n\n if (tree) {\n return tree.evaluate(evaluationData);\n }\n\n return new Tree(segment).evaluate(evaluationData);\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class TargetFeatureFlag implements ICondition {\n private featureId?: number | null;\n private ruleId?: number | null;\n private variationKey?: string | null;\n\n constructor({ featureFlagId, variationKey, ruleId }: ConditionDataType) {\n this.featureId = featureFlagId;\n this.ruleId = ruleId;\n this.variationKey = variationKey;\n }\n\n public evaluate({\n variationData,\n ruleMap,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n if (!this.featureId || !ruleMap) {\n return Ok(false);\n }\n\n // -- Visitor took part in any experiment of the feature flag\n // with any variation\n if (this.featureId && !this.ruleId && !this.variationKey) {\n for (const [_, rule] of ruleMap) {\n const { featureId, experimentId } = rule;\n\n if (\n featureId === this.featureId &&\n typeof variationData[experimentId]?.variationId === 'number'\n ) {\n return Ok(true);\n }\n }\n\n return Ok(false);\n }\n\n // -- Visitor took part in certain experiment of the feature flag\n // with any/exact variation\n if (this.featureId && this.ruleId) {\n const rule = ruleMap.get(this.ruleId);\n\n if (!rule) {\n return Ok(false);\n }\n\n const { experimentId, variations } = rule;\n\n if (this.variationKey) {\n const variationId = variations.get(this.variationKey);\n\n return Ok(\n Boolean(variationId) &&\n variationData[experimentId]?.variationId === variationId,\n );\n }\n\n return Ok(Boolean(variationData[rule.experimentId]?.variationId));\n }\n\n // -- Visitor took part in any experiment of the feature flag\n // with certain variation\n if (this.featureId && !this.ruleId && this.variationKey) {\n for (const [_, rule] of ruleMap) {\n const { featureId, experimentId, variations } = rule;\n\n if (featureId === this.featureId && variations.has(this.variationKey)) {\n const variationId = variations.get(this.variationKey);\n\n return Ok(\n Boolean(variationId) &&\n variationData[experimentId]?.variationId === variationId,\n );\n }\n }\n }\n\n return Ok(false);\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { Parser } from 'src/utilities';\nimport { KameleoonData, PageViewDataType } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class PreviousPage implements ICondition {\n private conditionValue?: string | null;\n private matchType?: MatchType | null;\n\n constructor({ matchType, url }: ConditionDataType) {\n this.conditionValue = url;\n this.matchType = matchType;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const pageViewsData = targetingData?.[KameleoonData.PageView];\n\n if (!pageViewsData) {\n return Ok(false);\n }\n\n // --- Note ---\n // There is more concise way to find previous latest page, but it's less performant,\n // here we only ever check two latest timestamps of page and use one loop\n // The second latest can't be equal to the latest\n const secondLatestPageView = this.getSecondLatestPageView(\n Object.values(pageViewsData),\n );\n\n if (!secondLatestPageView) {\n return Ok(false);\n }\n\n const url = secondLatestPageView.urlAddress;\n\n return Ok(this.checkCondition(url));\n }\n\n private checkCondition(url: string): boolean {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return url.includes(this.conditionValue);\n case MatchType.EXACT:\n return url === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(this.conditionValue).test(url);\n default:\n KameleoonLogger.error`Unexpected comparing operation for PreviousPage condition: ${this.matchType}`;\n return false;\n }\n }\n\n private getSecondLatestPageView(\n pageViewsData: PageViewDataType[],\n ): PageViewDataType | undefined {\n if (pageViewsData.length < 2) {\n return undefined;\n }\n\n // --- Note ---\n // Arguments and variables named with abbreviations for better readability\n // `second` in this context is `second to latest`\n let latestPV: PageViewDataType | undefined;\n let secondPV: PageViewDataType | undefined;\n\n pageViewsData.forEach((currentPV) => {\n const currentLatestTs =\n currentPV.timestamps[currentPV.timestamps.length - 1].time;\n\n // -- Initial check\n if (!latestPV) {\n latestPV = currentPV;\n return;\n }\n\n const latestTs =\n latestPV.timestamps[latestPV!.timestamps.length - 1].time;\n\n // -- Covering a case where latest needs to be updated\n if (currentLatestTs > latestTs) {\n secondPV = latestPV;\n latestPV = currentPV;\n\n return;\n }\n\n // -- Covering a case where only second needs to be updated\n const secondTs = secondPV\n ? secondPV.timestamps[secondPV.timestamps.length - 1].time\n : 0;\n\n // -- Second may need to be updated\n if (currentLatestTs > secondTs) {\n secondPV = currentPV;\n }\n });\n\n return secondPV;\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData, PageViewDataType } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class VisitedPages implements ICondition {\n private conditionValue?: number | null;\n private matchType?: MatchType | null;\n\n constructor({ matchType, pageCount }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = pageCount;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const pageViewsData = targetingData?.[KameleoonData.PageView];\n\n if (!pageViewsData) {\n return Ok(false);\n }\n\n let pagesAmount = 0;\n\n Object.values(pageViewsData).forEach((pageView: PageViewDataType) => {\n pagesAmount += pageView.timestamps.length;\n });\n\n return Ok(this.checkCondition(pagesAmount));\n }\n\n private checkCondition(pagesAmount: number): boolean {\n if (!this.matchType || typeof this.conditionValue !== 'number') {\n return false;\n }\n\n switch (this.matchType) {\n case MatchType.EQUAL:\n return pagesAmount === this.conditionValue;\n case MatchType.GREATER:\n return pagesAmount > this.conditionValue;\n case MatchType.LOWER:\n return pagesAmount < this.conditionValue;\n default:\n KameleoonLogger.error`Unexpected comparing operation for VisitedPages condition: ${this.matchType}`;\n return false;\n }\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Utilities, TimeUnit } from 'src/utilities';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class FirstVisit implements ICondition {\n private matchType?: MatchType | null;\n private conditionValue?: number | null;\n private timeUnit?: TimeUnit | null;\n\n constructor({ matchType, count, unitOfTime }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = count;\n this.timeUnit = unitOfTime;\n }\n\n public evaluate({\n targetingData,\n sdkInfo,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const visitsData = targetingData?.[KameleoonData.VisitsData];\n\n if (\n sdkInfo.isServer\n ? !visitsData?.visits.length\n : !visitsData?.visits || visitsData.visits.length < 2\n ) {\n return Ok(false);\n }\n\n const firstVisit = visitsData!.visits[0];\n\n return Ok(\n this.checkCondition(\n typeof firstVisit === 'number' ? firstVisit : firstVisit.timeStarted,\n ),\n );\n }\n\n private checkCondition(firstVisitTimestamp: number): boolean {\n if (\n !this.matchType ||\n typeof this.conditionValue !== 'number' ||\n !this.timeUnit\n ) {\n return false;\n }\n\n const elapsedTimeMilliseconds = Date.now() - firstVisitTimestamp;\n const elapsedTimeUnit = Utilities.convertTimeUnit(\n elapsedTimeMilliseconds,\n this.timeUnit,\n );\n\n switch (this.matchType) {\n case MatchType.GREATER:\n return elapsedTimeUnit > this.conditionValue;\n case MatchType.LOWER:\n return elapsedTimeUnit < this.conditionValue;\n default:\n KameleoonLogger.error`Unexpected comparing operation for FirstVisit condition: ${this.matchType}`;\n return false;\n }\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Utilities, TimeUnit } from 'src/utilities';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class LastVisit implements ICondition {\n private matchType?: MatchType | null;\n private conditionValue?: number | null;\n private timeUnit?: TimeUnit | null;\n\n constructor({ matchType, count, unitOfTime }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = count;\n this.timeUnit = unitOfTime;\n }\n\n public evaluate({\n targetingData,\n sdkInfo,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const visitsData = targetingData?.[KameleoonData.VisitsData];\n\n if (\n sdkInfo.isServer\n ? !visitsData?.visits.length\n : !visitsData?.visits || visitsData.visits.length < 2\n ) {\n return Ok(false);\n }\n\n const visits = visitsData!.visits;\n\n // --- Note ---\n // Takes the timestamp of latest previous visit\n const indexLastVisit = sdkInfo.isServer\n ? visits.length - 1\n : visits.length - 2;\n const latestPreviousVisit = visits[indexLastVisit];\n\n return Ok(\n this.checkCondition(\n typeof latestPreviousVisit === 'number'\n ? latestPreviousVisit\n : latestPreviousVisit.timeStarted,\n ),\n );\n }\n\n private checkCondition(lastVisitTimestamp: number): boolean {\n if (\n !this.matchType ||\n typeof this.conditionValue !== 'number' ||\n !this.timeUnit\n ) {\n return false;\n }\n\n const elapsedTimeMilliseconds = Date.now() - lastVisitTimestamp;\n const elapsedTimeUnit = Utilities.convertTimeUnit(\n elapsedTimeMilliseconds,\n this.timeUnit,\n );\n\n switch (this.matchType) {\n case MatchType.GREATER:\n return elapsedTimeUnit > this.conditionValue;\n case MatchType.LOWER:\n return elapsedTimeUnit < this.conditionValue;\n default:\n KameleoonLogger.error`Unexpected comparing operation for LastVisit condition: ${this.matchType}`;\n return false;\n }\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class SameDayVisits implements ICondition {\n private matchType?: MatchType | null;\n private conditionValue?: number | null;\n\n constructor({ matchType, visitCount }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = visitCount;\n }\n\n public evaluate({\n targetingData,\n sdkInfo,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const visitsData = targetingData?.[KameleoonData.VisitsData];\n\n if (!visitsData) {\n return Ok(false);\n }\n\n let todayVisits = 0;\n\n const todayTimestamp = new Date().setHours(0, 0, 0, 0);\n const { visits } = visitsData;\n\n visits.forEach((item) => {\n let timeStarted;\n if (typeof item === 'number') {\n timeStarted = item;\n } else {\n timeStarted = item.timeStarted;\n }\n\n if (timeStarted >= todayTimestamp) {\n todayVisits++;\n }\n });\n\n if (sdkInfo.isServer) {\n // --- Note ---\n // +1 is current visit\n todayVisits += 1;\n }\n\n return Ok(this.checkCondition(todayVisits));\n }\n\n private checkCondition(todayVisitsAmount: number): boolean {\n if (!this.matchType || typeof this.conditionValue !== 'number') {\n return false;\n }\n\n switch (this.matchType) {\n case MatchType.EQUAL:\n return todayVisitsAmount === this.conditionValue;\n case MatchType.GREATER:\n return todayVisitsAmount > this.conditionValue;\n case MatchType.LOWER:\n return todayVisitsAmount < this.conditionValue;\n default:\n KameleoonLogger.error`Unexpected comparing operation for SameDayVisits condition: ${this.matchType}`;\n return false;\n }\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class Visits implements ICondition {\n private matchType?: MatchType | null;\n private conditionValue?: number | null;\n\n constructor({ matchType, visitCount }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = visitCount;\n }\n\n public evaluate({\n targetingData,\n sdkInfo,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const visitsData = targetingData?.[KameleoonData.VisitsData];\n\n if (!visitsData) {\n return Ok(false);\n }\n\n // --- Note ---\n // +1 is current visit for server sdk\n const visits = visitsData.visits.length + (sdkInfo.isServer ? 1 : 0);\n\n return Ok(this.checkCondition(visits));\n }\n\n private checkCondition(visitsAmount: number): boolean {\n if (!this.matchType || typeof this.conditionValue !== 'number') {\n return false;\n }\n\n switch (this.matchType) {\n case MatchType.EQUAL:\n return visitsAmount === this.conditionValue;\n case MatchType.GREATER:\n return visitsAmount > this.conditionValue;\n case MatchType.LOWER:\n return visitsAmount < this.conditionValue;\n default:\n KameleoonLogger.error`Unexpected comparing operation for Visits condition: ${this.matchType}`;\n return false;\n }\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { exhaustCheck, KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType, VisitorType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class NewVisitor implements ICondition {\n private visitorType?: VisitorType | null;\n\n constructor({ visitorType }: ConditionDataType) {\n this.visitorType = visitorType;\n }\n\n public evaluate({\n targetingData,\n sdkInfo,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const visitsData = targetingData?.[KameleoonData.VisitsData];\n\n if (!visitsData || !this.visitorType) {\n return Ok(false);\n }\n\n const { visits } = visitsData;\n\n // --- Note ---\n // Second case handles situation when user didn't use `addData` that\n // creates new current visit\n const isNewVisitor = sdkInfo.isServer\n ? !visits.length\n : visits.length <= 1;\n\n switch (this.visitorType) {\n case VisitorType.NEW:\n return Ok(isNewVisitor);\n case VisitorType.RETURNING:\n return Ok(!isNewVisitor);\n default:\n KameleoonLogger.error`Unexpected visitor type for NewVisitor condition: ${this.visitorType}`;\n exhaustCheck(this.visitorType);\n }\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Utilities } from 'src/utilities/utilities';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { EvaluationDataType, VersionMatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class ApplicationVersion implements ICondition {\n private conditionValue?: string | null;\n private versionMatchType?: VersionMatchType | null;\n\n constructor({ version, versionMatchType }: ConditionDataType) {\n this.conditionValue = version;\n this.versionMatchType = versionMatchType;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const version = targetingData?.[KameleoonData.ApplicationVersion]?.version;\n\n if (!version || !this.conditionValue || !this.versionMatchType) {\n return Ok(false);\n }\n\n const result = Utilities.compareSemVer({\n version,\n compareVersion: this.conditionValue,\n operator: this.versionMatchType,\n });\n\n if (!result.ok) {\n return Err(result.error);\n }\n\n return Ok(result.data);\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class ConversionLikelihood implements ICondition {\n private lowerBound?: number;\n private upperBound?: number;\n private keyMomentId?: number;\n private goalId?: number | null;\n\n constructor({\n lowerBound,\n upperBound,\n keyMomentId,\n goalId,\n }: ConditionDataType) {\n this.lowerBound = lowerBound;\n this.upperBound = upperBound;\n this.keyMomentId = keyMomentId;\n this.goalId = goalId;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const kcsData = targetingData?.[KameleoonData.KameleoonConversionScore];\n\n if (\n typeof this.keyMomentId !== 'number' ||\n typeof this.goalId !== 'number' ||\n typeof this.lowerBound !== 'number' ||\n typeof this.upperBound !== 'number' ||\n !kcsData\n ) {\n return Ok(false);\n }\n\n const score: number | undefined =\n kcsData.kcs[this.keyMomentId.toString()]?.[this.goalId.toString()];\n\n if (typeof score !== 'number') {\n return Ok(false);\n }\n\n return Ok(score >= this.lowerBound && score <= this.upperBound);\n }\n}\n","import { CampaignType, EvaluationDataType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { FeatureFlagVariationType } from 'src/storage/types';\nimport { PersonalizationDataType } from 'src/kameleoonData/types';\n\nexport class ExclusiveExperimentCondition implements ICondition {\n private campaignType?: CampaignType | null;\n\n constructor({ campaignType }: ConditionDataType) {\n this.campaignType = campaignType;\n }\n\n public evaluate(data: EvaluationDataType): Result<boolean, KameleoonError> {\n return Ok(this.checkCondition(data));\n }\n\n private checkCondition(data: EvaluationDataType): boolean {\n const variations = Object.values(data.variationData);\n const personalizations = Object.values(data.targetingData?.personalization || {});\n\n const hasSingleValidVariation =\n variations.length === 1 &&\n data.experimentId !== null &&\n data.variationData[data.experimentId] !== undefined;\n\n const hasNoVariations = variations.length === 0;\n const hasNoPersonalizations = personalizations.length === 0;\n\n switch (this.campaignType) {\n case CampaignType.Experiment:\n return hasNoVariations || hasSingleValidVariation;\n case CampaignType.Personalization:\n return hasNoPersonalizations;\n case CampaignType.Any:\n return hasNoPersonalizations && (hasNoVariations || hasSingleValidVariation);\n default:\n return false;\n }\n }\n}\n","import { EvaluationDataType, MatchTypeVariation } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\n\nexport class TargetExperimentCondition implements ICondition {\n private variationMatchType?: MatchTypeVariation | null;\n private variationId: number;\n private experimentId: number;\n\n constructor({\n variationMatchType,\n variation,\n experiment,\n }: ConditionDataType) {\n this.variationMatchType = variationMatchType;\n this.variationId = variation || -1;\n this.experimentId = experiment || -1;\n }\n\n public evaluate(data: EvaluationDataType): Result<boolean, KameleoonError> {\n return Ok(this.checkCondition(data));\n }\n\n private checkCondition(data: EvaluationDataType): boolean {\n const variation = data.variationData[this.experimentId];\n if (!variation) {\n return false;\n }\n\n switch (this.variationMatchType) {\n case MatchTypeVariation.ANY:\n return true;\n case MatchTypeVariation.EXACT:\n return variation.variationId === this.variationId;\n default:\n return false;\n }\n }\n}\n","import { EvaluationDataType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { KameleoonData } from 'src/kameleoonData/types';\n\nexport class TargetPersonalizationCondition implements ICondition {\n private personalizationId?: number | null;\n\n constructor({ personalizationId }: ConditionDataType) {\n this.personalizationId = personalizationId;\n }\n\n public evaluate(data: EvaluationDataType): Result<boolean, KameleoonError> {\n if (!data.targetingData) {\n return Ok(false);\n }\n\n return Ok(this.checkCondition(data));\n }\n\n private checkCondition(data: EvaluationDataType): boolean {\n if (!this.personalizationId) {\n return false;\n }\n const personalizationData =\n data.targetingData?.[KameleoonData.Personalization];\n return personalizationData?.[this.personalizationId] !== undefined;\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { TargetingType } from 'src/targeting/types';\nimport { Browser } from './browser';\nimport { Conversion } from './conversion';\nimport { CustomData } from './customData';\nimport { Device } from './device';\nimport { PageTitle } from './pageTitle';\nimport { PageUrl } from './pageUrl';\nimport { SdkLanguage } from './sdkLanguage';\nimport { ConditionDataType, ConditionType } from './types';\nimport { VisitorCode } from './visitorCode';\nimport { Cookie } from './cookie';\nimport { OperatingSystem } from './operatingSystem';\nimport { GeolocationCondition } from './geolocation';\nimport { Segment } from './segment';\nimport { TargetFeatureFlag } from './targetFeatureFlag';\nimport { PreviousPage } from './previousPage';\nimport { VisitedPages } from './visitedPages';\nimport { FirstVisit } from './firstVisit';\nimport { LastVisit } from './lastVisit';\nimport { SameDayVisits } from './sameDayVisits';\nimport { Visits } from './visits';\nimport { NewVisitor } from './newVisitor';\nimport { ApplicationVersion } from './applicationVersion';\nimport { ConversionLikelihood } from './conversionLikelihood';\nimport { KameleoonLogger } from 'src/logging';\nimport { ExclusiveExperimentCondition } from './exclusiveExperiment';\nimport { TargetExperimentCondition } from './targetExperiment';\nimport { TargetPersonalizationCondition } from './targetPersonalization';\nimport { IConditionFactory } from 'src/targeting/conditions/conditionFactoryInstance';\n\nexport class ConditionFactory implements IConditionFactory {\n createCondition(\n data: ConditionDataType,\n ): Result<ConditionType, KameleoonError> {\n const { targetingType } = data;\n\n switch (targetingType) {\n case TargetingType.CUSTOM_DATUM:\n return Ok(new CustomData(data));\n case TargetingType.EXCLUSIVE_EXPERIMENT:\n return Ok(new ExclusiveExperimentCondition(data));\n case TargetingType.TARGET_EXPERIMENT:\n return Ok(new TargetExperimentCondition(data));\n case TargetingType.TARGET_FEATURE_FLAG:\n return Ok(new TargetFeatureFlag(data));\n case TargetingType.TARGET_PERSONALIZATION:\n return Ok(new TargetPersonalizationCondition(data));\n case TargetingType.DEVICE_TYPE:\n return Ok(new Device(data));\n case TargetingType.BROWSER:\n return Ok(new Browser(data));\n case TargetingType.PAGE_URL:\n return Ok(new PageUrl(data));\n case TargetingType.PAGE_TITLE:\n return Ok(new PageTitle(data));\n case TargetingType.CONVERSIONS:\n return Ok(new Conversion(data));\n case TargetingType.VISITOR_CODE:\n return Ok(new VisitorCode(data));\n case TargetingType.SDK_LANGUAGE:\n return Ok(new SdkLanguage(data));\n case TargetingType.COOKIE:\n return Ok(new Cookie(data));\n case TargetingType.OPERATING_SYSTEM:\n return Ok(new OperatingSystem(data));\n case TargetingType.GEOLOCATION:\n return Ok(new GeolocationCondition(data));\n case TargetingType.SEGMENT:\n return Ok(new Segment(data));\n case TargetingType.APPLICATION_VERSION:\n return Ok(new ApplicationVersion(data));\n case TargetingType.PREVIOUS_PAGE:\n return Ok(new PreviousPage(data));\n case TargetingType.PAGE_VIEWS:\n return Ok(new VisitedPages(data));\n case TargetingType.LAST_VISIT:\n return Ok(new LastVisit(data));\n case TargetingType.FIRST_VISIT:\n return Ok(new FirstVisit(data));\n case TargetingType.SAME_DAY_VISITS:\n return Ok(new SameDayVisits(data));\n case TargetingType.VISITS:\n return Ok(new Visits(data));\n case TargetingType.NEW_VISITORS:\n return Ok(new NewVisitor(data));\n case TargetingType.HEAT_SLICE:\n return Ok(new ConversionLikelihood(data));\n default:\n KameleoonLogger.info`Unsupported targeted condition type found: ${targetingType}`;\n return Err(\n new KameleoonError(\n KameleoonException.TargetingCondition,\n targetingType,\n ),\n );\n }\n }\n}\n","import { ConsentType } from 'src/clientConfiguration';\nimport { Milliseconds } from 'src/types';\nimport { ClientDataType } from './types';\nimport { ConsentBlockingBehaviour } from 'src/clientConfiguration/types';\nimport { DEFAULT_DATA_FILE_CONFIGURATION } from 'src/clientConfiguration/constants';\n\n/**\n * @readonly\n * @enum {string} an Enum containing keys for Kameleoon SDK related data stored on storage\n * */\nexport enum KameleoonStorageKey {\n ClientData = 'kameleoonClientData',\n TargetingData = 'kameleoonTargetingData',\n TrackingData = 'kameleoonTrackingData',\n VariationData = 'kameleoonVariationData',\n VisitorCode = 'kameleoonVisitorCode',\n ConsentData = 'kameleoonConsentData',\n DataInfo = 'kameleoonDataInfo',\n KameleoonSimulationFFData = 'kameleoonSimulationFFData',\n ForcedFeatureVariation = 'kameleoonForcedFeatureVariation',\n ForcedExperimentVariation = 'kameleoonForcedExperimentVariation',\n}\n\nexport const DEFAULT_CLIENT_CONFIGURATION: ClientDataType = {\n data: DEFAULT_DATA_FILE_CONFIGURATION,\n lastUpdate: '',\n};\n\n// --- Note ---\n// Not a real visit duration, rather a guaranteed minimum time\nexport const VISIT_DURATION = 29 * Milliseconds.Minute;\n","import {\n ClientDataType,\n DataInfoType,\n StorageDataType,\n TrackingDataType,\n VariationDataType,\n} from './types';\nimport { DEFAULT_CLIENT_CONFIGURATION, KameleoonStorageKey } from './constants';\nimport { TargetingDataType } from 'src/targeting';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { exhaustCheck } from 'src/kameleoonError';\n\ninterface IIntegrityChecker {\n isDataValid(data: StorageDataType): boolean;\n getDefaultData(data: StorageDataType): StorageDataType;\n}\n\nexport class IntegrityChecker implements IIntegrityChecker {\n private key: KameleoonStorageKey;\n\n constructor(key: KameleoonStorageKey) {\n this.key = key;\n }\n\n public isDataValid(data: StorageDataType): boolean {\n switch (this.key) {\n case KameleoonStorageKey.ClientData:\n return this.checkClientDataIntegrity(data as ClientDataType);\n case KameleoonStorageKey.TargetingData:\n return this.checkTargetingDataIntegrity(data as TargetingDataType);\n case KameleoonStorageKey.DataInfo:\n return this.checkDataInfoIntegrity(data as DataInfoType);\n case KameleoonStorageKey.VariationData:\n return this.checkVariationDataIntegrity(data as VariationDataType);\n case KameleoonStorageKey.TrackingData:\n return this.checkTrackingDataIntegrity(data as TrackingDataType);\n default:\n return true;\n }\n }\n\n public getDefaultData(): StorageDataType {\n switch (this.key) {\n case KameleoonStorageKey.ClientData:\n return this.getDefaultClientData();\n case KameleoonStorageKey.DataInfo:\n return { unsentData: {}, nextVisitTime: 0, mappingIdentifiers: {} };\n case KameleoonStorageKey.TrackingData:\n return { scheduledVisitors: {} };\n case KameleoonStorageKey.TargetingData:\n case KameleoonStorageKey.VariationData:\n case KameleoonStorageKey.ConsentData:\n return {};\n case KameleoonStorageKey.VisitorCode:\n return '';\n case KameleoonStorageKey.KameleoonSimulationFFData:\n return '';\n case KameleoonStorageKey.ForcedExperimentVariation:\n return {};\n case KameleoonStorageKey.ForcedFeatureVariation:\n return {};\n default:\n exhaustCheck(this.key);\n }\n }\n\n private checkTrackingDataIntegrity(data: TrackingDataType): boolean {\n return this.hasFields(data, ['scheduledVisitors']);\n }\n\n private checkDataInfoIntegrity(data: DataInfoType): boolean {\n return this.hasFields(data, ['unsentData', 'nextVisitTime']);\n }\n\n private checkVariationDataIntegrity(data: VariationDataType): boolean {\n const variations = Object.values(data);\n\n if (!variations.length) {\n return true;\n }\n\n const hasInvalidFields = (obj: Record<string, unknown>) =>\n !this.hasFields(obj, ['status']) || this.hasFields(obj, ['isSent']);\n\n for (const variation of variations) {\n for (const value of Object.values(variation)) {\n if (hasInvalidFields(value)) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n private checkClientDataIntegrity(data: ClientDataType): boolean {\n return this.hasFields(data, Object.keys(DEFAULT_CLIENT_CONFIGURATION));\n }\n\n private checkTargetingDataIntegrity(data: TargetingDataType): boolean {\n const visitorValues = Object.values(data);\n\n if (!visitorValues.length) {\n return true;\n }\n\n for (const visitorData of visitorValues) {\n // --- Note ---\n // If `visitorData` is a string, it means that it's a visitor reference\n if (typeof visitorData === 'string') {\n continue;\n }\n\n const hasInvalidFields = (obj: Record<string, unknown>) =>\n !this.hasFields(obj, ['status']) ||\n this.hasFields(obj, ['sent']) ||\n this.hasFields(obj, ['timestampList']);\n\n for (const [key, data] of Object.entries(visitorData)) {\n if (Array.isArray(data)) {\n return false;\n }\n\n switch (key) {\n case KameleoonData.PageView:\n case KameleoonData.Conversion:\n case KameleoonData.Personalization:\n case KameleoonData.TargetedSegment:\n case KameleoonData.CustomData: {\n const hasBadFields = Object.values(data).some((obj) =>\n hasInvalidFields(obj as Record<string, unknown>),\n );\n\n if (hasBadFields) {\n return false;\n }\n\n continue;\n }\n default: {\n if (hasInvalidFields(data as Record<string, unknown>)) {\n return false;\n }\n }\n }\n }\n }\n\n return true;\n }\n\n private getDefaultClientData(): ClientDataType {\n return {\n ...DEFAULT_CLIENT_CONFIGURATION,\n lastUpdate: new Date().toString(),\n };\n }\n\n private hasFields(obj: Record<string, unknown>, fields: string[]): boolean {\n const keys = Object.keys(obj);\n\n if (!keys.length || !fields.length) {\n return false;\n }\n\n return fields.every((field) => keys.includes(field));\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { KameleoonStorageKey } from './constants';\nimport { IExternalStorage, IStorage, StorageDataType } from './types';\nimport { IntegrityChecker } from './integrityChecker';\nimport { KameleoonLogger } from 'src/logging';\n\n// --- Note ---\n// Named `DataStorage` to avoid collision with `Storage` from `window` API\nexport class DataStorage<T extends StorageDataType> implements IStorage<T> {\n private externalStorage: IExternalStorage;\n private storageKey: KameleoonStorageKey;\n\n constructor(\n externalStorage: IExternalStorage,\n storageKey: KameleoonStorageKey,\n ) {\n this.externalStorage = externalStorage;\n this.storageKey = storageKey;\n\n const integrityChecker = new IntegrityChecker(storageKey);\n\n const result = this.read();\n\n if (!result.ok) {\n if (result.error.type === KameleoonException.StorageEmpty) {\n const defaultData = integrityChecker.getDefaultData();\n this.write(defaultData as T);\n }\n\n return;\n }\n\n const data = result.data;\n\n if (!integrityChecker.isDataValid(data)) {\n const defaultData = integrityChecker.getDefaultData();\n this.write(defaultData as T);\n }\n }\n\n public read(): Result<T, KameleoonError> {\n try {\n const result = this.externalStorage.read(this.storageKey);\n\n if (result === null) {\n return Err(new KameleoonError(KameleoonException.StorageEmpty));\n }\n\n // --- Note ---\n // Have to cast the type here to tell TS that `result.data` type is a subset of `T` as we check it already in the default generic `StorageDataType` for `IExternalStorage`\n return Ok(result as T);\n } catch (_) {\n KameleoonLogger.error`Failed to read data from storage: ${this.storageKey}`;\n return Err(\n new KameleoonError(KameleoonException.StorageRead, this.storageKey),\n );\n }\n }\n\n public write(data: T): Result<void, KameleoonError> {\n try {\n this.externalStorage.write(this.storageKey, data);\n\n return Ok();\n } catch (_) {\n KameleoonLogger.error`Failed to write data to storage: ${this.storageKey}`;\n return Err(\n new KameleoonError(KameleoonException.StorageWrite, this.storageKey),\n );\n }\n }\n\n public update(data: Partial<T>): Result<void, KameleoonError> {\n const result = this.read();\n\n if (!result.ok) {\n if (result.error.type === KameleoonException.StorageEmpty) {\n return this.write(data as T);\n } else {\n return result;\n }\n }\n\n const existingData: StorageDataType | null = result.data;\n\n let newData: T;\n\n if (typeof existingData === 'string') {\n newData = data as T;\n } else {\n newData = { ...existingData, ...data } as T;\n }\n\n return this.write(newData);\n }\n}\n","import {\n StorageConsentDataType,\n FeatureFlagVariationType,\n ForcedExperimentVariationDataType,\n ForcedExperimentVariationType,\n ForcedFeatureVariationDataType,\n IExternalStorage,\n VariationDataType,\n} from 'src/storage/types';\nimport { KameleoonLogger } from 'src/logging';\nimport { StorageDataType } from './types';\nimport { KameleoonStorageKey } from 'src/storage/constants';\n\nexport class StorageCleanupManager<T extends StorageDataType> {\n private readonly cleanupInterval: number;\n private readonly externalStorage: IExternalStorage<T>;\n\n constructor(externalStorage: IExternalStorage<T>, cleanupInterval: number) {\n this.externalStorage = externalStorage;\n this.cleanupInterval = cleanupInterval;\n\n if (cleanupInterval > 0) {\n this.initCleanupInterval();\n }\n }\n\n private initCleanupInterval(): void {\n for (const storageKey of Object.values(KameleoonStorageKey)) {\n let cleanupInterval: NodeJS.Timeout | null = null;\n try {\n switch (storageKey) {\n case KameleoonStorageKey.ForcedFeatureVariation:\n case KameleoonStorageKey.ForcedExperimentVariation:\n case KameleoonStorageKey.VariationData:\n case KameleoonStorageKey.ConsentData:\n KameleoonLogger.info`Starting cleanup for ${storageKey} with interval ${this.cleanupInterval}`;\n cleanupInterval = setInterval(\n () => this.cleanupData(storageKey),\n this.cleanupInterval,\n );\n break;\n case KameleoonStorageKey.ClientData:\n case KameleoonStorageKey.TargetingData:\n case KameleoonStorageKey.TrackingData:\n case KameleoonStorageKey.VisitorCode:\n case KameleoonStorageKey.DataInfo:\n case KameleoonStorageKey.KameleoonSimulationFFData:\n break;\n default:\n // check if all cases are handled\n const exhaustiveCheck: never = storageKey;\n KameleoonLogger.error`Unknown storage key: ${storageKey} for initCleanupInterval.`;\n }\n } catch (Error) {\n if (cleanupInterval) {\n clearInterval(cleanupInterval);\n }\n KameleoonLogger.error`Error while starting cleanup for ${storageKey} with interval ${this.cleanupInterval}`;\n }\n }\n }\n\n public cleanupData(storageKey: KameleoonStorageKey): void {\n const dataResult: any = this.externalStorage.read(storageKey);\n\n if (!dataResult) {\n return;\n }\n const currentTime = Date.now();\n\n switch (storageKey) {\n case KameleoonStorageKey.VariationData:\n this.cleanupVariationData(dataResult, currentTime);\n break;\n case KameleoonStorageKey.ForcedFeatureVariation:\n this.cleanupForcedFeatureVariationData(dataResult, currentTime);\n break;\n case KameleoonStorageKey.ForcedExperimentVariation:\n this.cleanupForcedExperimentVariationData(dataResult, currentTime);\n break;\n case KameleoonStorageKey.ConsentData:\n this.cleanupConsentData(dataResult, currentTime);\n break;\n case KameleoonStorageKey.ClientData:\n case KameleoonStorageKey.TargetingData:\n case KameleoonStorageKey.TrackingData:\n case KameleoonStorageKey.VisitorCode:\n case KameleoonStorageKey.DataInfo:\n case KameleoonStorageKey.KameleoonSimulationFFData:\n break;\n default:\n // check if all cases are handled\n const exhaustiveCheck: never = storageKey;\n KameleoonLogger.error`Unknown storage key: ${storageKey} for cleanupData.`;\n }\n\n this.externalStorage.write(storageKey, dataResult);\n }\n\n private cleanupConsentData(\n consentData: StorageConsentDataType,\n currentTime: number,\n ): void {\n for (const [visitorCode, consent] of Object.entries(consentData)) {\n // for consistency with the old data in the storage\n if (typeof consent === 'boolean') {\n consentData[visitorCode] = {\n consent,\n expirationTime: currentTime + this.cleanupInterval,\n } as {\n consent: boolean;\n expirationTime: number;\n };\n continue;\n }\n const value = consent as {\n consent: boolean;\n expirationTime?: number;\n };\n if (typeof value.expirationTime === 'number') {\n if (value.expirationTime < currentTime) {\n delete consentData[visitorCode];\n }\n } else {\n value.expirationTime = currentTime + this.cleanupInterval;\n }\n }\n }\n\n private cleanupVariationData(\n variationData: VariationDataType,\n currentTime: number,\n ): void {\n for (const [visitorCode, featureVariations] of Object.entries(\n variationData,\n )) {\n this.cleanupObjectValues(\n featureVariations as {\n [key: number]: FeatureFlagVariationType & { expirationTime?: number };\n },\n currentTime,\n );\n\n if (Object.keys(variationData[visitorCode]).length === 0) {\n delete variationData[visitorCode];\n }\n }\n }\n\n private cleanupForcedFeatureVariationData(\n forcedFeatureVariationData: ForcedFeatureVariationDataType,\n currentTime: number,\n ): void {\n for (const [simulated, visitorData] of Object.entries(\n forcedFeatureVariationData,\n )) {\n for (const [visitorCode, features] of Object.entries(visitorData)) {\n this.cleanupObjectValues(\n features as {\n [key: string]: ForcedFeatureVariationDataType & {\n expirationTime?: number;\n };\n },\n currentTime,\n );\n\n if (\n Object.keys(\n forcedFeatureVariationData[Number(simulated)][visitorCode],\n ).length === 0\n ) {\n delete forcedFeatureVariationData[Number(simulated)][visitorCode];\n }\n }\n }\n }\n\n private cleanupForcedExperimentVariationData(\n forcedExperimentVariationData: ForcedExperimentVariationDataType,\n currentTime: number,\n ): void {\n for (const [visitorCode, experiments] of Object.entries(\n forcedExperimentVariationData,\n )) {\n this.cleanupObjectValues(\n experiments as {\n [key: number]: ForcedExperimentVariationType & {\n expirationTime?: number;\n };\n },\n currentTime,\n );\n\n if (\n Object.keys(forcedExperimentVariationData[visitorCode]).length === 0\n ) {\n delete forcedExperimentVariationData[visitorCode];\n }\n }\n }\n\n private cleanupObjectValues(\n obj: {\n [key: string | number]: { expirationTime?: number };\n },\n currentTime: number,\n ): void {\n for (const [key, value] of Object.entries(obj)) {\n if (typeof value.expirationTime === 'number') {\n if (value.expirationTime < currentTime) {\n delete obj[key];\n }\n } else {\n value.expirationTime = currentTime + this.cleanupInterval;\n }\n }\n }\n}\n","import { Result } from 'ts-res';\nimport { ConfigurationDataType, RuleType } from 'src/clientConfiguration';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { KameleoonData } from 'src/kameleoonData';\nimport { TrackingStatus } from 'src/types';\nimport { TargetingDataType } from 'src/targeting';\n\nexport type ClientDataType = {\n data: ConfigurationDataType;\n lastUpdate: string;\n lastModified?: string;\n requestTime?: number;\n};\n\nexport type DataInfoType = {\n // --- Note ---\n // Not a real next visit time, but a minimum time that guarantees to make it to the next visit\n nextVisitTime: number;\n nextDataCleanup?: number;\n unsentData: {\n [visitorCode: string]: KameleoonData[];\n };\n mappingIdentifiers?: {\n [visitorCode: string]: MappingIdentifierType;\n };\n};\n\nexport type MappingIdentifierType = {\n mappingIdentifier: string;\n timestamp: number;\n};\n\nexport type FeatureFlagVariationType = {\n variationId: number;\n isTargetedRule: boolean;\n status: TrackingStatus;\n};\n\nexport type FeatureFlagVariationsType = {\n [experimentId: string]: FeatureFlagVariationType;\n};\n\nexport type VariationDataType = {\n [visitorCode: string]: FeatureFlagVariationsType;\n};\n\nexport type ForcedFeatureVariationType = {\n featureKey: string;\n rule: ForcedVariationRuleType | null;\n varByExp: ForcedVariationVarByExpType | null;\n simulated: boolean;\n};\n\nexport type ForcedExperimentVariationType = {\n rule: ForcedVariationRuleType;\n varByExp: ForcedVariationVarByExpType;\n forceTargeting: boolean;\n};\n\nexport type ForcedVariationRuleType = {\n type: RuleType;\n experimentId: number;\n};\n\nexport type ForcedVariationVarByExpType = {\n variationKey: string;\n variationId: number;\n};\n\nexport type SimulatedVariationType = {\n featureKey: string;\n variationId: number | null;\n experimentId: number;\n};\n\nexport type ForcedExperimentVariationDataType = {\n [visitorCode: string]: {\n [experimentId: number]: ForcedExperimentVariationType;\n };\n};\n\nexport type ForcedFeatureVariationDataType = {\n [simulated: number]: {\n [visitorCode: string]: {\n [featureKey: string]: ForcedFeatureVariationType;\n };\n };\n};\n\nexport type ForcedVariationDataType = {\n [visitorCode: string]: {\n [featureKey: string]: ForcedFeatureVariationType;\n };\n};\n\nexport enum LegalConsent {\n Unknown = 0,\n Given = 1,\n NotGiven = 2,\n}\n\nexport type LegalConsentDataType =\n | boolean\n | {\n consent: LegalConsent;\n }\n | {\n consent: boolean;\n };\n\n// for consistency with the old data in the storage\nexport type StorageConsentDataType = {\n [visitorCode: string]: LegalConsentDataType;\n};\n\nexport type ScheduledVisitorsType = {\n [visitorCode: string]: {\n isConsentProvided: boolean;\n };\n};\n\nexport type TrackingDataType = {\n scheduledVisitors: ScheduledVisitorsType;\n};\n\n/**\n * @type `StorageDataType` - an enumeration type which represents a data stored on SDK storage\n *\n * `string` represents visitor code storage with only one string value\n * */\nexport type StorageDataType =\n | ClientDataType\n | TargetingDataType\n | TrackingDataType\n | VariationDataType\n | StorageConsentDataType\n | DataInfoType\n | string;\n\n/**\n * @interface an interface of External Storage which must be implemented to be used as external storage an SDK\n * */\nexport interface IExternalStorage<T = StorageDataType> {\n /**\n * @method read - reads data from the storage\n * @param {string} key - a key, which different SDK data blocks are stored under\n * @returns {T | null} representation of generic Kameleoon data type `T` or `null` if the storage was read successfully but it's empty\n * */\n read: (key: string) => T | null;\n /**\n * @method write - writes data to storage\n * @param {string} key - a key, which different SDK data blocks are stored under\n * @param {T} data - representation of generic Kameleoon data type\n * @returns {void}\n * */\n write: (key: string, data: T) => void;\n}\n\n/**\n * @interface an interface which serves as a wrapper over `IExternalStorage` for internal SDK usage\n * */\nexport interface IStorage<T> {\n read: () => Result<T, KameleoonError>;\n write: (data: T) => Result<void, KameleoonError>;\n update: (data: Partial<T>) => Result<void, KameleoonError>;\n}\n","import { UrlEventType, UrlParameter } from 'src/requester';\nimport {\n IKameleoonData,\n KameleoonData,\n TargetedSegmentDataType,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\nexport class TargetedSegment implements IKameleoonData {\n public status: TrackingStatus;\n\n private id: number;\n\n constructor(id: number) {\n this.id = id;\n this.status = TrackingStatus.Unsent;\n }\n\n get url(): string {\n return UrlEventType.TargetingSegment + UrlParameter.Id + this.id;\n }\n\n get data(): TargetedSegmentDataType {\n return {\n id: this.id,\n type: KameleoonData.TargetedSegment,\n status: this.status,\n };\n }\n\n public static _fromRaw(data: TargetedSegmentDataType): TargetedSegment {\n const { id, status } = data;\n\n const targetedSegment = new TargetedSegment(id);\n targetedSegment.status = status;\n\n return targetedSegment;\n }\n}\n","import { Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { SegmentType, TargetingDataType, Tree } from 'src/targeting';\nimport { DataProcessor } from './dataProcessor';\nimport { CustomData } from './customData';\nimport {\n BrowserDataType,\n CustomDataType,\n DataFilterType,\n DataManagerParametersType,\n DeviceDataType,\n GeolocationDataType,\n KameleoonData,\n KameleoonDataType,\n KameleoonVisitorDataType,\n MutUpdateTargetingDataParametersType,\n OperatingSystemDataType,\n PageViewDataType,\n ProcessCustomDataManagerParametersType,\n TargetedSegmentDataType,\n VisitorsDataType,\n} from './types';\nimport { IStorage, VISIT_DURATION } from 'src/storage';\nimport {\n CustomDataConfigurationType,\n CustomDataScope,\n} from 'src/clientConfiguration';\nimport { Utilities } from 'src/utilities';\nimport { DataInfoType, MappingIdentifierType } from 'src/storage/types';\nimport { Conversion } from './conversion';\nimport { PageView } from './pageView';\nimport { Browser } from './browser';\nimport { Device } from './device';\nimport { GeolocationData } from './geolocation';\nimport { TrackingStatus } from 'src/types';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport { OperatingSystem } from './operatingSystem';\nimport { KameleoonLogger } from 'src/logging';\nimport { StaticData } from 'src/kameleoonData/staticData';\nimport { TargetedSegment } from 'src/kameleoonData/targetedSegment';\n\nexport interface IDataManager {\n storeData(\n data: VisitorsDataType,\n extendTtl: boolean,\n ): Result<void, KameleoonError>;\n storeTrackedData(data: VisitorsDataType): void;\n getTree(segment: SegmentType): Tree;\n clearTrees(): void;\n isPersistentCustomData(dataItem: KameleoonDataType): dataItem is CustomData;\n isUniqueIdentifier(visitorCode: string): boolean;\n getLinkedVisitor(visitorCode: string, index: number | null): string | null;\n getVisitorData(visitorCode: string): KameleoonVisitorDataType | undefined;\n getVisitorIdentifier(visitorCode: string): string;\n getPendingData(visitorCode: string): KameleoonDataType[];\n getUnsentData(visitorCode: string): (KameleoonDataType | StaticData)[];\n getVisitorStoredDataTypes(visitorCode: string): Set<KameleoonData>;\n readonly identifierCustomDataIndex: number | null;\n readonly storedCustomDataIndexes: Set<number>;\n readonly trees: Map<string, Tree>;\n readonly unsentDataVisitors: string[];\n getCustomDataIndexByName(name: string): number | undefined;\n}\n\nexport class DataManager implements IDataManager {\n protected dataStorage: IStorage<TargetingDataType>;\n protected infoStorage: IStorage<DataInfoType>;\n protected dataProcessor: DataProcessor;\n protected targetingTrees: Map<string, Tree> = new Map();\n protected mappingIdentifierCustomDataIndex: number | null = null;\n protected persistentCustomDataIndexes: Set<number> = new Set();\n protected localCustomDataIndexes: Set<number> = new Set();\n protected customDataIndexByName: Map<string, number> = new Map();\n protected cleanupIntervalId: NodeJS.Timeout | null = null;\n protected packageInfo: ExternalPackageInfoType;\n\n constructor({\n dataStorage,\n infoStorage,\n cleanupInterval,\n packageInfo,\n }: DataManagerParametersType) {\n KameleoonLogger.debug`CALL: new DataManager(dataStorage, infoStorage, cleanupInterval: ${cleanupInterval})`;\n this.dataStorage = dataStorage;\n this.infoStorage = infoStorage;\n this.dataProcessor = new DataProcessor(cleanupInterval, packageInfo);\n this.packageInfo = packageInfo;\n\n if (cleanupInterval) {\n const cleanupCallback = () => {\n this.cleanupData();\n };\n\n // --- Note ---\n // We can not make delayed code execution recoverable, as it might lead\n // to targeting data storage size overflow\n try {\n this.cleanupIntervalId = setInterval(cleanupCallback, cleanupInterval);\n } catch (err) {\n if (this.cleanupIntervalId) {\n clearInterval(this.cleanupIntervalId);\n }\n KameleoonLogger.error`Failed to set cleanup interval: ${cleanupInterval}`;\n throw err;\n }\n }\n KameleoonLogger.debug`RETURN: new DataManager(dataStorage, infoStorage, cleanupInterval: ${cleanupInterval})`;\n }\n\n public getUnsentData(\n visitorCode: string,\n ): (KameleoonDataType | StaticData)[] {\n const infoResult = this.infoStorage.read();\n\n if (!infoResult.ok) {\n return [];\n }\n\n const infoData = infoResult.data;\n const targetingData = this.getVisitorData(visitorCode);\n\n if (!infoData.unsentData[visitorCode] || !targetingData) {\n return [];\n }\n\n const unsentDataKeys = infoData.unsentData[visitorCode];\n const isNextVisit = infoData.nextVisitTime <= Date.now();\n\n const filter: DataFilterType = ({ status, key, cdIndex }) => {\n if (typeof cdIndex === 'number') {\n // --- Note ---\n // Persistent CustomData is mandatory for sending each time\n // but only once per visit\n if (this.persistentCustomDataIndexes.has(cdIndex) && isNextVisit) {\n return true;\n }\n }\n\n return unsentDataKeys.includes(key) && status === TrackingStatus.Unsent;\n };\n\n if (isNextVisit) {\n infoData.nextVisitTime = Date.now() + VISIT_DURATION;\n this.infoStorage.write(infoData);\n }\n\n return this.getDataFromRaw(targetingData, filter);\n }\n\n public getPendingData(visitorCode: string): KameleoonDataType[] {\n const targetingData = this.getVisitorData(visitorCode);\n\n if (!targetingData) {\n return [];\n }\n\n const filter: DataFilterType = ({ status }) =>\n status === TrackingStatus.Pending;\n\n return this.getDataFromRaw(targetingData, filter);\n }\n\n private getDataFromRaw(\n targetingData: KameleoonVisitorDataType,\n filter: DataFilterType,\n ): KameleoonDataType[] {\n const resultData: KameleoonDataType[] = [];\n\n for (const [key, data] of Object.entries(targetingData)) {\n if (!data) {\n continue;\n }\n\n switch (key) {\n case KameleoonData.CustomData: {\n for (const customData of Object.values(data)) {\n if (!customData) {\n continue;\n }\n\n const { status, index } = customData;\n\n if (filter({ status, key, cdIndex: index })) {\n const customDataItem = CustomData._fromRaw(customData);\n resultData.push(customDataItem);\n }\n }\n\n break;\n }\n case KameleoonData.Conversion: {\n for (const conversion of Object.values(data)) {\n if (!conversion) {\n continue;\n }\n\n if (filter({ status: conversion.status, key })) {\n const customDataItem = Conversion._fromRaw(conversion);\n resultData.push(customDataItem);\n }\n }\n\n break;\n }\n case KameleoonData.PageView: {\n const pageViewData = data as { [key: string]: PageViewDataType };\n\n for (const pageView of Object.values(pageViewData)) {\n if (filter({ status: pageView.status, key })) {\n const pageViewItem = PageView._fromRaw(pageView);\n resultData.push(pageViewItem);\n }\n }\n\n break;\n }\n case KameleoonData.TargetedSegment: {\n const targetedSegmentData = data as {\n [key: string]: TargetedSegmentDataType;\n };\n\n for (const targetedSegment of Object.values(targetedSegmentData)) {\n if (filter({ status: targetedSegment.status, key })) {\n const targetedSegmentItem =\n TargetedSegment._fromRaw(targetedSegment);\n resultData.push(targetedSegmentItem);\n }\n }\n\n break;\n }\n case KameleoonData.GeolocationData: {\n const geolocationData = data as GeolocationDataType;\n\n if (!data) {\n continue;\n }\n\n if (filter({ status: geolocationData.status, key })) {\n const geolocationItem = GeolocationData._fromRaw(geolocationData);\n resultData.push(geolocationItem);\n }\n\n break;\n }\n case KameleoonData.Browser: {\n const browserData = data as BrowserDataType;\n\n if (filter({ status: browserData.status, key })) {\n const browserItem = Browser._fromRaw(browserData);\n resultData.push(browserItem);\n }\n\n break;\n }\n case KameleoonData.Device: {\n const deviceData = data as DeviceDataType;\n\n if (filter({ status: deviceData.status, key })) {\n const deviceItem = Device._fromRaw(deviceData);\n resultData.push(deviceItem);\n }\n\n break;\n }\n case KameleoonData.OperatingSystem: {\n const osData = data as OperatingSystemDataType;\n\n if (filter({ status: osData.status, key })) {\n const osItem = OperatingSystem._fromRaw(osData);\n resultData.push(osItem);\n }\n }\n }\n }\n\n return resultData;\n }\n\n public storeTrackedData(data: VisitorsDataType): void {\n this.storeData(data, false);\n\n const infoResult = this.infoStorage.read();\n\n if (!infoResult.ok) {\n return;\n }\n\n const unsentData = infoResult.data.unsentData;\n\n for (const [visitorCode, kameleoonData] of Object.entries(data)) {\n if (!unsentData[visitorCode]) {\n return;\n }\n\n const unsentDataKeys = new Set(unsentData[visitorCode]);\n\n kameleoonData.forEach(({ data }) => {\n if (unsentDataKeys.has(data.type)) {\n unsentDataKeys.delete(data.type);\n }\n });\n\n const hasPersistentCustomData = kameleoonData.some(({ data }) => {\n if (data.type !== KameleoonData.CustomData) {\n return false;\n }\n\n const { index } = data as CustomDataType;\n\n return (\n this.persistentCustomDataIndexes.has(index) ||\n this.mappingIdentifierCustomDataIndex === index\n );\n });\n\n if (hasPersistentCustomData) {\n unsentDataKeys.add(KameleoonData.CustomData);\n }\n\n unsentData[visitorCode] = Array.from(unsentDataKeys);\n\n if (!unsentData[visitorCode].length) {\n delete unsentData[visitorCode];\n }\n }\n\n this.infoStorage.write(infoResult.data);\n }\n\n public storeData(\n data: VisitorsDataType,\n extendTtl: boolean,\n ): Result<void, KameleoonError>;\n public storeData(\n visitorCode: string,\n ...data: KameleoonDataType[]\n ): Result<void, KameleoonError>;\n public storeData(\n firstParameter: VisitorsDataType | string,\n ...secondParameter: KameleoonDataType[] | boolean[]\n ): Result<void, KameleoonError> {\n KameleoonLogger.debug`CALL: DataManager.storeData(visitorCode: ${firstParameter}, data: ${secondParameter})`;\n const result = this.dataStorage.read();\n const infoResult = this.infoStorage.read();\n\n if (!result.ok) {\n return result;\n }\n\n if (!infoResult.ok) {\n return infoResult;\n }\n\n const targetingData = result.data;\n const infoData = infoResult.data;\n\n if (typeof firstParameter === 'string') {\n this.mutUpdateTargetingData({\n infoData,\n targetingData,\n visitorCode: firstParameter,\n kameleoonData: secondParameter as KameleoonDataType[],\n extendTtl: true,\n });\n } else {\n for (const [visitorCode, kameleoonData] of Object.entries(\n firstParameter,\n )) {\n const extendTtl =\n typeof secondParameter[0] === 'boolean' ? secondParameter[0] : true;\n this.mutUpdateTargetingData({\n infoData,\n targetingData,\n visitorCode,\n kameleoonData,\n extendTtl,\n });\n }\n }\n\n this.cleanupData();\n this.infoStorage.write(infoResult.data);\n\n const writeResult = this.dataStorage.write(targetingData);\n KameleoonLogger.debug`RETURN: DataManager.storeData(visitorCode: ${firstParameter}, data: ${secondParameter}) -> (writeResult: ${writeResult})`;\n return writeResult;\n }\n\n public getTree(segment: SegmentType): Tree {\n if (this.targetingTrees.has(segment.id)) {\n return this.targetingTrees.get(segment.id)!;\n }\n\n const targetingTree = new Tree(segment);\n this.targetingTrees.set(segment.id, targetingTree);\n\n return targetingTree;\n }\n\n public clearTrees(): void {\n this.targetingTrees.clear();\n }\n\n public isPersistentCustomData(\n dataItem: KameleoonDataType,\n ): dataItem is CustomData {\n if (!this.persistentCustomDataIndexes.size) {\n return false;\n }\n\n if (Utilities.isCustomData(dataItem)) {\n return this.persistentCustomDataIndexes.has(dataItem.data.index);\n }\n\n return false;\n }\n\n public isUniqueIdentifier(visitorCode: string): boolean {\n const targetingData = this.getVisitorData(visitorCode);\n const uniqueIdentifier = targetingData?.[KameleoonData.UniqueIdentifier];\n\n return uniqueIdentifier?.value ?? false;\n }\n\n public getVisitorIdentifier(visitorCode: string): string {\n const infoResult = this.infoStorage.read();\n\n if (!infoResult.ok) {\n return visitorCode;\n }\n\n const infoData = infoResult.data;\n\n infoData.mappingIdentifiers ??= {};\n\n return (\n infoData.mappingIdentifiers[visitorCode]?.mappingIdentifier ?? visitorCode\n );\n }\n\n public getMappingIdentifier(\n visitorCode: string,\n ): MappingIdentifierType | undefined {\n const infoResult = this.infoStorage.read();\n if (!infoResult.ok) {\n return undefined;\n }\n const infoData = infoResult.data;\n if (infoData.mappingIdentifiers) {\n return infoData.mappingIdentifiers[visitorCode];\n }\n return undefined;\n }\n\n public setMappingIdentifier(\n visitorCode: string,\n mappingIdentifier: MappingIdentifierType,\n ): void {\n const infoResult = this.infoStorage.read();\n\n if (!infoResult.ok) {\n return;\n }\n\n const infoData = infoResult.data;\n\n infoData.mappingIdentifiers ??= {};\n\n const currentMappingIdentifier = infoData.mappingIdentifiers[visitorCode];\n if (\n !currentMappingIdentifier ||\n currentMappingIdentifier.timestamp < mappingIdentifier.timestamp\n ) {\n infoData.mappingIdentifiers[visitorCode] = mappingIdentifier;\n this.infoStorage.write(infoData);\n }\n }\n\n public getVisitorData(\n visitorCode: string,\n ): KameleoonVisitorDataType | undefined {\n this.cleanupData();\n\n const storageData = this.dataStorage.read();\n\n if (!storageData.ok) {\n return undefined;\n }\n\n let { visitorReference, data, isReference } =\n this.dataProcessor.dereferenceData(storageData.data, visitorCode);\n\n if (this.packageInfo.isServer && isReference && !data[visitorReference]) {\n const infoData = this.infoStorage.read();\n\n if (infoData.ok && infoData.data.mappingIdentifiers) {\n delete infoData.data.mappingIdentifiers[visitorCode];\n }\n delete data[visitorCode];\n visitorReference = visitorCode;\n }\n\n return data[visitorReference];\n }\n\n public getVisitorStoredDataTypes(visitorCode: string): Set<KameleoonData> {\n const targetingData = this.getVisitorData(visitorCode);\n\n if (!targetingData) {\n return new Set();\n }\n\n return new Set(Object.keys(targetingData) as KameleoonData[]);\n }\n\n public getLinkedVisitor(visitorCode: string): string | null {\n const storageData = this.dataStorage.read();\n\n if (!storageData.ok) {\n return null;\n }\n\n if (typeof storageData.data[visitorCode] === 'string') {\n return storageData.data[visitorCode] as string;\n }\n\n if (this.mappingIdentifierCustomDataIndex === null) {\n return null;\n }\n\n const visitorData = storageData.data[\n visitorCode\n ] as KameleoonVisitorDataType;\n\n if (!visitorData) {\n return null;\n }\n\n const customData = visitorData[KameleoonData.CustomData];\n\n if (customData && customData[this.mappingIdentifierCustomDataIndex]) {\n return (\n customData[this.mappingIdentifierCustomDataIndex] as CustomDataType\n ).value[0];\n }\n\n return null;\n }\n\n private mutUpdateTargetingData({\n infoData,\n visitorCode,\n kameleoonData,\n targetingData,\n extendTtl,\n }: MutUpdateTargetingDataParametersType) {\n for (const dataItem of kameleoonData) {\n // process custom data\n if (dataItem.data.type === KameleoonData.CustomData) {\n const customDataIsValid = this.processCustomData({\n infoData,\n customData: dataItem as CustomData,\n mutData: targetingData,\n visitorCode,\n });\n if (!customDataIsValid) {\n continue;\n }\n }\n\n // process metadata of conversions\n if (dataItem.data.type === KameleoonData.Conversion) {\n const conversion = dataItem as Conversion;\n if ((conversion._metadata?.length ?? 0) > 0) {\n conversion._metadata = conversion._metadata?.filter((item) =>\n this.trySetCustomDataIndexByName(item),\n );\n }\n }\n\n const expirationTime = this.dataProcessor.mutUpdateData({\n infoData,\n visitorCode,\n mutData: targetingData,\n dataItem,\n extendTtl,\n });\n\n const nextCleanup = infoData.nextDataCleanup;\n\n if (\n !nextCleanup ||\n (nextCleanup && expirationTime && expirationTime < nextCleanup)\n ) {\n infoData.nextDataCleanup = expirationTime;\n }\n\n if (dataItem.data.status === TrackingStatus.Unsent) {\n this.dataProcessor.mutAddUnsentData({\n mutData: infoData,\n visitorCode,\n dataType: dataItem.data.type,\n });\n }\n }\n }\n\n private cleanupData(): void {\n const result = this.dataStorage.read();\n const infoResult = this.infoStorage.read();\n\n if (!result.ok || !infoResult.ok) {\n return;\n }\n\n const data = result.data;\n const infoData = infoResult.data;\n\n const nextCleanup = infoData.nextDataCleanup;\n\n if (nextCleanup && nextCleanup < Date.now()) {\n const nextCleanupTime = this.dataProcessor.mutCleanupData(data, infoData);\n\n infoData.nextDataCleanup = nextCleanupTime || undefined;\n\n this.infoStorage.write(infoData);\n this.dataStorage.write(data);\n }\n }\n\n private processCustomData({\n infoData,\n mutData,\n customData,\n visitorCode,\n }: ProcessCustomDataManagerParametersType): boolean {\n const { data } = customData;\n\n const isDataValid = Boolean(data.value.length && data.value[0].length);\n\n if (!this.trySetCustomDataIndexByName(customData)) {\n return false;\n }\n if (data.index == CustomData.UNDEFINED_INDEX) {\n data.index = customData.index;\n }\n\n if (this.mappingIdentifierCustomDataIndex === data.index && isDataValid) {\n customData._isMappingIdentifier = true;\n\n const userId = data.value[0];\n if (visitorCode !== userId) {\n KameleoonLogger.info`Linked anonymous visitor ${visitorCode} with user ${userId}`;\n // --- Note ---\n // Associate linked visitor codes\n this.dataProcessor.createReference({\n infoData,\n mutData,\n visitorCode,\n linkedVisitor: data.value[0],\n });\n\n infoData.mappingIdentifiers ??= {};\n\n infoData.mappingIdentifiers[userId] = {\n mappingIdentifier: visitorCode,\n timestamp: Date.now(),\n };\n }\n }\n\n if (this.localCustomDataIndexes.has(data.index)) {\n customData.status = TrackingStatus.Sent;\n }\n return true;\n }\n\n private trySetCustomDataIndexByName(customData: CustomData): boolean {\n if (customData.index !== CustomData.UNDEFINED_INDEX) return true;\n if (!customData.name) return false;\n\n const cdIndex = this.customDataIndexByName.get(customData.name);\n if (cdIndex == null) return false;\n\n customData.index = cdIndex;\n return true;\n }\n\n get unsentDataVisitors(): string[] {\n const infoResult = this.infoStorage.read();\n\n if (!infoResult.ok) {\n return [];\n }\n\n return Object.keys(infoResult.data.unsentData);\n }\n\n get identifierCustomDataIndex(): number | null {\n return this.mappingIdentifierCustomDataIndex;\n }\n\n get trees(): Map<string, Tree> {\n return this.targetingTrees;\n }\n\n get storedCustomDataIndexes(): Set<number> {\n const result = this.dataStorage.read();\n\n if (!result.ok) {\n return new Set();\n }\n\n const targetingData = result.data;\n\n if (!(KameleoonData.CustomData in targetingData)) {\n return new Set();\n }\n\n const indexes = new Set<number>();\n\n for (const index in Object.keys(targetingData[KameleoonData.CustomData])) {\n indexes.add(Number(index));\n }\n\n return indexes;\n }\n\n set customDataIndexes(customData: CustomDataConfigurationType[]) {\n const [customDataLocalOnlyIndexes, persistentCustomDataIndexes]: Array<\n number[]\n > = [[], []];\n const customDataIndexByName = new Map<string, number>();\n\n customData.forEach((customData) => {\n if (customData.localOnly) {\n customDataLocalOnlyIndexes.push(customData.index);\n }\n\n if (customData.scope === CustomDataScope.Visitor) {\n persistentCustomDataIndexes.push(customData.index);\n }\n\n if (customData.name) {\n customDataIndexByName.set(customData.name, customData.index);\n }\n });\n\n this.mappingIdentifierCustomDataIndex =\n customData.find((customData) => customData.isMappingIdentifier)?.index ||\n null;\n\n this.localCustomDataIndexes = new Set(customDataLocalOnlyIndexes);\n this.persistentCustomDataIndexes = new Set(persistentCustomDataIndexes);\n this.customDataIndexByName = customDataIndexByName;\n }\n\n public getCustomDataIndexByName(name: string): number | undefined {\n return this.customDataIndexByName.get(name);\n }\n}\n",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));","import sha256 from 'crypto-js/sha256';\nimport { GetHashDoubleParamsType } from './types';\n\nexport class Hasher {\n static getHashDoubleForMEGroup(\n visitorIdentifier: string,\n meGroupName: string,\n ): number {\n return this.calculateHash(visitorIdentifier + meGroupName);\n }\n\n static getHashDouble({\n visitorIdentifier,\n id,\n respoolTime,\n }: GetHashDoubleParamsType): number {\n let suffix = '';\n\n if (respoolTime) {\n suffix += String(respoolTime);\n }\n\n return this.calculateHash(visitorIdentifier + id + suffix);\n }\n\n // --- Note ---\n // `hashDouble` is a seeded pseudo-random number between 0 and 1\n // used for deciding what variation to assign\n // `calculateHash` algorithm is consistent between every SDK\n // and will always provide same pseudo-random value for the same input parameters\n static calculateHash(seed: string): number {\n const hashDigest = sha256(seed).toString();\n\n return parseInt(hashDigest, 16) / Math.pow(2, 256);\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { Hasher } from 'src/hasher';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { VariationDataType } from 'src/storage';\nimport { Utilities } from 'src/utilities';\nimport {\n ConsentBlockingBehaviour,\n FeatureFlagType,\n RuleItemType,\n RuleType,\n VariationByExpositionType,\n} from 'src/clientConfiguration/types';\nimport {\n BaseVariationDataType,\n FeatureFlagVariationType,\n GetVariationParametersType,\n SimulatedVariationJson,\n UpdateDataStatusParametersType,\n} from './types';\nimport {\n FeatureFlagVariationsType,\n ForcedExperimentVariationDataType,\n ForcedFeatureVariationDataType,\n ForcedVariationRuleType,\n ForcedFeatureVariationType,\n ForcedVariationVarByExpType,\n IStorage,\n SimulatedVariationType,\n ForcedExperimentVariationType,\n LegalConsent,\n} from 'src/storage/types';\nimport { IVisitorCodeManager } from 'src/visitorCodeManager';\nimport { TrackingStatus } from 'src/types';\nimport { KameleoonLogger } from 'src/logging';\nimport { ClientConfiguration } from 'src/clientConfiguration';\nimport { KameleoonVisitorDataType } from 'src/kameleoonData/types';\nimport { CBScores } from 'src/kameleoonData/cbScores';\n\ninterface IVariationConfiguration {\n /**\n * @method getStoredVariations - obtains campaigns with according variations that are *already assigned* and *stored* in the `variationStorage`.\n */\n getStoredVariations(\n visitorCode: string,\n ): Result<FeatureFlagVariationsType, KameleoonError>;\n /**\n * @method updateStoredVariations - updates stored variations for the visitor\n */\n updateStoredVariations: (\n visitorCode: string,\n variationData: FeatureFlagVariationsType,\n ) => void;\n /**\n * @method getVariation - obtains variation for the rule of the feature flag which is both targeted and has a variation, if no such rule was found, returns empty rule with default `variationKey`, given an option `withAssignment` of `true` will also assign a new variation and save it in the storage\n */\n getVariation: (\n params: GetVariationParametersType,\n ) => Result<FeatureFlagVariationType, KameleoonError>;\n /**\n * @method getUnsentData - obtains the list of unsent variations\n */\n getUnsentData: (visitorCode: string) => BaseVariationDataType[];\n /**\n * @method getPendingData - obtains the list of pending variations\n */\n getPendingData: (visitorCode: string) => BaseVariationDataType[];\n /**\n * @method updateDataStatus - updates the status of the variations of given experiment ids with the given status\n */\n updateDataStatus: ({\n visitorCode,\n experimentIdList,\n status,\n }: UpdateDataStatusParametersType) => void;\n\n /**\n * @method updateForcedExperimentVariation - updates the forced variation for the visitor\n */\n updateForcedExperimentVariation: (\n visitorCode: string,\n experimentId: number,\n forcedExperimentVariation: ForcedExperimentVariationType | null,\n ) => void;\n\n /**\n * @method updateForcedFeatureVariations - updates the simulated variations for the visitor\n */\n updateForcedFeatureVariations: (\n visitorCode: string,\n forcedFeatureVariations: ForcedFeatureVariationType[],\n ) => void;\n\n /**\n * @method clearSimulatedVariations - clears the simulated feature variations for the visitor\n */\n clearSimulatedVariations: (visitorCode: string) => void;\n\n /**\n * @method getForcedFeatureVariation - obtains the forced feature variation for the visitor\n */\n getForcedFeatureVariation: (\n visitorCode: string,\n featureKey: string,\n ) => Result<ForcedFeatureVariationType | null, KameleoonError>;\n\n /**\n * @method getForcedExperimentVariation - obtains the forced experiment variation for the visitor\n */\n getForcedExperimentVariation: (\n visitorCode: string,\n experimentId: number,\n ) => Result<ForcedExperimentVariationType | null, KameleoonError>;\n}\n\nexport class VariationConfiguration implements IVariationConfiguration {\n private storage: IStorage<VariationDataType>;\n private storageForcedExperimentVariations: IStorage<ForcedExperimentVariationDataType>;\n private storageForcedFeatureVariations: IStorage<ForcedFeatureVariationDataType>;\n private visitorCodeManager: IVisitorCodeManager;\n private clientConfiguration: ClientConfiguration;\n\n constructor(\n externalStorage: IStorage<VariationDataType>,\n externalStorageForcedExperimentVariations: IStorage<ForcedExperimentVariationDataType>,\n externalStorageForcedFeatureVariations: IStorage<ForcedFeatureVariationDataType>,\n visitorCodeManager: IVisitorCodeManager,\n clientConfiguration: ClientConfiguration,\n ) {\n this.storage = externalStorage;\n this.storageForcedExperimentVariations =\n externalStorageForcedExperimentVariations;\n this.storageForcedFeatureVariations =\n externalStorageForcedFeatureVariations;\n this.visitorCodeManager = visitorCodeManager;\n this.clientConfiguration = clientConfiguration;\n visitorCodeManager.setVariationConfiguration(this);\n }\n\n public updateDataStatus({\n visitorCode,\n experimentIdList,\n status,\n }: UpdateDataStatusParametersType): Result<void, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n return result;\n }\n\n let updatedVariationData: VariationDataType = result.data;\n\n if (!updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode] = {};\n }\n\n for (const experimentId of experimentIdList) {\n updatedVariationData[visitorCode][experimentId] = {\n ...updatedVariationData[visitorCode][experimentId],\n status,\n };\n }\n\n return this.storage.write(updatedVariationData);\n }\n\n public getUnsentData(visitorCode: string): BaseVariationDataType[] {\n return this.getVariationData(\n visitorCode,\n (status) => status === TrackingStatus.Unsent,\n );\n }\n\n public getVisitorsWithUnsentData(): string[] {\n KameleoonLogger.debug`CALL: VariationConfiguration.unsentDataVisitors()`;\n const result = this.storage.read();\n\n if (!result.ok) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.unsentDataVisitors() -> (result: ${result})`;\n return [];\n }\n\n const visitors: string[] = [];\n for (const [visitorCode, variations] of Object.entries(result.data)) {\n if (\n Object.values(variations).some(\n (v) => v.status === TrackingStatus.Unsent,\n )\n ) {\n visitors.push(visitorCode);\n }\n }\n\n KameleoonLogger.debug`RETURN: VariationConfiguration.unsentDataVisitors() -> (visitors: ${visitors})`;\n return visitors;\n }\n\n public getPendingData(visitorCode: string): BaseVariationDataType[] {\n return this.getVariationData(\n visitorCode,\n (status) => status === TrackingStatus.Pending,\n );\n }\n\n public getStoredVariations(\n visitorCode: string,\n ): Result<FeatureFlagVariationsType, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n return result;\n }\n\n const featureFlagVariations = result.data[visitorCode];\n\n if (!featureFlagVariations) {\n return Err(\n new KameleoonError(KameleoonException.StorageRead, visitorCode),\n );\n }\n\n return Ok(featureFlagVariations);\n }\n\n public getVariation({\n visitorCode,\n visitorIdentifier,\n featureFlag,\n targetingData,\n packageInfo,\n clientConfiguration,\n dataManager,\n legalConsent,\n track = true,\n withAssignment = false,\n }: GetVariationParametersType): Result<\n FeatureFlagVariationType,\n KameleoonError\n > {\n KameleoonLogger.debug`CALL: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment})`;\n\n const {\n rules,\n featureKey,\n id: featureFlagId,\n defaultVariationKey,\n } = featureFlag;\n\n const consent = clientConfiguration.isConsentRequired\n ? legalConsent\n : LegalConsent.Given;\n\n for (const rule of rules) {\n const {\n segment,\n experimentId,\n id,\n exposition,\n respoolTime,\n variationByExposition,\n } = rule;\n\n const forcedVariationData = this.getForcedExperimentVariation(\n visitorCode,\n rule.experimentId,\n );\n let forcedVariation = null;\n if (forcedVariationData.ok) {\n forcedVariation = forcedVariationData.data;\n if (forcedVariation && forcedVariation.forceTargeting) {\n KameleoonLogger.info`Visitor ${visitorCode} has been forced targeted for ${rule}`;\n\n const targetedVariation = this.createAndSaveForcedTargetedVariation(\n visitorCode,\n featureFlag,\n rule,\n forcedVariation,\n track,\n withAssignment,\n );\n\n KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return Ok(targetedVariation);\n }\n }\n\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n experimentId,\n targetingData,\n packageInfo,\n clientConfiguration,\n dataManager,\n variationConfiguration: this,\n });\n\n if (!targetingResult.ok) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetingResult})`;\n return targetingResult;\n }\n\n if (!targetingResult.data) {\n continue;\n }\n\n KameleoonLogger.info`Visitor ${visitorCode} has been targeted for ${rule}`;\n\n if (forcedVariation) {\n const targetedVariation = this.createAndSaveForcedTargetedVariation(\n visitorCode,\n featureFlag,\n rule,\n forcedVariation,\n track,\n withAssignment,\n );\n KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return Ok(targetedVariation);\n }\n\n // --- Note ---\n // Calculate new variation (and assign it if `withAssignment` is `true`)\n // First the the exposed rule is calculated and then the variation inside of it\n const ruleHash = Hasher.getHashDouble({\n visitorIdentifier,\n respoolTime,\n id: String(id),\n });\n KameleoonLogger.debug`Calculated ruleHash: ${ruleHash} for code: ${visitorIdentifier}`;\n\n if (ruleHash <= exposition) {\n // Checking if the evaluation is blocked due to the consent policy\n if (\n consent == LegalConsent.NotGiven &&\n rule.type == RuleType.EXPERIMENTATION\n ) {\n const behaviour = clientConfiguration.consentBlockingBehaviour;\n if (behaviour == ConsentBlockingBehaviour.PartiallyBlocked) {\n break;\n }\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagEnvironmentDisabled,\n `Evaluation of ${rule} is blocked because consent is not provided for visitor '${visitorCode}'`,\n ),\n );\n }\n // evaluate with CB scores if applicable\n let variation = this.evaluateCBScores(\n rule,\n visitorIdentifier,\n targetingData,\n );\n\n if (!variation) {\n const variationHash = Hasher.getHashDouble({\n visitorIdentifier,\n respoolTime,\n id: String(experimentId),\n });\n\n KameleoonLogger.debug`Calculated variationHash: ${variationHash} for code: ${visitorIdentifier}`;\n\n variation = Utilities.getVariationByHash(\n variationByExposition,\n variationHash,\n );\n }\n\n if (variation) {\n if (withAssignment) {\n this.updateStoredVariations(visitorCode, {\n [experimentId]: {\n variationId: variation.variationId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n status: track ? TrackingStatus.Unsent : TrackingStatus.Sent,\n },\n });\n }\n\n const targetedVariation = {\n variationId: variation.variationId,\n variationKey: variation.variationKey,\n rule,\n featureFlagId,\n featureKey,\n experimentId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n };\n KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return Ok(targetedVariation);\n }\n }\n\n if (rule.type === RuleType.TARGETED_DELIVERY) {\n const targetedVariation = {\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n isTargetedRule: true,\n };\n KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return Ok(targetedVariation);\n }\n }\n\n const targetedVariation = {\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n isTargetedRule: false,\n };\n KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return Ok(targetedVariation);\n }\n\n private createAndSaveForcedTargetedVariation(\n visitorCode: string,\n featureFlag: FeatureFlagType,\n rule: RuleItemType,\n forcedVariation: ForcedExperimentVariationType,\n track: boolean,\n withAssignment: boolean,\n ): FeatureFlagVariationType {\n const targetedVariation = {\n variationKey: forcedVariation.varByExp!.variationKey,\n variationId: forcedVariation.varByExp!.variationId,\n rule,\n featureFlagId: featureFlag.id,\n featureKey: featureFlag.featureKey,\n experimentId: rule.experimentId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n };\n if (withAssignment) {\n this.updateStoredVariations(visitorCode, {\n [rule.experimentId]: {\n variationId: targetedVariation.variationId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n status: track ? TrackingStatus.Unsent : TrackingStatus.Sent,\n },\n });\n }\n return targetedVariation;\n }\n\n public updateStoredVariations(\n visitorCode: string,\n variationData: FeatureFlagVariationsType,\n ): Result<void, KameleoonError> {\n KameleoonLogger.debug`CALL: VariationConfiguration.updateStoredVariations(visitorCode: ${visitorCode}, variationData: ${variationData})`;\n const result = this.storage.read();\n\n if (!result.ok) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${visitorCode}, variationData: ${variationData}) -> (result: ${result})`;\n return result;\n }\n\n let updatedVariationData: VariationDataType = result.data;\n\n if (!updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode] = {};\n }\n for (const experimentId in variationData) {\n updatedVariationData[visitorCode][experimentId] =\n variationData[experimentId];\n }\n\n const resultWrite = this.storage.write(updatedVariationData);\n KameleoonLogger.debug`RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${visitorCode}, variationData: ${variationData}) -> (resultWrite: ${resultWrite})`;\n return resultWrite;\n }\n\n private getVariationData(\n visitorCode: string,\n filter: (status: TrackingStatus) => boolean,\n ): BaseVariationDataType[] {\n const result = this.getStoredVariations(visitorCode);\n\n if (!result.ok) {\n return [];\n }\n\n const resultData: BaseVariationDataType[] = [];\n\n for (const [experimentId, variationData] of Object.entries(result.data)) {\n if (filter(variationData.status)) {\n resultData.push({\n experimentId: Number(experimentId),\n variationId: variationData.variationId,\n isTargetedRule: variationData.isTargetedRule,\n });\n }\n }\n\n return resultData;\n }\n\n public updateForcedExperimentVariation(\n visitorCode: string,\n experimentId: number,\n forcedExperimentVariation: ForcedExperimentVariationType | null,\n ): Result<void, KameleoonError> {\n KameleoonLogger.debug`CALL: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}, forcedExperimentVariation: ${forcedExperimentVariation})`;\n const result = this.storageForcedExperimentVariations.read();\n\n if (!result.ok) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}, forcedExperimentVariation: ${forcedExperimentVariation}) -> (result: ${result})`;\n return result;\n }\n\n let updatedForcedVariationData: ForcedExperimentVariationDataType =\n result.data;\n\n if (!updatedForcedVariationData[visitorCode]) {\n updatedForcedVariationData[visitorCode] = {};\n }\n\n if (forcedExperimentVariation) {\n updatedForcedVariationData[visitorCode][experimentId] =\n forcedExperimentVariation;\n } else {\n delete updatedForcedVariationData[visitorCode][experimentId];\n }\n\n const resultWrite = this.storageForcedExperimentVariations.write(\n updatedForcedVariationData,\n );\n KameleoonLogger.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}, forcedExperimentVariation: ${forcedExperimentVariation}) -> (resultWrite: ${resultWrite})`;\n return resultWrite;\n }\n\n public updateForcedFeatureVariations(\n visitorCode: string,\n forcedFeatureVariations: ForcedFeatureVariationType[],\n ): Result<void, KameleoonError> {\n KameleoonLogger.debug`CALL: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${visitorCode}, forcedFeatureVariations: ${forcedFeatureVariations})`;\n const result = this.storageForcedFeatureVariations.read();\n\n if (!result.ok) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${visitorCode}, forcedFeatureVariations: ${forcedFeatureVariations}) -> (result: ${result})`;\n return result;\n }\n\n let updatedVariationData: ForcedFeatureVariationDataType = result.data;\n if (!updatedVariationData[0]) {\n updatedVariationData[0] = {};\n }\n if (!updatedVariationData[1]) {\n updatedVariationData[1] = {};\n }\n\n const updatedForcedFeatureVariationData = updatedVariationData[0];\n const updatedSimulatedFeatureVariationData = updatedVariationData[1];\n\n if (!updatedForcedFeatureVariationData[visitorCode]) {\n updatedForcedFeatureVariationData[visitorCode] = {};\n }\n if (!updatedSimulatedFeatureVariationData[visitorCode]) {\n updatedSimulatedFeatureVariationData[visitorCode] = {};\n }\n\n forcedFeatureVariations.forEach((forcedFeatureVariation) => {\n const targetData = forcedFeatureVariation.simulated\n ? updatedSimulatedFeatureVariationData[visitorCode]\n : updatedForcedFeatureVariationData[visitorCode];\n targetData[forcedFeatureVariation.featureKey] = forcedFeatureVariation;\n });\n\n const resultWrite =\n this.storageForcedFeatureVariations.write(updatedVariationData);\n KameleoonLogger.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${visitorCode}, forcedFeatureVariations: ${forcedFeatureVariations}) -> (resultWrite: ${resultWrite})`;\n return resultWrite;\n }\n\n public clearSimulatedVariations(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n KameleoonLogger.debug`CALL: VariationConfiguration.clearSimulatedVariations(visitorCode: ${visitorCode})`;\n const result = this.storageForcedFeatureVariations.read();\n\n if (!result.ok) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${visitorCode}) -> (result: ${result})`;\n return result;\n }\n let resultWrite: Result<void, KameleoonError>;\n const updatedVariationData: ForcedFeatureVariationDataType = result.data;\n\n if (updatedVariationData?.[1]?.[visitorCode]) {\n delete updatedVariationData[1][visitorCode];\n resultWrite =\n this.storageForcedFeatureVariations.write(updatedVariationData);\n } else {\n resultWrite = Ok();\n }\n\n KameleoonLogger.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${visitorCode}) -> (resultWrite: ${resultWrite})`;\n return resultWrite;\n }\n\n public getForcedFeatureVariation(\n visitorCode: string,\n featureKey: string,\n ): Result<ForcedFeatureVariationType | null, KameleoonError> {\n KameleoonLogger.debug`CALL: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey})`;\n\n const result = this.storageForcedFeatureVariations.read();\n if (!result.ok) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (simulatedResult: ${result})`;\n return result;\n }\n\n const simulatedData = result.data[1]?.[visitorCode]?.[featureKey];\n\n if (simulatedData) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (simulatedData: ${simulatedData})`;\n return Ok(simulatedData);\n }\n\n const forcedData = result.data[0]?.[visitorCode]?.[featureKey];\n\n KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (forcedData: ${forcedData})`;\n return Ok(forcedData);\n }\n\n public getForcedExperimentVariation(\n visitorCode: string,\n experimentId: number,\n ): Result<ForcedExperimentVariationType | null, KameleoonError> {\n KameleoonLogger.debug`CALL: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId})`;\n\n const forcedResult = this.storageForcedExperimentVariations.read();\n if (!forcedResult.ok) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}) -> (forcedResult: ${forcedResult})`;\n return forcedResult;\n }\n\n const forcedData = forcedResult.data[visitorCode]?.[experimentId];\n\n KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}) -> (forcedExperiment: ${forcedData})`;\n return Ok(forcedData);\n }\n\n private parseForcedVariationData(\n simulatedVariation: SimulatedVariationType,\n simulated = false,\n ): ForcedFeatureVariationType | null {\n const featureFlag = this.clientConfiguration.featureFlags.get(\n simulatedVariation.featureKey,\n );\n if (!featureFlag) {\n KameleoonLogger.error`Simulated feature flag '${simulatedVariation.featureKey}' not found`;\n return null;\n }\n let forcedVariation = null;\n if (simulatedVariation.experimentId === 0) {\n forcedVariation = {\n featureKey: simulatedVariation.featureKey,\n rule: null,\n varByExp: null,\n simulated: simulated,\n };\n return forcedVariation;\n }\n for (const rule of featureFlag.rules) {\n if (simulatedVariation.experimentId !== rule.experimentId) {\n continue;\n }\n const varByExp = rule.variationByExposition.find(\n (varByExp) => varByExp.variationId === simulatedVariation.variationId,\n );\n if (varByExp) {\n forcedVariation = {\n featureKey: simulatedVariation.featureKey,\n rule: {\n type: rule.type,\n experimentId: rule.experimentId,\n } as ForcedVariationRuleType,\n varByExp: {\n variationKey: varByExp.variationKey,\n variationId: varByExp.variationId,\n } as ForcedVariationVarByExpType,\n simulated: simulated,\n };\n return forcedVariation;\n }\n }\n KameleoonLogger.error`Simulated variation ${simulatedVariation.variationId} not found`;\n return null;\n }\n\n public simulatedVariationFromJson(\n featureKey: string,\n data: any,\n ): ForcedFeatureVariationType | null {\n KameleoonLogger.debug`CALL: VariationConfiguration.simulatedVariationFromJson(featureKey: ${featureKey}, data: ${data})`;\n if (!this.isSimulatedVariationJson(data)) {\n return null;\n }\n const forcedVariation = this.parseForcedVariationData(\n {\n featureKey,\n variationId: data.varId,\n experimentId: data.expId,\n },\n true,\n );\n KameleoonLogger.debug`RETURN: VariationConfiguration.simulatedVariationFromJson(featureKey: ${featureKey}, data: ${data}) -> (forcedVariation: ${forcedVariation})`;\n return forcedVariation;\n }\n\n private isSimulatedVariationJson(\n value: any,\n ): value is SimulatedVariationJson {\n return value && (typeof value.expId === 'number' || value.expId === null);\n }\n\n private evaluateCBScores(\n rule: RuleItemType,\n visitorIdentifier: string,\n targetingData?: KameleoonVisitorDataType,\n ): VariationByExpositionType | null {\n if (!targetingData || !targetingData.cbScores) {\n return null;\n }\n KameleoonLogger.debug`CALL: KameleoonClientImpl.evaluateCBScores(rule: ${rule}, targetingData: ${targetingData}, visitorIdentifier: ${visitorIdentifier})`;\n\n const experimentId = rule.experimentId;\n const varIdGroupByScores = new CBScores(targetingData.cbScores.cbs)\n .getValues()\n .get(experimentId);\n\n let variation: VariationByExpositionType | null = null;\n if (varIdGroupByScores !== undefined) {\n const varByExps = rule.variationByExposition;\n\n const varByExpExistInCBS = varIdGroupByScores\n .map((varGroup) =>\n varByExps.filter((varByExp) =>\n varGroup.ids.includes(varByExp.variationId),\n ),\n )\n .find((varByExpExistInCBS) => varByExpExistInCBS.length > 0);\n if (varByExpExistInCBS) {\n let idx = 0;\n if (varByExpExistInCBS.length > 1) {\n const variationHash = Hasher.getHashDouble({\n visitorIdentifier,\n respoolTime: rule.respoolTime,\n id: String(experimentId),\n });\n KameleoonLogger.debug`Calculated cbs hash ${variationHash} for code ${visitorIdentifier}`;\n idx = Math.min(\n Math.floor(variationHash * varByExpExistInCBS.length),\n varByExpExistInCBS.length - 1,\n );\n }\n variation = varByExpExistInCBS[idx];\n }\n }\n\n KameleoonLogger.debug`RETURN: KameleoonClientImpl.evaluateCBScores(rule: ${rule}, targetingData: ${targetingData}, visitorIdentifier: ${visitorIdentifier}) -> (variation: ${variation})`;\n return variation;\n }\n}\n","export const REAL_TIME_EVENT = 'configuration-update-event';\n","import { KameleoonLogger } from 'src/logging/kameleoonLogger';\nimport { REAL_TIME_EVENT } from './constants';\nimport {\n EventHandlerType,\n EventSourceParametersType,\n IExternalEventSource,\n RealTimeEventType,\n} from './types';\n\nexport interface IEventSource {\n readonly isOpen: boolean;\n open: (onEvent: EventHandlerType) => void;\n close: () => void;\n onError: (callback: (error: Event) => void) => void;\n}\n\n// --- Note ---\n// Named `KameleoonEventSource` to avoid collision with native `EventSource`\nexport class KameleoonEventSource implements IEventSource {\n private eventSource: IExternalEventSource;\n private siteCode: string;\n private url: string;\n private isConnectionOpen: boolean;\n\n constructor({\n siteCode,\n externalEventSource,\n urlProvider,\n }: EventSourceParametersType) {\n this.url = urlProvider.getEventSourceUrl();\n this.siteCode = siteCode;\n this.eventSource = externalEventSource;\n this.isConnectionOpen = false;\n }\n\n get isOpen(): boolean {\n return this.isConnectionOpen;\n }\n\n public open(onEvent: EventHandlerType): void {\n this.eventSource.open({\n onEvent: this.handleMessage(onEvent),\n url: this.url,\n eventType: REAL_TIME_EVENT,\n });\n this.isConnectionOpen = true;\n KameleoonLogger.info`Established a new SSE connection with: ${this.url}`;\n }\n\n public close(): void {\n this.eventSource.close();\n this.isConnectionOpen = false;\n KameleoonLogger.info`SSE connection: '${this.url}' was successfully closed`;\n }\n\n public onError(callback: (error: Event) => void): void {\n if (!this.eventSource.onError) {\n KameleoonLogger.warning(\n \"EventSource does not have `onError` method provided. Real-time errors won't be handled.\",\n );\n return;\n }\n\n this.eventSource.onError(callback);\n }\n\n private handleMessage(\n onEvent: EventHandlerType,\n ): (message: MessageEvent) => void {\n const onMessage = (message: MessageEvent): void => {\n KameleoonLogger.debug`Received new message from: ${this.url}`;\n const event: RealTimeEventType = JSON.parse(message.data);\n const { siteCode: eventSiteCode, ts } = event;\n\n if (this.siteCode === eventSiteCode) {\n onEvent(ts);\n }\n };\n\n return onMessage;\n }\n}\n","export const VISITOR_CODE_LENGTH = 16;\nexport const VISITOR_CODE_MAX_LENGTH = 255;\nexport const DEFAULT_MAX_AGE = 60 * 60 * 24 * 365;\nexport const ZERO_MAX_AGE = 0;\nexport const PATH = '/';\n","import { Err, Ok, Result } from 'ts-res';\nimport { KameleoonStorageKey } from 'src/storage';\nimport { SetDataCallbackParametersType } from 'src/types';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { IVisitorCodeManager } from './types';\nimport {\n DEFAULT_MAX_AGE,\n PATH,\n VISITOR_CODE_LENGTH,\n VISITOR_CODE_MAX_LENGTH,\n} from './constants';\nimport { KameleoonLogger } from 'src/logging';\nimport { VariationConfiguration } from \"src/variationConfiguration\";\nimport { ForcedFeatureVariationType } from \"src/storage/types\";\n\n/**\n * VisitorCodeManager - a class which manages visitor codes using cookies, offering functions to generate, retrieve,\n * and handle these codes while considering user consent.\n **/\nexport class VisitorCodeManager implements IVisitorCodeManager {\n private variationConfiguration?: VariationConfiguration;\n private isConsentRequired: boolean = false;\n private setDataCallback?: (params: SetDataCallbackParametersType) => void;\n private getDataCallback?: (key: string) => string | null;\n\n set consentRequired(isRequired: boolean) {\n this.isConsentRequired = isRequired;\n }\n\n get consentRequired(): boolean {\n return this.isConsentRequired;\n }\n\n set getData(callback: (key: string) => string) {\n this.getDataCallback = callback;\n }\n\n set setData(callback: (params: SetDataCallbackParametersType) => void) {\n this.setDataCallback = callback;\n }\n\n get setData(): (params: SetDataCallbackParametersType) => void {\n if (this.setDataCallback) {\n return this.setDataCallback;\n }\n\n throw new Error('Missing setDataCallback!');\n }\n\n public validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length === 0) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeEmpty));\n }\n\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n public getVisitorCode(defaultVisitorCode?: string): string {\n KameleoonLogger.debug`CALL: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${defaultVisitorCode})`;\n if (!this.getDataCallback || !this.setDataCallback) {\n throw new Error(\n 'Missing getDataCallback or setDataCallback methods in getVisitorCode!',\n );\n }\n\n let visitorCode;\n\n const existingVisitorCode = this.getDataCallback(\n KameleoonStorageKey.VisitorCode,\n );\n\n if (existingVisitorCode) {\n visitorCode = existingVisitorCode;\n }\n\n if (!visitorCode) {\n if (defaultVisitorCode) {\n this.validateVisitorCode(defaultVisitorCode).throw();\n visitorCode = defaultVisitorCode;\n KameleoonLogger.debug`Used default visitor code: ${visitorCode}`;\n } else {\n visitorCode = this.generateVisitorCode();\n KameleoonLogger.debug`Generated new visitor code: ${visitorCode}`;\n }\n }\n\n this.processSimulatedVariations(visitorCode);\n\n if (!this.isConsentRequired) {\n this.setDataCallback({\n visitorCode,\n key: KameleoonStorageKey.VisitorCode,\n maxAge: DEFAULT_MAX_AGE,\n path: PATH,\n });\n }\n\n KameleoonLogger.debug`RETURN: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${defaultVisitorCode}) -> (visitorCode: ${visitorCode})`;\n return visitorCode;\n }\n\n private processSimulatedVariations(visitorCode: string): void {\n if (this.variationConfiguration) {\n const simulatedVariationsData = this.getSimulatedVariations(visitorCode);\n try {\n this.variationConfiguration.clearSimulatedVariations(visitorCode).throw();\n if (simulatedVariationsData !== null && simulatedVariationsData.length > 0) {\n this.variationConfiguration.updateForcedFeatureVariations(visitorCode, simulatedVariationsData).throw();\n }\n } catch (error) {\n if (error instanceof Error) {\n KameleoonLogger.error`Failed to process simulated variations: ${error.message}`;\n }\n }\n }\n }\n\n private getSimulatedVariations(\n visitorCode: string,\n ): ForcedFeatureVariationType[] | null {\n KameleoonLogger.debug`CALL: VisitorCodeManager.getSimulatedVariations(visitorCode: ${visitorCode})`;\n const simulatedVariationsData = this.getDataCallback!(\n KameleoonStorageKey.KameleoonSimulationFFData,\n );\n\n let variations: ForcedFeatureVariationType[] | null = null;\n if (\n typeof simulatedVariationsData === 'string' &&\n simulatedVariationsData.length > 0\n ) {\n try {\n const parsed = JSON.parse(decodeURIComponent(simulatedVariationsData));\n if (parsed && typeof parsed === 'object') {\n variations = Object.entries(parsed)\n .map(([key, value]) => {\n return this.variationConfiguration!.simulatedVariationFromJson(key, value);\n })\n .filter((variation) => variation !== null) as ForcedFeatureVariationType[];\n }\n } catch (error) {\n if (error instanceof Error) {\n KameleoonLogger.error`Failed to parse simulated variations: ${error.message}`;\n }\n }\n }\n KameleoonLogger.debug`RETURN: VisitorCodeManager.getSimulatedVariations(visitorCode: ${visitorCode}) -> (variations: ${variations})`;\n return variations;\n }\n\n private generateVisitorCode(): string {\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const randomCharacterArray: string[] = [];\n\n for (let i = 0; i < VISITOR_CODE_LENGTH; i++) {\n randomCharacterArray.push(\n characters[Math.floor(Math.random() * characters.length)],\n );\n }\n\n return randomCharacterArray.join('');\n }\n\n public setVariationConfiguration(variationConfiguration: VariationConfiguration): void {\n if (!this.variationConfiguration) {\n this.variationConfiguration = variationConfiguration;\n }\n }\n}\n","enum Byte {\n Kb = 1_000,\n Mb = 1_000 * Byte.Kb,\n Gb = 1_000 * Byte.Mb,\n}\n\nexport const MAX_BODY_SIZE = 10 * Byte.Mb;\nexport const SYMBOL_SIZE = 4;\n","import { Err, Ok, Result } from 'ts-res';\nimport {\n Conversion,\n KameleoonData,\n KameleoonDataType,\n PageView,\n} from 'src/kameleoonData';\nimport { UrlEventType, UrlParameter } from 'src/requester';\nimport { IExternalPRNG, Utilities } from 'src/utilities';\nimport {\n AddDataParametersType,\n AddVisitorTrackingLineParametersType,\n GetTrackingBodyResultType,\n VisitorTrackingDataType,\n} from './types';\nimport { MAX_BODY_SIZE, SYMBOL_SIZE } from './constants';\nimport { BaseVariationDataType } from 'src/variationConfiguration/types';\nimport { KameleoonLogger } from 'src/logging';\nimport { StaticData } from 'src/kameleoonData/staticData';\n\ninterface IBodyProvider {\n getTrackingBody: (visitorCode: string) => GetTrackingBodyResultType;\n addData: ({\n visitorCode,\n variationData,\n visitorData,\n userAgent,\n isConsentProvided,\n isMappingIdentifier,\n }: AddDataParametersType) => Result<void, void>;\n}\n\nexport class BodyProvider implements IBodyProvider {\n private prng: IExternalPRNG;\n private currentSize = 0;\n private resultBody: string[] = [];\n private hasUserAgent = false;\n private trackingVisitors: {\n [visitorCode: string]: VisitorTrackingDataType;\n } = {};\n\n constructor(prng: IExternalPRNG) {\n this.prng = prng;\n }\n\n public getTrackingBody(): GetTrackingBodyResultType {\n const result = {\n body: this.resultBody.join('\\n'),\n hasUserAgent: this.hasUserAgent,\n };\n\n this.cleanup();\n\n return result;\n }\n\n public addData({\n visitorCode,\n variationData,\n visitorData,\n userAgent,\n isConsentProvided,\n isMappingIdentifier,\n }: AddDataParametersType): Result<void, void> {\n const lines: string[] = [];\n\n const variationDataLines = this.getVariationDataLines(variationData);\n const visitorDataLines = this.getVisitorDataLines(visitorData);\n\n lines.push(...variationDataLines, ...visitorDataLines);\n\n return this.addVisitorTrackingLines({\n visitorCode,\n lines,\n userAgent,\n isConsentProvided,\n isMappingIdentifier,\n });\n }\n\n private getVisitorDataLines(\n visitorData: (KameleoonDataType | StaticData)[],\n ): string[] {\n const lines: string[] = [];\n\n for (const data of visitorData) {\n let nonce;\n\n if (\n !(data instanceof StaticData) &&\n (data.data.type === KameleoonData.Conversion ||\n data.data.type === KameleoonData.PageView)\n ) {\n const nonceValue = (data as Conversion | PageView).data.nonce;\n\n if (nonceValue) {\n nonce = nonceValue;\n } else {\n nonce = Utilities.getNonce(this.prng);\n (data as Conversion | PageView).data.nonce = nonce;\n }\n }\n\n if (!nonce) {\n nonce = Utilities.getNonce(this.prng);\n }\n\n lines.push(data.url + UrlParameter.Nonce + nonce);\n }\n\n return lines;\n }\n\n private getVariationDataLines(\n variationData: BaseVariationDataType[],\n ): string[] {\n const lines: string[] = [];\n\n variationData.forEach((item) => {\n lines.push(\n UrlEventType.Experiment +\n UrlParameter.Id +\n item.experimentId +\n UrlParameter.VariationId +\n item.variationId +\n UrlParameter.Nonce +\n Utilities.getNonce(this.prng),\n );\n });\n\n return lines;\n }\n\n private prepareVisitorBody(visitorCode: string): Result<void, void> {\n const visitorData = this.trackingVisitors[visitorCode];\n\n if (!visitorData) {\n return Err();\n }\n\n const { lines, userAgent, isMappingIdentifier, isConsentProvided } =\n visitorData;\n\n const identifier = this.getIdentifier(visitorCode, isMappingIdentifier);\n\n if (lines.length) {\n lines.forEach((value, index) => {\n lines[index] = value + identifier;\n });\n KameleoonLogger.debug`Sending tracking request for unsent data ${lines} of visitor ${visitorCode} with given (or not required) consent ${isConsentProvided}`;\n } else if (isConsentProvided) {\n const activityLine = this.getActivityLine();\n\n lines.push(activityLine + identifier);\n KameleoonLogger.debug`Sending tracking request for activity of visitor ${visitorCode} with given consent`;\n } else {\n KameleoonLogger.debug`No data to send for visitor ${visitorCode} with no consent`;\n }\n\n if (userAgent && lines.length) {\n lines[0] += UrlParameter.UserAgent + userAgent;\n this.hasUserAgent = true;\n }\n\n // --- Note ---\n // Improve after `ts-res` chaining update\n const result = this.checkSize(lines);\n\n if (result.ok) {\n this.resultBody.push(...lines);\n }\n\n return result;\n }\n\n private cleanup(): void {\n this.currentSize = 0;\n this.resultBody = [];\n this.hasUserAgent = false;\n this.trackingVisitors = {};\n }\n\n private checkSize(lines: string[]): Result<void, void> {\n let size = 0;\n size += lines.reduce((acc, line) => acc + line.length * SYMBOL_SIZE, 0);\n\n if (size + this.currentSize > MAX_BODY_SIZE) {\n return Err();\n }\n\n this.currentSize += size;\n\n return Ok();\n }\n\n private addVisitorTrackingLines({\n visitorCode,\n lines,\n userAgent,\n isConsentProvided,\n isMappingIdentifier,\n }: AddVisitorTrackingLineParametersType): Result<void, void> {\n if (!this.trackingVisitors[visitorCode]) {\n this.trackingVisitors[visitorCode] = {\n isMappingIdentifier,\n isConsentProvided,\n userAgent,\n lines,\n };\n } else {\n if (userAgent) {\n this.trackingVisitors[visitorCode].userAgent = userAgent;\n }\n\n this.trackingVisitors[visitorCode].lines.push(...lines);\n }\n\n return this.prepareVisitorBody(visitorCode);\n }\n\n private getActivityLine(): string {\n return (\n UrlEventType.Activity + UrlParameter.Nonce + Utilities.getNonce(this.prng)\n );\n }\n\n private getIdentifier(\n visitorCode: string,\n isMappingIdentifier: boolean,\n ): string {\n const identifier = isMappingIdentifier\n ? UrlParameter.MappingValue\n : UrlParameter.VisitorCode;\n\n return identifier + encodeURIComponent(visitorCode);\n }\n}\n","import {\n CustomData,\n DataManager,\n KameleoonData,\n KameleoonDataType,\n} from 'src/kameleoonData';\nimport { Requester } from 'src/requester';\nimport { VariationConfiguration } from 'src/variationConfiguration';\nimport { PendingDataType, TrackerParametersType } from './types';\nimport { TrackingStatus } from 'src/types';\nimport { BaseVariationDataType } from 'src/variationConfiguration/types';\nimport { BodyProvider } from './bodyProvider';\nimport { IStorage, TrackingDataType } from 'src/storage';\nimport { KameleoonLogger } from 'src/logging';\nimport { ScheduledVisitorsType } from 'src/storage/types';\nimport { StaticData } from 'src/kameleoonData/staticData';\nimport { ClientConfiguration } from 'src/clientConfiguration';\n\nexport interface ITracker {\n scheduleVisitor: (visitorCode: string, isConsentProvided: boolean) => void;\n}\n\nexport class Tracker implements ITracker {\n private dataManager: DataManager;\n private variationConfiguration: VariationConfiguration;\n private requester: Requester;\n private bodyProvider: BodyProvider;\n private intervalId: NodeJS.Timeout | null = null;\n private trackingStorage: IStorage<TrackingDataType>;\n private clientConfiguration: ClientConfiguration;\n\n constructor({\n dataManager,\n trackingStorage,\n variationConfiguration,\n trackingInterval,\n requester,\n prng,\n clientConfiguration,\n }: TrackerParametersType) {\n KameleoonLogger.debug`CALL: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${trackingInterval}, requester, prng, clientConfiguration)`;\n this.dataManager = dataManager;\n this.trackingStorage = trackingStorage;\n this.variationConfiguration = variationConfiguration;\n this.requester = requester;\n this.bodyProvider = new BodyProvider(prng);\n this.clientConfiguration = clientConfiguration;\n\n try {\n this.intervalId = setInterval(() => {\n this.sendDataAll();\n }, trackingInterval);\n } catch (err) {\n this.intervalId && clearInterval(this.intervalId);\n\n throw err;\n }\n KameleoonLogger.debug`RETURN: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${trackingInterval}, requester, prng, clientConfiguration)`;\n }\n\n public scheduleVisitor(\n visitorCode: string,\n isConsentProvided: boolean,\n ): void {\n KameleoonLogger.debug`CALL: Tracker.scheduleVisitor(visitorCode: ${visitorCode}, isConsentProvided: ${isConsentProvided})`;\n this.trackingStorage.read().and((trackingData) => {\n trackingData.scheduledVisitors[`_${visitorCode}`] = { isConsentProvided };\n this.trackingStorage.write(trackingData);\n });\n KameleoonLogger.debug`RETURN: Tracker.scheduleVisitor(visitorCode: ${visitorCode}, isConsentProvided: ${isConsentProvided})`;\n }\n\n private checkIsIdentifier(visitorCode: string): boolean {\n const isUniqueIdentifier = this.dataManager.isUniqueIdentifier(visitorCode);\n const mappingIdentifier =\n this.dataManager.getMappingIdentifier(visitorCode)?.mappingIdentifier ??\n visitorCode;\n let isMappingIdentifier = false;\n\n // --- Note ---\n // This part is a workaround for Data API\n // If there's is no unique identifier for the visitor\n // We do reconciliation for visitor with himself\n if (isUniqueIdentifier) {\n const linkedVisitor = this.dataManager.getLinkedVisitor(visitorCode);\n const index = this.dataManager.identifierCustomDataIndex;\n\n if (!linkedVisitor && typeof index === 'number') {\n this.dataManager.storeData(\n visitorCode,\n new CustomData(index, visitorCode),\n );\n } else {\n isMappingIdentifier = true;\n }\n }\n\n return isMappingIdentifier && visitorCode != mappingIdentifier;\n }\n\n private getUserAgent(visitorCode: string): string | undefined {\n const targetingData = this.dataManager.getVisitorData(visitorCode);\n\n if (targetingData) {\n const userAgentData = targetingData[KameleoonData.UserAgent];\n\n if (userAgentData) {\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n public async sendDataAll(): Promise<void> {\n const storageResult = this.trackingStorage.read();\n\n if (!storageResult.ok) {\n return;\n }\n\n const { scheduledVisitors } = storageResult.data;\n await this.sendData(scheduledVisitors);\n }\n\n public async sendDataForVisitor(\n visitorCode: string,\n isConsentProvided: boolean,\n ): Promise<void> {\n const storageResult = this.trackingStorage.read();\n\n if (!storageResult.ok) {\n return;\n }\n\n await this.sendData({ [`_${visitorCode}`]: { isConsentProvided } });\n }\n\n private async sendData(\n scheduledVisitors: ScheduledVisitorsType,\n ): Promise<void> {\n const pendingData: PendingDataType = {};\n const trackingVisitorCodes: string[] = [];\n\n const trackedVisitors: {\n visitorCode: string;\n isConsentProvided: boolean;\n }[] = [];\n\n for (const [visitorCode, { isConsentProvided }] of Object.entries(\n scheduledVisitors,\n )) {\n let targetVisitorCode = visitorCode.startsWith('_')\n ? visitorCode.substring(1)\n : visitorCode;\n\n const isMappingIdentifier = this.checkIsIdentifier(targetVisitorCode);\n const userAgent = this.getUserAgent(targetVisitorCode);\n\n const visitorData = this.getUnsentVisitorData(\n targetVisitorCode,\n isConsentProvided,\n );\n const variationData = this.getUnsentVariationData(\n targetVisitorCode,\n isConsentProvided,\n );\n\n const result = this.bodyProvider.addData({\n visitorCode: targetVisitorCode,\n variationData,\n visitorData,\n userAgent,\n isConsentProvided,\n isMappingIdentifier,\n });\n\n if (result.ok) {\n pendingData[targetVisitorCode] = {\n visitorData,\n variationData,\n };\n trackedVisitors.push({\n visitorCode: targetVisitorCode,\n isConsentProvided,\n });\n trackingVisitorCodes.push(visitorCode);\n } else {\n KameleoonLogger.warning(\n 'Visitor data to be tracked exceeded the request size limit. Some visitor data is kept to be sent later.' +\n ' If it is not caused by the peak load, decreasing the tracking interval is recommended.',\n );\n break;\n }\n }\n\n const { body, hasUserAgent } = this.bodyProvider.getTrackingBody();\n\n if (trackingVisitorCodes.length !== 0) {\n this.trackingStorage.read().and((trackingData) => {\n trackingVisitorCodes.forEach((visitorCode) => {\n delete trackingData.scheduledVisitors[visitorCode];\n });\n this.trackingStorage.write(trackingData);\n });\n }\n\n if (!body) {\n return;\n }\n\n const result = await this.requester.track(body, hasUserAgent);\n\n if (result.ok) {\n KameleoonLogger.info`Successful request for tracking visitors: ${trackedVisitors}, data: ${pendingData}`;\n this.updateDataStatus(pendingData, TrackingStatus.Sent);\n } else {\n KameleoonLogger.error('Tracking request failed');\n KameleoonLogger.info`Failed request for tracking visitors: ${trackedVisitors}, data: ${pendingData}`;\n this.updateDataStatus(pendingData, TrackingStatus.Unsent);\n\n let notTrackedVisitors: ScheduledVisitorsType = {};\n for (let { visitorCode, isConsentProvided } of trackedVisitors) {\n visitorCode = `_${visitorCode}`;\n notTrackedVisitors[visitorCode] = {\n isConsentProvided: isConsentProvided,\n };\n }\n this.addNotTrackedVisitors(notTrackedVisitors);\n }\n }\n\n private addNotTrackedVisitors(\n notTrackedVisitors: ScheduledVisitorsType,\n ): void {\n const storageResult = this.trackingStorage.read();\n\n if (!storageResult.ok) {\n return;\n }\n\n const { scheduledVisitors } = storageResult.data;\n\n Object.entries(notTrackedVisitors).forEach(\n ([visitorCode, { isConsentProvided }]) => {\n if (!scheduledVisitors[visitorCode]) {\n scheduledVisitors[visitorCode] = { isConsentProvided };\n }\n },\n );\n\n this.trackingStorage.write({\n scheduledVisitors: scheduledVisitors,\n } as TrackingDataType);\n }\n\n private updateDataStatus(\n data: PendingDataType,\n status: TrackingStatus,\n ): void {\n let updatedData: { [visitorCode: string]: KameleoonDataType[] } = {};\n\n for (const [visitorCode, { visitorData, variationData }] of Object.entries(\n data,\n )) {\n const visitorDataForUpdate = visitorData\n .filter((dataItem) => !(dataItem instanceof StaticData))\n .map((dataItem) => {\n const item = dataItem as KameleoonDataType;\n item.status = status;\n return item;\n });\n\n if (visitorDataForUpdate.length) {\n updatedData[visitorCode] = visitorDataForUpdate;\n }\n\n const experimentIdList = variationData.map((dataItem) =>\n String(dataItem.experimentId),\n );\n\n this.variationConfiguration.updateDataStatus({\n visitorCode,\n experimentIdList,\n status,\n });\n }\n\n if (Object.keys(updatedData).length === 0) {\n return;\n }\n\n if (status === TrackingStatus.Sent) {\n this.dataManager.storeTrackedData(updatedData);\n } else {\n this.dataManager.storeData(updatedData, false);\n }\n }\n\n private getUnsentVisitorData(\n visitorCode: string,\n isConsentProvided: boolean,\n ): (KameleoonDataType | StaticData)[] {\n const unsentData = this.dataManager.getUnsentData(visitorCode);\n const resultData: (KameleoonDataType | StaticData)[] = [];\n\n if (!unsentData.length) {\n return [];\n }\n\n for (const data of unsentData) {\n if (!data.url) {\n continue;\n }\n if (\n !isConsentProvided &&\n (!this.clientConfiguration.hasAnyTargetedDeliveryRule ||\n data instanceof StaticData ||\n data.data.type !== KameleoonData.Conversion)\n ) {\n continue;\n }\n\n resultData.push(data);\n }\n\n if (resultData.length) {\n const pendingData: KameleoonDataType[] = resultData\n .filter((data) => !(data instanceof StaticData))\n .map((data) => {\n const item = data as KameleoonDataType;\n item.status = TrackingStatus.Pending;\n return item;\n });\n\n this.dataManager.storeTrackedData({\n [visitorCode]: pendingData,\n });\n }\n\n return resultData;\n }\n\n private getUnsentVariationData(\n visitorCode: string,\n isConsentProvided: boolean,\n ): BaseVariationDataType[] {\n const unsentData = this.variationConfiguration.getUnsentData(visitorCode);\n const sentExperimentIds = new Set<string>();\n\n if (!unsentData.length) {\n return [];\n }\n\n const resultData = unsentData.filter((item) => {\n const isIncluded = item.isTargetedRule || isConsentProvided;\n\n if (isIncluded) {\n sentExperimentIds.add(String(item.experimentId));\n }\n\n return isIncluded;\n });\n\n this.variationConfiguration.updateDataStatus({\n visitorCode,\n experimentIdList: Array.from(sentExperimentIds),\n status: TrackingStatus.Pending,\n });\n\n return resultData;\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { CacheManager } from './cacheManager';\nimport {\n ClientConfiguration,\n FeatureVariableType,\n JSONType,\n RuleType,\n} from './clientConfiguration';\nimport { ClientSettings } from './clientSettings';\nimport {\n CACHE_CLEANUP_TIMEOUT,\n DEFAULT_VISITOR_DATA_FILTERS,\n IN_HOLDOUT_VARIATION_KEY,\n OFF_VARIATION_KEY,\n} from './constants';\nimport {\n Conversion,\n CustomData,\n DataManager,\n KameleoonDataType,\n} from './kameleoonData';\nimport { WAREHOUSE_AUDIENCE_KEY } from './constants';\nimport { KameleoonError, KameleoonException } from './kameleoonError';\nimport { Requester, UrlProvider } from './requester';\nimport {\n ClientDataType,\n KameleoonStorageKey,\n VariationDataType,\n DataStorage,\n IStorage,\n DataInfoType,\n TrackingDataType,\n StorageCleanupManager,\n} from './storage';\nimport {\n TrackConversionParamsType,\n FeatureFlagType,\n GetFeatureFlagVariableParamsType,\n FeatureVariableResultType,\n SDKCoreParameters,\n TrackingCacheItemType,\n RemoteVisitorDataParamsType,\n GetVisitorWarehouseAudienceParamsType,\n SetUserConsentParametersType,\n FeatureFlagVariableType,\n KameleoonVariationType,\n GetFeatureVariablesParamsType,\n VariableType,\n KameleoonVariableType,\n GetFeatureVariationParametersType,\n GetVariationParamsType,\n GetVariationsParamsType,\n IsFeatureFlagActiveParamsType,\n TrackingStatus,\n SetForcedVariationParametersType,\n EvaluatedExperimentType,\n EvaluateParametersType,\n FlushParamsType,\n DataFile,\n Rule,\n Variable,\n Variation,\n} from './types';\nimport { ExternalPackageInfoType } from './sdkInfoTypes';\nimport { IVisitorCodeManager } from './visitorCodeManager';\nimport { Parser, Utilities } from './utilities';\nimport {\n FeatureFlagVariationType,\n VariationConfiguration,\n} from './variationConfiguration';\nimport { IKameleoonClient } from './kameleoonClientInterface';\nimport { ConditionFactory, TargetingDataType } from './targeting';\nimport { KameleoonEventSource } from './eventSource';\nimport { DEFAULT_MAX_AGE, PATH, ZERO_MAX_AGE } from './visitorCodeManager';\nimport { EventCallbackType, EventManager, EventType } from './eventManager';\nimport { Tracker } from './tracking';\nimport { KameleoonLogger, LogLevel } from 'src/logging';\nimport {\n ForcedExperimentVariationDataType,\n ForcedFeatureVariationDataType,\n ForcedVariationRuleType,\n ForcedVariationVarByExpType,\n ForcedExperimentVariationType,\n ForcedFeatureVariationType,\n LegalConsent,\n LegalConsentDataType,\n StorageConsentDataType,\n} from 'src/storage/types';\nimport { Hasher } from 'src/hasher';\nimport {\n FeatureFlagType as ConfigFeatureFlagType,\n ConsentBlockingBehaviour,\n} from './clientConfiguration/types';\nimport { KameleoonVisitorDataType } from 'src/kameleoonData/types';\nimport { ConditionFactoryInstance } from 'src/targeting/conditions/conditionFactoryInstance';\nimport { TargetedSegment } from 'src/kameleoonData/targetedSegment';\n\n/**\n * @class\n * KameleoonClient - a class for creating kameleoon client instance\n * for communicating with Kameleoon JavaScript SDK Core, when new instance is created\n */\nexport class KameleoonClient implements IKameleoonClient {\n private variationConfiguration: VariationConfiguration;\n private clientConfiguration: ClientConfiguration;\n private dataManager: DataManager;\n private consentDataStorage: IStorage<StorageConsentDataType>;\n private trackingCache: CacheManager<TrackingCacheItemType>;\n private requester: Requester;\n private externalPackageInfo: ExternalPackageInfoType;\n protected initialized: boolean = false;\n private visitorCodeManager: IVisitorCodeManager;\n private eventManager: EventManager;\n protected readonly tracker: Tracker;\n private environment: string;\n protected readonly stubMode?: boolean;\n\n /**\n * @param {SDKCoreParameters} sdkCoreParameters - parameters for initializing sdk core\n */\n constructor({\n siteCode,\n dependencies,\n configuration,\n internalConfiguration,\n stubMode,\n }: SDKCoreParameters) {\n this.stubMode = stubMode;\n if (stubMode) {\n this.variationConfiguration = {} as any;\n this.clientConfiguration = {} as any;\n this.dataManager = {} as any;\n this.consentDataStorage = {} as any;\n this.trackingCache = {} as any;\n this.requester = {} as any;\n this.externalPackageInfo = {} as any;\n this.visitorCodeManager = {} as any;\n this.eventManager = {} as any;\n this.tracker = {} as any;\n this.environment = '';\n return;\n }\n const logger = internalConfiguration?.externals.externalLogger;\n if (logger) {\n KameleoonLogger.setLogger(logger);\n }\n ConditionFactoryInstance.setConditionFactoryInstance(\n new ConditionFactory(),\n );\n KameleoonLogger.debug`CALL: new KameleoonClient(siteCode: ${siteCode}, dependencies: ${dependencies}, configuration: ${configuration})`;\n\n const { settings: clientSettings } = new ClientSettings(\n siteCode,\n configuration,\n );\n this.environment = clientSettings.environment;\n const {\n externalStorage,\n externalEventSource,\n externalPackageInfo,\n externalVisitorCodeManager,\n externalRequester,\n externalPRNG,\n customDataManager,\n } = internalConfiguration.externals;\n\n const { useAbortController } = internalConfiguration.settings;\n const trackingCache = new CacheManager<TrackingCacheItemType>(\n CACHE_CLEANUP_TIMEOUT,\n );\n\n const clientDataStorage = new DataStorage<ClientDataType>(\n externalStorage,\n KameleoonStorageKey.ClientData,\n );\n\n const variationDataStorage = new DataStorage<VariationDataType>(\n externalStorage,\n KameleoonStorageKey.VariationData,\n );\n const forcedVariationDataStorage =\n new DataStorage<ForcedExperimentVariationDataType>(\n externalStorage,\n KameleoonStorageKey.ForcedExperimentVariation,\n );\n const simulatedVariationDataStorage =\n new DataStorage<ForcedFeatureVariationDataType>(\n externalStorage,\n KameleoonStorageKey.ForcedFeatureVariation,\n );\n const consentDataStorage = new DataStorage<StorageConsentDataType>(\n externalStorage,\n KameleoonStorageKey.ConsentData,\n );\n const trackingStorage = new DataStorage<TrackingDataType>(\n externalStorage,\n KameleoonStorageKey.TrackingData,\n );\n\n let dataManager = customDataManager;\n if (!dataManager) {\n const targetingDataStorage = new DataStorage<TargetingDataType>(\n externalStorage,\n KameleoonStorageKey.TargetingData,\n );\n const dataInfoStorage = new DataStorage<DataInfoType>(\n externalStorage,\n KameleoonStorageKey.DataInfo,\n );\n\n dataManager = new DataManager({\n dataStorage: targetingDataStorage,\n infoStorage: dataInfoStorage,\n cleanupInterval: clientSettings.cleanupInterval,\n packageInfo: externalPackageInfo,\n });\n }\n\n const urlProvider = dependencies?.urlProvider ?? new UrlProvider();\n\n urlProvider.initialize({\n domain: clientSettings.networkDomain,\n siteCode: clientSettings.siteCode,\n packageInfo: externalPackageInfo,\n environment: clientSettings.environment,\n });\n\n const requester = new Requester({\n urlProvider,\n useAbortController,\n packageInfo: externalPackageInfo,\n externalRequester: externalRequester,\n requestTimeout: clientSettings.requestTimeout,\n trackRetryDelay: clientSettings.trackRetryDelay,\n });\n\n const eventSource = new KameleoonEventSource({\n siteCode: clientSettings.siteCode,\n externalEventSource,\n urlProvider,\n });\n\n const eventManager = new EventManager();\n\n const clientConfiguration = new ClientConfiguration({\n urlProvider,\n storage: clientDataStorage,\n updateInterval: clientSettings.updateInterval,\n dataManager,\n eventManager,\n requester,\n eventSource,\n externalVisitorCodeManager,\n externalPackageInfo,\n defaultDataFile: configuration?.defaultDataFile,\n });\n\n const variationConfiguration = new VariationConfiguration(\n variationDataStorage,\n forcedVariationDataStorage,\n simulatedVariationDataStorage,\n externalVisitorCodeManager,\n clientConfiguration,\n );\n\n const tracker = new Tracker({\n dataManager,\n trackingStorage,\n variationConfiguration,\n requester,\n trackingInterval: clientSettings.trackingInterval,\n prng: externalPRNG,\n clientConfiguration,\n });\n\n this.tracker = tracker;\n this.variationConfiguration = variationConfiguration;\n this.requester = requester;\n this.trackingCache = trackingCache;\n this.dataManager = dataManager;\n this.clientConfiguration = clientConfiguration;\n this.externalPackageInfo = externalPackageInfo;\n this.consentDataStorage = consentDataStorage;\n this.visitorCodeManager = externalVisitorCodeManager;\n this.eventManager = eventManager;\n\n if (clientSettings.cleanupInterval !== null) {\n new StorageCleanupManager(\n externalStorage,\n clientSettings.cleanupInterval,\n );\n }\n KameleoonLogger.debug`RETURN: new KameleoonClient(siteCode: ${siteCode}, dependencies: ${dependencies}, configuration: ${configuration})`;\n }\n\n public async initialize(): Promise<boolean> {\n if (this.stubMode) {\n return false;\n }\n KameleoonLogger.info('CALL: KameleoonClient.initialize()');\n const result = await this.clientConfiguration.initialize();\n result.throw();\n\n this.initialized = true;\n\n KameleoonLogger.info`RETURN: KameleoonClient.initialize() -> (result: ${result.ok})`;\n return result.ok;\n }\n\n public addData(visitorCode: string, ...data: KameleoonDataType[]): void {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.addData(visitorCode: ${visitorCode}, data: ${data})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.dataManager.storeData(visitorCode, ...data).throw();\n KameleoonLogger.info`RETURN: KameleoonClient.addData(visitorCode: ${visitorCode}, data: ${data})`;\n }\n\n public async getRemoteVisitorData({\n visitorCode,\n shouldAddData = true,\n filters = DEFAULT_VISITOR_DATA_FILTERS,\n }: RemoteVisitorDataParamsType): Promise<KameleoonDataType[]> {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.getRemoteVisitorData(visitorCode: ${visitorCode}, shouldAddData: ${shouldAddData}, filters: ${filters})`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const { previousVisitAmount } = filters;\n\n if (\n typeof previousVisitAmount === 'number' &&\n (previousVisitAmount < 1 || previousVisitAmount > 25)\n ) {\n throw new KameleoonError(KameleoonException.VisitAmount);\n }\n\n const isUniqueIdentifier = this.dataManager.isUniqueIdentifier(visitorCode);\n\n const result = await this.requester.getVisitorData({\n visitorCode,\n filters,\n isMappingIdentifier: isUniqueIdentifier,\n });\n const data = result.throw();\n\n const { visitorData, storageVisitorData, visitsData, mappingIdentifier } =\n Parser.parseVisitorData({\n data,\n filters,\n visitorCode,\n dataManager: this.dataManager,\n variationConfiguration: this.variationConfiguration,\n });\n\n for (const dataItem of storageVisitorData) {\n if (shouldAddData || this.dataManager.isPersistentCustomData(dataItem)) {\n this.addData(visitorCode, dataItem);\n }\n }\n\n // --- Note ---\n // Data on visits amount and time stamps is not returned to a user\n if (visitsData && shouldAddData) {\n this.addData(visitorCode, visitsData);\n }\n\n if (filters?.visitorCode && mappingIdentifier) {\n this.dataManager.setMappingIdentifier(visitorCode, mappingIdentifier);\n }\n\n KameleoonLogger.info`RETURN: KameleoonClient.getRemoteVisitorData(visitorCode: ${visitorCode}, shouldAddData: ${shouldAddData}, filters: ${filters}) -> (visitorData: ${visitorData})`;\n return visitorData;\n }\n\n public trackConversion({\n visitorCode,\n goalId,\n negative,\n revenue,\n metadata,\n }: TrackConversionParamsType): void {\n if (this.stubMode) {\n return;\n }\n KameleoonLogger.info`CALL: KameleoonClient.trackConversion(visitorCode: ${visitorCode}, goalId: ${goalId}, negative: ${negative}, revenue: ${revenue}, metadata: ${metadata})`;\n this.addData(\n visitorCode,\n new Conversion({ goalId, revenue, negative, metadata }),\n );\n this.flush(visitorCode);\n KameleoonLogger.info`RETURN: KameleoonClient.trackConversion(visitorCode: ${visitorCode}, goalId: ${goalId}, negative: ${negative}, revenue: ${revenue}, metadata: ${metadata})`;\n }\n\n public flush(params?: string | FlushParamsType): void {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n let visitorCode: string | undefined;\n let isInstant: boolean = false;\n if (typeof params === 'string') {\n visitorCode = params;\n } else if (params) {\n visitorCode = params.visitorCode;\n isInstant = params.instant ?? false;\n }\n\n KameleoonLogger.info`CALL: KameleoonClient.flush(visitorCode: ${visitorCode}, instant: ${isInstant})`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n if (typeof visitorCode === 'string') {\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n if (isInstant) {\n this.tracker.sendDataForVisitor(\n visitorCode,\n this._isConsentProvided(visitorCode),\n );\n } else {\n this.tracker.scheduleVisitor(\n visitorCode,\n this._isConsentProvided(visitorCode),\n );\n }\n } else {\n for (const visitorCodeKey of this.dataManager.unsentDataVisitors) {\n this.tracker.scheduleVisitor(\n visitorCodeKey,\n this._isConsentProvided(visitorCodeKey),\n );\n }\n for (const visitorCodeKey of this.variationConfiguration.getVisitorsWithUnsentData()) {\n this.tracker.scheduleVisitor(\n visitorCodeKey,\n this._isConsentProvided(visitorCodeKey),\n );\n }\n if (isInstant) {\n this.tracker.sendDataAll();\n }\n }\n\n KameleoonLogger.info`RETURN: KameleoonClient.flush(visitorCode: ${visitorCode}, instant: ${isInstant})`;\n }\n\n public getFeatureFlags(): FeatureFlagType[] {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info('CALL: KameleoonClient.getFeatureFlags()');\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const featureFlags = this.clientConfiguration.featureFlags;\n const resultFeatureFlags: FeatureFlagType[] = [];\n\n featureFlags.forEach(({ id, featureKey }) => {\n resultFeatureFlags.push({\n id,\n key: featureKey,\n });\n });\n\n KameleoonLogger.info`RETURN: KameleoonClient.getFeatureFlags() -> (FeatureFlags: ${resultFeatureFlags})`;\n return resultFeatureFlags;\n }\n\n public getVisitorFeatureFlags(visitorCode: string): FeatureFlagType[] {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${visitorCode})`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const activeVariations = this._getActiveFeatureVariations(visitorCode);\n const resultFeatureFlags: FeatureFlagType[] = [];\n\n activeVariations.forEach(({ featureFlagId, featureKey }) => {\n resultFeatureFlags.push({\n id: featureFlagId,\n key: featureKey,\n });\n });\n\n KameleoonLogger.info`RETURN: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${visitorCode}) -> (FeatureFlags: ${resultFeatureFlags})`;\n return resultFeatureFlags;\n }\n\n public getVariation({\n visitorCode,\n featureKey,\n track = true,\n }: GetVariationParamsType): Variation {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.getVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const variation = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track,\n }).throw();\n\n KameleoonLogger.info`RETURN: KameleoonClient.getVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track}) -> (variation: ${variation})`;\n return variation;\n }\n\n public getVariations({\n visitorCode,\n onlyActive = false,\n track = true,\n }: GetVariationsParamsType): Map<string, Variation> {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.getVariations(visitorCode: ${visitorCode}, onlyActive: ${onlyActive}, track: ${track})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const variations: Map<string, Variation> = new Map();\n const featureFlags = this.clientConfiguration.featureFlags;\n\n for (const featureFlag of featureFlags.values()) {\n try {\n const variation = this._getFeatureVariation({\n visitorCode,\n featureKey: featureFlag.featureKey,\n track,\n });\n if (\n variation.ok &&\n (!onlyActive || variation.data.key !== OFF_VARIATION_KEY)\n ) {\n variations.set(featureFlag.featureKey, variation.data);\n }\n } catch (err) {\n if (\n err instanceof KameleoonError &&\n err.type !== KameleoonException.FeatureFlagEnvironmentDisabled\n ) {\n throw err;\n }\n }\n }\n\n KameleoonLogger.info`RETURN: KameleoonClient.getVariations(visitorCode: ${visitorCode}, onlyActive: ${onlyActive}, track: ${track}) -> (variations: ${variations})`;\n\n return variations;\n }\n\n public getActiveFeatureFlags(\n visitorCode: string,\n ): Map<string, KameleoonVariationType> {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.getActiveFeatureFlags(visitorCode: ${visitorCode})`;\n\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const activeVariations = this._getActiveFeatureVariations(visitorCode);\n const resultFeatureList: Map<string, KameleoonVariationType> = new Map();\n\n activeVariations.forEach((variation) => {\n const { variationKey, featureKey, variationId, experimentId } = variation;\n\n let variables: FeatureVariableType[] = [];\n\n if (variationId !== null && experimentId !== null) {\n variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n }\n\n const resultVariables = variables.map((variable) =>\n Parser.parseFeatureVariable(variable).throw(),\n );\n\n resultFeatureList.set(variation.featureKey, {\n name: '',\n key: variationKey,\n id: variationId,\n experimentId,\n variables: resultVariables,\n });\n });\n\n KameleoonLogger.info`RETURN: KameleoonClient.getActiveFeatureFlags(visitorCode: ${visitorCode}) -> (FeatureFlags: ${resultFeatureList})`;\n\n return resultFeatureList;\n }\n\n public getFeatureFlagVariationKey(\n visitorCode: string,\n featureKey: string,\n ): string {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${visitorCode}, featureKey: ${featureKey})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const { key } = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track: true,\n }).throw();\n\n KameleoonLogger.info`RETURN: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (variationKey: ${key})`;\n return key;\n }\n\n public getFeatureFlagVariable({\n visitorCode,\n featureKey,\n variableKey,\n }: GetFeatureFlagVariableParamsType): FeatureFlagVariableType {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.getFeatureFlagVariable(visitorCode: ${visitorCode}, featureKey: ${featureKey}, variableKey: ${variableKey})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const { key: variationKey } = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track: true,\n }).throw();\n\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n const variable = variables.find((item) => item.key === variableKey);\n\n if (!variable) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagVariableNotFound,\n variableKey,\n visitorCode,\n );\n }\n\n const { type, value } = Parser.parseFeatureVariable(variable).throw();\n\n const featureFlagVariable = { type, value } as FeatureFlagVariableType;\n KameleoonLogger.info`RETURN: KameleoonClient.getFeatureFlagVariable(visitorCode: ${visitorCode}, featureKey: ${featureKey}, variableKey: ${variableKey}) -> (FeatureFlagVariable: ${featureFlagVariable})`;\n return featureFlagVariable;\n }\n\n public getFeatureFlagVariables(\n visitorCode: string,\n featureKey: string,\n ): Variable[] {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.getFeatureFlagVariables(visitorCode: ${visitorCode}, featureKey: ${featureKey})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const { key: variationKey } = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track: true,\n }).throw();\n\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n const resultVariables: FeatureVariableResultType[] = [];\n\n for (const variable of variables) {\n const parsedVariable = Parser.parseFeatureVariable(variable).throw();\n resultVariables.push(parsedVariable);\n }\n\n KameleoonLogger.info`RETURN: KameleoonClient.getFeatureFlagVariables(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (FeatureFlagVariables: ${resultVariables})`;\n return resultVariables;\n }\n\n public isFeatureFlagActive(visitorCode: string, featureKey: string): boolean;\n public isFeatureFlagActive({\n visitorCode,\n featureKey,\n track,\n }: IsFeatureFlagActiveParamsType): boolean;\n public isFeatureFlagActive(\n firstParam: string | IsFeatureFlagActiveParamsType,\n secondParam?: string,\n ): boolean {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n let [visitorCode, featureKey, track] = ['', '', true];\n\n if (typeof firstParam === 'string') {\n visitorCode = firstParam;\n featureKey = secondParam!;\n } else {\n [visitorCode, featureKey] = [\n firstParam.visitorCode,\n firstParam.featureKey,\n ];\n\n if (firstParam.track !== undefined) {\n track = firstParam.track;\n }\n }\n KameleoonLogger.info`CALL: KameleoonClient.isFeatureFlagActive(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track ${track})`;\n\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n try {\n const { key } = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track,\n }).throw();\n\n const isActive = key !== OFF_VARIATION_KEY;\n\n KameleoonLogger.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track}) -> (isActive: ${isActive})`;\n return isActive;\n } catch (err) {\n if (\n err instanceof KameleoonError &&\n err.type === KameleoonException.FeatureFlagEnvironmentDisabled\n ) {\n KameleoonLogger.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track}) -> (isActive: false)`;\n return false;\n }\n\n throw err;\n }\n }\n\n public async getRemoteData(key: string): Promise<JSONType> {\n if (this.stubMode) {\n return null;\n }\n KameleoonLogger.info`CALL: KameleoonClient.getRemoteData(key: ${key})`;\n const remoteData = await this.requester.getRemoteData(key);\n KameleoonLogger.info`RETURN: KameleoonClient.getRemoteData(key: ${key}) -> (remoteData: ${remoteData})`;\n return remoteData.throw();\n }\n\n public async getVisitorWarehouseAudience({\n visitorCode,\n customDataIndex,\n warehouseKey,\n }: GetVisitorWarehouseAudienceParamsType): Promise<CustomData | null> {\n if (this.stubMode) {\n return null;\n }\n KameleoonLogger.info`CALL: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${visitorCode}, customDataIndex: ${customDataIndex}, warehouseKey: ${warehouseKey})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const data = await this.getRemoteData(warehouseKey || visitorCode);\n\n if (!data) {\n throw new KameleoonError(\n KameleoonException.RemoteData,\n `No data found for ${warehouseKey || visitorCode} key`,\n );\n }\n\n if (\n !data[WAREHOUSE_AUDIENCE_KEY] ||\n Object.keys(data[WAREHOUSE_AUDIENCE_KEY]).length === 0\n ) {\n KameleoonLogger.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${visitorCode}, customDataIndex: ${customDataIndex}, warehouseKey: ${warehouseKey}) -> (customData: null)`;\n return null;\n }\n\n const customData = new CustomData(\n customDataIndex,\n ...Object.keys(data[WAREHOUSE_AUDIENCE_KEY]),\n );\n\n this.dataManager.storeData(visitorCode, customData);\n\n KameleoonLogger.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${visitorCode}, customDataIndex: ${customDataIndex}, warehouseKey: ${warehouseKey}) -> (customData: ${customData})`;\n return customData;\n }\n\n public onEvent<E extends EventType>(\n event: E,\n callback: EventCallbackType<E>,\n ): void {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.onEvent(event: ${event}, callback)`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.eventManager.addEventHandler(event, callback);\n KameleoonLogger.info`RETURN: KameleoonClient.onEvent(event: ${event}, callback)`;\n }\n\n public getEngineTrackingCode(visitorCode: string): string {\n if (this.stubMode) {\n return '';\n }\n KameleoonLogger.info`CALL: KameleoonClient.getEngineTrackingCode(visitorCode: ${visitorCode})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const trackingCode = Utilities.getTrackingCode(\n this.trackingCache,\n visitorCode,\n );\n KameleoonLogger.info`RETURN: KameleoonClient.getEngineTrackingCode(visitorCode: ${visitorCode}) -> (trackingCode: ${trackingCode})`;\n return trackingCode;\n }\n\n public isInitialized(): boolean {\n KameleoonLogger.debug`CALL/RETURN: KameleoonClient.isInitialized() -> (initialized: ${this.initialized})`;\n return this.initialized;\n }\n\n public setLogLevel(level: LogLevel): void {\n KameleoonLogger.setLogLevel(level);\n }\n\n public setForcedVariation({\n visitorCode,\n experimentId,\n variationKey,\n forceTargeting = true,\n }: SetForcedVariationParametersType): void {\n if (this.stubMode) {\n return;\n }\n KameleoonLogger.info`CALL: KameleoonClient.setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting})`;\n\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n this._setForcedVariation({\n visitorCode,\n experimentId,\n variationKey,\n forceTargeting,\n }).throw();\n\n KameleoonLogger.info`RETURN: KameleoonClient.setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting})`;\n }\n\n public evaluateAudiences(visitorCode: string): void {\n if (this.stubMode) {\n return;\n }\n KameleoonLogger.info`CALL: KameleoonClient.evaluateAudiences(visitorCode: ${visitorCode})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const targetedSegments: TargetedSegment[] = [];\n\n const targetingData = this.dataManager.getVisitorData(visitorCode);\n for (let segment of this.clientConfiguration.segments.values()) {\n if (!segment.audienceTracking) {\n continue;\n }\n\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId: null,\n clientConfiguration: this.clientConfiguration,\n packageInfo: this.externalPackageInfo,\n dataManager: this.dataManager,\n variationConfiguration: this.variationConfiguration,\n });\n\n const isTargeted = targetingResult.ok && targetingResult.data;\n\n if (isTargeted) {\n KameleoonLogger.info`Visitor ${visitorCode} has been targeted for ${segment}`;\n targetedSegments.push(new TargetedSegment(Number(segment.id)));\n }\n }\n\n if (targetedSegments.length !== 0) {\n this.dataManager.storeData(visitorCode, ...targetedSegments);\n }\n\n this.flush(visitorCode);\n\n KameleoonLogger.info`RETURN: KameleoonClient.evaluateAudiences(visitorCode: ${visitorCode})`;\n }\n\n public getDataFile(): DataFile {\n const dataFile = {\n featureFlags: new Map(),\n };\n if (this.stubMode) {\n return dataFile;\n }\n KameleoonLogger.debug`CALL: KameleoonClient.getDataFile()`;\n this.clientConfiguration.featureFlags.forEach((featureFlag, key) => {\n const variationsMap = new Map<string, Variation>();\n\n featureFlag.variations.forEach((sourceVariation) => {\n const variablesMap = new Map<string, KameleoonVariableType>();\n sourceVariation.variables.forEach((variable) => {\n try {\n const parsedVariable =\n Parser.parseFeatureVariable(variable).throw();\n variablesMap.set(variable.key, parsedVariable);\n } catch (err) {\n KameleoonLogger.error`Error parsing variable ${variable.key} of feature flag ${featureFlag.featureKey}: ${err}`;\n }\n });\n\n variationsMap.set(sourceVariation.key, {\n name: sourceVariation.name ?? '',\n key: sourceVariation.key,\n id: null,\n experimentId: null,\n variables: variablesMap,\n });\n });\n\n const rules: Rule[] = featureFlag.rules.map((rule) => {\n const ruleVariations = new Map<string, Variation>();\n rule.variationByExposition.forEach((varByExp) => {\n const baseVariation = variationsMap.get(varByExp.variationKey);\n if (!baseVariation) return;\n\n ruleVariations.set(baseVariation.key, {\n name: baseVariation.name,\n key: baseVariation.key,\n id: varByExp.variationId,\n experimentId: rule.experimentId,\n variables: baseVariation.variables,\n });\n });\n\n return { variations: ruleVariations };\n });\n\n dataFile.featureFlags.set(key, {\n variations: variationsMap,\n environmentEnabled: featureFlag.environmentEnabled,\n rules,\n defaultVariationKey: featureFlag.defaultVariationKey,\n });\n });\n KameleoonLogger.debug`RETURN: KameleoonClient.getDataFile() -> (dataFile: ${dataFile})`;\n return dataFile;\n }\n\n protected setUserConsent({\n visitorCode,\n consent,\n setData,\n }: SetUserConsentParametersType): void {\n if (this.stubMode) {\n return;\n }\n KameleoonLogger.info`CALL: KameleoonClient.setUserConsent(visitorCode: ${visitorCode}, consent: ${consent}, setData: ${setData})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n this.updateConsentData(visitorCode, consent);\n\n if (consent) {\n setData({\n visitorCode,\n key: KameleoonStorageKey.VisitorCode,\n maxAge: DEFAULT_MAX_AGE,\n path: PATH,\n });\n }\n\n KameleoonLogger.info`RETURN: KameleoonClient.setUserConsent(visitorCode: ${visitorCode}, consent: ${consent}, setData: ${setData})`;\n }\n\n private updateConsentData(visitorCode: string, consent: boolean): void {\n const readResult = this.consentDataStorage.read();\n const legalConsent = consent ? LegalConsent.Given : LegalConsent.NotGiven;\n if (!readResult.ok) {\n if (readResult.error.type === KameleoonException.StorageEmpty) {\n this.consentDataStorage.write({\n [visitorCode]: {\n consent: legalConsent,\n },\n });\n }\n return;\n }\n\n const data = readResult.data;\n data[visitorCode] = {\n consent: legalConsent,\n };\n this.consentDataStorage.write(data);\n }\n\n private getLegalConsent(visitorCode: string): LegalConsent {\n KameleoonLogger.debug`CALL: KameleoonClient.getLegalConsent(visitorCode: ${visitorCode})`;\n let legalConsent: LegalConsent;\n const consentDataResult = this.consentDataStorage.read();\n legalConsent = consentDataResult.ok\n ? this.extractLegalConsent(consentDataResult.data[visitorCode])\n : LegalConsent.Unknown;\n KameleoonLogger.debug`RETURN: KameleoonClient.getLegalConsent(visitorCode: ${visitorCode}) -> (legalConsent: ${legalConsent})`;\n return legalConsent;\n }\n\n private extractLegalConsent(\n consentData: LegalConsentDataType | undefined,\n ): LegalConsent {\n if (consentData === undefined) return LegalConsent.Unknown;\n\n if (typeof consentData === 'boolean') {\n return consentData ? LegalConsent.Given : LegalConsent.NotGiven;\n }\n\n const value = consentData.consent;\n if (typeof value === 'boolean')\n return value ? LegalConsent.Given : LegalConsent.NotGiven;\n\n return value as LegalConsent;\n }\n\n protected _isConsentProvided(visitorCode: string): boolean {\n KameleoonLogger.debug`CALL: KameleoonClient._isConsentProvided(visitorCode: ${visitorCode})`;\n const { isConsentRequired } = this.clientConfiguration;\n\n const isConsentProvided =\n !isConsentRequired ||\n this.getLegalConsent(visitorCode) == LegalConsent.Given;\n\n KameleoonLogger.debug`RETURN: KameleoonClient._isConsentProvided(visitorCode: ${visitorCode}) -> (isConsentProvided: ${isConsentProvided})`;\n return isConsentProvided;\n }\n\n private _getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n }: GetFeatureVariablesParamsType): FeatureVariableType[] {\n KameleoonLogger.debug`CALL: KameleoonClient._getFeatureVariables(visitorCode: ${visitorCode}, featureKey: ${featureKey}, variationKey: ${variationKey})`;\n const featureFlags = this.clientConfiguration.featureFlags;\n const featureFlag = featureFlags.get(featureKey);\n\n if (!featureFlag) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey,\n );\n }\n const variation = featureFlag.variations.find(\n (item) => item.key === variationKey,\n );\n\n if (!variation) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagVariationNotFound,\n variationKey,\n visitorCode,\n );\n }\n\n KameleoonLogger.debug`RETURN: KameleoonClient._getFeatureVariables(visitorCode: ${visitorCode}, featureKey: ${featureKey}, variationKey: ${variationKey}) -> (variables: ${variation.variables})`;\n return variation.variables;\n }\n\n // @deprecated\n // To be removed with the deprecated methods\n private _getActiveFeatureVariations(\n visitorCode: string,\n ): FeatureFlagVariationType[] {\n KameleoonLogger.debug`CALL: KameleoonClient._getActiveFeatureVariations(visitorCode: ${visitorCode})`;\n const featureFlags = this.clientConfiguration.featureFlags;\n const activeVariations: FeatureFlagVariationType[] = [];\n\n for (const featureFlag of featureFlags.values()) {\n if (!featureFlag.environmentEnabled) {\n continue;\n }\n\n try {\n const evalExp = this._evaluate({\n visitorCode,\n featureFlag,\n track: false,\n save: false,\n });\n\n if (evalExp.variationKey !== OFF_VARIATION_KEY) {\n activeVariations.push({\n variationKey: evalExp.variationKey,\n variationId: evalExp.variationId,\n experimentId: evalExp.experimentId,\n featureFlagId: featureFlag.id,\n featureKey: featureFlag.featureKey,\n rule: null,\n isTargetedRule: evalExp.ruleType === RuleType.TARGETED_DELIVERY,\n });\n }\n } catch (err) {\n if (err instanceof KameleoonError) {\n if (err.type != KameleoonException.FeatureFlagEnvironmentDisabled) {\n KameleoonLogger.error`Unexpected error: ${err}`;\n }\n continue;\n }\n }\n }\n\n KameleoonLogger.debug`RETURN: KameleoonClient._getActiveFeatureVariations(visitorCode: ${visitorCode}) -> (activeVariations: ${activeVariations})`;\n return activeVariations;\n }\n\n private _evaluate({\n visitorCode,\n featureFlag,\n track,\n save,\n }: EvaluateParametersType): EvaluatedExperimentType {\n KameleoonLogger.debug`CALL: KameleoonClient._evaluate(visitorCode: ${visitorCode}, featureFlag: ${featureFlag}, track: ${track}, save: ${save})`;\n let evalExp: EvaluatedExperimentType;\n let forcedVariation: ForcedFeatureVariationType | null = null;\n const visitorData = this.dataManager.getVisitorData(visitorCode);\n\n const forcedVariationData =\n this.variationConfiguration.getForcedFeatureVariation(\n visitorCode,\n featureFlag.featureKey,\n );\n if (forcedVariationData.ok) {\n forcedVariation = forcedVariationData.data;\n }\n if (forcedVariation) {\n evalExp = KameleoonClient.EvaluatedExperiment.fromForcedFeatureVariation(\n featureFlag.defaultVariationKey,\n forcedVariation,\n );\n } else if (\n this._isVisitorNotInHoldout(\n visitorCode,\n track,\n save,\n featureFlag,\n visitorData,\n ) &&\n this._isFFUnrestrictedByMEGroup(visitorCode, featureFlag, visitorData)\n ) {\n const visitorIdentifier = this._getCodeForHash(\n visitorCode,\n featureFlag.bucketingCustomDataIndex,\n visitorData,\n );\n\n const legalConsent = this.getLegalConsent(visitorCode);\n\n const variationData = this.variationConfiguration\n .getVariation({\n visitorCode,\n visitorIdentifier,\n featureFlag,\n track,\n withAssignment: save,\n targetingData: visitorData,\n clientConfiguration: this.clientConfiguration,\n dataManager: this.dataManager,\n packageInfo: this.externalPackageInfo,\n legalConsent,\n })\n .throw();\n evalExp =\n KameleoonClient.EvaluatedExperiment.fromVariationData(variationData);\n } else {\n evalExp = KameleoonClient.EvaluatedExperiment.fromDefaultVariationKey(\n featureFlag.defaultVariationKey,\n );\n }\n\n if (\n save &&\n !evalExp.isSimulated &&\n evalExp.experimentId !== null &&\n evalExp.variationId !== null\n ) {\n this.variationConfiguration.updateStoredVariations(visitorCode, {\n [evalExp.experimentId]: {\n variationId: evalExp.variationId,\n isTargetedRule: evalExp.ruleType === RuleType.TARGETED_DELIVERY,\n status: track ? TrackingStatus.Unsent : TrackingStatus.Sent,\n },\n });\n }\n\n this.eventManager.fireEvent(EventType.Evaluation, {\n featureKey: featureFlag.featureKey,\n variation: {\n key: evalExp.variationKey,\n experimentId: evalExp.experimentId,\n id: evalExp.variationId,\n },\n });\n\n KameleoonLogger.debug`RETURN: KameleoonClient._evaluate(visitorCode: ${visitorCode}, featureFlag: ${featureFlag}, track: ${track}, save: ${save}) -> (evalExp: ${evalExp})`;\n return evalExp;\n }\n\n private _isFFUnrestrictedByMEGroup(\n visitorCode: string,\n featureFlag: ConfigFeatureFlagType,\n visitorData?: KameleoonVisitorDataType,\n ): boolean {\n const meGroupName = featureFlag.mutuallyExclusiveGroup;\n if (!meGroupName) {\n return true;\n }\n KameleoonLogger.debug`CALL: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${visitorCode}, featureFlag: ${featureFlag}, visitorData: ${visitorData})`;\n let selected = true;\n\n const meGroup = this.clientConfiguration.meGroups.get(meGroupName);\n if (meGroup) {\n const codeForHash = this._getCodeForHash(\n visitorCode,\n featureFlag.bucketingCustomDataIndex,\n visitorData,\n );\n\n const hashMEGroup = Hasher.getHashDoubleForMEGroup(\n codeForHash,\n meGroupName,\n );\n\n KameleoonLogger.debug`Calculated meGroup hash ${hashMEGroup} for code: ${codeForHash}, meGroup: ${meGroupName}`;\n\n selected = meGroup.getFeatureFlagByHash(hashMEGroup) === featureFlag;\n }\n\n KameleoonLogger.debug`RETURN: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${visitorCode}, featureFlag: ${featureFlag}, visitorData: ${visitorData}) -> (selected: ${selected})`;\n return selected;\n }\n\n private _getFeatureVariation({\n visitorCode,\n featureKey,\n track,\n }: GetFeatureVariationParametersType): Result<Variation, KameleoonError> {\n KameleoonLogger.debug`CALL: KameleoonClient._getFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track})`;\n\n if (!this.initialized) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n const featureFlags = this.clientConfiguration.featureFlags;\n const featureFlag = featureFlags.get(featureKey);\n\n if (!featureFlag) {\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey,\n ),\n );\n }\n\n if (!featureFlag.environmentEnabled) {\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagEnvironmentDisabled,\n featureFlag.featureKey,\n this.environment,\n ),\n );\n }\n\n const evalExp = this._evaluate({\n visitorCode,\n featureFlag,\n track,\n save: true,\n });\n\n const { experimentId, variationId, variationKey, isSimulated } = evalExp;\n\n let resultVariables = new Map<string, Variable>();\n let hasJsCssVariables = false;\n\n try {\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n\n variables.forEach((variable) => {\n if (\n !hasJsCssVariables &&\n (variable.type === VariableType.JS ||\n variable.type === VariableType.CSS)\n ) {\n hasJsCssVariables = true;\n }\n\n const parsedVariable: KameleoonVariableType =\n Parser.parseFeatureVariable(variable).throw();\n\n resultVariables.set(variable.key, parsedVariable);\n });\n } catch (_) {}\n\n if (experimentId && typeof variationId === 'number' && !isSimulated) {\n Utilities.updateCache({\n cacheManager: this.trackingCache,\n hasJsCssVariables,\n visitorCode,\n experimentId,\n variationId,\n });\n }\n\n if (track && !isSimulated) {\n this.tracker.scheduleVisitor(\n visitorCode,\n this._isConsentProvided(visitorCode),\n );\n }\n\n const variationName =\n featureFlag.variations.find((item) => item.key === variationKey)?.name ??\n '';\n\n const resultData: Variation = {\n name: variationName,\n key: variationKey,\n id: variationId,\n experimentId,\n variables: resultVariables,\n };\n\n KameleoonLogger.debug`RETURN: KameleoonClient._getFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track}) -> (variation: ${resultData})`;\n return Ok(resultData);\n }\n\n private _isVisitorNotInHoldout(\n visitorCode: string,\n track: boolean,\n save: boolean,\n featureFlag?: ConfigFeatureFlagType,\n visitorData?: KameleoonVisitorDataType,\n ): boolean {\n const holdout = this.clientConfiguration.holdout;\n if (!holdout) {\n return true;\n }\n KameleoonLogger.debug`CALL: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${visitorCode}, track: ${track}, save: ${save}, featureFlag: ${featureFlag}, visitorData: ${visitorData})`;\n let isNotInHoldout = true;\n\n // Checking if the evaluation is blocked due to the consent policy\n const legalConsent = this.clientConfiguration.isConsentRequired\n ? this.getLegalConsent(visitorCode)\n : LegalConsent.Given;\n if (legalConsent == LegalConsent.NotGiven) {\n const behaviour = this.clientConfiguration.consentBlockingBehaviour;\n if (behaviour == ConsentBlockingBehaviour.CompletelyBlocked) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagEnvironmentDisabled,\n `Evaluation of holdout is blocked because consent is not provided for visitor '${visitorCode}'`,\n );\n }\n }\n\n const codeForHash = this._getCodeForHash(\n visitorCode,\n featureFlag?.bucketingCustomDataIndex,\n visitorData,\n );\n\n const holdoutHash = Hasher.getHashDouble({\n visitorIdentifier: codeForHash,\n respoolTime: null,\n id: String(holdout.experimentId),\n });\n\n KameleoonLogger.debug`Calculated holdoutHash: ${holdoutHash} for visitorCode: ${codeForHash}`;\n\n let varByExp = Utilities.getVariationByHash(\n holdout.variationByExposition,\n holdoutHash,\n );\n\n if (varByExp !== null) {\n isNotInHoldout = varByExp.variationKey !== IN_HOLDOUT_VARIATION_KEY;\n if (save) {\n this.variationConfiguration.updateStoredVariations(visitorCode, {\n [holdout.experimentId]: {\n variationId: varByExp.variationId,\n isTargetedRule: false,\n status: track ? TrackingStatus.Unsent : TrackingStatus.Sent,\n },\n });\n }\n }\n\n KameleoonLogger.debug`RETURN: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${visitorCode}, track: ${track}, save: ${save}, featureFlag: ${featureFlag}, visitorData: ${visitorData}) -> (isNotInHoldout: ${isNotInHoldout})`;\n return isNotInHoldout;\n }\n\n private _setForcedVariation({\n visitorCode,\n experimentId,\n variationKey,\n forceTargeting = true,\n }: SetForcedVariationParametersType): Result<void, KameleoonError> {\n KameleoonLogger.debug`CALL: KameleoonClient._setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting})`;\n\n if (variationKey === null) {\n const writeResult =\n this.variationConfiguration.updateForcedExperimentVariation(\n visitorCode,\n experimentId,\n null,\n );\n KameleoonLogger.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting}) -> (writeResult: ${writeResult})`;\n return writeResult;\n }\n\n let rule = null;\n let varByExp = null;\n\n rule = this.clientConfiguration.experimentMap.get(experimentId);\n if (!rule) {\n KameleoonLogger.error`Experiment with id ${experimentId} not found for visitor ${visitorCode}`;\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagExperimentNotFound,\n experimentId,\n visitorCode,\n ),\n );\n }\n varByExp = rule.variations.get(variationKey!);\n if (varByExp === undefined) {\n KameleoonLogger.error`Variation with key ${variationKey} not found in experiment ${rule} for visitor ${visitorCode}`;\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagVariationNotFound,\n variationKey!,\n visitorCode,\n ),\n );\n }\n\n rule = {\n type: rule.type,\n experimentId: experimentId,\n } as ForcedVariationRuleType;\n varByExp = {\n variationKey: variationKey,\n variationId: varByExp,\n } as ForcedVariationVarByExpType;\n\n const writeResult =\n this.variationConfiguration.updateForcedExperimentVariation(\n visitorCode,\n experimentId,\n {\n rule: rule,\n varByExp: varByExp,\n forceTargeting,\n } as ForcedExperimentVariationType,\n );\n\n KameleoonLogger.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting}) -> (writeResult: ${writeResult})`;\n return writeResult;\n }\n\n private _getCodeForHash(\n visitorCode: string,\n bucketingCustomDataIndex?: number | null,\n visitorData?: KameleoonVisitorDataType,\n ): string {\n KameleoonLogger.debug`CALL: KameleoonClient._getCodeForHash(visitorCode: ${visitorCode}, bucketingCustomDataIndex: ${bucketingCustomDataIndex}, visitorData: ${visitorData})`;\n let codeForHash;\n if (bucketingCustomDataIndex != null) {\n const customData = visitorData?.customData;\n if (customData) {\n const customDataValue = customData[bucketingCustomDataIndex]?.value[0];\n if (customDataValue) {\n codeForHash = customDataValue;\n }\n }\n }\n if (!codeForHash) {\n codeForHash = this.dataManager.getVisitorIdentifier(visitorCode);\n }\n\n KameleoonLogger.debug`RETURN: KameleoonClient._getCodeForHash(visitorCode: ${visitorCode}, bucketingCustomDataIndex: ${bucketingCustomDataIndex}, visitorData: ${visitorData}) -> (codeForHash: ${codeForHash})`;\n return codeForHash;\n }\n\n private static EvaluatedExperiment = class {\n static fromForcedFeatureVariation(\n defaultVariationKey: string,\n forcedFeatureVariation: ForcedFeatureVariationType,\n ): EvaluatedExperimentType {\n let varKey = defaultVariationKey;\n if (forcedFeatureVariation.varByExp) {\n varKey = forcedFeatureVariation.varByExp.variationKey;\n } else if (\n forcedFeatureVariation.rule &&\n forcedFeatureVariation.rule.type === RuleType.EXPERIMENTATION\n ) {\n varKey = OFF_VARIATION_KEY;\n }\n return {\n variationKey: varKey,\n variationId: forcedFeatureVariation.varByExp?.variationId || null,\n experimentId: forcedFeatureVariation.rule?.experimentId || null,\n ruleType: forcedFeatureVariation.rule?.type || null,\n isSimulated: forcedFeatureVariation.simulated,\n };\n }\n\n static fromVariationData(\n variationData: FeatureFlagVariationType,\n ): EvaluatedExperimentType {\n return {\n variationKey: variationData.variationKey,\n variationId: variationData.variationId,\n experimentId: variationData.experimentId,\n ruleType: variationData.rule?.type ?? null,\n isSimulated: false,\n };\n }\n\n static fromDefaultVariationKey(\n defaultVariationKey: string,\n ): EvaluatedExperimentType {\n return {\n variationKey: defaultVariationKey,\n variationId: null,\n experimentId: null,\n ruleType: null,\n isSimulated: false,\n };\n }\n };\n}\n","import { exhaustCheck } from './kameleoonError';\nimport { KameleoonResponseType, RequestType } from './requester';\nimport { SimulateRequestDataType } from './types';\n\n/**\n * KameleoonUtils - a class containing static Kameleoon helper methods\n * */\nexport class KameleoonUtils {\n /**\n * @method simulateSuccessRequest - a method to simulate a successful request based on request type, primarily used for `IExternalRequester` implementations\n *\n * @param {RequestType} requestType - request type\n * @param {SimulateRequestDataType[RequestType]} data - simulate data type for request\n * */\n public static simulateSuccessRequest<T extends RequestType>(\n requestType: T,\n data: SimulateRequestDataType[T],\n ): Promise<KameleoonResponseType> {\n switch (requestType) {\n case RequestType.Tracking:\n return new Promise((resolve) => {\n const response: KameleoonResponseType = {\n status: 204,\n json: () => new Promise((r) => r(null)),\n text: () => new Promise((r) => r('')),\n ok: true,\n };\n\n resolve(response);\n });\n case RequestType.Configuration:\n case RequestType.RemoteData:\n return new Promise((resolve) => {\n const response: KameleoonResponseType = {\n status: 200,\n json: () => new Promise((r) => r(data)),\n text: () => new Promise((r) => r('')),\n ok: true,\n };\n\n resolve(response);\n });\n default:\n exhaustCheck(requestType);\n }\n }\n\n /**\n * @method getCookieValue - a method to get a cookie value by key from a cookie string, primarily used for `IExternalVisitorCodeManager` implementations\n *\n * @param {string} cookie - cookie string\n * @param {string} key - cookie key\n * @returns {string | null} cookie value or null if not found\n * */\n public static getCookieValue(cookie: string, key: string): string | null {\n const pairs = cookie.split('; ');\n const pair = pairs.find((pair) => {\n const [pairKey, pairValue] = pair.split('=');\n\n return pairKey === key && pairValue !== '';\n });\n\n if (pair) {\n return pair.split('=')[1];\n }\n\n return null;\n }\n}\n"],"names":["require$$0","KameleoonException","HttpMethod","RequestType","Header","LogLevel","Ok","Err","Environment","VariableType","TrackingStatus","Milliseconds","CustomDataScope","EventType","KameleoonData","DeviceType","OperatingSystemType","BrowserType","SdkLanguageType","CustomData","Browser","Device","OperatingSystem","Conversion","CookieData","KameleoonStorageKey","LegalConsent","this","undefined","global","require"],"mappings":"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","x_google_ignoreList":[0,1,2,89,90]}
|
|
1
|
+
{"version":3,"file":"javascript-sdk-core.browser.cjs.js","sources":["../../../node_modules/ts-res/build/main.js","../../../node_modules/ts-res/build/index.js","../../../node_modules/tslib/tslib.es6.js","../src/kameleoonError/types.ts","../src/kameleoonError/constants.ts","../src/kameleoonError/helpers.ts","../src/kameleoonError/kameleoonError.ts","../src/requester/types.ts","../src/requester/constants.ts","../src/logging/types.ts","../src/logging/defaultLogger.ts","../src/logging/kameleoonLogger.ts","../src/requester/requester.ts","../src/sdkInfoTypes.ts","../src/requester/urlProvider.ts","../src/types.ts","../src/cacheManager/cacheManager.ts","../src/clientConfiguration/types.ts","../src/eventManager/eventManager.ts","../src/eventManager/types.ts","../src/clientConfiguration/constants.ts","../src/clientConfiguration/meGroup.ts","../src/clientConfiguration/clientConfiguration.ts","../src/kameleoonData/helpers.ts","../src/kameleoonData/types.ts","../src/constants.ts","../src/targeting/types.ts","../src/utilities/types.ts","../src/utilities/constants.ts","../src/utilities/validator.ts","../src/utilities/utilities.ts","../src/utilities/listUtilities.ts","../src/kameleoonData/pageView.ts","../src/kameleoonData/customData.ts","../src/kameleoonData/conversion.ts","../src/kameleoonData/browser.ts","../src/kameleoonData/device.ts","../src/kameleoonData/operatingSystem.ts","../src/kameleoonData/geolocation.ts","../src/kameleoonData/visitsData.ts","../src/kameleoonData/kameleoonConversionScore.ts","../src/kameleoonData/personalization.ts","../src/kameleoonData/cbScores.ts","../src/kameleoonData/visitProcessor.ts","../src/utilities/parser.ts","../src/clientSettings/clientSettings.ts","../src/kameleoonData/cookie.ts","../src/kameleoonData/userAgent.ts","../src/kameleoonData/uniqueIdentifier.ts","../src/kameleoonData/applicationVersion.ts","../src/kameleoonData/dataProcessor.ts","../src/kameleoonData/staticData.ts","../src/targeting/conditions/conditionFactoryInstance.ts","../src/targeting/node.ts","../src/targeting/tree.ts","../src/targeting/conditions/device.ts","../src/targeting/conditions/browser.ts","../src/targeting/conditions/conversion.ts","../src/targeting/conditions/customData.ts","../src/targeting/conditions/utilities.ts","../src/targeting/conditions/pageTitle.ts","../src/targeting/conditions/pageUrl.ts","../src/targeting/conditions/sdkLanguage.ts","../src/targeting/conditions/visitorCode.ts","../src/targeting/conditions/cookie.ts","../src/targeting/conditions/operatingSystem.ts","../src/targeting/conditions/geolocation.ts","../src/targeting/conditions/segment.ts","../src/targeting/conditions/targetFeatureFlag.ts","../src/targeting/conditions/previousPage.ts","../src/targeting/conditions/visitedPages.ts","../src/targeting/conditions/firstVisit.ts","../src/targeting/conditions/lastVisit.ts","../src/targeting/conditions/sameDayVisits.ts","../src/targeting/conditions/visits.ts","../src/targeting/conditions/newVisitor.ts","../src/targeting/conditions/applicationVersion.ts","../src/targeting/conditions/conversionLikelihood.ts","../src/targeting/conditions/exclusiveExperiment.ts","../src/targeting/conditions/targetExperiment.ts","../src/targeting/conditions/targetPersonalization.ts","../src/targeting/conditions/conditionFactory.ts","../src/storage/constants.ts","../src/storage/integrityChecker.ts","../src/storage/storage.ts","../src/storage/storageCleanupManager.ts","../src/storage/types.ts","../src/kameleoonData/targetedSegment.ts","../src/kameleoonData/dataManager.ts","../../../node_modules/crypto-js/core.js","../../../node_modules/crypto-js/sha256.js","../src/hasher/hasher.ts","../src/variationConfiguration/variationConfiguration.ts","../src/eventSource/constants.ts","../src/eventSource/eventSource.ts","../src/visitorCodeManager/constants.ts","../src/visitorCodeManager/visitorCodeManager.ts","../src/tracking/constants.ts","../src/tracking/bodyProvider.ts","../src/tracking/tracker.ts","../src/kameleoonClient.ts","../src/kameleoonUtils.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Err = exports.Ok = void 0;\n// --- Note ---\n// `throw` is a reserved keyword\nfunction throwErr(message) {\n if (!this.ok) {\n if (typeof this.error === \"string\" || typeof this.error === \"undefined\") {\n var defaultMessage = \"There was an error! No specific error message was provided.\";\n throw new Error(message || this.error || defaultMessage);\n }\n if (message) {\n this.error.message = message;\n }\n throw this.error;\n }\n return this.data;\n}\n// --- Note ---\n// `else` is a reserved keyword\nfunction elseDo(callback) {\n if (this.ok) {\n return this.data;\n }\n // TODO:\n // - Tackle the problem of callback return type not being enforced when using `void` | `undefined` as `T`\n // - In the same situation `or` works well\n return callback(this.error);\n}\nfunction or(orValue) {\n if (this.ok) {\n return this.data;\n }\n return orValue;\n}\nfunction and(callback) {\n if (this.ok) {\n callback(this.data);\n }\n return this;\n}\nfunction Ok(data) {\n return { ok: true, data: data, throw: throwErr, else: elseDo, or: or, and: and };\n}\nexports.Ok = Ok;\nfunction Err(error) {\n return { ok: false, error: error, throw: throwErr, else: elseDo, or: or, and: and };\n}\nexports.Err = Err;\n//# sourceMappingURL=main.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Err = exports.Ok = void 0;\nvar main_1 = require(\"./main\");\nObject.defineProperty(exports, \"Ok\", { enumerable: true, get: function () { return main_1.Ok; } });\nObject.defineProperty(exports, \"Err\", { enumerable: true, get: function () { return main_1.Err; } });\n//# sourceMappingURL=index.js.map","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(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\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(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\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __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\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __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\n\r\nvar 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\r\nexport function __importStar(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\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of exception types `KameleoonError`\n * */\nexport enum KameleoonException {\n Credentials = 'Credentials',\n EventSourceInitialization = 'EventSourceInitialization',\n FeatureFlagConfigurationNotFound = 'FeatureFlagConfigurationNotFound',\n FeatureFlagVariableNotFound = 'FeatureFlagVariableNotFound',\n FeatureFlagVariationNotFound = 'FeatureFlagVariationNotFound',\n FeatureFlagExperimentNotFound = 'FeatureFlagExperimentNotFound',\n FeatureFlagEnvironmentDisabled = 'FeatureFlagEnvironmentDisabled',\n VisitAmount = 'VisitAmount',\n VisitorCodeMaxLength = 'VisitorCodeMaxLength',\n VisitorCodeEmpty = 'VisitorCodeEmpty',\n StorageInitialization = 'StorageInitialization',\n StorageWrite = 'StorageWrite',\n StorageRead = 'StorageRead',\n StorageParse = 'StorageParse',\n StorageEmpty = 'StorageEmpty',\n ClientConfiguration = 'ClientConfiguration',\n TargetingCondition = 'TargetingCondition',\n AmongValuesCheck = 'AmongValuesCheck',\n RangeCheck = 'RangeCheck',\n Initialization = 'Initialization',\n JSONParse = 'JSONParse',\n NumberParse = 'NumberParse',\n VersionParse = 'VersionParse',\n CookieParse = 'CookieParse',\n SemanticVersionParse = 'SemanticVersionParse',\n RemoteData = 'RemoteData',\n MaximumRetriesReached = 'MaximumRetriesReached',\n}\n","import { KameleoonStorageKey } from 'src/storage';\nimport { TargetingType } from 'src/targeting';\nimport { KameleoonException } from './types';\n\nexport const ERROR_MESSAGES = {\n [KameleoonException.CookieParse]: (reason: string) =>\n `Couldn't parse cookie string: ${reason}`,\n [KameleoonException.JSONParse]: (err: unknown) =>\n `Couldn't parse JSON variable: ${err}`,\n [KameleoonException.NumberParse]: (value: string) =>\n `It's not possible to parse value ${value} to Number`,\n [KameleoonException.VersionParse]: (value: string) =>\n `It's not possible to parse a version value ${value} to Number, version should be in format x.x`,\n [KameleoonException.SemanticVersionParse]: (value: string) =>\n `It's not possible to parse a version value ${value} to Number, version should be in format x.x.x`,\n [KameleoonException.Initialization]: () =>\n \"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods\",\n [KameleoonException.Credentials]: () =>\n 'KameleoonClient can not be created without credentials',\n [KameleoonException.StorageInitialization]: () =>\n \"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed\",\n [KameleoonException.EventSourceInitialization]: () =>\n \"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed\",\n [KameleoonException.FeatureFlagConfigurationNotFound]: (featureKey: string) =>\n `No feature flag with key ${featureKey} was found.`,\n [KameleoonException.FeatureFlagEnvironmentDisabled]: (\n featureKey: string,\n environment: string,\n ) =>\n `Feature flag with key ${featureKey} is disabled in ${environment} environment.`,\n [KameleoonException.FeatureFlagVariableNotFound]: (\n variableKey: string,\n visitorCode: string,\n ) =>\n `No feature flag variable with key ${variableKey} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.FeatureFlagVariationNotFound]: (\n variationKey: string,\n visitorCode: string,\n ) =>\n `No feature flag variation with key ${variationKey} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.FeatureFlagExperimentNotFound]: (\n experimentId: number,\n visitorCode: string,\n ) =>\n `No feature flag experiment with id ${experimentId} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.VisitAmount]: () =>\n 'Visit amount must be a number between 1 and 25',\n [KameleoonException.VisitorCodeMaxLength]: () =>\n 'Visitor code can not be more than 255 characters long',\n [KameleoonException.VisitorCodeEmpty]: () => 'Visitor code can not be empty',\n [KameleoonException.StorageWrite]: (err: unknown) =>\n `Couldn't update storage for kameleoonClient: ${err}`,\n [KameleoonException.StorageRead]: (key: KameleoonStorageKey) =>\n `No data found in storage under ${key} key`,\n [KameleoonException.StorageEmpty]: () => 'No data found in storage',\n [KameleoonException.StorageParse]: (err: unknown, key: KameleoonStorageKey) =>\n `Couldn't parse ${key} storage data, the data may be corrupted. Error: ${err}`,\n [KameleoonException.ClientConfiguration]: (err: unknown) =>\n `Couldn't retrieve client configuration from Kameleoon Api. Error: ${err}`,\n [KameleoonException.TargetingCondition]: (targetingType: TargetingType) =>\n `${targetingType} targeting condition is not yet supported.`,\n [KameleoonException.AmongValuesCheck]: (err: unknown, value: string) =>\n `Couldn't parse value \"${value}\": ${err}`,\n [KameleoonException.RangeCheck]: (value?: number[] | null) =>\n `Couldn't parse value \"${value}\" as a range, value should be in format [x: number, y: number]`,\n [KameleoonException.RemoteData]: (err: unknown) =>\n `Couldn't retrieve data from Kameleoon server. Error: ${err}`,\n [KameleoonException.MaximumRetriesReached]: (err: unknown) =>\n `Maximum retries reached, request failed. Reason: ${err}`,\n};\n","export function exhaustCheck(option: never): never {\n throw new Error(`Reaching an impossible state because of ${option}`);\n}\n","import { KameleoonStorageKey } from 'src/storage';\nimport { TargetingType } from 'src/targeting';\nimport { ERROR_MESSAGES } from './constants';\nimport { exhaustCheck } from './helpers';\nimport { KameleoonException } from './types';\n\n/**\n * @class\n * KameleoonError - extends standard `Error` by adding custom `type` property with the type of `KameleoonException`\n * */\nexport class KameleoonError extends Error {\n private errorType: KameleoonException;\n\n /**\n * @param {KameleoonException} type - type of KameleoonError represented by `KameleoonException` enum\n * */\n constructor(\n type:\n | KameleoonException.Initialization\n | KameleoonException.Credentials\n | KameleoonException.VisitorCodeMaxLength\n | KameleoonException.VisitorCodeEmpty\n | KameleoonException.VisitAmount\n | KameleoonException.StorageInitialization\n | KameleoonException.EventSourceInitialization\n | KameleoonException.StorageEmpty,\n );\n constructor(\n type:\n | KameleoonException.FeatureFlagConfigurationNotFound\n | KameleoonException.FeatureFlagEnvironmentDisabled,\n featureKey: string,\n );\n constructor(\n type:\n | KameleoonException.FeatureFlagConfigurationNotFound\n | KameleoonException.FeatureFlagEnvironmentDisabled,\n featureKey: string,\n environment: string,\n );\n constructor(\n type: KameleoonException.FeatureFlagVariableNotFound,\n variableKey: string,\n visitorCode: string,\n );\n constructor(\n type: KameleoonException.FeatureFlagVariationNotFound,\n variationKey: string,\n visitorCode: string,\n );\n constructor(\n type: KameleoonException.FeatureFlagExperimentNotFound,\n experimentId: number,\n visitorCode: string,\n );\n constructor(type: KameleoonException.CookieParse, message: string);\n constructor(\n type:\n | KameleoonException.StorageWrite\n | KameleoonException.JSONParse\n | KameleoonException.RemoteData\n | KameleoonException.MaximumRetriesReached\n | KameleoonException.ClientConfiguration,\n err: unknown,\n );\n constructor(type: KameleoonException.StorageRead, storageKey: string);\n constructor(\n type: KameleoonException.StorageParse,\n err: unknown,\n key: KameleoonStorageKey,\n );\n constructor(\n type: KameleoonException.TargetingCondition,\n targetingType: TargetingType,\n );\n constructor(\n type: KameleoonException.AmongValuesCheck,\n err: unknown,\n value: string,\n );\n constructor(type: KameleoonException.RangeCheck, value?: number[] | null);\n constructor(\n type:\n | KameleoonException.NumberParse\n | KameleoonException.VersionParse\n | KameleoonException.SemanticVersionParse,\n value: string,\n );\n constructor(\n type: KameleoonException,\n secondParam?:\n | number\n | string\n | unknown\n | KameleoonStorageKey\n | TargetingType,\n thirdParam?: string | KameleoonStorageKey,\n ) {\n super(`Error: ${type}`);\n\n this.name = 'KameleoonError';\n this.errorType = type;\n\n switch (type) {\n case KameleoonException.Initialization:\n case KameleoonException.Credentials:\n case KameleoonException.VisitorCodeMaxLength:\n case KameleoonException.VisitorCodeEmpty:\n case KameleoonException.StorageInitialization:\n case KameleoonException.VisitAmount:\n case KameleoonException.EventSourceInitialization:\n case KameleoonException.StorageEmpty:\n this.message = ERROR_MESSAGES[type]();\n break;\n case KameleoonException.CookieParse:\n case KameleoonException.FeatureFlagConfigurationNotFound:\n case KameleoonException.NumberParse:\n case KameleoonException.ClientConfiguration:\n case KameleoonException.MaximumRetriesReached:\n case KameleoonException.RemoteData:\n case KameleoonException.VersionParse:\n case KameleoonException.SemanticVersionParse:\n this.message = ERROR_MESSAGES[type](secondParam as string);\n break;\n case KameleoonException.FeatureFlagExperimentNotFound:\n this.message = ERROR_MESSAGES[type](\n secondParam as number,\n thirdParam as string,\n );\n break;\n case KameleoonException.FeatureFlagVariationNotFound:\n case KameleoonException.FeatureFlagVariableNotFound:\n this.message = ERROR_MESSAGES[type](\n secondParam as string,\n thirdParam as string,\n );\n break;\n case KameleoonException.FeatureFlagEnvironmentDisabled:\n if (thirdParam !== undefined) {\n this.message = ERROR_MESSAGES[type](\n secondParam as string,\n thirdParam as string,\n );\n } else {\n this.message = secondParam as string;\n }\n break;\n case KameleoonException.StorageWrite:\n case KameleoonException.JSONParse:\n this.message = ERROR_MESSAGES[type](secondParam);\n break;\n case KameleoonException.StorageRead:\n this.message = ERROR_MESSAGES[type](secondParam as KameleoonStorageKey);\n break;\n case KameleoonException.StorageParse:\n this.message = ERROR_MESSAGES[type](\n secondParam,\n thirdParam as KameleoonStorageKey,\n );\n break;\n case KameleoonException.TargetingCondition:\n this.message = ERROR_MESSAGES[type](secondParam as TargetingType);\n break;\n case KameleoonException.AmongValuesCheck:\n this.message = ERROR_MESSAGES[type](secondParam, thirdParam as string);\n break;\n case KameleoonException.RangeCheck:\n this.message = ERROR_MESSAGES[type](\n secondParam as number[] | null | undefined,\n );\n break;\n default:\n exhaustCheck(type);\n }\n }\n\n get type(): KameleoonException {\n return this.errorType;\n }\n}\n","import { JSONType } from 'src/clientConfiguration';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport {\n BrowserIndexMap,\n BrowserType,\n OperatingSystemType,\n} from 'src/kameleoonData';\nimport {\n CBSType,\n DeviceType,\n KCSType,\n OperatingSystemIndexMap,\n} from 'src/kameleoonData/types';\nimport { Header } from './constants';\nimport { VisitorDataFiltersType } from 'src/utilities';\nimport { IUrlProvider } from './urlProvider';\nimport { LogLevel } from 'src/logging';\n\nexport enum UrlType {\n DataApi = 'dataApi',\n Events = 'events',\n ClientConfiguration = 'clientConfiguration',\n}\n\nexport type DomainsType = {\n [key in UrlType]: string;\n};\n\nexport type DomainType = {\n subdomain: string;\n topLevelDomain: string;\n secondLevelDomain: string;\n};\n\nexport type UrlProviderInitializeParamsType = {\n domain: string | null;\n siteCode: string;\n packageInfo: ExternalPackageInfoType;\n environment: string;\n};\n\nexport type RequesterParamsType = {\n useAbortController: boolean;\n urlProvider: IUrlProvider;\n packageInfo: ExternalPackageInfoType;\n externalRequester: IExternalRequester;\n trackRetryDelay: number;\n requestTimeout: number;\n};\n\nexport type GetVisitorDataParamsType = {\n visitorCode: string;\n filters: VisitorDataFiltersType;\n isMappingIdentifier?: boolean;\n};\n\nexport type GetVisitorDataUrlParamsType = {\n visitorCode: string;\n filters: VisitorDataFiltersType;\n isMappingIdentifier?: boolean;\n};\n\ntype EventDataType = {\n sdk?: {\n name: string;\n version: string;\n };\n itp: boolean;\n time: number;\n};\n\ntype CustomDataEventType = {\n data: {\n index: number;\n valuesCountMap: {\n [value: string]: number;\n };\n overwrite: boolean;\n mappingIdentifier: boolean;\n };\n} & EventDataType;\n\ntype ExperimentEventType = {\n data: {\n id: number;\n variationId: number;\n };\n} & EventDataType;\n\ntype ConversionEventType = {\n data: {\n goalId: number;\n revenue: number;\n negative: boolean;\n metadata?: CustomDataEventType[];\n };\n} & EventDataType;\n\ntype BrowserIndexType = (typeof BrowserIndexMap)[BrowserType];\ntype OperatingSystemIndexType =\n (typeof OperatingSystemIndexMap)[OperatingSystemType];\n\nexport type PageEventType = {\n data: {\n href: string;\n canonicalHref: string | null;\n title: string;\n keyPagesIndices: number[] | [null];\n referrerHref: string | null;\n referrersIndices: number[] | [null];\n };\n} & EventDataType;\n\nexport type GeolocationEventType = {\n data: {\n country: string;\n region: string | null;\n city: string | null;\n postalCode: string | null;\n latitude: number | null;\n longitude: number | null;\n };\n} & EventDataType;\n\nexport type PersonalizationEventType = {\n data: {\n id: number;\n variationId: number;\n };\n};\n\nexport type StaticDataEventType = {\n data: {\n visitNumber: number | null | undefined;\n timeSincePreviousVisit: number | null | undefined;\n firstReferrerHref: string | null;\n browser: BrowserType | null;\n browserIndex: BrowserIndexType | null;\n browserVersion: number | null;\n os: OperatingSystemType | null;\n osIndex: OperatingSystemIndexType | null;\n windowWidth: number | null;\n windowHeight: number | null;\n screenWidth: number | null;\n screenHeight: number | null;\n timeZoneId: string | null;\n localeLanguageTag: string | null;\n deviceType: DeviceType | null;\n mappingIdentifier: string | null;\n };\n} & EventDataType;\n\nexport type VisitType = {\n siteCode: string;\n visitorCode: string;\n timeStarted: number;\n timeLastEvent?: number;\n customDataEvents?: CustomDataEventType[];\n experimentEvents?: ExperimentEventType[];\n conversionEvents?: ConversionEventType[];\n geolocationEvents?: GeolocationEventType[];\n staticDataEvent?: StaticDataEventType;\n pageEvents?: PageEventType[];\n personalizationEvents?: PersonalizationEventType[];\n};\n\nexport type GetVisitorDataResultType = {\n previousVisits?: VisitType[];\n currentVisit?: VisitType;\n kcs?: KCSType;\n cbs?: CBSType;\n};\n\nexport enum HttpMethod {\n Get = 'GET',\n Post = 'POST',\n}\n\nexport enum DataApiQuery {\n VisitEvent,\n VisitData,\n DataMap,\n}\n\nconst EVENT_TYPE_KEYS = [\n 'customData',\n 'staticData',\n 'targetingSegment',\n 'page',\n 'conversion',\n 'geolocation',\n 'activity',\n 'experiment',\n] as const;\nconst PARAMETER_KEYS = [\n 'valuesCountMap',\n 'mappingValue',\n 'id',\n 'nonce',\n 'country',\n 'environment',\n 'city',\n 'region',\n 'latitude',\n 'geolocation',\n 'longitude',\n 'mappingIdentifier',\n 'postalCode',\n 'sdkName',\n 'sdkVersion',\n 'kcs',\n 'cbs',\n 'personalization',\n 'browserIndex',\n 'browserVersion',\n 'siteCode',\n 'visitorCode',\n 'currentVisit',\n 'maxNumberPreviousVisits',\n 'customData',\n 'negative',\n 'metadata',\n 'revenue',\n 'title',\n 'os',\n 'conversion',\n 'staticData',\n 'osIndex',\n 'browser',\n 'referrersIndices',\n 'overwrite',\n 'index',\n 'href',\n 'experiment',\n 'page',\n 'variationId',\n 'deviceType',\n 'goalId',\n 'ts',\n 'key',\n 'userAgent',\n 'bodyUa',\n 'timeSincePreviousVisit',\n 'visitNumber',\n] as const;\nconst TRACKING_KEYS = ['visit', 'map'] as const;\nconst QUERY_KEYS = ['sse', 'visitor', 'map', 'events'] as const;\n\nexport type TrackingType = Record<\n Capitalize<(typeof TRACKING_KEYS)[number]>,\n string\n>;\nexport type QueryType = Record<Capitalize<(typeof QUERY_KEYS)[number]>, string>;\nexport type ParameterType = Record<\n Capitalize<(typeof PARAMETER_KEYS)[number]>,\n string\n>;\nexport type EventType = Record<\n Capitalize<(typeof EVENT_TYPE_KEYS)[number]>,\n string\n>;\n\nexport type StrictTrackingRecord<T> = {\n [K in keyof T]: `${Uncapitalize<K & string>}/`;\n};\nexport type StrictQueryRecord<T> = {\n [K in keyof T]: `${Uncapitalize<K & string>}?siteCode=`;\n};\nexport type StrictEventTypeRecord<T> = {\n [K in keyof T]: `eventType=${Uncapitalize<K & string>}`;\n};\nexport type StrictParameterRecord<T> = {\n [K in keyof T]: `&${Uncapitalize<K & string>}=`;\n};\nexport type StrictFirstParameterRecord<T> = {\n [K in keyof T]: `?${Uncapitalize<K & string>}=`;\n};\n\n/**\n * @type `HeadersType` - a type of headers available in the request\n * */\nexport type HeadersType = Partial<Record<Header, string>>;\n\n/**\n * @type `RequestParametersType` - a type of parameters available in the request for each request type\n * */\nexport type RequestParametersType = {\n [RequestType.Configuration]: {\n headers?: HeadersType;\n signal: AbortSignal | null;\n method: HttpMethod.Get;\n };\n [RequestType.Tracking]: {\n headers?: HeadersType;\n body: string;\n signal: AbortSignal | null;\n method: HttpMethod.Post;\n };\n [RequestType.RemoteData]: {\n headers?: HeadersType;\n signal: AbortSignal | null;\n method: HttpMethod.Get;\n };\n};\n\n/**\n * @enum `RequestType` - an enum of available request types\n * */\nexport enum RequestType {\n Configuration = 'configuration',\n Tracking = 'tracking',\n RemoteData = 'remoteData',\n}\n\n/**\n * @type `RetryCountType` - a type of retry count available for each request type\n * @param {0 | 1 | 2} `RequestType.Configuration` - a count of retries for configuration request (`0` is the initial request)\n * @param {0 | 1 | 2} `RequestType.Tracking` - a count of retries for tracking request (`0` is the initial request)\n * @param {0} `RequestType.RemoteData` - a count of retries for remote data request (`0` is the initial request)\n * */\nexport type RetryCountType = {\n [RequestType.Configuration]: 0 | 1 | 2;\n [RequestType.Tracking]: 0 | 1 | 2;\n [RequestType.RemoteData]: 0;\n};\n\n/**\n * @type `SendRequestParametersType` - a type of parameters available to send a request\n * @param {T extends RequestType} T - a type of request constrained by `RequestType`\n * @param {string} url - url address\n * @param {RequestParametersType[T]} parameters - parameters of the request depending on the request type\n * @param {RetryCountType | undefined} retryCount - a count of retries, the possible count of retries depends on `RequestType`\n * */\nexport type SendRequestParametersType<T extends RequestType> = {\n requestType: T;\n url: string;\n retryCount?: RetryCountType[T];\n parameters: RequestParametersType[T];\n};\n\n/**\n * @type `KameleoonResponse` - a type of response that is assignable to most libraries `Response` objects\n * @property {number} status - a status of the response\n * @property {() => Promise<JSONType>} json - a method to parse the response to JSON\n * @property {() => Promise<string>} text - a method to parse the response to text\n * @property {boolean} ok - a boolean value that indicates if the response is ok\n * @property {Headers} headers - a headers of the response\n * */\nexport type KameleoonResponseType = {\n status: number;\n json: () => Promise<JSONType>;\n text: () => Promise<string>;\n ok: boolean;\n headers?: Iterable<[string, string]>;\n};\n\nexport type InternalSendRequestParametersType<T extends RequestType> = {\n url: string;\n requestType: RequestType;\n retryCount: number;\n parameters: Omit<RequestParametersType[T], 'signal'>;\n};\n\n/**\n * @interface `IExternalRequester` - an interface of External Requester which will be used to perform requests.\n * */\nexport interface IExternalRequester {\n /**\n * @method sendRequest - send a request\n * @param {SendRequestParametersType<T>} parameters - parameters of the request depending on the request type\n * @returns {Promise<KameleoonResponseType>} - a promise that resolves to the response\n * */\n sendRequest: <T extends RequestType>({\n requestType,\n url,\n parameters,\n }: SendRequestParametersType<T>) => Promise<KameleoonResponseType>;\n}\n\nexport type logRequestParametersType = {\n logLevel: LogLevel;\n message: string;\n error?: unknown;\n method: HttpMethod;\n url: string;\n response?: KameleoonResponseType;\n headers?: HeadersType;\n};\n\nexport type logResponse = {\n status: number;\n message: string;\n};\n","import {\n DomainsType,\n EventType,\n ParameterType,\n QueryType,\n UrlType,\n StrictEventTypeRecord,\n StrictFirstParameterRecord,\n StrictParameterRecord,\n StrictQueryRecord,\n StrictTrackingRecord,\n TrackingType,\n} from './types';\n\nexport const NUMBER_OF_RETRIES = 1;\n\nexport enum Header {\n UserAgent = 'User-Agent',\n ContentType = 'Content-Type',\n SdkVersion = 'X-Kameleoon-SDK-Version',\n SdkType = 'X-Kameleoon-SDK-Type',\n Authorization = 'Authorization',\n AcceptEncoding = 'Accept-Encoding',\n IfModifiedSince = 'If-Modified-Since',\n LastModified = 'Last-Modified',\n}\n\nexport const UrlEventType: StrictEventTypeRecord<EventType> = {\n CustomData: 'eventType=customData',\n StaticData: 'eventType=staticData',\n Page: 'eventType=page',\n Conversion: 'eventType=conversion',\n Activity: 'eventType=activity',\n Experiment: 'eventType=experiment',\n Geolocation: 'eventType=geolocation',\n TargetingSegment: 'eventType=targetingSegment',\n};\nexport const UrlParameter: StrictParameterRecord<ParameterType> = {\n Title: '&title=',\n ReferrersIndices: '&referrersIndices=',\n Negative: '&negative=',\n Revenue: '&revenue=',\n Overwrite: '&overwrite=',\n Index: '&index=',\n BrowserIndex: '&browserIndex=',\n BrowserVersion: '&browserVersion=',\n Href: '&href=',\n DeviceType: '&deviceType=',\n SiteCode: '&siteCode=',\n GoalId: '&goalId=',\n VisitorCode: '&visitorCode=',\n VariationId: '&variationId=',\n Ts: '&ts=',\n Key: '&key=',\n SdkName: '&sdkName=',\n SdkVersion: '&sdkVersion=',\n ValuesCountMap: '&valuesCountMap=',\n Nonce: '&nonce=',\n Id: '&id=',\n CustomData: '&customData=',\n CurrentVisit: '¤tVisit=',\n MaxNumberPreviousVisits: '&maxNumberPreviousVisits=',\n Os: '&os=',\n OsIndex: '&osIndex=',\n Country: '&country=',\n City: '&city=',\n Region: '®ion=',\n Latitude: '&latitude=',\n Longitude: '&longitude=',\n PostalCode: '&postalCode=',\n Conversion: '&conversion=',\n StaticData: '&staticData=',\n Geolocation: '&geolocation=',\n Page: '&page=',\n Experiment: '&experiment=',\n Browser: '&browser=',\n Environment: '&environment=',\n MappingIdentifier: '&mappingIdentifier=',\n MappingValue: '&mappingValue=',\n Kcs: '&kcs=',\n Personalization: '&personalization=',\n UserAgent: '&userAgent=',\n BodyUa: '&bodyUa=',\n Cbs: '&cbs=',\n Metadata: '&metadata=',\n VisitNumber: '&visitNumber=',\n TimeSincePreviousVisit: '&timeSincePreviousVisit=',\n};\nexport const UrlFirstParameter: StrictFirstParameterRecord<ParameterType> = {\n CustomData: '?customData=',\n StaticData: '?staticData=',\n Page: '?page=',\n Conversion: '?conversion=',\n Geolocation: '?geolocation=',\n Experiment: '?experiment=',\n ValuesCountMap: '?valuesCountMap=',\n Id: '?id=',\n Nonce: '?nonce=',\n Country: '?country=',\n Environment: '?environment=',\n City: '?city=',\n Region: '?region=',\n Latitude: '?latitude=',\n Longitude: '?longitude=',\n PostalCode: '?postalCode=',\n SdkName: '?sdkName=',\n SdkVersion: '?sdkVersion=',\n BrowserIndex: '?browserIndex=',\n BrowserVersion: '?browserVersion=',\n SiteCode: '?siteCode=',\n VisitorCode: '?visitorCode=',\n CurrentVisit: '?currentVisit=',\n MaxNumberPreviousVisits: '?maxNumberPreviousVisits=',\n Negative: '?negative=',\n Revenue: '?revenue=',\n Title: '?title=',\n Os: '?os=',\n OsIndex: '?osIndex=',\n Browser: '?browser=',\n ReferrersIndices: '?referrersIndices=',\n Overwrite: '?overwrite=',\n Index: '?index=',\n Href: '?href=',\n VariationId: '?variationId=',\n DeviceType: '?deviceType=',\n GoalId: '?goalId=',\n Ts: '?ts=',\n Key: '?key=',\n MappingIdentifier: '?mappingIdentifier=',\n MappingValue: '?mappingValue=',\n Kcs: '?kcs=',\n Personalization: '?personalization=',\n UserAgent: '?userAgent=',\n BodyUa: '?bodyUa=',\n Cbs: '?cbs=',\n Metadata: '?metadata=',\n VisitNumber: '?visitNumber=',\n TimeSincePreviousVisit: '?timeSincePreviousVisit=',\n};\nexport const UrlQuery: StrictQueryRecord<QueryType> = {\n Sse: 'sse?siteCode=',\n Map: 'map?siteCode=',\n Events: 'events?siteCode=',\n Visitor: 'visitor?siteCode=',\n};\nexport const UrlTracking: StrictTrackingRecord<TrackingType> = {\n Visit: 'visit/',\n Map: 'map/',\n};\n\nexport const DEFAULT_DOMAINS: DomainsType = {\n [UrlType.DataApi]: 'data.kameleoon.io',\n [UrlType.Events]: 'events.kameleoon.eu',\n [UrlType.ClientConfiguration]: 'sdk-config.kameleoon.eu',\n};\n","/**\n * Interface for a logger that accepts log messages at different levels.\n */\nexport interface IExternalLogger {\n /**\n * @method log - logs a message at the specified log level.\n *\n * @param {LogLevel} level the log level\n * @param {string} message the log message\n */\n log(level: LogLevel, message: string): void;\n}\n\n/**\n * Enumeration of log levels.\n */\nexport enum LogLevel {\n NONE,\n ERROR,\n WARNING,\n INFO,\n DEBUG,\n}\n\ntype LogLevelNames = {\n [K in string & keyof typeof LogLevel as (typeof LogLevel)[K]]: K;\n};\n\n/**\n * Mapping of log levels to their string representations.\n */\nexport const LOG_LEVEL_NAMES: LogLevelNames = {\n [LogLevel.NONE]: 'NONE',\n [LogLevel.ERROR]: 'ERROR',\n [LogLevel.WARNING]: 'WARNING',\n [LogLevel.INFO]: 'INFO',\n [LogLevel.DEBUG]: 'DEBUG',\n};\n\nexport type LogInputType = TemplateStringsArray | string | (() => string);\n\nexport type LogParametersType = {\n level: LogLevel;\n strings: LogInputType;\n keys?: unknown[];\n};\n","import { IExternalLogger, LogLevel } from 'src/logging/types';\n\n/**\n * A simple implementation of a logger that prints log messages to the console. This logger\n * implements the {@code IExternalLogger} interface.\n */\nexport class DefaultLogger implements IExternalLogger {\n /**\n * @method log - logs a message at the specified log level.\n *\n * @param {LogLevel} level - the log level\n * @param {string} message - the log message\n */\n public log(level: LogLevel, message: string): void {\n switch (level) {\n case LogLevel.DEBUG:\n console.debug(message);\n break;\n case LogLevel.INFO:\n console.info(message);\n break;\n case LogLevel.WARNING:\n console.warn(message);\n break;\n case LogLevel.ERROR:\n console.error(message);\n break;\n }\n }\n}\n","import {\n IExternalLogger,\n LogInputType,\n LogLevel,\n LOG_LEVEL_NAMES,\n LogParametersType,\n} from 'src/logging/types';\nimport { DefaultLogger } from 'src/logging/defaultLogger';\n\nconst replacer = (key: string, value: unknown) => {\n if (key === 'credentials') {\n return {\n clientId: `****`,\n clientSecret: `****`,\n };\n }\n\n if (value instanceof Map) {\n return Array.from(value.entries());\n }\n\n return value;\n};\n\nfunction template(strings: TemplateStringsArray, keys?: unknown[]): string {\n let res = '';\n\n if (keys) {\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n if (typeof key === 'object') {\n try {\n res += strings[i] + JSON.stringify(key, replacer);\n } catch (error) {\n res += strings[i] + \"{object}\";\n }\n } else if (typeof key === 'string') {\n res += strings[i] + \"'\" + key + \"'\";\n } else {\n res += strings[i] + key;\n }\n }\n }\n\n res += strings[strings.length - 1];\n return res;\n}\n\nexport class KameleoonLogger {\n private static logger: IExternalLogger = new DefaultLogger();\n private static logLevel: LogLevel = LogLevel.WARNING;\n\n public static setLogger(logger: IExternalLogger): void {\n KameleoonLogger.logger = logger;\n }\n\n public static setLogLevel(logLevel: LogLevel): void {\n KameleoonLogger.logLevel = logLevel;\n }\n\n public static log({ level, strings, keys }: LogParametersType): void {\n if (!KameleoonLogger.checkLevel(level)) return;\n\n let message: string;\n\n if (typeof strings === 'string') {\n message = strings;\n } else if (typeof strings === 'function') {\n try {\n message = strings();\n } catch (error) {\n message = 'Failed to log message';\n }\n } else {\n message = template(strings, keys);\n }\n\n KameleoonLogger.writeMessage(level, message);\n }\n\n public static info(strings: LogInputType, ...keys: unknown[]): void {\n KameleoonLogger.log({ level: LogLevel.INFO, strings, keys });\n }\n\n public static error(strings: LogInputType, ...keys: unknown[]): void {\n KameleoonLogger.log({ level: LogLevel.ERROR, strings, keys });\n }\n\n public static warning(strings: LogInputType, ...keys: unknown[]): void {\n KameleoonLogger.log({ level: LogLevel.WARNING, strings, keys });\n }\n\n public static debug(strings: LogInputType, ...keys: unknown[]): void {\n KameleoonLogger.log({ level: LogLevel.DEBUG, strings, keys });\n }\n\n public static checkLevel(level: LogLevel): boolean {\n return level <= KameleoonLogger.logLevel && level !== LogLevel.NONE;\n }\n\n private static writeMessage(level: LogLevel, message: string): void {\n KameleoonLogger.logger.log(\n level,\n `Kameleoon [${LOG_LEVEL_NAMES[level]}]: ${message}`,\n );\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { ConfigurationDataType, JSONType } from 'src/clientConfiguration';\nimport { Header, NUMBER_OF_RETRIES } from './constants';\nimport {\n RequesterParamsType,\n GetVisitorDataResultType,\n HeadersType,\n GetVisitorDataParamsType,\n IExternalRequester,\n RequestType,\n HttpMethod,\n InternalSendRequestParametersType,\n KameleoonResponseType,\n RequestParametersType,\n logRequestParametersType,\n logResponse,\n} from './types';\nimport { IUrlProvider } from './urlProvider';\nimport { KameleoonLogger, LogLevel } from 'src/logging';\nimport { ResultConfigurationDataType } from 'src/clientConfiguration/types';\n\nexport interface IRequester {\n getClientConfiguration: () => Promise<\n Result<ResultConfigurationDataType, KameleoonError>\n >;\n getRemoteData: (key: string) => Promise<Result<JSONType, KameleoonError>>;\n track: (\n body: string,\n isBodyUserAgent: boolean,\n ) => Promise<Result<void, void>>;\n}\n\nexport class Requester implements IRequester {\n private externalRequester: IExternalRequester;\n private urlProvider: IUrlProvider;\n private packageInfo: ExternalPackageInfoType;\n private trackRetryDelay: number;\n private useAbortController: boolean;\n private timeout: number;\n\n constructor({\n urlProvider,\n packageInfo,\n externalRequester,\n requestTimeout,\n trackRetryDelay,\n useAbortController,\n }: RequesterParamsType) {\n KameleoonLogger.debug`CALL: new Requester(urlProvider, packageInfo: ${packageInfo}, externalRequester, requestTimeout: ${requestTimeout}, trackRetryDelay: ${trackRetryDelay}, useAbortController: ${useAbortController})`;\n this.urlProvider = urlProvider;\n this.useAbortController = useAbortController;\n this.externalRequester = externalRequester;\n this.trackRetryDelay = trackRetryDelay;\n this.packageInfo = packageInfo;\n this.timeout = requestTimeout;\n KameleoonLogger.debug`RETURN: new Requester(urlProvider, packageInfo: ${packageInfo}, externalRequester, requestTimeout: ${requestTimeout}, trackRetryDelay: ${trackRetryDelay}, useAbortController: ${useAbortController})`;\n }\n\n public async getClientConfiguration(\n timeStamp?: number,\n modifiedSince?: string,\n ): Promise<Result<ResultConfigurationDataType, KameleoonError>> {\n const requestUrl = this.urlProvider.getClientConfigurationUrl(timeStamp);\n\n let headers: HeadersType = {\n [Header.SdkType]: this.packageInfo.type.toLowerCase(),\n [Header.SdkVersion]: this.packageInfo.version,\n ...(modifiedSince && { [Header.IfModifiedSince]: modifiedSince }),\n };\n\n // --- Note ---\n // Initial request + NUMBER_OF_RETRIES\n const requests = NUMBER_OF_RETRIES + 1;\n\n try {\n let responseInfo = { message: '' };\n\n KameleoonLogger.debug`Running configuration request Method: ${HttpMethod.Get}, Url: ${requestUrl}, Headers: ${headers}, with retry limit ${requests}`;\n for (let i = 0; i < requests; i++) {\n const response = await this.sendRequest<RequestType.Configuration>({\n url: requestUrl,\n requestType: RequestType.Configuration,\n retryCount: i,\n parameters: {\n method: HttpMethod.Get,\n headers,\n },\n });\n\n if (response.ok) {\n const data = await response.json();\n\n this.logReceivedConfigurationResponse(response.status, requestUrl, headers);\n\n const lastModified = this.getLastModifiedHeader(response);\n const configurationData = data as ConfigurationDataType;\n\n return Ok({\n configuration: configurationData,\n lastModified: lastModified,\n });\n }\n\n if (response.status === 304) {\n this.logReceivedConfigurationResponse(response.status, requestUrl, headers);\n\n return Ok({});\n }\n\n if (i === NUMBER_OF_RETRIES) {\n if (response.text) {\n const text = await response.text();\n responseInfo = JSON.parse(text);\n }\n KameleoonLogger.error`Failed to get configuration response ${{\n status: response.status,\n message: responseInfo.message,\n }} for request Method: ${\n HttpMethod.Get\n }, Url: ${requestUrl}, Headers: ${headers}`;\n } else {\n await this.logRequestError({\n logLevel: LogLevel.WARNING,\n message: 'Failed to get configuration response',\n response: response,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n }\n }\n\n return Err(\n new KameleoonError(\n KameleoonException.MaximumRetriesReached,\n responseInfo.message,\n ),\n );\n } catch (err) {\n await this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get configuration response',\n error: err,\n method: HttpMethod.Get,\n url: requestUrl,\n headers,\n });\n return Err(\n new KameleoonError(KameleoonException.ClientConfiguration, err),\n );\n }\n }\n\n public async getRemoteData(\n key: string,\n ): Promise<Result<JSONType, KameleoonError>> {\n const requestUrl = this.urlProvider.getRemoteDataUrl(key);\n\n KameleoonLogger.debug`Running remote data request Method: ${HttpMethod.Get}, Url: ${requestUrl}`;\n try {\n const response = await this.sendRequest<RequestType.RemoteData>({\n url: requestUrl,\n requestType: RequestType.RemoteData,\n retryCount: 0,\n parameters: {\n method: HttpMethod.Get,\n },\n });\n\n if (!response.ok) {\n await this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get remote data response',\n response: response,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n if (response.text) {\n const text = await response.text();\n const message = JSON.parse(text)?.message;\n\n return Err(\n new KameleoonError(KameleoonException.RemoteData, message),\n );\n }\n\n return Err(\n new KameleoonError(\n KameleoonException.RemoteData,\n 'Unknown Reason - no `text()` was found for a response',\n ),\n );\n }\n\n const data = await response.json();\n\n KameleoonLogger.debug`Received remote data response: ${{\n status: response.status,\n }} for request Method: ${HttpMethod.Get}, Url: ${requestUrl}`;\n return Ok(data);\n } catch (err) {\n await this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get remote data response',\n error: err,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n return Err(new KameleoonError(KameleoonException.RemoteData, err));\n }\n }\n\n public async getVisitorData({\n visitorCode,\n filters,\n isMappingIdentifier,\n }: GetVisitorDataParamsType): Promise<\n Result<GetVisitorDataResultType, KameleoonError>\n > {\n const requestUrl = this.urlProvider.getVisitorDataUrl({\n visitorCode,\n filters,\n isMappingIdentifier,\n });\n\n KameleoonLogger.debug`Running visitor data request Method: ${HttpMethod.Get}, Url: ${requestUrl}`;\n try {\n const response = await this.sendRequest<RequestType.RemoteData>({\n url: requestUrl,\n requestType: RequestType.RemoteData,\n retryCount: 0,\n parameters: {\n method: HttpMethod.Get,\n },\n });\n\n if (!response.ok) {\n await this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get visitor data response',\n response: response,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n if (typeof response.text === 'function') {\n const text = await response.text();\n\n if (text) {\n const message = JSON.parse(text)?.message;\n\n return Err(\n new KameleoonError(KameleoonException.RemoteData, message),\n );\n }\n }\n\n if (response.status) {\n return Err(\n new KameleoonError(\n KameleoonException.RemoteData,\n `No error message. Error status: ${response.status}`,\n ),\n );\n }\n\n return Err(\n new KameleoonError(\n KameleoonException.RemoteData,\n 'Unknown Reason - no text message or error status was found for a response',\n ),\n );\n }\n\n const data = await response.json();\n\n KameleoonLogger.debug`Received visitor data response: ${{\n status: response.status,\n }} for request Method: ${HttpMethod.Get}, Url: ${requestUrl}`;\n return Ok(data as GetVisitorDataResultType);\n } catch (err) {\n await this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get visitor data response',\n error: err,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n return Err(new KameleoonError(KameleoonException.RemoteData, err));\n }\n }\n\n public async track(\n body: string,\n isBodyUserAgent: boolean,\n ): Promise<Result<void, void>> {\n // --- Note ---\n // Initial request + NUMBER_OF_RETRIES\n const requests = NUMBER_OF_RETRIES + 1;\n const url = this.urlProvider.getTrackingUrl(isBodyUserAgent);\n\n KameleoonLogger.debug`Running tracking request Method: ${HttpMethod.Post}, Url: ${url}, Body: ${body}, with retry limit ${requests}, retry delay ${this.trackRetryDelay} ms`;\n for (let i = 0; i < requests; i++) {\n let response;\n try {\n response = await this.sendRequest<RequestType.Tracking>({\n url,\n retryCount: i,\n requestType: RequestType.Tracking,\n parameters: {\n body,\n method: HttpMethod.Post,\n headers: {\n [Header.ContentType]: '*/*',\n },\n },\n });\n\n if (response.ok) {\n KameleoonLogger.debug`Received tracking response: ${{\n status: response.status,\n }} for request Method: ${\n HttpMethod.Post\n }, Url: ${url}, Body: ${body}`;\n return Ok();\n }\n\n await this.logRequestError({\n logLevel: i == NUMBER_OF_RETRIES ? LogLevel.ERROR : LogLevel.WARNING,\n message: 'Failed to get tracking response',\n response: response,\n method: HttpMethod.Post,\n url,\n });\n } catch (error) {\n await this.logRequestError({\n logLevel: i == NUMBER_OF_RETRIES ? LogLevel.ERROR : LogLevel.WARNING,\n message: 'Failed to get tracking response',\n error,\n method: HttpMethod.Post,\n url,\n });\n }\n\n if (i < requests) {\n await new Promise((resolve) =>\n setTimeout(resolve, this.trackRetryDelay),\n );\n }\n }\n\n return Err();\n }\n\n private async sendRequest<T extends RequestType>({\n url,\n requestType,\n retryCount,\n parameters,\n }: InternalSendRequestParametersType<T>): Promise<KameleoonResponseType> {\n let response;\n\n if (this.useAbortController) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n response = await this.externalRequester.sendRequest({\n url,\n retryCount: retryCount as 0 | 1 | 2,\n requestType,\n parameters: {\n ...parameters,\n signal: controller.signal,\n } as RequestParametersType[T],\n });\n\n clearTimeout(timeoutId);\n } else {\n response = await this.externalRequester.sendRequest({\n url,\n retryCount: retryCount as 0 | 1 | 2,\n requestType,\n parameters: parameters as RequestParametersType[T],\n });\n }\n\n return response;\n }\n\n private async logRequestError({\n logLevel,\n message,\n error,\n method,\n url,\n response,\n headers,\n }: logRequestParametersType): Promise<void> {\n if (error) {\n let errorText = 'Unknown error';\n if (error instanceof Error) {\n errorText = error.message;\n }\n KameleoonLogger.log({\n level: logLevel,\n strings: () =>\n `${message} with error: ${errorText} for request Method: ${method}, Url: ${url}`,\n });\n } else if (response) {\n if (KameleoonLogger.checkLevel(logLevel)) {\n const logResponse = await this.parseResponse(response);\n KameleoonLogger.log({\n level: logLevel,\n strings: () =>\n `${message} response: Status: '${logResponse.status}' Message: '${logResponse.message}' for request Method: ${method}, Url: '${url}'` +\n (headers ? `, Headers: ${headers}` : ''),\n });\n }\n }\n }\n\n private async parseResponse(\n response: KameleoonResponseType,\n ): Promise<logResponse> {\n let message = '';\n try {\n if (typeof response.text === 'function') {\n const text = await response.text();\n if (text) {\n message = text;\n }\n }\n } catch (error) {}\n\n return {\n status: response.status,\n message: message,\n };\n }\n\n private getLastModifiedHeader(\n response: KameleoonResponseType,\n ): string | undefined {\n if (response.headers) {\n const targetKey = Header.LastModified.toLowerCase();\n for (const [key, value] of response.headers) {\n if (key.toLowerCase() === targetKey) {\n return value;\n }\n }\n }\n return undefined;\n }\n\n private logReceivedConfigurationResponse(responseStatus: number, requestUrl: string, headers: HeadersType): void {\n KameleoonLogger.debug`Received configuration response: ${{\n status: responseStatus,\n }} for request Method: ${\n HttpMethod.Get\n }, Url: ${requestUrl}, Headers: ${headers}`;\n }\n}\n","import { SdkLanguageType } from './constants';\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of environment, passed as an argument to KameleoonClient `configuration`s `environment` field\n * */\nexport enum Environment {\n Production = 'production',\n Staging = 'staging',\n Development = 'development',\n}\n\n/**\n * @param {SdkLanguageType} type - type of the SDK\n * @param {string} version - version of the package\n * @param {boolean} isServer - flag to indicate if the SDK is running on the server\n * */\nexport type ExternalPackageInfoType = {\n type: SdkLanguageType;\n version: string;\n isServer: boolean;\n};\n","import { Environment, ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport {\n UrlFirstParameter,\n UrlParameter,\n UrlTracking,\n UrlQuery,\n DEFAULT_DOMAINS,\n} from './constants';\nimport {\n DataApiQuery,\n DomainsType,\n GetVisitorDataUrlParamsType,\n UrlProviderInitializeParamsType,\n UrlType,\n} from './types';\n\nexport interface IUrlProvider {\n initialize(params: UrlProviderInitializeParamsType): void;\n getClientConfigurationUrl(timeStamp?: number): string;\n getEventSourceUrl(): string;\n getRemoteDataUrl(key: string): string;\n getVisitorDataUrl(params: GetVisitorDataUrlParamsType): string;\n getTrackingUrl(isBodyUserAgent: boolean): string;\n dataApiDomain: string;\n}\n\nexport class UrlProvider implements IUrlProvider {\n private ready = false;\n private isCustomDomain = false;\n private domains: DomainsType = DEFAULT_DOMAINS;\n private siteCode?: string;\n private environment?: string;\n private packageInfo?: ExternalPackageInfoType;\n\n public initialize({\n domain,\n siteCode,\n packageInfo,\n environment,\n }: UrlProviderInitializeParamsType) {\n this.siteCode = siteCode;\n this.environment = environment;\n this.packageInfo = packageInfo;\n this.ready = true;\n\n this.setDomains(domain);\n }\n\n set dataApiDomain(domain: string) {\n if (!this.isCustomDomain) {\n this.domains[UrlType.DataApi] = domain;\n return;\n }\n\n const subDomain = domain.split('.')[0];\n const currentDomain = this.domains[UrlType.DataApi];\n this.domains[UrlType.DataApi] = currentDomain.replace(/^[^.]+/, subDomain);\n }\n\n get dataApiDomain(): string {\n return this.domains[UrlType.DataApi];\n }\n\n public getClientConfigurationUrl(timeStamp?: number): string {\n this.isInitialized();\n\n const baseUrl = `https://${this.domains[UrlType.ClientConfiguration]}/v3/`;\n const environmentParam =\n this.environment === Environment.Production\n ? ''\n : UrlFirstParameter.Environment + encodeURIComponent(this.environment!);\n let timeStampParam = '';\n\n if (timeStamp) {\n if (environmentParam) {\n timeStampParam = UrlParameter.Ts + timeStamp;\n } else {\n timeStampParam = UrlFirstParameter.Ts + timeStamp;\n }\n }\n\n return baseUrl + this.siteCode + environmentParam + timeStampParam;\n }\n\n public getEventSourceUrl(): string {\n this.isInitialized();\n\n return `https://${this.domains[UrlType.Events]}:8110/${UrlQuery.Sse}${\n this.siteCode\n }`;\n }\n\n public getRemoteDataUrl(key: string): string {\n this.isInitialized();\n\n return (\n this.getDataApiUrl(DataApiQuery.DataMap) +\n this.siteCode +\n UrlParameter.Key +\n encodeURI(key)\n );\n }\n\n public getVisitorDataUrl({\n visitorCode,\n filters,\n isMappingIdentifier,\n }: GetVisitorDataUrlParamsType): string {\n this.isInitialized();\n\n const {\n customData,\n previousVisitAmount,\n currentVisit,\n conversions,\n geolocation,\n experiments,\n pageViews,\n device,\n browser,\n operatingSystem,\n kcs,\n personalization,\n visitorCode: visitorCodeFilter,\n cbs,\n } = filters;\n\n const identifierParameter = isMappingIdentifier\n ? UrlParameter.MappingValue\n : UrlParameter.VisitorCode;\n const customDataParameter =\n customData || visitorCodeFilter ? UrlParameter.CustomData + true : '';\n const conversionsParameter = conversions\n ? UrlParameter.Conversion + true\n : '';\n const geolocationParameter = geolocation\n ? UrlParameter.Geolocation + true\n : '';\n const experimentsParameter = experiments\n ? UrlParameter.Experiment + true\n : '';\n const pageViewsParameter = pageViews ? UrlParameter.Page + true : '';\n const staticDataParameter = UrlParameter.StaticData + true;\n const currentVisitParameter = currentVisit\n ? UrlParameter.CurrentVisit + true\n : '';\n const kcsParameter = kcs ? UrlParameter.Kcs + true : '';\n const personalizationParameter = personalization\n ? UrlParameter.Personalization + true\n : '';\n const previousVisitAmountParam =\n typeof previousVisitAmount !== 'number'\n ? UrlParameter.MaxNumberPreviousVisits + 1\n : UrlParameter.MaxNumberPreviousVisits + previousVisitAmount;\n const cbsParameter = cbs ? UrlParameter.Cbs + true : '';\n\n return (\n this.getDataApiUrl(DataApiQuery.VisitData) +\n this.siteCode +\n identifierParameter +\n visitorCode +\n previousVisitAmountParam +\n customDataParameter +\n conversionsParameter +\n geolocationParameter +\n experimentsParameter +\n pageViewsParameter +\n staticDataParameter +\n currentVisitParameter +\n kcsParameter +\n personalizationParameter +\n cbsParameter\n );\n }\n\n public getTrackingUrl(isBodyUserAgent: boolean): string {\n this.isInitialized();\n\n const { type, version } = this.packageInfo!;\n\n let url =\n this.getDataApiUrl(DataApiQuery.VisitEvent) +\n this.siteCode +\n UrlParameter.SdkName +\n type.toLowerCase() +\n UrlParameter.SdkVersion +\n version;\n\n if (isBodyUserAgent) {\n url += UrlParameter.BodyUa + true;\n }\n\n return url;\n }\n\n private isInitialized(): void {\n if (!this.ready) {\n throw new Error('UrlProvider is not initialized');\n }\n }\n\n private getDataApiUrl(query: DataApiQuery): string {\n if (!this.domains[UrlType.DataApi]) {\n throw new Error('Data API domain is not set');\n }\n\n const domain = `https://${this.domains[UrlType.DataApi]}`;\n\n switch (query) {\n case DataApiQuery.VisitEvent:\n return `${domain}/${UrlTracking.Visit + UrlQuery.Events}`;\n case DataApiQuery.VisitData:\n return `${domain}/${UrlTracking.Visit + UrlQuery.Visitor}`;\n case DataApiQuery.DataMap:\n return `${domain}/${UrlTracking.Map + UrlQuery.Map}`;\n }\n }\n\n private setDomains(domain: string | null): void {\n if (!domain) {\n return;\n }\n\n this.isCustomDomain = true;\n\n this.domains[UrlType.DataApi] = 'data.' + domain;\n this.domains[UrlType.Events] = 'events.' + domain;\n this.domains[UrlType.ClientConfiguration] = 'sdk-config.' + domain;\n }\n}\n","import {\n ClientConfigurationDataType,\n JSONType,\n RuleType,\n} from './clientConfiguration/types';\nimport { IExternalEventSource } from './eventSource';\nimport { IExternalRequester, IUrlProvider, RequestType } from './requester';\nimport { IExternalStorage } from './storage';\nimport { IExternalPRNG, VisitorDataFiltersType } from './utilities';\nimport { IVisitorCodeManager } from './visitorCodeManager';\nimport { IExternalLogger } from 'src/logging';\nimport { FeatureFlagType as ConfigFeatureFlagType } from 'src/clientConfiguration/types';\nimport { Environment, ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport { CustomData, DataManager } from 'src/kameleoonData';\n\n/**\n * @param {number} updateInterval - update interval in _minutes_ for sdk configuration, minimum value is 1 minute\n * @defaultvalue 60\n *\n * @param {Environment | string | undefined} environment - feature flag environment.\n * @defaultvalue Environment.Production\n *\n * @param {number | undefined} targetingDataCleanupInterval - interval in _minutes_ for cleaning up targeting data, minimum value is 1 minute\n * Note: if not specified, default value will be used\n * @defaultvalue\n * - JavaScript SDK: `undefined` (no cleanup)\n * - React/React Native SDK: `undefined` (no cleanup)\n * - NodeJS SDK: `30`\n *\n * @param {string | undefined} cookieDomain - domain which cookie which Kameleoon visitor code belongs to\n * @param {string | undefined} networkDomain - custom domain to be used in place of all requests URL, domain format is `example.com`, if the format is incorrect, default Kameleoon domain will be used\n * @param {number | undefined} requestTimeout - timeout in _milliseconds_ for requests\n * @defaultvalue `10_000` (10 seconds)\n * @param {number | undefined} trackingInterval - interval in _milliseconds_ for performing background tracking requests, must be a value between `100` to `1_000` milliseconds\n * @defaultvalue `1_000` (1 second)\n * @param {string | undefined} defaultDataFile - json string containing default configuration data, used to initialize the SDK when no data is available in the storage or when the data is not up-to-date\n * @defaultvalue `undefined` (no default data file)\n * */\nexport type SDKConfigurationType = {\n updateInterval?: number;\n environment?: Environment | string;\n targetingDataCleanupInterval?: number;\n requestTimeout?: number;\n networkDomain?: string;\n cookieDomain?: string;\n trackingInterval?: number;\n defaultDataFile?: string;\n};\n\n/**\n * @param {string} urlProvider - main source for all URLs used in the SDK\n * */\nexport type DependenciesType = {\n urlProvider?: IUrlProvider;\n};\n\n/**\n * @param {string} siteCode - client's siteCode defined on Kameleoon platform\n * @param {Partial<SDKConfigurationType>} configuration - client's configuration\n * @param {InternalSDKConfigurationType} internalConfiguration - internal configuration for sdk core to be initialized with certain parameters to certain type of JavaScript SDK\n * @param {DependenciesType | undefined} dependencies - internal dependencies meant primarily for testing purposes\n * @param {boolean | undefined} stubMode - When set to true, the client will operate in stub mode and perform no operations. In this mode, all method calls become no-ops, ensuring that no external actions or side effects occur.\n * */\nexport type SDKCoreParameters = {\n siteCode: string;\n internalConfiguration: InternalSDKConfigurationType;\n configuration?: Partial<SDKConfigurationType>;\n dependencies?: DependenciesType;\n stubMode?: boolean;\n};\n\n/**\n * @param {ExternalPackageInfoType} packageInfo - external package info, used to get package version and name\n * @param {IExternalPRNG | undefined} prng - external PRNG implementation\n * */\nexport type InternalsType = {\n packageInfo: ExternalPackageInfoType;\n prng?: IExternalPRNG;\n};\n\n/**\n * @param {IExternalStorage | undefined} externalStorage - external file system storage implemented outside client initialization\n * @param {IExternalEventSourceConstructor | undefined} externalEventSource - constructor for building external event source implementation\n * @param {ExternalPackageInfoType} externalPackageInfo - external package info, used to get package version and name\n * @param {IExternalRequester} externalRequester - external requester , used to track or get data\n * @param {IVisitorCodeManager} externalVisitorCodeManager - external visitor code manager, used to get or generate visitor code\n * @param {IExternalLogger | undefined} logger - external logger implementation\n * */\nexport type ExternalsType = {\n externalStorage: IExternalStorage;\n externalEventSource: IExternalEventSource;\n externalVisitorCodeManager: IVisitorCodeManager;\n externalPackageInfo: ExternalPackageInfoType;\n externalRequester: IExternalRequester;\n externalPRNG: IExternalPRNG;\n externalLogger?: IExternalLogger;\n};\n\n/**\n * @param {boolean} useAbortController - a flag to enable or disable usage of `AbortController` for requests allowing for `requestTimeout` to be respected\n * */\nexport type InternalSettingsType = {\n useAbortController: boolean;\n};\n\n/**\n * @param {ExternalsType} externals - external dependencies for the SDK\n * @param {InternalSettingsType} settings - internal settings for the SDK\n * */\nexport type InternalSDKConfigurationType = {\n externals: ExternalsType & InternalDependencies;\n settings: InternalSettingsType;\n};\n\nexport type InternalDependencies = {\n customDataManager?: DataManager;\n};\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of feature variable types\n * */\nexport enum VariableType {\n BOOLEAN = 'BOOLEAN',\n NUMBER = 'NUMBER',\n STRING = 'STRING',\n JSON = 'JSON',\n JS = 'JS',\n CSS = 'CSS',\n}\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants for data status\n * */\nexport enum TrackingStatus {\n Sent = 'sent',\n Unsent = 'unsent',\n Pending = 'pending',\n}\n\nexport type BooleanVariableType = {\n key: string;\n type: VariableType.BOOLEAN;\n value: boolean;\n};\n\nexport type NumberVariableType = {\n key: string;\n type: VariableType.NUMBER;\n value: number;\n};\n\nexport type StringVariableType = {\n key: string;\n type: VariableType.STRING;\n value: string;\n};\n\nexport type JSONVariableType = {\n key: string;\n type: VariableType.JSON;\n value: JSONType;\n};\n\nexport type JSVariableType = {\n key: string;\n type: VariableType.JS;\n value: string;\n};\n\nexport type CSSVariableType = {\n key: string;\n type: VariableType.CSS;\n value: string;\n};\n\n/**\n * @type `FeatureVariableResultType` - tuple of possible feature variable result types, each possible variation is an object containing `key`, `type` and `value` fields, `type` can be checked against `VariableType` enum, if the `type` is `VariableType.BOOLEAN` then the `value` type will be `boolean` and so on.\n * */\nexport type FeatureVariableResultType =\n | BooleanVariableType\n | NumberVariableType\n | JSVariableType\n | CSSVariableType\n | StringVariableType\n | JSONVariableType;\n\n/**\n * @type `FeatureFlagVariableType` - tuple of possible feature variable result types, each possible variation is an object containing `type` and `value` fields, `type` can be checked against `VariableType` enum, if the `type` is `VariableType.BOOLEAN` then the `value` type will be `boolean` and so on.\n * */\nexport type FeatureFlagVariableType = Omit<FeatureVariableResultType, 'key'>;\n\n/**\n * @readonly\n * @enum {number} a helper Enum for getting milliseconds for a second/minute/hour/day/week/month.\n * Month is considered as an average of 30 days\n * */\nexport enum Milliseconds {\n Second = 1000,\n Minute = 60 * Milliseconds.Second,\n Hour = 60 * Milliseconds.Minute,\n Day = 24 * Milliseconds.Hour,\n Week = 7 * Milliseconds.Day,\n Month = 30 * Milliseconds.Day,\n}\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {number} goalId - an id of a goal to track\n * @param {number | undefined} revenue - an optional parameter for revenue, default value is `0`\n * @param {boolean | undefined} negative Defines if the revenue is positive or negative, default value is `false`.\n * @param {CustomData[] | undefined} metadata Metadata of the conversion, default value is `undefined`.\n * */\nexport type TrackConversionParamsType = {\n visitorCode: string;\n goalId: number;\n revenue?: number;\n negative?: boolean;\n metadata?: CustomData[];\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {boolean | undefined} shouldAddData - optional parameter for adding retrieved data to the storage like `addData` method does, default value is `true`\n * @param {VisitorDataFiltersType | undefined} filters - optional parameter for specifying the filters for which data should be retrieved from what visit, by default only current and latest previous visits' `customData` is retrieved\n * */\nexport type RemoteVisitorDataParamsType = {\n visitorCode: string;\n shouldAddData?: boolean;\n filters?: VisitorDataFiltersType;\n};\n\n/**\n * @param {string | undefined} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {boolean | undefined} instant - Optional flag indicating whether the data should be sent instantly.\n * */\nexport type FlushParamsType = {\n visitorCode?: string;\n instant?: boolean;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {string} featureKey - key of the feature flag to look for, can be found on Kameleoon Platform\n * @param {boolean | undefined} track - a flag to enable or disable tracking request\n * @defaultvalue `true`\n * */\nexport type IsFeatureFlagActiveParamsType = {\n visitorCode: string;\n featureKey: string;\n track?: boolean;\n};\n\nexport type GetFeatureVariablesParamsType = {\n visitorCode: string;\n featureKey: string;\n variationKey: string;\n};\n\nexport type FeatureFlagType = {\n id: number;\n key: string;\n};\n\n/**\n * @deprecated Use `Variable` instead.\n *\n * @type `KameleoonVariableType` - tuple of possible feature variable result types, each possible variation is an object containing `key`, `type` and `value` fields, `type` can be checked against `VariableType` enum, if the `type` is `VariableType.BOOLEAN` then the `value` type will be `boolean` and so on.\n * */\nexport type KameleoonVariableType = FeatureVariableResultType;\n\n/**\n * @type `Variable` - tuple of possible feature variable result types, each possible variation is an object containing `key`, `type` and `value` fields, `type` can be checked against `VariableType` enum, if the `type` is `VariableType.BOOLEAN` then the `value` type will be `boolean` and so on.\n * */\nexport type Variable = FeatureVariableResultType;\n\n/**\n * @type `KameleoonVariationType` - object containing information about the variation and its variables\n * @param {string} name - name of the variation\n * @param {string} key - key of the variation\n * @param {number | null} id - id of the variation or `null` if the visitor hit default variation\n * @param {number | null} experimentId - id of the experiment or `null` if the visitor hit default variation\n * @param {Variable[]} variables - array of variables for the variation\n * */\nexport type KameleoonVariationType = {\n name?: string;\n key: string;\n id: number | null;\n experimentId: number | null;\n variables: Variable[];\n};\n\n// --- Note ---\n// During the next breaking change release,\n// `KameleoonVariableType` should be renamed to `VariableType`\n// `VariableType` should be renamed to something else, probably just `Variable`\n/**\n * @deprecated Use `Variation` instead.\n *\n * @type `VariationType` - an object containing information about the variation and its variables\n * @param {string} name - name of the variation\n * @param {string} key - key of the variation\n * @param {number | null} id - id of the variation or `null` if the visitor hit default variation\n * @param {number | null} experimentId - id of the experiment or `null` if the visitor hit default variation\n * @param {Map<string, Variable>} variables - map of variables for the variation, where key is the variable key and value is the variable object\n * */\nexport type VariationType = Omit<KameleoonVariationType, 'variables'> & {\n variables: Map<string, Variable>;\n};\n\n/**\n * @type `Variation` - an object containing information about the variation and its variables\n * @param {string} name - name of the variation\n * @param {string} key - key of the variation\n * @param {number | null} id - id of the variation or `null` if the visitor hit default variation\n * @param {number | null} experimentId - id of the experiment or `null` if the visitor hit default variation\n * @param {Map<string, Variable>} variables - map of variables for the variation, where key is the variable key and value is the variable object\n * */\nexport type Variation = VariationType;\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {string} featureKey - key of the feature flag to look for, can be found on Kameleoon Platform\n * @param {string} variableKey - key of the variable to be found for a feature flag with provided `featureKey`, can be found on Kameleoon Platform\n * */\nexport type GetFeatureFlagVariableParamsType = {\n visitorCode: string;\n featureKey: string;\n variableKey: string;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {number} customDataIndex - index of the custom data in the warehouse audience\n * @param {string | undefined} warehouseKey - unique key to identify the warehouse data (usually internal user ID)\n * If not specified, the `visitorCode` will be used as a `warehouseKey`\n * */\nexport type GetVisitorWarehouseAudienceParamsType = {\n visitorCode: string;\n customDataIndex: number;\n warehouseKey?: string;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {string} featureKey - key of the feature flag to look for, can be found on Kameleoon Platform\n * @param {boolean | undefined} track - a flag to enable or disable tracking request\n * @defaultvalue `true`\n * */\nexport type GetVariationParamsType = {\n visitorCode: string;\n featureKey: string;\n track?: boolean;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {boolean | undefined} onlyActive - an indicator to get only active variations\n * @defaultvalue `false`\n * @param {boolean | undefined} track - a flag to enable or disable tracking request\n * @defaultvalue `true`\n * */\nexport type GetVariationsParamsType = {\n visitorCode: string;\n onlyActive?: boolean;\n track?: boolean;\n};\n\nexport type WarehouseAudienceType = {\n // --- Note ---\n // Using `unknown` type here because we don't care about the type of the value\n warehouseAudiences: Record<string, unknown>;\n};\n\nexport type TrackingCacheItemType = {\n [experimentId: number]: {\n variationId: number;\n expirationTime: number;\n hasJsCssVariables: boolean;\n };\n};\n\nexport type SetDataCallbackParametersType = {\n visitorCode: string;\n maxAge: number;\n path: string;\n key: string;\n};\n\nexport type GetFeatureVariationParametersType = {\n visitorCode: string;\n featureKey: string;\n track: boolean;\n};\n\nexport type EvaluatedExperimentType = {\n experimentId: number | null;\n variationId: number | null;\n variationKey: string;\n ruleType: RuleType | null;\n isSimulated: boolean;\n};\n\nexport type EvaluateParametersType = {\n visitorCode: string;\n featureFlag: ConfigFeatureFlagType;\n track: boolean;\n save: boolean;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {boolean} consent - a value representing the legal consent status. - 'true' indicates the\n * visitor has given legal consent. - 'false' indicates the visitor has withdrawn or not\n * provided legal consent.\n * @param {(visitorCode: string) => void} setData - a callback to set a visitor code in cookie\n * */\nexport type SetUserConsentParametersType = {\n visitorCode: string;\n consent: boolean;\n setData: ({\n visitorCode,\n maxAge,\n path,\n }: SetDataCallbackParametersType) => void;\n};\n\n/**\n * @type `SimulateRequestDataType` a type of data provided to `simulateSuccessRequest` method depending on `RequestType`\n * */\nexport type SimulateRequestDataType = {\n [RequestType.Configuration]: ClientConfigurationDataType;\n [RequestType.RemoteData]: JSONType;\n [RequestType.Tracking]: null;\n};\n\n/**\n * @param {string} visitorCode - The unique visitor code identifying the visitor.\n * @param {number} experimentId - The identifier of the experiment you want to set/reset the forced variation for.\n * @param {string | null} variationKey - The identifier of the variation you want the experiment to be evaluated to.\n * Set to `null` to reset the forced variation.\n * @param {boolean} [forceTargeting=true] - If `true`, the visitor will be targeted to the experiment\n * regardless of its conditions. Otherwise, the normal targeting logic will be preserved.\n * Optional (defaults to `true`).\n */\nexport type SetForcedVariationParametersType = {\n visitorCode: string;\n experimentId: number;\n variationKey: string | null;\n forceTargeting?: boolean;\n};\n\nexport type DataFile = {\n featureFlags: Map<string, FeatureFlag>;\n};\n\nexport type FeatureFlag = {\n variations: Map<string, Variation>;\n environmentEnabled: boolean;\n rules: Rule[];\n defaultVariationKey: string;\n};\n\nexport type Rule = {\n variations: Map<string, Variation>;\n};\n","import { Milliseconds } from 'src/types';\nimport { AddParametersType, CacheItemType } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\ninterface ICacheManager<T> {\n /**\n * Add item to cache\n * @param {AddParametersType<T>} parameters - parameters for adding new item cache\n * @returns {void}\n */\n add({ key, data, lifetime }: AddParametersType<T>): void;\n /**\n * Get item that is not expired from cache\n * @param {string} key - key of item\n * @returns {T} an item that is not expired\n */\n getAliveItem(key: string): T | null;\n}\n\n/**\n * @class\n * CacheManager - a class for managing cache\n */\nexport class CacheManager<T> implements ICacheManager<T> {\n private cacheMap = new Map<string, CacheItemType<T>>();\n private intervalId: NodeJS.Timeout | null = null;\n private cleanupTimeout: number;\n\n /**\n * @param {number} cleanupTimeout - timeout for cleaning cache in seconds\n * generic type `T` is a type of data that will be stored in cache\n * @example\n * ```typescript\n * const cacheManager = new CacheManager<number>(60);\n * ```\n */\n constructor(cleanupTimeout: number) {\n this.cleanupTimeout = cleanupTimeout * Milliseconds.Second;\n }\n\n public add({ key, data, lifetime }: AddParametersType<T>): void {\n KameleoonLogger.debug`CALL: CacheManager.add(key: ${key}, data: ${data}, lifetime: ${lifetime})`;\n if (this.intervalId === null) {\n this.activate();\n }\n\n const expirationTime = lifetime * Milliseconds.Second;\n\n const cacheItem: CacheItemType<T> = {\n data,\n expirationTime: Date.now() + expirationTime,\n };\n\n this.cacheMap.set(key, cacheItem);\n KameleoonLogger.debug`RETURN: CacheManager.add(key: ${key}, data: ${data}, lifetime: ${lifetime})`;\n }\n\n public getAliveItem(key: string): T | null {\n KameleoonLogger.debug`CALL: CacheManager.getAliveItem(key: ${key})`;\n const cacheItem = this.cacheMap.get(key);\n\n if (cacheItem && cacheItem.expirationTime >= Date.now()) {\n const data = cacheItem.data;\n KameleoonLogger.debug`RETURN: CacheManager.getAliveItem(key: ${key}) -> (item: ${data})`;\n return data;\n }\n\n cacheItem && this.cacheMap.delete(key);\n\n KameleoonLogger.debug`RETURN: CacheManager.getAliveItem(key: ${key}) -> (item: null)`;\n return null;\n }\n\n private activate(): void {\n this.intervalId = setInterval(() => {\n const now = Date.now();\n\n for (const [key, item] of this.cacheMap) {\n if (item.expirationTime < now) {\n this.cacheMap.delete(key);\n }\n }\n\n if (!this.cacheMap.size) {\n this.cleanupInterval();\n }\n }, this.cleanupTimeout);\n }\n\n private cleanupInterval(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n}\n","import { IEventSource } from 'src/eventSource';\nimport { DataManager } from 'src/kameleoonData';\nimport { Requester } from 'src/requester';\nimport { IVisitorCodeManager } from 'src/visitorCodeManager';\nimport { ClientDataType, IStorage } from 'src/storage';\nimport { SegmentType } from 'src/targeting';\nimport { VariableType } from 'src/types';\nimport { EventManager } from 'src/eventManager';\nimport { IUrlProvider } from 'src/requester/urlProvider';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\n\nexport type ScheduleType = {\n dateStart: string;\n dateEnd: string;\n};\n\nexport enum UpdateType {\n Polling,\n RealTime,\n}\n\nexport type JSONValue =\n | string\n | number\n | boolean\n | { [x: string]: JSONValue }\n | JSONValue[];\n\nexport type JSONType = Record<string | number | symbol, JSONValue> | null;\n\nexport enum RuleType {\n TARGETED_DELIVERY = 'TARGETED_DELIVERY',\n EXPERIMENTATION = 'EXPERIMENTATION',\n}\n\nexport enum FeatureFlagSdkLanguageType {\n ANDROID = 'ANDROID',\n SWIFT = 'SWIFT',\n JAVA = 'JAVA',\n CSHARP = 'CSHARP',\n NODEJS = 'NODEJS',\n PHP = 'PHP',\n RUBY = 'RUBY',\n GO = 'GO',\n FLUTTER = 'FLUTTER',\n REACTJS = 'REACTJS',\n}\n\nexport enum FeatureStatus {\n ACTIVATED = 'ACTIVATED',\n DEACTIVATED = 'DEACTIVATED',\n SCHEDULED = 'SCHEDULED',\n}\n\nexport enum CustomDataScope {\n Visit = 'VISIT',\n Visitor = 'VISITOR',\n Page = 'Page',\n}\n\nexport enum ConsentType {\n Required = 'REQUIRED',\n NotRequired = 'NOT_REQUIRED',\n}\n\nexport enum ConsentBlockingBehaviour {\n PartiallyBlocked = 'PARTIALLY_BLOCK',\n CompletelyBlocked = 'FULLY_BLOCK',\n}\n\nexport type DeviationType = {\n variationId: string;\n value: number;\n};\n\nexport type FeatureFlagType = {\n id: number;\n featureKey: string;\n environmentEnabled: boolean;\n variations: FeatureVariationType[];\n defaultVariationKey: string;\n rules: RuleItemType[];\n mutuallyExclusiveGroup?: string | null;\n bucketingCustomDataId?: number | null;\n bucketingCustomDataIndex?: number | null;\n};\n\nexport type ExperimentType = {\n experimentId: number;\n variationByExposition: VariationByExpositionType[];\n};\n\nexport type FeatureVariationType = {\n name?: string;\n key: string;\n variables: FeatureVariableType[];\n};\n\nexport type FeatureVariableType = {\n key: string;\n type: VariableType;\n value: string | number | boolean;\n};\n\nexport type RuleItemType = {\n type: RuleType;\n id: number;\n respoolTime: number | null;\n order: number;\n exposition: number;\n experimentId: number;\n variationByExposition: VariationByExpositionType[];\n segment: SegmentType | null;\n segmentId?: number | null;\n};\n\nexport type MappedRuleType = {\n experimentId: number;\n featureId: number;\n // --- Note ---\n // Map<variationKey, variationId>\n variations: Map<string, number>;\n};\n\nexport type ExperimentInfoType = {\n type: RuleType;\n variations: Map<string, number>;\n};\n\nexport type VariationByExpositionType = {\n variationKey: string;\n variationId: number;\n exposition: number;\n};\n\nexport type ConfigurationDataType = {\n featureFlags: FeatureFlagType[];\n configuration: ConfigurationType;\n customData: CustomDataConfigurationType[];\n holdout?: ExperimentType;\n segments?: SegmentType[];\n dateModified?: number;\n};\n\nexport type ResultConfigurationDataType = {\n configuration?: ConfigurationDataType;\n lastModified?: string;\n};\n\nexport type ClientConfigurationDataType = Omit<\n ConfigurationDataType,\n 'featureFlags' | 'segments'\n>;\n\nexport type CustomDataConfigurationType = {\n id?: number;\n index: number;\n name?: string;\n localOnly: boolean;\n isMappingIdentifier: boolean;\n scope: CustomDataScope;\n};\n\nexport type ConfigurationType = {\n realTimeUpdate: boolean;\n consentType: ConsentType;\n dataApiDomain: string;\n consentOptOutBehavior: string;\n};\n\nexport type ClientConfigurationParametersType = {\n urlProvider: IUrlProvider;\n updateInterval: number;\n storage: IStorage<ClientDataType>;\n dataManager: DataManager;\n requester: Requester;\n eventSource: IEventSource;\n eventManager: EventManager;\n externalVisitorCodeManager: IVisitorCodeManager;\n externalPackageInfo: ExternalPackageInfoType;\n defaultDataFile?: string;\n};\n","import { EventCallbackType, EventDataType, EventType } from './types';\n\ninterface IEventManager<E extends EventType = EventType> {\n addEventHandler(eventType: E, callback: EventCallbackType<E>): void;\n fireEvent(eventType: E, data: EventDataType[E]): void;\n}\n\nexport class EventManager implements IEventManager {\n private eventHandlers?: Map<EventType, EventCallbackType<EventType>>;\n\n public addEventHandler<E extends EventType>(\n eventType: E,\n callback: EventCallbackType<E>,\n ): void {\n if (!this.eventHandlers) {\n this.eventHandlers = new Map();\n }\n\n this.eventHandlers.set(eventType, callback as EventCallbackType<EventType>);\n }\n\n public fireEvent<E extends EventType>(\n eventType: E,\n data: EventDataType[E],\n ): void {\n const eventHandler = this.eventHandlers?.get(eventType);\n\n if (eventHandler && data) {\n eventHandler(data);\n }\n }\n}\n","/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of event types\n * */\nexport enum EventType {\n Evaluation = 'evaluation',\n ConfigurationUpdate = 'configurationUpdate',\n}\n\n/**\n * @type EvaluationEventDataType - object containing information about the evaluation event data\n * */\nexport type EvaluationEventDataType = {\n featureKey: string;\n variation: {\n experimentId: number | null;\n id: number | null;\n key: string;\n };\n};\n\n/**\n * @type ConfigurationUpdateEventDataType - object containing information about the configuration update event data\n * */\nexport type ConfigurationUpdateEventDataType = {\n timestamp: number;\n};\n\n/**\n * @type EventDataType - mapped type containing the link between `EventType` and the corresponding data type\n * */\nexport type EventDataType = {\n [EventType.Evaluation]: EvaluationEventDataType;\n [EventType.ConfigurationUpdate]: ConfigurationUpdateEventDataType;\n};\n\n/**\n * @type EventCallbackType - a function that takes `EventDataType<EventType>` as an argument and returns `void`\n * */\nexport type EventCallbackType<E extends EventType> = (\n eventData: EventDataType[E],\n) => void;\n","import { ConfigurationDataType } from 'src/clientConfiguration';\nimport { ConsentBlockingBehaviour, ConsentType } from './types';\n\nexport const DEFAULT_DATA_FILE_CONFIGURATION: ConfigurationDataType = {\n customData: [],\n featureFlags: [],\n configuration: {\n realTimeUpdate: false,\n consentType: ConsentType.NotRequired,\n dataApiDomain: 'data.kameleoon.io',\n consentOptOutBehavior: ConsentBlockingBehaviour.PartiallyBlocked,\n },\n};\n","import { FeatureFlagType } from './types';\n\nexport class MEGroup {\n private readonly _featureFlags: FeatureFlagType[];\n\n constructor(featureFlags: FeatureFlagType[]) {\n this._featureFlags = featureFlags\n .slice()\n .sort((ff1, ff2) => ff1.id - ff2.id);\n }\n\n public getFeatureFlagByHash(hash: number): FeatureFlagType {\n let idx = Math.floor(hash * this._featureFlags.length);\n idx = Math.min(idx, this._featureFlags.length - 1);\n return this._featureFlags[idx];\n }\n\n get featureFlags(): FeatureFlagType[] {\n return this._featureFlags;\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError/kameleoonError';\nimport { DataManager } from 'src/kameleoonData';\nimport { Requester } from 'src/requester';\nimport { SegmentType } from 'src/targeting';\nimport { ClientDataType } from 'src/storage';\nimport { IEventSource } from 'src/eventSource';\nimport {\n ClientConfigurationDataType,\n ClientConfigurationParametersType,\n ConfigurationDataType,\n ConfigurationType,\n ConsentBlockingBehaviour,\n ConsentType,\n ExperimentInfoType,\n ExperimentType,\n FeatureFlagType,\n MappedRuleType,\n ResultConfigurationDataType,\n RuleType,\n UpdateType,\n} from './types';\nimport { IStorage } from 'src/storage/types';\nimport { IVisitorCodeManager } from 'src/visitorCodeManager';\nimport { EventManager, EventType } from 'src/eventManager';\nimport { IUrlProvider } from 'src/requester/urlProvider';\nimport { DEFAULT_DATA_FILE_CONFIGURATION } from './constants';\nimport { KameleoonLogger } from 'src/logging';\nimport { MEGroup } from 'src/clientConfiguration/meGroup';\nimport { Milliseconds } from 'src/types';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\n\ninterface IClientConfiguration {\n initialize: () => Promise<Result<void, KameleoonError>>;\n readonly featureFlags: Map<string, FeatureFlagType>;\n readonly configuration: ConfigurationType;\n readonly segments: Map<string, SegmentType>;\n readonly ruleMap: Map<number, MappedRuleType>;\n readonly experimentMap: Map<number, ExperimentInfoType>;\n readonly holdout: ExperimentType | null;\n readonly meGroups: Map<string, MEGroup>;\n}\n\nexport class ClientConfiguration implements IClientConfiguration {\n private updateConfigurationIntervalId: NodeJS.Timeout | null = null;\n private updateType: UpdateType = UpdateType.Polling;\n private configurationData: ClientConfigurationDataType =\n DEFAULT_DATA_FILE_CONFIGURATION;\n private featureFlagsData: Map<string, FeatureFlagType> = new Map();\n private isTargetedDeliveryRule: boolean | null = null;\n private segmentsData: Map<string, SegmentType> | null = null;\n private holdoutData: ExperimentType | null = null;\n private meGroupsData: Map<string, MEGroup> = new Map();\n private updateInterval: number;\n private lastUpdate: Date;\n private storage: IStorage<ClientDataType>;\n private requester: Requester;\n private eventSource: IEventSource;\n private mappedRules: Map<number, MappedRuleType> | null = null;\n private mappedExperiments: Map<number, ExperimentInfoType> | null = null;\n private dataManager: DataManager;\n private visitorCodeManager: IVisitorCodeManager;\n private eventManager: EventManager;\n private urlProvider: IUrlProvider;\n private lastModified?: string;\n private requestTime?: number;\n private externalPackageInfo: ExternalPackageInfoType;\n private usedDefaultDataFile: boolean = false;\n private defaultDataFile?: string;\n private blockingBehaviourMode: ConsentBlockingBehaviour =\n ConsentBlockingBehaviour.PartiallyBlocked;\n\n private readonly CACHE_REVALIDATE_PERIOD = 90 * Milliseconds.Minute;\n\n constructor({\n updateInterval,\n urlProvider,\n storage,\n requester,\n dataManager,\n eventSource,\n externalVisitorCodeManager,\n eventManager,\n externalPackageInfo,\n defaultDataFile,\n }: ClientConfigurationParametersType) {\n this.urlProvider = urlProvider;\n this.requester = requester;\n this.updateInterval = updateInterval;\n this.lastUpdate = new Date();\n this.storage = storage;\n this.dataManager = dataManager;\n this.eventManager = eventManager;\n this.visitorCodeManager = externalVisitorCodeManager;\n this.eventSource = eventSource;\n this.externalPackageInfo = externalPackageInfo;\n this.defaultDataFile = defaultDataFile;\n }\n\n public async initialize(): Promise<Result<void, KameleoonError>> {\n KameleoonLogger.debug('CALL: ClientConfiguration.initialize()');\n this.readStorageData();\n\n const shouldUpdate = this.checkShouldUpdate();\n\n if (shouldUpdate) {\n const updateResult = await this.updateClientConfiguration();\n\n if (!updateResult.ok) {\n KameleoonLogger.error(\n 'Error occurred during client configuration update',\n );\n return updateResult;\n }\n\n // --- Note ---\n // If update type is being toggled `initialize` will be called again\n // so we don't need to continue execution here\n const isUpdateTypeToggled = updateResult.data;\n\n if (isUpdateTypeToggled) {\n KameleoonLogger.debug('RETURN: ClientConfiguration.initialize()');\n return Ok();\n }\n }\n\n if (this.updateType === UpdateType.RealTime && !this.eventSource.isOpen) {\n this.handleRealTimeUpdates();\n\n KameleoonLogger.debug('RETURN: ClientConfiguration.initialize()');\n return Ok();\n }\n\n if (this.updateType === UpdateType.Polling) {\n this.handlePollingUpdates();\n }\n\n KameleoonLogger.debug('RETURN: ClientConfiguration.initialize()');\n return Ok();\n }\n\n private cleanupHandlers(): void {\n if (this.eventSource.isOpen) {\n this.eventSource.close();\n }\n\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n }\n\n private handleRealTimeUpdates(): void {\n this.cleanupHandlers();\n\n const updateEventCallback = (timestamp: number) => {\n this.updateClientConfiguration(timestamp).then((updateResult) => {\n if (updateResult.ok) {\n this.eventManager.fireEvent(EventType.ConfigurationUpdate, {\n timestamp,\n });\n }\n });\n };\n\n this.eventSource.open(updateEventCallback);\n this.eventSource.onError((error: Event) => {\n KameleoonLogger.error`Error occurred during real-time update: ${error}. Switching to polling updates while the connection is not restored.`;\n\n this.updateType = UpdateType.Polling;\n this.handlePollingUpdates();\n });\n }\n\n private handlePollingUpdates(): void {\n // --- Note ---\n // If `initialize` is called again the interval will be cleared\n // so theoretically we will constantly defer config update\n // but `this.lastUpdate` with `checkShouldUpdate` will prevent that\n this.cleanupHandlers();\n\n // --- Note ---\n // Error Handling is for `setInterval` emergency cleanup\n try {\n const lastUpdateTime = this.lastUpdate.getTime();\n const now = Date.now();\n const timeToNextUpdate = Math.max(\n this.updateInterval - (now - lastUpdateTime),\n 0,\n );\n\n setTimeout(async () => {\n await this.updateClientConfiguration();\n this.updateConfigurationIntervalId = setInterval(\n this.updateClientConfiguration.bind(this),\n this.updateInterval,\n );\n }, timeToNextUpdate);\n } catch (err) {\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n\n throw err;\n }\n }\n\n get featureFlags(): Map<string, FeatureFlagType> {\n return this.featureFlagsData;\n }\n\n get configuration(): ConfigurationType {\n return this.configurationData.configuration;\n }\n\n get segments(): Map<string, SegmentType> {\n if (this.segmentsData) {\n return this.segmentsData;\n }\n\n const segmentsData = new Map<string, SegmentType>();\n\n this.featureFlagsData.forEach((flag) => {\n flag.rules.forEach((rule) => {\n if (rule.segment && !segmentsData.has(rule.segment.id.toString())) {\n segmentsData.set(rule.segment.id.toString(), rule.segment);\n }\n });\n });\n\n this.segmentsData = segmentsData;\n\n return segmentsData;\n }\n\n get ruleMap(): Map<number, MappedRuleType> {\n if (this.mappedRules?.size) {\n return this.mappedRules;\n }\n\n const mappedRules = new Map<number, MappedRuleType>();\n\n for (const featureFlag of this.featureFlags.values()) {\n for (const rule of featureFlag.rules) {\n const { id, experimentId, variationByExposition } = rule;\n const variationMap = new Map<string, number>();\n\n variationByExposition.forEach(({ variationKey, variationId }) => {\n if (typeof variationId === 'number') {\n variationMap.set(variationKey, variationId);\n }\n });\n\n mappedRules.set(id, {\n featureId: featureFlag.id,\n experimentId,\n variations: variationMap,\n });\n }\n }\n\n this.mappedRules = mappedRules;\n\n return mappedRules;\n }\n\n get experimentMap(): Map<number, ExperimentInfoType> {\n if (this.mappedExperiments?.size) {\n return this.mappedExperiments;\n }\n\n const mappedExperiments = new Map<number, ExperimentInfoType>();\n\n for (const featureFlag of this.featureFlags.values()) {\n for (const rule of featureFlag.rules) {\n const { experimentId, variationByExposition } = rule;\n const variationMap = new Map<string, number>();\n\n variationByExposition.forEach(({ variationKey, variationId }) => {\n if (typeof variationId === 'number') {\n variationMap.set(variationKey, variationId);\n }\n });\n\n mappedExperiments.set(experimentId, {\n type: rule.type,\n variations: variationMap,\n });\n }\n }\n\n this.mappedExperiments = mappedExperiments;\n\n return mappedExperiments;\n }\n\n get holdout(): ExperimentType | null {\n return this.holdoutData;\n }\n\n get meGroups(): Map<string, MEGroup> {\n return this.meGroupsData;\n }\n\n get isConsentRequired(): boolean {\n return this.configuration.consentType === ConsentType.Required;\n }\n\n get consentBlockingBehaviour(): ConsentBlockingBehaviour {\n return this.blockingBehaviourMode;\n }\n\n get hasAnyTargetedDeliveryRule(): boolean {\n if (this.isTargetedDeliveryRule !== null) {\n return this.isTargetedDeliveryRule;\n }\n\n for (const featureFlag of this.featureFlags.values()) {\n if (\n featureFlag.environmentEnabled &&\n featureFlag.rules.some(\n (rule) => rule.type === RuleType.TARGETED_DELIVERY,\n )\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n private checkShouldUpdate(): boolean {\n const { configuration } = this.configurationData;\n\n this.updateType = configuration.realTimeUpdate\n ? UpdateType.RealTime\n : UpdateType.Polling;\n\n if (!this.featureFlags.size) {\n return true;\n }\n\n const lastUpdateTime = this.lastUpdate.getTime();\n const updateWindowEdge = Date.now() - this.updateInterval;\n\n return lastUpdateTime < updateWindowEdge;\n }\n\n private readStorageData(): void {\n KameleoonLogger.debug('CALL: ClientConfiguration.readStorageData()');\n const result = this.storage.read();\n\n if (result.ok) {\n let { data, lastUpdate, lastModified, requestTime } = result.data;\n\n let updateFeatureFlagsInfo = false;\n if (this.defaultDataFile) {\n try {\n const defaultDataFile = JSON.parse(\n this.defaultDataFile,\n ) as ConfigurationDataType;\n this.defaultDataFile = undefined;\n this.usedDefaultDataFile = true;\n const localDateModified = data.dateModified ?? requestTime ?? -1;\n const defaultDateModified = defaultDataFile.dateModified ?? 0;\n if (!requestTime || defaultDateModified > localDateModified) {\n data = defaultDataFile;\n updateFeatureFlagsInfo = true;\n }\n } catch (error) {\n KameleoonLogger.error`Error parsing default data file: ${String(\n error,\n )}`;\n }\n }\n\n this.updateConfigurationData(data, updateFeatureFlagsInfo);\n\n this.lastUpdate = this.usedDefaultDataFile\n ? new Date(0)\n : new Date(Date.parse(lastUpdate));\n this.lastModified = lastModified;\n this.requestTime = requestTime;\n }\n KameleoonLogger.debug`RETURN: ClientConfiguration.readStorageData() -> (result: ${result.ok})`;\n }\n\n /**\n * Updates client configuration\n *\n * @param timeStamp - timestamp for real-time configuration update\n *\n * @returns `true` if current update type should be toggled (SSE/Polling)\n */\n private async updateClientConfiguration(\n timestamp?: number,\n ): Promise<Result<boolean, KameleoonError>> {\n const currentTime = Date.now();\n\n if (this.usedDefaultDataFile) {\n this.updateClientConfigurationInBackground();\n return Ok(false);\n }\n\n if (this.requestTime && !timestamp && !this.externalPackageInfo.isServer) {\n if (currentTime - this.requestTime <= this.CACHE_REVALIDATE_PERIOD) {\n this.updateClientConfigurationInBackground();\n return Ok(false);\n } else {\n KameleoonLogger.debug`Cached configuration data has expired. Fetching fresh data.`;\n }\n }\n\n const clientConfigurationResult =\n await this.requester.getClientConfiguration(timestamp, this.lastModified);\n\n return this.applyNewConfigurationDataFromResponse(\n clientConfigurationResult,\n );\n }\n\n private updateClientConfigurationInBackground() {\n setTimeout(async () => {\n const clientConfigurationResult =\n await this.requester.getClientConfiguration(\n undefined,\n this.lastModified,\n );\n await this.applyNewConfigurationDataFromResponse(\n clientConfigurationResult,\n );\n }, 0);\n }\n\n private async applyNewConfigurationDataFromResponse(\n clientConfigurationResult: Result<\n ResultConfigurationDataType,\n KameleoonError\n >,\n ): Promise<Result<boolean, KameleoonError>> {\n this.requestTime = Date.now();\n if (!clientConfigurationResult.ok) {\n if (this.featureFlags.size) {\n KameleoonLogger.error(\n 'Error occurred while updating configuration. Existing configuration will be used as a fallback.',\n );\n return Ok(true);\n }\n\n return clientConfigurationResult;\n }\n\n if (clientConfigurationResult.data.configuration === undefined) {\n // If configuration is undefined, it means that the server returned 304 Not Modified\n // and we should not update the configuration, but need to update the lastUpdate in storage\n this.updateStorageData();\n return Ok(false);\n }\n\n const clientConfigurationData =\n clientConfigurationResult.data.configuration;\n\n this.updateConfigurationData(clientConfigurationData, true);\n\n this.dataManager.clearTrees();\n this.mappedRules?.clear();\n this.experimentMap?.clear();\n this.isTargetedDeliveryRule = null;\n\n if (clientConfigurationResult.data.lastModified) {\n this.lastModified = clientConfigurationResult.data.lastModified;\n }\n\n const result = this.updateStorageData();\n\n if (!result.ok) {\n return result;\n }\n\n const updateType = clientConfigurationData.configuration.realTimeUpdate\n ? UpdateType.RealTime\n : UpdateType.Polling;\n\n const toggleUpdateType = updateType !== this.updateType;\n\n if (toggleUpdateType) {\n this.updateType = updateType;\n KameleoonLogger.info`Configuration update type was toggled to ${UpdateType[updateType]}`;\n await this.initialize();\n }\n\n this.blockingBehaviourMode = this.consentBlockingBehaviourFromStr(\n clientConfigurationData.configuration.consentOptOutBehavior,\n );\n\n return Ok(toggleUpdateType);\n }\n\n private updateConfigurationData(\n data: ConfigurationDataType,\n updateFeatureFlagsInfo: boolean = true,\n ): void {\n const {\n configuration,\n featureFlags,\n customData,\n holdout,\n segments,\n dateModified,\n } = data;\n\n let segmentsMap: Map<string, SegmentType> | null = segments\n ? new Map(segments.map((segment) => [segment.id.toString(), segment]))\n : null;\n let customDataIndexById: Map<number, number> | null = null;\n\n if (updateFeatureFlagsInfo) {\n if (customData?.length) {\n customDataIndexById = new Map();\n for (let data of customData) {\n if (data.id !== undefined) {\n customDataIndexById.set(data.id, data.index);\n } else {\n customDataIndexById = null;\n break;\n }\n }\n }\n }\n\n const featureFlagsMap: Map<string, FeatureFlagType> = new Map();\n for (const featureFlag of featureFlags) {\n featureFlagsMap.set(featureFlag.featureKey, featureFlag);\n\n // configurationFeatureFlag data from storage not needed to be modified\n if (updateFeatureFlagsInfo) {\n this.updateFeatureFlagSegments(featureFlag, segmentsMap);\n this.updateFeatureFlagBucketingCustomDataId(\n featureFlag,\n customDataIndexById,\n );\n }\n }\n this.featureFlagsData = featureFlagsMap;\n\n if (customData?.length) {\n this.dataManager.customDataIndexes = customData;\n }\n\n this.meGroupsData = this.makeMEGroups(featureFlags);\n this.holdoutData = holdout ?? null;\n\n this.configurationData = {\n configuration,\n customData,\n holdout,\n dateModified,\n };\n\n this.urlProvider.dataApiDomain = data.configuration.dataApiDomain;\n\n this.updateConsentRequired();\n this.segmentsData = segmentsMap;\n }\n\n private updateFeatureFlagSegments(\n featureFlag: FeatureFlagType,\n segmentsMap: Map<string, SegmentType> | null,\n ): void {\n if (segmentsMap !== null) {\n featureFlag.rules.forEach((rule) => {\n const segmentId = rule.segmentId;\n rule.segment =\n segmentId != null\n ? segmentsMap.get(segmentId.toString()) ?? null\n : null;\n });\n }\n }\n\n private updateFeatureFlagBucketingCustomDataId(\n featureFlag: FeatureFlagType,\n customDataIndexById: Map<number, number> | null,\n ): void {\n const bucketingCustomDataId = featureFlag.bucketingCustomDataId;\n if (bucketingCustomDataId != null && customDataIndexById) {\n featureFlag.bucketingCustomDataIndex = customDataIndexById.get(\n bucketingCustomDataId,\n );\n }\n }\n\n private makeMEGroups(featureFlags: FeatureFlagType[]): Map<string, MEGroup> {\n const meGroupLists = new Map<string, FeatureFlagType[]>();\n\n featureFlags.forEach((featureFlag) => {\n const groupName = featureFlag.mutuallyExclusiveGroup;\n if (groupName) {\n let meGroupList = meGroupLists.get(groupName);\n if (meGroupList) {\n meGroupList.push(featureFlag);\n } else {\n meGroupLists.set(groupName, [featureFlag]);\n }\n }\n });\n\n const meGroups = new Map<string, MEGroup>();\n\n meGroupLists.forEach((featureFlags, groupName) => {\n meGroups.set(groupName, new MEGroup(featureFlags));\n });\n\n return meGroups;\n }\n\n private updateStorageData(): Result<void, KameleoonError> {\n this.lastUpdate = new Date();\n\n const configurationData = {\n ...this.configurationData,\n featureFlags: Array.from(this.featureFlags.values()),\n segments: this.segmentsData\n ? Array.from(this.segmentsData.values())\n : undefined,\n };\n\n const data: ClientDataType = {\n data: configurationData,\n lastUpdate: this.lastUpdate.toString(),\n lastModified: this.lastModified,\n requestTime: this.requestTime,\n };\n\n return this.storage.write(data);\n }\n\n private updateConsentRequired(): void {\n // --- Note ---\n // According to GDPR policy we should set visitorCode if legal consent isn't required\n // or we have at least one Targeted Delivery rule in configuration\n this.visitorCodeManager.consentRequired =\n this.isConsentRequired && !this.hasAnyTargetedDeliveryRule;\n }\n\n private consentBlockingBehaviourFromStr(\n str: string,\n ): ConsentBlockingBehaviour {\n if (\n str === ConsentBlockingBehaviour.PartiallyBlocked ||\n str === ConsentBlockingBehaviour.CompletelyBlocked\n ) {\n return str;\n }\n\n KameleoonLogger.error(`Unexpected consent blocking type '${str}'`);\n return ConsentBlockingBehaviour.PartiallyBlocked;\n }\n}\n","export function constructTypeMap<T extends string>(\n indexMap: Record<T, number>,\n): Record<number, T> {\n return Object.fromEntries(\n Object.entries(indexMap).map(([key, value]) => [value, key]),\n ) as Record<number, T>;\n}\n","import {\n DereferencedTargetingDataType,\n TargetingDataType,\n VisitorReference,\n} from 'src/targeting';\nimport { DataInfoType, FeatureFlagVariationsType, IStorage } from 'src/storage';\nimport {\n Browser,\n Conversion,\n Cookie,\n CustomData,\n Device,\n GeolocationData,\n OperatingSystem,\n PageView,\n UserAgent,\n ApplicationVersion,\n VisitsData,\n KameleoonConversionScore,\n DataManager,\n UniqueIdentifier,\n} from 'src/kameleoonData';\nimport { constructTypeMap } from './helpers';\nimport { VisitorDataFiltersType } from 'src/utilities';\nimport { TrackingStatus } from 'src/types';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport { Personalization } from 'src/kameleoonData/personalization';\nimport { CBScores } from 'src/kameleoonData/cbScores';\nimport { TargetedSegment } from 'src/kameleoonData/targetedSegment';\n\nexport type FieldParametersType = {\n expirationTime?: number;\n key: KameleoonData;\n value:\n | BrowserDataType\n | CookieDataType\n | DeviceDataType\n | GeolocationDataType\n | OperatingSystemDataType\n | UserAgentDataType\n | VisitsDataType;\n visitorCode: string;\n data: DereferencedTargetingDataType;\n};\n\nexport type VisitorProcessorParametersType = {\n filters: VisitorDataFiltersType;\n dataManager: DataManager;\n visitorCode: string;\n};\n\nexport type NestedFieldParametersType = {\n expirationTime?: number;\n visitorCode: string;\n key:\n | KameleoonData.CustomData\n | KameleoonData.PageView\n | KameleoonData.Conversion\n | KameleoonData.Personalization\n | KameleoonData.TargetedSegment;\n nestedKey: string;\n value:\n | CustomDataType\n | PageViewDataType\n | ConversionDataType\n | PersonalizationDataType\n | TargetedSegmentDataType;\n data: DereferencedTargetingDataType;\n};\n\nexport type DataFilterType = ({\n status,\n key,\n cdIndex,\n}: {\n status: TrackingStatus;\n key: KameleoonData;\n cdIndex?: number;\n}) => boolean;\n\nexport type MutAddUnsentDataType = {\n mutData: DataInfoType;\n visitorCode: string;\n dataType: KameleoonData;\n};\n\nexport type DereferenceTargetingDataResultType = {\n data: DereferencedTargetingDataType;\n visitorReference: string;\n isReference: boolean;\n};\n\nexport type DataManagerParametersType = {\n cleanupInterval: number | null;\n dataStorage: IStorage<TargetingDataType>;\n infoStorage: IStorage<DataInfoType>;\n packageInfo: ExternalPackageInfoType;\n};\n\nexport type KameleoonDataItemType =\n | IdentifierDataType\n | BrowserDataType\n | ConversionDataType\n | CustomDataType\n | DeviceDataType\n | PageViewDataType\n | UserAgentDataType\n | CookieDataType\n | GeolocationDataType\n | OperatingSystemDataType\n | ApplicationVersionDataType\n | KCSDataType\n | VisitsDataType\n | PersonalizationDataType\n | CBSDataType\n | TargetedSegmentDataType;\n\n/**\n * @interface an interface of KameleoonData\n * each class instance will have url getter method\n * for handling url of different data types\n * */\nexport interface IKameleoonData {\n /**\n * @property url - url for the current data type used for events tracking\n * */\n readonly url: string;\n /**\n * @property data - data of the current class instance\n * */\n readonly data: KameleoonDataItemType;\n /**\n * @property status - signifying if the data is tracked, not tracked or pending\n * */\n status: TrackingStatus;\n}\n\n/**\n * @type a tuple of each possible type of data for `addData` method\n * of KameleoonClient\n * */\nexport type KameleoonDataType =\n | UniqueIdentifier\n | Browser\n | Conversion\n | CustomData\n | Device\n | PageView\n | UserAgent\n | VisitsData\n | GeolocationData\n | OperatingSystem\n | Cookie\n | ApplicationVersion\n | KameleoonConversionScore\n | Personalization\n | CBScores\n | TargetedSegment;\n\nexport type ExpirationTimeType = {\n expirationTime: number;\n};\n\nexport type VisitorsDataType = {\n [visitorCode: string]: KameleoonDataType[];\n};\n\nexport type ExistingCustomDataType = NonNullable<\n KameleoonVisitorDataType[KameleoonData.CustomData]\n>;\n\nexport type ExistingPageViewDataType = NonNullable<\n KameleoonVisitorDataType[KameleoonData.PageView]\n>;\n\nexport type ExistingConversionDataType = NonNullable<\n KameleoonVisitorDataType[KameleoonData.Conversion]\n>;\n\nexport type ExistingPersonalizationDataType = NonNullable<\n KameleoonVisitorDataType[KameleoonData.Personalization]\n>;\n\nexport type ExistingTargetedSegmentDataType = NonNullable<\n KameleoonVisitorDataType[KameleoonData.TargetedSegment]\n>;\n\nexport type ExistingDataType<T extends KameleoonData> = NonNullable<\n KameleoonVisitorDataType[T]\n>;\n\nexport type ExistingNestedDataType =\n | ExistingCustomDataType\n | ExistingPageViewDataType\n | ExistingConversionDataType\n | ExistingPersonalizationDataType\n | ExistingTargetedSegmentDataType;\n\nexport type KameleoonVisitorDataType<T = ExpirationTimeType> = {\n [KameleoonData.CustomData]?: {\n [index: string]: (CustomDataType & T) | undefined;\n };\n [KameleoonData.Conversion]?: {\n [id: string]: (ConversionDataType & T) | undefined;\n };\n [KameleoonData.PageView]?: { [url: string]: PageViewDataType & T };\n [KameleoonData.UniqueIdentifier]?: IdentifierDataType & T;\n [KameleoonData.GeolocationData]?: GeolocationDataType & T;\n [KameleoonData.UserAgent]?: UserAgentDataType & T;\n [KameleoonData.Browser]?: BrowserDataType & T;\n [KameleoonData.Device]?: DeviceDataType & T;\n [KameleoonData.Cookie]?: CookieDataType & T;\n [KameleoonData.KameleoonConversionScore]?: KCSDataType & T;\n [KameleoonData.OperatingSystem]?: OperatingSystemDataType & T;\n [KameleoonData.ApplicationVersion]?: ApplicationVersionDataType & T;\n [KameleoonData.VisitsData]?: VisitsDataType & T;\n [KameleoonData.Personalization]?: {\n [id: string]: PersonalizationDataType & T;\n };\n [KameleoonData.CBScores]?: CBSDataType & T;\n [KameleoonData.TargetedSegment]?: {\n [id: string]: TargetedSegmentDataType & T;\n };\n};\n\nexport enum KameleoonData {\n UniqueIdentifier = 'uniqueIdentifier',\n CustomData = 'customData',\n PageView = 'pageView',\n GeolocationData = 'geolocation',\n Browser = 'browser',\n Conversion = 'conversion',\n Cookie = 'cookie',\n Device = 'device',\n OperatingSystem = 'operatingSystem',\n UserAgent = 'userAgent',\n ApplicationVersion = 'applicationVersion',\n VisitsData = 'visitsData',\n KameleoonConversionScore = 'kameleoonConversionScore',\n Personalization = 'personalization',\n CBScores = 'cbScores',\n TargetedSegment = 'targetedSegment',\n}\n\ntype CommonUpdateParametersType = {\n mutData: DereferencedTargetingDataType;\n visitorCode: string;\n expirationTime?: number;\n};\n\nexport type UpdateCustomDataParametersType = {\n customData: CustomData;\n} & CommonUpdateParametersType;\n\nexport type ProcessCustomDataManagerParametersType = {\n infoData: DataInfoType;\n mutData: TargetingDataType;\n customData: CustomData;\n visitorCode: string;\n};\n\nexport type UpdateConversionParametersType = {\n conversion: Conversion;\n} & CommonUpdateParametersType;\n\nexport type UpdateVisitsDataParametersType = {\n visitsData: VisitsData;\n} & CommonUpdateParametersType;\n\nexport type UpdatePersonalizationParametersType = {\n personalization: Personalization;\n} & CommonUpdateParametersType;\n\nexport type UpdateTargetSegmentParametersType = {\n targetedSegment: TargetedSegment;\n} & CommonUpdateParametersType;\n\nexport type UpdateCommonDataParametersType = {\n commonData: KameleoonDataType;\n} & CommonUpdateParametersType;\n\nexport type UpdatePageViewParametersType = {\n pageView: PageView;\n} & CommonUpdateParametersType;\n\nexport type MutUpdateDataParametersType = {\n infoData: DataInfoType;\n mutData: TargetingDataType;\n dataItem: KameleoonDataType;\n visitorCode: string;\n extendTtl: boolean;\n};\n\nexport type MutUpdateTargetingDataParametersType = {\n visitorCode: string;\n infoData: DataInfoType;\n kameleoonData: KameleoonDataType[];\n targetingData: TargetingDataType;\n extendTtl: boolean;\n};\n\nexport type ReferenceParametersType = {\n mutData: TargetingDataType;\n visitorCode: string;\n linkedVisitor: VisitorReference;\n infoData: DataInfoType;\n};\n\ntype SharedDataPropertiesType = {\n type: KameleoonData;\n status: TrackingStatus;\n};\n\nexport type IdentifierDataType = {\n value: boolean;\n} & SharedDataPropertiesType;\n\nexport type BrowserDataType = {\n browser: BrowserType;\n version?: number;\n} & SharedDataPropertiesType;\n\nexport type TargetedSegmentDataType = {\n id: number;\n} & SharedDataPropertiesType;\n\nexport type ConversionDataType = {\n id: number;\n goalId: number;\n revenue: number;\n negative: boolean;\n nonce?: string;\n metadata?: CustomDataType[];\n} & SharedDataPropertiesType;\n\nexport type CustomDataType = {\n index: number;\n name?: string;\n value: string[];\n isIdentifier: boolean;\n overwrite?: boolean;\n} & SharedDataPropertiesType;\n\nexport type DeviceDataType = {\n device: DeviceType;\n} & SharedDataPropertiesType;\n\nexport type KCSDataType = {\n kcs: KCSType;\n} & SharedDataPropertiesType;\n\nexport type CBSDataType = {\n cbs: CBSType;\n} & SharedDataPropertiesType;\n\nexport type PersonalizationDataType = {\n id: number;\n variationId: number;\n} & SharedDataPropertiesType;\n\nexport type VisitsDataType = {\n visits: VisitDataType[] | number[];\n visitNumber?: number;\n} & SharedDataPropertiesType;\n\nexport type VisitDataType = {\n timeStarted: number;\n timeLastActivity: number;\n};\n\nexport type OperatingSystemDataType = {\n operatingSystem: OperatingSystemType;\n} & SharedDataPropertiesType;\n\nexport type CookieDataType = {\n cookie: CookieType[];\n} & SharedDataPropertiesType;\n\nexport type GeolocationDataType = GeolocationInfoType &\n SharedDataPropertiesType;\n\nexport type PageViewDataType = {\n urlAddress: string;\n title: string;\n nonce?: string;\n referrers?: number[];\n timestamps: TimestampType[];\n} & SharedDataPropertiesType;\n\nexport type TimestampType = {\n time: number;\n status: TrackingStatus;\n};\n\nexport type UserAgentDataType = {\n value: string;\n} & SharedDataPropertiesType;\n\nexport type ApplicationVersionDataType = {\n version: string;\n} & SharedDataPropertiesType;\n\n/**\n * @param {number} goalId - an id of a goal to track\n * @param {number | undefined} revenue - an optional parameter for revenue, default value is `0`\n * @param {boolean | undefined} negative - an optional parameter identifying whether the conversion should be removed, default value is `false`\n * @param {CustomData[] | undefined} metadata - an optional parameter, default value is `undefined`\n * */\nexport type ConversionParametersType = {\n goalId: number;\n revenue?: number;\n negative?: boolean;\n metadata?: CustomData[];\n};\n\n/**\n * @param {string} urlAddress - url address of the page to track\n * @param {string} title - title of the web page\n * @param {number[] | undefined} referrers - an optional parameter containing a list of referrersIndices, has no default value\n * */\nexport type PageViewParametersType = {\n urlAddress: string;\n title: string;\n referrers?: number[];\n};\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants for device type\n * */\nexport enum DeviceType {\n Phone = 'PHONE',\n Tablet = 'TABLET',\n Desktop = 'DESKTOP',\n}\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants for operating system type\n * */\nexport enum OperatingSystemType {\n WindowsPhone = 'WINDOWS_PHONE',\n Windows = 'WINDOWS',\n Android = 'ANDROID',\n Linux = 'LINUX',\n Mac = 'MAC',\n IOS = 'IOS',\n}\n\n/**\n * @param {string} country - a country of a visitor\n * @param {string | undefined} region - an optional parameter containing a region of a visitor, has no default value\n * @param {string | undefined} city - an optional parameter containing a city of a visitor, has no default value\n * @param {string | undefined} postalCode - an optional parameter containing a postal code of a visitor, has no default value\n * @param {[number, number] | undefined} coordinates - an optional parameter containing a pair of coordinates (longitude and latitude) of a visitor, has no default value. Coordinate `number` represents decimal degrees (double that can be negative)\n * */\nexport type GeolocationInfoType = {\n country: string;\n region?: string;\n city?: string;\n postalCode?: string;\n coordinates?: [number, number];\n};\n\n/**\n * @param {string} key - a key of a cookie\n * @param {string} value - a value of a cookie\n * */\nexport type CookieType = {\n key: string;\n value: string;\n};\n\n/**\n * @type Nested object of key moments and goals with their respective scores\n * */\nexport type KCSType = {\n [keyMoment: string]: {\n [goalId: string]: number;\n };\n};\n\nexport type CBSType = {\n [key: string]: ScoredVarIds;\n};\n\nexport type ScoredVarIds = {\n [variationId: string]: number;\n};\n\nexport type VarGroup = {\n ids: number[];\n};\n\nexport type OptionalCookieType = Omit<CookieType, 'key'> & {\n key?: string;\n};\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants for browser type\n * */\nexport enum BrowserType {\n Chrome = 'CHROME',\n InternetExplorer = 'IE',\n Firefox = 'FIREFOX',\n Safari = 'SAFARI',\n Opera = 'OPERA',\n Other = 'OTHER',\n}\n\nexport const OperatingSystemIndexMap = {\n [OperatingSystemType.Windows]: 0,\n [OperatingSystemType.Mac]: 1,\n [OperatingSystemType.IOS]: 2,\n [OperatingSystemType.Linux]: 3,\n [OperatingSystemType.Android]: 4,\n [OperatingSystemType.WindowsPhone]: 5,\n} as const;\n\nexport const OperatingSystemTypeMap = constructTypeMap<OperatingSystemType>(\n OperatingSystemIndexMap,\n);\n\nexport const BrowserIndexMap = {\n [BrowserType.Chrome]: 0,\n [BrowserType.InternetExplorer]: 1,\n [BrowserType.Firefox]: 2,\n [BrowserType.Safari]: 3,\n [BrowserType.Opera]: 4,\n [BrowserType.Other]: 5,\n} as const;\n\nexport const BrowserTypeMap = constructTypeMap<BrowserType>(BrowserIndexMap);\n\nexport type SingleDataType = {\n [KameleoonData.Device]: Device | null;\n [KameleoonData.Browser]: Browser | null;\n [KameleoonData.GeolocationData]: GeolocationData | null;\n [KameleoonData.OperatingSystem]: OperatingSystem | null;\n [KameleoonData.KameleoonConversionScore]: KameleoonConversionScore | null;\n [KameleoonData.CBScores]: CBScores | null;\n};\n\nexport type MultipleDataType = {\n [KameleoonData.CustomData]: Map<number, CustomData>;\n [KameleoonData.PageView]: Map<string, PageView>;\n [KameleoonData.Conversion]: Map<number, Conversion>;\n [KameleoonData.Personalization]: Map<number, Personalization>;\n};\n\nexport type VisitProcessorDataType = {\n visitorData: KameleoonDataType[];\n storageVisitorData: KameleoonDataType[];\n visitsData: VisitsData;\n experimentData: FeatureFlagVariationsType;\n};\n\nexport type StaticDataType = {\n browserType?: BrowserType;\n browserVersion?: number;\n visitNumber?: number;\n timeSincePreviousVisit?: number;\n deviceType?: DeviceType;\n os?: OperatingSystemType;\n};\n","import { VisitorDataFiltersType } from './utilities/types';\n\nexport const OFF_VARIATION_KEY = 'off';\nexport const WAREHOUSE_AUDIENCE_KEY = 'warehouseAudiences';\nexport const CACHE_CLEANUP_TIMEOUT = 10;\nexport const CACHE_ITEM_LIFETIME = 5;\nexport const IN_HOLDOUT_VARIATION_KEY = 'in-holdout';\n\n/**\n * @readonly\n * @enum {string} an Enum of all the possible Kameleoon SDK types\n * */\nexport enum SdkLanguageType {\n ANDROID = 'ANDROID',\n IOS = 'IOS',\n JAVA = 'JAVA',\n CSHARP = 'CSHARP',\n NODEJS = 'NODEJS',\n PHP = 'PHP',\n RUBY = 'RUBY',\n GO = 'GO',\n FLUTTER = 'FLUTTER',\n REACT = 'REACT',\n PYTHON = 'PYTHON',\n JAVASCRIPT = 'JAVASCRIPT',\n RUST = 'RUST',\n}\n\nexport const DEFAULT_VISITOR_DATA_FILTERS: VisitorDataFiltersType = {\n previousVisitAmount: 1,\n currentVisit: true,\n customData: true,\n pageViews: false,\n geolocation: false,\n device: false,\n browser: false,\n operatingSystem: false,\n conversions: false,\n experiments: false,\n kcs: false,\n visitorCode: true,\n personalization: false,\n};\n","import { MappedRuleType } from 'src/clientConfiguration/types';\nimport { KameleoonVisitorDataType } from 'src/kameleoonData/types';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport { ConditionDataType, ConditionType } from './conditions';\nimport { Node } from './node';\nimport { Tree } from './tree';\n\nexport enum Operator {\n And = 'AND',\n Or = 'OR',\n}\n\nexport type NonLeafNodeType = {\n left: Node;\n right: Node;\n value: Operator;\n};\n\nexport type LeafNodeType = {\n left: undefined;\n right: undefined;\n value: ConditionType;\n};\n\nexport type NodeValueType = ConditionType | Operator;\n\nexport type ConditionLevelType = {\n orOperators: boolean[];\n conditions: ConditionDataType[];\n};\n\nexport type SegmentType = {\n id: string;\n name: string;\n audienceTracking?: boolean;\n conditionsData: {\n firstLevelOrOperators: boolean[];\n firstLevel: ConditionLevelType[];\n };\n};\n\nexport type NestedConditionGroupType = {\n operators: Operator[];\n conditions: ConditionDataType[];\n};\n\nexport type GroupedSegmentsType = {\n topLevelOperators: Operator[];\n nestedConditions: NestedConditionGroupType[];\n};\n\nexport type VisitorReference = string;\n\nexport type TargetingDataType = {\n [visitorCode: string]: KameleoonVisitorDataType | VisitorReference;\n};\n\nexport type DereferencedTargetingDataType = {\n [visitorCode: string]: KameleoonVisitorDataType;\n};\n\nexport type EvaluationDataType = {\n targetingData?: KameleoonVisitorDataType;\n variationData: FeatureFlagVariationsType;\n ruleMap?: Map<number, MappedRuleType>;\n sdkInfo: ExternalPackageInfoType;\n experimentId: number | null;\n visitorCode: string;\n segments?: Map<string, SegmentType>;\n trees?: Map<string, Tree>;\n};\n\nexport enum ValueMatchType {\n TRUE = 'TRUE',\n FALSE = 'FALSE',\n EXACT = 'EXACT',\n CONTAINS = 'CONTAINS',\n REGULAR_EXPRESSION = 'REGULAR_EXPRESSION',\n EQUAL = 'EQUAL',\n LOWER = 'LOWER',\n GREATER = 'GREATER',\n UNDEFINED = 'UNDEFINED',\n AMONG_VALUES = 'AMONG_VALUES',\n RANGE = 'RANGE',\n}\n\nexport enum VisitorType {\n NEW = 'NEW',\n RETURNING = 'RETURNING',\n}\n\nexport enum MatchTypeVariation {\n ANY = 'ANY',\n EXACT = 'EXACT',\n}\n\nexport enum MatchTypeTest {\n ALL = 'ALL',\n TEST = 'TEST',\n PERSO = 'PERSO',\n}\n\nexport enum CampaignType {\n Experiment = 'EXPERIMENT',\n Personalization = 'PERSONALIZATION',\n Any = 'ANY',\n}\n\n// --- Note ---\n// Starting the merge of `matchType` with the release of new conditions\n// Now it contains a couple of sub types, in future API version all match types\n// will be accumulated in this enum\nexport enum MatchType {\n // -- Sub Type One\n EXACT = 'EXACT',\n CONTAINS = 'CONTAINS',\n REGULAR_EXPRESSION = 'REGULAR_EXPRESSION',\n // -- Sub Type Two\n GREATER = 'GREATER',\n EQUAL = 'EQUAL',\n LOWER = 'LOWER',\n}\n\nexport enum VersionMatchType {\n GREATER = 'GREATER',\n EQUAL = 'EQUAL',\n LOWER = 'LOWER',\n}\n\nexport enum NameMatchType {\n EXACT = 'EXACT',\n CONTAINS = 'CONTAINS',\n REGULAR_EXPRESSION = 'REGULAR_EXPRESSION',\n OPTIONAL = 'OPTIONAL',\n}\n\nexport enum TargetingType {\n PAGE_URL = 'PAGE_URL',\n PAGE_TITLE = 'PAGE_TITLE',\n LANDING_PAGE = 'LANDING_PAGE',\n ORIGIN = 'ORIGIN',\n ORIGIN_TYPE = 'ORIGIN_TYPE',\n REFERRERS = 'REFERRERS',\n NEW_VISITORS = 'NEW_VISITORS',\n INTERESTS = 'INTERESTS',\n BROWSER_LANGUAGE = 'BROWSER_LANGUAGE',\n GEOLOCATION = 'GEOLOCATION',\n DEVICE_TYPE = 'DEVICE_TYPE',\n SCREEN_DIMENSION = 'SCREEN_DIMENSION',\n VISITOR_IP = 'VISITOR_IP',\n AD_BLOCKER = 'AD_BLOCKER',\n PREVIOUS_PAGE = 'PREVIOUS_PAGE',\n KEY_PAGES = 'KEY_PAGES',\n PAGE_VIEWS = 'PAGE_VIEWS',\n FIRST_VISIT = 'FIRST_VISIT',\n LAST_VISIT = 'LAST_VISIT',\n ACTIVE_SESSION = 'ACTIVE_SESSION',\n TIME_SINCE_PAGE_LOAD = 'TIME_SINCE_PAGE_LOAD',\n SAME_DAY_VISITS = 'SAME_DAY_VISITS',\n VISITS = 'VISITS',\n VISITS_BY_PAGE = 'VISITS_BY_PAGE',\n VISITOR_CODE = 'VISITOR_CODE',\n SDK_LANGUAGE = 'SDK_LANGUAGE',\n INTERNAL_SEARCH_KEYWORDS = 'INTERNAL_SEARCH_KEYWORDS',\n TABS_ON_SITE = 'TABS_ON_SITE',\n CONVERSION_PROBABILITY = 'CONVERSION_PROBABILITY',\n HEAT_SLICE = 'HEAT_SLICE',\n SKY_STATUS = 'SKY_STATUS',\n TEMPERATURE = 'TEMPERATURE',\n DAY_NIGHT = 'DAY_NIGHT',\n FORECAST_SKY_STATUS = 'FORECAST_SKY_STATUS',\n FORECAST_TEMPERATURE = 'FORECAST_TEMPERATURE',\n DAY_OF_WEEK = 'DAY_OF_WEEK',\n TIME_RANGE = 'TIME_RANGE',\n HOUR_MINUTE_RANGE = 'HOUR_MINUTE_RANGE',\n JS_CODE = 'JS_CODE',\n COOKIE = 'COOKIE',\n EVENT = 'EVENT',\n BROWSER = 'BROWSER',\n OPERATING_SYSTEM = 'OPERATING_SYSTEM',\n DOM_ELEMENT = 'DOM_ELEMENT',\n MOUSE_OUT = 'MOUSE_OUT',\n TARGET_EXPERIMENT = 'TARGET_EXPERIMENT',\n TARGET_FEATURE_FLAG = 'TARGET_FEATURE_FLAG',\n TARGET_PERSONALIZATION = 'TARGET_PERSONALIZATION',\n EXCLUSIVE_EXPERIMENT = 'EXCLUSIVE_EXPERIMENT',\n CONVERSIONS = 'CONVERSIONS',\n CUSTOM_DATUM = 'CUSTOM_DATUM',\n YSANCE_SEGMENT = 'YSANCE_SEGMENT',\n SEGMENT = 'SEGMENT',\n YSANCE_ATTRIBUT = 'YSANCE_ATTRIBUT',\n TEALIUM_BADGE = 'TEALIUM_BADGE',\n TEALIUM_AUDIENCE = 'TEALIUM_AUDIENCE',\n PRICE_OF_DISPLAYED_PAGE = 'PRICE_OF_DISPLAYED_PAGE',\n NUMBER_OF_VISITED_PAGES = 'NUMBER_OF_VISITED_PAGES',\n VISITED_PAGES = 'VISITED_PAGES',\n CUSTOM = 'CUSTOM',\n EXPLICIT_TRIGGER = 'EXPLICIT_TRIGGER',\n APPLICATION_VERSION = 'APPLICATION_VERSION',\n}\n","import { CacheManager } from 'src/cacheManager';\nimport { ClientConfiguration } from 'src/clientConfiguration';\nimport { DataManager } from 'src/kameleoonData';\nimport {\n KameleoonDataType,\n KameleoonVisitorDataType,\n VisitDataType,\n} from 'src/kameleoonData/types';\nimport { Requester } from 'src/requester';\nimport { GetVisitorDataResultType } from 'src/requester/types';\nimport { SegmentType } from 'src/targeting';\nimport { TrackingCacheItemType } from 'src/types';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport { VariationConfiguration } from 'src/variationConfiguration';\nimport { MappingIdentifierType } from 'src/storage/types';\n\nexport type CheckTargetingParametersType = {\n segment: SegmentType | null;\n experimentId: number | null;\n visitorCode: string;\n packageInfo: ExternalPackageInfoType;\n targetingData?: KameleoonVisitorDataType;\n clientConfiguration: ClientConfiguration;\n variationConfiguration?: VariationConfiguration;\n dataManager: DataManager;\n};\n\nexport enum TimeUnit {\n Minute = 'MINUTE',\n Hour = 'HOUR',\n Day = 'DAY',\n Week = 'WEEK',\n Month = 'MONTH',\n}\n\nexport enum Order {\n Ascending = 'asc',\n Descending = 'desc',\n}\n\nexport type InsertInOrderedListParametersType = {\n list: number[];\n element: number;\n order: Order;\n};\n\nexport type InsertVisitInOrderedListParametersType = {\n list: VisitDataType[];\n visit: VisitDataType;\n};\n\nexport type ParseVisitorDataParametersType = {\n data: GetVisitorDataResultType;\n filters: VisitorDataFiltersType;\n visitorCode: string;\n dataManager: DataManager;\n variationConfiguration: VariationConfiguration;\n};\n\nexport type ParseVisitorDataResultType = {\n storageVisitorData: KameleoonDataType[];\n visitorData: KameleoonDataType[];\n visitsData?: KameleoonDataType;\n mappingIdentifier?: MappingIdentifierType;\n};\n\nexport type ManageCacheParametersType = {\n hasJsCssVariables: boolean;\n cacheManager: CacheManager<TrackingCacheItemType>;\n visitorCode: string;\n experimentId: number;\n variationId: number;\n};\n\nexport type TrackDataParametersType = {\n visitorCode: string;\n dataManager: DataManager;\n requester: Requester;\n isConsentProvided: boolean;\n isOfflineModeOn?: boolean;\n isMappingIdentifier?: boolean;\n};\n\nexport type TrackExperimentParametersType = {\n clientConfiguration: ClientConfiguration;\n visitorCode: string;\n requester: Requester;\n variationId: number;\n experimentId: number;\n isUnallocated: boolean;\n isOfflineModeOn?: boolean;\n};\n\n/**\n * @param {number} previousVisitAmount - Number of previous visits to retrieve data from. Number between `1` and `25`\n * *Default*: `1`.\n * @param {number} currentVisit - If true, current visit data will be retrieved.\n * *Default*: `true`.\n * @param {boolean} customData - If true, custom data will be retrieved.\n * *Default*: `true`.\n * @param {boolean} pageViews - If true, page data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} geolocation - If true, geolocation data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} device - If true, device data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} browser - If true, browser data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} operatingSystem - If true, operating system data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} conversions - If true, conversion data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} experiments - If true, experiment data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} kcs - If true, Kameleoon Conversion Score data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} visitorCode - If true, visitor code will be retrieved.\n * *Default*: `true`.\n * @param {boolean} personalization - If true, personalization data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} cbs - If true, Contextual Bandit evaluations data will be retrieved.\n * *Default*: `false`.\n * */\nexport type VisitorDataFiltersType = {\n previousVisitAmount?: number;\n currentVisit?: boolean;\n pageViews?: boolean;\n geolocation?: boolean;\n device?: boolean;\n browser?: boolean;\n operatingSystem?: boolean;\n customData?: boolean;\n conversions?: boolean;\n experiments?: boolean;\n kcs?: boolean;\n visitorCode?: boolean;\n personalization?: boolean;\n cbs?: boolean;\n};\n\n/**\n * @interface `IExternalPRNG` - an interface for external PRNG (Pseudo-Random Number Generator) used to generate secure random numbers depending on the environment and platform\n * */\nexport interface IExternalPRNG {\n /**\n * @method getRandomNumber - a method to generate a secure random number\n * @returns {number} a secure random `number`, which must be a floating-point number between 0 and 1, similarly to `Math.random()`\n * */\n getRandomNumber(): number;\n}\n","export const HEX_CHARACTERS = '0123456789ABCDEF';\nexport const NONCE_LENGTH = 16;\nexport const HTTP = 'http://';\nexport const HTTPS = 'https://';\nexport const LOCALHOST = 'localhost';\nexport const REGEX_DOMAIN =\n /^(\\.?(([a-zA-Z\\d][a-zA-Z\\d-]*[a-zA-Z\\d])|[a-zA-Z\\d]))(\\.(([a-zA-Z\\d][a-zA-Z\\d-]*[a-zA-Z\\d])|[a-zA-Z\\d])){1,126}$/;\nexport const HIDDEN_SECRET_CHAR = '*';\nexport const SECRET_VISIBLE_LENGTH = 4;\nexport const VISITOR_VISIT_MAX_LENGTH = 26;\n","import { Err, Ok, Result } from 'ts-res';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { HTTP, HTTPS, LOCALHOST, REGEX_DOMAIN } from 'src/utilities/constants';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class Validator {\n static validateVersion(\n version: string,\n ): Result<[number, number, number], KameleoonError> {\n const versionParts = version.split('.').map((x) => parseInt(x, 10));\n\n while (versionParts.length < 3) {\n versionParts.push(0);\n }\n\n if (versionParts.some((item) => isNaN(item))) {\n return Err(\n new KameleoonError(KameleoonException.SemanticVersionParse, version),\n );\n }\n\n return Ok(versionParts.slice(0, 3) as [number, number, number]);\n }\n\n static validateDomain(domain: string | undefined): Result<string, void> {\n if (!domain) {\n return Err();\n }\n\n domain = Validator.checkAndTrimProtocol(domain.toLowerCase());\n\n if (!REGEX_DOMAIN.test(domain) && domain !== LOCALHOST) {\n KameleoonLogger.error`The top-level domain ${domain} is invalid. The value has been set as provided, but it does not meet the required format for proper SDK functionality. Please check the domain for correctness.`;\n return Ok(domain);\n }\n\n return Ok(domain);\n }\n\n static validateNetworkDomain(networkDomain: string | undefined): Result<string, void> {\n if (!networkDomain) {\n return Err();\n }\n\n networkDomain = Validator.checkAndTrimProtocol(networkDomain.toLowerCase());\n\n // replace first and last dot\n networkDomain = networkDomain.replace(/^\\.+|\\.+$/g, '');\n\n if (!REGEX_DOMAIN.test(networkDomain) && networkDomain !== LOCALHOST) {\n KameleoonLogger.error`The network domain ${networkDomain} is invalid.`;\n return Err();\n }\n\n return Ok(networkDomain);\n }\n\n private static checkAndTrimProtocol(domain: string): string {\n const protocols = [HTTP, HTTPS];\n for (const protocol of protocols) {\n if (domain.startsWith(protocol)) {\n domain = domain.substring(protocol.length);\n KameleoonLogger.warning`The domain contains ${protocol}. Domain after protocol trimming: ${domain}`;\n break;\n }\n }\n\n return domain;\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport { Milliseconds, TrackingCacheItemType } from 'src/types';\nimport { CustomData } from 'src/kameleoonData/customData';\nimport { KameleoonData, KameleoonDataType } from 'src/kameleoonData/types';\nimport { CACHE_ITEM_LIFETIME } from 'src/constants';\nimport { CacheManager } from 'src/cacheManager';\nimport { VersionMatchType, TargetingType } from 'src/targeting/types';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\nimport {\n CheckTargetingParametersType,\n ManageCacheParametersType,\n TimeUnit,\n IExternalPRNG,\n} from './types';\nimport { HEX_CHARACTERS, NONCE_LENGTH } from './constants';\nimport { Validator } from './validator';\nimport { KameleoonLogger } from 'src/logging';\nimport { VariationByExpositionType } from 'src/clientConfiguration/types';\n\nexport class Utilities {\n static getNonce(prng: IExternalPRNG): string {\n let nonce: string = '';\n\n for (let i = 0; i < NONCE_LENGTH; i++) {\n const randomNumber = prng.getRandomNumber();\n const randomIndex = Math.floor(randomNumber * NONCE_LENGTH);\n nonce += HEX_CHARACTERS.charAt(randomIndex);\n }\n\n return nonce;\n }\n\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n clientConfiguration,\n packageInfo,\n dataManager,\n }: CheckTargetingParametersType): Result<boolean, KameleoonError> {\n KameleoonLogger.debug`CALL: checkTargeting(segment, visitorCode: ${visitorCode}, targetingData: ${targetingData}, experimentId: ${experimentId}, variationConfiguration, clientConfiguration, packageInfo, dataManager)`;\n if (!segment || !segment.conditionsData.firstLevel.length) {\n const result = Ok(true);\n KameleoonLogger.debug`RETURN checkTargeting(segment, visitorCode: ${visitorCode}, targetingData: ${targetingData}, experimentId: ${experimentId}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${result})`;\n return result;\n }\n\n if (!variationConfiguration) {\n const result = Err(new KameleoonError(KameleoonException.Initialization));\n KameleoonLogger.debug`RETURN checkTargeting(segment, visitorCode: ${visitorCode}, targetingData: ${targetingData}, experimentId: ${experimentId}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${result})`;\n return result;\n }\n\n let variations: FeatureFlagVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getStoredVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = dataManager.getTree(segment);\n\n let trees = undefined;\n let ruleMap = undefined;\n let segments = undefined;\n\n // --- Note ---\n // Only getting trees and segments targeting type\n if (targetingTree.hasTargetingType(TargetingType.SEGMENT)) {\n trees = dataManager.trees;\n segments = clientConfiguration.segments;\n }\n\n // --- Note ---\n // Only constructing rule map for targeting type\n if (targetingTree.hasTargetingType(TargetingType.TARGET_FEATURE_FLAG)) {\n ruleMap = clientConfiguration.ruleMap;\n }\n\n const result = targetingTree.evaluate({\n variationData: variations,\n sdkInfo: packageInfo,\n segments,\n ruleMap,\n trees,\n targetingData,\n experimentId,\n visitorCode,\n });\n\n KameleoonLogger.debug`RETURN checkTargeting(segment, visitorCode: ${visitorCode}, targetingData: ${targetingData}, experimentId: ${experimentId}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${result})`;\n return result;\n }\n\n static convertTimeUnit(time: number, timeUnit: TimeUnit): number {\n const timeMap = {\n [TimeUnit.Minute]: Milliseconds.Minute,\n [TimeUnit.Hour]: Milliseconds.Hour,\n [TimeUnit.Day]: Milliseconds.Day,\n [TimeUnit.Week]: Milliseconds.Week,\n [TimeUnit.Month]: Milliseconds.Month,\n };\n\n return time / timeMap[timeUnit];\n }\n\n static isCustomData(dataItem: KameleoonDataType): dataItem is CustomData {\n return dataItem.data.type === KameleoonData.CustomData;\n }\n\n static updateCache({\n hasJsCssVariables,\n cacheManager,\n visitorCode,\n experimentId,\n variationId,\n }: ManageCacheParametersType): void {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n\n const newCacheData = cacheData ? { ...cacheData } : {};\n\n newCacheData[experimentId] = {\n variationId,\n hasJsCssVariables,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n\n static getTrackingCode(\n trackingCache: CacheManager<TrackingCacheItemType>,\n visitorCode: string,\n ): string {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n\n const cacheData = trackingCache.getAliveItem(visitorCode);\n\n if (!cacheData) {\n return resultString;\n }\n\n const updatedCacheData: TrackingCacheItemType = {};\n\n Object.entries(cacheData).forEach(\n ([experimentId, { variationId, expirationTime, hasJsCssVariables }]) => {\n const flag = !hasJsCssVariables;\n\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId},true]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},${flag}]);`;\n\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n hasJsCssVariables,\n };\n }\n },\n );\n\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n\n return resultString;\n }\n\n static compareSemVer({\n version,\n compareVersion,\n operator,\n }: {\n version: string;\n compareVersion: string;\n operator: VersionMatchType;\n }): Result<boolean, KameleoonError> {\n const versionResult = Validator.validateVersion(version);\n const compareVersionResult = Validator.validateVersion(compareVersion);\n\n if (!versionResult.ok) {\n return Err(versionResult.error);\n }\n\n if (!compareVersionResult.ok) {\n return Err(compareVersionResult.error);\n }\n\n const [major, minor, patch] = versionResult.data;\n const [compareMajor, compareMinor, comparePatch] =\n compareVersionResult.data;\n\n const [isMajorEqual, isMinorEqual, isPatchEqual] = [\n major === compareMajor,\n minor === compareMinor,\n patch === comparePatch,\n ];\n\n switch (operator) {\n case VersionMatchType.EQUAL:\n return Ok(isMajorEqual && isMinorEqual && isPatchEqual);\n case VersionMatchType.GREATER:\n return Ok(\n major > compareMajor ||\n (isMajorEqual && minor > compareMinor) ||\n (isMajorEqual && isMinorEqual && patch > comparePatch),\n );\n case VersionMatchType.LOWER:\n return Ok(\n major < compareMajor ||\n (isMajorEqual && minor < compareMinor) ||\n (isMajorEqual && isMinorEqual && patch < comparePatch),\n );\n default:\n KameleoonLogger.error`Unknown version match type: ${operator}`;\n exhaustCheck(operator);\n }\n }\n\n static getVariationByHash(\n variationByExposition: VariationByExpositionType[],\n hash: number,\n ): VariationByExpositionType | null {\n let total = 0;\n for (const varByExpItem of variationByExposition) {\n total += varByExpItem.exposition;\n if (total >= hash) {\n return varByExpItem;\n }\n }\n return null;\n }\n}\n","import {\n InsertInOrderedListParametersType,\n InsertVisitInOrderedListParametersType,\n Order,\n} from 'src/utilities/types';\nimport { VISITOR_VISIT_MAX_LENGTH } from 'src/utilities/constants';\n\nexport class ListUtilities {\n /**\n * Insert element in ordered list, if element already exists in list, does nothing\n * @param list - list to insert element\n * @param element - element to insert\n * @param order - order of list\n */\n static insertInOrderedListMutably({\n list,\n element,\n order,\n }: InsertInOrderedListParametersType): void {\n if (list.includes(element)) {\n return;\n }\n\n const index = list.findIndex((item) =>\n order === Order.Ascending ? item >= element : item <= element,\n );\n\n if (index === -1) {\n list.push(element as any);\n } else {\n list.splice(index, 0, element);\n }\n }\n\n /**\n * Insert visit in ordered list, if visit already exists in list, does nothing\n * @param list - list to insert element\n * @param visit - visit to insert\n */\n static insertVisitInOrderedListMutably({\n list,\n visit,\n }: InsertVisitInOrderedListParametersType): void {\n // Check if the visit already exists in the list\n const currentVisit = list.find((item) =>\n typeof item === 'number'\n ? item === visit.timeStarted\n : item.timeStarted === visit.timeStarted,\n );\n if (currentVisit) {\n return;\n }\n\n const index = list.findIndex((item) => {\n if (typeof item === 'number') {\n return item >= visit.timeStarted;\n }\n return item.timeStarted >= visit.timeStarted;\n });\n\n if (index === -1) {\n list.push(visit);\n } else {\n list.splice(index, 0, visit);\n }\n\n if (list.length > VISITOR_VISIT_MAX_LENGTH) {\n list.splice(0, list.length - VISITOR_VISIT_MAX_LENGTH);\n }\n }\n}\n","import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport {\n IKameleoonData,\n KameleoonData,\n PageViewDataType,\n PageViewParametersType,\n TimestampType,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * PageView - a class for creating an instance of a page view data\n * */\nexport class PageView implements IKameleoonData {\n // --- Note ---\n // Kept in ascending order\n public timestamps: TimestampType[];\n\n private urlAddress: string;\n private title: string;\n private nonce?: string;\n private referrers?: number[];\n\n /**\n * @param {PageViewParametersType} pageViewParameters - an object with page view parameters\n * */\n constructor({ urlAddress, title, referrers }: PageViewParametersType) {\n this.urlAddress = urlAddress;\n this.title = title;\n this.referrers = referrers;\n this.timestamps = [\n {\n time: Date.now(),\n status: TrackingStatus.Unsent,\n },\n ];\n }\n\n get url(): string {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.urlAddress) {\n return '';\n }\n\n const titleParameter = this.title\n ? UrlParameter.Title + encodeURIComponent(this.title)\n : '';\n\n const referrersParameter = this.referrers?.length\n ? UrlParameter.ReferrersIndices + JSON.stringify(this.referrers)\n : '';\n\n return (\n UrlEventType.Page +\n UrlParameter.Href +\n encodeURIComponent(this.urlAddress) +\n titleParameter +\n referrersParameter\n );\n }\n\n get status(): TrackingStatus {\n const {\n [TrackingStatus.Sent]: sent,\n [TrackingStatus.Unsent]: unsent,\n [TrackingStatus.Pending]: pending,\n } = this.timestamps.reduce(\n (acc, { status }) => {\n acc[status] = true;\n return acc;\n },\n {\n [TrackingStatus.Sent]: false,\n [TrackingStatus.Unsent]: false,\n [TrackingStatus.Pending]: false,\n },\n );\n\n if (sent && !unsent && !pending) {\n return TrackingStatus.Sent;\n }\n\n if (pending && !unsent) {\n return TrackingStatus.Pending;\n }\n\n return TrackingStatus.Unsent;\n }\n\n set status(status: TrackingStatus) {\n this.timestamps = this.timestamps.map((timestamp) => ({\n ...timestamp,\n status,\n }));\n }\n\n set _nonce(nonce: string) {\n this.nonce = nonce;\n }\n\n get data(): PageViewDataType {\n return {\n urlAddress: this.urlAddress,\n title: this.title,\n referrers: this.referrers,\n type: KameleoonData.PageView,\n timestamps: this.timestamps,\n status: this.status,\n nonce: this.nonce,\n };\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a PageView instance from raw data\n * @param {PageViewDataType} data - a raw data\n * @return {PageView} a PageView instance\n * */\n public static _fromRaw(data: PageViewDataType): PageView {\n const { urlAddress, title, referrers, timestamps, nonce } = data;\n const pageView = new PageView({\n urlAddress,\n title,\n referrers,\n });\n\n pageView.timestamps = timestamps;\n\n if (nonce) {\n pageView._nonce = nonce;\n }\n\n return pageView;\n }\n\n /**\n * @private\n * @method _updateFromVisit - an internal method for updating a list of page view data from a visit\n * @param {VisitType} visit - a visit\n * @param {Map<string, PageView>} dataMap - a map of page view data where we collect data\n * */\n public static _updateFromVisit(\n visit: VisitType,\n dataMap: Map<string, PageView>,\n ): void {\n const pageEvents = visit.pageEvents;\n\n if (pageEvents) {\n for (const pageEvent of pageEvents) {\n let referrers: number[] = [];\n\n const { time } = pageEvent;\n const { href, title, referrersIndices } = pageEvent.data;\n\n if (typeof referrersIndices[0] === 'number') {\n referrers = referrersIndices as number[];\n }\n\n let pageView: PageView;\n\n if (dataMap.has(href)) {\n const existingTimestamps = dataMap.get(href)!.timestamps;\n\n pageView = new PageView({\n urlAddress: href,\n title,\n referrers,\n });\n\n pageView.timestamps = [\n ...existingTimestamps,\n { time, status: TrackingStatus.Sent },\n ];\n } else {\n pageView = new PageView({\n urlAddress: href,\n title,\n referrers,\n });\n\n pageView.timestamps = [{ time, status: TrackingStatus.Sent }];\n }\n\n dataMap.set(href, pageView);\n }\n }\n }\n}\n","import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport { CustomDataType, IKameleoonData, KameleoonData } from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * CustomData - a class for creating an instance for user's custom data\n * */\nexport class CustomData implements IKameleoonData {\n static readonly UNDEFINED_INDEX = -1;\n\n private _status: TrackingStatus;\n private _index: number;\n private value: string[];\n private isIdentifier: boolean;\n private overwrite: boolean;\n private _name?: string;\n\n /**\n * @param {number|string} indexOrName - either:\n * - `number` — an index of custom data (configured in *Advanced Tools* section of Kameleoon Application)\n * - `string` — a custom name for the data\n * @param {boolean} [overwrite=true] - optional flag, whether to overwrite existing data\n * @param {...string} value - one or more values to store. Values must be strings (or stringified).\n *\n * @example\n * ```ts\n * // - Using index with single value\n * const cd1 = new CustomData(0, 'value_1');\n *\n * // - Using index with multiple values\n * const cd2 = new CustomData(0, 'value_1', 'value_2');\n *\n * // - Using index with overwrite flag\n * const cd3 = new CustomData(0, false, 'value_1', 'value_2');\n *\n * // - Using name with single value\n * const cd4 = new CustomData('name', 'value_1');\n *\n * // - Using name with multiple values\n * const cd5 = new CustomData('name', 'value_1', 'value_2');\n *\n * // - Using name with overwrite flag\n * const cd6 = new CustomData('name', false, 'value_1', 'value_2');\n * ```\n */\n constructor(index: number, ...value: string[]);\n constructor(index: number, overwrite: boolean, ...value: string[]);\n constructor(name: string, ...value: string[]);\n constructor(name: string, overwrite: boolean, ...value: string[]);\n constructor(\n first: number | string,\n second?: boolean | string,\n ...rest: string[]\n ) {\n this._status = TrackingStatus.Unsent;\n this.isIdentifier = false;\n\n const isNumber = typeof first === 'number';\n const isBoolean = typeof second === 'boolean';\n\n if (isNumber) {\n this._index = first as number;\n } else {\n this._name = first as string;\n this._index = CustomData.UNDEFINED_INDEX;\n }\n\n this.overwrite = isBoolean ? (second as boolean) : true;\n this.value = isBoolean\n ? rest\n : [second as string, ...rest].filter((v) => v != null);\n }\n\n get url(): string {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (typeof this._index !== 'number') {\n return '';\n }\n\n const uniqueValues = [...new Set(this.value)];\n let resultValue: Record<string, 1> = {};\n\n // --- Note ---\n // Final value should look like this `{ \"value_1\": 1, \"value_2\": 1, \"value_3\": 1 }`\n // With no duplicates\n uniqueValues.forEach((value) => {\n resultValue[value] = 1;\n });\n\n let identifierParameter = '';\n\n if (this.isIdentifier) {\n identifierParameter = UrlParameter.MappingIdentifier + String(true);\n }\n\n return (\n UrlEventType.CustomData +\n UrlParameter.Index +\n this._index +\n UrlParameter.ValuesCountMap +\n encodeURIComponent(JSON.stringify(resultValue)) +\n UrlParameter.Overwrite +\n String(this.overwrite) +\n identifierParameter\n );\n }\n\n get data(): CustomDataType {\n return {\n index: this._index,\n ...(this._name !== undefined ? { name: this._name } : {}),\n value: this.value,\n type: KameleoonData.CustomData,\n isIdentifier: this.isIdentifier,\n status: this.status,\n overwrite: this.overwrite,\n };\n }\n\n get status(): TrackingStatus {\n if (this._isMappingIdentifier) {\n return TrackingStatus.Unsent;\n }\n\n return this._status;\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a CustomData instance from raw data\n * @param {CustomDataType} data - a raw data\n * @return {CustomData} a CustomData instance\n * */\n public static _fromRaw(data: CustomDataType): CustomData {\n const { index, value, status, isIdentifier, name, overwrite } = data;\n let customData;\n if (name) {\n customData = new CustomData(name, overwrite ?? true, ...value);\n customData.index = index;\n } else {\n customData = new CustomData(index, overwrite ?? true, ...value);\n }\n\n customData.status = status;\n customData._isMappingIdentifier = isIdentifier;\n\n return customData;\n }\n\n /**\n * @property isMappingIdentifier - signifying if the data is a mapping identifier\n * @private\n * */\n set _isMappingIdentifier(value: boolean) {\n this.isIdentifier = value;\n }\n\n set status(status: TrackingStatus) {\n this._status = status;\n }\n\n /**\n * @private\n * @method _updateFromVisit - an internal method for updating a list of custom data from a visit\n * @param {VisitType} visit - a visit\n * */\n public static _updateFromVisit(\n visit: VisitType,\n dataMap: Map<number, CustomData>,\n ): void {\n if (visit.customDataEvents?.length) {\n for (let i = visit.customDataEvents.length - 1; i >= 0; i--) {\n const { index, valuesCountMap } = visit.customDataEvents[i].data;\n\n if (!dataMap.has(index)) {\n dataMap.set(\n index,\n new CustomData(index, ...Object.keys(valuesCountMap)),\n );\n }\n }\n }\n }\n\n /**\n * @private\n * @method index - an internal setter for setting index of custom data\n * @param {number} value - an index value\n * */\n public set index(value: number) {\n this._index = value;\n }\n\n /**\n * @private\n * @method index - an internal getter for index of custom data\n * */\n public get index(): number {\n return this._index;\n }\n\n /**\n * @private\n * @method name - an internal getter for a name of custom data\n * */\n public get name(): string | undefined {\n return this._name;\n }\n\n /**\n * @private\n * @method name - an internal getter for a name of custom data\n * */\n public get values(): string[] {\n return this.value;\n }\n}\n","import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport {\n ConversionDataType,\n ConversionParametersType,\n CustomDataType,\n IKameleoonData,\n KameleoonData,\n} from './types';\nimport { TrackingStatus } from 'src/types';\nimport { CustomData } from 'src/kameleoonData/customData';\n\n/**\n * @class\n * Conversion - a class for creating an instance for conversion tracking\n * */\nexport class Conversion implements IKameleoonData {\n public status: TrackingStatus;\n\n private goalId: number;\n private revenue: number;\n private negative: boolean;\n private id: number;\n private nonce: string | undefined;\n private metadata: CustomData[] | undefined;\n\n /**\n * @param {ConversionParametersType} conversionParameters - an object with conversion parameters\n * */\n constructor({\n goalId,\n revenue = 0,\n negative = false,\n metadata,\n }: ConversionParametersType) {\n this.goalId = goalId;\n this.revenue = revenue;\n this.negative = negative;\n this.status = TrackingStatus.Unsent;\n this.id = Math.floor(Math.random() * 1_000_000);\n this._metadata = metadata;\n }\n\n set _id(id: number) {\n this.id = id;\n }\n\n set _nonce(nonce: string) {\n this.nonce = nonce;\n }\n\n get url(): string {\n return (\n UrlEventType.Conversion +\n UrlParameter.GoalId +\n String(this.goalId) +\n UrlParameter.Revenue +\n String(this.revenue) +\n UrlParameter.Negative +\n String(this.negative) +\n (this.metadata?.length\n ? UrlParameter.Metadata + this._encodeMetadata()\n : '')\n );\n }\n\n /**\n * @private\n * @method metadata - an internal getter for a metadata of conversion\n * */\n get _metadata(): CustomData[] | undefined {\n return this.metadata;\n }\n\n /**\n * @private\n * @method metadata - an internal setter for setting metadata of conversion\n * @param {number} value - an index value\n * */\n public set _metadata(value: CustomData[] | undefined) {\n this.metadata = value;\n }\n\n get data(): ConversionDataType {\n return {\n goalId: this.goalId,\n nonce: this.nonce,\n revenue: this.revenue,\n negative: this.negative,\n type: KameleoonData.Conversion,\n status: this.status,\n id: this.id,\n metadata:\n this.metadata?.map((item: CustomData) => item.data) || undefined,\n };\n }\n\n private _encodeMetadata(): string {\n if (!this.metadata?.length) {\n return '';\n }\n const indices: Set<number> = new Set();\n return encodeURIComponent(\n JSON.stringify(\n this.metadata.reduce((acc: { [key: number]: string[] }, item) => {\n if (indices.has(item.data.index)) {\n return acc;\n }\n indices.add(item.data.index);\n acc[item.data.index] = item.data.value;\n return acc;\n }, {}),\n ),\n );\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Conversion instance from raw data\n * @param {ConversionDataType} data - a raw data\n * @return {Conversion} a Conversion instance\n * */\n public static _fromRaw(data: ConversionDataType): Conversion {\n const { goalId, revenue, negative, status, id, nonce, metadata } = data;\n\n const conversion = new Conversion({\n goalId,\n revenue,\n negative,\n metadata: Conversion.parseMetadata(metadata),\n });\n\n conversion._id = id;\n conversion.status = status;\n\n if (nonce) {\n conversion._nonce = nonce;\n }\n\n return conversion;\n }\n\n private static parseMetadata(\n metadata: CustomDataType[] | undefined,\n ): CustomData[] | undefined {\n return (\n metadata?.map((item: CustomDataType) => CustomData._fromRaw(item)) ||\n undefined\n );\n }\n\n /**\n * @private\n * @method _listFromVisit - an internal method for returning a list of all Conversion instances\n * @param {VisitType} visit - a visits\n * @return {Conversion[]} - a list of Conversion instances\n * */\n public static _listFromVisit(visit: VisitType): Conversion[] {\n const conversions: Conversion[] = [];\n\n if (!visit.conversionEvents?.length) {\n return [];\n }\n\n if (visit.conversionEvents?.length) {\n for (const conversionEvent of visit.conversionEvents) {\n const { goalId, revenue, negative } = conversionEvent.data;\n const conversion = new Conversion({ goalId, revenue, negative });\n\n // --- Note ---\n // Conversion is marked as sent, so the visitor won't be converted again just\n // by pulling visits data\n conversion.status = TrackingStatus.Sent;\n conversions.push(conversion);\n }\n }\n\n return conversions;\n }\n\n /**\n * @private\n * @method _updateFromVisit - an internal method for updating a list of Conversion instances with only goalId\n * @param {VisitType} visit - a visits\n * @param {Map<number, Conversion>} dataMap - a map of Conversion instances\n * */\n public static _updateFromVisit(\n visit: VisitType,\n dataMap: Map<number, Conversion>,\n ): void {\n if (visit.conversionEvents?.length) {\n for (const conversionEvent of visit.conversionEvents) {\n const { goalId } = conversionEvent.data;\n\n // --- Note ---\n // - We only take unique `goalId`s as and don't use `revenue` and `negative`\n // because we only utilize it for Conversion Condition and don't re-sent this data tracking\n // not to break server `revenue` calculations and not to cause extra conversions\n // - Moreover conversion is marked as sent, so the visitor won't be converted again just\n // by pulling visits data\n if (!dataMap.has(goalId)) {\n const conversion = new Conversion({ goalId });\n\n conversion.status = TrackingStatus.Sent;\n dataMap.set(goalId, conversion);\n }\n }\n }\n }\n}\n","import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport {\n BrowserDataType,\n BrowserType,\n BrowserIndexMap,\n IKameleoonData,\n KameleoonData,\n BrowserTypeMap,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * Browser - a class for creating an instance for browser of a certain type\n * */\nexport class Browser implements IKameleoonData {\n public status: TrackingStatus;\n\n private browser: BrowserType;\n private version?: number;\n\n /**\n * @param {BrowserType} browser - one of the browser types available for data, if browser can not be found in a list, it can be marked as `BrowserType.Other`\n * @param {number | undefined} version - version of the browser, floating point number represents major and minor version of the browser\n * @example\n * ```ts\n * const browser = new Browser(BrowserType.Chrome, 86);\n * const browser = new Browser(BrowserType.Safari, 14.1);\n * ```\n * */\n constructor(browser: BrowserType, version?: number) {\n this.browser = browser;\n this.version = version;\n this.status = TrackingStatus.Unsent;\n }\n\n get url(): string {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.browser) {\n return '';\n }\n\n const browserVersion = this.version\n ? UrlParameter.BrowserVersion + this.version\n : '';\n\n return (\n UrlEventType.StaticData +\n UrlParameter.Browser +\n this.browser +\n UrlParameter.BrowserIndex +\n BrowserIndexMap[this.browser] +\n browserVersion\n );\n }\n\n get data(): BrowserDataType {\n return {\n browser: this.browser,\n type: KameleoonData.Browser,\n version: this.version,\n status: this.status,\n };\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Browser instance from raw data\n * @param {BrowserDataType} data - a raw data\n * @return {Browser} a Browser instance\n * */\n public static _fromRaw(data: BrowserDataType): Browser {\n const { browser: browserType, version, status } = data;\n const browser = new Browser(browserType, version);\n\n browser.status = status;\n\n return browser;\n }\n\n /**\n * @private\n * @method _fromVisit - an internal method for creating an instance of Browser class from a visit\n * @param {VisitType} visit - a visit\n * @returns {Browser | undefined} an instance of Browser class or undefined if browser can not be found among visits\n * */\n public static _fromVisit(visit: VisitType): Browser | undefined {\n if (!visit.staticDataEvent) {\n return undefined;\n }\n\n const {\n browser: browserType,\n browserIndex,\n browserVersion,\n } = visit.staticDataEvent.data;\n\n if (browserType || typeof browserIndex === 'number') {\n const browser = browserType ?? BrowserTypeMap[browserIndex as number];\n\n if (browserVersion) {\n return new Browser(browser, browserVersion);\n } else {\n return new Browser(browser);\n }\n }\n\n return undefined;\n }\n}\n","import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport {\n DeviceDataType,\n DeviceType,\n IKameleoonData,\n KameleoonData,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * Device - a class for creating an instance for device of a certain type\n * */\nexport class Device implements IKameleoonData {\n public status: TrackingStatus;\n\n private device: DeviceType;\n\n /**\n * @param {DeviceType} device - one of the available device types from `DeviceType` enum\n * */\n constructor(device: DeviceType) {\n this.device = device;\n this.status = TrackingStatus.Unsent;\n }\n\n get url(): string {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.device) {\n return '';\n }\n\n return UrlEventType.StaticData + UrlParameter.DeviceType + this.device;\n }\n\n get data(): DeviceDataType {\n return {\n device: this.device,\n type: KameleoonData.Device,\n status: this.status,\n };\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Device instance from raw data\n * @param {DeviceDataType} data - a raw data\n * @return {Device} a Device instance\n * */\n public static _fromRaw(data: DeviceDataType): Device {\n const { device: deviceType, status } = data;\n const device = new Device(deviceType);\n\n device.status = status;\n\n return device;\n }\n\n /**\n * @private\n * @method _fromVisit - an internal method for creating an instance of Device class from a visit\n * @param {VisitType} visit - a visit\n * @returns {Device | undefined} an instance of Device class or undefined if browser can not be found among visits\n * */\n public static _fromVisit(visit: VisitType): Device | undefined {\n if (visit.staticDataEvent?.data.deviceType) {\n return new Device(visit.staticDataEvent.data.deviceType);\n }\n\n return undefined;\n }\n}\n","import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport {\n IKameleoonData,\n KameleoonData,\n OperatingSystemDataType,\n OperatingSystemIndexMap,\n OperatingSystemType,\n OperatingSystemTypeMap,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * OperatingSystem - a class for creating an instance for Operating System of a certain type\n * */\nexport class OperatingSystem implements IKameleoonData {\n private operatingSystem: OperatingSystemType;\n public status: TrackingStatus;\n\n /**\n * @param {OperatingSystemType} operatingSystem - one of the available operating system types from `OperatingSystemType` enum\n * */\n constructor(operatingSystem: OperatingSystemType) {\n this.operatingSystem = operatingSystem;\n this.status = TrackingStatus.Unsent;\n }\n\n get url(): string {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.operatingSystem) {\n return '';\n }\n\n return (\n UrlEventType.StaticData +\n UrlParameter.Os +\n this.operatingSystem +\n UrlParameter.OsIndex +\n OperatingSystemIndexMap[this.operatingSystem]\n );\n }\n\n get data(): OperatingSystemDataType {\n return {\n operatingSystem: this.operatingSystem,\n type: KameleoonData.OperatingSystem,\n status: this.status,\n };\n }\n\n /**\n * @private\n * @method _fromRaw - a static method for creating an instance of OperatingSystem class from raw data\n * @param {OperatingSystemDataType} data - a raw data\n * @returns {OperatingSystem} an instance of OperatingSystem class\n * */\n public static _fromRaw(data: OperatingSystemDataType): OperatingSystem {\n const { operatingSystem, status } = data;\n const os = new OperatingSystem(operatingSystem);\n\n os.status = status;\n\n return os;\n }\n\n /**\n * @private\n * @method _fromVisit - a static method for creating an instance of OperatingSystem class from a visit\n * @param {VisitType} visit - a visit\n * @returns {OperatingSystem | undefined} an instance of OperatingSystem class or undefined\n * */\n public static _fromVisit(visit: VisitType): OperatingSystem | undefined {\n if (!visit.staticDataEvent) {\n return undefined;\n }\n\n const { os: operatingSystemType, osIndex } = visit.staticDataEvent.data;\n\n if (operatingSystemType || typeof osIndex === 'number') {\n const operatingSystem =\n operatingSystemType ?? OperatingSystemTypeMap[osIndex as number];\n\n return new OperatingSystem(operatingSystem);\n }\n\n return undefined;\n }\n}\n","import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport { GeolocationEventType } from 'src/requester/types';\nimport {\n IKameleoonData,\n KameleoonData,\n GeolocationInfoType,\n GeolocationDataType,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * Geolocation - a class for creating an instance for geolocation data\n * */\nexport class GeolocationData implements IKameleoonData {\n public status: TrackingStatus;\n\n private country: string;\n private region?: string;\n private city?: string;\n private postalCode?: string;\n private coordinates?: [number, number];\n\n /**\n * @param {GeolocationInfoType} geolocationInfo - an object containing information about geolocation of a visitor\n * @example\n * ```ts\n * // Visitor is located at Triumph Arch in Paris, France\n * const location: GeolocationDataType = {\n * country: 'France',\n * region: 'Île-de-France',\n * city: 'Paris',\n * postalCode: '75008',\n * coordinates: [48.8738, 2.295]\n * };\n *\n * const geolocation = new GeolocationData(location);\n * ```\n *\n * */\n constructor({\n country,\n region,\n city,\n postalCode,\n coordinates,\n }: GeolocationInfoType) {\n this.country = country;\n this.region = region;\n this.city = city;\n this.postalCode = postalCode;\n this.coordinates = coordinates;\n this.status = TrackingStatus.Unsent;\n }\n\n get url(): string {\n const region = this.region\n ? UrlParameter.Region + encodeURIComponent(this.region)\n : '';\n const city = this.city\n ? UrlParameter.City + encodeURIComponent(this.city)\n : '';\n const postalCode = this.postalCode\n ? UrlParameter.PostalCode + encodeURIComponent(this.postalCode)\n : '';\n const coordinates = this.coordinates\n ? UrlParameter.Latitude +\n this.coordinates[0] +\n UrlParameter.Longitude +\n this.coordinates[1]\n : '';\n\n return (\n UrlEventType.Geolocation +\n UrlParameter.Country +\n encodeURIComponent(this.country) +\n region +\n city +\n postalCode +\n coordinates\n );\n }\n\n get data(): GeolocationDataType {\n return {\n type: KameleoonData.GeolocationData,\n country: this.country,\n region: this.region,\n city: this.city,\n postalCode: this.postalCode,\n coordinates: this.coordinates,\n status: this.status,\n };\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a GeolocationData instance from raw data\n * @param {GeolocationDataType} data - a raw data\n * @return {GeolocationData} a GeolocationData instance\n * */\n public static _fromRaw(data: GeolocationDataType): GeolocationData {\n const { country, region, city, postalCode, coordinates, status } = data;\n const geolocation = new GeolocationData({\n country,\n region,\n city,\n postalCode,\n coordinates,\n });\n\n geolocation.status = status;\n\n return geolocation;\n }\n\n /**\n * @private\n * @method _fromVisit - an internal method for creating an instance of GeolocationData class from a visit\n * @param {VisitType} visit - a visit\n * @returns {GeolocationData | undefined} an instance of GeolocationData class or undefined if geolocation can not be found among visits\n * */\n public static _fromVisit(visit: VisitType): GeolocationData | undefined {\n if (!visit.geolocationEvents?.length) {\n return undefined;\n }\n\n let geolocationData: GeolocationEventType['data'] | undefined = undefined;\n\n for (const geolocationEvent of visit.geolocationEvents) {\n const { data } = geolocationEvent;\n\n if (data.country) {\n geolocationData = data;\n }\n }\n\n // --- Note ---\n // We only take `country`, `region`, and `city` from geolocation event ignoring other fields\n // as they are not participating in targeting, and visits data won't be tracked again\n const { country, region, city } = geolocationData || {};\n\n if (country) {\n if (region && city) {\n return new GeolocationData({ country, region, city });\n } else if (region) {\n return new GeolocationData({ country, region });\n } else {\n return new GeolocationData({ country });\n }\n }\n }\n}\n","import { ListUtilities } from 'src/utilities/listUtilities';\nimport {\n IKameleoonData,\n KameleoonData,\n VisitDataType,\n VisitsDataType,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * Visits - a class for creating an instance of a stored visits data\n * */\nexport class VisitsData implements IKameleoonData {\n // --- Note ---\n // Ascending order\n private readonly visits: VisitDataType[];\n private _visitNumber: number;\n public status: TrackingStatus = TrackingStatus.Sent;\n\n /**\n * @param {number[]} visits - a list of visits\n * */\n constructor(visits: VisitDataType[]) {\n this.visits = visits;\n this._visitNumber = visits.length ? visits.length - 1 : 0;\n }\n\n get visitNumber(): number {\n return this._visitNumber;\n }\n\n get url(): string {\n return '';\n }\n\n get data(): VisitsDataType {\n return {\n visits: this.visits,\n visitNumber: this._visitNumber,\n type: KameleoonData.VisitsData,\n status: this.status,\n };\n }\n\n get isSent(): boolean {\n return true;\n }\n\n /**\n * Adds a single timestamp while ensuring the list remains sorted and unique\n * @param {VisitDataType} visit - The visit data to be added\n */\n set timestamp(visit: VisitDataType) {\n ListUtilities.insertVisitInOrderedListMutably({\n list: this.visits,\n visit,\n });\n\n this._visitNumber = this.visits.length ? this.visits.length - 1 : 0;\n }\n\n public updateVisitNumber(visitNumber: number): void {\n if (visitNumber > this._visitNumber) {\n this._visitNumber = visitNumber;\n }\n }\n}\n","import { IKameleoonData, KCSType, KCSDataType, KameleoonData } from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * KameleoonConversionScore - a class for creating an KCS Heat Range data\n * */\nexport class KameleoonConversionScore implements IKameleoonData {\n public status: TrackingStatus;\n\n private kcs: KCSType;\n\n /**\n * @param {KCSType} kcs - Kameleoon Conversion Score nested object\n * */\n constructor(kcs: KCSType) {\n this.kcs = kcs;\n this.status = TrackingStatus.Sent;\n }\n\n get url(): string {\n return '';\n }\n\n get data(): KCSDataType {\n return {\n kcs: this.kcs,\n type: KameleoonData.KameleoonConversionScore,\n status: this.status,\n };\n }\n}\n","import { TrackingStatus } from 'src/types';\nimport {\n IKameleoonData,\n KameleoonData,\n PersonalizationDataType,\n} from './types';\nimport { VisitType } from 'src/requester';\n\nexport class Personalization implements IKameleoonData {\n public status: TrackingStatus;\n\n private readonly id: number;\n private readonly variationId: number;\n\n /**\n * @param {number} id\n * @param {number} variationId\n * */\n constructor(id: number, variationId: number) {\n this.id = id;\n this.variationId = variationId;\n this.status = TrackingStatus.Sent;\n }\n\n get url(): string {\n return '';\n }\n\n get data(): PersonalizationDataType {\n return {\n id: this.id,\n variationId: this.variationId,\n type: KameleoonData.Personalization,\n status: TrackingStatus.Sent,\n };\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Personalization instance from raw data\n * @param {PersonalizationDataType} data - a raw data\n * @return {Personalization} a Personalization instance\n * */\n public static _fromRaw(data: PersonalizationDataType): Personalization {\n return new Personalization(data.id, data.variationId);\n }\n\n /**\n * @private\n * @method _updateFromVisit - an internal method for updating a list of Personalization instances\n * @param {VisitType} visit - a visits\n * @param {Map<number, Personalization>} dataMap - a map of Personalization instances\n * */\n public static _updateFromVisit(\n visit: VisitType,\n dataMap: Map<number, Personalization>,\n ): void {\n if (visit.personalizationEvents?.length) {\n for (const personalizationEvent of visit.personalizationEvents) {\n const { id, variationId } = personalizationEvent.data;\n\n if (!dataMap.has(id)) {\n const personalization = new Personalization(id, variationId);\n\n dataMap.set(id, personalization);\n }\n }\n }\n }\n}\n","import {\n IKameleoonData,\n KameleoonData,\n VarGroup,\n ScoredVarIds,\n CBSType,\n CBSDataType,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\nexport class CBScores implements IKameleoonData {\n public status: TrackingStatus;\n private readonly values: Map<number, VarGroup[]>;\n private readonly cbs: CBSType;\n\n constructor(cbsMap: CBSType) {\n this.values = new Map(\n Object.entries(cbsMap).map(([key, value]) => [\n Number(key),\n this.extractVarIds(value),\n ]),\n );\n this.cbs = cbsMap;\n this.status = TrackingStatus.Sent;\n }\n\n private extractVarIds(scores: ScoredVarIds): VarGroup[] {\n // keys = experiment IDs / values = list of variation IDs ordered descending\n // by score (there may be several variation ids with same score)\n const grouped = new Map<number, number[]>();\n\n Object.entries(scores).forEach(([variationId, score]) => {\n if (!grouped.has(score)) {\n grouped.set(score, []);\n }\n grouped.get(score)!.push(Number(variationId));\n });\n\n return Array.from(grouped.entries())\n .sort(([scoreA], [scoreB]) => scoreB - scoreA)\n .map(([, ids]) => ({ ids: ids.sort((a, b) => a - b) }));\n }\n\n getValues(): Map<number, VarGroup[]> {\n return this.values;\n }\n\n get url(): string {\n return '';\n }\n\n get data(): CBSDataType {\n return {\n cbs: this.cbs,\n type: KameleoonData.CBScores,\n status: this.status,\n };\n }\n\n public static _fromRaw(data: CBSDataType): CBScores {\n const cbScores = new CBScores(data.cbs);\n cbScores.status = data.status;\n return cbScores;\n }\n}\n","import { VisitType } from 'src/requester';\nimport { PageView } from './pageView';\nimport { VisitorDataFiltersType } from 'src/utilities/types';\nimport {\n KameleoonData,\n KameleoonDataType,\n SingleDataType,\n MultipleDataType,\n VisitProcessorDataType,\n KCSType,\n VisitorProcessorParametersType,\n CBSType,\n} from './types';\nimport { CustomData } from './customData';\nimport { Conversion } from './conversion';\nimport { Browser } from './browser';\nimport { Device } from './device';\nimport { OperatingSystem } from './operatingSystem';\nimport { GeolocationData } from './geolocation';\nimport { FeatureFlagVariationsType } from 'src/storage';\nimport { VisitsData } from './visitsData';\nimport { DataManager } from './dataManager';\nimport { KameleoonConversionScore } from './kameleoonConversionScore';\nimport { TrackingStatus } from 'src/types';\nimport { MappingIdentifierType } from 'src/storage/types';\nimport { Personalization } from './personalization';\nimport { CBScores } from 'src/kameleoonData/cbScores';\n\ninterface IVisitProcessor {\n processVisit(visit: VisitType): void;\n processKcs(kcsData?: KCSType): void;\n processCbs(cbsData?: CBSType): void;\n processMultipleDataTypes(): void;\n processMappingIdentifier(\n visit?: VisitType,\n ): MappingIdentifierType | undefined;\n processVisitsData(visit: VisitType): void;\n}\n\nexport class VisitProcessor implements IVisitProcessor {\n private readonly visitsData = new VisitsData([]);\n private readonly visitorData: KameleoonDataType[] = [];\n private readonly storageVisitorData: KameleoonDataType[] = [];\n private experimentData: FeatureFlagVariationsType = {};\n private readonly filters: VisitorDataFiltersType;\n private readonly visitorDataTypes: Set<KameleoonData>;\n private readonly dataManager: DataManager;\n private singleDataTypes: SingleDataType = {\n [KameleoonData.Device]: null,\n [KameleoonData.Browser]: null,\n [KameleoonData.GeolocationData]: null,\n [KameleoonData.OperatingSystem]: null,\n [KameleoonData.KameleoonConversionScore]: null,\n [KameleoonData.CBScores]: null,\n };\n private readonly multipleDataTypes: MultipleDataType = {\n [KameleoonData.CustomData]: new Map<number, CustomData>(),\n [KameleoonData.PageView]: new Map<string, PageView>(),\n [KameleoonData.Conversion]: new Map<number, Conversion>(),\n [KameleoonData.Personalization]: new Map<number, Personalization>(),\n };\n\n constructor({\n filters,\n dataManager,\n visitorCode,\n }: VisitorProcessorParametersType) {\n this.filters = filters;\n this.dataManager = dataManager;\n this.visitorDataTypes = dataManager.getVisitorStoredDataTypes(visitorCode);\n }\n\n get data(): VisitProcessorDataType {\n return {\n visitorData: this.visitorData,\n storageVisitorData: this.storageVisitorData,\n visitsData: this.visitsData,\n experimentData: this.experimentData,\n };\n }\n\n public processVisit(visit: VisitType): void {\n this.processBrowser(visit);\n this.processDevice(visit);\n this.processOperatingSystem(visit);\n this.processGeolocationData(visit);\n this.processCustomData(visit);\n this.processConversion(visit);\n this.processPageView(visit);\n this.processExperiments(visit);\n this.processPersonalization(visit);\n }\n\n public processMultipleDataTypes(): void {\n for (const [dataType, data] of Object.entries(this.multipleDataTypes)) {\n if (!data.size) {\n continue;\n }\n\n switch (dataType) {\n case KameleoonData.PageView: {\n this.visitorData.push(...data.values());\n this.storageVisitorData.push(...data.values());\n\n break;\n }\n case KameleoonData.Personalization:\n case KameleoonData.Conversion: {\n this.storageVisitorData.push(...data.values());\n\n break;\n }\n case KameleoonData.CustomData: {\n const dataItem = data as Map<number, CustomData>;\n\n dataItem.forEach((customData) => {\n this.visitorData.push(customData);\n\n if (\n !this.dataManager.storedCustomDataIndexes.has(\n customData.data.index,\n )\n ) {\n this.storageVisitorData.push(customData);\n }\n });\n\n break;\n }\n }\n }\n }\n\n public processKcs(kcsData?: KCSType): void {\n if (this.filters.kcs && kcsData) {\n const kcs = new KameleoonConversionScore(kcsData);\n\n this.storageVisitorData.push(kcs);\n }\n }\n\n public processVisitsData(visit: VisitType): void {\n this.visitsData.timestamp = {\n timeStarted: visit.timeStarted,\n timeLastActivity: visit.timeLastEvent ?? visit.timeStarted,\n };\n }\n\n public processVisitNumber(visit: VisitType, visitOffset: number): void {\n if (\n this.visitsData.visitNumber <= visitOffset &&\n visit.staticDataEvent?.data.visitNumber\n ) {\n const visitNumber = visit.staticDataEvent?.data.visitNumber ?? 0;\n this.visitsData.updateVisitNumber(visitNumber + visitOffset);\n }\n }\n\n public processCbs(cbsData?: CBSType): void {\n if (this.filters.cbs && cbsData) {\n const cbs = new CBScores(cbsData);\n\n this.storageVisitorData.push(cbs);\n }\n }\n\n private processBrowser(visit: VisitType): void {\n if (this.filters.browser && !this.singleDataTypes[KameleoonData.Browser]) {\n const browser = Browser._fromVisit(visit);\n\n if (browser) {\n if (!this.visitorDataTypes.has(KameleoonData.Browser)) {\n this.storageVisitorData.push(browser);\n }\n this.visitorData.push(browser);\n this.singleDataTypes[KameleoonData.Browser] = browser;\n }\n }\n }\n\n private processDevice(visit: VisitType): void {\n if (this.filters.device && !this.singleDataTypes[KameleoonData.Device]) {\n const device = Device._fromVisit(visit);\n\n if (device) {\n if (!this.visitorDataTypes.has(KameleoonData.Device)) {\n this.storageVisitorData.push(device);\n }\n\n this.visitorData.push(device);\n this.singleDataTypes[KameleoonData.Device] = device;\n }\n }\n }\n\n private processOperatingSystem(visit: VisitType): void {\n if (\n this.filters.operatingSystem &&\n !this.singleDataTypes[KameleoonData.OperatingSystem]\n ) {\n const operatingSystem = OperatingSystem._fromVisit(visit);\n\n if (operatingSystem) {\n if (!this.visitorDataTypes.has(KameleoonData.OperatingSystem)) {\n this.storageVisitorData.push(operatingSystem);\n }\n\n this.visitorData.push(operatingSystem);\n this.singleDataTypes[KameleoonData.OperatingSystem] = operatingSystem;\n }\n }\n }\n\n private processGeolocationData(visit: VisitType): void {\n if (\n this.filters.geolocation &&\n !this.singleDataTypes[KameleoonData.GeolocationData]\n ) {\n const geolocation = GeolocationData._fromVisit(visit);\n\n if (geolocation) {\n if (!this.visitorDataTypes.has(KameleoonData.GeolocationData)) {\n this.storageVisitorData.push(geolocation);\n }\n\n this.visitorData.push(geolocation);\n this.singleDataTypes[KameleoonData.GeolocationData] = geolocation;\n }\n }\n }\n\n private processCustomData(visit: VisitType): void {\n if (this.filters.customData) {\n CustomData._updateFromVisit(\n visit,\n this.multipleDataTypes[KameleoonData.CustomData],\n );\n }\n }\n\n private processConversion(visit: VisitType): void {\n if (this.filters.conversions) {\n // --- Note ---\n // We collect Conversion data with only unique goalId\n Conversion._updateFromVisit(\n visit,\n this.multipleDataTypes[KameleoonData.Conversion],\n );\n\n // --- Note ---\n // We collect all Conversion data with goalId, revenue and negative for all visits\n const conversions = Conversion._listFromVisit(visit);\n\n if (conversions.length) {\n this.visitorData.push(...conversions);\n }\n }\n }\n\n private processPageView(visit: VisitType): void {\n if (this.filters.pageViews) {\n PageView._updateFromVisit(\n visit,\n this.multipleDataTypes[KameleoonData.PageView],\n );\n }\n }\n\n private processExperiments(visit: VisitType): void {\n if (this.filters.experiments && visit.experimentEvents) {\n for (const experimentEvent of visit.experimentEvents) {\n const { id, variationId } = experimentEvent.data;\n\n this.experimentData[id] = {\n variationId,\n isTargetedRule: false,\n status: TrackingStatus.Unsent,\n };\n }\n }\n }\n\n private processPersonalization(visit: VisitType): void {\n if (this.filters.personalization) {\n Personalization._updateFromVisit(\n visit,\n this.multipleDataTypes[KameleoonData.Personalization],\n );\n }\n }\n\n public processMappingIdentifier(\n visit?: VisitType,\n ): MappingIdentifierType | undefined {\n if (!visit) {\n return;\n }\n const timestamp = visit.customDataEvents?.find(\n (event) => event.data.mappingIdentifier,\n )?.time;\n if (timestamp && visit.visitorCode) {\n return {\n mappingIdentifier: visit.visitorCode,\n timestamp,\n };\n }\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { FeatureVariableType, JSONType } from 'src/clientConfiguration';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport { FeatureVariableResultType, VariableType } from 'src/types';\nimport {\n ParseVisitorDataParametersType,\n ParseVisitorDataResultType,\n} from './types';\nimport { VisitProcessor } from 'src/kameleoonData/visitProcessor';\nimport {\n HIDDEN_SECRET_CHAR,\n SECRET_VISIBLE_LENGTH,\n} from 'src/utilities/constants';\nimport { VisitsData } from 'src/kameleoonData/visitsData';\n\nexport class Parser {\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { key, type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n key,\n type,\n value: Boolean(value),\n });\n case VariableType.JS:\n case VariableType.CSS:\n case VariableType.STRING:\n return Ok({\n key,\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n key,\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n key,\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData({\n data,\n filters,\n visitorCode,\n dataManager,\n variationConfiguration,\n }: ParseVisitorDataParametersType): ParseVisitorDataResultType {\n const visitProcessor = new VisitProcessor({\n filters,\n dataManager,\n visitorCode,\n });\n\n const { currentVisit, previousVisits, kcs, cbs } = data;\n\n if (!previousVisits?.length && !currentVisit) {\n return {\n visitorData: [],\n storageVisitorData: [],\n visitsData: new VisitsData([]),\n };\n }\n\n if (currentVisit) {\n visitProcessor.processVisit(currentVisit);\n visitProcessor.processVisitNumber(currentVisit, 0);\n }\n\n previousVisits?.forEach((visit, index) => {\n visitProcessor.processVisit(visit);\n visitProcessor.processVisitsData(visit);\n visitProcessor.processVisitNumber(visit, index + 1);\n });\n\n visitProcessor.processKcs(kcs);\n visitProcessor.processCbs(cbs);\n visitProcessor.processMultipleDataTypes();\n const mappingIdentifier = visitProcessor.processMappingIdentifier(\n currentVisit ?? previousVisits?.[0],\n );\n\n const { visitorData, storageVisitorData, visitsData, experimentData } =\n visitProcessor.data;\n\n variationConfiguration.updateStoredVariations(visitorCode, experimentData);\n\n return {\n visitorData,\n storageVisitorData,\n visitsData,\n mappingIdentifier,\n };\n }\n\n static parseRegExp(value: string): RegExp {\n if (value[0] === '/') {\n const [_, expression, flags] = value.split('/');\n\n return new RegExp(expression, flags);\n }\n\n return new RegExp(value);\n }\n\n static parseSecret(secret: string | null): string {\n if (secret === null) {\n return 'null';\n }\n\n const length = secret.length;\n\n if (length <= SECRET_VISIBLE_LENGTH) {\n return HIDDEN_SECRET_CHAR.repeat(length);\n }\n\n const hiddenLength = Math.max(\n length - SECRET_VISIBLE_LENGTH,\n SECRET_VISIBLE_LENGTH,\n );\n\n return (\n secret.substring(0, length - hiddenLength) +\n HIDDEN_SECRET_CHAR.repeat(hiddenLength)\n );\n }\n}\n","import { Milliseconds, SDKConfigurationType } from 'src/types';\nimport { ClientSettingsType } from './types';\nimport { Environment } from 'src/sdkInfoTypes';\nimport { KameleoonLogger } from 'src/logging';\nimport { Validator } from 'src/utilities';\n\nexport interface IClientSettings {\n readonly settings: ClientSettingsType;\n}\n\nexport class ClientSettings implements IClientSettings {\n private updateInterval: number;\n private environment: string;\n private networkDomain: string | null;\n private requestTimeout: number;\n private siteCode: string;\n private cleanupInterval: number | null;\n private trackRetryDelay: number;\n private trackingInterval: number;\n\n constructor(siteCode: string, configuration?: Partial<SDKConfigurationType>) {\n KameleoonLogger.debug`CALL: new ClientSettings(siteCode: ${siteCode}, configuration: ${configuration})`;\n this.siteCode = siteCode;\n\n this.environment = this.getEnvironment(configuration);\n this.networkDomain = this.getNetworkDomain(configuration);\n this.updateInterval = this.getUpdateInterval(configuration);\n this.cleanupInterval = this.getCleanupInterval(configuration);\n this.requestTimeout = this.getRequestTimeout(configuration);\n this.trackingInterval = this.getTrackingInterval(configuration);\n\n this.trackRetryDelay = 5 * Milliseconds.Second;\n KameleoonLogger.debug`RETURN: new ClientSettings(siteCode: ${siteCode}, configuration: ${configuration})`;\n }\n\n private getTrackingInterval(\n configuration?: Partial<SDKConfigurationType>,\n ): number {\n if (typeof configuration?.trackingInterval === 'number') {\n if (configuration.trackingInterval < 100) {\n KameleoonLogger.warning(\n 'Tracking interval must not be shorter than 100 ms. Minimum possible interval was applied.',\n );\n return 100;\n }\n\n if (configuration.trackingInterval > 1_000) {\n KameleoonLogger.warning(\n 'Tracking interval must not be longer than 1000 ms. Maximum possible interval was applied.',\n );\n return 1_000;\n }\n\n return configuration.trackingInterval;\n }\n\n return 1_000;\n }\n\n private getEnvironment(\n configuration?: Partial<SDKConfigurationType>,\n ): string {\n if (configuration?.environment) {\n return configuration.environment;\n }\n\n return Environment.Production;\n }\n\n private getCleanupInterval(\n configuration?: Partial<SDKConfigurationType>,\n ): number | null {\n if (typeof configuration?.targetingDataCleanupInterval === 'number') {\n if (configuration.targetingDataCleanupInterval < 1) {\n KameleoonLogger.warning(\n 'Targeting data cleanup interval must not be shorter than 1 minute. Minimum possible interval was applied.',\n );\n return 1 * Milliseconds.Minute;\n }\n\n return configuration.targetingDataCleanupInterval * Milliseconds.Minute;\n }\n\n return null;\n }\n\n private getUpdateInterval(\n configuration?: Partial<SDKConfigurationType>,\n ): number {\n if (typeof configuration?.updateInterval === 'number') {\n if (configuration.updateInterval < 1) {\n KameleoonLogger.warning(\n 'Update interval must not be shorter than 1 minute. Minimum possible interval was applied.',\n );\n return 1 * Milliseconds.Minute;\n }\n\n return configuration.updateInterval * Milliseconds.Minute;\n }\n\n return 60 * Milliseconds.Minute;\n }\n\n private getNetworkDomain(\n configuration?: Partial<SDKConfigurationType>,\n ): string | null {\n const result = Validator.validateNetworkDomain(configuration?.networkDomain);\n if (!result.ok) {\n return null;\n }\n\n return result.data;\n }\n\n private getRequestTimeout(\n configuration?: Partial<SDKConfigurationType>,\n ): number {\n if (typeof configuration?.requestTimeout === 'number') {\n return configuration.requestTimeout;\n }\n\n return 10 * Milliseconds.Second;\n }\n\n get settings(): ClientSettingsType {\n return {\n trackingInterval: this.trackingInterval,\n trackRetryDelay: this.trackRetryDelay,\n cleanupInterval: this.cleanupInterval,\n updateInterval: this.updateInterval,\n requestTimeout: this.requestTimeout,\n networkDomain: this.networkDomain,\n environment: this.environment,\n siteCode: this.siteCode,\n };\n }\n}\n","import {\n CookieDataType,\n CookieType,\n IKameleoonData,\n KameleoonData,\n} from './types';\nimport { TrackingStatus } from 'src/types';\nimport { KameleoonLogger } from 'src/logging';\n\n/**\n * @class\n * Cookie - a class for creating an instance for defining user's cookie\n * */\nexport class Cookie implements IKameleoonData {\n public status: TrackingStatus;\n\n private cookie: CookieType[];\n\n /**\n * @param {CookieType[]} cookie - a list of cookies\n * */\n constructor(cookie: CookieType[]) {\n this.cookie = cookie;\n this.status = TrackingStatus.Sent;\n }\n\n /**\n * @method fromString - a static method for creating an instance of `Cookie` from a string\n * @param {string} cookieString - a string containing a list of cookies\n * @returns {Cookie} an instance of `Cookie`\n * */\n static fromString(cookieString: string): Cookie {\n if (!cookieString) {\n return new Cookie([]);\n }\n\n const pairs = cookieString.split(';');\n\n const cookie = pairs\n .map((item) => {\n const [key, value] = item.trim().split('=');\n\n if (!key) {\n KameleoonLogger.warning`Cookie string has an empty key: ${cookieString}`;\n return null;\n }\n\n return { key, value };\n })\n .filter((item) => item !== null);\n\n return new Cookie(cookie as CookieType[]);\n }\n\n get url(): string {\n return '';\n }\n\n get data(): CookieDataType {\n return {\n cookie: this.cookie,\n type: KameleoonData.Cookie,\n status: this.status,\n };\n }\n}\n","import { UserAgentDataType, IKameleoonData, KameleoonData } from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * UserAgent - a class for creating an instance for user agent\n * */\nexport class UserAgent implements IKameleoonData {\n public status: TrackingStatus;\n\n private value: string;\n\n constructor(value: string) {\n this.value = value;\n this.status = TrackingStatus.Sent;\n }\n\n get url(): string {\n return '';\n }\n\n get data(): UserAgentDataType {\n return {\n value: this.value,\n type: KameleoonData.UserAgent,\n status: this.status,\n };\n }\n}\n","import { TrackingStatus } from 'src/types';\nimport { IKameleoonData, IdentifierDataType, KameleoonData } from './types';\n\nexport class UniqueIdentifier implements IKameleoonData {\n public status: TrackingStatus;\n\n private _value: boolean;\n\n /**\n * @param {boolean} value - a boolean value that indicates if the visitor has a unique identifier\n * */\n constructor(value: boolean) {\n this._value = value;\n this.status = TrackingStatus.Sent;\n }\n\n get url(): string {\n return '';\n }\n\n get data(): IdentifierDataType {\n return {\n value: this._value,\n type: KameleoonData.UniqueIdentifier,\n status: TrackingStatus.Sent,\n };\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a UniqueIdentifier instance from raw data\n * @param {IdentifierDataType} data - a raw data\n * @return {UniqueIdentifier} a UniqueIdentifier instance\n * */\n public static _fromRaw(data: IdentifierDataType): UniqueIdentifier {\n return new UniqueIdentifier(data.value);\n }\n}\n","import { TrackingStatus } from 'src/types';\nimport {\n IKameleoonData,\n KameleoonData,\n ApplicationVersionDataType,\n} from './types';\n\n/**\n * @class\n * ApplicationVersion - a class for creating an instance for app version\n * */\nexport class ApplicationVersion implements IKameleoonData {\n public status: TrackingStatus;\n\n private version: string;\n\n /**\n * @param {string} version - version of mobile application\n * */\n constructor(version: string) {\n this.version = version;\n this.status = TrackingStatus.Sent;\n }\n\n get url(): string {\n return '';\n }\n\n get data(): ApplicationVersionDataType {\n return {\n version: this.version,\n type: KameleoonData.ApplicationVersion,\n status: this.status,\n };\n }\n}\n","import {\n DereferencedTargetingDataType,\n TargetingDataType,\n VisitorReference,\n} from 'src/targeting';\nimport { ListUtilities } from 'src/utilities/listUtilities';\nimport {\n DereferenceTargetingDataResultType,\n ExistingDataType,\n ExistingNestedDataType,\n ExpirationTimeType,\n FieldParametersType,\n KameleoonData,\n KameleoonVisitorDataType,\n MutAddUnsentDataType,\n MutUpdateDataParametersType,\n NestedFieldParametersType,\n ReferenceParametersType,\n UpdateCommonDataParametersType,\n UpdateConversionParametersType,\n UpdateCustomDataParametersType,\n UpdatePageViewParametersType,\n UpdatePersonalizationParametersType,\n UpdateTargetSegmentParametersType,\n UpdateVisitsDataParametersType,\n VisitDataType,\n} from './types';\nimport { CustomData } from './customData';\nimport { VisitsData } from './visitsData';\nimport { Conversion } from './conversion';\nimport { PageView } from './pageView';\nimport { DataInfoType } from 'src/storage';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport { Personalization } from 'src/kameleoonData/personalization';\nimport { TargetedSegment } from 'src/kameleoonData/targetedSegment';\n\ninterface IDataProcessor {\n mutUpdateData({\n visitorCode,\n mutData,\n dataItem,\n extendTtl,\n }: MutUpdateDataParametersType): number | undefined;\n mutCleanupData(\n mutData: TargetingDataType,\n infoData: DataInfoType,\n ): number | null;\n createReference({\n mutData,\n visitorCode,\n linkedVisitor,\n infoData,\n }: ReferenceParametersType): void;\n dereferenceData(\n data: TargetingDataType,\n visitorCode: string,\n ): DereferenceTargetingDataResultType;\n mutAddUnsentData({\n mutData,\n visitorCode,\n dataType,\n }: MutAddUnsentDataType): void;\n}\n\nexport class DataProcessor implements IDataProcessor {\n private cleanupInterval: number | null;\n private packageInfo: ExternalPackageInfoType;\n\n constructor(\n cleanupInterval: number | null = null,\n packageInfo: ExternalPackageInfoType,\n ) {\n this.cleanupInterval = cleanupInterval;\n this.packageInfo = packageInfo;\n }\n\n public mutUpdateData({\n infoData,\n visitorCode,\n mutData,\n dataItem,\n extendTtl,\n }: MutUpdateDataParametersType): number | undefined {\n let { visitorReference, data, isReference } = this.dereferenceData(\n mutData,\n visitorCode,\n );\n\n if (\n this.packageInfo.isServer &&\n isReference &&\n !mutData[visitorReference]\n ) {\n if (infoData.mappingIdentifiers) {\n delete infoData.mappingIdentifiers[visitorCode];\n }\n delete mutData[visitorCode];\n visitorReference = visitorCode;\n }\n\n let expirationTime;\n if (extendTtl) {\n expirationTime = this.cleanupInterval\n ? Date.now() + this.cleanupInterval\n : 0;\n }\n\n switch (dataItem.data.type) {\n case KameleoonData.CustomData: {\n this.updateCustomData({\n expirationTime,\n customData: dataItem as CustomData,\n visitorCode: visitorReference,\n mutData: data,\n });\n\n break;\n }\n case KameleoonData.PageView: {\n this.updatePageView({\n expirationTime,\n pageView: dataItem as PageView,\n visitorCode: visitorReference,\n mutData: data,\n });\n\n break;\n }\n case KameleoonData.Conversion: {\n this.updateConversion({\n expirationTime,\n conversion: dataItem as Conversion,\n visitorCode: visitorReference,\n mutData: data,\n });\n\n break;\n }\n case KameleoonData.VisitsData: {\n this.updateVisitsData({\n expirationTime,\n visitsData: dataItem as VisitsData,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n case KameleoonData.Personalization: {\n this.updatePersonalization({\n expirationTime,\n personalization: dataItem as Personalization,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n case KameleoonData.TargetedSegment: {\n this.updateTargetedSegment({\n expirationTime,\n targetedSegment: dataItem as TargetedSegment,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n default: {\n this.updateCommonData({\n expirationTime,\n commonData: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n }\n }\n\n return expirationTime;\n }\n\n public mutCleanupData(\n mutData: TargetingDataType,\n infoData: DataInfoType,\n ): number | null {\n if (!this.cleanupInterval) {\n return null;\n }\n\n let nextCleanupTime = 0;\n\n for (const [visitorCode, data] of Object.entries(mutData)) {\n if (typeof data === 'string') {\n this.removeReference({\n mutData,\n visitorCode,\n linkedVisitor: data,\n infoData,\n });\n\n continue;\n }\n\n let closestCleanupTime = 0;\n\n for (const key of Object.keys(data)) {\n const dataKey = key as KameleoonData;\n\n let time;\n\n switch (dataKey) {\n case KameleoonData.CustomData:\n case KameleoonData.PageView:\n case KameleoonData.Conversion:\n case KameleoonData.Personalization: {\n time = this.deleteNestedExpiredField(data, dataKey);\n break;\n }\n default: {\n time = this.deleteExpiredField(data, dataKey);\n }\n }\n\n if (!closestCleanupTime || (time && time < closestCleanupTime)) {\n closestCleanupTime = time;\n }\n }\n\n if (!Object.keys(mutData[visitorCode]).length) {\n delete mutData[visitorCode];\n if (this.packageInfo.isServer) {\n infoData.mappingIdentifiers ??= {};\n delete infoData.mappingIdentifiers[visitorCode];\n }\n } else if (\n !nextCleanupTime ||\n (closestCleanupTime && closestCleanupTime < nextCleanupTime)\n ) {\n nextCleanupTime = closestCleanupTime;\n }\n }\n\n return nextCleanupTime;\n }\n\n public mutAddUnsentData({\n mutData,\n visitorCode,\n dataType,\n }: MutAddUnsentDataType): void {\n const unsentData = mutData.unsentData[visitorCode];\n\n if (!unsentData || !unsentData.length) {\n mutData.unsentData[visitorCode] = [dataType];\n } else {\n const set = new Set([...unsentData]);\n set.add(dataType);\n\n mutData.unsentData[visitorCode] = Array.from(set);\n }\n }\n\n public createReference({\n mutData,\n visitorCode,\n linkedVisitor,\n }: ReferenceParametersType): void {\n // --- Note ---\n // Provided(linked) visitor is now pointing to the visitor code\n mutData[linkedVisitor] = visitorCode;\n }\n\n public removeReference({\n mutData,\n visitorCode,\n linkedVisitor,\n infoData,\n }: ReferenceParametersType): void {\n if (this.packageInfo.isServer) {\n if (!mutData[linkedVisitor]) {\n delete mutData[visitorCode];\n if (infoData.mappingIdentifiers) {\n delete infoData.mappingIdentifiers[visitorCode];\n }\n }\n }\n }\n\n private updatePageView({\n visitorCode,\n mutData,\n pageView,\n expirationTime,\n }: UpdatePageViewParametersType): void {\n const { data } = pageView;\n\n const isExist =\n mutData[visitorCode] &&\n KameleoonData.PageView in mutData[visitorCode] &&\n data.urlAddress in mutData[visitorCode][KameleoonData.PageView]!;\n\n const parameters: NestedFieldParametersType = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.PageView,\n nestedKey: data.urlAddress,\n value: data,\n };\n\n if (isExist) {\n const existingData =\n mutData[visitorCode][KameleoonData.PageView]![data.urlAddress];\n const existingTimestamps = existingData.timestamps;\n\n // --- Note ---\n // Merging existing timestamps with added\n for (const existingTimestamp of existingTimestamps) {\n const { time: existingTime } = existingTimestamp;\n\n if (data.timestamps.some(({ time }) => time === existingTime)) {\n continue;\n }\n\n const index = data.timestamps.findIndex(\n ({ time }) => time >= existingTime,\n );\n\n if (index === -1) {\n data.timestamps.push(existingTimestamp);\n } else {\n data.timestamps.splice(index, 0, existingTimestamp);\n }\n }\n\n this.updateNestedField(parameters);\n } else {\n this.createNestedField(parameters);\n }\n }\n\n private updateCustomData({\n visitorCode,\n customData,\n mutData,\n expirationTime,\n }: UpdateCustomDataParametersType): void {\n const { data } = customData;\n const isExist =\n mutData[visitorCode] && KameleoonData.CustomData in mutData[visitorCode];\n\n const parameters: NestedFieldParametersType = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.CustomData,\n nestedKey: data.index.toString(),\n value: data,\n };\n\n if (isExist) {\n this.updateNestedField(parameters);\n } else {\n this.createNestedField(parameters);\n }\n }\n\n private updateConversion({\n conversion,\n mutData,\n visitorCode,\n expirationTime,\n }: UpdateConversionParametersType): void {\n const { data } = conversion;\n const isExist =\n mutData[visitorCode] && KameleoonData.Conversion in mutData[visitorCode];\n\n const parameters: NestedFieldParametersType = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.Conversion,\n nestedKey: data.id.toString(),\n value: data,\n };\n\n if (isExist) {\n this.updateNestedField(parameters);\n } else {\n this.createNestedField(parameters);\n }\n }\n\n private updateVisitsData({\n visitorCode,\n mutData,\n visitsData,\n expirationTime,\n }: UpdateVisitsDataParametersType): void {\n const { data } = visitsData;\n const isExist =\n mutData[visitorCode] && KameleoonData.VisitsData in mutData[visitorCode];\n\n const parameters: FieldParametersType = {\n expirationTime,\n data: mutData,\n key: KameleoonData.VisitsData,\n value: data,\n visitorCode,\n };\n\n if (isExist) {\n const existingVisits = mutData[visitorCode][KameleoonData.VisitsData]!;\n\n // --- Note ---\n // We are preserving the order of visits\n existingVisits.visits.forEach((visit) => {\n ListUtilities.insertVisitInOrderedListMutably({\n list: data.visits as VisitDataType[],\n visit: visit as VisitDataType,\n });\n });\n\n const visitNumber = Math.max(\n data.visitNumber ?? data.visits.length - 1,\n data.visits.length - 1,\n existingVisits.visitNumber ?? 0,\n );\n\n this.updateField({\n ...parameters,\n value: {\n ...data,\n visits: data.visits,\n visitNumber: visitNumber,\n },\n });\n } else {\n this.createField(parameters);\n }\n }\n\n private updatePersonalization({\n visitorCode,\n mutData,\n personalization,\n expirationTime,\n }: UpdatePersonalizationParametersType): void {\n const { data } = personalization;\n const isExist =\n mutData[visitorCode] &&\n KameleoonData.Personalization in mutData[visitorCode];\n\n const parameters: NestedFieldParametersType = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.Personalization,\n nestedKey: data.id.toString(),\n value: data,\n };\n\n if (isExist) {\n this.updateNestedField(parameters);\n } else {\n this.createNestedField(parameters);\n }\n }\n\n private updateTargetedSegment({\n visitorCode,\n mutData,\n targetedSegment,\n expirationTime,\n }: UpdateTargetSegmentParametersType): void {\n const { data } = targetedSegment;\n const isExist =\n mutData[visitorCode] &&\n KameleoonData.TargetedSegment in mutData[visitorCode];\n\n const parameters: NestedFieldParametersType = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.TargetedSegment,\n nestedKey: data.id.toString(),\n value: data,\n };\n\n if (isExist) {\n this.updateNestedField(parameters);\n } else {\n this.createNestedField(parameters);\n }\n }\n\n private updateCommonData({\n visitorCode,\n mutData,\n commonData,\n expirationTime,\n }: UpdateCommonDataParametersType): void {\n const { data } = commonData;\n const isExist = mutData[visitorCode] && data.type in mutData[visitorCode];\n\n const parameters: FieldParametersType = {\n expirationTime,\n data: mutData,\n key: data.type,\n visitorCode,\n value: data as FieldParametersType['value'],\n };\n\n if (isExist) {\n this.updateField(parameters);\n } else {\n this.createField(parameters);\n }\n }\n\n public dereferenceData(\n data: TargetingDataType,\n visitorCode: string,\n ): DereferenceTargetingDataResultType {\n // --- Note ---\n // Visitor reference can not point to another visitor reference\n if (typeof data[visitorCode] === 'string') {\n return {\n visitorReference: data[visitorCode] as VisitorReference,\n data: data as DereferencedTargetingDataType,\n isReference: true,\n };\n }\n\n return {\n visitorReference: visitorCode,\n data: data as DereferencedTargetingDataType,\n isReference: false,\n };\n }\n\n private deleteExpiredField(\n data: Omit<\n KameleoonVisitorDataType,\n | KameleoonData.Conversion\n | KameleoonData.CustomData\n | KameleoonData.PageView\n | KameleoonData.Personalization\n | KameleoonData.TargetedSegment\n >,\n key: KameleoonData,\n ): number {\n if (!data) {\n return 0;\n }\n\n const dataKey = key as keyof typeof data;\n const isExpired = data[dataKey]!.expirationTime < Date.now();\n\n if (!isExpired) {\n return data[dataKey]!.expirationTime;\n }\n\n delete data[dataKey];\n\n return 0;\n }\n\n private deleteNestedExpiredField(\n data: KameleoonVisitorDataType,\n key: KameleoonData,\n ): number {\n if (!data[key]) {\n return 0;\n }\n\n const existingData = data[key] as ExistingNestedDataType;\n\n let closestCleanupTime;\n\n for (const [nestedKey, value] of Object.entries(existingData)) {\n if (!value) {\n continue;\n }\n\n const isExpired = value.expirationTime < Date.now();\n\n if (isExpired) {\n delete existingData[nestedKey];\n } else if (\n !closestCleanupTime ||\n value.expirationTime < closestCleanupTime\n ) {\n closestCleanupTime = value.expirationTime;\n }\n }\n\n if (!Object.keys(existingData).length) {\n delete data[key];\n }\n\n return closestCleanupTime;\n }\n\n private updateField({\n key,\n value,\n data,\n visitorCode,\n expirationTime,\n }: FieldParametersType): void {\n const existing = data[visitorCode][key] as ExistingDataType<typeof key>;\n (data[visitorCode][key] as ExistingDataType<typeof key>) = {\n ...value,\n expirationTime:\n expirationTime ??\n (existing.expirationTime && (existing.expirationTime as number)) ??\n Date.now(),\n };\n }\n\n private createField({\n key,\n value,\n data,\n visitorCode,\n expirationTime,\n }: FieldParametersType): void {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: { ...value, expirationTime },\n };\n }\n\n private updateNestedField({\n key,\n nestedKey,\n value,\n data,\n visitorCode,\n expirationTime,\n }: NestedFieldParametersType): void {\n const existing = (data[visitorCode][key] as ExistingNestedDataType)[\n nestedKey\n ];\n (data[visitorCode][key] as ExistingNestedDataType)[nestedKey] = {\n ...value,\n expirationTime: expirationTime ?? existing?.expirationTime ?? Date.now(),\n };\n }\n\n private createNestedField({\n key,\n nestedKey,\n value,\n data,\n visitorCode,\n expirationTime,\n }: NestedFieldParametersType): void {\n if (!data[visitorCode]?.[key]) {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: {\n [nestedKey]: { ...value, expirationTime },\n },\n };\n } else {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: {\n ...data[visitorCode][key],\n [nestedKey]: { ...value, expirationTime },\n },\n };\n }\n }\n}\n","import { UrlEventType, UrlParameter } from 'src/requester';\nimport {\n BrowserType,\n BrowserIndexMap,\n StaticDataType,\n DeviceType,\n OperatingSystemType,\n OperatingSystemIndexMap,\n} from './types';\n\n/**\n * @class\n * StaticData - a class for creating static data for Kameleoon.\n * */\nexport class StaticData {\n private browserType?: BrowserType;\n private browserVersion?: number;\n private visitNumber?: number;\n private timeSincePreviousVisit?: number;\n private deviceType?: DeviceType;\n private os?: OperatingSystemType;\n\n constructor({\n browserType,\n visitNumber,\n timeSincePreviousVisit,\n os,\n deviceType,\n browserVersion,\n }: StaticDataType) {\n this.browserType = browserType;\n this.visitNumber = visitNumber;\n this.timeSincePreviousVisit = timeSincePreviousVisit;\n this.os = os;\n this.deviceType = deviceType;\n this.browserVersion = browserVersion;\n }\n\n get url(): string {\n const browserVersion = this.browserVersion\n ? UrlParameter.BrowserVersion + this.browserVersion\n : '';\n const browserType = this.browserType\n ? UrlParameter.Browser + this.browserType\n : '';\n const browserIndex = this.browserType\n ? UrlParameter.BrowserIndex + BrowserIndexMap[this.browserType]\n : '';\n const os = this.os ? UrlParameter.Os + this.os : '';\n const osIndex = this.os\n ? UrlParameter.OsIndex + OperatingSystemIndexMap[this.os]\n : '';\n const deviceType = this.deviceType\n ? UrlParameter.DeviceType + this.deviceType\n : '';\n const visitNumber =\n this.visitNumber !== undefined\n ? UrlParameter.VisitNumber + this.visitNumber\n : '';\n const timeSincePreviousVisit =\n this.timeSincePreviousVisit !== undefined\n ? UrlParameter.TimeSincePreviousVisit + this.timeSincePreviousVisit\n : '';\n\n return (\n UrlEventType.StaticData +\n browserType +\n browserIndex +\n browserVersion +\n visitNumber +\n timeSincePreviousVisit +\n os +\n osIndex +\n deviceType\n );\n }\n}\n","import {\n ConditionDataType,\n ConditionType,\n} from 'src/targeting/conditions/types';\nimport { Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\n\nexport interface IConditionFactory {\n createCondition(\n data: ConditionDataType,\n ): Result<ConditionType, KameleoonError>;\n}\n\nexport class ConditionFactoryInstance {\n static conditionFactoryInstance: IConditionFactory;\n\n static setConditionFactoryInstance(value: IConditionFactory): void {\n this.conditionFactoryInstance = value;\n }\n\n static createCondition(\n data: ConditionDataType,\n ): Result<ConditionType, KameleoonError> {\n return this.conditionFactoryInstance.createCondition(data);\n }\n}\n","import { KameleoonError } from 'src/kameleoonError';\nimport { ConditionDataType } from './conditions/types';\nimport { NodeValueType, Operator } from './types';\nimport { ConditionFactoryInstance } from 'src/targeting/conditions/conditionFactoryInstance';\n\nexport interface INode {\n readonly value?: NodeValueType;\n readonly left?: INode;\n readonly right?: INode;\n readonly error?: KameleoonError;\n}\n\nexport class Node implements INode {\n private nodeValue?: NodeValueType;\n private nodeError?: KameleoonError;\n private leftChild?: INode;\n private rightChild?: INode;\n private inverseResult: boolean = false;\n\n constructor(\n value: ConditionDataType | Operator,\n left?: INode,\n right?: INode,\n ) {\n if (this.isOperator(value)) {\n this.nodeValue = value;\n } else {\n const result = ConditionFactoryInstance.createCondition(value);\n this.inverseResult = !(value.isInclude ?? true);\n\n if (result.ok) {\n this.nodeValue = result.data;\n } else {\n this.nodeError = result.error;\n }\n }\n\n this.leftChild = left;\n this.rightChild = right;\n }\n\n get value(): NodeValueType | undefined {\n return this.nodeValue;\n }\n\n get error(): KameleoonError | undefined {\n return this.nodeError;\n }\n\n get left(): INode | undefined {\n return this.leftChild;\n }\n\n get right(): INode | undefined {\n return this.rightChild;\n }\n\n get inverse(): boolean {\n return this.inverseResult;\n }\n\n private isOperator(value: ConditionDataType | Operator): value is Operator {\n return value === Operator.And || value === Operator.Or;\n }\n}\n","import { Result, Ok, Err } from 'ts-res';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { INode, Node } from './node';\nimport {\n EvaluationDataType,\n GroupedSegmentsType,\n LeafNodeType,\n NestedConditionGroupType,\n NonLeafNodeType,\n Operator,\n SegmentType,\n TargetingType,\n} from './types';\nimport { KameleoonLogger } from 'src/logging';\n\ninterface ITree {\n evaluate: (data: EvaluationDataType) => Result<boolean, KameleoonError>;\n hasTargetingType: (targetingType: TargetingType) => boolean;\n}\n\nexport class Tree implements ITree {\n private tree: Node;\n private error: KameleoonError | null = null;\n private targetingTypes: Set<TargetingType> = new Set();\n\n constructor(segment: SegmentType) {\n KameleoonLogger.debug`CALL: new Tree(segment: ${segment})`;\n const { nestedConditions, topLevelOperators } =\n this.flattenSegment(segment);\n\n // --- Note ---\n // - Targeting tree is built bottom-up, it's the only way to both get the consistent logic\n // (grouping nested conditions) and have human readable tree representation.\n // - Here is an example of how tree is built (we use strict complete binary tree)\n // Let's say we have such a condition `value < 10 || value > 20 && value < 30`\n // Following is pseudo code for building tree:\n //\n // `const operators = [Operator.Or, Operator.And]`\n // `const conditions = [\n // {type: Condition.Less, value: 10},\n // {type: Condition.Greater, value: 20},\n // {type: Condition.Less, value: 30},\n // ]`\n //\n // After the first iteration we have node like this:\n // AND\n // / \\\n // <30 >20\n //\n // After the second iteration tree looks as follows:\n // OR\n // / \\\n // AND <10\n // / \\\n // <30 >20\n //\n // As you can see Leaf Nodes contain conditions and Non-Leaf Nodes contain logical operators\n const nestedNodes = nestedConditions.map(({ conditions, operators }) => {\n const nodes = conditions.map((condition) => {\n // --- Note ---\n // We keep condition types to optimize\n // some external operations depending on what conditions are present\n // in a tree\n this.targetingTypes.add(condition.targetingType);\n\n return new Node(condition);\n });\n\n return this.buildTree(nodes, operators);\n });\n\n this.tree = this.buildTree(nestedNodes, topLevelOperators);\n KameleoonLogger.debug`RETURN: new Tree(segment: ${segment})`;\n }\n\n public evaluate(data: EvaluationDataType): Result<boolean, KameleoonError> {\n const result = this.evaluateNode(this.tree, data);\n\n if (this.error) {\n return Err(this.error);\n }\n\n return Ok(result);\n }\n\n public hasTargetingType(targetingType: TargetingType): boolean {\n return this.targetingTypes.has(targetingType);\n }\n\n private evaluateNode(node: Node, data: EvaluationDataType): boolean {\n if (this.isLeafNode(node)) {\n if (node.error) {\n // --- Note ---\n // Non-existing condition should not break targeting tree\n // instead it should be treated as `true` condition\n if (node.error.type === KameleoonException.TargetingCondition) {\n return true;\n }\n\n return false;\n }\n\n const result = node.value.evaluate(data);\n\n if (!result.ok) {\n this.error = result.error;\n\n return false;\n }\n\n return node.inverse ? !result.data : result.data;\n }\n\n if (this.isNonLeafNode(node)) {\n switch (node.value) {\n case Operator.And: {\n return (\n this.evaluateNode(node.left, data) &&\n this.evaluateNode(node.right, data)\n );\n }\n case Operator.Or: {\n return (\n this.evaluateNode(node.left, data) ||\n this.evaluateNode(node.right, data)\n );\n }\n default:\n break;\n }\n }\n\n return false;\n }\n\n private isLeafNode(node: INode): node is LeafNodeType {\n return !Boolean(node.left && node.right);\n }\n\n private isNonLeafNode(node: INode): node is NonLeafNodeType {\n return Boolean(\n node.left &&\n node.right &&\n (node.value === Operator.Or || node.value === Operator.And),\n );\n }\n\n // --- Note ---\n // This method mutates `nodes` array\n // It's done for the sake of performance\n private buildTree(nodes: Node[], operators: Operator[]): Node {\n if (nodes.length === 1) {\n return nodes[0];\n }\n\n for (const operator of operators) {\n const left = nodes.shift();\n const right = nodes.shift();\n\n const newNode = new Node(operator, left, right);\n nodes.unshift(newNode);\n }\n\n return nodes[0];\n }\n\n private flattenSegment(segment: SegmentType): GroupedSegmentsType {\n const { firstLevel: conditions, firstLevelOrOperators: operators } =\n segment.conditionsData;\n\n const nestedConditions: NestedConditionGroupType[] = [];\n\n conditions.forEach((condition) => {\n const { conditions: conditionList, orOperators } = condition;\n\n const group = {\n operators: this.convertOperators(orOperators),\n conditions: conditionList,\n };\n\n nestedConditions.push(group);\n });\n\n return {\n topLevelOperators: this.convertOperators(operators),\n nestedConditions,\n };\n }\n\n private convertOperators(operators: boolean[]): Operator[] {\n return operators.map((operator) => (operator ? Operator.Or : Operator.And));\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { DeviceType, KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class Device implements ICondition {\n private device?: DeviceType | null;\n\n constructor({ device }: ConditionDataType) {\n this.device = device;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const deviceData = targetingData?.[KameleoonData.Device];\n\n if (deviceData) {\n const { device } = deviceData;\n\n return Ok(device === this.device);\n }\n\n return Ok(false);\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { KameleoonData, BrowserType, BrowserDataType } from 'src/kameleoonData/types';\nimport {\n exhaustCheck,\n KameleoonError,\n KameleoonException,\n} from 'src/kameleoonError';\nimport { EvaluationDataType, VersionMatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class Browser implements ICondition {\n private browser?: BrowserType | null;\n private version?: string | null;\n private versionMatchType?: VersionMatchType | null;\n private error?: KameleoonError;\n\n constructor({ browser, version, versionMatchType }: ConditionDataType) {\n this.browser = browser;\n this.version = version;\n this.versionMatchType = versionMatchType;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const browserData = targetingData?.[KameleoonData.Browser];\n\n if (browserData) {\n const result = this.checkCondition(browserData);\n\n if (this.error) {\n return Err(this.error);\n }\n\n return Ok(result);\n }\n\n return Ok(false);\n }\n\n private checkCondition(browserData: BrowserDataType): boolean {\n const { browser, version } = browserData;\n\n if (typeof this.browser !== 'string') {\n return false;\n }\n\n if (!this.version) {\n return browser === this.browser;\n }\n\n if (!this.versionMatchType || typeof version !== 'number') {\n return false;\n }\n\n const parsedVersion = parseFloat(this.version);\n\n if (isNaN(parsedVersion)) {\n KameleoonLogger.error`Failed to parse version: ${this.version} in Browser condition`;\n this.error = new KameleoonError(\n KameleoonException.VersionParse,\n this.version,\n );\n }\n\n switch (this.versionMatchType) {\n case VersionMatchType.EQUAL:\n return browser === this.browser && version === parsedVersion;\n case VersionMatchType.GREATER:\n return browser === this.browser && version > parsedVersion;\n case VersionMatchType.LOWER:\n return browser === this.browser && version < parsedVersion;\n default:\n KameleoonLogger.error`Unexpected comparing operation for Browser condition: ${this.versionMatchType}`;\n exhaustCheck(this.versionMatchType);\n }\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class Conversion implements ICondition {\n private conditionValue?: number | null;\n\n constructor({ goalId }: ConditionDataType) {\n this.conditionValue = goalId;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const conversionData = targetingData?.[KameleoonData.Conversion];\n\n if (!this.conditionValue) {\n return Ok(false);\n }\n\n if (conversionData) {\n if (Object.keys(conversionData).length && this.conditionValue === -1) {\n return Ok(true);\n }\n\n const conversions = Object.values(conversionData);\n\n return Ok(\n conversions.some((conversion) => {\n if (!conversion) {\n return false;\n }\n\n return conversion.goalId === this.conditionValue;\n }),\n );\n }\n\n return Ok(false);\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { CustomDataType, KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { EvaluationDataType, ValueMatchType } from 'src/targeting/types';\nimport { Parser } from 'src/utilities';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging/kameleoonLogger';\n\nexport class CustomData implements ICondition {\n private customDataIndex: number;\n private matchType?: ValueMatchType | null;\n private conditionValue?: string | null;\n private error?: KameleoonError;\n private range?: number[] | null;\n\n constructor({\n customDataIndex,\n valueMatchType,\n value,\n range,\n }: ConditionDataType) {\n this.customDataIndex = customDataIndex ? Number(customDataIndex) : -1;\n this.matchType = valueMatchType;\n this.conditionValue = value;\n this.range = range;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const customData =\n targetingData?.[KameleoonData.CustomData]?.[this.customDataIndex];\n\n if (this.matchType === ValueMatchType.UNDEFINED) {\n return Ok(!customData);\n }\n\n if (customData) {\n const { value: customDataValue } = customData;\n const result = this.checkCondition(customDataValue);\n\n if (this.error) {\n return Err(this.error);\n }\n\n return Ok(result);\n }\n\n return Ok(false);\n }\n\n private checkCondition(\n customDataValue: CustomDataType['value'] | string,\n ): boolean {\n if (\n typeof this.conditionValue !== 'string' &&\n this.matchType !== ValueMatchType.TRUE &&\n this.matchType !== ValueMatchType.FALSE &&\n this.matchType !== ValueMatchType.RANGE\n ) {\n KameleoonLogger.error`Unexpected condition value for CustomData condition: ${this.conditionValue}`;\n return false;\n }\n\n // --- Note ---\n // `TRUE`/`FALSE`/`RANGE` do not use condition value\n // so we can safely assume that `this.conditionValue` is a string at this point\n // for other match types\n const conditionValue = this.conditionValue as string;\n\n // --- Note ---\n // `AMONG_VALUES` and `RANGE` are checked separately to avoid recursion overhead\n // for `JSON.parse` inside `this.parseArray`\n if (this.matchType === ValueMatchType.AMONG_VALUES) {\n const result = this.parseArray(conditionValue);\n\n if (!result.ok) {\n this.error = result.error;\n\n return false;\n }\n\n const resultData = new Set(result.data);\n\n return Array.isArray(customDataValue)\n ? customDataValue.some((value) => resultData.has(value))\n : result.data.includes(customDataValue);\n }\n\n if (this.matchType === ValueMatchType.RANGE) {\n const result = this.parseRange(this.range);\n\n if (!result.ok) {\n this.error = result.error;\n\n return false;\n }\n\n const [lowerBound, upperBound] = result.data;\n\n const isInRange = (value: number) =>\n value >= lowerBound && value <= upperBound;\n\n return Array.isArray(customDataValue)\n ? customDataValue.some((value) => isInRange(Number(value)))\n : isInRange(Number(customDataValue));\n }\n\n if (Array.isArray(customDataValue)) {\n return customDataValue.some((value) => this.checkCondition(value));\n }\n\n switch (this.matchType) {\n case ValueMatchType.CONTAINS:\n return customDataValue.includes(conditionValue);\n case ValueMatchType.EXACT:\n return customDataValue === this.conditionValue;\n case ValueMatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(conditionValue).test(customDataValue);\n case ValueMatchType.LOWER:\n return Number(customDataValue) < Number(this.conditionValue);\n case ValueMatchType.EQUAL:\n return Number(customDataValue) === Number(this.conditionValue);\n case ValueMatchType.GREATER:\n return Number(customDataValue) > Number(this.conditionValue);\n case ValueMatchType.TRUE:\n return customDataValue.toLowerCase() === 'true';\n case ValueMatchType.FALSE:\n return customDataValue.toLowerCase() === 'false';\n default:\n KameleoonLogger.error`Unexpected comparing operation for CustomData condition: ${this.matchType}`;\n return false;\n }\n }\n\n private parseArray(value: string): Result<string[], KameleoonError> {\n try {\n const result = JSON.parse(value);\n\n if (Array.isArray(result)) {\n return Ok(result);\n }\n } catch (err) {\n KameleoonLogger.error`Failed to parse array: ${value} in CustomData condition`;\n return Err(\n new KameleoonError(KameleoonException.AmongValuesCheck, err, value),\n );\n }\n\n return Ok([]);\n }\n\n private parseRange(\n array?: number[] | null,\n ): Result<[number, number], KameleoonError> {\n if (!array || array.length !== 2) {\n KameleoonLogger.error`Failed to parse range: ${array} in CustomData condition`;\n return Err(new KameleoonError(KameleoonException.RangeCheck, array));\n }\n\n return Ok(array as [number, number]);\n }\n}\n","import { PageViewDataType } from 'src/kameleoonData';\nimport {\n KameleoonData,\n KameleoonVisitorDataType,\n} from 'src/kameleoonData/types';\n\nexport class PageUtils {\n public static getLatest(\n pageViewData: NonNullable<KameleoonVisitorDataType[KameleoonData.PageView]>,\n ): PageViewDataType {\n return Object.values(pageViewData).reduce((latest, current) =>\n latest.timestamps[latest.timestamps.length - 1].time >\n current.timestamps[current.timestamps.length - 1].time\n ? latest\n : current,\n );\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Parser } from 'src/utilities';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\nimport { PageUtils } from './utilities';\n\nexport class PageTitle implements ICondition {\n private matchType?: MatchType | null;\n private conditionValue?: string | null;\n\n constructor({ matchType, title }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = title;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const pageViewData = targetingData?.[KameleoonData.PageView];\n\n if (!pageViewData) {\n return Ok(false);\n }\n\n const latestPageView = PageUtils.getLatest(pageViewData);\n\n return Ok(this.checkCondition(latestPageView.title));\n }\n\n private checkCondition(title: string): boolean {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return title.includes(this.conditionValue);\n case MatchType.EXACT:\n return title === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(this.conditionValue).test(title);\n default:\n KameleoonLogger.error`Unexpected comparing operation for PageTitle condition: ${this.matchType}`;\n return false;\n }\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Parser } from 'src/utilities';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\nimport { PageUtils } from './utilities';\n\nexport class PageUrl implements ICondition {\n private matchType?: MatchType | null;\n private conditionValue?: string | null;\n\n constructor({ matchType, url }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = url;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const pageViewData = targetingData?.[KameleoonData.PageView];\n\n if (!pageViewData) {\n return Ok(false);\n }\n\n const latestPageView = PageUtils.getLatest(pageViewData);\n\n return Ok(this.checkCondition(latestPageView.urlAddress));\n }\n\n private checkCondition(url: string): boolean {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return url.includes(this.conditionValue);\n case MatchType.EXACT:\n return url === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(this.conditionValue).test(url);\n default:\n KameleoonLogger.error`Unexpected comparing operation for PageUrl condition: ${this.matchType}`;\n return false;\n }\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { SdkLanguageType } from 'src/constants';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Utilities } from 'src/utilities';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport { EvaluationDataType, VersionMatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class SdkLanguage implements ICondition {\n private sdkLanguage?: SdkLanguageType | null;\n private conditionValue?: string | null;\n private versionMatchType?: VersionMatchType | null;\n\n constructor({ sdkLanguage, version, versionMatchType }: ConditionDataType) {\n this.sdkLanguage = sdkLanguage;\n this.conditionValue = version;\n this.versionMatchType = versionMatchType;\n }\n\n public evaluate({\n sdkInfo,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n return this.checkCondition(sdkInfo);\n }\n\n private checkCondition(\n sdkInfo: ExternalPackageInfoType,\n ): Result<boolean, KameleoonError> {\n const { type: sdkType, version } = sdkInfo;\n\n if (!this.sdkLanguage) {\n return Ok(false);\n }\n\n if (typeof this.conditionValue !== 'string') {\n return Ok(sdkType === this.sdkLanguage);\n }\n\n if (!this.versionMatchType) {\n return Ok(false);\n }\n\n if (sdkType !== this.sdkLanguage) {\n return Ok(false);\n }\n\n const result = Utilities.compareSemVer({\n version,\n compareVersion: this.conditionValue,\n operator: this.versionMatchType,\n });\n\n if (!result.ok) {\n return Err(result.error);\n }\n\n return Ok(result.data);\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Parser } from 'src/utilities';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class VisitorCode implements ICondition {\n private matchType?: MatchType | null;\n private conditionValue?: string | null;\n\n constructor({ visitorCode, matchType }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = visitorCode;\n }\n\n public evaluate({\n visitorCode,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n return Ok(this.checkCondition(visitorCode));\n }\n\n private checkCondition(visitorCode: string): boolean {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return visitorCode.includes(this.conditionValue);\n case MatchType.EXACT:\n return visitorCode === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(this.conditionValue).test(visitorCode);\n default:\n KameleoonLogger.error`Unexpected comparing operation for VisitorCode condition: ${this.matchType}`;\n return false;\n }\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { Cookie as CookieData } from 'src/kameleoonData/cookie';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { exhaustCheck, KameleoonError } from 'src/kameleoonError';\nimport {\n EvaluationDataType,\n NameMatchType,\n ValueMatchType,\n} from 'src/targeting/types';\nimport { CookieType, OptionalCookieType } from 'src/kameleoonData/types';\nimport { Parser } from 'src/utilities';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class Cookie implements ICondition {\n private cookie: Partial<CookieType>;\n private keyMatchType?: NameMatchType | null;\n private valueMatchType?: ValueMatchType | null;\n\n constructor({\n name,\n value,\n nameMatchType,\n valueMatchType,\n }: ConditionDataType) {\n this.cookie = {\n key: name ?? undefined,\n value: value ?? undefined,\n };\n this.keyMatchType = nameMatchType;\n this.valueMatchType = valueMatchType;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const isEmptyCookie = !this.cookie.key && !this.cookie.value;\n const isValidMatchType =\n Boolean(this.valueMatchType) && Boolean(this.keyMatchType);\n\n if (isEmptyCookie || !isValidMatchType) {\n return Ok(false);\n }\n\n const extractedCookie = this.extractCookie();\n const cookieData = targetingData?.[KameleoonData.Cookie]?.cookie || [];\n\n return Ok(\n extractedCookie.some((pair) => this.checkCondition(pair)) ||\n cookieData.some((pair) => this.checkCondition(pair)),\n );\n }\n\n private extractCookie(): CookieType[] {\n if (typeof document !== 'undefined' && document.cookie) {\n return CookieData.fromString(document.cookie).data.cookie;\n }\n\n return [];\n }\n\n private checkCondition(dataCookie: CookieType): boolean {\n const cookieMatchType = this.keyMatchType!;\n const { key, value } = dataCookie;\n\n if (cookieMatchType === NameMatchType.OPTIONAL) {\n const conditionCookie = this.cookie;\n\n return this.isOptionalCookie(conditionCookie)\n ? this.compareCookieValue(value, conditionCookie.value)\n : false;\n }\n\n const { key: compareKey, value: compareValue } = this.cookie as CookieType;\n\n let keyMatch: boolean;\n\n switch (cookieMatchType) {\n case NameMatchType.EXACT:\n keyMatch = key === compareKey;\n break;\n case NameMatchType.CONTAINS:\n keyMatch = key.includes(compareKey);\n break;\n case NameMatchType.REGULAR_EXPRESSION:\n keyMatch = Parser.parseRegExp(compareKey).test(key);\n break;\n default:\n KameleoonLogger.error`Unexpected comparing operation for Cookie condition: ${cookieMatchType}`;\n exhaustCheck(cookieMatchType);\n }\n\n return keyMatch && this.compareCookieValue(value, compareValue);\n }\n\n private compareCookieValue(value: string, compareValue: string): boolean {\n const valueMatchType = this.valueMatchType!;\n\n switch (valueMatchType) {\n case ValueMatchType.EXACT:\n return value === compareValue;\n case ValueMatchType.CONTAINS:\n return value.includes(compareValue);\n case ValueMatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(compareValue).test(value);\n default:\n KameleoonLogger.error`Unexpected comparing operation for Cookie condition: ${valueMatchType}`;\n return false;\n }\n }\n\n private isOptionalCookie(\n cookie: Partial<CookieType>,\n ): cookie is OptionalCookieType {\n const { value } = cookie;\n\n return typeof value !== 'undefined';\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType } from 'src/targeting/types';\nimport { OperatingSystemType } from 'src/kameleoonData/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class OperatingSystem implements ICondition {\n private operatingSystem?: OperatingSystemType | null;\n\n constructor({ os }: ConditionDataType) {\n this.operatingSystem = os;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const operatingSystemData = targetingData?.[KameleoonData.OperatingSystem];\n\n if (operatingSystemData) {\n const { operatingSystem } = operatingSystemData;\n\n return Ok(operatingSystem === this.operatingSystem);\n }\n\n return Ok(false);\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\n// --- Note ---\n// `GeolocationCondition` uses `Condition` in the naming to avoid confusion with\n// native `Geolocation` API\nexport class GeolocationCondition implements ICondition {\n private country?: string | null;\n private region?: string | null;\n private city?: string | null;\n\n constructor({ country, region, city }: ConditionDataType) {\n this.country = country;\n this.region = region;\n this.city = city;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const geolocationData = targetingData?.[KameleoonData.GeolocationData];\n\n if (geolocationData) {\n const {\n country: dataCountry,\n region: dataRegion,\n city: dataCity,\n } = geolocationData;\n const [conditionCountry, conditionRegion, conditionCity] = [\n this.country,\n this.region,\n this.city,\n ];\n\n if (!conditionCountry || !dataCountry) {\n return Ok(false);\n }\n\n const result =\n dataCountry.toLowerCase() === conditionCountry.toLowerCase() &&\n (!conditionRegion ||\n dataRegion?.toLowerCase() === conditionRegion.toLowerCase()) &&\n (!conditionCity ||\n dataCity?.toLowerCase() === conditionCity.toLowerCase());\n\n return Ok(result);\n }\n\n return Ok(false);\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { Tree } from 'src/targeting/tree';\n\nexport class Segment implements ICondition {\n segmentId?: number | null;\n\n constructor({ segmentId }: ConditionDataType) {\n this.segmentId = segmentId;\n }\n\n public evaluate(\n evaluationData: EvaluationDataType,\n ): Result<boolean, KameleoonError> {\n const { segments, trees } = evaluationData;\n\n if (!this.segmentId) {\n return Ok(false);\n }\n\n const segment = segments?.get(this.segmentId.toString());\n\n if (!segment) {\n return Ok(false);\n }\n\n const tree = trees?.get(this.segmentId.toString());\n\n if (tree) {\n return tree.evaluate(evaluationData);\n }\n\n return new Tree(segment).evaluate(evaluationData);\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class TargetFeatureFlag implements ICondition {\n private featureId?: number | null;\n private ruleId?: number | null;\n private variationKey?: string | null;\n\n constructor({ featureFlagId, variationKey, ruleId }: ConditionDataType) {\n this.featureId = featureFlagId;\n this.ruleId = ruleId;\n this.variationKey = variationKey;\n }\n\n public evaluate({\n variationData,\n ruleMap,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n if (!this.featureId || !ruleMap) {\n return Ok(false);\n }\n\n // -- Visitor took part in any experiment of the feature flag\n // with any variation\n if (this.featureId && !this.ruleId && !this.variationKey) {\n for (const [_, rule] of ruleMap) {\n const { featureId, experimentId } = rule;\n\n if (\n featureId === this.featureId &&\n typeof variationData[experimentId]?.variationId === 'number'\n ) {\n return Ok(true);\n }\n }\n\n return Ok(false);\n }\n\n // -- Visitor took part in certain experiment of the feature flag\n // with any/exact variation\n if (this.featureId && this.ruleId) {\n const rule = ruleMap.get(this.ruleId);\n\n if (!rule) {\n return Ok(false);\n }\n\n const { experimentId, variations } = rule;\n\n if (this.variationKey) {\n const variationId = variations.get(this.variationKey);\n\n return Ok(\n Boolean(variationId) &&\n variationData[experimentId]?.variationId === variationId,\n );\n }\n\n return Ok(Boolean(variationData[rule.experimentId]?.variationId));\n }\n\n // -- Visitor took part in any experiment of the feature flag\n // with certain variation\n if (this.featureId && !this.ruleId && this.variationKey) {\n for (const [_, rule] of ruleMap) {\n const { featureId, experimentId, variations } = rule;\n\n if (featureId === this.featureId && variations.has(this.variationKey)) {\n const variationId = variations.get(this.variationKey);\n\n return Ok(\n Boolean(variationId) &&\n variationData[experimentId]?.variationId === variationId,\n );\n }\n }\n }\n\n return Ok(false);\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { Parser } from 'src/utilities';\nimport { KameleoonData, PageViewDataType } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class PreviousPage implements ICondition {\n private conditionValue?: string | null;\n private matchType?: MatchType | null;\n\n constructor({ matchType, url }: ConditionDataType) {\n this.conditionValue = url;\n this.matchType = matchType;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const pageViewsData = targetingData?.[KameleoonData.PageView];\n\n if (!pageViewsData) {\n return Ok(false);\n }\n\n // --- Note ---\n // There is more concise way to find previous latest page, but it's less performant,\n // here we only ever check two latest timestamps of page and use one loop\n // The second latest can't be equal to the latest\n const secondLatestPageView = this.getSecondLatestPageView(\n Object.values(pageViewsData),\n );\n\n if (!secondLatestPageView) {\n return Ok(false);\n }\n\n const url = secondLatestPageView.urlAddress;\n\n return Ok(this.checkCondition(url));\n }\n\n private checkCondition(url: string): boolean {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return url.includes(this.conditionValue);\n case MatchType.EXACT:\n return url === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(this.conditionValue).test(url);\n default:\n KameleoonLogger.error`Unexpected comparing operation for PreviousPage condition: ${this.matchType}`;\n return false;\n }\n }\n\n private getSecondLatestPageView(\n pageViewsData: PageViewDataType[],\n ): PageViewDataType | undefined {\n if (pageViewsData.length < 2) {\n return undefined;\n }\n\n // --- Note ---\n // Arguments and variables named with abbreviations for better readability\n // `second` in this context is `second to latest`\n let latestPV: PageViewDataType | undefined;\n let secondPV: PageViewDataType | undefined;\n\n pageViewsData.forEach((currentPV) => {\n const currentLatestTs =\n currentPV.timestamps[currentPV.timestamps.length - 1].time;\n\n // -- Initial check\n if (!latestPV) {\n latestPV = currentPV;\n return;\n }\n\n const latestTs =\n latestPV.timestamps[latestPV!.timestamps.length - 1].time;\n\n // -- Covering a case where latest needs to be updated\n if (currentLatestTs > latestTs) {\n secondPV = latestPV;\n latestPV = currentPV;\n\n return;\n }\n\n // -- Covering a case where only second needs to be updated\n const secondTs = secondPV\n ? secondPV.timestamps[secondPV.timestamps.length - 1].time\n : 0;\n\n // -- Second may need to be updated\n if (currentLatestTs > secondTs) {\n secondPV = currentPV;\n }\n });\n\n return secondPV;\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData, PageViewDataType } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class VisitedPages implements ICondition {\n private conditionValue?: number | null;\n private matchType?: MatchType | null;\n\n constructor({ matchType, pageCount }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = pageCount;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const pageViewsData = targetingData?.[KameleoonData.PageView];\n\n if (!pageViewsData) {\n return Ok(false);\n }\n\n let pagesAmount = 0;\n\n Object.values(pageViewsData).forEach((pageView: PageViewDataType) => {\n pagesAmount += pageView.timestamps.length;\n });\n\n return Ok(this.checkCondition(pagesAmount));\n }\n\n private checkCondition(pagesAmount: number): boolean {\n if (!this.matchType || typeof this.conditionValue !== 'number') {\n return false;\n }\n\n switch (this.matchType) {\n case MatchType.EQUAL:\n return pagesAmount === this.conditionValue;\n case MatchType.GREATER:\n return pagesAmount > this.conditionValue;\n case MatchType.LOWER:\n return pagesAmount < this.conditionValue;\n default:\n KameleoonLogger.error`Unexpected comparing operation for VisitedPages condition: ${this.matchType}`;\n return false;\n }\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Utilities, TimeUnit } from 'src/utilities';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class FirstVisit implements ICondition {\n private matchType?: MatchType | null;\n private conditionValue?: number | null;\n private timeUnit?: TimeUnit | null;\n\n constructor({ matchType, count, unitOfTime }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = count;\n this.timeUnit = unitOfTime;\n }\n\n public evaluate({\n targetingData,\n sdkInfo,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const visitsData = targetingData?.[KameleoonData.VisitsData];\n\n if (\n sdkInfo.isServer\n ? !visitsData?.visits.length\n : !visitsData?.visits || visitsData.visits.length < 2\n ) {\n return Ok(false);\n }\n\n const firstVisit = visitsData!.visits[0];\n\n return Ok(\n this.checkCondition(\n typeof firstVisit === 'number' ? firstVisit : firstVisit.timeStarted,\n ),\n );\n }\n\n private checkCondition(firstVisitTimestamp: number): boolean {\n if (\n !this.matchType ||\n typeof this.conditionValue !== 'number' ||\n !this.timeUnit\n ) {\n return false;\n }\n\n const elapsedTimeMilliseconds = Date.now() - firstVisitTimestamp;\n const elapsedTimeUnit = Utilities.convertTimeUnit(\n elapsedTimeMilliseconds,\n this.timeUnit,\n );\n\n switch (this.matchType) {\n case MatchType.GREATER:\n return elapsedTimeUnit > this.conditionValue;\n case MatchType.LOWER:\n return elapsedTimeUnit < this.conditionValue;\n default:\n KameleoonLogger.error`Unexpected comparing operation for FirstVisit condition: ${this.matchType}`;\n return false;\n }\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Utilities, TimeUnit } from 'src/utilities';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class LastVisit implements ICondition {\n private matchType?: MatchType | null;\n private conditionValue?: number | null;\n private timeUnit?: TimeUnit | null;\n\n constructor({ matchType, count, unitOfTime }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = count;\n this.timeUnit = unitOfTime;\n }\n\n public evaluate({\n targetingData,\n sdkInfo,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const visitsData = targetingData?.[KameleoonData.VisitsData];\n\n if (\n sdkInfo.isServer\n ? !visitsData?.visits.length\n : !visitsData?.visits || visitsData.visits.length < 2\n ) {\n return Ok(false);\n }\n\n const visits = visitsData!.visits;\n\n // --- Note ---\n // Takes the timestamp of latest previous visit\n const indexLastVisit = sdkInfo.isServer\n ? visits.length - 1\n : visits.length - 2;\n const latestPreviousVisit = visits[indexLastVisit];\n\n return Ok(\n this.checkCondition(\n typeof latestPreviousVisit === 'number'\n ? latestPreviousVisit\n : latestPreviousVisit.timeStarted,\n ),\n );\n }\n\n private checkCondition(lastVisitTimestamp: number): boolean {\n if (\n !this.matchType ||\n typeof this.conditionValue !== 'number' ||\n !this.timeUnit\n ) {\n return false;\n }\n\n const elapsedTimeMilliseconds = Date.now() - lastVisitTimestamp;\n const elapsedTimeUnit = Utilities.convertTimeUnit(\n elapsedTimeMilliseconds,\n this.timeUnit,\n );\n\n switch (this.matchType) {\n case MatchType.GREATER:\n return elapsedTimeUnit > this.conditionValue;\n case MatchType.LOWER:\n return elapsedTimeUnit < this.conditionValue;\n default:\n KameleoonLogger.error`Unexpected comparing operation for LastVisit condition: ${this.matchType}`;\n return false;\n }\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class SameDayVisits implements ICondition {\n private matchType?: MatchType | null;\n private conditionValue?: number | null;\n\n constructor({ matchType, visitCount }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = visitCount;\n }\n\n public evaluate({\n targetingData,\n sdkInfo,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const visitsData = targetingData?.[KameleoonData.VisitsData];\n\n if (!visitsData) {\n return Ok(false);\n }\n\n let todayVisits = 0;\n\n const todayTimestamp = new Date().setHours(0, 0, 0, 0);\n const { visits } = visitsData;\n\n visits.forEach((item) => {\n let timeStarted;\n if (typeof item === 'number') {\n timeStarted = item;\n } else {\n timeStarted = item.timeStarted;\n }\n\n if (timeStarted >= todayTimestamp) {\n todayVisits++;\n }\n });\n\n if (sdkInfo.isServer) {\n // --- Note ---\n // +1 is current visit\n todayVisits += 1;\n }\n\n return Ok(this.checkCondition(todayVisits));\n }\n\n private checkCondition(todayVisitsAmount: number): boolean {\n if (!this.matchType || typeof this.conditionValue !== 'number') {\n return false;\n }\n\n switch (this.matchType) {\n case MatchType.EQUAL:\n return todayVisitsAmount === this.conditionValue;\n case MatchType.GREATER:\n return todayVisitsAmount > this.conditionValue;\n case MatchType.LOWER:\n return todayVisitsAmount < this.conditionValue;\n default:\n KameleoonLogger.error`Unexpected comparing operation for SameDayVisits condition: ${this.matchType}`;\n return false;\n }\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class Visits implements ICondition {\n private matchType?: MatchType | null;\n private conditionValue?: number | null;\n\n constructor({ matchType, visitCount }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = visitCount;\n }\n\n public evaluate({\n targetingData,\n sdkInfo,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const visitsData = targetingData?.[KameleoonData.VisitsData];\n\n if (!visitsData) {\n return Ok(false);\n }\n\n // --- Note ---\n // +1 is current visit for server sdk\n const visits = visitsData.visits.length + (sdkInfo.isServer ? 1 : 0);\n\n return Ok(this.checkCondition(visits));\n }\n\n private checkCondition(visitsAmount: number): boolean {\n if (!this.matchType || typeof this.conditionValue !== 'number') {\n return false;\n }\n\n switch (this.matchType) {\n case MatchType.EQUAL:\n return visitsAmount === this.conditionValue;\n case MatchType.GREATER:\n return visitsAmount > this.conditionValue;\n case MatchType.LOWER:\n return visitsAmount < this.conditionValue;\n default:\n KameleoonLogger.error`Unexpected comparing operation for Visits condition: ${this.matchType}`;\n return false;\n }\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { exhaustCheck, KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType, VisitorType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { KameleoonLogger } from 'src/logging';\n\nexport class NewVisitor implements ICondition {\n private visitorType?: VisitorType | null;\n\n constructor({ visitorType }: ConditionDataType) {\n this.visitorType = visitorType;\n }\n\n public evaluate({\n targetingData,\n sdkInfo,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const visitsData = targetingData?.[KameleoonData.VisitsData];\n\n if (!visitsData || !this.visitorType) {\n return Ok(false);\n }\n\n const { visits } = visitsData;\n\n // --- Note ---\n // Second case handles situation when user didn't use `addData` that\n // creates new current visit\n const isNewVisitor = sdkInfo.isServer\n ? !visits.length\n : visits.length <= 1;\n\n switch (this.visitorType) {\n case VisitorType.NEW:\n return Ok(isNewVisitor);\n case VisitorType.RETURNING:\n return Ok(!isNewVisitor);\n default:\n KameleoonLogger.error`Unexpected visitor type for NewVisitor condition: ${this.visitorType}`;\n exhaustCheck(this.visitorType);\n }\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Utilities } from 'src/utilities/utilities';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { EvaluationDataType, VersionMatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class ApplicationVersion implements ICondition {\n private conditionValue?: string | null;\n private versionMatchType?: VersionMatchType | null;\n\n constructor({ version, versionMatchType }: ConditionDataType) {\n this.conditionValue = version;\n this.versionMatchType = versionMatchType;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const version = targetingData?.[KameleoonData.ApplicationVersion]?.version;\n\n if (!version || !this.conditionValue || !this.versionMatchType) {\n return Ok(false);\n }\n\n const result = Utilities.compareSemVer({\n version,\n compareVersion: this.conditionValue,\n operator: this.versionMatchType,\n });\n\n if (!result.ok) {\n return Err(result.error);\n }\n\n return Ok(result.data);\n }\n}\n","import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { EvaluationDataType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class ConversionLikelihood implements ICondition {\n private lowerBound?: number;\n private upperBound?: number;\n private keyMomentId?: number;\n private goalId?: number | null;\n\n constructor({\n lowerBound,\n upperBound,\n keyMomentId,\n goalId,\n }: ConditionDataType) {\n this.lowerBound = lowerBound;\n this.upperBound = upperBound;\n this.keyMomentId = keyMomentId;\n this.goalId = goalId;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const kcsData = targetingData?.[KameleoonData.KameleoonConversionScore];\n\n if (\n typeof this.keyMomentId !== 'number' ||\n typeof this.goalId !== 'number' ||\n typeof this.lowerBound !== 'number' ||\n typeof this.upperBound !== 'number' ||\n !kcsData\n ) {\n return Ok(false);\n }\n\n const score: number | undefined =\n kcsData.kcs[this.keyMomentId.toString()]?.[this.goalId.toString()];\n\n if (typeof score !== 'number') {\n return Ok(false);\n }\n\n return Ok(score >= this.lowerBound && score <= this.upperBound);\n }\n}\n","import { CampaignType, EvaluationDataType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { FeatureFlagVariationType } from 'src/storage/types';\nimport { PersonalizationDataType } from 'src/kameleoonData/types';\n\nexport class ExclusiveExperimentCondition implements ICondition {\n private campaignType?: CampaignType | null;\n\n constructor({ campaignType }: ConditionDataType) {\n this.campaignType = campaignType;\n }\n\n public evaluate(data: EvaluationDataType): Result<boolean, KameleoonError> {\n return Ok(this.checkCondition(data));\n }\n\n private checkCondition(data: EvaluationDataType): boolean {\n const variations = Object.values(data.variationData);\n const personalizations = Object.values(data.targetingData?.personalization || {});\n\n const hasSingleValidVariation =\n variations.length === 1 &&\n data.experimentId !== null &&\n data.variationData[data.experimentId] !== undefined;\n\n const hasNoVariations = variations.length === 0;\n const hasNoPersonalizations = personalizations.length === 0;\n\n switch (this.campaignType) {\n case CampaignType.Experiment:\n return hasNoVariations || hasSingleValidVariation;\n case CampaignType.Personalization:\n return hasNoPersonalizations;\n case CampaignType.Any:\n return hasNoPersonalizations && (hasNoVariations || hasSingleValidVariation);\n default:\n return false;\n }\n }\n}\n","import { EvaluationDataType, MatchTypeVariation } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\n\nexport class TargetExperimentCondition implements ICondition {\n private variationMatchType?: MatchTypeVariation | null;\n private variationId: number;\n private experimentId: number;\n\n constructor({\n variationMatchType,\n variation,\n experiment,\n }: ConditionDataType) {\n this.variationMatchType = variationMatchType;\n this.variationId = variation || -1;\n this.experimentId = experiment || -1;\n }\n\n public evaluate(data: EvaluationDataType): Result<boolean, KameleoonError> {\n return Ok(this.checkCondition(data));\n }\n\n private checkCondition(data: EvaluationDataType): boolean {\n const variation = data.variationData[this.experimentId];\n if (!variation) {\n return false;\n }\n\n switch (this.variationMatchType) {\n case MatchTypeVariation.ANY:\n return true;\n case MatchTypeVariation.EXACT:\n return variation.variationId === this.variationId;\n default:\n return false;\n }\n }\n}\n","import { EvaluationDataType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\nimport { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { KameleoonData } from 'src/kameleoonData/types';\n\nexport class TargetPersonalizationCondition implements ICondition {\n private personalizationId?: number | null;\n\n constructor({ personalizationId }: ConditionDataType) {\n this.personalizationId = personalizationId;\n }\n\n public evaluate(data: EvaluationDataType): Result<boolean, KameleoonError> {\n if (!data.targetingData) {\n return Ok(false);\n }\n\n return Ok(this.checkCondition(data));\n }\n\n private checkCondition(data: EvaluationDataType): boolean {\n if (!this.personalizationId) {\n return false;\n }\n const personalizationData =\n data.targetingData?.[KameleoonData.Personalization];\n return personalizationData?.[this.personalizationId] !== undefined;\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { TargetingType } from 'src/targeting/types';\nimport { Browser } from './browser';\nimport { Conversion } from './conversion';\nimport { CustomData } from './customData';\nimport { Device } from './device';\nimport { PageTitle } from './pageTitle';\nimport { PageUrl } from './pageUrl';\nimport { SdkLanguage } from './sdkLanguage';\nimport { ConditionDataType, ConditionType } from './types';\nimport { VisitorCode } from './visitorCode';\nimport { Cookie } from './cookie';\nimport { OperatingSystem } from './operatingSystem';\nimport { GeolocationCondition } from './geolocation';\nimport { Segment } from './segment';\nimport { TargetFeatureFlag } from './targetFeatureFlag';\nimport { PreviousPage } from './previousPage';\nimport { VisitedPages } from './visitedPages';\nimport { FirstVisit } from './firstVisit';\nimport { LastVisit } from './lastVisit';\nimport { SameDayVisits } from './sameDayVisits';\nimport { Visits } from './visits';\nimport { NewVisitor } from './newVisitor';\nimport { ApplicationVersion } from './applicationVersion';\nimport { ConversionLikelihood } from './conversionLikelihood';\nimport { KameleoonLogger } from 'src/logging';\nimport { ExclusiveExperimentCondition } from './exclusiveExperiment';\nimport { TargetExperimentCondition } from './targetExperiment';\nimport { TargetPersonalizationCondition } from './targetPersonalization';\nimport { IConditionFactory } from 'src/targeting/conditions/conditionFactoryInstance';\n\nexport class ConditionFactory implements IConditionFactory {\n createCondition(\n data: ConditionDataType,\n ): Result<ConditionType, KameleoonError> {\n const { targetingType } = data;\n\n switch (targetingType) {\n case TargetingType.CUSTOM_DATUM:\n return Ok(new CustomData(data));\n case TargetingType.EXCLUSIVE_EXPERIMENT:\n return Ok(new ExclusiveExperimentCondition(data));\n case TargetingType.TARGET_EXPERIMENT:\n return Ok(new TargetExperimentCondition(data));\n case TargetingType.TARGET_FEATURE_FLAG:\n return Ok(new TargetFeatureFlag(data));\n case TargetingType.TARGET_PERSONALIZATION:\n return Ok(new TargetPersonalizationCondition(data));\n case TargetingType.DEVICE_TYPE:\n return Ok(new Device(data));\n case TargetingType.BROWSER:\n return Ok(new Browser(data));\n case TargetingType.PAGE_URL:\n return Ok(new PageUrl(data));\n case TargetingType.PAGE_TITLE:\n return Ok(new PageTitle(data));\n case TargetingType.CONVERSIONS:\n return Ok(new Conversion(data));\n case TargetingType.VISITOR_CODE:\n return Ok(new VisitorCode(data));\n case TargetingType.SDK_LANGUAGE:\n return Ok(new SdkLanguage(data));\n case TargetingType.COOKIE:\n return Ok(new Cookie(data));\n case TargetingType.OPERATING_SYSTEM:\n return Ok(new OperatingSystem(data));\n case TargetingType.GEOLOCATION:\n return Ok(new GeolocationCondition(data));\n case TargetingType.SEGMENT:\n return Ok(new Segment(data));\n case TargetingType.APPLICATION_VERSION:\n return Ok(new ApplicationVersion(data));\n case TargetingType.PREVIOUS_PAGE:\n return Ok(new PreviousPage(data));\n case TargetingType.PAGE_VIEWS:\n return Ok(new VisitedPages(data));\n case TargetingType.LAST_VISIT:\n return Ok(new LastVisit(data));\n case TargetingType.FIRST_VISIT:\n return Ok(new FirstVisit(data));\n case TargetingType.SAME_DAY_VISITS:\n return Ok(new SameDayVisits(data));\n case TargetingType.VISITS:\n return Ok(new Visits(data));\n case TargetingType.NEW_VISITORS:\n return Ok(new NewVisitor(data));\n case TargetingType.HEAT_SLICE:\n return Ok(new ConversionLikelihood(data));\n default:\n KameleoonLogger.info`Unsupported targeted condition type found: ${targetingType}`;\n return Err(\n new KameleoonError(\n KameleoonException.TargetingCondition,\n targetingType,\n ),\n );\n }\n }\n}\n","import { ConsentType } from 'src/clientConfiguration';\nimport { Milliseconds } from 'src/types';\nimport { ClientDataType } from './types';\nimport { ConsentBlockingBehaviour } from 'src/clientConfiguration/types';\nimport { DEFAULT_DATA_FILE_CONFIGURATION } from 'src/clientConfiguration/constants';\n\n/**\n * @readonly\n * @enum {string} an Enum containing keys for Kameleoon SDK related data stored on storage\n * */\nexport enum KameleoonStorageKey {\n ClientData = 'kameleoonClientData',\n TargetingData = 'kameleoonTargetingData',\n TrackingData = 'kameleoonTrackingData',\n VariationData = 'kameleoonVariationData',\n VisitorCode = 'kameleoonVisitorCode',\n ConsentData = 'kameleoonConsentData',\n DataInfo = 'kameleoonDataInfo',\n KameleoonSimulationFFData = 'kameleoonSimulationFFData',\n ForcedFeatureVariation = 'kameleoonForcedFeatureVariation',\n ForcedExperimentVariation = 'kameleoonForcedExperimentVariation',\n}\n\nexport const DEFAULT_CLIENT_CONFIGURATION: ClientDataType = {\n data: DEFAULT_DATA_FILE_CONFIGURATION,\n lastUpdate: '',\n};\n\n// --- Note ---\n// Not a real visit duration, rather a guaranteed minimum time\nexport const VISIT_DURATION = 29 * Milliseconds.Minute;\n","import {\n ClientDataType,\n DataInfoType,\n StorageDataType,\n TrackingDataType,\n VariationDataType,\n} from './types';\nimport { DEFAULT_CLIENT_CONFIGURATION, KameleoonStorageKey } from './constants';\nimport { TargetingDataType } from 'src/targeting';\nimport { KameleoonData } from 'src/kameleoonData/types';\nimport { exhaustCheck } from 'src/kameleoonError';\n\ninterface IIntegrityChecker {\n isDataValid(data: StorageDataType): boolean;\n getDefaultData(data: StorageDataType): StorageDataType;\n}\n\nexport class IntegrityChecker implements IIntegrityChecker {\n private key: KameleoonStorageKey;\n\n constructor(key: KameleoonStorageKey) {\n this.key = key;\n }\n\n public isDataValid(data: StorageDataType): boolean {\n switch (this.key) {\n case KameleoonStorageKey.ClientData:\n return this.checkClientDataIntegrity(data as ClientDataType);\n case KameleoonStorageKey.TargetingData:\n return this.checkTargetingDataIntegrity(data as TargetingDataType);\n case KameleoonStorageKey.DataInfo:\n return this.checkDataInfoIntegrity(data as DataInfoType);\n case KameleoonStorageKey.VariationData:\n return this.checkVariationDataIntegrity(data as VariationDataType);\n case KameleoonStorageKey.TrackingData:\n return this.checkTrackingDataIntegrity(data as TrackingDataType);\n default:\n return true;\n }\n }\n\n public getDefaultData(): StorageDataType {\n switch (this.key) {\n case KameleoonStorageKey.ClientData:\n return this.getDefaultClientData();\n case KameleoonStorageKey.DataInfo:\n return { unsentData: {}, nextVisitTime: 0, mappingIdentifiers: {} };\n case KameleoonStorageKey.TrackingData:\n return { scheduledVisitors: {} };\n case KameleoonStorageKey.TargetingData:\n case KameleoonStorageKey.VariationData:\n case KameleoonStorageKey.ConsentData:\n return {};\n case KameleoonStorageKey.VisitorCode:\n return '';\n case KameleoonStorageKey.KameleoonSimulationFFData:\n return '';\n case KameleoonStorageKey.ForcedExperimentVariation:\n return {};\n case KameleoonStorageKey.ForcedFeatureVariation:\n return {};\n default:\n exhaustCheck(this.key);\n }\n }\n\n private checkTrackingDataIntegrity(data: TrackingDataType): boolean {\n return this.hasFields(data, ['scheduledVisitors']);\n }\n\n private checkDataInfoIntegrity(data: DataInfoType): boolean {\n return this.hasFields(data, ['unsentData', 'nextVisitTime']);\n }\n\n private checkVariationDataIntegrity(data: VariationDataType): boolean {\n const variations = Object.values(data);\n\n if (!variations.length) {\n return true;\n }\n\n const hasInvalidFields = (obj: Record<string, unknown>) =>\n !this.hasFields(obj, ['status']) || this.hasFields(obj, ['isSent']);\n\n for (const variation of variations) {\n for (const value of Object.values(variation)) {\n if (hasInvalidFields(value)) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n private checkClientDataIntegrity(data: ClientDataType): boolean {\n return this.hasFields(data, Object.keys(DEFAULT_CLIENT_CONFIGURATION));\n }\n\n private checkTargetingDataIntegrity(data: TargetingDataType): boolean {\n const visitorValues = Object.values(data);\n\n if (!visitorValues.length) {\n return true;\n }\n\n for (const visitorData of visitorValues) {\n // --- Note ---\n // If `visitorData` is a string, it means that it's a visitor reference\n if (typeof visitorData === 'string') {\n continue;\n }\n\n const hasInvalidFields = (obj: Record<string, unknown>) =>\n !this.hasFields(obj, ['status']) ||\n this.hasFields(obj, ['sent']) ||\n this.hasFields(obj, ['timestampList']);\n\n for (const [key, data] of Object.entries(visitorData)) {\n if (Array.isArray(data)) {\n return false;\n }\n\n switch (key) {\n case KameleoonData.PageView:\n case KameleoonData.Conversion:\n case KameleoonData.Personalization:\n case KameleoonData.TargetedSegment:\n case KameleoonData.CustomData: {\n const hasBadFields = Object.values(data).some((obj) =>\n hasInvalidFields(obj as Record<string, unknown>),\n );\n\n if (hasBadFields) {\n return false;\n }\n\n continue;\n }\n default: {\n if (hasInvalidFields(data as Record<string, unknown>)) {\n return false;\n }\n }\n }\n }\n }\n\n return true;\n }\n\n private getDefaultClientData(): ClientDataType {\n return {\n ...DEFAULT_CLIENT_CONFIGURATION,\n lastUpdate: new Date().toString(),\n };\n }\n\n private hasFields(obj: Record<string, unknown>, fields: string[]): boolean {\n const keys = Object.keys(obj);\n\n if (!keys.length || !fields.length) {\n return false;\n }\n\n return fields.every((field) => keys.includes(field));\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { KameleoonStorageKey } from './constants';\nimport { IExternalStorage, IStorage, StorageDataType } from './types';\nimport { IntegrityChecker } from './integrityChecker';\nimport { KameleoonLogger } from 'src/logging';\n\n// --- Note ---\n// Named `DataStorage` to avoid collision with `Storage` from `window` API\nexport class DataStorage<T extends StorageDataType> implements IStorage<T> {\n private externalStorage: IExternalStorage;\n private storageKey: KameleoonStorageKey;\n\n constructor(\n externalStorage: IExternalStorage,\n storageKey: KameleoonStorageKey,\n ) {\n this.externalStorage = externalStorage;\n this.storageKey = storageKey;\n\n const integrityChecker = new IntegrityChecker(storageKey);\n\n const result = this.read();\n\n if (!result.ok) {\n if (result.error.type === KameleoonException.StorageEmpty) {\n const defaultData = integrityChecker.getDefaultData();\n this.write(defaultData as T);\n }\n\n return;\n }\n\n const data = result.data;\n\n if (!integrityChecker.isDataValid(data)) {\n const defaultData = integrityChecker.getDefaultData();\n this.write(defaultData as T);\n }\n }\n\n public read(): Result<T, KameleoonError> {\n try {\n const result = this.externalStorage.read(this.storageKey);\n\n if (result === null) {\n return Err(new KameleoonError(KameleoonException.StorageEmpty));\n }\n\n // --- Note ---\n // Have to cast the type here to tell TS that `result.data` type is a subset of `T` as we check it already in the default generic `StorageDataType` for `IExternalStorage`\n return Ok(result as T);\n } catch (_) {\n KameleoonLogger.error`Failed to read data from storage: ${this.storageKey}`;\n return Err(\n new KameleoonError(KameleoonException.StorageRead, this.storageKey),\n );\n }\n }\n\n public write(data: T): Result<void, KameleoonError> {\n try {\n this.externalStorage.write(this.storageKey, data);\n\n return Ok();\n } catch (_) {\n KameleoonLogger.error`Failed to write data to storage: ${this.storageKey}`;\n return Err(\n new KameleoonError(KameleoonException.StorageWrite, this.storageKey),\n );\n }\n }\n\n public update(data: Partial<T>): Result<void, KameleoonError> {\n const result = this.read();\n\n if (!result.ok) {\n if (result.error.type === KameleoonException.StorageEmpty) {\n return this.write(data as T);\n } else {\n return result;\n }\n }\n\n const existingData: StorageDataType | null = result.data;\n\n let newData: T;\n\n if (typeof existingData === 'string') {\n newData = data as T;\n } else {\n newData = { ...existingData, ...data } as T;\n }\n\n return this.write(newData);\n }\n}\n","import {\n StorageConsentDataType,\n FeatureFlagVariationType,\n ForcedExperimentVariationDataType,\n ForcedExperimentVariationType,\n ForcedFeatureVariationDataType,\n IExternalStorage,\n VariationDataType,\n} from 'src/storage/types';\nimport { KameleoonLogger } from 'src/logging';\nimport { StorageDataType } from './types';\nimport { KameleoonStorageKey } from 'src/storage/constants';\n\nexport class StorageCleanupManager<T extends StorageDataType> {\n private readonly cleanupInterval: number;\n private readonly externalStorage: IExternalStorage<T>;\n\n constructor(externalStorage: IExternalStorage<T>, cleanupInterval: number) {\n this.externalStorage = externalStorage;\n this.cleanupInterval = cleanupInterval;\n\n if (cleanupInterval > 0) {\n this.initCleanupInterval();\n }\n }\n\n private initCleanupInterval(): void {\n for (const storageKey of Object.values(KameleoonStorageKey)) {\n let cleanupInterval: NodeJS.Timeout | null = null;\n try {\n switch (storageKey) {\n case KameleoonStorageKey.ForcedFeatureVariation:\n case KameleoonStorageKey.ForcedExperimentVariation:\n case KameleoonStorageKey.VariationData:\n case KameleoonStorageKey.ConsentData:\n KameleoonLogger.info`Starting cleanup for ${storageKey} with interval ${this.cleanupInterval}`;\n cleanupInterval = setInterval(\n () => this.cleanupData(storageKey),\n this.cleanupInterval,\n );\n break;\n case KameleoonStorageKey.ClientData:\n case KameleoonStorageKey.TargetingData:\n case KameleoonStorageKey.TrackingData:\n case KameleoonStorageKey.VisitorCode:\n case KameleoonStorageKey.DataInfo:\n case KameleoonStorageKey.KameleoonSimulationFFData:\n break;\n default:\n // check if all cases are handled\n const exhaustiveCheck: never = storageKey;\n KameleoonLogger.error`Unknown storage key: ${storageKey} for initCleanupInterval.`;\n }\n } catch (Error) {\n if (cleanupInterval) {\n clearInterval(cleanupInterval);\n }\n KameleoonLogger.error`Error while starting cleanup for ${storageKey} with interval ${this.cleanupInterval}`;\n }\n }\n }\n\n public cleanupData(storageKey: KameleoonStorageKey): void {\n const dataResult: any = this.externalStorage.read(storageKey);\n\n if (!dataResult) {\n return;\n }\n const currentTime = Date.now();\n\n switch (storageKey) {\n case KameleoonStorageKey.VariationData:\n this.cleanupVariationData(dataResult, currentTime);\n break;\n case KameleoonStorageKey.ForcedFeatureVariation:\n this.cleanupForcedFeatureVariationData(dataResult, currentTime);\n break;\n case KameleoonStorageKey.ForcedExperimentVariation:\n this.cleanupForcedExperimentVariationData(dataResult, currentTime);\n break;\n case KameleoonStorageKey.ConsentData:\n this.cleanupConsentData(dataResult, currentTime);\n break;\n case KameleoonStorageKey.ClientData:\n case KameleoonStorageKey.TargetingData:\n case KameleoonStorageKey.TrackingData:\n case KameleoonStorageKey.VisitorCode:\n case KameleoonStorageKey.DataInfo:\n case KameleoonStorageKey.KameleoonSimulationFFData:\n break;\n default:\n // check if all cases are handled\n const exhaustiveCheck: never = storageKey;\n KameleoonLogger.error`Unknown storage key: ${storageKey} for cleanupData.`;\n }\n\n this.externalStorage.write(storageKey, dataResult);\n }\n\n private cleanupConsentData(\n consentData: StorageConsentDataType,\n currentTime: number,\n ): void {\n for (const [visitorCode, consent] of Object.entries(consentData)) {\n // for consistency with the old data in the storage\n if (typeof consent === 'boolean') {\n consentData[visitorCode] = {\n consent,\n expirationTime: currentTime + this.cleanupInterval,\n } as {\n consent: boolean;\n expirationTime: number;\n };\n continue;\n }\n const value = consent as {\n consent: boolean;\n expirationTime?: number;\n };\n if (typeof value.expirationTime === 'number') {\n if (value.expirationTime < currentTime) {\n delete consentData[visitorCode];\n }\n } else {\n value.expirationTime = currentTime + this.cleanupInterval;\n }\n }\n }\n\n private cleanupVariationData(\n variationData: VariationDataType,\n currentTime: number,\n ): void {\n for (const [visitorCode, featureVariations] of Object.entries(\n variationData,\n )) {\n this.cleanupObjectValues(\n featureVariations as {\n [key: number]: FeatureFlagVariationType & { expirationTime?: number };\n },\n currentTime,\n );\n\n if (Object.keys(variationData[visitorCode]).length === 0) {\n delete variationData[visitorCode];\n }\n }\n }\n\n private cleanupForcedFeatureVariationData(\n forcedFeatureVariationData: ForcedFeatureVariationDataType,\n currentTime: number,\n ): void {\n for (const [simulated, visitorData] of Object.entries(\n forcedFeatureVariationData,\n )) {\n for (const [visitorCode, features] of Object.entries(visitorData)) {\n this.cleanupObjectValues(\n features as {\n [key: string]: ForcedFeatureVariationDataType & {\n expirationTime?: number;\n };\n },\n currentTime,\n );\n\n if (\n Object.keys(\n forcedFeatureVariationData[Number(simulated)][visitorCode],\n ).length === 0\n ) {\n delete forcedFeatureVariationData[Number(simulated)][visitorCode];\n }\n }\n }\n }\n\n private cleanupForcedExperimentVariationData(\n forcedExperimentVariationData: ForcedExperimentVariationDataType,\n currentTime: number,\n ): void {\n for (const [visitorCode, experiments] of Object.entries(\n forcedExperimentVariationData,\n )) {\n this.cleanupObjectValues(\n experiments as {\n [key: number]: ForcedExperimentVariationType & {\n expirationTime?: number;\n };\n },\n currentTime,\n );\n\n if (\n Object.keys(forcedExperimentVariationData[visitorCode]).length === 0\n ) {\n delete forcedExperimentVariationData[visitorCode];\n }\n }\n }\n\n private cleanupObjectValues(\n obj: {\n [key: string | number]: { expirationTime?: number };\n },\n currentTime: number,\n ): void {\n for (const [key, value] of Object.entries(obj)) {\n if (typeof value.expirationTime === 'number') {\n if (value.expirationTime < currentTime) {\n delete obj[key];\n }\n } else {\n value.expirationTime = currentTime + this.cleanupInterval;\n }\n }\n }\n}\n","import { Result } from 'ts-res';\nimport { ConfigurationDataType, RuleType } from 'src/clientConfiguration';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { KameleoonData } from 'src/kameleoonData';\nimport { TrackingStatus } from 'src/types';\nimport { TargetingDataType } from 'src/targeting';\n\nexport type ClientDataType = {\n data: ConfigurationDataType;\n lastUpdate: string;\n lastModified?: string;\n requestTime?: number;\n};\n\nexport type DataInfoType = {\n // --- Note ---\n // Not a real next visit time, but a minimum time that guarantees to make it to the next visit\n nextVisitTime: number;\n nextDataCleanup?: number;\n unsentData: {\n [visitorCode: string]: KameleoonData[];\n };\n mappingIdentifiers?: {\n [visitorCode: string]: MappingIdentifierType;\n };\n};\n\nexport type MappingIdentifierType = {\n mappingIdentifier: string;\n timestamp: number;\n};\n\nexport type FeatureFlagVariationType = {\n variationId: number;\n isTargetedRule: boolean;\n status: TrackingStatus;\n};\n\nexport type FeatureFlagVariationsType = {\n [experimentId: string]: FeatureFlagVariationType;\n};\n\nexport type VariationDataType = {\n [visitorCode: string]: FeatureFlagVariationsType;\n};\n\nexport type ForcedFeatureVariationType = {\n featureKey: string;\n rule: ForcedVariationRuleType | null;\n varByExp: ForcedVariationVarByExpType | null;\n simulated: boolean;\n};\n\nexport type ForcedExperimentVariationType = {\n rule: ForcedVariationRuleType;\n varByExp: ForcedVariationVarByExpType;\n forceTargeting: boolean;\n};\n\nexport type ForcedVariationRuleType = {\n type: RuleType;\n experimentId: number;\n};\n\nexport type ForcedVariationVarByExpType = {\n variationKey: string;\n variationId: number;\n};\n\nexport type SimulatedVariationType = {\n featureKey: string;\n variationId: number | null;\n experimentId: number;\n};\n\nexport type ForcedExperimentVariationDataType = {\n [visitorCode: string]: {\n [experimentId: number]: ForcedExperimentVariationType;\n };\n};\n\nexport type ForcedFeatureVariationDataType = {\n [simulated: number]: {\n [visitorCode: string]: {\n [featureKey: string]: ForcedFeatureVariationType;\n };\n };\n};\n\nexport type ForcedVariationDataType = {\n [visitorCode: string]: {\n [featureKey: string]: ForcedFeatureVariationType;\n };\n};\n\nexport enum LegalConsent {\n Unknown = 0,\n Given = 1,\n NotGiven = 2,\n}\n\nexport type LegalConsentDataType =\n | boolean\n | {\n consent: LegalConsent;\n }\n | {\n consent: boolean;\n };\n\n// for consistency with the old data in the storage\nexport type StorageConsentDataType = {\n [visitorCode: string]: LegalConsentDataType;\n};\n\nexport type ScheduledVisitorsType = {\n [visitorCode: string]: {\n isConsentProvided: boolean;\n };\n};\n\nexport type TrackingDataType = {\n scheduledVisitors: ScheduledVisitorsType;\n};\n\n/**\n * @type `StorageDataType` - an enumeration type which represents a data stored on SDK storage\n *\n * `string` represents visitor code storage with only one string value\n * */\nexport type StorageDataType =\n | ClientDataType\n | TargetingDataType\n | TrackingDataType\n | VariationDataType\n | StorageConsentDataType\n | DataInfoType\n | string;\n\n/**\n * @interface an interface of External Storage which must be implemented to be used as external storage an SDK\n * */\nexport interface IExternalStorage<T = StorageDataType> {\n /**\n * @method read - reads data from the storage\n * @param {string} key - a key, which different SDK data blocks are stored under\n * @returns {T | null} representation of generic Kameleoon data type `T` or `null` if the storage was read successfully but it's empty\n * */\n read: (key: string) => T | null;\n /**\n * @method write - writes data to storage\n * @param {string} key - a key, which different SDK data blocks are stored under\n * @param {T} data - representation of generic Kameleoon data type\n * @returns {void}\n * */\n write: (key: string, data: T) => void;\n}\n\n/**\n * @interface an interface which serves as a wrapper over `IExternalStorage` for internal SDK usage\n * */\nexport interface IStorage<T> {\n read: () => Result<T, KameleoonError>;\n write: (data: T) => Result<void, KameleoonError>;\n update: (data: Partial<T>) => Result<void, KameleoonError>;\n}\n","import { UrlEventType, UrlParameter } from 'src/requester';\nimport {\n IKameleoonData,\n KameleoonData,\n TargetedSegmentDataType,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\nexport class TargetedSegment implements IKameleoonData {\n public status: TrackingStatus;\n\n private id: number;\n\n constructor(id: number) {\n this.id = id;\n this.status = TrackingStatus.Unsent;\n }\n\n get url(): string {\n return UrlEventType.TargetingSegment + UrlParameter.Id + this.id;\n }\n\n get data(): TargetedSegmentDataType {\n return {\n id: this.id,\n type: KameleoonData.TargetedSegment,\n status: this.status,\n };\n }\n\n public static _fromRaw(data: TargetedSegmentDataType): TargetedSegment {\n const { id, status } = data;\n\n const targetedSegment = new TargetedSegment(id);\n targetedSegment.status = status;\n\n return targetedSegment;\n }\n}\n","import { Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { SegmentType, TargetingDataType, Tree } from 'src/targeting';\nimport { DataProcessor } from './dataProcessor';\nimport { CustomData } from './customData';\nimport {\n BrowserDataType,\n CustomDataType,\n DataFilterType,\n DataManagerParametersType,\n DeviceDataType,\n GeolocationDataType,\n KameleoonData,\n KameleoonDataType,\n KameleoonVisitorDataType,\n MutUpdateTargetingDataParametersType,\n OperatingSystemDataType,\n PageViewDataType,\n ProcessCustomDataManagerParametersType,\n TargetedSegmentDataType,\n VisitorsDataType,\n} from './types';\nimport { IStorage, VISIT_DURATION } from 'src/storage';\nimport {\n CustomDataConfigurationType,\n CustomDataScope,\n} from 'src/clientConfiguration';\nimport { Utilities } from 'src/utilities';\nimport { DataInfoType, MappingIdentifierType } from 'src/storage/types';\nimport { Conversion } from './conversion';\nimport { PageView } from './pageView';\nimport { Browser } from './browser';\nimport { Device } from './device';\nimport { GeolocationData } from './geolocation';\nimport { TrackingStatus } from 'src/types';\nimport { ExternalPackageInfoType } from 'src/sdkInfoTypes';\nimport { OperatingSystem } from './operatingSystem';\nimport { KameleoonLogger } from 'src/logging';\nimport { StaticData } from 'src/kameleoonData/staticData';\nimport { TargetedSegment } from 'src/kameleoonData/targetedSegment';\n\nexport interface IDataManager {\n storeData(\n data: VisitorsDataType,\n extendTtl: boolean,\n ): Result<void, KameleoonError>;\n storeTrackedData(data: VisitorsDataType): void;\n getTree(segment: SegmentType): Tree;\n clearTrees(): void;\n isPersistentCustomData(dataItem: KameleoonDataType): dataItem is CustomData;\n isUniqueIdentifier(visitorCode: string): boolean;\n getLinkedVisitor(visitorCode: string, index: number | null): string | null;\n getVisitorData(visitorCode: string): KameleoonVisitorDataType | undefined;\n getVisitorIdentifier(visitorCode: string): string;\n getPendingData(visitorCode: string): KameleoonDataType[];\n getUnsentData(visitorCode: string): (KameleoonDataType | StaticData)[];\n getVisitorStoredDataTypes(visitorCode: string): Set<KameleoonData>;\n readonly identifierCustomDataIndex: number | null;\n readonly storedCustomDataIndexes: Set<number>;\n readonly trees: Map<string, Tree>;\n readonly unsentDataVisitors: string[];\n getCustomDataIndexByName(name: string): number | undefined;\n}\n\nexport class DataManager implements IDataManager {\n protected dataStorage: IStorage<TargetingDataType>;\n protected infoStorage: IStorage<DataInfoType>;\n protected dataProcessor: DataProcessor;\n protected targetingTrees: Map<string, Tree> = new Map();\n protected mappingIdentifierCustomDataIndex: number | null = null;\n protected persistentCustomDataIndexes: Set<number> = new Set();\n protected localCustomDataIndexes: Set<number> = new Set();\n protected customDataIndexByName: Map<string, number> = new Map();\n protected cleanupIntervalId: NodeJS.Timeout | null = null;\n protected packageInfo: ExternalPackageInfoType;\n\n constructor({\n dataStorage,\n infoStorage,\n cleanupInterval,\n packageInfo,\n }: DataManagerParametersType) {\n KameleoonLogger.debug`CALL: new DataManager(dataStorage, infoStorage, cleanupInterval: ${cleanupInterval})`;\n this.dataStorage = dataStorage;\n this.infoStorage = infoStorage;\n this.dataProcessor = new DataProcessor(cleanupInterval, packageInfo);\n this.packageInfo = packageInfo;\n\n if (cleanupInterval) {\n const cleanupCallback = () => {\n this.cleanupData();\n };\n\n // --- Note ---\n // We can not make delayed code execution recoverable, as it might lead\n // to targeting data storage size overflow\n try {\n this.cleanupIntervalId = setInterval(cleanupCallback, cleanupInterval);\n } catch (err) {\n if (this.cleanupIntervalId) {\n clearInterval(this.cleanupIntervalId);\n }\n KameleoonLogger.error`Failed to set cleanup interval: ${cleanupInterval}`;\n throw err;\n }\n }\n KameleoonLogger.debug`RETURN: new DataManager(dataStorage, infoStorage, cleanupInterval: ${cleanupInterval})`;\n }\n\n public getUnsentData(\n visitorCode: string,\n ): (KameleoonDataType | StaticData)[] {\n const infoResult = this.infoStorage.read();\n\n if (!infoResult.ok) {\n return [];\n }\n\n const infoData = infoResult.data;\n const targetingData = this.getVisitorData(visitorCode);\n\n if (!infoData.unsentData[visitorCode] || !targetingData) {\n return [];\n }\n\n const unsentDataKeys = infoData.unsentData[visitorCode];\n const isNextVisit = infoData.nextVisitTime <= Date.now();\n\n const filter: DataFilterType = ({ status, key, cdIndex }) => {\n if (typeof cdIndex === 'number') {\n // --- Note ---\n // Persistent CustomData is mandatory for sending each time\n // but only once per visit\n if (this.persistentCustomDataIndexes.has(cdIndex) && isNextVisit) {\n return true;\n }\n }\n\n return unsentDataKeys.includes(key) && status === TrackingStatus.Unsent;\n };\n\n if (isNextVisit) {\n infoData.nextVisitTime = Date.now() + VISIT_DURATION;\n this.infoStorage.write(infoData);\n }\n\n return this.getDataFromRaw(targetingData, filter);\n }\n\n public getPendingData(visitorCode: string): KameleoonDataType[] {\n const targetingData = this.getVisitorData(visitorCode);\n\n if (!targetingData) {\n return [];\n }\n\n const filter: DataFilterType = ({ status }) =>\n status === TrackingStatus.Pending;\n\n return this.getDataFromRaw(targetingData, filter);\n }\n\n private getDataFromRaw(\n targetingData: KameleoonVisitorDataType,\n filter: DataFilterType,\n ): KameleoonDataType[] {\n const resultData: KameleoonDataType[] = [];\n\n for (const [key, data] of Object.entries(targetingData)) {\n if (!data) {\n continue;\n }\n\n switch (key) {\n case KameleoonData.CustomData: {\n for (const customData of Object.values(data)) {\n if (!customData) {\n continue;\n }\n\n const { status, index } = customData;\n\n if (filter({ status, key, cdIndex: index })) {\n const customDataItem = CustomData._fromRaw(customData);\n resultData.push(customDataItem);\n }\n }\n\n break;\n }\n case KameleoonData.Conversion: {\n for (const conversion of Object.values(data)) {\n if (!conversion) {\n continue;\n }\n\n if (filter({ status: conversion.status, key })) {\n const customDataItem = Conversion._fromRaw(conversion);\n resultData.push(customDataItem);\n }\n }\n\n break;\n }\n case KameleoonData.PageView: {\n const pageViewData = data as { [key: string]: PageViewDataType };\n\n for (const pageView of Object.values(pageViewData)) {\n if (filter({ status: pageView.status, key })) {\n const pageViewItem = PageView._fromRaw(pageView);\n resultData.push(pageViewItem);\n }\n }\n\n break;\n }\n case KameleoonData.TargetedSegment: {\n const targetedSegmentData = data as {\n [key: string]: TargetedSegmentDataType;\n };\n\n for (const targetedSegment of Object.values(targetedSegmentData)) {\n if (filter({ status: targetedSegment.status, key })) {\n const targetedSegmentItem =\n TargetedSegment._fromRaw(targetedSegment);\n resultData.push(targetedSegmentItem);\n }\n }\n\n break;\n }\n case KameleoonData.GeolocationData: {\n const geolocationData = data as GeolocationDataType;\n\n if (!data) {\n continue;\n }\n\n if (filter({ status: geolocationData.status, key })) {\n const geolocationItem = GeolocationData._fromRaw(geolocationData);\n resultData.push(geolocationItem);\n }\n\n break;\n }\n case KameleoonData.Browser: {\n const browserData = data as BrowserDataType;\n\n if (filter({ status: browserData.status, key })) {\n const browserItem = Browser._fromRaw(browserData);\n resultData.push(browserItem);\n }\n\n break;\n }\n case KameleoonData.Device: {\n const deviceData = data as DeviceDataType;\n\n if (filter({ status: deviceData.status, key })) {\n const deviceItem = Device._fromRaw(deviceData);\n resultData.push(deviceItem);\n }\n\n break;\n }\n case KameleoonData.OperatingSystem: {\n const osData = data as OperatingSystemDataType;\n\n if (filter({ status: osData.status, key })) {\n const osItem = OperatingSystem._fromRaw(osData);\n resultData.push(osItem);\n }\n }\n }\n }\n\n return resultData;\n }\n\n public storeTrackedData(data: VisitorsDataType): void {\n this.storeData(data, false);\n\n const infoResult = this.infoStorage.read();\n\n if (!infoResult.ok) {\n return;\n }\n\n const unsentData = infoResult.data.unsentData;\n\n for (const [visitorCode, kameleoonData] of Object.entries(data)) {\n if (!unsentData[visitorCode]) {\n return;\n }\n\n const unsentDataKeys = new Set(unsentData[visitorCode]);\n\n kameleoonData.forEach(({ data }) => {\n if (unsentDataKeys.has(data.type)) {\n unsentDataKeys.delete(data.type);\n }\n });\n\n const hasPersistentCustomData = kameleoonData.some(({ data }) => {\n if (data.type !== KameleoonData.CustomData) {\n return false;\n }\n\n const { index } = data as CustomDataType;\n\n return (\n this.persistentCustomDataIndexes.has(index) ||\n this.mappingIdentifierCustomDataIndex === index\n );\n });\n\n if (hasPersistentCustomData) {\n unsentDataKeys.add(KameleoonData.CustomData);\n }\n\n unsentData[visitorCode] = Array.from(unsentDataKeys);\n\n if (!unsentData[visitorCode].length) {\n delete unsentData[visitorCode];\n }\n }\n\n this.infoStorage.write(infoResult.data);\n }\n\n public storeData(\n data: VisitorsDataType,\n extendTtl: boolean,\n ): Result<void, KameleoonError>;\n public storeData(\n visitorCode: string,\n ...data: KameleoonDataType[]\n ): Result<void, KameleoonError>;\n public storeData(\n firstParameter: VisitorsDataType | string,\n ...secondParameter: KameleoonDataType[] | boolean[]\n ): Result<void, KameleoonError> {\n KameleoonLogger.debug`CALL: DataManager.storeData(visitorCode: ${firstParameter}, data: ${secondParameter})`;\n const result = this.dataStorage.read();\n const infoResult = this.infoStorage.read();\n\n if (!result.ok) {\n return result;\n }\n\n if (!infoResult.ok) {\n return infoResult;\n }\n\n const targetingData = result.data;\n const infoData = infoResult.data;\n\n if (typeof firstParameter === 'string') {\n this.mutUpdateTargetingData({\n infoData,\n targetingData,\n visitorCode: firstParameter,\n kameleoonData: secondParameter as KameleoonDataType[],\n extendTtl: true,\n });\n } else {\n for (const [visitorCode, kameleoonData] of Object.entries(\n firstParameter,\n )) {\n const extendTtl =\n typeof secondParameter[0] === 'boolean' ? secondParameter[0] : true;\n this.mutUpdateTargetingData({\n infoData,\n targetingData,\n visitorCode,\n kameleoonData,\n extendTtl,\n });\n }\n }\n\n this.cleanupData();\n this.infoStorage.write(infoResult.data);\n\n const writeResult = this.dataStorage.write(targetingData);\n KameleoonLogger.debug`RETURN: DataManager.storeData(visitorCode: ${firstParameter}, data: ${secondParameter}) -> (writeResult: ${writeResult})`;\n return writeResult;\n }\n\n public getTree(segment: SegmentType): Tree {\n if (this.targetingTrees.has(segment.id)) {\n return this.targetingTrees.get(segment.id)!;\n }\n\n const targetingTree = new Tree(segment);\n this.targetingTrees.set(segment.id, targetingTree);\n\n return targetingTree;\n }\n\n public clearTrees(): void {\n this.targetingTrees.clear();\n }\n\n public isPersistentCustomData(\n dataItem: KameleoonDataType,\n ): dataItem is CustomData {\n if (!this.persistentCustomDataIndexes.size) {\n return false;\n }\n\n if (Utilities.isCustomData(dataItem)) {\n return this.persistentCustomDataIndexes.has(dataItem.data.index);\n }\n\n return false;\n }\n\n public isUniqueIdentifier(visitorCode: string): boolean {\n const targetingData = this.getVisitorData(visitorCode);\n const uniqueIdentifier = targetingData?.[KameleoonData.UniqueIdentifier];\n\n return uniqueIdentifier?.value ?? false;\n }\n\n public getVisitorIdentifier(visitorCode: string): string {\n const infoResult = this.infoStorage.read();\n\n if (!infoResult.ok) {\n return visitorCode;\n }\n\n const infoData = infoResult.data;\n\n infoData.mappingIdentifiers ??= {};\n\n return (\n infoData.mappingIdentifiers[visitorCode]?.mappingIdentifier ?? visitorCode\n );\n }\n\n public getMappingIdentifier(\n visitorCode: string,\n ): MappingIdentifierType | undefined {\n const infoResult = this.infoStorage.read();\n if (!infoResult.ok) {\n return undefined;\n }\n const infoData = infoResult.data;\n if (infoData.mappingIdentifiers) {\n return infoData.mappingIdentifiers[visitorCode];\n }\n return undefined;\n }\n\n public setMappingIdentifier(\n visitorCode: string,\n mappingIdentifier: MappingIdentifierType,\n ): void {\n const infoResult = this.infoStorage.read();\n\n if (!infoResult.ok) {\n return;\n }\n\n const infoData = infoResult.data;\n\n infoData.mappingIdentifiers ??= {};\n\n const currentMappingIdentifier = infoData.mappingIdentifiers[visitorCode];\n if (\n !currentMappingIdentifier ||\n currentMappingIdentifier.timestamp < mappingIdentifier.timestamp\n ) {\n infoData.mappingIdentifiers[visitorCode] = mappingIdentifier;\n this.infoStorage.write(infoData);\n }\n }\n\n public getVisitorData(\n visitorCode: string,\n ): KameleoonVisitorDataType | undefined {\n this.cleanupData();\n\n const storageData = this.dataStorage.read();\n\n if (!storageData.ok) {\n return undefined;\n }\n\n let { visitorReference, data, isReference } =\n this.dataProcessor.dereferenceData(storageData.data, visitorCode);\n\n if (this.packageInfo.isServer && isReference && !data[visitorReference]) {\n const infoData = this.infoStorage.read();\n\n if (infoData.ok && infoData.data.mappingIdentifiers) {\n delete infoData.data.mappingIdentifiers[visitorCode];\n }\n delete data[visitorCode];\n visitorReference = visitorCode;\n }\n\n return data[visitorReference];\n }\n\n public getVisitorStoredDataTypes(visitorCode: string): Set<KameleoonData> {\n const targetingData = this.getVisitorData(visitorCode);\n\n if (!targetingData) {\n return new Set();\n }\n\n return new Set(Object.keys(targetingData) as KameleoonData[]);\n }\n\n public getLinkedVisitor(visitorCode: string): string | null {\n const storageData = this.dataStorage.read();\n\n if (!storageData.ok) {\n return null;\n }\n\n if (typeof storageData.data[visitorCode] === 'string') {\n return storageData.data[visitorCode] as string;\n }\n\n if (this.mappingIdentifierCustomDataIndex === null) {\n return null;\n }\n\n const visitorData = storageData.data[\n visitorCode\n ] as KameleoonVisitorDataType;\n\n if (!visitorData) {\n return null;\n }\n\n const customData = visitorData[KameleoonData.CustomData];\n\n if (customData && customData[this.mappingIdentifierCustomDataIndex]) {\n return (\n customData[this.mappingIdentifierCustomDataIndex] as CustomDataType\n ).value[0];\n }\n\n return null;\n }\n\n private mutUpdateTargetingData({\n infoData,\n visitorCode,\n kameleoonData,\n targetingData,\n extendTtl,\n }: MutUpdateTargetingDataParametersType) {\n for (const dataItem of kameleoonData) {\n // process custom data\n if (dataItem.data.type === KameleoonData.CustomData) {\n const customDataIsValid = this.processCustomData({\n infoData,\n customData: dataItem as CustomData,\n mutData: targetingData,\n visitorCode,\n });\n if (!customDataIsValid) {\n continue;\n }\n }\n\n // process metadata of conversions\n if (dataItem.data.type === KameleoonData.Conversion) {\n const conversion = dataItem as Conversion;\n if ((conversion._metadata?.length ?? 0) > 0) {\n conversion._metadata = conversion._metadata?.filter((item) =>\n this.trySetCustomDataIndexByName(item),\n );\n }\n }\n\n const expirationTime = this.dataProcessor.mutUpdateData({\n infoData,\n visitorCode,\n mutData: targetingData,\n dataItem,\n extendTtl,\n });\n\n const nextCleanup = infoData.nextDataCleanup;\n\n if (\n !nextCleanup ||\n (nextCleanup && expirationTime && expirationTime < nextCleanup)\n ) {\n infoData.nextDataCleanup = expirationTime;\n }\n\n if (dataItem.data.status === TrackingStatus.Unsent) {\n this.dataProcessor.mutAddUnsentData({\n mutData: infoData,\n visitorCode,\n dataType: dataItem.data.type,\n });\n }\n }\n }\n\n private cleanupData(): void {\n const result = this.dataStorage.read();\n const infoResult = this.infoStorage.read();\n\n if (!result.ok || !infoResult.ok) {\n return;\n }\n\n const data = result.data;\n const infoData = infoResult.data;\n\n const nextCleanup = infoData.nextDataCleanup;\n\n if (nextCleanup && nextCleanup < Date.now()) {\n const nextCleanupTime = this.dataProcessor.mutCleanupData(data, infoData);\n\n infoData.nextDataCleanup = nextCleanupTime || undefined;\n\n this.infoStorage.write(infoData);\n this.dataStorage.write(data);\n }\n }\n\n private processCustomData({\n infoData,\n mutData,\n customData,\n visitorCode,\n }: ProcessCustomDataManagerParametersType): boolean {\n const { data } = customData;\n\n const isDataValid = Boolean(data.value.length && data.value[0].length);\n\n if (!this.trySetCustomDataIndexByName(customData)) {\n return false;\n }\n if (data.index == CustomData.UNDEFINED_INDEX) {\n data.index = customData.index;\n }\n\n if (this.mappingIdentifierCustomDataIndex === data.index && isDataValid) {\n customData._isMappingIdentifier = true;\n\n const userId = data.value[0];\n if (visitorCode !== userId) {\n KameleoonLogger.info`Linked anonymous visitor ${visitorCode} with user ${userId}`;\n // --- Note ---\n // Associate linked visitor codes\n this.dataProcessor.createReference({\n infoData,\n mutData,\n visitorCode,\n linkedVisitor: data.value[0],\n });\n\n infoData.mappingIdentifiers ??= {};\n\n infoData.mappingIdentifiers[userId] = {\n mappingIdentifier: visitorCode,\n timestamp: Date.now(),\n };\n }\n }\n\n if (this.localCustomDataIndexes.has(data.index)) {\n customData.status = TrackingStatus.Sent;\n }\n return true;\n }\n\n private trySetCustomDataIndexByName(customData: CustomData): boolean {\n if (customData.index !== CustomData.UNDEFINED_INDEX) return true;\n if (!customData.name) return false;\n\n const cdIndex = this.customDataIndexByName.get(customData.name);\n if (cdIndex == null) return false;\n\n customData.index = cdIndex;\n return true;\n }\n\n get unsentDataVisitors(): string[] {\n const infoResult = this.infoStorage.read();\n\n if (!infoResult.ok) {\n return [];\n }\n\n return Object.keys(infoResult.data.unsentData);\n }\n\n get identifierCustomDataIndex(): number | null {\n return this.mappingIdentifierCustomDataIndex;\n }\n\n get trees(): Map<string, Tree> {\n return this.targetingTrees;\n }\n\n get storedCustomDataIndexes(): Set<number> {\n const result = this.dataStorage.read();\n\n if (!result.ok) {\n return new Set();\n }\n\n const targetingData = result.data;\n\n if (!(KameleoonData.CustomData in targetingData)) {\n return new Set();\n }\n\n const indexes = new Set<number>();\n\n for (const index in Object.keys(targetingData[KameleoonData.CustomData])) {\n indexes.add(Number(index));\n }\n\n return indexes;\n }\n\n set customDataIndexes(customData: CustomDataConfigurationType[]) {\n const [customDataLocalOnlyIndexes, persistentCustomDataIndexes]: Array<\n number[]\n > = [[], []];\n const customDataIndexByName = new Map<string, number>();\n\n customData.forEach((customData) => {\n if (customData.localOnly) {\n customDataLocalOnlyIndexes.push(customData.index);\n }\n\n if (customData.scope === CustomDataScope.Visitor) {\n persistentCustomDataIndexes.push(customData.index);\n }\n\n if (customData.name) {\n customDataIndexByName.set(customData.name, customData.index);\n }\n });\n\n this.mappingIdentifierCustomDataIndex =\n customData.find((customData) => customData.isMappingIdentifier)?.index ||\n null;\n\n this.localCustomDataIndexes = new Set(customDataLocalOnlyIndexes);\n this.persistentCustomDataIndexes = new Set(persistentCustomDataIndexes);\n this.customDataIndexByName = customDataIndexByName;\n }\n\n public getCustomDataIndexByName(name: string): number | undefined {\n return this.customDataIndexByName.get(name);\n }\n}\n",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));","import sha256 from 'crypto-js/sha256';\nimport { GetHashDoubleParamsType } from './types';\n\nexport class Hasher {\n static getHashDoubleForMEGroup(\n visitorIdentifier: string,\n meGroupName: string,\n ): number {\n return this.calculateHash(visitorIdentifier + meGroupName);\n }\n\n static getHashDouble({\n visitorIdentifier,\n id,\n respoolTime,\n }: GetHashDoubleParamsType): number {\n let suffix = '';\n\n if (respoolTime) {\n suffix += String(respoolTime);\n }\n\n return this.calculateHash(visitorIdentifier + id + suffix);\n }\n\n // --- Note ---\n // `hashDouble` is a seeded pseudo-random number between 0 and 1\n // used for deciding what variation to assign\n // `calculateHash` algorithm is consistent between every SDK\n // and will always provide same pseudo-random value for the same input parameters\n static calculateHash(seed: string): number {\n const hashDigest = sha256(seed).toString();\n\n return parseInt(hashDigest, 16) / Math.pow(2, 256);\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { Hasher } from 'src/hasher';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { VariationDataType } from 'src/storage';\nimport { Utilities } from 'src/utilities';\nimport {\n ConsentBlockingBehaviour,\n FeatureFlagType,\n RuleItemType,\n RuleType,\n VariationByExpositionType,\n} from 'src/clientConfiguration/types';\nimport {\n BaseVariationDataType,\n FeatureFlagVariationType,\n GetVariationParametersType,\n SimulatedVariationJson,\n UpdateDataStatusParametersType,\n} from './types';\nimport {\n FeatureFlagVariationsType,\n ForcedExperimentVariationDataType,\n ForcedFeatureVariationDataType,\n ForcedVariationRuleType,\n ForcedFeatureVariationType,\n ForcedVariationVarByExpType,\n IStorage,\n SimulatedVariationType,\n ForcedExperimentVariationType,\n LegalConsent,\n} from 'src/storage/types';\nimport { IVisitorCodeManager } from 'src/visitorCodeManager';\nimport { TrackingStatus } from 'src/types';\nimport { KameleoonLogger } from 'src/logging';\nimport { ClientConfiguration } from 'src/clientConfiguration';\nimport { KameleoonVisitorDataType } from 'src/kameleoonData/types';\nimport { CBScores } from 'src/kameleoonData/cbScores';\n\ninterface IVariationConfiguration {\n /**\n * @method getStoredVariations - obtains campaigns with according variations that are *already assigned* and *stored* in the `variationStorage`.\n */\n getStoredVariations(\n visitorCode: string,\n ): Result<FeatureFlagVariationsType, KameleoonError>;\n /**\n * @method updateStoredVariations - updates stored variations for the visitor\n */\n updateStoredVariations: (\n visitorCode: string,\n variationData: FeatureFlagVariationsType,\n ) => void;\n /**\n * @method getVariation - obtains variation for the rule of the feature flag which is both targeted and has a variation, if no such rule was found, returns empty rule with default `variationKey`, given an option `withAssignment` of `true` will also assign a new variation and save it in the storage\n */\n getVariation: (\n params: GetVariationParametersType,\n ) => Result<FeatureFlagVariationType, KameleoonError>;\n /**\n * @method getUnsentData - obtains the list of unsent variations\n */\n getUnsentData: (visitorCode: string) => BaseVariationDataType[];\n /**\n * @method getPendingData - obtains the list of pending variations\n */\n getPendingData: (visitorCode: string) => BaseVariationDataType[];\n /**\n * @method updateDataStatus - updates the status of the variations of given experiment ids with the given status\n */\n updateDataStatus: ({\n visitorCode,\n experimentIdList,\n status,\n }: UpdateDataStatusParametersType) => void;\n\n /**\n * @method updateForcedExperimentVariation - updates the forced variation for the visitor\n */\n updateForcedExperimentVariation: (\n visitorCode: string,\n experimentId: number,\n forcedExperimentVariation: ForcedExperimentVariationType | null,\n ) => void;\n\n /**\n * @method updateForcedFeatureVariations - updates the simulated variations for the visitor\n */\n updateForcedFeatureVariations: (\n visitorCode: string,\n forcedFeatureVariations: ForcedFeatureVariationType[],\n ) => void;\n\n /**\n * @method clearSimulatedVariations - clears the simulated feature variations for the visitor\n */\n clearSimulatedVariations: (visitorCode: string) => void;\n\n /**\n * @method getForcedFeatureVariation - obtains the forced feature variation for the visitor\n */\n getForcedFeatureVariation: (\n visitorCode: string,\n featureKey: string,\n ) => Result<ForcedFeatureVariationType | null, KameleoonError>;\n\n /**\n * @method getForcedExperimentVariation - obtains the forced experiment variation for the visitor\n */\n getForcedExperimentVariation: (\n visitorCode: string,\n experimentId: number,\n ) => Result<ForcedExperimentVariationType | null, KameleoonError>;\n}\n\nexport class VariationConfiguration implements IVariationConfiguration {\n private storage: IStorage<VariationDataType>;\n private storageForcedExperimentVariations: IStorage<ForcedExperimentVariationDataType>;\n private storageForcedFeatureVariations: IStorage<ForcedFeatureVariationDataType>;\n private visitorCodeManager: IVisitorCodeManager;\n private clientConfiguration: ClientConfiguration;\n\n constructor(\n externalStorage: IStorage<VariationDataType>,\n externalStorageForcedExperimentVariations: IStorage<ForcedExperimentVariationDataType>,\n externalStorageForcedFeatureVariations: IStorage<ForcedFeatureVariationDataType>,\n visitorCodeManager: IVisitorCodeManager,\n clientConfiguration: ClientConfiguration,\n ) {\n this.storage = externalStorage;\n this.storageForcedExperimentVariations =\n externalStorageForcedExperimentVariations;\n this.storageForcedFeatureVariations =\n externalStorageForcedFeatureVariations;\n this.visitorCodeManager = visitorCodeManager;\n this.clientConfiguration = clientConfiguration;\n visitorCodeManager.setVariationConfiguration(this);\n }\n\n public updateDataStatus({\n visitorCode,\n experimentIdList,\n status,\n }: UpdateDataStatusParametersType): Result<void, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n return result;\n }\n\n let updatedVariationData: VariationDataType = result.data;\n\n if (!updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode] = {};\n }\n\n for (const experimentId of experimentIdList) {\n updatedVariationData[visitorCode][experimentId] = {\n ...updatedVariationData[visitorCode][experimentId],\n status,\n };\n }\n\n return this.storage.write(updatedVariationData);\n }\n\n public getUnsentData(visitorCode: string): BaseVariationDataType[] {\n return this.getVariationData(\n visitorCode,\n (status) => status === TrackingStatus.Unsent,\n );\n }\n\n public getVisitorsWithUnsentData(): string[] {\n KameleoonLogger.debug`CALL: VariationConfiguration.unsentDataVisitors()`;\n const result = this.storage.read();\n\n if (!result.ok) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.unsentDataVisitors() -> (result: ${result})`;\n return [];\n }\n\n const visitors: string[] = [];\n for (const [visitorCode, variations] of Object.entries(result.data)) {\n if (\n Object.values(variations).some(\n (v) => v.status === TrackingStatus.Unsent,\n )\n ) {\n visitors.push(visitorCode);\n }\n }\n\n KameleoonLogger.debug`RETURN: VariationConfiguration.unsentDataVisitors() -> (visitors: ${visitors})`;\n return visitors;\n }\n\n public getPendingData(visitorCode: string): BaseVariationDataType[] {\n return this.getVariationData(\n visitorCode,\n (status) => status === TrackingStatus.Pending,\n );\n }\n\n public getStoredVariations(\n visitorCode: string,\n ): Result<FeatureFlagVariationsType, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n return result;\n }\n\n const featureFlagVariations = result.data[visitorCode];\n\n if (!featureFlagVariations) {\n return Err(\n new KameleoonError(KameleoonException.StorageRead, visitorCode),\n );\n }\n\n return Ok(featureFlagVariations);\n }\n\n public getVariation({\n visitorCode,\n visitorIdentifier,\n featureFlag,\n targetingData,\n packageInfo,\n clientConfiguration,\n dataManager,\n legalConsent,\n track = true,\n withAssignment = false,\n }: GetVariationParametersType): Result<\n FeatureFlagVariationType,\n KameleoonError\n > {\n KameleoonLogger.debug`CALL: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment})`;\n\n const {\n rules,\n featureKey,\n id: featureFlagId,\n defaultVariationKey,\n } = featureFlag;\n\n const consent = clientConfiguration.isConsentRequired\n ? legalConsent\n : LegalConsent.Given;\n\n for (const rule of rules) {\n const {\n segment,\n experimentId,\n id,\n exposition,\n respoolTime,\n variationByExposition,\n } = rule;\n\n const forcedVariationData = this.getForcedExperimentVariation(\n visitorCode,\n rule.experimentId,\n );\n let forcedVariation = null;\n if (forcedVariationData.ok) {\n forcedVariation = forcedVariationData.data;\n if (forcedVariation && forcedVariation.forceTargeting) {\n KameleoonLogger.info`Visitor ${visitorCode} has been forced targeted for ${rule}`;\n\n const targetedVariation = this.createAndSaveForcedTargetedVariation(\n visitorCode,\n featureFlag,\n rule,\n forcedVariation,\n track,\n withAssignment,\n );\n\n KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return Ok(targetedVariation);\n }\n }\n\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n experimentId,\n targetingData,\n packageInfo,\n clientConfiguration,\n dataManager,\n variationConfiguration: this,\n });\n\n if (!targetingResult.ok) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetingResult})`;\n return targetingResult;\n }\n\n if (!targetingResult.data) {\n continue;\n }\n\n KameleoonLogger.info`Visitor ${visitorCode} has been targeted for ${rule}`;\n\n if (forcedVariation) {\n const targetedVariation = this.createAndSaveForcedTargetedVariation(\n visitorCode,\n featureFlag,\n rule,\n forcedVariation,\n track,\n withAssignment,\n );\n KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return Ok(targetedVariation);\n }\n\n // --- Note ---\n // Calculate new variation (and assign it if `withAssignment` is `true`)\n // First the the exposed rule is calculated and then the variation inside of it\n const ruleHash = Hasher.getHashDouble({\n visitorIdentifier,\n respoolTime,\n id: String(id),\n });\n KameleoonLogger.debug`Calculated ruleHash: ${ruleHash} for code: ${visitorIdentifier}`;\n\n if (ruleHash <= exposition) {\n // Checking if the evaluation is blocked due to the consent policy\n if (\n consent == LegalConsent.NotGiven &&\n rule.type == RuleType.EXPERIMENTATION\n ) {\n const behaviour = clientConfiguration.consentBlockingBehaviour;\n if (behaviour == ConsentBlockingBehaviour.PartiallyBlocked) {\n break;\n }\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagEnvironmentDisabled,\n `Evaluation of ${rule} is blocked because consent is not provided for visitor '${visitorCode}'`,\n ),\n );\n }\n // evaluate with CB scores if applicable\n let variation = this.evaluateCBScores(\n rule,\n visitorIdentifier,\n targetingData,\n );\n\n if (!variation) {\n const variationHash = Hasher.getHashDouble({\n visitorIdentifier,\n respoolTime,\n id: String(experimentId),\n });\n\n KameleoonLogger.debug`Calculated variationHash: ${variationHash} for code: ${visitorIdentifier}`;\n\n variation = Utilities.getVariationByHash(\n variationByExposition,\n variationHash,\n );\n }\n\n if (variation) {\n if (withAssignment) {\n this.updateStoredVariations(visitorCode, {\n [experimentId]: {\n variationId: variation.variationId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n status: track ? TrackingStatus.Unsent : TrackingStatus.Sent,\n },\n });\n }\n\n const targetedVariation = {\n variationId: variation.variationId,\n variationKey: variation.variationKey,\n rule,\n featureFlagId,\n featureKey,\n experimentId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n };\n KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return Ok(targetedVariation);\n }\n }\n\n if (rule.type === RuleType.TARGETED_DELIVERY) {\n const targetedVariation = {\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n isTargetedRule: true,\n };\n KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return Ok(targetedVariation);\n }\n }\n\n const targetedVariation = {\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n isTargetedRule: false,\n };\n KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return Ok(targetedVariation);\n }\n\n private createAndSaveForcedTargetedVariation(\n visitorCode: string,\n featureFlag: FeatureFlagType,\n rule: RuleItemType,\n forcedVariation: ForcedExperimentVariationType,\n track: boolean,\n withAssignment: boolean,\n ): FeatureFlagVariationType {\n const targetedVariation = {\n variationKey: forcedVariation.varByExp!.variationKey,\n variationId: forcedVariation.varByExp!.variationId,\n rule,\n featureFlagId: featureFlag.id,\n featureKey: featureFlag.featureKey,\n experimentId: rule.experimentId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n };\n if (withAssignment) {\n this.updateStoredVariations(visitorCode, {\n [rule.experimentId]: {\n variationId: targetedVariation.variationId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n status: track ? TrackingStatus.Unsent : TrackingStatus.Sent,\n },\n });\n }\n return targetedVariation;\n }\n\n public updateStoredVariations(\n visitorCode: string,\n variationData: FeatureFlagVariationsType,\n ): Result<void, KameleoonError> {\n KameleoonLogger.debug`CALL: VariationConfiguration.updateStoredVariations(visitorCode: ${visitorCode}, variationData: ${variationData})`;\n const result = this.storage.read();\n\n if (!result.ok) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${visitorCode}, variationData: ${variationData}) -> (result: ${result})`;\n return result;\n }\n\n let updatedVariationData: VariationDataType = result.data;\n\n if (!updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode] = {};\n }\n for (const experimentId in variationData) {\n updatedVariationData[visitorCode][experimentId] =\n variationData[experimentId];\n }\n\n const resultWrite = this.storage.write(updatedVariationData);\n KameleoonLogger.debug`RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${visitorCode}, variationData: ${variationData}) -> (resultWrite: ${resultWrite})`;\n return resultWrite;\n }\n\n private getVariationData(\n visitorCode: string,\n filter: (status: TrackingStatus) => boolean,\n ): BaseVariationDataType[] {\n const result = this.getStoredVariations(visitorCode);\n\n if (!result.ok) {\n return [];\n }\n\n const resultData: BaseVariationDataType[] = [];\n\n for (const [experimentId, variationData] of Object.entries(result.data)) {\n if (filter(variationData.status)) {\n resultData.push({\n experimentId: Number(experimentId),\n variationId: variationData.variationId,\n isTargetedRule: variationData.isTargetedRule,\n });\n }\n }\n\n return resultData;\n }\n\n public updateForcedExperimentVariation(\n visitorCode: string,\n experimentId: number,\n forcedExperimentVariation: ForcedExperimentVariationType | null,\n ): Result<void, KameleoonError> {\n KameleoonLogger.debug`CALL: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}, forcedExperimentVariation: ${forcedExperimentVariation})`;\n const result = this.storageForcedExperimentVariations.read();\n\n if (!result.ok) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}, forcedExperimentVariation: ${forcedExperimentVariation}) -> (result: ${result})`;\n return result;\n }\n\n let updatedForcedVariationData: ForcedExperimentVariationDataType =\n result.data;\n\n if (!updatedForcedVariationData[visitorCode]) {\n updatedForcedVariationData[visitorCode] = {};\n }\n\n if (forcedExperimentVariation) {\n updatedForcedVariationData[visitorCode][experimentId] =\n forcedExperimentVariation;\n } else {\n delete updatedForcedVariationData[visitorCode][experimentId];\n }\n\n const resultWrite = this.storageForcedExperimentVariations.write(\n updatedForcedVariationData,\n );\n KameleoonLogger.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}, forcedExperimentVariation: ${forcedExperimentVariation}) -> (resultWrite: ${resultWrite})`;\n return resultWrite;\n }\n\n public updateForcedFeatureVariations(\n visitorCode: string,\n forcedFeatureVariations: ForcedFeatureVariationType[],\n ): Result<void, KameleoonError> {\n KameleoonLogger.debug`CALL: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${visitorCode}, forcedFeatureVariations: ${forcedFeatureVariations})`;\n const result = this.storageForcedFeatureVariations.read();\n\n if (!result.ok) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${visitorCode}, forcedFeatureVariations: ${forcedFeatureVariations}) -> (result: ${result})`;\n return result;\n }\n\n let updatedVariationData: ForcedFeatureVariationDataType = result.data;\n if (!updatedVariationData[0]) {\n updatedVariationData[0] = {};\n }\n if (!updatedVariationData[1]) {\n updatedVariationData[1] = {};\n }\n\n const updatedForcedFeatureVariationData = updatedVariationData[0];\n const updatedSimulatedFeatureVariationData = updatedVariationData[1];\n\n if (!updatedForcedFeatureVariationData[visitorCode]) {\n updatedForcedFeatureVariationData[visitorCode] = {};\n }\n if (!updatedSimulatedFeatureVariationData[visitorCode]) {\n updatedSimulatedFeatureVariationData[visitorCode] = {};\n }\n\n forcedFeatureVariations.forEach((forcedFeatureVariation) => {\n const targetData = forcedFeatureVariation.simulated\n ? updatedSimulatedFeatureVariationData[visitorCode]\n : updatedForcedFeatureVariationData[visitorCode];\n targetData[forcedFeatureVariation.featureKey] = forcedFeatureVariation;\n });\n\n const resultWrite =\n this.storageForcedFeatureVariations.write(updatedVariationData);\n KameleoonLogger.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${visitorCode}, forcedFeatureVariations: ${forcedFeatureVariations}) -> (resultWrite: ${resultWrite})`;\n return resultWrite;\n }\n\n public clearSimulatedVariations(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n KameleoonLogger.debug`CALL: VariationConfiguration.clearSimulatedVariations(visitorCode: ${visitorCode})`;\n const result = this.storageForcedFeatureVariations.read();\n\n if (!result.ok) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${visitorCode}) -> (result: ${result})`;\n return result;\n }\n let resultWrite: Result<void, KameleoonError>;\n const updatedVariationData: ForcedFeatureVariationDataType = result.data;\n\n if (updatedVariationData?.[1]?.[visitorCode]) {\n delete updatedVariationData[1][visitorCode];\n resultWrite =\n this.storageForcedFeatureVariations.write(updatedVariationData);\n } else {\n resultWrite = Ok();\n }\n\n KameleoonLogger.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${visitorCode}) -> (resultWrite: ${resultWrite})`;\n return resultWrite;\n }\n\n public getForcedFeatureVariation(\n visitorCode: string,\n featureKey: string,\n ): Result<ForcedFeatureVariationType | null, KameleoonError> {\n KameleoonLogger.debug`CALL: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey})`;\n\n const result = this.storageForcedFeatureVariations.read();\n if (!result.ok) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (simulatedResult: ${result})`;\n return result;\n }\n\n const simulatedData = result.data[1]?.[visitorCode]?.[featureKey];\n\n if (simulatedData) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (simulatedData: ${simulatedData})`;\n return Ok(simulatedData);\n }\n\n const forcedData = result.data[0]?.[visitorCode]?.[featureKey];\n\n KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (forcedData: ${forcedData})`;\n return Ok(forcedData);\n }\n\n public getForcedExperimentVariation(\n visitorCode: string,\n experimentId: number,\n ): Result<ForcedExperimentVariationType | null, KameleoonError> {\n KameleoonLogger.debug`CALL: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId})`;\n\n const forcedResult = this.storageForcedExperimentVariations.read();\n if (!forcedResult.ok) {\n KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}) -> (forcedResult: ${forcedResult})`;\n return forcedResult;\n }\n\n const forcedData = forcedResult.data[visitorCode]?.[experimentId];\n\n KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}) -> (forcedExperiment: ${forcedData})`;\n return Ok(forcedData);\n }\n\n private parseForcedVariationData(\n simulatedVariation: SimulatedVariationType,\n simulated = false,\n ): ForcedFeatureVariationType | null {\n const featureFlag = this.clientConfiguration.featureFlags.get(\n simulatedVariation.featureKey,\n );\n if (!featureFlag) {\n KameleoonLogger.error`Simulated feature flag '${simulatedVariation.featureKey}' not found`;\n return null;\n }\n let forcedVariation = null;\n if (simulatedVariation.experimentId === 0) {\n forcedVariation = {\n featureKey: simulatedVariation.featureKey,\n rule: null,\n varByExp: null,\n simulated: simulated,\n };\n return forcedVariation;\n }\n for (const rule of featureFlag.rules) {\n if (simulatedVariation.experimentId !== rule.experimentId) {\n continue;\n }\n const varByExp = rule.variationByExposition.find(\n (varByExp) => varByExp.variationId === simulatedVariation.variationId,\n );\n if (varByExp) {\n forcedVariation = {\n featureKey: simulatedVariation.featureKey,\n rule: {\n type: rule.type,\n experimentId: rule.experimentId,\n } as ForcedVariationRuleType,\n varByExp: {\n variationKey: varByExp.variationKey,\n variationId: varByExp.variationId,\n } as ForcedVariationVarByExpType,\n simulated: simulated,\n };\n return forcedVariation;\n }\n }\n KameleoonLogger.error`Simulated variation ${simulatedVariation.variationId} not found`;\n return null;\n }\n\n public simulatedVariationFromJson(\n featureKey: string,\n data: any,\n ): ForcedFeatureVariationType | null {\n KameleoonLogger.debug`CALL: VariationConfiguration.simulatedVariationFromJson(featureKey: ${featureKey}, data: ${data})`;\n if (!this.isSimulatedVariationJson(data)) {\n return null;\n }\n const forcedVariation = this.parseForcedVariationData(\n {\n featureKey,\n variationId: data.varId,\n experimentId: data.expId,\n },\n true,\n );\n KameleoonLogger.debug`RETURN: VariationConfiguration.simulatedVariationFromJson(featureKey: ${featureKey}, data: ${data}) -> (forcedVariation: ${forcedVariation})`;\n return forcedVariation;\n }\n\n private isSimulatedVariationJson(\n value: any,\n ): value is SimulatedVariationJson {\n return value && (typeof value.expId === 'number' || value.expId === null);\n }\n\n private evaluateCBScores(\n rule: RuleItemType,\n visitorIdentifier: string,\n targetingData?: KameleoonVisitorDataType,\n ): VariationByExpositionType | null {\n if (!targetingData || !targetingData.cbScores) {\n return null;\n }\n KameleoonLogger.debug`CALL: KameleoonClientImpl.evaluateCBScores(rule: ${rule}, targetingData: ${targetingData}, visitorIdentifier: ${visitorIdentifier})`;\n\n const experimentId = rule.experimentId;\n const varIdGroupByScores = new CBScores(targetingData.cbScores.cbs)\n .getValues()\n .get(experimentId);\n\n let variation: VariationByExpositionType | null = null;\n if (varIdGroupByScores !== undefined) {\n const varByExps = rule.variationByExposition;\n\n const varByExpExistInCBS = varIdGroupByScores\n .map((varGroup) =>\n varByExps.filter((varByExp) =>\n varGroup.ids.includes(varByExp.variationId),\n ),\n )\n .find((varByExpExistInCBS) => varByExpExistInCBS.length > 0);\n if (varByExpExistInCBS) {\n let idx = 0;\n if (varByExpExistInCBS.length > 1) {\n const variationHash = Hasher.getHashDouble({\n visitorIdentifier,\n respoolTime: rule.respoolTime,\n id: String(experimentId),\n });\n KameleoonLogger.debug`Calculated cbs hash ${variationHash} for code ${visitorIdentifier}`;\n idx = Math.min(\n Math.floor(variationHash * varByExpExistInCBS.length),\n varByExpExistInCBS.length - 1,\n );\n }\n variation = varByExpExistInCBS[idx];\n }\n }\n\n KameleoonLogger.debug`RETURN: KameleoonClientImpl.evaluateCBScores(rule: ${rule}, targetingData: ${targetingData}, visitorIdentifier: ${visitorIdentifier}) -> (variation: ${variation})`;\n return variation;\n }\n}\n","export const REAL_TIME_EVENT = 'configuration-update-event';\n","import { KameleoonLogger } from 'src/logging/kameleoonLogger';\nimport { REAL_TIME_EVENT } from './constants';\nimport {\n EventHandlerType,\n EventSourceParametersType,\n IExternalEventSource,\n RealTimeEventType,\n} from './types';\n\nexport interface IEventSource {\n readonly isOpen: boolean;\n open: (onEvent: EventHandlerType) => void;\n close: () => void;\n onError: (callback: (error: Event) => void) => void;\n}\n\n// --- Note ---\n// Named `KameleoonEventSource` to avoid collision with native `EventSource`\nexport class KameleoonEventSource implements IEventSource {\n private eventSource: IExternalEventSource;\n private siteCode: string;\n private url: string;\n private isConnectionOpen: boolean;\n\n constructor({\n siteCode,\n externalEventSource,\n urlProvider,\n }: EventSourceParametersType) {\n this.url = urlProvider.getEventSourceUrl();\n this.siteCode = siteCode;\n this.eventSource = externalEventSource;\n this.isConnectionOpen = false;\n }\n\n get isOpen(): boolean {\n return this.isConnectionOpen;\n }\n\n public open(onEvent: EventHandlerType): void {\n this.eventSource.open({\n onEvent: this.handleMessage(onEvent),\n url: this.url,\n eventType: REAL_TIME_EVENT,\n });\n this.isConnectionOpen = true;\n KameleoonLogger.info`Established a new SSE connection with: ${this.url}`;\n }\n\n public close(): void {\n this.eventSource.close();\n this.isConnectionOpen = false;\n KameleoonLogger.info`SSE connection: '${this.url}' was successfully closed`;\n }\n\n public onError(callback: (error: Event) => void): void {\n if (!this.eventSource.onError) {\n KameleoonLogger.warning(\n \"EventSource does not have `onError` method provided. Real-time errors won't be handled.\",\n );\n return;\n }\n\n this.eventSource.onError(callback);\n }\n\n private handleMessage(\n onEvent: EventHandlerType,\n ): (message: MessageEvent) => void {\n const onMessage = (message: MessageEvent): void => {\n KameleoonLogger.debug`Received new message from: ${this.url}`;\n const event: RealTimeEventType = JSON.parse(message.data);\n const { siteCode: eventSiteCode, ts } = event;\n\n if (this.siteCode === eventSiteCode) {\n onEvent(ts);\n }\n };\n\n return onMessage;\n }\n}\n","export const VISITOR_CODE_LENGTH = 16;\nexport const VISITOR_CODE_MAX_LENGTH = 255;\nexport const DEFAULT_MAX_AGE = 60 * 60 * 24 * 365;\nexport const ZERO_MAX_AGE = 0;\nexport const PATH = '/';\n","import { Err, Ok, Result } from 'ts-res';\nimport { KameleoonStorageKey } from 'src/storage';\nimport { SetDataCallbackParametersType } from 'src/types';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { IVisitorCodeManager } from './types';\nimport {\n DEFAULT_MAX_AGE,\n PATH,\n VISITOR_CODE_LENGTH,\n VISITOR_CODE_MAX_LENGTH,\n} from './constants';\nimport { KameleoonLogger } from 'src/logging';\nimport { VariationConfiguration } from \"src/variationConfiguration\";\nimport { ForcedFeatureVariationType } from \"src/storage/types\";\n\n/**\n * VisitorCodeManager - a class which manages visitor codes using cookies, offering functions to generate, retrieve,\n * and handle these codes while considering user consent.\n **/\nexport class VisitorCodeManager implements IVisitorCodeManager {\n private variationConfiguration?: VariationConfiguration;\n private isConsentRequired: boolean = false;\n private setDataCallback?: (params: SetDataCallbackParametersType) => void;\n private getDataCallback?: (key: string) => string | null;\n\n set consentRequired(isRequired: boolean) {\n this.isConsentRequired = isRequired;\n }\n\n get consentRequired(): boolean {\n return this.isConsentRequired;\n }\n\n set getData(callback: (key: string) => string) {\n this.getDataCallback = callback;\n }\n\n set setData(callback: (params: SetDataCallbackParametersType) => void) {\n this.setDataCallback = callback;\n }\n\n get setData(): (params: SetDataCallbackParametersType) => void {\n if (this.setDataCallback) {\n return this.setDataCallback;\n }\n\n throw new Error('Missing setDataCallback!');\n }\n\n public validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length === 0) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeEmpty));\n }\n\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n public getVisitorCode(defaultVisitorCode?: string): string {\n KameleoonLogger.debug`CALL: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${defaultVisitorCode})`;\n if (!this.getDataCallback || !this.setDataCallback) {\n throw new Error(\n 'Missing getDataCallback or setDataCallback methods in getVisitorCode!',\n );\n }\n\n let visitorCode;\n\n const existingVisitorCode = this.getDataCallback(\n KameleoonStorageKey.VisitorCode,\n );\n\n if (existingVisitorCode) {\n visitorCode = existingVisitorCode;\n }\n\n if (!visitorCode) {\n if (defaultVisitorCode) {\n this.validateVisitorCode(defaultVisitorCode).throw();\n visitorCode = defaultVisitorCode;\n KameleoonLogger.debug`Used default visitor code: ${visitorCode}`;\n } else {\n visitorCode = this.generateVisitorCode();\n KameleoonLogger.debug`Generated new visitor code: ${visitorCode}`;\n }\n }\n\n this.processSimulatedVariations(visitorCode);\n\n if (!this.isConsentRequired) {\n this.setDataCallback({\n visitorCode,\n key: KameleoonStorageKey.VisitorCode,\n maxAge: DEFAULT_MAX_AGE,\n path: PATH,\n });\n }\n\n KameleoonLogger.debug`RETURN: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${defaultVisitorCode}) -> (visitorCode: ${visitorCode})`;\n return visitorCode;\n }\n\n private processSimulatedVariations(visitorCode: string): void {\n if (this.variationConfiguration) {\n const simulatedVariationsData = this.getSimulatedVariations(visitorCode);\n try {\n this.variationConfiguration.clearSimulatedVariations(visitorCode).throw();\n if (simulatedVariationsData !== null && simulatedVariationsData.length > 0) {\n this.variationConfiguration.updateForcedFeatureVariations(visitorCode, simulatedVariationsData).throw();\n }\n } catch (error) {\n if (error instanceof Error) {\n KameleoonLogger.error`Failed to process simulated variations: ${error.message}`;\n }\n }\n }\n }\n\n private getSimulatedVariations(\n visitorCode: string,\n ): ForcedFeatureVariationType[] | null {\n KameleoonLogger.debug`CALL: VisitorCodeManager.getSimulatedVariations(visitorCode: ${visitorCode})`;\n const simulatedVariationsData = this.getDataCallback!(\n KameleoonStorageKey.KameleoonSimulationFFData,\n );\n\n let variations: ForcedFeatureVariationType[] | null = null;\n if (\n typeof simulatedVariationsData === 'string' &&\n simulatedVariationsData.length > 0\n ) {\n try {\n const parsed = JSON.parse(decodeURIComponent(simulatedVariationsData));\n if (parsed && typeof parsed === 'object') {\n variations = Object.entries(parsed)\n .map(([key, value]) => {\n return this.variationConfiguration!.simulatedVariationFromJson(key, value);\n })\n .filter((variation) => variation !== null) as ForcedFeatureVariationType[];\n }\n } catch (error) {\n if (error instanceof Error) {\n KameleoonLogger.error`Failed to parse simulated variations: ${error.message}`;\n }\n }\n }\n KameleoonLogger.debug`RETURN: VisitorCodeManager.getSimulatedVariations(visitorCode: ${visitorCode}) -> (variations: ${variations})`;\n return variations;\n }\n\n private generateVisitorCode(): string {\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const randomCharacterArray: string[] = [];\n\n for (let i = 0; i < VISITOR_CODE_LENGTH; i++) {\n randomCharacterArray.push(\n characters[Math.floor(Math.random() * characters.length)],\n );\n }\n\n return randomCharacterArray.join('');\n }\n\n public setVariationConfiguration(variationConfiguration: VariationConfiguration): void {\n if (!this.variationConfiguration) {\n this.variationConfiguration = variationConfiguration;\n }\n }\n}\n","enum Byte {\n Kb = 1_000,\n Mb = 1_000 * Byte.Kb,\n Gb = 1_000 * Byte.Mb,\n}\n\nexport const MAX_BODY_SIZE = 10 * Byte.Mb;\nexport const SYMBOL_SIZE = 4;\n","import { Err, Ok, Result } from 'ts-res';\nimport {\n Conversion,\n KameleoonData,\n KameleoonDataType,\n PageView,\n} from 'src/kameleoonData';\nimport { UrlEventType, UrlParameter } from 'src/requester';\nimport { IExternalPRNG, Utilities } from 'src/utilities';\nimport {\n AddDataParametersType,\n AddVisitorTrackingLineParametersType,\n GetTrackingBodyResultType,\n VisitorTrackingDataType,\n} from './types';\nimport { MAX_BODY_SIZE, SYMBOL_SIZE } from './constants';\nimport { BaseVariationDataType } from 'src/variationConfiguration/types';\nimport { KameleoonLogger } from 'src/logging';\nimport { StaticData } from 'src/kameleoonData/staticData';\n\ninterface IBodyProvider {\n getTrackingBody: (visitorCode: string) => GetTrackingBodyResultType;\n addData: ({\n visitorCode,\n variationData,\n visitorData,\n userAgent,\n isConsentProvided,\n isMappingIdentifier,\n }: AddDataParametersType) => Result<void, void>;\n}\n\nexport class BodyProvider implements IBodyProvider {\n private prng: IExternalPRNG;\n private currentSize = 0;\n private resultBody: string[] = [];\n private hasUserAgent = false;\n private trackingVisitors: {\n [visitorCode: string]: VisitorTrackingDataType;\n } = {};\n\n constructor(prng: IExternalPRNG) {\n this.prng = prng;\n }\n\n public getTrackingBody(): GetTrackingBodyResultType {\n const result = {\n body: this.resultBody.join('\\n'),\n hasUserAgent: this.hasUserAgent,\n };\n\n this.cleanup();\n\n return result;\n }\n\n public addData({\n visitorCode,\n variationData,\n visitorData,\n userAgent,\n isConsentProvided,\n isMappingIdentifier,\n }: AddDataParametersType): Result<void, void> {\n const lines: string[] = [];\n\n const variationDataLines = this.getVariationDataLines(variationData);\n const visitorDataLines = this.getVisitorDataLines(visitorData);\n\n lines.push(...variationDataLines, ...visitorDataLines);\n\n return this.addVisitorTrackingLines({\n visitorCode,\n lines,\n userAgent,\n isConsentProvided,\n isMappingIdentifier,\n });\n }\n\n private getVisitorDataLines(\n visitorData: (KameleoonDataType | StaticData)[],\n ): string[] {\n const lines: string[] = [];\n\n for (const data of visitorData) {\n let nonce;\n\n if (\n !(data instanceof StaticData) &&\n (data.data.type === KameleoonData.Conversion ||\n data.data.type === KameleoonData.PageView)\n ) {\n const nonceValue = (data as Conversion | PageView).data.nonce;\n\n if (nonceValue) {\n nonce = nonceValue;\n } else {\n nonce = Utilities.getNonce(this.prng);\n (data as Conversion | PageView).data.nonce = nonce;\n }\n }\n\n if (!nonce) {\n nonce = Utilities.getNonce(this.prng);\n }\n\n lines.push(data.url + UrlParameter.Nonce + nonce);\n }\n\n return lines;\n }\n\n private getVariationDataLines(\n variationData: BaseVariationDataType[],\n ): string[] {\n const lines: string[] = [];\n\n variationData.forEach((item) => {\n lines.push(\n UrlEventType.Experiment +\n UrlParameter.Id +\n item.experimentId +\n UrlParameter.VariationId +\n item.variationId +\n UrlParameter.Nonce +\n Utilities.getNonce(this.prng),\n );\n });\n\n return lines;\n }\n\n private prepareVisitorBody(visitorCode: string): Result<void, void> {\n const visitorData = this.trackingVisitors[visitorCode];\n\n if (!visitorData) {\n return Err();\n }\n\n const { lines, userAgent, isMappingIdentifier, isConsentProvided } =\n visitorData;\n\n const identifier = this.getIdentifier(visitorCode, isMappingIdentifier);\n\n if (lines.length) {\n lines.forEach((value, index) => {\n lines[index] = value + identifier;\n });\n KameleoonLogger.debug`Sending tracking request for unsent data ${lines} of visitor ${visitorCode} with given (or not required) consent ${isConsentProvided}`;\n } else if (isConsentProvided) {\n const activityLine = this.getActivityLine();\n\n lines.push(activityLine + identifier);\n KameleoonLogger.debug`Sending tracking request for activity of visitor ${visitorCode} with given consent`;\n } else {\n KameleoonLogger.debug`No data to send for visitor ${visitorCode} with no consent`;\n }\n\n if (userAgent && lines.length) {\n lines[0] += UrlParameter.UserAgent + userAgent;\n this.hasUserAgent = true;\n }\n\n // --- Note ---\n // Improve after `ts-res` chaining update\n const result = this.checkSize(lines);\n\n if (result.ok) {\n this.resultBody.push(...lines);\n }\n\n return result;\n }\n\n private cleanup(): void {\n this.currentSize = 0;\n this.resultBody = [];\n this.hasUserAgent = false;\n this.trackingVisitors = {};\n }\n\n private checkSize(lines: string[]): Result<void, void> {\n let size = 0;\n size += lines.reduce((acc, line) => acc + line.length * SYMBOL_SIZE, 0);\n\n if (size + this.currentSize > MAX_BODY_SIZE) {\n return Err();\n }\n\n this.currentSize += size;\n\n return Ok();\n }\n\n private addVisitorTrackingLines({\n visitorCode,\n lines,\n userAgent,\n isConsentProvided,\n isMappingIdentifier,\n }: AddVisitorTrackingLineParametersType): Result<void, void> {\n if (!this.trackingVisitors[visitorCode]) {\n this.trackingVisitors[visitorCode] = {\n isMappingIdentifier,\n isConsentProvided,\n userAgent,\n lines,\n };\n } else {\n if (userAgent) {\n this.trackingVisitors[visitorCode].userAgent = userAgent;\n }\n\n this.trackingVisitors[visitorCode].lines.push(...lines);\n }\n\n return this.prepareVisitorBody(visitorCode);\n }\n\n private getActivityLine(): string {\n return (\n UrlEventType.Activity + UrlParameter.Nonce + Utilities.getNonce(this.prng)\n );\n }\n\n private getIdentifier(\n visitorCode: string,\n isMappingIdentifier: boolean,\n ): string {\n const identifier = isMappingIdentifier\n ? UrlParameter.MappingValue\n : UrlParameter.VisitorCode;\n\n return identifier + encodeURIComponent(visitorCode);\n }\n}\n","import {\n CustomData,\n DataManager,\n KameleoonData,\n KameleoonDataType,\n} from 'src/kameleoonData';\nimport { Requester } from 'src/requester';\nimport { VariationConfiguration } from 'src/variationConfiguration';\nimport { PendingDataType, TrackerParametersType } from './types';\nimport { TrackingStatus } from 'src/types';\nimport { BaseVariationDataType } from 'src/variationConfiguration/types';\nimport { BodyProvider } from './bodyProvider';\nimport { IStorage, TrackingDataType } from 'src/storage';\nimport { KameleoonLogger } from 'src/logging';\nimport { ScheduledVisitorsType } from 'src/storage/types';\nimport { StaticData } from 'src/kameleoonData/staticData';\nimport { ClientConfiguration } from 'src/clientConfiguration';\n\nexport interface ITracker {\n scheduleVisitor: (visitorCode: string, isConsentProvided: boolean) => void;\n}\n\nexport class Tracker implements ITracker {\n private dataManager: DataManager;\n private variationConfiguration: VariationConfiguration;\n private requester: Requester;\n private bodyProvider: BodyProvider;\n private intervalId: NodeJS.Timeout | null = null;\n private trackingStorage: IStorage<TrackingDataType>;\n private clientConfiguration: ClientConfiguration;\n\n constructor({\n dataManager,\n trackingStorage,\n variationConfiguration,\n trackingInterval,\n requester,\n prng,\n clientConfiguration,\n }: TrackerParametersType) {\n KameleoonLogger.debug`CALL: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${trackingInterval}, requester, prng, clientConfiguration)`;\n this.dataManager = dataManager;\n this.trackingStorage = trackingStorage;\n this.variationConfiguration = variationConfiguration;\n this.requester = requester;\n this.bodyProvider = new BodyProvider(prng);\n this.clientConfiguration = clientConfiguration;\n\n try {\n this.intervalId = setInterval(() => {\n this.sendDataAll();\n }, trackingInterval);\n } catch (err) {\n this.intervalId && clearInterval(this.intervalId);\n\n throw err;\n }\n KameleoonLogger.debug`RETURN: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${trackingInterval}, requester, prng, clientConfiguration)`;\n }\n\n public scheduleVisitor(\n visitorCode: string,\n isConsentProvided: boolean,\n ): void {\n KameleoonLogger.debug`CALL: Tracker.scheduleVisitor(visitorCode: ${visitorCode}, isConsentProvided: ${isConsentProvided})`;\n this.trackingStorage.read().and((trackingData) => {\n trackingData.scheduledVisitors[`_${visitorCode}`] = { isConsentProvided };\n this.trackingStorage.write(trackingData);\n });\n KameleoonLogger.debug`RETURN: Tracker.scheduleVisitor(visitorCode: ${visitorCode}, isConsentProvided: ${isConsentProvided})`;\n }\n\n private checkIsIdentifier(visitorCode: string): boolean {\n const isUniqueIdentifier = this.dataManager.isUniqueIdentifier(visitorCode);\n const mappingIdentifier =\n this.dataManager.getMappingIdentifier(visitorCode)?.mappingIdentifier ??\n visitorCode;\n let isMappingIdentifier = false;\n\n // --- Note ---\n // This part is a workaround for Data API\n // If there's is no unique identifier for the visitor\n // We do reconciliation for visitor with himself\n if (isUniqueIdentifier) {\n const linkedVisitor = this.dataManager.getLinkedVisitor(visitorCode);\n const index = this.dataManager.identifierCustomDataIndex;\n\n if (!linkedVisitor && typeof index === 'number') {\n this.dataManager.storeData(\n visitorCode,\n new CustomData(index, visitorCode),\n );\n } else {\n isMappingIdentifier = true;\n }\n }\n\n return isMappingIdentifier && visitorCode != mappingIdentifier;\n }\n\n private getUserAgent(visitorCode: string): string | undefined {\n const targetingData = this.dataManager.getVisitorData(visitorCode);\n\n if (targetingData) {\n const userAgentData = targetingData[KameleoonData.UserAgent];\n\n if (userAgentData) {\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n public async sendDataAll(): Promise<void> {\n const storageResult = this.trackingStorage.read();\n\n if (!storageResult.ok) {\n return;\n }\n\n const { scheduledVisitors } = storageResult.data;\n await this.sendData(scheduledVisitors);\n }\n\n public async sendDataForVisitor(\n visitorCode: string,\n isConsentProvided: boolean,\n ): Promise<void> {\n const storageResult = this.trackingStorage.read();\n\n if (!storageResult.ok) {\n return;\n }\n\n await this.sendData({ [`_${visitorCode}`]: { isConsentProvided } });\n }\n\n private async sendData(\n scheduledVisitors: ScheduledVisitorsType,\n ): Promise<void> {\n const pendingData: PendingDataType = {};\n const trackingVisitorCodes: string[] = [];\n\n const trackedVisitors: {\n visitorCode: string;\n isConsentProvided: boolean;\n }[] = [];\n\n for (const [visitorCode, { isConsentProvided }] of Object.entries(\n scheduledVisitors,\n )) {\n let targetVisitorCode = visitorCode.startsWith('_')\n ? visitorCode.substring(1)\n : visitorCode;\n\n const isMappingIdentifier = this.checkIsIdentifier(targetVisitorCode);\n const userAgent = this.getUserAgent(targetVisitorCode);\n\n const visitorData = this.getUnsentVisitorData(\n targetVisitorCode,\n isConsentProvided,\n );\n const variationData = this.getUnsentVariationData(\n targetVisitorCode,\n isConsentProvided,\n );\n\n const result = this.bodyProvider.addData({\n visitorCode: targetVisitorCode,\n variationData,\n visitorData,\n userAgent,\n isConsentProvided,\n isMappingIdentifier,\n });\n\n if (result.ok) {\n pendingData[targetVisitorCode] = {\n visitorData,\n variationData,\n };\n trackedVisitors.push({\n visitorCode: targetVisitorCode,\n isConsentProvided,\n });\n trackingVisitorCodes.push(visitorCode);\n } else {\n KameleoonLogger.warning(\n 'Visitor data to be tracked exceeded the request size limit. Some visitor data is kept to be sent later.' +\n ' If it is not caused by the peak load, decreasing the tracking interval is recommended.',\n );\n break;\n }\n }\n\n const { body, hasUserAgent } = this.bodyProvider.getTrackingBody();\n\n if (trackingVisitorCodes.length !== 0) {\n this.trackingStorage.read().and((trackingData) => {\n trackingVisitorCodes.forEach((visitorCode) => {\n delete trackingData.scheduledVisitors[visitorCode];\n });\n this.trackingStorage.write(trackingData);\n });\n }\n\n if (!body) {\n return;\n }\n\n const result = await this.requester.track(body, hasUserAgent);\n\n if (result.ok) {\n KameleoonLogger.info`Successful request for tracking visitors: ${trackedVisitors}, data: ${pendingData}`;\n this.updateDataStatus(pendingData, TrackingStatus.Sent);\n } else {\n KameleoonLogger.error('Tracking request failed');\n KameleoonLogger.info`Failed request for tracking visitors: ${trackedVisitors}, data: ${pendingData}`;\n this.updateDataStatus(pendingData, TrackingStatus.Unsent);\n\n let notTrackedVisitors: ScheduledVisitorsType = {};\n for (let { visitorCode, isConsentProvided } of trackedVisitors) {\n visitorCode = `_${visitorCode}`;\n notTrackedVisitors[visitorCode] = {\n isConsentProvided: isConsentProvided,\n };\n }\n this.addNotTrackedVisitors(notTrackedVisitors);\n }\n }\n\n private addNotTrackedVisitors(\n notTrackedVisitors: ScheduledVisitorsType,\n ): void {\n const storageResult = this.trackingStorage.read();\n\n if (!storageResult.ok) {\n return;\n }\n\n const { scheduledVisitors } = storageResult.data;\n\n Object.entries(notTrackedVisitors).forEach(\n ([visitorCode, { isConsentProvided }]) => {\n if (!scheduledVisitors[visitorCode]) {\n scheduledVisitors[visitorCode] = { isConsentProvided };\n }\n },\n );\n\n this.trackingStorage.write({\n scheduledVisitors: scheduledVisitors,\n } as TrackingDataType);\n }\n\n private updateDataStatus(\n data: PendingDataType,\n status: TrackingStatus,\n ): void {\n let updatedData: { [visitorCode: string]: KameleoonDataType[] } = {};\n\n for (const [visitorCode, { visitorData, variationData }] of Object.entries(\n data,\n )) {\n const visitorDataForUpdate = visitorData\n .filter((dataItem) => !(dataItem instanceof StaticData))\n .map((dataItem) => {\n const item = dataItem as KameleoonDataType;\n item.status = status;\n return item;\n });\n\n if (visitorDataForUpdate.length) {\n updatedData[visitorCode] = visitorDataForUpdate;\n }\n\n const experimentIdList = variationData.map((dataItem) =>\n String(dataItem.experimentId),\n );\n\n this.variationConfiguration.updateDataStatus({\n visitorCode,\n experimentIdList,\n status,\n });\n }\n\n if (Object.keys(updatedData).length === 0) {\n return;\n }\n\n if (status === TrackingStatus.Sent) {\n this.dataManager.storeTrackedData(updatedData);\n } else {\n this.dataManager.storeData(updatedData, false);\n }\n }\n\n private getUnsentVisitorData(\n visitorCode: string,\n isConsentProvided: boolean,\n ): (KameleoonDataType | StaticData)[] {\n const unsentData = this.dataManager.getUnsentData(visitorCode);\n const resultData: (KameleoonDataType | StaticData)[] = [];\n\n if (!unsentData.length) {\n return [];\n }\n\n for (const data of unsentData) {\n if (!data.url) {\n continue;\n }\n if (\n !isConsentProvided &&\n (!this.clientConfiguration.hasAnyTargetedDeliveryRule ||\n data instanceof StaticData ||\n data.data.type !== KameleoonData.Conversion)\n ) {\n continue;\n }\n\n resultData.push(data);\n }\n\n if (resultData.length) {\n const pendingData: KameleoonDataType[] = resultData\n .filter((data) => !(data instanceof StaticData))\n .map((data) => {\n const item = data as KameleoonDataType;\n item.status = TrackingStatus.Pending;\n return item;\n });\n\n this.dataManager.storeTrackedData({\n [visitorCode]: pendingData,\n });\n }\n\n return resultData;\n }\n\n private getUnsentVariationData(\n visitorCode: string,\n isConsentProvided: boolean,\n ): BaseVariationDataType[] {\n const unsentData = this.variationConfiguration.getUnsentData(visitorCode);\n const sentExperimentIds = new Set<string>();\n\n if (!unsentData.length) {\n return [];\n }\n\n const resultData = unsentData.filter((item) => {\n const isIncluded = item.isTargetedRule || isConsentProvided;\n\n if (isIncluded) {\n sentExperimentIds.add(String(item.experimentId));\n }\n\n return isIncluded;\n });\n\n this.variationConfiguration.updateDataStatus({\n visitorCode,\n experimentIdList: Array.from(sentExperimentIds),\n status: TrackingStatus.Pending,\n });\n\n return resultData;\n }\n}\n","import { Err, Ok, Result } from 'ts-res';\nimport { CacheManager } from './cacheManager';\nimport {\n ClientConfiguration,\n FeatureVariableType,\n JSONType,\n RuleType,\n} from './clientConfiguration';\nimport { ClientSettings } from './clientSettings';\nimport {\n CACHE_CLEANUP_TIMEOUT,\n DEFAULT_VISITOR_DATA_FILTERS,\n IN_HOLDOUT_VARIATION_KEY,\n OFF_VARIATION_KEY,\n} from './constants';\nimport {\n Conversion,\n CustomData,\n DataManager,\n KameleoonDataType,\n} from './kameleoonData';\nimport { WAREHOUSE_AUDIENCE_KEY } from './constants';\nimport { KameleoonError, KameleoonException } from './kameleoonError';\nimport { Requester, UrlProvider } from './requester';\nimport {\n ClientDataType,\n KameleoonStorageKey,\n VariationDataType,\n DataStorage,\n IStorage,\n DataInfoType,\n TrackingDataType,\n StorageCleanupManager,\n} from './storage';\nimport {\n TrackConversionParamsType,\n FeatureFlagType,\n GetFeatureFlagVariableParamsType,\n FeatureVariableResultType,\n SDKCoreParameters,\n TrackingCacheItemType,\n RemoteVisitorDataParamsType,\n GetVisitorWarehouseAudienceParamsType,\n SetUserConsentParametersType,\n FeatureFlagVariableType,\n KameleoonVariationType,\n GetFeatureVariablesParamsType,\n VariableType,\n KameleoonVariableType,\n GetFeatureVariationParametersType,\n GetVariationParamsType,\n GetVariationsParamsType,\n IsFeatureFlagActiveParamsType,\n TrackingStatus,\n SetForcedVariationParametersType,\n EvaluatedExperimentType,\n EvaluateParametersType,\n FlushParamsType,\n DataFile,\n Rule,\n Variable,\n Variation,\n} from './types';\nimport { ExternalPackageInfoType } from './sdkInfoTypes';\nimport { IVisitorCodeManager } from './visitorCodeManager';\nimport { Parser, Utilities } from './utilities';\nimport {\n FeatureFlagVariationType,\n VariationConfiguration,\n} from './variationConfiguration';\nimport { IKameleoonClient } from './kameleoonClientInterface';\nimport { ConditionFactory, TargetingDataType } from './targeting';\nimport { KameleoonEventSource } from './eventSource';\nimport { DEFAULT_MAX_AGE, PATH, ZERO_MAX_AGE } from './visitorCodeManager';\nimport { EventCallbackType, EventManager, EventType } from './eventManager';\nimport { Tracker } from './tracking';\nimport { KameleoonLogger, LogLevel } from 'src/logging';\nimport {\n ForcedExperimentVariationDataType,\n ForcedFeatureVariationDataType,\n ForcedVariationRuleType,\n ForcedVariationVarByExpType,\n ForcedExperimentVariationType,\n ForcedFeatureVariationType,\n LegalConsent,\n LegalConsentDataType,\n StorageConsentDataType,\n} from 'src/storage/types';\nimport { Hasher } from 'src/hasher';\nimport {\n FeatureFlagType as ConfigFeatureFlagType,\n ConsentBlockingBehaviour,\n} from './clientConfiguration/types';\nimport { KameleoonVisitorDataType } from 'src/kameleoonData/types';\nimport { ConditionFactoryInstance } from 'src/targeting/conditions/conditionFactoryInstance';\nimport { TargetedSegment } from 'src/kameleoonData/targetedSegment';\n\n/**\n * @class\n * KameleoonClient - a class for creating kameleoon client instance\n * for communicating with Kameleoon JavaScript SDK Core, when new instance is created\n */\nexport class KameleoonClient implements IKameleoonClient {\n private variationConfiguration: VariationConfiguration;\n private clientConfiguration: ClientConfiguration;\n private dataManager: DataManager;\n private consentDataStorage: IStorage<StorageConsentDataType>;\n private trackingCache: CacheManager<TrackingCacheItemType>;\n private requester: Requester;\n private externalPackageInfo: ExternalPackageInfoType;\n protected initialized: boolean = false;\n private visitorCodeManager: IVisitorCodeManager;\n private eventManager: EventManager;\n protected readonly tracker: Tracker;\n private environment: string;\n protected readonly stubMode?: boolean;\n\n /**\n * @param {SDKCoreParameters} sdkCoreParameters - parameters for initializing sdk core\n */\n constructor({\n siteCode,\n dependencies,\n configuration,\n internalConfiguration,\n stubMode,\n }: SDKCoreParameters) {\n this.stubMode = stubMode;\n if (stubMode) {\n this.variationConfiguration = {} as any;\n this.clientConfiguration = {} as any;\n this.dataManager = {} as any;\n this.consentDataStorage = {} as any;\n this.trackingCache = {} as any;\n this.requester = {} as any;\n this.externalPackageInfo = {} as any;\n this.visitorCodeManager = {} as any;\n this.eventManager = {} as any;\n this.tracker = {} as any;\n this.environment = '';\n return;\n }\n const logger = internalConfiguration?.externals.externalLogger;\n if (logger) {\n KameleoonLogger.setLogger(logger);\n }\n ConditionFactoryInstance.setConditionFactoryInstance(\n new ConditionFactory(),\n );\n KameleoonLogger.debug`CALL: new KameleoonClient(siteCode: ${siteCode}, dependencies: ${dependencies}, configuration: ${configuration})`;\n\n const { settings: clientSettings } = new ClientSettings(\n siteCode,\n configuration,\n );\n this.environment = clientSettings.environment;\n const {\n externalStorage,\n externalEventSource,\n externalPackageInfo,\n externalVisitorCodeManager,\n externalRequester,\n externalPRNG,\n customDataManager,\n } = internalConfiguration.externals;\n\n const { useAbortController } = internalConfiguration.settings;\n const trackingCache = new CacheManager<TrackingCacheItemType>(\n CACHE_CLEANUP_TIMEOUT,\n );\n\n const clientDataStorage = new DataStorage<ClientDataType>(\n externalStorage,\n KameleoonStorageKey.ClientData,\n );\n\n const variationDataStorage = new DataStorage<VariationDataType>(\n externalStorage,\n KameleoonStorageKey.VariationData,\n );\n const forcedVariationDataStorage =\n new DataStorage<ForcedExperimentVariationDataType>(\n externalStorage,\n KameleoonStorageKey.ForcedExperimentVariation,\n );\n const simulatedVariationDataStorage =\n new DataStorage<ForcedFeatureVariationDataType>(\n externalStorage,\n KameleoonStorageKey.ForcedFeatureVariation,\n );\n const consentDataStorage = new DataStorage<StorageConsentDataType>(\n externalStorage,\n KameleoonStorageKey.ConsentData,\n );\n const trackingStorage = new DataStorage<TrackingDataType>(\n externalStorage,\n KameleoonStorageKey.TrackingData,\n );\n\n let dataManager = customDataManager;\n if (!dataManager) {\n const targetingDataStorage = new DataStorage<TargetingDataType>(\n externalStorage,\n KameleoonStorageKey.TargetingData,\n );\n const dataInfoStorage = new DataStorage<DataInfoType>(\n externalStorage,\n KameleoonStorageKey.DataInfo,\n );\n\n dataManager = new DataManager({\n dataStorage: targetingDataStorage,\n infoStorage: dataInfoStorage,\n cleanupInterval: clientSettings.cleanupInterval,\n packageInfo: externalPackageInfo,\n });\n }\n\n const urlProvider = dependencies?.urlProvider ?? new UrlProvider();\n\n urlProvider.initialize({\n domain: clientSettings.networkDomain,\n siteCode: clientSettings.siteCode,\n packageInfo: externalPackageInfo,\n environment: clientSettings.environment,\n });\n\n const requester = new Requester({\n urlProvider,\n useAbortController,\n packageInfo: externalPackageInfo,\n externalRequester: externalRequester,\n requestTimeout: clientSettings.requestTimeout,\n trackRetryDelay: clientSettings.trackRetryDelay,\n });\n\n const eventSource = new KameleoonEventSource({\n siteCode: clientSettings.siteCode,\n externalEventSource,\n urlProvider,\n });\n\n const eventManager = new EventManager();\n\n const clientConfiguration = new ClientConfiguration({\n urlProvider,\n storage: clientDataStorage,\n updateInterval: clientSettings.updateInterval,\n dataManager,\n eventManager,\n requester,\n eventSource,\n externalVisitorCodeManager,\n externalPackageInfo,\n defaultDataFile: configuration?.defaultDataFile,\n });\n\n const variationConfiguration = new VariationConfiguration(\n variationDataStorage,\n forcedVariationDataStorage,\n simulatedVariationDataStorage,\n externalVisitorCodeManager,\n clientConfiguration,\n );\n\n const tracker = new Tracker({\n dataManager,\n trackingStorage,\n variationConfiguration,\n requester,\n trackingInterval: clientSettings.trackingInterval,\n prng: externalPRNG,\n clientConfiguration,\n });\n\n this.tracker = tracker;\n this.variationConfiguration = variationConfiguration;\n this.requester = requester;\n this.trackingCache = trackingCache;\n this.dataManager = dataManager;\n this.clientConfiguration = clientConfiguration;\n this.externalPackageInfo = externalPackageInfo;\n this.consentDataStorage = consentDataStorage;\n this.visitorCodeManager = externalVisitorCodeManager;\n this.eventManager = eventManager;\n\n if (clientSettings.cleanupInterval !== null) {\n new StorageCleanupManager(\n externalStorage,\n clientSettings.cleanupInterval,\n );\n }\n KameleoonLogger.debug`RETURN: new KameleoonClient(siteCode: ${siteCode}, dependencies: ${dependencies}, configuration: ${configuration})`;\n }\n\n public async initialize(): Promise<boolean> {\n if (this.stubMode) {\n return false;\n }\n KameleoonLogger.info('CALL: KameleoonClient.initialize()');\n const result = await this.clientConfiguration.initialize();\n result.throw();\n\n this.initialized = true;\n\n KameleoonLogger.info`RETURN: KameleoonClient.initialize() -> (result: ${result.ok})`;\n return result.ok;\n }\n\n public addData(visitorCode: string, ...data: KameleoonDataType[]): void {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.addData(visitorCode: ${visitorCode}, data: ${data})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.dataManager.storeData(visitorCode, ...data).throw();\n KameleoonLogger.info`RETURN: KameleoonClient.addData(visitorCode: ${visitorCode}, data: ${data})`;\n }\n\n public async getRemoteVisitorData({\n visitorCode,\n shouldAddData = true,\n filters = DEFAULT_VISITOR_DATA_FILTERS,\n }: RemoteVisitorDataParamsType): Promise<KameleoonDataType[]> {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.getRemoteVisitorData(visitorCode: ${visitorCode}, shouldAddData: ${shouldAddData}, filters: ${filters})`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const { previousVisitAmount } = filters;\n\n if (\n typeof previousVisitAmount === 'number' &&\n (previousVisitAmount < 1 || previousVisitAmount > 25)\n ) {\n throw new KameleoonError(KameleoonException.VisitAmount);\n }\n\n const isUniqueIdentifier = this.dataManager.isUniqueIdentifier(visitorCode);\n\n const result = await this.requester.getVisitorData({\n visitorCode,\n filters,\n isMappingIdentifier: isUniqueIdentifier,\n });\n const data = result.throw();\n\n const { visitorData, storageVisitorData, visitsData, mappingIdentifier } =\n Parser.parseVisitorData({\n data,\n filters,\n visitorCode,\n dataManager: this.dataManager,\n variationConfiguration: this.variationConfiguration,\n });\n\n for (const dataItem of storageVisitorData) {\n if (shouldAddData || this.dataManager.isPersistentCustomData(dataItem)) {\n this.addData(visitorCode, dataItem);\n }\n }\n\n // --- Note ---\n // Data on visits amount and time stamps is not returned to a user\n if (visitsData && shouldAddData) {\n this.addData(visitorCode, visitsData);\n }\n\n if (filters?.visitorCode && mappingIdentifier) {\n this.dataManager.setMappingIdentifier(visitorCode, mappingIdentifier);\n }\n\n KameleoonLogger.info`RETURN: KameleoonClient.getRemoteVisitorData(visitorCode: ${visitorCode}, shouldAddData: ${shouldAddData}, filters: ${filters}) -> (visitorData: ${visitorData})`;\n return visitorData;\n }\n\n public trackConversion({\n visitorCode,\n goalId,\n negative,\n revenue,\n metadata,\n }: TrackConversionParamsType): void {\n if (this.stubMode) {\n return;\n }\n KameleoonLogger.info`CALL: KameleoonClient.trackConversion(visitorCode: ${visitorCode}, goalId: ${goalId}, negative: ${negative}, revenue: ${revenue}, metadata: ${metadata})`;\n this.addData(\n visitorCode,\n new Conversion({ goalId, revenue, negative, metadata }),\n );\n this.flush(visitorCode);\n KameleoonLogger.info`RETURN: KameleoonClient.trackConversion(visitorCode: ${visitorCode}, goalId: ${goalId}, negative: ${negative}, revenue: ${revenue}, metadata: ${metadata})`;\n }\n\n public flush(params?: string | FlushParamsType): void {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n let visitorCode: string | undefined;\n let isInstant: boolean = false;\n if (typeof params === 'string') {\n visitorCode = params;\n } else if (params) {\n visitorCode = params.visitorCode;\n isInstant = params.instant ?? false;\n }\n\n KameleoonLogger.info`CALL: KameleoonClient.flush(visitorCode: ${visitorCode}, instant: ${isInstant})`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n if (typeof visitorCode === 'string') {\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n if (isInstant) {\n this.tracker.sendDataForVisitor(\n visitorCode,\n this._isConsentProvided(visitorCode),\n );\n } else {\n this.tracker.scheduleVisitor(\n visitorCode,\n this._isConsentProvided(visitorCode),\n );\n }\n } else {\n for (const visitorCodeKey of this.dataManager.unsentDataVisitors) {\n this.tracker.scheduleVisitor(\n visitorCodeKey,\n this._isConsentProvided(visitorCodeKey),\n );\n }\n for (const visitorCodeKey of this.variationConfiguration.getVisitorsWithUnsentData()) {\n this.tracker.scheduleVisitor(\n visitorCodeKey,\n this._isConsentProvided(visitorCodeKey),\n );\n }\n if (isInstant) {\n this.tracker.sendDataAll();\n }\n }\n\n KameleoonLogger.info`RETURN: KameleoonClient.flush(visitorCode: ${visitorCode}, instant: ${isInstant})`;\n }\n\n public getFeatureFlags(): FeatureFlagType[] {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info('CALL: KameleoonClient.getFeatureFlags()');\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const featureFlags = this.clientConfiguration.featureFlags;\n const resultFeatureFlags: FeatureFlagType[] = [];\n\n featureFlags.forEach(({ id, featureKey }) => {\n resultFeatureFlags.push({\n id,\n key: featureKey,\n });\n });\n\n KameleoonLogger.info`RETURN: KameleoonClient.getFeatureFlags() -> (FeatureFlags: ${resultFeatureFlags})`;\n return resultFeatureFlags;\n }\n\n public getVisitorFeatureFlags(visitorCode: string): FeatureFlagType[] {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${visitorCode})`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const activeVariations = this._getActiveFeatureVariations(visitorCode);\n const resultFeatureFlags: FeatureFlagType[] = [];\n\n activeVariations.forEach(({ featureFlagId, featureKey }) => {\n resultFeatureFlags.push({\n id: featureFlagId,\n key: featureKey,\n });\n });\n\n KameleoonLogger.info`RETURN: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${visitorCode}) -> (FeatureFlags: ${resultFeatureFlags})`;\n return resultFeatureFlags;\n }\n\n public getVariation({\n visitorCode,\n featureKey,\n track = true,\n }: GetVariationParamsType): Variation {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.getVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const variation = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track,\n }).throw();\n\n KameleoonLogger.info`RETURN: KameleoonClient.getVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track}) -> (variation: ${variation})`;\n return variation;\n }\n\n public getVariations({\n visitorCode,\n onlyActive = false,\n track = true,\n }: GetVariationsParamsType): Map<string, Variation> {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.getVariations(visitorCode: ${visitorCode}, onlyActive: ${onlyActive}, track: ${track})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const variations: Map<string, Variation> = new Map();\n const featureFlags = this.clientConfiguration.featureFlags;\n\n for (const featureFlag of featureFlags.values()) {\n try {\n const variation = this._getFeatureVariation({\n visitorCode,\n featureKey: featureFlag.featureKey,\n track,\n });\n if (\n variation.ok &&\n (!onlyActive || variation.data.key !== OFF_VARIATION_KEY)\n ) {\n variations.set(featureFlag.featureKey, variation.data);\n }\n } catch (err) {\n if (\n err instanceof KameleoonError &&\n err.type !== KameleoonException.FeatureFlagEnvironmentDisabled\n ) {\n throw err;\n }\n }\n }\n\n KameleoonLogger.info`RETURN: KameleoonClient.getVariations(visitorCode: ${visitorCode}, onlyActive: ${onlyActive}, track: ${track}) -> (variations: ${variations})`;\n\n return variations;\n }\n\n public getActiveFeatureFlags(\n visitorCode: string,\n ): Map<string, KameleoonVariationType> {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.getActiveFeatureFlags(visitorCode: ${visitorCode})`;\n\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const activeVariations = this._getActiveFeatureVariations(visitorCode);\n const resultFeatureList: Map<string, KameleoonVariationType> = new Map();\n\n activeVariations.forEach((variation) => {\n const { variationKey, featureKey, variationId, experimentId } = variation;\n\n let variables: FeatureVariableType[] = [];\n\n if (variationId !== null && experimentId !== null) {\n variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n }\n\n const resultVariables = variables.map((variable) =>\n Parser.parseFeatureVariable(variable).throw(),\n );\n\n resultFeatureList.set(variation.featureKey, {\n name: '',\n key: variationKey,\n id: variationId,\n experimentId,\n variables: resultVariables,\n });\n });\n\n KameleoonLogger.info`RETURN: KameleoonClient.getActiveFeatureFlags(visitorCode: ${visitorCode}) -> (FeatureFlags: ${resultFeatureList})`;\n\n return resultFeatureList;\n }\n\n public getFeatureFlagVariationKey(\n visitorCode: string,\n featureKey: string,\n ): string {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${visitorCode}, featureKey: ${featureKey})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const { key } = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track: true,\n }).throw();\n\n KameleoonLogger.info`RETURN: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (variationKey: ${key})`;\n return key;\n }\n\n public getFeatureFlagVariable({\n visitorCode,\n featureKey,\n variableKey,\n }: GetFeatureFlagVariableParamsType): FeatureFlagVariableType {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.getFeatureFlagVariable(visitorCode: ${visitorCode}, featureKey: ${featureKey}, variableKey: ${variableKey})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const { key: variationKey } = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track: true,\n }).throw();\n\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n const variable = variables.find((item) => item.key === variableKey);\n\n if (!variable) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagVariableNotFound,\n variableKey,\n visitorCode,\n );\n }\n\n const { type, value } = Parser.parseFeatureVariable(variable).throw();\n\n const featureFlagVariable = { type, value } as FeatureFlagVariableType;\n KameleoonLogger.info`RETURN: KameleoonClient.getFeatureFlagVariable(visitorCode: ${visitorCode}, featureKey: ${featureKey}, variableKey: ${variableKey}) -> (FeatureFlagVariable: ${featureFlagVariable})`;\n return featureFlagVariable;\n }\n\n public getFeatureFlagVariables(\n visitorCode: string,\n featureKey: string,\n ): Variable[] {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.getFeatureFlagVariables(visitorCode: ${visitorCode}, featureKey: ${featureKey})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const { key: variationKey } = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track: true,\n }).throw();\n\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n const resultVariables: FeatureVariableResultType[] = [];\n\n for (const variable of variables) {\n const parsedVariable = Parser.parseFeatureVariable(variable).throw();\n resultVariables.push(parsedVariable);\n }\n\n KameleoonLogger.info`RETURN: KameleoonClient.getFeatureFlagVariables(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (FeatureFlagVariables: ${resultVariables})`;\n return resultVariables;\n }\n\n public isFeatureFlagActive(visitorCode: string, featureKey: string): boolean;\n public isFeatureFlagActive({\n visitorCode,\n featureKey,\n track,\n }: IsFeatureFlagActiveParamsType): boolean;\n public isFeatureFlagActive(\n firstParam: string | IsFeatureFlagActiveParamsType,\n secondParam?: string,\n ): boolean {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n let [visitorCode, featureKey, track] = ['', '', true];\n\n if (typeof firstParam === 'string') {\n visitorCode = firstParam;\n featureKey = secondParam!;\n } else {\n [visitorCode, featureKey] = [\n firstParam.visitorCode,\n firstParam.featureKey,\n ];\n\n if (firstParam.track !== undefined) {\n track = firstParam.track;\n }\n }\n KameleoonLogger.info`CALL: KameleoonClient.isFeatureFlagActive(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track ${track})`;\n\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n try {\n const { key } = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track,\n }).throw();\n\n const isActive = key !== OFF_VARIATION_KEY;\n\n KameleoonLogger.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track}) -> (isActive: ${isActive})`;\n return isActive;\n } catch (err) {\n if (\n err instanceof KameleoonError &&\n err.type === KameleoonException.FeatureFlagEnvironmentDisabled\n ) {\n KameleoonLogger.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track}) -> (isActive: false)`;\n return false;\n }\n\n throw err;\n }\n }\n\n public async getRemoteData(key: string): Promise<JSONType> {\n if (this.stubMode) {\n return null;\n }\n KameleoonLogger.info`CALL: KameleoonClient.getRemoteData(key: ${key})`;\n const remoteData = await this.requester.getRemoteData(key);\n KameleoonLogger.info`RETURN: KameleoonClient.getRemoteData(key: ${key}) -> (remoteData: ${remoteData})`;\n return remoteData.throw();\n }\n\n public async getVisitorWarehouseAudience({\n visitorCode,\n customDataIndex,\n warehouseKey,\n }: GetVisitorWarehouseAudienceParamsType): Promise<CustomData | null> {\n if (this.stubMode) {\n return null;\n }\n KameleoonLogger.info`CALL: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${visitorCode}, customDataIndex: ${customDataIndex}, warehouseKey: ${warehouseKey})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const data = await this.getRemoteData(warehouseKey || visitorCode);\n\n if (!data) {\n throw new KameleoonError(\n KameleoonException.RemoteData,\n `No data found for ${warehouseKey || visitorCode} key`,\n );\n }\n\n if (\n !data[WAREHOUSE_AUDIENCE_KEY] ||\n Object.keys(data[WAREHOUSE_AUDIENCE_KEY]).length === 0\n ) {\n KameleoonLogger.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${visitorCode}, customDataIndex: ${customDataIndex}, warehouseKey: ${warehouseKey}) -> (customData: null)`;\n return null;\n }\n\n const customData = new CustomData(\n customDataIndex,\n ...Object.keys(data[WAREHOUSE_AUDIENCE_KEY]),\n );\n\n this.dataManager.storeData(visitorCode, customData);\n\n KameleoonLogger.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${visitorCode}, customDataIndex: ${customDataIndex}, warehouseKey: ${warehouseKey}) -> (customData: ${customData})`;\n return customData;\n }\n\n public onEvent<E extends EventType>(\n event: E,\n callback: EventCallbackType<E>,\n ): void {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info`CALL: KameleoonClient.onEvent(event: ${event}, callback)`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.eventManager.addEventHandler(event, callback);\n KameleoonLogger.info`RETURN: KameleoonClient.onEvent(event: ${event}, callback)`;\n }\n\n public getEngineTrackingCode(visitorCode: string): string {\n if (this.stubMode) {\n return '';\n }\n KameleoonLogger.info`CALL: KameleoonClient.getEngineTrackingCode(visitorCode: ${visitorCode})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const trackingCode = Utilities.getTrackingCode(\n this.trackingCache,\n visitorCode,\n );\n KameleoonLogger.info`RETURN: KameleoonClient.getEngineTrackingCode(visitorCode: ${visitorCode}) -> (trackingCode: ${trackingCode})`;\n return trackingCode;\n }\n\n public isInitialized(): boolean {\n KameleoonLogger.debug`CALL/RETURN: KameleoonClient.isInitialized() -> (initialized: ${this.initialized})`;\n return this.initialized;\n }\n\n public setLogLevel(level: LogLevel): void {\n KameleoonLogger.setLogLevel(level);\n }\n\n public setForcedVariation({\n visitorCode,\n experimentId,\n variationKey,\n forceTargeting = true,\n }: SetForcedVariationParametersType): void {\n if (this.stubMode) {\n return;\n }\n KameleoonLogger.info`CALL: KameleoonClient.setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting})`;\n\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n this._setForcedVariation({\n visitorCode,\n experimentId,\n variationKey,\n forceTargeting,\n }).throw();\n\n KameleoonLogger.info`RETURN: KameleoonClient.setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting})`;\n }\n\n public evaluateAudiences(visitorCode: string): void {\n if (this.stubMode) {\n return;\n }\n KameleoonLogger.info`CALL: KameleoonClient.evaluateAudiences(visitorCode: ${visitorCode})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n const targetedSegments: TargetedSegment[] = [];\n\n const targetingData = this.dataManager.getVisitorData(visitorCode);\n for (let segment of this.clientConfiguration.segments.values()) {\n if (!segment.audienceTracking) {\n continue;\n }\n\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId: null,\n clientConfiguration: this.clientConfiguration,\n packageInfo: this.externalPackageInfo,\n dataManager: this.dataManager,\n variationConfiguration: this.variationConfiguration,\n });\n\n const isTargeted = targetingResult.ok && targetingResult.data;\n\n if (isTargeted) {\n KameleoonLogger.info`Visitor ${visitorCode} has been targeted for ${segment}`;\n targetedSegments.push(new TargetedSegment(Number(segment.id)));\n }\n }\n\n if (targetedSegments.length !== 0) {\n this.dataManager.storeData(visitorCode, ...targetedSegments);\n }\n\n this.flush(visitorCode);\n\n KameleoonLogger.info`RETURN: KameleoonClient.evaluateAudiences(visitorCode: ${visitorCode})`;\n }\n\n public getDataFile(): DataFile {\n const dataFile = {\n featureFlags: new Map(),\n };\n if (this.stubMode) {\n return dataFile;\n }\n KameleoonLogger.debug`CALL: KameleoonClient.getDataFile()`;\n this.clientConfiguration.featureFlags.forEach((featureFlag, key) => {\n const variationsMap = new Map<string, Variation>();\n\n featureFlag.variations.forEach((sourceVariation) => {\n const variablesMap = new Map<string, KameleoonVariableType>();\n sourceVariation.variables.forEach((variable) => {\n try {\n const parsedVariable =\n Parser.parseFeatureVariable(variable).throw();\n variablesMap.set(variable.key, parsedVariable);\n } catch (err) {\n KameleoonLogger.error`Error parsing variable ${variable.key} of feature flag ${featureFlag.featureKey}: ${err}`;\n }\n });\n\n variationsMap.set(sourceVariation.key, {\n name: sourceVariation.name ?? '',\n key: sourceVariation.key,\n id: null,\n experimentId: null,\n variables: variablesMap,\n });\n });\n\n const rules: Rule[] = featureFlag.rules.map((rule) => {\n const ruleVariations = new Map<string, Variation>();\n rule.variationByExposition.forEach((varByExp) => {\n const baseVariation = variationsMap.get(varByExp.variationKey);\n if (!baseVariation) return;\n\n ruleVariations.set(baseVariation.key, {\n name: baseVariation.name,\n key: baseVariation.key,\n id: varByExp.variationId,\n experimentId: rule.experimentId,\n variables: baseVariation.variables,\n });\n });\n\n return { variations: ruleVariations };\n });\n\n dataFile.featureFlags.set(key, {\n variations: variationsMap,\n environmentEnabled: featureFlag.environmentEnabled,\n rules,\n defaultVariationKey: featureFlag.defaultVariationKey,\n });\n });\n KameleoonLogger.debug`RETURN: KameleoonClient.getDataFile() -> (dataFile: ${dataFile})`;\n return dataFile;\n }\n\n protected setUserConsent({\n visitorCode,\n consent,\n setData,\n }: SetUserConsentParametersType): void {\n if (this.stubMode) {\n return;\n }\n KameleoonLogger.info`CALL: KameleoonClient.setUserConsent(visitorCode: ${visitorCode}, consent: ${consent}, setData: ${setData})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n\n this.updateConsentData(visitorCode, consent);\n\n if (consent) {\n setData({\n visitorCode,\n key: KameleoonStorageKey.VisitorCode,\n maxAge: DEFAULT_MAX_AGE,\n path: PATH,\n });\n }\n\n KameleoonLogger.info`RETURN: KameleoonClient.setUserConsent(visitorCode: ${visitorCode}, consent: ${consent}, setData: ${setData})`;\n }\n\n private updateConsentData(visitorCode: string, consent: boolean): void {\n const readResult = this.consentDataStorage.read();\n const legalConsent = consent ? LegalConsent.Given : LegalConsent.NotGiven;\n if (!readResult.ok) {\n if (readResult.error.type === KameleoonException.StorageEmpty) {\n this.consentDataStorage.write({\n [visitorCode]: {\n consent: legalConsent,\n },\n });\n }\n return;\n }\n\n const data = readResult.data;\n data[visitorCode] = {\n consent: legalConsent,\n };\n this.consentDataStorage.write(data);\n }\n\n private getLegalConsent(visitorCode: string): LegalConsent {\n KameleoonLogger.debug`CALL: KameleoonClient.getLegalConsent(visitorCode: ${visitorCode})`;\n let legalConsent: LegalConsent;\n const consentDataResult = this.consentDataStorage.read();\n legalConsent = consentDataResult.ok\n ? this.extractLegalConsent(consentDataResult.data[visitorCode])\n : LegalConsent.Unknown;\n KameleoonLogger.debug`RETURN: KameleoonClient.getLegalConsent(visitorCode: ${visitorCode}) -> (legalConsent: ${legalConsent})`;\n return legalConsent;\n }\n\n private extractLegalConsent(\n consentData: LegalConsentDataType | undefined,\n ): LegalConsent {\n if (consentData === undefined) return LegalConsent.Unknown;\n\n if (typeof consentData === 'boolean') {\n return consentData ? LegalConsent.Given : LegalConsent.NotGiven;\n }\n\n const value = consentData.consent;\n if (typeof value === 'boolean')\n return value ? LegalConsent.Given : LegalConsent.NotGiven;\n\n return value as LegalConsent;\n }\n\n protected _isConsentProvided(visitorCode: string): boolean {\n KameleoonLogger.debug`CALL: KameleoonClient._isConsentProvided(visitorCode: ${visitorCode})`;\n const { isConsentRequired } = this.clientConfiguration;\n\n const isConsentProvided =\n !isConsentRequired ||\n this.getLegalConsent(visitorCode) == LegalConsent.Given;\n\n KameleoonLogger.debug`RETURN: KameleoonClient._isConsentProvided(visitorCode: ${visitorCode}) -> (isConsentProvided: ${isConsentProvided})`;\n return isConsentProvided;\n }\n\n private _getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n }: GetFeatureVariablesParamsType): FeatureVariableType[] {\n KameleoonLogger.debug`CALL: KameleoonClient._getFeatureVariables(visitorCode: ${visitorCode}, featureKey: ${featureKey}, variationKey: ${variationKey})`;\n const featureFlags = this.clientConfiguration.featureFlags;\n const featureFlag = featureFlags.get(featureKey);\n\n if (!featureFlag) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey,\n );\n }\n const variation = featureFlag.variations.find(\n (item) => item.key === variationKey,\n );\n\n if (!variation) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagVariationNotFound,\n variationKey,\n visitorCode,\n );\n }\n\n KameleoonLogger.debug`RETURN: KameleoonClient._getFeatureVariables(visitorCode: ${visitorCode}, featureKey: ${featureKey}, variationKey: ${variationKey}) -> (variables: ${variation.variables})`;\n return variation.variables;\n }\n\n // @deprecated\n // To be removed with the deprecated methods\n private _getActiveFeatureVariations(\n visitorCode: string,\n ): FeatureFlagVariationType[] {\n KameleoonLogger.debug`CALL: KameleoonClient._getActiveFeatureVariations(visitorCode: ${visitorCode})`;\n const featureFlags = this.clientConfiguration.featureFlags;\n const activeVariations: FeatureFlagVariationType[] = [];\n\n for (const featureFlag of featureFlags.values()) {\n if (!featureFlag.environmentEnabled) {\n continue;\n }\n\n try {\n const evalExp = this._evaluate({\n visitorCode,\n featureFlag,\n track: false,\n save: false,\n });\n\n if (evalExp.variationKey !== OFF_VARIATION_KEY) {\n activeVariations.push({\n variationKey: evalExp.variationKey,\n variationId: evalExp.variationId,\n experimentId: evalExp.experimentId,\n featureFlagId: featureFlag.id,\n featureKey: featureFlag.featureKey,\n rule: null,\n isTargetedRule: evalExp.ruleType === RuleType.TARGETED_DELIVERY,\n });\n }\n } catch (err) {\n if (err instanceof KameleoonError) {\n if (err.type != KameleoonException.FeatureFlagEnvironmentDisabled) {\n KameleoonLogger.error`Unexpected error: ${err}`;\n }\n continue;\n }\n }\n }\n\n KameleoonLogger.debug`RETURN: KameleoonClient._getActiveFeatureVariations(visitorCode: ${visitorCode}) -> (activeVariations: ${activeVariations})`;\n return activeVariations;\n }\n\n private _evaluate({\n visitorCode,\n featureFlag,\n track,\n save,\n }: EvaluateParametersType): EvaluatedExperimentType {\n KameleoonLogger.debug`CALL: KameleoonClient._evaluate(visitorCode: ${visitorCode}, featureFlag: ${featureFlag}, track: ${track}, save: ${save})`;\n let evalExp: EvaluatedExperimentType;\n let forcedVariation: ForcedFeatureVariationType | null = null;\n const visitorData = this.dataManager.getVisitorData(visitorCode);\n\n const forcedVariationData =\n this.variationConfiguration.getForcedFeatureVariation(\n visitorCode,\n featureFlag.featureKey,\n );\n if (forcedVariationData.ok) {\n forcedVariation = forcedVariationData.data;\n }\n if (forcedVariation) {\n evalExp = KameleoonClient.EvaluatedExperiment.fromForcedFeatureVariation(\n featureFlag.defaultVariationKey,\n forcedVariation,\n );\n } else if (\n this._isVisitorNotInHoldout(\n visitorCode,\n track,\n save,\n featureFlag,\n visitorData,\n ) &&\n this._isFFUnrestrictedByMEGroup(visitorCode, featureFlag, visitorData)\n ) {\n const visitorIdentifier = this._getCodeForHash(\n visitorCode,\n featureFlag.bucketingCustomDataIndex,\n visitorData,\n );\n\n const legalConsent = this.getLegalConsent(visitorCode);\n\n const variationData = this.variationConfiguration\n .getVariation({\n visitorCode,\n visitorIdentifier,\n featureFlag,\n track,\n withAssignment: save,\n targetingData: visitorData,\n clientConfiguration: this.clientConfiguration,\n dataManager: this.dataManager,\n packageInfo: this.externalPackageInfo,\n legalConsent,\n })\n .throw();\n evalExp =\n KameleoonClient.EvaluatedExperiment.fromVariationData(variationData);\n } else {\n evalExp = KameleoonClient.EvaluatedExperiment.fromDefaultVariationKey(\n featureFlag.defaultVariationKey,\n );\n }\n\n if (\n save &&\n !evalExp.isSimulated &&\n evalExp.experimentId !== null &&\n evalExp.variationId !== null\n ) {\n this.variationConfiguration.updateStoredVariations(visitorCode, {\n [evalExp.experimentId]: {\n variationId: evalExp.variationId,\n isTargetedRule: evalExp.ruleType === RuleType.TARGETED_DELIVERY,\n status: track ? TrackingStatus.Unsent : TrackingStatus.Sent,\n },\n });\n }\n\n this.eventManager.fireEvent(EventType.Evaluation, {\n featureKey: featureFlag.featureKey,\n variation: {\n key: evalExp.variationKey,\n experimentId: evalExp.experimentId,\n id: evalExp.variationId,\n },\n });\n\n KameleoonLogger.debug`RETURN: KameleoonClient._evaluate(visitorCode: ${visitorCode}, featureFlag: ${featureFlag}, track: ${track}, save: ${save}) -> (evalExp: ${evalExp})`;\n return evalExp;\n }\n\n private _isFFUnrestrictedByMEGroup(\n visitorCode: string,\n featureFlag: ConfigFeatureFlagType,\n visitorData?: KameleoonVisitorDataType,\n ): boolean {\n const meGroupName = featureFlag.mutuallyExclusiveGroup;\n if (!meGroupName) {\n return true;\n }\n KameleoonLogger.debug`CALL: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${visitorCode}, featureFlag: ${featureFlag}, visitorData: ${visitorData})`;\n let selected = true;\n\n const meGroup = this.clientConfiguration.meGroups.get(meGroupName);\n if (meGroup) {\n const codeForHash = this._getCodeForHash(\n visitorCode,\n featureFlag.bucketingCustomDataIndex,\n visitorData,\n );\n\n const hashMEGroup = Hasher.getHashDoubleForMEGroup(\n codeForHash,\n meGroupName,\n );\n\n KameleoonLogger.debug`Calculated meGroup hash ${hashMEGroup} for code: ${codeForHash}, meGroup: ${meGroupName}`;\n\n selected = meGroup.getFeatureFlagByHash(hashMEGroup) === featureFlag;\n }\n\n KameleoonLogger.debug`RETURN: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${visitorCode}, featureFlag: ${featureFlag}, visitorData: ${visitorData}) -> (selected: ${selected})`;\n return selected;\n }\n\n private _getFeatureVariation({\n visitorCode,\n featureKey,\n track,\n }: GetFeatureVariationParametersType): Result<Variation, KameleoonError> {\n KameleoonLogger.debug`CALL: KameleoonClient._getFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track})`;\n\n if (!this.initialized) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n const featureFlags = this.clientConfiguration.featureFlags;\n const featureFlag = featureFlags.get(featureKey);\n\n if (!featureFlag) {\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey,\n ),\n );\n }\n\n if (!featureFlag.environmentEnabled) {\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagEnvironmentDisabled,\n featureFlag.featureKey,\n this.environment,\n ),\n );\n }\n\n const evalExp = this._evaluate({\n visitorCode,\n featureFlag,\n track,\n save: true,\n });\n\n const { experimentId, variationId, variationKey, isSimulated } = evalExp;\n\n let resultVariables = new Map<string, Variable>();\n let hasJsCssVariables = false;\n\n try {\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n\n variables.forEach((variable) => {\n if (\n !hasJsCssVariables &&\n (variable.type === VariableType.JS ||\n variable.type === VariableType.CSS)\n ) {\n hasJsCssVariables = true;\n }\n\n const parsedVariable: KameleoonVariableType =\n Parser.parseFeatureVariable(variable).throw();\n\n resultVariables.set(variable.key, parsedVariable);\n });\n } catch (_) {}\n\n if (experimentId && typeof variationId === 'number' && !isSimulated) {\n Utilities.updateCache({\n cacheManager: this.trackingCache,\n hasJsCssVariables,\n visitorCode,\n experimentId,\n variationId,\n });\n }\n\n if (track && !isSimulated) {\n this.tracker.scheduleVisitor(\n visitorCode,\n this._isConsentProvided(visitorCode),\n );\n }\n\n const variationName =\n featureFlag.variations.find((item) => item.key === variationKey)?.name ??\n '';\n\n const resultData: Variation = {\n name: variationName,\n key: variationKey,\n id: variationId,\n experimentId,\n variables: resultVariables,\n };\n\n KameleoonLogger.debug`RETURN: KameleoonClient._getFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track}) -> (variation: ${resultData})`;\n return Ok(resultData);\n }\n\n private _isVisitorNotInHoldout(\n visitorCode: string,\n track: boolean,\n save: boolean,\n featureFlag?: ConfigFeatureFlagType,\n visitorData?: KameleoonVisitorDataType,\n ): boolean {\n const holdout = this.clientConfiguration.holdout;\n if (!holdout) {\n return true;\n }\n KameleoonLogger.debug`CALL: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${visitorCode}, track: ${track}, save: ${save}, featureFlag: ${featureFlag}, visitorData: ${visitorData})`;\n let isNotInHoldout = true;\n\n // Checking if the evaluation is blocked due to the consent policy\n const legalConsent = this.clientConfiguration.isConsentRequired\n ? this.getLegalConsent(visitorCode)\n : LegalConsent.Given;\n if (legalConsent == LegalConsent.NotGiven) {\n const behaviour = this.clientConfiguration.consentBlockingBehaviour;\n if (behaviour == ConsentBlockingBehaviour.CompletelyBlocked) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagEnvironmentDisabled,\n `Evaluation of holdout is blocked because consent is not provided for visitor '${visitorCode}'`,\n );\n }\n }\n\n const codeForHash = this._getCodeForHash(\n visitorCode,\n featureFlag?.bucketingCustomDataIndex,\n visitorData,\n );\n\n const holdoutHash = Hasher.getHashDouble({\n visitorIdentifier: codeForHash,\n respoolTime: null,\n id: String(holdout.experimentId),\n });\n\n KameleoonLogger.debug`Calculated holdoutHash: ${holdoutHash} for visitorCode: ${codeForHash}`;\n\n let varByExp = Utilities.getVariationByHash(\n holdout.variationByExposition,\n holdoutHash,\n );\n\n if (varByExp !== null) {\n isNotInHoldout = varByExp.variationKey !== IN_HOLDOUT_VARIATION_KEY;\n if (save) {\n this.variationConfiguration.updateStoredVariations(visitorCode, {\n [holdout.experimentId]: {\n variationId: varByExp.variationId,\n isTargetedRule: false,\n status: track ? TrackingStatus.Unsent : TrackingStatus.Sent,\n },\n });\n }\n }\n\n KameleoonLogger.debug`RETURN: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${visitorCode}, track: ${track}, save: ${save}, featureFlag: ${featureFlag}, visitorData: ${visitorData}) -> (isNotInHoldout: ${isNotInHoldout})`;\n return isNotInHoldout;\n }\n\n private _setForcedVariation({\n visitorCode,\n experimentId,\n variationKey,\n forceTargeting = true,\n }: SetForcedVariationParametersType): Result<void, KameleoonError> {\n KameleoonLogger.debug`CALL: KameleoonClient._setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting})`;\n\n if (variationKey === null) {\n const writeResult =\n this.variationConfiguration.updateForcedExperimentVariation(\n visitorCode,\n experimentId,\n null,\n );\n KameleoonLogger.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting}) -> (writeResult: ${writeResult})`;\n return writeResult;\n }\n\n let rule = null;\n let varByExp = null;\n\n rule = this.clientConfiguration.experimentMap.get(experimentId);\n if (!rule) {\n KameleoonLogger.error`Experiment with id ${experimentId} not found for visitor ${visitorCode}`;\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagExperimentNotFound,\n experimentId,\n visitorCode,\n ),\n );\n }\n varByExp = rule.variations.get(variationKey!);\n if (varByExp === undefined) {\n KameleoonLogger.error`Variation with key ${variationKey} not found in experiment ${rule} for visitor ${visitorCode}`;\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagVariationNotFound,\n variationKey!,\n visitorCode,\n ),\n );\n }\n\n rule = {\n type: rule.type,\n experimentId: experimentId,\n } as ForcedVariationRuleType;\n varByExp = {\n variationKey: variationKey,\n variationId: varByExp,\n } as ForcedVariationVarByExpType;\n\n const writeResult =\n this.variationConfiguration.updateForcedExperimentVariation(\n visitorCode,\n experimentId,\n {\n rule: rule,\n varByExp: varByExp,\n forceTargeting,\n } as ForcedExperimentVariationType,\n );\n\n KameleoonLogger.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting}) -> (writeResult: ${writeResult})`;\n return writeResult;\n }\n\n private _getCodeForHash(\n visitorCode: string,\n bucketingCustomDataIndex?: number | null,\n visitorData?: KameleoonVisitorDataType,\n ): string {\n KameleoonLogger.debug`CALL: KameleoonClient._getCodeForHash(visitorCode: ${visitorCode}, bucketingCustomDataIndex: ${bucketingCustomDataIndex}, visitorData: ${visitorData})`;\n let codeForHash;\n if (bucketingCustomDataIndex != null) {\n const customData = visitorData?.customData;\n if (customData) {\n const customDataValue = customData[bucketingCustomDataIndex]?.value[0];\n if (customDataValue) {\n codeForHash = customDataValue;\n }\n }\n }\n if (!codeForHash) {\n codeForHash = this.dataManager.getVisitorIdentifier(visitorCode);\n }\n\n KameleoonLogger.debug`RETURN: KameleoonClient._getCodeForHash(visitorCode: ${visitorCode}, bucketingCustomDataIndex: ${bucketingCustomDataIndex}, visitorData: ${visitorData}) -> (codeForHash: ${codeForHash})`;\n return codeForHash;\n }\n\n private static EvaluatedExperiment = class {\n static fromForcedFeatureVariation(\n defaultVariationKey: string,\n forcedFeatureVariation: ForcedFeatureVariationType,\n ): EvaluatedExperimentType {\n let varKey = defaultVariationKey;\n if (forcedFeatureVariation.varByExp) {\n varKey = forcedFeatureVariation.varByExp.variationKey;\n } else if (\n forcedFeatureVariation.rule &&\n forcedFeatureVariation.rule.type === RuleType.EXPERIMENTATION\n ) {\n varKey = OFF_VARIATION_KEY;\n }\n return {\n variationKey: varKey,\n variationId: forcedFeatureVariation.varByExp?.variationId || null,\n experimentId: forcedFeatureVariation.rule?.experimentId || null,\n ruleType: forcedFeatureVariation.rule?.type || null,\n isSimulated: forcedFeatureVariation.simulated,\n };\n }\n\n static fromVariationData(\n variationData: FeatureFlagVariationType,\n ): EvaluatedExperimentType {\n return {\n variationKey: variationData.variationKey,\n variationId: variationData.variationId,\n experimentId: variationData.experimentId,\n ruleType: variationData.rule?.type ?? null,\n isSimulated: false,\n };\n }\n\n static fromDefaultVariationKey(\n defaultVariationKey: string,\n ): EvaluatedExperimentType {\n return {\n variationKey: defaultVariationKey,\n variationId: null,\n experimentId: null,\n ruleType: null,\n isSimulated: false,\n };\n }\n };\n}\n","import { exhaustCheck } from './kameleoonError';\nimport { KameleoonResponseType, RequestType } from './requester';\nimport { SimulateRequestDataType } from './types';\n\n/**\n * KameleoonUtils - a class containing static Kameleoon helper methods\n * */\nexport class KameleoonUtils {\n /**\n * @method simulateSuccessRequest - a method to simulate a successful request based on request type, primarily used for `IExternalRequester` implementations\n *\n * @param {RequestType} requestType - request type\n * @param {SimulateRequestDataType[RequestType]} data - simulate data type for request\n * */\n public static simulateSuccessRequest<T extends RequestType>(\n requestType: T,\n data: SimulateRequestDataType[T],\n ): Promise<KameleoonResponseType> {\n switch (requestType) {\n case RequestType.Tracking:\n return new Promise((resolve) => {\n const response: KameleoonResponseType = {\n status: 204,\n json: () => new Promise((r) => r(null)),\n text: () => new Promise((r) => r('')),\n ok: true,\n };\n\n resolve(response);\n });\n case RequestType.Configuration:\n case RequestType.RemoteData:\n return new Promise((resolve) => {\n const response: KameleoonResponseType = {\n status: 200,\n json: () => new Promise((r) => r(data)),\n text: () => new Promise((r) => r('')),\n ok: true,\n };\n\n resolve(response);\n });\n default:\n exhaustCheck(requestType);\n }\n }\n\n /**\n * @method getCookieValue - a method to get a cookie value by key from a cookie string, primarily used for `IExternalVisitorCodeManager` implementations\n *\n * @param {string} cookie - cookie string\n * @param {string} key - cookie key\n * @returns {string | null} cookie value or null if not found\n * */\n public static getCookieValue(cookie: string, key: string): string | null {\n const pairs = cookie.split('; ');\n const pair = pairs.find((pair) => {\n const [pairKey, pairValue] = pair.split('=');\n\n return pairKey === key && pairValue !== '';\n });\n\n if (pair) {\n return pair.split('=')[1];\n }\n\n return null;\n }\n}\n"],"names":["require$$0","KameleoonException","HttpMethod","RequestType","Header","LogLevel","Ok","Err","Environment","VariableType","TrackingStatus","Milliseconds","CustomDataScope","EventType","KameleoonData","DeviceType","OperatingSystemType","BrowserType","SdkLanguageType","CustomData","Browser","Device","OperatingSystem","Conversion","CookieData","KameleoonStorageKey","LegalConsent","this","undefined","global","require"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,CAAA,MAAM,CAAC,cAAc,CAAC,IAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAA,IAAA,CAAA,GAAW,GAAG,IAAA,CAAA,EAAU,GAAG,MAAM;AACjC;AACA;CACA,SAAS,QAAQ,CAAC,OAAO,EAAE;AAC3B,KAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;AAClB,SAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE;aACrE,IAAI,cAAc,GAAG,6DAA6D;aAClF,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,cAAc,CAAC;AACpE,SAAA;SACQ,IAAI,OAAO,EAAE;AACrB,aAAY,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;AACxC,SAAA;SACQ,MAAM,IAAI,CAAC,KAAK;AACxB,KAAA;KACI,OAAO,IAAI,CAAC,IAAI;AACpB,CAAA;AACA;AACA;CACA,SAAS,MAAM,CAAC,QAAQ,EAAE;AAC1B,KAAI,IAAI,IAAI,CAAC,EAAE,EAAE;SACT,OAAO,IAAI,CAAC,IAAI;AACxB,KAAA;AACA;AACA;AACA;AACA,KAAI,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,CAAA;CACA,SAAS,EAAE,CAAC,OAAO,EAAE;AACrB,KAAI,IAAI,IAAI,CAAC,EAAE,EAAE;SACT,OAAO,IAAI,CAAC,IAAI;AACxB,KAAA;AACA,KAAI,OAAO,OAAO;AAClB,CAAA;CACA,SAAS,GAAG,CAAC,QAAQ,EAAE;AACvB,KAAI,IAAI,IAAI,CAAC,EAAE,EAAE;AACjB,SAAQ,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,KAAA;AACA,KAAI,OAAO,IAAI;AACf,CAAA;CACA,SAAS,EAAE,CAAC,IAAI,EAAE;KACd,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;AACpF,CAAA;AACA,CAAA,IAAA,CAAA,EAAU,GAAG,EAAE;CACf,SAAS,GAAG,CAAC,KAAK,EAAE;KAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;AACvF,CAAA;AACA,CAAA,IAAA,CAAA,GAAW,GAAG,GAAG;AACjB;;;;;;;;;;EChDA,MAAM,CAAC,cAAc,CAAA,OAAA,EAAU,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;EAC7D,OAAA,CAAA,GAAA,GAAc,OAAA,CAAA,EAAA,GAAa,MAAM;EACjC,IAAI,MAAM,GAAGA,WAAA,EAAiB;EAC9B,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAA,CAAE,EAAE,CAAC;EAClG,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA,CAAE,EAAE,CAAC;AACpG;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkGA;AACO,SAAS,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE;AAC7D,IAAI,SAAS,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,OAAO,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChH,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,UAAU,OAAO,EAAE,MAAM,EAAE;AAC/D,QAAQ,SAAS,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnG,QAAQ,SAAS,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtG,QAAQ,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACtH,QAAQ,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9E,IAAI,CAAC,CAAC,CAAC;AACP,CAAC;AA6MD;AACuB,OAAO,eAAe,KAAK,UAAU,GAAG,eAAe,GAAG,UAAU,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE;AACvH,IAAI,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,IAAI,OAAO,CAAC,CAAC,IAAI,GAAG,iBAAiB,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;AACrF;;AC3UA;;;AAGK;AACOC;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,kBAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD;AACvD,IAAA,kBAAA,CAAA,kCAAA,CAAA,GAAA,kCAAqE;AACrE,IAAA,kBAAA,CAAA,6BAAA,CAAA,GAAA,6BAA2D;AAC3D,IAAA,kBAAA,CAAA,8BAAA,CAAA,GAAA,8BAA6D;AAC7D,IAAA,kBAAA,CAAA,+BAAA,CAAA,GAAA,+BAA+D;AAC/D,IAAA,kBAAA,CAAA,gCAAA,CAAA,GAAA,gCAAiE;AACjE,IAAA,kBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,kBAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,kBAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,kBAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AAC/C,IAAA,kBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,kBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,kBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,kBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,kBAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C;AAC3C,IAAA,kBAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC;AACzC,IAAA,kBAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,kBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,kBAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,kBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,kBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,kBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,kBAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,kBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,kBAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AACjD,CAAC,EA5BWA,0BAAkB,KAAlBA,0BAAkB,GAAA,EAAA,CAAA,CAAA;;ACAvB,MAAM,cAAc,GAAG;AAC5B,IAAA,CAACA,0BAAkB,CAAC,WAAW,GAAG,CAAC,MAAc,KAC/C,CAAA,8BAAA,EAAiC,MAAM,CAAA,CAAE;AAC3C,IAAA,CAACA,0BAAkB,CAAC,SAAS,GAAG,CAAC,GAAY,KAC3C,CAAA,8BAAA,EAAiC,GAAG,CAAA,CAAE;AACxC,IAAA,CAACA,0BAAkB,CAAC,WAAW,GAAG,CAAC,KAAa,KAC9C,CAAA,iCAAA,EAAoC,KAAK,CAAA,UAAA,CAAY;AACvD,IAAA,CAACA,0BAAkB,CAAC,YAAY,GAAG,CAAC,KAAa,KAC/C,CAAA,2CAAA,EAA8C,KAAK,CAAA,2CAAA,CAA6C;AAClG,IAAA,CAACA,0BAAkB,CAAC,oBAAoB,GAAG,CAAC,KAAa,KACvD,CAAA,2CAAA,EAA8C,KAAK,CAAA,6CAAA,CAA+C;IACpG,CAACA,0BAAkB,CAAC,cAAc,GAAG,MACnC,0HAA0H;IAC5H,CAACA,0BAAkB,CAAC,WAAW,GAAG,MAChC,wDAAwD;IAC1D,CAACA,0BAAkB,CAAC,qBAAqB,GAAG,MAC1C,+HAA+H;IACjI,CAACA,0BAAkB,CAAC,yBAAyB,GAAG,MAC9C,oIAAoI;AACtI,IAAA,CAACA,0BAAkB,CAAC,gCAAgC,GAAG,CAAC,UAAkB,KACxE,CAAA,yBAAA,EAA4B,UAAU,CAAA,WAAA,CAAa;AACrD,IAAA,CAACA,0BAAkB,CAAC,8BAA8B,GAAG,CACnD,UAAkB,EAClB,WAAmB,KAEnB,CAAA,sBAAA,EAAyB,UAAU,CAAA,gBAAA,EAAmB,WAAW,CAAA,aAAA,CAAe;AAClF,IAAA,CAACA,0BAAkB,CAAC,2BAA2B,GAAG,CAChD,WAAmB,EACnB,WAAmB,KAEnB,CAAA,kCAAA,EAAqC,WAAW,CAAA,eAAA,EAAkB,WAAW,CAAA,aAAA,CAAe;AAC9F,IAAA,CAACA,0BAAkB,CAAC,4BAA4B,GAAG,CACjD,YAAoB,EACpB,WAAmB,KAEnB,CAAA,mCAAA,EAAsC,YAAY,CAAA,eAAA,EAAkB,WAAW,CAAA,aAAA,CAAe;AAChG,IAAA,CAACA,0BAAkB,CAAC,6BAA6B,GAAG,CAClD,YAAoB,EACpB,WAAmB,KAEnB,CAAA,mCAAA,EAAsC,YAAY,CAAA,eAAA,EAAkB,WAAW,CAAA,aAAA,CAAe;IAChG,CAACA,0BAAkB,CAAC,WAAW,GAAG,MAChC,gDAAgD;IAClD,CAACA,0BAAkB,CAAC,oBAAoB,GAAG,MACzC,uDAAuD;IACzD,CAACA,0BAAkB,CAAC,gBAAgB,GAAG,MAAM,+BAA+B;AAC5E,IAAA,CAACA,0BAAkB,CAAC,YAAY,GAAG,CAAC,GAAY,KAC9C,CAAA,6CAAA,EAAgD,GAAG,CAAA,CAAE;AACvD,IAAA,CAACA,0BAAkB,CAAC,WAAW,GAAG,CAAC,GAAwB,KACzD,CAAA,+BAAA,EAAkC,GAAG,CAAA,IAAA,CAAM;IAC7C,CAACA,0BAAkB,CAAC,YAAY,GAAG,MAAM,0BAA0B;AACnE,IAAA,CAACA,0BAAkB,CAAC,YAAY,GAAG,CAAC,GAAY,EAAE,GAAwB,KACxE,CAAA,eAAA,EAAkB,GAAG,CAAA,iDAAA,EAAoD,GAAG,CAAA,CAAE;AAChF,IAAA,CAACA,0BAAkB,CAAC,mBAAmB,GAAG,CAAC,GAAY,KACrD,CAAA,kEAAA,EAAqE,GAAG,CAAA,CAAE;AAC5E,IAAA,CAACA,0BAAkB,CAAC,kBAAkB,GAAG,CAAC,aAA4B,KACpE,CAAA,EAAG,aAAa,CAAA,0CAAA,CAA4C;AAC9D,IAAA,CAACA,0BAAkB,CAAC,gBAAgB,GAAG,CAAC,GAAY,EAAE,KAAa,KACjE,CAAA,sBAAA,EAAyB,KAAK,CAAA,GAAA,EAAM,GAAG,CAAA,CAAE;AAC3C,IAAA,CAACA,0BAAkB,CAAC,UAAU,GAAG,CAAC,KAAuB,KACvD,CAAA,sBAAA,EAAyB,KAAK,CAAA,8DAAA,CAAgE;AAChG,IAAA,CAACA,0BAAkB,CAAC,UAAU,GAAG,CAAC,GAAY,KAC5C,CAAA,qDAAA,EAAwD,GAAG,CAAA,CAAE;AAC/D,IAAA,CAACA,0BAAkB,CAAC,qBAAqB,GAAG,CAAC,GAAY,KACvD,CAAA,iDAAA,EAAoD,GAAG,CAAA,CAAE;CAC5D;;ACrEK,SAAU,YAAY,CAAC,MAAa,EAAA;AACxC,IAAA,MAAM,IAAI,KAAK,CAAC,2CAA2C,MAAM,CAAA,CAAE,CAAC;AACtE;;ACIA;;;AAGK;AACC,MAAO,cAAe,SAAQ,KAAK,CAAA;AA8EvC,IAAA,WAAA,CACE,IAAwB,EACxB,WAKiB,EACjB,UAAyC,EAAA;AAEzC,QAAA,KAAK,CAAC,CAAA,OAAA,EAAU,IAAI,CAAA,CAAE,CAAC;AAEvB,QAAA,IAAI,CAAC,IAAI,GAAG,gBAAgB;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AAErB,QAAA,QAAQ,IAAI;YACV,KAAKA,0BAAkB,CAAC,cAAc;YACtC,KAAKA,0BAAkB,CAAC,WAAW;YACnC,KAAKA,0BAAkB,CAAC,oBAAoB;YAC5C,KAAKA,0BAAkB,CAAC,gBAAgB;YACxC,KAAKA,0BAAkB,CAAC,qBAAqB;YAC7C,KAAKA,0BAAkB,CAAC,WAAW;YACnC,KAAKA,0BAAkB,CAAC,yBAAyB;YACjD,KAAKA,0BAAkB,CAAC,YAAY;gBAClC,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE;gBACrC;YACF,KAAKA,0BAAkB,CAAC,WAAW;YACnC,KAAKA,0BAAkB,CAAC,gCAAgC;YACxD,KAAKA,0BAAkB,CAAC,WAAW;YACnC,KAAKA,0BAAkB,CAAC,mBAAmB;YAC3C,KAAKA,0BAAkB,CAAC,qBAAqB;YAC7C,KAAKA,0BAAkB,CAAC,UAAU;YAClC,KAAKA,0BAAkB,CAAC,YAAY;YACpC,KAAKA,0BAAkB,CAAC,oBAAoB;gBAC1C,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,WAAqB,CAAC;gBAC1D;YACF,KAAKA,0BAAkB,CAAC,6BAA6B;AACnD,gBAAA,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CACjC,WAAqB,EACrB,UAAoB,CACrB;gBACD;YACF,KAAKA,0BAAkB,CAAC,4BAA4B;YACpD,KAAKA,0BAAkB,CAAC,2BAA2B;AACjD,gBAAA,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CACjC,WAAqB,EACrB,UAAoB,CACrB;gBACD;YACF,KAAKA,0BAAkB,CAAC,8BAA8B;gBACpD,IAAI,UAAU,KAAK,SAAS,EAAE;AAC5B,oBAAA,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CACjC,WAAqB,EACrB,UAAoB,CACrB;AACF,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,OAAO,GAAG,WAAqB;AACrC,gBAAA;gBACD;YACF,KAAKA,0BAAkB,CAAC,YAAY;YACpC,KAAKA,0BAAkB,CAAC,SAAS;gBAC/B,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;gBAChD;YACF,KAAKA,0BAAkB,CAAC,WAAW;gBACjC,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,WAAkC,CAAC;gBACvE;YACF,KAAKA,0BAAkB,CAAC,YAAY;AAClC,gBAAA,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CACjC,WAAW,EACX,UAAiC,CAClC;gBACD;YACF,KAAKA,0BAAkB,CAAC,kBAAkB;gBACxC,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,WAA4B,CAAC;gBACjE;YACF,KAAKA,0BAAkB,CAAC,gBAAgB;AACtC,gBAAA,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,UAAoB,CAAC;gBACtE;YACF,KAAKA,0BAAkB,CAAC,UAAU;gBAChC,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CACjC,WAA0C,CAC3C;gBACD;AACF,YAAA;gBACE,YAAY,CAAC,IAAI,CAAC;AACrB;IACH;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,SAAS;IACvB;AACD;;ACjKD,IAAY,OAIX;AAJD,CAAA,UAAY,OAAO,EAAA;AACjB,IAAA,OAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,OAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,OAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C;AAC7C,CAAC,EAJW,OAAO,KAAP,OAAO,GAAA,EAAA,CAAA,CAAA;AA2JPC;AAAZ,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EAHWA,kBAAU,KAAVA,kBAAU,GAAA,EAAA,CAAA,CAAA;AAKtB,IAAY,YAIX;AAJD,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,YAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;AACV,IAAA,YAAA,CAAA,YAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACT,IAAA,YAAA,CAAA,YAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACT,CAAC,EAJW,YAAY,KAAZ,YAAY,GAAA,EAAA,CAAA,CAAA;AA+HxB;;AAEK;AACOC;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AAC3B,CAAC,EAJWA,mBAAW,KAAXA,mBAAW,GAAA,EAAA,CAAA,CAAA;;ACtShB,MAAM,iBAAiB,GAAG;AAErBC;AAAZ,CAAA,UAAY,MAAM,EAAA;AAChB,IAAA,MAAA,CAAA,WAAA,CAAA,GAAA,YAAwB;AACxB,IAAA,MAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC5B,IAAA,MAAA,CAAA,YAAA,CAAA,GAAA,yBAAsC;AACtC,IAAA,MAAA,CAAA,SAAA,CAAA,GAAA,sBAAgC;AAChC,IAAA,MAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,MAAA,CAAA,gBAAA,CAAA,GAAA,iBAAkC;AAClC,IAAA,MAAA,CAAA,iBAAA,CAAA,GAAA,mBAAqC;AACrC,IAAA,MAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAChC,CAAC,EATWA,cAAM,KAANA,cAAM,GAAA,EAAA,CAAA,CAAA;AAWX,MAAM,YAAY,GAAqC;AAC5D,IAAA,UAAU,EAAE,sBAAsB;AAClC,IAAA,UAAU,EAAE,sBAAsB;AAClC,IAAA,IAAI,EAAE,gBAAgB;AACtB,IAAA,UAAU,EAAE,sBAAsB;AAClC,IAAA,QAAQ,EAAE,oBAAoB;AAC9B,IAAA,UAAU,EAAE,sBAAsB;AAClC,IAAA,WAAW,EAAE,uBAAuB;AACpC,IAAA,gBAAgB,EAAE,4BAA4B;CAC/C;AACM,MAAM,YAAY,GAAyC;AAChE,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,gBAAgB,EAAE,oBAAoB;AACtC,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,WAAW;AACpB,IAAA,SAAS,EAAE,aAAa;AACxB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,YAAY,EAAE,gBAAgB;AAC9B,IAAA,cAAc,EAAE,kBAAkB;AAClC,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,UAAU,EAAE,cAAc;AAC1B,IACA,MAAM,EAAE,UAAU;AAClB,IAAA,WAAW,EAAE,eAAe;AAC5B,IAAA,WAAW,EAAE,eAAe;AAC5B,IAAA,EAAE,EAAE,MAAM;AACV,IAAA,GAAG,EAAE,OAAO;AACZ,IAAA,OAAO,EAAE,WAAW;AACpB,IAAA,UAAU,EAAE,cAAc;AAC1B,IAAA,cAAc,EAAE,kBAAkB;AAClC,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,EAAE,EAAE,MAAM;AACV,IAAA,UAAU,EAAE,cAAc;AAC1B,IAAA,YAAY,EAAE,gBAAgB;AAC9B,IAAA,uBAAuB,EAAE,2BAA2B;AACpD,IAAA,EAAE,EAAE,MAAM;AACV,IAAA,OAAO,EAAE,WAAW;AACpB,IAAA,OAAO,EAAE,WAAW;AACpB,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,MAAM,EAAE,UAAU;AAClB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,SAAS,EAAE,aAAa;AACxB,IAAA,UAAU,EAAE,cAAc;AAC1B,IAAA,UAAU,EAAE,cAAc;AAC1B,IAAA,UAAU,EAAE,cAAc;AAC1B,IAAA,WAAW,EAAE,eAAe;AAC5B,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,UAAU,EAAE,cAAc;AAC1B,IAAA,OAAO,EAAE,WAAW;AACpB,IACA,iBAAiB,EAAE,qBAAqB;AACxC,IAAA,YAAY,EAAE,gBAAgB;AAC9B,IAAA,GAAG,EAAE,OAAO;AACZ,IAAA,eAAe,EAAE,mBAAmB;AACpC,IAAA,SAAS,EAAE,aAAa;AACxB,IAAA,MAAM,EAAE,UAAU;AAClB,IAAA,GAAG,EAAE,OAAO;AACZ,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,WAAW,EAAE,eAAe;AAC5B,IAAA,sBAAsB,EAAE,0BAA0B;CACnD;AACM,MAAM,iBAAiB,GAA8C;AAC1E,IAUA,WAAW,EAAE,eAAe;AAC5B,IA0BA,EAAE,EAAE,OAYL;AACM,MAAM,QAAQ,GAAiC;AACpD,IAAA,GAAG,EAAE,eAAe;AACpB,IAAA,GAAG,EAAE,eAAe;AACpB,IAAA,MAAM,EAAE,kBAAkB;AAC1B,IAAA,OAAO,EAAE,mBAAmB;CAC7B;AACM,MAAM,WAAW,GAAuC;AAC7D,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,GAAG,EAAE,MAAM;CACZ;AAEM,MAAM,eAAe,GAAgB;AAC1C,IAAA,CAAC,OAAO,CAAC,OAAO,GAAG,mBAAmB;AACtC,IAAA,CAAC,OAAO,CAAC,MAAM,GAAG,qBAAqB;AACvC,IAAA,CAAC,OAAO,CAAC,mBAAmB,GAAG,yBAAyB;CACzD;;AC7ID;;AAEG;AACSC;AAAZ,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,QAAA,CAAA,QAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACP,CAAC,EANWA,gBAAQ,KAARA,gBAAQ,GAAA,EAAA,CAAA,CAAA;AAYpB;;AAEG;AACI,MAAM,eAAe,GAAkB;AAC5C,IAAA,CAACA,gBAAQ,CAAC,IAAI,GAAG,MAAM;AACvB,IAAA,CAACA,gBAAQ,CAAC,KAAK,GAAG,OAAO;AACzB,IAAA,CAACA,gBAAQ,CAAC,OAAO,GAAG,SAAS;AAC7B,IAAA,CAACA,gBAAQ,CAAC,IAAI,GAAG,MAAM;AACvB,IAAA,CAACA,gBAAQ,CAAC,KAAK,GAAG,OAAO;CAC1B;;ACnCD;;;AAGG;MACU,aAAa,CAAA;AACxB;;;;;AAKG;IACI,GAAG,CAAC,KAAe,EAAE,OAAe,EAAA;AACzC,QAAA,QAAQ,KAAK;YACX,KAAKA,gBAAQ,CAAC,KAAK;AACjB,gBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;gBACtB;YACF,KAAKA,gBAAQ,CAAC,IAAI;AAChB,gBAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;gBACrB;YACF,KAAKA,gBAAQ,CAAC,OAAO;AACnB,gBAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;gBACrB;YACF,KAAKA,gBAAQ,CAAC,KAAK;AACjB,gBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;gBACtB;AACH;IACH;AACD;;ACpBD,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,KAAc,KAAI;IAC/C,IAAI,GAAG,KAAK,aAAa,EAAE;QACzB,OAAO;AACL,YAAA,QAAQ,EAAE,CAAA,IAAA,CAAM;AAChB,YAAA,YAAY,EAAE,CAAA,IAAA,CAAM;SACrB;AACF,IAAA;IAED,IAAI,KAAK,YAAY,GAAG,EAAE;QACxB,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACnC,IAAA;AAED,IAAA,OAAO,KAAK;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,OAA6B,EAAE,IAAgB,EAAA;IAC/D,IAAI,GAAG,GAAG,EAAE;AAEZ,IAAA,IAAI,IAAI,EAAE;AACR,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AACjB,YAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAC3B,IAAI;AACF,oBAAA,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC;AAClD,gBAAA;AAAC,gBAAA,OAAO,KAAK,EAAE;AACd,oBAAA,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU;AAC/B,gBAAA;AACF,YAAA;AAAM,iBAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAClC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AACpC,YAAA;AAAM,iBAAA;AACL,gBAAA,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;AACxB,YAAA;AACF,QAAA;AACF,IAAA;IAED,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,IAAA,OAAO,GAAG;AACZ;MAEa,eAAe,CAAA;IAInB,OAAO,SAAS,CAAC,MAAuB,EAAA;AAC7C,QAAA,eAAe,CAAC,MAAM,GAAG,MAAM;IACjC;IAEO,OAAO,WAAW,CAAC,QAAkB,EAAA;AAC1C,QAAA,eAAe,CAAC,QAAQ,GAAG,QAAQ;IACrC;IAEO,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAqB,EAAA;AAC3D,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE;AAExC,QAAA,IAAI,OAAe;AAEnB,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC/B,OAAO,GAAG,OAAO;AAClB,QAAA;AAAM,aAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;YACxC,IAAI;gBACF,OAAO,GAAG,OAAO,EAAE;AACpB,YAAA;AAAC,YAAA,OAAO,KAAK,EAAE;gBACd,OAAO,GAAG,uBAAuB;AAClC,YAAA;AACF,QAAA;AAAM,aAAA;AACL,YAAA,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;AAClC,QAAA;AAED,QAAA,eAAe,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;IAC9C;AAEO,IAAA,OAAO,IAAI,CAAC,OAAqB,EAAE,GAAG,IAAe,EAAA;AAC1D,QAAA,eAAe,CAAC,GAAG,CAAC,EAAE,KAAK,EAAEA,gBAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC9D;AAEO,IAAA,OAAO,KAAK,CAAC,OAAqB,EAAE,GAAG,IAAe,EAAA;AAC3D,QAAA,eAAe,CAAC,GAAG,CAAC,EAAE,KAAK,EAAEA,gBAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC/D;AAEO,IAAA,OAAO,OAAO,CAAC,OAAqB,EAAE,GAAG,IAAe,EAAA;AAC7D,QAAA,eAAe,CAAC,GAAG,CAAC,EAAE,KAAK,EAAEA,gBAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACjE;AAEO,IAAA,OAAO,KAAK,CAAC,OAAqB,EAAE,GAAG,IAAe,EAAA;AAC3D,QAAA,eAAe,CAAC,GAAG,CAAC,EAAE,KAAK,EAAEA,gBAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC/D;IAEO,OAAO,UAAU,CAAC,KAAe,EAAA;QACtC,OAAO,KAAK,IAAI,eAAe,CAAC,QAAQ,IAAI,KAAK,KAAKA,gBAAQ,CAAC,IAAI;IACrE;AAEQ,IAAA,OAAO,YAAY,CAAC,KAAe,EAAE,OAAe,EAAA;AAC1D,QAAA,eAAe,CAAC,MAAM,CAAC,GAAG,CACxB,KAAK,EACL,CAAA,WAAA,EAAc,eAAe,CAAC,KAAK,CAAC,CAAA,GAAA,EAAM,OAAO,CAAA,CAAE,CACpD;IACH;;AAxDe,eAAA,CAAA,MAAM,GAAoB,IAAI,aAAa,EAAE;AAC7C,eAAA,CAAA,QAAQ,GAAaA,gBAAQ,CAAC,OAAO;;MChBzC,SAAS,CAAA;AAQpB,IAAA,WAAA,CAAY,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,kBAAkB,GACE,EAAA;AACpB,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,8CAAA,EAAiD,WAAW,CAAA,qCAAA,EAAwC,cAAc,CAAA,mBAAA,EAAsB,eAAe,CAAA,sBAAA,EAAyB,kBAAkB,CAAA,CAAA,CAAG;AAC1N,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAC1C,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,OAAO,GAAG,cAAc;AAC7B,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,gDAAA,EAAmD,WAAW,CAAA,qCAAA,EAAwC,cAAc,CAAA,mBAAA,EAAsB,eAAe,CAAA,sBAAA,EAAyB,kBAAkB,CAAA,CAAA,CAAG;IAC9N;IAEa,sBAAsB,CACjC,SAAkB,EAClB,aAAsB,EAAA;;YAEtB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,SAAS,CAAC;AAExE,YAAA,IAAI,OAAO,GAAA,MAAA,CAAA,MAAA,CAAA,EACT,CAACD,cAAM,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,EACrD,CAACA,cAAM,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAA,GACzC,aAAa,IAAI,EAAE,CAACA,cAAM,CAAC,eAAe,GAAG,aAAa,EAAE,EACjE;;;AAID,YAAA,MAAM,QAAQ,GAAG,iBAAiB,GAAG,CAAC;YAEtC,IAAI;AACF,gBAAA,IAAI,YAAY,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE;AAElC,gBAAA,eAAe,CAAC,KAAK,CAAA,CAAA,sCAAA,EAAyCF,kBAAU,CAAC,GAAG,CAAA,OAAA,EAAU,UAAU,CAAA,WAAA,EAAc,OAAO,CAAA,mBAAA,EAAsB,QAAQ,EAAE;gBACrJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AACjC,oBAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAA4B;AACjE,wBAAA,GAAG,EAAE,UAAU;wBACf,WAAW,EAAEC,mBAAW,CAAC,aAAa;AACtC,wBAAA,UAAU,EAAE,CAAC;AACb,wBAAA,UAAU,EAAE;4BACV,MAAM,EAAED,kBAAU,CAAC,GAAG;4BACtB,OAAO;AACR,yBAAA;AACF,qBAAA,CAAC;oBAEF,IAAI,QAAQ,CAAC,EAAE,EAAE;AACf,wBAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;wBAElC,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC;wBAE3E,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;wBACzD,MAAM,iBAAiB,GAAG,IAA6B;AAEvD,wBAAA,OAAOI,eAAE,CAAC;AACR,4BAAA,aAAa,EAAE,iBAAiB;AAChC,4BAAA,YAAY,EAAE,YAAY;AAC3B,yBAAA,CAAC;AACH,oBAAA;AAED,oBAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;wBAC3B,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC;AAE3E,wBAAA,OAAOA,eAAE,CAAC,EAAE,CAAC;AACd,oBAAA;oBAED,IAAI,CAAC,KAAK,iBAAiB,EAAE;wBAC3B,IAAI,QAAQ,CAAC,IAAI,EAAE;AACjB,4BAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;AAClC,4BAAA,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAChC,wBAAA;wBACD,eAAe,CAAC,KAAK,CAAA,CAAA,qCAAA,EAAwC;4BAC3D,MAAM,EAAE,QAAQ,CAAC,MAAM;4BACvB,OAAO,EAAE,YAAY,CAAC,OAAO;yBAC9B,CAAA,qBAAA,EACCJ,kBAAU,CAAC,GACb,CAAA,OAAA,EAAU,UAAU,CAAA,WAAA,EAAc,OAAO,EAAE;AAC5C,oBAAA;AAAM,yBAAA;wBACL,MAAM,IAAI,CAAC,eAAe,CAAC;4BACzB,QAAQ,EAAEG,gBAAQ,CAAC,OAAO;AAC1B,4BAAA,OAAO,EAAE,sCAAsC;AAC/C,4BAAA,QAAQ,EAAE,QAAQ;4BAClB,MAAM,EAAEH,kBAAU,CAAC,GAAG;AACtB,4BAAA,GAAG,EAAE,UAAU;AAChB,yBAAA,CAAC;AACH,oBAAA;AACF,gBAAA;AAED,gBAAA,OAAOK,gBAAG,CACR,IAAI,cAAc,CAChBN,0BAAkB,CAAC,qBAAqB,EACxC,YAAY,CAAC,OAAO,CACrB,CACF;AACF,YAAA;AAAC,YAAA,OAAO,GAAG,EAAE;gBACZ,MAAM,IAAI,CAAC,eAAe,CAAC;oBACzB,QAAQ,EAAEI,gBAAQ,CAAC,KAAK;AACxB,oBAAA,OAAO,EAAE,sCAAsC;AAC/C,oBAAA,KAAK,EAAE,GAAG;oBACV,MAAM,EAAEH,kBAAU,CAAC,GAAG;AACtB,oBAAA,GAAG,EAAE,UAAU;oBACf,OAAO;AACR,iBAAA,CAAC;AACF,gBAAA,OAAOK,gBAAG,CACR,IAAI,cAAc,CAACN,0BAAkB,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAChE;AACF,YAAA;QACH,CAAC,CAAA;AAAA,IAAA;AAEY,IAAA,aAAa,CACxB,GAAW,EAAA;;;YAEX,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC;YAEzD,eAAe,CAAC,KAAK,CAAA,CAAA,oCAAA,EAAuCC,kBAAU,CAAC,GAAG,CAAA,OAAA,EAAU,UAAU,CAAA,CAAE;YAChG,IAAI;AACF,gBAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAyB;AAC9D,oBAAA,GAAG,EAAE,UAAU;oBACf,WAAW,EAAEC,mBAAW,CAAC,UAAU;AACnC,oBAAA,UAAU,EAAE,CAAC;AACb,oBAAA,UAAU,EAAE;wBACV,MAAM,EAAED,kBAAU,CAAC,GAAG;AACvB,qBAAA;AACF,iBAAA,CAAC;AAEF,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAChB,MAAM,IAAI,CAAC,eAAe,CAAC;wBACzB,QAAQ,EAAEG,gBAAQ,CAAC,KAAK;AACxB,wBAAA,OAAO,EAAE,oCAAoC;AAC7C,wBAAA,QAAQ,EAAE,QAAQ;wBAClB,MAAM,EAAEH,kBAAU,CAAC,GAAG;AACtB,wBAAA,GAAG,EAAE,UAAU;AAChB,qBAAA,CAAC;oBACF,IAAI,QAAQ,CAAC,IAAI,EAAE;AACjB,wBAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;wBAClC,MAAM,OAAO,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO;AAEzC,wBAAA,OAAOK,gBAAG,CACR,IAAI,cAAc,CAACN,0BAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,CAC3D;AACF,oBAAA;AAED,oBAAA,OAAOM,gBAAG,CACR,IAAI,cAAc,CAChBN,0BAAkB,CAAC,UAAU,EAC7B,uDAAuD,CACxD,CACF;AACF,gBAAA;AAED,gBAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;gBAElC,eAAe,CAAC,KAAK,CAAA,CAAA,+BAAA,EAAkC;oBACrD,MAAM,EAAE,QAAQ,CAAC,MAAM;AACxB,iBAAA,CAAA,qBAAA,EAAwBC,kBAAU,CAAC,GAAG,CAAA,OAAA,EAAU,UAAU,EAAE;AAC7D,gBAAA,OAAOI,eAAE,CAAC,IAAI,CAAC;AAChB,YAAA;AAAC,YAAA,OAAO,GAAG,EAAE;gBACZ,MAAM,IAAI,CAAC,eAAe,CAAC;oBACzB,QAAQ,EAAED,gBAAQ,CAAC,KAAK;AACxB,oBAAA,OAAO,EAAE,oCAAoC;AAC7C,oBAAA,KAAK,EAAE,GAAG;oBACV,MAAM,EAAEH,kBAAU,CAAC,GAAG;AACtB,oBAAA,GAAG,EAAE,UAAU;AAChB,iBAAA,CAAC;AACF,gBAAA,OAAOK,gBAAG,CAAC,IAAI,cAAc,CAACN,0BAAkB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AACnE,YAAA;;AACF,IAAA;AAEY,IAAA,cAAc,CAAC,EAC1B,WAAW,EACX,OAAO,EACP,mBAAmB,GACM,EAAA;;;AAGzB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC;gBACpD,WAAW;gBACX,OAAO;gBACP,mBAAmB;AACpB,aAAA,CAAC;YAEF,eAAe,CAAC,KAAK,CAAA,CAAA,qCAAA,EAAwCC,kBAAU,CAAC,GAAG,CAAA,OAAA,EAAU,UAAU,CAAA,CAAE;YACjG,IAAI;AACF,gBAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAyB;AAC9D,oBAAA,GAAG,EAAE,UAAU;oBACf,WAAW,EAAEC,mBAAW,CAAC,UAAU;AACnC,oBAAA,UAAU,EAAE,CAAC;AACb,oBAAA,UAAU,EAAE;wBACV,MAAM,EAAED,kBAAU,CAAC,GAAG;AACvB,qBAAA;AACF,iBAAA,CAAC;AAEF,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAChB,MAAM,IAAI,CAAC,eAAe,CAAC;wBACzB,QAAQ,EAAEG,gBAAQ,CAAC,KAAK;AACxB,wBAAA,OAAO,EAAE,qCAAqC;AAC9C,wBAAA,QAAQ,EAAE,QAAQ;wBAClB,MAAM,EAAEH,kBAAU,CAAC,GAAG;AACtB,wBAAA,GAAG,EAAE,UAAU;AAChB,qBAAA,CAAC;AACF,oBAAA,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;AACvC,wBAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;AAElC,wBAAA,IAAI,IAAI,EAAE;4BACR,MAAM,OAAO,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO;AAEzC,4BAAA,OAAOK,gBAAG,CACR,IAAI,cAAc,CAACN,0BAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,CAC3D;AACF,wBAAA;AACF,oBAAA;oBAED,IAAI,QAAQ,CAAC,MAAM,EAAE;AACnB,wBAAA,OAAOM,gBAAG,CACR,IAAI,cAAc,CAChBN,0BAAkB,CAAC,UAAU,EAC7B,CAAA,gCAAA,EAAmC,QAAQ,CAAC,MAAM,CAAA,CAAE,CACrD,CACF;AACF,oBAAA;AAED,oBAAA,OAAOM,gBAAG,CACR,IAAI,cAAc,CAChBN,0BAAkB,CAAC,UAAU,EAC7B,2EAA2E,CAC5E,CACF;AACF,gBAAA;AAED,gBAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;gBAElC,eAAe,CAAC,KAAK,CAAA,CAAA,gCAAA,EAAmC;oBACtD,MAAM,EAAE,QAAQ,CAAC,MAAM;AACxB,iBAAA,CAAA,qBAAA,EAAwBC,kBAAU,CAAC,GAAG,CAAA,OAAA,EAAU,UAAU,EAAE;AAC7D,gBAAA,OAAOI,eAAE,CAAC,IAAgC,CAAC;AAC5C,YAAA;AAAC,YAAA,OAAO,GAAG,EAAE;gBACZ,MAAM,IAAI,CAAC,eAAe,CAAC;oBACzB,QAAQ,EAAED,gBAAQ,CAAC,KAAK;AACxB,oBAAA,OAAO,EAAE,qCAAqC;AAC9C,oBAAA,KAAK,EAAE,GAAG;oBACV,MAAM,EAAEH,kBAAU,CAAC,GAAG;AACtB,oBAAA,GAAG,EAAE,UAAU;AAChB,iBAAA,CAAC;AACF,gBAAA,OAAOK,gBAAG,CAAC,IAAI,cAAc,CAACN,0BAAkB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AACnE,YAAA;;AACF,IAAA;IAEY,KAAK,CAChB,IAAY,EACZ,eAAwB,EAAA;;;;AAIxB,YAAA,MAAM,QAAQ,GAAG,iBAAiB,GAAG,CAAC;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC;AAE5D,YAAA,eAAe,CAAC,KAAK,CAAA,oCAAoCC,kBAAU,CAAC,IAAI,CAAA,OAAA,EAAU,GAAG,CAAA,QAAA,EAAW,IAAI,sBAAsB,QAAQ,CAAA,cAAA,EAAiB,IAAI,CAAC,eAAe,KAAK;YAC5K,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AACjC,gBAAA,IAAI,QAAQ;gBACZ,IAAI;AACF,oBAAA,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAuB;wBACtD,GAAG;AACH,wBAAA,UAAU,EAAE,CAAC;wBACb,WAAW,EAAEC,mBAAW,CAAC,QAAQ;AACjC,wBAAA,UAAU,EAAE;4BACV,IAAI;4BACJ,MAAM,EAAED,kBAAU,CAAC,IAAI;AACvB,4BAAA,OAAO,EAAE;AACP,gCAAA,CAACE,cAAM,CAAC,WAAW,GAAG,KAAK;AAC5B,6BAAA;AACF,yBAAA;AACF,qBAAA,CAAC;oBAEF,IAAI,QAAQ,CAAC,EAAE,EAAE;wBACf,eAAe,CAAC,KAAK,CAAA,CAAA,4BAAA,EAA+B;4BAClD,MAAM,EAAE,QAAQ,CAAC,MAAM;yBACxB,CAAA,qBAAA,EACCF,kBAAU,CAAC,IACb,CAAA,OAAA,EAAU,GAAG,CAAA,QAAA,EAAW,IAAI,EAAE;wBAC9B,OAAOI,eAAE,EAAE;AACZ,oBAAA;oBAED,MAAM,IAAI,CAAC,eAAe,CAAC;AACzB,wBAAA,QAAQ,EAAE,CAAC,IAAI,iBAAiB,GAAGD,gBAAQ,CAAC,KAAK,GAAGA,gBAAQ,CAAC,OAAO;AACpE,wBAAA,OAAO,EAAE,iCAAiC;AAC1C,wBAAA,QAAQ,EAAE,QAAQ;wBAClB,MAAM,EAAEH,kBAAU,CAAC,IAAI;wBACvB,GAAG;AACJ,qBAAA,CAAC;AACH,gBAAA;AAAC,gBAAA,OAAO,KAAK,EAAE;oBACd,MAAM,IAAI,CAAC,eAAe,CAAC;AACzB,wBAAA,QAAQ,EAAE,CAAC,IAAI,iBAAiB,GAAGG,gBAAQ,CAAC,KAAK,GAAGA,gBAAQ,CAAC,OAAO;AACpE,wBAAA,OAAO,EAAE,iCAAiC;wBAC1C,KAAK;wBACL,MAAM,EAAEH,kBAAU,CAAC,IAAI;wBACvB,GAAG;AACJ,qBAAA,CAAC;AACH,gBAAA;gBAED,IAAI,CAAC,GAAG,QAAQ,EAAE;AAChB,oBAAA,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KACxB,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAC1C;AACF,gBAAA;AACF,YAAA;YAED,OAAOK,gBAAG,EAAE;QACd,CAAC,CAAA;AAAA,IAAA;IAEa,WAAW,CAAwB,EAC/C,GAAG,EACH,WAAW,EACX,UAAU,EACV,UAAU,GAC2B,EAAA;;AACrC,YAAA,IAAI,QAAQ;YAEZ,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,gBAAA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AACxC,gBAAA,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC;AAEpE,gBAAA,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC;oBAClD,GAAG;AACH,oBAAA,UAAU,EAAE,UAAuB;oBACnC,WAAW;oBACX,UAAU,EAAE,gCACP,UAAU,CAAA,EAAA,EACb,MAAM,EAAE,UAAU,CAAC,MAAM,EAAA,CACE;AAC9B,iBAAA,CAAC;gBAEF,YAAY,CAAC,SAAS,CAAC;AACxB,YAAA;AAAM,iBAAA;AACL,gBAAA,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC;oBAClD,GAAG;AACH,oBAAA,UAAU,EAAE,UAAuB;oBACnC,WAAW;AACX,oBAAA,UAAU,EAAE,UAAsC;AACnD,iBAAA,CAAC;AACH,YAAA;AAED,YAAA,OAAO,QAAQ;QACjB,CAAC,CAAA;AAAA,IAAA;AAEa,IAAA,eAAe,CAAC,EAC5B,QAAQ,EACR,OAAO,EACP,KAAK,EACL,MAAM,EACN,GAAG,EACH,QAAQ,EACR,OAAO,GACkB,EAAA;;AACzB,YAAA,IAAI,KAAK,EAAE;gBACT,IAAI,SAAS,GAAG,eAAe;gBAC/B,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,oBAAA,SAAS,GAAG,KAAK,CAAC,OAAO;AAC1B,gBAAA;gBACD,eAAe,CAAC,GAAG,CAAC;AAClB,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,OAAO,EAAE,MACP,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,SAAS,CAAA,qBAAA,EAAwB,MAAM,CAAA,OAAA,EAAU,GAAG,CAAA,CAAE;AACnF,iBAAA,CAAC;AACH,YAAA;AAAM,iBAAA,IAAI,QAAQ,EAAE;AACnB,gBAAA,IAAI,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;oBACxC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;oBACtD,eAAe,CAAC,GAAG,CAAC;AAClB,wBAAA,KAAK,EAAE,QAAQ;AACf,wBAAA,OAAO,EAAE,MACP,CAAA,EAAG,OAAO,uBAAuB,WAAW,CAAC,MAAM,CAAA,YAAA,EAAe,WAAW,CAAC,OAAO,yBAAyB,MAAM,CAAA,QAAA,EAAW,GAAG,CAAA,CAAA,CAAG;6BACpI,OAAO,GAAG,CAAA,WAAA,EAAc,OAAO,CAAA,CAAE,GAAG,EAAE,CAAC;AAC3C,qBAAA,CAAC;AACH,gBAAA;AACF,YAAA;QACH,CAAC,CAAA;AAAA,IAAA;AAEa,IAAA,aAAa,CACzB,QAA+B,EAAA;;YAE/B,IAAI,OAAO,GAAG,EAAE;YAChB,IAAI;AACF,gBAAA,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;AACvC,oBAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;AAClC,oBAAA,IAAI,IAAI,EAAE;wBACR,OAAO,GAAG,IAAI;AACf,oBAAA;AACF,gBAAA;AACF,YAAA;YAAC,OAAO,KAAK,EAAE,EAAA;YAEhB,OAAO;gBACL,MAAM,EAAE,QAAQ,CAAC,MAAM;AACvB,gBAAA,OAAO,EAAE,OAAO;aACjB;QACH,CAAC,CAAA;AAAA,IAAA;AAEO,IAAA,qBAAqB,CAC3B,QAA+B,EAAA;QAE/B,IAAI,QAAQ,CAAC,OAAO,EAAE;YACpB,MAAM,SAAS,GAAGH,cAAM,CAAC,YAAY,CAAC,WAAW,EAAE;YACnD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE;AAC3C,gBAAA,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,SAAS,EAAE;AACnC,oBAAA,OAAO,KAAK;AACb,gBAAA;AACF,YAAA;AACF,QAAA;AACD,QAAA,OAAO,SAAS;IAClB;AAEQ,IAAA,gCAAgC,CAAC,cAAsB,EAAE,UAAkB,EAAE,OAAoB,EAAA;QACvG,eAAe,CAAC,KAAK,CAAA,CAAA,iCAAA,EAAoC;AACvD,YAAA,MAAM,EAAE,cAAc;SACvB,CAAA,qBAAA,EACCF,kBAAU,CAAC,GACb,CAAA,OAAA,EAAU,UAAU,CAAA,WAAA,EAAc,OAAO,EAAE;IAC7C;AACD;;AC3cD;;;AAGK;AACOM;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC7B,CAAC,EAJWA,mBAAW,KAAXA,mBAAW,GAAA,EAAA,CAAA,CAAA;;MCoBV,WAAW,CAAA;AAAxB,IAAA,WAAA,GAAA;QACU,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,OAAO,GAAgB,eAAe;IAwMhD;IAnMS,UAAU,CAAC,EAChB,MAAM,EACN,QAAQ,EACR,WAAW,EACX,WAAW,GACqB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AAEjB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IACzB;IAEA,IAAI,aAAa,CAAC,MAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM;YACtC;AACD,QAAA;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;AACnD,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC5E;AAEA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;IACtC;AAEO,IAAA,yBAAyB,CAAC,SAAkB,EAAA;QACjD,IAAI,CAAC,aAAa,EAAE;AAEpB,QAAA,MAAM,OAAO,GAAG,CAAA,QAAA,EAAW,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA,IAAA,CAAM;QAC1E,MAAM,gBAAgB,GACpB,IAAI,CAAC,WAAW,KAAKA,mBAAW,CAAC;AAC/B,cAAE;cACA,iBAAiB,CAAC,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,WAAY,CAAC;QAC3E,IAAI,cAAc,GAAG,EAAE;AAEvB,QAAA,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,gBAAgB,EAAE;AACpB,gBAAA,cAAc,GAAG,YAAY,CAAC,EAAE,GAAG,SAAS;AAC7C,YAAA;AAAM,iBAAA;AACL,gBAAA,cAAc,GAAG,iBAAiB,CAAC,EAAE,GAAG,SAAS;AAClD,YAAA;AACF,QAAA;QAED,OAAO,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,gBAAgB,GAAG,cAAc;IACpE;IAEO,iBAAiB,GAAA;QACtB,IAAI,CAAC,aAAa,EAAE;AAEpB,QAAA,OAAO,WAAW,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA,MAAA,EAAS,QAAQ,CAAC,GAAG,CAAA,EACjE,IAAI,CAAC,QACP,EAAE;IACJ;AAEO,IAAA,gBAAgB,CAAC,GAAW,EAAA;QACjC,IAAI,CAAC,aAAa,EAAE;QAEpB,QACE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC;AACxC,YAAA,IAAI,CAAC,QAAQ;AACb,YAAA,YAAY,CAAC,GAAG;AAChB,YAAA,SAAS,CAAC,GAAG,CAAC;IAElB;AAEO,IAAA,iBAAiB,CAAC,EACvB,WAAW,EACX,OAAO,EACP,mBAAmB,GACS,EAAA;QAC5B,IAAI,CAAC,aAAa,EAAE;AAEpB,QAAA,MAAM,EACJ,UAAU,EACV,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,WAAW,EACX,WAAW,EACX,SAAS,EACT,MAAM,EACN,OAAO,EACP,eAAe,EACf,GAAG,EACH,eAAe,EACf,WAAW,EAAE,iBAAiB,EAC9B,GAAG,GACJ,GAAG,OAAO;QAEX,MAAM,mBAAmB,GAAG;cACxB,YAAY,CAAC;AACf,cAAE,YAAY,CAAC,WAAW;AAC5B,QAAA,MAAM,mBAAmB,GACvB,UAAU,IAAI,iBAAiB,GAAG,YAAY,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE;QACvE,MAAM,oBAAoB,GAAG;AAC3B,cAAE,YAAY,CAAC,UAAU,GAAG;cAC1B,EAAE;QACN,MAAM,oBAAoB,GAAG;AAC3B,cAAE,YAAY,CAAC,WAAW,GAAG;cAC3B,EAAE;QACN,MAAM,oBAAoB,GAAG;AAC3B,cAAE,YAAY,CAAC,UAAU,GAAG;cAC1B,EAAE;AACN,QAAA,MAAM,kBAAkB,GAAG,SAAS,GAAG,YAAY,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE;AACpE,QAAA,MAAM,mBAAmB,GAAG,YAAY,CAAC,UAAU,GAAG,IAAI;QAC1D,MAAM,qBAAqB,GAAG;AAC5B,cAAE,YAAY,CAAC,YAAY,GAAG;cAC5B,EAAE;AACN,QAAA,MAAM,YAAY,GAAG,GAAG,GAAG,YAAY,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE;QACvD,MAAM,wBAAwB,GAAG;AAC/B,cAAE,YAAY,CAAC,eAAe,GAAG;cAC/B,EAAE;AACN,QAAA,MAAM,wBAAwB,GAC5B,OAAO,mBAAmB,KAAK;AAC7B,cAAE,YAAY,CAAC,uBAAuB,GAAG;AACzC,cAAE,YAAY,CAAC,uBAAuB,GAAG,mBAAmB;AAChE,QAAA,MAAM,YAAY,GAAG,GAAG,GAAG,YAAY,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE;QAEvD,QACE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC;AAC1C,YAAA,IAAI,CAAC,QAAQ;YACb,mBAAmB;YACnB,WAAW;YACX,wBAAwB;YACxB,mBAAmB;YACnB,oBAAoB;YACpB,oBAAoB;YACpB,oBAAoB;YACpB,kBAAkB;YAClB,mBAAmB;YACnB,qBAAqB;YACrB,YAAY;YACZ,wBAAwB;AACxB,YAAA,YAAY;IAEhB;AAEO,IAAA,cAAc,CAAC,eAAwB,EAAA;QAC5C,IAAI,CAAC,aAAa,EAAE;QAEpB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,WAAY;QAE3C,IAAI,GAAG,GACL,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3C,YAAA,IAAI,CAAC,QAAQ;AACb,YAAA,YAAY,CAAC,OAAO;YACpB,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,YAAY,CAAC,UAAU;AACvB,YAAA,OAAO;AAET,QAAA,IAAI,eAAe,EAAE;AACnB,YAAA,GAAG,IAAI,YAAY,CAAC,MAAM,GAAG,IAAI;AAClC,QAAA;AAED,QAAA,OAAO,GAAG;IACZ;IAEQ,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;AAClD,QAAA;IACH;AAEQ,IAAA,aAAa,CAAC,KAAmB,EAAA;QACvC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAClC,YAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;AAC9C,QAAA;AAED,QAAA,MAAM,MAAM,GAAG,CAAA,QAAA,EAAW,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA,CAAE;AAEzD,QAAA,QAAQ,KAAK;YACX,KAAK,YAAY,CAAC,UAAU;gBAC1B,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAA,CAAE;YAC3D,KAAK,YAAY,CAAC,SAAS;gBACzB,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA,CAAE;YAC5D,KAAK,YAAY,CAAC,OAAO;gBACvB,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,WAAW,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAA,CAAE;AACvD;IACH;AAEQ,IAAA,UAAU,CAAC,MAAqB,EAAA;QACtC,IAAI,CAAC,MAAM,EAAE;YACX;AACD,QAAA;AAED,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAE1B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,MAAM;QAChD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM;QACjD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,aAAa,GAAG,MAAM;IACpE;AACD;;AC/GD;;;AAGK;AACOC;AAAZ,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,YAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,YAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,YAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,YAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACb,CAAC,EAPWA,oBAAY,KAAZA,oBAAY,GAAA,EAAA,CAAA,CAAA;AASxB;;;AAGK;AACOC;AAAZ,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,cAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EAJWA,sBAAc,KAAdA,sBAAc,GAAA,EAAA,CAAA,CAAA;AA0D1B;;;;AAIK;AACOC;AAAZ,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,YAAA,CAAA,QAAA,CAAA,GAAA,IAAA,CAAA,GAAA,QAAa;AACb,IAAA,YAAA,CAAA,YAAA,CAAA,QAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAiC;AACjC,IAAA,YAAA,CAAA,YAAA,CAAA,MAAA,CAAA,GAAA,OAAA,CAAA,GAAA,MAA+B;AAC/B,IAAA,YAAA,CAAA,YAAA,CAAA,KAAA,CAAA,GAAA,QAAA,CAAA,GAAA,KAA4B;AAC5B,IAAA,YAAA,CAAA,YAAA,CAAA,MAAA,CAAA,GAAA,SAAA,CAAA,GAAA,MAA2B;AAC3B,IAAA,YAAA,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,UAAA,CAAA,GAAA,OAA6B;AAC/B,CAAC,EAPWA,oBAAY,KAAZA,oBAAY,GAAA,EAAA,CAAA,CAAA;;ACnLxB;;;AAGG;MACU,YAAY,CAAA;AAKvB;;;;;;;AAOG;AACH,IAAA,WAAA,CAAY,cAAsB,EAAA;AAZ1B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAA4B;QAC9C,IAAA,CAAA,UAAU,GAA0B,IAAI;QAY9C,IAAI,CAAC,cAAc,GAAG,cAAc,GAAGA,oBAAY,CAAC,MAAM;IAC5D;AAEO,IAAA,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAwB,EAAA;QACtD,eAAe,CAAC,KAAK,CAAA,CAAA,4BAAA,EAA+B,GAAG,WAAW,IAAI,CAAA,YAAA,EAAe,QAAQ,CAAA,CAAA,CAAG;AAChG,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;YAC5B,IAAI,CAAC,QAAQ,EAAE;AAChB,QAAA;AAED,QAAA,MAAM,cAAc,GAAG,QAAQ,GAAGA,oBAAY,CAAC,MAAM;AAErD,QAAA,MAAM,SAAS,GAAqB;YAClC,IAAI;AACJ,YAAA,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc;SAC5C;QAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC;QACjC,eAAe,CAAC,KAAK,CAAA,CAAA,8BAAA,EAAiC,GAAG,WAAW,IAAI,CAAA,YAAA,EAAe,QAAQ,CAAA,CAAA,CAAG;IACpG;AAEO,IAAA,YAAY,CAAC,GAAW,EAAA;AAC7B,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,qCAAA,EAAwC,GAAG,GAAG;QACnE,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QAExC,IAAI,SAAS,IAAI,SAAS,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;AACvD,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI;YAC3B,eAAe,CAAC,KAAK,CAAA,CAAA,uCAAA,EAA0C,GAAG,CAAA,YAAA,EAAe,IAAI,GAAG;AACxF,YAAA,OAAO,IAAI;AACZ,QAAA;QAED,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;AAEtC,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,uCAAA,EAA0C,GAAG,mBAAmB;AACrF,QAAA,OAAO,IAAI;IACb;IAEQ,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,MAAK;AACjC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;YAEtB,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvC,gBAAA,IAAI,IAAI,CAAC,cAAc,GAAG,GAAG,EAAE;AAC7B,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1B,gBAAA;AACF,YAAA;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;gBACvB,IAAI,CAAC,eAAe,EAAE;AACvB,YAAA;AACH,QAAA,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC;IACzB;IAEQ,eAAe,GAAA;QACrB,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACvB,QAAA;IACH;AACD;;AC/ED,IAAY,UAGX;AAHD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,UAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACV,CAAC,EAHW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;AActB,IAAY,QAGX;AAHD,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,QAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACrC,CAAC,EAHW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;AAKpB,IAAY,0BAWX;AAXD,CAAA,UAAY,0BAA0B,EAAA;AACpC,IAAA,0BAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,0BAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,0BAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,0BAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,0BAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,0BAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,0BAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,0BAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,0BAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,0BAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EAXW,0BAA0B,KAA1B,0BAA0B,GAAA,EAAA,CAAA,CAAA;AAatC,IAAY,aAIX;AAJD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACzB,CAAC,EAJW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;AAMbC;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EAJWA,uBAAe,KAAfA,uBAAe,GAAA,EAAA,CAAA,CAAA;AAM3B,IAAY,WAGX;AAHD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC9B,CAAC,EAHW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;AAKvB,IAAY,wBAGX;AAHD,CAAA,UAAY,wBAAwB,EAAA;AAClC,IAAA,wBAAA,CAAA,kBAAA,CAAA,GAAA,iBAAoC;AACpC,IAAA,wBAAA,CAAA,mBAAA,CAAA,GAAA,aAAiC;AACnC,CAAC,EAHW,wBAAwB,KAAxB,wBAAwB,GAAA,EAAA,CAAA,CAAA;;MC1DvB,YAAY,CAAA;IAGhB,eAAe,CACpB,SAAY,EACZ,QAA8B,EAAA;AAE9B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE;AAC/B,QAAA;QAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,QAAwC,CAAC;IAC7E;IAEO,SAAS,CACd,SAAY,EACZ,IAAsB,EAAA;;QAEtB,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG,CAAC,SAAS,CAAC;QAEvD,IAAI,YAAY,IAAI,IAAI,EAAE;YACxB,YAAY,CAAC,IAAI,CAAC;AACnB,QAAA;IACH;AACD;;AC/BD;;;AAGK;AACOC;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,SAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C;AAC7C,CAAC,EAHWA,iBAAS,KAATA,iBAAS,GAAA,EAAA,CAAA,CAAA;;ACDd,MAAM,+BAA+B,GAA0B;AACpE,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,aAAa,EAAE;AACb,QAAA,cAAc,EAAE,KAAK;QACrB,WAAW,EAAE,WAAW,CAAC,WAAW;AACpC,QAAA,aAAa,EAAE,mBAAmB;QAClC,qBAAqB,EAAE,wBAAwB,CAAC,gBAAgB;AACjE,KAAA;CACF;;MCVY,OAAO,CAAA;AAGlB,IAAA,WAAA,CAAY,YAA+B,EAAA;QACzC,IAAI,CAAC,aAAa,GAAG;AAClB,aAAA,KAAK;AACL,aAAA,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;IACxC;AAEO,IAAA,oBAAoB,CAAC,IAAY,EAAA;AACtC,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AACtD,QAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;AAClD,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;IAChC;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,aAAa;IAC3B;AACD;;MCuBY,mBAAmB,CAAA;IA+B9B,WAAA,CAAY,EACV,cAAc,EACd,WAAW,EACX,OAAO,EACP,SAAS,EACT,WAAW,EACX,WAAW,EACX,0BAA0B,EAC1B,YAAY,EACZ,mBAAmB,EACnB,eAAe,GACmB,EAAA;QAzC5B,IAAA,CAAA,6BAA6B,GAA0B,IAAI;AAC3D,QAAA,IAAA,CAAA,UAAU,GAAe,UAAU,CAAC,OAAO;QAC3C,IAAA,CAAA,iBAAiB,GACvB,+BAA+B;AACzB,QAAA,IAAA,CAAA,gBAAgB,GAAiC,IAAI,GAAG,EAAE;QAC1D,IAAA,CAAA,sBAAsB,GAAmB,IAAI;QAC7C,IAAA,CAAA,YAAY,GAAoC,IAAI;QACpD,IAAA,CAAA,WAAW,GAA0B,IAAI;AACzC,QAAA,IAAA,CAAA,YAAY,GAAyB,IAAI,GAAG,EAAE;QAM9C,IAAA,CAAA,WAAW,GAAuC,IAAI;QACtD,IAAA,CAAA,iBAAiB,GAA2C,IAAI;QAQhE,IAAA,CAAA,mBAAmB,GAAY,KAAK;AAEpC,QAAA,IAAA,CAAA,qBAAqB,GAC3B,wBAAwB,CAAC,gBAAgB;AAE1B,QAAA,IAAA,CAAA,uBAAuB,GAAG,EAAE,GAAGF,oBAAY,CAAC,MAAM;AAcjE,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,kBAAkB,GAAG,0BAA0B;AACpD,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;AAC9C,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;IACxC;IAEa,UAAU,GAAA;;AACrB,YAAA,eAAe,CAAC,KAAK,CAAC,wCAAwC,CAAC;YAC/D,IAAI,CAAC,eAAe,EAAE;AAEtB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAE7C,YAAA,IAAI,YAAY,EAAE;AAChB,gBAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE;AAE3D,gBAAA,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE;AACpB,oBAAA,eAAe,CAAC,KAAK,CACnB,mDAAmD,CACpD;AACD,oBAAA,OAAO,YAAY;AACpB,gBAAA;;;;AAKD,gBAAA,MAAM,mBAAmB,GAAG,YAAY,CAAC,IAAI;AAE7C,gBAAA,IAAI,mBAAmB,EAAE;AACvB,oBAAA,eAAe,CAAC,KAAK,CAAC,0CAA0C,CAAC;oBACjE,OAAOL,eAAE,EAAE;AACZ,gBAAA;AACF,YAAA;AAED,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;gBACvE,IAAI,CAAC,qBAAqB,EAAE;AAE5B,gBAAA,eAAe,CAAC,KAAK,CAAC,0CAA0C,CAAC;gBACjE,OAAOA,eAAE,EAAE;AACZ,YAAA;AAED,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC,OAAO,EAAE;gBAC1C,IAAI,CAAC,oBAAoB,EAAE;AAC5B,YAAA;AAED,YAAA,eAAe,CAAC,KAAK,CAAC,0CAA0C,CAAC;YACjE,OAAOA,eAAE,EAAE;QACb,CAAC,CAAA;AAAA,IAAA;IAEO,eAAe,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AAC3B,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACzB,QAAA;QAED,IAAI,IAAI,CAAC,6BAA6B,EAAE;AACtC,YAAA,aAAa,CAAC,IAAI,CAAC,6BAA6B,CAAC;AAClD,QAAA;IACH;IAEQ,qBAAqB,GAAA;QAC3B,IAAI,CAAC,eAAe,EAAE;AAEtB,QAAA,MAAM,mBAAmB,GAAG,CAAC,SAAiB,KAAI;YAChD,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,KAAI;gBAC9D,IAAI,YAAY,CAAC,EAAE,EAAE;oBACnB,IAAI,CAAC,YAAY,CAAC,SAAS,CAACO,iBAAS,CAAC,mBAAmB,EAAE;wBACzD,SAAS;AACV,qBAAA,CAAC;AACH,gBAAA;AACH,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAY,KAAI;AACxC,YAAA,eAAe,CAAC,KAAK,CAAA,CAAA,wCAAA,EAA2C,KAAK,sEAAsE;AAE3I,YAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,OAAO;YACpC,IAAI,CAAC,oBAAoB,EAAE;AAC7B,QAAA,CAAC,CAAC;IACJ;IAEQ,oBAAoB,GAAA;;;;;QAK1B,IAAI,CAAC,eAAe,EAAE;;;QAItB,IAAI;YACF,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAChD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAC/B,IAAI,CAAC,cAAc,IAAI,GAAG,GAAG,cAAc,CAAC,EAC5C,CAAC,CACF;YAED,UAAU,CAAC,MAAW,SAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,aAAA;AACpB,gBAAA,MAAM,IAAI,CAAC,yBAAyB,EAAE;AACtC,gBAAA,IAAI,CAAC,6BAA6B,GAAG,WAAW,CAC9C,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EACzC,IAAI,CAAC,cAAc,CACpB;AACH,YAAA,CAAC,CAAA,EAAE,gBAAgB,CAAC;AACrB,QAAA;AAAC,QAAA,OAAO,GAAG,EAAE;YACZ,IAAI,IAAI,CAAC,6BAA6B,EAAE;AACtC,gBAAA,aAAa,CAAC,IAAI,CAAC,6BAA6B,CAAC;AAClD,YAAA;AAED,YAAA,MAAM,GAAG;AACV,QAAA;IACH;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,gBAAgB;IAC9B;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa;IAC7C;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO,IAAI,CAAC,YAAY;AACzB,QAAA;AAED,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB;QAEnD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE;AACjE,oBAAA,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC;AAC3D,gBAAA;AACH,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAEhC,QAAA,OAAO,YAAY;IACrB;AAEA,IAAA,IAAI,OAAO,GAAA;;AACT,QAAA,IAAI,MAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,EAAE;YAC1B,OAAO,IAAI,CAAC,WAAW;AACxB,QAAA;AAED,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAA0B;QAErD,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE;AACpD,YAAA,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,EAAE;gBACpC,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,qBAAqB,EAAE,GAAG,IAAI;AACxD,gBAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB;gBAE9C,qBAAqB,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,KAAI;AAC9D,oBAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACnC,wBAAA,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC;AAC5C,oBAAA;AACH,gBAAA,CAAC,CAAC;AAEF,gBAAA,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE;oBAClB,SAAS,EAAE,WAAW,CAAC,EAAE;oBACzB,YAAY;AACZ,oBAAA,UAAU,EAAE,YAAY;AACzB,iBAAA,CAAC;AACH,YAAA;AACF,QAAA;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAE9B,QAAA,OAAO,WAAW;IACpB;AAEA,IAAA,IAAI,aAAa,GAAA;;AACf,QAAA,IAAI,MAAA,IAAI,CAAC,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,EAAE;YAChC,OAAO,IAAI,CAAC,iBAAiB;AAC9B,QAAA;AAED,QAAA,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA8B;QAE/D,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE;AACpD,YAAA,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,EAAE;AACpC,gBAAA,MAAM,EAAE,YAAY,EAAE,qBAAqB,EAAE,GAAG,IAAI;AACpD,gBAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB;gBAE9C,qBAAqB,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,KAAI;AAC9D,oBAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACnC,wBAAA,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC;AAC5C,oBAAA;AACH,gBAAA,CAAC,CAAC;AAEF,gBAAA,iBAAiB,CAAC,GAAG,CAAC,YAAY,EAAE;oBAClC,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,oBAAA,UAAU,EAAE,YAAY;AACzB,iBAAA,CAAC;AACH,YAAA;AACF,QAAA;AAED,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAE1C,QAAA,OAAO,iBAAiB;IAC1B;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,WAAW;IACzB;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ;IAChE;AAEA,IAAA,IAAI,wBAAwB,GAAA;QAC1B,OAAO,IAAI,CAAC,qBAAqB;IACnC;AAEA,IAAA,IAAI,0BAA0B,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,EAAE;YACxC,OAAO,IAAI,CAAC,sBAAsB;AACnC,QAAA;QAED,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE;YACpD,IACE,WAAW,CAAC,kBAAkB;AAC9B,gBAAA,WAAW,CAAC,KAAK,CAAC,IAAI,CACpB,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,iBAAiB,CACnD,EACD;AACA,gBAAA,OAAO,IAAI;AACZ,YAAA;AACF,QAAA;AAED,QAAA,OAAO,KAAK;IACd;IAEQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,iBAAiB;AAEhD,QAAA,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC;cAC5B,UAAU,CAAC;AACb,cAAE,UAAU,CAAC,OAAO;AAEtB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC3B,YAAA,OAAO,IAAI;AACZ,QAAA;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;QAChD,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc;QAEzD,OAAO,cAAc,GAAG,gBAAgB;IAC1C;IAEQ,eAAe,GAAA;;AACrB,QAAA,eAAe,CAAC,KAAK,CAAC,6CAA6C,CAAC;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QAElC,IAAI,MAAM,CAAC,EAAE,EAAE;AACb,YAAA,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,IAAI;YAEjE,IAAI,sBAAsB,GAAG,KAAK;YAClC,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,IAAI;oBACF,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAChC,IAAI,CAAC,eAAe,CACI;AAC1B,oBAAA,IAAI,CAAC,eAAe,GAAG,SAAS;AAChC,oBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,oBAAA,MAAM,iBAAiB,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC;oBAChE,MAAM,mBAAmB,GAAG,CAAA,EAAA,GAAA,eAAe,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC;AAC7D,oBAAA,IAAI,CAAC,WAAW,IAAI,mBAAmB,GAAG,iBAAiB,EAAE;wBAC3D,IAAI,GAAG,eAAe;wBACtB,sBAAsB,GAAG,IAAI;AAC9B,oBAAA;AACF,gBAAA;AAAC,gBAAA,OAAO,KAAK,EAAE;oBACd,eAAe,CAAC,KAAK,CAAA,CAAA,iCAAA,EAAoC,MAAM,CAC7D,KAAK,CACN,CAAA,CAAE;AACJ,gBAAA;AACF,YAAA;AAED,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,sBAAsB,CAAC;AAE1D,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACrB,kBAAE,IAAI,IAAI,CAAC,CAAC;kBACV,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC/B,QAAA;QACD,eAAe,CAAC,KAAK,CAAA,CAAA,0DAAA,EAA6D,MAAM,CAAC,EAAE,GAAG;IAChG;AAEA;;;;;;AAMG;AACW,IAAA,yBAAyB,CACrC,SAAkB,EAAA;;AAElB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE;YAE9B,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBAC5B,IAAI,CAAC,qCAAqC,EAAE;AAC5C,gBAAA,OAAOP,eAAE,CAAC,KAAK,CAAC;AACjB,YAAA;AAED,YAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE;gBACxE,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,uBAAuB,EAAE;oBAClE,IAAI,CAAC,qCAAqC,EAAE;AAC5C,oBAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;AACjB,gBAAA;AAAM,qBAAA;AACL,oBAAA,eAAe,CAAC,KAAK,CAAA,CAAA,2DAAA,CAA6D;AACnF,gBAAA;AACF,YAAA;AAED,YAAA,MAAM,yBAAyB,GAC7B,MAAM,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;AAE3E,YAAA,OAAO,IAAI,CAAC,qCAAqC,CAC/C,yBAAyB,CAC1B;QACH,CAAC,CAAA;AAAA,IAAA;IAEO,qCAAqC,GAAA;QAC3C,UAAU,CAAC,MAAW,SAAA,CAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA;AACpB,YAAA,MAAM,yBAAyB,GAC7B,MAAM,IAAI,CAAC,SAAS,CAAC,sBAAsB,CACzC,SAAS,EACT,IAAI,CAAC,YAAY,CAClB;AACH,YAAA,MAAM,IAAI,CAAC,qCAAqC,CAC9C,yBAAyB,CAC1B;AACH,QAAA,CAAC,CAAA,EAAE,CAAC,CAAC;IACP;AAEc,IAAA,qCAAqC,CACjD,yBAGC,EAAA;;;AAED,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE;AAC7B,YAAA,IAAI,CAAC,yBAAyB,CAAC,EAAE,EAAE;AACjC,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC1B,oBAAA,eAAe,CAAC,KAAK,CACnB,iGAAiG,CAClG;AACD,oBAAA,OAAOA,eAAE,CAAC,IAAI,CAAC;AAChB,gBAAA;AAED,gBAAA,OAAO,yBAAyB;AACjC,YAAA;AAED,YAAA,IAAI,yBAAyB,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;;;gBAG9D,IAAI,CAAC,iBAAiB,EAAE;AACxB,gBAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;AACjB,YAAA;AAED,YAAA,MAAM,uBAAuB,GAC3B,yBAAyB,CAAC,IAAI,CAAC,aAAa;AAE9C,YAAA,IAAI,CAAC,uBAAuB,CAAC,uBAAuB,EAAE,IAAI,CAAC;AAE3D,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AAC7B,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE;AACzB,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAElC,YAAA,IAAI,yBAAyB,CAAC,IAAI,CAAC,YAAY,EAAE;gBAC/C,IAAI,CAAC,YAAY,GAAG,yBAAyB,CAAC,IAAI,CAAC,YAAY;AAChE,YAAA;AAED,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAEvC,YAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;AACd,gBAAA,OAAO,MAAM;AACd,YAAA;AAED,YAAA,MAAM,UAAU,GAAG,uBAAuB,CAAC,aAAa,CAAC;kBACrD,UAAU,CAAC;AACb,kBAAE,UAAU,CAAC,OAAO;AAEtB,YAAA,MAAM,gBAAgB,GAAG,UAAU,KAAK,IAAI,CAAC,UAAU;AAEvD,YAAA,IAAI,gBAAgB,EAAE;AACpB,gBAAA,IAAI,CAAC,UAAU,GAAG,UAAU;gBAC5B,eAAe,CAAC,IAAI,CAAA,CAAA,yCAAA,EAA4C,UAAU,CAAC,UAAU,CAAC,CAAA,CAAE;AACxF,gBAAA,MAAM,IAAI,CAAC,UAAU,EAAE;AACxB,YAAA;AAED,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,+BAA+B,CAC/D,uBAAuB,CAAC,aAAa,CAAC,qBAAqB,CAC5D;AAED,YAAA,OAAOA,eAAE,CAAC,gBAAgB,CAAC;;AAC5B,IAAA;AAEO,IAAA,uBAAuB,CAC7B,IAA2B,EAC3B,sBAAA,GAAkC,IAAI,EAAA;AAEtC,QAAA,MAAM,EACJ,aAAa,EACb,YAAY,EACZ,UAAU,EACV,OAAO,EACP,QAAQ,EACR,YAAY,GACb,GAAG,IAAI;QAER,IAAI,WAAW,GAAoC;cAC/C,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;cACnE,IAAI;QACR,IAAI,mBAAmB,GAA+B,IAAI;AAE1D,QAAA,IAAI,sBAAsB,EAAE;AAC1B,YAAA,IAAI,UAAU,KAAA,IAAA,IAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,EAAE;AACtB,gBAAA,mBAAmB,GAAG,IAAI,GAAG,EAAE;AAC/B,gBAAA,KAAK,IAAI,IAAI,IAAI,UAAU,EAAE;AAC3B,oBAAA,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE;wBACzB,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC;AAC7C,oBAAA;AAAM,yBAAA;wBACL,mBAAmB,GAAG,IAAI;wBAC1B;AACD,oBAAA;AACF,gBAAA;AACF,YAAA;AACF,QAAA;AAED,QAAA,MAAM,eAAe,GAAiC,IAAI,GAAG,EAAE;AAC/D,QAAA,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;YACtC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC;;AAGxD,YAAA,IAAI,sBAAsB,EAAE;AAC1B,gBAAA,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,WAAW,CAAC;AACxD,gBAAA,IAAI,CAAC,sCAAsC,CACzC,WAAW,EACX,mBAAmB,CACpB;AACF,YAAA;AACF,QAAA;AACD,QAAA,IAAI,CAAC,gBAAgB,GAAG,eAAe;AAEvC,QAAA,IAAI,UAAU,KAAA,IAAA,IAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,EAAE;AACtB,YAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,GAAG,UAAU;AAChD,QAAA;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;QACnD,IAAI,CAAC,WAAW,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,IAAI;QAElC,IAAI,CAAC,iBAAiB,GAAG;YACvB,aAAa;YACb,UAAU;YACV,OAAO;YACP,YAAY;SACb;QAED,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa;QAEjE,IAAI,CAAC,qBAAqB,EAAE;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW;IACjC;IAEQ,yBAAyB,CAC/B,WAA4B,EAC5B,WAA4C,EAAA;QAE5C,IAAI,WAAW,KAAK,IAAI,EAAE;YACxB,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;;AACjC,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;AAChC,gBAAA,IAAI,CAAC,OAAO;AACV,oBAAA,SAAS,IAAI;AACX,0BAAE,CAAA,EAAA,GAAA,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI;0BACzC,IAAI;AACZ,YAAA,CAAC,CAAC;AACH,QAAA;IACH;IAEQ,sCAAsC,CAC5C,WAA4B,EAC5B,mBAA+C,EAAA;AAE/C,QAAA,MAAM,qBAAqB,GAAG,WAAW,CAAC,qBAAqB;AAC/D,QAAA,IAAI,qBAAqB,IAAI,IAAI,IAAI,mBAAmB,EAAE;YACxD,WAAW,CAAC,wBAAwB,GAAG,mBAAmB,CAAC,GAAG,CAC5D,qBAAqB,CACtB;AACF,QAAA;IACH;AAEQ,IAAA,YAAY,CAAC,YAA+B,EAAA;AAClD,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAA6B;AAEzD,QAAA,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AACnC,YAAA,MAAM,SAAS,GAAG,WAAW,CAAC,sBAAsB;AACpD,YAAA,IAAI,SAAS,EAAE;gBACb,IAAI,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;AAC7C,gBAAA,IAAI,WAAW,EAAE;AACf,oBAAA,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9B,gBAAA;AAAM,qBAAA;oBACL,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,CAAC;AAC3C,gBAAA;AACF,YAAA;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB;QAE3C,YAAY,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,SAAS,KAAI;YAC/C,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;AACpD,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,QAAQ;IACjB;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE;QAE5B,MAAM,iBAAiB,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAClB,IAAI,CAAC,iBAAiB,KACzB,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EACpD,QAAQ,EAAE,IAAI,CAAC;kBACX,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;kBACrC,SAAS,EAAA,CACd;AAED,QAAA,MAAM,IAAI,GAAmB;AAC3B,YAAA,IAAI,EAAE,iBAAiB;AACvB,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;YACtC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;IACjC;IAEQ,qBAAqB,GAAA;;;;QAI3B,IAAI,CAAC,kBAAkB,CAAC,eAAe;AACrC,YAAA,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,0BAA0B;IAC9D;AAEQ,IAAA,+BAA+B,CACrC,GAAW,EAAA;AAEX,QAAA,IACE,GAAG,KAAK,wBAAwB,CAAC,gBAAgB;AACjD,YAAA,GAAG,KAAK,wBAAwB,CAAC,iBAAiB,EAClD;AACA,YAAA,OAAO,GAAG;AACX,QAAA;AAED,QAAA,eAAe,CAAC,KAAK,CAAC,qCAAqC,GAAG,CAAA,CAAA,CAAG,CAAC;QAClE,OAAO,wBAAwB,CAAC,gBAAgB;IAClD;AACD;;ACjpBK,SAAU,gBAAgB,CAC9B,QAA2B,EAAA;AAE3B,IAAA,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CACxC;AACxB;;AC2NYQ;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,aAA+B;AAC/B,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,aAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC;AACzC,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD;AACrD,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACrC,CAAC,EAjBWA,qBAAa,KAAbA,qBAAa,GAAA,EAAA,CAAA,CAAA;AAyMzB;;;AAGK;AACOC;AAAZ,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EAJWA,kBAAU,KAAVA,kBAAU,GAAA,EAAA,CAAA,CAAA;AAMtB;;;AAGK;AACOC;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,mBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,mBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,mBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,mBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACb,CAAC,EAPWA,2BAAmB,KAAnBA,2BAAmB,GAAA,EAAA,CAAA,CAAA;AA0D/B;;;AAGK;AACOC;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,kBAAA,CAAA,GAAA,IAAuB;AACvB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAPWA,mBAAW,KAAXA,mBAAW,GAAA,EAAA,CAAA,CAAA;AAShB,MAAM,uBAAuB,GAAG;AACrC,IAAA,CAACD,2BAAmB,CAAC,OAAO,GAAG,CAAC;AAChC,IAAA,CAACA,2BAAmB,CAAC,GAAG,GAAG,CAAC;AAC5B,IAAA,CAACA,2BAAmB,CAAC,GAAG,GAAG,CAAC;AAC5B,IAAA,CAACA,2BAAmB,CAAC,KAAK,GAAG,CAAC;AAC9B,IAAA,CAACA,2BAAmB,CAAC,OAAO,GAAG,CAAC;AAChC,IAAA,CAACA,2BAAmB,CAAC,YAAY,GAAG,CAAC;CAC7B;AAEH,MAAM,sBAAsB,GAAG,gBAAgB,CACpD,uBAAuB,CACxB;AAEM,MAAM,eAAe,GAAG;AAC7B,IAAA,CAACC,mBAAW,CAAC,MAAM,GAAG,CAAC;AACvB,IAAA,CAACA,mBAAW,CAAC,gBAAgB,GAAG,CAAC;AACjC,IAAA,CAACA,mBAAW,CAAC,OAAO,GAAG,CAAC;AACxB,IAAA,CAACA,mBAAW,CAAC,MAAM,GAAG,CAAC;AACvB,IAAA,CAACA,mBAAW,CAAC,KAAK,GAAG,CAAC;AACtB,IAAA,CAACA,mBAAW,CAAC,KAAK,GAAG,CAAC;CACd;AAEH,MAAM,cAAc,GAAG,gBAAgB,CAAc,eAAe,CAAC;;ACnhBrE,MAAM,iBAAiB,GAAG,KAAK;AAC/B,MAAM,sBAAsB,GAAG,oBAAoB;AACnD,MAAM,qBAAqB,GAAG,EAAE;AAChC,MAAM,mBAAmB,GAAG,CAAC;AAC7B,MAAM,wBAAwB,GAAG,YAAY;AAEpD;;;AAGK;AACOC;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,eAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,eAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EAdWA,uBAAe,KAAfA,uBAAe,GAAA,EAAA,CAAA,CAAA;AAgBpB,MAAM,4BAA4B,GAA2B;AAClE,IAAA,mBAAmB,EAAE,CAAC;AACtB,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,eAAe,EAAE,KAAK;CACvB;;AClCD,IAAY,QAGX;AAHD,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,QAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACX,CAAC,EAHW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;AAiEpB,IAAY,cAYX;AAZD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,cAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC;AACzC,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,cAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAZW,cAAc,KAAd,cAAc,GAAA,EAAA,CAAA,CAAA;AAc1B,IAAY,WAGX;AAHD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACzB,CAAC,EAHW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;AAKvB,IAAY,kBAGX;AAHD,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,kBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAHW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;AAK9B,IAAY,aAIX;AAJD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAJW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;AAMzB,IAAY,YAIX;AAJD,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,YAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,YAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACb,CAAC,EAJW,YAAY,KAAZ,YAAY,GAAA,EAAA,CAAA,CAAA;AAMxB;AACA;AACA;AACA;AACA,IAAY,SASX;AATD,CAAA,UAAY,SAAS,EAAA;;AAEnB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,SAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,SAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC;;AAEzC,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EATW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;AAWrB,IAAY,gBAIX;AAJD,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,GAAA,EAAA,CAAA,CAAA;AAM5B,IAAY,aAKX;AALD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC;AACzC,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACvB,CAAC,EALW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;AAOzB,IAAY,aA+DX;AA/DD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,aAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,aAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD;AACrD,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,aAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD;AACjD,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,aAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C;AAC3C,IAAA,aAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,aAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,aAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C;AAC3C,IAAA,aAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD;AACjD,IAAA,aAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,aAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,aAAA,CAAA,yBAAA,CAAA,GAAA,yBAAmD;AACnD,IAAA,aAAA,CAAA,yBAAA,CAAA,GAAA,yBAAmD;AACnD,IAAA,aAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,aAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C;AAC7C,CAAC,EA/DW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;;AC9GzB,IAAY,QAMX;AAND,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,QAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,QAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,QAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EANW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;AAQpB,IAAY,KAGX;AAHD,CAAA,UAAY,KAAK,EAAA;AACf,IAAA,KAAA,CAAA,WAAA,CAAA,GAAA,KAAiB;AACjB,IAAA,KAAA,CAAA,YAAA,CAAA,GAAA,MAAmB;AACrB,CAAC,EAHW,KAAK,KAAL,KAAK,GAAA,EAAA,CAAA,CAAA;;ACnCV,MAAM,cAAc,GAAG,kBAAkB;AACzC,MAAM,YAAY,GAAG,EAAE;AACvB,MAAM,IAAI,GAAG,SAAS;AACtB,MAAM,KAAK,GAAG,UAAU;AACxB,MAAM,SAAS,GAAG,WAAW;AAC7B,MAAM,YAAY,GACvB,kHAAkH;AAC7G,MAAM,kBAAkB,GAAG,GAAG;AAC9B,MAAM,qBAAqB,GAAG,CAAC;AAC/B,MAAM,wBAAwB,GAAG,EAAE;;MCJ7B,SAAS,CAAA;IACpB,OAAO,eAAe,CACpB,OAAe,EAAA;QAEf,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAEnE,QAAA,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAA,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AACrB,QAAA;AAED,QAAA,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;AAC5C,YAAA,OAAOX,gBAAG,CACR,IAAI,cAAc,CAACN,0BAAkB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CACrE;AACF,QAAA;QAED,OAAOK,eAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAA6B,CAAC;IACjE;IAEA,OAAO,cAAc,CAAC,MAA0B,EAAA;QAC9C,IAAI,CAAC,MAAM,EAAE;YACX,OAAOC,gBAAG,EAAE;AACb,QAAA;QAED,MAAM,GAAG,SAAS,CAAC,oBAAoB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAE7D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,SAAS,EAAE;AACtD,YAAA,eAAe,CAAC,KAAK,CAAA,CAAA,qBAAA,EAAwB,MAAM,kKAAkK;AACrN,YAAA,OAAOD,eAAE,CAAC,MAAM,CAAC;AAClB,QAAA;AAED,QAAA,OAAOA,eAAE,CAAC,MAAM,CAAC;IACnB;IAEA,OAAO,qBAAqB,CAAC,aAAiC,EAAA;QAC5D,IAAI,CAAC,aAAa,EAAE;YAClB,OAAOC,gBAAG,EAAE;AACb,QAAA;QAED,aAAa,GAAG,SAAS,CAAC,oBAAoB,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;;QAG3E,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;QAEvD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,aAAa,KAAK,SAAS,EAAE;AACpE,YAAA,eAAe,CAAC,KAAK,CAAA,CAAA,mBAAA,EAAsB,aAAa,cAAc;YACtE,OAAOA,gBAAG,EAAE;AACb,QAAA;AAED,QAAA,OAAOD,eAAE,CAAC,aAAa,CAAC;IAC1B;IAEQ,OAAO,oBAAoB,CAAC,MAAc,EAAA;AAChD,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AAC/B,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,YAAA,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBAC/B,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC1C,eAAe,CAAC,OAAO,CAAA,CAAA,oBAAA,EAAuB,QAAQ,CAAA,kCAAA,EAAqC,MAAM,EAAE;gBACnG;AACD,YAAA;AACF,QAAA;AAED,QAAA,OAAO,MAAM;IACf;AACD;;MC7CY,SAAS,CAAA;IACpB,OAAO,QAAQ,CAAC,IAAmB,EAAA;QACjC,IAAI,KAAK,GAAW,EAAE;QAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;YAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;AAC3D,YAAA,KAAK,IAAI,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC;AAC5C,QAAA;AAED,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,cAAc,CAAC,EACpB,OAAO,EACP,WAAW,EACX,aAAa,EACb,YAAY,EACZ,sBAAsB,EACtB,mBAAmB,EACnB,WAAW,EACX,WAAW,GACkB,EAAA;QAC7B,eAAe,CAAC,KAAK,CAAA,CAAA,2CAAA,EAA8C,WAAW,oBAAoB,aAAa,CAAA,gBAAA,EAAmB,YAAY,CAAA,wEAAA,CAA0E;QACxN,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE;AACzD,YAAA,MAAM,MAAM,GAAGA,eAAE,CAAC,IAAI,CAAC;AACvB,YAAA,eAAe,CAAC,KAAK,CAAA,CAAA,4CAAA,EAA+C,WAAW,CAAA,iBAAA,EAAoB,aAAa,CAAA,gBAAA,EAAmB,YAAY,CAAA,qFAAA,EAAwF,MAAM,CAAA,CAAA,CAAG;AAChP,YAAA,OAAO,MAAM;AACd,QAAA;QAED,IAAI,CAAC,sBAAsB,EAAE;AAC3B,YAAA,MAAM,MAAM,GAAGC,gBAAG,CAAC,IAAI,cAAc,CAACN,0BAAkB,CAAC,cAAc,CAAC,CAAC;AACzE,YAAA,eAAe,CAAC,KAAK,CAAA,CAAA,4CAAA,EAA+C,WAAW,CAAA,iBAAA,EAAoB,aAAa,CAAA,gBAAA,EAAmB,YAAY,CAAA,qFAAA,EAAwF,MAAM,CAAA,CAAA,CAAG;AAChP,YAAA,OAAO,MAAM;AACd,QAAA;QAED,IAAI,UAAU,GAA8B,EAAE;QAE9C,MAAM,wBAAwB,GAC5B,sBAAsB,CAAC,mBAAmB,CAAC,WAAW,CAAC;QAEzD,IAAI,wBAAwB,CAAC,EAAE,EAAE;AAC/B,YAAA,UAAU,GAAG,wBAAwB,CAAC,IAAI;AAC3C,QAAA;QAED,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;QAElD,IAAI,KAAK,GAAG,SAAS;QACrB,IAAI,OAAO,GAAG,SAAS;QACvB,IAAI,QAAQ,GAAG,SAAS;;;QAIxB,IAAI,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;AACzD,YAAA,KAAK,GAAG,WAAW,CAAC,KAAK;AACzB,YAAA,QAAQ,GAAG,mBAAmB,CAAC,QAAQ;AACxC,QAAA;;;QAID,IAAI,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC,mBAAmB,CAAC,EAAE;AACrE,YAAA,OAAO,GAAG,mBAAmB,CAAC,OAAO;AACtC,QAAA;AAED,QAAA,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;AACpC,YAAA,aAAa,EAAE,UAAU;AACzB,YAAA,OAAO,EAAE,WAAW;YACpB,QAAQ;YACR,OAAO;YACP,KAAK;YACL,aAAa;YACb,YAAY;YACZ,WAAW;AACZ,SAAA,CAAC;AAEF,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,4CAAA,EAA+C,WAAW,CAAA,iBAAA,EAAoB,aAAa,CAAA,gBAAA,EAAmB,YAAY,CAAA,qFAAA,EAAwF,MAAM,CAAA,CAAA,CAAG;AAChP,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,OAAO,eAAe,CAAC,IAAY,EAAE,QAAkB,EAAA;AACrD,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,CAAC,QAAQ,CAAC,MAAM,GAAGU,oBAAY,CAAC,MAAM;AACtC,YAAA,CAAC,QAAQ,CAAC,IAAI,GAAGA,oBAAY,CAAC,IAAI;AAClC,YAAA,CAAC,QAAQ,CAAC,GAAG,GAAGA,oBAAY,CAAC,GAAG;AAChC,YAAA,CAAC,QAAQ,CAAC,IAAI,GAAGA,oBAAY,CAAC,IAAI;AAClC,YAAA,CAAC,QAAQ,CAAC,KAAK,GAAGA,oBAAY,CAAC,KAAK;SACrC;AAED,QAAA,OAAO,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC;IACjC;IAEA,OAAO,YAAY,CAAC,QAA2B,EAAA;QAC7C,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAKG,qBAAa,CAAC,UAAU;IACxD;AAEA,IAAA,OAAO,WAAW,CAAC,EACjB,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,GACe,EAAA;QAC1B,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC;QAExD,MAAM,YAAY,GAAG,SAAS,GAAE,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,SAAS,CAAA,GAAK,EAAE;QAEtD,YAAY,CAAC,YAAY,CAAC,GAAG;YAC3B,WAAW;YACX,iBAAiB;YACjB,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,mBAAmB,GAAGH,oBAAY,CAAC,MAAM;SACvE;QAED,YAAY,CAAC,GAAG,CAAC;AACf,YAAA,GAAG,EAAE,WAAW;AAChB,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,QAAQ,EAAE,mBAAmB;AAC9B,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,eAAe,CACpB,aAAkD,EAClD,WAAmB,EAAA;QAEnB,IAAI,YAAY,GAAG,kDAAkD;QAErE,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,CAAC,WAAW,CAAC;QAEzD,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,YAAY;AACpB,QAAA;QAED,MAAM,gBAAgB,GAA0B,EAAE;QAElD,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAC/B,CAAC,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC,KAAI;AACrE,YAAA,MAAM,IAAI,GAAG,CAAC,iBAAiB;AAE/B,YAAA,IAAI,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;AAC/B,gBAAA,YAAY,IAAI,CAAA,0DAAA,EAA6D,YAAY,CAAA,CAAA,EAAI,WAAW,UAAU;AAClH,gBAAA,YAAY,IAAI,CAAA,kDAAA,EAAqD,YAAY,CAAA,CAAA,EAAI,IAAI,KAAK;AAE9F,gBAAA,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG;oBACvC,WAAW;oBACX,cAAc;oBACd,iBAAiB;iBAClB;AACF,YAAA;AACH,QAAA,CAAC,CACF;;;QAID,aAAa,CAAC,GAAG,CAAC;AAChB,YAAA,GAAG,EAAE,WAAW;AAChB,YAAA,IAAI,EAAE,gBAAgB;AACtB,YAAA,QAAQ,EAAE,mBAAmB;AAC9B,SAAA,CAAC;AAEF,QAAA,OAAO,YAAY;IACrB;IAEA,OAAO,aAAa,CAAC,EACnB,OAAO,EACP,cAAc,EACd,QAAQ,GAKT,EAAA;QACC,MAAM,aAAa,GAAG,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC;QACxD,MAAM,oBAAoB,GAAG,SAAS,CAAC,eAAe,CAAC,cAAc,CAAC;AAEtE,QAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE;AACrB,YAAA,OAAOJ,gBAAG,CAAC,aAAa,CAAC,KAAK,CAAC;AAChC,QAAA;AAED,QAAA,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE;AAC5B,YAAA,OAAOA,gBAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACvC,QAAA;QAED,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,IAAI;QAChD,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,GAC9C,oBAAoB,CAAC,IAAI;AAE3B,QAAA,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,GAAG;AACjD,YAAA,KAAK,KAAK,YAAY;AACtB,YAAA,KAAK,KAAK,YAAY;AACtB,YAAA,KAAK,KAAK,YAAY;SACvB;AAED,QAAA,QAAQ,QAAQ;YACd,KAAK,gBAAgB,CAAC,KAAK;gBACzB,OAAOD,eAAE,CAAC,YAAY,IAAI,YAAY,IAAI,YAAY,CAAC;YACzD,KAAK,gBAAgB,CAAC,OAAO;AAC3B,gBAAA,OAAOA,eAAE,CACP,KAAK,GAAG,YAAY;AAClB,qBAAC,YAAY,IAAI,KAAK,GAAG,YAAY,CAAC;qBACrC,YAAY,IAAI,YAAY,IAAI,KAAK,GAAG,YAAY,CAAC,CACzD;YACH,KAAK,gBAAgB,CAAC,KAAK;AACzB,gBAAA,OAAOA,eAAE,CACP,KAAK,GAAG,YAAY;AAClB,qBAAC,YAAY,IAAI,KAAK,GAAG,YAAY,CAAC;qBACrC,YAAY,IAAI,YAAY,IAAI,KAAK,GAAG,YAAY,CAAC,CACzD;AACH,YAAA;AACE,gBAAA,eAAe,CAAC,KAAK,CAAA,CAAA,4BAAA,EAA+B,QAAQ,EAAE;gBAC9D,YAAY,CAAC,QAAQ,CAAC;AACzB;IACH;AAEA,IAAA,OAAO,kBAAkB,CACvB,qBAAkD,EAClD,IAAY,EAAA;QAEZ,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,KAAK,MAAM,YAAY,IAAI,qBAAqB,EAAE;AAChD,YAAA,KAAK,IAAI,YAAY,CAAC,UAAU;YAChC,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,gBAAA,OAAO,YAAY;AACpB,YAAA;AACF,QAAA;AACD,QAAA,OAAO,IAAI;IACb;AACD;;MClPY,aAAa,CAAA;AACxB;;;;;AAKG;IACH,OAAO,0BAA0B,CAAC,EAChC,IAAI,EACJ,OAAO,EACP,KAAK,GAC6B,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC1B;AACD,QAAA;AAED,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,KAChC,KAAK,KAAK,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,OAAO,GAAG,IAAI,IAAI,OAAO,CAC9D;AAED,QAAA,IAAI,KAAK,KAAK,EAAE,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,OAAc,CAAC;AAC1B,QAAA;AAAM,aAAA;YACL,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC;AAC/B,QAAA;IACH;AAEA;;;;AAIG;AACH,IAAA,OAAO,+BAA+B,CAAC,EACrC,IAAI,EACJ,KAAK,GACkC,EAAA;;AAEvC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAClC,OAAO,IAAI,KAAK;AACd,cAAE,IAAI,KAAK,KAAK,CAAC;cACf,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,CAC3C;AACD,QAAA,IAAI,YAAY,EAAE;YAChB;AACD,QAAA;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACpC,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,gBAAA,OAAO,IAAI,IAAI,KAAK,CAAC,WAAW;AACjC,YAAA;AACD,YAAA,OAAO,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW;AAC9C,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,KAAK,KAAK,EAAE,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACjB,QAAA;AAAM,aAAA;YACL,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC;AAC7B,QAAA;AAED,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,wBAAwB,EAAE;YAC1C,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,wBAAwB,CAAC;AACvD,QAAA;IACH;AACD;;AC5DD;;;AAGK;MACQ,QAAQ,CAAA;AAUnB;;AAEK;AACL,IAAA,WAAA,CAAY,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAA0B,EAAA;AAClE,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC1B,IAAI,CAAC,UAAU,GAAG;AAChB,YAAA;AACE,gBAAA,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;gBAChB,MAAM,EAAEI,sBAAc,CAAC,MAAM;AAC9B,aAAA;SACF;IACH;AAEA,IAAA,IAAI,GAAG,GAAA;;;;;AAIL,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,OAAO,EAAE;AACV,QAAA;AAED,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC;cACxB,YAAY,CAAC,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK;cAClD,EAAE;QAEN,MAAM,kBAAkB,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,0CAAE,MAAM;AAC/C,cAAE,YAAY,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS;cAC7D,EAAE;QAEN,QACE,YAAY,CAAC,IAAI;AACjB,YAAA,YAAY,CAAC,IAAI;AACjB,YAAA,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;YACnC,cAAc;AACd,YAAA,kBAAkB;IAEtB;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,MAAM,EACJ,CAACA,sBAAc,CAAC,IAAI,GAAG,IAAI,EAC3B,CAACA,sBAAc,CAAC,MAAM,GAAG,MAAM,EAC/B,CAACA,sBAAc,CAAC,OAAO,GAAG,OAAO,GAClC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CACxB,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAI;AAClB,YAAA,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI;AAClB,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC,EACD;AACE,YAAA,CAACA,sBAAc,CAAC,IAAI,GAAG,KAAK;AAC5B,YAAA,CAACA,sBAAc,CAAC,MAAM,GAAG,KAAK;AAC9B,YAAA,CAACA,sBAAc,CAAC,OAAO,GAAG,KAAK;AAChC,SAAA,CACF;AAED,QAAA,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE;YAC/B,OAAOA,sBAAc,CAAC,IAAI;AAC3B,QAAA;AAED,QAAA,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE;YACtB,OAAOA,sBAAc,CAAC,OAAO;AAC9B,QAAA;QAED,OAAOA,sBAAc,CAAC,MAAM;IAC9B;IAEA,IAAI,MAAM,CAAC,MAAsB,EAAA;QAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,MAAK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAChD,SAAS,KACZ,MAAM,EAAA,CAAA,CACN,CAAC;IACL;IAEA,IAAI,MAAM,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAEI,qBAAa,CAAC,QAAQ;YAC5B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB;IACH;AAEA;;;;;AAKK;IACE,OAAO,QAAQ,CAAC,IAAsB,EAAA;AAC3C,QAAA,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI;AAChE,QAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;YAC5B,UAAU;YACV,KAAK;YACL,SAAS;AACV,SAAA,CAAC;AAEF,QAAA,QAAQ,CAAC,UAAU,GAAG,UAAU;AAEhC,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,QAAQ,CAAC,MAAM,GAAG,KAAK;AACxB,QAAA;AAED,QAAA,OAAO,QAAQ;IACjB;AAEA;;;;;AAKK;AACE,IAAA,OAAO,gBAAgB,CAC5B,KAAgB,EAChB,OAA8B,EAAA;AAE9B,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU;AAEnC,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;gBAClC,IAAI,SAAS,GAAa,EAAE;AAE5B,gBAAA,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS;gBAC1B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAC,IAAI;AAExD,gBAAA,IAAI,OAAO,gBAAgB,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;oBAC3C,SAAS,GAAG,gBAA4B;AACzC,gBAAA;AAED,gBAAA,IAAI,QAAkB;AAEtB,gBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACrB,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,UAAU;oBAExD,QAAQ,GAAG,IAAI,QAAQ,CAAC;AACtB,wBAAA,UAAU,EAAE,IAAI;wBAChB,KAAK;wBACL,SAAS;AACV,qBAAA,CAAC;oBAEF,QAAQ,CAAC,UAAU,GAAG;AACpB,wBAAA,GAAG,kBAAkB;AACrB,wBAAA,EAAE,IAAI,EAAE,MAAM,EAAEJ,sBAAc,CAAC,IAAI,EAAE;qBACtC;AACF,gBAAA;AAAM,qBAAA;oBACL,QAAQ,GAAG,IAAI,QAAQ,CAAC;AACtB,wBAAA,UAAU,EAAE,IAAI;wBAChB,KAAK;wBACL,SAAS;AACV,qBAAA,CAAC;AAEF,oBAAA,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAEA,sBAAc,CAAC,IAAI,EAAE,CAAC;AAC9D,gBAAA;AAED,gBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC5B,YAAA;AACF,QAAA;IACH;AACD;;AC1LD;;;AAGK;yBACQ,UAAU,CAAA;AA0CrB,IAAA,WAAA,CACE,KAAsB,EACtB,MAAyB,EACzB,GAAG,IAAc,EAAA;AAEjB,QAAA,IAAI,CAAC,OAAO,GAAGA,sBAAc,CAAC,MAAM;AACpC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AAEzB,QAAA,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ;AAC1C,QAAA,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,SAAS;AAE7C,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,MAAM,GAAG,KAAe;AAC9B,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,KAAK,GAAG,KAAe;AAC5B,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,eAAe;AACzC,QAAA;AAED,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,GAAI,MAAkB,GAAG,IAAI;QACvD,IAAI,CAAC,KAAK,GAAG;AACX,cAAE;AACF,cAAE,CAAC,MAAgB,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IAC1D;AAEA,IAAA,IAAI,GAAG,GAAA;;;;AAIL,QAAA,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;AACnC,YAAA,OAAO,EAAE;AACV,QAAA;AAED,QAAA,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,WAAW,GAAsB,EAAE;;;;AAKvC,QAAA,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC7B,YAAA,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;AACxB,QAAA,CAAC,CAAC;QAEF,IAAI,mBAAmB,GAAG,EAAE;QAE5B,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,mBAAmB,GAAG,YAAY,CAAC,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC;AACpE,QAAA;QAED,QACE,YAAY,CAAC,UAAU;AACvB,YAAA,YAAY,CAAC,KAAK;AAClB,YAAA,IAAI,CAAC,MAAM;AACX,YAAA,YAAY,CAAC,cAAc;AAC3B,YAAA,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC/C,YAAA,YAAY,CAAC,SAAS;AACtB,YAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AACtB,YAAA,mBAAmB;IAEvB;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAA,GACd,IAAI,CAAC,KAAK,KAAK,SAAS,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAC,EAAA,EACzD,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,IAAI,EAAEI,qBAAa,CAAC,UAAU,EAC9B,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAA,CAAA;IAE7B;AAEA,IAAA,IAAI,MAAM,GAAA;QACR,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,OAAOJ,sBAAc,CAAC,MAAM;AAC7B,QAAA;QAED,OAAO,IAAI,CAAC,OAAO;IACrB;AAEA;;;;;AAKK;IACE,OAAO,QAAQ,CAAC,IAAoB,EAAA;AACzC,QAAA,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI;AACpE,QAAA,IAAI,UAAU;AACd,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAT,SAAS,GAAI,IAAI,EAAE,GAAG,KAAK,CAAC;AAC9D,YAAA,UAAU,CAAC,KAAK,GAAG,KAAK;AACzB,QAAA;AAAM,aAAA;AACL,YAAA,UAAU,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAT,SAAS,GAAI,IAAI,EAAE,GAAG,KAAK,CAAC;AAChE,QAAA;AAED,QAAA,UAAU,CAAC,MAAM,GAAG,MAAM;AAC1B,QAAA,UAAU,CAAC,oBAAoB,GAAG,YAAY;AAE9C,QAAA,OAAO,UAAU;IACnB;AAEA;;;AAGK;IACL,IAAI,oBAAoB,CAAC,KAAc,EAAA;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC3B;IAEA,IAAI,MAAM,CAAC,MAAsB,EAAA;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;IACvB;AAEA;;;;AAIK;AACE,IAAA,OAAO,gBAAgB,CAC5B,KAAgB,EAChB,OAAgC,EAAA;;AAEhC,QAAA,IAAI,MAAA,KAAK,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,EAAE;AAClC,YAAA,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3D,gBAAA,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI;AAEhE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACvB,oBAAA,OAAO,CAAC,GAAG,CACT,KAAK,EACL,IAAI,UAAU,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CACtD;AACF,gBAAA;AACF,YAAA;AACF,QAAA;IACH;AAEA;;;;AAIK;IACL,IAAW,KAAK,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACrB;AAEA;;;AAGK;AACL,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA;;;AAGK;AACL,IAAA,IAAW,IAAI,GAAA;QACb,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA;;;AAGK;AACL,IAAA,IAAW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,KAAK;IACnB;;AAjNgBS,YAAA,CAAA,eAAe,GAAG,EAAE;;ACEtC;;;AAGK;yBACQ,UAAU,CAAA;AAUrB;;AAEK;AACL,IAAA,WAAA,CAAY,EACV,MAAM,EACN,OAAO,GAAG,CAAC,EACX,QAAQ,GAAG,KAAK,EAChB,QAAQ,GACiB,EAAA;AACzB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,MAAM,GAAGT,sBAAc,CAAC,MAAM;AACnC,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAS,CAAC;AAC/C,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;IAC3B;IAEA,IAAI,GAAG,CAAC,EAAU,EAAA;AAChB,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE;IACd;IAEA,IAAI,MAAM,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;AAEA,IAAA,IAAI,GAAG,GAAA;;QACL,QACE,YAAY,CAAC,UAAU;AACvB,YAAA,YAAY,CAAC,MAAM;AACnB,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACnB,YAAA,YAAY,CAAC,OAAO;AACpB,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AACpB,YAAA,YAAY,CAAC,QAAQ;AACrB,YAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;AACrB,aAAC,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,0CAAE,MAAM;kBAClB,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe;AAC9C,kBAAE,EAAE,CAAC;IAEX;AAEA;;;AAGK;AACL,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA;;;;AAIK;IACL,IAAW,SAAS,CAAC,KAA+B,EAAA;AAClD,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACvB;AAEA,IAAA,IAAI,IAAI,GAAA;;QACN,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAEI,qBAAa,CAAC,UAAU;YAC9B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,YAAA,QAAQ,EACN,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,0CAAE,GAAG,CAAC,CAAC,IAAgB,KAAK,IAAI,CAAC,IAAI,CAAC,KAAI,SAAS;SACnE;IACH;IAEQ,eAAe,GAAA;;QACrB,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,CAAA,EAAE;AAC1B,YAAA,OAAO,EAAE;AACV,QAAA;AACD,QAAA,MAAM,OAAO,GAAgB,IAAI,GAAG,EAAE;AACtC,QAAA,OAAO,kBAAkB,CACvB,IAAI,CAAC,SAAS,CACZ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAgC,EAAE,IAAI,KAAI;YAC9D,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAChC,gBAAA,OAAO,GAAG;AACX,YAAA;YACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;AACtC,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC,EAAE,EAAE,CAAC,CACP,CACF;IACH;AAEA;;;;;AAKK;IACE,OAAO,QAAQ,CAAC,IAAwB,EAAA;AAC7C,QAAA,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;AAEvE,QAAA,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC;YAChC,MAAM;YACN,OAAO;YACP,QAAQ;AACR,YAAA,QAAQ,EAAE,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC7C,SAAA,CAAC;AAEF,QAAA,UAAU,CAAC,GAAG,GAAG,EAAE;AACnB,QAAA,UAAU,CAAC,MAAM,GAAG,MAAM;AAE1B,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,UAAU,CAAC,MAAM,GAAG,KAAK;AAC1B,QAAA;AAED,QAAA,OAAO,UAAU;IACnB;IAEQ,OAAO,aAAa,CAC1B,QAAsC,EAAA;QAEtC,QACE,CAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,GAAG,CAAC,CAAC,IAAoB,KAAKK,YAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClE,YAAA,SAAS;IAEb;AAEA;;;;;AAKK;IACE,OAAO,cAAc,CAAC,KAAgB,EAAA;;QAC3C,MAAM,WAAW,GAAiB,EAAE;QAEpC,IAAI,EAAC,CAAA,EAAA,GAAA,KAAK,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,CAAA,EAAE;AACnC,YAAA,OAAO,EAAE;AACV,QAAA;AAED,QAAA,IAAI,MAAA,KAAK,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,EAAE;AAClC,YAAA,KAAK,MAAM,eAAe,IAAI,KAAK,CAAC,gBAAgB,EAAE;gBACpD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,IAAI;AAC1D,gBAAA,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;;;;AAKhE,gBAAA,UAAU,CAAC,MAAM,GAAGT,sBAAc,CAAC,IAAI;AACvC,gBAAA,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7B,YAAA;AACF,QAAA;AAED,QAAA,OAAO,WAAW;IACpB;AAEA;;;;;AAKK;AACE,IAAA,OAAO,gBAAgB,CAC5B,KAAgB,EAChB,OAAgC,EAAA;;AAEhC,QAAA,IAAI,MAAA,KAAK,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,EAAE;AAClC,YAAA,KAAK,MAAM,eAAe,IAAI,KAAK,CAAC,gBAAgB,EAAE;AACpD,gBAAA,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI;;;;;;;AAQvC,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;oBACxB,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;AAE7C,oBAAA,UAAU,CAAC,MAAM,GAAGA,sBAAc,CAAC,IAAI;AACvC,oBAAA,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;AAChC,gBAAA;AACF,YAAA;AACF,QAAA;IACH;AACD;;ACrMD;;;AAGK;sBACQ,OAAO,CAAA;AAMlB;;;;;;;;AAQK;IACL,WAAA,CAAY,OAAoB,EAAE,OAAgB,EAAA;AAChD,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,MAAM,GAAGA,sBAAc,CAAC,MAAM;IACrC;AAEA,IAAA,IAAI,GAAG,GAAA;;;;AAIL,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,EAAE;AACV,QAAA;AAED,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC;AAC1B,cAAE,YAAY,CAAC,cAAc,GAAG,IAAI,CAAC;cACnC,EAAE;QAEN,QACE,YAAY,CAAC,UAAU;AACvB,YAAA,YAAY,CAAC,OAAO;AACpB,YAAA,IAAI,CAAC,OAAO;AACZ,YAAA,YAAY,CAAC,YAAY;AACzB,YAAA,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7B,YAAA,cAAc;IAElB;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAEI,qBAAa,CAAC,OAAO;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB;IACH;AAEA;;;;;AAKK;IACE,OAAO,QAAQ,CAAC,IAAqB,EAAA;QAC1C,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;QACtD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC;AAEjD,QAAA,OAAO,CAAC,MAAM,GAAG,MAAM;AAEvB,QAAA,OAAO,OAAO;IAChB;AAEA;;;;;AAKK;IACE,OAAO,UAAU,CAAC,KAAgB,EAAA;AACvC,QAAA,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;AAC1B,YAAA,OAAO,SAAS;AACjB,QAAA;AAED,QAAA,MAAM,EACJ,OAAO,EAAE,WAAW,EACpB,YAAY,EACZ,cAAc,GACf,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI;AAE9B,QAAA,IAAI,WAAW,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;AACnD,YAAA,MAAM,OAAO,GAAG,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAX,WAAW,GAAI,cAAc,CAAC,YAAsB,CAAC;AAErE,YAAA,IAAI,cAAc,EAAE;AAClB,gBAAA,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC;AAC5C,YAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;AAC5B,YAAA;AACF,QAAA;AAED,QAAA,OAAO,SAAS;IAClB;AACD;;ACtGD;;;AAGK;qBACQ,MAAM,CAAA;AAKjB;;AAEK;AACL,IAAA,WAAA,CAAY,MAAkB,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,MAAM,GAAGJ,sBAAc,CAAC,MAAM;IACrC;AAEA,IAAA,IAAI,GAAG,GAAA;;;;AAIL,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,OAAO,EAAE;AACV,QAAA;QAED,OAAO,YAAY,CAAC,UAAU,GAAG,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM;IACxE;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAEI,qBAAa,CAAC,MAAM;YAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB;IACH;AAEA;;;;;AAKK;IACE,OAAO,QAAQ,CAAC,IAAoB,EAAA;QACzC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI;AAC3C,QAAA,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC;AAErC,QAAA,MAAM,CAAC,MAAM,GAAG,MAAM;AAEtB,QAAA,OAAO,MAAM;IACf;AAEA;;;;;AAKK;IACE,OAAO,UAAU,CAAC,KAAgB,EAAA;;QACvC,IAAI,CAAA,EAAA,GAAA,KAAK,CAAC,eAAe,0CAAE,IAAI,CAAC,UAAU,EAAE;YAC1C,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;AACzD,QAAA;AAED,QAAA,OAAO,SAAS;IAClB;AACD;;AC9DD;;;AAGK;8BACQ,eAAe,CAAA;AAI1B;;AAEK;AACL,IAAA,WAAA,CAAY,eAAoC,EAAA;AAC9C,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,MAAM,GAAGJ,sBAAc,CAAC,MAAM;IACrC;AAEA,IAAA,IAAI,GAAG,GAAA;;;;AAIL,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACzB,YAAA,OAAO,EAAE;AACV,QAAA;QAED,QACE,YAAY,CAAC,UAAU;AACvB,YAAA,YAAY,CAAC,EAAE;AACf,YAAA,IAAI,CAAC,eAAe;AACpB,YAAA,YAAY,CAAC,OAAO;AACpB,YAAA,uBAAuB,CAAC,IAAI,CAAC,eAAe,CAAC;IAEjD;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO;YACL,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,IAAI,EAAEI,qBAAa,CAAC,eAAe;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB;IACH;AAEA;;;;;AAKK;IACE,OAAO,QAAQ,CAAC,IAA6B,EAAA;AAClD,QAAA,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI;AACxC,QAAA,MAAM,EAAE,GAAG,IAAI,eAAe,CAAC,eAAe,CAAC;AAE/C,QAAA,EAAE,CAAC,MAAM,GAAG,MAAM;AAElB,QAAA,OAAO,EAAE;IACX;AAEA;;;;;AAKK;IACE,OAAO,UAAU,CAAC,KAAgB,EAAA;AACvC,QAAA,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;AAC1B,YAAA,OAAO,SAAS;AACjB,QAAA;AAED,QAAA,MAAM,EAAE,EAAE,EAAE,mBAAmB,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI;AAEvE,QAAA,IAAI,mBAAmB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AACtD,YAAA,MAAM,eAAe,GACnB,mBAAmB,KAAA,IAAA,IAAnB,mBAAmB,KAAA,MAAA,GAAnB,mBAAmB,GAAI,sBAAsB,CAAC,OAAiB,CAAC;AAElE,YAAA,OAAO,IAAI,eAAe,CAAC,eAAe,CAAC;AAC5C,QAAA;AAED,QAAA,OAAO,SAAS;IAClB;AACD;;AC/ED;;;AAGK;MACQ,eAAe,CAAA;AAS1B;;;;;;;;;;;;;;;;AAgBK;IACL,WAAA,CAAY,EACV,OAAO,EACP,MAAM,EACN,IAAI,EACJ,UAAU,EACV,WAAW,GACS,EAAA;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,MAAM,GAAGJ,sBAAc,CAAC,MAAM;IACrC;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC;cAChB,YAAY,CAAC,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM;cACpD,EAAE;AACN,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC;cACd,YAAY,CAAC,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI;cAChD,EAAE;AACN,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC;cACpB,YAAY,CAAC,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU;cAC5D,EAAE;AACN,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC;cACrB,YAAY,CAAC,QAAQ;AACrB,gBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACnB,gBAAA,YAAY,CAAC,SAAS;AACtB,gBAAA,IAAI,CAAC,WAAW,CAAC,CAAC;cAClB,EAAE;QAEN,QACE,YAAY,CAAC,WAAW;AACxB,YAAA,YAAY,CAAC,OAAO;AACpB,YAAA,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;YAChC,MAAM;YACN,IAAI;YACJ,UAAU;AACV,YAAA,WAAW;IAEf;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO;YACL,IAAI,EAAEI,qBAAa,CAAC,eAAe;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB;IACH;AAEA;;;;;AAKK;IACE,OAAO,QAAQ,CAAC,IAAyB,EAAA;AAC9C,QAAA,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI;AACvE,QAAA,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC;YACtC,OAAO;YACP,MAAM;YACN,IAAI;YACJ,UAAU;YACV,WAAW;AACZ,SAAA,CAAC;AAEF,QAAA,WAAW,CAAC,MAAM,GAAG,MAAM;AAE3B,QAAA,OAAO,WAAW;IACpB;AAEA;;;;;AAKK;IACE,OAAO,UAAU,CAAC,KAAgB,EAAA;;QACvC,IAAI,EAAC,CAAA,EAAA,GAAA,KAAK,CAAC,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,CAAA,EAAE;AACpC,YAAA,OAAO,SAAS;AACjB,QAAA;QAED,IAAI,eAAe,GAA6C,SAAS;AAEzE,QAAA,KAAK,MAAM,gBAAgB,IAAI,KAAK,CAAC,iBAAiB,EAAE;AACtD,YAAA,MAAM,EAAE,IAAI,EAAE,GAAG,gBAAgB;YAEjC,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,eAAe,GAAG,IAAI;AACvB,YAAA;AACF,QAAA;;;;QAKD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,IAAI,EAAE;AAEvD,QAAA,IAAI,OAAO,EAAE;YACX,IAAI,MAAM,IAAI,IAAI,EAAE;gBAClB,OAAO,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACtD,YAAA;AAAM,iBAAA,IAAI,MAAM,EAAE;gBACjB,OAAO,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAChD,YAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;AACxC,YAAA;AACF,QAAA;IACH;AACD;;AC/ID;;;AAGK;MACQ,UAAU,CAAA;AAOrB;;AAEK;AACL,IAAA,WAAA,CAAY,MAAuB,EAAA;AAL5B,QAAA,IAAA,CAAA,MAAM,GAAmBJ,sBAAc,CAAC,IAAI;AAMjD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;IAC3D;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,IAAI,EAAEI,qBAAa,CAAC,UAAU;YAC9B,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB;IACH;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI;IACb;AAEA;;;AAGG;IACH,IAAI,SAAS,CAAC,KAAoB,EAAA;QAChC,aAAa,CAAC,+BAA+B,CAAC;YAC5C,IAAI,EAAE,IAAI,CAAC,MAAM;YACjB,KAAK;AACN,SAAA,CAAC;QAEF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;IACrE;AAEO,IAAA,iBAAiB,CAAC,WAAmB,EAAA;AAC1C,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE;AACnC,YAAA,IAAI,CAAC,YAAY,GAAG,WAAW;AAChC,QAAA;IACH;AACD;;AChED;;;AAGK;MACQ,wBAAwB,CAAA;AAKnC;;AAEK;AACL,IAAA,WAAA,CAAY,GAAY,EAAA;AACtB,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,QAAA,IAAI,CAAC,MAAM,GAAGJ,sBAAc,CAAC,IAAI;IACnC;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAEI,qBAAa,CAAC,wBAAwB;YAC5C,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB;IACH;AACD;;MCvBY,eAAe,CAAA;AAM1B;;;AAGK;IACL,WAAA,CAAY,EAAU,EAAE,WAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE;AACZ,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,MAAM,GAAGJ,sBAAc,CAAC,IAAI;IACnC;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI,EAAEI,qBAAa,CAAC,eAAe;YACnC,MAAM,EAAEJ,sBAAc,CAAC,IAAI;SAC5B;IACH;AAEA;;;;;AAKK;IACE,OAAO,QAAQ,CAAC,IAA6B,EAAA;QAClD,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC;IACvD;AAEA;;;;;AAKK;AACE,IAAA,OAAO,gBAAgB,CAC5B,KAAgB,EAChB,OAAqC,EAAA;;AAErC,QAAA,IAAI,MAAA,KAAK,CAAC,qBAAqB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,EAAE;AACvC,YAAA,KAAK,MAAM,oBAAoB,IAAI,KAAK,CAAC,qBAAqB,EAAE;gBAC9D,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,oBAAoB,CAAC,IAAI;AAErD,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBACpB,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,EAAE,EAAE,WAAW,CAAC;AAE5D,oBAAA,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,CAAC;AACjC,gBAAA;AACF,YAAA;AACF,QAAA;IACH;AACD;;MC3DY,QAAQ,CAAA;AAKnB,IAAA,WAAA,CAAY,MAAe,EAAA;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CACnB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;YAC3C,MAAM,CAAC,GAAG,CAAC;AACX,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1B,SAAA,CAAC,CACH;AACD,QAAA,IAAI,CAAC,GAAG,GAAG,MAAM;AACjB,QAAA,IAAI,CAAC,MAAM,GAAGA,sBAAc,CAAC,IAAI;IACnC;AAEQ,IAAA,aAAa,CAAC,MAAoB,EAAA;;;AAGxC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB;AAE3C,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,KAAI;AACtD,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACvB,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;AACvB,YAAA;AACD,YAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC/C,QAAA,CAAC,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AAChC,aAAA,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,MAAM,GAAG,MAAM;AAC5C,aAAA,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3D;IAEA,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAEI,qBAAa,CAAC,QAAQ;YAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB;IACH;IAEO,OAAO,QAAQ,CAAC,IAAiB,EAAA;QACtC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AACvC,QAAA,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAC7B,QAAA,OAAO,QAAQ;IACjB;AACD;;MCzBY,cAAc,CAAA;AAuBzB,IAAA,WAAA,CAAY,EACV,OAAO,EACP,WAAW,EACX,WAAW,GACoB,EAAA;AA1BhB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;QAC/B,IAAA,CAAA,WAAW,GAAwB,EAAE;QACrC,IAAA,CAAA,kBAAkB,GAAwB,EAAE;QACrD,IAAA,CAAA,cAAc,GAA8B,EAAE;AAI9C,QAAA,IAAA,CAAA,eAAe,GAAmB;AACxC,YAAA,CAACA,qBAAa,CAAC,MAAM,GAAG,IAAI;AAC5B,YAAA,CAACA,qBAAa,CAAC,OAAO,GAAG,IAAI;AAC7B,YAAA,CAACA,qBAAa,CAAC,eAAe,GAAG,IAAI;AACrC,YAAA,CAACA,qBAAa,CAAC,eAAe,GAAG,IAAI;AACrC,YAAA,CAACA,qBAAa,CAAC,wBAAwB,GAAG,IAAI;AAC9C,YAAA,CAACA,qBAAa,CAAC,QAAQ,GAAG,IAAI;SAC/B;AACgB,QAAA,IAAA,CAAA,iBAAiB,GAAqB;AACrD,YAAA,CAACA,qBAAa,CAAC,UAAU,GAAG,IAAI,GAAG,EAAsB;AACzD,YAAA,CAACA,qBAAa,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAoB;AACrD,YAAA,CAACA,qBAAa,CAAC,UAAU,GAAG,IAAI,GAAG,EAAsB;AACzD,YAAA,CAACA,qBAAa,CAAC,eAAe,GAAG,IAAI,GAAG,EAA2B;SACpE;AAOC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;QAC9B,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAAC;IAC5E;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC;IACH;AAEO,IAAA,YAAY,CAAC,KAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;IACpC;IAEO,wBAAwB,GAAA;AAC7B,QAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;AACrE,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACd;AACD,YAAA;AAED,YAAA,QAAQ,QAAQ;AACd,gBAAA,KAAKA,qBAAa,CAAC,QAAQ,EAAE;oBAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;oBACvC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;oBAE9C;AACD,gBAAA;gBACD,KAAKA,qBAAa,CAAC,eAAe;AAClC,gBAAA,KAAKA,qBAAa,CAAC,UAAU,EAAE;oBAC7B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;oBAE9C;AACD,gBAAA;AACD,gBAAA,KAAKA,qBAAa,CAAC,UAAU,EAAE;oBAC7B,MAAM,QAAQ,GAAG,IAA+B;AAEhD,oBAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AAC9B,wBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAEjC,wBAAA,IACE,CAAC,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,GAAG,CAC3C,UAAU,CAAC,IAAI,CAAC,KAAK,CACtB,EACD;AACA,4BAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACzC,wBAAA;AACH,oBAAA,CAAC,CAAC;oBAEF;AACD,gBAAA;AACF;AACF,QAAA;IACH;AAEO,IAAA,UAAU,CAAC,OAAiB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,EAAE;AAC/B,YAAA,MAAM,GAAG,GAAG,IAAI,wBAAwB,CAAC,OAAO,CAAC;AAEjD,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;AAClC,QAAA;IACH;AAEO,IAAA,iBAAiB,CAAC,KAAgB,EAAA;;AACvC,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG;YAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,gBAAgB,EAAE,MAAA,KAAK,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK,CAAC,WAAW;SAC3D;IACH;IAEO,kBAAkB,CAAC,KAAgB,EAAE,WAAmB,EAAA;;AAC7D,QAAA,IACE,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,WAAW;aAC1C,CAAA,EAAA,GAAA,KAAK,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAAC,WAAW,CAAA,EACvC;AACA,YAAA,MAAM,WAAW,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAK,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;YAChE,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,WAAW,GAAG,WAAW,CAAC;AAC7D,QAAA;IACH;AAEO,IAAA,UAAU,CAAC,OAAiB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,EAAE;AAC/B,YAAA,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC;AAEjC,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;AAClC,QAAA;IACH;AAEQ,IAAA,cAAc,CAAC,KAAgB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAACA,qBAAa,CAAC,OAAO,CAAC,EAAE;YACxE,MAAM,OAAO,GAAGM,SAAO,CAAC,UAAU,CAAC,KAAK,CAAC;AAEzC,YAAA,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAACN,qBAAa,CAAC,OAAO,CAAC,EAAE;AACrD,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;AACtC,gBAAA;AACD,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC9B,IAAI,CAAC,eAAe,CAACA,qBAAa,CAAC,OAAO,CAAC,GAAG,OAAO;AACtD,YAAA;AACF,QAAA;IACH;AAEQ,IAAA,aAAa,CAAC,KAAgB,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAACA,qBAAa,CAAC,MAAM,CAAC,EAAE;YACtE,MAAM,MAAM,GAAGO,QAAM,CAAC,UAAU,CAAC,KAAK,CAAC;AAEvC,YAAA,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAACP,qBAAa,CAAC,MAAM,CAAC,EAAE;AACpD,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;AACrC,gBAAA;AAED,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC7B,IAAI,CAAC,eAAe,CAACA,qBAAa,CAAC,MAAM,CAAC,GAAG,MAAM;AACpD,YAAA;AACF,QAAA;IACH;AAEQ,IAAA,sBAAsB,CAAC,KAAgB,EAAA;AAC7C,QAAA,IACE,IAAI,CAAC,OAAO,CAAC,eAAe;YAC5B,CAAC,IAAI,CAAC,eAAe,CAACA,qBAAa,CAAC,eAAe,CAAC,EACpD;YACA,MAAM,eAAe,GAAGQ,iBAAe,CAAC,UAAU,CAAC,KAAK,CAAC;AAEzD,YAAA,IAAI,eAAe,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAACR,qBAAa,CAAC,eAAe,CAAC,EAAE;AAC7D,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC;AAC9C,gBAAA;AAED,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC;gBACtC,IAAI,CAAC,eAAe,CAACA,qBAAa,CAAC,eAAe,CAAC,GAAG,eAAe;AACtE,YAAA;AACF,QAAA;IACH;AAEQ,IAAA,sBAAsB,CAAC,KAAgB,EAAA;AAC7C,QAAA,IACE,IAAI,CAAC,OAAO,CAAC,WAAW;YACxB,CAAC,IAAI,CAAC,eAAe,CAACA,qBAAa,CAAC,eAAe,CAAC,EACpD;YACA,MAAM,WAAW,GAAG,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC;AAErD,YAAA,IAAI,WAAW,EAAE;gBACf,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAACA,qBAAa,CAAC,eAAe,CAAC,EAAE;AAC7D,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC1C,gBAAA;AAED,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;gBAClC,IAAI,CAAC,eAAe,CAACA,qBAAa,CAAC,eAAe,CAAC,GAAG,WAAW;AAClE,YAAA;AACF,QAAA;IACH;AAEQ,IAAA,iBAAiB,CAAC,KAAgB,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAC3B,YAAAK,YAAU,CAAC,gBAAgB,CACzB,KAAK,EACL,IAAI,CAAC,iBAAiB,CAACL,qBAAa,CAAC,UAAU,CAAC,CACjD;AACF,QAAA;IACH;AAEQ,IAAA,iBAAiB,CAAC,KAAgB,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;;;AAG5B,YAAAS,YAAU,CAAC,gBAAgB,CACzB,KAAK,EACL,IAAI,CAAC,iBAAiB,CAACT,qBAAa,CAAC,UAAU,CAAC,CACjD;;;YAID,MAAM,WAAW,GAAGS,YAAU,CAAC,cAAc,CAAC,KAAK,CAAC;YAEpD,IAAI,WAAW,CAAC,MAAM,EAAE;gBACtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;AACtC,YAAA;AACF,QAAA;IACH;AAEQ,IAAA,eAAe,CAAC,KAAgB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC1B,YAAA,QAAQ,CAAC,gBAAgB,CACvB,KAAK,EACL,IAAI,CAAC,iBAAiB,CAACT,qBAAa,CAAC,QAAQ,CAAC,CAC/C;AACF,QAAA;IACH;AAEQ,IAAA,kBAAkB,CAAC,KAAgB,EAAA;QACzC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC,gBAAgB,EAAE;AACtD,YAAA,KAAK,MAAM,eAAe,IAAI,KAAK,CAAC,gBAAgB,EAAE;gBACpD,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC,IAAI;AAEhD,gBAAA,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG;oBACxB,WAAW;AACX,oBAAA,cAAc,EAAE,KAAK;oBACrB,MAAM,EAAEJ,sBAAc,CAAC,MAAM;iBAC9B;AACF,YAAA;AACF,QAAA;IACH;AAEQ,IAAA,sBAAsB,CAAC,KAAgB,EAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;AAChC,YAAA,eAAe,CAAC,gBAAgB,CAC9B,KAAK,EACL,IAAI,CAAC,iBAAiB,CAACI,qBAAa,CAAC,eAAe,CAAC,CACtD;AACF,QAAA;IACH;AAEO,IAAA,wBAAwB,CAC7B,KAAiB,EAAA;;QAEjB,IAAI,CAAC,KAAK,EAAE;YACV;AACD,QAAA;QACD,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAK,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAC5C,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,iBAAiB,CACxC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI;AACP,QAAA,IAAI,SAAS,IAAI,KAAK,CAAC,WAAW,EAAE;YAClC,OAAO;gBACL,iBAAiB,EAAE,KAAK,CAAC,WAAW;gBACpC,SAAS;aACV;AACF,QAAA;IACH;AACD;;MChSY,MAAM,CAAA;IACjB,OAAO,oBAAoB,CACzB,QAA6B,EAAA;QAE7B,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ;AAErC,QAAA,QAAQ,IAAI;YACV,KAAKL,oBAAY,CAAC,OAAO;AACvB,gBAAA,OAAOH,eAAE,CAAC;oBACR,GAAG;oBACH,IAAI;AACJ,oBAAA,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;AACtB,iBAAA,CAAC;YACJ,KAAKG,oBAAY,CAAC,EAAE;YACpB,KAAKA,oBAAY,CAAC,GAAG;YACrB,KAAKA,oBAAY,CAAC,MAAM;AACtB,gBAAA,OAAOH,eAAE,CAAC;oBACR,GAAG;oBACH,IAAI;AACJ,oBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;AACrB,iBAAA,CAAC;YACJ,KAAKG,oBAAY,CAAC,MAAM;AACtB,gBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;AAEjC,gBAAA,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;AAC7B,oBAAA,OAAOF,gBAAG,CACR,IAAI,cAAc,CAACN,0BAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAClE;AACF,gBAAA;AAED,gBAAA,OAAOK,eAAE,CAAC;oBACR,GAAG;oBACH,IAAI;AACJ,oBAAA,KAAK,EAAE,WAAW;AACnB,iBAAA,CAAC;YACJ,KAAKG,oBAAY,CAAC,IAAI;gBACpB,IAAI;AACF,oBAAA,MAAM,SAAS,GAAa,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAE9D,oBAAA,OAAOH,eAAE,CAAC;wBACR,GAAG;wBACH,IAAI;AACJ,wBAAA,KAAK,EAAE,SAAS;AACjB,qBAAA,CAAC;AACH,gBAAA;AAAC,gBAAA,OAAO,GAAG,EAAE;AACZ,oBAAA,OAAOC,gBAAG,CAAC,IAAI,cAAc,CAACN,0BAAkB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAClE,gBAAA;AACH,YAAA;gBACE,YAAY,CAAC,IAAI,CAAC;AACrB;IACH;AAEA,IAAA,OAAO,gBAAgB,CAAC,EACtB,IAAI,EACJ,OAAO,EACP,WAAW,EACX,WAAW,EACX,sBAAsB,GACS,EAAA;AAC/B,QAAA,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC;YACxC,OAAO;YACP,WAAW;YACX,WAAW;AACZ,SAAA,CAAC;QAEF,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAEvD,QAAA,IAAI,EAAC,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,CAAE,MAAM,CAAA,IAAI,CAAC,YAAY,EAAE;YAC5C,OAAO;AACL,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,kBAAkB,EAAE,EAAE;AACtB,gBAAA,UAAU,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC;aAC/B;AACF,QAAA;AAED,QAAA,IAAI,YAAY,EAAE;AAChB,YAAA,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC;AACzC,YAAA,cAAc,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC;AACnD,QAAA;AAED,QAAA,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,CAAE,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AACvC,YAAA,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC;AAClC,YAAA,cAAc,CAAC,iBAAiB,CAAC,KAAK,CAAC;YACvC,cAAc,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;AACrD,QAAA,CAAC,CAAC;AAEF,QAAA,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC;AAC9B,QAAA,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC;QAC9B,cAAc,CAAC,wBAAwB,EAAE;QACzC,MAAM,iBAAiB,GAAG,cAAc,CAAC,wBAAwB,CAC/D,YAAY,aAAZ,YAAY,KAAA,MAAA,GAAZ,YAAY,GAAI,cAAc,aAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,CAAG,CAAC,CAAC,CACpC;AAED,QAAA,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,cAAc,EAAE,GACnE,cAAc,CAAC,IAAI;AAErB,QAAA,sBAAsB,CAAC,sBAAsB,CAAC,WAAW,EAAE,cAAc,CAAC;QAE1E,OAAO;YACL,WAAW;YACX,kBAAkB;YAClB,UAAU;YACV,iBAAiB;SAClB;IACH;IAEA,OAAO,WAAW,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACpB,YAAA,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAE/C,YAAA,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC;AACrC,QAAA;AAED,QAAA,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC;IAC1B;IAEA,OAAO,WAAW,CAAC,MAAqB,EAAA;QACtC,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,YAAA,OAAO,MAAM;AACd,QAAA;AAED,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;QAE5B,IAAI,MAAM,IAAI,qBAAqB,EAAE;AACnC,YAAA,OAAO,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC;AACzC,QAAA;AAED,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,MAAM,GAAG,qBAAqB,EAC9B,qBAAqB,CACtB;QAED,QACE,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;AAC1C,YAAA,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC;IAE3C;AACD;;MClJY,cAAc,CAAA;IAUzB,WAAA,CAAY,QAAgB,EAAE,aAA6C,EAAA;QACzE,eAAe,CAAC,KAAK,CAAA,CAAA,mCAAA,EAAsC,QAAQ,CAAA,iBAAA,EAAoB,aAAa,GAAG;AACvG,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QAExB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;QACrD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;QACzD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC;QAC7D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;QAC3D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;QAE/D,IAAI,CAAC,eAAe,GAAG,CAAC,GAAGU,oBAAY,CAAC,MAAM;QAC9C,eAAe,CAAC,KAAK,CAAA,CAAA,qCAAA,EAAwC,QAAQ,CAAA,iBAAA,EAAoB,aAAa,GAAG;IAC3G;AAEQ,IAAA,mBAAmB,CACzB,aAA6C,EAAA;AAE7C,QAAA,IAAI,QAAO,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAE,gBAAgB,CAAA,KAAK,QAAQ,EAAE;AACvD,YAAA,IAAI,aAAa,CAAC,gBAAgB,GAAG,GAAG,EAAE;AACxC,gBAAA,eAAe,CAAC,OAAO,CACrB,2FAA2F,CAC5F;AACD,gBAAA,OAAO,GAAG;AACX,YAAA;AAED,YAAA,IAAI,aAAa,CAAC,gBAAgB,GAAG,IAAK,EAAE;AAC1C,gBAAA,eAAe,CAAC,OAAO,CACrB,2FAA2F,CAC5F;AACD,gBAAA,OAAO,IAAK;AACb,YAAA;YAED,OAAO,aAAa,CAAC,gBAAgB;AACtC,QAAA;AAED,QAAA,OAAO,IAAK;IACd;AAEQ,IAAA,cAAc,CACpB,aAA6C,EAAA;AAE7C,QAAA,IAAI,aAAa,KAAA,IAAA,IAAb,aAAa,uBAAb,aAAa,CAAE,WAAW,EAAE;YAC9B,OAAO,aAAa,CAAC,WAAW;AACjC,QAAA;QAED,OAAOH,mBAAW,CAAC,UAAU;IAC/B;AAEQ,IAAA,kBAAkB,CACxB,aAA6C,EAAA;AAE7C,QAAA,IAAI,QAAO,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAE,4BAA4B,CAAA,KAAK,QAAQ,EAAE;AACnE,YAAA,IAAI,aAAa,CAAC,4BAA4B,GAAG,CAAC,EAAE;AAClD,gBAAA,eAAe,CAAC,OAAO,CACrB,2GAA2G,CAC5G;AACD,gBAAA,OAAO,CAAC,GAAGG,oBAAY,CAAC,MAAM;AAC/B,YAAA;AAED,YAAA,OAAO,aAAa,CAAC,4BAA4B,GAAGA,oBAAY,CAAC,MAAM;AACxE,QAAA;AAED,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,iBAAiB,CACvB,aAA6C,EAAA;AAE7C,QAAA,IAAI,QAAO,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAE,cAAc,CAAA,KAAK,QAAQ,EAAE;AACrD,YAAA,IAAI,aAAa,CAAC,cAAc,GAAG,CAAC,EAAE;AACpC,gBAAA,eAAe,CAAC,OAAO,CACrB,2FAA2F,CAC5F;AACD,gBAAA,OAAO,CAAC,GAAGA,oBAAY,CAAC,MAAM;AAC/B,YAAA;AAED,YAAA,OAAO,aAAa,CAAC,cAAc,GAAGA,oBAAY,CAAC,MAAM;AAC1D,QAAA;AAED,QAAA,OAAO,EAAE,GAAGA,oBAAY,CAAC,MAAM;IACjC;AAEQ,IAAA,gBAAgB,CACtB,aAA6C,EAAA;AAE7C,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,qBAAqB,CAAC,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAE,aAAa,CAAC;AAC5E,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;AACd,YAAA,OAAO,IAAI;AACZ,QAAA;QAED,OAAO,MAAM,CAAC,IAAI;IACpB;AAEQ,IAAA,iBAAiB,CACvB,aAA6C,EAAA;AAE7C,QAAA,IAAI,QAAO,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAE,cAAc,CAAA,KAAK,QAAQ,EAAE;YACrD,OAAO,aAAa,CAAC,cAAc;AACpC,QAAA;AAED,QAAA,OAAO,EAAE,GAAGA,oBAAY,CAAC,MAAM;IACjC;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO;YACL,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;IACH;AACD;;AC/HD;;;AAGK;qBACQ,MAAM,CAAA;AAKjB;;AAEK;AACL,IAAA,WAAA,CAAY,MAAoB,EAAA;AAC9B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,MAAM,GAAGD,sBAAc,CAAC,IAAI;IACnC;AAEA;;;;AAIK;IACL,OAAO,UAAU,CAAC,YAAoB,EAAA;QACpC,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC;AACtB,QAAA;QAED,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;QAErC,MAAM,MAAM,GAAG;AACZ,aAAA,GAAG,CAAC,CAAC,IAAI,KAAI;AACZ,YAAA,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;YAE3C,IAAI,CAAC,GAAG,EAAE;AACR,gBAAA,eAAe,CAAC,OAAO,CAAA,CAAA,gCAAA,EAAmC,YAAY,EAAE;AACxE,gBAAA,OAAO,IAAI;AACZ,YAAA;AAED,YAAA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE;AACvB,QAAA,CAAC;aACA,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;AAElC,QAAA,OAAO,IAAI,MAAM,CAAC,MAAsB,CAAC;IAC3C;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAEI,qBAAa,CAAC,MAAM;YAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB;IACH;AACD;;AC9DD;;;AAGK;MACQ,SAAS,CAAA;AAKpB,IAAA,WAAA,CAAY,KAAa,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAGJ,sBAAc,CAAC,IAAI;IACnC;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAEI,qBAAa,CAAC,SAAS;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB;IACH;AACD;;MCzBY,gBAAgB,CAAA;AAK3B;;AAEK;AACL,IAAA,WAAA,CAAY,KAAc,EAAA;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAGJ,sBAAc,CAAC,IAAI;IACnC;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,IAAI,EAAEI,qBAAa,CAAC,gBAAgB;YACpC,MAAM,EAAEJ,sBAAc,CAAC,IAAI;SAC5B;IACH;AAEA;;;;;AAKK;IACE,OAAO,QAAQ,CAAC,IAAwB,EAAA;AAC7C,QAAA,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;IACzC;AACD;;AC9BD;;;AAGK;iCACQ,kBAAkB,CAAA;AAK7B;;AAEK;AACL,IAAA,WAAA,CAAY,OAAe,EAAA;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,MAAM,GAAGA,sBAAc,CAAC,IAAI;IACnC;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAEI,qBAAa,CAAC,kBAAkB;YACtC,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB;IACH;AACD;;MC6BY,aAAa,CAAA;IAIxB,WAAA,CACE,eAAA,GAAiC,IAAI,EACrC,WAAoC,EAAA;AAEpC,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAChC;IAEO,aAAa,CAAC,EACnB,QAAQ,EACR,WAAW,EACX,OAAO,EACP,QAAQ,EACR,SAAS,GACmB,EAAA;AAC5B,QAAA,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,eAAe,CAChE,OAAO,EACP,WAAW,CACZ;AAED,QAAA,IACE,IAAI,CAAC,WAAW,CAAC,QAAQ;YACzB,WAAW;AACX,YAAA,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAC1B;YACA,IAAI,QAAQ,CAAC,kBAAkB,EAAE;AAC/B,gBAAA,OAAO,QAAQ,CAAC,kBAAkB,CAAC,WAAW,CAAC;AAChD,YAAA;AACD,YAAA,OAAO,OAAO,CAAC,WAAW,CAAC;YAC3B,gBAAgB,GAAG,WAAW;AAC/B,QAAA;AAED,QAAA,IAAI,cAAc;AAClB,QAAA,IAAI,SAAS,EAAE;YACb,cAAc,GAAG,IAAI,CAAC;kBAClB,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;kBAClB,CAAC;AACN,QAAA;AAED,QAAA,QAAQ,QAAQ,CAAC,IAAI,CAAC,IAAI;AACxB,YAAA,KAAKA,qBAAa,CAAC,UAAU,EAAE;gBAC7B,IAAI,CAAC,gBAAgB,CAAC;oBACpB,cAAc;AACd,oBAAA,UAAU,EAAE,QAAsB;AAClC,oBAAA,WAAW,EAAE,gBAAgB;AAC7B,oBAAA,OAAO,EAAE,IAAI;AACd,iBAAA,CAAC;gBAEF;AACD,YAAA;AACD,YAAA,KAAKA,qBAAa,CAAC,QAAQ,EAAE;gBAC3B,IAAI,CAAC,cAAc,CAAC;oBAClB,cAAc;AACd,oBAAA,QAAQ,EAAE,QAAoB;AAC9B,oBAAA,WAAW,EAAE,gBAAgB;AAC7B,oBAAA,OAAO,EAAE,IAAI;AACd,iBAAA,CAAC;gBAEF;AACD,YAAA;AACD,YAAA,KAAKA,qBAAa,CAAC,UAAU,EAAE;gBAC7B,IAAI,CAAC,gBAAgB,CAAC;oBACpB,cAAc;AACd,oBAAA,UAAU,EAAE,QAAsB;AAClC,oBAAA,WAAW,EAAE,gBAAgB;AAC7B,oBAAA,OAAO,EAAE,IAAI;AACd,iBAAA,CAAC;gBAEF;AACD,YAAA;AACD,YAAA,KAAKA,qBAAa,CAAC,UAAU,EAAE;gBAC7B,IAAI,CAAC,gBAAgB,CAAC;oBACpB,cAAc;AACd,oBAAA,UAAU,EAAE,QAAsB;AAClC,oBAAA,WAAW,EAAE,gBAAgB;AAC7B,oBAAA,OAAO,EAAE,IAAI;AACd,iBAAA,CAAC;gBACF;AACD,YAAA;AACD,YAAA,KAAKA,qBAAa,CAAC,eAAe,EAAE;gBAClC,IAAI,CAAC,qBAAqB,CAAC;oBACzB,cAAc;AACd,oBAAA,eAAe,EAAE,QAA2B;AAC5C,oBAAA,WAAW,EAAE,gBAAgB;AAC7B,oBAAA,OAAO,EAAE,IAAI;AACd,iBAAA,CAAC;gBACF;AACD,YAAA;AACD,YAAA,KAAKA,qBAAa,CAAC,eAAe,EAAE;gBAClC,IAAI,CAAC,qBAAqB,CAAC;oBACzB,cAAc;AACd,oBAAA,eAAe,EAAE,QAA2B;AAC5C,oBAAA,WAAW,EAAE,gBAAgB;AAC7B,oBAAA,OAAO,EAAE,IAAI;AACd,iBAAA,CAAC;gBACF;AACD,YAAA;AACD,YAAA,SAAS;gBACP,IAAI,CAAC,gBAAgB,CAAC;oBACpB,cAAc;AACd,oBAAA,UAAU,EAAE,QAAQ;AACpB,oBAAA,WAAW,EAAE,gBAAgB;AAC7B,oBAAA,OAAO,EAAE,IAAI;AACd,iBAAA,CAAC;AACH,YAAA;AACF;AAED,QAAA,OAAO,cAAc;IACvB;IAEO,cAAc,CACnB,OAA0B,EAC1B,QAAsB,EAAA;;AAEtB,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACzB,YAAA,OAAO,IAAI;AACZ,QAAA;QAED,IAAI,eAAe,GAAG,CAAC;AAEvB,QAAA,KAAK,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACzD,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC5B,IAAI,CAAC,eAAe,CAAC;oBACnB,OAAO;oBACP,WAAW;AACX,oBAAA,aAAa,EAAE,IAAI;oBACnB,QAAQ;AACT,iBAAA,CAAC;gBAEF;AACD,YAAA;YAED,IAAI,kBAAkB,GAAG,CAAC;YAE1B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACnC,MAAM,OAAO,GAAG,GAAoB;AAEpC,gBAAA,IAAI,IAAI;AAER,gBAAA,QAAQ,OAAO;oBACb,KAAKA,qBAAa,CAAC,UAAU;oBAC7B,KAAKA,qBAAa,CAAC,QAAQ;oBAC3B,KAAKA,qBAAa,CAAC,UAAU;AAC7B,oBAAA,KAAKA,qBAAa,CAAC,eAAe,EAAE;wBAClC,IAAI,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC;wBACnD;AACD,oBAAA;AACD,oBAAA,SAAS;wBACP,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC;AAC9C,oBAAA;AACF;gBAED,IAAI,CAAC,kBAAkB,KAAK,IAAI,IAAI,IAAI,GAAG,kBAAkB,CAAC,EAAE;oBAC9D,kBAAkB,GAAG,IAAI;AAC1B,gBAAA;AACF,YAAA;AAED,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE;AAC7C,gBAAA,OAAO,OAAO,CAAC,WAAW,CAAC;AAC3B,gBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;oBAC7B,CAAA,EAAA,GAAA,QAAQ,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,IAA3B,QAAQ,CAAC,kBAAkB,GAAK,EAAE,CAAA;AAClC,oBAAA,OAAO,QAAQ,CAAC,kBAAkB,CAAC,WAAW,CAAC;AAChD,gBAAA;AACF,YAAA;AAAM,iBAAA,IACL,CAAC,eAAe;AAChB,iBAAC,kBAAkB,IAAI,kBAAkB,GAAG,eAAe,CAAC,EAC5D;gBACA,eAAe,GAAG,kBAAkB;AACrC,YAAA;AACF,QAAA;AAED,QAAA,OAAO,eAAe;IACxB;AAEO,IAAA,gBAAgB,CAAC,EACtB,OAAO,EACP,WAAW,EACX,QAAQ,GACa,EAAA;QACrB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC;AAElD,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACrC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC7C,QAAA;AAAM,aAAA;YACL,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AACpC,YAAA,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;AAEjB,YAAA,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAClD,QAAA;IACH;AAEO,IAAA,eAAe,CAAC,EACrB,OAAO,EACP,WAAW,EACX,aAAa,GACW,EAAA;;;AAGxB,QAAA,OAAO,CAAC,aAAa,CAAC,GAAG,WAAW;IACtC;IAEO,eAAe,CAAC,EACrB,OAAO,EACP,WAAW,EACX,aAAa,EACb,QAAQ,GACgB,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AAC3B,gBAAA,OAAO,OAAO,CAAC,WAAW,CAAC;gBAC3B,IAAI,QAAQ,CAAC,kBAAkB,EAAE;AAC/B,oBAAA,OAAO,QAAQ,CAAC,kBAAkB,CAAC,WAAW,CAAC;AAChD,gBAAA;AACF,YAAA;AACF,QAAA;IACH;IAEQ,cAAc,CAAC,EACrB,WAAW,EACX,OAAO,EACP,QAAQ,EACR,cAAc,GACe,EAAA;AAC7B,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ;AAEzB,QAAA,MAAM,OAAO,GACX,OAAO,CAAC,WAAW,CAAC;AACpB,YAAAA,qBAAa,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;AAC9C,YAAA,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CAACA,qBAAa,CAAC,QAAQ,CAAE;AAElE,QAAA,MAAM,UAAU,GAA8B;YAC5C,cAAc;YACd,WAAW;AACX,YAAA,IAAI,EAAE,OAAO;YACb,GAAG,EAAEA,qBAAa,CAAC,QAAQ;YAC3B,SAAS,EAAE,IAAI,CAAC,UAAU;AAC1B,YAAA,KAAK,EAAE,IAAI;SACZ;AAED,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,MAAM,YAAY,GAChB,OAAO,CAAC,WAAW,CAAC,CAACA,qBAAa,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,UAAU,CAAC;AAChE,YAAA,MAAM,kBAAkB,GAAG,YAAY,CAAC,UAAU;;;AAIlD,YAAA,KAAK,MAAM,iBAAiB,IAAI,kBAAkB,EAAE;AAClD,gBAAA,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,iBAAiB;AAEhD,gBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,YAAY,CAAC,EAAE;oBAC7D;AACD,gBAAA;AAED,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CACrC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,YAAY,CACnC;AAED,gBAAA,IAAI,KAAK,KAAK,EAAE,EAAE;AAChB,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACxC,gBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,iBAAiB,CAAC;AACpD,gBAAA;AACF,YAAA;AAED,YAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AACnC,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AACnC,QAAA;IACH;IAEQ,gBAAgB,CAAC,EACvB,WAAW,EACX,UAAU,EACV,OAAO,EACP,cAAc,GACiB,EAAA;AAC/B,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU;AAC3B,QAAA,MAAM,OAAO,GACX,OAAO,CAAC,WAAW,CAAC,IAAIA,qBAAa,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;AAE1E,QAAA,MAAM,UAAU,GAA8B;YAC5C,cAAc;YACd,WAAW;AACX,YAAA,IAAI,EAAE,OAAO;YACb,GAAG,EAAEA,qBAAa,CAAC,UAAU;AAC7B,YAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AAChC,YAAA,KAAK,EAAE,IAAI;SACZ;AAED,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AACnC,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AACnC,QAAA;IACH;IAEQ,gBAAgB,CAAC,EACvB,UAAU,EACV,OAAO,EACP,WAAW,EACX,cAAc,GACiB,EAAA;AAC/B,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU;AAC3B,QAAA,MAAM,OAAO,GACX,OAAO,CAAC,WAAW,CAAC,IAAIA,qBAAa,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;AAE1E,QAAA,MAAM,UAAU,GAA8B;YAC5C,cAAc;YACd,WAAW;AACX,YAAA,IAAI,EAAE,OAAO;YACb,GAAG,EAAEA,qBAAa,CAAC,UAAU;AAC7B,YAAA,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;AAC7B,YAAA,KAAK,EAAE,IAAI;SACZ;AAED,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AACnC,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AACnC,QAAA;IACH;IAEQ,gBAAgB,CAAC,EACvB,WAAW,EACX,OAAO,EACP,UAAU,EACV,cAAc,GACiB,EAAA;;AAC/B,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU;AAC3B,QAAA,MAAM,OAAO,GACX,OAAO,CAAC,WAAW,CAAC,IAAIA,qBAAa,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;AAE1E,QAAA,MAAM,UAAU,GAAwB;YACtC,cAAc;AACd,YAAA,IAAI,EAAE,OAAO;YACb,GAAG,EAAEA,qBAAa,CAAC,UAAU;AAC7B,YAAA,KAAK,EAAE,IAAI;YACX,WAAW;SACZ;AAED,QAAA,IAAI,OAAO,EAAE;YACX,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAACA,qBAAa,CAAC,UAAU,CAAE;;;YAItE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;gBACtC,aAAa,CAAC,+BAA+B,CAAC;oBAC5C,IAAI,EAAE,IAAI,CAAC,MAAyB;AACpC,oBAAA,KAAK,EAAE,KAAsB;AAC9B,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAC1C,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EACtB,CAAA,EAAA,GAAA,cAAc,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,CAChC;AAED,YAAA,IAAI,CAAC,WAAW,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACX,UAAU,CAAA,EAAA,EACb,KAAK,kCACA,IAAI,CAAA,EAAA,EACP,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,WAAW,EAAE,WAAW,OAE1B;AACH,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AAC7B,QAAA;IACH;IAEQ,qBAAqB,CAAC,EAC5B,WAAW,EACX,OAAO,EACP,eAAe,EACf,cAAc,GACsB,EAAA;AACpC,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe;AAChC,QAAA,MAAM,OAAO,GACX,OAAO,CAAC,WAAW,CAAC;AACpB,YAAAA,qBAAa,CAAC,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC;AAEvD,QAAA,MAAM,UAAU,GAA8B;YAC5C,cAAc;YACd,WAAW;AACX,YAAA,IAAI,EAAE,OAAO;YACb,GAAG,EAAEA,qBAAa,CAAC,eAAe;AAClC,YAAA,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;AAC7B,YAAA,KAAK,EAAE,IAAI;SACZ;AAED,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AACnC,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AACnC,QAAA;IACH;IAEQ,qBAAqB,CAAC,EAC5B,WAAW,EACX,OAAO,EACP,eAAe,EACf,cAAc,GACoB,EAAA;AAClC,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe;AAChC,QAAA,MAAM,OAAO,GACX,OAAO,CAAC,WAAW,CAAC;AACpB,YAAAA,qBAAa,CAAC,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC;AAEvD,QAAA,MAAM,UAAU,GAA8B;YAC5C,cAAc;YACd,WAAW;AACX,YAAA,IAAI,EAAE,OAAO;YACb,GAAG,EAAEA,qBAAa,CAAC,eAAe;AAClC,YAAA,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;AAC7B,YAAA,KAAK,EAAE,IAAI;SACZ;AAED,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AACnC,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AACnC,QAAA;IACH;IAEQ,gBAAgB,CAAC,EACvB,WAAW,EACX,OAAO,EACP,UAAU,EACV,cAAc,GACiB,EAAA;AAC/B,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU;AAC3B,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;AAEzE,QAAA,MAAM,UAAU,GAAwB;YACtC,cAAc;AACd,YAAA,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,IAAI,CAAC,IAAI;YACd,WAAW;AACX,YAAA,KAAK,EAAE,IAAoC;SAC5C;AAED,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AAC7B,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AAC7B,QAAA;IACH;IAEO,eAAe,CACpB,IAAuB,EACvB,WAAmB,EAAA;;;AAInB,QAAA,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE;YACzC,OAAO;AACL,gBAAA,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAqB;AACvD,gBAAA,IAAI,EAAE,IAAqC;AAC3C,gBAAA,WAAW,EAAE,IAAI;aAClB;AACF,QAAA;QAED,OAAO;AACL,YAAA,gBAAgB,EAAE,WAAW;AAC7B,YAAA,IAAI,EAAE,IAAqC;AAC3C,YAAA,WAAW,EAAE,KAAK;SACnB;IACH;IAEQ,kBAAkB,CACxB,IAOC,EACD,GAAkB,EAAA;QAElB,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,CAAC;AACT,QAAA;QAED,MAAM,OAAO,GAAG,GAAwB;AACxC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAE,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE;QAE5D,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,IAAI,CAAC,OAAO,CAAE,CAAC,cAAc;AACrC,QAAA;AAED,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC;AAEpB,QAAA,OAAO,CAAC;IACV;IAEQ,wBAAwB,CAC9B,IAA8B,EAC9B,GAAkB,EAAA;AAElB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACd,YAAA,OAAO,CAAC;AACT,QAAA;AAED,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAA2B;AAExD,QAAA,IAAI,kBAAkB;AAEtB,QAAA,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YAC7D,IAAI,CAAC,KAAK,EAAE;gBACV;AACD,YAAA;YAED,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE;AAEnD,YAAA,IAAI,SAAS,EAAE;AACb,gBAAA,OAAO,YAAY,CAAC,SAAS,CAAC;AAC/B,YAAA;AAAM,iBAAA,IACL,CAAC,kBAAkB;AACnB,gBAAA,KAAK,CAAC,cAAc,GAAG,kBAAkB,EACzC;AACA,gBAAA,kBAAkB,GAAG,KAAK,CAAC,cAAc;AAC1C,YAAA;AACF,QAAA;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE;AACrC,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC;AACjB,QAAA;AAED,QAAA,OAAO,kBAAkB;IAC3B;IAEQ,WAAW,CAAC,EAClB,GAAG,EACH,KAAK,EACL,IAAI,EACJ,WAAW,EACX,cAAc,GACM,EAAA;;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAiC;AACtE,QAAA,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAkC,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACnD,KAAK,CAAA,EAAA,EACR,cAAc,EACZ,CAAA,EAAA,GAAA,cAAc,aAAd,cAAc,KAAA,MAAA,GAAd,cAAc,IACb,QAAQ,CAAC,cAAc,IAAK,QAAQ,CAAC,cAAyB,CAAC,mCAChE,IAAI,CAAC,GAAG,EAAE,GACb;IACH;IAEQ,WAAW,CAAC,EAClB,GAAG,EACH,KAAK,EACL,IAAI,EACJ,WAAW,EACX,cAAc,GACM,EAAA;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACZ,IAAI,CAAC,WAAW,CAAC,CAAA,EAAA,EACpB,CAAC,GAAG,GAAC,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,KAAK,CAAA,EAAA,EAAE,cAAc,MAClC;IACH;AAEQ,IAAA,iBAAiB,CAAC,EACxB,GAAG,EACH,SAAS,EACT,KAAK,EACL,IAAI,EACJ,WAAW,EACX,cAAc,GACY,EAAA;;AAC1B,QAAA,MAAM,QAAQ,GAAI,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAA4B,CACjE,SAAS,CACV;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAA4B,CAAC,SAAS,CAAC,mCACxD,KAAK,CAAA,EAAA,EACR,cAAc,EAAE,MAAA,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAd,cAAc,GAAI,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,cAAc,mCAAI,IAAI,CAAC,GAAG,EAAE,GACzE;IACH;AAEQ,IAAA,iBAAiB,CAAC,EACxB,GAAG,EACH,SAAS,EACT,KAAK,EACL,IAAI,EACJ,WAAW,EACX,cAAc,GACY,EAAA;;QAC1B,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,GAAG,CAAC,CAAA,EAAE;AAC7B,YAAA,IAAI,CAAC,WAAW,CAAC,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACZ,IAAI,CAAC,WAAW,CAAC,CAAA,EAAA,EACpB,CAAC,GAAG,GAAG;AACL,oBAAA,CAAC,SAAS,GAAC,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,KAAK,CAAA,EAAA,EAAE,cAAc,EAAA,CAAE;AAC1C,iBAAA,EAAA,CACF;AACF,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACZ,IAAI,CAAC,WAAW,CAAC,CAAA,EAAA,EACpB,CAAC,GAAG,GAAC,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACA,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAA,EAAA,EACzB,CAAC,SAAS,GAAC,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,KAAK,CAAA,EAAA,EAAE,cAAc,SAE1C;AACF,QAAA;IACH;AACD;;ACvpBD;;;AAGK;MACQ,UAAU,CAAA;AAQrB,IAAA,WAAA,CAAY,EACV,WAAW,EACX,WAAW,EACX,sBAAsB,EACtB,EAAE,EACF,UAAU,EACV,cAAc,GACC,EAAA;AACf,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,sBAAsB,GAAG,sBAAsB;AACpD,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE;AACZ,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;IACtC;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC;AAC1B,cAAE,YAAY,CAAC,cAAc,GAAG,IAAI,CAAC;cACnC,EAAE;AACN,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC;AACvB,cAAE,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;cAC5B,EAAE;AACN,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC;cACtB,YAAY,CAAC,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW;cAC5D,EAAE;AACN,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE;AACnD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC;cACjB,YAAY,CAAC,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,EAAE;cACtD,EAAE;AACN,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC;AACtB,cAAE,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC;cAC/B,EAAE;AACN,QAAA,MAAM,WAAW,GACf,IAAI,CAAC,WAAW,KAAK;AACnB,cAAE,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC;cAChC,EAAE;AACR,QAAA,MAAM,sBAAsB,GAC1B,IAAI,CAAC,sBAAsB,KAAK;AAC9B,cAAE,YAAY,CAAC,sBAAsB,GAAG,IAAI,CAAC;cAC3C,EAAE;QAER,QACE,YAAY,CAAC,UAAU;YACvB,WAAW;YACX,YAAY;YACZ,cAAc;YACd,WAAW;YACX,sBAAsB;YACtB,EAAE;YACF,OAAO;AACP,YAAA,UAAU;IAEd;AACD;;MC/DY,wBAAwB,CAAA;IAGnC,OAAO,2BAA2B,CAAC,KAAwB,EAAA;AACzD,QAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;IACvC;IAEA,OAAO,eAAe,CACpB,IAAuB,EAAA;QAEvB,OAAO,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,IAAI,CAAC;IAC5D;AACD;;MCbY,IAAI,CAAA;AAOf,IAAA,WAAA,CACE,KAAmC,EACnC,IAAY,EACZ,KAAa,EAAA;;QALP,IAAA,CAAA,aAAa,GAAY,KAAK;AAOpC,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACvB,QAAA;AAAM,aAAA;YACL,MAAM,MAAM,GAAG,wBAAwB,CAAC,eAAe,CAAC,KAAK,CAAC;AAC9D,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA,EAAA,GAAA,KAAK,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC;YAE/C,IAAI,MAAM,CAAC,EAAE,EAAE;AACb,gBAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI;AAC7B,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK;AAC9B,YAAA;AACF,QAAA;AAED,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;IACzB;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,aAAa;IAC3B;AAEQ,IAAA,UAAU,CAAC,KAAmC,EAAA;QACpD,OAAO,KAAK,KAAK,QAAQ,CAAC,GAAG,IAAI,KAAK,KAAK,QAAQ,CAAC,EAAE;IACxD;AACD;;MC5CY,IAAI,CAAA;AAKf,IAAA,WAAA,CAAY,OAAoB,EAAA;QAHxB,IAAA,CAAA,KAAK,GAA0B,IAAI;AACnC,QAAA,IAAA,CAAA,cAAc,GAAuB,IAAI,GAAG,EAAE;AAGpD,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,wBAAA,EAA2B,OAAO,GAAG;AAC1D,QAAA,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,GAC3C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6B9B,QAAA,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,KAAI;YACrE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,KAAI;;;;;gBAKzC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC;AAEhD,gBAAA,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC;AAC5B,YAAA,CAAC,CAAC;YAEF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;AACzC,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,iBAAiB,CAAC;AAC1D,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,0BAAA,EAA6B,OAAO,GAAG;IAC9D;AAEO,IAAA,QAAQ,CAAC,IAAwB,EAAA;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;QAEjD,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,OAAOP,gBAAG,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,QAAA;AAED,QAAA,OAAOD,eAAE,CAAC,MAAM,CAAC;IACnB;AAEO,IAAA,gBAAgB,CAAC,aAA4B,EAAA;QAClD,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC;IAC/C;IAEQ,YAAY,CAAC,IAAU,EAAE,IAAwB,EAAA;AACvD,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACzB,IAAI,IAAI,CAAC,KAAK,EAAE;;;;gBAId,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAKL,0BAAkB,CAAC,kBAAkB,EAAE;AAC7D,oBAAA,OAAO,IAAI;AACZ,gBAAA;AAED,gBAAA,OAAO,KAAK;AACb,YAAA;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AAExC,YAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;AACd,gBAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AAEzB,gBAAA,OAAO,KAAK;AACb,YAAA;AAED,YAAA,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACjD,QAAA;AAED,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAC5B,QAAQ,IAAI,CAAC,KAAK;AAChB,gBAAA,KAAK,QAAQ,CAAC,GAAG,EAAE;oBACjB,QACE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;wBAClC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AAEtC,gBAAA;AACD,gBAAA,KAAK,QAAQ,CAAC,EAAE,EAAE;oBAChB,QACE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;wBAClC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AAEtC,gBAAA;AAGF;AACF,QAAA;AAED,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,UAAU,CAAC,IAAW,EAAA;QAC5B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC;IAC1C;AAEQ,IAAA,aAAa,CAAC,IAAW,EAAA;AAC/B,QAAA,OAAO,OAAO,CACZ,IAAI,CAAC,IAAI;AACP,YAAA,IAAI,CAAC,KAAK;AACV,aAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,GAAG,CAAC,CAC9D;IACH;;;;IAKQ,SAAS,CAAC,KAAa,EAAE,SAAqB,EAAA;AACpD,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,YAAA,OAAO,KAAK,CAAC,CAAC,CAAC;AAChB,QAAA;AAED,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE;AAC1B,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE;YAE3B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC;AAC/C,YAAA,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;AACvB,QAAA;AAED,QAAA,OAAO,KAAK,CAAC,CAAC,CAAC;IACjB;AAEQ,IAAA,cAAc,CAAC,OAAoB,EAAA;AACzC,QAAA,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,qBAAqB,EAAE,SAAS,EAAE,GAChE,OAAO,CAAC,cAAc;QAExB,MAAM,gBAAgB,GAA+B,EAAE;AAEvD,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;YAC/B,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,SAAS;AAE5D,YAAA,MAAM,KAAK,GAAG;AACZ,gBAAA,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AAC7C,gBAAA,UAAU,EAAE,aAAa;aAC1B;AAED,YAAA,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B,QAAA,CAAC,CAAC;QAEF,OAAO;AACL,YAAA,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;YACnD,gBAAgB;SACjB;IACH;AAEQ,IAAA,gBAAgB,CAAC,SAAoB,EAAA;QAC3C,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7E;AACD;;MC1LY,MAAM,CAAA;IAGjB,WAAA,CAAY,EAAE,MAAM,EAAqB,EAAA;AACvC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;IAEO,QAAQ,CAAC,EACd,aAAa,GACM,EAAA;AACnB,QAAA,MAAM,UAAU,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGa,qBAAa,CAAC,MAAM,CAAC;AAExD,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU;YAE7B,OAAOR,eAAE,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC;AAClC,QAAA;AAED,QAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;IAClB;AACD;;MCfY,OAAO,CAAA;AAMlB,IAAA,WAAA,CAAY,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAqB,EAAA;AACnE,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;IAC1C;IAEO,QAAQ,CAAC,EACd,aAAa,GACM,EAAA;AACnB,QAAA,MAAM,WAAW,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGQ,qBAAa,CAAC,OAAO,CAAC;AAE1D,QAAA,IAAI,WAAW,EAAE;YACf,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;YAE/C,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,gBAAA,OAAOP,gBAAG,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,YAAA;AAED,YAAA,OAAOD,eAAE,CAAC,MAAM,CAAC;AAClB,QAAA;AAED,QAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;IAClB;AAEQ,IAAA,cAAc,CAAC,WAA4B,EAAA;AACjD,QAAA,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,WAAW;AAExC,QAAA,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;AACpC,YAAA,OAAO,KAAK;AACb,QAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,OAAO,KAAK,IAAI,CAAC,OAAO;AAChC,QAAA;QAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AACzD,YAAA,OAAO,KAAK;AACb,QAAA;QAED,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAE9C,QAAA,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE;YACxB,eAAe,CAAC,KAAK,CAAA,CAAA,yBAAA,EAA4B,IAAI,CAAC,OAAO,uBAAuB;AACpF,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,cAAc,CAC7BL,0BAAkB,CAAC,YAAY,EAC/B,IAAI,CAAC,OAAO,CACb;AACF,QAAA;QAED,QAAQ,IAAI,CAAC,gBAAgB;YAC3B,KAAK,gBAAgB,CAAC,KAAK;gBACzB,OAAO,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,aAAa;YAC9D,KAAK,gBAAgB,CAAC,OAAO;gBAC3B,OAAO,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,OAAO,GAAG,aAAa;YAC5D,KAAK,gBAAgB,CAAC,KAAK;gBACzB,OAAO,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,OAAO,GAAG,aAAa;AAC5D,YAAA;gBACE,eAAe,CAAC,KAAK,CAAA,CAAA,sDAAA,EAAyD,IAAI,CAAC,gBAAgB,EAAE;AACrG,gBAAA,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACtC;IACH;AACD;;MCxEY,UAAU,CAAA;IAGrB,WAAA,CAAY,EAAE,MAAM,EAAqB,EAAA;AACvC,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM;IAC9B;IAEO,QAAQ,CAAC,EACd,aAAa,GACM,EAAA;AACnB,QAAA,MAAM,cAAc,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGa,qBAAa,CAAC,UAAU,CAAC;AAEhE,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,OAAOR,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;AAED,QAAA,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,KAAK,EAAE,EAAE;AACpE,gBAAA,OAAOA,eAAE,CAAC,IAAI,CAAC;AAChB,YAAA;YAED,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;YAEjD,OAAOA,eAAE,CACP,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;gBAC9B,IAAI,CAAC,UAAU,EAAE;AACf,oBAAA,OAAO,KAAK;AACb,gBAAA;AAED,gBAAA,OAAO,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc;YAClD,CAAC,CAAC,CACH;AACF,QAAA;AAED,QAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;IAClB;AACD;;MClCY,UAAU,CAAA;IAOrB,WAAA,CAAY,EACV,eAAe,EACf,cAAc,EACd,KAAK,EACL,KAAK,GACa,EAAA;AAClB,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE;AACrE,QAAA,IAAI,CAAC,SAAS,GAAG,cAAc;AAC/B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;IAEO,QAAQ,CAAC,EACd,aAAa,GACM,EAAA;;AACnB,QAAA,MAAM,UAAU,GACd,CAAA,EAAA,GAAA,aAAa,KAAA,IAAA,IAAb,aAAa,uBAAb,aAAa,CAAGQ,qBAAa,CAAC,UAAU,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,IAAI,CAAC,eAAe,CAAC;AAEnE,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,cAAc,CAAC,SAAS,EAAE;AAC/C,YAAA,OAAOR,eAAE,CAAC,CAAC,UAAU,CAAC;AACvB,QAAA;AAED,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,UAAU;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC;YAEnD,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,gBAAA,OAAOC,gBAAG,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,YAAA;AAED,YAAA,OAAOD,eAAE,CAAC,MAAM,CAAC;AAClB,QAAA;AAED,QAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;IAClB;AAEQ,IAAA,cAAc,CACpB,eAAiD,EAAA;AAEjD,QAAA,IACE,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ;AACvC,YAAA,IAAI,CAAC,SAAS,KAAK,cAAc,CAAC,IAAI;AACtC,YAAA,IAAI,CAAC,SAAS,KAAK,cAAc,CAAC,KAAK;AACvC,YAAA,IAAI,CAAC,SAAS,KAAK,cAAc,CAAC,KAAK,EACvC;YACA,eAAe,CAAC,KAAK,CAAA,CAAA,qDAAA,EAAwD,IAAI,CAAC,cAAc,EAAE;AAClG,YAAA,OAAO,KAAK;AACb,QAAA;;;;;AAMD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAwB;;;;AAKpD,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,cAAc,CAAC,YAAY,EAAE;YAClD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;AAE9C,YAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;AACd,gBAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AAEzB,gBAAA,OAAO,KAAK;AACb,YAAA;YAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;AAEvC,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,eAAe;AAClC,kBAAE,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;kBACrD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;AAC1C,QAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,cAAc,CAAC,KAAK,EAAE;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAE1C,YAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;AACd,gBAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AAEzB,gBAAA,OAAO,KAAK;AACb,YAAA;YAED,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,MAAM,CAAC,IAAI;AAE5C,YAAA,MAAM,SAAS,GAAG,CAAC,KAAa,KAC9B,KAAK,IAAI,UAAU,IAAI,KAAK,IAAI,UAAU;AAE5C,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,eAAe;AAClC,kBAAE,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;kBACxD,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AACvC,QAAA;AAED,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;AAClC,YAAA,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACnE,QAAA;QAED,QAAQ,IAAI,CAAC,SAAS;YACpB,KAAK,cAAc,CAAC,QAAQ;AAC1B,gBAAA,OAAO,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC;YACjD,KAAK,cAAc,CAAC,KAAK;AACvB,gBAAA,OAAO,eAAe,KAAK,IAAI,CAAC,cAAc;YAChD,KAAK,cAAc,CAAC,kBAAkB;gBACpC,OAAO,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;YACjE,KAAK,cAAc,CAAC,KAAK;gBACvB,OAAO,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;YAC9D,KAAK,cAAc,CAAC,KAAK;gBACvB,OAAO,MAAM,CAAC,eAAe,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;YAChE,KAAK,cAAc,CAAC,OAAO;gBACzB,OAAO,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;YAC9D,KAAK,cAAc,CAAC,IAAI;AACtB,gBAAA,OAAO,eAAe,CAAC,WAAW,EAAE,KAAK,MAAM;YACjD,KAAK,cAAc,CAAC,KAAK;AACvB,gBAAA,OAAO,eAAe,CAAC,WAAW,EAAE,KAAK,OAAO;AAClD,YAAA;gBACE,eAAe,CAAC,KAAK,CAAA,CAAA,yDAAA,EAA4D,IAAI,CAAC,SAAS,EAAE;AACjG,gBAAA,OAAO,KAAK;AACf;IACH;AAEQ,IAAA,UAAU,CAAC,KAAa,EAAA;QAC9B,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAEhC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzB,gBAAA,OAAOA,eAAE,CAAC,MAAM,CAAC;AAClB,YAAA;AACF,QAAA;AAAC,QAAA,OAAO,GAAG,EAAE;AACZ,YAAA,eAAe,CAAC,KAAK,CAAA,CAAA,uBAAA,EAA0B,KAAK,0BAA0B;AAC9E,YAAA,OAAOC,gBAAG,CACR,IAAI,cAAc,CAACN,0BAAkB,CAAC,gBAAgB,EAAE,GAAG,EAAE,KAAK,CAAC,CACpE;AACF,QAAA;AAED,QAAA,OAAOK,eAAE,CAAC,EAAE,CAAC;IACf;AAEQ,IAAA,UAAU,CAChB,KAAuB,EAAA;QAEvB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,YAAA,eAAe,CAAC,KAAK,CAAA,CAAA,uBAAA,EAA0B,KAAK,0BAA0B;AAC9E,YAAA,OAAOC,gBAAG,CAAC,IAAI,cAAc,CAACN,0BAAkB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACrE,QAAA;AAED,QAAA,OAAOK,eAAE,CAAC,KAAyB,CAAC;IACtC;AACD;;MC5JY,SAAS,CAAA;IACb,OAAO,SAAS,CACrB,YAA2E,EAAA;AAE3E,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,KACxD,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI;AACpD,YAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChD,cAAE;cACA,OAAO,CACZ;IACH;AACD;;MCRY,SAAS,CAAA;AAIpB,IAAA,WAAA,CAAY,EAAE,SAAS,EAAE,KAAK,EAAqB,EAAA;AACjD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;IAC7B;IAEO,QAAQ,CAAC,EACd,aAAa,GACM,EAAA;AACnB,QAAA,MAAM,YAAY,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGQ,qBAAa,CAAC,QAAQ,CAAC;QAE5D,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAOR,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;QAED,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC;QAExD,OAAOA,eAAE,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACtD;AAEQ,IAAA,cAAc,CAAC,KAAa,EAAA;QAClC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC3C,YAAA,OAAO,KAAK;AACb,QAAA;QAED,QAAQ,IAAI,CAAC,SAAS;YACpB,KAAK,SAAS,CAAC,QAAQ;gBACrB,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;YAC5C,KAAK,SAAS,CAAC,KAAK;AAClB,gBAAA,OAAO,KAAK,KAAK,IAAI,CAAC,cAAc;YACtC,KAAK,SAAS,CAAC,kBAAkB;AAC/B,gBAAA,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5D,YAAA;gBACE,eAAe,CAAC,KAAK,CAAA,CAAA,wDAAA,EAA2D,IAAI,CAAC,SAAS,EAAE;AAChG,gBAAA,OAAO,KAAK;AACf;IACH;AACD;;MCxCY,OAAO,CAAA;AAIlB,IAAA,WAAA,CAAY,EAAE,SAAS,EAAE,GAAG,EAAqB,EAAA;AAC/C,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,GAAG;IAC3B;IAEO,QAAQ,CAAC,EACd,aAAa,GACM,EAAA;AACnB,QAAA,MAAM,YAAY,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGQ,qBAAa,CAAC,QAAQ,CAAC;QAE5D,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAOR,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;QAED,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC;QAExD,OAAOA,eAAE,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAC3D;AAEQ,IAAA,cAAc,CAAC,GAAW,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC3C,YAAA,OAAO,KAAK;AACb,QAAA;QAED,QAAQ,IAAI,CAAC,SAAS;YACpB,KAAK,SAAS,CAAC,QAAQ;gBACrB,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;YAC1C,KAAK,SAAS,CAAC,KAAK;AAClB,gBAAA,OAAO,GAAG,KAAK,IAAI,CAAC,cAAc;YACpC,KAAK,SAAS,CAAC,kBAAkB;AAC/B,gBAAA,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1D,YAAA;gBACE,eAAe,CAAC,KAAK,CAAA,CAAA,sDAAA,EAAyD,IAAI,CAAC,SAAS,EAAE;AAC9F,gBAAA,OAAO,KAAK;AACf;IACH;AACD;;MCzCY,WAAW,CAAA;AAKtB,IAAA,WAAA,CAAY,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAqB,EAAA;AACvE,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;IAC1C;IAEO,QAAQ,CAAC,EACd,OAAO,GACY,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;IACrC;AAEQ,IAAA,cAAc,CACpB,OAAgC,EAAA;QAEhC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO;AAE1C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;AAED,QAAA,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ,EAAE;YAC3C,OAAOA,eAAE,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,CAAC;AACxC,QAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC1B,YAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;AAED,QAAA,IAAI,OAAO,KAAK,IAAI,CAAC,WAAW,EAAE;AAChC,YAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;AAED,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC;YACrC,OAAO;YACP,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,QAAQ,EAAE,IAAI,CAAC,gBAAgB;AAChC,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;AACd,YAAA,OAAOC,gBAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AACzB,QAAA;AAED,QAAA,OAAOD,eAAE,CAAC,MAAM,CAAC,IAAI,CAAC;IACxB;AACD;;MCnDY,WAAW,CAAA;AAItB,IAAA,WAAA,CAAY,EAAE,WAAW,EAAE,SAAS,EAAqB,EAAA;AACvD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,WAAW;IACnC;IAEO,QAAQ,CAAC,EACd,WAAW,GACQ,EAAA;QACnB,OAAOA,eAAE,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC7C;AAEQ,IAAA,cAAc,CAAC,WAAmB,EAAA;QACxC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC3C,YAAA,OAAO,KAAK;AACb,QAAA;QAED,QAAQ,IAAI,CAAC,SAAS;YACpB,KAAK,SAAS,CAAC,QAAQ;gBACrB,OAAO,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;YAClD,KAAK,SAAS,CAAC,KAAK;AAClB,gBAAA,OAAO,WAAW,KAAK,IAAI,CAAC,cAAc;YAC5C,KAAK,SAAS,CAAC,kBAAkB;AAC/B,gBAAA,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;AAClE,YAAA;gBACE,eAAe,CAAC,KAAK,CAAA,CAAA,0DAAA,EAA6D,IAAI,CAAC,SAAS,EAAE;AAClG,gBAAA,OAAO,KAAK;AACf;IACH;AACD;;MCzBY,MAAM,CAAA;IAKjB,WAAA,CAAY,EACV,IAAI,EACJ,KAAK,EACL,aAAa,EACb,cAAc,GACI,EAAA;QAClB,IAAI,CAAC,MAAM,GAAG;AACZ,YAAA,GAAG,EAAE,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,MAAA,GAAJ,IAAI,GAAI,SAAS;AACtB,YAAA,KAAK,EAAE,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAL,KAAK,GAAI,SAAS;SAC1B;AACD,QAAA,IAAI,CAAC,YAAY,GAAG,aAAa;AACjC,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;IACtC;IAEO,QAAQ,CAAC,EACd,aAAa,GACM,EAAA;;AACnB,QAAA,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;AAC5D,QAAA,MAAM,gBAAgB,GACpB,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;AAE5D,QAAA,IAAI,aAAa,IAAI,CAAC,gBAAgB,EAAE;AACtC,YAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;AAED,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE;AAC5C,QAAA,MAAM,UAAU,GAAG,CAAA,MAAA,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGQ,qBAAa,CAAC,MAAM,CAAC,0CAAE,MAAM,KAAI,EAAE;AAEtE,QAAA,OAAOR,eAAE,CACP,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACvD,YAAA,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CACvD;IACH;IAEQ,aAAa,GAAA;QACnB,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,MAAM,EAAE;AACtD,YAAA,OAAOkB,QAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM;AAC1D,QAAA;AAED,QAAA,OAAO,EAAE;IACX;AAEQ,IAAA,cAAc,CAAC,UAAsB,EAAA;AAC3C,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,YAAa;AAC1C,QAAA,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,UAAU;AAEjC,QAAA,IAAI,eAAe,KAAK,aAAa,CAAC,QAAQ,EAAE;AAC9C,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM;AAEnC,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe;kBACxC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,eAAe,CAAC,KAAK;kBACpD,KAAK;AACV,QAAA;AAED,QAAA,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,MAAoB;AAE1E,QAAA,IAAI,QAAiB;AAErB,QAAA,QAAQ,eAAe;YACrB,KAAK,aAAa,CAAC,KAAK;AACtB,gBAAA,QAAQ,GAAG,GAAG,KAAK,UAAU;gBAC7B;YACF,KAAK,aAAa,CAAC,QAAQ;AACzB,gBAAA,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACnC;YACF,KAAK,aAAa,CAAC,kBAAkB;AACnC,gBAAA,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBACnD;AACF,YAAA;AACE,gBAAA,eAAe,CAAC,KAAK,CAAA,CAAA,qDAAA,EAAwD,eAAe,EAAE;gBAC9F,YAAY,CAAC,eAAe,CAAC;AAChC;QAED,OAAO,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,YAAY,CAAC;IACjE;IAEQ,kBAAkB,CAAC,KAAa,EAAE,YAAoB,EAAA;AAC5D,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAe;AAE3C,QAAA,QAAQ,cAAc;YACpB,KAAK,cAAc,CAAC,KAAK;gBACvB,OAAO,KAAK,KAAK,YAAY;YAC/B,KAAK,cAAc,CAAC,QAAQ;AAC1B,gBAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;YACrC,KAAK,cAAc,CAAC,kBAAkB;gBACpC,OAAO,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AACrD,YAAA;AACE,gBAAA,eAAe,CAAC,KAAK,CAAA,CAAA,qDAAA,EAAwD,cAAc,EAAE;AAC7F,gBAAA,OAAO,KAAK;AACf;IACH;AAEQ,IAAA,gBAAgB,CACtB,MAA2B,EAAA;AAE3B,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM;AAExB,QAAA,OAAO,OAAO,KAAK,KAAK,WAAW;IACrC;AACD;;MC/GY,eAAe,CAAA;IAG1B,WAAA,CAAY,EAAE,EAAE,EAAqB,EAAA;AACnC,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;IAC3B;IAEO,QAAQ,CAAC,EACd,aAAa,GACM,EAAA;AACnB,QAAA,MAAM,mBAAmB,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGV,qBAAa,CAAC,eAAe,CAAC;AAE1E,QAAA,IAAI,mBAAmB,EAAE;AACvB,YAAA,MAAM,EAAE,eAAe,EAAE,GAAG,mBAAmB;YAE/C,OAAOR,eAAE,CAAC,eAAe,KAAK,IAAI,CAAC,eAAe,CAAC;AACpD,QAAA;AAED,QAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;IAClB;AACD;;ACrBD;AACA;AACA;MACa,oBAAoB,CAAA;AAK/B,IAAA,WAAA,CAAY,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAqB,EAAA;AACtD,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;IAClB;IAEO,QAAQ,CAAC,EACd,aAAa,GACM,EAAA;AACnB,QAAA,MAAM,eAAe,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGQ,qBAAa,CAAC,eAAe,CAAC;AAEtE,QAAA,IAAI,eAAe,EAAE;AACnB,YAAA,MAAM,EACJ,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,GACf,GAAG,eAAe;AACnB,YAAA,MAAM,CAAC,gBAAgB,EAAE,eAAe,EAAE,aAAa,CAAC,GAAG;AACzD,gBAAA,IAAI,CAAC,OAAO;AACZ,gBAAA,IAAI,CAAC,MAAM;AACX,gBAAA,IAAI,CAAC,IAAI;aACV;AAED,YAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,WAAW,EAAE;AACrC,gBAAA,OAAOR,eAAE,CAAC,KAAK,CAAC;AACjB,YAAA;YAED,MAAM,MAAM,GACV,WAAW,CAAC,WAAW,EAAE,KAAK,gBAAgB,CAAC,WAAW,EAAE;AAC5D,iBAAC,CAAC,eAAe;AACf,oBAAA,CAAA,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,MAAA,GAAA,MAAA,GAAV,UAAU,CAAE,WAAW,EAAE,MAAK,eAAe,CAAC,WAAW,EAAE,CAAC;AAC9D,iBAAC,CAAC,aAAa;AACb,oBAAA,CAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,WAAW,EAAE,MAAK,aAAa,CAAC,WAAW,EAAE,CAAC;AAE5D,YAAA,OAAOA,eAAE,CAAC,MAAM,CAAC;AAClB,QAAA;AAED,QAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;IAClB;AACD;;MC/CY,OAAO,CAAA;IAGlB,WAAA,CAAY,EAAE,SAAS,EAAqB,EAAA;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;IAC5B;AAEO,IAAA,QAAQ,CACb,cAAkC,EAAA;AAElC,QAAA,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,cAAc;AAE1C,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;AAED,QAAA,MAAM,OAAO,GAAG,QAAQ,KAAA,IAAA,IAAR,QAAQ,uBAAR,QAAQ,CAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAExD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;AAED,QAAA,MAAM,IAAI,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,uBAAL,KAAK,CAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AAElD,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;AACrC,QAAA;QAED,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;IACnD;AACD;;MC/BY,iBAAiB,CAAA;AAK5B,IAAA,WAAA,CAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAqB,EAAA;AACpE,QAAA,IAAI,CAAC,SAAS,GAAG,aAAa;AAC9B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;IAClC;AAEO,IAAA,QAAQ,CAAC,EACd,aAAa,EACb,OAAO,GACY,EAAA;;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE;AAC/B,YAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;;;AAID,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACxD,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE;AAC/B,gBAAA,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,IAAI;AAExC,gBAAA,IACE,SAAS,KAAK,IAAI,CAAC,SAAS;oBAC5B,QAAO,CAAA,EAAA,GAAA,aAAa,CAAC,YAAY,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,CAAA,KAAK,QAAQ,EAC5D;AACA,oBAAA,OAAOA,eAAE,CAAC,IAAI,CAAC;AAChB,gBAAA;AACF,YAAA;AAED,YAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;;;AAID,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE;YACjC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YAErC,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;AACjB,YAAA;AAED,YAAA,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,IAAI;YAEzC,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;AAErD,gBAAA,OAAOA,eAAE,CACP,OAAO,CAAC,WAAW,CAAC;oBAClB,CAAA,CAAA,EAAA,GAAA,aAAa,CAAC,YAAY,CAAC,0CAAE,WAAW,MAAK,WAAW,CAC3D;AACF,YAAA;AAED,YAAA,OAAOA,eAAE,CAAC,OAAO,CAAC,MAAA,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,CAAC,CAAC;AAClE,QAAA;;;AAID,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE;YACvD,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE;gBAC/B,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,IAAI;AAEpD,gBAAA,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;oBACrE,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;AAErD,oBAAA,OAAOA,eAAE,CACP,OAAO,CAAC,WAAW,CAAC;wBAClB,CAAA,CAAA,EAAA,GAAA,aAAa,CAAC,YAAY,CAAC,0CAAE,WAAW,MAAK,WAAW,CAC3D;AACF,gBAAA;AACF,YAAA;AACF,QAAA;AAED,QAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;IAClB;AACD;;MC3EY,YAAY,CAAA;AAIvB,IAAA,WAAA,CAAY,EAAE,SAAS,EAAE,GAAG,EAAqB,EAAA;AAC/C,QAAA,IAAI,CAAC,cAAc,GAAG,GAAG;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;IAC5B;IAEO,QAAQ,CAAC,EACd,aAAa,GACM,EAAA;AACnB,QAAA,MAAM,aAAa,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGQ,qBAAa,CAAC,QAAQ,CAAC;QAE7D,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAOR,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;;;;;AAMD,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,CACvD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAC7B;QAED,IAAI,CAAC,oBAAoB,EAAE;AACzB,YAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;AAED,QAAA,MAAM,GAAG,GAAG,oBAAoB,CAAC,UAAU;QAE3C,OAAOA,eAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACrC;AAEQ,IAAA,cAAc,CAAC,GAAW,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC3C,YAAA,OAAO,KAAK;AACb,QAAA;QAED,QAAQ,IAAI,CAAC,SAAS;YACpB,KAAK,SAAS,CAAC,QAAQ;gBACrB,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;YAC1C,KAAK,SAAS,CAAC,KAAK;AAClB,gBAAA,OAAO,GAAG,KAAK,IAAI,CAAC,cAAc;YACpC,KAAK,SAAS,CAAC,kBAAkB;AAC/B,gBAAA,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1D,YAAA;gBACE,eAAe,CAAC,KAAK,CAAA,CAAA,2DAAA,EAA8D,IAAI,CAAC,SAAS,EAAE;AACnG,gBAAA,OAAO,KAAK;AACf;IACH;AAEQ,IAAA,uBAAuB,CAC7B,aAAiC,EAAA;AAEjC,QAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,YAAA,OAAO,SAAS;AACjB,QAAA;;;;AAKD,QAAA,IAAI,QAAsC;AAC1C,QAAA,IAAI,QAAsC;AAE1C,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;AAClC,YAAA,MAAM,eAAe,GACnB,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI;;YAG5D,IAAI,CAAC,QAAQ,EAAE;gBACb,QAAQ,GAAG,SAAS;gBACpB;AACD,YAAA;AAED,YAAA,MAAM,QAAQ,GACZ,QAAQ,CAAC,UAAU,CAAC,QAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI;;YAG3D,IAAI,eAAe,GAAG,QAAQ,EAAE;gBAC9B,QAAQ,GAAG,QAAQ;gBACnB,QAAQ,GAAG,SAAS;gBAEpB;AACD,YAAA;;YAGD,MAAM,QAAQ,GAAG;AACf,kBAAE,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;kBACpD,CAAC;;YAGL,IAAI,eAAe,GAAG,QAAQ,EAAE;gBAC9B,QAAQ,GAAG,SAAS;AACrB,YAAA;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,QAAQ;IACjB;AACD;;MCrGY,YAAY,CAAA;AAIvB,IAAA,WAAA,CAAY,EAAE,SAAS,EAAE,SAAS,EAAqB,EAAA;AACrD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;IACjC;IAEO,QAAQ,CAAC,EACd,aAAa,GACM,EAAA;AACnB,QAAA,MAAM,aAAa,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGQ,qBAAa,CAAC,QAAQ,CAAC;QAE7D,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAOR,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;QAED,IAAI,WAAW,GAAG,CAAC;QAEnB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,QAA0B,KAAI;AAClE,YAAA,WAAW,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM;AAC3C,QAAA,CAAC,CAAC;QAEF,OAAOA,eAAE,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC7C;AAEQ,IAAA,cAAc,CAAC,WAAmB,EAAA;QACxC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ,EAAE;AAC9D,YAAA,OAAO,KAAK;AACb,QAAA;QAED,QAAQ,IAAI,CAAC,SAAS;YACpB,KAAK,SAAS,CAAC,KAAK;AAClB,gBAAA,OAAO,WAAW,KAAK,IAAI,CAAC,cAAc;YAC5C,KAAK,SAAS,CAAC,OAAO;AACpB,gBAAA,OAAO,WAAW,GAAG,IAAI,CAAC,cAAc;YAC1C,KAAK,SAAS,CAAC,KAAK;AAClB,gBAAA,OAAO,WAAW,GAAG,IAAI,CAAC,cAAc;AAC1C,YAAA;gBACE,eAAe,CAAC,KAAK,CAAA,CAAA,2DAAA,EAA8D,IAAI,CAAC,SAAS,EAAE;AACnG,gBAAA,OAAO,KAAK;AACf;IACH;AACD;;MC3CY,UAAU,CAAA;AAKrB,IAAA,WAAA,CAAY,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAqB,EAAA;AAC7D,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;IAC5B;AAEO,IAAA,QAAQ,CAAC,EACd,aAAa,EACb,OAAO,GACY,EAAA;AACnB,QAAA,MAAM,UAAU,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGQ,qBAAa,CAAC,UAAU,CAAC;QAE5D,IACE,OAAO,CAAC;AACN,cAAE,EAAC,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,MAAA,GAAA,MAAA,GAAV,UAAU,CAAE,MAAM,CAAC,MAAM;AAC5B,cAAE,EAAC,UAAU,KAAA,IAAA,IAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAA,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EACvD;AACA,YAAA,OAAOR,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;QAED,MAAM,UAAU,GAAG,UAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QAExC,OAAOA,eAAE,CACP,IAAI,CAAC,cAAc,CACjB,OAAO,UAAU,KAAK,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC,WAAW,CACrE,CACF;IACH;AAEQ,IAAA,cAAc,CAAC,mBAA2B,EAAA;QAChD,IACE,CAAC,IAAI,CAAC,SAAS;AACf,YAAA,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ;YACvC,CAAC,IAAI,CAAC,QAAQ,EACd;AACA,YAAA,OAAO,KAAK;AACb,QAAA;QAED,MAAM,uBAAuB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,mBAAmB;AAChE,QAAA,MAAM,eAAe,GAAG,SAAS,CAAC,eAAe,CAC/C,uBAAuB,EACvB,IAAI,CAAC,QAAQ,CACd;QAED,QAAQ,IAAI,CAAC,SAAS;YACpB,KAAK,SAAS,CAAC,OAAO;AACpB,gBAAA,OAAO,eAAe,GAAG,IAAI,CAAC,cAAc;YAC9C,KAAK,SAAS,CAAC,KAAK;AAClB,gBAAA,OAAO,eAAe,GAAG,IAAI,CAAC,cAAc;AAC9C,YAAA;gBACE,eAAe,CAAC,KAAK,CAAA,CAAA,yDAAA,EAA4D,IAAI,CAAC,SAAS,EAAE;AACjG,gBAAA,OAAO,KAAK;AACf;IACH;AACD;;MC3DY,SAAS,CAAA;AAKpB,IAAA,WAAA,CAAY,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAqB,EAAA;AAC7D,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;IAC5B;AAEO,IAAA,QAAQ,CAAC,EACd,aAAa,EACb,OAAO,GACY,EAAA;AACnB,QAAA,MAAM,UAAU,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGQ,qBAAa,CAAC,UAAU,CAAC;QAE5D,IACE,OAAO,CAAC;AACN,cAAE,EAAC,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,MAAA,GAAA,MAAA,GAAV,UAAU,CAAE,MAAM,CAAC,MAAM;AAC5B,cAAE,EAAC,UAAU,KAAA,IAAA,IAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAA,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EACvD;AACA,YAAA,OAAOR,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;AAED,QAAA,MAAM,MAAM,GAAG,UAAW,CAAC,MAAM;;;AAIjC,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC;AAC7B,cAAE,MAAM,CAAC,MAAM,GAAG;AAClB,cAAE,MAAM,CAAC,MAAM,GAAG,CAAC;AACrB,QAAA,MAAM,mBAAmB,GAAG,MAAM,CAAC,cAAc,CAAC;QAElD,OAAOA,eAAE,CACP,IAAI,CAAC,cAAc,CACjB,OAAO,mBAAmB,KAAK;AAC7B,cAAE;AACF,cAAE,mBAAmB,CAAC,WAAW,CACpC,CACF;IACH;AAEQ,IAAA,cAAc,CAAC,kBAA0B,EAAA;QAC/C,IACE,CAAC,IAAI,CAAC,SAAS;AACf,YAAA,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ;YACvC,CAAC,IAAI,CAAC,QAAQ,EACd;AACA,YAAA,OAAO,KAAK;AACb,QAAA;QAED,MAAM,uBAAuB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB;AAC/D,QAAA,MAAM,eAAe,GAAG,SAAS,CAAC,eAAe,CAC/C,uBAAuB,EACvB,IAAI,CAAC,QAAQ,CACd;QAED,QAAQ,IAAI,CAAC,SAAS;YACpB,KAAK,SAAS,CAAC,OAAO;AACpB,gBAAA,OAAO,eAAe,GAAG,IAAI,CAAC,cAAc;YAC9C,KAAK,SAAS,CAAC,KAAK;AAClB,gBAAA,OAAO,eAAe,GAAG,IAAI,CAAC,cAAc;AAC9C,YAAA;gBACE,eAAe,CAAC,KAAK,CAAA,CAAA,wDAAA,EAA2D,IAAI,CAAC,SAAS,EAAE;AAChG,gBAAA,OAAO,KAAK;AACf;IACH;AACD;;MCrEY,aAAa,CAAA;AAIxB,IAAA,WAAA,CAAY,EAAE,SAAS,EAAE,UAAU,EAAqB,EAAA;AACtD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU;IAClC;AAEO,IAAA,QAAQ,CAAC,EACd,aAAa,EACb,OAAO,GACY,EAAA;AACnB,QAAA,MAAM,UAAU,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGQ,qBAAa,CAAC,UAAU,CAAC;QAE5D,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAOR,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;QAED,IAAI,WAAW,GAAG,CAAC;AAEnB,QAAA,MAAM,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtD,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU;AAE7B,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACtB,YAAA,IAAI,WAAW;AACf,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC5B,WAAW,GAAG,IAAI;AACnB,YAAA;AAAM,iBAAA;AACL,gBAAA,WAAW,GAAG,IAAI,CAAC,WAAW;AAC/B,YAAA;YAED,IAAI,WAAW,IAAI,cAAc,EAAE;AACjC,gBAAA,WAAW,EAAE;AACd,YAAA;AACH,QAAA,CAAC,CAAC;QAEF,IAAI,OAAO,CAAC,QAAQ,EAAE;;;YAGpB,WAAW,IAAI,CAAC;AACjB,QAAA;QAED,OAAOA,eAAE,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC7C;AAEQ,IAAA,cAAc,CAAC,iBAAyB,EAAA;QAC9C,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ,EAAE;AAC9D,YAAA,OAAO,KAAK;AACb,QAAA;QAED,QAAQ,IAAI,CAAC,SAAS;YACpB,KAAK,SAAS,CAAC,KAAK;AAClB,gBAAA,OAAO,iBAAiB,KAAK,IAAI,CAAC,cAAc;YAClD,KAAK,SAAS,CAAC,OAAO;AACpB,gBAAA,OAAO,iBAAiB,GAAG,IAAI,CAAC,cAAc;YAChD,KAAK,SAAS,CAAC,KAAK;AAClB,gBAAA,OAAO,iBAAiB,GAAG,IAAI,CAAC,cAAc;AAChD,YAAA;gBACE,eAAe,CAAC,KAAK,CAAA,CAAA,4DAAA,EAA+D,IAAI,CAAC,SAAS,EAAE;AACpG,gBAAA,OAAO,KAAK;AACf;IACH;AACD;;MC/DY,MAAM,CAAA;AAIjB,IAAA,WAAA,CAAY,EAAE,SAAS,EAAE,UAAU,EAAqB,EAAA;AACtD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU;IAClC;AAEO,IAAA,QAAQ,CAAC,EACd,aAAa,EACb,OAAO,GACY,EAAA;AACnB,QAAA,MAAM,UAAU,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGQ,qBAAa,CAAC,UAAU,CAAC;QAE5D,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAOR,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;;;QAID,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpE,OAAOA,eAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC;AAEQ,IAAA,cAAc,CAAC,YAAoB,EAAA;QACzC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ,EAAE;AAC9D,YAAA,OAAO,KAAK;AACb,QAAA;QAED,QAAQ,IAAI,CAAC,SAAS;YACpB,KAAK,SAAS,CAAC,KAAK;AAClB,gBAAA,OAAO,YAAY,KAAK,IAAI,CAAC,cAAc;YAC7C,KAAK,SAAS,CAAC,OAAO;AACpB,gBAAA,OAAO,YAAY,GAAG,IAAI,CAAC,cAAc;YAC3C,KAAK,SAAS,CAAC,KAAK;AAClB,gBAAA,OAAO,YAAY,GAAG,IAAI,CAAC,cAAc;AAC3C,YAAA;gBACE,eAAe,CAAC,KAAK,CAAA,CAAA,qDAAA,EAAwD,IAAI,CAAC,SAAS,EAAE;AAC7F,gBAAA,OAAO,KAAK;AACf;IACH;AACD;;MC3CY,UAAU,CAAA;IAGrB,WAAA,CAAY,EAAE,WAAW,EAAqB,EAAA;AAC5C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAChC;AAEO,IAAA,QAAQ,CAAC,EACd,aAAa,EACb,OAAO,GACY,EAAA;AACnB,QAAA,MAAM,UAAU,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGQ,qBAAa,CAAC,UAAU,CAAC;AAE5D,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACpC,YAAA,OAAOR,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;AAED,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU;;;;AAK7B,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC;AAC3B,cAAE,CAAC,MAAM,CAAC;AACV,cAAE,MAAM,CAAC,MAAM,IAAI,CAAC;QAEtB,QAAQ,IAAI,CAAC,WAAW;YACtB,KAAK,WAAW,CAAC,GAAG;AAClB,gBAAA,OAAOA,eAAE,CAAC,YAAY,CAAC;YACzB,KAAK,WAAW,CAAC,SAAS;AACxB,gBAAA,OAAOA,eAAE,CAAC,CAAC,YAAY,CAAC;AAC1B,YAAA;gBACE,eAAe,CAAC,KAAK,CAAA,CAAA,kDAAA,EAAqD,IAAI,CAAC,WAAW,EAAE;AAC5F,gBAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AACjC;IACH;AACD;;MCpCY,kBAAkB,CAAA;AAI7B,IAAA,WAAA,CAAY,EAAE,OAAO,EAAE,gBAAgB,EAAqB,EAAA;AAC1D,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;IAC1C;IAEO,QAAQ,CAAC,EACd,aAAa,GACM,EAAA;;AACnB,QAAA,MAAM,OAAO,GAAG,CAAA,EAAA,GAAA,aAAa,aAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGQ,qBAAa,CAAC,kBAAkB,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO;AAE1E,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC9D,YAAA,OAAOR,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;AAED,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC;YACrC,OAAO;YACP,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,QAAQ,EAAE,IAAI,CAAC,gBAAgB;AAChC,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;AACd,YAAA,OAAOC,gBAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AACzB,QAAA;AAED,QAAA,OAAOD,eAAE,CAAC,MAAM,CAAC,IAAI,CAAC;IACxB;AACD;;MC/BY,oBAAoB,CAAA;IAM/B,WAAA,CAAY,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,MAAM,GACY,EAAA;AAClB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;IAEO,QAAQ,CAAC,EACd,aAAa,GACM,EAAA;;AACnB,QAAA,MAAM,OAAO,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGQ,qBAAa,CAAC,wBAAwB,CAAC;AAEvE,QAAA,IACE,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;AACpC,YAAA,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;AAC/B,YAAA,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ;AACnC,YAAA,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ;AACnC,YAAA,CAAC,OAAO,EACR;AACA,YAAA,OAAOR,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;QAED,MAAM,KAAK,GACT,CAAA,EAAA,GAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,0CAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AAEpE,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;AAED,QAAA,OAAOA,eAAE,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC;IACjE;AACD;;MCzCY,4BAA4B,CAAA;IAGvC,WAAA,CAAY,EAAE,YAAY,EAAqB,EAAA;AAC7C,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;IAClC;AAEO,IAAA,QAAQ,CAAC,IAAwB,EAAA;QACtC,OAAOA,eAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACtC;AAEQ,IAAA,cAAc,CAAC,IAAwB,EAAA;;QAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;AACpD,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,eAAe,KAAI,EAAE,CAAC;AAEjF,QAAA,MAAM,uBAAuB,GAC3B,UAAU,CAAC,MAAM,KAAK,CAAC;YACvB,IAAI,CAAC,YAAY,KAAK,IAAI;YAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,SAAS;AAErD,QAAA,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC;AAC/C,QAAA,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAE3D,QAAQ,IAAI,CAAC,YAAY;YACvB,KAAK,YAAY,CAAC,UAAU;gBAC1B,OAAO,eAAe,IAAI,uBAAuB;YACnD,KAAK,YAAY,CAAC,eAAe;AAC/B,gBAAA,OAAO,qBAAqB;YAC9B,KAAK,YAAY,CAAC,GAAG;AACnB,gBAAA,OAAO,qBAAqB,KAAK,eAAe,IAAI,uBAAuB,CAAC;AAC9E,YAAA;AACE,gBAAA,OAAO,KAAK;AACf;IACH;AACD;;MCpCY,yBAAyB,CAAA;AAKpC,IAAA,WAAA,CAAY,EACV,kBAAkB,EAClB,SAAS,EACT,UAAU,GACQ,EAAA;AAClB,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE;AAClC,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,IAAI,EAAE;IACtC;AAEO,IAAA,QAAQ,CAAC,IAAwB,EAAA;QACtC,OAAOA,eAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACtC;AAEQ,IAAA,cAAc,CAAC,IAAwB,EAAA;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;QACvD,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,KAAK;AACb,QAAA;QAED,QAAQ,IAAI,CAAC,kBAAkB;YAC7B,KAAK,kBAAkB,CAAC,GAAG;AACzB,gBAAA,OAAO,IAAI;YACb,KAAK,kBAAkB,CAAC,KAAK;AAC3B,gBAAA,OAAO,SAAS,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;AACnD,YAAA;AACE,gBAAA,OAAO,KAAK;AACf;IACH;AACD;;MCjCY,8BAA8B,CAAA;IAGzC,WAAA,CAAY,EAAE,iBAAiB,EAAqB,EAAA;AAClD,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;IAC5C;AAEO,IAAA,QAAQ,CAAC,IAAwB,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,OAAOA,eAAE,CAAC,KAAK,CAAC;AACjB,QAAA;QAED,OAAOA,eAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACtC;AAEQ,IAAA,cAAc,CAAC,IAAwB,EAAA;;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,OAAO,KAAK;AACb,QAAA;QACD,MAAM,mBAAmB,GACvB,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAGQ,qBAAa,CAAC,eAAe,CAAC;AACrD,QAAA,OAAO,CAAA,mBAAmB,KAAA,IAAA,IAAnB,mBAAmB,KAAA,MAAA,GAAA,MAAA,GAAnB,mBAAmB,CAAG,IAAI,CAAC,iBAAiB,CAAC,MAAK,SAAS;IACpE;AACD;;MCGY,gBAAgB,CAAA;AAC3B,IAAA,eAAe,CACb,IAAuB,EAAA;AAEvB,QAAA,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI;AAE9B,QAAA,QAAQ,aAAa;YACnB,KAAK,aAAa,CAAC,YAAY;gBAC7B,OAAOR,eAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YACjC,KAAK,aAAa,CAAC,oBAAoB;gBACrC,OAAOA,eAAE,CAAC,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACnD,KAAK,aAAa,CAAC,iBAAiB;gBAClC,OAAOA,eAAE,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC;YAChD,KAAK,aAAa,CAAC,mBAAmB;gBACpC,OAAOA,eAAE,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACxC,KAAK,aAAa,CAAC,sBAAsB;gBACvC,OAAOA,eAAE,CAAC,IAAI,8BAA8B,CAAC,IAAI,CAAC,CAAC;YACrD,KAAK,aAAa,CAAC,WAAW;gBAC5B,OAAOA,eAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7B,KAAK,aAAa,CAAC,OAAO;gBACxB,OAAOA,eAAE,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9B,KAAK,aAAa,CAAC,QAAQ;gBACzB,OAAOA,eAAE,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9B,KAAK,aAAa,CAAC,UAAU;gBAC3B,OAAOA,eAAE,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;YAChC,KAAK,aAAa,CAAC,WAAW;gBAC5B,OAAOA,eAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YACjC,KAAK,aAAa,CAAC,YAAY;gBAC7B,OAAOA,eAAE,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;YAClC,KAAK,aAAa,CAAC,YAAY;gBAC7B,OAAOA,eAAE,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;YAClC,KAAK,aAAa,CAAC,MAAM;gBACvB,OAAOA,eAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7B,KAAK,aAAa,CAAC,gBAAgB;gBACjC,OAAOA,eAAE,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,aAAa,CAAC,WAAW;gBAC5B,OAAOA,eAAE,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC3C,KAAK,aAAa,CAAC,OAAO;gBACxB,OAAOA,eAAE,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9B,KAAK,aAAa,CAAC,mBAAmB;gBACpC,OAAOA,eAAE,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACzC,KAAK,aAAa,CAAC,aAAa;gBAC9B,OAAOA,eAAE,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;YACnC,KAAK,aAAa,CAAC,UAAU;gBAC3B,OAAOA,eAAE,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;YACnC,KAAK,aAAa,CAAC,UAAU;gBAC3B,OAAOA,eAAE,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;YAChC,KAAK,aAAa,CAAC,WAAW;gBAC5B,OAAOA,eAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YACjC,KAAK,aAAa,CAAC,eAAe;gBAChC,OAAOA,eAAE,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;YACpC,KAAK,aAAa,CAAC,MAAM;gBACvB,OAAOA,eAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7B,KAAK,aAAa,CAAC,YAAY;gBAC7B,OAAOA,eAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YACjC,KAAK,aAAa,CAAC,UAAU;gBAC3B,OAAOA,eAAE,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAC3C,YAAA;AACE,gBAAA,eAAe,CAAC,IAAI,CAAA,CAAA,2CAAA,EAA8C,aAAa,EAAE;AACjF,gBAAA,OAAOC,gBAAG,CACR,IAAI,cAAc,CAChBN,0BAAkB,CAAC,kBAAkB,EACrC,aAAa,CACd,CACF;AACJ;IACH;AACD;;AC7FD;;;AAGK;AACOwB;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,YAAA,CAAA,GAAA,qBAAkC;AAClC,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,wBAAwC;AACxC,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,uBAAsC;AACtC,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,wBAAwC;AACxC,IAAA,mBAAA,CAAA,aAAA,CAAA,GAAA,sBAAoC;AACpC,IAAA,mBAAA,CAAA,aAAA,CAAA,GAAA,sBAAoC;AACpC,IAAA,mBAAA,CAAA,UAAA,CAAA,GAAA,mBAA8B;AAC9B,IAAA,mBAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD;AACvD,IAAA,mBAAA,CAAA,wBAAA,CAAA,GAAA,iCAA0D;AAC1D,IAAA,mBAAA,CAAA,2BAAA,CAAA,GAAA,oCAAgE;AAClE,CAAC,EAXWA,2BAAmB,KAAnBA,2BAAmB,GAAA,EAAA,CAAA,CAAA;AAaxB,MAAM,4BAA4B,GAAmB;AAC1D,IAAA,IAAI,EAAE,+BAA+B;AACrC,IAAA,UAAU,EAAE,EAAE;CACf;AAED;AACA;MACa,cAAc,GAAG,EAAE,GAAGd,oBAAY,CAAC;;MCbnC,gBAAgB,CAAA;AAG3B,IAAA,WAAA,CAAY,GAAwB,EAAA;AAClC,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;IAChB;AAEO,IAAA,WAAW,CAAC,IAAqB,EAAA;QACtC,QAAQ,IAAI,CAAC,GAAG;YACd,KAAKc,2BAAmB,CAAC,UAAU;AACjC,gBAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAsB,CAAC;YAC9D,KAAKA,2BAAmB,CAAC,aAAa;AACpC,gBAAA,OAAO,IAAI,CAAC,2BAA2B,CAAC,IAAyB,CAAC;YACpE,KAAKA,2BAAmB,CAAC,QAAQ;AAC/B,gBAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAoB,CAAC;YAC1D,KAAKA,2BAAmB,CAAC,aAAa;AACpC,gBAAA,OAAO,IAAI,CAAC,2BAA2B,CAAC,IAAyB,CAAC;YACpE,KAAKA,2BAAmB,CAAC,YAAY;AACnC,gBAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAwB,CAAC;AAClE,YAAA;AACE,gBAAA,OAAO,IAAI;AACd;IACH;IAEO,cAAc,GAAA;QACnB,QAAQ,IAAI,CAAC,GAAG;YACd,KAAKA,2BAAmB,CAAC,UAAU;AACjC,gBAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE;YACpC,KAAKA,2BAAmB,CAAC,QAAQ;AAC/B,gBAAA,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE;YACrE,KAAKA,2BAAmB,CAAC,YAAY;AACnC,gBAAA,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE;YAClC,KAAKA,2BAAmB,CAAC,aAAa;YACtC,KAAKA,2BAAmB,CAAC,aAAa;YACtC,KAAKA,2BAAmB,CAAC,WAAW;AAClC,gBAAA,OAAO,EAAE;YACX,KAAKA,2BAAmB,CAAC,WAAW;AAClC,gBAAA,OAAO,EAAE;YACX,KAAKA,2BAAmB,CAAC,yBAAyB;AAChD,gBAAA,OAAO,EAAE;YACX,KAAKA,2BAAmB,CAAC,yBAAyB;AAChD,gBAAA,OAAO,EAAE;YACX,KAAKA,2BAAmB,CAAC,sBAAsB;AAC7C,gBAAA,OAAO,EAAE;AACX,YAAA;AACE,gBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;AACzB;IACH;AAEQ,IAAA,0BAA0B,CAAC,IAAsB,EAAA;QACvD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,mBAAmB,CAAC,CAAC;IACpD;AAEQ,IAAA,sBAAsB,CAAC,IAAkB,EAAA;AAC/C,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAC9D;AAEQ,IAAA,2BAA2B,CAAC,IAAuB,EAAA;QACzD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AAEtC,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACtB,YAAA,OAAO,IAAI;AACZ,QAAA;AAED,QAAA,MAAM,gBAAgB,GAAG,CAAC,GAA4B,KACpD,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;AAErE,QAAA,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YAClC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;AAC5C,gBAAA,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;AAC3B,oBAAA,OAAO,KAAK;AACb,gBAAA;AACF,YAAA;AACF,QAAA;AAED,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,wBAAwB,CAAC,IAAoB,EAAA;AACnD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACxE;AAEQ,IAAA,2BAA2B,CAAC,IAAuB,EAAA;QACzD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AAEzC,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;AACzB,YAAA,OAAO,IAAI;AACZ,QAAA;AAED,QAAA,KAAK,MAAM,WAAW,IAAI,aAAa,EAAE;;;AAGvC,YAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;gBACnC;AACD,YAAA;AAED,YAAA,MAAM,gBAAgB,GAAG,CAAC,GAA4B,KACpD,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAChC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;AAExC,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACrD,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,oBAAA,OAAO,KAAK;AACb,gBAAA;AAED,gBAAA,QAAQ,GAAG;oBACT,KAAKX,qBAAa,CAAC,QAAQ;oBAC3B,KAAKA,qBAAa,CAAC,UAAU;oBAC7B,KAAKA,qBAAa,CAAC,eAAe;oBAClC,KAAKA,qBAAa,CAAC,eAAe;AAClC,oBAAA,KAAKA,qBAAa,CAAC,UAAU,EAAE;wBAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAChD,gBAAgB,CAAC,GAA8B,CAAC,CACjD;AAED,wBAAA,IAAI,YAAY,EAAE;AAChB,4BAAA,OAAO,KAAK;AACb,wBAAA;wBAED;AACD,oBAAA;AACD,oBAAA,SAAS;AACP,wBAAA,IAAI,gBAAgB,CAAC,IAA+B,CAAC,EAAE;AACrD,4BAAA,OAAO,KAAK;AACb,wBAAA;AACF,oBAAA;AACF;AACF,YAAA;AACF,QAAA;AAED,QAAA,OAAO,IAAI;IACb;IAEQ,oBAAoB,GAAA;QAC1B,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,4BAA4B,CAAA,EAAA,EAC/B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAA,CAAA;IAErC;IAEQ,SAAS,CAAC,GAA4B,EAAE,MAAgB,EAAA;QAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAE7B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClC,YAAA,OAAO,KAAK;AACb,QAAA;AAED,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD;AACD;;AChKD;AACA;MACa,WAAW,CAAA;IAItB,WAAA,CACE,eAAiC,EACjC,UAA+B,EAAA;AAE/B,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAE5B,QAAA,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,UAAU,CAAC;AAEzD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;AAE1B,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;YACd,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,KAAKb,0BAAkB,CAAC,YAAY,EAAE;AACzD,gBAAA,MAAM,WAAW,GAAG,gBAAgB,CAAC,cAAc,EAAE;AACrD,gBAAA,IAAI,CAAC,KAAK,CAAC,WAAgB,CAAC;AAC7B,YAAA;YAED;AACD,QAAA;AAED,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;AAExB,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;AACvC,YAAA,MAAM,WAAW,GAAG,gBAAgB,CAAC,cAAc,EAAE;AACrD,YAAA,IAAI,CAAC,KAAK,CAAC,WAAgB,CAAC;AAC7B,QAAA;IACH;IAEO,IAAI,GAAA;QACT,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;YAEzD,IAAI,MAAM,KAAK,IAAI,EAAE;gBACnB,OAAOM,gBAAG,CAAC,IAAI,cAAc,CAACN,0BAAkB,CAAC,YAAY,CAAC,CAAC;AAChE,YAAA;;;AAID,YAAA,OAAOK,eAAE,CAAC,MAAW,CAAC;AACvB,QAAA;AAAC,QAAA,OAAO,CAAC,EAAE;YACV,eAAe,CAAC,KAAK,CAAA,CAAA,kCAAA,EAAqC,IAAI,CAAC,UAAU,EAAE;AAC3E,YAAA,OAAOC,gBAAG,CACR,IAAI,cAAc,CAACN,0BAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CACpE;AACF,QAAA;IACH;AAEO,IAAA,KAAK,CAAC,IAAO,EAAA;QAClB,IAAI;YACF,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;YAEjD,OAAOK,eAAE,EAAE;AACZ,QAAA;AAAC,QAAA,OAAO,CAAC,EAAE;YACV,eAAe,CAAC,KAAK,CAAA,CAAA,iCAAA,EAAoC,IAAI,CAAC,UAAU,EAAE;AAC1E,YAAA,OAAOC,gBAAG,CACR,IAAI,cAAc,CAACN,0BAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CACrE;AACF,QAAA;IACH;AAEO,IAAA,MAAM,CAAC,IAAgB,EAAA;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;AAE1B,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;YACd,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,KAAKA,0BAAkB,CAAC,YAAY,EAAE;AACzD,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAS,CAAC;AAC7B,YAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,MAAM;AACd,YAAA;AACF,QAAA;AAED,QAAA,MAAM,YAAY,GAA2B,MAAM,CAAC,IAAI;AAExD,QAAA,IAAI,OAAU;AAEd,QAAA,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;YACpC,OAAO,GAAG,IAAS;AACpB,QAAA;AAAM,aAAA;AACL,YAAA,OAAO,GAAG,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,YAAY,CAAA,EAAK,IAAI,CAAO;AAC5C,QAAA;AAED,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5B;AACD;;MCnFY,qBAAqB,CAAA;IAIhC,WAAA,CAAY,eAAoC,EAAE,eAAuB,EAAA;AACvE,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;QAEtC,IAAI,eAAe,GAAG,CAAC,EAAE;YACvB,IAAI,CAAC,mBAAmB,EAAE;AAC3B,QAAA;IACH;IAEQ,mBAAmB,GAAA;QACzB,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAACwB,2BAAmB,CAAC,EAAE;YAC3D,IAAI,eAAe,GAA0B,IAAI;YACjD,IAAI;AACF,gBAAA,QAAQ,UAAU;oBAChB,KAAKA,2BAAmB,CAAC,sBAAsB;oBAC/C,KAAKA,2BAAmB,CAAC,yBAAyB;oBAClD,KAAKA,2BAAmB,CAAC,aAAa;oBACtC,KAAKA,2BAAmB,CAAC,WAAW;wBAClC,eAAe,CAAC,IAAI,CAAA,CAAA,qBAAA,EAAwB,UAAU,kBAAkB,IAAI,CAAC,eAAe,CAAA,CAAE;AAC9F,wBAAA,eAAe,GAAG,WAAW,CAC3B,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAClC,IAAI,CAAC,eAAe,CACrB;wBACD;oBACF,KAAKA,2BAAmB,CAAC,UAAU;oBACnC,KAAKA,2BAAmB,CAAC,aAAa;oBACtC,KAAKA,2BAAmB,CAAC,YAAY;oBACrC,KAAKA,2BAAmB,CAAC,WAAW;oBACpC,KAAKA,2BAAmB,CAAC,QAAQ;oBACjC,KAAKA,2BAAmB,CAAC,yBAAyB;wBAChD;AACF,oBAAA;;wBAEE,MAAM,eAAe,GAAU,UAAU;AACzC,wBAAA,eAAe,CAAC,KAAK,CAAA,CAAA,qBAAA,EAAwB,UAAU,2BAA2B;AACrF;AACF,YAAA;AAAC,YAAA,OAAO,KAAK,EAAE;AACd,gBAAA,IAAI,eAAe,EAAE;oBACnB,aAAa,CAAC,eAAe,CAAC;AAC/B,gBAAA;gBACD,eAAe,CAAC,KAAK,CAAA,CAAA,iCAAA,EAAoC,UAAU,kBAAkB,IAAI,CAAC,eAAe,CAAA,CAAE;AAC5G,YAAA;AACF,QAAA;IACH;AAEO,IAAA,WAAW,CAAC,UAA+B,EAAA;QAChD,MAAM,UAAU,GAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;QAE7D,IAAI,CAAC,UAAU,EAAE;YACf;AACD,QAAA;AACD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE;AAE9B,QAAA,QAAQ,UAAU;YAChB,KAAKA,2BAAmB,CAAC,aAAa;AACpC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,WAAW,CAAC;gBAClD;YACF,KAAKA,2BAAmB,CAAC,sBAAsB;AAC7C,gBAAA,IAAI,CAAC,iCAAiC,CAAC,UAAU,EAAE,WAAW,CAAC;gBAC/D;YACF,KAAKA,2BAAmB,CAAC,yBAAyB;AAChD,gBAAA,IAAI,CAAC,oCAAoC,CAAC,UAAU,EAAE,WAAW,CAAC;gBAClE;YACF,KAAKA,2BAAmB,CAAC,WAAW;AAClC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,WAAW,CAAC;gBAChD;YACF,KAAKA,2BAAmB,CAAC,UAAU;YACnC,KAAKA,2BAAmB,CAAC,aAAa;YACtC,KAAKA,2BAAmB,CAAC,YAAY;YACrC,KAAKA,2BAAmB,CAAC,WAAW;YACpC,KAAKA,2BAAmB,CAAC,QAAQ;YACjC,KAAKA,2BAAmB,CAAC,yBAAyB;gBAChD;AACF,YAAA;AAGE,gBAAA,eAAe,CAAC,KAAK,CAAA,CAAA,qBAAA,EAAwB,UAAU,mBAAmB;AAC7E;QAED,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC;IACpD;IAEQ,kBAAkB,CACxB,WAAmC,EACnC,WAAmB,EAAA;AAEnB,QAAA,KAAK,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;;AAEhE,YAAA,IAAI,OAAO,OAAO,KAAK,SAAS,EAAE;gBAChC,WAAW,CAAC,WAAW,CAAC,GAAG;oBACzB,OAAO;AACP,oBAAA,cAAc,EAAE,WAAW,GAAG,IAAI,CAAC,eAAe;iBAInD;gBACD;AACD,YAAA;YACD,MAAM,KAAK,GAAG,OAGb;AACD,YAAA,IAAI,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ,EAAE;AAC5C,gBAAA,IAAI,KAAK,CAAC,cAAc,GAAG,WAAW,EAAE;AACtC,oBAAA,OAAO,WAAW,CAAC,WAAW,CAAC;AAChC,gBAAA;AACF,YAAA;AAAM,iBAAA;gBACL,KAAK,CAAC,cAAc,GAAG,WAAW,GAAG,IAAI,CAAC,eAAe;AAC1D,YAAA;AACF,QAAA;IACH;IAEQ,oBAAoB,CAC1B,aAAgC,EAChC,WAAmB,EAAA;AAEnB,QAAA,KAAK,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAAC,IAAI,MAAM,CAAC,OAAO,CAC3D,aAAa,CACd,EAAE;AACD,YAAA,IAAI,CAAC,mBAAmB,CACtB,iBAEC,EACD,WAAW,CACZ;AAED,YAAA,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACxD,gBAAA,OAAO,aAAa,CAAC,WAAW,CAAC;AAClC,YAAA;AACF,QAAA;IACH;IAEQ,iCAAiC,CACvC,0BAA0D,EAC1D,WAAmB,EAAA;AAEnB,QAAA,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CACnD,0BAA0B,CAC3B,EAAE;AACD,YAAA,KAAK,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACjE,gBAAA,IAAI,CAAC,mBAAmB,CACtB,QAIC,EACD,WAAW,CACZ;AAED,gBAAA,IACE,MAAM,CAAC,IAAI,CACT,0BAA0B,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAC3D,CAAC,MAAM,KAAK,CAAC,EACd;oBACA,OAAO,0BAA0B,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;AAClE,gBAAA;AACF,YAAA;AACF,QAAA;IACH;IAEQ,oCAAoC,CAC1C,6BAAgE,EAChE,WAAmB,EAAA;AAEnB,QAAA,KAAK,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CACrD,6BAA6B,CAC9B,EAAE;AACD,YAAA,IAAI,CAAC,mBAAmB,CACtB,WAIC,EACD,WAAW,CACZ;AAED,YAAA,IACE,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EACpE;AACA,gBAAA,OAAO,6BAA6B,CAAC,WAAW,CAAC;AAClD,YAAA;AACF,QAAA;IACH;IAEQ,mBAAmB,CACzB,GAEC,EACD,WAAmB,EAAA;AAEnB,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC9C,YAAA,IAAI,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ,EAAE;AAC5C,gBAAA,IAAI,KAAK,CAAC,cAAc,GAAG,WAAW,EAAE;AACtC,oBAAA,OAAO,GAAG,CAAC,GAAG,CAAC;AAChB,gBAAA;AACF,YAAA;AAAM,iBAAA;gBACL,KAAK,CAAC,cAAc,GAAG,WAAW,GAAG,IAAI,CAAC,eAAe;AAC1D,YAAA;AACF,QAAA;IACH;AACD;;AC1HWC;AAAZ,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,YAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,YAAA,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACT,IAAA,YAAA,CAAA,YAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY;AACd,CAAC,EAJWA,oBAAY,KAAZA,oBAAY,GAAA,EAAA,CAAA,CAAA;;MCvFX,eAAe,CAAA;AAK1B,IAAA,WAAA,CAAY,EAAU,EAAA;AACpB,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE;AACZ,QAAA,IAAI,CAAC,MAAM,GAAGhB,sBAAc,CAAC,MAAM;IACrC;AAEA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,YAAY,CAAC,gBAAgB,GAAG,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;IAClE;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAEI,qBAAa,CAAC,eAAe;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB;IACH;IAEO,OAAO,QAAQ,CAAC,IAA6B,EAAA;AAClD,QAAA,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI;AAE3B,QAAA,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC;AAC/C,QAAA,eAAe,CAAC,MAAM,GAAG,MAAM;AAE/B,QAAA,OAAO,eAAe;IACxB;AACD;;MC0BY,WAAW,CAAA;IAYtB,WAAA,CAAY,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,WAAW,GACe,EAAA;AAblB,QAAA,IAAA,CAAA,cAAc,GAAsB,IAAI,GAAG,EAAE;QAC7C,IAAA,CAAA,gCAAgC,GAAkB,IAAI;AACtD,QAAA,IAAA,CAAA,2BAA2B,GAAgB,IAAI,GAAG,EAAE;AACpD,QAAA,IAAA,CAAA,sBAAsB,GAAgB,IAAI,GAAG,EAAE;AAC/C,QAAA,IAAA,CAAA,qBAAqB,GAAwB,IAAI,GAAG,EAAE;QACtD,IAAA,CAAA,iBAAiB,GAA0B,IAAI;AASvD,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,iEAAA,EAAoE,eAAe,GAAG;AAC3G,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;QAC9B,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,eAAe,EAAE,WAAW,CAAC;AACpE,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAE9B,QAAA,IAAI,eAAe,EAAE;YACnB,MAAM,eAAe,GAAG,MAAK;gBAC3B,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,CAAC;;;;YAKD,IAAI;gBACF,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,eAAe,EAAE,eAAe,CAAC;AACvE,YAAA;AAAC,YAAA,OAAO,GAAG,EAAE;gBACZ,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,oBAAA,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACtC,gBAAA;AACD,gBAAA,eAAe,CAAC,KAAK,CAAA,CAAA,gCAAA,EAAmC,eAAe,EAAE;AACzE,gBAAA,MAAM,GAAG;AACV,YAAA;AACF,QAAA;AACD,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,mEAAA,EAAsE,eAAe,GAAG;IAC/G;AAEO,IAAA,aAAa,CAClB,WAAmB,EAAA;QAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AAE1C,QAAA,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;AAClB,YAAA,OAAO,EAAE;AACV,QAAA;AAED,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;QAEtD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE;AACvD,YAAA,OAAO,EAAE;AACV,QAAA;QAED,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;QACvD,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE;QAExD,MAAM,MAAM,GAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AAC1D,YAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;;;;gBAI/B,IAAI,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,WAAW,EAAE;AAChE,oBAAA,OAAO,IAAI;AACZ,gBAAA;AACF,YAAA;AAED,YAAA,OAAO,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,KAAKJ,sBAAc,CAAC,MAAM;AACzE,QAAA,CAAC;AAED,QAAA,IAAI,WAAW,EAAE;YACf,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc;AACpD,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC;AACjC,QAAA;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC;IACnD;AAEO,IAAA,cAAc,CAAC,WAAmB,EAAA;QACvC,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;QAEtD,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,EAAE;AACV,QAAA;AAED,QAAA,MAAM,MAAM,GAAmB,CAAC,EAAE,MAAM,EAAE,KACxC,MAAM,KAAKA,sBAAc,CAAC,OAAO;QAEnC,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC;IACnD;IAEQ,cAAc,CACpB,aAAuC,EACvC,MAAsB,EAAA;QAEtB,MAAM,UAAU,GAAwB,EAAE;AAE1C,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;YACvD,IAAI,CAAC,IAAI,EAAE;gBACT;AACD,YAAA;AAED,YAAA,QAAQ,GAAG;AACT,gBAAA,KAAKI,qBAAa,CAAC,UAAU,EAAE;oBAC7B,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;wBAC5C,IAAI,CAAC,UAAU,EAAE;4BACf;AACD,wBAAA;AAED,wBAAA,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU;AAEpC,wBAAA,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE;4BAC3C,MAAM,cAAc,GAAGK,YAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;AACtD,4BAAA,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;AAChC,wBAAA;AACF,oBAAA;oBAED;AACD,gBAAA;AACD,gBAAA,KAAKL,qBAAa,CAAC,UAAU,EAAE;oBAC7B,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;wBAC5C,IAAI,CAAC,UAAU,EAAE;4BACf;AACD,wBAAA;AAED,wBAAA,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE;4BAC9C,MAAM,cAAc,GAAGS,YAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;AACtD,4BAAA,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;AAChC,wBAAA;AACF,oBAAA;oBAED;AACD,gBAAA;AACD,gBAAA,KAAKT,qBAAa,CAAC,QAAQ,EAAE;oBAC3B,MAAM,YAAY,GAAG,IAA2C;oBAEhE,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;AAClD,wBAAA,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE;4BAC5C,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAChD,4BAAA,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AAC9B,wBAAA;AACF,oBAAA;oBAED;AACD,gBAAA;AACD,gBAAA,KAAKA,qBAAa,CAAC,eAAe,EAAE;oBAClC,MAAM,mBAAmB,GAAG,IAE3B;oBAED,KAAK,MAAM,eAAe,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE;AAChE,wBAAA,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE;4BACnD,MAAM,mBAAmB,GACvB,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC;AAC3C,4BAAA,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC;AACrC,wBAAA;AACF,oBAAA;oBAED;AACD,gBAAA;AACD,gBAAA,KAAKA,qBAAa,CAAC,eAAe,EAAE;oBAClC,MAAM,eAAe,GAAG,IAA2B;oBAEnD,IAAI,CAAC,IAAI,EAAE;wBACT;AACD,oBAAA;AAED,oBAAA,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE;wBACnD,MAAM,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC;AACjE,wBAAA,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC;AACjC,oBAAA;oBAED;AACD,gBAAA;AACD,gBAAA,KAAKA,qBAAa,CAAC,OAAO,EAAE;oBAC1B,MAAM,WAAW,GAAG,IAAuB;AAE3C,oBAAA,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE;wBAC/C,MAAM,WAAW,GAAGM,SAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;AACjD,wBAAA,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAC7B,oBAAA;oBAED;AACD,gBAAA;AACD,gBAAA,KAAKN,qBAAa,CAAC,MAAM,EAAE;oBACzB,MAAM,UAAU,GAAG,IAAsB;AAEzC,oBAAA,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE;wBAC9C,MAAM,UAAU,GAAGO,QAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;AAC9C,wBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;AAC5B,oBAAA;oBAED;AACD,gBAAA;AACD,gBAAA,KAAKP,qBAAa,CAAC,eAAe,EAAE;oBAClC,MAAM,MAAM,GAAG,IAA+B;AAE9C,oBAAA,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE;wBAC1C,MAAM,MAAM,GAAGQ,iBAAe,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC/C,wBAAA,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;AACxB,oBAAA;AACF,gBAAA;AACF;AACF,QAAA;AAED,QAAA,OAAO,UAAU;IACnB;AAEO,IAAA,gBAAgB,CAAC,IAAsB,EAAA;AAC5C,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC;QAE3B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AAE1C,QAAA,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;YAClB;AACD,QAAA;AAED,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU;AAE7C,QAAA,KAAK,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC/D,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;gBAC5B;AACD,YAAA;YAED,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAEvD,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAI;gBACjC,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACjC,oBAAA,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,gBAAA;AACH,YAAA,CAAC,CAAC;YAEF,MAAM,uBAAuB,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAI;AAC9D,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAKR,qBAAa,CAAC,UAAU,EAAE;AAC1C,oBAAA,OAAO,KAAK;AACb,gBAAA;AAED,gBAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAsB;gBAExC,QACE,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3C,oBAAA,IAAI,CAAC,gCAAgC,KAAK,KAAK;AAEnD,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,uBAAuB,EAAE;AAC3B,gBAAA,cAAc,CAAC,GAAG,CAACA,qBAAa,CAAC,UAAU,CAAC;AAC7C,YAAA;YAED,UAAU,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;AAEpD,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE;AACnC,gBAAA,OAAO,UAAU,CAAC,WAAW,CAAC;AAC/B,YAAA;AACF,QAAA;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;IACzC;AAUO,IAAA,SAAS,CACd,cAAyC,EACzC,GAAG,eAAgD,EAAA;QAEnD,eAAe,CAAC,KAAK,CAAA,CAAA,yCAAA,EAA4C,cAAc,CAAA,QAAA,EAAW,eAAe,GAAG;QAC5G,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AAE1C,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;AACd,YAAA,OAAO,MAAM;AACd,QAAA;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;AAClB,YAAA,OAAO,UAAU;AAClB,QAAA;AAED,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI;AACjC,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI;AAEhC,QAAA,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;YACtC,IAAI,CAAC,sBAAsB,CAAC;gBAC1B,QAAQ;gBACR,aAAa;AACb,gBAAA,WAAW,EAAE,cAAc;AAC3B,gBAAA,aAAa,EAAE,eAAsC;AACrD,gBAAA,SAAS,EAAE,IAAI;AAChB,aAAA,CAAC;AACH,QAAA;AAAM,aAAA;AACL,YAAA,KAAK,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CACvD,cAAc,CACf,EAAE;gBACD,MAAM,SAAS,GACb,OAAO,eAAe,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;gBACrE,IAAI,CAAC,sBAAsB,CAAC;oBAC1B,QAAQ;oBACR,aAAa;oBACb,WAAW;oBACX,aAAa;oBACb,SAAS;AACV,iBAAA,CAAC;AACH,YAAA;AACF,QAAA;QAED,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAEvC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC;QACzD,eAAe,CAAC,KAAK,CAAA,CAAA,2CAAA,EAA8C,cAAc,WAAW,eAAe,CAAA,mBAAA,EAAsB,WAAW,CAAA,CAAA,CAAG;AAC/I,QAAA,OAAO,WAAW;IACpB;AAEO,IAAA,OAAO,CAAC,OAAoB,EAAA;QACjC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACvC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAE;AAC5C,QAAA;AAED,QAAA,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,aAAa,CAAC;AAElD,QAAA,OAAO,aAAa;IACtB;IAEO,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;IAC7B;AAEO,IAAA,sBAAsB,CAC3B,QAA2B,EAAA;AAE3B,QAAA,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE;AAC1C,YAAA,OAAO,KAAK;AACb,QAAA;AAED,QAAA,IAAI,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;AACpC,YAAA,OAAO,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACjE,QAAA;AAED,QAAA,OAAO,KAAK;IACd;AAEO,IAAA,kBAAkB,CAAC,WAAmB,EAAA;;QAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;AACtD,QAAA,MAAM,gBAAgB,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAGA,qBAAa,CAAC,gBAAgB,CAAC;QAExE,OAAO,CAAA,EAAA,GAAA,gBAAgB,KAAA,IAAA,IAAhB,gBAAgB,KAAA,MAAA,GAAA,MAAA,GAAhB,gBAAgB,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK;IACzC;AAEO,IAAA,oBAAoB,CAAC,WAAmB,EAAA;;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AAE1C,QAAA,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;AAClB,YAAA,OAAO,WAAW;AACnB,QAAA;AAED,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI;QAEhC,CAAA,EAAA,GAAA,QAAQ,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,IAA3B,QAAQ,CAAC,kBAAkB,GAAK,EAAE,CAAA;AAElC,QAAA,QACE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,kBAAkB,CAAC,WAAW,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,WAAW;IAE9E;AAEO,IAAA,oBAAoB,CACzB,WAAmB,EAAA;QAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AAC1C,QAAA,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;AAClB,YAAA,OAAO,SAAS;AACjB,QAAA;AACD,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI;QAChC,IAAI,QAAQ,CAAC,kBAAkB,EAAE;AAC/B,YAAA,OAAO,QAAQ,CAAC,kBAAkB,CAAC,WAAW,CAAC;AAChD,QAAA;AACD,QAAA,OAAO,SAAS;IAClB;IAEO,oBAAoB,CACzB,WAAmB,EACnB,iBAAwC,EAAA;;QAExC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AAE1C,QAAA,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;YAClB;AACD,QAAA;AAED,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI;QAEhC,CAAA,EAAA,GAAA,QAAQ,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,IAA3B,QAAQ,CAAC,kBAAkB,GAAK,EAAE,CAAA;QAElC,MAAM,wBAAwB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,WAAW,CAAC;AACzE,QAAA,IACE,CAAC,wBAAwB;AACzB,YAAA,wBAAwB,CAAC,SAAS,GAAG,iBAAiB,CAAC,SAAS,EAChE;AACA,YAAA,QAAQ,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG,iBAAiB;AAC5D,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC;AACjC,QAAA;IACH;AAEO,IAAA,cAAc,CACnB,WAAmB,EAAA;QAEnB,IAAI,CAAC,WAAW,EAAE;QAElB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AAE3C,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE;AACnB,YAAA,OAAO,SAAS;AACjB,QAAA;QAED,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,GACzC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC;AAEnE,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;YACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;YAExC,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBACnD,OAAO,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC;AACrD,YAAA;AACD,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC;YACxB,gBAAgB,GAAG,WAAW;AAC/B,QAAA;AAED,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B;AAEO,IAAA,yBAAyB,CAAC,WAAmB,EAAA;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;QAEtD,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO,IAAI,GAAG,EAAE;AACjB,QAAA;QAED,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAoB,CAAC;IAC/D;AAEO,IAAA,gBAAgB,CAAC,WAAmB,EAAA;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AAE3C,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE;AACnB,YAAA,OAAO,IAAI;AACZ,QAAA;QAED,IAAI,OAAO,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE;AACrD,YAAA,OAAO,WAAW,CAAC,IAAI,CAAC,WAAW,CAAW;AAC/C,QAAA;AAED,QAAA,IAAI,IAAI,CAAC,gCAAgC,KAAK,IAAI,EAAE;AAClD,YAAA,OAAO,IAAI;AACZ,QAAA;QAED,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAClC,WAAW,CACgB;QAE7B,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,IAAI;AACZ,QAAA;QAED,MAAM,UAAU,GAAG,WAAW,CAACA,qBAAa,CAAC,UAAU,CAAC;QAExD,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,CAAC,gCAAgC,CAAC,EAAE;YACnE,OACE,UAAU,CAAC,IAAI,CAAC,gCAAgC,CACjD,CAAC,KAAK,CAAC,CAAC,CAAC;AACX,QAAA;AAED,QAAA,OAAO,IAAI;IACb;IAEQ,sBAAsB,CAAC,EAC7B,QAAQ,EACR,WAAW,EACX,aAAa,EACb,aAAa,EACb,SAAS,GAC4B,EAAA;;AACrC,QAAA,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE;;YAEpC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAKA,qBAAa,CAAC,UAAU,EAAE;AACnD,gBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;oBAC/C,QAAQ;AACR,oBAAA,UAAU,EAAE,QAAsB;AAClC,oBAAA,OAAO,EAAE,aAAa;oBACtB,WAAW;AACZ,iBAAA,CAAC;gBACF,IAAI,CAAC,iBAAiB,EAAE;oBACtB;AACD,gBAAA;AACF,YAAA;;YAGD,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAKA,qBAAa,CAAC,UAAU,EAAE;gBACnD,MAAM,UAAU,GAAG,QAAsB;AACzC,gBAAA,IAAI,CAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,UAAU,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,IAAI,CAAC,EAAE;oBAC3C,UAAU,CAAC,SAAS,GAAG,CAAA,EAAA,GAAA,UAAU,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,CAAC,CAAC,IAAI,KACvD,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CACvC;AACF,gBAAA;AACF,YAAA;AAED,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;gBACtD,QAAQ;gBACR,WAAW;AACX,gBAAA,OAAO,EAAE,aAAa;gBACtB,QAAQ;gBACR,SAAS;AACV,aAAA,CAAC;AAEF,YAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,eAAe;AAE5C,YAAA,IACE,CAAC,WAAW;iBACX,WAAW,IAAI,cAAc,IAAI,cAAc,GAAG,WAAW,CAAC,EAC/D;AACA,gBAAA,QAAQ,CAAC,eAAe,GAAG,cAAc;AAC1C,YAAA;YAED,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAKJ,sBAAc,CAAC,MAAM,EAAE;AAClD,gBAAA,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC;AAClC,oBAAA,OAAO,EAAE,QAAQ;oBACjB,WAAW;AACX,oBAAA,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;AAC7B,iBAAA,CAAC;AACH,YAAA;AACF,QAAA;IACH;IAEQ,WAAW,GAAA;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QAE1C,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;YAChC;AACD,QAAA;AAED,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;AACxB,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI;AAEhC,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,eAAe;QAE5C,IAAI,WAAW,IAAI,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;AAC3C,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC;AAEzE,YAAA,QAAQ,CAAC,eAAe,GAAG,eAAe,IAAI,SAAS;AAEvD,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC;AAChC,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;AAC7B,QAAA;IACH;IAEQ,iBAAiB,CAAC,EACxB,QAAQ,EACR,OAAO,EACP,UAAU,EACV,WAAW,GAC4B,EAAA;;AACvC,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU;AAE3B,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAEtE,QAAA,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,EAAE;AACjD,YAAA,OAAO,KAAK;AACb,QAAA;AACD,QAAA,IAAI,IAAI,CAAC,KAAK,IAAIS,YAAU,CAAC,eAAe,EAAE;AAC5C,YAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK;AAC9B,QAAA;QAED,IAAI,IAAI,CAAC,gCAAgC,KAAK,IAAI,CAAC,KAAK,IAAI,WAAW,EAAE;AACvE,YAAA,UAAU,CAAC,oBAAoB,GAAG,IAAI;YAEtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5B,IAAI,WAAW,KAAK,MAAM,EAAE;gBAC1B,eAAe,CAAC,IAAI,CAAA,CAAA,yBAAA,EAA4B,WAAW,CAAA,WAAA,EAAc,MAAM,EAAE;;;AAGjF,gBAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;oBACjC,QAAQ;oBACR,OAAO;oBACP,WAAW;AACX,oBAAA,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,iBAAA,CAAC;gBAEF,CAAA,EAAA,GAAA,QAAQ,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,IAA3B,QAAQ,CAAC,kBAAkB,GAAK,EAAE,CAAA;AAElC,gBAAA,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG;AACpC,oBAAA,iBAAiB,EAAE,WAAW;AAC9B,oBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB;AACF,YAAA;AACF,QAAA;QAED,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC/C,YAAA,UAAU,CAAC,MAAM,GAAGT,sBAAc,CAAC,IAAI;AACxC,QAAA;AACD,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,2BAA2B,CAAC,UAAsB,EAAA;AACxD,QAAA,IAAI,UAAU,CAAC,KAAK,KAAKS,YAAU,CAAC,eAAe;AAAE,YAAA,OAAO,IAAI;QAChE,IAAI,CAAC,UAAU,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK;AAElC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QAC/D,IAAI,OAAO,IAAI,IAAI;AAAE,YAAA,OAAO,KAAK;AAEjC,QAAA,UAAU,CAAC,KAAK,GAAG,OAAO;AAC1B,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,kBAAkB,GAAA;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AAE1C,QAAA,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;AAClB,YAAA,OAAO,EAAE;AACV,QAAA;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;IAChD;AAEA,IAAA,IAAI,yBAAyB,GAAA;QAC3B,OAAO,IAAI,CAAC,gCAAgC;IAC9C;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,cAAc;IAC5B;AAEA,IAAA,IAAI,uBAAuB,GAAA;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AAEtC,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;YACd,OAAO,IAAI,GAAG,EAAE;AACjB,QAAA;AAED,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI;QAEjC,IAAI,EAAEL,qBAAa,CAAC,UAAU,IAAI,aAAa,CAAC,EAAE;YAChD,OAAO,IAAI,GAAG,EAAE;AACjB,QAAA;AAED,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AAEjC,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAACA,qBAAa,CAAC,UAAU,CAAC,CAAC,EAAE;YACxE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3B,QAAA;AAED,QAAA,OAAO,OAAO;IAChB;IAEA,IAAI,iBAAiB,CAAC,UAAyC,EAAA;;QAC7D,MAAM,CAAC,0BAA0B,EAAE,2BAA2B,CAAC,GAE3D,CAAC,EAAE,EAAE,EAAE,CAAC;AACZ,QAAA,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAkB;AAEvD,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;YAChC,IAAI,UAAU,CAAC,SAAS,EAAE;AACxB,gBAAA,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAClD,YAAA;AAED,YAAA,IAAI,UAAU,CAAC,KAAK,KAAKF,uBAAe,CAAC,OAAO,EAAE;AAChD,gBAAA,2BAA2B,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACnD,YAAA;YAED,IAAI,UAAU,CAAC,IAAI,EAAE;gBACnB,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC;AAC7D,YAAA;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,gCAAgC;AACnC,YAAA,CAAA,CAAA,EAAA,GAAA,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,mBAAmB,CAAC,0CAAE,KAAK;AACtE,gBAAA,IAAI;QAEN,IAAI,CAAC,sBAAsB,GAAG,IAAI,GAAG,CAAC,0BAA0B,CAAC;QACjE,IAAI,CAAC,2BAA2B,GAAG,IAAI,GAAG,CAAC,2BAA2B,CAAC;AACvE,QAAA,IAAI,CAAC,qBAAqB,GAAG,qBAAqB;IACpD;AAEO,IAAA,wBAAwB,CAAC,IAAY,EAAA;QAC1C,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7C;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzvBA,CAAC,UAAU,IAAI,EAAE,OAAO,EAAE;AAC3B,GAAkC;AAClC;AACA,IAAE,MAAA,CAAA,OAAA,GAA2B,OAAO,EAAE;AACtC,GAAA;EASA,CAAC,CAACe,IAAI,EAAE,YAAY;;AAEpB;;AAEA;AACA;AACA;GACC,IAAI,QAAQ,GAAG,QAAQ,KAAK,UAAU,IAAI,EAAEC,WAAS,EAAE;;AAExD,OAAK,IAAI,MAAM;;AAEf;OACK,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE;AACzD,WAAS,MAAM,GAAG,MAAM,CAAC,MAAM;AAC/B,OAAA;;AAEA;OACK,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE;AACrD,WAAS,MAAM,GAAG,IAAI,CAAC,MAAM;AAC7B,OAAA;;AAEA;OACK,IAAI,OAAO,UAAU,KAAK,WAAW,IAAI,UAAU,CAAC,MAAM,EAAE;AACjE,WAAS,MAAM,GAAG,UAAU,CAAC,MAAM;AACnC,OAAA;;AAEA;AACA,OAAK,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE;AACtE,WAAS,MAAM,GAAG,MAAM,CAAC,QAAQ;AACjC,OAAA;;AAEA;AACA,OAAK,IAAI,CAAC,MAAM,IAAI,OAAOC,cAAM,KAAK,WAAW,IAAIA,cAAM,CAAC,MAAM,EAAE;AACpE,WAAS,MAAM,GAAGA,cAAM,CAAC,MAAM;AAC/B,OAAA;;AAEA;OACK,IAAI,CAAC,MAAM,IAAI,OAAOC,eAAO,KAAK,UAAU,EAAE;AACnD,WAAS,IAAI;eACA,MAAM,GAAG,UAAiB;WACvC,CAAU,CAAC,OAAO,GAAG,EAAE,CAAA;AACvB,OAAA;;AAEA;AACA;AACA;AACA;AACA;OACK,IAAI,qBAAqB,GAAG,YAAY;WACpC,IAAI,MAAM,EAAE;AACrB;AACA,eAAa,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,UAAU,EAAE;AAC/D,mBAAiB,IAAI;AACrB,uBAAqB,OAAO,MAAM,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;mBACzE,CAAkB,CAAC,OAAO,GAAG,EAAE,CAAA;AAC/B,eAAA;;AAEA;AACA,eAAa,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,UAAU,EAAE;AAC3D,mBAAiB,IAAI;uBACA,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;mBAC/D,CAAkB,CAAC,OAAO,GAAG,EAAE,CAAA;AAC/B,eAAA;AACA,WAAA;;AAEA,WAAS,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC;OAC/F,CAAM;;AAEN;AACA;;AAEA;AACA,OAAK,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,YAAY;WACvC,SAAS,CAAC,GAAG,CAAA;;WAEb,OAAO,UAAU,GAAG,EAAE;AAC/B,eAAa,IAAI,OAAO;;AAExB,eAAa,CAAC,CAAC,SAAS,GAAG,GAAG;;AAE9B,eAAa,OAAO,GAAG,IAAI,CAAC,EAAE;;AAE9B,eAAa,CAAC,CAAC,SAAS,GAAG,IAAI;;AAE/B,eAAa,OAAO,OAAO;WAC3B,CAAU;AACV,OAAA,CAAM,EAAE,CAAC;;AAET;AACA;AACA;OACK,IAAI,CAAC,GAAG,EAAE;;AAEf;AACA;AACA;AACA,OAAK,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE;;AAE3B;AACA;AACA;AACA,OAAK,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,YAAY;;;AAG1C,WAAS,OAAO;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAa,MAAM,EAAE,UAAU,SAAS,EAAE;AAC1C;AACA,mBAAiB,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;;AAE3C;mBACiB,IAAI,SAAS,EAAE;AAChC,uBAAqB,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;AAC7C,mBAAA;;AAEA;AACA,mBAAiB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE;AACpF,uBAAqB,OAAO,CAAC,IAAI,GAAG,YAAY;2BACvB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;uBACnE,CAAsB;AACtB,mBAAA;;AAEA;AACA,mBAAiB,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,OAAO;;AAEjD;AACA,mBAAiB,OAAO,CAAC,MAAM,GAAG,IAAI;;AAEtC,mBAAiB,OAAO,OAAO;eAC/B,CAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;eACa,MAAM,EAAE,YAAY;AACjC,mBAAiB,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE;mBAC5B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;;AAEzD,mBAAiB,OAAO,QAAQ;eAChC,CAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;eACa,IAAI,EAAE,YAAY;eAC/B,CAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAa,KAAK,EAAE,UAAU,UAAU,EAAE;AAC1C,mBAAiB,KAAK,IAAI,YAAY,IAAI,UAAU,EAAE;AACtD,uBAAqB,IAAI,UAAU,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE;2BACzC,IAAI,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC;AACtE,uBAAA;AACA,mBAAA;;AAEA;AACA,mBAAiB,IAAI,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;AAC5D,uBAAqB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ;AACxD,mBAAA;eACA,CAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;eACa,KAAK,EAAE,YAAY;mBACf,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACxD,eAAA;YACU;AACV,OAAA,CAAM,EAAE,CAAC;;AAET;AACA;AACA;AACA;AACA;AACA;OACK,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,IAAI,EAAE,UAAU,KAAK,EAAE,QAAQ,EAAE;eAC7B,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;;AAE7C,eAAa,IAAI,QAAQ,IAAIF,WAAS,EAAE;AACxC,mBAAiB,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACzC,eAAA,CAAc,MAAM;mBACH,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;AACjD,eAAA;WACA,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,QAAQ,EAAE,UAAU,OAAO,EAAE;eACzB,OAAO,CAAC,OAAO,IAAI,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC;WACpD,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,MAAM,EAAE,UAAU,SAAS,EAAE;AACtC;AACA,eAAa,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK;AACvC,eAAa,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK;AAC5C,eAAa,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ;AAC7C,eAAa,IAAI,YAAY,GAAG,SAAS,CAAC,QAAQ;;AAElD;eACa,IAAI,CAAC,KAAK,EAAE;;AAEzB;AACA,eAAa,IAAI,YAAY,GAAG,CAAC,EAAE;AACnC;AACA,mBAAiB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;uBACnC,IAAI,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI;uBACjE,SAAS,CAAC,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,QAAQ,KAAK,EAAE,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3G,mBAAA;AACA,eAAA,CAAc,MAAM;AACpB;AACA,mBAAiB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE;AAC3D,uBAAqB,SAAS,CAAC,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;AAC7E,mBAAA;AACA,eAAA;AACA,eAAa,IAAI,CAAC,QAAQ,IAAI,YAAY;;AAE1C;AACA,eAAa,OAAO,IAAI;WACxB,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;WACS,KAAK,EAAE,YAAY;AAC5B;AACA,eAAa,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;AACnC,eAAa,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ;;AAEzC;AACA,eAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,UAAU,KAAK,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC;eAChE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;WACnD,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;WACS,KAAK,EAAE,YAAY;eACf,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;eACjC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;;AAE9C,eAAa,OAAO,KAAK;WACzB,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,MAAM,EAAE,UAAU,MAAM,EAAE;eACtB,IAAI,KAAK,GAAG,EAAE;;AAE3B,eAAa,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACjD,mBAAiB,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACpD,eAAA;;eAEa,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC;AACrD,WAAA;AACA,QAAM,CAAC;;AAEP;AACA;AACA;AACA,OAAK,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE;;AAE3B;AACA;AACA;AACA,OAAK,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,SAAS,EAAE,UAAU,SAAS,EAAE;AACzC;AACA,eAAa,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK;AACxC,eAAa,IAAI,QAAQ,GAAG,SAAS,CAAC,QAAQ;;AAE9C;eACa,IAAI,QAAQ,GAAG,EAAE;AAC9B,eAAa,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;mBAC/B,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI;AAC1E,mBAAiB,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;AACzD,mBAAiB,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1D,eAAA;;AAEA,eAAa,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;WACrC,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,KAAK,EAAE,UAAU,MAAM,EAAE;AAClC;AACA,eAAa,IAAI,YAAY,GAAG,MAAM,CAAC,MAAM;;AAE7C;eACa,IAAI,KAAK,GAAG,EAAE;AAC3B,eAAa,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE;AACvD,mBAAiB,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1F,eAAA;;eAEa,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,CAAC,CAAC;AAC/D,WAAA;QACM;;AAEN;AACA;AACA;AACA,OAAK,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,SAAS,EAAE,UAAU,SAAS,EAAE;AACzC;AACA,eAAa,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK;AACxC,eAAa,IAAI,QAAQ,GAAG,SAAS,CAAC,QAAQ;;AAE9C;eACa,IAAI,WAAW,GAAG,EAAE;AACjC,eAAa,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;mBAC/B,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI;mBACzD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5D,eAAA;;AAEA,eAAa,OAAO,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;WACxC,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,KAAK,EAAE,UAAU,SAAS,EAAE;AACrC;AACA,eAAa,IAAI,eAAe,GAAG,SAAS,CAAC,MAAM;;AAEnD;eACa,IAAI,KAAK,GAAG,EAAE;AAC3B,eAAa,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE;mBACtC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACzF,eAAA;;eAEa,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC;AAC9D,WAAA;QACM;;AAEN;AACA;AACA;AACA,OAAK,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,SAAS,EAAE,UAAU,SAAS,EAAE;AACzC,eAAa,IAAI;AACjB,mBAAiB,OAAO,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;eAC/E,CAAc,CAAC,OAAO,CAAC,EAAE;AACzB,mBAAiB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;AACxD,eAAA;WACA,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,KAAK,EAAE,UAAU,OAAO,EAAE;AACnC,eAAa,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;AACvE,WAAA;QACM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;OACK,IAAI,sBAAsB,GAAG,KAAK,CAAC,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;WACS,KAAK,EAAE,YAAY;AAC5B;eACa,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE;AAC9C,eAAa,IAAI,CAAC,WAAW,GAAG,CAAC;WACjC,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,OAAO,EAAE,UAAU,IAAI,EAAE;AAClC;AACA,eAAa,IAAI,OAAO,IAAI,IAAI,QAAQ,EAAE;AAC1C,mBAAiB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACxC,eAAA;;AAEA;AACA,eAAa,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AACpC,eAAa,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ;WAC9C,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,QAAQ,EAAE,UAAU,OAAO,EAAE;AACtC,eAAa,IAAI,cAAc;;AAE/B;AACA,eAAa,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK;AAClC,eAAa,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK;AACvC,eAAa,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ;AAC7C,eAAa,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS;AAC3C,eAAa,IAAI,cAAc,GAAG,SAAS,GAAG,CAAC;;AAE/C;AACA,eAAa,IAAI,YAAY,GAAG,YAAY,GAAG,cAAc;eAChD,IAAI,OAAO,EAAE;AAC1B;AACA,mBAAiB,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AACvD,eAAA,CAAc,MAAM;AACpB;AACA;AACA,mBAAiB,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AACrF,eAAA;;AAEA;AACA,eAAa,IAAI,WAAW,GAAG,YAAY,GAAG,SAAS;;AAEvD;AACA,eAAa,IAAI,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,EAAE,YAAY,CAAC;;AAEtE;eACa,IAAI,WAAW,EAAE;AAC9B,mBAAiB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,MAAM,IAAI,SAAS,EAAE;AACjF;AACA,uBAAqB,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC;AAC5D,mBAAA;;AAEA;mBACiB,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC;AAClE,mBAAiB,IAAI,CAAC,QAAQ,IAAI,WAAW;AAC7C,eAAA;;AAEA;eACa,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC;WACnE,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;WACS,KAAK,EAAE,YAAY;eACf,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;eACjC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;;AAE7C,eAAa,OAAO,KAAK;WACzB,CAAU;;AAEV,WAAS,cAAc,EAAE;AACzB,QAAM,CAAC;;AAEP;AACA;AACA;AACA;AACA;OACkB,KAAK,CAAC,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC;AAC/D;AACA;AACA;AACA,WAAS,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,IAAI,EAAE,UAAU,GAAG,EAAE;AAC9B;eACa,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;;AAE5C;eACa,IAAI,CAAC,KAAK,EAAE;WACzB,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;WACS,KAAK,EAAE,YAAY;AAC5B;AACA,eAAa,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEpD;eACa,IAAI,CAAC,QAAQ,EAAE;WAC5B,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,MAAM,EAAE,UAAU,aAAa,EAAE;AAC1C;AACA,eAAa,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;;AAExC;eACa,IAAI,CAAC,QAAQ,EAAE;;AAE5B;AACA,eAAa,OAAO,IAAI;WACxB,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,QAAQ,EAAE,UAAU,aAAa,EAAE;AAC5C;eACa,IAAI,aAAa,EAAE;AAChC,mBAAiB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;AAC5C,eAAA;;AAEA;AACA,eAAa,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;;AAE1C,eAAa,OAAO,IAAI;WACxB,CAAU;;AAEV,WAAS,SAAS,EAAE,GAAG,CAAC,EAAE;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,aAAa,EAAE,UAAU,MAAM,EAAE;AAC1C,eAAa,OAAO,UAAU,OAAO,EAAE,GAAG,EAAE;AAC5C,mBAAiB,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;eAC9D,CAAc;WACd,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,iBAAiB,EAAE,UAAU,MAAM,EAAE;AAC9C,eAAa,OAAO,UAAU,OAAO,EAAE,GAAG,EAAE;AAC5C,mBAAiB,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;eAC3E,CAAc;AACd,WAAA;AACA,QAAM;;AAEN;AACA;AACA;AACA,OAAK,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE;;AAE7B,OAAK,OAAO,CAAC;GACb,CAAE,CAAC,IAAI,CAAC,CAAC;;;AAGT,GAAC,OAAO,QAAQ;;AAEhB,EAAA,CAAC,CAAC,EAAA;;;;;;;;;;;;;ACtyBD,CAAC,UAAU,IAAI,EAAE,OAAO,EAAE;AAC3B,GAAkC;AAClC;AACA,IAAE,iBAA2B,OAAO,CAAC5B,aAAiB,CAAC;AACvD,GAAA;AASA,EAAA,CAAC,CAAC2B,QAAI,EAAE,UAAU,QAAQ,EAAE;;GAE3B,CAAC,UAAU,IAAI,EAAE;AAClB;OACK,IAAI,CAAC,GAAG,QAAQ;AACrB,OAAK,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG;AACtB,OAAK,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS;AACpC,OAAK,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;AAC9B,OAAK,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI;;AAExB;OACK,IAAI,CAAC,GAAG,EAAE;OACV,IAAI,CAAC,GAAG,EAAE;;AAEf;AACA,OAAK,CAAC,YAAY;AAClB,WAAS,SAAS,OAAO,CAAC,CAAC,EAAE;eAChB,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,eAAa,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,EAAE,EAAE;AAC7D,mBAAiB,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE;AACpC,uBAAqB,OAAO,KAAK;AACjC,mBAAA;AACA,eAAA;;AAEA,eAAa,OAAO,IAAI;AACxB,WAAA;;AAEA,WAAS,SAAS,iBAAiB,CAAC,CAAC,EAAE;AACvC,eAAa,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,WAAW,IAAI,CAAC;AACrD,WAAA;;WAES,IAAI,CAAC,GAAG,CAAC;WACT,IAAI,MAAM,GAAG,CAAC;AACvB,WAAS,OAAO,MAAM,GAAG,EAAE,EAAE;AAC7B,eAAa,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;AAC7B,mBAAiB,IAAI,MAAM,GAAG,CAAC,EAAE;AACjC,uBAAqB,CAAC,CAAC,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACtE,mBAAA;AACA,mBAAiB,CAAC,CAAC,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;;AAElE,mBAAiB,MAAM,EAAE;AACzB,eAAA;;AAEA,eAAa,CAAC,EAAE;AAChB,WAAA;AACA,OAAA,CAAM,EAAE;;AAER;OACK,IAAI,CAAC,GAAG,EAAE;;AAEf;AACA;AACA;OACK,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;WACvC,QAAQ,EAAE,YAAY;AAC/B,eAAa,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;WACxD,CAAU;;AAEV,WAAS,eAAe,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE;AAC/C;AACA,eAAa,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;;AAErC;AACA,eAAa,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzB,eAAa,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzB,eAAa,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzB,eAAa,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzB,eAAa,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzB,eAAa,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzB,eAAa,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzB,eAAa,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;AAEzB;AACA,eAAa,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC1C,mBAAiB,IAAI,CAAC,GAAG,EAAE,EAAE;AAC7B,uBAAqB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;AAC7C,mBAAA,CAAkB,MAAM;uBACH,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC5C,uBAAqB,IAAI,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,KAAK,OAAO,KAAK,CAAC,CAAC;sCACjC,CAAC,OAAO,IAAI,EAAE,KAAK,OAAO,KAAK,EAAE,CAAC,CAAC;uCAClC,OAAO,KAAK,CAAC,CAAC;;uBAE9B,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3C,uBAAqB,IAAI,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,KAAK,OAAO,KAAK,EAAE,CAAC;sCAClC,CAAC,OAAO,IAAI,EAAE,KAAK,OAAO,KAAK,EAAE,CAAC,CAAC;uCAClC,OAAO,KAAK,EAAE,CAAC;;uBAE/B,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAClE,mBAAA;;AAEA,mBAAiB,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7C,mBAAiB,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAEtD,mBAAiB,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3G,mBAAiB,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;AAE3G,mBAAiB,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvD,mBAAiB,IAAI,EAAE,GAAG,MAAM,GAAG,GAAG;;mBAErB,CAAC,GAAG,CAAC;mBACL,CAAC,GAAG,CAAC;mBACL,CAAC,GAAG,CAAC;AACtB,mBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC;mBAChB,CAAC,GAAG,CAAC;mBACL,CAAC,GAAG,CAAC;mBACL,CAAC,GAAG,CAAC;AACtB,mBAAiB,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;AAClC,eAAA;;AAEA;AACA,eAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,eAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,eAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,eAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,eAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,eAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,eAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,eAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;WAClC,CAAU;;WAED,WAAW,EAAE,YAAY;AAClC;AACA,eAAa,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK;AAClC,eAAa,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK;;AAEvC,eAAa,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC;AAClD,eAAa,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC;;AAE9C;AACA,eAAa,SAAS,CAAC,SAAS,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,EAAE,GAAG,SAAS,GAAG,EAAE,CAAC;eAC3D,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,WAAW,CAAC;AACnG,eAAa,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,UAAU;eAC5D,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;;AAEjD;eACa,IAAI,CAAC,QAAQ,EAAE;;AAE5B;eACa,OAAO,IAAI,CAAC,KAAK;WAC9B,CAAU;;WAED,KAAK,EAAE,YAAY;eACf,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;eACnC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;;AAE7C,eAAa,OAAO,KAAK;AACzB,WAAA;AACA,QAAM,CAAC;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;OACK,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;OACK,CAAC,CAAC,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC;GACpD,CAAE,CAAC,IAAI,CAAC;;;GAGP,OAAO,QAAQ,CAAC,MAAM;;AAEvB,EAAA,CAAC,CAAC,EAAA;;;;;;;;MCnMW,MAAM,CAAA;AACjB,IAAA,OAAO,uBAAuB,CAC5B,iBAAyB,EACzB,WAAmB,EAAA;QAEnB,OAAO,IAAI,CAAC,aAAa,CAAC,iBAAiB,GAAG,WAAW,CAAC;IAC5D;IAEA,OAAO,aAAa,CAAC,EACnB,iBAAiB,EACjB,EAAE,EACF,WAAW,GACa,EAAA;QACxB,IAAI,MAAM,GAAG,EAAE;AAEf,QAAA,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,IAAI,MAAM,CAAC,WAAW,CAAC;AAC9B,QAAA;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,iBAAiB,GAAG,EAAE,GAAG,MAAM,CAAC;IAC5D;;;;;;IAOA,OAAO,aAAa,CAAC,IAAY,EAAA;QAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;AAE1C,QAAA,OAAO,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;IACpD;AACD;;MC+EY,sBAAsB,CAAA;IAOjC,WAAA,CACE,eAA4C,EAC5C,yCAAsF,EACtF,sCAAgF,EAChF,kBAAuC,EACvC,mBAAwC,EAAA;AAExC,QAAA,IAAI,CAAC,OAAO,GAAG,eAAe;AAC9B,QAAA,IAAI,CAAC,iCAAiC;AACpC,YAAA,yCAAyC;AAC3C,QAAA,IAAI,CAAC,8BAA8B;AACjC,YAAA,sCAAsC;AACxC,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;AAC9C,QAAA,kBAAkB,CAAC,yBAAyB,CAAC,IAAI,CAAC;IACpD;AAEO,IAAA,gBAAgB,CAAC,EACtB,WAAW,EACX,gBAAgB,EAChB,MAAM,GACyB,EAAA;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AAElC,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;AACd,YAAA,OAAO,MAAM;AACd,QAAA;AAED,QAAA,IAAI,oBAAoB,GAAsB,MAAM,CAAC,IAAI;AAEzD,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE;AACtC,YAAA,oBAAoB,CAAC,WAAW,CAAC,GAAG,EAAE;AACvC,QAAA;AAED,QAAA,KAAK,MAAM,YAAY,IAAI,gBAAgB,EAAE;AAC3C,YAAA,oBAAoB,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAC1C,oBAAoB,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAA,EAAA,EAClD,MAAM,GACP;AACF,QAAA;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC;IACjD;AAEO,IAAA,aAAa,CAAC,WAAmB,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAC1B,WAAW,EACX,CAAC,MAAM,KAAK,MAAM,KAAKjB,sBAAc,CAAC,MAAM,CAC7C;IACH;IAEO,yBAAyB,GAAA;AAC9B,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,iDAAA,CAAmD;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AAElC,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;AACd,YAAA,eAAe,CAAC,KAAK,CAAA,CAAA,gEAAA,EAAmE,MAAM,GAAG;AACjG,YAAA,OAAO,EAAE;AACV,QAAA;QAED,MAAM,QAAQ,GAAa,EAAE;AAC7B,QAAA,KAAK,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACnE,IACE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAC5B,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAKA,sBAAc,CAAC,MAAM,CAC1C,EACD;AACA,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AAC3B,YAAA;AACF,QAAA;AAED,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,kEAAA,EAAqE,QAAQ,GAAG;AACrG,QAAA,OAAO,QAAQ;IACjB;AAEO,IAAA,cAAc,CAAC,WAAmB,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAC1B,WAAW,EACX,CAAC,MAAM,KAAK,MAAM,KAAKA,sBAAc,CAAC,OAAO,CAC9C;IACH;AAEO,IAAA,mBAAmB,CACxB,WAAmB,EAAA;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AAElC,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;AACd,YAAA,OAAO,MAAM;AACd,QAAA;QAED,MAAM,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;QAEtD,IAAI,CAAC,qBAAqB,EAAE;AAC1B,YAAA,OAAOH,gBAAG,CACR,IAAI,cAAc,CAACN,0BAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,CAChE;AACF,QAAA;AAED,QAAA,OAAOK,eAAE,CAAC,qBAAqB,CAAC;IAClC;IAEO,YAAY,CAAC,EAClB,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,KAAK,GAAG,IAAI,EACZ,cAAc,GAAG,KAAK,GACK,EAAA;AAI3B,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,uDAAA,EAA0D,WAAW,wBAAwB,iBAAiB,CAAA,eAAA,EAAkB,WAAW,CAAA,iBAAA,EAAoB,aAAa,CAAA,eAAA,EAAkB,WAAW,CAAA,oDAAA,EAAuD,cAAc,GAAG;AAEtS,QAAA,MAAM,EACJ,KAAK,EACL,UAAU,EACV,EAAE,EAAE,aAAa,EACjB,mBAAmB,GACpB,GAAG,WAAW;AAEf,QAAA,MAAM,OAAO,GAAG,mBAAmB,CAAC;AAClC,cAAE;AACF,cAAEoB,oBAAY,CAAC,KAAK;AAEtB,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,MAAM,EACJ,OAAO,EACP,YAAY,EACZ,EAAE,EACF,UAAU,EACV,WAAW,EACX,qBAAqB,GACtB,GAAG,IAAI;AAER,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,4BAA4B,CAC3D,WAAW,EACX,IAAI,CAAC,YAAY,CAClB;YACD,IAAI,eAAe,GAAG,IAAI;YAC1B,IAAI,mBAAmB,CAAC,EAAE,EAAE;AAC1B,gBAAA,eAAe,GAAG,mBAAmB,CAAC,IAAI;AAC1C,gBAAA,IAAI,eAAe,IAAI,eAAe,CAAC,cAAc,EAAE;oBACrD,eAAe,CAAC,IAAI,CAAA,CAAA,QAAA,EAAW,WAAW,CAAA,8BAAA,EAAiC,IAAI,EAAE;AAEjF,oBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,oCAAoC,CACjE,WAAW,EACX,WAAW,EACX,IAAI,EACJ,eAAe,EACf,KAAK,EACL,cAAc,CACf;AAED,oBAAA,eAAe,CAAC,KAAK,CAAA,4DAA4D,WAAW,CAAA,qBAAA,EAAwB,iBAAiB,CAAA,eAAA,EAAkB,WAAW,CAAA,iBAAA,EAAoB,aAAa,kBAAkB,WAAW,CAAA,oDAAA,EAAuD,cAAc,CAAA,yBAAA,EAA4B,iBAAiB,GAAG;AACrV,oBAAA,OAAOpB,eAAE,CAAC,iBAAiB,CAAC;AAC7B,gBAAA;AACF,YAAA;AAED,YAAA,MAAM,eAAe,GAAG,SAAS,CAAC,cAAc,CAAC;gBAC/C,OAAO;gBACP,WAAW;gBACX,YAAY;gBACZ,aAAa;gBACb,WAAW;gBACX,mBAAmB;gBACnB,WAAW;AACX,gBAAA,sBAAsB,EAAE,IAAI;AAC7B,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE;AACvB,gBAAA,eAAe,CAAC,KAAK,CAAA,4DAA4D,WAAW,CAAA,qBAAA,EAAwB,iBAAiB,CAAA,eAAA,EAAkB,WAAW,CAAA,iBAAA,EAAoB,aAAa,kBAAkB,WAAW,CAAA,oDAAA,EAAuD,cAAc,CAAA,yBAAA,EAA4B,eAAe,GAAG;AACnV,gBAAA,OAAO,eAAe;AACvB,YAAA;AAED,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;gBACzB;AACD,YAAA;YAED,eAAe,CAAC,IAAI,CAAA,CAAA,QAAA,EAAW,WAAW,CAAA,uBAAA,EAA0B,IAAI,EAAE;AAE1E,YAAA,IAAI,eAAe,EAAE;AACnB,gBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,oCAAoC,CACjE,WAAW,EACX,WAAW,EACX,IAAI,EACJ,eAAe,EACf,KAAK,EACL,cAAc,CACf;AACD,gBAAA,eAAe,CAAC,KAAK,CAAA,4DAA4D,WAAW,CAAA,qBAAA,EAAwB,iBAAiB,CAAA,eAAA,EAAkB,WAAW,CAAA,iBAAA,EAAoB,aAAa,kBAAkB,WAAW,CAAA,oDAAA,EAAuD,cAAc,CAAA,yBAAA,EAA4B,iBAAiB,GAAG;AACrV,gBAAA,OAAOA,eAAE,CAAC,iBAAiB,CAAC;AAC7B,YAAA;;;;AAKD,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC;gBACpC,iBAAiB;gBACjB,WAAW;AACX,gBAAA,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;AACf,aAAA,CAAC;YACF,eAAe,CAAC,KAAK,CAAA,CAAA,qBAAA,EAAwB,QAAQ,CAAA,WAAA,EAAc,iBAAiB,EAAE;YAEtF,IAAI,QAAQ,IAAI,UAAU,EAAE;;AAE1B,gBAAA,IACE,OAAO,IAAIoB,oBAAY,CAAC,QAAQ;AAChC,oBAAA,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,eAAe,EACrC;AACA,oBAAA,MAAM,SAAS,GAAG,mBAAmB,CAAC,wBAAwB;AAC9D,oBAAA,IAAI,SAAS,IAAI,wBAAwB,CAAC,gBAAgB,EAAE;wBAC1D;AACD,oBAAA;AACD,oBAAA,OAAOnB,gBAAG,CACR,IAAI,cAAc,CAChBN,0BAAkB,CAAC,8BAA8B,EACjD,CAAA,cAAA,EAAiB,IAAI,CAAA,yDAAA,EAA4D,WAAW,CAAA,CAAA,CAAG,CAChG,CACF;AACF,gBAAA;;AAED,gBAAA,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,CACnC,IAAI,EACJ,iBAAiB,EACjB,aAAa,CACd;gBAED,IAAI,CAAC,SAAS,EAAE;AACd,oBAAA,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;wBACzC,iBAAiB;wBACjB,WAAW;AACX,wBAAA,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC;AACzB,qBAAA,CAAC;oBAEF,eAAe,CAAC,KAAK,CAAA,CAAA,0BAAA,EAA6B,aAAa,CAAA,WAAA,EAAc,iBAAiB,EAAE;oBAEhG,SAAS,GAAG,SAAS,CAAC,kBAAkB,CACtC,qBAAqB,EACrB,aAAa,CACd;AACF,gBAAA;AAED,gBAAA,IAAI,SAAS,EAAE;AACb,oBAAA,IAAI,cAAc,EAAE;AAClB,wBAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;4BACvC,CAAC,YAAY,GAAG;gCACd,WAAW,EAAE,SAAS,CAAC,WAAW;AAClC,gCAAA,cAAc,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,iBAAiB;AACxD,gCAAA,MAAM,EAAE,KAAK,GAAGS,sBAAc,CAAC,MAAM,GAAGA,sBAAc,CAAC,IAAI;AAC5D,6BAAA;AACF,yBAAA,CAAC;AACH,oBAAA;AAED,oBAAA,MAAM,iBAAiB,GAAG;wBACxB,WAAW,EAAE,SAAS,CAAC,WAAW;wBAClC,YAAY,EAAE,SAAS,CAAC,YAAY;wBACpC,IAAI;wBACJ,aAAa;wBACb,UAAU;wBACV,YAAY;AACZ,wBAAA,cAAc,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,iBAAiB;qBACzD;AACD,oBAAA,eAAe,CAAC,KAAK,CAAA,4DAA4D,WAAW,CAAA,qBAAA,EAAwB,iBAAiB,CAAA,eAAA,EAAkB,WAAW,CAAA,iBAAA,EAAoB,aAAa,kBAAkB,WAAW,CAAA,oDAAA,EAAuD,cAAc,CAAA,yBAAA,EAA4B,iBAAiB,GAAG;AACrV,oBAAA,OAAOJ,eAAE,CAAC,iBAAiB,CAAC;AAC7B,gBAAA;AACF,YAAA;AAED,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,iBAAiB,EAAE;AAC5C,gBAAA,MAAM,iBAAiB,GAAG;oBACxB,UAAU;oBACV,aAAa;AACb,oBAAA,YAAY,EAAE,IAAI;AAClB,oBAAA,YAAY,EAAE,mBAAmB;AACjC,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,cAAc,EAAE,IAAI;iBACrB;AACD,gBAAA,eAAe,CAAC,KAAK,CAAA,4DAA4D,WAAW,CAAA,qBAAA,EAAwB,iBAAiB,CAAA,eAAA,EAAkB,WAAW,CAAA,iBAAA,EAAoB,aAAa,kBAAkB,WAAW,CAAA,oDAAA,EAAuD,cAAc,CAAA,yBAAA,EAA4B,iBAAiB,GAAG;AACrV,gBAAA,OAAOA,eAAE,CAAC,iBAAiB,CAAC;AAC7B,YAAA;AACF,QAAA;AAED,QAAA,MAAM,iBAAiB,GAAG;YACxB,UAAU;YACV,aAAa;AACb,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,YAAY,EAAE,mBAAmB;AACjC,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,cAAc,EAAE,KAAK;SACtB;AACD,QAAA,eAAe,CAAC,KAAK,CAAA,4DAA4D,WAAW,CAAA,qBAAA,EAAwB,iBAAiB,CAAA,eAAA,EAAkB,WAAW,CAAA,iBAAA,EAAoB,aAAa,kBAAkB,WAAW,CAAA,oDAAA,EAAuD,cAAc,CAAA,yBAAA,EAA4B,iBAAiB,GAAG;AACrV,QAAA,OAAOA,eAAE,CAAC,iBAAiB,CAAC;IAC9B;IAEQ,oCAAoC,CAC1C,WAAmB,EACnB,WAA4B,EAC5B,IAAkB,EAClB,eAA8C,EAC9C,KAAc,EACd,cAAuB,EAAA;AAEvB,QAAA,MAAM,iBAAiB,GAAG;AACxB,YAAA,YAAY,EAAE,eAAe,CAAC,QAAS,CAAC,YAAY;AACpD,YAAA,WAAW,EAAE,eAAe,CAAC,QAAS,CAAC,WAAW;YAClD,IAAI;YACJ,aAAa,EAAE,WAAW,CAAC,EAAE;YAC7B,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,YAAA,cAAc,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,iBAAiB;SACzD;AACD,QAAA,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;AACvC,gBAAA,CAAC,IAAI,CAAC,YAAY,GAAG;oBACnB,WAAW,EAAE,iBAAiB,CAAC,WAAW;AAC1C,oBAAA,cAAc,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,iBAAiB;AACxD,oBAAA,MAAM,EAAE,KAAK,GAAGI,sBAAc,CAAC,MAAM,GAAGA,sBAAc,CAAC,IAAI;AAC5D,iBAAA;AACF,aAAA,CAAC;AACH,QAAA;AACD,QAAA,OAAO,iBAAiB;IAC1B;IAEO,sBAAsB,CAC3B,WAAmB,EACnB,aAAwC,EAAA;QAExC,eAAe,CAAC,KAAK,CAAA,CAAA,iEAAA,EAAoE,WAAW,CAAA,iBAAA,EAAoB,aAAa,GAAG;QACxI,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AAElC,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;YACd,eAAe,CAAC,KAAK,CAAA,CAAA,mEAAA,EAAsE,WAAW,oBAAoB,aAAa,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAA,CAAG;AACjK,YAAA,OAAO,MAAM;AACd,QAAA;AAED,QAAA,IAAI,oBAAoB,GAAsB,MAAM,CAAC,IAAI;AAEzD,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE;AACtC,YAAA,oBAAoB,CAAC,WAAW,CAAC,GAAG,EAAE;AACvC,QAAA;AACD,QAAA,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;AACxC,YAAA,oBAAoB,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC;gBAC7C,aAAa,CAAC,YAAY,CAAC;AAC9B,QAAA;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC;QAC5D,eAAe,CAAC,KAAK,CAAA,CAAA,mEAAA,EAAsE,WAAW,oBAAoB,aAAa,CAAA,mBAAA,EAAsB,WAAW,CAAA,CAAA,CAAG;AAC3K,QAAA,OAAO,WAAW;IACpB;IAEQ,gBAAgB,CACtB,WAAmB,EACnB,MAA2C,EAAA;QAE3C,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;AAEpD,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;AACd,YAAA,OAAO,EAAE;AACV,QAAA;QAED,MAAM,UAAU,GAA4B,EAAE;AAE9C,QAAA,KAAK,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvE,YAAA,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;gBAChC,UAAU,CAAC,IAAI,CAAC;AACd,oBAAA,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC;oBAClC,WAAW,EAAE,aAAa,CAAC,WAAW;oBACtC,cAAc,EAAE,aAAa,CAAC,cAAc;AAC7C,iBAAA,CAAC;AACH,YAAA;AACF,QAAA;AAED,QAAA,OAAO,UAAU;IACnB;AAEO,IAAA,+BAA+B,CACpC,WAAmB,EACnB,YAAoB,EACpB,yBAA+D,EAAA;QAE/D,eAAe,CAAC,KAAK,CAAA,CAAA,0EAAA,EAA6E,WAAW,mBAAmB,YAAY,CAAA,6BAAA,EAAgC,yBAAyB,CAAA,CAAA,CAAG;QACxM,MAAM,MAAM,GAAG,IAAI,CAAC,iCAAiC,CAAC,IAAI,EAAE;AAE5D,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;AACd,YAAA,eAAe,CAAC,KAAK,CAAA,CAAA,4EAAA,EAA+E,WAAW,CAAA,gBAAA,EAAmB,YAAY,CAAA,6BAAA,EAAgC,yBAAyB,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAA,CAAG;AACjO,YAAA,OAAO,MAAM;AACd,QAAA;AAED,QAAA,IAAI,0BAA0B,GAC5B,MAAM,CAAC,IAAI;AAEb,QAAA,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,EAAE;AAC5C,YAAA,0BAA0B,CAAC,WAAW,CAAC,GAAG,EAAE;AAC7C,QAAA;AAED,QAAA,IAAI,yBAAyB,EAAE;AAC7B,YAAA,0BAA0B,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC;AACnD,gBAAA,yBAAyB;AAC5B,QAAA;AAAM,aAAA;AACL,YAAA,OAAO,0BAA0B,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC;AAC7D,QAAA;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAC9D,0BAA0B,CAC3B;AACD,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,4EAAA,EAA+E,WAAW,CAAA,gBAAA,EAAmB,YAAY,CAAA,6BAAA,EAAgC,yBAAyB,CAAA,mBAAA,EAAsB,WAAW,CAAA,CAAA,CAAG;AAC3O,QAAA,OAAO,WAAW;IACpB;IAEO,6BAA6B,CAClC,WAAmB,EACnB,uBAAqD,EAAA;QAErD,eAAe,CAAC,KAAK,CAAA,CAAA,wEAAA,EAA2E,WAAW,CAAA,2BAAA,EAA8B,uBAAuB,GAAG;QACnK,MAAM,MAAM,GAAG,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE;AAEzD,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;YACd,eAAe,CAAC,KAAK,CAAA,CAAA,0EAAA,EAA6E,WAAW,8BAA8B,uBAAuB,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAA,CAAG;AAC5L,YAAA,OAAO,MAAM;AACd,QAAA;AAED,QAAA,IAAI,oBAAoB,GAAmC,MAAM,CAAC,IAAI;AACtE,QAAA,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE;AAC5B,YAAA,oBAAoB,CAAC,CAAC,CAAC,GAAG,EAAE;AAC7B,QAAA;AACD,QAAA,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE;AAC5B,YAAA,oBAAoB,CAAC,CAAC,CAAC,GAAG,EAAE;AAC7B,QAAA;AAED,QAAA,MAAM,iCAAiC,GAAG,oBAAoB,CAAC,CAAC,CAAC;AACjE,QAAA,MAAM,oCAAoC,GAAG,oBAAoB,CAAC,CAAC,CAAC;AAEpE,QAAA,IAAI,CAAC,iCAAiC,CAAC,WAAW,CAAC,EAAE;AACnD,YAAA,iCAAiC,CAAC,WAAW,CAAC,GAAG,EAAE;AACpD,QAAA;AACD,QAAA,IAAI,CAAC,oCAAoC,CAAC,WAAW,CAAC,EAAE;AACtD,YAAA,oCAAoC,CAAC,WAAW,CAAC,GAAG,EAAE;AACvD,QAAA;AAED,QAAA,uBAAuB,CAAC,OAAO,CAAC,CAAC,sBAAsB,KAAI;AACzD,YAAA,MAAM,UAAU,GAAG,sBAAsB,CAAC;AACxC,kBAAE,oCAAoC,CAAC,WAAW;AAClD,kBAAE,iCAAiC,CAAC,WAAW,CAAC;AAClD,YAAA,UAAU,CAAC,sBAAsB,CAAC,UAAU,CAAC,GAAG,sBAAsB;AACxE,QAAA,CAAC,CAAC;QAEF,MAAM,WAAW,GACf,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,oBAAoB,CAAC;QACjE,eAAe,CAAC,KAAK,CAAA,CAAA,0EAAA,EAA6E,WAAW,8BAA8B,uBAAuB,CAAA,mBAAA,EAAsB,WAAW,CAAA,CAAA,CAAG;AACtM,QAAA,OAAO,WAAW;IACpB;AAEO,IAAA,wBAAwB,CAC7B,WAAmB,EAAA;;AAEnB,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,mEAAA,EAAsE,WAAW,GAAG;QACzG,MAAM,MAAM,GAAG,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE;AAEzD,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;YACd,eAAe,CAAC,KAAK,CAAA,CAAA,qEAAA,EAAwE,WAAW,CAAA,cAAA,EAAiB,MAAM,GAAG;AAClI,YAAA,OAAO,MAAM;AACd,QAAA;AACD,QAAA,IAAI,WAAyC;AAC7C,QAAA,MAAM,oBAAoB,GAAmC,MAAM,CAAC,IAAI;AAExE,QAAA,IAAI,CAAA,EAAA,GAAA,oBAAoB,KAAA,IAAA,IAApB,oBAAoB,KAAA,MAAA,GAAA,MAAA,GAApB,oBAAoB,CAAG,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,WAAW,CAAC,EAAE;AAC5C,YAAA,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YAC3C,WAAW;AACT,gBAAA,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,oBAAoB,CAAC;AAClE,QAAA;AAAM,aAAA;YACL,WAAW,GAAGJ,eAAE,EAAE;AACnB,QAAA;QAED,eAAe,CAAC,KAAK,CAAA,CAAA,qEAAA,EAAwE,WAAW,CAAA,mBAAA,EAAsB,WAAW,GAAG;AAC5I,QAAA,OAAO,WAAW;IACpB;IAEO,yBAAyB,CAC9B,WAAmB,EACnB,UAAkB,EAAA;;QAElB,eAAe,CAAC,KAAK,CAAA,CAAA,oEAAA,EAAuE,WAAW,CAAA,cAAA,EAAiB,UAAU,GAAG;QAErI,MAAM,MAAM,GAAG,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE;AACzD,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;YACd,eAAe,CAAC,KAAK,CAAA,CAAA,sEAAA,EAAyE,WAAW,iBAAiB,UAAU,CAAA,uBAAA,EAA0B,MAAM,CAAA,CAAA,CAAG;AACvK,YAAA,OAAO,MAAM;AACd,QAAA;AAED,QAAA,MAAM,aAAa,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,0CAAG,WAAW,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,UAAU,CAAC;AAEjE,QAAA,IAAI,aAAa,EAAE;YACjB,eAAe,CAAC,KAAK,CAAA,CAAA,sEAAA,EAAyE,WAAW,iBAAiB,UAAU,CAAA,qBAAA,EAAwB,aAAa,CAAA,CAAA,CAAG;AAC5K,YAAA,OAAOA,eAAE,CAAC,aAAa,CAAC;AACzB,QAAA;AAED,QAAA,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,0CAAG,WAAW,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,UAAU,CAAC;QAE9D,eAAe,CAAC,KAAK,CAAA,CAAA,sEAAA,EAAyE,WAAW,iBAAiB,UAAU,CAAA,kBAAA,EAAqB,UAAU,CAAA,CAAA,CAAG;AACtK,QAAA,OAAOA,eAAE,CAAC,UAAU,CAAC;IACvB;IAEO,4BAA4B,CACjC,WAAmB,EACnB,YAAoB,EAAA;;QAEpB,eAAe,CAAC,KAAK,CAAA,CAAA,uEAAA,EAA0E,WAAW,CAAA,gBAAA,EAAmB,YAAY,GAAG;QAE5I,MAAM,YAAY,GAAG,IAAI,CAAC,iCAAiC,CAAC,IAAI,EAAE;AAClE,QAAA,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE;YACpB,eAAe,CAAC,KAAK,CAAA,CAAA,yEAAA,EAA4E,WAAW,mBAAmB,YAAY,CAAA,oBAAA,EAAuB,YAAY,CAAA,CAAA,CAAG;AACjL,YAAA,OAAO,YAAY;AACpB,QAAA;AAED,QAAA,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,YAAY,CAAC;QAEjE,eAAe,CAAC,KAAK,CAAA,CAAA,yEAAA,EAA4E,WAAW,mBAAmB,YAAY,CAAA,wBAAA,EAA2B,UAAU,CAAA,CAAA,CAAG;AACnL,QAAA,OAAOA,eAAE,CAAC,UAAU,CAAC;IACvB;AAEQ,IAAA,wBAAwB,CAC9B,kBAA0C,EAC1C,SAAS,GAAG,KAAK,EAAA;AAEjB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAC3D,kBAAkB,CAAC,UAAU,CAC9B;QACD,IAAI,CAAC,WAAW,EAAE;YAChB,eAAe,CAAC,KAAK,CAAA,CAAA,wBAAA,EAA2B,kBAAkB,CAAC,UAAU,aAAa;AAC1F,YAAA,OAAO,IAAI;AACZ,QAAA;QACD,IAAI,eAAe,GAAG,IAAI;AAC1B,QAAA,IAAI,kBAAkB,CAAC,YAAY,KAAK,CAAC,EAAE;AACzC,YAAA,eAAe,GAAG;gBAChB,UAAU,EAAE,kBAAkB,CAAC,UAAU;AACzC,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,SAAS,EAAE,SAAS;aACrB;AACD,YAAA,OAAO,eAAe;AACvB,QAAA;AACD,QAAA,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,EAAE;AACpC,YAAA,IAAI,kBAAkB,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,EAAE;gBACzD;AACD,YAAA;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAC9C,CAAC,QAAQ,KAAK,QAAQ,CAAC,WAAW,KAAK,kBAAkB,CAAC,WAAW,CACtE;AACD,YAAA,IAAI,QAAQ,EAAE;AACZ,gBAAA,eAAe,GAAG;oBAChB,UAAU,EAAE,kBAAkB,CAAC,UAAU;AACzC,oBAAA,IAAI,EAAE;wBACJ,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,YAAY,EAAE,IAAI,CAAC,YAAY;AACL,qBAAA;AAC5B,oBAAA,QAAQ,EAAE;wBACR,YAAY,EAAE,QAAQ,CAAC,YAAY;wBACnC,WAAW,EAAE,QAAQ,CAAC,WAAW;AACH,qBAAA;AAChC,oBAAA,SAAS,EAAE,SAAS;iBACrB;AACD,gBAAA,OAAO,eAAe;AACvB,YAAA;AACF,QAAA;QACD,eAAe,CAAC,KAAK,CAAA,CAAA,oBAAA,EAAuB,kBAAkB,CAAC,WAAW,YAAY;AACtF,QAAA,OAAO,IAAI;IACb;IAEO,0BAA0B,CAC/B,UAAkB,EAClB,IAAS,EAAA;QAET,eAAe,CAAC,KAAK,CAAA,CAAA,oEAAA,EAAuE,UAAU,CAAA,QAAA,EAAW,IAAI,GAAG;AACxH,QAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE;AACxC,YAAA,OAAO,IAAI;AACZ,QAAA;AACD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,CACnD;YACE,UAAU;YACV,WAAW,EAAE,IAAI,CAAC,KAAK;YACvB,YAAY,EAAE,IAAI,CAAC,KAAK;SACzB,EACD,IAAI,CACL;QACD,eAAe,CAAC,KAAK,CAAA,CAAA,sEAAA,EAAyE,UAAU,WAAW,IAAI,CAAA,uBAAA,EAA0B,eAAe,CAAA,CAAA,CAAG;AACnK,QAAA,OAAO,eAAe;IACxB;AAEQ,IAAA,wBAAwB,CAC9B,KAAU,EAAA;AAEV,QAAA,OAAO,KAAK,KAAK,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;IAC3E;AAEQ,IAAA,gBAAgB,CACtB,IAAkB,EAClB,iBAAyB,EACzB,aAAwC,EAAA;AAExC,QAAA,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7C,YAAA,OAAO,IAAI;AACZ,QAAA;QACD,eAAe,CAAC,KAAK,CAAA,CAAA,iDAAA,EAAoD,IAAI,oBAAoB,aAAa,CAAA,qBAAA,EAAwB,iBAAiB,CAAA,CAAA,CAAG;AAE1J,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY;QACtC,MAAM,kBAAkB,GAAG,IAAI,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG;AAC/D,aAAA,SAAS;aACT,GAAG,CAAC,YAAY,CAAC;QAEpB,IAAI,SAAS,GAAqC,IAAI;QACtD,IAAI,kBAAkB,KAAK,SAAS,EAAE;AACpC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB;YAE5C,MAAM,kBAAkB,GAAG;iBACxB,GAAG,CAAC,CAAC,QAAQ,KACZ,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,KACxB,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC5C;AAEF,iBAAA,IAAI,CAAC,CAAC,kBAAkB,KAAK,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,YAAA,IAAI,kBAAkB,EAAE;gBACtB,IAAI,GAAG,GAAG,CAAC;AACX,gBAAA,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,oBAAA,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;wBACzC,iBAAiB;wBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,wBAAA,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC;AACzB,qBAAA,CAAC;oBACF,eAAe,CAAC,KAAK,CAAA,CAAA,oBAAA,EAAuB,aAAa,CAAA,UAAA,EAAa,iBAAiB,EAAE;oBACzF,GAAG,GAAG,IAAI,CAAC,GAAG,CACZ,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,EACrD,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAC9B;AACF,gBAAA;AACD,gBAAA,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC;AACpC,YAAA;AACF,QAAA;AAED,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,mDAAA,EAAsD,IAAI,CAAA,iBAAA,EAAoB,aAAa,CAAA,qBAAA,EAAwB,iBAAiB,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAA,CAAG;AACzL,QAAA,OAAO,SAAS;IAClB;AACD;;ACjwBM,MAAM,eAAe,GAAG,4BAA4B;;ACgB3D;AACA;MACa,oBAAoB,CAAA;AAM/B,IAAA,WAAA,CAAY,EACV,QAAQ,EACR,mBAAmB,EACnB,WAAW,GACe,EAAA;AAC1B,QAAA,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,iBAAiB,EAAE;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,mBAAmB;AACtC,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;IAC/B;AAEA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,gBAAgB;IAC9B;AAEO,IAAA,IAAI,CAAC,OAAyB,EAAA;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,YAAA,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YACpC,GAAG,EAAE,IAAI,CAAC,GAAG;AACb,YAAA,SAAS,EAAE,eAAe;AAC3B,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC5B,eAAe,CAAC,IAAI,CAAA,CAAA,uCAAA,EAA0C,IAAI,CAAC,GAAG,EAAE;IAC1E;IAEO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACxB,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAC7B,eAAe,CAAC,IAAI,CAAA,CAAA,iBAAA,EAAoB,IAAI,CAAC,GAAG,2BAA2B;IAC7E;AAEO,IAAA,OAAO,CAAC,QAAgC,EAAA;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAC7B,YAAA,eAAe,CAAC,OAAO,CACrB,yFAAyF,CAC1F;YACD;AACD,QAAA;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC;IACpC;AAEQ,IAAA,aAAa,CACnB,OAAyB,EAAA;AAEzB,QAAA,MAAM,SAAS,GAAG,CAAC,OAAqB,KAAU;YAChD,eAAe,CAAC,KAAK,CAAA,CAAA,2BAAA,EAA8B,IAAI,CAAC,GAAG,EAAE;YAC7D,MAAM,KAAK,GAAsB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACzD,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,KAAK;AAE7C,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,aAAa,EAAE;gBACnC,OAAO,CAAC,EAAE,CAAC;AACZ,YAAA;AACH,QAAA,CAAC;AAED,QAAA,OAAO,SAAS;IAClB;AACD;;ACjFM,MAAM,mBAAmB,GAAG;AAC5B,MAAM,uBAAuB,GAAG,GAAG;AACnC,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG;AAE1C,MAAM,IAAI,GAAG,GAAG;;ACWvB;;;AAGI;MACS,kBAAkB,CAAA;AAA/B,IAAA,WAAA,GAAA;QAEU,IAAA,CAAA,iBAAiB,GAAY,KAAK;IAwJ5C;IApJE,IAAI,eAAe,CAAC,UAAmB,EAAA;AACrC,QAAA,IAAI,CAAC,iBAAiB,GAAG,UAAU;IACrC;AAEA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,iBAAiB;IAC/B;IAEA,IAAI,OAAO,CAAC,QAAiC,EAAA;AAC3C,QAAA,IAAI,CAAC,eAAe,GAAG,QAAQ;IACjC;IAEA,IAAI,OAAO,CAAC,QAAyD,EAAA;AACnE,QAAA,IAAI,CAAC,eAAe,GAAG,QAAQ;IACjC;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,OAAO,IAAI,CAAC,eAAe;AAC5B,QAAA;AAED,QAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;IAC7C;AAEO,IAAA,mBAAmB,CACxB,WAAmB,EAAA;AAEnB,QAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,OAAOC,gBAAG,CAAC,IAAI,cAAc,CAACN,0BAAkB,CAAC,gBAAgB,CAAC,CAAC;AACpE,QAAA;AAED,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,uBAAuB,EAAE;YAChD,OAAOM,gBAAG,CAAC,IAAI,cAAc,CAACN,0BAAkB,CAAC,oBAAoB,CAAC,CAAC;AACxE,QAAA;QAED,OAAOK,eAAE,EAAE;IACb;AAEO,IAAA,cAAc,CAAC,kBAA2B,EAAA;AAC/C,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,4DAAA,EAA+D,kBAAkB,GAAG;QACzG,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAClD,YAAA,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE;AACF,QAAA;AAED,QAAA,IAAI,WAAW;QAEf,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAC9CmB,2BAAmB,CAAC,WAAW,CAChC;AAED,QAAA,IAAI,mBAAmB,EAAE;YACvB,WAAW,GAAG,mBAAmB;AAClC,QAAA;QAED,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,IAAI,kBAAkB,EAAE;gBACtB,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE;gBACpD,WAAW,GAAG,kBAAkB;AAChC,gBAAA,eAAe,CAAC,KAAK,CAAA,CAAA,2BAAA,EAA8B,WAAW,EAAE;AACjE,YAAA;AAAM,iBAAA;AACL,gBAAA,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACxC,gBAAA,eAAe,CAAC,KAAK,CAAA,CAAA,4BAAA,EAA+B,WAAW,EAAE;AAClE,YAAA;AACF,QAAA;AAED,QAAA,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC;AAE5C,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,IAAI,CAAC,eAAe,CAAC;gBACnB,WAAW;gBACX,GAAG,EAAEA,2BAAmB,CAAC,WAAW;AACpC,gBAAA,MAAM,EAAE,eAAe;AACvB,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA,CAAC;AACH,QAAA;QAED,eAAe,CAAC,KAAK,CAAA,CAAA,8DAAA,EAAiE,kBAAkB,CAAA,mBAAA,EAAsB,WAAW,GAAG;AAC5I,QAAA,OAAO,WAAW;IACpB;AAEQ,IAAA,0BAA0B,CAAC,WAAmB,EAAA;QACpD,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,MAAM,uBAAuB,GAAG,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC;YACxE,IAAI;gBACF,IAAI,CAAC,sBAAsB,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;gBACzE,IAAI,uBAAuB,KAAK,IAAI,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1E,oBAAA,IAAI,CAAC,sBAAsB,CAAC,6BAA6B,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC,KAAK,EAAE;AACxG,gBAAA;AACF,YAAA;AAAC,YAAA,OAAO,KAAK,EAAE;gBACd,IAAI,KAAK,YAAY,KAAK,EAAE;oBAC1B,eAAe,CAAC,KAAK,CAAA,CAAA,wCAAA,EAA2C,KAAK,CAAC,OAAO,EAAE;AAChF,gBAAA;AACF,YAAA;AACF,QAAA;IACH;AAEQ,IAAA,sBAAsB,CAC5B,WAAmB,EAAA;AAEnB,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,6DAAA,EAAgE,WAAW,GAAG;QACnG,MAAM,uBAAuB,GAAG,IAAI,CAAC,eAAgB,CACnDA,2BAAmB,CAAC,yBAAyB,CAC9C;QAED,IAAI,UAAU,GAAwC,IAAI;QAC1D,IACE,OAAO,uBAAuB,KAAK,QAAQ;AAC3C,YAAA,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAClC;YACA,IAAI;gBACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,CAAC;AACtE,gBAAA,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACxC,oBAAA,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM;yBAC/B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;wBACpB,OAAO,IAAI,CAAC,sBAAuB,CAAC,0BAA0B,CAAC,GAAG,EAAE,KAAK,CAAC;AAC5E,oBAAA,CAAC;yBACA,MAAM,CAAC,CAAC,SAAS,KAAK,SAAS,KAAK,IAAI,CAAiC;AAC7E,gBAAA;AACF,YAAA;AAAC,YAAA,OAAO,KAAK,EAAE;gBACd,IAAI,KAAK,YAAY,KAAK,EAAE;oBAC1B,eAAe,CAAC,KAAK,CAAA,CAAA,sCAAA,EAAyC,KAAK,CAAC,OAAO,EAAE;AAC9E,gBAAA;AACF,YAAA;AACF,QAAA;QACD,eAAe,CAAC,KAAK,CAAA,CAAA,+DAAA,EAAkE,WAAW,CAAA,kBAAA,EAAqB,UAAU,GAAG;AACpI,QAAA,OAAO,UAAU;IACnB;IAEQ,mBAAmB,GAAA;QACzB,MAAM,UAAU,GAAG,sCAAsC;QACzD,MAAM,oBAAoB,GAAa,EAAE;QAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC,EAAE,EAAE;YAC5C,oBAAoB,CAAC,IAAI,CACvB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAC1D;AACF,QAAA;AAED,QAAA,OAAO,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC;AAEO,IAAA,yBAAyB,CAAC,sBAA8C,EAAA;AAC7E,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAChC,YAAA,IAAI,CAAC,sBAAsB,GAAG,sBAAsB;AACrD,QAAA;IACH;AACD;;AC7KD,IAAK,IAIJ;AAJD,CAAA,UAAK,IAAI,EAAA;AACP,IAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,IAAA,CAAA,GAAA,IAAU;AACV,IAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,OAAA,CAAA,GAAA,IAAoB;AACpB,IAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,UAAA,CAAA,GAAA,IAAoB;AACtB,CAAC,EAJI,IAAI,KAAJ,IAAI,GAAA,EAAA,CAAA,CAAA;AAMF,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE;AAClC,MAAM,WAAW,GAAG,CAAC;;MCyBf,YAAY,CAAA;AASvB,IAAA,WAAA,CAAY,IAAmB,EAAA;QAPvB,IAAA,CAAA,WAAW,GAAG,CAAC;QACf,IAAA,CAAA,UAAU,GAAa,EAAE;QACzB,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,gBAAgB,GAEpB,EAAE;AAGJ,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;IAClB;IAEO,eAAe,GAAA;AACpB,QAAA,MAAM,MAAM,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC;QAED,IAAI,CAAC,OAAO,EAAE;AAEd,QAAA,OAAO,MAAM;IACf;AAEO,IAAA,OAAO,CAAC,EACb,WAAW,EACX,aAAa,EACb,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,mBAAmB,GACG,EAAA;QACtB,MAAM,KAAK,GAAa,EAAE;QAE1B,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC;QACpE,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;QAE9D,KAAK,CAAC,IAAI,CAAC,GAAG,kBAAkB,EAAE,GAAG,gBAAgB,CAAC;QAEtD,OAAO,IAAI,CAAC,uBAAuB,CAAC;YAClC,WAAW;YACX,KAAK;YACL,SAAS;YACT,iBAAiB;YACjB,mBAAmB;AACpB,SAAA,CAAC;IACJ;AAEQ,IAAA,mBAAmB,CACzB,WAA+C,EAAA;QAE/C,MAAM,KAAK,GAAa,EAAE;AAE1B,QAAA,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;AAC9B,YAAA,IAAI,KAAK;AAET,YAAA,IACE,EAAE,IAAI,YAAY,UAAU,CAAC;iBAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,KAAKX,qBAAa,CAAC,UAAU;oBAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,KAAKA,qBAAa,CAAC,QAAQ,CAAC,EAC5C;AACA,gBAAA,MAAM,UAAU,GAAI,IAA8B,CAAC,IAAI,CAAC,KAAK;AAE7D,gBAAA,IAAI,UAAU,EAAE;oBACd,KAAK,GAAG,UAAU;AACnB,gBAAA;AAAM,qBAAA;oBACL,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACpC,oBAAA,IAA8B,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK;AACnD,gBAAA;AACF,YAAA;YAED,IAAI,CAAC,KAAK,EAAE;gBACV,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACtC,YAAA;AAED,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC;AAClD,QAAA;AAED,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,qBAAqB,CAC3B,aAAsC,EAAA;QAEtC,MAAM,KAAK,GAAa,EAAE;AAE1B,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC7B,YAAA,KAAK,CAAC,IAAI,CACR,YAAY,CAAC,UAAU;AACrB,gBAAA,YAAY,CAAC,EAAE;AACf,gBAAA,IAAI,CAAC,YAAY;AACjB,gBAAA,YAAY,CAAC,WAAW;AACxB,gBAAA,IAAI,CAAC,WAAW;AAChB,gBAAA,YAAY,CAAC,KAAK;gBAClB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAChC;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,kBAAkB,CAAC,WAAmB,EAAA;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;QAEtD,IAAI,CAAC,WAAW,EAAE;YAChB,OAAOP,gBAAG,EAAE;AACb,QAAA;QAED,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,GAChE,WAAW;QAEb,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,mBAAmB,CAAC;QAEvE,IAAI,KAAK,CAAC,MAAM,EAAE;YAChB,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC7B,gBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,UAAU;AACnC,YAAA,CAAC,CAAC;YACF,eAAe,CAAC,KAAK,CAAA,CAAA,yCAAA,EAA4C,KAAK,eAAe,WAAW,CAAA,sCAAA,EAAyC,iBAAiB,CAAA,CAAE;AAC7J,QAAA;AAAM,aAAA,IAAI,iBAAiB,EAAE;AAC5B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;AAE3C,YAAA,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;AACrC,YAAA,eAAe,CAAC,KAAK,CAAA,CAAA,iDAAA,EAAoD,WAAW,qBAAqB;AAC1G,QAAA;AAAM,aAAA;AACL,YAAA,eAAe,CAAC,KAAK,CAAA,CAAA,4BAAA,EAA+B,WAAW,kBAAkB;AAClF,QAAA;AAED,QAAA,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE;YAC7B,KAAK,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,SAAS,GAAG,SAAS;AAC9C,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACzB,QAAA;;;QAID,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAEpC,IAAI,MAAM,CAAC,EAAE,EAAE;YACb,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAC/B,QAAA;AAED,QAAA,OAAO,MAAM;IACf;IAEQ,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;AAEQ,IAAA,SAAS,CAAC,KAAe,EAAA;QAC/B,IAAI,IAAI,GAAG,CAAC;QACZ,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC,CAAC;AAEvE,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,GAAG,aAAa,EAAE;YAC3C,OAAOA,gBAAG,EAAE;AACb,QAAA;AAED,QAAA,IAAI,CAAC,WAAW,IAAI,IAAI;QAExB,OAAOD,eAAE,EAAE;IACb;IAEQ,uBAAuB,CAAC,EAC9B,WAAW,EACX,KAAK,EACL,SAAS,EACT,iBAAiB,EACjB,mBAAmB,GACkB,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG;gBACnC,mBAAmB;gBACnB,iBAAiB;gBACjB,SAAS;gBACT,KAAK;aACN;AACF,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,SAAS,GAAG,SAAS;AACzD,YAAA;AAED,YAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACxD,QAAA;AAED,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC;IAC7C;IAEQ,eAAe,GAAA;AACrB,QAAA,QACE,YAAY,CAAC,QAAQ,GAAG,YAAY,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAE9E;IAEQ,aAAa,CACnB,WAAmB,EACnB,mBAA4B,EAAA;QAE5B,MAAM,UAAU,GAAG;cACf,YAAY,CAAC;AACf,cAAE,YAAY,CAAC,WAAW;AAE5B,QAAA,OAAO,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC;IACrD;AACD;;MCtNY,OAAO,CAAA;AASlB,IAAA,WAAA,CAAY,EACV,WAAW,EACX,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,SAAS,EACT,IAAI,EACJ,mBAAmB,GACG,EAAA;QAZhB,IAAA,CAAA,UAAU,GAA0B,IAAI;AAa9C,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,0FAAA,EAA6F,gBAAgB,yCAAyC;AAC3K,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,sBAAsB,GAAG,sBAAsB;AACpD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC;AAC1C,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;QAE9C,IAAI;AACF,YAAA,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,MAAK;gBACjC,IAAI,CAAC,WAAW,EAAE;YACpB,CAAC,EAAE,gBAAgB,CAAC;AACrB,QAAA;AAAC,QAAA,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,UAAU,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;AAEjD,YAAA,MAAM,GAAG;AACV,QAAA;AACD,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,4FAAA,EAA+F,gBAAgB,yCAAyC;IAC/K;IAEO,eAAe,CACpB,WAAmB,EACnB,iBAA0B,EAAA;QAE1B,eAAe,CAAC,KAAK,CAAA,CAAA,2CAAA,EAA8C,WAAW,CAAA,qBAAA,EAAwB,iBAAiB,GAAG;QAC1H,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,KAAI;YAC/C,YAAY,CAAC,iBAAiB,CAAC,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAC,GAAG,EAAE,iBAAiB,EAAE;AACzE,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC;AAC1C,QAAA,CAAC,CAAC;QACF,eAAe,CAAC,KAAK,CAAA,CAAA,6CAAA,EAAgD,WAAW,CAAA,qBAAA,EAAwB,iBAAiB,GAAG;IAC9H;AAEQ,IAAA,iBAAiB,CAAC,WAAmB,EAAA;;QAC3C,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC;AAC3E,QAAA,MAAM,iBAAiB,GACrB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GACrE,WAAW;QACb,IAAI,mBAAmB,GAAG,KAAK;;;;;AAM/B,QAAA,IAAI,kBAAkB,EAAE;YACtB,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,WAAW,CAAC;AACpE,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,yBAAyB;AAExD,YAAA,IAAI,CAAC,aAAa,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC/C,gBAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CACxB,WAAW,EACX,IAAIa,YAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CACnC;AACF,YAAA;AAAM,iBAAA;gBACL,mBAAmB,GAAG,IAAI;AAC3B,YAAA;AACF,QAAA;AAED,QAAA,OAAO,mBAAmB,IAAI,WAAW,IAAI,iBAAiB;IAChE;AAEQ,IAAA,YAAY,CAAC,WAAmB,EAAA;QACtC,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC;AAElE,QAAA,IAAI,aAAa,EAAE;YACjB,MAAM,aAAa,GAAG,aAAa,CAACL,qBAAa,CAAC,SAAS,CAAC;AAE5D,YAAA,IAAI,aAAa,EAAE;gBACjB,OAAO,aAAa,CAAC,KAAK;AAC3B,YAAA;AACF,QAAA;AAED,QAAA,OAAO,SAAS;IAClB;IAEa,WAAW,GAAA;;YACtB,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;AAEjD,YAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE;gBACrB;AACD,YAAA;AAED,YAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,aAAa,CAAC,IAAI;AAChD,YAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACxC,CAAC,CAAA;AAAA,IAAA;IAEY,kBAAkB,CAC7B,WAAmB,EACnB,iBAA0B,EAAA;;YAE1B,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;AAEjD,YAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE;gBACrB;AACD,YAAA;AAED,YAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,GAAG,EAAE,iBAAiB,EAAE,EAAE,CAAC;QACrE,CAAC,CAAA;AAAA,IAAA;AAEa,IAAA,QAAQ,CACpB,iBAAwC,EAAA;;YAExC,MAAM,WAAW,GAAoB,EAAE;YACvC,MAAM,oBAAoB,GAAa,EAAE;YAEzC,MAAM,eAAe,GAGf,EAAE;AAER,YAAA,KAAK,MAAM,CAAC,WAAW,EAAE,EAAE,iBAAiB,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAC/D,iBAAiB,CAClB,EAAE;AACD,gBAAA,IAAI,iBAAiB,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG;AAChD,sBAAE,WAAW,CAAC,SAAS,CAAC,CAAC;sBACvB,WAAW;gBAEf,MAAM,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;gBACrE,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC;gBAEtD,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAC3C,iBAAiB,EACjB,iBAAiB,CAClB;gBACD,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAC/C,iBAAiB,EACjB,iBAAiB,CAClB;AAED,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AACvC,oBAAA,WAAW,EAAE,iBAAiB;oBAC9B,aAAa;oBACb,WAAW;oBACX,SAAS;oBACT,iBAAiB;oBACjB,mBAAmB;AACpB,iBAAA,CAAC;gBAEF,IAAI,MAAM,CAAC,EAAE,EAAE;oBACb,WAAW,CAAC,iBAAiB,CAAC,GAAG;wBAC/B,WAAW;wBACX,aAAa;qBACd;oBACD,eAAe,CAAC,IAAI,CAAC;AACnB,wBAAA,WAAW,EAAE,iBAAiB;wBAC9B,iBAAiB;AAClB,qBAAA,CAAC;AACF,oBAAA,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC;AACvC,gBAAA;AAAM,qBAAA;oBACL,eAAe,CAAC,OAAO,CACrB,yGAAyG;AACvG,wBAAA,yFAAyF,CAC5F;oBACD;AACD,gBAAA;AACF,YAAA;AAED,YAAA,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;AAElE,YAAA,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,KAAI;AAC/C,oBAAA,oBAAoB,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AAC3C,wBAAA,OAAO,YAAY,CAAC,iBAAiB,CAAC,WAAW,CAAC;AACpD,oBAAA,CAAC,CAAC;AACF,oBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC;AAC1C,gBAAA,CAAC,CAAC;AACH,YAAA;YAED,IAAI,CAAC,IAAI,EAAE;gBACT;AACD,YAAA;AAED,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC;YAE7D,IAAI,MAAM,CAAC,EAAE,EAAE;gBACb,eAAe,CAAC,IAAI,CAAA,CAAA,0CAAA,EAA6C,eAAe,CAAA,QAAA,EAAW,WAAW,EAAE;gBACxG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAEJ,sBAAc,CAAC,IAAI,CAAC;AACxD,YAAA;AAAM,iBAAA;AACL,gBAAA,eAAe,CAAC,KAAK,CAAC,yBAAyB,CAAC;gBAChD,eAAe,CAAC,IAAI,CAAA,CAAA,sCAAA,EAAyC,eAAe,CAAA,QAAA,EAAW,WAAW,EAAE;gBACpG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAEA,sBAAc,CAAC,MAAM,CAAC;gBAEzD,IAAI,kBAAkB,GAA0B,EAAE;gBAClD,KAAK,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE,IAAI,eAAe,EAAE;AAC9D,oBAAA,WAAW,GAAG,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE;oBAC/B,kBAAkB,CAAC,WAAW,CAAC,GAAG;AAChC,wBAAA,iBAAiB,EAAE,iBAAiB;qBACrC;AACF,gBAAA;AACD,gBAAA,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC;AAC/C,YAAA;QACH,CAAC,CAAA;AAAA,IAAA;AAEO,IAAA,qBAAqB,CAC3B,kBAAyC,EAAA;QAEzC,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;AAEjD,QAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE;YACrB;AACD,QAAA;AAED,QAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,aAAa,CAAC,IAAI;AAEhD,QAAA,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO,CACxC,CAAC,CAAC,WAAW,EAAE,EAAE,iBAAiB,EAAE,CAAC,KAAI;AACvC,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE;AACnC,gBAAA,iBAAiB,CAAC,WAAW,CAAC,GAAG,EAAE,iBAAiB,EAAE;AACvD,YAAA;AACH,QAAA,CAAC,CACF;AAED,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AACzB,YAAA,iBAAiB,EAAE,iBAAiB;AACjB,SAAA,CAAC;IACxB;IAEQ,gBAAgB,CACtB,IAAqB,EACrB,MAAsB,EAAA;QAEtB,IAAI,WAAW,GAAmD,EAAE;AAEpE,QAAA,KAAK,MAAM,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CACxE,IAAI,CACL,EAAE;YACD,MAAM,oBAAoB,GAAG;AAC1B,iBAAA,MAAM,CAAC,CAAC,QAAQ,KAAK,EAAE,QAAQ,YAAY,UAAU,CAAC;AACtD,iBAAA,GAAG,CAAC,CAAC,QAAQ,KAAI;gBAChB,MAAM,IAAI,GAAG,QAA6B;AAC1C,gBAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC,CAAC;YAEJ,IAAI,oBAAoB,CAAC,MAAM,EAAE;AAC/B,gBAAA,WAAW,CAAC,WAAW,CAAC,GAAG,oBAAoB;AAChD,YAAA;AAED,YAAA,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,KAClD,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAC9B;AAED,YAAA,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC;gBAC3C,WAAW;gBACX,gBAAgB;gBAChB,MAAM;AACP,aAAA,CAAC;AACH,QAAA;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YACzC;AACD,QAAA;AAED,QAAA,IAAI,MAAM,KAAKA,sBAAc,CAAC,IAAI,EAAE;AAClC,YAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,WAAW,CAAC;AAC/C,QAAA;AAAM,aAAA;YACL,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC;AAC/C,QAAA;IACH;IAEQ,oBAAoB,CAC1B,WAAmB,EACnB,iBAA0B,EAAA;QAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;QAC9D,MAAM,UAAU,GAAuC,EAAE;AAEzD,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACtB,YAAA,OAAO,EAAE;AACV,QAAA;AAED,QAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBACb;AACD,YAAA;AACD,YAAA,IACE,CAAC,iBAAiB;AAClB,iBAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,0BAA0B;AACnD,oBAAA,IAAI,YAAY,UAAU;oBAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,KAAKI,qBAAa,CAAC,UAAU,CAAC,EAC9C;gBACA;AACD,YAAA;AAED,YAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AACtB,QAAA;QAED,IAAI,UAAU,CAAC,MAAM,EAAE;YACrB,MAAM,WAAW,GAAwB;AACtC,iBAAA,MAAM,CAAC,CAAC,IAAI,KAAK,EAAE,IAAI,YAAY,UAAU,CAAC;AAC9C,iBAAA,GAAG,CAAC,CAAC,IAAI,KAAI;gBACZ,MAAM,IAAI,GAAG,IAAyB;AACtC,gBAAA,IAAI,CAAC,MAAM,GAAGJ,sBAAc,CAAC,OAAO;AACpC,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC,CAAC;AAEJ,YAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;gBAChC,CAAC,WAAW,GAAG,WAAW;AAC3B,aAAA,CAAC;AACH,QAAA;AAED,QAAA,OAAO,UAAU;IACnB;IAEQ,sBAAsB,CAC5B,WAAmB,EACnB,iBAA0B,EAAA;QAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,WAAW,CAAC;AACzE,QAAA,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU;AAE3C,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACtB,YAAA,OAAO,EAAE;AACV,QAAA;QAED,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AAC5C,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,IAAI,iBAAiB;AAE3D,YAAA,IAAI,UAAU,EAAE;gBACd,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACjD,YAAA;AAED,YAAA,OAAO,UAAU;AACnB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC;YAC3C,WAAW;AACX,YAAA,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAC/C,MAAM,EAAEA,sBAAc,CAAC,OAAO;AAC/B,SAAA,CAAC;AAEF,QAAA,OAAO,UAAU;IACnB;AACD;;ACnRD;;;;AAIG;MACU,eAAe,CAAA;AAe1B;;AAEG;IACH,WAAA,CAAY,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,QAAQ,GACU,EAAA;;QAhBV,IAAA,CAAA,WAAW,GAAY,KAAK;AAiBpC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,sBAAsB,GAAG,EAAS;AACvC,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAS;AACpC,YAAA,IAAI,CAAC,WAAW,GAAG,EAAS;AAC5B,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAS;AACnC,YAAA,IAAI,CAAC,aAAa,GAAG,EAAS;AAC9B,YAAA,IAAI,CAAC,SAAS,GAAG,EAAS;AAC1B,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAS;AACpC,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAS;AACnC,YAAA,IAAI,CAAC,YAAY,GAAG,EAAS;AAC7B,YAAA,IAAI,CAAC,OAAO,GAAG,EAAS;AACxB,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;YACrB;AACD,QAAA;QACD,MAAM,MAAM,GAAG,qBAAqB,KAAA,IAAA,IAArB,qBAAqB,KAAA,MAAA,GAAA,MAAA,GAArB,qBAAqB,CAAE,SAAS,CAAC,cAAc;AAC9D,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC;AAClC,QAAA;AACD,QAAA,wBAAwB,CAAC,2BAA2B,CAClD,IAAI,gBAAgB,EAAE,CACvB;QACD,eAAe,CAAC,KAAK,CAAA,CAAA,oCAAA,EAAuC,QAAQ,mBAAmB,YAAY,CAAA,iBAAA,EAAoB,aAAa,CAAA,CAAA,CAAG;AAEvI,QAAA,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI,cAAc,CACrD,QAAQ,EACR,aAAa,CACd;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,WAAW;AAC7C,QAAA,MAAM,EACJ,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,GAClB,GAAG,qBAAqB,CAAC,SAAS;AAEnC,QAAA,MAAM,EAAE,kBAAkB,EAAE,GAAG,qBAAqB,CAAC,QAAQ;AAC7D,QAAA,MAAM,aAAa,GAAG,IAAI,YAAY,CACpC,qBAAqB,CACtB;QAED,MAAM,iBAAiB,GAAG,IAAI,WAAW,CACvC,eAAe,EACfe,2BAAmB,CAAC,UAAU,CAC/B;QAED,MAAM,oBAAoB,GAAG,IAAI,WAAW,CAC1C,eAAe,EACfA,2BAAmB,CAAC,aAAa,CAClC;QACD,MAAM,0BAA0B,GAC9B,IAAI,WAAW,CACb,eAAe,EACfA,2BAAmB,CAAC,yBAAyB,CAC9C;QACH,MAAM,6BAA6B,GACjC,IAAI,WAAW,CACb,eAAe,EACfA,2BAAmB,CAAC,sBAAsB,CAC3C;QACH,MAAM,kBAAkB,GAAG,IAAI,WAAW,CACxC,eAAe,EACfA,2BAAmB,CAAC,WAAW,CAChC;QACD,MAAM,eAAe,GAAG,IAAI,WAAW,CACrC,eAAe,EACfA,2BAAmB,CAAC,YAAY,CACjC;QAED,IAAI,WAAW,GAAG,iBAAiB;QACnC,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,oBAAoB,GAAG,IAAI,WAAW,CAC1C,eAAe,EACfA,2BAAmB,CAAC,aAAa,CAClC;YACD,MAAM,eAAe,GAAG,IAAI,WAAW,CACrC,eAAe,EACfA,2BAAmB,CAAC,QAAQ,CAC7B;YAED,WAAW,GAAG,IAAI,WAAW,CAAC;AAC5B,gBAAA,WAAW,EAAE,oBAAoB;AACjC,gBAAA,WAAW,EAAE,eAAe;gBAC5B,eAAe,EAAE,cAAc,CAAC,eAAe;AAC/C,gBAAA,WAAW,EAAE,mBAAmB;AACjC,aAAA,CAAC;AACH,QAAA;AAED,QAAA,MAAM,WAAW,GAAG,CAAA,EAAA,GAAA,YAAY,aAAZ,YAAY,KAAA,MAAA,GAAA,MAAA,GAAZ,YAAY,CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,WAAW,EAAE;QAElE,WAAW,CAAC,UAAU,CAAC;YACrB,MAAM,EAAE,cAAc,CAAC,aAAa;YACpC,QAAQ,EAAE,cAAc,CAAC,QAAQ;AACjC,YAAA,WAAW,EAAE,mBAAmB;YAChC,WAAW,EAAE,cAAc,CAAC,WAAW;AACxC,SAAA,CAAC;AAEF,QAAA,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;YAC9B,WAAW;YACX,kBAAkB;AAClB,YAAA,WAAW,EAAE,mBAAmB;AAChC,YAAA,iBAAiB,EAAE,iBAAiB;YACpC,cAAc,EAAE,cAAc,CAAC,cAAc;YAC7C,eAAe,EAAE,cAAc,CAAC,eAAe;AAChD,SAAA,CAAC;AAEF,QAAA,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAAC;YAC3C,QAAQ,EAAE,cAAc,CAAC,QAAQ;YACjC,mBAAmB;YACnB,WAAW;AACZ,SAAA,CAAC;AAEF,QAAA,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE;AAEvC,QAAA,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CAAC;YAClD,WAAW;AACX,YAAA,OAAO,EAAE,iBAAiB;YAC1B,cAAc,EAAE,cAAc,CAAC,cAAc;YAC7C,WAAW;YACX,YAAY;YACZ,SAAS;YACT,WAAW;YACX,0BAA0B;YAC1B,mBAAmB;AACnB,YAAA,eAAe,EAAE,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAE,eAAe;AAChD,SAAA,CAAC;AAEF,QAAA,MAAM,sBAAsB,GAAG,IAAI,sBAAsB,CACvD,oBAAoB,EACpB,0BAA0B,EAC1B,6BAA6B,EAC7B,0BAA0B,EAC1B,mBAAmB,CACpB;AAED,QAAA,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;YAC1B,WAAW;YACX,eAAe;YACf,sBAAsB;YACtB,SAAS;YACT,gBAAgB,EAAE,cAAc,CAAC,gBAAgB;AACjD,YAAA,IAAI,EAAE,YAAY;YAClB,mBAAmB;AACpB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,sBAAsB,GAAG,sBAAsB;AACpD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;AAC9C,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;AAC9C,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,kBAAkB,GAAG,0BAA0B;AACpD,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAEhC,QAAA,IAAI,cAAc,CAAC,eAAe,KAAK,IAAI,EAAE;YAC3C,IAAI,qBAAqB,CACvB,eAAe,EACf,cAAc,CAAC,eAAe,CAC/B;AACF,QAAA;QACD,eAAe,CAAC,KAAK,CAAA,CAAA,sCAAA,EAAyC,QAAQ,mBAAmB,YAAY,CAAA,iBAAA,EAAoB,aAAa,CAAA,CAAA,CAAG;IAC3I;IAEa,UAAU,GAAA;;YACrB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,KAAK;AACb,YAAA;AACD,YAAA,eAAe,CAAC,IAAI,CAAC,oCAAoC,CAAC;YAC1D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE;YAC1D,MAAM,CAAC,KAAK,EAAE;AAEd,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YAEvB,eAAe,CAAC,IAAI,CAAA,CAAA,iDAAA,EAAoD,MAAM,CAAC,EAAE,GAAG;YACpF,OAAO,MAAM,CAAC,EAAE;QAClB,CAAC,CAAA;AAAA,IAAA;AAEM,IAAA,OAAO,CAAC,WAAmB,EAAE,GAAG,IAAyB,EAAA;QAC9D,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,IAAI,cAAc,CAACxB,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;QACD,eAAe,CAAC,IAAI,CAAA,CAAA,2CAAA,EAA8C,WAAW,CAAA,QAAA,EAAW,IAAI,GAAG;QAC/F,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;AAEhE,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;QACxD,eAAe,CAAC,IAAI,CAAA,CAAA,6CAAA,EAAgD,WAAW,CAAA,QAAA,EAAW,IAAI,GAAG;IACnG;IAEa,oBAAoB,CAAC,EAChC,WAAW,EACX,aAAa,GAAG,IAAI,EACpB,OAAO,GAAG,4BAA4B,GACV,EAAA;;YAC5B,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,YAAA;YACD,eAAe,CAAC,IAAI,CAAA,CAAA,wDAAA,EAA2D,WAAW,oBAAoB,aAAa,CAAA,WAAA,EAAc,OAAO,CAAA,CAAA,CAAG;AACnJ,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,gBAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,YAAA;YAED,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;AAEhE,YAAA,MAAM,EAAE,mBAAmB,EAAE,GAAG,OAAO;YAEvC,IACE,OAAO,mBAAmB,KAAK,QAAQ;iBACtC,mBAAmB,GAAG,CAAC,IAAI,mBAAmB,GAAG,EAAE,CAAC,EACrD;AACA,gBAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,WAAW,CAAC;AACzD,YAAA;YAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC;YAE3E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;gBACjD,WAAW;gBACX,OAAO;AACP,gBAAA,mBAAmB,EAAE,kBAAkB;AACxC,aAAA,CAAC;AACF,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE;AAE3B,YAAA,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,iBAAiB,EAAE,GACtE,MAAM,CAAC,gBAAgB,CAAC;gBACtB,IAAI;gBACJ,OAAO;gBACP,WAAW;gBACX,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;AACpD,aAAA,CAAC;AAEJ,YAAA,KAAK,MAAM,QAAQ,IAAI,kBAAkB,EAAE;gBACzC,IAAI,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE;AACtE,oBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC;AACpC,gBAAA;AACF,YAAA;;;YAID,IAAI,UAAU,IAAI,aAAa,EAAE;AAC/B,gBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC;AACtC,YAAA;YAED,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,WAAW,KAAI,iBAAiB,EAAE;gBAC7C,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,CAAC;AACtE,YAAA;AAED,YAAA,eAAe,CAAC,IAAI,CAAA,CAAA,0DAAA,EAA6D,WAAW,CAAA,iBAAA,EAAoB,aAAa,CAAA,WAAA,EAAc,OAAO,CAAA,mBAAA,EAAsB,WAAW,CAAA,CAAA,CAAG;AACtL,YAAA,OAAO,WAAW;QACpB,CAAC,CAAA;AAAA,IAAA;IAEM,eAAe,CAAC,EACrB,WAAW,EACX,MAAM,EACN,QAAQ,EACR,OAAO,EACP,QAAQ,GACkB,EAAA;QAC1B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;AACD,QAAA;AACD,QAAA,eAAe,CAAC,IAAI,CAAA,CAAA,mDAAA,EAAsD,WAAW,CAAA,UAAA,EAAa,MAAM,CAAA,YAAA,EAAe,QAAQ,CAAA,WAAA,EAAc,OAAO,CAAA,YAAA,EAAe,QAAQ,GAAG;AAC9K,QAAA,IAAI,CAAC,OAAO,CACV,WAAW,EACX,IAAIsB,YAAU,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CACxD;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AACvB,QAAA,eAAe,CAAC,IAAI,CAAA,CAAA,qDAAA,EAAwD,WAAW,CAAA,UAAA,EAAa,MAAM,CAAA,YAAA,EAAe,QAAQ,CAAA,WAAA,EAAc,OAAO,CAAA,YAAA,EAAe,QAAQ,GAAG;IAClL;AAEO,IAAA,KAAK,CAAC,MAAiC,EAAA;;QAC5C,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,IAAI,cAAc,CAACtB,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;AACD,QAAA,IAAI,WAA+B;QACnC,IAAI,SAAS,GAAY,KAAK;AAC9B,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YAC9B,WAAW,GAAG,MAAM;AACrB,QAAA;AAAM,aAAA,IAAI,MAAM,EAAE;AACjB,YAAA,WAAW,GAAG,MAAM,CAAC,WAAW;AAChC,YAAA,SAAS,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK;AACpC,QAAA;QAED,eAAe,CAAC,IAAI,CAAA,CAAA,yCAAA,EAA4C,WAAW,CAAA,WAAA,EAAc,SAAS,GAAG;AACrG,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;AAED,QAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;YACnC,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;AAChE,YAAA,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC7B,WAAW,EACX,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CACrC;AACF,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAC1B,WAAW,EACX,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CACrC;AACF,YAAA;AACF,QAAA;AAAM,aAAA;YACL,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE;AAChE,gBAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAC1B,cAAc,EACd,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CACxC;AACF,YAAA;YACD,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,sBAAsB,CAAC,yBAAyB,EAAE,EAAE;AACpF,gBAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAC1B,cAAc,EACd,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CACxC;AACF,YAAA;AACD,YAAA,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AAC3B,YAAA;AACF,QAAA;QAED,eAAe,CAAC,IAAI,CAAA,CAAA,2CAAA,EAA8C,WAAW,CAAA,WAAA,EAAc,SAAS,GAAG;IACzG;IAEO,eAAe,GAAA;QACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;AACD,QAAA,eAAe,CAAC,IAAI,CAAC,yCAAyC,CAAC;AAC/D,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;AAED,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY;QAC1D,MAAM,kBAAkB,GAAsB,EAAE;QAEhD,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAI;YAC1C,kBAAkB,CAAC,IAAI,CAAC;gBACtB,EAAE;AACF,gBAAA,GAAG,EAAE,UAAU;AAChB,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,eAAe,CAAC,IAAI,CAAA,CAAA,4DAAA,EAA+D,kBAAkB,GAAG;AACxG,QAAA,OAAO,kBAAkB;IAC3B;AAEO,IAAA,sBAAsB,CAAC,WAAmB,EAAA;QAC/C,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;AACD,QAAA,eAAe,CAAC,IAAI,CAAA,CAAA,0DAAA,EAA6D,WAAW,GAAG;AAC/F,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;QAED,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;QAEhE,MAAM,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC;QACtE,MAAM,kBAAkB,GAAsB,EAAE;QAEhD,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,KAAI;YACzD,kBAAkB,CAAC,IAAI,CAAC;AACtB,gBAAA,EAAE,EAAE,aAAa;AACjB,gBAAA,GAAG,EAAE,UAAU;AAChB,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,eAAe,CAAC,IAAI,CAAA,CAAA,4DAAA,EAA+D,WAAW,CAAA,oBAAA,EAAuB,kBAAkB,GAAG;AAC1I,QAAA,OAAO,kBAAkB;IAC3B;IAEO,YAAY,CAAC,EAClB,WAAW,EACX,UAAU,EACV,KAAK,GAAG,IAAI,GACW,EAAA;QACvB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;QACD,eAAe,CAAC,IAAI,CAAA,CAAA,gDAAA,EAAmD,WAAW,iBAAiB,UAAU,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA,CAAG;QACjI,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;AAEhE,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAC1C,WAAW;YACX,UAAU;YACV,KAAK;SACN,CAAC,CAAC,KAAK,EAAE;AAEV,QAAA,eAAe,CAAC,IAAI,CAAA,CAAA,kDAAA,EAAqD,WAAW,CAAA,cAAA,EAAiB,UAAU,CAAA,SAAA,EAAY,KAAK,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAA,CAAG;AAChK,QAAA,OAAO,SAAS;IAClB;IAEO,aAAa,CAAC,EACnB,WAAW,EACX,UAAU,GAAG,KAAK,EAClB,KAAK,GAAG,IAAI,GACY,EAAA;QACxB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;QACD,eAAe,CAAC,IAAI,CAAA,CAAA,iDAAA,EAAoD,WAAW,iBAAiB,UAAU,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA,CAAG;QAClI,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;AAEhE,QAAA,MAAM,UAAU,GAA2B,IAAI,GAAG,EAAE;AACpD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY;AAE1D,QAAA,KAAK,MAAM,WAAW,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE;YAC/C,IAAI;AACF,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC;oBAC1C,WAAW;oBACX,UAAU,EAAE,WAAW,CAAC,UAAU;oBAClC,KAAK;AACN,iBAAA,CAAC;gBACF,IACE,SAAS,CAAC,EAAE;qBACX,CAAC,UAAU,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,iBAAiB,CAAC,EACzD;oBACA,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC;AACvD,gBAAA;AACF,YAAA;AAAC,YAAA,OAAO,GAAG,EAAE;gBACZ,IACE,GAAG,YAAY,cAAc;AAC7B,oBAAA,GAAG,CAAC,IAAI,KAAKA,0BAAkB,CAAC,8BAA8B,EAC9D;AACA,oBAAA,MAAM,GAAG;AACV,gBAAA;AACF,YAAA;AACF,QAAA;AAED,QAAA,eAAe,CAAC,IAAI,CAAA,CAAA,mDAAA,EAAsD,WAAW,CAAA,cAAA,EAAiB,UAAU,CAAA,SAAA,EAAY,KAAK,CAAA,kBAAA,EAAqB,UAAU,CAAA,CAAA,CAAG;AAEnK,QAAA,OAAO,UAAU;IACnB;AAEO,IAAA,qBAAqB,CAC1B,WAAmB,EAAA;QAEnB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;AACD,QAAA,eAAe,CAAC,IAAI,CAAA,CAAA,yDAAA,EAA4D,WAAW,GAAG;AAE9F,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;QAED,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;QAEhE,MAAM,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC;AACtE,QAAA,MAAM,iBAAiB,GAAwC,IAAI,GAAG,EAAE;AAExE,QAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;YACrC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,SAAS;YAEzE,IAAI,SAAS,GAA0B,EAAE;AAEzC,YAAA,IAAI,WAAW,KAAK,IAAI,IAAI,YAAY,KAAK,IAAI,EAAE;AACjD,gBAAA,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC;oBACpC,WAAW;oBACX,UAAU;oBACV,YAAY;AACb,iBAAA,CAAC;AACH,YAAA;YAED,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,KAC7C,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAC9C;AAED,YAAA,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE;AAC1C,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,EAAE,EAAE,WAAW;gBACf,YAAY;AACZ,gBAAA,SAAS,EAAE,eAAe;AAC3B,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,eAAe,CAAC,IAAI,CAAA,CAAA,2DAAA,EAA8D,WAAW,CAAA,oBAAA,EAAuB,iBAAiB,GAAG;AAExI,QAAA,OAAO,iBAAiB;IAC1B;IAEO,0BAA0B,CAC/B,WAAmB,EACnB,UAAkB,EAAA;QAElB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;QACD,eAAe,CAAC,IAAI,CAAA,CAAA,8DAAA,EAAiE,WAAW,CAAA,cAAA,EAAiB,UAAU,GAAG;QAC9H,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;AAEhE,QAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC;YACxC,WAAW;YACX,UAAU;AACV,YAAA,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC,KAAK,EAAE;QAEV,eAAe,CAAC,IAAI,CAAA,CAAA,gEAAA,EAAmE,WAAW,iBAAiB,UAAU,CAAA,oBAAA,EAAuB,GAAG,CAAA,CAAA,CAAG;AAC1J,QAAA,OAAO,GAAG;IACZ;AAEO,IAAA,sBAAsB,CAAC,EAC5B,WAAW,EACX,UAAU,EACV,WAAW,GACsB,EAAA;QACjC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;QACD,eAAe,CAAC,IAAI,CAAA,CAAA,0DAAA,EAA6D,WAAW,iBAAiB,UAAU,CAAA,eAAA,EAAkB,WAAW,CAAA,CAAA,CAAG;QACvJ,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;QAEhE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC;YACtD,WAAW;YACX,UAAU;AACV,YAAA,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC,KAAK,EAAE;AAEV,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAC1C,WAAW;YACX,UAAU;YACV,YAAY;AACb,SAAA,CAAC;AACF,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,WAAW,CAAC;QAEnE,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,cAAc,CACtBA,0BAAkB,CAAC,2BAA2B,EAC9C,WAAW,EACX,WAAW,CACZ;AACF,QAAA;AAED,QAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE;AAErE,QAAA,MAAM,mBAAmB,GAAG,EAAE,IAAI,EAAE,KAAK,EAA6B;AACtE,QAAA,eAAe,CAAC,IAAI,CAAA,CAAA,4DAAA,EAA+D,WAAW,CAAA,cAAA,EAAiB,UAAU,CAAA,eAAA,EAAkB,WAAW,CAAA,2BAAA,EAA8B,mBAAmB,CAAA,CAAA,CAAG;AAC1M,QAAA,OAAO,mBAAmB;IAC5B;IAEO,uBAAuB,CAC5B,WAAmB,EACnB,UAAkB,EAAA;QAElB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;QACD,eAAe,CAAC,IAAI,CAAA,CAAA,2DAAA,EAA8D,WAAW,CAAA,cAAA,EAAiB,UAAU,GAAG;QAC3H,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;QAEhE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC;YACtD,WAAW;YACX,UAAU;AACV,YAAA,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC,KAAK,EAAE;AAEV,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAC1C,WAAW;YACX,UAAU;YACV,YAAY;AACb,SAAA,CAAC;QACF,MAAM,eAAe,GAAgC,EAAE;AAEvD,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,MAAM,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE;AACpE,YAAA,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;AACrC,QAAA;QAED,eAAe,CAAC,IAAI,CAAA,CAAA,6DAAA,EAAgE,WAAW,iBAAiB,UAAU,CAAA,4BAAA,EAA+B,eAAe,CAAA,CAAA,CAAG;AAC3K,QAAA,OAAO,eAAe;IACxB;IAQO,mBAAmB,CACxB,UAAkD,EAClD,WAAoB,EAAA;QAEpB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;AACD,QAAA,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC;AAErD,QAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,WAAW,GAAG,UAAU;YACxB,UAAU,GAAG,WAAY;AAC1B,QAAA;AAAM,aAAA;AACL,YAAA,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG;AAC1B,gBAAA,UAAU,CAAC,WAAW;AACtB,gBAAA,UAAU,CAAC,UAAU;aACtB;AAED,YAAA,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE;AAClC,gBAAA,KAAK,GAAG,UAAU,CAAC,KAAK;AACzB,YAAA;AACF,QAAA;QACD,eAAe,CAAC,IAAI,CAAA,CAAA,uDAAA,EAA0D,WAAW,iBAAiB,UAAU,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA,CAAG;QAEvI,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;QAEhE,IAAI;AACF,YAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC;gBACxC,WAAW;gBACX,UAAU;gBACV,KAAK;aACN,CAAC,CAAC,KAAK,EAAE;AAEV,YAAA,MAAM,QAAQ,GAAG,GAAG,KAAK,iBAAiB;AAE1C,YAAA,eAAe,CAAC,IAAI,CAAA,CAAA,yDAAA,EAA4D,WAAW,CAAA,cAAA,EAAiB,UAAU,CAAA,SAAA,EAAY,KAAK,CAAA,gBAAA,EAAmB,QAAQ,CAAA,CAAA,CAAG;AACrK,YAAA,OAAO,QAAQ;AAChB,QAAA;AAAC,QAAA,OAAO,GAAG,EAAE;YACZ,IACE,GAAG,YAAY,cAAc;AAC7B,gBAAA,GAAG,CAAC,IAAI,KAAKA,0BAAkB,CAAC,8BAA8B,EAC9D;gBACA,eAAe,CAAC,IAAI,CAAA,CAAA,yDAAA,EAA4D,WAAW,iBAAiB,UAAU,CAAA,SAAA,EAAY,KAAK,CAAA,sBAAA,CAAwB;AAC/J,gBAAA,OAAO,KAAK;AACb,YAAA;AAED,YAAA,MAAM,GAAG;AACV,QAAA;IACH;AAEa,IAAA,aAAa,CAAC,GAAW,EAAA;;YACpC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,IAAI;AACZ,YAAA;AACD,YAAA,eAAe,CAAC,IAAI,CAAA,CAAA,yCAAA,EAA4C,GAAG,GAAG;YACtE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC;YAC1D,eAAe,CAAC,IAAI,CAAA,CAAA,2CAAA,EAA8C,GAAG,CAAA,kBAAA,EAAqB,UAAU,GAAG;AACvG,YAAA,OAAO,UAAU,CAAC,KAAK,EAAE;QAC3B,CAAC,CAAA;AAAA,IAAA;AAEY,IAAA,2BAA2B,CAAC,EACvC,WAAW,EACX,eAAe,EACf,YAAY,GAC0B,EAAA;;YACtC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,IAAI;AACZ,YAAA;YACD,eAAe,CAAC,IAAI,CAAA,CAAA,+DAAA,EAAkE,WAAW,sBAAsB,eAAe,CAAA,gBAAA,EAAmB,YAAY,CAAA,CAAA,CAAG;YACxK,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;YAEhE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,WAAW,CAAC;YAElE,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,MAAM,IAAI,cAAc,CACtBA,0BAAkB,CAAC,UAAU,EAC7B,CAAA,kBAAA,EAAqB,YAAY,IAAI,WAAW,CAAA,IAAA,CAAM,CACvD;AACF,YAAA;AAED,YAAA,IACE,CAAC,IAAI,CAAC,sBAAsB,CAAC;AAC7B,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EACtD;gBACA,eAAe,CAAC,IAAI,CAAA,CAAA,iEAAA,EAAoE,WAAW,sBAAsB,eAAe,CAAA,gBAAA,EAAmB,YAAY,CAAA,uBAAA,CAAyB;AAChM,gBAAA,OAAO,IAAI;AACZ,YAAA;AAED,YAAA,MAAM,UAAU,GAAG,IAAIkB,YAAU,CAC/B,eAAe,EACf,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAC7C;YAED,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC;AAEnD,YAAA,eAAe,CAAC,IAAI,CAAA,CAAA,iEAAA,EAAoE,WAAW,CAAA,mBAAA,EAAsB,eAAe,CAAA,gBAAA,EAAmB,YAAY,CAAA,kBAAA,EAAqB,UAAU,CAAA,CAAA,CAAG;AACzM,YAAA,OAAO,UAAU;QACnB,CAAC,CAAA;AAAA,IAAA;IAEM,OAAO,CACZ,KAAQ,EACR,QAA8B,EAAA;QAE9B,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,IAAI,cAAc,CAAClB,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;AACD,QAAA,eAAe,CAAC,IAAI,CAAA,CAAA,qCAAA,EAAwC,KAAK,aAAa;AAC9E,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,MAAM,IAAI,cAAc,CAACA,0BAAkB,CAAC,cAAc,CAAC;AAC5D,QAAA;QAED,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC;AAClD,QAAA,eAAe,CAAC,IAAI,CAAA,CAAA,uCAAA,EAA0C,KAAK,aAAa;IAClF;AAEO,IAAA,qBAAqB,CAAC,WAAmB,EAAA;QAC9C,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,OAAO,EAAE;AACV,QAAA;AACD,QAAA,eAAe,CAAC,IAAI,CAAA,CAAA,yDAAA,EAA4D,WAAW,GAAG;QAC9F,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;AAEhE,QAAA,MAAM,YAAY,GAAG,SAAS,CAAC,eAAe,CAC5C,IAAI,CAAC,aAAa,EAClB,WAAW,CACZ;QACD,eAAe,CAAC,IAAI,CAAA,CAAA,2DAAA,EAA8D,WAAW,CAAA,oBAAA,EAAuB,YAAY,GAAG;AACnI,QAAA,OAAO,YAAY;IACrB;IAEO,aAAa,GAAA;QAClB,eAAe,CAAC,KAAK,CAAA,CAAA,8DAAA,EAAiE,IAAI,CAAC,WAAW,GAAG;QACzG,OAAO,IAAI,CAAC,WAAW;IACzB;AAEO,IAAA,WAAW,CAAC,KAAe,EAAA;AAChC,QAAA,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;IACpC;IAEO,kBAAkB,CAAC,EACxB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,cAAc,GAAG,IAAI,GACY,EAAA;QACjC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;AACD,QAAA;AACD,QAAA,eAAe,CAAC,IAAI,CAAA,CAAA,uDAAA,EAA0D,WAAW,CAAA,iBAAA,EAAoB,YAAY,CAAA,iBAAA,EAAoB,YAAY,CAAA,mBAAA,EAAsB,cAAc,CAAA,CAAA,CAAG;QAEhM,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;QAEhE,IAAI,CAAC,mBAAmB,CAAC;YACvB,WAAW;YACX,YAAY;YACZ,YAAY;YACZ,cAAc;SACf,CAAC,CAAC,KAAK,EAAE;AAEV,QAAA,eAAe,CAAC,IAAI,CAAA,CAAA,yDAAA,EAA4D,WAAW,CAAA,iBAAA,EAAoB,YAAY,CAAA,iBAAA,EAAoB,YAAY,CAAA,mBAAA,EAAsB,cAAc,CAAA,CAAA,CAAG;IACpM;AAEO,IAAA,iBAAiB,CAAC,WAAmB,EAAA;QAC1C,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;AACD,QAAA;AACD,QAAA,eAAe,CAAC,IAAI,CAAA,CAAA,qDAAA,EAAwD,WAAW,GAAG;QAC1F,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;QAEhE,MAAM,gBAAgB,GAAsB,EAAE;QAE9C,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC;QAClE,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE;AAC9D,YAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;gBAC7B;AACD,YAAA;AAED,YAAA,MAAM,eAAe,GAAG,SAAS,CAAC,cAAc,CAAC;gBAC/C,OAAO;gBACP,WAAW;gBACX,aAAa;AACb,gBAAA,YAAY,EAAE,IAAI;gBAClB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;gBAC7C,WAAW,EAAE,IAAI,CAAC,mBAAmB;gBACrC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;AACpD,aAAA,CAAC;YAEF,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,IAAI,eAAe,CAAC,IAAI;AAE7D,YAAA,IAAI,UAAU,EAAE;gBACd,eAAe,CAAC,IAAI,CAAA,CAAA,QAAA,EAAW,WAAW,CAAA,uBAAA,EAA0B,OAAO,EAAE;AAC7E,gBAAA,gBAAgB,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/D,YAAA;AACF,QAAA;AAED,QAAA,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;YACjC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,gBAAgB,CAAC;AAC7D,QAAA;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AAEvB,QAAA,eAAe,CAAC,IAAI,CAAA,CAAA,uDAAA,EAA0D,WAAW,GAAG;IAC9F;IAEO,WAAW,GAAA;AAChB,QAAA,MAAM,QAAQ,GAAG;YACf,YAAY,EAAE,IAAI,GAAG,EAAE;SACxB;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,OAAO,QAAQ;AAChB,QAAA;AACD,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,mCAAA,CAAqC;AAC1D,QAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,KAAI;AACjE,YAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAqB;YAElD,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,eAAe,KAAI;;AACjD,gBAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAiC;gBAC7D,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;oBAC7C,IAAI;wBACF,MAAM,cAAc,GAClB,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE;wBAC/C,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;AAC/C,oBAAA;AAAC,oBAAA,OAAO,GAAG,EAAE;AACZ,wBAAA,eAAe,CAAC,KAAK,CAAA,CAAA,uBAAA,EAA0B,QAAQ,CAAC,GAAG,CAAA,iBAAA,EAAoB,WAAW,CAAC,UAAU,CAAA,EAAA,EAAK,GAAG,EAAE;AAChH,oBAAA;AACH,gBAAA,CAAC,CAAC;AAEF,gBAAA,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,EAAE;AACrC,oBAAA,IAAI,EAAE,CAAA,EAAA,GAAA,eAAe,CAAC,IAAI,mCAAI,EAAE;oBAChC,GAAG,EAAE,eAAe,CAAC,GAAG;AACxB,oBAAA,EAAE,EAAE,IAAI;AACR,oBAAA,YAAY,EAAE,IAAI;AAClB,oBAAA,SAAS,EAAE,YAAY;AACxB,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;YAEF,MAAM,KAAK,GAAW,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACnD,gBAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAqB;gBACnD,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;oBAC9C,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;AAC9D,oBAAA,IAAI,CAAC,aAAa;wBAAE;AAEpB,oBAAA,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE;wBACpC,IAAI,EAAE,aAAa,CAAC,IAAI;wBACxB,GAAG,EAAE,aAAa,CAAC,GAAG;wBACtB,EAAE,EAAE,QAAQ,CAAC,WAAW;wBACxB,YAAY,EAAE,IAAI,CAAC,YAAY;wBAC/B,SAAS,EAAE,aAAa,CAAC,SAAS;AACnC,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;AAEF,gBAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE;AACvC,YAAA,CAAC,CAAC;AAEF,YAAA,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE;AAC7B,gBAAA,UAAU,EAAE,aAAa;gBACzB,kBAAkB,EAAE,WAAW,CAAC,kBAAkB;gBAClD,KAAK;gBACL,mBAAmB,EAAE,WAAW,CAAC,mBAAmB;AACrD,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,oDAAA,EAAuD,QAAQ,GAAG;AACvF,QAAA,OAAO,QAAQ;IACjB;AAEU,IAAA,cAAc,CAAC,EACvB,WAAW,EACX,OAAO,EACP,OAAO,GACsB,EAAA;QAC7B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;AACD,QAAA;QACD,eAAe,CAAC,IAAI,CAAA,CAAA,kDAAA,EAAqD,WAAW,cAAc,OAAO,CAAA,WAAA,EAAc,OAAO,CAAA,CAAA,CAAG;QACjI,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;AAEhE,QAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC;AAE5C,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,CAAC;gBACN,WAAW;gBACX,GAAG,EAAEwB,2BAAmB,CAAC,WAAW;AACpC,gBAAA,MAAM,EAAE,eAAe;AACvB,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA,CAAC;AACH,QAAA;QAED,eAAe,CAAC,IAAI,CAAA,CAAA,oDAAA,EAAuD,WAAW,cAAc,OAAO,CAAA,WAAA,EAAc,OAAO,CAAA,CAAA,CAAG;IACrI;IAEQ,iBAAiB,CAAC,WAAmB,EAAE,OAAgB,EAAA;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;AACjD,QAAA,MAAM,YAAY,GAAG,OAAO,GAAGC,oBAAY,CAAC,KAAK,GAAGA,oBAAY,CAAC,QAAQ;AACzE,QAAA,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;YAClB,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,KAAKzB,0BAAkB,CAAC,YAAY,EAAE;AAC7D,gBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;oBAC5B,CAAC,WAAW,GAAG;AACb,wBAAA,OAAO,EAAE,YAAY;AACtB,qBAAA;AACF,iBAAA,CAAC;AACH,YAAA;YACD;AACD,QAAA;AAED,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI;QAC5B,IAAI,CAAC,WAAW,CAAC,GAAG;AAClB,YAAA,OAAO,EAAE,YAAY;SACtB;AACD,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC;IACrC;AAEQ,IAAA,eAAe,CAAC,WAAmB,EAAA;AACzC,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,mDAAA,EAAsD,WAAW,GAAG;AACzF,QAAA,IAAI,YAA0B;QAC9B,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;QACxD,YAAY,GAAG,iBAAiB,CAAC;cAC7B,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9D,cAAEyB,oBAAY,CAAC,OAAO;QACxB,eAAe,CAAC,KAAK,CAAA,CAAA,qDAAA,EAAwD,WAAW,CAAA,oBAAA,EAAuB,YAAY,GAAG;AAC9H,QAAA,OAAO,YAAY;IACrB;AAEQ,IAAA,mBAAmB,CACzB,WAA6C,EAAA;QAE7C,IAAI,WAAW,KAAK,SAAS;YAAE,OAAOA,oBAAY,CAAC,OAAO;AAE1D,QAAA,IAAI,OAAO,WAAW,KAAK,SAAS,EAAE;AACpC,YAAA,OAAO,WAAW,GAAGA,oBAAY,CAAC,KAAK,GAAGA,oBAAY,CAAC,QAAQ;AAChE,QAAA;AAED,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO;QACjC,IAAI,OAAO,KAAK,KAAK,SAAS;AAC5B,YAAA,OAAO,KAAK,GAAGA,oBAAY,CAAC,KAAK,GAAGA,oBAAY,CAAC,QAAQ;AAE3D,QAAA,OAAO,KAAqB;IAC9B;AAEU,IAAA,kBAAkB,CAAC,WAAmB,EAAA;AAC9C,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,sDAAA,EAAyD,WAAW,GAAG;AAC5F,QAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,mBAAmB;QAEtD,MAAM,iBAAiB,GACrB,CAAC,iBAAiB;YAClB,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAIA,oBAAY,CAAC,KAAK;QAEzD,eAAe,CAAC,KAAK,CAAA,CAAA,wDAAA,EAA2D,WAAW,CAAA,yBAAA,EAA4B,iBAAiB,GAAG;AAC3I,QAAA,OAAO,iBAAiB;IAC1B;AAEQ,IAAA,oBAAoB,CAAC,EAC3B,WAAW,EACX,UAAU,EACV,YAAY,GACkB,EAAA;QAC9B,eAAe,CAAC,KAAK,CAAA,CAAA,wDAAA,EAA2D,WAAW,iBAAiB,UAAU,CAAA,gBAAA,EAAmB,YAAY,CAAA,CAAA,CAAG;AACxJ,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY;QAC1D,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;QAEhD,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,IAAI,cAAc,CACtBzB,0BAAkB,CAAC,gCAAgC,EACnD,UAAU,CACX;AACF,QAAA;AACD,QAAA,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAC3C,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,YAAY,CACpC;QAED,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,IAAI,cAAc,CACtBA,0BAAkB,CAAC,4BAA4B,EAC/C,YAAY,EACZ,WAAW,CACZ;AACF,QAAA;AAED,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,0DAAA,EAA6D,WAAW,CAAA,cAAA,EAAiB,UAAU,CAAA,gBAAA,EAAmB,YAAY,CAAA,iBAAA,EAAoB,SAAS,CAAC,SAAS,GAAG;QACjM,OAAO,SAAS,CAAC,SAAS;IAC5B;;;AAIQ,IAAA,2BAA2B,CACjC,WAAmB,EAAA;AAEnB,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,+DAAA,EAAkE,WAAW,GAAG;AACrG,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY;QAC1D,MAAM,gBAAgB,GAA+B,EAAE;AAEvD,QAAA,KAAK,MAAM,WAAW,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE;AAC/C,YAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE;gBACnC;AACD,YAAA;YAED,IAAI;AACF,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;oBAC7B,WAAW;oBACX,WAAW;AACX,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,IAAI,EAAE,KAAK;AACZ,iBAAA,CAAC;AAEF,gBAAA,IAAI,OAAO,CAAC,YAAY,KAAK,iBAAiB,EAAE;oBAC9C,gBAAgB,CAAC,IAAI,CAAC;wBACpB,YAAY,EAAE,OAAO,CAAC,YAAY;wBAClC,WAAW,EAAE,OAAO,CAAC,WAAW;wBAChC,YAAY,EAAE,OAAO,CAAC,YAAY;wBAClC,aAAa,EAAE,WAAW,CAAC,EAAE;wBAC7B,UAAU,EAAE,WAAW,CAAC,UAAU;AAClC,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,cAAc,EAAE,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,iBAAiB;AAChE,qBAAA,CAAC;AACH,gBAAA;AACF,YAAA;AAAC,YAAA,OAAO,GAAG,EAAE;gBACZ,IAAI,GAAG,YAAY,cAAc,EAAE;AACjC,oBAAA,IAAI,GAAG,CAAC,IAAI,IAAIA,0BAAkB,CAAC,8BAA8B,EAAE;AACjE,wBAAA,eAAe,CAAC,KAAK,CAAA,CAAA,kBAAA,EAAqB,GAAG,EAAE;AAChD,oBAAA;oBACD;AACD,gBAAA;AACF,YAAA;AACF,QAAA;QAED,eAAe,CAAC,KAAK,CAAA,CAAA,iEAAA,EAAoE,WAAW,CAAA,wBAAA,EAA2B,gBAAgB,GAAG;AAClJ,QAAA,OAAO,gBAAgB;IACzB;IAEQ,SAAS,CAAC,EAChB,WAAW,EACX,WAAW,EACX,KAAK,EACL,IAAI,GACmB,EAAA;AACvB,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,6CAAA,EAAgD,WAAW,CAAA,eAAA,EAAkB,WAAW,CAAA,SAAA,EAAY,KAAK,CAAA,QAAA,EAAW,IAAI,CAAA,CAAA,CAAG;AAChJ,QAAA,IAAI,OAAgC;QACpC,IAAI,eAAe,GAAsC,IAAI;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC;AAEhE,QAAA,MAAM,mBAAmB,GACvB,IAAI,CAAC,sBAAsB,CAAC,yBAAyB,CACnD,WAAW,EACX,WAAW,CAAC,UAAU,CACvB;QACH,IAAI,mBAAmB,CAAC,EAAE,EAAE;AAC1B,YAAA,eAAe,GAAG,mBAAmB,CAAC,IAAI;AAC3C,QAAA;AACD,QAAA,IAAI,eAAe,EAAE;AACnB,YAAA,OAAO,GAAG,eAAe,CAAC,mBAAmB,CAAC,0BAA0B,CACtE,WAAW,CAAC,mBAAmB,EAC/B,eAAe,CAChB;AACF,QAAA;AAAM,aAAA,IACL,IAAI,CAAC,sBAAsB,CACzB,WAAW,EACX,KAAK,EACL,IAAI,EACJ,WAAW,EACX,WAAW,CACZ;YACD,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,EACtE;AACA,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAC5C,WAAW,EACX,WAAW,CAAC,wBAAwB,EACpC,WAAW,CACZ;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;AAEtD,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC;AACxB,iBAAA,YAAY,CAAC;gBACZ,WAAW;gBACX,iBAAiB;gBACjB,WAAW;gBACX,KAAK;AACL,gBAAA,cAAc,EAAE,IAAI;AACpB,gBAAA,aAAa,EAAE,WAAW;gBAC1B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;gBAC7C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EAAE,IAAI,CAAC,mBAAmB;gBACrC,YAAY;aACb;AACA,iBAAA,KAAK,EAAE;YACV,OAAO;AACL,gBAAA,eAAe,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,aAAa,CAAC;AACvE,QAAA;AAAM,aAAA;YACL,OAAO,GAAG,eAAe,CAAC,mBAAmB,CAAC,uBAAuB,CACnE,WAAW,CAAC,mBAAmB,CAChC;AACF,QAAA;AAED,QAAA,IACE,IAAI;YACJ,CAAC,OAAO,CAAC,WAAW;YACpB,OAAO,CAAC,YAAY,KAAK,IAAI;AAC7B,YAAA,OAAO,CAAC,WAAW,KAAK,IAAI,EAC5B;AACA,YAAA,IAAI,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,WAAW,EAAE;AAC9D,gBAAA,CAAC,OAAO,CAAC,YAAY,GAAG;oBACtB,WAAW,EAAE,OAAO,CAAC,WAAW;AAChC,oBAAA,cAAc,EAAE,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,iBAAiB;AAC/D,oBAAA,MAAM,EAAE,KAAK,GAAGS,sBAAc,CAAC,MAAM,GAAGA,sBAAc,CAAC,IAAI;AAC5D,iBAAA;AACF,aAAA,CAAC;AACH,QAAA;QAED,IAAI,CAAC,YAAY,CAAC,SAAS,CAACG,iBAAS,CAAC,UAAU,EAAE;YAChD,UAAU,EAAE,WAAW,CAAC,UAAU;AAClC,YAAA,SAAS,EAAE;gBACT,GAAG,EAAE,OAAO,CAAC,YAAY;gBACzB,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,EAAE,EAAE,OAAO,CAAC,WAAW;AACxB,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,+CAAA,EAAkD,WAAW,CAAA,eAAA,EAAkB,WAAW,CAAA,SAAA,EAAY,KAAK,CAAA,QAAA,EAAW,IAAI,CAAA,eAAA,EAAkB,OAAO,GAAG;AAC3K,QAAA,OAAO,OAAO;IAChB;AAEQ,IAAA,0BAA0B,CAChC,WAAmB,EACnB,WAAkC,EAClC,WAAsC,EAAA;AAEtC,QAAA,MAAM,WAAW,GAAG,WAAW,CAAC,sBAAsB;QACtD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,IAAI;AACZ,QAAA;QACD,eAAe,CAAC,KAAK,CAAA,CAAA,8DAAA,EAAiE,WAAW,kBAAkB,WAAW,CAAA,eAAA,EAAkB,WAAW,CAAA,CAAA,CAAG;QAC9J,IAAI,QAAQ,GAAG,IAAI;AAEnB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;AAClE,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CACtC,WAAW,EACX,WAAW,CAAC,wBAAwB,EACpC,WAAW,CACZ;YAED,MAAM,WAAW,GAAG,MAAM,CAAC,uBAAuB,CAChD,WAAW,EACX,WAAW,CACZ;YAED,eAAe,CAAC,KAAK,CAAA,CAAA,wBAAA,EAA2B,WAAW,cAAc,WAAW,CAAA,WAAA,EAAc,WAAW,CAAA,CAAE;YAE/G,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC,WAAW,CAAC,KAAK,WAAW;AACrE,QAAA;AAED,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,gEAAA,EAAmE,WAAW,CAAA,eAAA,EAAkB,WAAW,CAAA,eAAA,EAAkB,WAAW,CAAA,gBAAA,EAAmB,QAAQ,CAAA,CAAA,CAAG;AAC3L,QAAA,OAAO,QAAQ;IACjB;AAEQ,IAAA,oBAAoB,CAAC,EAC3B,WAAW,EACX,UAAU,EACV,KAAK,GAC6B,EAAA;;QAClC,eAAe,CAAC,KAAK,CAAA,CAAA,wDAAA,EAA2D,WAAW,iBAAiB,UAAU,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA,CAAG;AAE1I,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,OAAON,gBAAG,CAAC,IAAI,cAAc,CAACN,0BAAkB,CAAC,cAAc,CAAC,CAAC;AAClE,QAAA;AAED,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY;QAC1D,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;QAEhD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAOM,gBAAG,CACR,IAAI,cAAc,CAChBN,0BAAkB,CAAC,gCAAgC,EACnD,UAAU,CACX,CACF;AACF,QAAA;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE;AACnC,YAAA,OAAOM,gBAAG,CACR,IAAI,cAAc,CAChBN,0BAAkB,CAAC,8BAA8B,EACjD,WAAW,CAAC,UAAU,EACtB,IAAI,CAAC,WAAW,CACjB,CACF;AACF,QAAA;AAED,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,WAAW;YACX,WAAW;YACX,KAAK;AACL,YAAA,IAAI,EAAE,IAAI;AACX,SAAA,CAAC;QAEF,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,OAAO;AAExE,QAAA,IAAI,eAAe,GAAG,IAAI,GAAG,EAAoB;QACjD,IAAI,iBAAiB,GAAG,KAAK;QAE7B,IAAI;AACF,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC;gBAC1C,WAAW;gBACX,UAAU;gBACV,YAAY;AACb,aAAA,CAAC;AAEF,YAAA,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC7B,gBAAA,IACE,CAAC,iBAAiB;AAClB,qBAAC,QAAQ,CAAC,IAAI,KAAKQ,oBAAY,CAAC,EAAE;AAChC,wBAAA,QAAQ,CAAC,IAAI,KAAKA,oBAAY,CAAC,GAAG,CAAC,EACrC;oBACA,iBAAiB,GAAG,IAAI;AACzB,gBAAA;gBAED,MAAM,cAAc,GAClB,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE;gBAE/C,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;AACnD,YAAA,CAAC,CAAC;AACH,QAAA;QAAC,OAAO,CAAC,EAAE,EAAA;QAEZ,IAAI,YAAY,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,WAAW,EAAE;YACnE,SAAS,CAAC,WAAW,CAAC;gBACpB,YAAY,EAAE,IAAI,CAAC,aAAa;gBAChC,iBAAiB;gBACjB,WAAW;gBACX,YAAY;gBACZ,WAAW;AACZ,aAAA,CAAC;AACH,QAAA;AAED,QAAA,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAC1B,WAAW,EACX,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CACrC;AACF,QAAA;QAED,MAAM,aAAa,GACjB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,YAAY,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GACtE,EAAE;AAEJ,QAAA,MAAM,UAAU,GAAc;AAC5B,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,EAAE,EAAE,WAAW;YACf,YAAY;AACZ,YAAA,SAAS,EAAE,eAAe;SAC3B;AAED,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,0DAAA,EAA6D,WAAW,CAAA,cAAA,EAAiB,UAAU,CAAA,SAAA,EAAY,KAAK,CAAA,iBAAA,EAAoB,UAAU,CAAA,CAAA,CAAG;AAC1K,QAAA,OAAOH,eAAE,CAAC,UAAU,CAAC;IACvB;IAEQ,sBAAsB,CAC5B,WAAmB,EACnB,KAAc,EACd,IAAa,EACb,WAAmC,EACnC,WAAsC,EAAA;AAEtC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO;QAChD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI;AACZ,QAAA;AACD,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,0DAAA,EAA6D,WAAW,CAAA,SAAA,EAAY,KAAK,CAAA,QAAA,EAAW,IAAI,CAAA,eAAA,EAAkB,WAAW,CAAA,eAAA,EAAkB,WAAW,GAAG;QAC1L,IAAI,cAAc,GAAG,IAAI;;AAGzB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC;AAC5C,cAAE,IAAI,CAAC,eAAe,CAAC,WAAW;AAClC,cAAEoB,oBAAY,CAAC,KAAK;AACtB,QAAA,IAAI,YAAY,IAAIA,oBAAY,CAAC,QAAQ,EAAE;AACzC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,wBAAwB;AACnE,YAAA,IAAI,SAAS,IAAI,wBAAwB,CAAC,iBAAiB,EAAE;gBAC3D,MAAM,IAAI,cAAc,CACtBzB,0BAAkB,CAAC,8BAA8B,EACjD,CAAA,8EAAA,EAAiF,WAAW,CAAA,CAAA,CAAG,CAChG;AACF,YAAA;AACF,QAAA;AAED,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CACtC,WAAW,EACX,WAAW,KAAA,IAAA,IAAX,WAAW,uBAAX,WAAW,CAAE,wBAAwB,EACrC,WAAW,CACZ;AAED,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC;AACvC,YAAA,iBAAiB,EAAE,WAAW;AAC9B,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;AACjC,SAAA,CAAC;QAEF,eAAe,CAAC,KAAK,CAAA,CAAA,wBAAA,EAA2B,WAAW,CAAA,kBAAA,EAAqB,WAAW,EAAE;AAE7F,QAAA,IAAI,QAAQ,GAAG,SAAS,CAAC,kBAAkB,CACzC,OAAO,CAAC,qBAAqB,EAC7B,WAAW,CACZ;QAED,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,YAAA,cAAc,GAAG,QAAQ,CAAC,YAAY,KAAK,wBAAwB;AACnE,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,WAAW,EAAE;AAC9D,oBAAA,CAAC,OAAO,CAAC,YAAY,GAAG;wBACtB,WAAW,EAAE,QAAQ,CAAC,WAAW;AACjC,wBAAA,cAAc,EAAE,KAAK;AACrB,wBAAA,MAAM,EAAE,KAAK,GAAGS,sBAAc,CAAC,MAAM,GAAGA,sBAAc,CAAC,IAAI;AAC5D,qBAAA;AACF,iBAAA,CAAC;AACH,YAAA;AACF,QAAA;AAED,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,4DAAA,EAA+D,WAAW,YAAY,KAAK,CAAA,QAAA,EAAW,IAAI,CAAA,eAAA,EAAkB,WAAW,CAAA,eAAA,EAAkB,WAAW,CAAA,sBAAA,EAAyB,cAAc,GAAG;AACnO,QAAA,OAAO,cAAc;IACvB;IAEQ,mBAAmB,CAAC,EAC1B,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,cAAc,GAAG,IAAI,GACY,EAAA;AACjC,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,wDAAA,EAA2D,WAAW,CAAA,iBAAA,EAAoB,YAAY,CAAA,iBAAA,EAAoB,YAAY,CAAA,mBAAA,EAAsB,cAAc,CAAA,CAAA,CAAG;QAElM,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,YAAA,MAAM,WAAW,GACf,IAAI,CAAC,sBAAsB,CAAC,+BAA+B,CACzD,WAAW,EACX,YAAY,EACZ,IAAI,CACL;AACH,YAAA,eAAe,CAAC,KAAK,CAAA,CAAA,0DAAA,EAA6D,WAAW,CAAA,iBAAA,EAAoB,YAAY,CAAA,iBAAA,EAAoB,YAAY,CAAA,mBAAA,EAAsB,cAAc,CAAA,mBAAA,EAAsB,WAAW,GAAG;AACrO,YAAA,OAAO,WAAW;AACnB,QAAA;QAED,IAAI,IAAI,GAAG,IAAI;QACf,IAAI,QAAQ,GAAG,IAAI;QAEnB,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC;QAC/D,IAAI,CAAC,IAAI,EAAE;YACT,eAAe,CAAC,KAAK,CAAA,CAAA,mBAAA,EAAsB,YAAY,CAAA,uBAAA,EAA0B,WAAW,EAAE;AAC9F,YAAA,OAAOH,gBAAG,CACR,IAAI,cAAc,CAChBN,0BAAkB,CAAC,6BAA6B,EAChD,YAAY,EACZ,WAAW,CACZ,CACF;AACF,QAAA;QACD,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAa,CAAC;QAC7C,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,eAAe,CAAC,KAAK,CAAA,CAAA,mBAAA,EAAsB,YAAY,4BAA4B,IAAI,CAAA,aAAA,EAAgB,WAAW,CAAA,CAAE;AACpH,YAAA,OAAOM,gBAAG,CACR,IAAI,cAAc,CAChBN,0BAAkB,CAAC,4BAA4B,EAC/C,YAAa,EACb,WAAW,CACZ,CACF;AACF,QAAA;AAED,QAAA,IAAI,GAAG;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,YAAY,EAAE,YAAY;SACA;AAC5B,QAAA,QAAQ,GAAG;AACT,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,WAAW,EAAE,QAAQ;SACS;QAEhC,MAAM,WAAW,GACf,IAAI,CAAC,sBAAsB,CAAC,+BAA+B,CACzD,WAAW,EACX,YAAY,EACZ;AACE,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,QAAQ,EAAE,QAAQ;YAClB,cAAc;AACkB,SAAA,CACnC;AAEH,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,0DAAA,EAA6D,WAAW,CAAA,iBAAA,EAAoB,YAAY,CAAA,iBAAA,EAAoB,YAAY,CAAA,mBAAA,EAAsB,cAAc,CAAA,mBAAA,EAAsB,WAAW,GAAG;AACrO,QAAA,OAAO,WAAW;IACpB;AAEQ,IAAA,eAAe,CACrB,WAAmB,EACnB,wBAAwC,EACxC,WAAsC,EAAA;;QAEtC,eAAe,CAAC,KAAK,CAAA,CAAA,mDAAA,EAAsD,WAAW,+BAA+B,wBAAwB,CAAA,eAAA,EAAkB,WAAW,CAAA,CAAA,CAAG;AAC7K,QAAA,IAAI,WAAW;QACf,IAAI,wBAAwB,IAAI,IAAI,EAAE;YACpC,MAAM,UAAU,GAAG,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,UAAU;AAC1C,YAAA,IAAI,UAAU,EAAE;AACd,gBAAA,MAAM,eAAe,GAAG,CAAA,EAAA,GAAA,UAAU,CAAC,wBAAwB,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,CAAC,CAAC,CAAC;AACtE,gBAAA,IAAI,eAAe,EAAE;oBACnB,WAAW,GAAG,eAAe;AAC9B,gBAAA;AACF,YAAA;AACF,QAAA;QACD,IAAI,CAAC,WAAW,EAAE;YAChB,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,WAAW,CAAC;AACjE,QAAA;AAED,QAAA,eAAe,CAAC,KAAK,CAAA,CAAA,qDAAA,EAAwD,WAAW,CAAA,4BAAA,EAA+B,wBAAwB,CAAA,eAAA,EAAkB,WAAW,CAAA,mBAAA,EAAsB,WAAW,CAAA,CAAA,CAAG;AAChN,QAAA,OAAO,WAAW;IACpB;;AAEe,eAAA,CAAA,mBAAmB,GAAG,MAAA;AACnC,IAAA,OAAO,0BAA0B,CAC/B,mBAA2B,EAC3B,sBAAkD,EAAA;;QAElD,IAAI,MAAM,GAAG,mBAAmB;QAChC,IAAI,sBAAsB,CAAC,QAAQ,EAAE;AACnC,YAAA,MAAM,GAAG,sBAAsB,CAAC,QAAQ,CAAC,YAAY;AACtD,QAAA;aAAM,IACL,sBAAsB,CAAC,IAAI;YAC3B,sBAAsB,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,eAAe,EAC7D;YACA,MAAM,GAAG,iBAAiB;AAC3B,QAAA;QACD,OAAO;AACL,YAAA,YAAY,EAAE,MAAM;YACpB,WAAW,EAAE,CAAA,CAAA,EAAA,GAAA,sBAAsB,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,KAAI,IAAI;YACjE,YAAY,EAAE,CAAA,CAAA,EAAA,GAAA,sBAAsB,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,YAAY,KAAI,IAAI;YAC/D,QAAQ,EAAE,CAAA,CAAA,EAAA,GAAA,sBAAsB,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,KAAI,IAAI;YACnD,WAAW,EAAE,sBAAsB,CAAC,SAAS;SAC9C;IACH;IAEA,OAAO,iBAAiB,CACtB,aAAuC,EAAA;;QAEvC,OAAO;YACL,YAAY,EAAE,aAAa,CAAC,YAAY;YACxC,WAAW,EAAE,aAAa,CAAC,WAAW;YACtC,YAAY,EAAE,aAAa,CAAC,YAAY;YACxC,QAAQ,EAAE,MAAA,CAAA,EAAA,GAAA,aAAa,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;AAC1C,YAAA,WAAW,EAAE,KAAK;SACnB;IACH;IAEA,OAAO,uBAAuB,CAC5B,mBAA2B,EAAA;QAE3B,OAAO;AACL,YAAA,YAAY,EAAE,mBAAmB;AACjC,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,WAAW,EAAE,KAAK;SACnB;IACH;CACD;;AChiDH;;AAEK;MACQ,cAAc,CAAA;AACzB;;;;;AAKK;AACE,IAAA,OAAO,sBAAsB,CAClC,WAAc,EACd,IAAgC,EAAA;AAEhC,QAAA,QAAQ,WAAW;YACjB,KAAKE,mBAAW,CAAC,QAAQ;AACvB,gBAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,oBAAA,MAAM,QAAQ,GAA0B;AACtC,wBAAA,MAAM,EAAE,GAAG;AACX,wBAAA,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;AACvC,wBAAA,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACrC,wBAAA,EAAE,EAAE,IAAI;qBACT;oBAED,OAAO,CAAC,QAAQ,CAAC;AACnB,gBAAA,CAAC,CAAC;YACJ,KAAKA,mBAAW,CAAC,aAAa;YAC9B,KAAKA,mBAAW,CAAC,UAAU;AACzB,gBAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,oBAAA,MAAM,QAAQ,GAA0B;AACtC,wBAAA,MAAM,EAAE,GAAG;AACX,wBAAA,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;AACvC,wBAAA,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACrC,wBAAA,EAAE,EAAE,IAAI;qBACT;oBAED,OAAO,CAAC,QAAQ,CAAC;AACnB,gBAAA,CAAC,CAAC;AACJ,YAAA;gBACE,YAAY,CAAC,WAAW,CAAC;AAC5B;IACH;AAEA;;;;;;AAMK;AACE,IAAA,OAAO,cAAc,CAAC,MAAc,EAAE,GAAW,EAAA;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AAC/B,YAAA,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAE5C,YAAA,OAAO,OAAO,KAAK,GAAG,IAAI,SAAS,KAAK,EAAE;AAC5C,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,EAAE;YACR,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA;AAED,QAAA,OAAO,IAAI;IACb;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","x_google_ignoreList":[0,1,2,89,90]}
|