{"version":3,"file":"utils.esm-lZCVMcIg.js","sources":["../../../node_modules/.pnpm/@chatwoot+utils@0.0.31/node_modules/@chatwoot/utils/dist/utils.esm.js"],"sourcesContent":["import isToday from 'date-fns/isToday';\nimport isYesterday from 'date-fns/isYesterday';\n\n// Returns a function, that, as long as it continues to be invoked, will not\n// be triggered. The function will be called after it stops being called for\n// N milliseconds. If `immediate` is passed, trigger the function on the\n// leading edge, instead of the trailing.\n\n/**\r\n * @func Callback function to be called after delay\r\n * @delay Delay for debounce in ms\r\n * @immediate should execute immediately\r\n * @returns debounced callback function\r\n */\nvar debounce = function debounce(func, wait, immediate) {\n var timeout;\n return function () {\n var context = null;\n var args = arguments;\n\n var later = function later() {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = window.setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n};\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar runtime_1 = createCommonjsModule(function (module) {\n/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined$1; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined$1) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined$1;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined$1;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined$1;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined$1, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined$1;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined$1;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined$1;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined$1;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined$1;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n module.exports \n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n});\n\n/**\r\n * @name Get contrasting text color\r\n * @description Get contrasting text color from a text color\r\n * @param bgColor Background color of text.\r\n * @returns contrasting text color\r\n */\n\nvar getContrastingTextColor = function getContrastingTextColor(bgColor) {\n var color = bgColor.replace('#', '');\n var r = parseInt(color.slice(0, 2), 16);\n var g = parseInt(color.slice(2, 4), 16);\n var b = parseInt(color.slice(4, 6), 16); // http://stackoverflow.com/a/3943023/112731\n\n return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#FFFFFF';\n};\n/**\r\n * @name Get formatted date\r\n * @description Get date in today, yesterday or any other date format\r\n * @param date date\r\n * @param todayText Today text\r\n * @param yesterdayText Yesterday text\r\n * @returns formatted date\r\n */\n\nvar formatDate = function formatDate(_ref) {\n var date = _ref.date,\n todayText = _ref.todayText,\n yesterdayText = _ref.yesterdayText;\n var dateValue = new Date(date);\n if (isToday(dateValue)) return todayText;\n if (isYesterday(dateValue)) return yesterdayText;\n return date;\n};\n/**\r\n * @name formatTime\r\n * @description Format time to Hour, Minute and Second\r\n * @param timeInSeconds number\r\n * @returns formatted time\r\n */\n\nvar formatTime = function formatTime(timeInSeconds) {\n var formattedTime = '';\n\n if (timeInSeconds >= 60 && timeInSeconds < 3600) {\n var minutes = Math.floor(timeInSeconds / 60);\n formattedTime = minutes + \" Min\";\n var seconds = minutes === 60 ? 0 : Math.floor(timeInSeconds % 60);\n return formattedTime + (\"\" + (seconds > 0 ? ' ' + seconds + ' Sec' : ''));\n }\n\n if (timeInSeconds >= 3600 && timeInSeconds < 86400) {\n var hours = Math.floor(timeInSeconds / 3600);\n formattedTime = hours + \" Hr\";\n\n var _minutes = timeInSeconds % 3600 < 60 || hours === 24 ? 0 : Math.floor(timeInSeconds % 3600 / 60);\n\n return formattedTime + (\"\" + (_minutes > 0 ? ' ' + _minutes + ' Min' : ''));\n }\n\n if (timeInSeconds >= 86400) {\n var days = Math.floor(timeInSeconds / 86400);\n formattedTime = days + \" Day\";\n\n var _hours = timeInSeconds % 86400 < 3600 || days >= 364 ? 0 : Math.floor(timeInSeconds % 86400 / 3600);\n\n return formattedTime + (\"\" + (_hours > 0 ? ' ' + _hours + ' Hr' : ''));\n }\n\n return Math.floor(timeInSeconds) + \" Sec\";\n};\n/**\r\n * @name trimContent\r\n * @description Trim a string to max length\r\n * @param content String to trim\r\n * @param maxLength Length of the string to trim, default 1024\r\n * @param ellipsis Boolean to add dots at the end of the string, default false\r\n * @returns trimmed string\r\n */\n\nvar trimContent = function trimContent(content, maxLength, ellipsis) {\n if (content === void 0) {\n content = '';\n }\n\n if (maxLength === void 0) {\n maxLength = 1024;\n }\n\n if (ellipsis === void 0) {\n ellipsis = false;\n }\n\n var trimmedContent = content;\n\n if (content.length > maxLength) {\n trimmedContent = content.substring(0, maxLength);\n }\n\n if (ellipsis) {\n trimmedContent = trimmedContent + '...';\n }\n\n return trimmedContent;\n};\n/**\r\n * @name convertSecondsToTimeUnit\r\n * @description Convert seconds to time unit\r\n * @param seconds number\r\n * @param unitNames object\r\n * @returns time and unit\r\n * @example\r\n * convertToUnit(60, { minute: 'm', hour: 'h', day: 'd' }); // { time: 1, unit: 'm' }\r\n * convertToUnit(60, { minute: 'Minutes', hour: 'Hours', day: 'Days' }); // { time: 1, unit: 'Minutes' }\r\n */\n\nvar convertSecondsToTimeUnit = function convertSecondsToTimeUnit(seconds, unitNames) {\n if (seconds === null || seconds === 0) return {\n time: '',\n unit: ''\n };\n if (seconds < 3600) return {\n time: Number((seconds / 60).toFixed(1)),\n unit: unitNames.minute\n };\n if (seconds < 86400) return {\n time: Number((seconds / 3600).toFixed(1)),\n unit: unitNames.hour\n };\n return {\n time: Number((seconds / 86400).toFixed(1)),\n unit: unitNames.day\n };\n};\n/**\r\n * @name fileNameWithEllipsis\r\n * @description Truncates a filename while preserving the extension\r\n * @param {Object} file - File object containing filename or name property\r\n * @param {number} [maxLength=26] - Maximum length of the filename (excluding extension)\r\n * @param {string} [ellipsis='…'] - Character to use for truncation\r\n * @returns {string} Truncated filename with extension\r\n * @example\r\n * fileNameWithEllipsis({ filename: 'very-long-filename.pdf' }, 10) // 'very-long-f….pdf'\r\n * fileNameWithEllipsis({ name: 'short.txt' }, 10) // 'short.txt'\r\n */\n\nvar fileNameWithEllipsis = function fileNameWithEllipsis(file, maxLength, ellipsis) {\n var _ref2, _file$filename;\n\n if (maxLength === void 0) {\n maxLength = 26;\n }\n\n if (ellipsis === void 0) {\n ellipsis = '…';\n }\n\n var fullName = (_ref2 = (_file$filename = file == null ? void 0 : file.filename) != null ? _file$filename : file == null ? void 0 : file.name) != null ? _ref2 : 'Untitled';\n var dotIndex = fullName.lastIndexOf('.');\n if (dotIndex === -1) return fullName;\n var _ref3 = [fullName.slice(0, dotIndex), fullName.slice(dotIndex)],\n name = _ref3[0],\n extension = _ref3[1];\n if (name.length <= maxLength) return fullName;\n return \"\" + name.slice(0, maxLength) + ellipsis + extension;\n};\n/**\r\n * @name splitName\r\n * @description Splits a full name into firstName and lastName\r\n * @param {string} name - Full name of the user\r\n * @returns {Object} Object with firstName and lastName\r\n * @example\r\n * splitName('Mary Jane Smith') // { firstName: 'Mary Jane', lastName: 'Smith' }\r\n * splitName('Alice') // { firstName: 'Alice', lastName: '' }\r\n * splitName('John Doe') // { firstName: 'John', lastName: 'Doe' }\r\n * splitName('') // { firstName: '', lastName: '' }\r\n */\n\nvar splitName = function splitName(fullName) {\n var trimmedName = fullName.trim();\n\n if (!trimmedName) {\n return {\n firstName: '',\n lastName: ''\n };\n } // Split the name by spaces\n\n\n var nameParts = trimmedName.split(/\\s+/); // If only one word, treat it as firstName\n\n if (nameParts.length === 1) {\n return {\n firstName: nameParts[0],\n lastName: ''\n };\n } // Last element is lastName, everything else is firstName\n\n\n var lastName = nameParts.pop() || '';\n var firstName = nameParts.join(' ');\n return {\n firstName: firstName,\n lastName: lastName\n };\n};\n/**\r\n * Downloads a file from a URL with proper file type handling\r\n * @name downloadFile\r\n * @description Downloads file from URL with proper type handling and cleanup\r\n * @param {Object} options Download configuration options\r\n * @param {string} options.url File URL to download\r\n * @param {string} options.type File type identifier\r\n * @param {string} [options.extension] Optional file extension\r\n * @returns {Promise} Returns true if download successful, false otherwise\r\n */\n\nvar downloadFile = /*#__PURE__*/function () {\n var _ref5 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee(_ref4) {\n var url, type, _ref4$extension, extension, _filenameMatch$, response, blobData, contentType, fileExtension, dispositionHeader, filenameMatch, filename, blobUrl, link;\n\n return runtime_1.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n url = _ref4.url, type = _ref4.type, _ref4$extension = _ref4.extension, extension = _ref4$extension === void 0 ? null : _ref4$extension;\n\n if (!(!url || !type)) {\n _context.next = 3;\n break;\n }\n\n return _context.abrupt(\"return\");\n\n case 3:\n _context.prev = 3;\n _context.next = 6;\n return fetch(url);\n\n case 6:\n response = _context.sent;\n _context.next = 9;\n return response.blob();\n\n case 9:\n blobData = _context.sent;\n contentType = response.headers.get('content-type');\n fileExtension = extension || (contentType ? contentType.split('/')[1] : type);\n dispositionHeader = response.headers.get('content-disposition');\n filenameMatch = dispositionHeader == null ? void 0 : dispositionHeader.match(/filename=\"(.*?)\"/);\n filename = (_filenameMatch$ = filenameMatch == null ? void 0 : filenameMatch[1]) != null ? _filenameMatch$ : \"attachment_\" + Date.now() + \".\" + fileExtension;\n blobUrl = URL.createObjectURL(blobData);\n link = Object.assign(document.createElement('a'), {\n href: blobUrl,\n download: filename,\n style: 'display: none'\n });\n document.body.append(link);\n link.click();\n link.remove();\n URL.revokeObjectURL(blobUrl);\n _context.next = 26;\n break;\n\n case 23:\n _context.prev = 23;\n _context.t0 = _context[\"catch\"](3);\n console.warn('Download failed:', _context.t0);\n\n case 26:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, null, [[3, 23]]);\n }));\n\n return function downloadFile(_x) {\n return _ref5.apply(this, arguments);\n };\n}();\n\n/**\r\n * Function that parses a string boolean value and returns the corresponding boolean value\r\n * @param {string | number} candidate - The string boolean value to be parsed\r\n * @return {boolean} - The parsed boolean value\r\n */\nfunction parseBoolean(candidate) {\n try {\n // lowercase the string, so TRUE becomes true\n var candidateString = String(candidate).toLowerCase(); // wrap in boolean to ensure that the return value\n // is a boolean even if values like 0 or 1 are passed\n\n return Boolean(JSON.parse(candidateString));\n } catch (error) {\n return false;\n }\n}\n\n/**\r\n * Sorts an array of numbers in ascending order.\r\n * @param {number[]} arr - The array of numbers to be sorted.\r\n * @returns {number[]} - The sorted array.\r\n */\nfunction sortAsc(arr) {\n // .slice() is used to create a copy of the array so that the original array is not mutated\n return arr.slice().sort(function (a, b) {\n return a - b;\n });\n}\n/**\r\n * Calculates the quantile value of an array at a specified percentile.\r\n * @param {number[]} arr - The array of numbers to calculate the quantile value from.\r\n * @param {number} q - The percentile to calculate the quantile value for.\r\n * @returns {number} - The quantile value.\r\n */\n\nfunction quantile(arr, q) {\n var sorted = sortAsc(arr); // Sort the array in ascending order\n\n return _quantileForSorted(sorted, q); // Calculate the quantile value\n}\n/**\r\n * Clamps a value between a minimum and maximum range.\r\n * @param {number} min - The minimum range.\r\n * @param {number} max - The maximum range.\r\n * @param {number} value - The value to be clamped.\r\n * @returns {number} - The clamped value.\r\n */\n\nfunction clamp(min, max, value) {\n if (value < min) {\n return min;\n }\n\n if (value > max) {\n return max;\n }\n\n return value;\n}\n/**\r\n * This method assumes the the array provided is already sorted in ascending order.\r\n * It's a helper method for the quantile method and should not be exported as is.\r\n *\r\n * @param {number[]} arr - The array of numbers to calculate the quantile value from.\r\n * @param {number} q - The percentile to calculate the quantile value for.\r\n * @returns {number} - The quantile value.\r\n */\n\nfunction _quantileForSorted(sorted, q) {\n var clamped = clamp(0, 1, q); // Clamp the percentile between 0 and 1\n\n var pos = (sorted.length - 1) * clamped; // Calculate the index of the element at the specified percentile\n\n var base = Math.floor(pos); // Find the index of the closest element to the specified percentile\n\n var rest = pos - base; // Calculate the decimal value between the closest elements\n // Interpolate the quantile value between the closest elements\n // Most libraries don't to the interpolation, but I'm just having fun here\n // also see https://en.wikipedia.org/wiki/Quantile#Estimating_quantiles_from_a_sample\n\n if (sorted[base + 1] !== undefined) {\n // in case the position was a integer, the rest will be 0 and the interpolation will be skipped\n return sorted[base] + rest * (sorted[base + 1] - sorted[base]);\n } // Return the closest element if there is no interpolation possible\n\n\n return sorted[base];\n}\n/**\r\n * Calculates the quantile values for an array of intervals.\r\n * @param {number[]} data - The array of numbers to calculate the quantile values from.\r\n * @param {number[]} intervals - The array of intervals to calculate the quantile values for.\r\n * @returns {number[]} - The array of quantile values for the intervals.\r\n */\n\n\nvar getQuantileIntervals = function getQuantileIntervals(data, intervals) {\n // Sort the array in ascending order before looping through the intervals.\n // depending on the size of the array and the number of intervals, this can speed up the process by at least twice\n // for a random array of 100 numbers and 5 intervals, the speedup is 3x\n var sorted = sortAsc(data);\n return intervals.map(function (interval) {\n return _quantileForSorted(sorted, interval);\n });\n};\n\nvar MESSAGE_VARIABLES_REGEX = /{{(.*?)}}/g;\n\nvar skipCodeBlocks = function skipCodeBlocks(str) {\n return str.replace(/```(?:.|\\n)+?```/g, '');\n};\n\nvar capitalizeName = function capitalizeName(name) {\n return (name || '').replace(/\\b(\\w)/g, function (s) {\n return s.toUpperCase();\n });\n};\nvar getFirstName = function getFirstName(_ref) {\n var user = _ref.user;\n var firstName = user != null && user.name ? user.name.split(' ').shift() : '';\n return capitalizeName(firstName);\n};\nvar getLastName = function getLastName(_ref2) {\n var user = _ref2.user;\n\n if (user && user.name) {\n var lastName = user.name.split(' ').length > 1 ? user.name.split(' ').pop() : '';\n return capitalizeName(lastName);\n }\n\n return '';\n};\nvar getMessageVariables = function getMessageVariables(_ref3) {\n var _assignee$email;\n\n var conversation = _ref3.conversation,\n contact = _ref3.contact;\n var _conversation$meta = conversation.meta,\n assignee = _conversation$meta.assignee,\n sender = _conversation$meta.sender,\n id = conversation.id,\n _conversation$custom_ = conversation.custom_attributes,\n conversationCustomAttributes = _conversation$custom_ === void 0 ? {} : _conversation$custom_;\n\n var _ref4 = contact || {},\n contactCustomAttributes = _ref4.custom_attributes;\n\n var standardVariables = {\n 'contact.name': capitalizeName((sender == null ? void 0 : sender.name) || ''),\n 'contact.first_name': getFirstName({\n user: sender\n }),\n 'contact.last_name': getLastName({\n user: sender\n }),\n 'contact.email': sender == null ? void 0 : sender.email,\n 'contact.phone': sender == null ? void 0 : sender.phone_number,\n 'contact.id': sender == null ? void 0 : sender.id,\n 'conversation.id': id,\n 'agent.name': capitalizeName((assignee == null ? void 0 : assignee.name) || ''),\n 'agent.first_name': getFirstName({\n user: assignee\n }),\n 'agent.last_name': getLastName({\n user: assignee\n }),\n 'agent.email': (_assignee$email = assignee == null ? void 0 : assignee.email) != null ? _assignee$email : ''\n };\n var conversationCustomAttributeVariables = Object.entries(conversationCustomAttributes != null ? conversationCustomAttributes : {}).reduce(function (acc, _ref5) {\n var key = _ref5[0],\n value = _ref5[1];\n acc[\"conversation.custom_attribute.\" + key] = value;\n return acc;\n }, {});\n var contactCustomAttributeVariables = Object.entries(contactCustomAttributes != null ? contactCustomAttributes : {}).reduce(function (acc, _ref6) {\n var key = _ref6[0],\n value = _ref6[1];\n acc[\"contact.custom_attribute.\" + key] = value;\n return acc;\n }, {});\n\n var variables = _extends({}, standardVariables, conversationCustomAttributeVariables, contactCustomAttributeVariables);\n\n return variables;\n};\nvar replaceVariablesInMessage = function replaceVariablesInMessage(_ref7) {\n var message = _ref7.message,\n variables = _ref7.variables;\n // @ts-ignore\n return message == null ? void 0 : message.replace(MESSAGE_VARIABLES_REGEX, function (_, replace) {\n return variables[replace.trim()] ? variables[replace.trim().toLowerCase()] : '';\n });\n};\nvar getUndefinedVariablesInMessage = function getUndefinedVariablesInMessage(_ref8) {\n var message = _ref8.message,\n variables = _ref8.variables;\n var messageWithOutCodeBlocks = skipCodeBlocks(message);\n var matches = messageWithOutCodeBlocks.match(MESSAGE_VARIABLES_REGEX);\n if (!matches) return [];\n return matches.map(function (match) {\n return match.replace('{{', '').replace('}}', '').trim();\n }).filter(function (variable) {\n return variables[variable] === undefined;\n });\n};\n\n/**\r\n * Creates a typing indicator utility.\r\n * @param onStartTyping Callback function to be called when typing starts\r\n * @param onStopTyping Callback function to be called when typing stops after delay\r\n * @param idleTime Delay for idle time in ms before considering typing stopped\r\n * @returns An object with start and stop methods for typing indicator\r\n */\nvar createTypingIndicator = function createTypingIndicator(onStartTyping, onStopTyping, idleTime) {\n var timer = null;\n\n var start = function start() {\n if (!timer) {\n onStartTyping();\n }\n\n reset();\n };\n\n var stop = function stop() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n onStopTyping();\n }\n };\n\n var reset = function reset() {\n if (timer) {\n clearTimeout(timer);\n }\n\n timer = setTimeout(function () {\n stop();\n }, idleTime);\n };\n\n return {\n start: start,\n stop: stop\n };\n};\n\n/**\r\n * Calculates the threshold for an SLA based on the current time and the provided threshold.\r\n * @param timeOffset - The time offset in seconds.\r\n * @param threshold - The threshold in seconds or null if not applicable.\r\n * @returns The calculated threshold in seconds or null if the threshold is null.\r\n */\nvar calculateThreshold = function calculateThreshold(timeOffset, threshold) {\n // Calculate the time left for the SLA to breach or the time since the SLA has missed\n if (threshold === null) return null;\n var currentTime = Math.floor(Date.now() / 1000);\n return timeOffset + threshold - currentTime;\n};\n/**\r\n * Finds the most urgent SLA status based on the threshold.\r\n * @param SLAStatuses - An array of SLAStatus objects.\r\n * @returns The most urgent SLAStatus object.\r\n */\n\n\nvar findMostUrgentSLAStatus = function findMostUrgentSLAStatus(SLAStatuses) {\n // Sort the SLAs based on the threshold and return the most urgent SLA\n SLAStatuses.sort(function (sla1, sla2) {\n return Math.abs(sla1.threshold) - Math.abs(sla2.threshold);\n });\n return SLAStatuses[0];\n};\n/**\r\n * Formats the SLA time in a human-readable format.\r\n * @param seconds - The time in seconds.\r\n * @returns A formatted string representing the time.\r\n */\n\n\nvar formatSLATime = function formatSLATime(seconds) {\n var units = {\n y: 31536000,\n mo: 2592000,\n d: 86400,\n h: 3600,\n m: 60\n };\n\n if (seconds < 60) {\n return '1m';\n } // we will only show two parts, two max granularity's, h-m, y-d, d-h, m, but no seconds\n\n\n var parts = [];\n Object.keys(units).forEach(function (unit) {\n var value = Math.floor(seconds / units[unit]);\n if (seconds < 60 && parts.length > 0) return;\n if (parts.length === 2) return;\n\n if (value > 0) {\n parts.push(value + unit);\n seconds -= value * units[unit];\n }\n });\n return parts.join(' ');\n};\n/**\r\n * Creates an SLA object based on the type, applied SLA, and chat details.\r\n * @param type - The type of SLA (FRT, NRT, RT).\r\n * @param appliedSla - The applied SLA details.\r\n * @param chat - The chat details.\r\n * @returns An object containing the SLA status or null if conditions are not met.\r\n */\n\n\nvar createSLAObject = function createSLAObject(type, appliedSla, chat) {\n var frtThreshold = appliedSla.sla_first_response_time_threshold,\n nrtThreshold = appliedSla.sla_next_response_time_threshold,\n rtThreshold = appliedSla.sla_resolution_time_threshold,\n createdAt = appliedSla.created_at;\n var firstReplyCreatedAt = chat.first_reply_created_at,\n waitingSince = chat.waiting_since,\n status = chat.status;\n var SLATypes = {\n FRT: {\n threshold: calculateThreshold(createdAt, frtThreshold),\n // Check FRT only if threshold is not null and first reply hasn't been made\n condition: frtThreshold !== null && (!firstReplyCreatedAt || firstReplyCreatedAt === 0)\n },\n NRT: {\n threshold: calculateThreshold(waitingSince, nrtThreshold),\n // Check NRT only if threshold is not null, first reply has been made and we are waiting since\n condition: nrtThreshold !== null && !!firstReplyCreatedAt && !!waitingSince\n },\n RT: {\n threshold: calculateThreshold(createdAt, rtThreshold),\n // Check RT only if the conversation is open and threshold is not null\n condition: status === 'open' && rtThreshold !== null\n }\n };\n var SLAStatus = SLATypes[type];\n return SLAStatus ? _extends({}, SLAStatus, {\n type: type\n }) : null;\n};\n/**\r\n * Evaluates SLA conditions and returns an array of SLAStatus objects.\r\n * @param appliedSla - The applied SLA details.\r\n * @param chat - The chat details.\r\n * @returns An array of SLAStatus objects.\r\n */\n\n\nvar evaluateSLAConditions = function evaluateSLAConditions(appliedSla, chat) {\n // Filter out the SLA based on conditions and update the object with the breach status(icon, isSlaMissed)\n var SLATypes = ['FRT', 'NRT', 'RT'];\n return SLATypes.map(function (type) {\n return createSLAObject(type, appliedSla, chat);\n }).filter(function (SLAStatus) {\n return !!SLAStatus && SLAStatus.condition;\n }).map(function (SLAStatus) {\n return _extends({}, SLAStatus, {\n icon: SLAStatus.threshold <= 0 ? 'flame' : 'alarm',\n isSlaMissed: SLAStatus.threshold <= 0\n });\n });\n};\n/**\r\n * Evaluates the SLA status for a given chat and applied SLA.\r\n * @param {Object} params - The parameters object.\r\n * @param params.appliedSla - The applied SLA details.\r\n * @param params.chat - The chat details.\r\n * @returns An object containing the most urgent SLA status.\r\n */\n\n\nvar evaluateSLAStatus = function evaluateSLAStatus(_ref) {\n var appliedSla = _ref.appliedSla,\n chat = _ref.chat;\n if (!appliedSla || !chat) return {\n type: '',\n threshold: '',\n icon: '',\n isSlaMissed: false\n }; // Filter out the SLA and create the object for each breach\n\n var SLAStatuses = evaluateSLAConditions(appliedSla, chat); // Return the most urgent SLA which is latest to breach or has missed\n\n var mostUrgent = findMostUrgentSLAStatus(SLAStatuses);\n return mostUrgent ? {\n type: mostUrgent == null ? void 0 : mostUrgent.type,\n threshold: formatSLATime(mostUrgent.threshold <= 0 ? -mostUrgent.threshold : mostUrgent.threshold),\n icon: mostUrgent.icon,\n isSlaMissed: mostUrgent.isSlaMissed\n } : {\n type: '',\n threshold: '',\n icon: '',\n isSlaMissed: false\n };\n};\n\nexport { clamp, convertSecondsToTimeUnit, createTypingIndicator, debounce, downloadFile, evaluateSLAStatus, fileNameWithEllipsis, formatDate, formatTime, getContrastingTextColor, getMessageVariables, getQuantileIntervals, getUndefinedVariablesInMessage, parseBoolean, quantile, replaceVariablesInMessage, sortAsc, splitName, trimContent };\n//# sourceMappingURL=utils.esm.js.map\n"],"names":["debounce","func","wait","immediate","timeout","context","args","later","callNow","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","_asyncToGenerator","fn","self","err","_extends","target","i","source","createCommonjsModule","module","runtime_1","runtime","exports","Op","hasOwn","undefined$1","$Symbol","iteratorSymbol","asyncIteratorSymbol","toStringTagSymbol","define","obj","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","makeInvokeMethod","tryCatch","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","values","Gp","defineIteratorMethods","prototype","method","genFun","ctor","AsyncIterator","PromiseImpl","invoke","record","result","unwrapped","previousPromise","enqueue","callInvokeWithMethodAndArg","iter","state","doneResult","delegate","delegateResult","maybeInvokeDelegate","pushTryEntry","locs","entry","resetTryEntry","object","keys","next","iterable","iteratorMethod","skipTempReset","name","rootEntry","rootRecord","exception","handle","loc","caught","hasCatch","hasFinally","type","finallyEntry","afterLoc","finallyLoc","tryLoc","thrown","resultName","nextLoc","getContrastingTextColor","bgColor","color","r","g","b","formatTime","timeInSeconds","formattedTime","minutes","seconds","hours","_minutes","days","_hours","trimContent","content","maxLength","ellipsis","trimmedContent","convertSecondsToTimeUnit","unitNames","fileNameWithEllipsis","file","_ref2","_file$filename","fullName","dotIndex","_ref3","extension","splitName","trimmedName","nameParts","lastName","firstName","downloadFile","_ref5","_callee","_ref4","url","_ref4$extension","_filenameMatch$","response","blobData","contentType","fileExtension","dispositionHeader","filenameMatch","filename","blobUrl","link","_context","_x","parseBoolean","candidate","candidateString","sortAsc","arr","a","clamp","min","max","_quantileForSorted","sorted","q","clamped","pos","base","rest","getQuantileIntervals","data","intervals","interval","MESSAGE_VARIABLES_REGEX","skipCodeBlocks","str","capitalizeName","s","getFirstName","_ref","user","getLastName","getMessageVariables","_assignee$email","conversation","contact","_conversation$meta","assignee","sender","id","_conversation$custom_","conversationCustomAttributes","contactCustomAttributes","standardVariables","conversationCustomAttributeVariables","acc","contactCustomAttributeVariables","_ref6","variables","replaceVariablesInMessage","_ref7","message","_","replace","getUndefinedVariablesInMessage","_ref8","messageWithOutCodeBlocks","matches","match","variable","createTypingIndicator","onStartTyping","onStopTyping","idleTime","timer","start","reset","stop","calculateThreshold","timeOffset","threshold","currentTime","findMostUrgentSLAStatus","SLAStatuses","sla1","sla2","formatSLATime","units","parts","unit","createSLAObject","appliedSla","chat","frtThreshold","nrtThreshold","rtThreshold","createdAt","firstReplyCreatedAt","waitingSince","status","SLATypes","SLAStatus","evaluateSLAConditions","evaluateSLAStatus","mostUrgent"],"mappings":"AAcG,IAACA,GAAW,SAAkBC,EAAMC,EAAMC,EAAW,CACtD,IAAIC,EACJ,OAAO,UAAY,CACjB,IAAIC,EAAU,KACVC,EAAO,UAEPC,EAAQ,UAAiB,CAC3BH,EAAU,KACLD,GAAWF,EAAK,MAAMI,EAASC,CAAI,CAC9C,EAEQE,EAAUL,GAAa,CAACC,EAC5B,aAAaA,CAAO,EACpBA,EAAU,OAAO,WAAWG,EAAOL,CAAI,EACnCM,GAASP,EAAK,MAAMI,EAASC,CAAI,CACzC,CACA,EAEA,SAASG,EAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQC,EAAKC,EAAK,CACzE,GAAI,CACF,IAAIC,EAAOP,EAAIK,CAAG,EAAEC,CAAG,EACnBE,EAAQD,EAAK,KAClB,OAAQE,EAAO,CACdP,EAAOO,CAAK,EACZ,MACD,CAEGF,EAAK,KACPN,EAAQO,CAAK,EAEb,QAAQ,QAAQA,CAAK,EAAE,KAAKL,EAAOC,CAAM,CAE7C,CAEA,SAASM,GAAkBC,EAAI,CAC7B,OAAO,UAAY,CACjB,IAAIC,EAAO,KACPhB,EAAO,UACX,OAAO,IAAI,QAAQ,SAAUK,EAASC,EAAQ,CAC5C,IAAIF,EAAMW,EAAG,MAAMC,EAAMhB,CAAI,EAE7B,SAASO,EAAMK,EAAO,CACpBT,EAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQI,CAAK,CACtE,CAED,SAASJ,EAAOS,EAAK,CACnBd,EAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAASS,CAAG,CACrE,CAEDV,EAAM,MAAS,CACrB,CAAK,CACL,CACA,CAEA,SAASW,GAAW,CAClB,OAAAA,EAAW,OAAO,QAAU,SAAUC,EAAQ,CAC5C,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAIC,EAAS,UAAUD,CAAC,EAExB,QAASX,KAAOY,EACV,OAAO,UAAU,eAAe,KAAKA,EAAQZ,CAAG,IAClDU,EAAOV,CAAG,EAAIY,EAAOZ,CAAG,EAG7B,CAED,OAAOU,CACX,EAESD,EAAS,MAAM,KAAM,SAAS,CACvC,CAEA,SAASI,GAAqBP,EAAIQ,EAAQ,CACzC,OAAOA,EAAS,CAAE,QAAS,CAAA,GAAMR,EAAGQ,EAAQA,EAAO,OAAO,EAAGA,EAAO,OACrE,CAEA,IAAIC,EAAYF,GAAqB,SAAUC,EAAQ,CAQvD,IAAIE,EAAW,SAAUC,EAAS,CAEhC,IAAIC,EAAK,OAAO,UACZC,EAASD,EAAG,eACZE,EACAC,EAAU,OAAO,QAAW,WAAa,OAAS,CAAA,EAClDC,EAAiBD,EAAQ,UAAY,aACrCE,EAAsBF,EAAQ,eAAiB,kBAC/CG,EAAoBH,EAAQ,aAAe,gBAE/C,SAASI,EAAOC,EAAK1B,EAAKG,EAAO,CAC/B,cAAO,eAAeuB,EAAK1B,EAAK,CAC9B,MAAOG,EACP,WAAY,GACZ,aAAc,GACd,SAAU,EAChB,CAAK,EACMuB,EAAI1B,CAAG,CACf,CACD,GAAI,CAEFyB,EAAO,CAAA,EAAI,EAAE,CACd,MAAa,CACZA,EAAS,SAASC,EAAK1B,EAAKG,EAAO,CACjC,OAAOuB,EAAI1B,CAAG,EAAIG,CACxB,CACG,CAED,SAASwB,EAAKC,EAASC,EAAStB,EAAMuB,EAAa,CAEjD,IAAIC,EAAiBF,GAAWA,EAAQ,qBAAqBG,EAAYH,EAAUG,EAC/EC,EAAY,OAAO,OAAOF,EAAe,SAAS,EAClDzC,EAAU,IAAI4C,EAAQJ,GAAe,CAAE,CAAA,EAI3C,OAAAG,EAAU,QAAUE,EAAiBP,EAASrB,EAAMjB,CAAO,EAEpD2C,CACR,CACDhB,EAAQ,KAAOU,EAYf,SAASS,EAAS9B,EAAIoB,EAAKzB,EAAK,CAC9B,GAAI,CACF,MAAO,CAAE,KAAM,SAAU,IAAKK,EAAG,KAAKoB,EAAKzB,CAAG,EAC/C,OAAQO,EAAK,CACZ,MAAO,CAAE,KAAM,QAAS,IAAKA,CAAG,CACjC,CACF,CAED,IAAI6B,EAAyB,iBACzBC,EAAyB,iBACzBC,EAAoB,YACpBC,EAAoB,YAIpBC,EAAmB,CAAA,EAMvB,SAAST,GAAY,CAAE,CACvB,SAASU,GAAoB,CAAE,CAC/B,SAASC,GAA6B,CAAE,CAIxC,IAAIC,EAAoB,CAAA,EACxBA,EAAkBtB,CAAc,EAAI,UAAY,CAC9C,OAAO,IACX,EAEE,IAAIuB,EAAW,OAAO,eAClBC,EAA0BD,GAAYA,EAASA,EAASE,EAAO,CAAA,CAAE,CAAC,CAAC,EACnED,GACAA,IAA4B5B,GAC5BC,EAAO,KAAK2B,EAAyBxB,CAAc,IAGrDsB,EAAoBE,GAGtB,IAAIE,EAAKL,EAA2B,UAClCX,EAAU,UAAY,OAAO,OAAOY,CAAiB,EACvDF,EAAkB,UAAYM,EAAG,YAAcL,EAC/CA,EAA2B,YAAcD,EACzCA,EAAkB,YAAcjB,EAC9BkB,EACAnB,EACA,mBACJ,EAIE,SAASyB,EAAsBC,EAAW,CACxC,CAAC,OAAQ,QAAS,QAAQ,EAAE,QAAQ,SAASC,EAAQ,CACnD1B,EAAOyB,EAAWC,EAAQ,SAASlD,EAAK,CACtC,OAAO,KAAK,QAAQkD,EAAQlD,CAAG,CACvC,CAAO,CACP,CAAK,CACF,CAEDgB,EAAQ,oBAAsB,SAASmC,EAAQ,CAC7C,IAAIC,EAAO,OAAOD,GAAW,YAAcA,EAAO,YAClD,OAAOC,EACHA,IAASX,IAGRW,EAAK,aAAeA,EAAK,QAAU,oBACpC,EACR,EAEEpC,EAAQ,KAAO,SAASmC,EAAQ,CAC9B,OAAI,OAAO,eACT,OAAO,eAAeA,EAAQT,CAA0B,GAExDS,EAAO,UAAYT,EACnBlB,EAAO2B,EAAQ5B,EAAmB,mBAAmB,GAEvD4B,EAAO,UAAY,OAAO,OAAOJ,CAAE,EAC5BI,CACX,EAMEnC,EAAQ,MAAQ,SAAShB,EAAK,CAC5B,MAAO,CAAE,QAASA,EACtB,EAEE,SAASqD,EAAcrB,EAAWsB,EAAa,CAC7C,SAASC,EAAOL,EAAQlD,EAAKL,EAASC,EAAQ,CAC5C,IAAI4D,EAASrB,EAASH,EAAUkB,CAAM,EAAGlB,EAAWhC,CAAG,EACvD,GAAIwD,EAAO,OAAS,QAClB5D,EAAO4D,EAAO,GAAG,MACZ,CACL,IAAIC,EAASD,EAAO,IAChBtD,EAAQuD,EAAO,MACnB,OAAIvD,GACA,OAAOA,GAAU,UACjBgB,EAAO,KAAKhB,EAAO,SAAS,EACvBoD,EAAY,QAAQpD,EAAM,OAAO,EAAE,KAAK,SAASA,EAAO,CAC7DqD,EAAO,OAAQrD,EAAOP,EAASC,CAAM,CACtC,EAAE,SAASW,EAAK,CACfgD,EAAO,QAAShD,EAAKZ,EAASC,CAAM,CAChD,CAAW,EAGI0D,EAAY,QAAQpD,CAAK,EAAE,KAAK,SAASwD,EAAW,CAIzDD,EAAO,MAAQC,EACf/D,EAAQ8D,CAAM,CACf,EAAE,SAAStD,EAAO,CAGjB,OAAOoD,EAAO,QAASpD,EAAOR,EAASC,CAAM,CACvD,CAAS,CACF,CACF,CAED,IAAI+D,EAEJ,SAASC,EAAQV,EAAQlD,EAAK,CAC5B,SAAS6D,GAA6B,CACpC,OAAO,IAAIP,EAAY,SAAS3D,EAASC,EAAQ,CAC/C2D,EAAOL,EAAQlD,EAAKL,EAASC,CAAM,CAC7C,CAAS,CACF,CAED,OAAO+D,EAaLA,EAAkBA,EAAgB,KAChCE,EAGAA,CACD,EAAGA,EAA0B,CACjC,CAID,KAAK,QAAUD,CAChB,CAEDZ,EAAsBK,EAAc,SAAS,EAC7CA,EAAc,UAAU/B,CAAmB,EAAI,UAAY,CACzD,OAAO,IACX,EACEN,EAAQ,cAAgBqC,EAKxBrC,EAAQ,MAAQ,SAASW,EAASC,EAAStB,EAAMuB,EAAayB,EAAa,CACrEA,IAAgB,SAAQA,EAAc,SAE1C,IAAIQ,EAAO,IAAIT,EACb3B,EAAKC,EAASC,EAAStB,EAAMuB,CAAW,EACxCyB,CACN,EAEI,OAAOtC,EAAQ,oBAAoBY,CAAO,EACtCkC,EACAA,EAAK,KAAI,EAAG,KAAK,SAASL,EAAQ,CAChC,OAAOA,EAAO,KAAOA,EAAO,MAAQK,EAAK,MACnD,CAAS,CACT,EAEE,SAAS5B,EAAiBP,EAASrB,EAAMjB,EAAS,CAChD,IAAI0E,EAAQ3B,EAEZ,OAAO,SAAgBc,EAAQlD,EAAK,CAClC,GAAI+D,IAAUzB,EACZ,MAAM,IAAI,MAAM,8BAA8B,EAGhD,GAAIyB,IAAUxB,EAAmB,CAC/B,GAAIW,IAAW,QACb,MAAMlD,EAKR,OAAOgE,EAAU,CAClB,CAKD,IAHA3E,EAAQ,OAAS6D,EACjB7D,EAAQ,IAAMW,IAED,CACX,IAAIiE,EAAW5E,EAAQ,SACvB,GAAI4E,EAAU,CACZ,IAAIC,EAAiBC,EAAoBF,EAAU5E,CAAO,EAC1D,GAAI6E,EAAgB,CAClB,GAAIA,IAAmB1B,EAAkB,SACzC,OAAO0B,CACR,CACF,CAED,GAAI7E,EAAQ,SAAW,OAGrBA,EAAQ,KAAOA,EAAQ,MAAQA,EAAQ,YAE9BA,EAAQ,SAAW,QAAS,CACrC,GAAI0E,IAAU3B,EACZ,MAAA2B,EAAQxB,EACFlD,EAAQ,IAGhBA,EAAQ,kBAAkBA,EAAQ,GAAG,CAE/C,MAAmBA,EAAQ,SAAW,UAC5BA,EAAQ,OAAO,SAAUA,EAAQ,GAAG,EAGtC0E,EAAQzB,EAER,IAAIkB,EAASrB,EAASR,EAASrB,EAAMjB,CAAO,EAC5C,GAAImE,EAAO,OAAS,SAAU,CAO5B,GAJAO,EAAQ1E,EAAQ,KACZkD,EACAF,EAEAmB,EAAO,MAAQhB,EACjB,SAGF,MAAO,CACL,MAAOgB,EAAO,IACd,KAAMnE,EAAQ,IAC1B,CAEA,MAAmBmE,EAAO,OAAS,UACzBO,EAAQxB,EAGRlD,EAAQ,OAAS,QACjBA,EAAQ,IAAMmE,EAAO,IAExB,CACP,CACG,CAMD,SAASW,EAAoBF,EAAU5E,EAAS,CAC9C,IAAI6D,EAASe,EAAS,SAAS5E,EAAQ,MAAM,EAC7C,GAAI6D,IAAW/B,EAAa,CAK1B,GAFA9B,EAAQ,SAAW,KAEfA,EAAQ,SAAW,QAAS,CAE9B,GAAI4E,EAAS,SAAS,SAGpB5E,EAAQ,OAAS,SACjBA,EAAQ,IAAM8B,EACdgD,EAAoBF,EAAU5E,CAAO,EAEjCA,EAAQ,SAAW,SAGrB,OAAOmD,EAIXnD,EAAQ,OAAS,QACjBA,EAAQ,IAAM,IAAI,UAChB,gDAAgD,CACnD,CAED,OAAOmD,CACR,CAED,IAAIgB,EAASrB,EAASe,EAAQe,EAAS,SAAU5E,EAAQ,GAAG,EAE5D,GAAImE,EAAO,OAAS,QAClB,OAAAnE,EAAQ,OAAS,QACjBA,EAAQ,IAAMmE,EAAO,IACrBnE,EAAQ,SAAW,KACZmD,EAGT,IAAIvC,EAAOuD,EAAO,IAElB,GAAI,CAAEvD,EACJ,OAAAZ,EAAQ,OAAS,QACjBA,EAAQ,IAAM,IAAI,UAAU,kCAAkC,EAC9DA,EAAQ,SAAW,KACZmD,EAGT,GAAIvC,EAAK,KAGPZ,EAAQ4E,EAAS,UAAU,EAAIhE,EAAK,MAGpCZ,EAAQ,KAAO4E,EAAS,QAQpB5E,EAAQ,SAAW,WACrBA,EAAQ,OAAS,OACjBA,EAAQ,IAAM8B,OAKhB,QAAOlB,EAKT,OAAAZ,EAAQ,SAAW,KACZmD,CACR,CAIDQ,EAAsBD,CAAE,EAExBvB,EAAOuB,EAAIxB,EAAmB,WAAW,EAOzCwB,EAAG1B,CAAc,EAAI,UAAW,CAC9B,OAAO,IACX,EAEE0B,EAAG,SAAW,UAAW,CACvB,MAAO,oBACX,EAEE,SAASqB,GAAaC,EAAM,CAC1B,IAAIC,EAAQ,CAAE,OAAQD,EAAK,CAAC,CAAC,EAEzB,KAAKA,IACPC,EAAM,SAAWD,EAAK,CAAC,GAGrB,KAAKA,IACPC,EAAM,WAAaD,EAAK,CAAC,EACzBC,EAAM,SAAWD,EAAK,CAAC,GAGzB,KAAK,WAAW,KAAKC,CAAK,CAC3B,CAED,SAASC,EAAcD,EAAO,CAC5B,IAAId,EAASc,EAAM,YAAc,GACjCd,EAAO,KAAO,SACd,OAAOA,EAAO,IACdc,EAAM,WAAad,CACpB,CAED,SAASvB,EAAQJ,EAAa,CAI5B,KAAK,WAAa,CAAC,CAAE,OAAQ,MAAQ,CAAA,EACrCA,EAAY,QAAQuC,GAAc,IAAI,EACtC,KAAK,MAAM,EAAI,CAChB,CAEDpD,EAAQ,KAAO,SAASwD,EAAQ,CAC9B,IAAIC,EAAO,CAAA,EACX,QAAS1E,KAAOyE,EACdC,EAAK,KAAK1E,CAAG,EAEf,OAAA0E,EAAK,QAAO,EAIL,SAASC,GAAO,CACrB,KAAOD,EAAK,QAAQ,CAClB,IAAI1E,EAAM0E,EAAK,MACf,GAAI1E,KAAOyE,EACT,OAAAE,EAAK,MAAQ3E,EACb2E,EAAK,KAAO,GACLA,CAEV,CAKD,OAAAA,EAAK,KAAO,GACLA,CACb,CACA,EAEE,SAAS5B,EAAO6B,EAAU,CACxB,GAAIA,EAAU,CACZ,IAAIC,EAAiBD,EAAStD,CAAc,EAC5C,GAAIuD,EACF,OAAOA,EAAe,KAAKD,CAAQ,EAGrC,GAAI,OAAOA,EAAS,MAAS,WAC3B,OAAOA,EAGT,GAAI,CAAC,MAAMA,EAAS,MAAM,EAAG,CAC3B,IAAIjE,EAAI,GAAIgE,EAAO,SAASA,GAAO,CACjC,KAAO,EAAEhE,EAAIiE,EAAS,QACpB,GAAIzD,EAAO,KAAKyD,EAAUjE,CAAC,EACzB,OAAAgE,EAAK,MAAQC,EAASjE,CAAC,EACvBgE,EAAK,KAAO,GACLA,EAIX,OAAAA,EAAK,MAAQvD,EACbuD,EAAK,KAAO,GAELA,CACjB,EAEQ,OAAOA,EAAK,KAAOA,CACpB,CACF,CAGD,MAAO,CAAE,KAAMV,EAChB,CACDhD,EAAQ,OAAS8B,EAEjB,SAASkB,GAAa,CACpB,MAAO,CAAE,MAAO7C,EAAa,KAAM,EAAI,CACxC,CAED,OAAAc,EAAQ,UAAY,CAClB,YAAaA,EAEb,MAAO,SAAS4C,EAAe,CAc7B,GAbA,KAAK,KAAO,EACZ,KAAK,KAAO,EAGZ,KAAK,KAAO,KAAK,MAAQ1D,EACzB,KAAK,KAAO,GACZ,KAAK,SAAW,KAEhB,KAAK,OAAS,OACd,KAAK,IAAMA,EAEX,KAAK,WAAW,QAAQoD,CAAa,EAEjC,CAACM,EACH,QAASC,KAAQ,KAEXA,EAAK,OAAO,CAAC,IAAM,KACnB5D,EAAO,KAAK,KAAM4D,CAAI,GACtB,CAAC,MAAM,CAACA,EAAK,MAAM,CAAC,CAAC,IACvB,KAAKA,CAAI,EAAI3D,EAIpB,EAED,KAAM,UAAW,CACf,KAAK,KAAO,GAEZ,IAAI4D,EAAY,KAAK,WAAW,CAAC,EAC7BC,EAAaD,EAAU,WAC3B,GAAIC,EAAW,OAAS,QACtB,MAAMA,EAAW,IAGnB,OAAO,KAAK,IACb,EAED,kBAAmB,SAASC,EAAW,CACrC,GAAI,KAAK,KACP,MAAMA,EAGR,IAAI5F,EAAU,KACd,SAAS6F,EAAOC,EAAKC,EAAQ,CAC3B,OAAA5B,EAAO,KAAO,QACdA,EAAO,IAAMyB,EACb5F,EAAQ,KAAO8F,EAEXC,IAGF/F,EAAQ,OAAS,OACjBA,EAAQ,IAAM8B,GAGT,CAAC,CAAEiE,CACX,CAED,QAAS1E,EAAI,KAAK,WAAW,OAAS,EAAGA,GAAK,EAAG,EAAEA,EAAG,CACpD,IAAI4D,EAAQ,KAAK,WAAW5D,CAAC,EACzB8C,EAASc,EAAM,WAEnB,GAAIA,EAAM,SAAW,OAInB,OAAOY,EAAO,KAAK,EAGrB,GAAIZ,EAAM,QAAU,KAAK,KAAM,CAC7B,IAAIe,EAAWnE,EAAO,KAAKoD,EAAO,UAAU,EACxCgB,EAAapE,EAAO,KAAKoD,EAAO,YAAY,EAEhD,GAAIe,GAAYC,EAAY,CAC1B,GAAI,KAAK,KAAOhB,EAAM,SACpB,OAAOY,EAAOZ,EAAM,SAAU,EAAI,EAC7B,GAAI,KAAK,KAAOA,EAAM,WAC3B,OAAOY,EAAOZ,EAAM,UAAU,CAGjC,SAAUe,GACT,GAAI,KAAK,KAAOf,EAAM,SACpB,OAAOY,EAAOZ,EAAM,SAAU,EAAI,UAG3BgB,GACT,GAAI,KAAK,KAAOhB,EAAM,WACpB,OAAOY,EAAOZ,EAAM,UAAU,MAIhC,OAAM,IAAI,MAAM,wCAAwC,CAE3D,CACF,CACF,EAED,OAAQ,SAASiB,EAAMvF,EAAK,CAC1B,QAASU,EAAI,KAAK,WAAW,OAAS,EAAGA,GAAK,EAAG,EAAEA,EAAG,CACpD,IAAI4D,EAAQ,KAAK,WAAW5D,CAAC,EAC7B,GAAI4D,EAAM,QAAU,KAAK,MACrBpD,EAAO,KAAKoD,EAAO,YAAY,GAC/B,KAAK,KAAOA,EAAM,WAAY,CAChC,IAAIkB,EAAelB,EACnB,KACD,CACF,CAEGkB,IACCD,IAAS,SACTA,IAAS,aACVC,EAAa,QAAUxF,GACvBA,GAAOwF,EAAa,aAGtBA,EAAe,MAGjB,IAAIhC,EAASgC,EAAeA,EAAa,WAAa,CAAA,EAItD,OAHAhC,EAAO,KAAO+B,EACd/B,EAAO,IAAMxD,EAETwF,GACF,KAAK,OAAS,OACd,KAAK,KAAOA,EAAa,WAClBhD,GAGF,KAAK,SAASgB,CAAM,CAC5B,EAED,SAAU,SAASA,EAAQiC,EAAU,CACnC,GAAIjC,EAAO,OAAS,QAClB,MAAMA,EAAO,IAGf,OAAIA,EAAO,OAAS,SAChBA,EAAO,OAAS,WAClB,KAAK,KAAOA,EAAO,IACVA,EAAO,OAAS,UACzB,KAAK,KAAO,KAAK,IAAMA,EAAO,IAC9B,KAAK,OAAS,SACd,KAAK,KAAO,OACHA,EAAO,OAAS,UAAYiC,IACrC,KAAK,KAAOA,GAGPjD,CACR,EAED,OAAQ,SAASkD,EAAY,CAC3B,QAAShF,EAAI,KAAK,WAAW,OAAS,EAAGA,GAAK,EAAG,EAAEA,EAAG,CACpD,IAAI4D,EAAQ,KAAK,WAAW5D,CAAC,EAC7B,GAAI4D,EAAM,aAAeoB,EACvB,YAAK,SAASpB,EAAM,WAAYA,EAAM,QAAQ,EAC9CC,EAAcD,CAAK,EACZ9B,CAEV,CACF,EAED,MAAS,SAASmD,EAAQ,CACxB,QAASjF,EAAI,KAAK,WAAW,OAAS,EAAGA,GAAK,EAAG,EAAEA,EAAG,CACpD,IAAI4D,EAAQ,KAAK,WAAW5D,CAAC,EAC7B,GAAI4D,EAAM,SAAWqB,EAAQ,CAC3B,IAAInC,EAASc,EAAM,WACnB,GAAId,EAAO,OAAS,QAAS,CAC3B,IAAIoC,EAASpC,EAAO,IACpBe,EAAcD,CAAK,CACpB,CACD,OAAOsB,CACR,CACF,CAID,MAAM,IAAI,MAAM,uBAAuB,CACxC,EAED,cAAe,SAASjB,EAAUkB,EAAYC,EAAS,CACrD,YAAK,SAAW,CACd,SAAUhD,EAAO6B,CAAQ,EACzB,WAAYkB,EACZ,QAASC,CACjB,EAEU,KAAK,SAAW,SAGlB,KAAK,IAAM3E,GAGNqB,CACR,CACL,EAMSxB,CAET,EAKGH,EAAO,OACV,EAEA,GAAI,CACF,mBAAqBE,CACvB,MAA+B,CAU7B,SAAS,IAAK,wBAAwB,EAAEA,CAAO,CACjD,CACA,CAAC,EASGgF,GAA0B,SAAiCC,EAAS,CACtE,IAAIC,EAAQD,EAAQ,QAAQ,IAAK,EAAE,EAC/BE,EAAI,SAASD,EAAM,MAAM,EAAG,CAAC,EAAG,EAAE,EAClCE,EAAI,SAASF,EAAM,MAAM,EAAG,CAAC,EAAG,EAAE,EAClCG,EAAI,SAASH,EAAM,MAAM,EAAG,CAAC,EAAG,EAAE,EAEtC,OAAOC,EAAI,KAAQC,EAAI,KAAQC,EAAI,KAAQ,IAAM,UAAY,SAC/D,EA0BIC,GAAa,SAAoBC,EAAe,CAClD,IAAIC,EAAgB,GAEpB,GAAID,GAAiB,IAAMA,EAAgB,KAAM,CAC/C,IAAIE,EAAU,KAAK,MAAMF,EAAgB,EAAE,EAC3CC,EAAgBC,EAAU,OAC1B,IAAIC,EAAUD,IAAY,GAAK,EAAI,KAAK,MAAMF,EAAgB,EAAE,EAChE,OAAOC,GAAuBE,EAAU,EAAI,IAAMA,EAAU,OAAS,GACtE,CAED,GAAIH,GAAiB,MAAQA,EAAgB,MAAO,CAClD,IAAII,EAAQ,KAAK,MAAMJ,EAAgB,IAAI,EAC3CC,EAAgBG,EAAQ,MAExB,IAAIC,EAAWL,EAAgB,KAAO,IAAMI,IAAU,GAAK,EAAI,KAAK,MAAMJ,EAAgB,KAAO,EAAE,EAEnG,OAAOC,GAAuBI,EAAW,EAAI,IAAMA,EAAW,OAAS,GACxE,CAED,GAAIL,GAAiB,MAAO,CAC1B,IAAIM,EAAO,KAAK,MAAMN,EAAgB,KAAK,EAC3CC,EAAgBK,EAAO,OAEvB,IAAIC,EAASP,EAAgB,MAAQ,MAAQM,GAAQ,IAAM,EAAI,KAAK,MAAMN,EAAgB,MAAQ,IAAI,EAEtG,OAAOC,GAAuBM,EAAS,EAAI,IAAMA,EAAS,MAAQ,GACnE,CAED,OAAO,KAAK,MAAMP,CAAa,EAAI,MACrC,EAUIQ,GAAc,SAAqBC,EAASC,EAAWC,EAAU,CAC/DF,IAAY,SACdA,EAAU,IAGRC,IAAc,SAChBA,EAAY,MAGVC,IAAa,SACfA,EAAW,IAGb,IAAIC,EAAiBH,EAErB,OAAIA,EAAQ,OAASC,IACnBE,EAAiBH,EAAQ,UAAU,EAAGC,CAAS,GAG7CC,IACFC,EAAiBA,EAAiB,OAG7BA,CACT,EAYIC,GAA2B,SAAkCV,EAASW,EAAW,CACnF,OAAIX,IAAY,MAAQA,IAAY,EAAU,CAC5C,KAAM,GACN,KAAM,EACV,EACMA,EAAU,KAAa,CACzB,KAAM,QAAQA,EAAU,IAAI,QAAQ,CAAC,CAAC,EACtC,KAAMW,EAAU,MACpB,EACMX,EAAU,MAAc,CAC1B,KAAM,QAAQA,EAAU,MAAM,QAAQ,CAAC,CAAC,EACxC,KAAMW,EAAU,IACpB,EACS,CACL,KAAM,QAAQX,EAAU,OAAO,QAAQ,CAAC,CAAC,EACzC,KAAMW,EAAU,GACpB,CACA,EAaIC,GAAuB,SAA8BC,EAAMN,EAAWC,EAAU,CAClF,IAAIM,EAAOC,EAEPR,IAAc,SAChBA,EAAY,IAGVC,IAAa,SACfA,EAAW,KAGb,IAAIQ,GAAYF,GAASC,EAAiBF,GAAQ,KAAO,OAASA,EAAK,WAAa,KAAOE,EAAiBF,GAAQ,KAAO,OAASA,EAAK,OAAS,KAAOC,EAAQ,WAC7JG,EAAWD,EAAS,YAAY,GAAG,EACvC,GAAIC,IAAa,GAAI,OAAOD,EAC5B,IAAIE,EAAQ,CAACF,EAAS,MAAM,EAAGC,CAAQ,EAAGD,EAAS,MAAMC,CAAQ,CAAC,EAC9D5C,EAAO6C,EAAM,CAAC,EACdC,EAAYD,EAAM,CAAC,EACvB,OAAI7C,EAAK,QAAUkC,EAAkBS,EAC9B,GAAK3C,EAAK,MAAM,EAAGkC,CAAS,EAAIC,EAAWW,CACpD,EAaIC,GAAY,SAAmBJ,EAAU,CAC3C,IAAIK,EAAcL,EAAS,OAE3B,GAAI,CAACK,EACH,MAAO,CACL,UAAW,GACX,SAAU,EAChB,EAIE,IAAIC,EAAYD,EAAY,MAAM,KAAK,EAEvC,GAAIC,EAAU,SAAW,EACvB,MAAO,CACL,UAAWA,EAAU,CAAC,EACtB,SAAU,EAChB,EAIE,IAAIC,EAAWD,EAAU,IAAG,GAAM,GAC9BE,EAAYF,EAAU,KAAK,GAAG,EAClC,MAAO,CACL,UAAWE,EACX,SAAUD,CACd,CACA,EAYIE,GAA4B,UAAY,CAC1C,IAAIC,EAAqB/H,GAAgCU,EAAU,KAAK,SAASsH,EAAQC,EAAO,CAC9F,IAAIC,EAAK/C,EAAMgD,EAAiBX,EAAWY,EAAiBC,EAAUC,EAAUC,EAAaC,EAAeC,EAAmBC,EAAeC,EAAUC,EAASC,EAEjK,OAAOnI,EAAU,KAAK,SAAkBoI,EAAU,CAChD,OACE,OAAQA,EAAS,KAAOA,EAAS,KAAI,CACnC,IAAK,GAGH,GAFAZ,EAAMD,EAAM,IAAK9C,EAAO8C,EAAM,KAAME,EAAkBF,EAAM,UAAWT,EAAYW,IAAoB,OAAS,KAAOA,EAEnH,EAAE,CAACD,GAAO,CAAC/C,GAAO,CACpB2D,EAAS,KAAO,EAChB,KACD,CAED,OAAOA,EAAS,OAAO,QAAQ,EAEjC,IAAK,GACH,OAAAA,EAAS,KAAO,EAChBA,EAAS,KAAO,EACT,MAAMZ,CAAG,EAElB,IAAK,GACH,OAAAG,EAAWS,EAAS,KACpBA,EAAS,KAAO,EACTT,EAAS,OAElB,IAAK,GACHC,EAAWQ,EAAS,KACpBP,EAAcF,EAAS,QAAQ,IAAI,cAAc,EACjDG,EAAgBhB,IAAce,EAAcA,EAAY,MAAM,GAAG,EAAE,CAAC,EAAIpD,GACxEsD,EAAoBJ,EAAS,QAAQ,IAAI,qBAAqB,EAC9DK,EAAgBD,GAAqB,KAAO,OAASA,EAAkB,MAAM,kBAAkB,EAC/FE,GAAYP,EAAkBM,GAAiB,KAAO,OAASA,EAAc,CAAC,IAAM,KAAON,EAAkB,cAAgB,KAAK,IAAK,EAAG,IAAMI,EAChJI,EAAU,IAAI,gBAAgBN,CAAQ,EACtCO,EAAO,OAAO,OAAO,SAAS,cAAc,GAAG,EAAG,CAChD,KAAMD,EACN,SAAUD,EACV,MAAO,eACrB,CAAa,EACD,SAAS,KAAK,OAAOE,CAAI,EACzBA,EAAK,MAAK,EACVA,EAAK,OAAM,EACX,IAAI,gBAAgBD,CAAO,EAC3BE,EAAS,KAAO,GAChB,MAEF,IAAK,IACHA,EAAS,KAAO,GAChBA,EAAS,GAAKA,EAAS,MAAS,CAAC,EACjC,QAAQ,KAAK,mBAAoBA,EAAS,EAAE,EAE9C,IAAK,IACL,IAAK,MACH,OAAOA,EAAS,MACnB,CAET,EAAOd,EAAS,KAAM,CAAC,CAAC,EAAG,EAAE,CAAC,CAAC,CAC5B,CAAA,CAAC,EAEF,OAAO,SAAsBe,EAAI,CAC/B,OAAOhB,EAAM,MAAM,KAAM,SAAS,CACtC,CACA,EAAI,EAOJ,SAASiB,GAAaC,EAAW,CAC/B,GAAI,CAEF,IAAIC,EAAkB,OAAOD,CAAS,EAAE,YAAW,EAGnD,MAAO,EAAQ,KAAK,MAAMC,CAAe,CAC1C,MAAe,CACd,MAAO,EACR,CACH,CAOA,SAASC,GAAQC,EAAK,CAEpB,OAAOA,EAAI,MAAO,EAAC,KAAK,SAAUC,EAAGrD,EAAG,CACtC,OAAOqD,EAAIrD,CACf,CAAG,CACH,CAqBA,SAASsD,GAAMC,EAAKC,EAAK1J,EAAO,CAC9B,OAAIA,EAAQyJ,EACHA,EAGLzJ,EAAQ0J,EACHA,EAGF1J,CACT,CAUA,SAAS2J,GAAmBC,EAAQC,EAAG,CACrC,IAAIC,EAAUN,GAAM,EAAG,EAAGK,CAAC,EAEvBE,GAAOH,EAAO,OAAS,GAAKE,EAE5BE,EAAO,KAAK,MAAMD,CAAG,EAErBE,EAAOF,EAAMC,EAKjB,OAAIJ,EAAOI,EAAO,CAAC,IAAM,OAEhBJ,EAAOI,CAAI,EAAIC,GAAQL,EAAOI,EAAO,CAAC,EAAIJ,EAAOI,CAAI,GAIvDJ,EAAOI,CAAI,CACpB,CASG,IAACE,GAAuB,SAA8BC,EAAMC,EAAW,CAIxE,IAAIR,EAASP,GAAQc,CAAI,EACzB,OAAOC,EAAU,IAAI,SAAUC,EAAU,CACvC,OAAOV,GAAmBC,EAAQS,CAAQ,CAC9C,CAAG,CACH,EAEIC,EAA0B,aAE1BC,GAAiB,SAAwBC,EAAK,CAChD,OAAOA,EAAI,QAAQ,oBAAqB,EAAE,CAC5C,EAEIC,EAAiB,SAAwB7F,EAAM,CACjD,OAAQA,GAAQ,IAAI,QAAQ,UAAW,SAAU8F,EAAG,CAClD,OAAOA,EAAE,aACb,CAAG,CACH,EACIC,EAAe,SAAsBC,EAAM,CAC7C,IAAIC,EAAOD,EAAK,KACZ7C,EAAY8C,GAAQ,MAAQA,EAAK,KAAOA,EAAK,KAAK,MAAM,GAAG,EAAE,MAAK,EAAK,GAC3E,OAAOJ,EAAe1C,CAAS,CACjC,EACI+C,EAAc,SAAqBzD,EAAO,CAC5C,IAAIwD,EAAOxD,EAAM,KAEjB,GAAIwD,GAAQA,EAAK,KAAM,CACrB,IAAI/C,EAAW+C,EAAK,KAAK,MAAM,GAAG,EAAE,OAAS,EAAIA,EAAK,KAAK,MAAM,GAAG,EAAE,IAAK,EAAG,GAC9E,OAAOJ,EAAe3C,CAAQ,CAC/B,CAED,MAAO,EACT,EACIiD,GAAsB,SAA6BtD,EAAO,CAC5D,IAAIuD,EAEAC,EAAexD,EAAM,aACrByD,EAAUzD,EAAM,QAChB0D,EAAqBF,EAAa,KAClCG,EAAWD,EAAmB,SAC9BE,EAASF,EAAmB,OAC5BG,EAAKL,EAAa,GAClBM,EAAwBN,EAAa,kBACrCO,EAA+BD,IAA0B,OAAS,CAAA,EAAKA,EAEvEpD,EAAQ+C,GAAW,CAAE,EACrBO,EAA0BtD,EAAM,kBAEhCuD,EAAoB,CACtB,eAAgBjB,GAAgBY,GAAU,KAAO,OAASA,EAAO,OAAS,EAAE,EAC5E,qBAAsBV,EAAa,CACjC,KAAMU,CACZ,CAAK,EACD,oBAAqBP,EAAY,CAC/B,KAAMO,CACZ,CAAK,EACD,gBAAiBA,GAAU,KAAO,OAASA,EAAO,MAClD,gBAAiBA,GAAU,KAAO,OAASA,EAAO,aAClD,aAAcA,GAAU,KAAO,OAASA,EAAO,GAC/C,kBAAmBC,EACnB,aAAcb,GAAgBW,GAAY,KAAO,OAASA,EAAS,OAAS,EAAE,EAC9E,mBAAoBT,EAAa,CAC/B,KAAMS,CACZ,CAAK,EACD,kBAAmBN,EAAY,CAC7B,KAAMM,CACZ,CAAK,EACD,eAAgBJ,EAAkBI,GAAY,KAAO,OAASA,EAAS,QAAU,KAAOJ,EAAkB,EAC9G,EACMW,EAAuC,OAAO,QAAQH,GAAsE,CAAA,CAAE,EAAE,OAAO,SAAUI,EAAK3D,EAAO,CAC/J,IAAIpI,EAAMoI,EAAM,CAAC,EACbjI,EAAQiI,EAAM,CAAC,EACnB,OAAA2D,EAAI,iCAAmC/L,CAAG,EAAIG,EACvC4L,CACR,EAAE,CAAE,CAAA,EACDC,EAAkC,OAAO,QAAQJ,GAA4D,CAAA,CAAE,EAAE,OAAO,SAAUG,EAAKE,EAAO,CAChJ,IAAIjM,EAAMiM,EAAM,CAAC,EACb9L,EAAQ8L,EAAM,CAAC,EACnB,OAAAF,EAAI,4BAA8B/L,CAAG,EAAIG,EAClC4L,CACR,EAAE,CAAE,CAAA,EAEDG,EAAYzL,EAAS,CAAA,EAAIoL,EAAmBC,EAAsCE,CAA+B,EAErH,OAAOE,CACT,EACIC,GAA4B,SAAmCC,EAAO,CACxE,IAAIC,EAAUD,EAAM,QAChBF,EAAYE,EAAM,UAEtB,OAAOC,GAAW,KAAO,OAASA,EAAQ,QAAQ5B,EAAyB,SAAU6B,EAAGC,EAAS,CAC/F,OAAOL,EAAUK,EAAQ,KAAI,CAAE,EAAIL,EAAUK,EAAQ,KAAM,EAAC,YAAa,CAAA,EAAI,EACjF,CAAG,CACH,EACIC,GAAiC,SAAwCC,EAAO,CAClF,IAAIJ,EAAUI,EAAM,QAChBP,EAAYO,EAAM,UAClBC,EAA2BhC,GAAe2B,CAAO,EACjDM,EAAUD,EAAyB,MAAMjC,CAAuB,EACpE,OAAKkC,EACEA,EAAQ,IAAI,SAAUC,EAAO,CAClC,OAAOA,EAAM,QAAQ,KAAM,EAAE,EAAE,QAAQ,KAAM,EAAE,EAAE,MACrD,CAAG,EAAE,OAAO,SAAUC,EAAU,CAC5B,OAAOX,EAAUW,CAAQ,IAAM,MACnC,CAAG,EALoB,EAMvB,EASIC,GAAwB,SAA+BC,EAAeC,EAAcC,EAAU,CAChG,IAAIC,EAAQ,KAERC,EAAQ,UAAiB,CACtBD,GACHH,IAGFK,GACJ,EAEMC,EAAO,UAAgB,CACrBH,IACF,aAAaA,CAAK,EAClBA,EAAQ,KACRF,IAEN,EAEMI,EAAQ,UAAiB,CACvBF,GACF,aAAaA,CAAK,EAGpBA,EAAQ,WAAW,UAAY,CAC7BG,GACD,EAAEJ,CAAQ,CACf,EAEE,MAAO,CACL,MAAOE,EACP,KAAME,CACV,CACA,EAQIC,EAAqB,SAA4BC,EAAYC,EAAW,CAE1E,GAAIA,IAAc,KAAM,OAAO,KAC/B,IAAIC,EAAc,KAAK,MAAM,KAAK,IAAG,EAAK,GAAI,EAC9C,OAAOF,EAAaC,EAAYC,CAClC,EAQIC,GAA0B,SAAiCC,EAAa,CAE1E,OAAAA,EAAY,KAAK,SAAUC,EAAMC,EAAM,CACrC,OAAO,KAAK,IAAID,EAAK,SAAS,EAAI,KAAK,IAAIC,EAAK,SAAS,CAC7D,CAAG,EACMF,EAAY,CAAC,CACtB,EAQIG,GAAgB,SAAuBpH,EAAS,CAClD,IAAIqH,EAAQ,CACV,EAAG,QACH,GAAI,OACJ,EAAG,MACH,EAAG,KACH,EAAG,EACP,EAEE,GAAIrH,EAAU,GACZ,MAAO,KAIT,IAAIsH,EAAQ,CAAA,EACZ,cAAO,KAAKD,CAAK,EAAE,QAAQ,SAAUE,EAAM,CACzC,IAAI9N,EAAQ,KAAK,MAAMuG,EAAUqH,EAAME,CAAI,CAAC,EACxCvH,EAAU,IAAMsH,EAAM,OAAS,GAC/BA,EAAM,SAAW,GAEjB7N,EAAQ,IACV6N,EAAM,KAAK7N,EAAQ8N,CAAI,EACvBvH,GAAWvG,EAAQ4N,EAAME,CAAI,EAEnC,CAAG,EACMD,EAAM,KAAK,GAAG,CACvB,EAUIE,GAAkB,SAAyB1I,EAAM2I,EAAYC,EAAM,CACrE,IAAIC,EAAeF,EAAW,kCAC1BG,EAAeH,EAAW,iCAC1BI,EAAcJ,EAAW,8BACzBK,EAAYL,EAAW,WACvBM,EAAsBL,EAAK,uBAC3BM,EAAeN,EAAK,cACpBO,EAASP,EAAK,OACdQ,EAAW,CACb,IAAK,CACH,UAAWtB,EAAmBkB,EAAWH,CAAY,EAErD,UAAWA,IAAiB,OAAS,CAACI,GAAuBA,IAAwB,EACtF,EACD,IAAK,CACH,UAAWnB,EAAmBoB,EAAcJ,CAAY,EAExD,UAAWA,IAAiB,MAAQ,CAAC,CAACG,GAAuB,CAAC,CAACC,CAChE,EACD,GAAI,CACF,UAAWpB,EAAmBkB,EAAWD,CAAW,EAEpD,UAAWI,IAAW,QAAUJ,IAAgB,IACjD,CACL,EACMM,EAAYD,EAASpJ,CAAI,EAC7B,OAAOqJ,EAAYpO,EAAS,CAAE,EAAEoO,EAAW,CACzC,KAAMrJ,CACP,CAAA,EAAI,IACP,EASIsJ,GAAwB,SAA+BX,EAAYC,EAAM,CAE3E,IAAIQ,EAAW,CAAC,MAAO,MAAO,IAAI,EAClC,OAAOA,EAAS,IAAI,SAAUpJ,EAAM,CAClC,OAAO0I,GAAgB1I,EAAM2I,EAAYC,CAAI,CACjD,CAAG,EAAE,OAAO,SAAUS,EAAW,CAC7B,MAAO,CAAC,CAACA,GAAaA,EAAU,SACpC,CAAG,EAAE,IAAI,SAAUA,EAAW,CAC1B,OAAOpO,EAAS,CAAE,EAAEoO,EAAW,CAC7B,KAAMA,EAAU,WAAa,EAAI,QAAU,QAC3C,YAAaA,EAAU,WAAa,CAC1C,CAAK,CACL,CAAG,CACH,EAUIE,GAAoB,SAA2BhE,EAAM,CACvD,IAAIoD,EAAapD,EAAK,WAClBqD,EAAOrD,EAAK,KAChB,GAAI,CAACoD,GAAc,CAACC,EAAM,MAAO,CAC/B,KAAM,GACN,UAAW,GACX,KAAM,GACN,YAAa,EACjB,EAEE,IAAIT,EAAcmB,GAAsBX,EAAYC,CAAI,EAEpDY,EAAatB,GAAwBC,CAAW,EACpD,OAAOqB,EAAa,CAClB,KAAMA,GAAc,KAAO,OAASA,EAAW,KAC/C,UAAWlB,GAAckB,EAAW,WAAa,EAAI,CAACA,EAAW,UAAYA,EAAW,SAAS,EACjG,KAAMA,EAAW,KACjB,YAAaA,EAAW,WAC5B,EAAM,CACF,KAAM,GACN,UAAW,GACX,KAAM,GACN,YAAa,EACjB,CACA","x_google_ignoreList":[0]}