NeahNew/.next/server/vendor-chunks/ioredis.js
2025-05-03 14:17:46 +02:00

695 lines
1.1 MiB

"use strict";
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
exports.id = "vendor-chunks/ioredis";
exports.ids = ["vendor-chunks/ioredis"];
exports.modules = {
/***/ "(action-browser)/./node_modules/ioredis/built/Command.js":
/*!***********************************************!*\
!*** ./node_modules/ioredis/built/Command.js ***!
\***********************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst commands_1 = __webpack_require__(/*! @ioredis/commands */ \"(action-browser)/./node_modules/@ioredis/commands/built/index.js\");\nconst calculateSlot = __webpack_require__(/*! cluster-key-slot */ \"(action-browser)/./node_modules/cluster-key-slot/lib/index.js\");\nconst standard_as_callback_1 = __webpack_require__(/*! standard-as-callback */ \"(action-browser)/./node_modules/standard-as-callback/built/index.js\");\nconst utils_1 = __webpack_require__(/*! ./utils */ \"(action-browser)/./node_modules/ioredis/built/utils/index.js\");\n/**\n * Command instance\n *\n * It's rare that you need to create a Command instance yourself.\n *\n * ```js\n * var infoCommand = new Command('info', null, function (err, result) {\n * console.log('result', result);\n * });\n *\n * redis.sendCommand(infoCommand);\n *\n * // When no callback provided, Command instance will have a `promise` property,\n * // which will resolve/reject with the result of the command.\n * var getCommand = new Command('get', ['foo']);\n * getCommand.promise.then(function (result) {\n * console.log('result', result);\n * });\n * ```\n */\nclass Command {\n /**\n * Creates an instance of Command.\n * @param name Command name\n * @param args An array of command arguments\n * @param options\n * @param callback The callback that handles the response.\n * If omit, the response will be handled via Promise\n */\n constructor(name, args = [], options = {}, callback) {\n this.name = name;\n this.inTransaction = false;\n this.isResolved = false;\n this.transformed = false;\n this.replyEncoding = options.replyEncoding;\n this.errorStack = options.errorStack;\n this.args = args.flat();\n this.callback = callback;\n this.initPromise();\n if (options.keyPrefix) {\n // @ts-expect-error\n const isBufferKeyPrefix = options.keyPrefix instanceof Buffer;\n // @ts-expect-error\n let keyPrefixBuffer = isBufferKeyPrefix\n ? options.keyPrefix\n : null;\n this._iterateKeys((key) => {\n if (key instanceof Buffer) {\n if (keyPrefixBuffer === null) {\n keyPrefixBuffer = Buffer.from(options.keyPrefix);\n }\n return Buffer.concat([keyPrefixBuffer, key]);\n }\n else if (isBufferKeyPrefix) {\n // @ts-expect-error\n return Buffer.concat([options.keyPrefix, Buffer.from(String(key))]);\n }\n return options.keyPrefix + key;\n });\n }\n if (options.readOnly) {\n this.isReadOnly = true;\n }\n }\n /**\n * Check whether the command has the flag\n */\n static checkFlag(flagName, commandName) {\n return !!this.getFlagMap()[flagName][commandName];\n }\n static setArgumentTransformer(name, func) {\n this._transformer.argument[name] = func;\n }\n static setReplyTransformer(name, func) {\n this._transformer.reply[name] = func;\n }\n static getFlagMap() {\n if (!this.flagMap) {\n this.flagMap = Object.keys(Command.FLAGS).reduce((map, flagName) => {\n map[flagName] = {};\n Command.FLAGS[flagName].forEach((commandName) => {\n map[flagName][commandName] = true;\n });\n return map;\n }, {});\n }\n return this.flagMap;\n }\n getSlot() {\n if (typeof this.slot === \"undefined\") {\n const key = this.getKeys()[0];\n this.slot = key == null ? null : calculateSlot(key);\n }\n return this.slot;\n }\n getKeys() {\n return this._iterateKeys();\n }\n /**\n * Convert command to writable buffer or string\n */\n toWritable(_socket) {\n let result;\n const commandStr = \"*\" +\n (this.args.length + 1) +\n \"\\r\\n$\" +\n Buffer.byteLength(this.name) +\n \"\\r\\n\" +\n this.name +\n \"\\r\\n\";\n if (this.bufferMode) {\n const buffers = new MixedBuffers();\n buffers.push(commandStr);\n for (let i = 0; i < this.args.length; ++i) {\n const arg = this.args[i];\n if (arg instanceof Buffer) {\n if (arg.length === 0) {\n buffers.push(\"$0\\r\\n\\r\\n\");\n }\n else {\n buffers.push(\"$\" + arg.length + \"\\r\\n\");\n buffers.push(arg);\n buffers.push(\"\\r\\n\");\n }\n }\n else {\n buffers.push(\"$\" +\n Buffer.byteLength(arg) +\n \"\\r\\n\" +\n arg +\n \"\\r\\n\");\n }\n }\n result = buffers.toBuffer();\n }\n else {\n result = commandStr;\n for (let i = 0; i < this.args.length; ++i) {\n const arg = this.args[i];\n result +=\n \"$\" +\n Buffer.byteLength(arg) +\n \"\\r\\n\" +\n arg +\n \"\\r\\n\";\n }\n }\n return result;\n }\n stringifyArguments() {\n for (let i = 0; i < this.args.length; ++i) {\n const arg = this.args[i];\n if (typeof arg === \"string\") {\n // buffers and strings don't need any transformation\n }\n else if (arg instanceof Buffer) {\n this.bufferMode = true;\n }\n else {\n this.args[i] = (0, utils_1.toArg)(arg);\n }\n }\n }\n /**\n * Convert buffer/buffer[] to string/string[],\n * and apply reply transformer.\n */\n transformReply(result) {\n if (this.replyEncoding) {\n result = (0, utils_1.convertBufferToString)(result, this.replyEncoding);\n }\n const transformer = Command._transformer.reply[this.name];\n if (transformer) {\n result = transformer(result);\n }\n return result;\n }\n /**\n * Set the wait time before terminating the attempt to execute a command\n * and generating an error.\n */\n setTimeout(ms) {\n if (!this._commandTimeoutTimer) {\n this._commandTimeoutTimer = setTimeout(() => {\n if (!this.isResolved) {\n this.reject(new Error(\"Command timed out\"));\n }\n }, ms);\n }\n }\n initPromise() {\n const promise = new Promise((resolve, reject) => {\n if (!this.transformed) {\n this.transformed = true;\n const transformer = Command._transformer.argument[this.name];\n if (transformer) {\n this.args = transformer(this.args);\n }\n this.stringifyArguments();\n }\n this.resolve = this._convertValue(resolve);\n if (this.errorStack) {\n this.reject = (err) => {\n reject((0, utils_1.optimizeErrorStack)(err, this.errorStack.stack, __dirname));\n };\n }\n else {\n this.reject = reject;\n }\n });\n this.promise = (0, standard_as_callback_1.default)(promise, this.callback);\n }\n /**\n * Iterate through the command arguments that are considered keys.\n */\n _iterateKeys(transform = (key) => key) {\n if (typeof this.keys === \"undefined\") {\n this.keys = [];\n if ((0, commands_1.exists)(this.name)) {\n // @ts-expect-error\n const keyIndexes = (0, commands_1.getKeyIndexes)(this.name, this.args);\n for (const index of keyIndexes) {\n this.args[index] = transform(this.args[index]);\n this.keys.push(this.args[index]);\n }\n }\n }\n return this.keys;\n }\n /**\n * Convert the value from buffer to the target encoding.\n */\n _convertValue(resolve) {\n return (value) => {\n try {\n const existingTimer = this._commandTimeoutTimer;\n if (existingTimer) {\n clearTimeout(existingTimer);\n delete this._commandTimeoutTimer;\n }\n resolve(this.transformReply(value));\n this.isResolved = true;\n }\n catch (err) {\n this.reject(err);\n }\n return this.promise;\n };\n }\n}\nexports[\"default\"] = Command;\nCommand.FLAGS = {\n VALID_IN_SUBSCRIBER_MODE: [\n \"subscribe\",\n \"psubscribe\",\n \"unsubscribe\",\n \"punsubscribe\",\n \"ssubscribe\",\n \"sunsubscribe\",\n \"ping\",\n \"quit\",\n ],\n VALID_IN_MONITOR_MODE: [\"monitor\", \"auth\"],\n ENTER_SUBSCRIBER_MODE: [\"subscribe\", \"psubscribe\", \"ssubscribe\"],\n EXIT_SUBSCRIBER_MODE: [\"unsubscribe\", \"punsubscribe\", \"sunsubscribe\"],\n WILL_DISCONNECT: [\"quit\"],\n};\nCommand._transformer = {\n argument: {},\n reply: {},\n};\nconst msetArgumentTransformer = function (args) {\n if (args.length === 1) {\n if (args[0] instanceof Map) {\n return (0, utils_1.convertMapToArray)(args[0]);\n }\n if (typeof args[0] === \"object\" && args[0] !== null) {\n return (0, utils_1.convertObjectToArray)(args[0]);\n }\n }\n return args;\n};\nconst hsetArgumentTransformer = function (args) {\n if (args.length === 2) {\n if (args[1] instanceof Map) {\n return [args[0]].concat((0, utils_1.convertMapToArray)(args[1]));\n }\n if (typeof args[1] === \"object\" && args[1] !== null) {\n return [args[0]].concat((0, utils_1.convertObjectToArray)(args[1]));\n }\n }\n return args;\n};\nCommand.setArgumentTransformer(\"mset\", msetArgumentTransformer);\nCommand.setArgumentTransformer(\"msetnx\", msetArgumentTransformer);\nCommand.setArgumentTransformer(\"hset\", hsetArgumentTransformer);\nCommand.setArgumentTransformer(\"hmset\", hsetArgumentTransformer);\nCommand.setReplyTransformer(\"hgetall\", function (result) {\n if (Array.isArray(result)) {\n const obj = {};\n for (let i = 0; i < result.length; i += 2) {\n const key = result[i];\n const value = result[i + 1];\n if (key in obj) {\n // can only be truthy if the property is special somehow, like '__proto__' or 'constructor'\n // https://github.com/luin/ioredis/issues/1267\n Object.defineProperty(obj, key, {\n value,\n configurable: true,\n enumerable: true,\n writable: true,\n });\n }\n else {\n obj[key] = value;\n }\n }\n return obj;\n }\n return result;\n});\nclass MixedBuffers {\n constructor() {\n this.length = 0;\n this.items = [];\n }\n push(x) {\n this.length += Buffer.byteLength(x);\n this.items.push(x);\n }\n toBuffer() {\n const result = Buffer.allocUnsafe(this.length);\n let offset = 0;\n for (const item of this.items) {\n const length = Buffer.byteLength(item);\n Buffer.isBuffer(item)\n ? item.copy(result, offset)\n : result.write(item, offset, length);\n offset += length;\n }\n return result;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L0NvbW1hbmQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsbUJBQW1CLG1CQUFPLENBQUMsMkZBQW1CO0FBQzlDLHNCQUFzQixtQkFBTyxDQUFDLHVGQUFrQjtBQUNoRCwrQkFBK0IsbUJBQU8sQ0FBQyxpR0FBc0I7QUFDN0QsZ0JBQWdCLG1CQUFPLENBQUMsNkVBQVM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGFBQWEsSUFBSTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixzQkFBc0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixzQkFBc0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUJBQW1CO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvQ29tbWFuZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvbW1hbmRzXzEgPSByZXF1aXJlKFwiQGlvcmVkaXMvY29tbWFuZHNcIik7XG5jb25zdCBjYWxjdWxhdGVTbG90ID0gcmVxdWlyZShcImNsdXN0ZXIta2V5LXNsb3RcIik7XG5jb25zdCBzdGFuZGFyZF9hc19jYWxsYmFja18xID0gcmVxdWlyZShcInN0YW5kYXJkLWFzLWNhbGxiYWNrXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyoqXG4gKiBDb21tYW5kIGluc3RhbmNlXG4gKlxuICogSXQncyByYXJlIHRoYXQgeW91IG5lZWQgdG8gY3JlYXRlIGEgQ29tbWFuZCBpbnN0YW5jZSB5b3Vyc2VsZi5cbiAqXG4gKiBgYGBqc1xuICogdmFyIGluZm9Db21tYW5kID0gbmV3IENvbW1hbmQoJ2luZm8nLCBudWxsLCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAqICAgY29uc29sZS5sb2coJ3Jlc3VsdCcsIHJlc3VsdCk7XG4gKiB9KTtcbiAqXG4gKiByZWRpcy5zZW5kQ29tbWFuZChpbmZvQ29tbWFuZCk7XG4gKlxuICogLy8gV2hlbiBubyBjYWxsYmFjayBwcm92aWRlZCwgQ29tbWFuZCBpbnN0YW5jZSB3aWxsIGhhdmUgYSBgcHJvbWlzZWAgcHJvcGVydHksXG4gKiAvLyB3aGljaCB3aWxsIHJlc29sdmUvcmVqZWN0IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgY29tbWFuZC5cbiAqIHZhciBnZXRDb21tYW5kID0gbmV3IENvbW1hbmQoJ2dldCcsIFsnZm9vJ10pO1xuICogZ2V0Q29tbWFuZC5wcm9taXNlLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICogICBjb25zb2xlLmxvZygncmVzdWx0JywgcmVzdWx0KTtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmNsYXNzIENvbW1hbmQge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQ29tbWFuZC5cbiAgICAgKiBAcGFyYW0gbmFtZSBDb21tYW5kIG5hbWVcbiAgICAgKiBAcGFyYW0gYXJncyBBbiBhcnJheSBvZiBjb21tYW5kIGFyZ3VtZW50c1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0aGF0IGhhbmRsZXMgdGhlIHJlc3BvbnNlLlxuICAgICAqIElmIG9taXQsIHRoZSByZXNwb25zZSB3aWxsIGJlIGhhbmRsZWQgdmlhIFByb21pc2VcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBhcmdzID0gW10sIG9wdGlvbnMgPSB7fSwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNSZXNvbHZlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRyYW5zZm9ybWVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVwbHlFbmNvZGluZyA9IG9wdGlvbnMucmVwbHlFbmNvZGluZztcbiAgICAgICAgdGhpcy5lcnJvclN0YWNrID0gb3B0aW9ucy5lcnJvclN0YWNrO1xuICAgICAgICB0aGlzLmFyZ3MgPSBhcmdzLmZsYXQoKTtcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICB0aGlzLmluaXRQcm9taXNlKCk7XG4gICAgICAgIGlmIChvcHRpb25zLmtleVByZWZpeCkge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgY29uc3QgaXNCdWZmZXJLZXlQcmVmaXggPSBvcHRpb25zLmtleVByZWZpeCBpbnN0YW5jZW9mIEJ1ZmZlcjtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGxldCBrZXlQcmVmaXhCdWZmZXIgPSBpc0J1ZmZlcktleVByZWZpeFxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5rZXlQcmVmaXhcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9pdGVyYXRlS2V5cygoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5UHJlZml4QnVmZmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlQcmVmaXhCdWZmZXIgPSBCdWZmZXIuZnJvbShvcHRpb25zLmtleVByZWZpeCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2tleVByZWZpeEJ1ZmZlciwga2V5XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQnVmZmVyS2V5UHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW29wdGlvbnMua2V5UHJlZml4LCBCdWZmZXIuZnJvbShTdHJpbmcoa2V5KSldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMua2V5UHJlZml4ICsga2V5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMuaXNSZWFkT25seSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgd2hldGhlciB0aGUgY29tbWFuZCBoYXMgdGhlIGZsYWdcbiAgICAgKi9cbiAgICBzdGF0aWMgY2hlY2tGbGFnKGZsYWdOYW1lLCBjb21tYW5kTmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmdldEZsYWdNYXAoKVtmbGFnTmFtZV1bY29tbWFuZE5hbWVdO1xuICAgIH1cbiAgICBzdGF0aWMgc2V0QXJndW1lbnRUcmFuc2Zvcm1lcihuYW1lLCBmdW5jKSB7XG4gICAgICAgIHRoaXMuX3RyYW5zZm9ybWVyLmFyZ3VtZW50W25hbWVdID0gZnVuYztcbiAgICB9XG4gICAgc3RhdGljIHNldFJlcGx5VHJhbnNmb3JtZXIobmFtZSwgZnVuYykge1xuICAgICAgICB0aGlzLl90cmFuc2Zvcm1lci5yZXBseVtuYW1lXSA9IGZ1bmM7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRGbGFnTWFwKCkge1xuICAgICAgICBpZiAoIXRoaXMuZmxhZ01hcCkge1xuICAgICAgICAgICAgdGhpcy5mbGFnTWFwID0gT2JqZWN0LmtleXMoQ29tbWFuZC5GTEFHUykucmVkdWNlKChtYXAsIGZsYWdOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgbWFwW2ZsYWdOYW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgIENvbW1hbmQuRkxBR1NbZmxhZ05hbWVdLmZvckVhY2goKGNvbW1hbmROYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG1hcFtmbGFnTmFtZV1bY29tbWFuZE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZsYWdNYXA7XG4gICAgfVxuICAgIGdldFNsb3QoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zbG90ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleXMoKVswXTtcbiAgICAgICAgICAgIHRoaXMuc2xvdCA9IGtleSA9PSBudWxsID8gbnVsbCA6IGNhbGN1bGF0ZVNsb3Qoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zbG90O1xuICAgIH1cbiAgICBnZXRLZXlzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlcmF0ZUtleXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCBjb21tYW5kIHRvIHdyaXRhYmxlIGJ1ZmZlciBvciBzdHJpbmdcbiAgICAgKi9cbiAgICB0b1dyaXRhYmxlKF9zb2NrZXQpIHtcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgY29uc3QgY29tbWFuZFN0ciA9IFwiKlwiICtcbiAgICAgICAgICAgICh0aGlzLmFyZ3MubGVuZ3RoICsgMSkgK1xuICAgICAgICAgICAgXCJcXHJcXG4kXCIgK1xuICAgICAgICAgICAgQnVmZmVyLmJ5dGVMZW5ndGgodGhpcy5uYW1lKSArXG4gICAgICAgICAgICBcIlxcclxcblwiICtcbiAgICAgICAgICAgIHRoaXMubmFtZSArXG4gICAgICAgICAgICBcIlxcclxcblwiO1xuICAgICAgICBpZiAodGhpcy5idWZmZXJNb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBidWZmZXJzID0gbmV3IE1peGVkQnVmZmVycygpO1xuICAgICAgICAgICAgYnVmZmVycy5wdXNoKGNvbW1hbmRTdHIpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFyZ3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmcgPSB0aGlzLmFyZ3NbaV07XG4gICAgICAgICAgICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKFwiJDBcXHJcXG5cXHJcXG5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnB1c2goXCIkXCIgKyBhcmcubGVuZ3RoICsgXCJcXHJcXG5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnB1c2goYXJnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChcIlxcclxcblwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKFwiJFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlci5ieXRlTGVuZ3RoKGFyZykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXHJcXG5cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXHJcXG5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gYnVmZmVycy50b0J1ZmZlcigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gY29tbWFuZFN0cjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJnID0gdGhpcy5hcmdzW2ldO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPVxuICAgICAgICAgICAgICAgICAgICBcIiRcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIuYnl0ZUxlbmd0aChhcmcpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxyXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxyXFxuXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgc3RyaW5naWZ5QXJndW1lbnRzKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgY29uc3QgYXJnID0gdGhpcy5hcmdzW2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBidWZmZXJzIGFuZCBzdHJpbmdzIGRvbid0IG5lZWQgYW55IHRyYW5zZm9ybWF0aW9uXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlck1vZGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcmdzW2ldID0gKDAsIHV0aWxzXzEudG9BcmcpKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCBidWZmZXIvYnVmZmVyW10gdG8gc3RyaW5nL3N0cmluZ1tdLFxuICAgICAqIGFuZCBhcHBseSByZXBseSB0cmFuc2Zvcm1lci5cbiAgICAgKi9cbiAgICB0cmFuc2Zvcm1SZXBseShyZXN1bHQpIHtcbiAgICAgICAgaWYgKHRoaXMucmVwbHlFbmNvZGluZykge1xuICAgICAgICAgICAgcmVzdWx0ID0gKDAsIHV0aWxzXzEuY29udmVydEJ1ZmZlclRvU3RyaW5nKShyZXN1bHQsIHRoaXMucmVwbHlFbmNvZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBDb21tYW5kLl90cmFuc2Zvcm1lci5yZXBseVt0aGlzLm5hbWVdO1xuICAgICAgICBpZiAodHJhbnNmb3JtZXIpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRyYW5zZm9ybWVyKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB3YWl0IHRpbWUgYmVmb3JlIHRlcm1pbmF0aW5nIHRoZSBhdHRlbXB0IHRvIGV4ZWN1dGUgYSBjb21tYW5kXG4gICAgICogYW5kIGdlbmVyYXRpbmcgYW4gZXJyb3IuXG4gICAgICovXG4gICAgc2V0VGltZW91dChtcykge1xuICAgICAgICBpZiAoIXRoaXMuX2NvbW1hbmRUaW1lb3V0VGltZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbW1hbmRUaW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlamVjdChuZXcgRXJyb3IoXCJDb21tYW5kIHRpbWVkIG91dFwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgbXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluaXRQcm9taXNlKCkge1xuICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnRyYW5zZm9ybWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBDb21tYW5kLl90cmFuc2Zvcm1lci5hcmd1bWVudFt0aGlzLm5hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1lcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFyZ3MgPSB0cmFuc2Zvcm1lcih0aGlzLmFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN0cmluZ2lmeUFyZ3VtZW50cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlID0gdGhpcy5fY29udmVydFZhbHVlKHJlc29sdmUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXJyb3JTdGFjaykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0ID0gKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoKDAsIHV0aWxzXzEub3B0aW1pemVFcnJvclN0YWNrKShlcnIsIHRoaXMuZXJyb3JTdGFjay5zdGFjaywgX19kaXJuYW1lKSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0ID0gcmVqZWN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gKDAsIHN0YW5kYXJkX2FzX2NhbGxiYWNrXzEuZGVmYXVsdCkocHJvbWlzZSwgdGhpcy5jYWxsYmFjayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGUgdGhyb3VnaCB0aGUgY29tbWFuZCBhcmd1bWVudHMgdGhhdCBhcmUgY29uc2lkZXJlZCBrZXlzLlxuICAgICAqL1xuICAgIF9pdGVyYXRlS2V5cyh0cmFuc2Zvcm0gPSAoa2V5KSA9PiBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmtleXMgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRoaXMua2V5cyA9IFtdO1xuICAgICAgICAgICAgaWYgKCgwLCBjb21tYW5kc18xLmV4aXN0cykodGhpcy5uYW1lKSkge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmRleGVzID0gKDAsIGNvbW1hbmRzXzEuZ2V0S2V5SW5kZXhlcykodGhpcy5uYW1lLCB0aGlzLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaW5kZXggb2Yga2V5SW5kZXhlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFyZ3NbaW5kZXhdID0gdHJhbnNmb3JtKHRoaXMuYXJnc1tpbmRleF0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmtleXMucHVzaCh0aGlzLmFyZ3NbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMua2V5cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCB0aGUgdmFsdWUgZnJvbSBidWZmZXIgdG8gdGhlIHRhcmdldCBlbmNvZGluZy5cbiAgICAgKi9cbiAgICBfY29udmVydFZhbHVlKHJlc29sdmUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1RpbWVyID0gdGhpcy5fY29tbWFuZFRpbWVvdXRUaW1lcjtcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdUaW1lcikge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZXhpc3RpbmdUaW1lcik7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jb21tYW5kVGltZW91dFRpbWVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMudHJhbnNmb3JtUmVwbHkodmFsdWUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0KGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IENvbW1hbmQ7XG5Db21tYW5kLkZMQUdTID0ge1xuICAgIFZBTElEX0lOX1NVQlNDUklCRVJfTU9ERTogW1xuICAgICAgICBcInN1YnNjcmliZVwiLFxuICAgICAgICBcInBzdWJzY3JpYmVcIixcbiAgICAgICAgXCJ1bnN1YnNjcmliZVwiLFxuICAgICAgICBcInB1bnN1YnNjcmliZVwiLFxuICAgICAgICBcInNzdWJzY3JpYmVcIixcbiAgICAgICAgXCJzdW5zdWJzY3JpYmVcIixcbiAgICAgICAgXCJwaW5nXCIsXG4gICAgICAgIFwicXVpdFwiLFxuICAgIF0sXG4gICAgVkFMSURfSU5fTU9OSVRPUl9NT0RFOiBbXCJtb25pdG9yXCIsIFwiYXV0aFwiXSxcbiAgICBFTlRFUl9TVUJTQ1JJQkVSX01PREU6IFtcInN1YnNjcmliZVwiLCBcInBzdWJzY3JpYmVcIiwgXCJzc3Vic2NyaWJlXCJdLFxuICAgIEVYSVRfU1VCU0NSSUJFUl9NT0RFOiBbXCJ1bnN1YnNjcmliZVwiLCBcInB1bnN1YnNjcmliZVwiLCBcInN1bnN1YnNjcmliZVwiXSxcbiAgICBXSUxMX0RJU0NPTk5FQ1Q6IFtcInF1aXRcIl0sXG59O1xuQ29tbWFuZC5fdHJhbnNmb3JtZXIgPSB7XG4gICAgYXJndW1lbnQ6IHt9LFxuICAgIHJlcGx5OiB7fSxcbn07XG5jb25zdCBtc2V0QXJndW1lbnRUcmFuc2Zvcm1lciA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGlmIChhcmdzWzBdIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIHV0aWxzXzEuY29udmVydE1hcFRvQXJyYXkpKGFyZ3NbMF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gXCJvYmplY3RcIiAmJiBhcmdzWzBdICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIHV0aWxzXzEuY29udmVydE9iamVjdFRvQXJyYXkpKGFyZ3NbMF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufTtcbmNvbnN0IGhzZXRBcmd1bWVudFRyYW5zZm9ybWVyID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKGFyZ3NbMV0gaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICAgIHJldHVybiBbYXJnc1swXV0uY29uY2F0KCgwLCB1dGlsc18xLmNvbnZlcnRNYXBUb0FycmF5KShhcmdzWzFdKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzFdID09PSBcIm9iamVjdFwiICYmIGFyZ3NbMV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBbYXJnc1swXV0uY29uY2F0KCgwLCB1dGlsc18xLmNvbnZlcnRPYmplY3RUb0FycmF5KShhcmdzWzFdKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59O1xuQ29tbWFuZC5zZXRBcmd1bWVudFRyYW5zZm9ybWVyKFwibXNldFwiLCBtc2V0QXJndW1lbnRUcmFuc2Zvcm1lcik7XG5Db21tYW5kLnNldEFyZ3VtZW50VHJhbnNmb3JtZXIoXCJtc2V0bnhcIiwgbXNldEFyZ3VtZW50VHJhbnNmb3JtZXIpO1xuQ29tbWFuZC5zZXRBcmd1bWVudFRyYW5zZm9ybWVyKFwiaHNldFwiLCBoc2V0QXJndW1lbnRUcmFuc2Zvcm1lcik7XG5Db21tYW5kLnNldEFyZ3VtZW50VHJhbnNmb3JtZXIoXCJobXNldFwiLCBoc2V0QXJndW1lbnRUcmFuc2Zvcm1lcik7XG5Db21tYW5kLnNldFJlcGx5VHJhbnNmb3JtZXIoXCJoZ2V0YWxsXCIsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gcmVzdWx0W2ldO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXN1bHRbaSArIDFdO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICAvLyBjYW4gb25seSBiZSB0cnV0aHkgaWYgdGhlIHByb3BlcnR5IGlzIHNwZWNpYWwgc29tZWhvdywgbGlrZSAnX19wcm90b19fJyBvciAnY29uc3RydWN0b3InXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2x1aW4vaW9yZWRpcy9pc3N1ZXMvMTI2N1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuY2xhc3MgTWl4ZWRCdWZmZXJzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLml0ZW1zID0gW107XG4gICAgfVxuICAgIHB1c2goeCkge1xuICAgICAgICB0aGlzLmxlbmd0aCArPSBCdWZmZXIuYnl0ZUxlbmd0aCh4KTtcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHgpO1xuICAgIH1cbiAgICB0b0J1ZmZlcigpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKHRoaXMubGVuZ3RoKTtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChpdGVtKTtcbiAgICAgICAgICAgIEJ1ZmZlci5pc0J1ZmZlcihpdGVtKVxuICAgICAgICAgICAgICAgID8gaXRlbS5jb3B5KHJlc3VsdCwgb2Zmc2V0KVxuICAgICAgICAgICAgICAgIDogcmVzdWx0LndyaXRlKGl0ZW0sIG9mZnNldCwgbGVuZ3RoKTtcbiAgICAgICAgICAgIG9mZnNldCArPSBsZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/Command.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/DataHandler.js":
/*!***************************************************!*\
!*** ./node_modules/ioredis/built/DataHandler.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst Command_1 = __webpack_require__(/*! ./Command */ \"(action-browser)/./node_modules/ioredis/built/Command.js\");\nconst utils_1 = __webpack_require__(/*! ./utils */ \"(action-browser)/./node_modules/ioredis/built/utils/index.js\");\nconst RedisParser = __webpack_require__(/*! redis-parser */ \"(action-browser)/./node_modules/redis-parser/index.js\");\nconst SubscriptionSet_1 = __webpack_require__(/*! ./SubscriptionSet */ \"(action-browser)/./node_modules/ioredis/built/SubscriptionSet.js\");\nconst debug = (0, utils_1.Debug)(\"dataHandler\");\nclass DataHandler {\n constructor(redis, parserOptions) {\n this.redis = redis;\n const parser = new RedisParser({\n stringNumbers: parserOptions.stringNumbers,\n returnBuffers: true,\n returnError: (err) => {\n this.returnError(err);\n },\n returnFatalError: (err) => {\n this.returnFatalError(err);\n },\n returnReply: (reply) => {\n this.returnReply(reply);\n },\n });\n // prependListener ensures the parser receives and processes data before socket timeout checks are performed\n redis.stream.prependListener(\"data\", (data) => {\n parser.execute(data);\n });\n // prependListener() doesn't enable flowing mode automatically - we need to resume the stream manually\n redis.stream.resume();\n }\n returnFatalError(err) {\n err.message += \". Please report this.\";\n this.redis.recoverFromFatalError(err, err, { offlineQueue: false });\n }\n returnError(err) {\n const item = this.shiftCommand(err);\n if (!item) {\n return;\n }\n err.command = {\n name: item.command.name,\n args: item.command.args,\n };\n this.redis.handleReconnection(err, item);\n }\n returnReply(reply) {\n if (this.handleMonitorReply(reply)) {\n return;\n }\n if (this.handleSubscriberReply(reply)) {\n return;\n }\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n if (Command_1.default.checkFlag(\"ENTER_SUBSCRIBER_MODE\", item.command.name)) {\n this.redis.condition.subscriber = new SubscriptionSet_1.default();\n this.redis.condition.subscriber.add(item.command.name, reply[1].toString());\n if (!fillSubCommand(item.command, reply[2])) {\n this.redis.commandQueue.unshift(item);\n }\n }\n else if (Command_1.default.checkFlag(\"EXIT_SUBSCRIBER_MODE\", item.command.name)) {\n if (!fillUnsubCommand(item.command, reply[2])) {\n this.redis.commandQueue.unshift(item);\n }\n }\n else {\n item.command.resolve(reply);\n }\n }\n handleSubscriberReply(reply) {\n if (!this.redis.condition.subscriber) {\n return false;\n }\n const replyType = Array.isArray(reply) ? reply[0].toString() : null;\n debug('receive reply \"%s\" in subscriber mode', replyType);\n switch (replyType) {\n case \"message\":\n if (this.redis.listeners(\"message\").length > 0) {\n // Check if there're listeners to avoid unnecessary `toString()`.\n this.redis.emit(\"message\", reply[1].toString(), reply[2] ? reply[2].toString() : \"\");\n }\n this.redis.emit(\"messageBuffer\", reply[1], reply[2]);\n break;\n case \"pmessage\": {\n const pattern = reply[1].toString();\n if (this.redis.listeners(\"pmessage\").length > 0) {\n this.redis.emit(\"pmessage\", pattern, reply[2].toString(), reply[3].toString());\n }\n this.redis.emit(\"pmessageBuffer\", pattern, reply[2], reply[3]);\n break;\n }\n case \"smessage\": {\n if (this.redis.listeners(\"smessage\").length > 0) {\n this.redis.emit(\"smessage\", reply[1].toString(), reply[2] ? reply[2].toString() : \"\");\n }\n this.redis.emit(\"smessageBuffer\", reply[1], reply[2]);\n break;\n }\n case \"ssubscribe\":\n case \"subscribe\":\n case \"psubscribe\": {\n const channel = reply[1].toString();\n this.redis.condition.subscriber.add(replyType, channel);\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n if (!fillSubCommand(item.command, reply[2])) {\n this.redis.commandQueue.unshift(item);\n }\n break;\n }\n case \"sunsubscribe\":\n case \"unsubscribe\":\n case \"punsubscribe\": {\n const channel = reply[1] ? reply[1].toString() : null;\n if (channel) {\n this.redis.condition.subscriber.del(replyType, channel);\n }\n const count = reply[2];\n if (Number(count) === 0) {\n this.redis.condition.subscriber = false;\n }\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n if (!fillUnsubCommand(item.command, count)) {\n this.redis.commandQueue.unshift(item);\n }\n break;\n }\n default: {\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n item.command.resolve(reply);\n }\n }\n return true;\n }\n handleMonitorReply(reply) {\n if (this.redis.status !== \"monitoring\") {\n return false;\n }\n const replyStr = reply.toString();\n if (replyStr === \"OK\") {\n // Valid commands in the monitoring mode are AUTH and MONITOR,\n // both of which always reply with 'OK'.\n // So if we got an 'OK', we can make certain that\n // the reply is made to AUTH & MONITOR.\n return false;\n }\n // Since commands sent in the monitoring mode will trigger an exception,\n // any replies we received in the monitoring mode should consider to be\n // realtime monitor data instead of result of commands.\n const len = replyStr.indexOf(\" \");\n const timestamp = replyStr.slice(0, len);\n const argIndex = replyStr.indexOf('\"');\n const args = replyStr\n .slice(argIndex + 1, -1)\n .split('\" \"')\n .map((elem) => elem.replace(/\\\\\"/g, '\"'));\n const dbAndSource = replyStr.slice(len + 2, argIndex - 2).split(\" \");\n this.redis.emit(\"monitor\", timestamp, args, dbAndSource[1], dbAndSource[0]);\n return true;\n }\n shiftCommand(reply) {\n const item = this.redis.commandQueue.shift();\n if (!item) {\n const message = \"Command queue state error. If you can reproduce this, please report it.\";\n const error = new Error(message +\n (reply instanceof Error\n ? ` Last error: ${reply.message}`\n : ` Last reply: ${reply.toString()}`));\n this.redis.emit(\"error\", error);\n return null;\n }\n return item;\n }\n}\nexports[\"default\"] = DataHandler;\nconst remainingRepliesMap = new WeakMap();\nfunction fillSubCommand(command, count) {\n let remainingReplies = remainingRepliesMap.has(command)\n ? remainingRepliesMap.get(command)\n : command.args.length;\n remainingReplies -= 1;\n if (remainingReplies <= 0) {\n command.resolve(count);\n remainingRepliesMap.delete(command);\n return true;\n }\n remainingRepliesMap.set(command, remainingReplies);\n return false;\n}\nfunction fillUnsubCommand(command, count) {\n let remainingReplies = remainingRepliesMap.has(command)\n ? remainingRepliesMap.get(command)\n : command.args.length;\n if (remainingReplies === 0) {\n if (Number(count) === 0) {\n remainingRepliesMap.delete(command);\n command.resolve(count);\n return true;\n }\n return false;\n }\n remainingReplies -= 1;\n if (remainingReplies <= 0) {\n command.resolve(count);\n return true;\n }\n remainingRepliesMap.set(command, remainingReplies);\n return false;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L0RhdGFIYW5kbGVyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGtCQUFrQixtQkFBTyxDQUFDLDJFQUFXO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLDZFQUFTO0FBQ2pDLG9CQUFvQixtQkFBTyxDQUFDLDJFQUFjO0FBQzFDLDBCQUEwQixtQkFBTyxDQUFDLDJGQUFtQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxxQkFBcUI7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGNBQWM7QUFDcEQsc0NBQXNDLGlCQUFpQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L0RhdGFIYW5kbGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vQ29tbWFuZFwiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IFJlZGlzUGFyc2VyID0gcmVxdWlyZShcInJlZGlzLXBhcnNlclwiKTtcbmNvbnN0IFN1YnNjcmlwdGlvblNldF8xID0gcmVxdWlyZShcIi4vU3Vic2NyaXB0aW9uU2V0XCIpO1xuY29uc3QgZGVidWcgPSAoMCwgdXRpbHNfMS5EZWJ1ZykoXCJkYXRhSGFuZGxlclwiKTtcbmNsYXNzIERhdGFIYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3RvcihyZWRpcywgcGFyc2VyT3B0aW9ucykge1xuICAgICAgICB0aGlzLnJlZGlzID0gcmVkaXM7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBSZWRpc1BhcnNlcih7XG4gICAgICAgICAgICBzdHJpbmdOdW1iZXJzOiBwYXJzZXJPcHRpb25zLnN0cmluZ051bWJlcnMsXG4gICAgICAgICAgICByZXR1cm5CdWZmZXJzOiB0cnVlLFxuICAgICAgICAgICAgcmV0dXJuRXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJldHVybkVycm9yKGVycik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmV0dXJuRmF0YWxFcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmV0dXJuRmF0YWxFcnJvcihlcnIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJldHVyblJlcGx5OiAocmVwbHkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJldHVyblJlcGx5KHJlcGx5KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBwcmVwZW5kTGlzdGVuZXIgZW5zdXJlcyB0aGUgcGFyc2VyIHJlY2VpdmVzIGFuZCBwcm9jZXNzZXMgZGF0YSBiZWZvcmUgc29ja2V0IHRpbWVvdXQgY2hlY2tzIGFyZSBwZXJmb3JtZWRcbiAgICAgICAgcmVkaXMuc3RyZWFtLnByZXBlbmRMaXN0ZW5lcihcImRhdGFcIiwgKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHBhcnNlci5leGVjdXRlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gcHJlcGVuZExpc3RlbmVyKCkgZG9lc24ndCBlbmFibGUgZmxvd2luZyBtb2RlIGF1dG9tYXRpY2FsbHkgLSB3ZSBuZWVkIHRvIHJlc3VtZSB0aGUgc3RyZWFtIG1hbnVhbGx5XG4gICAgICAgIHJlZGlzLnN0cmVhbS5yZXN1bWUoKTtcbiAgICB9XG4gICAgcmV0dXJuRmF0YWxFcnJvcihlcnIpIHtcbiAgICAgICAgZXJyLm1lc3NhZ2UgKz0gXCIuIFBsZWFzZSByZXBvcnQgdGhpcy5cIjtcbiAgICAgICAgdGhpcy5yZWRpcy5yZWNvdmVyRnJvbUZhdGFsRXJyb3IoZXJyLCBlcnIsIHsgb2ZmbGluZVF1ZXVlOiBmYWxzZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuRXJyb3IoZXJyKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnNoaWZ0Q29tbWFuZChlcnIpO1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlcnIuY29tbWFuZCA9IHtcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0uY29tbWFuZC5uYW1lLFxuICAgICAgICAgICAgYXJnczogaXRlbS5jb21tYW5kLmFyZ3MsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucmVkaXMuaGFuZGxlUmVjb25uZWN0aW9uKGVyciwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVyblJlcGx5KHJlcGx5KSB7XG4gICAgICAgIGlmICh0aGlzLmhhbmRsZU1vbml0b3JSZXBseShyZXBseSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oYW5kbGVTdWJzY3JpYmVyUmVwbHkocmVwbHkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuc2hpZnRDb21tYW5kKHJlcGx5KTtcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKENvbW1hbmRfMS5kZWZhdWx0LmNoZWNrRmxhZyhcIkVOVEVSX1NVQlNDUklCRVJfTU9ERVwiLCBpdGVtLmNvbW1hbmQubmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVkaXMuY29uZGl0aW9uLnN1YnNjcmliZXIgPSBuZXcgU3Vic2NyaXB0aW9uU2V0XzEuZGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5yZWRpcy5jb25kaXRpb24uc3Vic2NyaWJlci5hZGQoaXRlbS5jb21tYW5kLm5hbWUsIHJlcGx5WzFdLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgaWYgKCFmaWxsU3ViQ29tbWFuZChpdGVtLmNvbW1hbmQsIHJlcGx5WzJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVkaXMuY29tbWFuZFF1ZXVlLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQ29tbWFuZF8xLmRlZmF1bHQuY2hlY2tGbGFnKFwiRVhJVF9TVUJTQ1JJQkVSX01PREVcIiwgaXRlbS5jb21tYW5kLm5hbWUpKSB7XG4gICAgICAgICAgICBpZiAoIWZpbGxVbnN1YkNvbW1hbmQoaXRlbS5jb21tYW5kLCByZXBseVsyXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZGlzLmNvbW1hbmRRdWV1ZS51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5jb21tYW5kLnJlc29sdmUocmVwbHkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZVN1YnNjcmliZXJSZXBseShyZXBseSkge1xuICAgICAgICBpZiAoIXRoaXMucmVkaXMuY29uZGl0aW9uLnN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXBseVR5cGUgPSBBcnJheS5pc0FycmF5KHJlcGx5KSA/IHJlcGx5WzBdLnRvU3RyaW5nKCkgOiBudWxsO1xuICAgICAgICBkZWJ1ZygncmVjZWl2ZSByZXBseSBcIiVzXCIgaW4gc3Vic2NyaWJlciBtb2RlJywgcmVwbHlUeXBlKTtcbiAgICAgICAgc3dpdGNoIChyZXBseVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVkaXMubGlzdGVuZXJzKFwibWVzc2FnZVwiKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlJ3JlIGxpc3RlbmVycyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBgdG9TdHJpbmcoKWAuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVkaXMuZW1pdChcIm1lc3NhZ2VcIiwgcmVwbHlbMV0udG9TdHJpbmcoKSwgcmVwbHlbMl0gPyByZXBseVsyXS50b1N0cmluZygpIDogXCJcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVkaXMuZW1pdChcIm1lc3NhZ2VCdWZmZXJcIiwgcmVwbHlbMV0sIHJlcGx5WzJdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJwbWVzc2FnZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IHJlcGx5WzFdLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVkaXMubGlzdGVuZXJzKFwicG1lc3NhZ2VcIikubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZGlzLmVtaXQoXCJwbWVzc2FnZVwiLCBwYXR0ZXJuLCByZXBseVsyXS50b1N0cmluZygpLCByZXBseVszXS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZWRpcy5lbWl0KFwicG1lc3NhZ2VCdWZmZXJcIiwgcGF0dGVybiwgcmVwbHlbMl0sIHJlcGx5WzNdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzbWVzc2FnZVwiOiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVkaXMubGlzdGVuZXJzKFwic21lc3NhZ2VcIikubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZGlzLmVtaXQoXCJzbWVzc2FnZVwiLCByZXBseVsxXS50b1N0cmluZygpLCByZXBseVsyXSA/IHJlcGx5WzJdLnRvU3RyaW5nKCkgOiBcIlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZWRpcy5lbWl0KFwic21lc3NhZ2VCdWZmZXJcIiwgcmVwbHlbMV0sIHJlcGx5WzJdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzc3Vic2NyaWJlXCI6XG4gICAgICAgICAgICBjYXNlIFwic3Vic2NyaWJlXCI6XG4gICAgICAgICAgICBjYXNlIFwicHN1YnNjcmliZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhbm5lbCA9IHJlcGx5WzFdLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWRpcy5jb25kaXRpb24uc3Vic2NyaWJlci5hZGQocmVwbHlUeXBlLCBjaGFubmVsKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zaGlmdENvbW1hbmQocmVwbHkpO1xuICAgICAgICAgICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZmlsbFN1YkNvbW1hbmQoaXRlbS5jb21tYW5kLCByZXBseVsyXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcy5jb21tYW5kUXVldWUudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3Vuc3Vic2NyaWJlXCI6XG4gICAgICAgICAgICBjYXNlIFwidW5zdWJzY3JpYmVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwdW5zdWJzY3JpYmVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5uZWwgPSByZXBseVsxXSA/IHJlcGx5WzFdLnRvU3RyaW5nKCkgOiBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChjaGFubmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVkaXMuY29uZGl0aW9uLnN1YnNjcmliZXIuZGVsKHJlcGx5VHlwZSwgY2hhbm5lbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gcmVwbHlbMl07XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlcihjb3VudCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcy5jb25kaXRpb24uc3Vic2NyaWJlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zaGlmdENvbW1hbmQocmVwbHkpO1xuICAgICAgICAgICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZmlsbFVuc3ViQ29tbWFuZChpdGVtLmNvbW1hbmQsIGNvdW50KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZGlzLmNvbW1hbmRRdWV1ZS51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zaGlmdENvbW1hbmQocmVwbHkpO1xuICAgICAgICAgICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0uY29tbWFuZC5yZXNvbHZlKHJlcGx5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaGFuZGxlTW9uaXRvclJlcGx5KHJlcGx5KSB7XG4gICAgICAgIGlmICh0aGlzLnJlZGlzLnN0YXR1cyAhPT0gXCJtb25pdG9yaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXBseVN0ciA9IHJlcGx5LnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChyZXBseVN0ciA9PT0gXCJPS1wiKSB7XG4gICAgICAgICAgICAvLyBWYWxpZCBjb21tYW5kcyBpbiB0aGUgbW9uaXRvcmluZyBtb2RlIGFyZSBBVVRIIGFuZCBNT05JVE9SLFxuICAgICAgICAgICAgLy8gYm90aCBvZiB3aGljaCBhbHdheXMgcmVwbHkgd2l0aCAnT0snLlxuICAgICAgICAgICAgLy8gU28gaWYgd2UgZ290IGFuICdPSycsIHdlIGNhbiBtYWtlIGNlcnRhaW4gdGhhdFxuICAgICAgICAgICAgLy8gdGhlIHJlcGx5IGlzIG1hZGUgdG8gQVVUSCAmIE1PTklUT1IuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2luY2UgY29tbWFuZHMgc2VudCBpbiB0aGUgbW9uaXRvcmluZyBtb2RlIHdpbGwgdHJpZ2dlciBhbiBleGNlcHRpb24sXG4gICAgICAgIC8vIGFueSByZXBsaWVzIHdlIHJlY2VpdmVkIGluIHRoZSBtb25pdG9yaW5nIG1vZGUgc2hvdWxkIGNvbnNpZGVyIHRvIGJlXG4gICAgICAgIC8vIHJlYWx0aW1lIG1vbml0b3IgZGF0YSBpbnN0ZWFkIG9mIHJlc3VsdCBvZiBjb21tYW5kcy5cbiAgICAgICAgY29uc3QgbGVuID0gcmVwbHlTdHIuaW5kZXhPZihcIiBcIik7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IHJlcGx5U3RyLnNsaWNlKDAsIGxlbik7XG4gICAgICAgIGNvbnN0IGFyZ0luZGV4ID0gcmVwbHlTdHIuaW5kZXhPZignXCInKTtcbiAgICAgICAgY29uc3QgYXJncyA9IHJlcGx5U3RyXG4gICAgICAgICAgICAuc2xpY2UoYXJnSW5kZXggKyAxLCAtMSlcbiAgICAgICAgICAgIC5zcGxpdCgnXCIgXCInKVxuICAgICAgICAgICAgLm1hcCgoZWxlbSkgPT4gZWxlbS5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykpO1xuICAgICAgICBjb25zdCBkYkFuZFNvdXJjZSA9IHJlcGx5U3RyLnNsaWNlKGxlbiArIDIsIGFyZ0luZGV4IC0gMikuc3BsaXQoXCIgXCIpO1xuICAgICAgICB0aGlzLnJlZGlzLmVtaXQoXCJtb25pdG9yXCIsIHRpbWVzdGFtcCwgYXJncywgZGJBbmRTb3VyY2VbMV0sIGRiQW5kU291cmNlWzBdKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNoaWZ0Q29tbWFuZChyZXBseSkge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5yZWRpcy5jb21tYW5kUXVldWUuc2hpZnQoKTtcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gXCJDb21tYW5kIHF1ZXVlIHN0YXRlIGVycm9yLiBJZiB5b3UgY2FuIHJlcHJvZHVjZSB0aGlzLCBwbGVhc2UgcmVwb3J0IGl0LlwiO1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSArXG4gICAgICAgICAgICAgICAgKHJlcGx5IGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgPyBgIExhc3QgZXJyb3I6ICR7cmVwbHkubWVzc2FnZX1gXG4gICAgICAgICAgICAgICAgICAgIDogYCBMYXN0IHJlcGx5OiAke3JlcGx5LnRvU3RyaW5nKCl9YCkpO1xuICAgICAgICAgICAgdGhpcy5yZWRpcy5lbWl0KFwiZXJyb3JcIiwgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gRGF0YUhhbmRsZXI7XG5jb25zdCByZW1haW5pbmdSZXBsaWVzTWFwID0gbmV3IFdlYWtNYXAoKTtcbmZ1bmN0aW9uIGZpbGxTdWJDb21tYW5kKGNvbW1hbmQsIGNvdW50KSB7XG4gICAgbGV0IHJlbWFpbmluZ1JlcGxpZXMgPSByZW1haW5pbmdSZXBsaWVzTWFwLmhhcyhjb21tYW5kKVxuICAgICAgICA/IHJlbWFpbmluZ1JlcGxpZXNNYXAuZ2V0KGNvbW1hbmQpXG4gICAgICAgIDogY29tbWFuZC5hcmdzLmxlbmd0aDtcbiAgICByZW1haW5pbmdSZXBsaWVzIC09IDE7XG4gICAgaWYgKHJlbWFpbmluZ1JlcGxpZXMgPD0gMCkge1xuICAgICAgICBjb21tYW5kLnJlc29sdmUoY291bnQpO1xuICAgICAgICByZW1haW5pbmdSZXBsaWVzTWFwLmRlbGV0ZShjb21tYW5kKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJlbWFpbmluZ1JlcGxpZXNNYXAuc2V0KGNvbW1hbmQsIHJlbWFpbmluZ1JlcGxpZXMpO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGZpbGxVbnN1YkNvbW1hbmQoY29tbWFuZCwgY291bnQpIHtcbiAgICBsZXQgcmVtYWluaW5nUmVwbGllcyA9IHJlbWFpbmluZ1JlcGxpZXNNYXAuaGFzKGNvbW1hbmQpXG4gICAgICAgID8gcmVtYWluaW5nUmVwbGllc01hcC5nZXQoY29tbWFuZClcbiAgICAgICAgOiBjb21tYW5kLmFyZ3MubGVuZ3RoO1xuICAgIGlmIChyZW1haW5pbmdSZXBsaWVzID09PSAwKSB7XG4gICAgICAgIGlmIChOdW1iZXIoY291bnQpID09PSAwKSB7XG4gICAgICAgICAgICByZW1haW5pbmdSZXBsaWVzTWFwLmRlbGV0ZShjb21tYW5kKTtcbiAgICAgICAgICAgIGNvbW1hbmQucmVzb2x2ZShjb3VudCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJlbWFpbmluZ1JlcGxpZXMgLT0gMTtcbiAgICBpZiAocmVtYWluaW5nUmVwbGllcyA8PSAwKSB7XG4gICAgICAgIGNvbW1hbmQucmVzb2x2ZShjb3VudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZW1haW5pbmdSZXBsaWVzTWFwLnNldChjb21tYW5kLCByZW1haW5pbmdSZXBsaWVzKTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/DataHandler.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/Pipeline.js":
/*!************************************************!*\
!*** ./node_modules/ioredis/built/Pipeline.js ***!
\************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst calculateSlot = __webpack_require__(/*! cluster-key-slot */ \"(action-browser)/./node_modules/cluster-key-slot/lib/index.js\");\nconst commands_1 = __webpack_require__(/*! @ioredis/commands */ \"(action-browser)/./node_modules/@ioredis/commands/built/index.js\");\nconst standard_as_callback_1 = __webpack_require__(/*! standard-as-callback */ \"(action-browser)/./node_modules/standard-as-callback/built/index.js\");\nconst util_1 = __webpack_require__(/*! util */ \"util\");\nconst Command_1 = __webpack_require__(/*! ./Command */ \"(action-browser)/./node_modules/ioredis/built/Command.js\");\nconst utils_1 = __webpack_require__(/*! ./utils */ \"(action-browser)/./node_modules/ioredis/built/utils/index.js\");\nconst Commander_1 = __webpack_require__(/*! ./utils/Commander */ \"(action-browser)/./node_modules/ioredis/built/utils/Commander.js\");\n/*\n This function derives from the cluster-key-slot implementation.\n Instead of checking that all keys have the same slot, it checks that all slots are served by the same set of nodes.\n If this is satisfied, it returns the first key's slot.\n*/\nfunction generateMultiWithNodes(redis, keys) {\n const slot = calculateSlot(keys[0]);\n const target = redis._groupsBySlot[slot];\n for (let i = 1; i < keys.length; i++) {\n if (redis._groupsBySlot[calculateSlot(keys[i])] !== target) {\n return -1;\n }\n }\n return slot;\n}\nclass Pipeline extends Commander_1.default {\n constructor(redis) {\n super();\n this.redis = redis;\n this.isPipeline = true;\n this.replyPending = 0;\n this._queue = [];\n this._result = [];\n this._transactions = 0;\n this._shaToScript = {};\n this.isCluster =\n this.redis.constructor.name === \"Cluster\" || this.redis.isCluster;\n this.options = redis.options;\n Object.keys(redis.scriptsSet).forEach((name) => {\n const script = redis.scriptsSet[name];\n this._shaToScript[script.sha] = script;\n this[name] = redis[name];\n this[name + \"Buffer\"] = redis[name + \"Buffer\"];\n });\n redis.addedBuiltinSet.forEach((name) => {\n this[name] = redis[name];\n this[name + \"Buffer\"] = redis[name + \"Buffer\"];\n });\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n const _this = this;\n Object.defineProperty(this, \"length\", {\n get: function () {\n return _this._queue.length;\n },\n });\n }\n fillResult(value, position) {\n if (this._queue[position].name === \"exec\" && Array.isArray(value[1])) {\n const execLength = value[1].length;\n for (let i = 0; i < execLength; i++) {\n if (value[1][i] instanceof Error) {\n continue;\n }\n const cmd = this._queue[position - (execLength - i)];\n try {\n value[1][i] = cmd.transformReply(value[1][i]);\n }\n catch (err) {\n value[1][i] = err;\n }\n }\n }\n this._result[position] = value;\n if (--this.replyPending) {\n return;\n }\n if (this.isCluster) {\n let retriable = true;\n let commonError;\n for (let i = 0; i < this._result.length; ++i) {\n const error = this._result[i][0];\n const command = this._queue[i];\n if (error) {\n if (command.name === \"exec\" &&\n error.message ===\n \"EXECABORT Transaction discarded because of previous errors.\") {\n continue;\n }\n if (!commonError) {\n commonError = {\n name: error.name,\n message: error.message,\n };\n }\n else if (commonError.name !== error.name ||\n commonError.message !== error.message) {\n retriable = false;\n break;\n }\n }\n else if (!command.inTransaction) {\n const isReadOnly = (0, commands_1.exists)(command.name) && (0, commands_1.hasFlag)(command.name, \"readonly\");\n if (!isReadOnly) {\n retriable = false;\n break;\n }\n }\n }\n if (commonError && retriable) {\n const _this = this;\n const errv = commonError.message.split(\" \");\n const queue = this._queue;\n let inTransaction = false;\n this._queue = [];\n for (let i = 0; i < queue.length; ++i) {\n if (errv[0] === \"ASK\" &&\n !inTransaction &&\n queue[i].name !== \"asking\" &&\n (!queue[i - 1] || queue[i - 1].name !== \"asking\")) {\n const asking = new Command_1.default(\"asking\");\n asking.ignore = true;\n this.sendCommand(asking);\n }\n queue[i].initPromise();\n this.sendCommand(queue[i]);\n inTransaction = queue[i].inTransaction;\n }\n let matched = true;\n if (typeof this.leftRedirections === \"undefined\") {\n this.leftRedirections = {};\n }\n const exec = function () {\n _this.exec();\n };\n const cluster = this.redis;\n cluster.handleError(commonError, this.leftRedirections, {\n moved: function (_slot, key) {\n _this.preferKey = key;\n cluster.slots[errv[1]] = [key];\n cluster._groupsBySlot[errv[1]] =\n cluster._groupsIds[cluster.slots[errv[1]].join(\";\")];\n cluster.refreshSlotsCache();\n _this.exec();\n },\n ask: function (_slot, key) {\n _this.preferKey = key;\n _this.exec();\n },\n tryagain: exec,\n clusterDown: exec,\n connectionClosed: exec,\n maxRedirections: () => {\n matched = false;\n },\n defaults: () => {\n matched = false;\n },\n });\n if (matched) {\n return;\n }\n }\n }\n let ignoredCount = 0;\n for (let i = 0; i < this._queue.length - ignoredCount; ++i) {\n if (this._queue[i + ignoredCount].ignore) {\n ignoredCount += 1;\n }\n this._result[i] = this._result[i + ignoredCount];\n }\n this.resolve(this._result.slice(0, this._result.length - ignoredCount));\n }\n sendCommand(command) {\n if (this._transactions > 0) {\n command.inTransaction = true;\n }\n const position = this._queue.length;\n command.pipelineIndex = position;\n command.promise\n .then((result) => {\n this.fillResult([null, result], position);\n })\n .catch((error) => {\n this.fillResult([error], position);\n });\n this._queue.push(command);\n return this;\n }\n addBatch(commands) {\n let command, commandName, args;\n for (let i = 0; i < commands.length; ++i) {\n command = commands[i];\n commandName = command[0];\n args = command.slice(1);\n this[commandName].apply(this, args);\n }\n return this;\n }\n}\nexports[\"default\"] = Pipeline;\n// @ts-expect-error\nconst multi = Pipeline.prototype.multi;\n// @ts-expect-error\nPipeline.prototype.multi = function () {\n this._transactions += 1;\n return multi.apply(this, arguments);\n};\n// @ts-expect-error\nconst execBuffer = Pipeline.prototype.execBuffer;\n// @ts-expect-error\nPipeline.prototype.execBuffer = (0, util_1.deprecate)(function () {\n if (this._transactions > 0) {\n this._transactions -= 1;\n }\n return execBuffer.apply(this, arguments);\n}, \"Pipeline#execBuffer: Use Pipeline#exec instead\");\n// NOTE: To avoid an unhandled promise rejection, this will unconditionally always return this.promise,\n// which always has the rejection handled by standard-as-callback\n// adding the provided rejection callback.\n//\n// If a different promise instance were returned, that promise would cause its own unhandled promise rejection\n// errors, even if that promise unconditionally resolved to **the resolved value of** this.promise.\nPipeline.prototype.exec = function (callback) {\n // Wait for the cluster to be connected, since we need nodes information before continuing\n if (this.isCluster && !this.redis.slots.length) {\n if (this.redis.status === \"wait\")\n this.redis.connect().catch(utils_1.noop);\n if (callback && !this.nodeifiedPromise) {\n this.nodeifiedPromise = true;\n (0, standard_as_callback_1.default)(this.promise, callback);\n }\n this.redis.delayUntilReady((err) => {\n if (err) {\n this.reject(err);\n return;\n }\n this.exec(callback);\n });\n return this.promise;\n }\n if (this._transactions > 0) {\n this._transactions -= 1;\n return execBuffer.apply(this, arguments);\n }\n if (!this.nodeifiedPromise) {\n this.nodeifiedPromise = true;\n (0, standard_as_callback_1.default)(this.promise, callback);\n }\n if (!this._queue.length) {\n this.resolve([]);\n }\n let pipelineSlot;\n if (this.isCluster) {\n // List of the first key for each command\n const sampleKeys = [];\n for (let i = 0; i < this._queue.length; i++) {\n const keys = this._queue[i].getKeys();\n if (keys.length) {\n sampleKeys.push(keys[0]);\n }\n // For each command, check that the keys belong to the same slot\n if (keys.length && calculateSlot.generateMulti(keys) < 0) {\n this.reject(new Error(\"All the keys in a pipeline command should belong to the same slot\"));\n return this.promise;\n }\n }\n if (sampleKeys.length) {\n pipelineSlot = generateMultiWithNodes(this.redis, sampleKeys);\n if (pipelineSlot < 0) {\n this.reject(new Error(\"All keys in the pipeline should belong to the same slots allocation group\"));\n return this.promise;\n }\n }\n else {\n // Send the pipeline to a random node\n pipelineSlot = (Math.random() * 16384) | 0;\n }\n }\n const _this = this;\n execPipeline();\n return this.promise;\n function execPipeline() {\n let writePending = (_this.replyPending = _this._queue.length);\n let node;\n if (_this.isCluster) {\n node = {\n slot: pipelineSlot,\n redis: _this.redis.connectionPool.nodes.all[_this.preferKey],\n };\n }\n let data = \"\";\n let buffers;\n const stream = {\n isPipeline: true,\n destination: _this.isCluster ? node : { redis: _this.redis },\n write(writable) {\n if (typeof writable !== \"string\") {\n if (!buffers) {\n buffers = [];\n }\n if (data) {\n buffers.push(Buffer.from(data, \"utf8\"));\n data = \"\";\n }\n buffers.push(writable);\n }\n else {\n data += writable;\n }\n if (!--writePending) {\n if (buffers) {\n if (data) {\n buffers.push(Buffer.from(data, \"utf8\"));\n }\n stream.destination.redis.stream.write(Buffer.concat(buffers));\n }\n else {\n stream.destination.redis.stream.write(data);\n }\n // Reset writePending for resending\n writePending = _this._queue.length;\n data = \"\";\n buffers = undefined;\n }\n },\n };\n for (let i = 0; i < _this._queue.length; ++i) {\n _this.redis.sendCommand(_this._queue[i], stream, node);\n }\n return _this.promise;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L1BpcGVsaW5lLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHNCQUFzQixtQkFBTyxDQUFDLHVGQUFrQjtBQUNoRCxtQkFBbUIsbUJBQU8sQ0FBQywyRkFBbUI7QUFDOUMsK0JBQStCLG1CQUFPLENBQUMsaUdBQXNCO0FBQzdELGVBQWUsbUJBQU8sQ0FBQyxrQkFBTTtBQUM3QixrQkFBa0IsbUJBQU8sQ0FBQywyRUFBVztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyw2RUFBUztBQUNqQyxvQkFBb0IsbUJBQU8sQ0FBQywyRkFBbUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGdCQUFnQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix5QkFBeUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0Msa0JBQWtCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkVBQTZFO0FBQzdFO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHVDQUF1QztBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IscUJBQXFCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix3QkFBd0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxvQkFBb0I7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLHdCQUF3Qix5QkFBeUI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9QaXBlbGluZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNhbGN1bGF0ZVNsb3QgPSByZXF1aXJlKFwiY2x1c3Rlci1rZXktc2xvdFwiKTtcbmNvbnN0IGNvbW1hbmRzXzEgPSByZXF1aXJlKFwiQGlvcmVkaXMvY29tbWFuZHNcIik7XG5jb25zdCBzdGFuZGFyZF9hc19jYWxsYmFja18xID0gcmVxdWlyZShcInN0YW5kYXJkLWFzLWNhbGxiYWNrXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcInV0aWxcIik7XG5jb25zdCBDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9Db21tYW5kXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuY29uc3QgQ29tbWFuZGVyXzEgPSByZXF1aXJlKFwiLi91dGlscy9Db21tYW5kZXJcIik7XG4vKlxuICBUaGlzIGZ1bmN0aW9uIGRlcml2ZXMgZnJvbSB0aGUgY2x1c3Rlci1rZXktc2xvdCBpbXBsZW1lbnRhdGlvbi5cbiAgSW5zdGVhZCBvZiBjaGVja2luZyB0aGF0IGFsbCBrZXlzIGhhdmUgdGhlIHNhbWUgc2xvdCwgaXQgY2hlY2tzIHRoYXQgYWxsIHNsb3RzIGFyZSBzZXJ2ZWQgYnkgdGhlIHNhbWUgc2V0IG9mIG5vZGVzLlxuICBJZiB0aGlzIGlzIHNhdGlzZmllZCwgaXQgcmV0dXJucyB0aGUgZmlyc3Qga2V5J3Mgc2xvdC5cbiovXG5mdW5jdGlvbiBnZW5lcmF0ZU11bHRpV2l0aE5vZGVzKHJlZGlzLCBrZXlzKSB7XG4gICAgY29uc3Qgc2xvdCA9IGNhbGN1bGF0ZVNsb3Qoa2V5c1swXSk7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmVkaXMuX2dyb3Vwc0J5U2xvdFtzbG90XTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlZGlzLl9ncm91cHNCeVNsb3RbY2FsY3VsYXRlU2xvdChrZXlzW2ldKV0gIT09IHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzbG90O1xufVxuY2xhc3MgUGlwZWxpbmUgZXh0ZW5kcyBDb21tYW5kZXJfMS5kZWZhdWx0IHtcbiAgICBjb25zdHJ1Y3RvcihyZWRpcykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnJlZGlzID0gcmVkaXM7XG4gICAgICAgIHRoaXMuaXNQaXBlbGluZSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwbHlQZW5kaW5nID0gMDtcbiAgICAgICAgdGhpcy5fcXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5fcmVzdWx0ID0gW107XG4gICAgICAgIHRoaXMuX3RyYW5zYWN0aW9ucyA9IDA7XG4gICAgICAgIHRoaXMuX3NoYVRvU2NyaXB0ID0ge307XG4gICAgICAgIHRoaXMuaXNDbHVzdGVyID1cbiAgICAgICAgICAgIHRoaXMucmVkaXMuY29uc3RydWN0b3IubmFtZSA9PT0gXCJDbHVzdGVyXCIgfHwgdGhpcy5yZWRpcy5pc0NsdXN0ZXI7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHJlZGlzLm9wdGlvbnM7XG4gICAgICAgIE9iamVjdC5rZXlzKHJlZGlzLnNjcmlwdHNTZXQpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IHJlZGlzLnNjcmlwdHNTZXRbbmFtZV07XG4gICAgICAgICAgICB0aGlzLl9zaGFUb1NjcmlwdFtzY3JpcHQuc2hhXSA9IHNjcmlwdDtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSByZWRpc1tuYW1lXTtcbiAgICAgICAgICAgIHRoaXNbbmFtZSArIFwiQnVmZmVyXCJdID0gcmVkaXNbbmFtZSArIFwiQnVmZmVyXCJdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVkaXMuYWRkZWRCdWlsdGluU2V0LmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSByZWRpc1tuYW1lXTtcbiAgICAgICAgICAgIHRoaXNbbmFtZSArIFwiQnVmZmVyXCJdID0gcmVkaXNbbmFtZSArIFwiQnVmZmVyXCJdO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHRoaXMucmVqZWN0ID0gcmVqZWN0O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJsZW5ndGhcIiwge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9xdWV1ZS5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZmlsbFJlc3VsdCh2YWx1ZSwgcG9zaXRpb24pIHtcbiAgICAgICAgaWYgKHRoaXMuX3F1ZXVlW3Bvc2l0aW9uXS5uYW1lID09PSBcImV4ZWNcIiAmJiBBcnJheS5pc0FycmF5KHZhbHVlWzFdKSkge1xuICAgICAgICAgICAgY29uc3QgZXhlY0xlbmd0aCA9IHZhbHVlWzFdLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhlY0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlWzFdW2ldIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNtZCA9IHRoaXMuX3F1ZXVlW3Bvc2l0aW9uIC0gKGV4ZWNMZW5ndGggLSBpKV07XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVbMV1baV0gPSBjbWQudHJhbnNmb3JtUmVwbHkodmFsdWVbMV1baV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlWzFdW2ldID0gZXJyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZXN1bHRbcG9zaXRpb25dID0gdmFsdWU7XG4gICAgICAgIGlmICgtLXRoaXMucmVwbHlQZW5kaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNDbHVzdGVyKSB7XG4gICAgICAgICAgICBsZXQgcmV0cmlhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBjb21tb25FcnJvcjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcmVzdWx0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLl9yZXN1bHRbaV1bMF07XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMuX3F1ZXVlW2ldO1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZC5uYW1lID09PSBcImV4ZWNcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkVYRUNBQk9SVCBUcmFuc2FjdGlvbiBkaXNjYXJkZWQgYmVjYXVzZSBvZiBwcmV2aW91cyBlcnJvcnMuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29tbW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbkVycm9yID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGVycm9yLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29tbW9uRXJyb3IubmFtZSAhPT0gZXJyb3IubmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uRXJyb3IubWVzc2FnZSAhPT0gZXJyb3IubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0cmlhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghY29tbWFuZC5pblRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzUmVhZE9ubHkgPSAoMCwgY29tbWFuZHNfMS5leGlzdHMpKGNvbW1hbmQubmFtZSkgJiYgKDAsIGNvbW1hbmRzXzEuaGFzRmxhZykoY29tbWFuZC5uYW1lLCBcInJlYWRvbmx5XCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHJpYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29tbW9uRXJyb3IgJiYgcmV0cmlhYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycnYgPSBjb21tb25FcnJvci5tZXNzYWdlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWV1ZSA9IHRoaXMuX3F1ZXVlO1xuICAgICAgICAgICAgICAgIGxldCBpblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fcXVldWUgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJ2WzBdID09PSBcIkFTS1wiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhaW5UcmFuc2FjdGlvbiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVbaV0ubmFtZSAhPT0gXCJhc2tpbmdcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKCFxdWV1ZVtpIC0gMV0gfHwgcXVldWVbaSAtIDFdLm5hbWUgIT09IFwiYXNraW5nXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhc2tpbmcgPSBuZXcgQ29tbWFuZF8xLmRlZmF1bHQoXCJhc2tpbmdcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc2tpbmcuaWdub3JlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZENvbW1hbmQoYXNraW5nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBxdWV1ZVtpXS5pbml0UHJvbWlzZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmRDb21tYW5kKHF1ZXVlW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgaW5UcmFuc2FjdGlvbiA9IHF1ZXVlW2ldLmluVHJhbnNhY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBtYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMubGVmdFJlZGlyZWN0aW9ucyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlZnRSZWRpcmVjdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZXhlYygpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgY2x1c3RlciA9IHRoaXMucmVkaXM7XG4gICAgICAgICAgICAgICAgY2x1c3Rlci5oYW5kbGVFcnJvcihjb21tb25FcnJvciwgdGhpcy5sZWZ0UmVkaXJlY3Rpb25zLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vdmVkOiBmdW5jdGlvbiAoX3Nsb3QsIGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucHJlZmVyS2V5ID0ga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlci5zbG90c1tlcnJ2WzFdXSA9IFtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlci5fZ3JvdXBzQnlTbG90W2VycnZbMV1dID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyLl9ncm91cHNJZHNbY2x1c3Rlci5zbG90c1tlcnJ2WzFdXS5qb2luKFwiO1wiKV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyLnJlZnJlc2hTbG90c0NhY2hlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5leGVjKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFzazogZnVuY3Rpb24gKF9zbG90LCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnByZWZlcktleSA9IGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmV4ZWMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdHJ5YWdhaW46IGV4ZWMsXG4gICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJEb3duOiBleGVjLFxuICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uQ2xvc2VkOiBleGVjLFxuICAgICAgICAgICAgICAgICAgICBtYXhSZWRpcmVjdGlvbnM6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHM6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBpZ25vcmVkQ291bnQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3F1ZXVlLmxlbmd0aCAtIGlnbm9yZWRDb3VudDsgKytpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcXVldWVbaSArIGlnbm9yZWRDb3VudF0uaWdub3JlKSB7XG4gICAgICAgICAgICAgICAgaWdub3JlZENvdW50ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9yZXN1bHRbaV0gPSB0aGlzLl9yZXN1bHRbaSArIGlnbm9yZWRDb3VudF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuX3Jlc3VsdC5zbGljZSgwLCB0aGlzLl9yZXN1bHQubGVuZ3RoIC0gaWdub3JlZENvdW50KSk7XG4gICAgfVxuICAgIHNlbmRDb21tYW5kKGNvbW1hbmQpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9ucyA+IDApIHtcbiAgICAgICAgICAgIGNvbW1hbmQuaW5UcmFuc2FjdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gICAgICAgIGNvbW1hbmQucGlwZWxpbmVJbmRleCA9IHBvc2l0aW9uO1xuICAgICAgICBjb21tYW5kLnByb21pc2VcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmlsbFJlc3VsdChbbnVsbCwgcmVzdWx0XSwgcG9zaXRpb24pO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWxsUmVzdWx0KFtlcnJvcl0sIHBvc2l0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3F1ZXVlLnB1c2goY29tbWFuZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhZGRCYXRjaChjb21tYW5kcykge1xuICAgICAgICBsZXQgY29tbWFuZCwgY29tbWFuZE5hbWUsIGFyZ3M7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbWFuZHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBjb21tYW5kc1tpXTtcbiAgICAgICAgICAgIGNvbW1hbmROYW1lID0gY29tbWFuZFswXTtcbiAgICAgICAgICAgIGFyZ3MgPSBjb21tYW5kLnNsaWNlKDEpO1xuICAgICAgICAgICAgdGhpc1tjb21tYW5kTmFtZV0uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gUGlwZWxpbmU7XG4vLyBAdHMtZXhwZWN0LWVycm9yXG5jb25zdCBtdWx0aSA9IFBpcGVsaW5lLnByb3RvdHlwZS5tdWx0aTtcbi8vIEB0cy1leHBlY3QtZXJyb3JcblBpcGVsaW5lLnByb3RvdHlwZS5tdWx0aSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbnMgKz0gMTtcbiAgICByZXR1cm4gbXVsdGkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG4vLyBAdHMtZXhwZWN0LWVycm9yXG5jb25zdCBleGVjQnVmZmVyID0gUGlwZWxpbmUucHJvdG90eXBlLmV4ZWNCdWZmZXI7XG4vLyBAdHMtZXhwZWN0LWVycm9yXG5QaXBlbGluZS5wcm90b3R5cGUuZXhlY0J1ZmZlciA9ICgwLCB1dGlsXzEuZGVwcmVjYXRlKShmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9ucyA+IDApIHtcbiAgICAgICAgdGhpcy5fdHJhbnNhY3Rpb25zIC09IDE7XG4gICAgfVxuICAgIHJldHVybiBleGVjQnVmZmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59LCBcIlBpcGVsaW5lI2V4ZWNCdWZmZXI6IFVzZSBQaXBlbGluZSNleGVjIGluc3RlYWRcIik7XG4vLyBOT1RFOiBUbyBhdm9pZCBhbiB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24sIHRoaXMgd2lsbCB1bmNvbmRpdGlvbmFsbHkgYWx3YXlzIHJldHVybiB0aGlzLnByb21pc2UsXG4vLyB3aGljaCBhbHdheXMgaGFzIHRoZSByZWplY3Rpb24gaGFuZGxlZCBieSBzdGFuZGFyZC1hcy1jYWxsYmFja1xuLy8gYWRkaW5nIHRoZSBwcm92aWRlZCByZWplY3Rpb24gY2FsbGJhY2suXG4vL1xuLy8gSWYgYSBkaWZmZXJlbnQgcHJvbWlzZSBpbnN0YW5jZSB3ZXJlIHJldHVybmVkLCB0aGF0IHByb21pc2Ugd291bGQgY2F1c2UgaXRzIG93biB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25cbi8vIGVycm9ycywgZXZlbiBpZiB0aGF0IHByb21pc2UgdW5jb25kaXRpb25hbGx5IHJlc29sdmVkIHRvICoqdGhlIHJlc29sdmVkIHZhbHVlIG9mKiogdGhpcy5wcm9taXNlLlxuUGlwZWxpbmUucHJvdG90eXBlLmV4ZWMgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyBXYWl0IGZvciB0aGUgY2x1c3RlciB0byBiZSBjb25uZWN0ZWQsIHNpbmNlIHdlIG5lZWQgbm9kZXMgaW5mb3JtYXRpb24gYmVmb3JlIGNvbnRpbnVpbmdcbiAgICBpZiAodGhpcy5pc0NsdXN0ZXIgJiYgIXRoaXMucmVkaXMuc2xvdHMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlZGlzLnN0YXR1cyA9PT0gXCJ3YWl0XCIpXG4gICAgICAgICAgICB0aGlzLnJlZGlzLmNvbm5lY3QoKS5jYXRjaCh1dGlsc18xLm5vb3ApO1xuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgIXRoaXMubm9kZWlmaWVkUHJvbWlzZSkge1xuICAgICAgICAgICAgdGhpcy5ub2RlaWZpZWRQcm9taXNlID0gdHJ1ZTtcbiAgICAgICAgICAgICgwLCBzdGFuZGFyZF9hc19jYWxsYmFja18xLmRlZmF1bHQpKHRoaXMucHJvbWlzZSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVkaXMuZGVsYXlVbnRpbFJlYWR5KChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXhlYyhjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb25zID4gMCkge1xuICAgICAgICB0aGlzLl90cmFuc2FjdGlvbnMgLT0gMTtcbiAgICAgICAgcmV0dXJuIGV4ZWNCdWZmZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm5vZGVpZmllZFByb21pc2UpIHtcbiAgICAgICAgdGhpcy5ub2RlaWZpZWRQcm9taXNlID0gdHJ1ZTtcbiAgICAgICAgKDAsIHN0YW5kYXJkX2FzX2NhbGxiYWNrXzEuZGVmYXVsdCkodGhpcy5wcm9taXNlLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fcXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZShbXSk7XG4gICAgfVxuICAgIGxldCBwaXBlbGluZVNsb3Q7XG4gICAgaWYgKHRoaXMuaXNDbHVzdGVyKSB7XG4gICAgICAgIC8vIExpc3Qgb2YgdGhlIGZpcnN0IGtleSBmb3IgZWFjaCBjb21tYW5kXG4gICAgICAgIGNvbnN0IHNhbXBsZUtleXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9xdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IHRoaXMuX3F1ZXVlW2ldLmdldEtleXMoKTtcbiAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNhbXBsZUtleXMucHVzaChrZXlzWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZvciBlYWNoIGNvbW1hbmQsIGNoZWNrIHRoYXQgdGhlIGtleXMgYmVsb25nIHRvIHRoZSBzYW1lIHNsb3RcbiAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCAmJiBjYWxjdWxhdGVTbG90LmdlbmVyYXRlTXVsdGkoa2V5cykgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWplY3QobmV3IEVycm9yKFwiQWxsIHRoZSBrZXlzIGluIGEgcGlwZWxpbmUgY29tbWFuZCBzaG91bGQgYmVsb25nIHRvIHRoZSBzYW1lIHNsb3RcIikpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNhbXBsZUtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwaXBlbGluZVNsb3QgPSBnZW5lcmF0ZU11bHRpV2l0aE5vZGVzKHRoaXMucmVkaXMsIHNhbXBsZUtleXMpO1xuICAgICAgICAgICAgaWYgKHBpcGVsaW5lU2xvdCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlamVjdChuZXcgRXJyb3IoXCJBbGwga2V5cyBpbiB0aGUgcGlwZWxpbmUgc2hvdWxkIGJlbG9uZyB0byB0aGUgc2FtZSBzbG90cyBhbGxvY2F0aW9uIGdyb3VwXCIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2VuZCB0aGUgcGlwZWxpbmUgdG8gYSByYW5kb20gbm9kZVxuICAgICAgICAgICAgcGlwZWxpbmVTbG90ID0gKE1hdGgucmFuZG9tKCkgKiAxNjM4NCkgfCAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICBleGVjUGlwZWxpbmUoKTtcbiAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICAgIGZ1bmN0aW9uIGV4ZWNQaXBlbGluZSgpIHtcbiAgICAgICAgbGV0IHdyaXRlUGVuZGluZyA9IChfdGhpcy5yZXBseVBlbmRpbmcgPSBfdGhpcy5fcXVldWUubGVuZ3RoKTtcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIGlmIChfdGhpcy5pc0NsdXN0ZXIpIHtcbiAgICAgICAgICAgIG5vZGUgPSB7XG4gICAgICAgICAgICAgICAgc2xvdDogcGlwZWxpbmVTbG90LFxuICAgICAgICAgICAgICAgIHJlZGlzOiBfdGhpcy5yZWRpcy5jb25uZWN0aW9uUG9vbC5ub2Rlcy5hbGxbX3RoaXMucHJlZmVyS2V5XSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGEgPSBcIlwiO1xuICAgICAgICBsZXQgYnVmZmVycztcbiAgICAgICAgY29uc3Qgc3RyZWFtID0ge1xuICAgICAgICAgICAgaXNQaXBlbGluZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBfdGhpcy5pc0NsdXN0ZXIgPyBub2RlIDogeyByZWRpczogX3RoaXMucmVkaXMgfSxcbiAgICAgICAgICAgIHdyaXRlKHdyaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3cml0YWJsZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKEJ1ZmZlci5mcm9tKGRhdGEsIFwidXRmOFwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnB1c2god3JpdGFibGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSArPSB3cml0YWJsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCEtLXdyaXRlUGVuZGluZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnB1c2goQnVmZmVyLmZyb20oZGF0YSwgXCJ1dGY4XCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5kZXN0aW5hdGlvbi5yZWRpcy5zdHJlYW0ud3JpdGUoQnVmZmVyLmNvbmNhdChidWZmZXJzKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZGVzdGluYXRpb24ucmVkaXMuc3RyZWFtLndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHdyaXRlUGVuZGluZyBmb3IgcmVzZW5kaW5nXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlUGVuZGluZyA9IF90aGlzLl9xdWV1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBidWZmZXJzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgX3RoaXMuX3F1ZXVlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBfdGhpcy5yZWRpcy5zZW5kQ29tbWFuZChfdGhpcy5fcXVldWVbaV0sIHN0cmVhbSwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzLnByb21pc2U7XG4gICAgfVxufTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/Pipeline.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/Redis.js":
/*!*********************************************!*\
!*** ./node_modules/ioredis/built/Redis.js ***!
\*********************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst commands_1 = __webpack_require__(/*! @ioredis/commands */ \"(action-browser)/./node_modules/@ioredis/commands/built/index.js\");\nconst events_1 = __webpack_require__(/*! events */ \"events\");\nconst standard_as_callback_1 = __webpack_require__(/*! standard-as-callback */ \"(action-browser)/./node_modules/standard-as-callback/built/index.js\");\nconst cluster_1 = __webpack_require__(/*! ./cluster */ \"(action-browser)/./node_modules/ioredis/built/cluster/index.js\");\nconst Command_1 = __webpack_require__(/*! ./Command */ \"(action-browser)/./node_modules/ioredis/built/Command.js\");\nconst connectors_1 = __webpack_require__(/*! ./connectors */ \"(action-browser)/./node_modules/ioredis/built/connectors/index.js\");\nconst SentinelConnector_1 = __webpack_require__(/*! ./connectors/SentinelConnector */ \"(action-browser)/./node_modules/ioredis/built/connectors/SentinelConnector/index.js\");\nconst eventHandler = __webpack_require__(/*! ./redis/event_handler */ \"(action-browser)/./node_modules/ioredis/built/redis/event_handler.js\");\nconst RedisOptions_1 = __webpack_require__(/*! ./redis/RedisOptions */ \"(action-browser)/./node_modules/ioredis/built/redis/RedisOptions.js\");\nconst ScanStream_1 = __webpack_require__(/*! ./ScanStream */ \"(action-browser)/./node_modules/ioredis/built/ScanStream.js\");\nconst transaction_1 = __webpack_require__(/*! ./transaction */ \"(action-browser)/./node_modules/ioredis/built/transaction.js\");\nconst utils_1 = __webpack_require__(/*! ./utils */ \"(action-browser)/./node_modules/ioredis/built/utils/index.js\");\nconst applyMixin_1 = __webpack_require__(/*! ./utils/applyMixin */ \"(action-browser)/./node_modules/ioredis/built/utils/applyMixin.js\");\nconst Commander_1 = __webpack_require__(/*! ./utils/Commander */ \"(action-browser)/./node_modules/ioredis/built/utils/Commander.js\");\nconst lodash_1 = __webpack_require__(/*! ./utils/lodash */ \"(action-browser)/./node_modules/ioredis/built/utils/lodash.js\");\nconst Deque = __webpack_require__(/*! denque */ \"(action-browser)/./node_modules/denque/index.js\");\nconst debug = (0, utils_1.Debug)(\"redis\");\n/**\n * This is the major component of ioredis.\n * Use it to connect to a standalone Redis server or Sentinels.\n *\n * ```typescript\n * const redis = new Redis(); // Default port is 6379\n * async function main() {\n * redis.set(\"foo\", \"bar\");\n * redis.get(\"foo\", (err, result) => {\n * // `result` should be \"bar\"\n * console.log(err, result);\n * });\n * // Or use Promise\n * const result = await redis.get(\"foo\");\n * }\n * ```\n */\nclass Redis extends Commander_1.default {\n constructor(arg1, arg2, arg3) {\n super();\n this.status = \"wait\";\n /**\n * @ignore\n */\n this.isCluster = false;\n this.reconnectTimeout = null;\n this.connectionEpoch = 0;\n this.retryAttempts = 0;\n this.manuallyClosing = false;\n // Prepare autopipelines structures\n this._autoPipelines = new Map();\n this._runningAutoPipelines = new Set();\n this.parseOptions(arg1, arg2, arg3);\n events_1.EventEmitter.call(this);\n this.resetCommandQueue();\n this.resetOfflineQueue();\n if (this.options.Connector) {\n this.connector = new this.options.Connector(this.options);\n }\n else if (this.options.sentinels) {\n const sentinelConnector = new SentinelConnector_1.default(this.options);\n sentinelConnector.emitter = this;\n this.connector = sentinelConnector;\n }\n else {\n this.connector = new connectors_1.StandaloneConnector(this.options);\n }\n if (this.options.scripts) {\n Object.entries(this.options.scripts).forEach(([name, definition]) => {\n this.defineCommand(name, definition);\n });\n }\n // end(or wait) -> connecting -> connect -> ready -> end\n if (this.options.lazyConnect) {\n this.setStatus(\"wait\");\n }\n else {\n this.connect().catch(lodash_1.noop);\n }\n }\n /**\n * Create a Redis instance.\n * This is the same as `new Redis()` but is included for compatibility with node-redis.\n */\n static createClient(...args) {\n return new Redis(...args);\n }\n get autoPipelineQueueSize() {\n let queued = 0;\n for (const pipeline of this._autoPipelines.values()) {\n queued += pipeline.length;\n }\n return queued;\n }\n /**\n * Create a connection to Redis.\n * This method will be invoked automatically when creating a new Redis instance\n * unless `lazyConnect: true` is passed.\n *\n * When calling this method manually, a Promise is returned, which will\n * be resolved when the connection status is ready.\n */\n connect(callback) {\n const promise = new Promise((resolve, reject) => {\n if (this.status === \"connecting\" ||\n this.status === \"connect\" ||\n this.status === \"ready\") {\n reject(new Error(\"Redis is already connecting/connected\"));\n return;\n }\n this.connectionEpoch += 1;\n this.setStatus(\"connecting\");\n const { options } = this;\n this.condition = {\n select: options.db,\n auth: options.username\n ? [options.username, options.password]\n : options.password,\n subscriber: false,\n };\n const _this = this;\n (0, standard_as_callback_1.default)(this.connector.connect(function (type, err) {\n _this.silentEmit(type, err);\n }), function (err, stream) {\n if (err) {\n _this.flushQueue(err);\n _this.silentEmit(\"error\", err);\n reject(err);\n _this.setStatus(\"end\");\n return;\n }\n let CONNECT_EVENT = options.tls ? \"secureConnect\" : \"connect\";\n if (\"sentinels\" in options &&\n options.sentinels &&\n !options.enableTLSForSentinelMode) {\n CONNECT_EVENT = \"connect\";\n }\n _this.stream = stream;\n if (options.noDelay) {\n stream.setNoDelay(true);\n }\n // Node ignores setKeepAlive before connect, therefore we wait for the event:\n // https://github.com/nodejs/node/issues/31663\n if (typeof options.keepAlive === \"number\") {\n if (stream.connecting) {\n stream.once(CONNECT_EVENT, () => {\n stream.setKeepAlive(true, options.keepAlive);\n });\n }\n else {\n stream.setKeepAlive(true, options.keepAlive);\n }\n }\n if (stream.connecting) {\n stream.once(CONNECT_EVENT, eventHandler.connectHandler(_this));\n if (options.connectTimeout) {\n /*\n * Typically, Socket#setTimeout(0) will clear the timer\n * set before. However, in some platforms (Electron 3.x~4.x),\n * the timer will not be cleared. So we introduce a variable here.\n *\n * See https://github.com/electron/electron/issues/14915\n */\n let connectTimeoutCleared = false;\n stream.setTimeout(options.connectTimeout, function () {\n if (connectTimeoutCleared) {\n return;\n }\n stream.setTimeout(0);\n stream.destroy();\n const err = new Error(\"connect ETIMEDOUT\");\n // @ts-expect-error\n err.errorno = \"ETIMEDOUT\";\n // @ts-expect-error\n err.code = \"ETIMEDOUT\";\n // @ts-expect-error\n err.syscall = \"connect\";\n eventHandler.errorHandler(_this)(err);\n });\n stream.once(CONNECT_EVENT, function () {\n connectTimeoutCleared = true;\n stream.setTimeout(0);\n });\n }\n }\n else if (stream.destroyed) {\n const firstError = _this.connector.firstError;\n if (firstError) {\n process.nextTick(() => {\n eventHandler.errorHandler(_this)(firstError);\n });\n }\n process.nextTick(eventHandler.closeHandler(_this));\n }\n else {\n process.nextTick(eventHandler.connectHandler(_this));\n }\n if (!stream.destroyed) {\n stream.once(\"error\", eventHandler.errorHandler(_this));\n stream.once(\"close\", eventHandler.closeHandler(_this));\n }\n const connectionReadyHandler = function () {\n _this.removeListener(\"close\", connectionCloseHandler);\n resolve();\n };\n var connectionCloseHandler = function () {\n _this.removeListener(\"ready\", connectionReadyHandler);\n reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n };\n _this.once(\"ready\", connectionReadyHandler);\n _this.once(\"close\", connectionCloseHandler);\n });\n });\n return (0, standard_as_callback_1.default)(promise, callback);\n }\n /**\n * Disconnect from Redis.\n *\n * This method closes the connection immediately,\n * and may lose some pending replies that haven't written to client.\n * If you want to wait for the pending replies, use Redis#quit instead.\n */\n disconnect(reconnect = false) {\n if (!reconnect) {\n this.manuallyClosing = true;\n }\n if (this.reconnectTimeout && !reconnect) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n if (this.status === \"wait\") {\n eventHandler.closeHandler(this)();\n }\n else {\n this.connector.disconnect();\n }\n }\n /**\n * Disconnect from Redis.\n *\n * @deprecated\n */\n end() {\n this.disconnect();\n }\n /**\n * Create a new instance with the same options as the current one.\n *\n * @example\n * ```js\n * var redis = new Redis(6380);\n * var anotherRedis = redis.duplicate();\n * ```\n */\n duplicate(override) {\n return new Redis({ ...this.options, ...override });\n }\n /**\n * Mode of the connection.\n *\n * One of `\"normal\"`, `\"subscriber\"`, or `\"monitor\"`. When the connection is\n * not in `\"normal\"` mode, certain commands are not allowed.\n */\n get mode() {\n var _a;\n return this.options.monitor\n ? \"monitor\"\n : ((_a = this.condition) === null || _a === void 0 ? void 0 : _a.subscriber)\n ? \"subscriber\"\n : \"normal\";\n }\n /**\n * Listen for all requests received by the server in real time.\n *\n * This command will create a new connection to Redis and send a\n * MONITOR command via the new connection in order to avoid disturbing\n * the current connection.\n *\n * @param callback The callback function. If omit, a promise will be returned.\n * @example\n * ```js\n * var redis = new Redis();\n * redis.monitor(function (err, monitor) {\n * // Entering monitoring mode.\n * monitor.on('monitor', function (time, args, source, database) {\n * console.log(time + \": \" + util.inspect(args));\n * });\n * });\n *\n * // supports promise as well as other commands\n * redis.monitor().then(function (monitor) {\n * monitor.on('monitor', function (time, args, source, database) {\n * console.log(time + \": \" + util.inspect(args));\n * });\n * });\n * ```\n */\n monitor(callback) {\n const monitorInstance = this.duplicate({\n monitor: true,\n lazyConnect: false,\n });\n return (0, standard_as_callback_1.default)(new Promise(function (resolve, reject) {\n monitorInstance.once(\"error\", reject);\n monitorInstance.once(\"monitoring\", function () {\n resolve(monitorInstance);\n });\n }), callback);\n }\n /**\n * Send a command to Redis\n *\n * This method is used internally and in most cases you should not\n * use it directly. If you need to send a command that is not supported\n * by the library, you can use the `call` method:\n *\n * ```js\n * const redis = new Redis();\n *\n * redis.call('set', 'foo', 'bar');\n * // or\n * redis.call(['set', 'foo', 'bar']);\n * ```\n *\n * @ignore\n */\n sendCommand(command, stream) {\n var _a, _b;\n if (this.status === \"wait\") {\n this.connect().catch(lodash_1.noop);\n }\n if (this.status === \"end\") {\n command.reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n return command.promise;\n }\n if (((_a = this.condition) === null || _a === void 0 ? void 0 : _a.subscriber) &&\n !Command_1.default.checkFlag(\"VALID_IN_SUBSCRIBER_MODE\", command.name)) {\n command.reject(new Error(\"Connection in subscriber mode, only subscriber commands may be used\"));\n return command.promise;\n }\n if (typeof this.options.commandTimeout === \"number\") {\n command.setTimeout(this.options.commandTimeout);\n }\n let writable = this.status === \"ready\" ||\n (!stream &&\n this.status === \"connect\" &&\n (0, commands_1.exists)(command.name) &&\n (0, commands_1.hasFlag)(command.name, \"loading\"));\n if (!this.stream) {\n writable = false;\n }\n else if (!this.stream.writable) {\n writable = false;\n // @ts-expect-error\n }\n else if (this.stream._writableState && this.stream._writableState.ended) {\n // TODO: We should be able to remove this as the PR has already been merged.\n // https://github.com/iojs/io.js/pull/1217\n writable = false;\n }\n if (!writable) {\n if (!this.options.enableOfflineQueue) {\n command.reject(new Error(\"Stream isn't writeable and enableOfflineQueue options is false\"));\n return command.promise;\n }\n if (command.name === \"quit\" && this.offlineQueue.length === 0) {\n this.disconnect();\n command.resolve(Buffer.from(\"OK\"));\n return command.promise;\n }\n // @ts-expect-error\n if (debug.enabled) {\n debug(\"queue command[%s]: %d -> %s(%o)\", this._getDescription(), this.condition.select, command.name, command.args);\n }\n this.offlineQueue.push({\n command: command,\n stream: stream,\n select: this.condition.select,\n });\n }\n else {\n // @ts-expect-error\n if (debug.enabled) {\n debug(\"write command[%s]: %d -> %s(%o)\", this._getDescription(), (_b = this.condition) === null || _b === void 0 ? void 0 : _b.select, command.name, command.args);\n }\n if (stream) {\n if (\"isPipeline\" in stream && stream.isPipeline) {\n stream.write(command.toWritable(stream.destination.redis.stream));\n }\n else {\n stream.write(command.toWritable(stream));\n }\n }\n else {\n this.stream.write(command.toWritable(this.stream));\n }\n this.commandQueue.push({\n command: command,\n stream: stream,\n select: this.condition.select,\n });\n if (Command_1.default.checkFlag(\"WILL_DISCONNECT\", command.name)) {\n this.manuallyClosing = true;\n }\n if (this.options.socketTimeout !== undefined && this.socketTimeoutTimer === undefined) {\n this.setSocketTimeout();\n }\n }\n if (command.name === \"select\" && (0, utils_1.isInt)(command.args[0])) {\n const db = parseInt(command.args[0], 10);\n if (this.condition.select !== db) {\n this.condition.select = db;\n this.emit(\"select\", db);\n debug(\"switch to db [%d]\", this.condition.select);\n }\n }\n return command.promise;\n }\n setSocketTimeout() {\n this.socketTimeoutTimer = setTimeout(() => {\n this.stream.destroy(new Error(`Socket timeout. Expecting data, but didn't receive any in ${this.options.socketTimeout}ms.`));\n this.socketTimeoutTimer = undefined;\n }, this.options.socketTimeout);\n // this handler must run after the \"data\" handler in \"DataHandler\"\n // so that `this.commandQueue.length` will be updated\n this.stream.once(\"data\", () => {\n clearTimeout(this.socketTimeoutTimer);\n this.socketTimeoutTimer = undefined;\n if (this.commandQueue.length === 0)\n return;\n this.setSocketTimeout();\n });\n }\n scanStream(options) {\n return this.createScanStream(\"scan\", { options });\n }\n scanBufferStream(options) {\n return this.createScanStream(\"scanBuffer\", { options });\n }\n sscanStream(key, options) {\n return this.createScanStream(\"sscan\", { key, options });\n }\n sscanBufferStream(key, options) {\n return this.createScanStream(\"sscanBuffer\", { key, options });\n }\n hscanStream(key, options) {\n return this.createScanStream(\"hscan\", { key, options });\n }\n hscanBufferStream(key, options) {\n return this.createScanStream(\"hscanBuffer\", { key, options });\n }\n zscanStream(key, options) {\n return this.createScanStream(\"zscan\", { key, options });\n }\n zscanBufferStream(key, options) {\n return this.createScanStream(\"zscanBuffer\", { key, options });\n }\n /**\n * Emit only when there's at least one listener.\n *\n * @ignore\n */\n silentEmit(eventName, arg) {\n let error;\n if (eventName === \"error\") {\n error = arg;\n if (this.status === \"end\") {\n return;\n }\n if (this.manuallyClosing) {\n // ignore connection related errors when manually disconnecting\n if (error instanceof Error &&\n (error.message === utils_1.CONNECTION_CLOSED_ERROR_MSG ||\n // @ts-expect-error\n error.syscall === \"connect\" ||\n // @ts-expect-error\n error.syscall === \"read\")) {\n return;\n }\n }\n }\n if (this.listeners(eventName).length > 0) {\n return this.emit.apply(this, arguments);\n }\n if (error && error instanceof Error) {\n console.error(\"[ioredis] Unhandled error event:\", error.stack);\n }\n return false;\n }\n /**\n * @ignore\n */\n recoverFromFatalError(_commandError, err, options) {\n this.flushQueue(err, options);\n this.silentEmit(\"error\", err);\n this.disconnect(true);\n }\n /**\n * @ignore\n */\n handleReconnection(err, item) {\n var _a;\n let needReconnect = false;\n if (this.options.reconnectOnError) {\n needReconnect = this.options.reconnectOnError(err);\n }\n switch (needReconnect) {\n case 1:\n case true:\n if (this.status !== \"reconnecting\") {\n this.disconnect(true);\n }\n item.command.reject(err);\n break;\n case 2:\n if (this.status !== \"reconnecting\") {\n this.disconnect(true);\n }\n if (((_a = this.condition) === null || _a === void 0 ? void 0 : _a.select) !== item.select &&\n item.command.name !== \"select\") {\n this.select(item.select);\n }\n // TODO\n // @ts-expect-error\n this.sendCommand(item.command);\n break;\n default:\n item.command.reject(err);\n }\n }\n /**\n * Get description of the connection. Used for debugging.\n */\n _getDescription() {\n let description;\n if (\"path\" in this.options && this.options.path) {\n description = this.options.path;\n }\n else if (this.stream &&\n this.stream.remoteAddress &&\n this.stream.remotePort) {\n description = this.stream.remoteAddress + \":\" + this.stream.remotePort;\n }\n else if (\"host\" in this.options && this.options.host) {\n description = this.options.host + \":\" + this.options.port;\n }\n else {\n // Unexpected\n description = \"\";\n }\n if (this.options.connectionName) {\n description += ` (${this.options.connectionName})`;\n }\n return description;\n }\n resetCommandQueue() {\n this.commandQueue = new Deque();\n }\n resetOfflineQueue() {\n this.offlineQueue = new Deque();\n }\n parseOptions(...args) {\n const options = {};\n let isTls = false;\n for (let i = 0; i < args.length; ++i) {\n const arg = args[i];\n if (arg === null || typeof arg === \"undefined\") {\n continue;\n }\n if (typeof arg === \"object\") {\n (0, lodash_1.defaults)(options, arg);\n }\n else if (typeof arg === \"string\") {\n (0, lodash_1.defaults)(options, (0, utils_1.parseURL)(arg));\n if (arg.startsWith(\"rediss://\")) {\n isTls = true;\n }\n }\n else if (typeof arg === \"number\") {\n options.port = arg;\n }\n else {\n throw new Error(\"Invalid argument \" + arg);\n }\n }\n if (isTls) {\n (0, lodash_1.defaults)(options, { tls: true });\n }\n (0, lodash_1.defaults)(options, Redis.defaultOptions);\n if (typeof options.port === \"string\") {\n options.port = parseInt(options.port, 10);\n }\n if (typeof options.db === \"string\") {\n options.db = parseInt(options.db, 10);\n }\n // @ts-expect-error\n this.options = (0, utils_1.resolveTLSProfile)(options);\n }\n /**\n * Change instance's status\n */\n setStatus(status, arg) {\n // @ts-expect-error\n if (debug.enabled) {\n debug(\"status[%s]: %s -> %s\", this._getDescription(), this.status || \"[empty]\", status);\n }\n this.status = status;\n process.nextTick(this.emit.bind(this, status, arg));\n }\n createScanStream(command, { key, options = {} }) {\n return new ScanStream_1.default({\n objectMode: true,\n key: key,\n redis: this,\n command: command,\n ...options,\n });\n }\n /**\n * Flush offline queue and command queue with error.\n *\n * @param error The error object to send to the commands\n * @param options options\n */\n flushQueue(error, options) {\n options = (0, lodash_1.defaults)({}, options, {\n offlineQueue: true,\n commandQueue: true,\n });\n let item;\n if (options.offlineQueue) {\n while ((item = this.offlineQueue.shift())) {\n item.command.reject(error);\n }\n }\n if (options.commandQueue) {\n if (this.commandQueue.length > 0) {\n if (this.stream) {\n this.stream.removeAllListeners(\"data\");\n }\n while ((item = this.commandQueue.shift())) {\n item.command.reject(error);\n }\n }\n }\n }\n /**\n * Check whether Redis has finished loading the persistent data and is able to\n * process commands.\n */\n _readyCheck(callback) {\n const _this = this;\n this.info(function (err, res) {\n if (err) {\n if (err.message && err.message.includes(\"NOPERM\")) {\n console.warn(`Skipping the ready check because INFO command fails: \"${err.message}\". You can disable ready check with \"enableReadyCheck\". More: https://github.com/luin/ioredis/wiki/Disable-ready-check.`);\n return callback(null, {});\n }\n return callback(err);\n }\n if (typeof res !== \"string\") {\n return callback(null, res);\n }\n const info = {};\n const lines = res.split(\"\\r\\n\");\n for (let i = 0; i < lines.length; ++i) {\n const [fieldName, ...fieldValueParts] = lines[i].split(\":\");\n const fieldValue = fieldValueParts.join(\":\");\n if (fieldValue) {\n info[fieldName] = fieldValue;\n }\n }\n if (!info.loading || info.loading === \"0\") {\n callback(null, info);\n }\n else {\n const loadingEtaMs = (info.loading_eta_seconds || 1) * 1000;\n const retryTime = _this.options.maxLoadingRetryTime &&\n _this.options.maxLoadingRetryTime < loadingEtaMs\n ? _this.options.maxLoadingRetryTime\n : loadingEtaMs;\n debug(\"Redis server still loading, trying again in \" + retryTime + \"ms\");\n setTimeout(function () {\n _this._readyCheck(callback);\n }, retryTime);\n }\n }).catch(lodash_1.noop);\n }\n}\nRedis.Cluster = cluster_1.default;\nRedis.Command = Command_1.default;\n/**\n * Default options\n */\nRedis.defaultOptions = RedisOptions_1.DEFAULT_REDIS_OPTIONS;\n(0, applyMixin_1.default)(Redis, events_1.EventEmitter);\n(0, transaction_1.addTransactionSupport)(Redis.prototype);\nexports[\"default\"] = Redis;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L1JlZGlzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELG1CQUFtQixtQkFBTyxDQUFDLDJGQUFtQjtBQUM5QyxpQkFBaUIsbUJBQU8sQ0FBQyxzQkFBUTtBQUNqQywrQkFBK0IsbUJBQU8sQ0FBQyxpR0FBc0I7QUFDN0Qsa0JBQWtCLG1CQUFPLENBQUMsaUZBQVc7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsMkVBQVc7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsdUZBQWM7QUFDM0MsNEJBQTRCLG1CQUFPLENBQUMsMkhBQWdDO0FBQ3BFLHFCQUFxQixtQkFBTyxDQUFDLG1HQUF1QjtBQUNwRCx1QkFBdUIsbUJBQU8sQ0FBQyxpR0FBc0I7QUFDckQscUJBQXFCLG1CQUFPLENBQUMsaUZBQWM7QUFDM0Msc0JBQXNCLG1CQUFPLENBQUMsbUZBQWU7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsNkVBQVM7QUFDakMscUJBQXFCLG1CQUFPLENBQUMsNkZBQW9CO0FBQ2pELG9CQUFvQixtQkFBTyxDQUFDLDJGQUFtQjtBQUMvQyxpQkFBaUIsbUJBQU8sQ0FBQyxxRkFBZ0I7QUFDekMsY0FBYyxtQkFBTyxDQUFDLCtEQUFRO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixVQUFVO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsOEJBQThCO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1R0FBdUcsMkJBQTJCO0FBQ2xJO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLCtDQUErQyxTQUFTO0FBQ3hEO0FBQ0E7QUFDQSxxREFBcUQsU0FBUztBQUM5RDtBQUNBO0FBQ0EsZ0RBQWdELGNBQWM7QUFDOUQ7QUFDQTtBQUNBLHNEQUFzRCxjQUFjO0FBQ3BFO0FBQ0E7QUFDQSxnREFBZ0QsY0FBYztBQUM5RDtBQUNBO0FBQ0Esc0RBQXNELGNBQWM7QUFDcEU7QUFDQTtBQUNBLGdEQUFnRCxjQUFjO0FBQzlEO0FBQ0E7QUFDQSxzREFBc0QsY0FBYztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLDRCQUE0QjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxXQUFXO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLG1CQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRkFBMEYsWUFBWTtBQUN0Ryw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixrQkFBa0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWUiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvUmVkaXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb21tYW5kc18xID0gcmVxdWlyZShcIkBpb3JlZGlzL2NvbW1hbmRzXCIpO1xuY29uc3QgZXZlbnRzXzEgPSByZXF1aXJlKFwiZXZlbnRzXCIpO1xuY29uc3Qgc3RhbmRhcmRfYXNfY2FsbGJhY2tfMSA9IHJlcXVpcmUoXCJzdGFuZGFyZC1hcy1jYWxsYmFja1wiKTtcbmNvbnN0IGNsdXN0ZXJfMSA9IHJlcXVpcmUoXCIuL2NsdXN0ZXJcIik7XG5jb25zdCBDb21tYW5kXzEgPSByZXF1aXJlKFwiLi9Db21tYW5kXCIpO1xuY29uc3QgY29ubmVjdG9yc18xID0gcmVxdWlyZShcIi4vY29ubmVjdG9yc1wiKTtcbmNvbnN0IFNlbnRpbmVsQ29ubmVjdG9yXzEgPSByZXF1aXJlKFwiLi9jb25uZWN0b3JzL1NlbnRpbmVsQ29ubmVjdG9yXCIpO1xuY29uc3QgZXZlbnRIYW5kbGVyID0gcmVxdWlyZShcIi4vcmVkaXMvZXZlbnRfaGFuZGxlclwiKTtcbmNvbnN0IFJlZGlzT3B0aW9uc18xID0gcmVxdWlyZShcIi4vcmVkaXMvUmVkaXNPcHRpb25zXCIpO1xuY29uc3QgU2NhblN0cmVhbV8xID0gcmVxdWlyZShcIi4vU2NhblN0cmVhbVwiKTtcbmNvbnN0IHRyYW5zYWN0aW9uXzEgPSByZXF1aXJlKFwiLi90cmFuc2FjdGlvblwiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IGFwcGx5TWl4aW5fMSA9IHJlcXVpcmUoXCIuL3V0aWxzL2FwcGx5TWl4aW5cIik7XG5jb25zdCBDb21tYW5kZXJfMSA9IHJlcXVpcmUoXCIuL3V0aWxzL0NvbW1hbmRlclwiKTtcbmNvbnN0IGxvZGFzaF8xID0gcmVxdWlyZShcIi4vdXRpbHMvbG9kYXNoXCIpO1xuY29uc3QgRGVxdWUgPSByZXF1aXJlKFwiZGVucXVlXCIpO1xuY29uc3QgZGVidWcgPSAoMCwgdXRpbHNfMS5EZWJ1ZykoXCJyZWRpc1wiKTtcbi8qKlxuICogVGhpcyBpcyB0aGUgbWFqb3IgY29tcG9uZW50IG9mIGlvcmVkaXMuXG4gKiBVc2UgaXQgdG8gY29ubmVjdCB0byBhIHN0YW5kYWxvbmUgUmVkaXMgc2VydmVyIG9yIFNlbnRpbmVscy5cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZWRpcyA9IG5ldyBSZWRpcygpOyAvLyBEZWZhdWx0IHBvcnQgaXMgNjM3OVxuICogYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAqICAgcmVkaXMuc2V0KFwiZm9vXCIsIFwiYmFyXCIpO1xuICogICByZWRpcy5nZXQoXCJmb29cIiwgKGVyciwgcmVzdWx0KSA9PiB7XG4gKiAgICAgLy8gYHJlc3VsdGAgc2hvdWxkIGJlIFwiYmFyXCJcbiAqICAgICBjb25zb2xlLmxvZyhlcnIsIHJlc3VsdCk7XG4gKiAgIH0pO1xuICogICAvLyBPciB1c2UgUHJvbWlzZVxuICogICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5nZXQoXCJmb29cIik7XG4gKiB9XG4gKiBgYGBcbiAqL1xuY2xhc3MgUmVkaXMgZXh0ZW5kcyBDb21tYW5kZXJfMS5kZWZhdWx0IHtcbiAgICBjb25zdHJ1Y3RvcihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gXCJ3YWl0XCI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaWdub3JlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlzQ2x1c3RlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlY29ubmVjdFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25FcG9jaCA9IDA7XG4gICAgICAgIHRoaXMucmV0cnlBdHRlbXB0cyA9IDA7XG4gICAgICAgIHRoaXMubWFudWFsbHlDbG9zaW5nID0gZmFsc2U7XG4gICAgICAgIC8vIFByZXBhcmUgYXV0b3BpcGVsaW5lcyBzdHJ1Y3R1cmVzXG4gICAgICAgIHRoaXMuX2F1dG9QaXBlbGluZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuX3J1bm5pbmdBdXRvUGlwZWxpbmVzID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLnBhcnNlT3B0aW9ucyhhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgICAgZXZlbnRzXzEuRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMucmVzZXRDb21tYW5kUXVldWUoKTtcbiAgICAgICAgdGhpcy5yZXNldE9mZmxpbmVRdWV1ZSgpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLkNvbm5lY3Rvcikge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0b3IgPSBuZXcgdGhpcy5vcHRpb25zLkNvbm5lY3Rvcih0aGlzLm9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zZW50aW5lbHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbnRpbmVsQ29ubmVjdG9yID0gbmV3IFNlbnRpbmVsQ29ubmVjdG9yXzEuZGVmYXVsdCh0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgICAgc2VudGluZWxDb25uZWN0b3IuZW1pdHRlciA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RvciA9IHNlbnRpbmVsQ29ubmVjdG9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0b3IgPSBuZXcgY29ubmVjdG9yc18xLlN0YW5kYWxvbmVDb25uZWN0b3IodGhpcy5vcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNjcmlwdHMpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMub3B0aW9ucy5zY3JpcHRzKS5mb3JFYWNoKChbbmFtZSwgZGVmaW5pdGlvbl0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUNvbW1hbmQobmFtZSwgZGVmaW5pdGlvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbmQob3Igd2FpdCkgLT4gY29ubmVjdGluZyAtPiBjb25uZWN0IC0+IHJlYWR5IC0+IGVuZFxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxhenlDb25uZWN0KSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXR1cyhcIndhaXRcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3QoKS5jYXRjaChsb2Rhc2hfMS5ub29wKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBSZWRpcyBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIHRoZSBzYW1lIGFzIGBuZXcgUmVkaXMoKWAgYnV0IGlzIGluY2x1ZGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9kZS1yZWRpcy5cbiAgICAgKi9cbiAgICBzdGF0aWMgY3JlYXRlQ2xpZW50KC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWRpcyguLi5hcmdzKTtcbiAgICB9XG4gICAgZ2V0IGF1dG9QaXBlbGluZVF1ZXVlU2l6ZSgpIHtcbiAgICAgICAgbGV0IHF1ZXVlZCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgcGlwZWxpbmUgb2YgdGhpcy5fYXV0b1BpcGVsaW5lcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgcXVldWVkICs9IHBpcGVsaW5lLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVldWVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBjb25uZWN0aW9uIHRvIFJlZGlzLlxuICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBhdXRvbWF0aWNhbGx5IHdoZW4gY3JlYXRpbmcgYSBuZXcgUmVkaXMgaW5zdGFuY2VcbiAgICAgKiB1bmxlc3MgYGxhenlDb25uZWN0OiB0cnVlYCBpcyBwYXNzZWQuXG4gICAgICpcbiAgICAgKiBXaGVuIGNhbGxpbmcgdGhpcyBtZXRob2QgbWFudWFsbHksIGEgUHJvbWlzZSBpcyByZXR1cm5lZCwgd2hpY2ggd2lsbFxuICAgICAqIGJlIHJlc29sdmVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gc3RhdHVzIGlzIHJlYWR5LlxuICAgICAqL1xuICAgIGNvbm5lY3QoY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gXCJjb25uZWN0aW5nXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9PT0gXCJjb25uZWN0XCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9PT0gXCJyZWFkeVwiKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlJlZGlzIGlzIGFscmVhZHkgY29ubmVjdGluZy9jb25uZWN0ZWRcIikpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbkVwb2NoICs9IDE7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXR1cyhcImNvbm5lY3RpbmdcIik7XG4gICAgICAgICAgICBjb25zdCB7IG9wdGlvbnMgfSA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBzZWxlY3Q6IG9wdGlvbnMuZGIsXG4gICAgICAgICAgICAgICAgYXV0aDogb3B0aW9ucy51c2VybmFtZVxuICAgICAgICAgICAgICAgICAgICA/IFtvcHRpb25zLnVzZXJuYW1lLCBvcHRpb25zLnBhc3N3b3JkXVxuICAgICAgICAgICAgICAgICAgICA6IG9wdGlvbnMucGFzc3dvcmQsXG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlcjogZmFsc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgKDAsIHN0YW5kYXJkX2FzX2NhbGxiYWNrXzEuZGVmYXVsdCkodGhpcy5jb25uZWN0b3IuY29ubmVjdChmdW5jdGlvbiAodHlwZSwgZXJyKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuc2lsZW50RW1pdCh0eXBlLCBlcnIpO1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uIChlcnIsIHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZmx1c2hRdWV1ZShlcnIpO1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5zaWxlbnRFbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnNldFN0YXR1cyhcImVuZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgQ09OTkVDVF9FVkVOVCA9IG9wdGlvbnMudGxzID8gXCJzZWN1cmVDb25uZWN0XCIgOiBcImNvbm5lY3RcIjtcbiAgICAgICAgICAgICAgICBpZiAoXCJzZW50aW5lbHNcIiBpbiBvcHRpb25zICYmXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2VudGluZWxzICYmXG4gICAgICAgICAgICAgICAgICAgICFvcHRpb25zLmVuYWJsZVRMU0ZvclNlbnRpbmVsTW9kZSkge1xuICAgICAgICAgICAgICAgICAgICBDT05ORUNUX0VWRU5UID0gXCJjb25uZWN0XCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF90aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ub0RlbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbS5zZXROb0RlbGF5KHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBOb2RlIGlnbm9yZXMgc2V0S2VlcEFsaXZlIGJlZm9yZSBjb25uZWN0LCB0aGVyZWZvcmUgd2Ugd2FpdCBmb3IgdGhlIGV2ZW50OlxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMzE2NjNcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMua2VlcEFsaXZlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uY29ubmVjdGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm9uY2UoQ09OTkVDVF9FVkVOVCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5zZXRLZWVwQWxpdmUodHJ1ZSwgb3B0aW9ucy5rZWVwQWxpdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc2V0S2VlcEFsaXZlKHRydWUsIG9wdGlvbnMua2VlcEFsaXZlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmNvbm5lY3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm9uY2UoQ09OTkVDVF9FVkVOVCwgZXZlbnRIYW5kbGVyLmNvbm5lY3RIYW5kbGVyKF90aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbm5lY3RUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogVHlwaWNhbGx5LCBTb2NrZXQjc2V0VGltZW91dCgwKSB3aWxsIGNsZWFyIHRoZSB0aW1lclxuICAgICAgICAgICAgICAgICAgICAgICAgICogc2V0IGJlZm9yZS4gSG93ZXZlciwgaW4gc29tZSBwbGF0Zm9ybXMgKEVsZWN0cm9uIDMueH40LngpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIHRpbWVyIHdpbGwgbm90IGJlIGNsZWFyZWQuIFNvIHdlIGludHJvZHVjZSBhIHZhcmlhYmxlIGhlcmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGVjdHJvbi9lbGVjdHJvbi9pc3N1ZXMvMTQ5MTVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbm5lY3RUaW1lb3V0Q2xlYXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNldFRpbWVvdXQob3B0aW9ucy5jb25uZWN0VGltZW91dCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0VGltZW91dENsZWFyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc2V0VGltZW91dCgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihcImNvbm5lY3QgRVRJTUVET1VUXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIuZXJyb3JubyA9IFwiRVRJTUVET1VUXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5jb2RlID0gXCJFVElNRURPVVRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnN5c2NhbGwgPSBcImNvbm5lY3RcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudEhhbmRsZXIuZXJyb3JIYW5kbGVyKF90aGlzKShlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ub25jZShDT05ORUNUX0VWRU5ULCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdFRpbWVvdXRDbGVhcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc2V0VGltZW91dCgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmVhbS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RFcnJvciA9IF90aGlzLmNvbm5lY3Rvci5maXJzdEVycm9yO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVyLmVycm9ySGFuZGxlcihfdGhpcykoZmlyc3RFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGV2ZW50SGFuZGxlci5jbG9zZUhhbmRsZXIoX3RoaXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZXZlbnRIYW5kbGVyLmNvbm5lY3RIYW5kbGVyKF90aGlzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghc3RyZWFtLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0ub25jZShcImVycm9yXCIsIGV2ZW50SGFuZGxlci5lcnJvckhhbmRsZXIoX3RoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm9uY2UoXCJjbG9zZVwiLCBldmVudEhhbmRsZXIuY2xvc2VIYW5kbGVyKF90aGlzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb25SZWFkeUhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIiwgY29ubmVjdGlvbkNsb3NlSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHZhciBjb25uZWN0aW9uQ2xvc2VIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZW1vdmVMaXN0ZW5lcihcInJlYWR5XCIsIGNvbm5lY3Rpb25SZWFkeUhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKHV0aWxzXzEuQ09OTkVDVElPTl9DTE9TRURfRVJST1JfTVNHKSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBfdGhpcy5vbmNlKFwicmVhZHlcIiwgY29ubmVjdGlvblJlYWR5SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgX3RoaXMub25jZShcImNsb3NlXCIsIGNvbm5lY3Rpb25DbG9zZUhhbmRsZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gKDAsIHN0YW5kYXJkX2FzX2NhbGxiYWNrXzEuZGVmYXVsdCkocHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEaXNjb25uZWN0IGZyb20gUmVkaXMuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gaW1tZWRpYXRlbHksXG4gICAgICogYW5kIG1heSBsb3NlIHNvbWUgcGVuZGluZyByZXBsaWVzIHRoYXQgaGF2ZW4ndCB3cml0dGVuIHRvIGNsaWVudC5cbiAgICAgKiBJZiB5b3Ugd2FudCB0byB3YWl0IGZvciB0aGUgcGVuZGluZyByZXBsaWVzLCB1c2UgUmVkaXMjcXVpdCBpbnN0ZWFkLlxuICAgICAqL1xuICAgIGRpc2Nvbm5lY3QocmVjb25uZWN0ID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCFyZWNvbm5lY3QpIHtcbiAgICAgICAgICAgIHRoaXMubWFudWFsbHlDbG9zaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZWNvbm5lY3RUaW1lb3V0ICYmICFyZWNvbm5lY3QpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlY29ubmVjdFRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IFwid2FpdFwiKSB7XG4gICAgICAgICAgICBldmVudEhhbmRsZXIuY2xvc2VIYW5kbGVyKHRoaXMpKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rvci5kaXNjb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGlzY29ubmVjdCBmcm9tIFJlZGlzLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBlbmQoKSB7XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc2FtZSBvcHRpb25zIGFzIHRoZSBjdXJyZW50IG9uZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiB2YXIgcmVkaXMgPSBuZXcgUmVkaXMoNjM4MCk7XG4gICAgICogdmFyIGFub3RoZXJSZWRpcyA9IHJlZGlzLmR1cGxpY2F0ZSgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGR1cGxpY2F0ZShvdmVycmlkZSkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZGlzKHsgLi4udGhpcy5vcHRpb25zLCAuLi5vdmVycmlkZSB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9kZSBvZiB0aGUgY29ubmVjdGlvbi5cbiAgICAgKlxuICAgICAqIE9uZSBvZiBgXCJub3JtYWxcImAsIGBcInN1YnNjcmliZXJcImAsIG9yIGBcIm1vbml0b3JcImAuIFdoZW4gdGhlIGNvbm5lY3Rpb24gaXNcbiAgICAgKiBub3QgaW4gYFwibm9ybWFsXCJgIG1vZGUsIGNlcnRhaW4gY29tbWFuZHMgYXJlIG5vdCBhbGxvd2VkLlxuICAgICAqL1xuICAgIGdldCBtb2RlKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMubW9uaXRvclxuICAgICAgICAgICAgPyBcIm1vbml0b3JcIlxuICAgICAgICAgICAgOiAoKF9hID0gdGhpcy5jb25kaXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgID8gXCJzdWJzY3JpYmVyXCJcbiAgICAgICAgICAgICAgICA6IFwibm9ybWFsXCI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExpc3RlbiBmb3IgYWxsIHJlcXVlc3RzIHJlY2VpdmVkIGJ5IHRoZSBzZXJ2ZXIgaW4gcmVhbCB0aW1lLlxuICAgICAqXG4gICAgICogVGhpcyBjb21tYW5kIHdpbGwgY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gdG8gUmVkaXMgYW5kIHNlbmQgYVxuICAgICAqIE1PTklUT1IgY29tbWFuZCB2aWEgdGhlIG5ldyBjb25uZWN0aW9uIGluIG9yZGVyIHRvIGF2b2lkIGRpc3R1cmJpbmdcbiAgICAgKiB0aGUgY3VycmVudCBjb25uZWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbi4gSWYgb21pdCwgYSBwcm9taXNlIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIHZhciByZWRpcyA9IG5ldyBSZWRpcygpO1xuICAgICAqIHJlZGlzLm1vbml0b3IoZnVuY3Rpb24gKGVyciwgbW9uaXRvcikge1xuICAgICAqICAgLy8gRW50ZXJpbmcgbW9uaXRvcmluZyBtb2RlLlxuICAgICAqICAgbW9uaXRvci5vbignbW9uaXRvcicsIGZ1bmN0aW9uICh0aW1lLCBhcmdzLCBzb3VyY2UsIGRhdGFiYXNlKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHRpbWUgKyBcIjogXCIgKyB1dGlsLmluc3BlY3QoYXJncykpO1xuICAgICAqICAgfSk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBzdXBwb3J0cyBwcm9taXNlIGFzIHdlbGwgYXMgb3RoZXIgY29tbWFuZHNcbiAgICAgKiByZWRpcy5tb25pdG9yKCkudGhlbihmdW5jdGlvbiAobW9uaXRvcikge1xuICAgICAqICAgbW9uaXRvci5vbignbW9uaXRvcicsIGZ1bmN0aW9uICh0aW1lLCBhcmdzLCBzb3VyY2UsIGRhdGFiYXNlKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHRpbWUgKyBcIjogXCIgKyB1dGlsLmluc3BlY3QoYXJncykpO1xuICAgICAqICAgfSk7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgbW9uaXRvcihjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBtb25pdG9ySW5zdGFuY2UgPSB0aGlzLmR1cGxpY2F0ZSh7XG4gICAgICAgICAgICBtb25pdG9yOiB0cnVlLFxuICAgICAgICAgICAgbGF6eUNvbm5lY3Q6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuICgwLCBzdGFuZGFyZF9hc19jYWxsYmFja18xLmRlZmF1bHQpKG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIG1vbml0b3JJbnN0YW5jZS5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgICAgICAgIG1vbml0b3JJbnN0YW5jZS5vbmNlKFwibW9uaXRvcmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShtb25pdG9ySW5zdGFuY2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmQgYSBjb21tYW5kIHRvIFJlZGlzXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGludGVybmFsbHkgYW5kIGluIG1vc3QgY2FzZXMgeW91IHNob3VsZCBub3RcbiAgICAgKiB1c2UgaXQgZGlyZWN0bHkuIElmIHlvdSBuZWVkIHRvIHNlbmQgYSBjb21tYW5kIHRoYXQgaXMgbm90IHN1cHBvcnRlZFxuICAgICAqIGJ5IHRoZSBsaWJyYXJ5LCB5b3UgY2FuIHVzZSB0aGUgYGNhbGxgIG1ldGhvZDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgcmVkaXMgPSBuZXcgUmVkaXMoKTtcbiAgICAgKlxuICAgICAqIHJlZGlzLmNhbGwoJ3NldCcsICdmb28nLCAnYmFyJyk7XG4gICAgICogLy8gb3JcbiAgICAgKiByZWRpcy5jYWxsKFsnc2V0JywgJ2ZvbycsICdiYXInXSk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgc2VuZENvbW1hbmQoY29tbWFuZCwgc3RyZWFtKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gXCJ3YWl0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdCgpLmNhdGNoKGxvZGFzaF8xLm5vb3ApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gXCJlbmRcIikge1xuICAgICAgICAgICAgY29tbWFuZC5yZWplY3QobmV3IEVycm9yKHV0aWxzXzEuQ09OTkVDVElPTl9DTE9TRURfRVJST1JfTVNHKSk7XG4gICAgICAgICAgICByZXR1cm4gY29tbWFuZC5wcm9taXNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoKF9hID0gdGhpcy5jb25kaXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmVyKSAmJlxuICAgICAgICAgICAgIUNvbW1hbmRfMS5kZWZhdWx0LmNoZWNrRmxhZyhcIlZBTElEX0lOX1NVQlNDUklCRVJfTU9ERVwiLCBjb21tYW5kLm5hbWUpKSB7XG4gICAgICAgICAgICBjb21tYW5kLnJlamVjdChuZXcgRXJyb3IoXCJDb25uZWN0aW9uIGluIHN1YnNjcmliZXIgbW9kZSwgb25seSBzdWJzY3JpYmVyIGNvbW1hbmRzIG1heSBiZSB1c2VkXCIpKTtcbiAgICAgICAgICAgIHJldHVybiBjb21tYW5kLnByb21pc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuY29tbWFuZFRpbWVvdXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGNvbW1hbmQuc2V0VGltZW91dCh0aGlzLm9wdGlvbnMuY29tbWFuZFRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICAgIGxldCB3cml0YWJsZSA9IHRoaXMuc3RhdHVzID09PSBcInJlYWR5XCIgfHxcbiAgICAgICAgICAgICghc3RyZWFtICYmXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT09IFwiY29ubmVjdFwiICYmXG4gICAgICAgICAgICAgICAgKDAsIGNvbW1hbmRzXzEuZXhpc3RzKShjb21tYW5kLm5hbWUpICYmXG4gICAgICAgICAgICAgICAgKDAsIGNvbW1hbmRzXzEuaGFzRmxhZykoY29tbWFuZC5uYW1lLCBcImxvYWRpbmdcIikpO1xuICAgICAgICBpZiAoIXRoaXMuc3RyZWFtKSB7XG4gICAgICAgICAgICB3cml0YWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLnN0cmVhbS53cml0YWJsZSkge1xuICAgICAgICAgICAgd3JpdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnN0cmVhbS5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLnN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lbmRlZCkge1xuICAgICAgICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIHRoaXMgYXMgdGhlIFBSIGhhcyBhbHJlYWR5IGJlZW4gbWVyZ2VkLlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2lvanMvaW8uanMvcHVsbC8xMjE3XG4gICAgICAgICAgICB3cml0YWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghd3JpdGFibGUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmVuYWJsZU9mZmxpbmVRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGNvbW1hbmQucmVqZWN0KG5ldyBFcnJvcihcIlN0cmVhbSBpc24ndCB3cml0ZWFibGUgYW5kIGVuYWJsZU9mZmxpbmVRdWV1ZSBvcHRpb25zIGlzIGZhbHNlXCIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZC5wcm9taXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbW1hbmQubmFtZSA9PT0gXCJxdWl0XCIgJiYgdGhpcy5vZmZsaW5lUXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgY29tbWFuZC5yZXNvbHZlKEJ1ZmZlci5mcm9tKFwiT0tcIikpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kLnByb21pc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBpZiAoZGVidWcuZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIGRlYnVnKFwicXVldWUgY29tbWFuZFslc106ICVkIC0+ICVzKCVvKVwiLCB0aGlzLl9nZXREZXNjcmlwdGlvbigpLCB0aGlzLmNvbmRpdGlvbi5zZWxlY3QsIGNvbW1hbmQubmFtZSwgY29tbWFuZC5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub2ZmbGluZVF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvbW1hbmQ6IGNvbW1hbmQsXG4gICAgICAgICAgICAgICAgc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgICAgICAgc2VsZWN0OiB0aGlzLmNvbmRpdGlvbi5zZWxlY3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGlmIChkZWJ1Zy5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgZGVidWcoXCJ3cml0ZSBjb21tYW5kWyVzXTogJWQgLT4gJXMoJW8pXCIsIHRoaXMuX2dldERlc2NyaXB0aW9uKCksIChfYiA9IHRoaXMuY29uZGl0aW9uKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0LCBjb21tYW5kLm5hbWUsIGNvbW1hbmQuYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgaWYgKFwiaXNQaXBlbGluZVwiIGluIHN0cmVhbSAmJiBzdHJlYW0uaXNQaXBlbGluZSkge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoY29tbWFuZC50b1dyaXRhYmxlKHN0cmVhbS5kZXN0aW5hdGlvbi5yZWRpcy5zdHJlYW0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZShjb21tYW5kLnRvV3JpdGFibGUoc3RyZWFtKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoY29tbWFuZC50b1dyaXRhYmxlKHRoaXMuc3RyZWFtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb21tYW5kOiBjb21tYW5kLFxuICAgICAgICAgICAgICAgIHN0cmVhbTogc3RyZWFtLFxuICAgICAgICAgICAgICAgIHNlbGVjdDogdGhpcy5jb25kaXRpb24uc2VsZWN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoQ29tbWFuZF8xLmRlZmF1bHQuY2hlY2tGbGFnKFwiV0lMTF9ESVNDT05ORUNUXCIsIGNvbW1hbmQubmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hbnVhbGx5Q2xvc2luZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNvY2tldFRpbWVvdXQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNvY2tldFRpbWVvdXRUaW1lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTb2NrZXRUaW1lb3V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmQubmFtZSA9PT0gXCJzZWxlY3RcIiAmJiAoMCwgdXRpbHNfMS5pc0ludCkoY29tbWFuZC5hcmdzWzBdKSkge1xuICAgICAgICAgICAgY29uc3QgZGIgPSBwYXJzZUludChjb21tYW5kLmFyZ3NbMF0sIDEwKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbi5zZWxlY3QgIT09IGRiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24uc2VsZWN0ID0gZGI7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KFwic2VsZWN0XCIsIGRiKTtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhcInN3aXRjaCB0byBkYiBbJWRdXCIsIHRoaXMuY29uZGl0aW9uLnNlbGVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbW1hbmQucHJvbWlzZTtcbiAgICB9XG4gICAgc2V0U29ja2V0VGltZW91dCgpIHtcbiAgICAgICAgdGhpcy5zb2NrZXRUaW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtLmRlc3Ryb3kobmV3IEVycm9yKGBTb2NrZXQgdGltZW91dC4gRXhwZWN0aW5nIGRhdGEsIGJ1dCBkaWRuJ3QgcmVjZWl2ZSBhbnkgaW4gJHt0aGlzLm9wdGlvbnMuc29ja2V0VGltZW91dH1tcy5gKSk7XG4gICAgICAgICAgICB0aGlzLnNvY2tldFRpbWVvdXRUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSwgdGhpcy5vcHRpb25zLnNvY2tldFRpbWVvdXQpO1xuICAgICAgICAvLyB0aGlzIGhhbmRsZXIgbXVzdCBydW4gYWZ0ZXIgdGhlIFwiZGF0YVwiIGhhbmRsZXIgaW4gXCJEYXRhSGFuZGxlclwiXG4gICAgICAgIC8vIHNvIHRoYXQgYHRoaXMuY29tbWFuZFF1ZXVlLmxlbmd0aGAgd2lsbCBiZSB1cGRhdGVkXG4gICAgICAgIHRoaXMuc3RyZWFtLm9uY2UoXCJkYXRhXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNvY2tldFRpbWVvdXRUaW1lcik7XG4gICAgICAgICAgICB0aGlzLnNvY2tldFRpbWVvdXRUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbW1hbmRRdWV1ZS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zZXRTb2NrZXRUaW1lb3V0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzY2FuU3RyZWFtKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2NhblN0cmVhbShcInNjYW5cIiwgeyBvcHRpb25zIH0pO1xuICAgIH1cbiAgICBzY2FuQnVmZmVyU3RyZWFtKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2NhblN0cmVhbShcInNjYW5CdWZmZXJcIiwgeyBvcHRpb25zIH0pO1xuICAgIH1cbiAgICBzc2NhblN0cmVhbShrZXksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2NhblN0cmVhbShcInNzY2FuXCIsIHsga2V5LCBvcHRpb25zIH0pO1xuICAgIH1cbiAgICBzc2NhbkJ1ZmZlclN0cmVhbShrZXksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2NhblN0cmVhbShcInNzY2FuQnVmZmVyXCIsIHsga2V5LCBvcHRpb25zIH0pO1xuICAgIH1cbiAgICBoc2NhblN0cmVhbShrZXksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2NhblN0cmVhbShcImhzY2FuXCIsIHsga2V5LCBvcHRpb25zIH0pO1xuICAgIH1cbiAgICBoc2NhbkJ1ZmZlclN0cmVhbShrZXksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2NhblN0cmVhbShcImhzY2FuQnVmZmVyXCIsIHsga2V5LCBvcHRpb25zIH0pO1xuICAgIH1cbiAgICB6c2NhblN0cmVhbShrZXksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2NhblN0cmVhbShcInpzY2FuXCIsIHsga2V5LCBvcHRpb25zIH0pO1xuICAgIH1cbiAgICB6c2NhbkJ1ZmZlclN0cmVhbShrZXksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2NhblN0cmVhbShcInpzY2FuQnVmZmVyXCIsIHsga2V5LCBvcHRpb25zIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbWl0IG9ubHkgd2hlbiB0aGVyZSdzIGF0IGxlYXN0IG9uZSBsaXN0ZW5lci5cbiAgICAgKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICBzaWxlbnRFbWl0KGV2ZW50TmFtZSwgYXJnKSB7XG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICBlcnJvciA9IGFyZztcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gXCJlbmRcIikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1hbnVhbGx5Q2xvc2luZykge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBjb25uZWN0aW9uIHJlbGF0ZWQgZXJyb3JzIHdoZW4gbWFudWFsbHkgZGlzY29ubmVjdGluZ1xuICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICAgICAgICAgICAgICAgIChlcnJvci5tZXNzYWdlID09PSB1dGlsc18xLkNPTk5FQ1RJT05fQ0xPU0VEX0VSUk9SX01TRyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Iuc3lzY2FsbCA9PT0gXCJjb25uZWN0XCIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLnN5c2NhbGwgPT09IFwicmVhZFwiKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVycyhldmVudE5hbWUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIltpb3JlZGlzXSBVbmhhbmRsZWQgZXJyb3IgZXZlbnQ6XCIsIGVycm9yLnN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICByZWNvdmVyRnJvbUZhdGFsRXJyb3IoX2NvbW1hbmRFcnJvciwgZXJyLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZmx1c2hRdWV1ZShlcnIsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnNpbGVudEVtaXQoXCJlcnJvclwiLCBlcnIpO1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3QodHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICBoYW5kbGVSZWNvbm5lY3Rpb24oZXJyLCBpdGVtKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgbGV0IG5lZWRSZWNvbm5lY3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWNvbm5lY3RPbkVycm9yKSB7XG4gICAgICAgICAgICBuZWVkUmVjb25uZWN0ID0gdGhpcy5vcHRpb25zLnJlY29ubmVjdE9uRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKG5lZWRSZWNvbm5lY3QpIHtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNhc2UgdHJ1ZTpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgIT09IFwicmVjb25uZWN0aW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0KHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtLmNvbW1hbmQucmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzICE9PSBcInJlY29ubmVjdGluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSB0aGlzLmNvbmRpdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNlbGVjdCkgIT09IGl0ZW0uc2VsZWN0ICYmXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY29tbWFuZC5uYW1lICE9PSBcInNlbGVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KGl0ZW0uc2VsZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRDb21tYW5kKGl0ZW0uY29tbWFuZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGl0ZW0uY29tbWFuZC5yZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgZGVzY3JpcHRpb24gb2YgdGhlIGNvbm5lY3Rpb24uIFVzZWQgZm9yIGRlYnVnZ2luZy5cbiAgICAgKi9cbiAgICBfZ2V0RGVzY3JpcHRpb24oKSB7XG4gICAgICAgIGxldCBkZXNjcmlwdGlvbjtcbiAgICAgICAgaWYgKFwicGF0aFwiIGluIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGF0aCkge1xuICAgICAgICAgICAgZGVzY3JpcHRpb24gPSB0aGlzLm9wdGlvbnMucGF0aDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnN0cmVhbSAmJlxuICAgICAgICAgICAgdGhpcy5zdHJlYW0ucmVtb3RlQWRkcmVzcyAmJlxuICAgICAgICAgICAgdGhpcy5zdHJlYW0ucmVtb3RlUG9ydCkge1xuICAgICAgICAgICAgZGVzY3JpcHRpb24gPSB0aGlzLnN0cmVhbS5yZW1vdGVBZGRyZXNzICsgXCI6XCIgKyB0aGlzLnN0cmVhbS5yZW1vdGVQb3J0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFwiaG9zdFwiIGluIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaG9zdCkge1xuICAgICAgICAgICAgZGVzY3JpcHRpb24gPSB0aGlzLm9wdGlvbnMuaG9zdCArIFwiOlwiICsgdGhpcy5vcHRpb25zLnBvcnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBVbmV4cGVjdGVkXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb25uZWN0aW9uTmFtZSkge1xuICAgICAgICAgICAgZGVzY3JpcHRpb24gKz0gYCAoJHt0aGlzLm9wdGlvbnMuY29ubmVjdGlvbk5hbWV9KWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uO1xuICAgIH1cbiAgICByZXNldENvbW1hbmRRdWV1ZSgpIHtcbiAgICAgICAgdGhpcy5jb21tYW5kUXVldWUgPSBuZXcgRGVxdWUoKTtcbiAgICB9XG4gICAgcmVzZXRPZmZsaW5lUXVldWUoKSB7XG4gICAgICAgIHRoaXMub2ZmbGluZVF1ZXVlID0gbmV3IERlcXVlKCk7XG4gICAgfVxuICAgIHBhcnNlT3B0aW9ucyguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICAgICAgbGV0IGlzVGxzID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgY29uc3QgYXJnID0gYXJnc1tpXTtcbiAgICAgICAgICAgIGlmIChhcmcgPT09IG51bGwgfHwgdHlwZW9mIGFyZyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAoMCwgbG9kYXNoXzEuZGVmYXVsdHMpKG9wdGlvbnMsIGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgKDAsIGxvZGFzaF8xLmRlZmF1bHRzKShvcHRpb25zLCAoMCwgdXRpbHNfMS5wYXJzZVVSTCkoYXJnKSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZy5zdGFydHNXaXRoKFwicmVkaXNzOi8vXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzVGxzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgYXJnID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5wb3J0ID0gYXJnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudCBcIiArIGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVGxzKSB7XG4gICAgICAgICAgICAoMCwgbG9kYXNoXzEuZGVmYXVsdHMpKG9wdGlvbnMsIHsgdGxzOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgICgwLCBsb2Rhc2hfMS5kZWZhdWx0cykob3B0aW9ucywgUmVkaXMuZGVmYXVsdE9wdGlvbnMpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucG9ydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgb3B0aW9ucy5wb3J0ID0gcGFyc2VJbnQob3B0aW9ucy5wb3J0LCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmRiID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBvcHRpb25zLmRiID0gcGFyc2VJbnQob3B0aW9ucy5kYiwgMTApO1xuICAgICAgICB9XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgdGhpcy5vcHRpb25zID0gKDAsIHV0aWxzXzEucmVzb2x2ZVRMU1Byb2ZpbGUpKG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgaW5zdGFuY2UncyBzdGF0dXNcbiAgICAgKi9cbiAgICBzZXRTdGF0dXMoc3RhdHVzLCBhcmcpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBpZiAoZGVidWcuZW5hYmxlZCkge1xuICAgICAgICAgICAgZGVidWcoXCJzdGF0dXNbJXNdOiAlcyAtPiAlc1wiLCB0aGlzLl9nZXREZXNjcmlwdGlvbigpLCB0aGlzLnN0YXR1cyB8fCBcIltlbXB0eV1cIiwgc3RhdHVzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayh0aGlzLmVtaXQuYmluZCh0aGlzLCBzdGF0dXMsIGFyZykpO1xuICAgIH1cbiAgICBjcmVhdGVTY2FuU3RyZWFtKGNvbW1hbmQsIHsga2V5LCBvcHRpb25zID0ge30gfSkge1xuICAgICAgICByZXR1cm4gbmV3IFNjYW5TdHJlYW1fMS5kZWZhdWx0KHtcbiAgICAgICAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIHJlZGlzOiB0aGlzLFxuICAgICAgICAgICAgY29tbWFuZDogY29tbWFuZCxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGbHVzaCBvZmZsaW5lIHF1ZXVlIGFuZCBjb21tYW5kIHF1ZXVlIHdpdGggZXJyb3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXJyb3IgVGhlIGVycm9yIG9iamVjdCB0byBzZW5kIHRvIHRoZSBjb21tYW5kc1xuICAgICAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbnNcbiAgICAgKi9cbiAgICBmbHVzaFF1ZXVlKGVycm9yLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSAoMCwgbG9kYXNoXzEuZGVmYXVsdHMpKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBvZmZsaW5lUXVldWU6IHRydWUsXG4gICAgICAgICAgICBjb21tYW5kUXVldWU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgaXRlbTtcbiAgICAgICAgaWYgKG9wdGlvbnMub2ZmbGluZVF1ZXVlKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGl0ZW0gPSB0aGlzLm9mZmxpbmVRdWV1ZS5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGl0ZW0uY29tbWFuZC5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmNvbW1hbmRRdWV1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29tbWFuZFF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0ucmVtb3ZlQWxsTGlzdGVuZXJzKFwiZGF0YVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2hpbGUgKChpdGVtID0gdGhpcy5jb21tYW5kUXVldWUuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jb21tYW5kLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrIHdoZXRoZXIgUmVkaXMgaGFzIGZpbmlzaGVkIGxvYWRpbmcgdGhlIHBlcnNpc3RlbnQgZGF0YSBhbmQgaXMgYWJsZSB0b1xuICAgICAqIHByb2Nlc3MgY29tbWFuZHMuXG4gICAgICovXG4gICAgX3JlYWR5Q2hlY2soY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmluZm8oZnVuY3Rpb24gKGVyciwgcmVzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKFwiTk9QRVJNXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgU2tpcHBpbmcgdGhlIHJlYWR5IGNoZWNrIGJlY2F1c2UgSU5GTyBjb21tYW5kIGZhaWxzOiBcIiR7ZXJyLm1lc3NhZ2V9XCIuIFlvdSBjYW4gZGlzYWJsZSByZWFkeSBjaGVjayB3aXRoIFwiZW5hYmxlUmVhZHlDaGVja1wiLiBNb3JlOiBodHRwczovL2dpdGh1Yi5jb20vbHVpbi9pb3JlZGlzL3dpa2kvRGlzYWJsZS1yZWFkeS1jaGVjay5gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHt9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCByZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW5mbyA9IHt9O1xuICAgICAgICAgICAgY29uc3QgbGluZXMgPSByZXMuc3BsaXQoXCJcXHJcXG5cIik7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW2ZpZWxkTmFtZSwgLi4uZmllbGRWYWx1ZVBhcnRzXSA9IGxpbmVzW2ldLnNwbGl0KFwiOlwiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gZmllbGRWYWx1ZVBhcnRzLmpvaW4oXCI6XCIpO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGluZm9bZmllbGROYW1lXSA9IGZpZWxkVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpbmZvLmxvYWRpbmcgfHwgaW5mby5sb2FkaW5nID09PSBcIjBcIikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGluZm8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9hZGluZ0V0YU1zID0gKGluZm8ubG9hZGluZ19ldGFfc2Vjb25kcyB8fCAxKSAqIDEwMDA7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV0cnlUaW1lID0gX3RoaXMub3B0aW9ucy5tYXhMb2FkaW5nUmV0cnlUaW1lICYmXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLm9wdGlvbnMubWF4TG9hZGluZ1JldHJ5VGltZSA8IGxvYWRpbmdFdGFNc1xuICAgICAgICAgICAgICAgICAgICA/IF90aGlzLm9wdGlvbnMubWF4TG9hZGluZ1JldHJ5VGltZVxuICAgICAgICAgICAgICAgICAgICA6IGxvYWRpbmdFdGFNcztcbiAgICAgICAgICAgICAgICBkZWJ1ZyhcIlJlZGlzIHNlcnZlciBzdGlsbCBsb2FkaW5nLCB0cnlpbmcgYWdhaW4gaW4gXCIgKyByZXRyeVRpbWUgKyBcIm1zXCIpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcmVhZHlDaGVjayhjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSwgcmV0cnlUaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2gobG9kYXNoXzEubm9vcCk7XG4gICAgfVxufVxuUmVkaXMuQ2x1c3RlciA9IGNsdXN0ZXJfMS5kZWZhdWx0O1xuUmVkaXMuQ29tbWFuZCA9IENvbW1hbmRfMS5kZWZhdWx0O1xuLyoqXG4gKiBEZWZhdWx0IG9wdGlvbnNcbiAqL1xuUmVkaXMuZGVmYXVsdE9wdGlvbnMgPSBSZWRpc09wdGlvbnNfMS5ERUZBVUxUX1JFRElTX09QVElPTlM7XG4oMCwgYXBwbHlNaXhpbl8xLmRlZmF1bHQpKFJlZGlzLCBldmVudHNfMS5FdmVudEVtaXR0ZXIpO1xuKDAsIHRyYW5zYWN0aW9uXzEuYWRkVHJhbnNhY3Rpb25TdXBwb3J0KShSZWRpcy5wcm90b3R5cGUpO1xuZXhwb3J0cy5kZWZhdWx0ID0gUmVkaXM7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/Redis.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/ScanStream.js":
/*!**************************************************!*\
!*** ./node_modules/ioredis/built/ScanStream.js ***!
\**************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst stream_1 = __webpack_require__(/*! stream */ \"stream\");\n/**\n * Convenient class to convert the process of scanning keys to a readable stream.\n */\nclass ScanStream extends stream_1.Readable {\n constructor(opt) {\n super(opt);\n this.opt = opt;\n this._redisCursor = \"0\";\n this._redisDrained = false;\n }\n _read() {\n if (this._redisDrained) {\n this.push(null);\n return;\n }\n const args = [this._redisCursor];\n if (this.opt.key) {\n args.unshift(this.opt.key);\n }\n if (this.opt.match) {\n args.push(\"MATCH\", this.opt.match);\n }\n if (this.opt.type) {\n args.push(\"TYPE\", this.opt.type);\n }\n if (this.opt.count) {\n args.push(\"COUNT\", String(this.opt.count));\n }\n if (this.opt.noValues) {\n args.push(\"NOVALUES\");\n }\n this.opt.redis[this.opt.command](args, (err, res) => {\n if (err) {\n this.emit(\"error\", err);\n return;\n }\n this._redisCursor = res[0] instanceof Buffer ? res[0].toString() : res[0];\n if (this._redisCursor === \"0\") {\n this._redisDrained = true;\n }\n this.push(res[1]);\n });\n }\n close() {\n this._redisDrained = true;\n }\n}\nexports[\"default\"] = ScanStream;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L1NjYW5TdHJlYW0uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsaUJBQWlCLG1CQUFPLENBQUMsc0JBQVE7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWUiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvU2NhblN0cmVhbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHN0cmVhbV8xID0gcmVxdWlyZShcInN0cmVhbVwiKTtcbi8qKlxuICogQ29udmVuaWVudCBjbGFzcyB0byBjb252ZXJ0IHRoZSBwcm9jZXNzIG9mIHNjYW5uaW5nIGtleXMgdG8gYSByZWFkYWJsZSBzdHJlYW0uXG4gKi9cbmNsYXNzIFNjYW5TdHJlYW0gZXh0ZW5kcyBzdHJlYW1fMS5SZWFkYWJsZSB7XG4gICAgY29uc3RydWN0b3Iob3B0KSB7XG4gICAgICAgIHN1cGVyKG9wdCk7XG4gICAgICAgIHRoaXMub3B0ID0gb3B0O1xuICAgICAgICB0aGlzLl9yZWRpc0N1cnNvciA9IFwiMFwiO1xuICAgICAgICB0aGlzLl9yZWRpc0RyYWluZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgX3JlYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9yZWRpc0RyYWluZWQpIHtcbiAgICAgICAgICAgIHRoaXMucHVzaChudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcmdzID0gW3RoaXMuX3JlZGlzQ3Vyc29yXTtcbiAgICAgICAgaWYgKHRoaXMub3B0LmtleSkge1xuICAgICAgICAgICAgYXJncy51bnNoaWZ0KHRoaXMub3B0LmtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0Lm1hdGNoKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goXCJNQVRDSFwiLCB0aGlzLm9wdC5tYXRjaCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0LnR5cGUpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChcIlRZUEVcIiwgdGhpcy5vcHQudHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0LmNvdW50KSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goXCJDT1VOVFwiLCBTdHJpbmcodGhpcy5vcHQuY291bnQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHQubm9WYWx1ZXMpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChcIk5PVkFMVUVTXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3B0LnJlZGlzW3RoaXMub3B0LmNvbW1hbmRdKGFyZ3MsIChlcnIsIHJlcykgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVkaXNDdXJzb3IgPSByZXNbMF0gaW5zdGFuY2VvZiBCdWZmZXIgPyByZXNbMF0udG9TdHJpbmcoKSA6IHJlc1swXTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yZWRpc0N1cnNvciA9PT0gXCIwXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWRpc0RyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wdXNoKHJlc1sxXSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgdGhpcy5fcmVkaXNEcmFpbmVkID0gdHJ1ZTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTY2FuU3RyZWFtO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/ScanStream.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/Script.js":
/*!**********************************************!*\
!*** ./node_modules/ioredis/built/Script.js ***!
\**********************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst crypto_1 = __webpack_require__(/*! crypto */ \"crypto\");\nconst Command_1 = __webpack_require__(/*! ./Command */ \"(action-browser)/./node_modules/ioredis/built/Command.js\");\nconst standard_as_callback_1 = __webpack_require__(/*! standard-as-callback */ \"(action-browser)/./node_modules/standard-as-callback/built/index.js\");\nclass Script {\n constructor(lua, numberOfKeys = null, keyPrefix = \"\", readOnly = false) {\n this.lua = lua;\n this.numberOfKeys = numberOfKeys;\n this.keyPrefix = keyPrefix;\n this.readOnly = readOnly;\n this.sha = (0, crypto_1.createHash)(\"sha1\").update(lua).digest(\"hex\");\n const sha = this.sha;\n const socketHasScriptLoaded = new WeakSet();\n this.Command = class CustomScriptCommand extends Command_1.default {\n toWritable(socket) {\n const origReject = this.reject;\n this.reject = (err) => {\n if (err.message.indexOf(\"NOSCRIPT\") !== -1) {\n socketHasScriptLoaded.delete(socket);\n }\n origReject.call(this, err);\n };\n if (!socketHasScriptLoaded.has(socket)) {\n socketHasScriptLoaded.add(socket);\n this.name = \"eval\";\n this.args[0] = lua;\n }\n else if (this.name === \"eval\") {\n this.name = \"evalsha\";\n this.args[0] = sha;\n }\n return super.toWritable(socket);\n }\n };\n }\n execute(container, args, options, callback) {\n if (typeof this.numberOfKeys === \"number\") {\n args.unshift(this.numberOfKeys);\n }\n if (this.keyPrefix) {\n options.keyPrefix = this.keyPrefix;\n }\n if (this.readOnly) {\n options.readOnly = true;\n }\n const evalsha = new this.Command(\"evalsha\", [this.sha, ...args], options);\n evalsha.promise = evalsha.promise.catch((err) => {\n if (err.message.indexOf(\"NOSCRIPT\") === -1) {\n throw err;\n }\n // Resend the same custom evalsha command that gets transformed\n // to an eval in case it's not loaded yet on the connection.\n const resend = new this.Command(\"evalsha\", [this.sha, ...args], options);\n const client = container.isPipeline ? container.redis : container;\n return client.sendCommand(resend);\n });\n (0, standard_as_callback_1.default)(evalsha.promise, callback);\n return container.sendCommand(evalsha);\n }\n}\nexports[\"default\"] = Script;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L1NjcmlwdC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxpQkFBaUIsbUJBQU8sQ0FBQyxzQkFBUTtBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQywyRUFBVztBQUNyQywrQkFBK0IsbUJBQU8sQ0FBQyxpR0FBc0I7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWUiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvU2NyaXB0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY3J5cHRvXzEgPSByZXF1aXJlKFwiY3J5cHRvXCIpO1xuY29uc3QgQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vQ29tbWFuZFwiKTtcbmNvbnN0IHN0YW5kYXJkX2FzX2NhbGxiYWNrXzEgPSByZXF1aXJlKFwic3RhbmRhcmQtYXMtY2FsbGJhY2tcIik7XG5jbGFzcyBTY3JpcHQge1xuICAgIGNvbnN0cnVjdG9yKGx1YSwgbnVtYmVyT2ZLZXlzID0gbnVsbCwga2V5UHJlZml4ID0gXCJcIiwgcmVhZE9ubHkgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLmx1YSA9IGx1YTtcbiAgICAgICAgdGhpcy5udW1iZXJPZktleXMgPSBudW1iZXJPZktleXM7XG4gICAgICAgIHRoaXMua2V5UHJlZml4ID0ga2V5UHJlZml4O1xuICAgICAgICB0aGlzLnJlYWRPbmx5ID0gcmVhZE9ubHk7XG4gICAgICAgIHRoaXMuc2hhID0gKDAsIGNyeXB0b18xLmNyZWF0ZUhhc2gpKFwic2hhMVwiKS51cGRhdGUobHVhKS5kaWdlc3QoXCJoZXhcIik7XG4gICAgICAgIGNvbnN0IHNoYSA9IHRoaXMuc2hhO1xuICAgICAgICBjb25zdCBzb2NrZXRIYXNTY3JpcHRMb2FkZWQgPSBuZXcgV2Vha1NldCgpO1xuICAgICAgICB0aGlzLkNvbW1hbmQgPSBjbGFzcyBDdXN0b21TY3JpcHRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZF8xLmRlZmF1bHQge1xuICAgICAgICAgICAgdG9Xcml0YWJsZShzb2NrZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnUmVqZWN0ID0gdGhpcy5yZWplY3Q7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWplY3QgPSAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZS5pbmRleE9mKFwiTk9TQ1JJUFRcIikgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXRIYXNTY3JpcHRMb2FkZWQuZGVsZXRlKHNvY2tldCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb3JpZ1JlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoIXNvY2tldEhhc1NjcmlwdExvYWRlZC5oYXMoc29ja2V0KSkge1xuICAgICAgICAgICAgICAgICAgICBzb2NrZXRIYXNTY3JpcHRMb2FkZWQuYWRkKHNvY2tldCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9IFwiZXZhbFwiO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFyZ3NbMF0gPSBsdWE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubmFtZSA9PT0gXCJldmFsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gXCJldmFsc2hhXCI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJnc1swXSA9IHNoYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnRvV3JpdGFibGUoc29ja2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgZXhlY3V0ZShjb250YWluZXIsIGFyZ3MsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5udW1iZXJPZktleXMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGFyZ3MudW5zaGlmdCh0aGlzLm51bWJlck9mS2V5cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMua2V5UHJlZml4KSB7XG4gICAgICAgICAgICBvcHRpb25zLmtleVByZWZpeCA9IHRoaXMua2V5UHJlZml4O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICBvcHRpb25zLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmFsc2hhID0gbmV3IHRoaXMuQ29tbWFuZChcImV2YWxzaGFcIiwgW3RoaXMuc2hhLCAuLi5hcmdzXSwgb3B0aW9ucyk7XG4gICAgICAgIGV2YWxzaGEucHJvbWlzZSA9IGV2YWxzaGEucHJvbWlzZS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5kZXhPZihcIk5PU0NSSVBUXCIpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlc2VuZCB0aGUgc2FtZSBjdXN0b20gZXZhbHNoYSBjb21tYW5kIHRoYXQgZ2V0cyB0cmFuc2Zvcm1lZFxuICAgICAgICAgICAgLy8gdG8gYW4gZXZhbCBpbiBjYXNlIGl0J3Mgbm90IGxvYWRlZCB5ZXQgb24gdGhlIGNvbm5lY3Rpb24uXG4gICAgICAgICAgICBjb25zdCByZXNlbmQgPSBuZXcgdGhpcy5Db21tYW5kKFwiZXZhbHNoYVwiLCBbdGhpcy5zaGEsIC4uLmFyZ3NdLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGNsaWVudCA9IGNvbnRhaW5lci5pc1BpcGVsaW5lID8gY29udGFpbmVyLnJlZGlzIDogY29udGFpbmVyO1xuICAgICAgICAgICAgcmV0dXJuIGNsaWVudC5zZW5kQ29tbWFuZChyZXNlbmQpO1xuICAgICAgICB9KTtcbiAgICAgICAgKDAsIHN0YW5kYXJkX2FzX2NhbGxiYWNrXzEuZGVmYXVsdCkoZXZhbHNoYS5wcm9taXNlLCBjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiBjb250YWluZXIuc2VuZENvbW1hbmQoZXZhbHNoYSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gU2NyaXB0O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/Script.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/SubscriptionSet.js":
/*!*******************************************************!*\
!*** ./node_modules/ioredis/built/SubscriptionSet.js ***!
\*******************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n/**\n * Tiny class to simplify dealing with subscription set\n */\nclass SubscriptionSet {\n constructor() {\n this.set = {\n subscribe: {},\n psubscribe: {},\n ssubscribe: {},\n };\n }\n add(set, channel) {\n this.set[mapSet(set)][channel] = true;\n }\n del(set, channel) {\n delete this.set[mapSet(set)][channel];\n }\n channels(set) {\n return Object.keys(this.set[mapSet(set)]);\n }\n isEmpty() {\n return (this.channels(\"subscribe\").length === 0 &&\n this.channels(\"psubscribe\").length === 0 &&\n this.channels(\"ssubscribe\").length === 0);\n }\n}\nexports[\"default\"] = SubscriptionSet;\nfunction mapSet(set) {\n if (set === \"unsubscribe\") {\n return \"subscribe\";\n }\n if (set === \"punsubscribe\") {\n return \"psubscribe\";\n }\n if (set === \"sunsubscribe\") {\n return \"ssubscribe\";\n }\n return set;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L1N1YnNjcmlwdGlvblNldC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekIsMEJBQTBCO0FBQzFCLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvU3Vic2NyaXB0aW9uU2V0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqXG4gKiBUaW55IGNsYXNzIHRvIHNpbXBsaWZ5IGRlYWxpbmcgd2l0aCBzdWJzY3JpcHRpb24gc2V0XG4gKi9cbmNsYXNzIFN1YnNjcmlwdGlvblNldCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc2V0ID0ge1xuICAgICAgICAgICAgc3Vic2NyaWJlOiB7fSxcbiAgICAgICAgICAgIHBzdWJzY3JpYmU6IHt9LFxuICAgICAgICAgICAgc3N1YnNjcmliZToge30sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFkZChzZXQsIGNoYW5uZWwpIHtcbiAgICAgICAgdGhpcy5zZXRbbWFwU2V0KHNldCldW2NoYW5uZWxdID0gdHJ1ZTtcbiAgICB9XG4gICAgZGVsKHNldCwgY2hhbm5lbCkge1xuICAgICAgICBkZWxldGUgdGhpcy5zZXRbbWFwU2V0KHNldCldW2NoYW5uZWxdO1xuICAgIH1cbiAgICBjaGFubmVscyhzZXQpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0W21hcFNldChzZXQpXSk7XG4gICAgfVxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5jaGFubmVscyhcInN1YnNjcmliZVwiKS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHMoXCJwc3Vic2NyaWJlXCIpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5jaGFubmVscyhcInNzdWJzY3JpYmVcIikubGVuZ3RoID09PSAwKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTdWJzY3JpcHRpb25TZXQ7XG5mdW5jdGlvbiBtYXBTZXQoc2V0KSB7XG4gICAgaWYgKHNldCA9PT0gXCJ1bnN1YnNjcmliZVwiKSB7XG4gICAgICAgIHJldHVybiBcInN1YnNjcmliZVwiO1xuICAgIH1cbiAgICBpZiAoc2V0ID09PSBcInB1bnN1YnNjcmliZVwiKSB7XG4gICAgICAgIHJldHVybiBcInBzdWJzY3JpYmVcIjtcbiAgICB9XG4gICAgaWYgKHNldCA9PT0gXCJzdW5zdWJzY3JpYmVcIikge1xuICAgICAgICByZXR1cm4gXCJzc3Vic2NyaWJlXCI7XG4gICAgfVxuICAgIHJldHVybiBzZXQ7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/SubscriptionSet.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/autoPipelining.js":
/*!******************************************************!*\
!*** ./node_modules/ioredis/built/autoPipelining.js ***!
\******************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.executeWithAutoPipelining = exports.getFirstValueInFlattenedArray = exports.shouldUseAutoPipelining = exports.notAllowedAutoPipelineCommands = exports.kCallbacks = exports.kExec = void 0;\nconst lodash_1 = __webpack_require__(/*! ./utils/lodash */ \"(action-browser)/./node_modules/ioredis/built/utils/lodash.js\");\nconst calculateSlot = __webpack_require__(/*! cluster-key-slot */ \"(action-browser)/./node_modules/cluster-key-slot/lib/index.js\");\nconst standard_as_callback_1 = __webpack_require__(/*! standard-as-callback */ \"(action-browser)/./node_modules/standard-as-callback/built/index.js\");\nexports.kExec = Symbol(\"exec\");\nexports.kCallbacks = Symbol(\"callbacks\");\nexports.notAllowedAutoPipelineCommands = [\n \"auth\",\n \"info\",\n \"script\",\n \"quit\",\n \"cluster\",\n \"pipeline\",\n \"multi\",\n \"subscribe\",\n \"psubscribe\",\n \"unsubscribe\",\n \"unpsubscribe\",\n \"select\",\n];\nfunction executeAutoPipeline(client, slotKey) {\n /*\n If a pipeline is already executing, keep queueing up commands\n since ioredis won't serve two pipelines at the same time\n */\n if (client._runningAutoPipelines.has(slotKey)) {\n return;\n }\n if (!client._autoPipelines.has(slotKey)) {\n /*\n Rare edge case. Somehow, something has deleted this running autopipeline in an immediate\n call to executeAutoPipeline.\n \n Maybe the callback in the pipeline.exec is sometimes called in the same tick,\n e.g. if redis is disconnected?\n */\n return;\n }\n client._runningAutoPipelines.add(slotKey);\n // Get the pipeline and immediately delete it so that new commands are queued on a new pipeline\n const pipeline = client._autoPipelines.get(slotKey);\n client._autoPipelines.delete(slotKey);\n const callbacks = pipeline[exports.kCallbacks];\n // Stop keeping a reference to callbacks immediately after the callbacks stop being used.\n // This allows the GC to reclaim objects referenced by callbacks, especially with 16384 slots\n // in Redis.Cluster\n pipeline[exports.kCallbacks] = null;\n // Perform the call\n pipeline.exec(function (err, results) {\n client._runningAutoPipelines.delete(slotKey);\n /*\n Invoke all callback in nextTick so the stack is cleared\n and callbacks can throw errors without affecting other callbacks.\n */\n if (err) {\n for (let i = 0; i < callbacks.length; i++) {\n process.nextTick(callbacks[i], err);\n }\n }\n else {\n for (let i = 0; i < callbacks.length; i++) {\n process.nextTick(callbacks[i], ...results[i]);\n }\n }\n // If there is another pipeline on the same node, immediately execute it without waiting for nextTick\n if (client._autoPipelines.has(slotKey)) {\n executeAutoPipeline(client, slotKey);\n }\n });\n}\nfunction shouldUseAutoPipelining(client, functionName, commandName) {\n return (functionName &&\n client.options.enableAutoPipelining &&\n !client.isPipeline &&\n !exports.notAllowedAutoPipelineCommands.includes(commandName) &&\n !client.options.autoPipeliningIgnoredCommands.includes(commandName));\n}\nexports.shouldUseAutoPipelining = shouldUseAutoPipelining;\nfunction getFirstValueInFlattenedArray(args) {\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (typeof arg === \"string\") {\n return arg;\n }\n else if (Array.isArray(arg) || (0, lodash_1.isArguments)(arg)) {\n if (arg.length === 0) {\n continue;\n }\n return arg[0];\n }\n const flattened = [arg].flat();\n if (flattened.length > 0) {\n return flattened[0];\n }\n }\n return undefined;\n}\nexports.getFirstValueInFlattenedArray = getFirstValueInFlattenedArray;\nfunction executeWithAutoPipelining(client, functionName, commandName, args, callback) {\n // On cluster mode let's wait for slots to be available\n if (client.isCluster && !client.slots.length) {\n if (client.status === \"wait\")\n client.connect().catch(lodash_1.noop);\n return (0, standard_as_callback_1.default)(new Promise(function (resolve, reject) {\n client.delayUntilReady((err) => {\n if (err) {\n reject(err);\n return;\n }\n executeWithAutoPipelining(client, functionName, commandName, args, null).then(resolve, reject);\n });\n }), callback);\n }\n // If we have slot information, we can improve routing by grouping slots served by the same subset of nodes\n // Note that the first value in args may be a (possibly empty) array.\n // ioredis will only flatten one level of the array, in the Command constructor.\n const prefix = client.options.keyPrefix || \"\";\n const slotKey = client.isCluster\n ? client.slots[calculateSlot(`${prefix}${getFirstValueInFlattenedArray(args)}`)].join(\",\")\n : \"main\";\n if (!client._autoPipelines.has(slotKey)) {\n const pipeline = client.pipeline();\n pipeline[exports.kExec] = false;\n pipeline[exports.kCallbacks] = [];\n client._autoPipelines.set(slotKey, pipeline);\n }\n const pipeline = client._autoPipelines.get(slotKey);\n /*\n Mark the pipeline as scheduled.\n The symbol will make sure that the pipeline is only scheduled once per tick.\n New commands are appended to an already scheduled pipeline.\n */\n if (!pipeline[exports.kExec]) {\n pipeline[exports.kExec] = true;\n /*\n Deferring with setImmediate so we have a chance to capture multiple\n commands that can be scheduled by I/O events already in the event loop queue.\n */\n setImmediate(executeAutoPipeline, client, slotKey);\n }\n // Create the promise which will execute the command in the pipeline.\n const autoPipelinePromise = new Promise(function (resolve, reject) {\n pipeline[exports.kCallbacks].push(function (err, value) {\n if (err) {\n reject(err);\n return;\n }\n resolve(value);\n });\n if (functionName === \"call\") {\n args.unshift(commandName);\n }\n pipeline[functionName](...args);\n });\n return (0, standard_as_callback_1.default)(autoPipelinePromise, callback);\n}\nexports.executeWithAutoPipelining = executeWithAutoPipelining;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2F1dG9QaXBlbGluaW5nLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGlDQUFpQyxHQUFHLHFDQUFxQyxHQUFHLCtCQUErQixHQUFHLHNDQUFzQyxHQUFHLGtCQUFrQixHQUFHLGFBQWE7QUFDekwsaUJBQWlCLG1CQUFPLENBQUMscUZBQWdCO0FBQ3pDLHNCQUFzQixtQkFBTyxDQUFDLHVGQUFrQjtBQUNoRCwrQkFBK0IsbUJBQU8sQ0FBQyxpR0FBc0I7QUFDN0QsYUFBYTtBQUNiLGtCQUFrQjtBQUNsQixzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHNCQUFzQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixzQkFBc0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxPQUFPLEVBQUUsb0NBQW9DO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLGlDQUFpQyIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9hdXRvUGlwZWxpbmluZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXhlY3V0ZVdpdGhBdXRvUGlwZWxpbmluZyA9IGV4cG9ydHMuZ2V0Rmlyc3RWYWx1ZUluRmxhdHRlbmVkQXJyYXkgPSBleHBvcnRzLnNob3VsZFVzZUF1dG9QaXBlbGluaW5nID0gZXhwb3J0cy5ub3RBbGxvd2VkQXV0b1BpcGVsaW5lQ29tbWFuZHMgPSBleHBvcnRzLmtDYWxsYmFja3MgPSBleHBvcnRzLmtFeGVjID0gdm9pZCAwO1xuY29uc3QgbG9kYXNoXzEgPSByZXF1aXJlKFwiLi91dGlscy9sb2Rhc2hcIik7XG5jb25zdCBjYWxjdWxhdGVTbG90ID0gcmVxdWlyZShcImNsdXN0ZXIta2V5LXNsb3RcIik7XG5jb25zdCBzdGFuZGFyZF9hc19jYWxsYmFja18xID0gcmVxdWlyZShcInN0YW5kYXJkLWFzLWNhbGxiYWNrXCIpO1xuZXhwb3J0cy5rRXhlYyA9IFN5bWJvbChcImV4ZWNcIik7XG5leHBvcnRzLmtDYWxsYmFja3MgPSBTeW1ib2woXCJjYWxsYmFja3NcIik7XG5leHBvcnRzLm5vdEFsbG93ZWRBdXRvUGlwZWxpbmVDb21tYW5kcyA9IFtcbiAgICBcImF1dGhcIixcbiAgICBcImluZm9cIixcbiAgICBcInNjcmlwdFwiLFxuICAgIFwicXVpdFwiLFxuICAgIFwiY2x1c3RlclwiLFxuICAgIFwicGlwZWxpbmVcIixcbiAgICBcIm11bHRpXCIsXG4gICAgXCJzdWJzY3JpYmVcIixcbiAgICBcInBzdWJzY3JpYmVcIixcbiAgICBcInVuc3Vic2NyaWJlXCIsXG4gICAgXCJ1bnBzdWJzY3JpYmVcIixcbiAgICBcInNlbGVjdFwiLFxuXTtcbmZ1bmN0aW9uIGV4ZWN1dGVBdXRvUGlwZWxpbmUoY2xpZW50LCBzbG90S2V5KSB7XG4gICAgLypcbiAgICAgIElmIGEgcGlwZWxpbmUgaXMgYWxyZWFkeSBleGVjdXRpbmcsIGtlZXAgcXVldWVpbmcgdXAgY29tbWFuZHNcbiAgICAgIHNpbmNlIGlvcmVkaXMgd29uJ3Qgc2VydmUgdHdvIHBpcGVsaW5lcyBhdCB0aGUgc2FtZSB0aW1lXG4gICAgKi9cbiAgICBpZiAoY2xpZW50Ll9ydW5uaW5nQXV0b1BpcGVsaW5lcy5oYXMoc2xvdEtleSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWNsaWVudC5fYXV0b1BpcGVsaW5lcy5oYXMoc2xvdEtleSkpIHtcbiAgICAgICAgLypcbiAgICAgICAgICBSYXJlIGVkZ2UgY2FzZS4gU29tZWhvdywgc29tZXRoaW5nIGhhcyBkZWxldGVkIHRoaXMgcnVubmluZyBhdXRvcGlwZWxpbmUgaW4gYW4gaW1tZWRpYXRlXG4gICAgICAgICAgY2FsbCB0byBleGVjdXRlQXV0b1BpcGVsaW5lLlxuICAgICAgICAgXG4gICAgICAgICAgTWF5YmUgdGhlIGNhbGxiYWNrIGluIHRoZSBwaXBlbGluZS5leGVjIGlzIHNvbWV0aW1lcyBjYWxsZWQgaW4gdGhlIHNhbWUgdGljayxcbiAgICAgICAgICBlLmcuIGlmIHJlZGlzIGlzIGRpc2Nvbm5lY3RlZD9cbiAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjbGllbnQuX3J1bm5pbmdBdXRvUGlwZWxpbmVzLmFkZChzbG90S2V5KTtcbiAgICAvLyBHZXQgdGhlIHBpcGVsaW5lIGFuZCBpbW1lZGlhdGVseSBkZWxldGUgaXQgc28gdGhhdCBuZXcgY29tbWFuZHMgYXJlIHF1ZXVlZCBvbiBhIG5ldyBwaXBlbGluZVxuICAgIGNvbnN0IHBpcGVsaW5lID0gY2xpZW50Ll9hdXRvUGlwZWxpbmVzLmdldChzbG90S2V5KTtcbiAgICBjbGllbnQuX2F1dG9QaXBlbGluZXMuZGVsZXRlKHNsb3RLZXkpO1xuICAgIGNvbnN0IGNhbGxiYWNrcyA9IHBpcGVsaW5lW2V4cG9ydHMua0NhbGxiYWNrc107XG4gICAgLy8gU3RvcCBrZWVwaW5nIGEgcmVmZXJlbmNlIHRvIGNhbGxiYWNrcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgY2FsbGJhY2tzIHN0b3AgYmVpbmcgdXNlZC5cbiAgICAvLyBUaGlzIGFsbG93cyB0aGUgR0MgdG8gcmVjbGFpbSBvYmplY3RzIHJlZmVyZW5jZWQgYnkgY2FsbGJhY2tzLCBlc3BlY2lhbGx5IHdpdGggMTYzODQgc2xvdHNcbiAgICAvLyBpbiBSZWRpcy5DbHVzdGVyXG4gICAgcGlwZWxpbmVbZXhwb3J0cy5rQ2FsbGJhY2tzXSA9IG51bGw7XG4gICAgLy8gUGVyZm9ybSB0aGUgY2FsbFxuICAgIHBpcGVsaW5lLmV4ZWMoZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICBjbGllbnQuX3J1bm5pbmdBdXRvUGlwZWxpbmVzLmRlbGV0ZShzbG90S2V5KTtcbiAgICAgICAgLypcbiAgICAgICAgICBJbnZva2UgYWxsIGNhbGxiYWNrIGluIG5leHRUaWNrIHNvIHRoZSBzdGFjayBpcyBjbGVhcmVkXG4gICAgICAgICAgYW5kIGNhbGxiYWNrcyBjYW4gdGhyb3cgZXJyb3JzIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGNhbGxiYWNrcy5cbiAgICAgICAgKi9cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrc1tpXSwgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFja3NbaV0sIC4uLnJlc3VsdHNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIGFub3RoZXIgcGlwZWxpbmUgb24gdGhlIHNhbWUgbm9kZSwgaW1tZWRpYXRlbHkgZXhlY3V0ZSBpdCB3aXRob3V0IHdhaXRpbmcgZm9yIG5leHRUaWNrXG4gICAgICAgIGlmIChjbGllbnQuX2F1dG9QaXBlbGluZXMuaGFzKHNsb3RLZXkpKSB7XG4gICAgICAgICAgICBleGVjdXRlQXV0b1BpcGVsaW5lKGNsaWVudCwgc2xvdEtleSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHNob3VsZFVzZUF1dG9QaXBlbGluaW5nKGNsaWVudCwgZnVuY3Rpb25OYW1lLCBjb21tYW5kTmFtZSkge1xuICAgIHJldHVybiAoZnVuY3Rpb25OYW1lICYmXG4gICAgICAgIGNsaWVudC5vcHRpb25zLmVuYWJsZUF1dG9QaXBlbGluaW5nICYmXG4gICAgICAgICFjbGllbnQuaXNQaXBlbGluZSAmJlxuICAgICAgICAhZXhwb3J0cy5ub3RBbGxvd2VkQXV0b1BpcGVsaW5lQ29tbWFuZHMuaW5jbHVkZXMoY29tbWFuZE5hbWUpICYmXG4gICAgICAgICFjbGllbnQub3B0aW9ucy5hdXRvUGlwZWxpbmluZ0lnbm9yZWRDb21tYW5kcy5pbmNsdWRlcyhjb21tYW5kTmFtZSkpO1xufVxuZXhwb3J0cy5zaG91bGRVc2VBdXRvUGlwZWxpbmluZyA9IHNob3VsZFVzZUF1dG9QaXBlbGluaW5nO1xuZnVuY3Rpb24gZ2V0Rmlyc3RWYWx1ZUluRmxhdHRlbmVkQXJyYXkoYXJncykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2ldO1xuICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykgfHwgKDAsIGxvZGFzaF8xLmlzQXJndW1lbnRzKShhcmcpKSB7XG4gICAgICAgICAgICBpZiAoYXJnLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFyZ1swXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbGF0dGVuZWQgPSBbYXJnXS5mbGF0KCk7XG4gICAgICAgIGlmIChmbGF0dGVuZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZsYXR0ZW5lZFswXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5nZXRGaXJzdFZhbHVlSW5GbGF0dGVuZWRBcnJheSA9IGdldEZpcnN0VmFsdWVJbkZsYXR0ZW5lZEFycmF5O1xuZnVuY3Rpb24gZXhlY3V0ZVdpdGhBdXRvUGlwZWxpbmluZyhjbGllbnQsIGZ1bmN0aW9uTmFtZSwgY29tbWFuZE5hbWUsIGFyZ3MsIGNhbGxiYWNrKSB7XG4gICAgLy8gT24gY2x1c3RlciBtb2RlIGxldCdzIHdhaXQgZm9yIHNsb3RzIHRvIGJlIGF2YWlsYWJsZVxuICAgIGlmIChjbGllbnQuaXNDbHVzdGVyICYmICFjbGllbnQuc2xvdHMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChjbGllbnQuc3RhdHVzID09PSBcIndhaXRcIilcbiAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KCkuY2F0Y2gobG9kYXNoXzEubm9vcCk7XG4gICAgICAgIHJldHVybiAoMCwgc3RhbmRhcmRfYXNfY2FsbGJhY2tfMS5kZWZhdWx0KShuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBjbGllbnQuZGVsYXlVbnRpbFJlYWR5KChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4ZWN1dGVXaXRoQXV0b1BpcGVsaW5pbmcoY2xpZW50LCBmdW5jdGlvbk5hbWUsIGNvbW1hbmROYW1lLCBhcmdzLCBudWxsKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSksIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgLy8gSWYgd2UgaGF2ZSBzbG90IGluZm9ybWF0aW9uLCB3ZSBjYW4gaW1wcm92ZSByb3V0aW5nIGJ5IGdyb3VwaW5nIHNsb3RzIHNlcnZlZCBieSB0aGUgc2FtZSBzdWJzZXQgb2Ygbm9kZXNcbiAgICAvLyBOb3RlIHRoYXQgdGhlIGZpcnN0IHZhbHVlIGluIGFyZ3MgbWF5IGJlIGEgKHBvc3NpYmx5IGVtcHR5KSBhcnJheS5cbiAgICAvLyBpb3JlZGlzIHdpbGwgb25seSBmbGF0dGVuIG9uZSBsZXZlbCBvZiB0aGUgYXJyYXksIGluIHRoZSBDb21tYW5kIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IHByZWZpeCA9IGNsaWVudC5vcHRpb25zLmtleVByZWZpeCB8fCBcIlwiO1xuICAgIGNvbnN0IHNsb3RLZXkgPSBjbGllbnQuaXNDbHVzdGVyXG4gICAgICAgID8gY2xpZW50LnNsb3RzW2NhbGN1bGF0ZVNsb3QoYCR7cHJlZml4fSR7Z2V0Rmlyc3RWYWx1ZUluRmxhdHRlbmVkQXJyYXkoYXJncyl9YCldLmpvaW4oXCIsXCIpXG4gICAgICAgIDogXCJtYWluXCI7XG4gICAgaWYgKCFjbGllbnQuX2F1dG9QaXBlbGluZXMuaGFzKHNsb3RLZXkpKSB7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lID0gY2xpZW50LnBpcGVsaW5lKCk7XG4gICAgICAgIHBpcGVsaW5lW2V4cG9ydHMua0V4ZWNdID0gZmFsc2U7XG4gICAgICAgIHBpcGVsaW5lW2V4cG9ydHMua0NhbGxiYWNrc10gPSBbXTtcbiAgICAgICAgY2xpZW50Ll9hdXRvUGlwZWxpbmVzLnNldChzbG90S2V5LCBwaXBlbGluZSk7XG4gICAgfVxuICAgIGNvbnN0IHBpcGVsaW5lID0gY2xpZW50Ll9hdXRvUGlwZWxpbmVzLmdldChzbG90S2V5KTtcbiAgICAvKlxuICAgICAgTWFyayB0aGUgcGlwZWxpbmUgYXMgc2NoZWR1bGVkLlxuICAgICAgVGhlIHN5bWJvbCB3aWxsIG1ha2Ugc3VyZSB0aGF0IHRoZSBwaXBlbGluZSBpcyBvbmx5IHNjaGVkdWxlZCBvbmNlIHBlciB0aWNrLlxuICAgICAgTmV3IGNvbW1hbmRzIGFyZSBhcHBlbmRlZCB0byBhbiBhbHJlYWR5IHNjaGVkdWxlZCBwaXBlbGluZS5cbiAgICAqL1xuICAgIGlmICghcGlwZWxpbmVbZXhwb3J0cy5rRXhlY10pIHtcbiAgICAgICAgcGlwZWxpbmVbZXhwb3J0cy5rRXhlY10gPSB0cnVlO1xuICAgICAgICAvKlxuICAgICAgICAgIERlZmVycmluZyB3aXRoIHNldEltbWVkaWF0ZSBzbyB3ZSBoYXZlIGEgY2hhbmNlIHRvIGNhcHR1cmUgbXVsdGlwbGVcbiAgICAgICAgICBjb21tYW5kcyB0aGF0IGNhbiBiZSBzY2hlZHVsZWQgYnkgSS9PIGV2ZW50cyBhbHJlYWR5IGluIHRoZSBldmVudCBsb29wIHF1ZXVlLlxuICAgICAgICAqL1xuICAgICAgICBzZXRJbW1lZGlhdGUoZXhlY3V0ZUF1dG9QaXBlbGluZSwgY2xpZW50LCBzbG90S2V5KTtcbiAgICB9XG4gICAgLy8gQ3JlYXRlIHRoZSBwcm9taXNlIHdoaWNoIHdpbGwgZXhlY3V0ZSB0aGUgY29tbWFuZCBpbiB0aGUgcGlwZWxpbmUuXG4gICAgY29uc3QgYXV0b1BpcGVsaW5lUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgcGlwZWxpbmVbZXhwb3J0cy5rQ2FsbGJhY2tzXS5wdXNoKGZ1bmN0aW9uIChlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZnVuY3Rpb25OYW1lID09PSBcImNhbGxcIikge1xuICAgICAgICAgICAgYXJncy51bnNoaWZ0KGNvbW1hbmROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBwaXBlbGluZVtmdW5jdGlvbk5hbWVdKC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHJldHVybiAoMCwgc3RhbmRhcmRfYXNfY2FsbGJhY2tfMS5kZWZhdWx0KShhdXRvUGlwZWxpbmVQcm9taXNlLCBjYWxsYmFjayk7XG59XG5leHBvcnRzLmV4ZWN1dGVXaXRoQXV0b1BpcGVsaW5pbmcgPSBleGVjdXRlV2l0aEF1dG9QaXBlbGluaW5nO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/autoPipelining.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/cluster/ClusterOptions.js":
/*!**************************************************************!*\
!*** ./node_modules/ioredis/built/cluster/ClusterOptions.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.DEFAULT_CLUSTER_OPTIONS = void 0;\nconst dns_1 = __webpack_require__(/*! dns */ \"dns\");\nexports.DEFAULT_CLUSTER_OPTIONS = {\n clusterRetryStrategy: (times) => Math.min(100 + times * 2, 2000),\n enableOfflineQueue: true,\n enableReadyCheck: true,\n scaleReads: \"master\",\n maxRedirections: 16,\n retryDelayOnMoved: 0,\n retryDelayOnFailover: 100,\n retryDelayOnClusterDown: 100,\n retryDelayOnTryAgain: 100,\n slotsRefreshTimeout: 1000,\n useSRVRecords: false,\n resolveSrv: dns_1.resolveSrv,\n dnsLookup: dns_1.lookup,\n enableAutoPipelining: false,\n autoPipeliningIgnoredCommands: [],\n shardedSubscribers: false,\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2NsdXN0ZXIvQ2x1c3Rlck9wdGlvbnMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsK0JBQStCO0FBQy9CLGNBQWMsbUJBQU8sQ0FBQyxnQkFBSztBQUMzQiwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jbHVzdGVyL0NsdXN0ZXJPcHRpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ERUZBVUxUX0NMVVNURVJfT1BUSU9OUyA9IHZvaWQgMDtcbmNvbnN0IGRuc18xID0gcmVxdWlyZShcImRuc1wiKTtcbmV4cG9ydHMuREVGQVVMVF9DTFVTVEVSX09QVElPTlMgPSB7XG4gICAgY2x1c3RlclJldHJ5U3RyYXRlZ3k6ICh0aW1lcykgPT4gTWF0aC5taW4oMTAwICsgdGltZXMgKiAyLCAyMDAwKSxcbiAgICBlbmFibGVPZmZsaW5lUXVldWU6IHRydWUsXG4gICAgZW5hYmxlUmVhZHlDaGVjazogdHJ1ZSxcbiAgICBzY2FsZVJlYWRzOiBcIm1hc3RlclwiLFxuICAgIG1heFJlZGlyZWN0aW9uczogMTYsXG4gICAgcmV0cnlEZWxheU9uTW92ZWQ6IDAsXG4gICAgcmV0cnlEZWxheU9uRmFpbG92ZXI6IDEwMCxcbiAgICByZXRyeURlbGF5T25DbHVzdGVyRG93bjogMTAwLFxuICAgIHJldHJ5RGVsYXlPblRyeUFnYWluOiAxMDAsXG4gICAgc2xvdHNSZWZyZXNoVGltZW91dDogMTAwMCxcbiAgICB1c2VTUlZSZWNvcmRzOiBmYWxzZSxcbiAgICByZXNvbHZlU3J2OiBkbnNfMS5yZXNvbHZlU3J2LFxuICAgIGRuc0xvb2t1cDogZG5zXzEubG9va3VwLFxuICAgIGVuYWJsZUF1dG9QaXBlbGluaW5nOiBmYWxzZSxcbiAgICBhdXRvUGlwZWxpbmluZ0lnbm9yZWRDb21tYW5kczogW10sXG4gICAgc2hhcmRlZFN1YnNjcmliZXJzOiBmYWxzZSxcbn07XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/cluster/ClusterOptions.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/cluster/ClusterSubscriber.js":
/*!*****************************************************************!*\
!*** ./node_modules/ioredis/built/cluster/ClusterSubscriber.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst util_1 = __webpack_require__(/*! ./util */ \"(action-browser)/./node_modules/ioredis/built/cluster/util.js\");\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(action-browser)/./node_modules/ioredis/built/utils/index.js\");\nconst Redis_1 = __webpack_require__(/*! ../Redis */ \"(action-browser)/./node_modules/ioredis/built/Redis.js\");\nconst debug = (0, utils_1.Debug)(\"cluster:subscriber\");\nclass ClusterSubscriber {\n constructor(connectionPool, emitter, isSharded = false) {\n this.connectionPool = connectionPool;\n this.emitter = emitter;\n this.isSharded = isSharded;\n this.started = false;\n //There is only one connection for the entire pool\n this.subscriber = null;\n //The slot range for which this subscriber is responsible\n this.slotRange = [];\n this.onSubscriberEnd = () => {\n if (!this.started) {\n debug(\"subscriber has disconnected, but ClusterSubscriber is not started, so not reconnecting.\");\n return;\n }\n // If the subscriber closes whilst it's still the active connection,\n // we might as well try to connecting to a new node if possible to\n // minimise the number of missed publishes.\n debug(\"subscriber has disconnected, selecting a new one...\");\n this.selectSubscriber();\n };\n // If the current node we're using as the subscriber disappears\n // from the node pool for some reason, we will select a new one\n // to connect to.\n // Note that this event is only triggered if the connection to\n // the node has been used; cluster subscriptions are setup with\n // lazyConnect = true. It's possible for the subscriber node to\n // disappear without this method being called!\n // See https://github.com/luin/ioredis/pull/1589\n this.connectionPool.on(\"-node\", (_, key) => {\n if (!this.started || !this.subscriber) {\n return;\n }\n if ((0, util_1.getNodeKey)(this.subscriber.options) === key) {\n debug(\"subscriber has left, selecting a new one...\");\n this.selectSubscriber();\n }\n });\n this.connectionPool.on(\"+node\", () => {\n if (!this.started || this.subscriber) {\n return;\n }\n debug(\"a new node is discovered and there is no subscriber, selecting a new one...\");\n this.selectSubscriber();\n });\n }\n getInstance() {\n return this.subscriber;\n }\n /**\n * Associate this subscriber to a specific slot range.\n *\n * Returns the range or an empty array if the slot range couldn't be associated.\n *\n * BTW: This is more for debugging and testing purposes.\n *\n * @param range\n */\n associateSlotRange(range) {\n if (this.isSharded) {\n this.slotRange = range;\n }\n return this.slotRange;\n }\n start() {\n this.started = true;\n this.selectSubscriber();\n debug(\"started\");\n }\n stop() {\n this.started = false;\n if (this.subscriber) {\n this.subscriber.disconnect();\n this.subscriber = null;\n }\n }\n isStarted() {\n return this.started;\n }\n selectSubscriber() {\n const lastActiveSubscriber = this.lastActiveSubscriber;\n // Disconnect the previous subscriber even if there\n // will not be a new one.\n if (lastActiveSubscriber) {\n lastActiveSubscriber.off(\"end\", this.onSubscriberEnd);\n lastActiveSubscriber.disconnect();\n }\n if (this.subscriber) {\n this.subscriber.off(\"end\", this.onSubscriberEnd);\n this.subscriber.disconnect();\n }\n const sampleNode = (0, utils_1.sample)(this.connectionPool.getNodes());\n if (!sampleNode) {\n debug(\"selecting subscriber failed since there is no node discovered in the cluster yet\");\n this.subscriber = null;\n return;\n }\n const { options } = sampleNode;\n debug(\"selected a subscriber %s:%s\", options.host, options.port);\n /*\n * Create a specialized Redis connection for the subscription.\n * Note that auto reconnection is enabled here.\n *\n * `enableReadyCheck` is also enabled because although subscription is allowed\n * while redis is loading data from the disk, we can check if the password\n * provided for the subscriber is correct, and if not, the current subscriber\n * will be disconnected and a new subscriber will be selected.\n */\n let connectionPrefix = \"subscriber\";\n if (this.isSharded)\n connectionPrefix = \"ssubscriber\";\n this.subscriber = new Redis_1.default({\n port: options.port,\n host: options.host,\n username: options.username,\n password: options.password,\n enableReadyCheck: true,\n connectionName: (0, util_1.getConnectionName)(connectionPrefix, options.connectionName),\n lazyConnect: true,\n tls: options.tls,\n // Don't try to reconnect the subscriber connection. If the connection fails\n // we will get an end event (handled below), at which point we'll pick a new\n // node from the pool and try to connect to that as the subscriber connection.\n retryStrategy: null,\n });\n // Ignore the errors since they're handled in the connection pool.\n this.subscriber.on(\"error\", utils_1.noop);\n // The node we lost connection to may not come back up in a\n // reasonable amount of time (e.g. a slave that's taken down\n // for maintainence), we could potentially miss many published\n // messages so we should reconnect as quickly as possible, to\n // a different node if needed.\n this.subscriber.once(\"end\", this.onSubscriberEnd);\n // Re-subscribe previous channels\n const previousChannels = { subscribe: [], psubscribe: [], ssubscribe: [] };\n if (lastActiveSubscriber) {\n const condition = lastActiveSubscriber.condition || lastActiveSubscriber.prevCondition;\n if (condition && condition.subscriber) {\n previousChannels.subscribe = condition.subscriber.channels(\"subscribe\");\n previousChannels.psubscribe =\n condition.subscriber.channels(\"psubscribe\");\n previousChannels.ssubscribe =\n condition.subscriber.channels(\"ssubscribe\");\n }\n }\n if (previousChannels.subscribe.length ||\n previousChannels.psubscribe.length ||\n previousChannels.ssubscribe.length) {\n let pending = 0;\n for (const type of [\"subscribe\", \"psubscribe\", \"ssubscribe\"]) {\n const channels = previousChannels[type];\n if (channels.length) {\n pending += 1;\n debug(\"%s %d channels\", type, channels.length);\n this.subscriber[type](channels)\n .then(() => {\n if (!--pending) {\n this.lastActiveSubscriber = this.subscriber;\n }\n })\n .catch(() => {\n // TODO: should probably disconnect the subscriber and try again.\n debug(\"failed to %s %d channels\", type, channels.length);\n });\n }\n }\n }\n else {\n this.lastActiveSubscriber = this.subscriber;\n }\n for (const event of [\n \"message\",\n \"messageBuffer\",\n ]) {\n this.subscriber.on(event, (arg1, arg2) => {\n this.emitter.emit(event, arg1, arg2);\n });\n }\n for (const event of [\"pmessage\", \"pmessageBuffer\"]) {\n this.subscriber.on(event, (arg1, arg2, arg3) => {\n this.emitter.emit(event, arg1, arg2, arg3);\n });\n }\n if (this.isSharded == true) {\n for (const event of [\n \"smessage\",\n \"smessageBuffer\",\n ]) {\n this.subscriber.on(event, (arg1, arg2) => {\n this.emitter.emit(event, arg1, arg2);\n });\n }\n }\n }\n}\nexports[\"default\"] = ClusterSubscriber;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2NsdXN0ZXIvQ2x1c3RlclN1YnNjcmliZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsZUFBZSxtQkFBTyxDQUFDLDZFQUFRO0FBQy9CLGdCQUFnQixtQkFBTyxDQUFDLDhFQUFVO0FBQ2xDLGdCQUFnQixtQkFBTyxDQUFDLHdFQUFVO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsVUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWUiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvY2x1c3Rlci9DbHVzdGVyU3Vic2NyaWJlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgUmVkaXNfMSA9IHJlcXVpcmUoXCIuLi9SZWRpc1wiKTtcbmNvbnN0IGRlYnVnID0gKDAsIHV0aWxzXzEuRGVidWcpKFwiY2x1c3RlcjpzdWJzY3JpYmVyXCIpO1xuY2xhc3MgQ2x1c3RlclN1YnNjcmliZXIge1xuICAgIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb25Qb29sLCBlbWl0dGVyLCBpc1NoYXJkZWQgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25Qb29sID0gY29ubmVjdGlvblBvb2w7XG4gICAgICAgIHRoaXMuZW1pdHRlciA9IGVtaXR0ZXI7XG4gICAgICAgIHRoaXMuaXNTaGFyZGVkID0gaXNTaGFyZGVkO1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgLy9UaGVyZSBpcyBvbmx5IG9uZSBjb25uZWN0aW9uIGZvciB0aGUgZW50aXJlIHBvb2xcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVyID0gbnVsbDtcbiAgICAgICAgLy9UaGUgc2xvdCByYW5nZSBmb3Igd2hpY2ggdGhpcyBzdWJzY3JpYmVyIGlzIHJlc3BvbnNpYmxlXG4gICAgICAgIHRoaXMuc2xvdFJhbmdlID0gW107XG4gICAgICAgIHRoaXMub25TdWJzY3JpYmVyRW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhcInN1YnNjcmliZXIgaGFzIGRpc2Nvbm5lY3RlZCwgYnV0IENsdXN0ZXJTdWJzY3JpYmVyIGlzIG5vdCBzdGFydGVkLCBzbyBub3QgcmVjb25uZWN0aW5nLlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB0aGUgc3Vic2NyaWJlciBjbG9zZXMgd2hpbHN0IGl0J3Mgc3RpbGwgdGhlIGFjdGl2ZSBjb25uZWN0aW9uLFxuICAgICAgICAgICAgLy8gd2UgbWlnaHQgYXMgd2VsbCB0cnkgdG8gY29ubmVjdGluZyB0byBhIG5ldyBub2RlIGlmIHBvc3NpYmxlIHRvXG4gICAgICAgICAgICAvLyBtaW5pbWlzZSB0aGUgbnVtYmVyIG9mIG1pc3NlZCBwdWJsaXNoZXMuXG4gICAgICAgICAgICBkZWJ1ZyhcInN1YnNjcmliZXIgaGFzIGRpc2Nvbm5lY3RlZCwgc2VsZWN0aW5nIGEgbmV3IG9uZS4uLlwiKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3Vic2NyaWJlcigpO1xuICAgICAgICB9O1xuICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBub2RlIHdlJ3JlIHVzaW5nIGFzIHRoZSBzdWJzY3JpYmVyIGRpc2FwcGVhcnNcbiAgICAgICAgLy8gZnJvbSB0aGUgbm9kZSBwb29sIGZvciBzb21lIHJlYXNvbiwgd2Ugd2lsbCBzZWxlY3QgYSBuZXcgb25lXG4gICAgICAgIC8vIHRvIGNvbm5lY3QgdG8uXG4gICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGV2ZW50IGlzIG9ubHkgdHJpZ2dlcmVkIGlmIHRoZSBjb25uZWN0aW9uIHRvXG4gICAgICAgIC8vIHRoZSBub2RlIGhhcyBiZWVuIHVzZWQ7IGNsdXN0ZXIgc3Vic2NyaXB0aW9ucyBhcmUgc2V0dXAgd2l0aFxuICAgICAgICAvLyBsYXp5Q29ubmVjdCA9IHRydWUuIEl0J3MgcG9zc2libGUgZm9yIHRoZSBzdWJzY3JpYmVyIG5vZGUgdG9cbiAgICAgICAgLy8gZGlzYXBwZWFyIHdpdGhvdXQgdGhpcyBtZXRob2QgYmVpbmcgY2FsbGVkIVxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2x1aW4vaW9yZWRpcy9wdWxsLzE1ODlcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uUG9vbC5vbihcIi1ub2RlXCIsIChfLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydGVkIHx8ICF0aGlzLnN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKDAsIHV0aWxfMS5nZXROb2RlS2V5KSh0aGlzLnN1YnNjcmliZXIub3B0aW9ucykgPT09IGtleSkge1xuICAgICAgICAgICAgICAgIGRlYnVnKFwic3Vic2NyaWJlciBoYXMgbGVmdCwgc2VsZWN0aW5nIGEgbmV3IG9uZS4uLlwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFN1YnNjcmliZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvblBvb2wub24oXCIrbm9kZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCB8fCB0aGlzLnN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWJ1ZyhcImEgbmV3IG5vZGUgaXMgZGlzY292ZXJlZCBhbmQgdGhlcmUgaXMgbm8gc3Vic2NyaWJlciwgc2VsZWN0aW5nIGEgbmV3IG9uZS4uLlwiKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3Vic2NyaWJlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0SW5zdGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnNjcmliZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzc29jaWF0ZSB0aGlzIHN1YnNjcmliZXIgdG8gYSBzcGVjaWZpYyBzbG90IHJhbmdlLlxuICAgICAqXG4gICAgICogUmV0dXJucyB0aGUgcmFuZ2Ugb3IgYW4gZW1wdHkgYXJyYXkgaWYgdGhlIHNsb3QgcmFuZ2UgY291bGRuJ3QgYmUgYXNzb2NpYXRlZC5cbiAgICAgKlxuICAgICAqIEJUVzogVGhpcyBpcyBtb3JlIGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3RpbmcgcHVycG9zZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmFuZ2VcbiAgICAgKi9cbiAgICBhc3NvY2lhdGVTbG90UmFuZ2UocmFuZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTaGFyZGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNsb3RSYW5nZSA9IHJhbmdlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNsb3RSYW5nZTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VsZWN0U3Vic2NyaWJlcigpO1xuICAgICAgICBkZWJ1ZyhcInN0YXJ0ZWRcIik7XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpc1N0YXJ0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0ZWQ7XG4gICAgfVxuICAgIHNlbGVjdFN1YnNjcmliZXIoKSB7XG4gICAgICAgIGNvbnN0IGxhc3RBY3RpdmVTdWJzY3JpYmVyID0gdGhpcy5sYXN0QWN0aXZlU3Vic2NyaWJlcjtcbiAgICAgICAgLy8gRGlzY29ubmVjdCB0aGUgcHJldmlvdXMgc3Vic2NyaWJlciBldmVuIGlmIHRoZXJlXG4gICAgICAgIC8vIHdpbGwgbm90IGJlIGEgbmV3IG9uZS5cbiAgICAgICAgaWYgKGxhc3RBY3RpdmVTdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICBsYXN0QWN0aXZlU3Vic2NyaWJlci5vZmYoXCJlbmRcIiwgdGhpcy5vblN1YnNjcmliZXJFbmQpO1xuICAgICAgICAgICAgbGFzdEFjdGl2ZVN1YnNjcmliZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlci5vZmYoXCJlbmRcIiwgdGhpcy5vblN1YnNjcmliZXJFbmQpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzYW1wbGVOb2RlID0gKDAsIHV0aWxzXzEuc2FtcGxlKSh0aGlzLmNvbm5lY3Rpb25Qb29sLmdldE5vZGVzKCkpO1xuICAgICAgICBpZiAoIXNhbXBsZU5vZGUpIHtcbiAgICAgICAgICAgIGRlYnVnKFwic2VsZWN0aW5nIHN1YnNjcmliZXIgZmFpbGVkIHNpbmNlIHRoZXJlIGlzIG5vIG5vZGUgZGlzY292ZXJlZCBpbiB0aGUgY2x1c3RlciB5ZXRcIik7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgb3B0aW9ucyB9ID0gc2FtcGxlTm9kZTtcbiAgICAgICAgZGVidWcoXCJzZWxlY3RlZCBhIHN1YnNjcmliZXIgJXM6JXNcIiwgb3B0aW9ucy5ob3N0LCBvcHRpb25zLnBvcnQpO1xuICAgICAgICAvKlxuICAgICAgICAgKiBDcmVhdGUgYSBzcGVjaWFsaXplZCBSZWRpcyBjb25uZWN0aW9uIGZvciB0aGUgc3Vic2NyaXB0aW9uLlxuICAgICAgICAgKiBOb3RlIHRoYXQgYXV0byByZWNvbm5lY3Rpb24gaXMgZW5hYmxlZCBoZXJlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBgZW5hYmxlUmVhZHlDaGVja2AgaXMgYWxzbyBlbmFibGVkIGJlY2F1c2UgYWx0aG91Z2ggc3Vic2NyaXB0aW9uIGlzIGFsbG93ZWRcbiAgICAgICAgICogd2hpbGUgcmVkaXMgaXMgbG9hZGluZyBkYXRhIGZyb20gdGhlIGRpc2ssIHdlIGNhbiBjaGVjayBpZiB0aGUgcGFzc3dvcmRcbiAgICAgICAgICogcHJvdmlkZWQgZm9yIHRoZSBzdWJzY3JpYmVyIGlzIGNvcnJlY3QsIGFuZCBpZiBub3QsIHRoZSBjdXJyZW50IHN1YnNjcmliZXJcbiAgICAgICAgICogd2lsbCBiZSBkaXNjb25uZWN0ZWQgYW5kIGEgbmV3IHN1YnNjcmliZXIgd2lsbCBiZSBzZWxlY3RlZC5cbiAgICAgICAgICovXG4gICAgICAgIGxldCBjb25uZWN0aW9uUHJlZml4ID0gXCJzdWJzY3JpYmVyXCI7XG4gICAgICAgIGlmICh0aGlzLmlzU2hhcmRlZClcbiAgICAgICAgICAgIGNvbm5lY3Rpb25QcmVmaXggPSBcInNzdWJzY3JpYmVyXCI7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlciA9IG5ldyBSZWRpc18xLmRlZmF1bHQoe1xuICAgICAgICAgICAgcG9ydDogb3B0aW9ucy5wb3J0LFxuICAgICAgICAgICAgaG9zdDogb3B0aW9ucy5ob3N0LFxuICAgICAgICAgICAgdXNlcm5hbWU6IG9wdGlvbnMudXNlcm5hbWUsXG4gICAgICAgICAgICBwYXNzd29yZDogb3B0aW9ucy5wYXNzd29yZCxcbiAgICAgICAgICAgIGVuYWJsZVJlYWR5Q2hlY2s6IHRydWUsXG4gICAgICAgICAgICBjb25uZWN0aW9uTmFtZTogKDAsIHV0aWxfMS5nZXRDb25uZWN0aW9uTmFtZSkoY29ubmVjdGlvblByZWZpeCwgb3B0aW9ucy5jb25uZWN0aW9uTmFtZSksXG4gICAgICAgICAgICBsYXp5Q29ubmVjdDogdHJ1ZSxcbiAgICAgICAgICAgIHRsczogb3B0aW9ucy50bHMsXG4gICAgICAgICAgICAvLyBEb24ndCB0cnkgdG8gcmVjb25uZWN0IHRoZSBzdWJzY3JpYmVyIGNvbm5lY3Rpb24uIElmIHRoZSBjb25uZWN0aW9uIGZhaWxzXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGdldCBhbiBlbmQgZXZlbnQgKGhhbmRsZWQgYmVsb3cpLCBhdCB3aGljaCBwb2ludCB3ZSdsbCBwaWNrIGEgbmV3XG4gICAgICAgICAgICAvLyBub2RlIGZyb20gdGhlIHBvb2wgYW5kIHRyeSB0byBjb25uZWN0IHRvIHRoYXQgYXMgdGhlIHN1YnNjcmliZXIgY29ubmVjdGlvbi5cbiAgICAgICAgICAgIHJldHJ5U3RyYXRlZ3k6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGVycm9ycyBzaW5jZSB0aGV5J3JlIGhhbmRsZWQgaW4gdGhlIGNvbm5lY3Rpb24gcG9vbC5cbiAgICAgICAgdGhpcy5zdWJzY3JpYmVyLm9uKFwiZXJyb3JcIiwgdXRpbHNfMS5ub29wKTtcbiAgICAgICAgLy8gVGhlIG5vZGUgd2UgbG9zdCBjb25uZWN0aW9uIHRvIG1heSBub3QgY29tZSBiYWNrIHVwIGluIGFcbiAgICAgICAgLy8gcmVhc29uYWJsZSBhbW91bnQgb2YgdGltZSAoZS5nLiBhIHNsYXZlIHRoYXQncyB0YWtlbiBkb3duXG4gICAgICAgIC8vIGZvciBtYWludGFpbmVuY2UpLCB3ZSBjb3VsZCBwb3RlbnRpYWxseSBtaXNzIG1hbnkgcHVibGlzaGVkXG4gICAgICAgIC8vIG1lc3NhZ2VzIHNvIHdlIHNob3VsZCByZWNvbm5lY3QgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSwgdG9cbiAgICAgICAgLy8gYSBkaWZmZXJlbnQgbm9kZSBpZiBuZWVkZWQuXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlci5vbmNlKFwiZW5kXCIsIHRoaXMub25TdWJzY3JpYmVyRW5kKTtcbiAgICAgICAgLy8gUmUtc3Vic2NyaWJlIHByZXZpb3VzIGNoYW5uZWxzXG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ2hhbm5lbHMgPSB7IHN1YnNjcmliZTogW10sIHBzdWJzY3JpYmU6IFtdLCBzc3Vic2NyaWJlOiBbXSB9O1xuICAgICAgICBpZiAobGFzdEFjdGl2ZVN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IGxhc3RBY3RpdmVTdWJzY3JpYmVyLmNvbmRpdGlvbiB8fCBsYXN0QWN0aXZlU3Vic2NyaWJlci5wcmV2Q29uZGl0aW9uO1xuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbiAmJiBjb25kaXRpb24uc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgICAgIHByZXZpb3VzQ2hhbm5lbHMuc3Vic2NyaWJlID0gY29uZGl0aW9uLnN1YnNjcmliZXIuY2hhbm5lbHMoXCJzdWJzY3JpYmVcIik7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNDaGFubmVscy5wc3Vic2NyaWJlID1cbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uLnN1YnNjcmliZXIuY2hhbm5lbHMoXCJwc3Vic2NyaWJlXCIpO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzQ2hhbm5lbHMuc3N1YnNjcmliZSA9XG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5zdWJzY3JpYmVyLmNoYW5uZWxzKFwic3N1YnNjcmliZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldmlvdXNDaGFubmVscy5zdWJzY3JpYmUubGVuZ3RoIHx8XG4gICAgICAgICAgICBwcmV2aW91c0NoYW5uZWxzLnBzdWJzY3JpYmUubGVuZ3RoIHx8XG4gICAgICAgICAgICBwcmV2aW91c0NoYW5uZWxzLnNzdWJzY3JpYmUubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgcGVuZGluZyA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgW1wic3Vic2NyaWJlXCIsIFwicHN1YnNjcmliZVwiLCBcInNzdWJzY3JpYmVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFubmVscyA9IHByZXZpb3VzQ2hhbm5lbHNbdHlwZV07XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5uZWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnKFwiJXMgJWQgY2hhbm5lbHNcIiwgdHlwZSwgY2hhbm5lbHMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVyW3R5cGVdKGNoYW5uZWxzKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEtLXBlbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RBY3RpdmVTdWJzY3JpYmVyID0gdGhpcy5zdWJzY3JpYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHNob3VsZCBwcm9iYWJseSBkaXNjb25uZWN0IHRoZSBzdWJzY3JpYmVyIGFuZCB0cnkgYWdhaW4uXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcImZhaWxlZCB0byAlcyAlZCBjaGFubmVsc1wiLCB0eXBlLCBjaGFubmVscy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RBY3RpdmVTdWJzY3JpYmVyID0gdGhpcy5zdWJzY3JpYmVyO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgW1xuICAgICAgICAgICAgXCJtZXNzYWdlXCIsXG4gICAgICAgICAgICBcIm1lc3NhZ2VCdWZmZXJcIixcbiAgICAgICAgXSkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVyLm9uKGV2ZW50LCAoYXJnMSwgYXJnMikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KGV2ZW50LCBhcmcxLCBhcmcyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgW1wicG1lc3NhZ2VcIiwgXCJwbWVzc2FnZUJ1ZmZlclwiXSkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVyLm9uKGV2ZW50LCAoYXJnMSwgYXJnMiwgYXJnMykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KGV2ZW50LCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzU2hhcmRlZCA9PSB0cnVlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIFtcbiAgICAgICAgICAgICAgICBcInNtZXNzYWdlXCIsXG4gICAgICAgICAgICAgICAgXCJzbWVzc2FnZUJ1ZmZlclwiLFxuICAgICAgICAgICAgXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlci5vbihldmVudCwgKGFyZzEsIGFyZzIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoZXZlbnQsIGFyZzEsIGFyZzIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gQ2x1c3RlclN1YnNjcmliZXI7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/cluster/ClusterSubscriber.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/cluster/ClusterSubscriberGroup.js":
/*!**********************************************************************!*\
!*** ./node_modules/ioredis/built/cluster/ClusterSubscriberGroup.js ***!
\**********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(action-browser)/./node_modules/ioredis/built/utils/index.js\");\nconst ClusterSubscriber_1 = __webpack_require__(/*! ./ClusterSubscriber */ \"(action-browser)/./node_modules/ioredis/built/cluster/ClusterSubscriber.js\");\nconst ConnectionPool_1 = __webpack_require__(/*! ./ConnectionPool */ \"(action-browser)/./node_modules/ioredis/built/cluster/ConnectionPool.js\");\nconst util_1 = __webpack_require__(/*! ./util */ \"(action-browser)/./node_modules/ioredis/built/cluster/util.js\");\nconst calculateSlot = __webpack_require__(/*! cluster-key-slot */ \"(action-browser)/./node_modules/cluster-key-slot/lib/index.js\");\nconst debug = (0, utils_1.Debug)(\"cluster:subscriberGroup\");\n/**\n * Redis differs between \"normal\" and sharded PubSub. If using the \"normal\" PubSub feature, exactly one\n * ClusterSubscriber exists per cluster instance. This works because the Redis cluster bus forwards m\n * messages between shards. However, this has scalability limitations, which is the reason why the sharded\n * PubSub feature was added to Redis. With sharded PubSub, each shard is responsible for its own messages.\n * Given that, we need at least one ClusterSubscriber per master endpoint/node.\n *\n * This class leverages the previously exising ClusterSubscriber by adding support for multiple such subscribers\n * in alignment to the master nodes of the cluster. The ClusterSubscriber class was extended in a non-breaking way\n * to support this feature.\n */\nclass ClusterSubscriberGroup {\n /**\n * Register callbacks\n *\n * @param cluster\n */\n constructor(cluster) {\n this.cluster = cluster;\n this.shardedSubscribers = new Map();\n this.clusterSlots = [];\n //Simple [min, max] slot ranges aren't enough because you can migrate single slots\n this.subscriberToSlotsIndex = new Map();\n this.channels = new Map();\n cluster.on(\"+node\", (redis) => {\n this._addSubscriber(redis);\n });\n cluster.on(\"-node\", (redis) => {\n this._removeSubscriber(redis);\n });\n cluster.on(\"refresh\", () => {\n this._refreshSlots(cluster);\n });\n }\n /**\n * Get the responsible subscriber.\n *\n * Returns null if no subscriber was found\n *\n * @param slot\n */\n getResponsibleSubscriber(slot) {\n const nodeKey = this.clusterSlots[slot][0];\n return this.shardedSubscribers.get(nodeKey);\n }\n /**\n * Adds a channel for which this subscriber group is responsible\n *\n * @param channels\n */\n addChannels(channels) {\n const slot = calculateSlot(channels[0]);\n //Check if the all channels belong to the same slot and otherwise reject the operation\n channels.forEach((c) => {\n if (calculateSlot(c) != slot)\n return -1;\n });\n const currChannels = this.channels.get(slot);\n if (!currChannels) {\n this.channels.set(slot, channels);\n }\n else {\n this.channels.set(slot, currChannels.concat(channels));\n }\n return [...this.channels.values()].flatMap(v => v).length;\n }\n /**\n * Removes channels for which the subscriber group is responsible by optionally unsubscribing\n * @param channels\n */\n removeChannels(channels) {\n const slot = calculateSlot(channels[0]);\n //Check if the all channels belong to the same slot and otherwise reject the operation\n channels.forEach((c) => {\n if (calculateSlot(c) != slot)\n return -1;\n });\n const slotChannels = this.channels.get(slot);\n if (slotChannels) {\n const updatedChannels = slotChannels.filter(c => !channels.includes(c));\n this.channels.set(slot, updatedChannels);\n }\n return [...this.channels.values()].flatMap(v => v).length;\n }\n /**\n * Disconnect all subscribers\n */\n stop() {\n for (const s of this.shardedSubscribers.values()) {\n s.stop();\n }\n }\n /**\n * Start all not yet started subscribers\n */\n start() {\n for (const s of this.shardedSubscribers.values()) {\n if (!s.isStarted()) {\n s.start();\n }\n }\n }\n /**\n * Add a subscriber to the group of subscribers\n *\n * @param redis\n */\n _addSubscriber(redis) {\n const pool = new ConnectionPool_1.default(redis.options);\n if (pool.addMasterNode(redis)) {\n const sub = new ClusterSubscriber_1.default(pool, this.cluster, true);\n const nodeKey = (0, util_1.getNodeKey)(redis.options);\n this.shardedSubscribers.set(nodeKey, sub);\n sub.start();\n // We need to attempt to resubscribe them in case the new node serves their slot\n this._resubscribe();\n this.cluster.emit(\"+subscriber\");\n return sub;\n }\n return null;\n }\n /**\n * Removes a subscriber from the group\n * @param redis\n */\n _removeSubscriber(redis) {\n const nodeKey = (0, util_1.getNodeKey)(redis.options);\n const sub = this.shardedSubscribers.get(nodeKey);\n if (sub) {\n sub.stop();\n this.shardedSubscribers.delete(nodeKey);\n // Even though the subscriber to this node is going down, we might have another subscriber\n // handling the same slots, so we need to attempt to subscribe the orphaned channels\n this._resubscribe();\n this.cluster.emit(\"-subscriber\");\n }\n return this.shardedSubscribers;\n }\n /**\n * Refreshes the subscriber-related slot ranges\n *\n * Returns false if no refresh was needed\n *\n * @param cluster\n */\n _refreshSlots(cluster) {\n //If there was an actual change, then reassign the slot ranges\n if (this._slotsAreEqual(cluster.slots)) {\n debug(\"Nothing to refresh because the new cluster map is equal to the previous one.\");\n }\n else {\n debug(\"Refreshing the slots of the subscriber group.\");\n //Rebuild the slots index\n this.subscriberToSlotsIndex = new Map();\n for (let slot = 0; slot < cluster.slots.length; slot++) {\n const node = cluster.slots[slot][0];\n if (!this.subscriberToSlotsIndex.has(node)) {\n this.subscriberToSlotsIndex.set(node, []);\n }\n this.subscriberToSlotsIndex.get(node).push(Number(slot));\n }\n //Update the subscribers from the index\n this._resubscribe();\n //Update the cached slots map\n this.clusterSlots = JSON.parse(JSON.stringify(cluster.slots));\n this.cluster.emit(\"subscribersReady\");\n return true;\n }\n return false;\n }\n /**\n * Resubscribes to the previous channels\n *\n * @private\n */\n _resubscribe() {\n if (this.shardedSubscribers) {\n this.shardedSubscribers.forEach((s, nodeKey) => {\n const subscriberSlots = this.subscriberToSlotsIndex.get(nodeKey);\n if (subscriberSlots) {\n //More for debugging purposes\n s.associateSlotRange(subscriberSlots);\n //Resubscribe on the underlying connection\n subscriberSlots.forEach((ss) => {\n //Might return null if being disconnected\n const redis = s.getInstance();\n const channels = this.channels.get(ss);\n if (channels && channels.length > 0) {\n //Try to subscribe now\n if (redis) {\n redis.ssubscribe(channels);\n //If the instance isn't ready yet, then register the re-subscription for later\n redis.on(\"ready\", () => {\n redis.ssubscribe(channels);\n });\n }\n }\n });\n }\n });\n }\n }\n /**\n * Deep equality of the cluster slots objects\n *\n * @param other\n * @private\n */\n _slotsAreEqual(other) {\n if (this.clusterSlots === undefined)\n return false;\n else\n return JSON.stringify(this.clusterSlots) === JSON.stringify(other);\n }\n}\nexports[\"default\"] = ClusterSubscriberGroup;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2NsdXN0ZXIvQ2x1c3RlclN1YnNjcmliZXJHcm91cC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxnQkFBZ0IsbUJBQU8sQ0FBQyw4RUFBVTtBQUNsQyw0QkFBNEIsbUJBQU8sQ0FBQyx1R0FBcUI7QUFDekQseUJBQXlCLG1CQUFPLENBQUMsaUdBQWtCO0FBQ25ELGVBQWUsbUJBQU8sQ0FBQyw2RUFBUTtBQUMvQixzQkFBc0IsbUJBQU8sQ0FBQyx1RkFBa0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsNkJBQTZCO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2NsdXN0ZXIvQ2x1c3RlclN1YnNjcmliZXJHcm91cC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5jb25zdCBDbHVzdGVyU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vQ2x1c3RlclN1YnNjcmliZXJcIik7XG5jb25zdCBDb25uZWN0aW9uUG9vbF8xID0gcmVxdWlyZShcIi4vQ29ubmVjdGlvblBvb2xcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgY2FsY3VsYXRlU2xvdCA9IHJlcXVpcmUoXCJjbHVzdGVyLWtleS1zbG90XCIpO1xuY29uc3QgZGVidWcgPSAoMCwgdXRpbHNfMS5EZWJ1ZykoXCJjbHVzdGVyOnN1YnNjcmliZXJHcm91cFwiKTtcbi8qKlxuICogUmVkaXMgZGlmZmVycyBiZXR3ZWVuIFwibm9ybWFsXCIgYW5kIHNoYXJkZWQgUHViU3ViLiBJZiB1c2luZyB0aGUgXCJub3JtYWxcIiBQdWJTdWIgZmVhdHVyZSwgZXhhY3RseSBvbmVcbiAqIENsdXN0ZXJTdWJzY3JpYmVyIGV4aXN0cyBwZXIgY2x1c3RlciBpbnN0YW5jZS4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBSZWRpcyBjbHVzdGVyIGJ1cyBmb3J3YXJkcyBtXG4gKiBtZXNzYWdlcyBiZXR3ZWVuIHNoYXJkcy4gSG93ZXZlciwgdGhpcyBoYXMgc2NhbGFiaWxpdHkgbGltaXRhdGlvbnMsIHdoaWNoIGlzIHRoZSByZWFzb24gd2h5IHRoZSBzaGFyZGVkXG4gKiBQdWJTdWIgZmVhdHVyZSB3YXMgYWRkZWQgdG8gUmVkaXMuIFdpdGggc2hhcmRlZCBQdWJTdWIsIGVhY2ggc2hhcmQgaXMgcmVzcG9uc2libGUgZm9yIGl0cyBvd24gbWVzc2FnZXMuXG4gKiBHaXZlbiB0aGF0LCB3ZSBuZWVkIGF0IGxlYXN0IG9uZSBDbHVzdGVyU3Vic2NyaWJlciBwZXIgbWFzdGVyIGVuZHBvaW50L25vZGUuXG4gKlxuICogVGhpcyBjbGFzcyBsZXZlcmFnZXMgdGhlIHByZXZpb3VzbHkgZXhpc2luZyBDbHVzdGVyU3Vic2NyaWJlciBieSBhZGRpbmcgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc3VjaCBzdWJzY3JpYmVyc1xuICogaW4gYWxpZ25tZW50IHRvIHRoZSBtYXN0ZXIgbm9kZXMgb2YgdGhlIGNsdXN0ZXIuIFRoZSBDbHVzdGVyU3Vic2NyaWJlciBjbGFzcyB3YXMgZXh0ZW5kZWQgaW4gYSBub24tYnJlYWtpbmcgd2F5XG4gKiB0byBzdXBwb3J0IHRoaXMgZmVhdHVyZS5cbiAqL1xuY2xhc3MgQ2x1c3RlclN1YnNjcmliZXJHcm91cCB7XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgY2FsbGJhY2tzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2x1c3RlclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNsdXN0ZXIpIHtcbiAgICAgICAgdGhpcy5jbHVzdGVyID0gY2x1c3RlcjtcbiAgICAgICAgdGhpcy5zaGFyZGVkU3Vic2NyaWJlcnMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuY2x1c3RlclNsb3RzID0gW107XG4gICAgICAgIC8vU2ltcGxlIFttaW4sIG1heF0gc2xvdCByYW5nZXMgYXJlbid0IGVub3VnaCBiZWNhdXNlIHlvdSBjYW4gbWlncmF0ZSBzaW5nbGUgc2xvdHNcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVyVG9TbG90c0luZGV4ID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmNoYW5uZWxzID0gbmV3IE1hcCgpO1xuICAgICAgICBjbHVzdGVyLm9uKFwiK25vZGVcIiwgKHJlZGlzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hZGRTdWJzY3JpYmVyKHJlZGlzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNsdXN0ZXIub24oXCItbm9kZVwiLCAocmVkaXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZVN1YnNjcmliZXIocmVkaXMpO1xuICAgICAgICB9KTtcbiAgICAgICAgY2x1c3Rlci5vbihcInJlZnJlc2hcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFNsb3RzKGNsdXN0ZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSByZXNwb25zaWJsZSBzdWJzY3JpYmVyLlxuICAgICAqXG4gICAgICogUmV0dXJucyBudWxsIGlmIG5vIHN1YnNjcmliZXIgd2FzIGZvdW5kXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2xvdFxuICAgICAqL1xuICAgIGdldFJlc3BvbnNpYmxlU3Vic2NyaWJlcihzbG90KSB7XG4gICAgICAgIGNvbnN0IG5vZGVLZXkgPSB0aGlzLmNsdXN0ZXJTbG90c1tzbG90XVswXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hhcmRlZFN1YnNjcmliZXJzLmdldChub2RlS2V5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNoYW5uZWwgZm9yIHdoaWNoIHRoaXMgc3Vic2NyaWJlciBncm91cCBpcyByZXNwb25zaWJsZVxuICAgICAqXG4gICAgICogQHBhcmFtIGNoYW5uZWxzXG4gICAgICovXG4gICAgYWRkQ2hhbm5lbHMoY2hhbm5lbHMpIHtcbiAgICAgICAgY29uc3Qgc2xvdCA9IGNhbGN1bGF0ZVNsb3QoY2hhbm5lbHNbMF0pO1xuICAgICAgICAvL0NoZWNrIGlmIHRoZSBhbGwgY2hhbm5lbHMgYmVsb25nIHRvIHRoZSBzYW1lIHNsb3QgYW5kIG90aGVyd2lzZSByZWplY3QgdGhlIG9wZXJhdGlvblxuICAgICAgICBjaGFubmVscy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FsY3VsYXRlU2xvdChjKSAhPSBzbG90KVxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGN1cnJDaGFubmVscyA9IHRoaXMuY2hhbm5lbHMuZ2V0KHNsb3QpO1xuICAgICAgICBpZiAoIWN1cnJDaGFubmVscykge1xuICAgICAgICAgICAgdGhpcy5jaGFubmVscy5zZXQoc2xvdCwgY2hhbm5lbHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGFubmVscy5zZXQoc2xvdCwgY3VyckNoYW5uZWxzLmNvbmNhdChjaGFubmVscykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5jaGFubmVscy52YWx1ZXMoKV0uZmxhdE1hcCh2ID0+IHYpLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBjaGFubmVscyBmb3Igd2hpY2ggdGhlIHN1YnNjcmliZXIgZ3JvdXAgaXMgcmVzcG9uc2libGUgYnkgb3B0aW9uYWxseSB1bnN1YnNjcmliaW5nXG4gICAgICogQHBhcmFtIGNoYW5uZWxzXG4gICAgICovXG4gICAgcmVtb3ZlQ2hhbm5lbHMoY2hhbm5lbHMpIHtcbiAgICAgICAgY29uc3Qgc2xvdCA9IGNhbGN1bGF0ZVNsb3QoY2hhbm5lbHNbMF0pO1xuICAgICAgICAvL0NoZWNrIGlmIHRoZSBhbGwgY2hhbm5lbHMgYmVsb25nIHRvIHRoZSBzYW1lIHNsb3QgYW5kIG90aGVyd2lzZSByZWplY3QgdGhlIG9wZXJhdGlvblxuICAgICAgICBjaGFubmVscy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FsY3VsYXRlU2xvdChjKSAhPSBzbG90KVxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNsb3RDaGFubmVscyA9IHRoaXMuY2hhbm5lbHMuZ2V0KHNsb3QpO1xuICAgICAgICBpZiAoc2xvdENoYW5uZWxzKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkQ2hhbm5lbHMgPSBzbG90Q2hhbm5lbHMuZmlsdGVyKGMgPT4gIWNoYW5uZWxzLmluY2x1ZGVzKGMpKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHMuc2V0KHNsb3QsIHVwZGF0ZWRDaGFubmVscyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLmNoYW5uZWxzLnZhbHVlcygpXS5mbGF0TWFwKHYgPT4gdikubGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEaXNjb25uZWN0IGFsbCBzdWJzY3JpYmVyc1xuICAgICAqL1xuICAgIHN0b3AoKSB7XG4gICAgICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLnNoYXJkZWRTdWJzY3JpYmVycy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgcy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhcnQgYWxsIG5vdCB5ZXQgc3RhcnRlZCBzdWJzY3JpYmVyc1xuICAgICAqL1xuICAgIHN0YXJ0KCkge1xuICAgICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5zaGFyZGVkU3Vic2NyaWJlcnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGlmICghcy5pc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgICAgIHMuc3RhcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgYSBzdWJzY3JpYmVyIHRvIHRoZSBncm91cCBvZiBzdWJzY3JpYmVyc1xuICAgICAqXG4gICAgICogQHBhcmFtIHJlZGlzXG4gICAgICovXG4gICAgX2FkZFN1YnNjcmliZXIocmVkaXMpIHtcbiAgICAgICAgY29uc3QgcG9vbCA9IG5ldyBDb25uZWN0aW9uUG9vbF8xLmRlZmF1bHQocmVkaXMub3B0aW9ucyk7XG4gICAgICAgIGlmIChwb29sLmFkZE1hc3Rlck5vZGUocmVkaXMpKSB7XG4gICAgICAgICAgICBjb25zdCBzdWIgPSBuZXcgQ2x1c3RlclN1YnNjcmliZXJfMS5kZWZhdWx0KHBvb2wsIHRoaXMuY2x1c3RlciwgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBub2RlS2V5ID0gKDAsIHV0aWxfMS5nZXROb2RlS2V5KShyZWRpcy5vcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuc2hhcmRlZFN1YnNjcmliZXJzLnNldChub2RlS2V5LCBzdWIpO1xuICAgICAgICAgICAgc3ViLnN0YXJ0KCk7XG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGF0dGVtcHQgdG8gcmVzdWJzY3JpYmUgdGhlbSBpbiBjYXNlIHRoZSBuZXcgbm9kZSBzZXJ2ZXMgdGhlaXIgc2xvdFxuICAgICAgICAgICAgdGhpcy5fcmVzdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuY2x1c3Rlci5lbWl0KFwiK3N1YnNjcmliZXJcIik7XG4gICAgICAgICAgICByZXR1cm4gc3ViO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgc3Vic2NyaWJlciBmcm9tIHRoZSBncm91cFxuICAgICAqIEBwYXJhbSByZWRpc1xuICAgICAqL1xuICAgIF9yZW1vdmVTdWJzY3JpYmVyKHJlZGlzKSB7XG4gICAgICAgIGNvbnN0IG5vZGVLZXkgPSAoMCwgdXRpbF8xLmdldE5vZGVLZXkpKHJlZGlzLm9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdWIgPSB0aGlzLnNoYXJkZWRTdWJzY3JpYmVycy5nZXQobm9kZUtleSk7XG4gICAgICAgIGlmIChzdWIpIHtcbiAgICAgICAgICAgIHN1Yi5zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLnNoYXJkZWRTdWJzY3JpYmVycy5kZWxldGUobm9kZUtleSk7XG4gICAgICAgICAgICAvLyBFdmVuIHRob3VnaCB0aGUgc3Vic2NyaWJlciB0byB0aGlzIG5vZGUgaXMgZ29pbmcgZG93biwgd2UgbWlnaHQgaGF2ZSBhbm90aGVyIHN1YnNjcmliZXJcbiAgICAgICAgICAgIC8vIGhhbmRsaW5nIHRoZSBzYW1lIHNsb3RzLCBzbyB3ZSBuZWVkIHRvIGF0dGVtcHQgdG8gc3Vic2NyaWJlIHRoZSBvcnBoYW5lZCBjaGFubmVsc1xuICAgICAgICAgICAgdGhpcy5fcmVzdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuY2x1c3Rlci5lbWl0KFwiLXN1YnNjcmliZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2hhcmRlZFN1YnNjcmliZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWZyZXNoZXMgdGhlIHN1YnNjcmliZXItcmVsYXRlZCBzbG90IHJhbmdlc1xuICAgICAqXG4gICAgICogUmV0dXJucyBmYWxzZSBpZiBubyByZWZyZXNoIHdhcyBuZWVkZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjbHVzdGVyXG4gICAgICovXG4gICAgX3JlZnJlc2hTbG90cyhjbHVzdGVyKSB7XG4gICAgICAgIC8vSWYgdGhlcmUgd2FzIGFuIGFjdHVhbCBjaGFuZ2UsIHRoZW4gcmVhc3NpZ24gdGhlIHNsb3QgcmFuZ2VzXG4gICAgICAgIGlmICh0aGlzLl9zbG90c0FyZUVxdWFsKGNsdXN0ZXIuc2xvdHMpKSB7XG4gICAgICAgICAgICBkZWJ1ZyhcIk5vdGhpbmcgdG8gcmVmcmVzaCBiZWNhdXNlIHRoZSBuZXcgY2x1c3RlciBtYXAgaXMgZXF1YWwgdG8gdGhlIHByZXZpb3VzIG9uZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWJ1ZyhcIlJlZnJlc2hpbmcgdGhlIHNsb3RzIG9mIHRoZSBzdWJzY3JpYmVyIGdyb3VwLlwiKTtcbiAgICAgICAgICAgIC8vUmVidWlsZCB0aGUgc2xvdHMgaW5kZXhcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlclRvU2xvdHNJbmRleCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGZvciAobGV0IHNsb3QgPSAwOyBzbG90IDwgY2x1c3Rlci5zbG90cy5sZW5ndGg7IHNsb3QrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBjbHVzdGVyLnNsb3RzW3Nsb3RdWzBdO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdWJzY3JpYmVyVG9TbG90c0luZGV4Lmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmliZXJUb1Nsb3RzSW5kZXguc2V0KG5vZGUsIFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVyVG9TbG90c0luZGV4LmdldChub2RlKS5wdXNoKE51bWJlcihzbG90KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL1VwZGF0ZSB0aGUgc3Vic2NyaWJlcnMgZnJvbSB0aGUgaW5kZXhcbiAgICAgICAgICAgIHRoaXMuX3Jlc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAvL1VwZGF0ZSB0aGUgY2FjaGVkIHNsb3RzIG1hcFxuICAgICAgICAgICAgdGhpcy5jbHVzdGVyU2xvdHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNsdXN0ZXIuc2xvdHMpKTtcbiAgICAgICAgICAgIHRoaXMuY2x1c3Rlci5lbWl0KFwic3Vic2NyaWJlcnNSZWFkeVwiKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzdWJzY3JpYmVzIHRvIHRoZSBwcmV2aW91cyBjaGFubmVsc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcmVzdWJzY3JpYmUoKSB7XG4gICAgICAgIGlmICh0aGlzLnNoYXJkZWRTdWJzY3JpYmVycykge1xuICAgICAgICAgICAgdGhpcy5zaGFyZGVkU3Vic2NyaWJlcnMuZm9yRWFjaCgocywgbm9kZUtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YnNjcmliZXJTbG90cyA9IHRoaXMuc3Vic2NyaWJlclRvU2xvdHNJbmRleC5nZXQobm9kZUtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXJTbG90cykge1xuICAgICAgICAgICAgICAgICAgICAvL01vcmUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlc1xuICAgICAgICAgICAgICAgICAgICBzLmFzc29jaWF0ZVNsb3RSYW5nZShzdWJzY3JpYmVyU2xvdHMpO1xuICAgICAgICAgICAgICAgICAgICAvL1Jlc3Vic2NyaWJlIG9uIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlclNsb3RzLmZvckVhY2goKHNzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL01pZ2h0IHJldHVybiBudWxsIGlmIGJlaW5nIGRpc2Nvbm5lY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVkaXMgPSBzLmdldEluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFubmVscyA9IHRoaXMuY2hhbm5lbHMuZ2V0KHNzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFubmVscyAmJiBjaGFubmVscy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9UcnkgdG8gc3Vic2NyaWJlIG5vd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWRpcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcy5zc3Vic2NyaWJlKGNoYW5uZWxzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGUgaW5zdGFuY2UgaXNuJ3QgcmVhZHkgeWV0LCB0aGVuIHJlZ2lzdGVyIHRoZSByZS1zdWJzY3JpcHRpb24gZm9yIGxhdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlzLm9uKFwicmVhZHlcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXMuc3N1YnNjcmliZShjaGFubmVscyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVlcCBlcXVhbGl0eSBvZiB0aGUgY2x1c3RlciBzbG90cyBvYmplY3RzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3RoZXJcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9zbG90c0FyZUVxdWFsKG90aGVyKSB7XG4gICAgICAgIGlmICh0aGlzLmNsdXN0ZXJTbG90cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5jbHVzdGVyU2xvdHMpID09PSBKU09OLnN0cmluZ2lmeShvdGhlcik7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gQ2x1c3RlclN1YnNjcmliZXJHcm91cDtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/cluster/ClusterSubscriberGroup.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/cluster/ConnectionPool.js":
/*!**************************************************************!*\
!*** ./node_modules/ioredis/built/cluster/ConnectionPool.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst events_1 = __webpack_require__(/*! events */ \"events\");\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(action-browser)/./node_modules/ioredis/built/utils/index.js\");\nconst util_1 = __webpack_require__(/*! ./util */ \"(action-browser)/./node_modules/ioredis/built/cluster/util.js\");\nconst Redis_1 = __webpack_require__(/*! ../Redis */ \"(action-browser)/./node_modules/ioredis/built/Redis.js\");\nconst debug = (0, utils_1.Debug)(\"cluster:connectionPool\");\nclass ConnectionPool extends events_1.EventEmitter {\n constructor(redisOptions) {\n super();\n this.redisOptions = redisOptions;\n // master + slave = all\n this.nodes = {\n all: {},\n master: {},\n slave: {},\n };\n this.specifiedOptions = {};\n }\n getNodes(role = \"all\") {\n const nodes = this.nodes[role];\n return Object.keys(nodes).map((key) => nodes[key]);\n }\n getInstanceByKey(key) {\n return this.nodes.all[key];\n }\n getSampleInstance(role) {\n const keys = Object.keys(this.nodes[role]);\n const sampleKey = (0, utils_1.sample)(keys);\n return this.nodes[role][sampleKey];\n }\n /**\n * Add a master node to the pool\n * @param node\n */\n addMasterNode(node) {\n const key = (0, util_1.getNodeKey)(node.options);\n const redis = this.createRedisFromOptions(node, node.options.readOnly);\n //Master nodes aren't read-only\n if (!node.options.readOnly) {\n this.nodes.all[key] = redis;\n this.nodes.master[key] = redis;\n return true;\n }\n return false;\n }\n /**\n * Creates a Redis connection instance from the node options\n * @param node\n * @param readOnly\n */\n createRedisFromOptions(node, readOnly) {\n const redis = new Redis_1.default((0, utils_1.defaults)({\n // Never try to reconnect when a node is lose,\n // instead, waiting for a `MOVED` error and\n // fetch the slots again.\n retryStrategy: null,\n // Offline queue should be enabled so that\n // we don't need to wait for the `ready` event\n // before sending commands to the node.\n enableOfflineQueue: true,\n readOnly: readOnly,\n }, node, this.redisOptions, { lazyConnect: true }));\n return redis;\n }\n /**\n * Find or create a connection to the node\n */\n findOrCreate(node, readOnly = false) {\n const key = (0, util_1.getNodeKey)(node);\n readOnly = Boolean(readOnly);\n if (this.specifiedOptions[key]) {\n Object.assign(node, this.specifiedOptions[key]);\n }\n else {\n this.specifiedOptions[key] = node;\n }\n let redis;\n if (this.nodes.all[key]) {\n redis = this.nodes.all[key];\n if (redis.options.readOnly !== readOnly) {\n redis.options.readOnly = readOnly;\n debug(\"Change role of %s to %s\", key, readOnly ? \"slave\" : \"master\");\n redis[readOnly ? \"readonly\" : \"readwrite\"]().catch(utils_1.noop);\n if (readOnly) {\n delete this.nodes.master[key];\n this.nodes.slave[key] = redis;\n }\n else {\n delete this.nodes.slave[key];\n this.nodes.master[key] = redis;\n }\n }\n }\n else {\n debug(\"Connecting to %s as %s\", key, readOnly ? \"slave\" : \"master\");\n redis = this.createRedisFromOptions(node, readOnly);\n this.nodes.all[key] = redis;\n this.nodes[readOnly ? \"slave\" : \"master\"][key] = redis;\n redis.once(\"end\", () => {\n this.removeNode(key);\n this.emit(\"-node\", redis, key);\n if (!Object.keys(this.nodes.all).length) {\n this.emit(\"drain\");\n }\n });\n this.emit(\"+node\", redis, key);\n redis.on(\"error\", function (error) {\n this.emit(\"nodeError\", error, key);\n });\n }\n return redis;\n }\n /**\n * Reset the pool with a set of nodes.\n * The old node will be removed.\n */\n reset(nodes) {\n debug(\"Reset with %O\", nodes);\n const newNodes = {};\n nodes.forEach((node) => {\n const key = (0, util_1.getNodeKey)(node);\n // Don't override the existing (master) node\n // when the current one is slave.\n if (!(node.readOnly && newNodes[key])) {\n newNodes[key] = node;\n }\n });\n Object.keys(this.nodes.all).forEach((key) => {\n if (!newNodes[key]) {\n debug(\"Disconnect %s because the node does not hold any slot\", key);\n this.nodes.all[key].disconnect();\n this.removeNode(key);\n }\n });\n Object.keys(newNodes).forEach((key) => {\n const node = newNodes[key];\n this.findOrCreate(node, node.readOnly);\n });\n }\n /**\n * Remove a node from the pool.\n */\n removeNode(key) {\n const { nodes } = this;\n if (nodes.all[key]) {\n debug(\"Remove %s from the pool\", key);\n delete nodes.all[key];\n }\n delete nodes.master[key];\n delete nodes.slave[key];\n }\n}\nexports[\"default\"] = ConnectionPool;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2NsdXN0ZXIvQ29ubmVjdGlvblBvb2wuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsaUJBQWlCLG1CQUFPLENBQUMsc0JBQVE7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsOEVBQVU7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLDZFQUFRO0FBQy9CLGdCQUFnQixtQkFBTyxDQUFDLHdFQUFVO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CLHNCQUFzQjtBQUN0QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLDZCQUE2QixtQkFBbUI7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jbHVzdGVyL0Nvbm5lY3Rpb25Qb29sLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZXZlbnRzXzEgPSByZXF1aXJlKFwiZXZlbnRzXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCBSZWRpc18xID0gcmVxdWlyZShcIi4uL1JlZGlzXCIpO1xuY29uc3QgZGVidWcgPSAoMCwgdXRpbHNfMS5EZWJ1ZykoXCJjbHVzdGVyOmNvbm5lY3Rpb25Qb29sXCIpO1xuY2xhc3MgQ29ubmVjdGlvblBvb2wgZXh0ZW5kcyBldmVudHNfMS5FdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKHJlZGlzT3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnJlZGlzT3B0aW9ucyA9IHJlZGlzT3B0aW9ucztcbiAgICAgICAgLy8gbWFzdGVyICsgc2xhdmUgPSBhbGxcbiAgICAgICAgdGhpcy5ub2RlcyA9IHtcbiAgICAgICAgICAgIGFsbDoge30sXG4gICAgICAgICAgICBtYXN0ZXI6IHt9LFxuICAgICAgICAgICAgc2xhdmU6IHt9LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNwZWNpZmllZE9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgZ2V0Tm9kZXMocm9sZSA9IFwiYWxsXCIpIHtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLm5vZGVzW3JvbGVdO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobm9kZXMpLm1hcCgoa2V5KSA9PiBub2Rlc1trZXldKTtcbiAgICB9XG4gICAgZ2V0SW5zdGFuY2VCeUtleShrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZXMuYWxsW2tleV07XG4gICAgfVxuICAgIGdldFNhbXBsZUluc3RhbmNlKHJvbGUpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMubm9kZXNbcm9sZV0pO1xuICAgICAgICBjb25zdCBzYW1wbGVLZXkgPSAoMCwgdXRpbHNfMS5zYW1wbGUpKGtleXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlc1tyb2xlXVtzYW1wbGVLZXldO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgYSBtYXN0ZXIgbm9kZSB0byB0aGUgcG9vbFxuICAgICAqIEBwYXJhbSBub2RlXG4gICAgICovXG4gICAgYWRkTWFzdGVyTm9kZShub2RlKSB7XG4gICAgICAgIGNvbnN0IGtleSA9ICgwLCB1dGlsXzEuZ2V0Tm9kZUtleSkobm9kZS5vcHRpb25zKTtcbiAgICAgICAgY29uc3QgcmVkaXMgPSB0aGlzLmNyZWF0ZVJlZGlzRnJvbU9wdGlvbnMobm9kZSwgbm9kZS5vcHRpb25zLnJlYWRPbmx5KTtcbiAgICAgICAgLy9NYXN0ZXIgbm9kZXMgYXJlbid0IHJlYWQtb25seVxuICAgICAgICBpZiAoIW5vZGUub3B0aW9ucy5yZWFkT25seSkge1xuICAgICAgICAgICAgdGhpcy5ub2Rlcy5hbGxba2V5XSA9IHJlZGlzO1xuICAgICAgICAgICAgdGhpcy5ub2Rlcy5tYXN0ZXJba2V5XSA9IHJlZGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgUmVkaXMgY29ubmVjdGlvbiBpbnN0YW5jZSBmcm9tIHRoZSBub2RlIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gbm9kZVxuICAgICAqIEBwYXJhbSByZWFkT25seVxuICAgICAqL1xuICAgIGNyZWF0ZVJlZGlzRnJvbU9wdGlvbnMobm9kZSwgcmVhZE9ubHkpIHtcbiAgICAgICAgY29uc3QgcmVkaXMgPSBuZXcgUmVkaXNfMS5kZWZhdWx0KCgwLCB1dGlsc18xLmRlZmF1bHRzKSh7XG4gICAgICAgICAgICAvLyBOZXZlciB0cnkgdG8gcmVjb25uZWN0IHdoZW4gYSBub2RlIGlzIGxvc2UsXG4gICAgICAgICAgICAvLyBpbnN0ZWFkLCB3YWl0aW5nIGZvciBhIGBNT1ZFRGAgZXJyb3IgYW5kXG4gICAgICAgICAgICAvLyBmZXRjaCB0aGUgc2xvdHMgYWdhaW4uXG4gICAgICAgICAgICByZXRyeVN0cmF0ZWd5OiBudWxsLFxuICAgICAgICAgICAgLy8gT2ZmbGluZSBxdWV1ZSBzaG91bGQgYmUgZW5hYmxlZCBzbyB0aGF0XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBgcmVhZHlgIGV2ZW50XG4gICAgICAgICAgICAvLyBiZWZvcmUgc2VuZGluZyBjb21tYW5kcyB0byB0aGUgbm9kZS5cbiAgICAgICAgICAgIGVuYWJsZU9mZmxpbmVRdWV1ZTogdHJ1ZSxcbiAgICAgICAgICAgIHJlYWRPbmx5OiByZWFkT25seSxcbiAgICAgICAgfSwgbm9kZSwgdGhpcy5yZWRpc09wdGlvbnMsIHsgbGF6eUNvbm5lY3Q6IHRydWUgfSkpO1xuICAgICAgICByZXR1cm4gcmVkaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZpbmQgb3IgY3JlYXRlIGEgY29ubmVjdGlvbiB0byB0aGUgbm9kZVxuICAgICAqL1xuICAgIGZpbmRPckNyZWF0ZShub2RlLCByZWFkT25seSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGtleSA9ICgwLCB1dGlsXzEuZ2V0Tm9kZUtleSkobm9kZSk7XG4gICAgICAgIHJlYWRPbmx5ID0gQm9vbGVhbihyZWFkT25seSk7XG4gICAgICAgIGlmICh0aGlzLnNwZWNpZmllZE9wdGlvbnNba2V5XSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihub2RlLCB0aGlzLnNwZWNpZmllZE9wdGlvbnNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNwZWNpZmllZE9wdGlvbnNba2V5XSA9IG5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlZGlzO1xuICAgICAgICBpZiAodGhpcy5ub2Rlcy5hbGxba2V5XSkge1xuICAgICAgICAgICAgcmVkaXMgPSB0aGlzLm5vZGVzLmFsbFtrZXldO1xuICAgICAgICAgICAgaWYgKHJlZGlzLm9wdGlvbnMucmVhZE9ubHkgIT09IHJlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgcmVkaXMub3B0aW9ucy5yZWFkT25seSA9IHJlYWRPbmx5O1xuICAgICAgICAgICAgICAgIGRlYnVnKFwiQ2hhbmdlIHJvbGUgb2YgJXMgdG8gJXNcIiwga2V5LCByZWFkT25seSA/IFwic2xhdmVcIiA6IFwibWFzdGVyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlzW3JlYWRPbmx5ID8gXCJyZWFkb25seVwiIDogXCJyZWFkd3JpdGVcIl0oKS5jYXRjaCh1dGlsc18xLm5vb3ApO1xuICAgICAgICAgICAgICAgIGlmIChyZWFkT25seSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ub2Rlcy5tYXN0ZXJba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2Rlcy5zbGF2ZVtrZXldID0gcmVkaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ub2Rlcy5zbGF2ZVtrZXldO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVzLm1hc3RlcltrZXldID0gcmVkaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVidWcoXCJDb25uZWN0aW5nIHRvICVzIGFzICVzXCIsIGtleSwgcmVhZE9ubHkgPyBcInNsYXZlXCIgOiBcIm1hc3RlclwiKTtcbiAgICAgICAgICAgIHJlZGlzID0gdGhpcy5jcmVhdGVSZWRpc0Zyb21PcHRpb25zKG5vZGUsIHJlYWRPbmx5KTtcbiAgICAgICAgICAgIHRoaXMubm9kZXMuYWxsW2tleV0gPSByZWRpcztcbiAgICAgICAgICAgIHRoaXMubm9kZXNbcmVhZE9ubHkgPyBcInNsYXZlXCIgOiBcIm1hc3RlclwiXVtrZXldID0gcmVkaXM7XG4gICAgICAgICAgICByZWRpcy5vbmNlKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZU5vZGUoa2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoXCItbm9kZVwiLCByZWRpcywga2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5rZXlzKHRoaXMubm9kZXMuYWxsKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KFwiZHJhaW5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmVtaXQoXCIrbm9kZVwiLCByZWRpcywga2V5KTtcbiAgICAgICAgICAgIHJlZGlzLm9uKFwiZXJyb3JcIiwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KFwibm9kZUVycm9yXCIsIGVycm9yLCBrZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNldCB0aGUgcG9vbCB3aXRoIGEgc2V0IG9mIG5vZGVzLlxuICAgICAqIFRoZSBvbGQgbm9kZSB3aWxsIGJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgcmVzZXQobm9kZXMpIHtcbiAgICAgICAgZGVidWcoXCJSZXNldCB3aXRoICVPXCIsIG5vZGVzKTtcbiAgICAgICAgY29uc3QgbmV3Tm9kZXMgPSB7fTtcbiAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gKDAsIHV0aWxfMS5nZXROb2RlS2V5KShub2RlKTtcbiAgICAgICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoZSBleGlzdGluZyAobWFzdGVyKSBub2RlXG4gICAgICAgICAgICAvLyB3aGVuIHRoZSBjdXJyZW50IG9uZSBpcyBzbGF2ZS5cbiAgICAgICAgICAgIGlmICghKG5vZGUucmVhZE9ubHkgJiYgbmV3Tm9kZXNba2V5XSkpIHtcbiAgICAgICAgICAgICAgICBuZXdOb2Rlc1trZXldID0gbm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMubm9kZXMuYWxsKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICghbmV3Tm9kZXNba2V5XSkge1xuICAgICAgICAgICAgICAgIGRlYnVnKFwiRGlzY29ubmVjdCAlcyBiZWNhdXNlIHRoZSBub2RlIGRvZXMgbm90IGhvbGQgYW55IHNsb3RcIiwga2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzLmFsbFtrZXldLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZU5vZGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5rZXlzKG5ld05vZGVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBuZXdOb2Rlc1trZXldO1xuICAgICAgICAgICAgdGhpcy5maW5kT3JDcmVhdGUobm9kZSwgbm9kZS5yZWFkT25seSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYSBub2RlIGZyb20gdGhlIHBvb2wuXG4gICAgICovXG4gICAgcmVtb3ZlTm9kZShrZXkpIHtcbiAgICAgICAgY29uc3QgeyBub2RlcyB9ID0gdGhpcztcbiAgICAgICAgaWYgKG5vZGVzLmFsbFtrZXldKSB7XG4gICAgICAgICAgICBkZWJ1ZyhcIlJlbW92ZSAlcyBmcm9tIHRoZSBwb29sXCIsIGtleSk7XG4gICAgICAgICAgICBkZWxldGUgbm9kZXMuYWxsW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIG5vZGVzLm1hc3RlcltrZXldO1xuICAgICAgICBkZWxldGUgbm9kZXMuc2xhdmVba2V5XTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBDb25uZWN0aW9uUG9vbDtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/cluster/ConnectionPool.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/cluster/DelayQueue.js":
/*!**********************************************************!*\
!*** ./node_modules/ioredis/built/cluster/DelayQueue.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(action-browser)/./node_modules/ioredis/built/utils/index.js\");\nconst Deque = __webpack_require__(/*! denque */ \"(action-browser)/./node_modules/denque/index.js\");\nconst debug = (0, utils_1.Debug)(\"delayqueue\");\n/**\n * Queue that runs items after specified duration\n */\nclass DelayQueue {\n constructor() {\n this.queues = {};\n this.timeouts = {};\n }\n /**\n * Add a new item to the queue\n *\n * @param bucket bucket name\n * @param item function that will run later\n * @param options\n */\n push(bucket, item, options) {\n const callback = options.callback || process.nextTick;\n if (!this.queues[bucket]) {\n this.queues[bucket] = new Deque();\n }\n const queue = this.queues[bucket];\n queue.push(item);\n if (!this.timeouts[bucket]) {\n this.timeouts[bucket] = setTimeout(() => {\n callback(() => {\n this.timeouts[bucket] = null;\n this.execute(bucket);\n });\n }, options.timeout);\n }\n }\n execute(bucket) {\n const queue = this.queues[bucket];\n if (!queue) {\n return;\n }\n const { length } = queue;\n if (!length) {\n return;\n }\n debug(\"send %d commands in %s queue\", length, bucket);\n this.queues[bucket] = null;\n while (queue.length > 0) {\n queue.shift()();\n }\n }\n}\nexports[\"default\"] = DelayQueue;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2NsdXN0ZXIvRGVsYXlRdWV1ZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxnQkFBZ0IsbUJBQU8sQ0FBQyw4RUFBVTtBQUNsQyxjQUFjLG1CQUFPLENBQUMsK0RBQVE7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jbHVzdGVyL0RlbGF5UXVldWUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgRGVxdWUgPSByZXF1aXJlKFwiZGVucXVlXCIpO1xuY29uc3QgZGVidWcgPSAoMCwgdXRpbHNfMS5EZWJ1ZykoXCJkZWxheXF1ZXVlXCIpO1xuLyoqXG4gKiBRdWV1ZSB0aGF0IHJ1bnMgaXRlbXMgYWZ0ZXIgc3BlY2lmaWVkIGR1cmF0aW9uXG4gKi9cbmNsYXNzIERlbGF5UXVldWUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnF1ZXVlcyA9IHt9O1xuICAgICAgICB0aGlzLnRpbWVvdXRzID0ge307XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZCBhIG5ldyBpdGVtIHRvIHRoZSBxdWV1ZVxuICAgICAqXG4gICAgICogQHBhcmFtIGJ1Y2tldCBidWNrZXQgbmFtZVxuICAgICAqIEBwYXJhbSBpdGVtIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gbGF0ZXJcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqL1xuICAgIHB1c2goYnVja2V0LCBpdGVtLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjayB8fCBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAoIXRoaXMucXVldWVzW2J1Y2tldF0pIHtcbiAgICAgICAgICAgIHRoaXMucXVldWVzW2J1Y2tldF0gPSBuZXcgRGVxdWUoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWV1ZSA9IHRoaXMucXVldWVzW2J1Y2tldF07XG4gICAgICAgIHF1ZXVlLnB1c2goaXRlbSk7XG4gICAgICAgIGlmICghdGhpcy50aW1lb3V0c1tidWNrZXRdKSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXRzW2J1Y2tldF0gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGltZW91dHNbYnVja2V0XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZShidWNrZXQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBleGVjdXRlKGJ1Y2tldCkge1xuICAgICAgICBjb25zdCBxdWV1ZSA9IHRoaXMucXVldWVzW2J1Y2tldF07XG4gICAgICAgIGlmICghcXVldWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGxlbmd0aCB9ID0gcXVldWU7XG4gICAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVidWcoXCJzZW5kICVkIGNvbW1hbmRzIGluICVzIHF1ZXVlXCIsIGxlbmd0aCwgYnVja2V0KTtcbiAgICAgICAgdGhpcy5xdWV1ZXNbYnVja2V0XSA9IG51bGw7XG4gICAgICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBxdWV1ZS5zaGlmdCgpKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBEZWxheVF1ZXVlO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/cluster/DelayQueue.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/cluster/index.js":
/*!*****************************************************!*\
!*** ./node_modules/ioredis/built/cluster/index.js ***!
\*****************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst commands_1 = __webpack_require__(/*! @ioredis/commands */ \"(action-browser)/./node_modules/@ioredis/commands/built/index.js\");\nconst events_1 = __webpack_require__(/*! events */ \"events\");\nconst redis_errors_1 = __webpack_require__(/*! redis-errors */ \"(action-browser)/./node_modules/redis-errors/index.js\");\nconst standard_as_callback_1 = __webpack_require__(/*! standard-as-callback */ \"(action-browser)/./node_modules/standard-as-callback/built/index.js\");\nconst Command_1 = __webpack_require__(/*! ../Command */ \"(action-browser)/./node_modules/ioredis/built/Command.js\");\nconst ClusterAllFailedError_1 = __webpack_require__(/*! ../errors/ClusterAllFailedError */ \"(action-browser)/./node_modules/ioredis/built/errors/ClusterAllFailedError.js\");\nconst Redis_1 = __webpack_require__(/*! ../Redis */ \"(action-browser)/./node_modules/ioredis/built/Redis.js\");\nconst ScanStream_1 = __webpack_require__(/*! ../ScanStream */ \"(action-browser)/./node_modules/ioredis/built/ScanStream.js\");\nconst transaction_1 = __webpack_require__(/*! ../transaction */ \"(action-browser)/./node_modules/ioredis/built/transaction.js\");\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(action-browser)/./node_modules/ioredis/built/utils/index.js\");\nconst applyMixin_1 = __webpack_require__(/*! ../utils/applyMixin */ \"(action-browser)/./node_modules/ioredis/built/utils/applyMixin.js\");\nconst Commander_1 = __webpack_require__(/*! ../utils/Commander */ \"(action-browser)/./node_modules/ioredis/built/utils/Commander.js\");\nconst ClusterOptions_1 = __webpack_require__(/*! ./ClusterOptions */ \"(action-browser)/./node_modules/ioredis/built/cluster/ClusterOptions.js\");\nconst ClusterSubscriber_1 = __webpack_require__(/*! ./ClusterSubscriber */ \"(action-browser)/./node_modules/ioredis/built/cluster/ClusterSubscriber.js\");\nconst ConnectionPool_1 = __webpack_require__(/*! ./ConnectionPool */ \"(action-browser)/./node_modules/ioredis/built/cluster/ConnectionPool.js\");\nconst DelayQueue_1 = __webpack_require__(/*! ./DelayQueue */ \"(action-browser)/./node_modules/ioredis/built/cluster/DelayQueue.js\");\nconst util_1 = __webpack_require__(/*! ./util */ \"(action-browser)/./node_modules/ioredis/built/cluster/util.js\");\nconst Deque = __webpack_require__(/*! denque */ \"(action-browser)/./node_modules/denque/index.js\");\nconst ClusterSubscriberGroup_1 = __webpack_require__(/*! ./ClusterSubscriberGroup */ \"(action-browser)/./node_modules/ioredis/built/cluster/ClusterSubscriberGroup.js\");\nconst debug = (0, utils_1.Debug)(\"cluster\");\nconst REJECT_OVERWRITTEN_COMMANDS = new WeakSet();\n/**\n * Client for the official Redis Cluster\n */\nclass Cluster extends Commander_1.default {\n /**\n * Creates an instance of Cluster.\n */\n //TODO: Add an option that enables or disables sharded PubSub\n constructor(startupNodes, options = {}) {\n super();\n this.slots = [];\n /**\n * @ignore\n */\n this._groupsIds = {};\n /**\n * @ignore\n */\n this._groupsBySlot = Array(16384);\n /**\n * @ignore\n */\n this.isCluster = true;\n this.retryAttempts = 0;\n this.delayQueue = new DelayQueue_1.default();\n this.offlineQueue = new Deque();\n this.isRefreshing = false;\n this._refreshSlotsCacheCallbacks = [];\n this._autoPipelines = new Map();\n this._runningAutoPipelines = new Set();\n this._readyDelayedCallbacks = [];\n /**\n * Every time Cluster#connect() is called, this value will be\n * auto-incrementing. The purpose of this value is used for\n * discarding previous connect attampts when creating a new\n * connection.\n */\n this.connectionEpoch = 0;\n events_1.EventEmitter.call(this);\n this.startupNodes = startupNodes;\n this.options = (0, utils_1.defaults)({}, options, ClusterOptions_1.DEFAULT_CLUSTER_OPTIONS, this.options);\n if (this.options.shardedSubscribers == true)\n this.shardedSubscribers = new ClusterSubscriberGroup_1.default(this);\n if (this.options.redisOptions &&\n this.options.redisOptions.keyPrefix &&\n !this.options.keyPrefix) {\n this.options.keyPrefix = this.options.redisOptions.keyPrefix;\n }\n // validate options\n if (typeof this.options.scaleReads !== \"function\" &&\n [\"all\", \"master\", \"slave\"].indexOf(this.options.scaleReads) === -1) {\n throw new Error('Invalid option scaleReads \"' +\n this.options.scaleReads +\n '\". Expected \"all\", \"master\", \"slave\" or a custom function');\n }\n this.connectionPool = new ConnectionPool_1.default(this.options.redisOptions);\n this.connectionPool.on(\"-node\", (redis, key) => {\n this.emit(\"-node\", redis);\n });\n this.connectionPool.on(\"+node\", (redis) => {\n this.emit(\"+node\", redis);\n });\n this.connectionPool.on(\"drain\", () => {\n this.setStatus(\"close\");\n });\n this.connectionPool.on(\"nodeError\", (error, key) => {\n this.emit(\"node error\", error, key);\n });\n this.subscriber = new ClusterSubscriber_1.default(this.connectionPool, this);\n if (this.options.scripts) {\n Object.entries(this.options.scripts).forEach(([name, definition]) => {\n this.defineCommand(name, definition);\n });\n }\n if (this.options.lazyConnect) {\n this.setStatus(\"wait\");\n }\n else {\n this.connect().catch((err) => {\n debug(\"connecting failed: %s\", err);\n });\n }\n }\n /**\n * Connect to a cluster\n */\n connect() {\n return new Promise((resolve, reject) => {\n if (this.status === \"connecting\" ||\n this.status === \"connect\" ||\n this.status === \"ready\") {\n reject(new Error(\"Redis is already connecting/connected\"));\n return;\n }\n const epoch = ++this.connectionEpoch;\n this.setStatus(\"connecting\");\n this.resolveStartupNodeHostnames()\n .then((nodes) => {\n if (this.connectionEpoch !== epoch) {\n debug(\"discard connecting after resolving startup nodes because epoch not match: %d != %d\", epoch, this.connectionEpoch);\n reject(new redis_errors_1.RedisError(\"Connection is discarded because a new connection is made\"));\n return;\n }\n if (this.status !== \"connecting\") {\n debug(\"discard connecting after resolving startup nodes because the status changed to %s\", this.status);\n reject(new redis_errors_1.RedisError(\"Connection is aborted\"));\n return;\n }\n this.connectionPool.reset(nodes);\n const readyHandler = () => {\n this.setStatus(\"ready\");\n this.retryAttempts = 0;\n this.executeOfflineCommands();\n this.resetNodesRefreshInterval();\n resolve();\n };\n let closeListener = undefined;\n const refreshListener = () => {\n this.invokeReadyDelayedCallbacks(undefined);\n this.removeListener(\"close\", closeListener);\n this.manuallyClosing = false;\n this.setStatus(\"connect\");\n if (this.options.enableReadyCheck) {\n this.readyCheck((err, fail) => {\n if (err || fail) {\n debug(\"Ready check failed (%s). Reconnecting...\", err || fail);\n if (this.status === \"connect\") {\n this.disconnect(true);\n }\n }\n else {\n readyHandler();\n }\n });\n }\n else {\n readyHandler();\n }\n };\n closeListener = () => {\n const error = new Error(\"None of startup nodes is available\");\n this.removeListener(\"refresh\", refreshListener);\n this.invokeReadyDelayedCallbacks(error);\n reject(error);\n };\n this.once(\"refresh\", refreshListener);\n this.once(\"close\", closeListener);\n this.once(\"close\", this.handleCloseEvent.bind(this));\n this.refreshSlotsCache((err) => {\n if (err && err.message === ClusterAllFailedError_1.default.defaultMessage) {\n Redis_1.default.prototype.silentEmit.call(this, \"error\", err);\n this.connectionPool.reset([]);\n }\n });\n this.subscriber.start();\n if (this.options.shardedSubscribers) {\n this.shardedSubscribers.start();\n }\n })\n .catch((err) => {\n this.setStatus(\"close\");\n this.handleCloseEvent(err);\n this.invokeReadyDelayedCallbacks(err);\n reject(err);\n });\n });\n }\n /**\n * Disconnect from every node in the cluster.\n */\n disconnect(reconnect = false) {\n const status = this.status;\n this.setStatus(\"disconnecting\");\n if (!reconnect) {\n this.manuallyClosing = true;\n }\n if (this.reconnectTimeout && !reconnect) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n debug(\"Canceled reconnecting attempts\");\n }\n this.clearNodesRefreshInterval();\n this.subscriber.stop();\n if (this.options.shardedSubscribers) {\n this.shardedSubscribers.stop();\n }\n if (status === \"wait\") {\n this.setStatus(\"close\");\n this.handleCloseEvent();\n }\n else {\n this.connectionPool.reset([]);\n }\n }\n /**\n * Quit the cluster gracefully.\n */\n quit(callback) {\n const status = this.status;\n this.setStatus(\"disconnecting\");\n this.manuallyClosing = true;\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n this.clearNodesRefreshInterval();\n this.subscriber.stop();\n if (this.options.shardedSubscribers) {\n this.shardedSubscribers.stop();\n }\n if (status === \"wait\") {\n const ret = (0, standard_as_callback_1.default)(Promise.resolve(\"OK\"), callback);\n // use setImmediate to make sure \"close\" event\n // being emitted after quit() is returned\n setImmediate(function () {\n this.setStatus(\"close\");\n this.handleCloseEvent();\n }.bind(this));\n return ret;\n }\n return (0, standard_as_callback_1.default)(Promise.all(this.nodes().map((node) => node.quit().catch((err) => {\n // Ignore the error caused by disconnecting since\n // we're disconnecting...\n if (err.message === utils_1.CONNECTION_CLOSED_ERROR_MSG) {\n return \"OK\";\n }\n throw err;\n }))).then(() => \"OK\"), callback);\n }\n /**\n * Create a new instance with the same startup nodes and options as the current one.\n *\n * @example\n * ```js\n * var cluster = new Redis.Cluster([{ host: \"127.0.0.1\", port: \"30001\" }]);\n * var anotherCluster = cluster.duplicate();\n * ```\n */\n duplicate(overrideStartupNodes = [], overrideOptions = {}) {\n const startupNodes = overrideStartupNodes.length > 0\n ? overrideStartupNodes\n : this.startupNodes.slice(0);\n const options = Object.assign({}, this.options, overrideOptions);\n return new Cluster(startupNodes, options);\n }\n /**\n * Get nodes with the specified role\n */\n nodes(role = \"all\") {\n if (role !== \"all\" && role !== \"master\" && role !== \"slave\") {\n throw new Error('Invalid role \"' + role + '\". Expected \"all\", \"master\" or \"slave\"');\n }\n return this.connectionPool.getNodes(role);\n }\n /**\n * This is needed in order not to install a listener for each auto pipeline\n *\n * @ignore\n */\n delayUntilReady(callback) {\n this._readyDelayedCallbacks.push(callback);\n }\n /**\n * Get the number of commands queued in automatic pipelines.\n *\n * This is not available (and returns 0) until the cluster is connected and slots information have been received.\n */\n get autoPipelineQueueSize() {\n let queued = 0;\n for (const pipeline of this._autoPipelines.values()) {\n queued += pipeline.length;\n }\n return queued;\n }\n /**\n * Refresh the slot cache\n *\n * @ignore\n */\n refreshSlotsCache(callback) {\n if (callback) {\n this._refreshSlotsCacheCallbacks.push(callback);\n }\n if (this.isRefreshing) {\n return;\n }\n this.isRefreshing = true;\n const _this = this;\n const wrapper = (error) => {\n this.isRefreshing = false;\n for (const callback of this._refreshSlotsCacheCallbacks) {\n callback(error);\n }\n this._refreshSlotsCacheCallbacks = [];\n };\n const nodes = (0, utils_1.shuffle)(this.connectionPool.getNodes());\n let lastNodeError = null;\n function tryNode(index) {\n if (index === nodes.length) {\n const error = new ClusterAllFailedError_1.default(ClusterAllFailedError_1.default.defaultMessage, lastNodeError);\n return wrapper(error);\n }\n const node = nodes[index];\n const key = `${node.options.host}:${node.options.port}`;\n debug(\"getting slot cache from %s\", key);\n _this.getInfoFromNode(node, function (err) {\n switch (_this.status) {\n case \"close\":\n case \"end\":\n return wrapper(new Error(\"Cluster is disconnected.\"));\n case \"disconnecting\":\n return wrapper(new Error(\"Cluster is disconnecting.\"));\n }\n if (err) {\n _this.emit(\"node error\", err, key);\n lastNodeError = err;\n tryNode(index + 1);\n }\n else {\n _this.emit(\"refresh\");\n wrapper();\n }\n });\n }\n tryNode(0);\n }\n /**\n * @ignore\n */\n sendCommand(command, stream, node) {\n if (this.status === \"wait\") {\n this.connect().catch(utils_1.noop);\n }\n if (this.status === \"end\") {\n command.reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n return command.promise;\n }\n let to = this.options.scaleReads;\n if (to !== \"master\") {\n const isCommandReadOnly = command.isReadOnly ||\n ((0, commands_1.exists)(command.name) && (0, commands_1.hasFlag)(command.name, \"readonly\"));\n if (!isCommandReadOnly) {\n to = \"master\";\n }\n }\n let targetSlot = node ? node.slot : command.getSlot();\n const ttl = {};\n const _this = this;\n if (!node && !REJECT_OVERWRITTEN_COMMANDS.has(command)) {\n REJECT_OVERWRITTEN_COMMANDS.add(command);\n const reject = command.reject;\n command.reject = function (err) {\n const partialTry = tryConnection.bind(null, true);\n _this.handleError(err, ttl, {\n moved: function (slot, key) {\n debug(\"command %s is moved to %s\", command.name, key);\n targetSlot = Number(slot);\n if (_this.slots[slot]) {\n _this.slots[slot][0] = key;\n }\n else {\n _this.slots[slot] = [key];\n }\n _this._groupsBySlot[slot] =\n _this._groupsIds[_this.slots[slot].join(\";\")];\n _this.connectionPool.findOrCreate(_this.natMapper(key));\n tryConnection();\n debug(\"refreshing slot caches... (triggered by MOVED error)\");\n _this.refreshSlotsCache();\n },\n ask: function (slot, key) {\n debug(\"command %s is required to ask %s:%s\", command.name, key);\n const mapped = _this.natMapper(key);\n _this.connectionPool.findOrCreate(mapped);\n tryConnection(false, `${mapped.host}:${mapped.port}`);\n },\n tryagain: partialTry,\n clusterDown: partialTry,\n connectionClosed: partialTry,\n maxRedirections: function (redirectionError) {\n reject.call(command, redirectionError);\n },\n defaults: function () {\n reject.call(command, err);\n },\n });\n };\n }\n tryConnection();\n function tryConnection(random, asking) {\n if (_this.status === \"end\") {\n command.reject(new redis_errors_1.AbortError(\"Cluster is ended.\"));\n return;\n }\n let redis;\n if (_this.status === \"ready\" || command.name === \"cluster\") {\n if (node && node.redis) {\n redis = node.redis;\n }\n else if (Command_1.default.checkFlag(\"ENTER_SUBSCRIBER_MODE\", command.name) ||\n Command_1.default.checkFlag(\"EXIT_SUBSCRIBER_MODE\", command.name)) {\n if (_this.options.shardedSubscribers == true &&\n (command.name == \"ssubscribe\" || command.name == \"sunsubscribe\")) {\n const sub = _this.shardedSubscribers.getResponsibleSubscriber(targetSlot);\n let status = -1;\n if (command.name == \"ssubscribe\")\n status = _this.shardedSubscribers.addChannels(command.getKeys());\n if (command.name == \"sunsubscribe\")\n status = _this.shardedSubscribers.removeChannels(command.getKeys());\n if (status !== -1) {\n redis = sub.getInstance();\n }\n else {\n command.reject(new redis_errors_1.AbortError(\"Can't add or remove the given channels. Are they in the same slot?\"));\n }\n }\n else {\n redis = _this.subscriber.getInstance();\n }\n if (!redis) {\n command.reject(new redis_errors_1.AbortError(\"No subscriber for the cluster\"));\n return;\n }\n }\n else {\n if (!random) {\n if (typeof targetSlot === \"number\" && _this.slots[targetSlot]) {\n const nodeKeys = _this.slots[targetSlot];\n if (typeof to === \"function\") {\n const nodes = nodeKeys.map(function (key) {\n return _this.connectionPool.getInstanceByKey(key);\n });\n redis = to(nodes, command);\n if (Array.isArray(redis)) {\n redis = (0, utils_1.sample)(redis);\n }\n if (!redis) {\n redis = nodes[0];\n }\n }\n else {\n let key;\n if (to === \"all\") {\n key = (0, utils_1.sample)(nodeKeys);\n }\n else if (to === \"slave\" && nodeKeys.length > 1) {\n key = (0, utils_1.sample)(nodeKeys, 1);\n }\n else {\n key = nodeKeys[0];\n }\n redis = _this.connectionPool.getInstanceByKey(key);\n }\n }\n if (asking) {\n redis = _this.connectionPool.getInstanceByKey(asking);\n redis.asking();\n }\n }\n if (!redis) {\n redis =\n (typeof to === \"function\"\n ? null\n : _this.connectionPool.getSampleInstance(to)) ||\n _this.connectionPool.getSampleInstance(\"all\");\n }\n }\n if (node && !node.redis) {\n node.redis = redis;\n }\n }\n if (redis) {\n redis.sendCommand(command, stream);\n }\n else if (_this.options.enableOfflineQueue) {\n _this.offlineQueue.push({\n command: command,\n stream: stream,\n node: node,\n });\n }\n else {\n command.reject(new Error(\"Cluster isn't ready and enableOfflineQueue options is false\"));\n }\n }\n return command.promise;\n }\n sscanStream(key, options) {\n return this.createScanStream(\"sscan\", { key, options });\n }\n sscanBufferStream(key, options) {\n return this.createScanStream(\"sscanBuffer\", { key, options });\n }\n hscanStream(key, options) {\n return this.createScanStream(\"hscan\", { key, options });\n }\n hscanBufferStream(key, options) {\n return this.createScanStream(\"hscanBuffer\", { key, options });\n }\n zscanStream(key, options) {\n return this.createScanStream(\"zscan\", { key, options });\n }\n zscanBufferStream(key, options) {\n return this.createScanStream(\"zscanBuffer\", { key, options });\n }\n /**\n * @ignore\n */\n handleError(error, ttl, handlers) {\n if (typeof ttl.value === \"undefined\") {\n ttl.value = this.options.maxRedirections;\n }\n else {\n ttl.value -= 1;\n }\n if (ttl.value <= 0) {\n handlers.maxRedirections(new Error(\"Too many Cluster redirections. Last error: \" + error));\n return;\n }\n const errv = error.message.split(\" \");\n if (errv[0] === \"MOVED\") {\n const timeout = this.options.retryDelayOnMoved;\n if (timeout && typeof timeout === \"number\") {\n this.delayQueue.push(\"moved\", handlers.moved.bind(null, errv[1], errv[2]), { timeout });\n }\n else {\n handlers.moved(errv[1], errv[2]);\n }\n }\n else if (errv[0] === \"ASK\") {\n handlers.ask(errv[1], errv[2]);\n }\n else if (errv[0] === \"TRYAGAIN\") {\n this.delayQueue.push(\"tryagain\", handlers.tryagain, {\n timeout: this.options.retryDelayOnTryAgain,\n });\n }\n else if (errv[0] === \"CLUSTERDOWN\" &&\n this.options.retryDelayOnClusterDown > 0) {\n this.delayQueue.push(\"clusterdown\", handlers.connectionClosed, {\n timeout: this.options.retryDelayOnClusterDown,\n callback: this.refreshSlotsCache.bind(this),\n });\n }\n else if (error.message === utils_1.CONNECTION_CLOSED_ERROR_MSG &&\n this.options.retryDelayOnFailover > 0 &&\n this.status === \"ready\") {\n this.delayQueue.push(\"failover\", handlers.connectionClosed, {\n timeout: this.options.retryDelayOnFailover,\n callback: this.refreshSlotsCache.bind(this),\n });\n }\n else {\n handlers.defaults();\n }\n }\n resetOfflineQueue() {\n this.offlineQueue = new Deque();\n }\n clearNodesRefreshInterval() {\n if (this.slotsTimer) {\n clearTimeout(this.slotsTimer);\n this.slotsTimer = null;\n }\n }\n resetNodesRefreshInterval() {\n if (this.slotsTimer || !this.options.slotsRefreshInterval) {\n return;\n }\n const nextRound = () => {\n this.slotsTimer = setTimeout(() => {\n debug('refreshing slot caches... (triggered by \"slotsRefreshInterval\" option)');\n this.refreshSlotsCache(() => {\n nextRound();\n });\n }, this.options.slotsRefreshInterval);\n };\n nextRound();\n }\n /**\n * Change cluster instance's status\n */\n setStatus(status) {\n debug(\"status: %s -> %s\", this.status || \"[empty]\", status);\n this.status = status;\n process.nextTick(() => {\n this.emit(status);\n });\n }\n /**\n * Called when closed to check whether a reconnection should be made\n */\n handleCloseEvent(reason) {\n if (reason) {\n debug(\"closed because %s\", reason);\n }\n let retryDelay;\n if (!this.manuallyClosing &&\n typeof this.options.clusterRetryStrategy === \"function\") {\n retryDelay = this.options.clusterRetryStrategy.call(this, ++this.retryAttempts, reason);\n }\n if (typeof retryDelay === \"number\") {\n this.setStatus(\"reconnecting\");\n this.reconnectTimeout = setTimeout(() => {\n this.reconnectTimeout = null;\n debug(\"Cluster is disconnected. Retrying after %dms\", retryDelay);\n this.connect().catch(function (err) {\n debug(\"Got error %s when reconnecting. Ignoring...\", err);\n });\n }, retryDelay);\n }\n else {\n this.setStatus(\"end\");\n this.flushQueue(new Error(\"None of startup nodes is available\"));\n }\n }\n /**\n * Flush offline queue with error.\n */\n flushQueue(error) {\n let item;\n while ((item = this.offlineQueue.shift())) {\n item.command.reject(error);\n }\n }\n executeOfflineCommands() {\n if (this.offlineQueue.length) {\n debug(\"send %d commands in offline queue\", this.offlineQueue.length);\n const offlineQueue = this.offlineQueue;\n this.resetOfflineQueue();\n let item;\n while ((item = offlineQueue.shift())) {\n this.sendCommand(item.command, item.stream, item.node);\n }\n }\n }\n natMapper(nodeKey) {\n const key = typeof nodeKey === \"string\"\n ? nodeKey\n : `${nodeKey.host}:${nodeKey.port}`;\n let mapped = null;\n if (this.options.natMap && typeof this.options.natMap === \"function\") {\n mapped = this.options.natMap(key);\n }\n else if (this.options.natMap && typeof this.options.natMap === \"object\") {\n mapped = this.options.natMap[key];\n }\n if (mapped) {\n debug(\"NAT mapping %s -> %O\", key, mapped);\n return Object.assign({}, mapped);\n }\n return typeof nodeKey === \"string\"\n ? (0, util_1.nodeKeyToRedisOptions)(nodeKey)\n : nodeKey;\n }\n getInfoFromNode(redis, callback) {\n if (!redis) {\n return callback(new Error(\"Node is disconnected\"));\n }\n // Use a duplication of the connection to avoid\n // timeouts when the connection is in the blocking\n // mode (e.g. waiting for BLPOP).\n const duplicatedConnection = redis.duplicate({\n enableOfflineQueue: true,\n enableReadyCheck: false,\n retryStrategy: null,\n connectionName: (0, util_1.getConnectionName)(\"refresher\", this.options.redisOptions && this.options.redisOptions.connectionName),\n });\n // Ignore error events since we will handle\n // exceptions for the CLUSTER SLOTS command.\n duplicatedConnection.on(\"error\", utils_1.noop);\n duplicatedConnection.cluster(\"SLOTS\", (0, utils_1.timeout)((err, result) => {\n duplicatedConnection.disconnect();\n if (err) {\n debug(\"error encountered running CLUSTER.SLOTS: %s\", err);\n return callback(err);\n }\n if (this.status === \"disconnecting\" ||\n this.status === \"close\" ||\n this.status === \"end\") {\n debug(\"ignore CLUSTER.SLOTS results (count: %d) since cluster status is %s\", result.length, this.status);\n callback();\n return;\n }\n const nodes = [];\n debug(\"cluster slots result count: %d\", result.length);\n for (let i = 0; i < result.length; ++i) {\n const items = result[i];\n const slotRangeStart = items[0];\n const slotRangeEnd = items[1];\n const keys = [];\n for (let j = 2; j < items.length; j++) {\n if (!items[j][0]) {\n continue;\n }\n const node = this.natMapper({\n host: items[j][0],\n port: items[j][1],\n });\n node.readOnly = j !== 2;\n nodes.push(node);\n keys.push(node.host + \":\" + node.port);\n }\n debug(\"cluster slots result [%d]: slots %d~%d served by %s\", i, slotRangeStart, slotRangeEnd, keys);\n for (let slot = slotRangeStart; slot <= slotRangeEnd; slot++) {\n this.slots[slot] = keys;\n }\n }\n // Assign to each node keys a numeric value to make autopipeline comparison faster.\n this._groupsIds = Object.create(null);\n let j = 0;\n for (let i = 0; i < 16384; i++) {\n const target = (this.slots[i] || []).join(\";\");\n if (!target.length) {\n this._groupsBySlot[i] = undefined;\n continue;\n }\n if (!this._groupsIds[target]) {\n this._groupsIds[target] = ++j;\n }\n this._groupsBySlot[i] = this._groupsIds[target];\n }\n this.connectionPool.reset(nodes);\n callback();\n }, this.options.slotsRefreshTimeout));\n }\n invokeReadyDelayedCallbacks(err) {\n for (const c of this._readyDelayedCallbacks) {\n process.nextTick(c, err);\n }\n this._readyDelayedCallbacks = [];\n }\n /**\n * Check whether Cluster is able to process commands\n */\n readyCheck(callback) {\n this.cluster(\"INFO\", (err, res) => {\n if (err) {\n return callback(err);\n }\n if (typeof res !== \"string\") {\n return callback();\n }\n let state;\n const lines = res.split(\"\\r\\n\");\n for (let i = 0; i < lines.length; ++i) {\n const parts = lines[i].split(\":\");\n if (parts[0] === \"cluster_state\") {\n state = parts[1];\n break;\n }\n }\n if (state === \"fail\") {\n debug(\"cluster state not ok (%s)\", state);\n callback(null, state);\n }\n else {\n callback();\n }\n });\n }\n resolveSrv(hostname) {\n return new Promise((resolve, reject) => {\n this.options.resolveSrv(hostname, (err, records) => {\n if (err) {\n return reject(err);\n }\n const self = this, groupedRecords = (0, util_1.groupSrvRecords)(records), sortedKeys = Object.keys(groupedRecords).sort((a, b) => parseInt(a) - parseInt(b));\n function tryFirstOne(err) {\n if (!sortedKeys.length) {\n return reject(err);\n }\n const key = sortedKeys[0], group = groupedRecords[key], record = (0, util_1.weightSrvRecords)(group);\n if (!group.records.length) {\n sortedKeys.shift();\n }\n self.dnsLookup(record.name).then((host) => resolve({\n host,\n port: record.port,\n }), tryFirstOne);\n }\n tryFirstOne();\n });\n });\n }\n dnsLookup(hostname) {\n return new Promise((resolve, reject) => {\n this.options.dnsLookup(hostname, (err, address) => {\n if (err) {\n debug(\"failed to resolve hostname %s to IP: %s\", hostname, err.message);\n reject(err);\n }\n else {\n debug(\"resolved hostname %s to IP %s\", hostname, address);\n resolve(address);\n }\n });\n });\n }\n /**\n * Normalize startup nodes, and resolving hostnames to IPs.\n *\n * This process happens every time when #connect() is called since\n * #startupNodes and DNS records may chanage.\n */\n async resolveStartupNodeHostnames() {\n if (!Array.isArray(this.startupNodes) || this.startupNodes.length === 0) {\n throw new Error(\"`startupNodes` should contain at least one node.\");\n }\n const startupNodes = (0, util_1.normalizeNodeOptions)(this.startupNodes);\n const hostnames = (0, util_1.getUniqueHostnamesFromOptions)(startupNodes);\n if (hostnames.length === 0) {\n return startupNodes;\n }\n const configs = await Promise.all(hostnames.map((this.options.useSRVRecords ? this.resolveSrv : this.dnsLookup).bind(this)));\n const hostnameToConfig = (0, utils_1.zipMap)(hostnames, configs);\n return startupNodes.map((node) => {\n const config = hostnameToConfig.get(node.host);\n if (!config) {\n return node;\n }\n if (this.options.useSRVRecords) {\n return Object.assign({}, node, config);\n }\n return Object.assign({}, node, { host: config });\n });\n }\n createScanStream(command, { key, options = {} }) {\n return new ScanStream_1.default({\n objectMode: true,\n key: key,\n redis: this,\n command: command,\n ...options,\n });\n }\n}\n(0, applyMixin_1.default)(Cluster, events_1.EventEmitter);\n(0, transaction_1.addTransactionSupport)(Cluster.prototype);\nexports[\"default\"] = Cluster;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2NsdXN0ZXIvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsbUJBQW1CLG1CQUFPLENBQUMsMkZBQW1CO0FBQzlDLGlCQUFpQixtQkFBTyxDQUFDLHNCQUFRO0FBQ2pDLHVCQUF1QixtQkFBTyxDQUFDLDJFQUFjO0FBQzdDLCtCQUErQixtQkFBTyxDQUFDLGlHQUFzQjtBQUM3RCxrQkFBa0IsbUJBQU8sQ0FBQyw0RUFBWTtBQUN0QyxnQ0FBZ0MsbUJBQU8sQ0FBQyxzSEFBaUM7QUFDekUsZ0JBQWdCLG1CQUFPLENBQUMsd0VBQVU7QUFDbEMscUJBQXFCLG1CQUFPLENBQUMsa0ZBQWU7QUFDNUMsc0JBQXNCLG1CQUFPLENBQUMsb0ZBQWdCO0FBQzlDLGdCQUFnQixtQkFBTyxDQUFDLDhFQUFVO0FBQ2xDLHFCQUFxQixtQkFBTyxDQUFDLDhGQUFxQjtBQUNsRCxvQkFBb0IsbUJBQU8sQ0FBQyw0RkFBb0I7QUFDaEQseUJBQXlCLG1CQUFPLENBQUMsaUdBQWtCO0FBQ25ELDRCQUE0QixtQkFBTyxDQUFDLHVHQUFxQjtBQUN6RCx5QkFBeUIsbUJBQU8sQ0FBQyxpR0FBa0I7QUFDbkQscUJBQXFCLG1CQUFPLENBQUMseUZBQWM7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLDZFQUFRO0FBQy9CLGNBQWMsbUJBQU8sQ0FBQywrREFBUTtBQUM5QixpQ0FBaUMsbUJBQU8sQ0FBQyxpSEFBMEI7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxrQ0FBa0M7QUFDNUU7QUFDQTtBQUNBO0FBQ0EsNkRBQTZEO0FBQzdEO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsa0JBQWtCLEdBQUcsa0JBQWtCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELFlBQVksR0FBRyxZQUFZO0FBQzNFLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsY0FBYztBQUM5RDtBQUNBO0FBQ0Esc0RBQXNELGNBQWM7QUFDcEU7QUFDQTtBQUNBLGdEQUFnRCxjQUFjO0FBQzlEO0FBQ0E7QUFDQSxzREFBc0QsY0FBYztBQUNwRTtBQUNBO0FBQ0EsZ0RBQWdELGNBQWM7QUFDOUQ7QUFDQTtBQUNBLHNEQUFzRCxjQUFjO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkZBQTZGLFNBQVM7QUFDdEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGFBQWEsR0FBRyxhQUFhO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0Msa0JBQWtCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELHNCQUFzQjtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsV0FBVztBQUN2Qyw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGtCQUFrQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBLG1DQUFtQyxVQUFVLGNBQWM7QUFDM0QsU0FBUztBQUNUO0FBQ0EsZ0NBQWdDLG1CQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jbHVzdGVyL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29tbWFuZHNfMSA9IHJlcXVpcmUoXCJAaW9yZWRpcy9jb21tYW5kc1wiKTtcbmNvbnN0IGV2ZW50c18xID0gcmVxdWlyZShcImV2ZW50c1wiKTtcbmNvbnN0IHJlZGlzX2Vycm9yc18xID0gcmVxdWlyZShcInJlZGlzLWVycm9yc1wiKTtcbmNvbnN0IHN0YW5kYXJkX2FzX2NhbGxiYWNrXzEgPSByZXF1aXJlKFwic3RhbmRhcmQtYXMtY2FsbGJhY2tcIik7XG5jb25zdCBDb21tYW5kXzEgPSByZXF1aXJlKFwiLi4vQ29tbWFuZFwiKTtcbmNvbnN0IENsdXN0ZXJBbGxGYWlsZWRFcnJvcl8xID0gcmVxdWlyZShcIi4uL2Vycm9ycy9DbHVzdGVyQWxsRmFpbGVkRXJyb3JcIik7XG5jb25zdCBSZWRpc18xID0gcmVxdWlyZShcIi4uL1JlZGlzXCIpO1xuY29uc3QgU2NhblN0cmVhbV8xID0gcmVxdWlyZShcIi4uL1NjYW5TdHJlYW1cIik7XG5jb25zdCB0cmFuc2FjdGlvbl8xID0gcmVxdWlyZShcIi4uL3RyYW5zYWN0aW9uXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbmNvbnN0IGFwcGx5TWl4aW5fMSA9IHJlcXVpcmUoXCIuLi91dGlscy9hcHBseU1peGluXCIpO1xuY29uc3QgQ29tbWFuZGVyXzEgPSByZXF1aXJlKFwiLi4vdXRpbHMvQ29tbWFuZGVyXCIpO1xuY29uc3QgQ2x1c3Rlck9wdGlvbnNfMSA9IHJlcXVpcmUoXCIuL0NsdXN0ZXJPcHRpb25zXCIpO1xuY29uc3QgQ2x1c3RlclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL0NsdXN0ZXJTdWJzY3JpYmVyXCIpO1xuY29uc3QgQ29ubmVjdGlvblBvb2xfMSA9IHJlcXVpcmUoXCIuL0Nvbm5lY3Rpb25Qb29sXCIpO1xuY29uc3QgRGVsYXlRdWV1ZV8xID0gcmVxdWlyZShcIi4vRGVsYXlRdWV1ZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCBEZXF1ZSA9IHJlcXVpcmUoXCJkZW5xdWVcIik7XG5jb25zdCBDbHVzdGVyU3Vic2NyaWJlckdyb3VwXzEgPSByZXF1aXJlKFwiLi9DbHVzdGVyU3Vic2NyaWJlckdyb3VwXCIpO1xuY29uc3QgZGVidWcgPSAoMCwgdXRpbHNfMS5EZWJ1ZykoXCJjbHVzdGVyXCIpO1xuY29uc3QgUkVKRUNUX09WRVJXUklUVEVOX0NPTU1BTkRTID0gbmV3IFdlYWtTZXQoKTtcbi8qKlxuICogQ2xpZW50IGZvciB0aGUgb2ZmaWNpYWwgUmVkaXMgQ2x1c3RlclxuICovXG5jbGFzcyBDbHVzdGVyIGV4dGVuZHMgQ29tbWFuZGVyXzEuZGVmYXVsdCB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBDbHVzdGVyLlxuICAgICAqL1xuICAgIC8vVE9ETzogQWRkIGFuIG9wdGlvbiB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgc2hhcmRlZCBQdWJTdWJcbiAgICBjb25zdHJ1Y3RvcihzdGFydHVwTm9kZXMsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNsb3RzID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaWdub3JlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9ncm91cHNJZHMgPSB7fTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBpZ25vcmVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2dyb3Vwc0J5U2xvdCA9IEFycmF5KDE2Mzg0KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBpZ25vcmVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaXNDbHVzdGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXRyeUF0dGVtcHRzID0gMDtcbiAgICAgICAgdGhpcy5kZWxheVF1ZXVlID0gbmV3IERlbGF5UXVldWVfMS5kZWZhdWx0KCk7XG4gICAgICAgIHRoaXMub2ZmbGluZVF1ZXVlID0gbmV3IERlcXVlKCk7XG4gICAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3JlZnJlc2hTbG90c0NhY2hlQ2FsbGJhY2tzID0gW107XG4gICAgICAgIHRoaXMuX2F1dG9QaXBlbGluZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuX3J1bm5pbmdBdXRvUGlwZWxpbmVzID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9yZWFkeURlbGF5ZWRDYWxsYmFja3MgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEV2ZXJ5IHRpbWUgQ2x1c3RlciNjb25uZWN0KCkgaXMgY2FsbGVkLCB0aGlzIHZhbHVlIHdpbGwgYmVcbiAgICAgICAgICogYXV0by1pbmNyZW1lbnRpbmcuIFRoZSBwdXJwb3NlIG9mIHRoaXMgdmFsdWUgaXMgdXNlZCBmb3JcbiAgICAgICAgICogZGlzY2FyZGluZyBwcmV2aW91cyBjb25uZWN0IGF0dGFtcHRzIHdoZW4gY3JlYXRpbmcgYSBuZXdcbiAgICAgICAgICogY29ubmVjdGlvbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbkVwb2NoID0gMDtcbiAgICAgICAgZXZlbnRzXzEuRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuc3RhcnR1cE5vZGVzID0gc3RhcnR1cE5vZGVzO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSAoMCwgdXRpbHNfMS5kZWZhdWx0cykoe30sIG9wdGlvbnMsIENsdXN0ZXJPcHRpb25zXzEuREVGQVVMVF9DTFVTVEVSX09QVElPTlMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hhcmRlZFN1YnNjcmliZXJzID09IHRydWUpXG4gICAgICAgICAgICB0aGlzLnNoYXJkZWRTdWJzY3JpYmVycyA9IG5ldyBDbHVzdGVyU3Vic2NyaWJlckdyb3VwXzEuZGVmYXVsdCh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWRpc09wdGlvbnMgJiZcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5yZWRpc09wdGlvbnMua2V5UHJlZml4ICYmXG4gICAgICAgICAgICAhdGhpcy5vcHRpb25zLmtleVByZWZpeCkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmtleVByZWZpeCA9IHRoaXMub3B0aW9ucy5yZWRpc09wdGlvbnMua2V5UHJlZml4O1xuICAgICAgICB9XG4gICAgICAgIC8vIHZhbGlkYXRlIG9wdGlvbnNcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuc2NhbGVSZWFkcyAhPT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICBbXCJhbGxcIiwgXCJtYXN0ZXJcIiwgXCJzbGF2ZVwiXS5pbmRleE9mKHRoaXMub3B0aW9ucy5zY2FsZVJlYWRzKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvcHRpb24gc2NhbGVSZWFkcyBcIicgK1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2FsZVJlYWRzICtcbiAgICAgICAgICAgICAgICAnXCIuIEV4cGVjdGVkIFwiYWxsXCIsIFwibWFzdGVyXCIsIFwic2xhdmVcIiBvciBhIGN1c3RvbSBmdW5jdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29ubmVjdGlvblBvb2wgPSBuZXcgQ29ubmVjdGlvblBvb2xfMS5kZWZhdWx0KHRoaXMub3B0aW9ucy5yZWRpc09wdGlvbnMpO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25Qb29sLm9uKFwiLW5vZGVcIiwgKHJlZGlzLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW1pdChcIi1ub2RlXCIsIHJlZGlzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvblBvb2wub24oXCIrbm9kZVwiLCAocmVkaXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW1pdChcIitub2RlXCIsIHJlZGlzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvblBvb2wub24oXCJkcmFpblwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXR1cyhcImNsb3NlXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uUG9vbC5vbihcIm5vZGVFcnJvclwiLCAoZXJyb3IsIGtleSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbWl0KFwibm9kZSBlcnJvclwiLCBlcnJvciwga2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlciA9IG5ldyBDbHVzdGVyU3Vic2NyaWJlcl8xLmRlZmF1bHQodGhpcy5jb25uZWN0aW9uUG9vbCwgdGhpcyk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2NyaXB0cykge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5vcHRpb25zLnNjcmlwdHMpLmZvckVhY2goKFtuYW1lLCBkZWZpbml0aW9uXSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tbWFuZChuYW1lLCBkZWZpbml0aW9uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGF6eUNvbm5lY3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKFwid2FpdFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdCgpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhcImNvbm5lY3RpbmcgZmFpbGVkOiAlc1wiLCBlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29ubmVjdCB0byBhIGNsdXN0ZXJcbiAgICAgKi9cbiAgICBjb25uZWN0KCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSBcImNvbm5lY3RpbmdcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID09PSBcImNvbm5lY3RcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID09PSBcInJlYWR5XCIpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUmVkaXMgaXMgYWxyZWFkeSBjb25uZWN0aW5nL2Nvbm5lY3RlZFwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXBvY2ggPSArK3RoaXMuY29ubmVjdGlvbkVwb2NoO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoXCJjb25uZWN0aW5nXCIpO1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlU3RhcnR1cE5vZGVIb3N0bmFtZXMoKVxuICAgICAgICAgICAgICAgIC50aGVuKChub2RlcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25FcG9jaCAhPT0gZXBvY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoXCJkaXNjYXJkIGNvbm5lY3RpbmcgYWZ0ZXIgcmVzb2x2aW5nIHN0YXJ0dXAgbm9kZXMgYmVjYXVzZSBlcG9jaCBub3QgbWF0Y2g6ICVkICE9ICVkXCIsIGVwb2NoLCB0aGlzLmNvbm5lY3Rpb25FcG9jaCk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgcmVkaXNfZXJyb3JzXzEuUmVkaXNFcnJvcihcIkNvbm5lY3Rpb24gaXMgZGlzY2FyZGVkIGJlY2F1c2UgYSBuZXcgY29ubmVjdGlvbiBpcyBtYWRlXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgIT09IFwiY29ubmVjdGluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnKFwiZGlzY2FyZCBjb25uZWN0aW5nIGFmdGVyIHJlc29sdmluZyBzdGFydHVwIG5vZGVzIGJlY2F1c2UgdGhlIHN0YXR1cyBjaGFuZ2VkIHRvICVzXCIsIHRoaXMuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyByZWRpc19lcnJvcnNfMS5SZWRpc0Vycm9yKFwiQ29ubmVjdGlvbiBpcyBhYm9ydGVkXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25Qb29sLnJlc2V0KG5vZGVzKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWFkeUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKFwicmVhZHlcIik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV0cnlBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZU9mZmxpbmVDb21tYW5kcygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Tm9kZXNSZWZyZXNoSW50ZXJ2YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbGV0IGNsb3NlTGlzdGVuZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaExpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZVJlYWR5RGVsYXllZENhbGxiYWNrcyh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIiwgY2xvc2VMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFudWFsbHlDbG9zaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKFwiY29ubmVjdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVSZWFkeUNoZWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWR5Q2hlY2soKGVyciwgZmFpbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgfHwgZmFpbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcIlJlYWR5IGNoZWNrIGZhaWxlZCAoJXMpLiBSZWNvbm5lY3RpbmcuLi5cIiwgZXJyIHx8IGZhaWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IFwiY29ubmVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5SGFuZGxlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHlIYW5kbGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNsb3NlTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFwiTm9uZSBvZiBzdGFydHVwIG5vZGVzIGlzIGF2YWlsYWJsZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcihcInJlZnJlc2hcIiwgcmVmcmVzaExpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VSZWFkeURlbGF5ZWRDYWxsYmFja3MoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5vbmNlKFwicmVmcmVzaFwiLCByZWZyZXNoTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZShcImNsb3NlXCIsIGNsb3NlTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZShcImNsb3NlXCIsIHRoaXMuaGFuZGxlQ2xvc2VFdmVudC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hTbG90c0NhY2hlKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAmJiBlcnIubWVzc2FnZSA9PT0gQ2x1c3RlckFsbEZhaWxlZEVycm9yXzEuZGVmYXVsdC5kZWZhdWx0TWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVkaXNfMS5kZWZhdWx0LnByb3RvdHlwZS5zaWxlbnRFbWl0LmNhbGwodGhpcywgXCJlcnJvclwiLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uUG9vbC5yZXNldChbXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmliZXIuc3RhcnQoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNoYXJkZWRTdWJzY3JpYmVycykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJkZWRTdWJzY3JpYmVycy5zdGFydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXR1cyhcImNsb3NlXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xvc2VFdmVudChlcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlUmVhZHlEZWxheWVkQ2FsbGJhY2tzKGVycik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERpc2Nvbm5lY3QgZnJvbSBldmVyeSBub2RlIGluIHRoZSBjbHVzdGVyLlxuICAgICAqL1xuICAgIGRpc2Nvbm5lY3QocmVjb25uZWN0ID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5zdGF0dXM7XG4gICAgICAgIHRoaXMuc2V0U3RhdHVzKFwiZGlzY29ubmVjdGluZ1wiKTtcbiAgICAgICAgaWYgKCFyZWNvbm5lY3QpIHtcbiAgICAgICAgICAgIHRoaXMubWFudWFsbHlDbG9zaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZWNvbm5lY3RUaW1lb3V0ICYmICFyZWNvbm5lY3QpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlY29ubmVjdFRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIGRlYnVnKFwiQ2FuY2VsZWQgcmVjb25uZWN0aW5nIGF0dGVtcHRzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXJOb2Rlc1JlZnJlc2hJbnRlcnZhbCgpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZXIuc3RvcCgpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNoYXJkZWRTdWJzY3JpYmVycykge1xuICAgICAgICAgICAgdGhpcy5zaGFyZGVkU3Vic2NyaWJlcnMuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFwid2FpdFwiKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXR1cyhcImNsb3NlXCIpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDbG9zZUV2ZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25Qb29sLnJlc2V0KFtdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBRdWl0IHRoZSBjbHVzdGVyIGdyYWNlZnVsbHkuXG4gICAgICovXG4gICAgcXVpdChjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSB0aGlzLnN0YXR1cztcbiAgICAgICAgdGhpcy5zZXRTdGF0dXMoXCJkaXNjb25uZWN0aW5nXCIpO1xuICAgICAgICB0aGlzLm1hbnVhbGx5Q2xvc2luZyA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLnJlY29ubmVjdFRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlY29ubmVjdFRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyTm9kZXNSZWZyZXNoSW50ZXJ2YWwoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVyLnN0b3AoKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaGFyZGVkU3Vic2NyaWJlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2hhcmRlZFN1YnNjcmliZXJzLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzID09PSBcIndhaXRcIikge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gKDAsIHN0YW5kYXJkX2FzX2NhbGxiYWNrXzEuZGVmYXVsdCkoUHJvbWlzZS5yZXNvbHZlKFwiT0tcIiksIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIC8vIHVzZSBzZXRJbW1lZGlhdGUgdG8gbWFrZSBzdXJlIFwiY2xvc2VcIiBldmVudFxuICAgICAgICAgICAgLy8gYmVpbmcgZW1pdHRlZCBhZnRlciBxdWl0KCkgaXMgcmV0dXJuZWRcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoXCJjbG9zZVwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNsb3NlRXZlbnQoKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoMCwgc3RhbmRhcmRfYXNfY2FsbGJhY2tfMS5kZWZhdWx0KShQcm9taXNlLmFsbCh0aGlzLm5vZGVzKCkubWFwKChub2RlKSA9PiBub2RlLnF1aXQoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgdGhlIGVycm9yIGNhdXNlZCBieSBkaXNjb25uZWN0aW5nIHNpbmNlXG4gICAgICAgICAgICAvLyB3ZSdyZSBkaXNjb25uZWN0aW5nLi4uXG4gICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgPT09IHV0aWxzXzEuQ09OTkVDVElPTl9DTE9TRURfRVJST1JfTVNHKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiT0tcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSkpKS50aGVuKCgpID0+IFwiT0tcIiksIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHNhbWUgc3RhcnR1cCBub2RlcyBhbmQgb3B0aW9ucyBhcyB0aGUgY3VycmVudCBvbmUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogdmFyIGNsdXN0ZXIgPSBuZXcgUmVkaXMuQ2x1c3RlcihbeyBob3N0OiBcIjEyNy4wLjAuMVwiLCBwb3J0OiBcIjMwMDAxXCIgfV0pO1xuICAgICAqIHZhciBhbm90aGVyQ2x1c3RlciA9IGNsdXN0ZXIuZHVwbGljYXRlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZHVwbGljYXRlKG92ZXJyaWRlU3RhcnR1cE5vZGVzID0gW10sIG92ZXJyaWRlT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0dXBOb2RlcyA9IG92ZXJyaWRlU3RhcnR1cE5vZGVzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gb3ZlcnJpZGVTdGFydHVwTm9kZXNcbiAgICAgICAgICAgIDogdGhpcy5zdGFydHVwTm9kZXMuc2xpY2UoMCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdGlvbnMsIG92ZXJyaWRlT3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBuZXcgQ2x1c3RlcihzdGFydHVwTm9kZXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgbm9kZXMgd2l0aCB0aGUgc3BlY2lmaWVkIHJvbGVcbiAgICAgKi9cbiAgICBub2Rlcyhyb2xlID0gXCJhbGxcIikge1xuICAgICAgICBpZiAocm9sZSAhPT0gXCJhbGxcIiAmJiByb2xlICE9PSBcIm1hc3RlclwiICYmIHJvbGUgIT09IFwic2xhdmVcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJvbGUgXCInICsgcm9sZSArICdcIi4gRXhwZWN0ZWQgXCJhbGxcIiwgXCJtYXN0ZXJcIiBvciBcInNsYXZlXCInKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uUG9vbC5nZXROb2Rlcyhyb2xlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBuZWVkZWQgaW4gb3JkZXIgbm90IHRvIGluc3RhbGwgYSBsaXN0ZW5lciBmb3IgZWFjaCBhdXRvIHBpcGVsaW5lXG4gICAgICpcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgZGVsYXlVbnRpbFJlYWR5KGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX3JlYWR5RGVsYXllZENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBudW1iZXIgb2YgY29tbWFuZHMgcXVldWVkIGluIGF1dG9tYXRpYyBwaXBlbGluZXMuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5vdCBhdmFpbGFibGUgKGFuZCByZXR1cm5zIDApIHVudGlsIHRoZSBjbHVzdGVyIGlzIGNvbm5lY3RlZCBhbmQgc2xvdHMgaW5mb3JtYXRpb24gaGF2ZSBiZWVuIHJlY2VpdmVkLlxuICAgICAqL1xuICAgIGdldCBhdXRvUGlwZWxpbmVRdWV1ZVNpemUoKSB7XG4gICAgICAgIGxldCBxdWV1ZWQgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHBpcGVsaW5lIG9mIHRoaXMuX2F1dG9QaXBlbGluZXMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIHF1ZXVlZCArPSBwaXBlbGluZS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXVlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVmcmVzaCB0aGUgc2xvdCBjYWNoZVxuICAgICAqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIHJlZnJlc2hTbG90c0NhY2hlKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFNsb3RzQ2FjaGVDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNSZWZyZXNoaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1JlZnJlc2hpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX3JlZnJlc2hTbG90c0NhY2hlQ2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFNsb3RzQ2FjaGVDYWxsYmFja3MgPSBbXTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSAoMCwgdXRpbHNfMS5zaHVmZmxlKSh0aGlzLmNvbm5lY3Rpb25Qb29sLmdldE5vZGVzKCkpO1xuICAgICAgICBsZXQgbGFzdE5vZGVFcnJvciA9IG51bGw7XG4gICAgICAgIGZ1bmN0aW9uIHRyeU5vZGUoaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gbm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgQ2x1c3RlckFsbEZhaWxlZEVycm9yXzEuZGVmYXVsdChDbHVzdGVyQWxsRmFpbGVkRXJyb3JfMS5kZWZhdWx0LmRlZmF1bHRNZXNzYWdlLCBsYXN0Tm9kZUVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYCR7bm9kZS5vcHRpb25zLmhvc3R9OiR7bm9kZS5vcHRpb25zLnBvcnR9YDtcbiAgICAgICAgICAgIGRlYnVnKFwiZ2V0dGluZyBzbG90IGNhY2hlIGZyb20gJXNcIiwga2V5KTtcbiAgICAgICAgICAgIF90aGlzLmdldEluZm9Gcm9tTm9kZShub2RlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfdGhpcy5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNsb3NlXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyKG5ldyBFcnJvcihcIkNsdXN0ZXIgaXMgZGlzY29ubmVjdGVkLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJkaXNjb25uZWN0aW5nXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcihuZXcgRXJyb3IoXCJDbHVzdGVyIGlzIGRpc2Nvbm5lY3RpbmcuXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KFwibm9kZSBlcnJvclwiLCBlcnIsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGxhc3ROb2RlRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgIHRyeU5vZGUoaW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoXCJyZWZyZXNoXCIpO1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5Tm9kZSgwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIHNlbmRDb21tYW5kKGNvbW1hbmQsIHN0cmVhbSwgbm9kZSkge1xuICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IFwid2FpdFwiKSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3QoKS5jYXRjaCh1dGlsc18xLm5vb3ApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gXCJlbmRcIikge1xuICAgICAgICAgICAgY29tbWFuZC5yZWplY3QobmV3IEVycm9yKHV0aWxzXzEuQ09OTkVDVElPTl9DTE9TRURfRVJST1JfTVNHKSk7XG4gICAgICAgICAgICByZXR1cm4gY29tbWFuZC5wcm9taXNlO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0byA9IHRoaXMub3B0aW9ucy5zY2FsZVJlYWRzO1xuICAgICAgICBpZiAodG8gIT09IFwibWFzdGVyXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzQ29tbWFuZFJlYWRPbmx5ID0gY29tbWFuZC5pc1JlYWRPbmx5IHx8XG4gICAgICAgICAgICAgICAgKCgwLCBjb21tYW5kc18xLmV4aXN0cykoY29tbWFuZC5uYW1lKSAmJiAoMCwgY29tbWFuZHNfMS5oYXNGbGFnKShjb21tYW5kLm5hbWUsIFwicmVhZG9ubHlcIikpO1xuICAgICAgICAgICAgaWYgKCFpc0NvbW1hbmRSZWFkT25seSkge1xuICAgICAgICAgICAgICAgIHRvID0gXCJtYXN0ZXJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgdGFyZ2V0U2xvdCA9IG5vZGUgPyBub2RlLnNsb3QgOiBjb21tYW5kLmdldFNsb3QoKTtcbiAgICAgICAgY29uc3QgdHRsID0ge307XG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCFub2RlICYmICFSRUpFQ1RfT1ZFUldSSVRURU5fQ09NTUFORFMuaGFzKGNvbW1hbmQpKSB7XG4gICAgICAgICAgICBSRUpFQ1RfT1ZFUldSSVRURU5fQ09NTUFORFMuYWRkKGNvbW1hbmQpO1xuICAgICAgICAgICAgY29uc3QgcmVqZWN0ID0gY29tbWFuZC5yZWplY3Q7XG4gICAgICAgICAgICBjb21tYW5kLnJlamVjdCA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0aWFsVHJ5ID0gdHJ5Q29ubmVjdGlvbi5iaW5kKG51bGwsIHRydWUpO1xuICAgICAgICAgICAgICAgIF90aGlzLmhhbmRsZUVycm9yKGVyciwgdHRsLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vdmVkOiBmdW5jdGlvbiAoc2xvdCwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcImNvbW1hbmQgJXMgaXMgbW92ZWQgdG8gJXNcIiwgY29tbWFuZC5uYW1lLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2xvdCA9IE51bWJlcihzbG90KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5zbG90c1tzbG90XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnNsb3RzW3Nsb3RdWzBdID0ga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc2xvdHNbc2xvdF0gPSBba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9ncm91cHNCeVNsb3Rbc2xvdF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9ncm91cHNJZHNbX3RoaXMuc2xvdHNbc2xvdF0uam9pbihcIjtcIildO1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuY29ubmVjdGlvblBvb2wuZmluZE9yQ3JlYXRlKF90aGlzLm5hdE1hcHBlcihrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeUNvbm5lY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKFwicmVmcmVzaGluZyBzbG90IGNhY2hlcy4uLiAodHJpZ2dlcmVkIGJ5IE1PVkVEIGVycm9yKVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlZnJlc2hTbG90c0NhY2hlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFzazogZnVuY3Rpb24gKHNsb3QsIGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoXCJjb21tYW5kICVzIGlzIHJlcXVpcmVkIHRvIGFzayAlczolc1wiLCBjb21tYW5kLm5hbWUsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSBfdGhpcy5uYXRNYXBwZXIoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNvbm5lY3Rpb25Qb29sLmZpbmRPckNyZWF0ZShtYXBwZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5Q29ubmVjdGlvbihmYWxzZSwgYCR7bWFwcGVkLmhvc3R9OiR7bWFwcGVkLnBvcnR9YCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRyeWFnYWluOiBwYXJ0aWFsVHJ5LFxuICAgICAgICAgICAgICAgICAgICBjbHVzdGVyRG93bjogcGFydGlhbFRyeSxcbiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbkNsb3NlZDogcGFydGlhbFRyeSxcbiAgICAgICAgICAgICAgICAgICAgbWF4UmVkaXJlY3Rpb25zOiBmdW5jdGlvbiAocmVkaXJlY3Rpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0LmNhbGwoY29tbWFuZCwgcmVkaXJlY3Rpb25FcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QuY2FsbChjb21tYW5kLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0cnlDb25uZWN0aW9uKCk7XG4gICAgICAgIGZ1bmN0aW9uIHRyeUNvbm5lY3Rpb24ocmFuZG9tLCBhc2tpbmcpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5zdGF0dXMgPT09IFwiZW5kXCIpIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kLnJlamVjdChuZXcgcmVkaXNfZXJyb3JzXzEuQWJvcnRFcnJvcihcIkNsdXN0ZXIgaXMgZW5kZWQuXCIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcmVkaXM7XG4gICAgICAgICAgICBpZiAoX3RoaXMuc3RhdHVzID09PSBcInJlYWR5XCIgfHwgY29tbWFuZC5uYW1lID09PSBcImNsdXN0ZXJcIikge1xuICAgICAgICAgICAgICAgIGlmIChub2RlICYmIG5vZGUucmVkaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVkaXMgPSBub2RlLnJlZGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChDb21tYW5kXzEuZGVmYXVsdC5jaGVja0ZsYWcoXCJFTlRFUl9TVUJTQ1JJQkVSX01PREVcIiwgY29tbWFuZC5uYW1lKSB8fFxuICAgICAgICAgICAgICAgICAgICBDb21tYW5kXzEuZGVmYXVsdC5jaGVja0ZsYWcoXCJFWElUX1NVQlNDUklCRVJfTU9ERVwiLCBjb21tYW5kLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLnNoYXJkZWRTdWJzY3JpYmVycyA9PSB0cnVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoY29tbWFuZC5uYW1lID09IFwic3N1YnNjcmliZVwiIHx8IGNvbW1hbmQubmFtZSA9PSBcInN1bnN1YnNjcmliZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViID0gX3RoaXMuc2hhcmRlZFN1YnNjcmliZXJzLmdldFJlc3BvbnNpYmxlU3Vic2NyaWJlcih0YXJnZXRTbG90KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdGF0dXMgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kLm5hbWUgPT0gXCJzc3Vic2NyaWJlXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gX3RoaXMuc2hhcmRlZFN1YnNjcmliZXJzLmFkZENoYW5uZWxzKGNvbW1hbmQuZ2V0S2V5cygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kLm5hbWUgPT0gXCJzdW5zdWJzY3JpYmVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBfdGhpcy5zaGFyZGVkU3Vic2NyaWJlcnMucmVtb3ZlQ2hhbm5lbHMoY29tbWFuZC5nZXRLZXlzKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcyA9IHN1Yi5nZXRJbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC5yZWplY3QobmV3IHJlZGlzX2Vycm9yc18xLkFib3J0RXJyb3IoXCJDYW4ndCBhZGQgb3IgcmVtb3ZlIHRoZSBnaXZlbiBjaGFubmVscy4gQXJlIHRoZXkgaW4gdGhlIHNhbWUgc2xvdD9cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXMgPSBfdGhpcy5zdWJzY3JpYmVyLmdldEluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWRpcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC5yZWplY3QobmV3IHJlZGlzX2Vycm9yc18xLkFib3J0RXJyb3IoXCJObyBzdWJzY3JpYmVyIGZvciB0aGUgY2x1c3RlclwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmFuZG9tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhcmdldFNsb3QgPT09IFwibnVtYmVyXCIgJiYgX3RoaXMuc2xvdHNbdGFyZ2V0U2xvdF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlS2V5cyA9IF90aGlzLnNsb3RzW3RhcmdldFNsb3RdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdG8gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IG5vZGVLZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuY29ubmVjdGlvblBvb2wuZ2V0SW5zdGFuY2VCeUtleShrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXMgPSB0byhub2RlcywgY29tbWFuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlZGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXMgPSAoMCwgdXRpbHNfMS5zYW1wbGUpKHJlZGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZGlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcyA9IG5vZGVzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG8gPT09IFwiYWxsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9ICgwLCB1dGlsc18xLnNhbXBsZSkobm9kZUtleXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRvID09PSBcInNsYXZlXCIgJiYgbm9kZUtleXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gKDAsIHV0aWxzXzEuc2FtcGxlKShub2RlS2V5cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBub2RlS2V5c1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcyA9IF90aGlzLmNvbm5lY3Rpb25Qb29sLmdldEluc3RhbmNlQnlLZXkoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNraW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXMgPSBfdGhpcy5jb25uZWN0aW9uUG9vbC5nZXRJbnN0YW5jZUJ5S2V5KGFza2luZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXMuYXNraW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWRpcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgdG8gPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdGhpcy5jb25uZWN0aW9uUG9vbC5nZXRTYW1wbGVJbnN0YW5jZSh0bykpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNvbm5lY3Rpb25Qb29sLmdldFNhbXBsZUluc3RhbmNlKFwiYWxsXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChub2RlICYmICFub2RlLnJlZGlzKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmVkaXMgPSByZWRpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVkaXMpIHtcbiAgICAgICAgICAgICAgICByZWRpcy5zZW5kQ29tbWFuZChjb21tYW5kLCBzdHJlYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoX3RoaXMub3B0aW9ucy5lbmFibGVPZmZsaW5lUXVldWUpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5vZmZsaW5lUXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IGNvbW1hbmQsXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbTogc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29tbWFuZC5yZWplY3QobmV3IEVycm9yKFwiQ2x1c3RlciBpc24ndCByZWFkeSBhbmQgZW5hYmxlT2ZmbGluZVF1ZXVlIG9wdGlvbnMgaXMgZmFsc2VcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21tYW5kLnByb21pc2U7XG4gICAgfVxuICAgIHNzY2FuU3RyZWFtKGtleSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTY2FuU3RyZWFtKFwic3NjYW5cIiwgeyBrZXksIG9wdGlvbnMgfSk7XG4gICAgfVxuICAgIHNzY2FuQnVmZmVyU3RyZWFtKGtleSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTY2FuU3RyZWFtKFwic3NjYW5CdWZmZXJcIiwgeyBrZXksIG9wdGlvbnMgfSk7XG4gICAgfVxuICAgIGhzY2FuU3RyZWFtKGtleSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTY2FuU3RyZWFtKFwiaHNjYW5cIiwgeyBrZXksIG9wdGlvbnMgfSk7XG4gICAgfVxuICAgIGhzY2FuQnVmZmVyU3RyZWFtKGtleSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTY2FuU3RyZWFtKFwiaHNjYW5CdWZmZXJcIiwgeyBrZXksIG9wdGlvbnMgfSk7XG4gICAgfVxuICAgIHpzY2FuU3RyZWFtKGtleSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTY2FuU3RyZWFtKFwienNjYW5cIiwgeyBrZXksIG9wdGlvbnMgfSk7XG4gICAgfVxuICAgIHpzY2FuQnVmZmVyU3RyZWFtKGtleSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTY2FuU3RyZWFtKFwienNjYW5CdWZmZXJcIiwgeyBrZXksIG9wdGlvbnMgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICBoYW5kbGVFcnJvcihlcnJvciwgdHRsLCBoYW5kbGVycykge1xuICAgICAgICBpZiAodHlwZW9mIHR0bC52YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgdHRsLnZhbHVlID0gdGhpcy5vcHRpb25zLm1heFJlZGlyZWN0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHR0bC52YWx1ZSAtPSAxO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0dGwudmFsdWUgPD0gMCkge1xuICAgICAgICAgICAgaGFuZGxlcnMubWF4UmVkaXJlY3Rpb25zKG5ldyBFcnJvcihcIlRvbyBtYW55IENsdXN0ZXIgcmVkaXJlY3Rpb25zLiBMYXN0IGVycm9yOiBcIiArIGVycm9yKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXJydiA9IGVycm9yLm1lc3NhZ2Uuc3BsaXQoXCIgXCIpO1xuICAgICAgICBpZiAoZXJydlswXSA9PT0gXCJNT1ZFRFwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5vcHRpb25zLnJldHJ5RGVsYXlPbk1vdmVkO1xuICAgICAgICAgICAgaWYgKHRpbWVvdXQgJiYgdHlwZW9mIHRpbWVvdXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGF5UXVldWUucHVzaChcIm1vdmVkXCIsIGhhbmRsZXJzLm1vdmVkLmJpbmQobnVsbCwgZXJydlsxXSwgZXJydlsyXSksIHsgdGltZW91dCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZXJzLm1vdmVkKGVycnZbMV0sIGVycnZbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGVycnZbMF0gPT09IFwiQVNLXCIpIHtcbiAgICAgICAgICAgIGhhbmRsZXJzLmFzayhlcnJ2WzFdLCBlcnJ2WzJdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlcnJ2WzBdID09PSBcIlRSWUFHQUlOXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsYXlRdWV1ZS5wdXNoKFwidHJ5YWdhaW5cIiwgaGFuZGxlcnMudHJ5YWdhaW4sIHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLm9wdGlvbnMucmV0cnlEZWxheU9uVHJ5QWdhaW4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlcnJ2WzBdID09PSBcIkNMVVNURVJET1dOXCIgJiZcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5yZXRyeURlbGF5T25DbHVzdGVyRG93biA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVsYXlRdWV1ZS5wdXNoKFwiY2x1c3RlcmRvd25cIiwgaGFuZGxlcnMuY29ubmVjdGlvbkNsb3NlZCwge1xuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMub3B0aW9ucy5yZXRyeURlbGF5T25DbHVzdGVyRG93bixcbiAgICAgICAgICAgICAgICBjYWxsYmFjazogdGhpcy5yZWZyZXNoU2xvdHNDYWNoZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXJyb3IubWVzc2FnZSA9PT0gdXRpbHNfMS5DT05ORUNUSU9OX0NMT1NFRF9FUlJPUl9NU0cgJiZcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5yZXRyeURlbGF5T25GYWlsb3ZlciA+IDAgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID09PSBcInJlYWR5XCIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsYXlRdWV1ZS5wdXNoKFwiZmFpbG92ZXJcIiwgaGFuZGxlcnMuY29ubmVjdGlvbkNsb3NlZCwge1xuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMub3B0aW9ucy5yZXRyeURlbGF5T25GYWlsb3ZlcixcbiAgICAgICAgICAgICAgICBjYWxsYmFjazogdGhpcy5yZWZyZXNoU2xvdHNDYWNoZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVycy5kZWZhdWx0cygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlc2V0T2ZmbGluZVF1ZXVlKCkge1xuICAgICAgICB0aGlzLm9mZmxpbmVRdWV1ZSA9IG5ldyBEZXF1ZSgpO1xuICAgIH1cbiAgICBjbGVhck5vZGVzUmVmcmVzaEludGVydmFsKCkge1xuICAgICAgICBpZiAodGhpcy5zbG90c1RpbWVyKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zbG90c1RpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuc2xvdHNUaW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVzZXROb2Rlc1JlZnJlc2hJbnRlcnZhbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2xvdHNUaW1lciB8fCAhdGhpcy5vcHRpb25zLnNsb3RzUmVmcmVzaEludGVydmFsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV4dFJvdW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zbG90c1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVidWcoJ3JlZnJlc2hpbmcgc2xvdCBjYWNoZXMuLi4gKHRyaWdnZXJlZCBieSBcInNsb3RzUmVmcmVzaEludGVydmFsXCIgb3B0aW9uKScpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFNsb3RzQ2FjaGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBuZXh0Um91bmQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHRoaXMub3B0aW9ucy5zbG90c1JlZnJlc2hJbnRlcnZhbCk7XG4gICAgICAgIH07XG4gICAgICAgIG5leHRSb3VuZCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgY2x1c3RlciBpbnN0YW5jZSdzIHN0YXR1c1xuICAgICAqL1xuICAgIHNldFN0YXR1cyhzdGF0dXMpIHtcbiAgICAgICAgZGVidWcoXCJzdGF0dXM6ICVzIC0+ICVzXCIsIHRoaXMuc3RhdHVzIHx8IFwiW2VtcHR5XVwiLCBzdGF0dXMpO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoc3RhdHVzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIGNsb3NlZCB0byBjaGVjayB3aGV0aGVyIGEgcmVjb25uZWN0aW9uIHNob3VsZCBiZSBtYWRlXG4gICAgICovXG4gICAgaGFuZGxlQ2xvc2VFdmVudChyZWFzb24pIHtcbiAgICAgICAgaWYgKHJlYXNvbikge1xuICAgICAgICAgICAgZGVidWcoXCJjbG9zZWQgYmVjYXVzZSAlc1wiLCByZWFzb24pO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXRyeURlbGF5O1xuICAgICAgICBpZiAoIXRoaXMubWFudWFsbHlDbG9zaW5nICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmNsdXN0ZXJSZXRyeVN0cmF0ZWd5ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHJ5RGVsYXkgPSB0aGlzLm9wdGlvbnMuY2x1c3RlclJldHJ5U3RyYXRlZ3kuY2FsbCh0aGlzLCArK3RoaXMucmV0cnlBdHRlbXB0cywgcmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJldHJ5RGVsYXkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKFwicmVjb25uZWN0aW5nXCIpO1xuICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhcIkNsdXN0ZXIgaXMgZGlzY29ubmVjdGVkLiBSZXRyeWluZyBhZnRlciAlZG1zXCIsIHJldHJ5RGVsYXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdCgpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoXCJHb3QgZXJyb3IgJXMgd2hlbiByZWNvbm5lY3RpbmcuIElnbm9yaW5nLi4uXCIsIGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCByZXRyeURlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKFwiZW5kXCIpO1xuICAgICAgICAgICAgdGhpcy5mbHVzaFF1ZXVlKG5ldyBFcnJvcihcIk5vbmUgb2Ygc3RhcnR1cCBub2RlcyBpcyBhdmFpbGFibGVcIikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZsdXNoIG9mZmxpbmUgcXVldWUgd2l0aCBlcnJvci5cbiAgICAgKi9cbiAgICBmbHVzaFF1ZXVlKGVycm9yKSB7XG4gICAgICAgIGxldCBpdGVtO1xuICAgICAgICB3aGlsZSAoKGl0ZW0gPSB0aGlzLm9mZmxpbmVRdWV1ZS5zaGlmdCgpKSkge1xuICAgICAgICAgICAgaXRlbS5jb21tYW5kLnJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZXhlY3V0ZU9mZmxpbmVDb21tYW5kcygpIHtcbiAgICAgICAgaWYgKHRoaXMub2ZmbGluZVF1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgZGVidWcoXCJzZW5kICVkIGNvbW1hbmRzIGluIG9mZmxpbmUgcXVldWVcIiwgdGhpcy5vZmZsaW5lUXVldWUubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IG9mZmxpbmVRdWV1ZSA9IHRoaXMub2ZmbGluZVF1ZXVlO1xuICAgICAgICAgICAgdGhpcy5yZXNldE9mZmxpbmVRdWV1ZSgpO1xuICAgICAgICAgICAgbGV0IGl0ZW07XG4gICAgICAgICAgICB3aGlsZSAoKGl0ZW0gPSBvZmZsaW5lUXVldWUuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRDb21tYW5kKGl0ZW0uY29tbWFuZCwgaXRlbS5zdHJlYW0sIGl0ZW0ubm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmF0TWFwcGVyKG5vZGVLZXkpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdHlwZW9mIG5vZGVLZXkgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgID8gbm9kZUtleVxuICAgICAgICAgICAgOiBgJHtub2RlS2V5Lmhvc3R9OiR7bm9kZUtleS5wb3J0fWA7XG4gICAgICAgIGxldCBtYXBwZWQgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm5hdE1hcCAmJiB0eXBlb2YgdGhpcy5vcHRpb25zLm5hdE1hcCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBtYXBwZWQgPSB0aGlzLm9wdGlvbnMubmF0TWFwKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLm5hdE1hcCAmJiB0eXBlb2YgdGhpcy5vcHRpb25zLm5hdE1hcCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgbWFwcGVkID0gdGhpcy5vcHRpb25zLm5hdE1hcFtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXBwZWQpIHtcbiAgICAgICAgICAgIGRlYnVnKFwiTkFUIG1hcHBpbmcgJXMgLT4gJU9cIiwga2V5LCBtYXBwZWQpO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG1hcHBlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVvZiBub2RlS2V5ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICA/ICgwLCB1dGlsXzEubm9kZUtleVRvUmVkaXNPcHRpb25zKShub2RlS2V5KVxuICAgICAgICAgICAgOiBub2RlS2V5O1xuICAgIH1cbiAgICBnZXRJbmZvRnJvbU5vZGUocmVkaXMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghcmVkaXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoXCJOb2RlIGlzIGRpc2Nvbm5lY3RlZFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXNlIGEgZHVwbGljYXRpb24gb2YgdGhlIGNvbm5lY3Rpb24gdG8gYXZvaWRcbiAgICAgICAgLy8gdGltZW91dHMgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBpbiB0aGUgYmxvY2tpbmdcbiAgICAgICAgLy8gbW9kZSAoZS5nLiB3YWl0aW5nIGZvciBCTFBPUCkuXG4gICAgICAgIGNvbnN0IGR1cGxpY2F0ZWRDb25uZWN0aW9uID0gcmVkaXMuZHVwbGljYXRlKHtcbiAgICAgICAgICAgIGVuYWJsZU9mZmxpbmVRdWV1ZTogdHJ1ZSxcbiAgICAgICAgICAgIGVuYWJsZVJlYWR5Q2hlY2s6IGZhbHNlLFxuICAgICAgICAgICAgcmV0cnlTdHJhdGVneTogbnVsbCxcbiAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lOiAoMCwgdXRpbF8xLmdldENvbm5lY3Rpb25OYW1lKShcInJlZnJlc2hlclwiLCB0aGlzLm9wdGlvbnMucmVkaXNPcHRpb25zICYmIHRoaXMub3B0aW9ucy5yZWRpc09wdGlvbnMuY29ubmVjdGlvbk5hbWUpLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gSWdub3JlIGVycm9yIGV2ZW50cyBzaW5jZSB3ZSB3aWxsIGhhbmRsZVxuICAgICAgICAvLyBleGNlcHRpb25zIGZvciB0aGUgQ0xVU1RFUiBTTE9UUyBjb21tYW5kLlxuICAgICAgICBkdXBsaWNhdGVkQ29ubmVjdGlvbi5vbihcImVycm9yXCIsIHV0aWxzXzEubm9vcCk7XG4gICAgICAgIGR1cGxpY2F0ZWRDb25uZWN0aW9uLmNsdXN0ZXIoXCJTTE9UU1wiLCAoMCwgdXRpbHNfMS50aW1lb3V0KSgoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGR1cGxpY2F0ZWRDb25uZWN0aW9uLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhcImVycm9yIGVuY291bnRlcmVkIHJ1bm5pbmcgQ0xVU1RFUi5TTE9UUzogJXNcIiwgZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gXCJkaXNjb25uZWN0aW5nXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9PT0gXCJjbG9zZVwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT09IFwiZW5kXCIpIHtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhcImlnbm9yZSBDTFVTVEVSLlNMT1RTIHJlc3VsdHMgKGNvdW50OiAlZCkgc2luY2UgY2x1c3RlciBzdGF0dXMgaXMgJXNcIiwgcmVzdWx0Lmxlbmd0aCwgdGhpcy5zdGF0dXMpO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBbXTtcbiAgICAgICAgICAgIGRlYnVnKFwiY2x1c3RlciBzbG90cyByZXN1bHQgY291bnQ6ICVkXCIsIHJlc3VsdC5sZW5ndGgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IHJlc3VsdFtpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzbG90UmFuZ2VTdGFydCA9IGl0ZW1zWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNsb3RSYW5nZUVuZCA9IGl0ZW1zWzFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMjsgaiA8IGl0ZW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXRlbXNbal1bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLm5hdE1hcHBlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBob3N0OiBpdGVtc1tqXVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ6IGl0ZW1zW2pdWzFdLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZWFkT25seSA9IGogIT09IDI7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChub2RlLmhvc3QgKyBcIjpcIiArIG5vZGUucG9ydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlYnVnKFwiY2x1c3RlciBzbG90cyByZXN1bHQgWyVkXTogc2xvdHMgJWR+JWQgc2VydmVkIGJ5ICVzXCIsIGksIHNsb3RSYW5nZVN0YXJ0LCBzbG90UmFuZ2VFbmQsIGtleXMpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHNsb3QgPSBzbG90UmFuZ2VTdGFydDsgc2xvdCA8PSBzbG90UmFuZ2VFbmQ7IHNsb3QrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNsb3RzW3Nsb3RdID0ga2V5cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBc3NpZ24gdG8gZWFjaCBub2RlIGtleXMgYSBudW1lcmljIHZhbHVlIHRvIG1ha2UgYXV0b3BpcGVsaW5lIGNvbXBhcmlzb24gZmFzdGVyLlxuICAgICAgICAgICAgdGhpcy5fZ3JvdXBzSWRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgIGxldCBqID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTYzODQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9ICh0aGlzLnNsb3RzW2ldIHx8IFtdKS5qb2luKFwiO1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ3JvdXBzQnlTbG90W2ldID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9ncm91cHNJZHNbdGFyZ2V0XSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ncm91cHNJZHNbdGFyZ2V0XSA9ICsrajtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZ3JvdXBzQnlTbG90W2ldID0gdGhpcy5fZ3JvdXBzSWRzW3RhcmdldF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25Qb29sLnJlc2V0KG5vZGVzKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH0sIHRoaXMub3B0aW9ucy5zbG90c1JlZnJlc2hUaW1lb3V0KSk7XG4gICAgfVxuICAgIGludm9rZVJlYWR5RGVsYXllZENhbGxiYWNrcyhlcnIpIHtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuX3JlYWR5RGVsYXllZENhbGxiYWNrcykge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjLCBlcnIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlYWR5RGVsYXllZENhbGxiYWNrcyA9IFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVjayB3aGV0aGVyIENsdXN0ZXIgaXMgYWJsZSB0byBwcm9jZXNzIGNvbW1hbmRzXG4gICAgICovXG4gICAgcmVhZHlDaGVjayhjYWxsYmFjaykge1xuICAgICAgICB0aGlzLmNsdXN0ZXIoXCJJTkZPXCIsIChlcnIsIHJlcykgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXMgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzdGF0ZTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gcmVzLnNwbGl0KFwiXFxyXFxuXCIpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gbGluZXNbaV0uc3BsaXQoXCI6XCIpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJ0c1swXSA9PT0gXCJjbHVzdGVyX3N0YXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBwYXJ0c1sxXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXRlID09PSBcImZhaWxcIikge1xuICAgICAgICAgICAgICAgIGRlYnVnKFwiY2x1c3RlciBzdGF0ZSBub3Qgb2sgKCVzKVwiLCBzdGF0ZSk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgc3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlc29sdmVTcnYoaG9zdG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5yZXNvbHZlU3J2KGhvc3RuYW1lLCAoZXJyLCByZWNvcmRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzLCBncm91cGVkUmVjb3JkcyA9ICgwLCB1dGlsXzEuZ3JvdXBTcnZSZWNvcmRzKShyZWNvcmRzKSwgc29ydGVkS2V5cyA9IE9iamVjdC5rZXlzKGdyb3VwZWRSZWNvcmRzKS5zb3J0KChhLCBiKSA9PiBwYXJzZUludChhKSAtIHBhcnNlSW50KGIpKTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB0cnlGaXJzdE9uZShlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzb3J0ZWRLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHNvcnRlZEtleXNbMF0sIGdyb3VwID0gZ3JvdXBlZFJlY29yZHNba2V5XSwgcmVjb3JkID0gKDAsIHV0aWxfMS53ZWlnaHRTcnZSZWNvcmRzKShncm91cCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZ3JvdXAucmVjb3Jkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZEtleXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmRuc0xvb2t1cChyZWNvcmQubmFtZSkudGhlbigoaG9zdCkgPT4gcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBob3N0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDogcmVjb3JkLnBvcnQsXG4gICAgICAgICAgICAgICAgICAgIH0pLCB0cnlGaXJzdE9uZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeUZpcnN0T25lKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRuc0xvb2t1cChob3N0bmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmRuc0xvb2t1cChob3N0bmFtZSwgKGVyciwgYWRkcmVzcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoXCJmYWlsZWQgdG8gcmVzb2x2ZSBob3N0bmFtZSAlcyB0byBJUDogJXNcIiwgaG9zdG5hbWUsIGVyci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcInJlc29sdmVkIGhvc3RuYW1lICVzIHRvIElQICVzXCIsIGhvc3RuYW1lLCBhZGRyZXNzKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShhZGRyZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZSBzdGFydHVwIG5vZGVzLCBhbmQgcmVzb2x2aW5nIGhvc3RuYW1lcyB0byBJUHMuXG4gICAgICpcbiAgICAgKiBUaGlzIHByb2Nlc3MgaGFwcGVucyBldmVyeSB0aW1lIHdoZW4gI2Nvbm5lY3QoKSBpcyBjYWxsZWQgc2luY2VcbiAgICAgKiAjc3RhcnR1cE5vZGVzIGFuZCBETlMgcmVjb3JkcyBtYXkgY2hhbmFnZS5cbiAgICAgKi9cbiAgICBhc3luYyByZXNvbHZlU3RhcnR1cE5vZGVIb3N0bmFtZXMoKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnN0YXJ0dXBOb2RlcykgfHwgdGhpcy5zdGFydHVwTm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgc3RhcnR1cE5vZGVzYCBzaG91bGQgY29udGFpbiBhdCBsZWFzdCBvbmUgbm9kZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnR1cE5vZGVzID0gKDAsIHV0aWxfMS5ub3JtYWxpemVOb2RlT3B0aW9ucykodGhpcy5zdGFydHVwTm9kZXMpO1xuICAgICAgICBjb25zdCBob3N0bmFtZXMgPSAoMCwgdXRpbF8xLmdldFVuaXF1ZUhvc3RuYW1lc0Zyb21PcHRpb25zKShzdGFydHVwTm9kZXMpO1xuICAgICAgICBpZiAoaG9zdG5hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0dXBOb2RlcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25maWdzID0gYXdhaXQgUHJvbWlzZS5hbGwoaG9zdG5hbWVzLm1hcCgodGhpcy5vcHRpb25zLnVzZVNSVlJlY29yZHMgPyB0aGlzLnJlc29sdmVTcnYgOiB0aGlzLmRuc0xvb2t1cCkuYmluZCh0aGlzKSkpO1xuICAgICAgICBjb25zdCBob3N0bmFtZVRvQ29uZmlnID0gKDAsIHV0aWxzXzEuemlwTWFwKShob3N0bmFtZXMsIGNvbmZpZ3MpO1xuICAgICAgICByZXR1cm4gc3RhcnR1cE5vZGVzLm1hcCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gaG9zdG5hbWVUb0NvbmZpZy5nZXQobm9kZS5ob3N0KTtcbiAgICAgICAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnVzZVNSVlJlY29yZHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgbm9kZSwgY29uZmlnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBub2RlLCB7IGhvc3Q6IGNvbmZpZyB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNyZWF0ZVNjYW5TdHJlYW0oY29tbWFuZCwgeyBrZXksIG9wdGlvbnMgPSB7fSB9KSB7XG4gICAgICAgIHJldHVybiBuZXcgU2NhblN0cmVhbV8xLmRlZmF1bHQoe1xuICAgICAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgcmVkaXM6IHRoaXMsXG4gICAgICAgICAgICBjb21tYW5kOiBjb21tYW5kLFxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuKDAsIGFwcGx5TWl4aW5fMS5kZWZhdWx0KShDbHVzdGVyLCBldmVudHNfMS5FdmVudEVtaXR0ZXIpO1xuKDAsIHRyYW5zYWN0aW9uXzEuYWRkVHJhbnNhY3Rpb25TdXBwb3J0KShDbHVzdGVyLnByb3RvdHlwZSk7XG5leHBvcnRzLmRlZmF1bHQgPSBDbHVzdGVyO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/cluster/index.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/cluster/util.js":
/*!****************************************************!*\
!*** ./node_modules/ioredis/built/cluster/util.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.getConnectionName = exports.weightSrvRecords = exports.groupSrvRecords = exports.getUniqueHostnamesFromOptions = exports.normalizeNodeOptions = exports.nodeKeyToRedisOptions = exports.getNodeKey = void 0;\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(action-browser)/./node_modules/ioredis/built/utils/index.js\");\nconst net_1 = __webpack_require__(/*! net */ \"net\");\nfunction getNodeKey(node) {\n node.port = node.port || 6379;\n node.host = node.host || \"127.0.0.1\";\n return node.host + \":\" + node.port;\n}\nexports.getNodeKey = getNodeKey;\nfunction nodeKeyToRedisOptions(nodeKey) {\n const portIndex = nodeKey.lastIndexOf(\":\");\n if (portIndex === -1) {\n throw new Error(`Invalid node key ${nodeKey}`);\n }\n return {\n host: nodeKey.slice(0, portIndex),\n port: Number(nodeKey.slice(portIndex + 1)),\n };\n}\nexports.nodeKeyToRedisOptions = nodeKeyToRedisOptions;\nfunction normalizeNodeOptions(nodes) {\n return nodes.map((node) => {\n const options = {};\n if (typeof node === \"object\") {\n Object.assign(options, node);\n }\n else if (typeof node === \"string\") {\n Object.assign(options, (0, utils_1.parseURL)(node));\n }\n else if (typeof node === \"number\") {\n options.port = node;\n }\n else {\n throw new Error(\"Invalid argument \" + node);\n }\n if (typeof options.port === \"string\") {\n options.port = parseInt(options.port, 10);\n }\n // Cluster mode only support db 0\n delete options.db;\n if (!options.port) {\n options.port = 6379;\n }\n if (!options.host) {\n options.host = \"127.0.0.1\";\n }\n return (0, utils_1.resolveTLSProfile)(options);\n });\n}\nexports.normalizeNodeOptions = normalizeNodeOptions;\nfunction getUniqueHostnamesFromOptions(nodes) {\n const uniqueHostsMap = {};\n nodes.forEach((node) => {\n uniqueHostsMap[node.host] = true;\n });\n return Object.keys(uniqueHostsMap).filter((host) => !(0, net_1.isIP)(host));\n}\nexports.getUniqueHostnamesFromOptions = getUniqueHostnamesFromOptions;\nfunction groupSrvRecords(records) {\n const recordsByPriority = {};\n for (const record of records) {\n if (!recordsByPriority.hasOwnProperty(record.priority)) {\n recordsByPriority[record.priority] = {\n totalWeight: record.weight,\n records: [record],\n };\n }\n else {\n recordsByPriority[record.priority].totalWeight += record.weight;\n recordsByPriority[record.priority].records.push(record);\n }\n }\n return recordsByPriority;\n}\nexports.groupSrvRecords = groupSrvRecords;\nfunction weightSrvRecords(recordsGroup) {\n if (recordsGroup.records.length === 1) {\n recordsGroup.totalWeight = 0;\n return recordsGroup.records.shift();\n }\n // + `recordsGroup.records.length` to support `weight` 0\n const random = Math.floor(Math.random() * (recordsGroup.totalWeight + recordsGroup.records.length));\n let total = 0;\n for (const [i, record] of recordsGroup.records.entries()) {\n total += 1 + record.weight;\n if (total > random) {\n recordsGroup.totalWeight -= record.weight;\n recordsGroup.records.splice(i, 1);\n return record;\n }\n }\n}\nexports.weightSrvRecords = weightSrvRecords;\nfunction getConnectionName(component, nodeConnectionName) {\n const prefix = `ioredis-cluster(${component})`;\n return nodeConnectionName ? `${prefix}:${nodeConnectionName}` : prefix;\n}\nexports.getConnectionName = getConnectionName;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2NsdXN0ZXIvdXRpbC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCx5QkFBeUIsR0FBRyx3QkFBd0IsR0FBRyx1QkFBdUIsR0FBRyxxQ0FBcUMsR0FBRyw0QkFBNEIsR0FBRyw2QkFBNkIsR0FBRyxrQkFBa0I7QUFDMU0sZ0JBQWdCLG1CQUFPLENBQUMsOEVBQVU7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLGdCQUFLO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQSxzQ0FBc0MsVUFBVTtBQUNoRCxtQ0FBbUMsT0FBTyxHQUFHLG1CQUFtQjtBQUNoRTtBQUNBLHlCQUF5QiIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jbHVzdGVyL3V0aWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldENvbm5lY3Rpb25OYW1lID0gZXhwb3J0cy53ZWlnaHRTcnZSZWNvcmRzID0gZXhwb3J0cy5ncm91cFNydlJlY29yZHMgPSBleHBvcnRzLmdldFVuaXF1ZUhvc3RuYW1lc0Zyb21PcHRpb25zID0gZXhwb3J0cy5ub3JtYWxpemVOb2RlT3B0aW9ucyA9IGV4cG9ydHMubm9kZUtleVRvUmVkaXNPcHRpb25zID0gZXhwb3J0cy5nZXROb2RlS2V5ID0gdm9pZCAwO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbmNvbnN0IG5ldF8xID0gcmVxdWlyZShcIm5ldFwiKTtcbmZ1bmN0aW9uIGdldE5vZGVLZXkobm9kZSkge1xuICAgIG5vZGUucG9ydCA9IG5vZGUucG9ydCB8fCA2Mzc5O1xuICAgIG5vZGUuaG9zdCA9IG5vZGUuaG9zdCB8fCBcIjEyNy4wLjAuMVwiO1xuICAgIHJldHVybiBub2RlLmhvc3QgKyBcIjpcIiArIG5vZGUucG9ydDtcbn1cbmV4cG9ydHMuZ2V0Tm9kZUtleSA9IGdldE5vZGVLZXk7XG5mdW5jdGlvbiBub2RlS2V5VG9SZWRpc09wdGlvbnMobm9kZUtleSkge1xuICAgIGNvbnN0IHBvcnRJbmRleCA9IG5vZGVLZXkubGFzdEluZGV4T2YoXCI6XCIpO1xuICAgIGlmIChwb3J0SW5kZXggPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBub2RlIGtleSAke25vZGVLZXl9YCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGhvc3Q6IG5vZGVLZXkuc2xpY2UoMCwgcG9ydEluZGV4KSxcbiAgICAgICAgcG9ydDogTnVtYmVyKG5vZGVLZXkuc2xpY2UocG9ydEluZGV4ICsgMSkpLFxuICAgIH07XG59XG5leHBvcnRzLm5vZGVLZXlUb1JlZGlzT3B0aW9ucyA9IG5vZGVLZXlUb1JlZGlzT3B0aW9ucztcbmZ1bmN0aW9uIG5vcm1hbGl6ZU5vZGVPcHRpb25zKG5vZGVzKSB7XG4gICAgcmV0dXJuIG5vZGVzLm1hcCgobm9kZSkgPT4ge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihvcHRpb25zLCBub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygbm9kZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihvcHRpb25zLCAoMCwgdXRpbHNfMS5wYXJzZVVSTCkobm9kZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBub2RlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnBvcnQgPSBub2RlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudCBcIiArIG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wb3J0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnBvcnQgPSBwYXJzZUludChvcHRpb25zLnBvcnQsIDEwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDbHVzdGVyIG1vZGUgb25seSBzdXBwb3J0IGRiIDBcbiAgICAgICAgZGVsZXRlIG9wdGlvbnMuZGI7XG4gICAgICAgIGlmICghb3B0aW9ucy5wb3J0KSB7XG4gICAgICAgICAgICBvcHRpb25zLnBvcnQgPSA2Mzc5O1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0aW9ucy5ob3N0KSB7XG4gICAgICAgICAgICBvcHRpb25zLmhvc3QgPSBcIjEyNy4wLjAuMVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoMCwgdXRpbHNfMS5yZXNvbHZlVExTUHJvZmlsZSkob3B0aW9ucyk7XG4gICAgfSk7XG59XG5leHBvcnRzLm5vcm1hbGl6ZU5vZGVPcHRpb25zID0gbm9ybWFsaXplTm9kZU9wdGlvbnM7XG5mdW5jdGlvbiBnZXRVbmlxdWVIb3N0bmFtZXNGcm9tT3B0aW9ucyhub2Rlcykge1xuICAgIGNvbnN0IHVuaXF1ZUhvc3RzTWFwID0ge307XG4gICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICB1bmlxdWVIb3N0c01hcFtub2RlLmhvc3RdID0gdHJ1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModW5pcXVlSG9zdHNNYXApLmZpbHRlcigoaG9zdCkgPT4gISgwLCBuZXRfMS5pc0lQKShob3N0KSk7XG59XG5leHBvcnRzLmdldFVuaXF1ZUhvc3RuYW1lc0Zyb21PcHRpb25zID0gZ2V0VW5pcXVlSG9zdG5hbWVzRnJvbU9wdGlvbnM7XG5mdW5jdGlvbiBncm91cFNydlJlY29yZHMocmVjb3Jkcykge1xuICAgIGNvbnN0IHJlY29yZHNCeVByaW9yaXR5ID0ge307XG4gICAgZm9yIChjb25zdCByZWNvcmQgb2YgcmVjb3Jkcykge1xuICAgICAgICBpZiAoIXJlY29yZHNCeVByaW9yaXR5Lmhhc093blByb3BlcnR5KHJlY29yZC5wcmlvcml0eSkpIHtcbiAgICAgICAgICAgIHJlY29yZHNCeVByaW9yaXR5W3JlY29yZC5wcmlvcml0eV0gPSB7XG4gICAgICAgICAgICAgICAgdG90YWxXZWlnaHQ6IHJlY29yZC53ZWlnaHQsXG4gICAgICAgICAgICAgICAgcmVjb3JkczogW3JlY29yZF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVjb3Jkc0J5UHJpb3JpdHlbcmVjb3JkLnByaW9yaXR5XS50b3RhbFdlaWdodCArPSByZWNvcmQud2VpZ2h0O1xuICAgICAgICAgICAgcmVjb3Jkc0J5UHJpb3JpdHlbcmVjb3JkLnByaW9yaXR5XS5yZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVjb3Jkc0J5UHJpb3JpdHk7XG59XG5leHBvcnRzLmdyb3VwU3J2UmVjb3JkcyA9IGdyb3VwU3J2UmVjb3JkcztcbmZ1bmN0aW9uIHdlaWdodFNydlJlY29yZHMocmVjb3Jkc0dyb3VwKSB7XG4gICAgaWYgKHJlY29yZHNHcm91cC5yZWNvcmRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZWNvcmRzR3JvdXAudG90YWxXZWlnaHQgPSAwO1xuICAgICAgICByZXR1cm4gcmVjb3Jkc0dyb3VwLnJlY29yZHMuc2hpZnQoKTtcbiAgICB9XG4gICAgLy8gKyBgcmVjb3Jkc0dyb3VwLnJlY29yZHMubGVuZ3RoYCB0byBzdXBwb3J0IGB3ZWlnaHRgIDBcbiAgICBjb25zdCByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAocmVjb3Jkc0dyb3VwLnRvdGFsV2VpZ2h0ICsgcmVjb3Jkc0dyb3VwLnJlY29yZHMubGVuZ3RoKSk7XG4gICAgbGV0IHRvdGFsID0gMDtcbiAgICBmb3IgKGNvbnN0IFtpLCByZWNvcmRdIG9mIHJlY29yZHNHcm91cC5yZWNvcmRzLmVudHJpZXMoKSkge1xuICAgICAgICB0b3RhbCArPSAxICsgcmVjb3JkLndlaWdodDtcbiAgICAgICAgaWYgKHRvdGFsID4gcmFuZG9tKSB7XG4gICAgICAgICAgICByZWNvcmRzR3JvdXAudG90YWxXZWlnaHQgLT0gcmVjb3JkLndlaWdodDtcbiAgICAgICAgICAgIHJlY29yZHNHcm91cC5yZWNvcmRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLndlaWdodFNydlJlY29yZHMgPSB3ZWlnaHRTcnZSZWNvcmRzO1xuZnVuY3Rpb24gZ2V0Q29ubmVjdGlvbk5hbWUoY29tcG9uZW50LCBub2RlQ29ubmVjdGlvbk5hbWUpIHtcbiAgICBjb25zdCBwcmVmaXggPSBgaW9yZWRpcy1jbHVzdGVyKCR7Y29tcG9uZW50fSlgO1xuICAgIHJldHVybiBub2RlQ29ubmVjdGlvbk5hbWUgPyBgJHtwcmVmaXh9OiR7bm9kZUNvbm5lY3Rpb25OYW1lfWAgOiBwcmVmaXg7XG59XG5leHBvcnRzLmdldENvbm5lY3Rpb25OYW1lID0gZ2V0Q29ubmVjdGlvbk5hbWU7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/cluster/util.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/connectors/AbstractConnector.js":
/*!********************************************************************!*\
!*** ./node_modules/ioredis/built/connectors/AbstractConnector.js ***!
\********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(action-browser)/./node_modules/ioredis/built/utils/index.js\");\nconst debug = (0, utils_1.Debug)(\"AbstractConnector\");\nclass AbstractConnector {\n constructor(disconnectTimeout) {\n this.connecting = false;\n this.disconnectTimeout = disconnectTimeout;\n }\n check(info) {\n return true;\n }\n disconnect() {\n this.connecting = false;\n if (this.stream) {\n const stream = this.stream; // Make sure callbacks refer to the same instance\n const timeout = setTimeout(() => {\n debug(\"stream %s:%s still open, destroying it\", stream.remoteAddress, stream.remotePort);\n stream.destroy();\n }, this.disconnectTimeout);\n stream.on(\"close\", () => clearTimeout(timeout));\n stream.end();\n }\n }\n}\nexports[\"default\"] = AbstractConnector;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2Nvbm5lY3RvcnMvQWJzdHJhY3RDb25uZWN0b3IuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsZ0JBQWdCLG1CQUFPLENBQUMsOEVBQVU7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWUiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvY29ubmVjdG9ycy9BYnN0cmFjdENvbm5lY3Rvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5jb25zdCBkZWJ1ZyA9ICgwLCB1dGlsc18xLkRlYnVnKShcIkFic3RyYWN0Q29ubmVjdG9yXCIpO1xuY2xhc3MgQWJzdHJhY3RDb25uZWN0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGRpc2Nvbm5lY3RUaW1lb3V0KSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3RUaW1lb3V0ID0gZGlzY29ubmVjdFRpbWVvdXQ7XG4gICAgfVxuICAgIGNoZWNrKGluZm8pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGRpc2Nvbm5lY3QoKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5zdHJlYW0pIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtOyAvLyBNYWtlIHN1cmUgY2FsbGJhY2tzIHJlZmVyIHRvIHRoZSBzYW1lIGluc3RhbmNlXG4gICAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVidWcoXCJzdHJlYW0gJXM6JXMgc3RpbGwgb3BlbiwgZGVzdHJveWluZyBpdFwiLCBzdHJlYW0ucmVtb3RlQWRkcmVzcywgc3RyZWFtLnJlbW90ZVBvcnQpO1xuICAgICAgICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgICAgICB9LCB0aGlzLmRpc2Nvbm5lY3RUaW1lb3V0KTtcbiAgICAgICAgICAgIHN0cmVhbS5vbihcImNsb3NlXCIsICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KSk7XG4gICAgICAgICAgICBzdHJlYW0uZW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBBYnN0cmFjdENvbm5lY3RvcjtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/connectors/AbstractConnector.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/connectors/SentinelConnector/FailoverDetector.js":
/*!*************************************************************************************!*\
!*** ./node_modules/ioredis/built/connectors/SentinelConnector/FailoverDetector.js ***!
\*************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.FailoverDetector = void 0;\nconst utils_1 = __webpack_require__(/*! ../../utils */ \"(action-browser)/./node_modules/ioredis/built/utils/index.js\");\nconst debug = (0, utils_1.Debug)(\"FailoverDetector\");\nconst CHANNEL_NAME = \"+switch-master\";\nclass FailoverDetector {\n // sentinels can't be used for regular commands after this\n constructor(connector, sentinels) {\n this.isDisconnected = false;\n this.connector = connector;\n this.sentinels = sentinels;\n }\n cleanup() {\n this.isDisconnected = true;\n for (const sentinel of this.sentinels) {\n sentinel.client.disconnect();\n }\n }\n async subscribe() {\n debug(\"Starting FailoverDetector\");\n const promises = [];\n for (const sentinel of this.sentinels) {\n const promise = sentinel.client.subscribe(CHANNEL_NAME).catch((err) => {\n debug(\"Failed to subscribe to failover messages on sentinel %s:%s (%s)\", sentinel.address.host || \"127.0.0.1\", sentinel.address.port || 26739, err.message);\n });\n promises.push(promise);\n sentinel.client.on(\"message\", (channel) => {\n if (!this.isDisconnected && channel === CHANNEL_NAME) {\n this.disconnect();\n }\n });\n }\n await Promise.all(promises);\n }\n disconnect() {\n // Avoid disconnecting more than once per failover.\n // A new FailoverDetector will be created after reconnecting.\n this.isDisconnected = true;\n debug(\"Failover detected, disconnecting\");\n // Will call this.cleanup()\n this.connector.disconnect();\n }\n}\nexports.FailoverDetector = FailoverDetector;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2Nvbm5lY3RvcnMvU2VudGluZWxDb25uZWN0b3IvRmFpbG92ZXJEZXRlY3Rvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCx3QkFBd0I7QUFDeEIsZ0JBQWdCLG1CQUFPLENBQUMsaUZBQWE7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2Nvbm5lY3RvcnMvU2VudGluZWxDb25uZWN0b3IvRmFpbG92ZXJEZXRlY3Rvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRmFpbG92ZXJEZXRlY3RvciA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIik7XG5jb25zdCBkZWJ1ZyA9ICgwLCB1dGlsc18xLkRlYnVnKShcIkZhaWxvdmVyRGV0ZWN0b3JcIik7XG5jb25zdCBDSEFOTkVMX05BTUUgPSBcIitzd2l0Y2gtbWFzdGVyXCI7XG5jbGFzcyBGYWlsb3ZlckRldGVjdG9yIHtcbiAgICAvLyBzZW50aW5lbHMgY2FuJ3QgYmUgdXNlZCBmb3IgcmVndWxhciBjb21tYW5kcyBhZnRlciB0aGlzXG4gICAgY29uc3RydWN0b3IoY29ubmVjdG9yLCBzZW50aW5lbHMpIHtcbiAgICAgICAgdGhpcy5pc0Rpc2Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbm5lY3RvciA9IGNvbm5lY3RvcjtcbiAgICAgICAgdGhpcy5zZW50aW5lbHMgPSBzZW50aW5lbHM7XG4gICAgfVxuICAgIGNsZWFudXAoKSB7XG4gICAgICAgIHRoaXMuaXNEaXNjb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGNvbnN0IHNlbnRpbmVsIG9mIHRoaXMuc2VudGluZWxzKSB7XG4gICAgICAgICAgICBzZW50aW5lbC5jbGllbnQuZGlzY29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHN1YnNjcmliZSgpIHtcbiAgICAgICAgZGVidWcoXCJTdGFydGluZyBGYWlsb3ZlckRldGVjdG9yXCIpO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHNlbnRpbmVsIG9mIHRoaXMuc2VudGluZWxzKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gc2VudGluZWwuY2xpZW50LnN1YnNjcmliZShDSEFOTkVMX05BTUUpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhcIkZhaWxlZCB0byBzdWJzY3JpYmUgdG8gZmFpbG92ZXIgbWVzc2FnZXMgb24gc2VudGluZWwgJXM6JXMgKCVzKVwiLCBzZW50aW5lbC5hZGRyZXNzLmhvc3QgfHwgXCIxMjcuMC4wLjFcIiwgc2VudGluZWwuYWRkcmVzcy5wb3J0IHx8IDI2NzM5LCBlcnIubWVzc2FnZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XG4gICAgICAgICAgICBzZW50aW5lbC5jbGllbnQub24oXCJtZXNzYWdlXCIsIChjaGFubmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRGlzY29ubmVjdGVkICYmIGNoYW5uZWwgPT09IENIQU5ORUxfTkFNRSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgfVxuICAgIGRpc2Nvbm5lY3QoKSB7XG4gICAgICAgIC8vIEF2b2lkIGRpc2Nvbm5lY3RpbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGZhaWxvdmVyLlxuICAgICAgICAvLyBBIG5ldyBGYWlsb3ZlckRldGVjdG9yIHdpbGwgYmUgY3JlYXRlZCBhZnRlciByZWNvbm5lY3RpbmcuXG4gICAgICAgIHRoaXMuaXNEaXNjb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICBkZWJ1ZyhcIkZhaWxvdmVyIGRldGVjdGVkLCBkaXNjb25uZWN0aW5nXCIpO1xuICAgICAgICAvLyBXaWxsIGNhbGwgdGhpcy5jbGVhbnVwKClcbiAgICAgICAgdGhpcy5jb25uZWN0b3IuZGlzY29ubmVjdCgpO1xuICAgIH1cbn1cbmV4cG9ydHMuRmFpbG92ZXJEZXRlY3RvciA9IEZhaWxvdmVyRGV0ZWN0b3I7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/connectors/SentinelConnector/FailoverDetector.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.js":
/*!*************************************************************************************!*\
!*** ./node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.js ***!
\*************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nfunction isSentinelEql(a, b) {\n return ((a.host || \"127.0.0.1\") === (b.host || \"127.0.0.1\") &&\n (a.port || 26379) === (b.port || 26379));\n}\nclass SentinelIterator {\n constructor(sentinels) {\n this.cursor = 0;\n this.sentinels = sentinels.slice(0);\n }\n next() {\n const done = this.cursor >= this.sentinels.length;\n return { done, value: done ? undefined : this.sentinels[this.cursor++] };\n }\n reset(moveCurrentEndpointToFirst) {\n if (moveCurrentEndpointToFirst &&\n this.sentinels.length > 1 &&\n this.cursor !== 1) {\n this.sentinels.unshift(...this.sentinels.splice(this.cursor - 1));\n }\n this.cursor = 0;\n }\n add(sentinel) {\n for (let i = 0; i < this.sentinels.length; i++) {\n if (isSentinelEql(sentinel, this.sentinels[i])) {\n return false;\n }\n }\n this.sentinels.push(sentinel);\n return true;\n }\n toString() {\n return `${JSON.stringify(this.sentinels)} @${this.cursor}`;\n }\n}\nexports[\"default\"] = SentinelIterator;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2Nvbm5lY3RvcnMvU2VudGluZWxDb25uZWN0b3IvU2VudGluZWxJdGVyYXRvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDJCQUEyQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdDQUFnQyxHQUFHLFlBQVk7QUFDakU7QUFDQTtBQUNBLGtCQUFlIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2Nvbm5lY3RvcnMvU2VudGluZWxDb25uZWN0b3IvU2VudGluZWxJdGVyYXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIGlzU2VudGluZWxFcWwoYSwgYikge1xuICAgIHJldHVybiAoKGEuaG9zdCB8fCBcIjEyNy4wLjAuMVwiKSA9PT0gKGIuaG9zdCB8fCBcIjEyNy4wLjAuMVwiKSAmJlxuICAgICAgICAoYS5wb3J0IHx8IDI2Mzc5KSA9PT0gKGIucG9ydCB8fCAyNjM3OSkpO1xufVxuY2xhc3MgU2VudGluZWxJdGVyYXRvciB7XG4gICAgY29uc3RydWN0b3Ioc2VudGluZWxzKSB7XG4gICAgICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICAgICAgdGhpcy5zZW50aW5lbHMgPSBzZW50aW5lbHMuc2xpY2UoMCk7XG4gICAgfVxuICAgIG5leHQoKSB7XG4gICAgICAgIGNvbnN0IGRvbmUgPSB0aGlzLmN1cnNvciA+PSB0aGlzLnNlbnRpbmVscy5sZW5ndGg7XG4gICAgICAgIHJldHVybiB7IGRvbmUsIHZhbHVlOiBkb25lID8gdW5kZWZpbmVkIDogdGhpcy5zZW50aW5lbHNbdGhpcy5jdXJzb3IrK10gfTtcbiAgICB9XG4gICAgcmVzZXQobW92ZUN1cnJlbnRFbmRwb2ludFRvRmlyc3QpIHtcbiAgICAgICAgaWYgKG1vdmVDdXJyZW50RW5kcG9pbnRUb0ZpcnN0ICYmXG4gICAgICAgICAgICB0aGlzLnNlbnRpbmVscy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICB0aGlzLmN1cnNvciAhPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5zZW50aW5lbHMudW5zaGlmdCguLi50aGlzLnNlbnRpbmVscy5zcGxpY2UodGhpcy5jdXJzb3IgLSAxKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH1cbiAgICBhZGQoc2VudGluZWwpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbnRpbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGlzU2VudGluZWxFcWwoc2VudGluZWwsIHRoaXMuc2VudGluZWxzW2ldKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbnRpbmVscy5wdXNoKHNlbnRpbmVsKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gYCR7SlNPTi5zdHJpbmdpZnkodGhpcy5zZW50aW5lbHMpfSBAJHt0aGlzLmN1cnNvcn1gO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFNlbnRpbmVsSXRlcmF0b3I7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/connectors/SentinelConnector/index.js":
/*!**************************************************************************!*\
!*** ./node_modules/ioredis/built/connectors/SentinelConnector/index.js ***!
\**************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.SentinelIterator = void 0;\nconst net_1 = __webpack_require__(/*! net */ \"net\");\nconst utils_1 = __webpack_require__(/*! ../../utils */ \"(action-browser)/./node_modules/ioredis/built/utils/index.js\");\nconst tls_1 = __webpack_require__(/*! tls */ \"tls\");\nconst SentinelIterator_1 = __webpack_require__(/*! ./SentinelIterator */ \"(action-browser)/./node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.js\");\nexports.SentinelIterator = SentinelIterator_1.default;\nconst AbstractConnector_1 = __webpack_require__(/*! ../AbstractConnector */ \"(action-browser)/./node_modules/ioredis/built/connectors/AbstractConnector.js\");\nconst Redis_1 = __webpack_require__(/*! ../../Redis */ \"(action-browser)/./node_modules/ioredis/built/Redis.js\");\nconst FailoverDetector_1 = __webpack_require__(/*! ./FailoverDetector */ \"(action-browser)/./node_modules/ioredis/built/connectors/SentinelConnector/FailoverDetector.js\");\nconst debug = (0, utils_1.Debug)(\"SentinelConnector\");\nclass SentinelConnector extends AbstractConnector_1.default {\n constructor(options) {\n super(options.disconnectTimeout);\n this.options = options;\n this.emitter = null;\n this.failoverDetector = null;\n if (!this.options.sentinels.length) {\n throw new Error(\"Requires at least one sentinel to connect to.\");\n }\n if (!this.options.name) {\n throw new Error(\"Requires the name of master.\");\n }\n this.sentinelIterator = new SentinelIterator_1.default(this.options.sentinels);\n }\n check(info) {\n const roleMatches = !info.role || this.options.role === info.role;\n if (!roleMatches) {\n debug(\"role invalid, expected %s, but got %s\", this.options.role, info.role);\n // Start from the next item.\n // Note that `reset` will move the cursor to the previous element,\n // so we advance two steps here.\n this.sentinelIterator.next();\n this.sentinelIterator.next();\n this.sentinelIterator.reset(true);\n }\n return roleMatches;\n }\n disconnect() {\n super.disconnect();\n if (this.failoverDetector) {\n this.failoverDetector.cleanup();\n }\n }\n connect(eventEmitter) {\n this.connecting = true;\n this.retryAttempts = 0;\n let lastError;\n const connectToNext = async () => {\n const endpoint = this.sentinelIterator.next();\n if (endpoint.done) {\n this.sentinelIterator.reset(false);\n const retryDelay = typeof this.options.sentinelRetryStrategy === \"function\"\n ? this.options.sentinelRetryStrategy(++this.retryAttempts)\n : null;\n let errorMsg = typeof retryDelay !== \"number\"\n ? \"All sentinels are unreachable and retry is disabled.\"\n : `All sentinels are unreachable. Retrying from scratch after ${retryDelay}ms.`;\n if (lastError) {\n errorMsg += ` Last error: ${lastError.message}`;\n }\n debug(errorMsg);\n const error = new Error(errorMsg);\n if (typeof retryDelay === \"number\") {\n eventEmitter(\"error\", error);\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n return connectToNext();\n }\n else {\n throw error;\n }\n }\n let resolved = null;\n let err = null;\n try {\n resolved = await this.resolve(endpoint.value);\n }\n catch (error) {\n err = error;\n }\n if (!this.connecting) {\n throw new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG);\n }\n const endpointAddress = endpoint.value.host + \":\" + endpoint.value.port;\n if (resolved) {\n debug(\"resolved: %s:%s from sentinel %s\", resolved.host, resolved.port, endpointAddress);\n if (this.options.enableTLSForSentinelMode && this.options.tls) {\n Object.assign(resolved, this.options.tls);\n this.stream = (0, tls_1.connect)(resolved);\n this.stream.once(\"secureConnect\", this.initFailoverDetector.bind(this));\n }\n else {\n this.stream = (0, net_1.createConnection)(resolved);\n this.stream.once(\"connect\", this.initFailoverDetector.bind(this));\n }\n this.stream.once(\"error\", (err) => {\n this.firstError = err;\n });\n return this.stream;\n }\n else {\n const errorMsg = err\n ? \"failed to connect to sentinel \" +\n endpointAddress +\n \" because \" +\n err.message\n : \"connected to sentinel \" +\n endpointAddress +\n \" successfully, but got an invalid reply: \" +\n resolved;\n debug(errorMsg);\n eventEmitter(\"sentinelError\", new Error(errorMsg));\n if (err) {\n lastError = err;\n }\n return connectToNext();\n }\n };\n return connectToNext();\n }\n async updateSentinels(client) {\n if (!this.options.updateSentinels) {\n return;\n }\n const result = await client.sentinel(\"sentinels\", this.options.name);\n if (!Array.isArray(result)) {\n return;\n }\n result\n .map(utils_1.packObject)\n .forEach((sentinel) => {\n const flags = sentinel.flags ? sentinel.flags.split(\",\") : [];\n if (flags.indexOf(\"disconnected\") === -1 &&\n sentinel.ip &&\n sentinel.port) {\n const endpoint = this.sentinelNatResolve(addressResponseToAddress(sentinel));\n if (this.sentinelIterator.add(endpoint)) {\n debug(\"adding sentinel %s:%s\", endpoint.host, endpoint.port);\n }\n }\n });\n debug(\"Updated internal sentinels: %s\", this.sentinelIterator);\n }\n async resolveMaster(client) {\n const result = await client.sentinel(\"get-master-addr-by-name\", this.options.name);\n await this.updateSentinels(client);\n return this.sentinelNatResolve(Array.isArray(result)\n ? { host: result[0], port: Number(result[1]) }\n : null);\n }\n async resolveSlave(client) {\n const result = await client.sentinel(\"slaves\", this.options.name);\n if (!Array.isArray(result)) {\n return null;\n }\n const availableSlaves = result\n .map(utils_1.packObject)\n .filter((slave) => slave.flags && !slave.flags.match(/(disconnected|s_down|o_down)/));\n return this.sentinelNatResolve(selectPreferredSentinel(availableSlaves, this.options.preferredSlaves));\n }\n sentinelNatResolve(item) {\n if (!item || !this.options.natMap)\n return item;\n const key = `${item.host}:${item.port}`;\n let result = item;\n if (typeof this.options.natMap === \"function\") {\n result = this.options.natMap(key) || item;\n }\n else if (typeof this.options.natMap === \"object\") {\n result = this.options.natMap[key] || item;\n }\n return result;\n }\n connectToSentinel(endpoint, options) {\n const redis = new Redis_1.default({\n port: endpoint.port || 26379,\n host: endpoint.host,\n username: this.options.sentinelUsername || null,\n password: this.options.sentinelPassword || null,\n family: endpoint.family ||\n // @ts-expect-error\n (\"path\" in this.options && this.options.path\n ? undefined\n : // @ts-expect-error\n this.options.family),\n tls: this.options.sentinelTLS,\n retryStrategy: null,\n enableReadyCheck: false,\n connectTimeout: this.options.connectTimeout,\n commandTimeout: this.options.sentinelCommandTimeout,\n ...options,\n });\n // @ts-expect-error\n return redis;\n }\n async resolve(endpoint) {\n const client = this.connectToSentinel(endpoint);\n // ignore the errors since resolve* methods will handle them\n client.on(\"error\", noop);\n try {\n if (this.options.role === \"slave\") {\n return await this.resolveSlave(client);\n }\n else {\n return await this.resolveMaster(client);\n }\n }\n finally {\n client.disconnect();\n }\n }\n async initFailoverDetector() {\n var _a;\n if (!this.options.failoverDetector) {\n return;\n }\n // Move the current sentinel to the first position\n this.sentinelIterator.reset(true);\n const sentinels = [];\n // In case of a large amount of sentinels, limit the number of concurrent connections\n while (sentinels.length < this.options.sentinelMaxConnections) {\n const { done, value } = this.sentinelIterator.next();\n if (done) {\n break;\n }\n const client = this.connectToSentinel(value, {\n lazyConnect: true,\n retryStrategy: this.options.sentinelReconnectStrategy,\n });\n client.on(\"reconnecting\", () => {\n var _a;\n // Tests listen to this event\n (_a = this.emitter) === null || _a === void 0 ? void 0 : _a.emit(\"sentinelReconnecting\");\n });\n sentinels.push({ address: value, client });\n }\n this.sentinelIterator.reset(false);\n if (this.failoverDetector) {\n // Clean up previous detector\n this.failoverDetector.cleanup();\n }\n this.failoverDetector = new FailoverDetector_1.FailoverDetector(this, sentinels);\n await this.failoverDetector.subscribe();\n // Tests listen to this event\n (_a = this.emitter) === null || _a === void 0 ? void 0 : _a.emit(\"failoverSubscribed\");\n }\n}\nexports[\"default\"] = SentinelConnector;\nfunction selectPreferredSentinel(availableSlaves, preferredSlaves) {\n if (availableSlaves.length === 0) {\n return null;\n }\n let selectedSlave;\n if (typeof preferredSlaves === \"function\") {\n selectedSlave = preferredSlaves(availableSlaves);\n }\n else if (preferredSlaves !== null && typeof preferredSlaves === \"object\") {\n const preferredSlavesArray = Array.isArray(preferredSlaves)\n ? preferredSlaves\n : [preferredSlaves];\n // sort by priority\n preferredSlavesArray.sort((a, b) => {\n // default the priority to 1\n if (!a.prio) {\n a.prio = 1;\n }\n if (!b.prio) {\n b.prio = 1;\n }\n // lowest priority first\n if (a.prio < b.prio) {\n return -1;\n }\n if (a.prio > b.prio) {\n return 1;\n }\n return 0;\n });\n // loop over preferred slaves and return the first match\n for (let p = 0; p < preferredSlavesArray.length; p++) {\n for (let a = 0; a < availableSlaves.length; a++) {\n const slave = availableSlaves[a];\n if (slave.ip === preferredSlavesArray[p].ip) {\n if (slave.port === preferredSlavesArray[p].port) {\n selectedSlave = slave;\n break;\n }\n }\n }\n if (selectedSlave) {\n break;\n }\n }\n }\n // if none of the preferred slaves are available, a random available slave is returned\n if (!selectedSlave) {\n selectedSlave = (0, utils_1.sample)(availableSlaves);\n }\n return addressResponseToAddress(selectedSlave);\n}\nfunction addressResponseToAddress(input) {\n return { host: input.ip, port: Number(input.port) };\n}\nfunction noop() { }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2Nvbm5lY3RvcnMvU2VudGluZWxDb25uZWN0b3IvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsd0JBQXdCO0FBQ3hCLGNBQWMsbUJBQU8sQ0FBQyxnQkFBSztBQUMzQixnQkFBZ0IsbUJBQU8sQ0FBQyxpRkFBYTtBQUNyQyxjQUFjLG1CQUFPLENBQUMsZ0JBQUs7QUFDM0IsMkJBQTJCLG1CQUFPLENBQUMsMEhBQW9CO0FBQ3ZELHdCQUF3QjtBQUN4Qiw0QkFBNEIsbUJBQU8sQ0FBQywyR0FBc0I7QUFDMUQsZ0JBQWdCLG1CQUFPLENBQUMsMkVBQWE7QUFDckMsMkJBQTJCLG1CQUFPLENBQUMsMEhBQW9CO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvRkFBb0YsV0FBVztBQUMvRjtBQUNBLGdEQUFnRCxrQkFBa0I7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsVUFBVSxHQUFHLFVBQVU7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsY0FBYztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsNkJBQTZCLHdCQUF3QjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSx3QkFBd0IsaUNBQWlDO0FBQ3pELDRCQUE0Qiw0QkFBNEI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2Nvbm5lY3RvcnMvU2VudGluZWxDb25uZWN0b3IvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNlbnRpbmVsSXRlcmF0b3IgPSB2b2lkIDA7XG5jb25zdCBuZXRfMSA9IHJlcXVpcmUoXCJuZXRcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpO1xuY29uc3QgdGxzXzEgPSByZXF1aXJlKFwidGxzXCIpO1xuY29uc3QgU2VudGluZWxJdGVyYXRvcl8xID0gcmVxdWlyZShcIi4vU2VudGluZWxJdGVyYXRvclwiKTtcbmV4cG9ydHMuU2VudGluZWxJdGVyYXRvciA9IFNlbnRpbmVsSXRlcmF0b3JfMS5kZWZhdWx0O1xuY29uc3QgQWJzdHJhY3RDb25uZWN0b3JfMSA9IHJlcXVpcmUoXCIuLi9BYnN0cmFjdENvbm5lY3RvclwiKTtcbmNvbnN0IFJlZGlzXzEgPSByZXF1aXJlKFwiLi4vLi4vUmVkaXNcIik7XG5jb25zdCBGYWlsb3ZlckRldGVjdG9yXzEgPSByZXF1aXJlKFwiLi9GYWlsb3ZlckRldGVjdG9yXCIpO1xuY29uc3QgZGVidWcgPSAoMCwgdXRpbHNfMS5EZWJ1ZykoXCJTZW50aW5lbENvbm5lY3RvclwiKTtcbmNsYXNzIFNlbnRpbmVsQ29ubmVjdG9yIGV4dGVuZHMgQWJzdHJhY3RDb25uZWN0b3JfMS5kZWZhdWx0IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMuZGlzY29ubmVjdFRpbWVvdXQpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLmVtaXR0ZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmZhaWxvdmVyRGV0ZWN0b3IgPSBudWxsO1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5zZW50aW5lbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXF1aXJlcyBhdCBsZWFzdCBvbmUgc2VudGluZWwgdG8gY29ubmVjdCB0by5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMubmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVxdWlyZXMgdGhlIG5hbWUgb2YgbWFzdGVyLlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbnRpbmVsSXRlcmF0b3IgPSBuZXcgU2VudGluZWxJdGVyYXRvcl8xLmRlZmF1bHQodGhpcy5vcHRpb25zLnNlbnRpbmVscyk7XG4gICAgfVxuICAgIGNoZWNrKGluZm8pIHtcbiAgICAgICAgY29uc3Qgcm9sZU1hdGNoZXMgPSAhaW5mby5yb2xlIHx8IHRoaXMub3B0aW9ucy5yb2xlID09PSBpbmZvLnJvbGU7XG4gICAgICAgIGlmICghcm9sZU1hdGNoZXMpIHtcbiAgICAgICAgICAgIGRlYnVnKFwicm9sZSBpbnZhbGlkLCBleHBlY3RlZCAlcywgYnV0IGdvdCAlc1wiLCB0aGlzLm9wdGlvbnMucm9sZSwgaW5mby5yb2xlKTtcbiAgICAgICAgICAgIC8vIFN0YXJ0IGZyb20gdGhlIG5leHQgaXRlbS5cbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBgcmVzZXRgIHdpbGwgbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBwcmV2aW91cyBlbGVtZW50LFxuICAgICAgICAgICAgLy8gc28gd2UgYWR2YW5jZSB0d28gc3RlcHMgaGVyZS5cbiAgICAgICAgICAgIHRoaXMuc2VudGluZWxJdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLnNlbnRpbmVsSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy5zZW50aW5lbEl0ZXJhdG9yLnJlc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb2xlTWF0Y2hlcztcbiAgICB9XG4gICAgZGlzY29ubmVjdCgpIHtcbiAgICAgICAgc3VwZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICBpZiAodGhpcy5mYWlsb3ZlckRldGVjdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmZhaWxvdmVyRGV0ZWN0b3IuY2xlYW51cCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbm5lY3QoZXZlbnRFbWl0dGVyKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMucmV0cnlBdHRlbXB0cyA9IDA7XG4gICAgICAgIGxldCBsYXN0RXJyb3I7XG4gICAgICAgIGNvbnN0IGNvbm5lY3RUb05leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuc2VudGluZWxJdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICBpZiAoZW5kcG9pbnQuZG9uZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VudGluZWxJdGVyYXRvci5yZXNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV0cnlEZWxheSA9IHR5cGVvZiB0aGlzLm9wdGlvbnMuc2VudGluZWxSZXRyeVN0cmF0ZWd5ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLm9wdGlvbnMuc2VudGluZWxSZXRyeVN0cmF0ZWd5KCsrdGhpcy5yZXRyeUF0dGVtcHRzKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IGVycm9yTXNnID0gdHlwZW9mIHJldHJ5RGVsYXkgIT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgPyBcIkFsbCBzZW50aW5lbHMgYXJlIHVucmVhY2hhYmxlIGFuZCByZXRyeSBpcyBkaXNhYmxlZC5cIlxuICAgICAgICAgICAgICAgICAgICA6IGBBbGwgc2VudGluZWxzIGFyZSB1bnJlYWNoYWJsZS4gUmV0cnlpbmcgZnJvbSBzY3JhdGNoIGFmdGVyICR7cmV0cnlEZWxheX1tcy5gO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNc2cgKz0gYCBMYXN0IGVycm9yOiAke2xhc3RFcnJvci5tZXNzYWdlfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlYnVnKGVycm9yTXNnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihlcnJvck1zZyk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXRyeURlbGF5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50RW1pdHRlcihcImVycm9yXCIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcmV0cnlEZWxheSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdFRvTmV4dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHJlc29sdmVkID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBlcnIgPSBudWxsO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlZCA9IGF3YWl0IHRoaXMucmVzb2x2ZShlbmRwb2ludC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnIgPSBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5jb25uZWN0aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHV0aWxzXzEuQ09OTkVDVElPTl9DTE9TRURfRVJST1JfTVNHKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVuZHBvaW50QWRkcmVzcyA9IGVuZHBvaW50LnZhbHVlLmhvc3QgKyBcIjpcIiArIGVuZHBvaW50LnZhbHVlLnBvcnQ7XG4gICAgICAgICAgICBpZiAocmVzb2x2ZWQpIHtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhcInJlc29sdmVkOiAlczolcyBmcm9tIHNlbnRpbmVsICVzXCIsIHJlc29sdmVkLmhvc3QsIHJlc29sdmVkLnBvcnQsIGVuZHBvaW50QWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVUTFNGb3JTZW50aW5lbE1vZGUgJiYgdGhpcy5vcHRpb25zLnRscykge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlc29sdmVkLCB0aGlzLm9wdGlvbnMudGxzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0gPSAoMCwgdGxzXzEuY29ubmVjdCkocmVzb2x2ZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbS5vbmNlKFwic2VjdXJlQ29ubmVjdFwiLCB0aGlzLmluaXRGYWlsb3ZlckRldGVjdG9yLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0gPSAoMCwgbmV0XzEuY3JlYXRlQ29ubmVjdGlvbikocmVzb2x2ZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbS5vbmNlKFwiY29ubmVjdFwiLCB0aGlzLmluaXRGYWlsb3ZlckRldGVjdG9yLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbS5vbmNlKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0RXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JNc2cgPSBlcnJcbiAgICAgICAgICAgICAgICAgICAgPyBcImZhaWxlZCB0byBjb25uZWN0IHRvIHNlbnRpbmVsIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50QWRkcmVzcyArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBiZWNhdXNlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgIDogXCJjb25uZWN0ZWQgdG8gc2VudGluZWwgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRBZGRyZXNzICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIHN1Y2Nlc3NmdWxseSwgYnV0IGdvdCBhbiBpbnZhbGlkIHJlcGx5OiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZDtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhlcnJvck1zZyk7XG4gICAgICAgICAgICAgICAgZXZlbnRFbWl0dGVyKFwic2VudGluZWxFcnJvclwiLCBuZXcgRXJyb3IoZXJyb3JNc2cpKTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3RUb05leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNvbm5lY3RUb05leHQoKTtcbiAgICB9XG4gICAgYXN5bmMgdXBkYXRlU2VudGluZWxzKGNsaWVudCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy51cGRhdGVTZW50aW5lbHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQuc2VudGluZWwoXCJzZW50aW5lbHNcIiwgdGhpcy5vcHRpb25zLm5hbWUpO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFxuICAgICAgICAgICAgLm1hcCh1dGlsc18xLnBhY2tPYmplY3QpXG4gICAgICAgICAgICAuZm9yRWFjaCgoc2VudGluZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZsYWdzID0gc2VudGluZWwuZmxhZ3MgPyBzZW50aW5lbC5mbGFncy5zcGxpdChcIixcIikgOiBbXTtcbiAgICAgICAgICAgIGlmIChmbGFncy5pbmRleE9mKFwiZGlzY29ubmVjdGVkXCIpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIHNlbnRpbmVsLmlwICYmXG4gICAgICAgICAgICAgICAgc2VudGluZWwucG9ydCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5zZW50aW5lbE5hdFJlc29sdmUoYWRkcmVzc1Jlc3BvbnNlVG9BZGRyZXNzKHNlbnRpbmVsKSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VudGluZWxJdGVyYXRvci5hZGQoZW5kcG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnKFwiYWRkaW5nIHNlbnRpbmVsICVzOiVzXCIsIGVuZHBvaW50Lmhvc3QsIGVuZHBvaW50LnBvcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRlYnVnKFwiVXBkYXRlZCBpbnRlcm5hbCBzZW50aW5lbHM6ICVzXCIsIHRoaXMuc2VudGluZWxJdGVyYXRvcik7XG4gICAgfVxuICAgIGFzeW5jIHJlc29sdmVNYXN0ZXIoY2xpZW50KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5zZW50aW5lbChcImdldC1tYXN0ZXItYWRkci1ieS1uYW1lXCIsIHRoaXMub3B0aW9ucy5uYW1lKTtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZW50aW5lbHMoY2xpZW50KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VudGluZWxOYXRSZXNvbHZlKEFycmF5LmlzQXJyYXkocmVzdWx0KVxuICAgICAgICAgICAgPyB7IGhvc3Q6IHJlc3VsdFswXSwgcG9ydDogTnVtYmVyKHJlc3VsdFsxXSkgfVxuICAgICAgICAgICAgOiBudWxsKTtcbiAgICB9XG4gICAgYXN5bmMgcmVzb2x2ZVNsYXZlKGNsaWVudCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQuc2VudGluZWwoXCJzbGF2ZXNcIiwgdGhpcy5vcHRpb25zLm5hbWUpO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXZhaWxhYmxlU2xhdmVzID0gcmVzdWx0XG4gICAgICAgICAgICAubWFwKHV0aWxzXzEucGFja09iamVjdClcbiAgICAgICAgICAgIC5maWx0ZXIoKHNsYXZlKSA9PiBzbGF2ZS5mbGFncyAmJiAhc2xhdmUuZmxhZ3MubWF0Y2goLyhkaXNjb25uZWN0ZWR8c19kb3dufG9fZG93bikvKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbnRpbmVsTmF0UmVzb2x2ZShzZWxlY3RQcmVmZXJyZWRTZW50aW5lbChhdmFpbGFibGVTbGF2ZXMsIHRoaXMub3B0aW9ucy5wcmVmZXJyZWRTbGF2ZXMpKTtcbiAgICB9XG4gICAgc2VudGluZWxOYXRSZXNvbHZlKGl0ZW0pIHtcbiAgICAgICAgaWYgKCFpdGVtIHx8ICF0aGlzLm9wdGlvbnMubmF0TWFwKVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIGNvbnN0IGtleSA9IGAke2l0ZW0uaG9zdH06JHtpdGVtLnBvcnR9YDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGl0ZW07XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLm5hdE1hcCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLm9wdGlvbnMubmF0TWFwKGtleSkgfHwgaXRlbTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLm5hdE1hcCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5vcHRpb25zLm5hdE1hcFtrZXldIHx8IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgY29ubmVjdFRvU2VudGluZWwoZW5kcG9pbnQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcmVkaXMgPSBuZXcgUmVkaXNfMS5kZWZhdWx0KHtcbiAgICAgICAgICAgIHBvcnQ6IGVuZHBvaW50LnBvcnQgfHwgMjYzNzksXG4gICAgICAgICAgICBob3N0OiBlbmRwb2ludC5ob3N0LFxuICAgICAgICAgICAgdXNlcm5hbWU6IHRoaXMub3B0aW9ucy5zZW50aW5lbFVzZXJuYW1lIHx8IG51bGwsXG4gICAgICAgICAgICBwYXNzd29yZDogdGhpcy5vcHRpb25zLnNlbnRpbmVsUGFzc3dvcmQgfHwgbnVsbCxcbiAgICAgICAgICAgIGZhbWlseTogZW5kcG9pbnQuZmFtaWx5IHx8XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgIChcInBhdGhcIiBpbiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhdGhcbiAgICAgICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgOiAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuZmFtaWx5KSxcbiAgICAgICAgICAgIHRsczogdGhpcy5vcHRpb25zLnNlbnRpbmVsVExTLFxuICAgICAgICAgICAgcmV0cnlTdHJhdGVneTogbnVsbCxcbiAgICAgICAgICAgIGVuYWJsZVJlYWR5Q2hlY2s6IGZhbHNlLFxuICAgICAgICAgICAgY29ubmVjdFRpbWVvdXQ6IHRoaXMub3B0aW9ucy5jb25uZWN0VGltZW91dCxcbiAgICAgICAgICAgIGNvbW1hbmRUaW1lb3V0OiB0aGlzLm9wdGlvbnMuc2VudGluZWxDb21tYW5kVGltZW91dCxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZWRpcztcbiAgICB9XG4gICAgYXN5bmMgcmVzb2x2ZShlbmRwb2ludCkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNvbm5lY3RUb1NlbnRpbmVsKGVuZHBvaW50KTtcbiAgICAgICAgLy8gaWdub3JlIHRoZSBlcnJvcnMgc2luY2UgcmVzb2x2ZSogbWV0aG9kcyB3aWxsIGhhbmRsZSB0aGVtXG4gICAgICAgIGNsaWVudC5vbihcImVycm9yXCIsIG5vb3ApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yb2xlID09PSBcInNsYXZlXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXNvbHZlU2xhdmUoY2xpZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlc29sdmVNYXN0ZXIoY2xpZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGNsaWVudC5kaXNjb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgaW5pdEZhaWxvdmVyRGV0ZWN0b3IoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZmFpbG92ZXJEZXRlY3Rvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1vdmUgdGhlIGN1cnJlbnQgc2VudGluZWwgdG8gdGhlIGZpcnN0IHBvc2l0aW9uXG4gICAgICAgIHRoaXMuc2VudGluZWxJdGVyYXRvci5yZXNldCh0cnVlKTtcbiAgICAgICAgY29uc3Qgc2VudGluZWxzID0gW107XG4gICAgICAgIC8vIEluIGNhc2Ugb2YgYSBsYXJnZSBhbW91bnQgb2Ygc2VudGluZWxzLCBsaW1pdCB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgY29ubmVjdGlvbnNcbiAgICAgICAgd2hpbGUgKHNlbnRpbmVscy5sZW5ndGggPCB0aGlzLm9wdGlvbnMuc2VudGluZWxNYXhDb25uZWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gdGhpcy5zZW50aW5lbEl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNvbm5lY3RUb1NlbnRpbmVsKHZhbHVlLCB7XG4gICAgICAgICAgICAgICAgbGF6eUNvbm5lY3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgcmV0cnlTdHJhdGVneTogdGhpcy5vcHRpb25zLnNlbnRpbmVsUmVjb25uZWN0U3RyYXRlZ3ksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNsaWVudC5vbihcInJlY29ubmVjdGluZ1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIC8vIFRlc3RzIGxpc3RlbiB0byB0aGlzIGV2ZW50XG4gICAgICAgICAgICAgICAgKF9hID0gdGhpcy5lbWl0dGVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZW1pdChcInNlbnRpbmVsUmVjb25uZWN0aW5nXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZW50aW5lbHMucHVzaCh7IGFkZHJlc3M6IHZhbHVlLCBjbGllbnQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZW50aW5lbEl0ZXJhdG9yLnJlc2V0KGZhbHNlKTtcbiAgICAgICAgaWYgKHRoaXMuZmFpbG92ZXJEZXRlY3Rvcikge1xuICAgICAgICAgICAgLy8gQ2xlYW4gdXAgcHJldmlvdXMgZGV0ZWN0b3JcbiAgICAgICAgICAgIHRoaXMuZmFpbG92ZXJEZXRlY3Rvci5jbGVhbnVwKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mYWlsb3ZlckRldGVjdG9yID0gbmV3IEZhaWxvdmVyRGV0ZWN0b3JfMS5GYWlsb3ZlckRldGVjdG9yKHRoaXMsIHNlbnRpbmVscyk7XG4gICAgICAgIGF3YWl0IHRoaXMuZmFpbG92ZXJEZXRlY3Rvci5zdWJzY3JpYmUoKTtcbiAgICAgICAgLy8gVGVzdHMgbGlzdGVuIHRvIHRoaXMgZXZlbnRcbiAgICAgICAgKF9hID0gdGhpcy5lbWl0dGVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZW1pdChcImZhaWxvdmVyU3Vic2NyaWJlZFwiKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTZW50aW5lbENvbm5lY3RvcjtcbmZ1bmN0aW9uIHNlbGVjdFByZWZlcnJlZFNlbnRpbmVsKGF2YWlsYWJsZVNsYXZlcywgcHJlZmVycmVkU2xhdmVzKSB7XG4gICAgaWYgKGF2YWlsYWJsZVNsYXZlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGxldCBzZWxlY3RlZFNsYXZlO1xuICAgIGlmICh0eXBlb2YgcHJlZmVycmVkU2xhdmVzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgc2VsZWN0ZWRTbGF2ZSA9IHByZWZlcnJlZFNsYXZlcyhhdmFpbGFibGVTbGF2ZXMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcmVmZXJyZWRTbGF2ZXMgIT09IG51bGwgJiYgdHlwZW9mIHByZWZlcnJlZFNsYXZlcyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBjb25zdCBwcmVmZXJyZWRTbGF2ZXNBcnJheSA9IEFycmF5LmlzQXJyYXkocHJlZmVycmVkU2xhdmVzKVxuICAgICAgICAgICAgPyBwcmVmZXJyZWRTbGF2ZXNcbiAgICAgICAgICAgIDogW3ByZWZlcnJlZFNsYXZlc107XG4gICAgICAgIC8vIHNvcnQgYnkgcHJpb3JpdHlcbiAgICAgICAgcHJlZmVycmVkU2xhdmVzQXJyYXkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgLy8gZGVmYXVsdCB0aGUgcHJpb3JpdHkgdG8gMVxuICAgICAgICAgICAgaWYgKCFhLnByaW8pIHtcbiAgICAgICAgICAgICAgICBhLnByaW8gPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFiLnByaW8pIHtcbiAgICAgICAgICAgICAgICBiLnByaW8gPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbG93ZXN0IHByaW9yaXR5IGZpcnN0XG4gICAgICAgICAgICBpZiAoYS5wcmlvIDwgYi5wcmlvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGEucHJpbyA+IGIucHJpbykge1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBsb29wIG92ZXIgcHJlZmVycmVkIHNsYXZlcyBhbmQgcmV0dXJuIHRoZSBmaXJzdCBtYXRjaFxuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IHByZWZlcnJlZFNsYXZlc0FycmF5Lmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBhID0gMDsgYSA8IGF2YWlsYWJsZVNsYXZlcy5sZW5ndGg7IGErKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNsYXZlID0gYXZhaWxhYmxlU2xhdmVzW2FdO1xuICAgICAgICAgICAgICAgIGlmIChzbGF2ZS5pcCA9PT0gcHJlZmVycmVkU2xhdmVzQXJyYXlbcF0uaXApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNsYXZlLnBvcnQgPT09IHByZWZlcnJlZFNsYXZlc0FycmF5W3BdLnBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkU2xhdmUgPSBzbGF2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkU2xhdmUpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBpZiBub25lIG9mIHRoZSBwcmVmZXJyZWQgc2xhdmVzIGFyZSBhdmFpbGFibGUsIGEgcmFuZG9tIGF2YWlsYWJsZSBzbGF2ZSBpcyByZXR1cm5lZFxuICAgIGlmICghc2VsZWN0ZWRTbGF2ZSkge1xuICAgICAgICBzZWxlY3RlZFNsYXZlID0gKDAsIHV0aWxzXzEuc2FtcGxlKShhdmFpbGFibGVTbGF2ZXMpO1xuICAgIH1cbiAgICByZXR1cm4gYWRkcmVzc1Jlc3BvbnNlVG9BZGRyZXNzKHNlbGVjdGVkU2xhdmUpO1xufVxuZnVuY3Rpb24gYWRkcmVzc1Jlc3BvbnNlVG9BZGRyZXNzKGlucHV0KSB7XG4gICAgcmV0dXJuIHsgaG9zdDogaW5wdXQuaXAsIHBvcnQ6IE51bWJlcihpbnB1dC5wb3J0KSB9O1xufVxuZnVuY3Rpb24gbm9vcCgpIHsgfVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/connectors/SentinelConnector/index.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/connectors/StandaloneConnector.js":
/*!**********************************************************************!*\
!*** ./node_modules/ioredis/built/connectors/StandaloneConnector.js ***!
\**********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst net_1 = __webpack_require__(/*! net */ \"net\");\nconst tls_1 = __webpack_require__(/*! tls */ \"tls\");\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(action-browser)/./node_modules/ioredis/built/utils/index.js\");\nconst AbstractConnector_1 = __webpack_require__(/*! ./AbstractConnector */ \"(action-browser)/./node_modules/ioredis/built/connectors/AbstractConnector.js\");\nclass StandaloneConnector extends AbstractConnector_1.default {\n constructor(options) {\n super(options.disconnectTimeout);\n this.options = options;\n }\n connect(_) {\n const { options } = this;\n this.connecting = true;\n let connectionOptions;\n if (\"path\" in options && options.path) {\n connectionOptions = {\n path: options.path,\n };\n }\n else {\n connectionOptions = {};\n if (\"port\" in options && options.port != null) {\n connectionOptions.port = options.port;\n }\n if (\"host\" in options && options.host != null) {\n connectionOptions.host = options.host;\n }\n if (\"family\" in options && options.family != null) {\n connectionOptions.family = options.family;\n }\n }\n if (options.tls) {\n Object.assign(connectionOptions, options.tls);\n }\n // TODO:\n // We use native Promise here since other Promise\n // implementation may use different schedulers that\n // cause issue when the stream is resolved in the\n // next tick.\n // Should use the provided promise in the next major\n // version and do not connect before resolved.\n return new Promise((resolve, reject) => {\n process.nextTick(() => {\n if (!this.connecting) {\n reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n return;\n }\n try {\n if (options.tls) {\n this.stream = (0, tls_1.connect)(connectionOptions);\n }\n else {\n this.stream = (0, net_1.createConnection)(connectionOptions);\n }\n }\n catch (err) {\n reject(err);\n return;\n }\n this.stream.once(\"error\", (err) => {\n this.firstError = err;\n });\n resolve(this.stream);\n });\n });\n }\n}\nexports[\"default\"] = StandaloneConnector;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2Nvbm5lY3RvcnMvU3RhbmRhbG9uZUNvbm5lY3Rvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxjQUFjLG1CQUFPLENBQUMsZ0JBQUs7QUFDM0IsY0FBYyxtQkFBTyxDQUFDLGdCQUFLO0FBQzNCLGdCQUFnQixtQkFBTyxDQUFDLDhFQUFVO0FBQ2xDLDRCQUE0QixtQkFBTyxDQUFDLDBHQUFxQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsVUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBLGtCQUFlIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2Nvbm5lY3RvcnMvU3RhbmRhbG9uZUNvbm5lY3Rvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IG5ldF8xID0gcmVxdWlyZShcIm5ldFwiKTtcbmNvbnN0IHRsc18xID0gcmVxdWlyZShcInRsc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5jb25zdCBBYnN0cmFjdENvbm5lY3Rvcl8xID0gcmVxdWlyZShcIi4vQWJzdHJhY3RDb25uZWN0b3JcIik7XG5jbGFzcyBTdGFuZGFsb25lQ29ubmVjdG9yIGV4dGVuZHMgQWJzdHJhY3RDb25uZWN0b3JfMS5kZWZhdWx0IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMuZGlzY29ubmVjdFRpbWVvdXQpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH1cbiAgICBjb25uZWN0KF8pIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25zIH0gPSB0aGlzO1xuICAgICAgICB0aGlzLmNvbm5lY3RpbmcgPSB0cnVlO1xuICAgICAgICBsZXQgY29ubmVjdGlvbk9wdGlvbnM7XG4gICAgICAgIGlmIChcInBhdGhcIiBpbiBvcHRpb25zICYmIG9wdGlvbnMucGF0aCkge1xuICAgICAgICAgICAgY29ubmVjdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgcGF0aDogb3B0aW9ucy5wYXRoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb25PcHRpb25zID0ge307XG4gICAgICAgICAgICBpZiAoXCJwb3J0XCIgaW4gb3B0aW9ucyAmJiBvcHRpb25zLnBvcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25PcHRpb25zLnBvcnQgPSBvcHRpb25zLnBvcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXCJob3N0XCIgaW4gb3B0aW9ucyAmJiBvcHRpb25zLmhvc3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25PcHRpb25zLmhvc3QgPSBvcHRpb25zLmhvc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXCJmYW1pbHlcIiBpbiBvcHRpb25zICYmIG9wdGlvbnMuZmFtaWx5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uT3B0aW9ucy5mYW1pbHkgPSBvcHRpb25zLmZhbWlseTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy50bHMpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29ubmVjdGlvbk9wdGlvbnMsIG9wdGlvbnMudGxzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPOlxuICAgICAgICAvLyBXZSB1c2UgbmF0aXZlIFByb21pc2UgaGVyZSBzaW5jZSBvdGhlciBQcm9taXNlXG4gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIG1heSB1c2UgZGlmZmVyZW50IHNjaGVkdWxlcnMgdGhhdFxuICAgICAgICAvLyBjYXVzZSBpc3N1ZSB3aGVuIHRoZSBzdHJlYW0gaXMgcmVzb2x2ZWQgaW4gdGhlXG4gICAgICAgIC8vIG5leHQgdGljay5cbiAgICAgICAgLy8gU2hvdWxkIHVzZSB0aGUgcHJvdmlkZWQgcHJvbWlzZSBpbiB0aGUgbmV4dCBtYWpvclxuICAgICAgICAvLyB2ZXJzaW9uIGFuZCBkbyBub3QgY29ubmVjdCBiZWZvcmUgcmVzb2x2ZWQuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29ubmVjdGluZykge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKHV0aWxzXzEuQ09OTkVDVElPTl9DTE9TRURfRVJST1JfTVNHKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudGxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbSA9ICgwLCB0bHNfMS5jb25uZWN0KShjb25uZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbSA9ICgwLCBuZXRfMS5jcmVhdGVDb25uZWN0aW9uKShjb25uZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbS5vbmNlKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0RXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnN0cmVhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gU3RhbmRhbG9uZUNvbm5lY3RvcjtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/connectors/StandaloneConnector.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/connectors/index.js":
/*!********************************************************!*\
!*** ./node_modules/ioredis/built/connectors/index.js ***!
\********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.SentinelConnector = exports.StandaloneConnector = void 0;\nconst StandaloneConnector_1 = __webpack_require__(/*! ./StandaloneConnector */ \"(action-browser)/./node_modules/ioredis/built/connectors/StandaloneConnector.js\");\nexports.StandaloneConnector = StandaloneConnector_1.default;\nconst SentinelConnector_1 = __webpack_require__(/*! ./SentinelConnector */ \"(action-browser)/./node_modules/ioredis/built/connectors/SentinelConnector/index.js\");\nexports.SentinelConnector = SentinelConnector_1.default;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2Nvbm5lY3RvcnMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QseUJBQXlCLEdBQUcsMkJBQTJCO0FBQ3ZELDhCQUE4QixtQkFBTyxDQUFDLDhHQUF1QjtBQUM3RCwyQkFBMkI7QUFDM0IsNEJBQTRCLG1CQUFPLENBQUMsZ0hBQXFCO0FBQ3pELHlCQUF5QiIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jb25uZWN0b3JzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZW50aW5lbENvbm5lY3RvciA9IGV4cG9ydHMuU3RhbmRhbG9uZUNvbm5lY3RvciA9IHZvaWQgMDtcbmNvbnN0IFN0YW5kYWxvbmVDb25uZWN0b3JfMSA9IHJlcXVpcmUoXCIuL1N0YW5kYWxvbmVDb25uZWN0b3JcIik7XG5leHBvcnRzLlN0YW5kYWxvbmVDb25uZWN0b3IgPSBTdGFuZGFsb25lQ29ubmVjdG9yXzEuZGVmYXVsdDtcbmNvbnN0IFNlbnRpbmVsQ29ubmVjdG9yXzEgPSByZXF1aXJlKFwiLi9TZW50aW5lbENvbm5lY3RvclwiKTtcbmV4cG9ydHMuU2VudGluZWxDb25uZWN0b3IgPSBTZW50aW5lbENvbm5lY3Rvcl8xLmRlZmF1bHQ7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/connectors/index.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/constants/TLSProfiles.js":
/*!*************************************************************!*\
!*** ./node_modules/ioredis/built/constants/TLSProfiles.js ***!
\*************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n/**\n * TLS settings for Redis Cloud. Updated on 2022-08-19.\n */\nconst RedisCloudCA = `-----BEGIN CERTIFICATE-----\nMIIDTzCCAjegAwIBAgIJAKSVpiDswLcwMA0GCSqGSIb3DQEBBQUAMD4xFjAUBgNV\nBAoMDUdhcmFudGlhIERhdGExJDAiBgNVBAMMG1NTTCBDZXJ0aWZpY2F0aW9uIEF1\ndGhvcml0eTAeFw0xMzEwMDExMjE0NTVaFw0yMzA5MjkxMjE0NTVaMD4xFjAUBgNV\nBAoMDUdhcmFudGlhIERhdGExJDAiBgNVBAMMG1NTTCBDZXJ0aWZpY2F0aW9uIEF1\ndGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALZqkh/DczWP\nJnxnHLQ7QL0T4B4CDKWBKCcisriGbA6ZePWVNo4hfKQC6JrzfR+081NeD6VcWUiz\nrmd+jtPhIY4c+WVQYm5PKaN6DT1imYdxQw7aqO5j2KUCEh/cznpLxeSHoTxlR34E\nQwF28Wl3eg2vc5ct8LjU3eozWVk3gb7alx9mSA2SgmuX5lEQawl++rSjsBStemY2\nBDwOpAMXIrdEyP/cVn8mkvi/BDs5M5G+09j0gfhyCzRWMQ7Hn71u1eolRxwVxgi3\nTMn+/vTaFSqxKjgck6zuAYjBRPaHe7qLxHNr1So/Mc9nPy+3wHebFwbIcnUojwbp\n4nctkWbjb2cCAwEAAaNQME4wHQYDVR0OBBYEFP1whtcrydmW3ZJeuSoKZIKjze3w\nMB8GA1UdIwQYMBaAFP1whtcrydmW3ZJeuSoKZIKjze3wMAwGA1UdEwQFMAMBAf8w\nDQYJKoZIhvcNAQEFBQADggEBAG2erXhwRAa7+ZOBs0B6X57Hwyd1R4kfmXcs0rta\nlbPpvgULSiB+TCbf3EbhJnHGyvdCY1tvlffLjdA7HJ0PCOn+YYLBA0pTU/dyvrN6\nSu8NuS5yubnt9mb13nDGYo1rnt0YRfxN+8DM3fXIVr038A30UlPX2Ou1ExFJT0MZ\nuFKY6ZvLdI6/1cbgmguMlAhM+DhKyV6Sr5699LM3zqeI816pZmlREETYkGr91q7k\nBpXJu/dtHaGxg1ZGu6w/PCsYGUcECWENYD4VQPd8N32JjOfu6vEgoEAwfPP+3oGp\nZ4m3ewACcWOAenqflb+cQYC4PsF7qbXDmRaWrbKntOlZ3n0=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIGMTCCBBmgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwajELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMQswCQYDVQQHDAJDQTESMBAGA1UECgwJUmVkaXNMYWJzMS0w\nKwYDVQQDDCRSZWRpc0xhYnMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN\nMTgwMjI1MTUzNzM3WhcNMjgwMjIzMTUzNzM3WjBfMQswCQYDVQQGEwJVUzELMAkG\nA1UECAwCQ0ExEjAQBgNVBAoMCVJlZGlzTGFiczEvMC0GA1UEAwwmUkNQIEludGVy\nbWVkaWF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA\nA4ICDwAwggIKAoICAQDf9dqbxc8Bq7Ctq9rWcxrGNKKHivqLAFpPq02yLPx6fsOv\nTq7GsDChAYBBc4v7Y2Ap9RD5Vs3dIhEANcnolf27QwrG9RMnnvzk8pCvp1o6zSU4\nVuOE1W66/O1/7e2rVxyrnTcP7UgK43zNIXu7+tiAqWsO92uSnuMoGPGpeaUm1jym\nhjWKtkAwDFSqvHY+XL5qDVBEjeUe+WHkYUg40cAXjusAqgm2hZt29c2wnVrxW25W\nP0meNlzHGFdA2AC5z54iRiqj57dTfBTkHoBczQxcyw6hhzxZQ4e5I5zOKjXXEhZN\nr0tA3YC14CTabKRus/JmZieyZzRgEy2oti64tmLYTqSlAD78pRL40VNoaSYetXLw\nhhNsXCHgWaY6d5bLOc/aIQMAV5oLvZQKvuXAF1IDmhPA+bZbpWipp0zagf1P1H3s\nUzsMdn2KM0ejzgotbtNlj5TcrVwpmvE3ktvUAuA+hi3FkVx1US+2Gsp5x4YOzJ7u\nP1WPk6ShF0JgnJH2ILdj6kttTWwFzH17keSFICWDfH/+kM+k7Y1v3EXMQXE7y0T9\nMjvJskz6d/nv+sQhY04xt64xFMGTnZjlJMzfQNi7zWFLTZnDD0lPowq7l3YiPoTT\nt5Xky83lu0KZsZBo0WlWaDG00gLVdtRgVbcuSWxpi5BdLb1kRab66JptWjxwXQID\nAQABo4HrMIHoMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHBzOi8vcmwtY2Etc2VydmVy\nLnJlZGlzbGFicy5jb20vdjEvY3JsMEYGCCsGAQUFBwEBBDowODA2BggrBgEFBQcw\nAYYqaHR0cHM6Ly9ybC1jYS1zZXJ2ZXIucmVkaXNsYWJzLmNvbS92MS9vY3NwMB0G\nA1UdDgQWBBQHar5OKvQUpP2qWt6mckzToeCOHDAfBgNVHSMEGDAWgBQi42wH6hM4\nL2sujEvLM0/u8lRXTzASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB\nhjANBgkqhkiG9w0BAQsFAAOCAgEAirEn/iTsAKyhd+pu2W3Z5NjCko4NPU0EYUbr\nAP7+POK2rzjIrJO3nFYQ/LLuC7KCXG+2qwan2SAOGmqWst13Y+WHp44Kae0kaChW\nvcYLXXSoGQGC8QuFSNUdaeg3RbMDYFT04dOkqufeWVccoHVxyTSg9eD8LZuHn5jw\n7QDLiEECBmIJHk5Eeo2TAZrx4Yx6ufSUX5HeVjlAzqwtAqdt99uCJ/EL8bgpWbe+\nXoSpvUv0SEC1I1dCAhCKAvRlIOA6VBcmzg5Am12KzkqTul12/VEFIgzqu0Zy2Jbc\nAUPrYVu/+tOGXQaijy7YgwH8P8n3s7ZeUa1VABJHcxrxYduDDJBLZi+MjheUDaZ1\njQRHYevI2tlqeSBqdPKG4zBY5lS0GiAlmuze5oENt0P3XboHoZPHiqcK3VECgTVh\n/BkJcuudETSJcZDmQ8YfoKfBzRQNg2sv/hwvUv73Ss51Sco8GEt2lD8uEdib1Q6z\nzDT5lXJowSzOD5ZA9OGDjnSRL+2riNtKWKEqvtEG3VBJoBzu9GoxbAc7wIZLxmli\niF5a/Zf5X+UXD3s4TMmy6C4QZJpAA2egsSQCnraWO2ULhh7iXMysSkF/nzVfZn43\niqpaB8++9a37hWq14ZmOv0TJIDz//b2+KC4VFXWQ5W5QC6whsjT+OlG4p5ZYG0jo\n616pxqo=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIFujCCA6KgAwIBAgIJAJ1aTT1lu2ScMA0GCSqGSIb3DQEBCwUAMGoxCzAJBgNV\nBAYTAlVTMQswCQYDVQQIDAJDQTELMAkGA1UEBwwCQ0ExEjAQBgNVBAoMCVJlZGlz\nTGFiczEtMCsGA1UEAwwkUmVkaXNMYWJzIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9y\naXR5MB4XDTE4MDIyNTE1MjA0MloXDTM4MDIyMDE1MjA0MlowajELMAkGA1UEBhMC\nVVMxCzAJBgNVBAgMAkNBMQswCQYDVQQHDAJDQTESMBAGA1UECgwJUmVkaXNMYWJz\nMS0wKwYDVQQDDCRSZWRpc0xhYnMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw\nggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDLEjXy7YrbN5Waau5cd6g1\nG5C2tMmeTpZ0duFAPxNU4oE3RHS5gGiok346fUXuUxbZ6QkuzeN2/2Z+RmRcJhQY\nDm0ZgdG4x59An1TJfnzKKoWj8ISmoHS/TGNBdFzXV7FYNLBuqZouqePI6ReC6Qhl\npp45huV32Q3a6IDrrvx7Wo5ZczEQeFNbCeCOQYNDdTmCyEkHqc2AGo8eoIlSTutT\nULOC7R5gzJVTS0e1hesQ7jmqHjbO+VQS1NAL4/5K6cuTEqUl+XhVhPdLWBXJQ5ag\n54qhX4v+ojLzeU1R/Vc6NjMvVtptWY6JihpgplprN0Yh2556ewcXMeturcKgXfGJ\nxeYzsjzXerEjrVocX5V8BNrg64NlifzTMKNOOv4fVZszq1SIHR8F9ROrqiOdh8iC\nJpUbLpXH9hWCSEO6VRMB2xJoKu3cgl63kF30s77x7wLFMEHiwsQRKxooE1UhgS9K\n2sO4TlQ1eWUvFvHSTVDQDlGQ6zu4qjbOpb3Q8bQwoK+ai2alkXVR4Ltxe9QlgYK3\nStsnPhruzZGA0wbXdpw0bnM+YdlEm5ffSTpNIfgHeaa7Dtb801FtA71ZlH7A6TaI\nSIQuUST9EKmv7xrJyx0W1pGoPOLw5T029aTjnICSLdtV9bLwysrLhIYG5bnPq78B\ncS+jZHFGzD7PUVGQD01nOQIDAQABo2MwYTAdBgNVHQ4EFgQUIuNsB+oTOC9rLoxL\nyzNP7vJUV08wHwYDVR0jBBgwFoAUIuNsB+oTOC9rLoxLyzNP7vJUV08wDwYDVR0T\nAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAHfg\nz5pMNUAKdMzK1aS1EDdK9yKz4qicILz5czSLj1mC7HKDRy8cVADUxEICis++CsCu\nrYOvyCVergHQLREcxPq4rc5Nq1uj6J6649NEeh4WazOOjL4ZfQ1jVznMbGy+fJm3\n3Hoelv6jWRG9iqeJZja7/1s6YC6bWymI/OY1e4wUKeNHAo+Vger7MlHV+RuabaX+\nhSJ8bJAM59NCM7AgMTQpJCncrcdLeceYniGy5Q/qt2b5mJkQVkIdy4TPGGB+AXDJ\nD0q3I/JDRkDUFNFdeW0js7fHdsvCR7O3tJy5zIgEV/o/BCkmJVtuwPYOrw/yOlKj\nTY/U7ATAx9VFF6/vYEOMYSmrZlFX+98L6nJtwDqfLB5VTltqZ4H/KBxGE3IRSt9l\nFXy40U+LnXzhhW+7VBAvyYX8GEXhHkKU8Gqk1xitrqfBXY74xKgyUSTolFSfFVgj\nmcM/X4K45bka+qpkj7Kfv/8D4j6aZekwhN2ly6hhC1SmQ8qjMjpG/mrWOSSHZFmf\nybu9iD2AYHeIOkshIl6xYIa++Q/00/vs46IzAbQyriOi0XxlSMMVtPx0Q3isp+ji\nn8Mq9eOuxYOEQ4of8twUkUDd528iwGtEdwf0Q01UyT84S62N8AySl1ZBKXJz6W4F\nUhWfa/HQYOAPDdEjNgnVwLI23b8t0TozyCWw7q8h\n-----END CERTIFICATE-----\n\n-----BEGIN CERTIFICATE-----\nMIIEjzCCA3egAwIBAgIQe55B/ALCKJDZtdNT8kD6hTANBgkqhkiG9w0BAQsFADBM\nMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xv\nYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0yMjAxMjYxMjAwMDBaFw0y\nNTAxMjYwMDAwMDBaMFgxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWdu\nIG52LXNhMS4wLAYDVQQDEyVHbG9iYWxTaWduIEF0bGFzIFIzIE9WIFRMUyBDQSAy\nMDIyIFEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmGmg1LW9b7Lf\n8zDD83yBDTEkt+FOxKJZqF4veWc5KZsQj9HfnUS2e5nj/E+JImlGPsQuoiosLuXD\nBVBNAMcUFa11buFMGMeEMwiTmCXoXRrXQmH0qjpOfKgYc5gHG3BsRGaRrf7VR4eg\nofNMG9wUBw4/g/TT7+bQJdA4NfE7Y4d5gEryZiBGB/swaX6Jp/8MF4TgUmOWmalK\ndZCKyb4sPGQFRTtElk67F7vU+wdGcrcOx1tDcIB0ncjLPMnaFicagl+daWGsKqTh\ncounQb6QJtYHa91KvCfKWocMxQ7OIbB5UARLPmC4CJ1/f8YFm35ebfzAeULYdGXu\njE9CLor0OwIDAQABo4IBXzCCAVswDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQG\nCCsGAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW\nBBSH5Zq7a7B/t95GfJWkDBpA8HHqdjAfBgNVHSMEGDAWgBSP8Et/qC5FJK5NUPpj\nmove4t0bvDB7BggrBgEFBQcBAQRvMG0wLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3Nw\nMi5nbG9iYWxzaWduLmNvbS9yb290cjMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9zZWN1\ncmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L3Jvb3QtcjMuY3J0MDYGA1UdHwQvMC0w\nK6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vcm9vdC1yMy5jcmwwIQYD\nVR0gBBowGDAIBgZngQwBAgIwDAYKKwYBBAGgMgoBAjANBgkqhkiG9w0BAQsFAAOC\nAQEAKRic9/f+nmhQU/wz04APZLjgG5OgsuUOyUEZjKVhNGDwxGTvKhyXGGAMW2B/\n3bRi+aElpXwoxu3pL6fkElbX3B0BeS5LoDtxkyiVEBMZ8m+sXbocwlPyxrPbX6mY\n0rVIvnuUeBH8X0L5IwfpNVvKnBIilTbcebfHyXkPezGwz7E1yhUULjJFm2bt0SdX\ny+4X/WeiiYIv+fTVgZZgl+/2MKIsu/qdBJc3f3TvJ8nz+Eax1zgZmww+RSQWeOj3\n15Iw6Z5FX+NwzY/Ab+9PosR5UosSeq+9HhtaxZttXG1nVh+avYPGYddWmiMT90J5\nZgKnO/Fx2hBgTxhOTMYaD312kg==\n-----END CERTIFICATE-----\n\n-----BEGIN CERTIFICATE-----\nMIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G\nA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp\nZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4\nMTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG\nA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8\nRgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT\ngHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm\nKPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd\nQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ\nXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw\nDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o\nLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU\nRUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp\njjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK\n6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX\nmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs\nMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH\nWD9f\n-----END CERTIFICATE-----`;\nconst TLSProfiles = {\n RedisCloudFixed: { ca: RedisCloudCA },\n RedisCloudFlexible: { ca: RedisCloudCA },\n};\nexports[\"default\"] = TLSProfiles;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2NvbnN0YW50cy9UTFNQcm9maWxlcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixrQkFBa0I7QUFDekMsMEJBQTBCLGtCQUFrQjtBQUM1QztBQUNBLGtCQUFlIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2NvbnN0YW50cy9UTFNQcm9maWxlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKlxuICogVExTIHNldHRpbmdzIGZvciBSZWRpcyBDbG91ZC4gVXBkYXRlZCBvbiAyMDIyLTA4LTE5LlxuICovXG5jb25zdCBSZWRpc0Nsb3VkQ0EgPSBgLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXG5NSUlEVHpDQ0FqZWdBd0lCQWdJSkFLU1ZwaURzd0xjd01BMEdDU3FHU0liM0RRRUJCUVVBTUQ0eEZqQVVCZ05WXG5CQW9NRFVkaGNtRnVkR2xoSUVSaGRHRXhKREFpQmdOVkJBTU1HMU5UVENCRFpYSjBhV1pwWTJGMGFXOXVJRUYxXG5kR2h2Y21sMGVUQWVGdzB4TXpFd01ERXhNakUwTlRWYUZ3MHlNekE1TWpreE1qRTBOVFZhTUQ0eEZqQVVCZ05WXG5CQW9NRFVkaGNtRnVkR2xoSUVSaGRHRXhKREFpQmdOVkJBTU1HMU5UVENCRFpYSjBhV1pwWTJGMGFXOXVJRUYxXG5kR2h2Y21sMGVUQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUxacWtoL0RjeldQXG5KbnhuSExRN1FMMFQ0QjRDREtXQktDY2lzcmlHYkE2WmVQV1ZObzRoZktRQzZKcnpmUiswODFOZUQ2VmNXVWl6XG5ybWQranRQaElZNGMrV1ZRWW01UEthTjZEVDFpbVlkeFF3N2FxTzVqMktVQ0VoL2N6bnBMeGVTSG9UeGxSMzRFXG5Rd0YyOFdsM2VnMnZjNWN0OExqVTNlb3pXVmszZ2I3YWx4OW1TQTJTZ211WDVsRVFhd2wrK3JTanNCU3RlbVkyXG5CRHdPcEFNWElyZEV5UC9jVm44bWt2aS9CRHM1TTVHKzA5ajBnZmh5Q3pSV01RN0huNzF1MWVvbFJ4d1Z4Z2kzXG5UTW4rL3ZUYUZTcXhLamdjazZ6dUFZakJSUGFIZTdxTHhITnIxU28vTWM5blB5KzN3SGViRndiSWNuVW9qd2JwXG40bmN0a1diamIyY0NBd0VBQWFOUU1FNHdIUVlEVlIwT0JCWUVGUDF3aHRjcnlkbVczWkpldVNvS1pJS2p6ZTN3XG5NQjhHQTFVZEl3UVlNQmFBRlAxd2h0Y3J5ZG1XM1pKZXVTb0taSUtqemUzd01Bd0dBMVVkRXdRRk1BTUJBZjh3XG5EUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBRzJlclhod1JBYTcrWk9CczBCNlg1N0h3eWQxUjRrZm1YY3MwcnRhXG5sYlBwdmdVTFNpQitUQ2JmM0ViaEpuSEd5dmRDWTF0dmxmZkxqZEE3SEowUENPbitZWUxCQTBwVFUvZHl2ck42XG5TdThOdVM1eXVibnQ5bWIxM25ER1lvMXJudDBZUmZ4Tis4RE0zZlhJVnIwMzhBMzBVbFBYMk91MUV4RkpUME1aXG51RktZNlp2TGRJNi8xY2JnbWd1TWxBaE0rRGhLeVY2U3I1Njk5TE0zenFlSTgxNnBabWxSRUVUWWtHcjkxcTdrXG5CcFhKdS9kdEhhR3hnMVpHdTZ3L1BDc1lHVWNFQ1dFTllENFZRUGQ4TjMySmpPZnU2dkVnb0VBd2ZQUCszb0dwXG5aNG0zZXdBQ2NXT0FlbnFmbGIrY1FZQzRQc0Y3cWJYRG1SYVdyYktudE9sWjNuMD1cbi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cbi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxuTUlJR01UQ0NCQm1nQXdJQkFnSUNFQUF3RFFZSktvWklodmNOQVFFTEJRQXdhakVMTUFrR0ExVUVCaE1DVlZNeFxuQ3pBSkJnTlZCQWdNQWtOQk1Rc3dDUVlEVlFRSERBSkRRVEVTTUJBR0ExVUVDZ3dKVW1Wa2FYTk1ZV0p6TVMwd1xuS3dZRFZRUUREQ1JTWldScGMweGhZbk1nVW05dmRDQkRaWEowYVdacFkyRjBaU0JCZFhSb2IzSnBkSGt3SGhjTlxuTVRnd01qSTFNVFV6TnpNM1doY05Namd3TWpJek1UVXpOek0zV2pCZk1Rc3dDUVlEVlFRR0V3SlZVekVMTUFrR1xuQTFVRUNBd0NRMEV4RWpBUUJnTlZCQW9NQ1ZKbFpHbHpUR0ZpY3pFdk1DMEdBMVVFQXd3bVVrTlFJRWx1ZEdWeVxuYldWa2FXRjBaU0JEWlhKMGFXWnBZMkYwWlNCQmRYUm9iM0pwZEhrd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQVxuQTRJQ0R3QXdnZ0lLQW9JQ0FRRGY5ZHFieGM4QnE3Q3RxOXJXY3hyR05LS0hpdnFMQUZwUHEwMnlMUHg2ZnNPdlxuVHE3R3NEQ2hBWUJCYzR2N1kyQXA5UkQ1VnMzZEloRUFOY25vbGYyN1F3ckc5Uk1ubnZ6azhwQ3ZwMW82elNVNFxuVnVPRTFXNjYvTzEvN2UyclZ4eXJuVGNQN1VnSzQzek5JWHU3K3RpQXFXc085MnVTbnVNb0dQR3BlYVVtMWp5bVxuaGpXS3RrQXdERlNxdkhZK1hMNXFEVkJFamVVZStXSGtZVWc0MGNBWGp1c0FxZ20yaFp0MjljMnduVnJ4VzI1V1xuUDBtZU5sekhHRmRBMkFDNXo1NGlSaXFqNTdkVGZCVGtIb0JjelF4Y3l3NmhoenhaUTRlNUk1ek9LalhYRWhaTlxucjB0QTNZQzE0Q1RhYktSdXMvSm1aaWV5WnpSZ0V5Mm90aTY0dG1MWVRxU2xBRDc4cFJMNDBWTm9hU1lldFhMd1xuaGhOc1hDSGdXYVk2ZDViTE9jL2FJUU1BVjVvTHZaUUt2dVhBRjFJRG1oUEErYlpicFdpcHAwemFnZjFQMUgzc1xuVXpzTWRuMktNMGVqemdvdGJ0TmxqNVRjclZ3cG12RTNrdHZVQXVBK2hpM0ZrVngxVVMrMkdzcDV4NFlPeko3dVxuUDFXUGs2U2hGMEpnbkpIMklMZGo2a3R0VFd3RnpIMTdrZVNGSUNXRGZILytrTStrN1kxdjNFWE1RWEU3eTBUOVxuTWp2SnNrejZkL252K3NRaFkwNHh0NjR4Rk1HVG5aamxKTXpmUU5pN3pXRkxUWm5ERDBsUG93cTdsM1lpUG9UVFxudDVYa3k4M2x1MEtac1pCbzBXbFdhREcwMGdMVmR0UmdWYmN1U1d4cGk1QmRMYjFrUmFiNjZKcHRXanh3WFFJRFxuQVFBQm80SHJNSUhvTURvR0ExVWRId1F6TURFd0w2QXRvQ3VHS1doMGRIQnpPaTh2Y213dFkyRXRjMlZ5ZG1WeVxuTG5KbFpHbHpiR0ZpY3k1amIyMHZkakV2WTNKc01FWUdDQ3NHQVFVRkJ3RUJCRG93T0RBMkJnZ3JCZ0VGQlFjd1xuQVlZcWFIUjBjSE02THk5eWJDMWpZUzF6WlhKMlpYSXVjbVZrYVhOc1lXSnpMbU52YlM5Mk1TOXZZM053TUIwR1xuQTFVZERnUVdCQlFIYXI1T0t2UVVwUDJxV3Q2bWNrelRvZUNPSERBZkJnTlZIU01FR0RBV2dCUWk0MndINmhNNFxuTDJzdWpFdkxNMC91OGxSWFR6QVNCZ05WSFJNQkFmOEVDREFHQVFIL0FnRUFNQTRHQTFVZER3RUIvd1FFQXdJQlxuaGpBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQWdFQWlyRW4vaVRzQUt5aGQrcHUyVzNaNU5qQ2tvNE5QVTBFWVViclxuQVA3K1BPSzJyempJckpPM25GWVEvTEx1QzdLQ1hHKzJxd2FuMlNBT0dtcVdzdDEzWStXSHA0NEthZTBrYUNoV1xudmNZTFhYU29HUUdDOFF1RlNOVWRhZWczUmJNRFlGVDA0ZE9rcXVmZVdWY2NvSFZ4eVRTZzllRDhMWnVIbjVqd1xuN1FETGlFRUNCbUlKSGs1RWVvMlRBWnJ4NFl4NnVmU1VYNUhlVmpsQXpxd3RBcWR0OTl1Q0ovRUw4YmdwV2JlK1xuWG9TcHZVdjBTRUMxSTFkQ0FoQ0tBdlJsSU9BNlZCY216ZzVBbTEyS3prcVR1bDEyL1ZFRklnenF1MFp5MkpiY1xuQVVQcllWdS8rdE9HWFFhaWp5N1lnd0g4UDhuM3M3WmVVYTFWQUJKSGN4cnhZZHVEREpCTFppK01qaGVVRGFaMVxualFSSFlldkkydGxxZVNCcWRQS0c0ekJZNWxTMEdpQWxtdXplNW9FTnQwUDNYYm9Ib1pQSGlxY0szVkVDZ1RWaFxuL0JrSmN1dWRFVFNKY1pEbVE4WWZvS2ZCelJRTmcyc3YvaHd2VXY3M1NzNTFTY284R0V0MmxEOHVFZGliMVE2elxuekRUNWxYSm93U3pPRDVaQTlPR0RqblNSTCsycmlOdEtXS0VxdnRFRzNWQkpvQnp1OUdveGJBYzd3SVpMeG1saVxuaUY1YS9aZjVYK1VYRDNzNFRNbXk2QzRRWkpwQUEyZWdzU1FDbnJhV08yVUxoaDdpWE15c1NrRi9uelZmWm40M1xuaXFwYUI4Kys5YTM3aFdxMTRabU92MFRKSUR6Ly9iMitLQzRWRlhXUTVXNVFDNndoc2pUK09sRzRwNVpZRzBqb1xuNjE2cHhxbz1cbi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cbi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxuTUlJRnVqQ0NBNktnQXdJQkFnSUpBSjFhVFQxbHUyU2NNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1Hb3hDekFKQmdOVlxuQkFZVEFsVlRNUXN3Q1FZRFZRUUlEQUpEUVRFTE1Ba0dBMVVFQnd3Q1EwRXhFakFRQmdOVkJBb01DVkpsWkdselxuVEdGaWN6RXRNQ3NHQTFVRUF3d2tVbVZrYVhOTVlXSnpJRkp2YjNRZ1EyVnlkR2xtYVdOaGRHVWdRWFYwYUc5eVxuYVhSNU1CNFhEVEU0TURJeU5URTFNakEwTWxvWERUTTRNREl5TURFMU1qQTBNbG93YWpFTE1Ba0dBMVVFQmhNQ1xuVlZNeEN6QUpCZ05WQkFnTUFrTkJNUXN3Q1FZRFZRUUhEQUpEUVRFU01CQUdBMVVFQ2d3SlVtVmthWE5NWVdKelxuTVMwd0t3WURWUVFERENSU1pXUnBjMHhoWW5NZ1VtOXZkQ0JEWlhKMGFXWnBZMkYwWlNCQmRYUm9iM0pwZEhrd1xuZ2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRRExFalh5N1lyYk41V2FhdTVjZDZnMVxuRzVDMnRNbWVUcFowZHVGQVB4TlU0b0UzUkhTNWdHaW9rMzQ2ZlVYdVV4Ylo2UWt1emVOMi8yWitSbVJjSmhRWVxuRG0wWmdkRzR4NTlBbjFUSmZuektLb1dqOElTbW9IUy9UR05CZEZ6WFY3RllOTEJ1cVpvdXFlUEk2UmVDNlFobFxucHA0NWh1VjMyUTNhNklEcnJ2eDdXbzVaY3pFUWVGTmJDZUNPUVlORGRUbUN5RWtIcWMyQUdvOGVvSWxTVHV0VFxuVUxPQzdSNWd6SlZUUzBlMWhlc1E3am1xSGpiTytWUVMxTkFMNC81SzZjdVRFcVVsK1hoVmhQZExXQlhKUTVhZ1xuNTRxaFg0ditvakx6ZVUxUi9WYzZOak12VnRwdFdZNkppaHBncGxwck4wWWgyNTU2ZXdjWE1ldHVyY0tnWGZHSlxueGVZenNqelhlckVqclZvY1g1VjhCTnJnNjRObGlmelRNS05PT3Y0ZlZac3pxMVNJSFI4RjlST3JxaU9kaDhpQ1xuSnBVYkxwWEg5aFdDU0VPNlZSTUIyeEpvS3UzY2dsNjNrRjMwczc3eDd3TEZNRUhpd3NRUkt4b29FMVVoZ1M5S1xuMnNPNFRsUTFlV1V2RnZIU1RWRFFEbEdRNnp1NHFqYk9wYjNROGJRd29LK2FpMmFsa1hWUjRMdHhlOVFsZ1lLM1xuU3RzblBocnV6WkdBMHdiWGRwdzBibk0rWWRsRW01ZmZTVHBOSWZnSGVhYTdEdGI4MDFGdEE3MVpsSDdBNlRhSVxuU0lRdVVTVDlFS212N3hySnl4MFcxcEdvUE9MdzVUMDI5YVRqbklDU0xkdFY5Ykx3eXNyTGhJWUc1Ym5QcTc4QlxuY1MralpIRkd6RDdQVVZHUUQwMW5PUUlEQVFBQm8yTXdZVEFkQmdOVkhRNEVGZ1FVSXVOc0Irb1RPQzlyTG94TFxueXpOUDd2SlVWMDh3SHdZRFZSMGpCQmd3Rm9BVUl1TnNCK29UT0M5ckxveEx5ek5QN3ZKVVYwOHdEd1lEVlIwVFxuQVFIL0JBVXdBd0VCL3pBT0JnTlZIUThCQWY4RUJBTUNBWVl3RFFZSktvWklodmNOQVFFTEJRQURnZ0lCQUhmZ1xuejVwTU5VQUtkTXpLMWFTMUVEZEs5eUt6NHFpY0lMejVjelNMajFtQzdIS0RSeThjVkFEVXhFSUNpcysrQ3NDdVxucllPdnlDVmVyZ0hRTFJFY3hQcTRyYzVOcTF1ajZKNjY0OU5FZWg0V2F6T09qTDRaZlExalZ6bk1iR3krZkptM1xuM0hvZWx2NmpXUkc5aXFlSlpqYTcvMXM2WUM2Yld5bUkvT1kxZTR3VUtlTkhBbytWZ2VyN01sSFYrUnVhYmFYK1xuaFNKOGJKQU01OU5DTTdBZ01UUXBKQ25jcmNkTGVjZVluaUd5NVEvcXQyYjVtSmtRVmtJZHk0VFBHR0IrQVhESlxuRDBxM0kvSkRSa0RVRk5GZGVXMGpzN2ZIZHN2Q1I3TzN0Snk1eklnRVYvby9CQ2ttSlZ0dXdQWU9ydy95T2xLalxuVFkvVTdBVEF4OVZGRjYvdllFT01ZU21yWmxGWCs5OEw2bkp0d0RxZkxCNVZUbHRxWjRIL0tCeEdFM0lSU3Q5bFxuRlh5NDBVK0xuWHpoaFcrN1ZCQXZ5WVg4R0VYaEhrS1U4R3FrMXhpdHJxZkJYWTc0eEtneVVTVG9sRlNmRlZnalxubWNNL1g0SzQ1YmthK3Fwa2o3S2Z2LzhENGo2YVpla3doTjJseTZoaEMxU21ROHFqTWpwRy9tcldPU1NIWkZtZlxueWJ1OWlEMkFZSGVJT2tzaElsNnhZSWErK1EvMDAvdnM0Nkl6QWJReXJpT2kwWHhsU01NVnRQeDBRM2lzcCtqaVxubjhNcTllT3V4WU9FUTRvZjh0d1VrVURkNTI4aXdHdEVkd2YwUTAxVXlUODRTNjJOOEF5U2wxWkJLWEp6Nlc0RlxuVWhXZmEvSFFZT0FQRGRFak5nblZ3TEkyM2I4dDBUb3p5Q1d3N3E4aFxuLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxuXG4tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cbk1JSUVqekNDQTNlZ0F3SUJBZ0lRZTU1Qi9BTENLSkRadGROVDhrRDZoVEFOQmdrcWhraUc5dzBCQVFzRkFEQk1cbk1TQXdIZ1lEVlFRTEV4ZEhiRzlpWVd4VGFXZHVJRkp2YjNRZ1EwRWdMU0JTTXpFVE1CRUdBMVVFQ2hNS1IyeHZcblltRnNVMmxuYmpFVE1CRUdBMVVFQXhNS1IyeHZZbUZzVTJsbmJqQWVGdzB5TWpBeE1qWXhNakF3TURCYUZ3MHlcbk5UQXhNall3TURBd01EQmFNRmd4Q3pBSkJnTlZCQVlUQWtKRk1Sa3dGd1lEVlFRS0V4QkhiRzlpWVd4VGFXZHVcbklHNTJMWE5oTVM0d0xBWURWUVFERXlWSGJHOWlZV3hUYVdkdUlFRjBiR0Z6SUZJeklFOVdJRlJNVXlCRFFTQXlcbk1ESXlJRkV5TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFtR21nMUxXOWI3TGZcbjh6REQ4M3lCRFRFa3QrRk94S0pacUY0dmVXYzVLWnNRajlIZm5VUzJlNW5qL0UrSkltbEdQc1F1b2lvc0x1WERcbkJWQk5BTWNVRmExMWJ1Rk1HTWVFTXdpVG1DWG9YUnJYUW1IMHFqcE9mS2dZYzVnSEczQnNSR2FScmY3VlI0ZWdcbm9mTk1HOXdVQnc0L2cvVFQ3K2JRSmRBNE5mRTdZNGQ1Z0VyeVppQkdCL3N3YVg2SnAvOE1GNFRnVW1PV21hbEtcbmRaQ0t5YjRzUEdRRlJUdEVsazY3Rjd2VSt3ZEdjcmNPeDF0RGNJQjBuY2pMUE1uYUZpY2FnbCtkYVdHc0txVGhcbmNvdW5RYjZRSnRZSGE5MUt2Q2ZLV29jTXhRN09JYkI1VUFSTFBtQzRDSjEvZjhZRm0zNWViZnpBZVVMWWRHWHVcbmpFOUNMb3IwT3dJREFRQUJvNElCWHpDQ0FWc3dEZ1lEVlIwUEFRSC9CQVFEQWdHR01CMEdBMVVkSlFRV01CUUdcbkNDc0dBUVVGQndNQkJnZ3JCZ0VGQlFjREFqQVNCZ05WSFJNQkFmOEVDREFHQVFIL0FnRUFNQjBHQTFVZERnUVdcbkJCU0g1WnE3YTdCL3Q5NUdmSldrREJwQThISHFkakFmQmdOVkhTTUVHREFXZ0JTUDhFdC9xQzVGSks1TlVQcGpcbm1vdmU0dDBidkRCN0JnZ3JCZ0VGQlFjQkFRUnZNRzB3TGdZSUt3WUJCUVVITUFHR0ltaDBkSEE2THk5dlkzTndcbk1pNW5iRzlpWVd4emFXZHVMbU52YlM5eWIyOTBjak13T3dZSUt3WUJCUVVITUFLR0wyaDBkSEE2THk5elpXTjFcbmNtVXVaMnh2WW1Gc2MybG5iaTVqYjIwdlkyRmpaWEowTDNKdmIzUXRjak11WTNKME1EWUdBMVVkSHdRdk1DMHdcbks2QXBvQ2VHSldoMGRIQTZMeTlqY213dVoyeHZZbUZzYzJsbmJpNWpiMjB2Y205dmRDMXlNeTVqY213d0lRWURcblZSMGdCQm93R0RBSUJnWm5nUXdCQWdJd0RBWUtLd1lCQkFHZ01nb0JBakFOQmdrcWhraUc5dzBCQVFzRkFBT0NcbkFRRUFLUmljOS9mK25taFFVL3d6MDRBUFpMamdHNU9nc3VVT3lVRVpqS1ZoTkdEd3hHVHZLaHlYR0dBTVcyQi9cbjNiUmkrYUVscFh3b3h1M3BMNmZrRWxiWDNCMEJlUzVMb0R0eGt5aVZFQk1aOG0rc1hib2N3bFB5eHJQYlg2bVlcbjByVkl2bnVVZUJIOFgwTDVJd2ZwTlZ2S25CSWlsVGJjZWJmSHlYa1Blekd3ejdFMXloVVVMakpGbTJidDBTZFhcbnkrNFgvV2VpaVlJditmVFZnWlpnbCsvMk1LSXN1L3FkQkpjM2YzVHZKOG56K0VheDF6Z1ptd3crUlNRV2VPajNcbjE1SXc2WjVGWCtOd3pZL0FiKzlQb3NSNVVvc1NlcSs5SGh0YXhadHRYRzFuVmgrYXZZUEdZZGRXbWlNVDkwSjVcblpnS25PL0Z4MmhCZ1R4aE9UTVlhRDMxMmtnPT1cbi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cblxuLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXG5NSUlEWHpDQ0FrZWdBd0lCQWdJTEJBQUFBQUFCSVZoVENLSXdEUVlKS29aSWh2Y05BUUVMQlFBd1RERWdNQjRHXG5BMVVFQ3hNWFIyeHZZbUZzVTJsbmJpQlNiMjkwSUVOQklDMGdVak14RXpBUkJnTlZCQW9UQ2tkc2IySmhiRk5wXG5aMjR4RXpBUkJnTlZCQU1UQ2tkc2IySmhiRk5wWjI0d0hoY05NRGt3TXpFNE1UQXdNREF3V2hjTk1qa3dNekU0XG5NVEF3TURBd1dqQk1NU0F3SGdZRFZRUUxFeGRIYkc5aVlXeFRhV2R1SUZKdmIzUWdRMEVnTFNCU016RVRNQkVHXG5BMVVFQ2hNS1IyeHZZbUZzVTJsbmJqRVRNQkVHQTFVRUF4TUtSMnh2WW1Gc1UybG5iakNDQVNJd0RRWUpLb1pJXG5odmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU13bGRwQjVCbmdpRnZYQWc3YUV5aWllL1FWMkVjV3RpSEw4XG5SZ0pEeDdLS25RUmZKTXN1UytGZ2drYmhVcXNNZ1Vkd2JOMWswZXYxTEtNUGdqME1LNjZYMTdZVWhoQjV1enNUXG5nSGVNQ09GSjBtcGlMeDllK3BabzM0a25sVGlmQnRjK3ljc21XUTF6M3JESTZTWU9neFhHNzF1TDBnUmd5a21tXG5LUFpwTy9iTHlDaVI1WjJLWVZjM3JIUVUzSFRnT3U1eUx5NmMrOUM3di9VOUFPRUdNK2lDSzY1VHBqb1djNHpkXG5RUTRnT3NDMHA2SHBzaytRTGpKZzZWZkx1UVNTYUdqbE9DWmdkYktmZC8rUkZPK3VJRW44clVBVlNORUNNV0VaXG5YcmlYNzYxM3QyU2Flcjlmd1JQdm0yTDdEV3pnVkdrV3FRUGFidW1EazNGMnhtbUZnaGNDQXdFQUFhTkNNRUF3XG5EZ1lEVlIwUEFRSC9CQVFEQWdFR01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZJL3dTMytvXG5Ma1VrcmsxUSttT2FpOTdpM1J1OE1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQkxRTnZBVUtyK3lBenY5NVpVXG5SVW03bGdBSlFheXpFNGFHS0Fjenltdm1kTG02QUMydXBBclQ5Zkh4RDRxL2MyZEtnOGRFZTNqZ3IyNXNid01wXG5qak01UmNPTzVMbFhiS3I4RXBic1U4WXQ1Q1JzdVpSais5eFRhR2RXUG9PNHp6VWh3OGxvL3M3YXdsT3F6SkNLXG42ZkJkUm95VjNYcFlLQm92SGQ3TkFEZEJqKzFFYmRkVEtKZCs4MmNFSGhYWGlwYTAwOTVNSjZSTUczTnpkdlFYXG5tY0lmZWc3akxRaXRDaHdzL3p5clZRNFBrWDQyNjhOWFNiN2hMaTE4WUl2RFFWRVRJNTNPOXpKcmxBR29tZWNzXG5NeDg2T3lYU2hrRE9PeXlHZU1saEx4UzY3dHRWYjkrRTdnVUpUYjBvMkhMTzAySlFaUjdya3BlRE1kbXp0Y3BIXG5XRDlmXG4tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tYDtcbmNvbnN0IFRMU1Byb2ZpbGVzID0ge1xuICAgIFJlZGlzQ2xvdWRGaXhlZDogeyBjYTogUmVkaXNDbG91ZENBIH0sXG4gICAgUmVkaXNDbG91ZEZsZXhpYmxlOiB7IGNhOiBSZWRpc0Nsb3VkQ0EgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBUTFNQcm9maWxlcztcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/constants/TLSProfiles.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/errors/ClusterAllFailedError.js":
/*!********************************************************************!*\
!*** ./node_modules/ioredis/built/errors/ClusterAllFailedError.js ***!
\********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst redis_errors_1 = __webpack_require__(/*! redis-errors */ \"(action-browser)/./node_modules/redis-errors/index.js\");\nclass ClusterAllFailedError extends redis_errors_1.RedisError {\n constructor(message, lastNodeError) {\n super(message);\n this.lastNodeError = lastNodeError;\n Error.captureStackTrace(this, this.constructor);\n }\n get name() {\n return this.constructor.name;\n }\n}\nexports[\"default\"] = ClusterAllFailedError;\nClusterAllFailedError.defaultMessage = \"Failed to refresh slots cache.\";\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2Vycm9ycy9DbHVzdGVyQWxsRmFpbGVkRXJyb3IuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsdUJBQXVCLG1CQUFPLENBQUMsMkVBQWM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2Vycm9ycy9DbHVzdGVyQWxsRmFpbGVkRXJyb3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCByZWRpc19lcnJvcnNfMSA9IHJlcXVpcmUoXCJyZWRpcy1lcnJvcnNcIik7XG5jbGFzcyBDbHVzdGVyQWxsRmFpbGVkRXJyb3IgZXh0ZW5kcyByZWRpc19lcnJvcnNfMS5SZWRpc0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBsYXN0Tm9kZUVycm9yKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmxhc3ROb2RlRXJyb3IgPSBsYXN0Tm9kZUVycm9yO1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gQ2x1c3RlckFsbEZhaWxlZEVycm9yO1xuQ2x1c3RlckFsbEZhaWxlZEVycm9yLmRlZmF1bHRNZXNzYWdlID0gXCJGYWlsZWQgdG8gcmVmcmVzaCBzbG90cyBjYWNoZS5cIjtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/errors/ClusterAllFailedError.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/errors/MaxRetriesPerRequestError.js":
/*!************************************************************************!*\
!*** ./node_modules/ioredis/built/errors/MaxRetriesPerRequestError.js ***!
\************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst redis_errors_1 = __webpack_require__(/*! redis-errors */ \"(action-browser)/./node_modules/redis-errors/index.js\");\nclass MaxRetriesPerRequestError extends redis_errors_1.AbortError {\n constructor(maxRetriesPerRequest) {\n const message = `Reached the max retries per request limit (which is ${maxRetriesPerRequest}). Refer to \"maxRetriesPerRequest\" option for details.`;\n super(message);\n Error.captureStackTrace(this, this.constructor);\n }\n get name() {\n return this.constructor.name;\n }\n}\nexports[\"default\"] = MaxRetriesPerRequestError;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2Vycm9ycy9NYXhSZXRyaWVzUGVyUmVxdWVzdEVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHVCQUF1QixtQkFBTyxDQUFDLDJFQUFjO0FBQzdDO0FBQ0E7QUFDQSwrRUFBK0UscUJBQXFCO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWUiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvZXJyb3JzL01heFJldHJpZXNQZXJSZXF1ZXN0RXJyb3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCByZWRpc19lcnJvcnNfMSA9IHJlcXVpcmUoXCJyZWRpcy1lcnJvcnNcIik7XG5jbGFzcyBNYXhSZXRyaWVzUGVyUmVxdWVzdEVycm9yIGV4dGVuZHMgcmVkaXNfZXJyb3JzXzEuQWJvcnRFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWF4UmV0cmllc1BlclJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBSZWFjaGVkIHRoZSBtYXggcmV0cmllcyBwZXIgcmVxdWVzdCBsaW1pdCAod2hpY2ggaXMgJHttYXhSZXRyaWVzUGVyUmVxdWVzdH0pLiBSZWZlciB0byBcIm1heFJldHJpZXNQZXJSZXF1ZXN0XCIgb3B0aW9uIGZvciBkZXRhaWxzLmA7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gTWF4UmV0cmllc1BlclJlcXVlc3RFcnJvcjtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/errors/MaxRetriesPerRequestError.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/errors/index.js":
/*!****************************************************!*\
!*** ./node_modules/ioredis/built/errors/index.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.MaxRetriesPerRequestError = void 0;\nconst MaxRetriesPerRequestError_1 = __webpack_require__(/*! ./MaxRetriesPerRequestError */ \"(action-browser)/./node_modules/ioredis/built/errors/MaxRetriesPerRequestError.js\");\nexports.MaxRetriesPerRequestError = MaxRetriesPerRequestError_1.default;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2Vycm9ycy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxpQ0FBaUM7QUFDakMsb0NBQW9DLG1CQUFPLENBQUMsc0hBQTZCO0FBQ3pFLGlDQUFpQyIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9lcnJvcnMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1heFJldHJpZXNQZXJSZXF1ZXN0RXJyb3IgPSB2b2lkIDA7XG5jb25zdCBNYXhSZXRyaWVzUGVyUmVxdWVzdEVycm9yXzEgPSByZXF1aXJlKFwiLi9NYXhSZXRyaWVzUGVyUmVxdWVzdEVycm9yXCIpO1xuZXhwb3J0cy5NYXhSZXRyaWVzUGVyUmVxdWVzdEVycm9yID0gTWF4UmV0cmllc1BlclJlcXVlc3RFcnJvcl8xLmRlZmF1bHQ7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/errors/index.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/index.js":
/*!*********************************************!*\
!*** ./node_modules/ioredis/built/index.js ***!
\*********************************************/
/***/ ((module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.print = exports.ReplyError = exports.SentinelIterator = exports.SentinelConnector = exports.AbstractConnector = exports.Pipeline = exports.ScanStream = exports.Command = exports.Cluster = exports.Redis = exports[\"default\"] = void 0;\nexports = module.exports = __webpack_require__(/*! ./Redis */ \"(action-browser)/./node_modules/ioredis/built/Redis.js\")[\"default\"];\nvar Redis_1 = __webpack_require__(/*! ./Redis */ \"(action-browser)/./node_modules/ioredis/built/Redis.js\");\nObject.defineProperty(exports, \"default\", ({ enumerable: true, get: function () { return Redis_1.default; } }));\nvar Redis_2 = __webpack_require__(/*! ./Redis */ \"(action-browser)/./node_modules/ioredis/built/Redis.js\");\nObject.defineProperty(exports, \"Redis\", ({ enumerable: true, get: function () { return Redis_2.default; } }));\nvar cluster_1 = __webpack_require__(/*! ./cluster */ \"(action-browser)/./node_modules/ioredis/built/cluster/index.js\");\nObject.defineProperty(exports, \"Cluster\", ({ enumerable: true, get: function () { return cluster_1.default; } }));\n/**\n * @ignore\n */\nvar Command_1 = __webpack_require__(/*! ./Command */ \"(action-browser)/./node_modules/ioredis/built/Command.js\");\nObject.defineProperty(exports, \"Command\", ({ enumerable: true, get: function () { return Command_1.default; } }));\n/**\n * @ignore\n */\nvar ScanStream_1 = __webpack_require__(/*! ./ScanStream */ \"(action-browser)/./node_modules/ioredis/built/ScanStream.js\");\nObject.defineProperty(exports, \"ScanStream\", ({ enumerable: true, get: function () { return ScanStream_1.default; } }));\n/**\n * @ignore\n */\nvar Pipeline_1 = __webpack_require__(/*! ./Pipeline */ \"(action-browser)/./node_modules/ioredis/built/Pipeline.js\");\nObject.defineProperty(exports, \"Pipeline\", ({ enumerable: true, get: function () { return Pipeline_1.default; } }));\n/**\n * @ignore\n */\nvar AbstractConnector_1 = __webpack_require__(/*! ./connectors/AbstractConnector */ \"(action-browser)/./node_modules/ioredis/built/connectors/AbstractConnector.js\");\nObject.defineProperty(exports, \"AbstractConnector\", ({ enumerable: true, get: function () { return AbstractConnector_1.default; } }));\n/**\n * @ignore\n */\nvar SentinelConnector_1 = __webpack_require__(/*! ./connectors/SentinelConnector */ \"(action-browser)/./node_modules/ioredis/built/connectors/SentinelConnector/index.js\");\nObject.defineProperty(exports, \"SentinelConnector\", ({ enumerable: true, get: function () { return SentinelConnector_1.default; } }));\nObject.defineProperty(exports, \"SentinelIterator\", ({ enumerable: true, get: function () { return SentinelConnector_1.SentinelIterator; } }));\n// No TS typings\nexports.ReplyError = __webpack_require__(/*! redis-errors */ \"(action-browser)/./node_modules/redis-errors/index.js\").ReplyError;\n/**\n * @ignore\n */\nObject.defineProperty(exports, \"Promise\", ({\n get() {\n console.warn(\"ioredis v5 does not support plugging third-party Promise library anymore. Native Promise will be used.\");\n return Promise;\n },\n set(_lib) {\n console.warn(\"ioredis v5 does not support plugging third-party Promise library anymore. Native Promise will be used.\");\n },\n}));\n/**\n * @ignore\n */\nfunction print(err, reply) {\n if (err) {\n console.log(\"Error: \" + err);\n }\n else {\n console.log(\"Reply: \" + reply);\n }\n}\nexports.print = print;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGFBQWEsR0FBRyxrQkFBa0IsR0FBRyx3QkFBd0IsR0FBRyx5QkFBeUIsR0FBRyx5QkFBeUIsR0FBRyxnQkFBZ0IsR0FBRyxrQkFBa0IsR0FBRyxlQUFlLEdBQUcsZUFBZSxHQUFHLGFBQWEsR0FBRyxrQkFBZTtBQUNuTyxVQUFVLHdIQUEyQztBQUNyRCxjQUFjLG1CQUFPLENBQUMsdUVBQVM7QUFDL0IsMkNBQTBDLEVBQUUscUNBQXFDLDJCQUEyQixFQUFDO0FBQzdHLGNBQWMsbUJBQU8sQ0FBQyx1RUFBUztBQUMvQix5Q0FBd0MsRUFBRSxxQ0FBcUMsMkJBQTJCLEVBQUM7QUFDM0csZ0JBQWdCLG1CQUFPLENBQUMsaUZBQVc7QUFDbkMsMkNBQTBDLEVBQUUscUNBQXFDLDZCQUE2QixFQUFDO0FBQy9HO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLDJFQUFXO0FBQ25DLDJDQUEwQyxFQUFFLHFDQUFxQyw2QkFBNkIsRUFBQztBQUMvRztBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyxpRkFBYztBQUN6Qyw4Q0FBNkMsRUFBRSxxQ0FBcUMsZ0NBQWdDLEVBQUM7QUFDckg7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsNkVBQVk7QUFDckMsNENBQTJDLEVBQUUscUNBQXFDLDhCQUE4QixFQUFDO0FBQ2pIO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixtQkFBTyxDQUFDLHFIQUFnQztBQUNsRSxxREFBb0QsRUFBRSxxQ0FBcUMsdUNBQXVDLEVBQUM7QUFDbkk7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLG1CQUFPLENBQUMsMkhBQWdDO0FBQ2xFLHFEQUFvRCxFQUFFLHFDQUFxQyx1Q0FBdUMsRUFBQztBQUNuSSxvREFBbUQsRUFBRSxxQ0FBcUMsZ0RBQWdELEVBQUM7QUFDM0k7QUFDQSxnSUFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsMkNBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsRUFBQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wcmludCA9IGV4cG9ydHMuUmVwbHlFcnJvciA9IGV4cG9ydHMuU2VudGluZWxJdGVyYXRvciA9IGV4cG9ydHMuU2VudGluZWxDb25uZWN0b3IgPSBleHBvcnRzLkFic3RyYWN0Q29ubmVjdG9yID0gZXhwb3J0cy5QaXBlbGluZSA9IGV4cG9ydHMuU2NhblN0cmVhbSA9IGV4cG9ydHMuQ29tbWFuZCA9IGV4cG9ydHMuQ2x1c3RlciA9IGV4cG9ydHMuUmVkaXMgPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9SZWRpc1wiKS5kZWZhdWx0O1xudmFyIFJlZGlzXzEgPSByZXF1aXJlKFwiLi9SZWRpc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFJlZGlzXzEuZGVmYXVsdDsgfSB9KTtcbnZhciBSZWRpc18yID0gcmVxdWlyZShcIi4vUmVkaXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWRpc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVkaXNfMi5kZWZhdWx0OyB9IH0pO1xudmFyIGNsdXN0ZXJfMSA9IHJlcXVpcmUoXCIuL2NsdXN0ZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDbHVzdGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjbHVzdGVyXzEuZGVmYXVsdDsgfSB9KTtcbi8qKlxuICogQGlnbm9yZVxuICovXG52YXIgQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vQ29tbWFuZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbW1hbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIENvbW1hbmRfMS5kZWZhdWx0OyB9IH0pO1xuLyoqXG4gKiBAaWdub3JlXG4gKi9cbnZhciBTY2FuU3RyZWFtXzEgPSByZXF1aXJlKFwiLi9TY2FuU3RyZWFtXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2NhblN0cmVhbVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU2NhblN0cmVhbV8xLmRlZmF1bHQ7IH0gfSk7XG4vKipcbiAqIEBpZ25vcmVcbiAqL1xudmFyIFBpcGVsaW5lXzEgPSByZXF1aXJlKFwiLi9QaXBlbGluZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBpcGVsaW5lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBQaXBlbGluZV8xLmRlZmF1bHQ7IH0gfSk7XG4vKipcbiAqIEBpZ25vcmVcbiAqL1xudmFyIEFic3RyYWN0Q29ubmVjdG9yXzEgPSByZXF1aXJlKFwiLi9jb25uZWN0b3JzL0Fic3RyYWN0Q29ubmVjdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQWJzdHJhY3RDb25uZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFic3RyYWN0Q29ubmVjdG9yXzEuZGVmYXVsdDsgfSB9KTtcbi8qKlxuICogQGlnbm9yZVxuICovXG52YXIgU2VudGluZWxDb25uZWN0b3JfMSA9IHJlcXVpcmUoXCIuL2Nvbm5lY3RvcnMvU2VudGluZWxDb25uZWN0b3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTZW50aW5lbENvbm5lY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU2VudGluZWxDb25uZWN0b3JfMS5kZWZhdWx0OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2VudGluZWxJdGVyYXRvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU2VudGluZWxDb25uZWN0b3JfMS5TZW50aW5lbEl0ZXJhdG9yOyB9IH0pO1xuLy8gTm8gVFMgdHlwaW5nc1xuZXhwb3J0cy5SZXBseUVycm9yID0gcmVxdWlyZShcInJlZGlzLWVycm9yc1wiKS5SZXBseUVycm9yO1xuLyoqXG4gKiBAaWdub3JlXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlByb21pc2VcIiwge1xuICAgIGdldCgpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiaW9yZWRpcyB2NSBkb2VzIG5vdCBzdXBwb3J0IHBsdWdnaW5nIHRoaXJkLXBhcnR5IFByb21pc2UgbGlicmFyeSBhbnltb3JlLiBOYXRpdmUgUHJvbWlzZSB3aWxsIGJlIHVzZWQuXCIpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZTtcbiAgICB9LFxuICAgIHNldChfbGliKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcImlvcmVkaXMgdjUgZG9lcyBub3Qgc3VwcG9ydCBwbHVnZ2luZyB0aGlyZC1wYXJ0eSBQcm9taXNlIGxpYnJhcnkgYW55bW9yZS4gTmF0aXZlIFByb21pc2Ugd2lsbCBiZSB1c2VkLlwiKTtcbiAgICB9LFxufSk7XG4vKipcbiAqIEBpZ25vcmVcbiAqL1xuZnVuY3Rpb24gcHJpbnQoZXJyLCByZXBseSkge1xuICAgIGlmIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJFcnJvcjogXCIgKyBlcnIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJSZXBseTogXCIgKyByZXBseSk7XG4gICAgfVxufVxuZXhwb3J0cy5wcmludCA9IHByaW50O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/index.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/redis/RedisOptions.js":
/*!**********************************************************!*\
!*** ./node_modules/ioredis/built/redis/RedisOptions.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.DEFAULT_REDIS_OPTIONS = void 0;\nexports.DEFAULT_REDIS_OPTIONS = {\n // Connection\n port: 6379,\n host: \"localhost\",\n family: 4,\n connectTimeout: 10000,\n disconnectTimeout: 2000,\n retryStrategy: function (times) {\n return Math.min(times * 50, 2000);\n },\n keepAlive: 0,\n noDelay: true,\n connectionName: null,\n // Sentinel\n sentinels: null,\n name: null,\n role: \"master\",\n sentinelRetryStrategy: function (times) {\n return Math.min(times * 10, 1000);\n },\n sentinelReconnectStrategy: function () {\n // This strategy only applies when sentinels are used for detecting\n // a failover, not during initial master resolution.\n // The deployment can still function when some of the sentinels are down\n // for a long period of time, so we may not want to attempt reconnection\n // very often. Therefore the default interval is fairly long (1 minute).\n return 60000;\n },\n natMap: null,\n enableTLSForSentinelMode: false,\n updateSentinels: true,\n failoverDetector: false,\n // Status\n username: null,\n password: null,\n db: 0,\n // Others\n enableOfflineQueue: true,\n enableReadyCheck: true,\n autoResubscribe: true,\n autoResendUnfulfilledCommands: true,\n lazyConnect: false,\n keyPrefix: \"\",\n reconnectOnError: null,\n readOnly: false,\n stringNumbers: false,\n maxRetriesPerRequest: 20,\n maxLoadingRetryTime: 10000,\n enableAutoPipelining: false,\n autoPipeliningIgnoredCommands: [],\n sentinelMaxConnections: 10,\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L3JlZGlzL1JlZGlzT3B0aW9ucy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCw2QkFBNkI7QUFDN0IsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9yZWRpcy9SZWRpc09wdGlvbnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRFRkFVTFRfUkVESVNfT1BUSU9OUyA9IHZvaWQgMDtcbmV4cG9ydHMuREVGQVVMVF9SRURJU19PUFRJT05TID0ge1xuICAgIC8vIENvbm5lY3Rpb25cbiAgICBwb3J0OiA2Mzc5LFxuICAgIGhvc3Q6IFwibG9jYWxob3N0XCIsXG4gICAgZmFtaWx5OiA0LFxuICAgIGNvbm5lY3RUaW1lb3V0OiAxMDAwMCxcbiAgICBkaXNjb25uZWN0VGltZW91dDogMjAwMCxcbiAgICByZXRyeVN0cmF0ZWd5OiBmdW5jdGlvbiAodGltZXMpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKHRpbWVzICogNTAsIDIwMDApO1xuICAgIH0sXG4gICAga2VlcEFsaXZlOiAwLFxuICAgIG5vRGVsYXk6IHRydWUsXG4gICAgY29ubmVjdGlvbk5hbWU6IG51bGwsXG4gICAgLy8gU2VudGluZWxcbiAgICBzZW50aW5lbHM6IG51bGwsXG4gICAgbmFtZTogbnVsbCxcbiAgICByb2xlOiBcIm1hc3RlclwiLFxuICAgIHNlbnRpbmVsUmV0cnlTdHJhdGVneTogZnVuY3Rpb24gKHRpbWVzKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbih0aW1lcyAqIDEwLCAxMDAwKTtcbiAgICB9LFxuICAgIHNlbnRpbmVsUmVjb25uZWN0U3RyYXRlZ3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gVGhpcyBzdHJhdGVneSBvbmx5IGFwcGxpZXMgd2hlbiBzZW50aW5lbHMgYXJlIHVzZWQgZm9yIGRldGVjdGluZ1xuICAgICAgICAvLyBhIGZhaWxvdmVyLCBub3QgZHVyaW5nIGluaXRpYWwgbWFzdGVyIHJlc29sdXRpb24uXG4gICAgICAgIC8vIFRoZSBkZXBsb3ltZW50IGNhbiBzdGlsbCBmdW5jdGlvbiB3aGVuIHNvbWUgb2YgdGhlIHNlbnRpbmVscyBhcmUgZG93blxuICAgICAgICAvLyBmb3IgYSBsb25nIHBlcmlvZCBvZiB0aW1lLCBzbyB3ZSBtYXkgbm90IHdhbnQgdG8gYXR0ZW1wdCByZWNvbm5lY3Rpb25cbiAgICAgICAgLy8gdmVyeSBvZnRlbi4gVGhlcmVmb3JlIHRoZSBkZWZhdWx0IGludGVydmFsIGlzIGZhaXJseSBsb25nICgxIG1pbnV0ZSkuXG4gICAgICAgIHJldHVybiA2MDAwMDtcbiAgICB9LFxuICAgIG5hdE1hcDogbnVsbCxcbiAgICBlbmFibGVUTFNGb3JTZW50aW5lbE1vZGU6IGZhbHNlLFxuICAgIHVwZGF0ZVNlbnRpbmVsczogdHJ1ZSxcbiAgICBmYWlsb3ZlckRldGVjdG9yOiBmYWxzZSxcbiAgICAvLyBTdGF0dXNcbiAgICB1c2VybmFtZTogbnVsbCxcbiAgICBwYXNzd29yZDogbnVsbCxcbiAgICBkYjogMCxcbiAgICAvLyBPdGhlcnNcbiAgICBlbmFibGVPZmZsaW5lUXVldWU6IHRydWUsXG4gICAgZW5hYmxlUmVhZHlDaGVjazogdHJ1ZSxcbiAgICBhdXRvUmVzdWJzY3JpYmU6IHRydWUsXG4gICAgYXV0b1Jlc2VuZFVuZnVsZmlsbGVkQ29tbWFuZHM6IHRydWUsXG4gICAgbGF6eUNvbm5lY3Q6IGZhbHNlLFxuICAgIGtleVByZWZpeDogXCJcIixcbiAgICByZWNvbm5lY3RPbkVycm9yOiBudWxsLFxuICAgIHJlYWRPbmx5OiBmYWxzZSxcbiAgICBzdHJpbmdOdW1iZXJzOiBmYWxzZSxcbiAgICBtYXhSZXRyaWVzUGVyUmVxdWVzdDogMjAsXG4gICAgbWF4TG9hZGluZ1JldHJ5VGltZTogMTAwMDAsXG4gICAgZW5hYmxlQXV0b1BpcGVsaW5pbmc6IGZhbHNlLFxuICAgIGF1dG9QaXBlbGluaW5nSWdub3JlZENvbW1hbmRzOiBbXSxcbiAgICBzZW50aW5lbE1heENvbm5lY3Rpb25zOiAxMCxcbn07XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/redis/RedisOptions.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/redis/event_handler.js":
/*!***********************************************************!*\
!*** ./node_modules/ioredis/built/redis/event_handler.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.readyHandler = exports.errorHandler = exports.closeHandler = exports.connectHandler = void 0;\nconst redis_errors_1 = __webpack_require__(/*! redis-errors */ \"(action-browser)/./node_modules/redis-errors/index.js\");\nconst Command_1 = __webpack_require__(/*! ../Command */ \"(action-browser)/./node_modules/ioredis/built/Command.js\");\nconst errors_1 = __webpack_require__(/*! ../errors */ \"(action-browser)/./node_modules/ioredis/built/errors/index.js\");\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(action-browser)/./node_modules/ioredis/built/utils/index.js\");\nconst DataHandler_1 = __webpack_require__(/*! ../DataHandler */ \"(action-browser)/./node_modules/ioredis/built/DataHandler.js\");\nconst debug = (0, utils_1.Debug)(\"connection\");\nfunction connectHandler(self) {\n return function () {\n self.setStatus(\"connect\");\n self.resetCommandQueue();\n // AUTH command should be processed before any other commands\n let flushed = false;\n const { connectionEpoch } = self;\n if (self.condition.auth) {\n self.auth(self.condition.auth, function (err) {\n if (connectionEpoch !== self.connectionEpoch) {\n return;\n }\n if (err) {\n if (err.message.indexOf(\"no password is set\") !== -1) {\n console.warn(\"[WARN] Redis server does not require a password, but a password was supplied.\");\n }\n else if (err.message.indexOf(\"without any password configured for the default user\") !== -1) {\n console.warn(\"[WARN] This Redis server's `default` user does not require a password, but a password was supplied\");\n }\n else if (err.message.indexOf(\"wrong number of arguments for 'auth' command\") !== -1) {\n console.warn(`[ERROR] The server returned \"wrong number of arguments for 'auth' command\". You are probably passing both username and password to Redis version 5 or below. You should only pass the 'password' option for Redis version 5 and under.`);\n }\n else {\n flushed = true;\n self.recoverFromFatalError(err, err);\n }\n }\n });\n }\n if (self.condition.select) {\n self.select(self.condition.select).catch((err) => {\n // If the node is in cluster mode, select is disallowed.\n // In this case, reconnect won't help.\n self.silentEmit(\"error\", err);\n });\n }\n if (!self.options.enableReadyCheck) {\n exports.readyHandler(self)();\n }\n /*\n No need to keep the reference of DataHandler here\n because we don't need to do the cleanup.\n `Stream#end()` will remove all listeners for us.\n */\n new DataHandler_1.default(self, {\n stringNumbers: self.options.stringNumbers,\n });\n if (self.options.enableReadyCheck) {\n self._readyCheck(function (err, info) {\n if (connectionEpoch !== self.connectionEpoch) {\n return;\n }\n if (err) {\n if (!flushed) {\n self.recoverFromFatalError(new Error(\"Ready check failed: \" + err.message), err);\n }\n }\n else {\n if (self.connector.check(info)) {\n exports.readyHandler(self)();\n }\n else {\n self.disconnect(true);\n }\n }\n });\n }\n };\n}\nexports.connectHandler = connectHandler;\nfunction abortError(command) {\n const err = new redis_errors_1.AbortError(\"Command aborted due to connection close\");\n err.command = {\n name: command.name,\n args: command.args,\n };\n return err;\n}\n// If a contiguous set of pipeline commands starts from index zero then they\n// can be safely reattempted. If however we have a chain of pipelined commands\n// starting at index 1 or more it means we received a partial response before\n// the connection close and those pipelined commands must be aborted. For\n// example, if the queue looks like this: [2, 3, 4, 0, 1, 2] then after\n// aborting and purging we'll have a queue that looks like this: [0, 1, 2]\nfunction abortIncompletePipelines(commandQueue) {\n var _a;\n let expectedIndex = 0;\n for (let i = 0; i < commandQueue.length;) {\n const command = (_a = commandQueue.peekAt(i)) === null || _a === void 0 ? void 0 : _a.command;\n const pipelineIndex = command.pipelineIndex;\n if (pipelineIndex === undefined || pipelineIndex === 0) {\n expectedIndex = 0;\n }\n if (pipelineIndex !== undefined && pipelineIndex !== expectedIndex++) {\n commandQueue.remove(i, 1);\n command.reject(abortError(command));\n continue;\n }\n i++;\n }\n}\n// If only a partial transaction result was received before connection close,\n// we have to abort any transaction fragments that may have ended up in the\n// offline queue\nfunction abortTransactionFragments(commandQueue) {\n var _a;\n for (let i = 0; i < commandQueue.length;) {\n const command = (_a = commandQueue.peekAt(i)) === null || _a === void 0 ? void 0 : _a.command;\n if (command.name === \"multi\") {\n break;\n }\n if (command.name === \"exec\") {\n commandQueue.remove(i, 1);\n command.reject(abortError(command));\n break;\n }\n if (command.inTransaction) {\n commandQueue.remove(i, 1);\n command.reject(abortError(command));\n }\n else {\n i++;\n }\n }\n}\nfunction closeHandler(self) {\n return function () {\n const prevStatus = self.status;\n self.setStatus(\"close\");\n if (self.commandQueue.length) {\n abortIncompletePipelines(self.commandQueue);\n }\n if (self.offlineQueue.length) {\n abortTransactionFragments(self.offlineQueue);\n }\n if (prevStatus === \"ready\") {\n if (!self.prevCondition) {\n self.prevCondition = self.condition;\n }\n if (self.commandQueue.length) {\n self.prevCommandQueue = self.commandQueue;\n }\n }\n if (self.manuallyClosing) {\n self.manuallyClosing = false;\n debug(\"skip reconnecting since the connection is manually closed.\");\n return close();\n }\n if (typeof self.options.retryStrategy !== \"function\") {\n debug(\"skip reconnecting because `retryStrategy` is not a function\");\n return close();\n }\n const retryDelay = self.options.retryStrategy(++self.retryAttempts);\n if (typeof retryDelay !== \"number\") {\n debug(\"skip reconnecting because `retryStrategy` doesn't return a number\");\n return close();\n }\n debug(\"reconnect in %sms\", retryDelay);\n self.setStatus(\"reconnecting\", retryDelay);\n self.reconnectTimeout = setTimeout(function () {\n self.reconnectTimeout = null;\n self.connect().catch(utils_1.noop);\n }, retryDelay);\n const { maxRetriesPerRequest } = self.options;\n if (typeof maxRetriesPerRequest === \"number\") {\n if (maxRetriesPerRequest < 0) {\n debug(\"maxRetriesPerRequest is negative, ignoring...\");\n }\n else {\n const remainder = self.retryAttempts % (maxRetriesPerRequest + 1);\n if (remainder === 0) {\n debug(\"reach maxRetriesPerRequest limitation, flushing command queue...\");\n self.flushQueue(new errors_1.MaxRetriesPerRequestError(maxRetriesPerRequest));\n }\n }\n }\n };\n function close() {\n self.setStatus(\"end\");\n self.flushQueue(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n }\n}\nexports.closeHandler = closeHandler;\nfunction errorHandler(self) {\n return function (error) {\n debug(\"error: %s\", error);\n self.silentEmit(\"error\", error);\n };\n}\nexports.errorHandler = errorHandler;\nfunction readyHandler(self) {\n return function () {\n self.setStatus(\"ready\");\n self.retryAttempts = 0;\n if (self.options.monitor) {\n self.call(\"monitor\").then(() => self.setStatus(\"monitoring\"), (error) => self.emit(\"error\", error));\n const { sendCommand } = self;\n self.sendCommand = function (command) {\n if (Command_1.default.checkFlag(\"VALID_IN_MONITOR_MODE\", command.name)) {\n return sendCommand.call(self, command);\n }\n command.reject(new Error(\"Connection is in monitoring mode, can't process commands.\"));\n return command.promise;\n };\n self.once(\"close\", function () {\n delete self.sendCommand;\n });\n return;\n }\n const finalSelect = self.prevCondition\n ? self.prevCondition.select\n : self.condition.select;\n if (self.options.connectionName) {\n debug(\"set the connection name [%s]\", self.options.connectionName);\n self.client(\"setname\", self.options.connectionName).catch(utils_1.noop);\n }\n if (self.options.readOnly) {\n debug(\"set the connection to readonly mode\");\n self.readonly().catch(utils_1.noop);\n }\n if (self.prevCondition) {\n const condition = self.prevCondition;\n self.prevCondition = null;\n if (condition.subscriber && self.options.autoResubscribe) {\n // We re-select the previous db first since\n // `SELECT` command is not valid in sub mode.\n if (self.condition.select !== finalSelect) {\n debug(\"connect to db [%d]\", finalSelect);\n self.select(finalSelect);\n }\n const subscribeChannels = condition.subscriber.channels(\"subscribe\");\n if (subscribeChannels.length) {\n debug(\"subscribe %d channels\", subscribeChannels.length);\n self.subscribe(subscribeChannels);\n }\n const psubscribeChannels = condition.subscriber.channels(\"psubscribe\");\n if (psubscribeChannels.length) {\n debug(\"psubscribe %d channels\", psubscribeChannels.length);\n self.psubscribe(psubscribeChannels);\n }\n const ssubscribeChannels = condition.subscriber.channels(\"ssubscribe\");\n if (ssubscribeChannels.length) {\n debug(\"ssubscribe %d channels\", ssubscribeChannels.length);\n self.ssubscribe(ssubscribeChannels);\n }\n }\n }\n if (self.prevCommandQueue) {\n if (self.options.autoResendUnfulfilledCommands) {\n debug(\"resend %d unfulfilled commands\", self.prevCommandQueue.length);\n while (self.prevCommandQueue.length > 0) {\n const item = self.prevCommandQueue.shift();\n if (item.select !== self.condition.select &&\n item.command.name !== \"select\") {\n self.select(item.select);\n }\n self.sendCommand(item.command, item.stream);\n }\n }\n else {\n self.prevCommandQueue = null;\n }\n }\n if (self.offlineQueue.length) {\n debug(\"send %d commands in offline queue\", self.offlineQueue.length);\n const offlineQueue = self.offlineQueue;\n self.resetOfflineQueue();\n while (offlineQueue.length > 0) {\n const item = offlineQueue.shift();\n if (item.select !== self.condition.select &&\n item.command.name !== \"select\") {\n self.select(item.select);\n }\n self.sendCommand(item.command, item.stream);\n }\n }\n if (self.condition.select !== finalSelect) {\n debug(\"connect to db [%d]\", finalSelect);\n self.select(finalSelect);\n }\n };\n}\nexports.readyHandler = readyHandler;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L3JlZGlzL2V2ZW50X2hhbmRsZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsb0JBQW9CLEdBQUcsb0JBQW9CLEdBQUcsb0JBQW9CLEdBQUcsc0JBQXNCO0FBQzNGLHVCQUF1QixtQkFBTyxDQUFDLDJFQUFjO0FBQzdDLGtCQUFrQixtQkFBTyxDQUFDLDRFQUFZO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFXO0FBQ3BDLGdCQUFnQixtQkFBTyxDQUFDLDhFQUFVO0FBQ2xDLHNCQUFzQixtQkFBTyxDQUFDLG9GQUFnQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixrQkFBa0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isd0JBQXdCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix3QkFBd0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixjQUFjO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvcmVkaXMvZXZlbnRfaGFuZGxlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVhZHlIYW5kbGVyID0gZXhwb3J0cy5lcnJvckhhbmRsZXIgPSBleHBvcnRzLmNsb3NlSGFuZGxlciA9IGV4cG9ydHMuY29ubmVjdEhhbmRsZXIgPSB2b2lkIDA7XG5jb25zdCByZWRpc19lcnJvcnNfMSA9IHJlcXVpcmUoXCJyZWRpcy1lcnJvcnNcIik7XG5jb25zdCBDb21tYW5kXzEgPSByZXF1aXJlKFwiLi4vQ29tbWFuZFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5jb25zdCBEYXRhSGFuZGxlcl8xID0gcmVxdWlyZShcIi4uL0RhdGFIYW5kbGVyXCIpO1xuY29uc3QgZGVidWcgPSAoMCwgdXRpbHNfMS5EZWJ1ZykoXCJjb25uZWN0aW9uXCIpO1xuZnVuY3Rpb24gY29ubmVjdEhhbmRsZXIoc2VsZikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdHVzKFwiY29ubmVjdFwiKTtcbiAgICAgICAgc2VsZi5yZXNldENvbW1hbmRRdWV1ZSgpO1xuICAgICAgICAvLyBBVVRIIGNvbW1hbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCBiZWZvcmUgYW55IG90aGVyIGNvbW1hbmRzXG4gICAgICAgIGxldCBmbHVzaGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHsgY29ubmVjdGlvbkVwb2NoIH0gPSBzZWxmO1xuICAgICAgICBpZiAoc2VsZi5jb25kaXRpb24uYXV0aCkge1xuICAgICAgICAgICAgc2VsZi5hdXRoKHNlbGYuY29uZGl0aW9uLmF1dGgsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGlvbkVwb2NoICE9PSBzZWxmLmNvbm5lY3Rpb25FcG9jaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlLmluZGV4T2YoXCJubyBwYXNzd29yZCBpcyBzZXRcIikgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJbV0FSTl0gUmVkaXMgc2VydmVyIGRvZXMgbm90IHJlcXVpcmUgYSBwYXNzd29yZCwgYnV0IGEgcGFzc3dvcmQgd2FzIHN1cHBsaWVkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZS5pbmRleE9mKFwid2l0aG91dCBhbnkgcGFzc3dvcmQgY29uZmlndXJlZCBmb3IgdGhlIGRlZmF1bHQgdXNlclwiKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIltXQVJOXSBUaGlzIFJlZGlzIHNlcnZlcidzIGBkZWZhdWx0YCB1c2VyIGRvZXMgbm90IHJlcXVpcmUgYSBwYXNzd29yZCwgYnV0IGEgcGFzc3dvcmQgd2FzIHN1cHBsaWVkXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlLmluZGV4T2YoXCJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciAnYXV0aCcgY29tbWFuZFwiKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgW0VSUk9SXSBUaGUgc2VydmVyIHJldHVybmVkIFwid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgJ2F1dGgnIGNvbW1hbmRcIi4gWW91IGFyZSBwcm9iYWJseSBwYXNzaW5nIGJvdGggdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHRvIFJlZGlzIHZlcnNpb24gNSBvciBiZWxvdy4gWW91IHNob3VsZCBvbmx5IHBhc3MgdGhlICdwYXNzd29yZCcgb3B0aW9uIGZvciBSZWRpcyB2ZXJzaW9uIDUgYW5kIHVuZGVyLmApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlY292ZXJGcm9tRmF0YWxFcnJvcihlcnIsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5jb25kaXRpb24uc2VsZWN0KSB7XG4gICAgICAgICAgICBzZWxmLnNlbGVjdChzZWxmLmNvbmRpdGlvbi5zZWxlY3QpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBpbiBjbHVzdGVyIG1vZGUsIHNlbGVjdCBpcyBkaXNhbGxvd2VkLlxuICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgcmVjb25uZWN0IHdvbid0IGhlbHAuXG4gICAgICAgICAgICAgICAgc2VsZi5zaWxlbnRFbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2VsZi5vcHRpb25zLmVuYWJsZVJlYWR5Q2hlY2spIHtcbiAgICAgICAgICAgIGV4cG9ydHMucmVhZHlIYW5kbGVyKHNlbGYpKCk7XG4gICAgICAgIH1cbiAgICAgICAgLypcbiAgICAgICAgICBObyBuZWVkIHRvIGtlZXAgdGhlIHJlZmVyZW5jZSBvZiBEYXRhSGFuZGxlciBoZXJlXG4gICAgICAgICAgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHRvIGRvIHRoZSBjbGVhbnVwLlxuICAgICAgICAgIGBTdHJlYW0jZW5kKClgIHdpbGwgcmVtb3ZlIGFsbCBsaXN0ZW5lcnMgZm9yIHVzLlxuICAgICAgICAqL1xuICAgICAgICBuZXcgRGF0YUhhbmRsZXJfMS5kZWZhdWx0KHNlbGYsIHtcbiAgICAgICAgICAgIHN0cmluZ051bWJlcnM6IHNlbGYub3B0aW9ucy5zdHJpbmdOdW1iZXJzLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5lbmFibGVSZWFkeUNoZWNrKSB7XG4gICAgICAgICAgICBzZWxmLl9yZWFkeUNoZWNrKGZ1bmN0aW9uIChlcnIsIGluZm8pIHtcbiAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGlvbkVwb2NoICE9PSBzZWxmLmNvbm5lY3Rpb25FcG9jaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbHVzaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlY292ZXJGcm9tRmF0YWxFcnJvcihuZXcgRXJyb3IoXCJSZWFkeSBjaGVjayBmYWlsZWQ6IFwiICsgZXJyLm1lc3NhZ2UpLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25uZWN0b3IuY2hlY2soaW5mbykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMucmVhZHlIYW5kbGVyKHNlbGYpKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc2Nvbm5lY3QodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59XG5leHBvcnRzLmNvbm5lY3RIYW5kbGVyID0gY29ubmVjdEhhbmRsZXI7XG5mdW5jdGlvbiBhYm9ydEVycm9yKGNvbW1hbmQpIHtcbiAgICBjb25zdCBlcnIgPSBuZXcgcmVkaXNfZXJyb3JzXzEuQWJvcnRFcnJvcihcIkNvbW1hbmQgYWJvcnRlZCBkdWUgdG8gY29ubmVjdGlvbiBjbG9zZVwiKTtcbiAgICBlcnIuY29tbWFuZCA9IHtcbiAgICAgICAgbmFtZTogY29tbWFuZC5uYW1lLFxuICAgICAgICBhcmdzOiBjb21tYW5kLmFyZ3MsXG4gICAgfTtcbiAgICByZXR1cm4gZXJyO1xufVxuLy8gSWYgYSBjb250aWd1b3VzIHNldCBvZiBwaXBlbGluZSBjb21tYW5kcyBzdGFydHMgZnJvbSBpbmRleCB6ZXJvIHRoZW4gdGhleVxuLy8gY2FuIGJlIHNhZmVseSByZWF0dGVtcHRlZC4gSWYgaG93ZXZlciB3ZSBoYXZlIGEgY2hhaW4gb2YgcGlwZWxpbmVkIGNvbW1hbmRzXG4vLyBzdGFydGluZyBhdCBpbmRleCAxIG9yIG1vcmUgaXQgbWVhbnMgd2UgcmVjZWl2ZWQgYSBwYXJ0aWFsIHJlc3BvbnNlIGJlZm9yZVxuLy8gdGhlIGNvbm5lY3Rpb24gY2xvc2UgYW5kIHRob3NlIHBpcGVsaW5lZCBjb21tYW5kcyBtdXN0IGJlIGFib3J0ZWQuIEZvclxuLy8gZXhhbXBsZSwgaWYgdGhlIHF1ZXVlIGxvb2tzIGxpa2UgdGhpczogWzIsIDMsIDQsIDAsIDEsIDJdIHRoZW4gYWZ0ZXJcbi8vIGFib3J0aW5nIGFuZCBwdXJnaW5nIHdlJ2xsIGhhdmUgYSBxdWV1ZSB0aGF0IGxvb2tzIGxpa2UgdGhpczogWzAsIDEsIDJdXG5mdW5jdGlvbiBhYm9ydEluY29tcGxldGVQaXBlbGluZXMoY29tbWFuZFF1ZXVlKSB7XG4gICAgdmFyIF9hO1xuICAgIGxldCBleHBlY3RlZEluZGV4ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1hbmRRdWV1ZS5sZW5ndGg7KSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSAoX2EgPSBjb21tYW5kUXVldWUucGVla0F0KGkpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tbWFuZDtcbiAgICAgICAgY29uc3QgcGlwZWxpbmVJbmRleCA9IGNvbW1hbmQucGlwZWxpbmVJbmRleDtcbiAgICAgICAgaWYgKHBpcGVsaW5lSW5kZXggPT09IHVuZGVmaW5lZCB8fCBwaXBlbGluZUluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICBleHBlY3RlZEluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGlwZWxpbmVJbmRleCAhPT0gdW5kZWZpbmVkICYmIHBpcGVsaW5lSW5kZXggIT09IGV4cGVjdGVkSW5kZXgrKykge1xuICAgICAgICAgICAgY29tbWFuZFF1ZXVlLnJlbW92ZShpLCAxKTtcbiAgICAgICAgICAgIGNvbW1hbmQucmVqZWN0KGFib3J0RXJyb3IoY29tbWFuZCkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cbn1cbi8vIElmIG9ubHkgYSBwYXJ0aWFsIHRyYW5zYWN0aW9uIHJlc3VsdCB3YXMgcmVjZWl2ZWQgYmVmb3JlIGNvbm5lY3Rpb24gY2xvc2UsXG4vLyB3ZSBoYXZlIHRvIGFib3J0IGFueSB0cmFuc2FjdGlvbiBmcmFnbWVudHMgdGhhdCBtYXkgaGF2ZSBlbmRlZCB1cCBpbiB0aGVcbi8vIG9mZmxpbmUgcXVldWVcbmZ1bmN0aW9uIGFib3J0VHJhbnNhY3Rpb25GcmFnbWVudHMoY29tbWFuZFF1ZXVlKSB7XG4gICAgdmFyIF9hO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbWFuZFF1ZXVlLmxlbmd0aDspIHtcbiAgICAgICAgY29uc3QgY29tbWFuZCA9IChfYSA9IGNvbW1hbmRRdWV1ZS5wZWVrQXQoaSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21tYW5kO1xuICAgICAgICBpZiAoY29tbWFuZC5uYW1lID09PSBcIm11bHRpXCIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kLm5hbWUgPT09IFwiZXhlY1wiKSB7XG4gICAgICAgICAgICBjb21tYW5kUXVldWUucmVtb3ZlKGksIDEpO1xuICAgICAgICAgICAgY29tbWFuZC5yZWplY3QoYWJvcnRFcnJvcihjb21tYW5kKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tbWFuZC5pblRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICBjb21tYW5kUXVldWUucmVtb3ZlKGksIDEpO1xuICAgICAgICAgICAgY29tbWFuZC5yZWplY3QoYWJvcnRFcnJvcihjb21tYW5kKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBjbG9zZUhhbmRsZXIoc2VsZikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByZXZTdGF0dXMgPSBzZWxmLnN0YXR1cztcbiAgICAgICAgc2VsZi5zZXRTdGF0dXMoXCJjbG9zZVwiKTtcbiAgICAgICAgaWYgKHNlbGYuY29tbWFuZFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgYWJvcnRJbmNvbXBsZXRlUGlwZWxpbmVzKHNlbGYuY29tbWFuZFF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5vZmZsaW5lUXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBhYm9ydFRyYW5zYWN0aW9uRnJhZ21lbnRzKHNlbGYub2ZmbGluZVF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldlN0YXR1cyA9PT0gXCJyZWFkeVwiKSB7XG4gICAgICAgICAgICBpZiAoIXNlbGYucHJldkNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIHNlbGYucHJldkNvbmRpdGlvbiA9IHNlbGYuY29uZGl0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29tbWFuZFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNlbGYucHJldkNvbW1hbmRRdWV1ZSA9IHNlbGYuY29tbWFuZFF1ZXVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLm1hbnVhbGx5Q2xvc2luZykge1xuICAgICAgICAgICAgc2VsZi5tYW51YWxseUNsb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGRlYnVnKFwic2tpcCByZWNvbm5lY3Rpbmcgc2luY2UgdGhlIGNvbm5lY3Rpb24gaXMgbWFudWFsbHkgY2xvc2VkLlwiKTtcbiAgICAgICAgICAgIHJldHVybiBjbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZi5vcHRpb25zLnJldHJ5U3RyYXRlZ3kgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgZGVidWcoXCJza2lwIHJlY29ubmVjdGluZyBiZWNhdXNlIGByZXRyeVN0cmF0ZWd5YCBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgICAgIHJldHVybiBjbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldHJ5RGVsYXkgPSBzZWxmLm9wdGlvbnMucmV0cnlTdHJhdGVneSgrK3NlbGYucmV0cnlBdHRlbXB0cyk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0cnlEZWxheSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgZGVidWcoXCJza2lwIHJlY29ubmVjdGluZyBiZWNhdXNlIGByZXRyeVN0cmF0ZWd5YCBkb2Vzbid0IHJldHVybiBhIG51bWJlclwiKTtcbiAgICAgICAgICAgIHJldHVybiBjbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGRlYnVnKFwicmVjb25uZWN0IGluICVzbXNcIiwgcmV0cnlEZWxheSk7XG4gICAgICAgIHNlbGYuc2V0U3RhdHVzKFwicmVjb25uZWN0aW5nXCIsIHJldHJ5RGVsYXkpO1xuICAgICAgICBzZWxmLnJlY29ubmVjdFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlbGYucmVjb25uZWN0VGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICBzZWxmLmNvbm5lY3QoKS5jYXRjaCh1dGlsc18xLm5vb3ApO1xuICAgICAgICB9LCByZXRyeURlbGF5KTtcbiAgICAgICAgY29uc3QgeyBtYXhSZXRyaWVzUGVyUmVxdWVzdCB9ID0gc2VsZi5vcHRpb25zO1xuICAgICAgICBpZiAodHlwZW9mIG1heFJldHJpZXNQZXJSZXF1ZXN0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBpZiAobWF4UmV0cmllc1BlclJlcXVlc3QgPCAwKSB7XG4gICAgICAgICAgICAgICAgZGVidWcoXCJtYXhSZXRyaWVzUGVyUmVxdWVzdCBpcyBuZWdhdGl2ZSwgaWdub3JpbmcuLi5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1haW5kZXIgPSBzZWxmLnJldHJ5QXR0ZW1wdHMgJSAobWF4UmV0cmllc1BlclJlcXVlc3QgKyAxKTtcbiAgICAgICAgICAgICAgICBpZiAocmVtYWluZGVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnKFwicmVhY2ggbWF4UmV0cmllc1BlclJlcXVlc3QgbGltaXRhdGlvbiwgZmx1c2hpbmcgY29tbWFuZCBxdWV1ZS4uLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5mbHVzaFF1ZXVlKG5ldyBlcnJvcnNfMS5NYXhSZXRyaWVzUGVyUmVxdWVzdEVycm9yKG1heFJldHJpZXNQZXJSZXF1ZXN0KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgICAgc2VsZi5zZXRTdGF0dXMoXCJlbmRcIik7XG4gICAgICAgIHNlbGYuZmx1c2hRdWV1ZShuZXcgRXJyb3IodXRpbHNfMS5DT05ORUNUSU9OX0NMT1NFRF9FUlJPUl9NU0cpKTtcbiAgICB9XG59XG5leHBvcnRzLmNsb3NlSGFuZGxlciA9IGNsb3NlSGFuZGxlcjtcbmZ1bmN0aW9uIGVycm9ySGFuZGxlcihzZWxmKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICBkZWJ1ZyhcImVycm9yOiAlc1wiLCBlcnJvcik7XG4gICAgICAgIHNlbGYuc2lsZW50RW1pdChcImVycm9yXCIsIGVycm9yKTtcbiAgICB9O1xufVxuZXhwb3J0cy5lcnJvckhhbmRsZXIgPSBlcnJvckhhbmRsZXI7XG5mdW5jdGlvbiByZWFkeUhhbmRsZXIoc2VsZikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdHVzKFwicmVhZHlcIik7XG4gICAgICAgIHNlbGYucmV0cnlBdHRlbXB0cyA9IDA7XG4gICAgICAgIGlmIChzZWxmLm9wdGlvbnMubW9uaXRvcikge1xuICAgICAgICAgICAgc2VsZi5jYWxsKFwibW9uaXRvclwiKS50aGVuKCgpID0+IHNlbGYuc2V0U3RhdHVzKFwibW9uaXRvcmluZ1wiKSwgKGVycm9yKSA9PiBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnJvcikpO1xuICAgICAgICAgICAgY29uc3QgeyBzZW5kQ29tbWFuZCB9ID0gc2VsZjtcbiAgICAgICAgICAgIHNlbGYuc2VuZENvbW1hbmQgPSBmdW5jdGlvbiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICAgIGlmIChDb21tYW5kXzEuZGVmYXVsdC5jaGVja0ZsYWcoXCJWQUxJRF9JTl9NT05JVE9SX01PREVcIiwgY29tbWFuZC5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VuZENvbW1hbmQuY2FsbChzZWxmLCBjb21tYW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29tbWFuZC5yZWplY3QobmV3IEVycm9yKFwiQ29ubmVjdGlvbiBpcyBpbiBtb25pdG9yaW5nIG1vZGUsIGNhbid0IHByb2Nlc3MgY29tbWFuZHMuXCIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZC5wcm9taXNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNlbGYub25jZShcImNsb3NlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc2VsZi5zZW5kQ29tbWFuZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbmFsU2VsZWN0ID0gc2VsZi5wcmV2Q29uZGl0aW9uXG4gICAgICAgICAgICA/IHNlbGYucHJldkNvbmRpdGlvbi5zZWxlY3RcbiAgICAgICAgICAgIDogc2VsZi5jb25kaXRpb24uc2VsZWN0O1xuICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmNvbm5lY3Rpb25OYW1lKSB7XG4gICAgICAgICAgICBkZWJ1ZyhcInNldCB0aGUgY29ubmVjdGlvbiBuYW1lIFslc11cIiwgc2VsZi5vcHRpb25zLmNvbm5lY3Rpb25OYW1lKTtcbiAgICAgICAgICAgIHNlbGYuY2xpZW50KFwic2V0bmFtZVwiLCBzZWxmLm9wdGlvbnMuY29ubmVjdGlvbk5hbWUpLmNhdGNoKHV0aWxzXzEubm9vcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5yZWFkT25seSkge1xuICAgICAgICAgICAgZGVidWcoXCJzZXQgdGhlIGNvbm5lY3Rpb24gdG8gcmVhZG9ubHkgbW9kZVwiKTtcbiAgICAgICAgICAgIHNlbGYucmVhZG9ubHkoKS5jYXRjaCh1dGlsc18xLm5vb3ApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLnByZXZDb25kaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IHNlbGYucHJldkNvbmRpdGlvbjtcbiAgICAgICAgICAgIHNlbGYucHJldkNvbmRpdGlvbiA9IG51bGw7XG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uLnN1YnNjcmliZXIgJiYgc2VsZi5vcHRpb25zLmF1dG9SZXN1YnNjcmliZSkge1xuICAgICAgICAgICAgICAgIC8vIFdlIHJlLXNlbGVjdCB0aGUgcHJldmlvdXMgZGIgZmlyc3Qgc2luY2VcbiAgICAgICAgICAgICAgICAvLyBgU0VMRUNUYCBjb21tYW5kIGlzIG5vdCB2YWxpZCBpbiBzdWIgbW9kZS5cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25kaXRpb24uc2VsZWN0ICE9PSBmaW5hbFNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcImNvbm5lY3QgdG8gZGIgWyVkXVwiLCBmaW5hbFNlbGVjdCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0KGZpbmFsU2VsZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc3Vic2NyaWJlQ2hhbm5lbHMgPSBjb25kaXRpb24uc3Vic2NyaWJlci5jaGFubmVscyhcInN1YnNjcmliZVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlQ2hhbm5lbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnKFwic3Vic2NyaWJlICVkIGNoYW5uZWxzXCIsIHN1YnNjcmliZUNoYW5uZWxzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc3Vic2NyaWJlKHN1YnNjcmliZUNoYW5uZWxzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcHN1YnNjcmliZUNoYW5uZWxzID0gY29uZGl0aW9uLnN1YnNjcmliZXIuY2hhbm5lbHMoXCJwc3Vic2NyaWJlXCIpO1xuICAgICAgICAgICAgICAgIGlmIChwc3Vic2NyaWJlQ2hhbm5lbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnKFwicHN1YnNjcmliZSAlZCBjaGFubmVsc1wiLCBwc3Vic2NyaWJlQ2hhbm5lbHMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5wc3Vic2NyaWJlKHBzdWJzY3JpYmVDaGFubmVscyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNzdWJzY3JpYmVDaGFubmVscyA9IGNvbmRpdGlvbi5zdWJzY3JpYmVyLmNoYW5uZWxzKFwic3N1YnNjcmliZVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoc3N1YnNjcmliZUNoYW5uZWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcInNzdWJzY3JpYmUgJWQgY2hhbm5lbHNcIiwgc3N1YnNjcmliZUNoYW5uZWxzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc3N1YnNjcmliZShzc3Vic2NyaWJlQ2hhbm5lbHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5wcmV2Q29tbWFuZFF1ZXVlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmF1dG9SZXNlbmRVbmZ1bGZpbGxlZENvbW1hbmRzKSB7XG4gICAgICAgICAgICAgICAgZGVidWcoXCJyZXNlbmQgJWQgdW5mdWxmaWxsZWQgY29tbWFuZHNcIiwgc2VsZi5wcmV2Q29tbWFuZFF1ZXVlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHNlbGYucHJldkNvbW1hbmRRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBzZWxmLnByZXZDb21tYW5kUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uc2VsZWN0ICE9PSBzZWxmLmNvbmRpdGlvbi5zZWxlY3QgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29tbWFuZC5uYW1lICE9PSBcInNlbGVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdChpdGVtLnNlbGVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZW5kQ29tbWFuZChpdGVtLmNvbW1hbmQsIGl0ZW0uc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLnByZXZDb21tYW5kUXVldWUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLm9mZmxpbmVRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRlYnVnKFwic2VuZCAlZCBjb21tYW5kcyBpbiBvZmZsaW5lIHF1ZXVlXCIsIHNlbGYub2ZmbGluZVF1ZXVlLmxlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBvZmZsaW5lUXVldWUgPSBzZWxmLm9mZmxpbmVRdWV1ZTtcbiAgICAgICAgICAgIHNlbGYucmVzZXRPZmZsaW5lUXVldWUoKTtcbiAgICAgICAgICAgIHdoaWxlIChvZmZsaW5lUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBvZmZsaW5lUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5zZWxlY3QgIT09IHNlbGYuY29uZGl0aW9uLnNlbGVjdCAmJlxuICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbW1hbmQubmFtZSAhPT0gXCJzZWxlY3RcIikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdChpdGVtLnNlbGVjdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYuc2VuZENvbW1hbmQoaXRlbS5jb21tYW5kLCBpdGVtLnN0cmVhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYuY29uZGl0aW9uLnNlbGVjdCAhPT0gZmluYWxTZWxlY3QpIHtcbiAgICAgICAgICAgIGRlYnVnKFwiY29ubmVjdCB0byBkYiBbJWRdXCIsIGZpbmFsU2VsZWN0KTtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0KGZpbmFsU2VsZWN0KTtcbiAgICAgICAgfVxuICAgIH07XG59XG5leHBvcnRzLnJlYWR5SGFuZGxlciA9IHJlYWR5SGFuZGxlcjtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/redis/event_handler.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/transaction.js":
/*!***************************************************!*\
!*** ./node_modules/ioredis/built/transaction.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.addTransactionSupport = void 0;\nconst utils_1 = __webpack_require__(/*! ./utils */ \"(action-browser)/./node_modules/ioredis/built/utils/index.js\");\nconst standard_as_callback_1 = __webpack_require__(/*! standard-as-callback */ \"(action-browser)/./node_modules/standard-as-callback/built/index.js\");\nconst Pipeline_1 = __webpack_require__(/*! ./Pipeline */ \"(action-browser)/./node_modules/ioredis/built/Pipeline.js\");\nfunction addTransactionSupport(redis) {\n redis.pipeline = function (commands) {\n const pipeline = new Pipeline_1.default(this);\n if (Array.isArray(commands)) {\n pipeline.addBatch(commands);\n }\n return pipeline;\n };\n const { multi } = redis;\n redis.multi = function (commands, options) {\n if (typeof options === \"undefined\" && !Array.isArray(commands)) {\n options = commands;\n commands = null;\n }\n if (options && options.pipeline === false) {\n return multi.call(this);\n }\n const pipeline = new Pipeline_1.default(this);\n // @ts-expect-error\n pipeline.multi();\n if (Array.isArray(commands)) {\n pipeline.addBatch(commands);\n }\n const exec = pipeline.exec;\n pipeline.exec = function (callback) {\n // Wait for the cluster to be connected, since we need nodes information before continuing\n if (this.isCluster && !this.redis.slots.length) {\n if (this.redis.status === \"wait\")\n this.redis.connect().catch(utils_1.noop);\n return (0, standard_as_callback_1.default)(new Promise((resolve, reject) => {\n this.redis.delayUntilReady((err) => {\n if (err) {\n reject(err);\n return;\n }\n this.exec(pipeline).then(resolve, reject);\n });\n }), callback);\n }\n if (this._transactions > 0) {\n exec.call(pipeline);\n }\n // Returns directly when the pipeline\n // has been called multiple times (retries).\n if (this.nodeifiedPromise) {\n return exec.call(pipeline);\n }\n const promise = exec.call(pipeline);\n return (0, standard_as_callback_1.default)(promise.then(function (result) {\n const execResult = result[result.length - 1];\n if (typeof execResult === \"undefined\") {\n throw new Error(\"Pipeline cannot be used to send any commands when the `exec()` has been called on it.\");\n }\n if (execResult[0]) {\n execResult[0].previousErrors = [];\n for (let i = 0; i < result.length - 1; ++i) {\n if (result[i][0]) {\n execResult[0].previousErrors.push(result[i][0]);\n }\n }\n throw execResult[0];\n }\n return (0, utils_1.wrapMultiResult)(execResult[1]);\n }), callback);\n };\n // @ts-expect-error\n const { execBuffer } = pipeline;\n // @ts-expect-error\n pipeline.execBuffer = function (callback) {\n if (this._transactions > 0) {\n execBuffer.call(pipeline);\n }\n return pipeline.exec(callback);\n };\n return pipeline;\n };\n const { exec } = redis;\n redis.exec = function (callback) {\n return (0, standard_as_callback_1.default)(exec.call(this).then(function (results) {\n if (Array.isArray(results)) {\n results = (0, utils_1.wrapMultiResult)(results);\n }\n return results;\n }), callback);\n };\n}\nexports.addTransactionSupport = addTransactionSupport;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L3RyYW5zYWN0aW9uLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDZCQUE2QjtBQUM3QixnQkFBZ0IsbUJBQU8sQ0FBQyw2RUFBUztBQUNqQywrQkFBK0IsbUJBQU8sQ0FBQyxpR0FBc0I7QUFDN0QsbUJBQW1CLG1CQUFPLENBQUMsNkVBQVk7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsdUJBQXVCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxnQkFBZ0IsYUFBYTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSw2QkFBNkIiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvdHJhbnNhY3Rpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFkZFRyYW5zYWN0aW9uU3VwcG9ydCA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IHN0YW5kYXJkX2FzX2NhbGxiYWNrXzEgPSByZXF1aXJlKFwic3RhbmRhcmQtYXMtY2FsbGJhY2tcIik7XG5jb25zdCBQaXBlbGluZV8xID0gcmVxdWlyZShcIi4vUGlwZWxpbmVcIik7XG5mdW5jdGlvbiBhZGRUcmFuc2FjdGlvblN1cHBvcnQocmVkaXMpIHtcbiAgICByZWRpcy5waXBlbGluZSA9IGZ1bmN0aW9uIChjb21tYW5kcykge1xuICAgICAgICBjb25zdCBwaXBlbGluZSA9IG5ldyBQaXBlbGluZV8xLmRlZmF1bHQodGhpcyk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbW1hbmRzKSkge1xuICAgICAgICAgICAgcGlwZWxpbmUuYWRkQmF0Y2goY29tbWFuZHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwaXBlbGluZTtcbiAgICB9O1xuICAgIGNvbnN0IHsgbXVsdGkgfSA9IHJlZGlzO1xuICAgIHJlZGlzLm11bHRpID0gZnVuY3Rpb24gKGNvbW1hbmRzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJ1bmRlZmluZWRcIiAmJiAhQXJyYXkuaXNBcnJheShjb21tYW5kcykpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBjb21tYW5kcztcbiAgICAgICAgICAgIGNvbW1hbmRzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnBpcGVsaW5lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIG11bHRpLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBuZXcgUGlwZWxpbmVfMS5kZWZhdWx0KHRoaXMpO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHBpcGVsaW5lLm11bHRpKCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbW1hbmRzKSkge1xuICAgICAgICAgICAgcGlwZWxpbmUuYWRkQmF0Y2goY29tbWFuZHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4ZWMgPSBwaXBlbGluZS5leGVjO1xuICAgICAgICBwaXBlbGluZS5leGVjID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgY2x1c3RlciB0byBiZSBjb25uZWN0ZWQsIHNpbmNlIHdlIG5lZWQgbm9kZXMgaW5mb3JtYXRpb24gYmVmb3JlIGNvbnRpbnVpbmdcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ2x1c3RlciAmJiAhdGhpcy5yZWRpcy5zbG90cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWRpcy5zdGF0dXMgPT09IFwid2FpdFwiKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZGlzLmNvbm5lY3QoKS5jYXRjaCh1dGlsc18xLm5vb3ApO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgc3RhbmRhcmRfYXNfY2FsbGJhY2tfMS5kZWZhdWx0KShuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVkaXMuZGVsYXlVbnRpbFJlYWR5KChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZWMocGlwZWxpbmUpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSksIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbnMgPiAwKSB7XG4gICAgICAgICAgICAgICAgZXhlYy5jYWxsKHBpcGVsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJldHVybnMgZGlyZWN0bHkgd2hlbiB0aGUgcGlwZWxpbmVcbiAgICAgICAgICAgIC8vIGhhcyBiZWVuIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyAocmV0cmllcykuXG4gICAgICAgICAgICBpZiAodGhpcy5ub2RlaWZpZWRQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWMuY2FsbChwaXBlbGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gZXhlYy5jYWxsKHBpcGVsaW5lKTtcbiAgICAgICAgICAgIHJldHVybiAoMCwgc3RhbmRhcmRfYXNfY2FsbGJhY2tfMS5kZWZhdWx0KShwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWNSZXN1bHQgPSByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXhlY1Jlc3VsdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQaXBlbGluZSBjYW5ub3QgYmUgdXNlZCB0byBzZW5kIGFueSBjb21tYW5kcyB3aGVuIHRoZSBgZXhlYygpYCBoYXMgYmVlbiBjYWxsZWQgb24gaXQuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXhlY1Jlc3VsdFswXSkge1xuICAgICAgICAgICAgICAgICAgICBleGVjUmVzdWx0WzBdLnByZXZpb3VzRXJyb3JzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aCAtIDE7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtpXVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNSZXN1bHRbMF0ucHJldmlvdXNFcnJvcnMucHVzaChyZXN1bHRbaV1bMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGV4ZWNSZXN1bHRbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgdXRpbHNfMS53cmFwTXVsdGlSZXN1bHQpKGV4ZWNSZXN1bHRbMV0pO1xuICAgICAgICAgICAgfSksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBjb25zdCB7IGV4ZWNCdWZmZXIgfSA9IHBpcGVsaW5lO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHBpcGVsaW5lLmV4ZWNCdWZmZXIgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbnMgPiAwKSB7XG4gICAgICAgICAgICAgICAgZXhlY0J1ZmZlci5jYWxsKHBpcGVsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwaXBlbGluZS5leGVjKGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHBpcGVsaW5lO1xuICAgIH07XG4gICAgY29uc3QgeyBleGVjIH0gPSByZWRpcztcbiAgICByZWRpcy5leGVjID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiAoMCwgc3RhbmRhcmRfYXNfY2FsbGJhY2tfMS5kZWZhdWx0KShleGVjLmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAocmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0cykpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzID0gKDAsIHV0aWxzXzEud3JhcE11bHRpUmVzdWx0KShyZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSwgY2FsbGJhY2spO1xuICAgIH07XG59XG5leHBvcnRzLmFkZFRyYW5zYWN0aW9uU3VwcG9ydCA9IGFkZFRyYW5zYWN0aW9uU3VwcG9ydDtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/transaction.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/utils/Commander.js":
/*!*******************************************************!*\
!*** ./node_modules/ioredis/built/utils/Commander.js ***!
\*******************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst commands_1 = __webpack_require__(/*! @ioredis/commands */ \"(action-browser)/./node_modules/@ioredis/commands/built/index.js\");\nconst autoPipelining_1 = __webpack_require__(/*! ../autoPipelining */ \"(action-browser)/./node_modules/ioredis/built/autoPipelining.js\");\nconst Command_1 = __webpack_require__(/*! ../Command */ \"(action-browser)/./node_modules/ioredis/built/Command.js\");\nconst Script_1 = __webpack_require__(/*! ../Script */ \"(action-browser)/./node_modules/ioredis/built/Script.js\");\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nclass Commander {\n constructor() {\n this.options = {};\n /**\n * @ignore\n */\n this.scriptsSet = {};\n /**\n * @ignore\n */\n this.addedBuiltinSet = new Set();\n }\n /**\n * Return supported builtin commands\n */\n getBuiltinCommands() {\n return commands.slice(0);\n }\n /**\n * Create a builtin command\n */\n createBuiltinCommand(commandName) {\n return {\n string: generateFunction(null, commandName, \"utf8\"),\n buffer: generateFunction(null, commandName, null),\n };\n }\n /**\n * Create add builtin command\n */\n addBuiltinCommand(commandName) {\n this.addedBuiltinSet.add(commandName);\n this[commandName] = generateFunction(commandName, commandName, \"utf8\");\n this[commandName + \"Buffer\"] = generateFunction(commandName + \"Buffer\", commandName, null);\n }\n /**\n * Define a custom command using lua script\n */\n defineCommand(name, definition) {\n const script = new Script_1.default(definition.lua, definition.numberOfKeys, this.options.keyPrefix, definition.readOnly);\n this.scriptsSet[name] = script;\n this[name] = generateScriptingFunction(name, name, script, \"utf8\");\n this[name + \"Buffer\"] = generateScriptingFunction(name + \"Buffer\", name, script, null);\n }\n /**\n * @ignore\n */\n sendCommand(command, stream, node) {\n throw new Error('\"sendCommand\" is not implemented');\n }\n}\nconst commands = commands_1.list.filter((command) => command !== \"monitor\");\ncommands.push(\"sentinel\");\ncommands.forEach(function (commandName) {\n Commander.prototype[commandName] = generateFunction(commandName, commandName, \"utf8\");\n Commander.prototype[commandName + \"Buffer\"] = generateFunction(commandName + \"Buffer\", commandName, null);\n});\nCommander.prototype.call = generateFunction(\"call\", \"utf8\");\nCommander.prototype.callBuffer = generateFunction(\"callBuffer\", null);\n// @ts-expect-error\nCommander.prototype.send_command = Commander.prototype.call;\nfunction generateFunction(functionName, _commandName, _encoding) {\n if (typeof _encoding === \"undefined\") {\n _encoding = _commandName;\n _commandName = null;\n }\n return function (...args) {\n const commandName = (_commandName || args.shift());\n let callback = args[args.length - 1];\n if (typeof callback === \"function\") {\n args.pop();\n }\n else {\n callback = undefined;\n }\n const options = {\n errorStack: this.options.showFriendlyErrorStack ? new Error() : undefined,\n keyPrefix: this.options.keyPrefix,\n replyEncoding: _encoding,\n };\n // No auto pipeline, use regular command sending\n if (!(0, autoPipelining_1.shouldUseAutoPipelining)(this, functionName, commandName)) {\n return this.sendCommand(\n // @ts-expect-error\n new Command_1.default(commandName, args, options, callback));\n }\n // Create a new pipeline and make sure it's scheduled\n return (0, autoPipelining_1.executeWithAutoPipelining)(this, functionName, commandName, \n // @ts-expect-error\n args, callback);\n };\n}\nfunction generateScriptingFunction(functionName, commandName, script, encoding) {\n return function (...args) {\n const callback = typeof args[args.length - 1] === \"function\" ? args.pop() : undefined;\n const options = {\n replyEncoding: encoding,\n };\n if (this.options.showFriendlyErrorStack) {\n options.errorStack = new Error();\n }\n // No auto pipeline, use regular command sending\n if (!(0, autoPipelining_1.shouldUseAutoPipelining)(this, functionName, commandName)) {\n return script.execute(this, args, options, callback);\n }\n // Create a new pipeline and make sure it's scheduled\n return (0, autoPipelining_1.executeWithAutoPipelining)(this, functionName, commandName, args, callback);\n };\n}\nexports[\"default\"] = Commander;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L3V0aWxzL0NvbW1hbmRlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxtQkFBbUIsbUJBQU8sQ0FBQywyRkFBbUI7QUFDOUMseUJBQXlCLG1CQUFPLENBQUMsMEZBQW1CO0FBQ3BELGtCQUFrQixtQkFBTyxDQUFDLDRFQUFZO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLDBFQUFXO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L3V0aWxzL0NvbW1hbmRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvbW1hbmRzXzEgPSByZXF1aXJlKFwiQGlvcmVkaXMvY29tbWFuZHNcIik7XG5jb25zdCBhdXRvUGlwZWxpbmluZ18xID0gcmVxdWlyZShcIi4uL2F1dG9QaXBlbGluaW5nXCIpO1xuY29uc3QgQ29tbWFuZF8xID0gcmVxdWlyZShcIi4uL0NvbW1hbmRcIik7XG5jb25zdCBTY3JpcHRfMSA9IHJlcXVpcmUoXCIuLi9TY3JpcHRcIik7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5jbGFzcyBDb21tYW5kZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBpZ25vcmVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2NyaXB0c1NldCA9IHt9O1xuICAgICAgICAvKipcbiAgICAgICAgICogQGlnbm9yZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hZGRlZEJ1aWx0aW5TZXQgPSBuZXcgU2V0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBzdXBwb3J0ZWQgYnVpbHRpbiBjb21tYW5kc1xuICAgICAqL1xuICAgIGdldEJ1aWx0aW5Db21tYW5kcygpIHtcbiAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnNsaWNlKDApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBidWlsdGluIGNvbW1hbmRcbiAgICAgKi9cbiAgICBjcmVhdGVCdWlsdGluQ29tbWFuZChjb21tYW5kTmFtZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RyaW5nOiBnZW5lcmF0ZUZ1bmN0aW9uKG51bGwsIGNvbW1hbmROYW1lLCBcInV0ZjhcIiksXG4gICAgICAgICAgICBidWZmZXI6IGdlbmVyYXRlRnVuY3Rpb24obnVsbCwgY29tbWFuZE5hbWUsIG51bGwpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYWRkIGJ1aWx0aW4gY29tbWFuZFxuICAgICAqL1xuICAgIGFkZEJ1aWx0aW5Db21tYW5kKGNvbW1hbmROYW1lKSB7XG4gICAgICAgIHRoaXMuYWRkZWRCdWlsdGluU2V0LmFkZChjb21tYW5kTmFtZSk7XG4gICAgICAgIHRoaXNbY29tbWFuZE5hbWVdID0gZ2VuZXJhdGVGdW5jdGlvbihjb21tYW5kTmFtZSwgY29tbWFuZE5hbWUsIFwidXRmOFwiKTtcbiAgICAgICAgdGhpc1tjb21tYW5kTmFtZSArIFwiQnVmZmVyXCJdID0gZ2VuZXJhdGVGdW5jdGlvbihjb21tYW5kTmFtZSArIFwiQnVmZmVyXCIsIGNvbW1hbmROYW1lLCBudWxsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmaW5lIGEgY3VzdG9tIGNvbW1hbmQgdXNpbmcgbHVhIHNjcmlwdFxuICAgICAqL1xuICAgIGRlZmluZUNvbW1hbmQobmFtZSwgZGVmaW5pdGlvbikge1xuICAgICAgICBjb25zdCBzY3JpcHQgPSBuZXcgU2NyaXB0XzEuZGVmYXVsdChkZWZpbml0aW9uLmx1YSwgZGVmaW5pdGlvbi5udW1iZXJPZktleXMsIHRoaXMub3B0aW9ucy5rZXlQcmVmaXgsIGRlZmluaXRpb24ucmVhZE9ubHkpO1xuICAgICAgICB0aGlzLnNjcmlwdHNTZXRbbmFtZV0gPSBzY3JpcHQ7XG4gICAgICAgIHRoaXNbbmFtZV0gPSBnZW5lcmF0ZVNjcmlwdGluZ0Z1bmN0aW9uKG5hbWUsIG5hbWUsIHNjcmlwdCwgXCJ1dGY4XCIpO1xuICAgICAgICB0aGlzW25hbWUgKyBcIkJ1ZmZlclwiXSA9IGdlbmVyYXRlU2NyaXB0aW5nRnVuY3Rpb24obmFtZSArIFwiQnVmZmVyXCIsIG5hbWUsIHNjcmlwdCwgbnVsbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICBzZW5kQ29tbWFuZChjb21tYW5kLCBzdHJlYW0sIG5vZGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInNlbmRDb21tYW5kXCIgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxufVxuY29uc3QgY29tbWFuZHMgPSBjb21tYW5kc18xLmxpc3QuZmlsdGVyKChjb21tYW5kKSA9PiBjb21tYW5kICE9PSBcIm1vbml0b3JcIik7XG5jb21tYW5kcy5wdXNoKFwic2VudGluZWxcIik7XG5jb21tYW5kcy5mb3JFYWNoKGZ1bmN0aW9uIChjb21tYW5kTmFtZSkge1xuICAgIENvbW1hbmRlci5wcm90b3R5cGVbY29tbWFuZE5hbWVdID0gZ2VuZXJhdGVGdW5jdGlvbihjb21tYW5kTmFtZSwgY29tbWFuZE5hbWUsIFwidXRmOFwiKTtcbiAgICBDb21tYW5kZXIucHJvdG90eXBlW2NvbW1hbmROYW1lICsgXCJCdWZmZXJcIl0gPSBnZW5lcmF0ZUZ1bmN0aW9uKGNvbW1hbmROYW1lICsgXCJCdWZmZXJcIiwgY29tbWFuZE5hbWUsIG51bGwpO1xufSk7XG5Db21tYW5kZXIucHJvdG90eXBlLmNhbGwgPSBnZW5lcmF0ZUZ1bmN0aW9uKFwiY2FsbFwiLCBcInV0ZjhcIik7XG5Db21tYW5kZXIucHJvdG90eXBlLmNhbGxCdWZmZXIgPSBnZW5lcmF0ZUZ1bmN0aW9uKFwiY2FsbEJ1ZmZlclwiLCBudWxsKTtcbi8vIEB0cy1leHBlY3QtZXJyb3JcbkNvbW1hbmRlci5wcm90b3R5cGUuc2VuZF9jb21tYW5kID0gQ29tbWFuZGVyLnByb3RvdHlwZS5jYWxsO1xuZnVuY3Rpb24gZ2VuZXJhdGVGdW5jdGlvbihmdW5jdGlvbk5hbWUsIF9jb21tYW5kTmFtZSwgX2VuY29kaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBfZW5jb2RpbmcgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgX2VuY29kaW5nID0gX2NvbW1hbmROYW1lO1xuICAgICAgICBfY29tbWFuZE5hbWUgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSAoX2NvbW1hbmROYW1lIHx8IGFyZ3Muc2hpZnQoKSk7XG4gICAgICAgIGxldCBjYWxsYmFjayA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGVycm9yU3RhY2s6IHRoaXMub3B0aW9ucy5zaG93RnJpZW5kbHlFcnJvclN0YWNrID8gbmV3IEVycm9yKCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBrZXlQcmVmaXg6IHRoaXMub3B0aW9ucy5rZXlQcmVmaXgsXG4gICAgICAgICAgICByZXBseUVuY29kaW5nOiBfZW5jb2RpbmcsXG4gICAgICAgIH07XG4gICAgICAgIC8vIE5vIGF1dG8gcGlwZWxpbmUsIHVzZSByZWd1bGFyIGNvbW1hbmQgc2VuZGluZ1xuICAgICAgICBpZiAoISgwLCBhdXRvUGlwZWxpbmluZ18xLnNob3VsZFVzZUF1dG9QaXBlbGluaW5nKSh0aGlzLCBmdW5jdGlvbk5hbWUsIGNvbW1hbmROYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VuZENvbW1hbmQoXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBuZXcgQ29tbWFuZF8xLmRlZmF1bHQoY29tbWFuZE5hbWUsIGFyZ3MsIG9wdGlvbnMsIGNhbGxiYWNrKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHBpcGVsaW5lIGFuZCBtYWtlIHN1cmUgaXQncyBzY2hlZHVsZWRcbiAgICAgICAgcmV0dXJuICgwLCBhdXRvUGlwZWxpbmluZ18xLmV4ZWN1dGVXaXRoQXV0b1BpcGVsaW5pbmcpKHRoaXMsIGZ1bmN0aW9uTmFtZSwgY29tbWFuZE5hbWUsIFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIGFyZ3MsIGNhbGxiYWNrKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2VuZXJhdGVTY3JpcHRpbmdGdW5jdGlvbihmdW5jdGlvbk5hbWUsIGNvbW1hbmROYW1lLCBzY3JpcHQsIGVuY29kaW5nKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gXCJmdW5jdGlvblwiID8gYXJncy5wb3AoKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHJlcGx5RW5jb2Rpbmc6IGVuY29kaW5nLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dGcmllbmRseUVycm9yU3RhY2spIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZXJyb3JTdGFjayA9IG5ldyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vIGF1dG8gcGlwZWxpbmUsIHVzZSByZWd1bGFyIGNvbW1hbmQgc2VuZGluZ1xuICAgICAgICBpZiAoISgwLCBhdXRvUGlwZWxpbmluZ18xLnNob3VsZFVzZUF1dG9QaXBlbGluaW5nKSh0aGlzLCBmdW5jdGlvbk5hbWUsIGNvbW1hbmROYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjcmlwdC5leGVjdXRlKHRoaXMsIGFyZ3MsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcGlwZWxpbmUgYW5kIG1ha2Ugc3VyZSBpdCdzIHNjaGVkdWxlZFxuICAgICAgICByZXR1cm4gKDAsIGF1dG9QaXBlbGluaW5nXzEuZXhlY3V0ZVdpdGhBdXRvUGlwZWxpbmluZykodGhpcywgZnVuY3Rpb25OYW1lLCBjb21tYW5kTmFtZSwgYXJncywgY2FsbGJhY2spO1xuICAgIH07XG59XG5leHBvcnRzLmRlZmF1bHQgPSBDb21tYW5kZXI7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/utils/Commander.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/utils/applyMixin.js":
/*!********************************************************!*\
!*** ./node_modules/ioredis/built/utils/applyMixin.js ***!
\********************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nfunction applyMixin(derivedConstructor, mixinConstructor) {\n Object.getOwnPropertyNames(mixinConstructor.prototype).forEach((name) => {\n Object.defineProperty(derivedConstructor.prototype, name, Object.getOwnPropertyDescriptor(mixinConstructor.prototype, name));\n });\n}\nexports[\"default\"] = applyMixin;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L3V0aWxzL2FwcGx5TWl4aW4uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0Esa0JBQWUiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvdXRpbHMvYXBwbHlNaXhpbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIGFwcGx5TWl4aW4oZGVyaXZlZENvbnN0cnVjdG9yLCBtaXhpbkNvbnN0cnVjdG9yKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobWl4aW5Db25zdHJ1Y3Rvci5wcm90b3R5cGUpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRlcml2ZWRDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIG5hbWUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobWl4aW5Db25zdHJ1Y3Rvci5wcm90b3R5cGUsIG5hbWUpKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGFwcGx5TWl4aW47XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/utils/applyMixin.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/utils/debug.js":
/*!***************************************************!*\
!*** ./node_modules/ioredis/built/utils/debug.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.genRedactedString = exports.getStringValue = exports.MAX_ARGUMENT_LENGTH = void 0;\nconst debug_1 = __webpack_require__(/*! debug */ \"(action-browser)/./node_modules/debug/src/index.js\");\nconst MAX_ARGUMENT_LENGTH = 200;\nexports.MAX_ARGUMENT_LENGTH = MAX_ARGUMENT_LENGTH;\nconst NAMESPACE_PREFIX = \"ioredis\";\n/**\n * helper function that tried to get a string value for\n * arbitrary \"debug\" arg\n */\nfunction getStringValue(v) {\n if (v === null) {\n return;\n }\n switch (typeof v) {\n case \"boolean\":\n return;\n case \"number\":\n return;\n case \"object\":\n if (Buffer.isBuffer(v)) {\n return v.toString(\"hex\");\n }\n if (Array.isArray(v)) {\n return v.join(\",\");\n }\n try {\n return JSON.stringify(v);\n }\n catch (e) {\n return;\n }\n case \"string\":\n return v;\n }\n}\nexports.getStringValue = getStringValue;\n/**\n * helper function that redacts a string representation of a \"debug\" arg\n */\nfunction genRedactedString(str, maxLen) {\n const { length } = str;\n return length <= maxLen\n ? str\n : str.slice(0, maxLen) + ' ... <REDACTED full-length=\"' + length + '\">';\n}\nexports.genRedactedString = genRedactedString;\n/**\n * a wrapper for the `debug` module, used to generate\n * \"debug functions\" that trim the values in their output\n */\nfunction genDebugFunction(namespace) {\n const fn = (0, debug_1.default)(`${NAMESPACE_PREFIX}:${namespace}`);\n function wrappedDebug(...args) {\n if (!fn.enabled) {\n return; // no-op\n }\n // we skip the first arg because that is the message\n for (let i = 1; i < args.length; i++) {\n const str = getStringValue(args[i]);\n if (typeof str === \"string\" && str.length > MAX_ARGUMENT_LENGTH) {\n args[i] = genRedactedString(str, MAX_ARGUMENT_LENGTH);\n }\n }\n return fn.apply(null, args);\n }\n Object.defineProperties(wrappedDebug, {\n namespace: {\n get() {\n return fn.namespace;\n },\n },\n enabled: {\n get() {\n return fn.enabled;\n },\n },\n destroy: {\n get() {\n return fn.destroy;\n },\n },\n log: {\n get() {\n return fn.log;\n },\n set(l) {\n fn.log = l;\n },\n },\n });\n return wrappedDebug;\n}\nexports[\"default\"] = genDebugFunction;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L3V0aWxzL2RlYnVnLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHlCQUF5QixHQUFHLHNCQUFzQixHQUFHLDJCQUEyQjtBQUNoRixnQkFBZ0IsbUJBQU8sQ0FBQyxpRUFBTztBQUMvQjtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksU0FBUztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQixHQUFHLFVBQVU7QUFDckU7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0Esa0JBQWUiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvdXRpbHMvZGVidWcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdlblJlZGFjdGVkU3RyaW5nID0gZXhwb3J0cy5nZXRTdHJpbmdWYWx1ZSA9IGV4cG9ydHMuTUFYX0FSR1VNRU5UX0xFTkdUSCA9IHZvaWQgMDtcbmNvbnN0IGRlYnVnXzEgPSByZXF1aXJlKFwiZGVidWdcIik7XG5jb25zdCBNQVhfQVJHVU1FTlRfTEVOR1RIID0gMjAwO1xuZXhwb3J0cy5NQVhfQVJHVU1FTlRfTEVOR1RIID0gTUFYX0FSR1VNRU5UX0xFTkdUSDtcbmNvbnN0IE5BTUVTUEFDRV9QUkVGSVggPSBcImlvcmVkaXNcIjtcbi8qKlxuICogaGVscGVyIGZ1bmN0aW9uIHRoYXQgdHJpZWQgdG8gZ2V0IGEgc3RyaW5nIHZhbHVlIGZvclxuICogYXJiaXRyYXJ5IFwiZGVidWdcIiBhcmdcbiAqL1xuZnVuY3Rpb24gZ2V0U3RyaW5nVmFsdWUodikge1xuICAgIGlmICh2ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIodikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZyhcImhleFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHYuam9pbihcIixcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICB9XG59XG5leHBvcnRzLmdldFN0cmluZ1ZhbHVlID0gZ2V0U3RyaW5nVmFsdWU7XG4vKipcbiAqIGhlbHBlciBmdW5jdGlvbiB0aGF0IHJlZGFjdHMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBcImRlYnVnXCIgYXJnXG4gKi9cbmZ1bmN0aW9uIGdlblJlZGFjdGVkU3RyaW5nKHN0ciwgbWF4TGVuKSB7XG4gICAgY29uc3QgeyBsZW5ndGggfSA9IHN0cjtcbiAgICByZXR1cm4gbGVuZ3RoIDw9IG1heExlblxuICAgICAgICA/IHN0clxuICAgICAgICA6IHN0ci5zbGljZSgwLCBtYXhMZW4pICsgJyAuLi4gPFJFREFDVEVEIGZ1bGwtbGVuZ3RoPVwiJyArIGxlbmd0aCArICdcIj4nO1xufVxuZXhwb3J0cy5nZW5SZWRhY3RlZFN0cmluZyA9IGdlblJlZGFjdGVkU3RyaW5nO1xuLyoqXG4gKiBhIHdyYXBwZXIgZm9yIHRoZSBgZGVidWdgIG1vZHVsZSwgdXNlZCB0byBnZW5lcmF0ZVxuICogXCJkZWJ1ZyBmdW5jdGlvbnNcIiB0aGF0IHRyaW0gdGhlIHZhbHVlcyBpbiB0aGVpciBvdXRwdXRcbiAqL1xuZnVuY3Rpb24gZ2VuRGVidWdGdW5jdGlvbihuYW1lc3BhY2UpIHtcbiAgICBjb25zdCBmbiA9ICgwLCBkZWJ1Z18xLmRlZmF1bHQpKGAke05BTUVTUEFDRV9QUkVGSVh9OiR7bmFtZXNwYWNlfWApO1xuICAgIGZ1bmN0aW9uIHdyYXBwZWREZWJ1ZyguLi5hcmdzKSB7XG4gICAgICAgIGlmICghZm4uZW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuOyAvLyBuby1vcFxuICAgICAgICB9XG4gICAgICAgIC8vIHdlIHNraXAgdGhlIGZpcnN0IGFyZyBiZWNhdXNlIHRoYXQgaXMgdGhlIG1lc3NhZ2VcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzdHIgPSBnZXRTdHJpbmdWYWx1ZShhcmdzW2ldKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RyID09PSBcInN0cmluZ1wiICYmIHN0ci5sZW5ndGggPiBNQVhfQVJHVU1FTlRfTEVOR1RIKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tpXSA9IGdlblJlZGFjdGVkU3RyaW5nKHN0ciwgTUFYX0FSR1VNRU5UX0xFTkdUSCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3cmFwcGVkRGVidWcsIHtcbiAgICAgICAgbmFtZXNwYWNlOiB7XG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5hbWVzcGFjZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4uZW5hYmxlZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGRlc3Ryb3k6IHtcbiAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4uZGVzdHJveTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGxvZzoge1xuICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmbi5sb2c7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0KGwpIHtcbiAgICAgICAgICAgICAgICBmbi5sb2cgPSBsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gd3JhcHBlZERlYnVnO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gZ2VuRGVidWdGdW5jdGlvbjtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/utils/debug.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/utils/index.js":
/*!***************************************************!*\
!*** ./node_modules/ioredis/built/utils/index.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.noop = exports.defaults = exports.Debug = exports.zipMap = exports.CONNECTION_CLOSED_ERROR_MSG = exports.shuffle = exports.sample = exports.resolveTLSProfile = exports.parseURL = exports.optimizeErrorStack = exports.toArg = exports.convertMapToArray = exports.convertObjectToArray = exports.timeout = exports.packObject = exports.isInt = exports.wrapMultiResult = exports.convertBufferToString = void 0;\nconst url_1 = __webpack_require__(/*! url */ \"url\");\nconst lodash_1 = __webpack_require__(/*! ./lodash */ \"(action-browser)/./node_modules/ioredis/built/utils/lodash.js\");\nObject.defineProperty(exports, \"defaults\", ({ enumerable: true, get: function () { return lodash_1.defaults; } }));\nObject.defineProperty(exports, \"noop\", ({ enumerable: true, get: function () { return lodash_1.noop; } }));\nconst debug_1 = __webpack_require__(/*! ./debug */ \"(action-browser)/./node_modules/ioredis/built/utils/debug.js\");\nexports.Debug = debug_1.default;\nconst TLSProfiles_1 = __webpack_require__(/*! ../constants/TLSProfiles */ \"(action-browser)/./node_modules/ioredis/built/constants/TLSProfiles.js\");\n/**\n * Convert a buffer to string, supports buffer array\n *\n * @example\n * ```js\n * const input = [Buffer.from('foo'), [Buffer.from('bar')]]\n * const res = convertBufferToString(input, 'utf8')\n * expect(res).to.eql(['foo', ['bar']])\n * ```\n */\nfunction convertBufferToString(value, encoding) {\n if (value instanceof Buffer) {\n return value.toString(encoding);\n }\n if (Array.isArray(value)) {\n const length = value.length;\n const res = Array(length);\n for (let i = 0; i < length; ++i) {\n res[i] =\n value[i] instanceof Buffer && encoding === \"utf8\"\n ? value[i].toString()\n : convertBufferToString(value[i], encoding);\n }\n return res;\n }\n return value;\n}\nexports.convertBufferToString = convertBufferToString;\n/**\n * Convert a list of results to node-style\n *\n * @example\n * ```js\n * const input = ['a', 'b', new Error('c'), 'd']\n * const output = exports.wrapMultiResult(input)\n * expect(output).to.eql([[null, 'a'], [null, 'b'], [new Error('c')], [null, 'd'])\n * ```\n */\nfunction wrapMultiResult(arr) {\n // When using WATCH/EXEC transactions, the EXEC will return\n // a null instead of an array\n if (!arr) {\n return null;\n }\n const result = [];\n const length = arr.length;\n for (let i = 0; i < length; ++i) {\n const item = arr[i];\n if (item instanceof Error) {\n result.push([item]);\n }\n else {\n result.push([null, item]);\n }\n }\n return result;\n}\nexports.wrapMultiResult = wrapMultiResult;\n/**\n * Detect if the argument is a int\n * @example\n * ```js\n * > isInt('123')\n * true\n * > isInt('123.3')\n * false\n * > isInt('1x')\n * false\n * > isInt(123)\n * true\n * > isInt(true)\n * false\n * ```\n */\nfunction isInt(value) {\n const x = parseFloat(value);\n return !isNaN(value) && (x | 0) === x;\n}\nexports.isInt = isInt;\n/**\n * Pack an array to an Object\n *\n * @example\n * ```js\n * > packObject(['a', 'b', 'c', 'd'])\n * { a: 'b', c: 'd' }\n * ```\n */\nfunction packObject(array) {\n const result = {};\n const length = array.length;\n for (let i = 1; i < length; i += 2) {\n result[array[i - 1]] = array[i];\n }\n return result;\n}\nexports.packObject = packObject;\n/**\n * Return a callback with timeout\n */\nfunction timeout(callback, timeout) {\n let timer = null;\n const run = function () {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n callback.apply(this, arguments);\n }\n };\n timer = setTimeout(run, timeout, new Error(\"timeout\"));\n return run;\n}\nexports.timeout = timeout;\n/**\n * Convert an object to an array\n * @example\n * ```js\n * > convertObjectToArray({ a: '1' })\n * ['a', '1']\n * ```\n */\nfunction convertObjectToArray(obj) {\n const result = [];\n const keys = Object.keys(obj); // Object.entries requires node 7+\n for (let i = 0, l = keys.length; i < l; i++) {\n result.push(keys[i], obj[keys[i]]);\n }\n return result;\n}\nexports.convertObjectToArray = convertObjectToArray;\n/**\n * Convert a map to an array\n * @example\n * ```js\n * > convertMapToArray(new Map([[1, '2']]))\n * [1, '2']\n * ```\n */\nfunction convertMapToArray(map) {\n const result = [];\n let pos = 0;\n map.forEach(function (value, key) {\n result[pos] = key;\n result[pos + 1] = value;\n pos += 2;\n });\n return result;\n}\nexports.convertMapToArray = convertMapToArray;\n/**\n * Convert a non-string arg to a string\n */\nfunction toArg(arg) {\n if (arg === null || typeof arg === \"undefined\") {\n return \"\";\n }\n return String(arg);\n}\nexports.toArg = toArg;\n/**\n * Optimize error stack\n *\n * @param error actually error\n * @param friendlyStack the stack that more meaningful\n * @param filterPath only show stacks with the specified path\n */\nfunction optimizeErrorStack(error, friendlyStack, filterPath) {\n const stacks = friendlyStack.split(\"\\n\");\n let lines = \"\";\n let i;\n for (i = 1; i < stacks.length; ++i) {\n if (stacks[i].indexOf(filterPath) === -1) {\n break;\n }\n }\n for (let j = i; j < stacks.length; ++j) {\n lines += \"\\n\" + stacks[j];\n }\n if (error.stack) {\n const pos = error.stack.indexOf(\"\\n\");\n error.stack = error.stack.slice(0, pos) + lines;\n }\n return error;\n}\nexports.optimizeErrorStack = optimizeErrorStack;\n/**\n * Parse the redis protocol url\n */\nfunction parseURL(url) {\n if (isInt(url)) {\n return { port: url };\n }\n let parsed = (0, url_1.parse)(url, true, true);\n if (!parsed.slashes && url[0] !== \"/\") {\n url = \"//\" + url;\n parsed = (0, url_1.parse)(url, true, true);\n }\n const options = parsed.query || {};\n const result = {};\n if (parsed.auth) {\n const index = parsed.auth.indexOf(\":\");\n result.username = index === -1 ? parsed.auth : parsed.auth.slice(0, index);\n result.password = index === -1 ? \"\" : parsed.auth.slice(index + 1);\n }\n if (parsed.pathname) {\n if (parsed.protocol === \"redis:\" || parsed.protocol === \"rediss:\") {\n if (parsed.pathname.length > 1) {\n result.db = parsed.pathname.slice(1);\n }\n }\n else {\n result.path = parsed.pathname;\n }\n }\n if (parsed.host) {\n result.host = parsed.hostname;\n }\n if (parsed.port) {\n result.port = parsed.port;\n }\n if (typeof options.family === \"string\") {\n const intFamily = Number.parseInt(options.family, 10);\n if (!Number.isNaN(intFamily)) {\n result.family = intFamily;\n }\n }\n (0, lodash_1.defaults)(result, options);\n return result;\n}\nexports.parseURL = parseURL;\n/**\n * Resolve TLS profile shortcut in connection options\n */\nfunction resolveTLSProfile(options) {\n let tls = options === null || options === void 0 ? void 0 : options.tls;\n if (typeof tls === \"string\")\n tls = { profile: tls };\n const profile = TLSProfiles_1.default[tls === null || tls === void 0 ? void 0 : tls.profile];\n if (profile) {\n tls = Object.assign({}, profile, tls);\n delete tls.profile;\n options = Object.assign({}, options, { tls });\n }\n return options;\n}\nexports.resolveTLSProfile = resolveTLSProfile;\n/**\n * Get a random element from `array`\n */\nfunction sample(array, from = 0) {\n const length = array.length;\n if (from >= length) {\n return null;\n }\n return array[from + Math.floor(Math.random() * (length - from))];\n}\nexports.sample = sample;\n/**\n * Shuffle the array using the Fisher-Yates Shuffle.\n * This method will mutate the original array.\n */\nfunction shuffle(array) {\n let counter = array.length;\n // While there are elements in the array\n while (counter > 0) {\n // Pick a random index\n const index = Math.floor(Math.random() * counter);\n // Decrease counter by 1\n counter--;\n // And swap the last element with it\n [array[counter], array[index]] = [array[index], array[counter]];\n }\n return array;\n}\nexports.shuffle = shuffle;\n/**\n * Error message for connection being disconnected\n */\nexports.CONNECTION_CLOSED_ERROR_MSG = \"Connection is closed.\";\nfunction zipMap(keys, values) {\n const map = new Map();\n keys.forEach((key, index) => {\n map.set(key, values[index]);\n });\n return map;\n}\nexports.zipMap = zipMap;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L3V0aWxzL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELFlBQVksR0FBRyxnQkFBZ0IsR0FBRyxhQUFhLEdBQUcsY0FBYyxHQUFHLG1DQUFtQyxHQUFHLGVBQWUsR0FBRyxjQUFjLEdBQUcseUJBQXlCLEdBQUcsZ0JBQWdCLEdBQUcsMEJBQTBCLEdBQUcsYUFBYSxHQUFHLHlCQUF5QixHQUFHLDRCQUE0QixHQUFHLGVBQWUsR0FBRyxrQkFBa0IsR0FBRyxhQUFhLEdBQUcsdUJBQXVCLEdBQUcsNkJBQTZCO0FBQ2paLGNBQWMsbUJBQU8sQ0FBQyxnQkFBSztBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQywrRUFBVTtBQUNuQyw0Q0FBMkMsRUFBRSxxQ0FBcUMsNkJBQTZCLEVBQUM7QUFDaEgsd0NBQXVDLEVBQUUscUNBQXFDLHlCQUF5QixFQUFDO0FBQ3hHLGdCQUFnQixtQkFBTyxDQUFDLDZFQUFTO0FBQ2pDLGFBQWE7QUFDYixzQkFBc0IsbUJBQU8sQ0FBQyx3R0FBMEI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixZQUFZO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsWUFBWTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFlBQVk7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFFBQVE7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQyxxQ0FBcUMsT0FBTztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsbUJBQW1CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0Esa0NBQWtDLGFBQWEsS0FBSztBQUNwRDtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLGNBQWMiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvdXRpbHMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5vb3AgPSBleHBvcnRzLmRlZmF1bHRzID0gZXhwb3J0cy5EZWJ1ZyA9IGV4cG9ydHMuemlwTWFwID0gZXhwb3J0cy5DT05ORUNUSU9OX0NMT1NFRF9FUlJPUl9NU0cgPSBleHBvcnRzLnNodWZmbGUgPSBleHBvcnRzLnNhbXBsZSA9IGV4cG9ydHMucmVzb2x2ZVRMU1Byb2ZpbGUgPSBleHBvcnRzLnBhcnNlVVJMID0gZXhwb3J0cy5vcHRpbWl6ZUVycm9yU3RhY2sgPSBleHBvcnRzLnRvQXJnID0gZXhwb3J0cy5jb252ZXJ0TWFwVG9BcnJheSA9IGV4cG9ydHMuY29udmVydE9iamVjdFRvQXJyYXkgPSBleHBvcnRzLnRpbWVvdXQgPSBleHBvcnRzLnBhY2tPYmplY3QgPSBleHBvcnRzLmlzSW50ID0gZXhwb3J0cy53cmFwTXVsdGlSZXN1bHQgPSBleHBvcnRzLmNvbnZlcnRCdWZmZXJUb1N0cmluZyA9IHZvaWQgMDtcbmNvbnN0IHVybF8xID0gcmVxdWlyZShcInVybFwiKTtcbmNvbnN0IGxvZGFzaF8xID0gcmVxdWlyZShcIi4vbG9kYXNoXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdHNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvZGFzaF8xLmRlZmF1bHRzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibm9vcFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9kYXNoXzEubm9vcDsgfSB9KTtcbmNvbnN0IGRlYnVnXzEgPSByZXF1aXJlKFwiLi9kZWJ1Z1wiKTtcbmV4cG9ydHMuRGVidWcgPSBkZWJ1Z18xLmRlZmF1bHQ7XG5jb25zdCBUTFNQcm9maWxlc18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy9UTFNQcm9maWxlc1wiKTtcbi8qKlxuICogQ29udmVydCBhIGJ1ZmZlciB0byBzdHJpbmcsIHN1cHBvcnRzIGJ1ZmZlciBhcnJheVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBqc1xuICogY29uc3QgaW5wdXQgPSBbQnVmZmVyLmZyb20oJ2ZvbycpLCBbQnVmZmVyLmZyb20oJ2JhcicpXV1cbiAqIGNvbnN0IHJlcyA9IGNvbnZlcnRCdWZmZXJUb1N0cmluZyhpbnB1dCwgJ3V0ZjgnKVxuICogZXhwZWN0KHJlcykudG8uZXFsKFsnZm9vJywgWydiYXInXV0pXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY29udmVydEJ1ZmZlclRvU3RyaW5nKHZhbHVlLCBlbmNvZGluZykge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoZW5jb2RpbmcpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXMgPSBBcnJheShsZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICByZXNbaV0gPVxuICAgICAgICAgICAgICAgIHZhbHVlW2ldIGluc3RhbmNlb2YgQnVmZmVyICYmIGVuY29kaW5nID09PSBcInV0ZjhcIlxuICAgICAgICAgICAgICAgICAgICA/IHZhbHVlW2ldLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgOiBjb252ZXJ0QnVmZmVyVG9TdHJpbmcodmFsdWVbaV0sIGVuY29kaW5nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnRzLmNvbnZlcnRCdWZmZXJUb1N0cmluZyA9IGNvbnZlcnRCdWZmZXJUb1N0cmluZztcbi8qKlxuICogQ29udmVydCBhIGxpc3Qgb2YgcmVzdWx0cyB0byBub2RlLXN0eWxlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiBjb25zdCBpbnB1dCA9IFsnYScsICdiJywgbmV3IEVycm9yKCdjJyksICdkJ11cbiAqIGNvbnN0IG91dHB1dCA9IGV4cG9ydHMud3JhcE11bHRpUmVzdWx0KGlucHV0KVxuICogZXhwZWN0KG91dHB1dCkudG8uZXFsKFtbbnVsbCwgJ2EnXSwgW251bGwsICdiJ10sIFtuZXcgRXJyb3IoJ2MnKV0sIFtudWxsLCAnZCddKVxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHdyYXBNdWx0aVJlc3VsdChhcnIpIHtcbiAgICAvLyBXaGVuIHVzaW5nIFdBVENIL0VYRUMgdHJhbnNhY3Rpb25zLCB0aGUgRVhFQyB3aWxsIHJldHVyblxuICAgIC8vIGEgbnVsbCBpbnN0ZWFkIG9mIGFuIGFycmF5XG4gICAgaWYgKCFhcnIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGNvbnN0IGxlbmd0aCA9IGFyci5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBpdGVtID0gYXJyW2ldO1xuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChbaXRlbV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goW251bGwsIGl0ZW1dKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy53cmFwTXVsdGlSZXN1bHQgPSB3cmFwTXVsdGlSZXN1bHQ7XG4vKipcbiAqIERldGVjdCBpZiB0aGUgYXJndW1lbnQgaXMgYSBpbnRcbiAqIEBleGFtcGxlXG4gKiBgYGBqc1xuICogPiBpc0ludCgnMTIzJylcbiAqIHRydWVcbiAqID4gaXNJbnQoJzEyMy4zJylcbiAqIGZhbHNlXG4gKiA+IGlzSW50KCcxeCcpXG4gKiBmYWxzZVxuICogPiBpc0ludCgxMjMpXG4gKiB0cnVlXG4gKiA+IGlzSW50KHRydWUpXG4gKiBmYWxzZVxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGlzSW50KHZhbHVlKSB7XG4gICAgY29uc3QgeCA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgIHJldHVybiAhaXNOYU4odmFsdWUpICYmICh4IHwgMCkgPT09IHg7XG59XG5leHBvcnRzLmlzSW50ID0gaXNJbnQ7XG4vKipcbiAqIFBhY2sgYW4gYXJyYXkgdG8gYW4gT2JqZWN0XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiA+IHBhY2tPYmplY3QoWydhJywgJ2InLCAnYycsICdkJ10pXG4gKiB7IGE6ICdiJywgYzogJ2QnIH1cbiAqIGBgYFxuICovXG5mdW5jdGlvbiBwYWNrT2JqZWN0KGFycmF5KSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgcmVzdWx0W2FycmF5W2kgLSAxXV0gPSBhcnJheVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMucGFja09iamVjdCA9IHBhY2tPYmplY3Q7XG4vKipcbiAqIFJldHVybiBhIGNhbGxiYWNrIHdpdGggdGltZW91dFxuICovXG5mdW5jdGlvbiB0aW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0KSB7XG4gICAgbGV0IHRpbWVyID0gbnVsbDtcbiAgICBjb25zdCBydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aW1lcikge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRpbWVyID0gc2V0VGltZW91dChydW4sIHRpbWVvdXQsIG5ldyBFcnJvcihcInRpbWVvdXRcIikpO1xuICAgIHJldHVybiBydW47XG59XG5leHBvcnRzLnRpbWVvdXQgPSB0aW1lb3V0O1xuLyoqXG4gKiBDb252ZXJ0IGFuIG9iamVjdCB0byBhbiBhcnJheVxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiA+IGNvbnZlcnRPYmplY3RUb0FycmF5KHsgYTogJzEnIH0pXG4gKiBbJ2EnLCAnMSddXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY29udmVydE9iamVjdFRvQXJyYXkob2JqKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7IC8vIE9iamVjdC5lbnRyaWVzIHJlcXVpcmVzIG5vZGUgNytcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGtleXNbaV0sIG9ialtrZXlzW2ldXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLmNvbnZlcnRPYmplY3RUb0FycmF5ID0gY29udmVydE9iamVjdFRvQXJyYXk7XG4vKipcbiAqIENvbnZlcnQgYSBtYXAgdG8gYW4gYXJyYXlcbiAqIEBleGFtcGxlXG4gKiBgYGBqc1xuICogPiBjb252ZXJ0TWFwVG9BcnJheShuZXcgTWFwKFtbMSwgJzInXV0pKVxuICogWzEsICcyJ11cbiAqIGBgYFxuICovXG5mdW5jdGlvbiBjb252ZXJ0TWFwVG9BcnJheShtYXApIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBsZXQgcG9zID0gMDtcbiAgICBtYXAuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICByZXN1bHRbcG9zXSA9IGtleTtcbiAgICAgICAgcmVzdWx0W3BvcyArIDFdID0gdmFsdWU7XG4gICAgICAgIHBvcyArPSAyO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLmNvbnZlcnRNYXBUb0FycmF5ID0gY29udmVydE1hcFRvQXJyYXk7XG4vKipcbiAqIENvbnZlcnQgYSBub24tc3RyaW5nIGFyZyB0byBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiB0b0FyZyhhcmcpIHtcbiAgICBpZiAoYXJnID09PSBudWxsIHx8IHR5cGVvZiBhcmcgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcoYXJnKTtcbn1cbmV4cG9ydHMudG9BcmcgPSB0b0FyZztcbi8qKlxuICogT3B0aW1pemUgZXJyb3Igc3RhY2tcbiAqXG4gKiBAcGFyYW0gZXJyb3IgYWN0dWFsbHkgZXJyb3JcbiAqIEBwYXJhbSBmcmllbmRseVN0YWNrIHRoZSBzdGFjayB0aGF0IG1vcmUgbWVhbmluZ2Z1bFxuICogQHBhcmFtIGZpbHRlclBhdGggb25seSBzaG93IHN0YWNrcyB3aXRoIHRoZSBzcGVjaWZpZWQgcGF0aFxuICovXG5mdW5jdGlvbiBvcHRpbWl6ZUVycm9yU3RhY2soZXJyb3IsIGZyaWVuZGx5U3RhY2ssIGZpbHRlclBhdGgpIHtcbiAgICBjb25zdCBzdGFja3MgPSBmcmllbmRseVN0YWNrLnNwbGl0KFwiXFxuXCIpO1xuICAgIGxldCBsaW5lcyA9IFwiXCI7XG4gICAgbGV0IGk7XG4gICAgZm9yIChpID0gMTsgaSA8IHN0YWNrcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoc3RhY2tzW2ldLmluZGV4T2YoZmlsdGVyUGF0aCkgPT09IC0xKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBqID0gaTsgaiA8IHN0YWNrcy5sZW5ndGg7ICsraikge1xuICAgICAgICBsaW5lcyArPSBcIlxcblwiICsgc3RhY2tzW2pdO1xuICAgIH1cbiAgICBpZiAoZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgY29uc3QgcG9zID0gZXJyb3Iuc3RhY2suaW5kZXhPZihcIlxcblwiKTtcbiAgICAgICAgZXJyb3Iuc3RhY2sgPSBlcnJvci5zdGFjay5zbGljZSgwLCBwb3MpICsgbGluZXM7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcjtcbn1cbmV4cG9ydHMub3B0aW1pemVFcnJvclN0YWNrID0gb3B0aW1pemVFcnJvclN0YWNrO1xuLyoqXG4gKiBQYXJzZSB0aGUgcmVkaXMgcHJvdG9jb2wgdXJsXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVVJMKHVybCkge1xuICAgIGlmIChpc0ludCh1cmwpKSB7XG4gICAgICAgIHJldHVybiB7IHBvcnQ6IHVybCB9O1xuICAgIH1cbiAgICBsZXQgcGFyc2VkID0gKDAsIHVybF8xLnBhcnNlKSh1cmwsIHRydWUsIHRydWUpO1xuICAgIGlmICghcGFyc2VkLnNsYXNoZXMgJiYgdXJsWzBdICE9PSBcIi9cIikge1xuICAgICAgICB1cmwgPSBcIi8vXCIgKyB1cmw7XG4gICAgICAgIHBhcnNlZCA9ICgwLCB1cmxfMS5wYXJzZSkodXJsLCB0cnVlLCB0cnVlKTtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlZC5xdWVyeSB8fCB7fTtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBpZiAocGFyc2VkLmF1dGgpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBwYXJzZWQuYXV0aC5pbmRleE9mKFwiOlwiKTtcbiAgICAgICAgcmVzdWx0LnVzZXJuYW1lID0gaW5kZXggPT09IC0xID8gcGFyc2VkLmF1dGggOiBwYXJzZWQuYXV0aC5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgIHJlc3VsdC5wYXNzd29yZCA9IGluZGV4ID09PSAtMSA/IFwiXCIgOiBwYXJzZWQuYXV0aC5zbGljZShpbmRleCArIDEpO1xuICAgIH1cbiAgICBpZiAocGFyc2VkLnBhdGhuYW1lKSB7XG4gICAgICAgIGlmIChwYXJzZWQucHJvdG9jb2wgPT09IFwicmVkaXM6XCIgfHwgcGFyc2VkLnByb3RvY29sID09PSBcInJlZGlzczpcIikge1xuICAgICAgICAgICAgaWYgKHBhcnNlZC5wYXRobmFtZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmRiID0gcGFyc2VkLnBhdGhuYW1lLnNsaWNlKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnBhdGggPSBwYXJzZWQucGF0aG5hbWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhcnNlZC5ob3N0KSB7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcGFyc2VkLmhvc3RuYW1lO1xuICAgIH1cbiAgICBpZiAocGFyc2VkLnBvcnQpIHtcbiAgICAgICAgcmVzdWx0LnBvcnQgPSBwYXJzZWQucG9ydDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZhbWlseSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBpbnRGYW1pbHkgPSBOdW1iZXIucGFyc2VJbnQob3B0aW9ucy5mYW1pbHksIDEwKTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oaW50RmFtaWx5KSkge1xuICAgICAgICAgICAgcmVzdWx0LmZhbWlseSA9IGludEZhbWlseTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAoMCwgbG9kYXNoXzEuZGVmYXVsdHMpKHJlc3VsdCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMucGFyc2VVUkwgPSBwYXJzZVVSTDtcbi8qKlxuICogUmVzb2x2ZSBUTFMgcHJvZmlsZSBzaG9ydGN1dCBpbiBjb25uZWN0aW9uIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVRMU1Byb2ZpbGUob3B0aW9ucykge1xuICAgIGxldCB0bHMgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudGxzO1xuICAgIGlmICh0eXBlb2YgdGxzID09PSBcInN0cmluZ1wiKVxuICAgICAgICB0bHMgPSB7IHByb2ZpbGU6IHRscyB9O1xuICAgIGNvbnN0IHByb2ZpbGUgPSBUTFNQcm9maWxlc18xLmRlZmF1bHRbdGxzID09PSBudWxsIHx8IHRscyA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGxzLnByb2ZpbGVdO1xuICAgIGlmIChwcm9maWxlKSB7XG4gICAgICAgIHRscyA9IE9iamVjdC5hc3NpZ24oe30sIHByb2ZpbGUsIHRscyk7XG4gICAgICAgIGRlbGV0ZSB0bHMucHJvZmlsZTtcbiAgICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHsgdGxzIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbn1cbmV4cG9ydHMucmVzb2x2ZVRMU1Byb2ZpbGUgPSByZXNvbHZlVExTUHJvZmlsZTtcbi8qKlxuICogR2V0IGEgcmFuZG9tIGVsZW1lbnQgZnJvbSBgYXJyYXlgXG4gKi9cbmZ1bmN0aW9uIHNhbXBsZShhcnJheSwgZnJvbSA9IDApIHtcbiAgICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgaWYgKGZyb20gPj0gbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXlbZnJvbSArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChsZW5ndGggLSBmcm9tKSldO1xufVxuZXhwb3J0cy5zYW1wbGUgPSBzYW1wbGU7XG4vKipcbiAqIFNodWZmbGUgdGhlIGFycmF5IHVzaW5nIHRoZSBGaXNoZXItWWF0ZXMgU2h1ZmZsZS5cbiAqIFRoaXMgbWV0aG9kIHdpbGwgbXV0YXRlIHRoZSBvcmlnaW5hbCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gc2h1ZmZsZShhcnJheSkge1xuICAgIGxldCBjb3VudGVyID0gYXJyYXkubGVuZ3RoO1xuICAgIC8vIFdoaWxlIHRoZXJlIGFyZSBlbGVtZW50cyBpbiB0aGUgYXJyYXlcbiAgICB3aGlsZSAoY291bnRlciA+IDApIHtcbiAgICAgICAgLy8gUGljayBhIHJhbmRvbSBpbmRleFxuICAgICAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNvdW50ZXIpO1xuICAgICAgICAvLyBEZWNyZWFzZSBjb3VudGVyIGJ5IDFcbiAgICAgICAgY291bnRlci0tO1xuICAgICAgICAvLyBBbmQgc3dhcCB0aGUgbGFzdCBlbGVtZW50IHdpdGggaXRcbiAgICAgICAgW2FycmF5W2NvdW50ZXJdLCBhcnJheVtpbmRleF1dID0gW2FycmF5W2luZGV4XSwgYXJyYXlbY291bnRlcl1dO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG59XG5leHBvcnRzLnNodWZmbGUgPSBzaHVmZmxlO1xuLyoqXG4gKiBFcnJvciBtZXNzYWdlIGZvciBjb25uZWN0aW9uIGJlaW5nIGRpc2Nvbm5lY3RlZFxuICovXG5leHBvcnRzLkNPTk5FQ1RJT05fQ0xPU0VEX0VSUk9SX01TRyA9IFwiQ29ubmVjdGlvbiBpcyBjbG9zZWQuXCI7XG5mdW5jdGlvbiB6aXBNYXAoa2V5cywgdmFsdWVzKSB7XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xuICAgIGtleXMuZm9yRWFjaCgoa2V5LCBpbmRleCkgPT4ge1xuICAgICAgICBtYXAuc2V0KGtleSwgdmFsdWVzW2luZGV4XSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG1hcDtcbn1cbmV4cG9ydHMuemlwTWFwID0gemlwTWFwO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/utils/index.js\n");
/***/ }),
/***/ "(action-browser)/./node_modules/ioredis/built/utils/lodash.js":
/*!****************************************************!*\
!*** ./node_modules/ioredis/built/utils/lodash.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.isArguments = exports.defaults = exports.noop = void 0;\nconst defaults = __webpack_require__(/*! lodash.defaults */ \"(action-browser)/./node_modules/lodash.defaults/index.js\");\nexports.defaults = defaults;\nconst isArguments = __webpack_require__(/*! lodash.isarguments */ \"(action-browser)/./node_modules/lodash.isarguments/index.js\");\nexports.isArguments = isArguments;\nfunction noop() { }\nexports.noop = noop;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L3V0aWxzL2xvZGFzaC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxtQkFBbUIsR0FBRyxnQkFBZ0IsR0FBRyxZQUFZO0FBQ3JELGlCQUFpQixtQkFBTyxDQUFDLGlGQUFpQjtBQUMxQyxnQkFBZ0I7QUFDaEIsb0JBQW9CLG1CQUFPLENBQUMsdUZBQW9CO0FBQ2hELG1CQUFtQjtBQUNuQjtBQUNBLFlBQVkiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvdXRpbHMvbG9kYXNoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0FyZ3VtZW50cyA9IGV4cG9ydHMuZGVmYXVsdHMgPSBleHBvcnRzLm5vb3AgPSB2b2lkIDA7XG5jb25zdCBkZWZhdWx0cyA9IHJlcXVpcmUoXCJsb2Rhc2guZGVmYXVsdHNcIik7XG5leHBvcnRzLmRlZmF1bHRzID0gZGVmYXVsdHM7XG5jb25zdCBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoXCJsb2Rhc2guaXNhcmd1bWVudHNcIik7XG5leHBvcnRzLmlzQXJndW1lbnRzID0gaXNBcmd1bWVudHM7XG5mdW5jdGlvbiBub29wKCkgeyB9XG5leHBvcnRzLm5vb3AgPSBub29wO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/ioredis/built/utils/lodash.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/Command.js":
/*!***********************************************!*\
!*** ./node_modules/ioredis/built/Command.js ***!
\***********************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst commands_1 = __webpack_require__(/*! @ioredis/commands */ \"(rsc)/./node_modules/@ioredis/commands/built/index.js\");\nconst calculateSlot = __webpack_require__(/*! cluster-key-slot */ \"(rsc)/./node_modules/cluster-key-slot/lib/index.js\");\nconst standard_as_callback_1 = __webpack_require__(/*! standard-as-callback */ \"(rsc)/./node_modules/standard-as-callback/built/index.js\");\nconst utils_1 = __webpack_require__(/*! ./utils */ \"(rsc)/./node_modules/ioredis/built/utils/index.js\");\n/**\n * Command instance\n *\n * It's rare that you need to create a Command instance yourself.\n *\n * ```js\n * var infoCommand = new Command('info', null, function (err, result) {\n * console.log('result', result);\n * });\n *\n * redis.sendCommand(infoCommand);\n *\n * // When no callback provided, Command instance will have a `promise` property,\n * // which will resolve/reject with the result of the command.\n * var getCommand = new Command('get', ['foo']);\n * getCommand.promise.then(function (result) {\n * console.log('result', result);\n * });\n * ```\n */\nclass Command {\n /**\n * Creates an instance of Command.\n * @param name Command name\n * @param args An array of command arguments\n * @param options\n * @param callback The callback that handles the response.\n * If omit, the response will be handled via Promise\n */\n constructor(name, args = [], options = {}, callback) {\n this.name = name;\n this.inTransaction = false;\n this.isResolved = false;\n this.transformed = false;\n this.replyEncoding = options.replyEncoding;\n this.errorStack = options.errorStack;\n this.args = args.flat();\n this.callback = callback;\n this.initPromise();\n if (options.keyPrefix) {\n // @ts-expect-error\n const isBufferKeyPrefix = options.keyPrefix instanceof Buffer;\n // @ts-expect-error\n let keyPrefixBuffer = isBufferKeyPrefix\n ? options.keyPrefix\n : null;\n this._iterateKeys((key) => {\n if (key instanceof Buffer) {\n if (keyPrefixBuffer === null) {\n keyPrefixBuffer = Buffer.from(options.keyPrefix);\n }\n return Buffer.concat([keyPrefixBuffer, key]);\n }\n else if (isBufferKeyPrefix) {\n // @ts-expect-error\n return Buffer.concat([options.keyPrefix, Buffer.from(String(key))]);\n }\n return options.keyPrefix + key;\n });\n }\n if (options.readOnly) {\n this.isReadOnly = true;\n }\n }\n /**\n * Check whether the command has the flag\n */\n static checkFlag(flagName, commandName) {\n return !!this.getFlagMap()[flagName][commandName];\n }\n static setArgumentTransformer(name, func) {\n this._transformer.argument[name] = func;\n }\n static setReplyTransformer(name, func) {\n this._transformer.reply[name] = func;\n }\n static getFlagMap() {\n if (!this.flagMap) {\n this.flagMap = Object.keys(Command.FLAGS).reduce((map, flagName) => {\n map[flagName] = {};\n Command.FLAGS[flagName].forEach((commandName) => {\n map[flagName][commandName] = true;\n });\n return map;\n }, {});\n }\n return this.flagMap;\n }\n getSlot() {\n if (typeof this.slot === \"undefined\") {\n const key = this.getKeys()[0];\n this.slot = key == null ? null : calculateSlot(key);\n }\n return this.slot;\n }\n getKeys() {\n return this._iterateKeys();\n }\n /**\n * Convert command to writable buffer or string\n */\n toWritable(_socket) {\n let result;\n const commandStr = \"*\" +\n (this.args.length + 1) +\n \"\\r\\n$\" +\n Buffer.byteLength(this.name) +\n \"\\r\\n\" +\n this.name +\n \"\\r\\n\";\n if (this.bufferMode) {\n const buffers = new MixedBuffers();\n buffers.push(commandStr);\n for (let i = 0; i < this.args.length; ++i) {\n const arg = this.args[i];\n if (arg instanceof Buffer) {\n if (arg.length === 0) {\n buffers.push(\"$0\\r\\n\\r\\n\");\n }\n else {\n buffers.push(\"$\" + arg.length + \"\\r\\n\");\n buffers.push(arg);\n buffers.push(\"\\r\\n\");\n }\n }\n else {\n buffers.push(\"$\" +\n Buffer.byteLength(arg) +\n \"\\r\\n\" +\n arg +\n \"\\r\\n\");\n }\n }\n result = buffers.toBuffer();\n }\n else {\n result = commandStr;\n for (let i = 0; i < this.args.length; ++i) {\n const arg = this.args[i];\n result +=\n \"$\" +\n Buffer.byteLength(arg) +\n \"\\r\\n\" +\n arg +\n \"\\r\\n\";\n }\n }\n return result;\n }\n stringifyArguments() {\n for (let i = 0; i < this.args.length; ++i) {\n const arg = this.args[i];\n if (typeof arg === \"string\") {\n // buffers and strings don't need any transformation\n }\n else if (arg instanceof Buffer) {\n this.bufferMode = true;\n }\n else {\n this.args[i] = (0, utils_1.toArg)(arg);\n }\n }\n }\n /**\n * Convert buffer/buffer[] to string/string[],\n * and apply reply transformer.\n */\n transformReply(result) {\n if (this.replyEncoding) {\n result = (0, utils_1.convertBufferToString)(result, this.replyEncoding);\n }\n const transformer = Command._transformer.reply[this.name];\n if (transformer) {\n result = transformer(result);\n }\n return result;\n }\n /**\n * Set the wait time before terminating the attempt to execute a command\n * and generating an error.\n */\n setTimeout(ms) {\n if (!this._commandTimeoutTimer) {\n this._commandTimeoutTimer = setTimeout(() => {\n if (!this.isResolved) {\n this.reject(new Error(\"Command timed out\"));\n }\n }, ms);\n }\n }\n initPromise() {\n const promise = new Promise((resolve, reject) => {\n if (!this.transformed) {\n this.transformed = true;\n const transformer = Command._transformer.argument[this.name];\n if (transformer) {\n this.args = transformer(this.args);\n }\n this.stringifyArguments();\n }\n this.resolve = this._convertValue(resolve);\n if (this.errorStack) {\n this.reject = (err) => {\n reject((0, utils_1.optimizeErrorStack)(err, this.errorStack.stack, __dirname));\n };\n }\n else {\n this.reject = reject;\n }\n });\n this.promise = (0, standard_as_callback_1.default)(promise, this.callback);\n }\n /**\n * Iterate through the command arguments that are considered keys.\n */\n _iterateKeys(transform = (key) => key) {\n if (typeof this.keys === \"undefined\") {\n this.keys = [];\n if ((0, commands_1.exists)(this.name)) {\n // @ts-expect-error\n const keyIndexes = (0, commands_1.getKeyIndexes)(this.name, this.args);\n for (const index of keyIndexes) {\n this.args[index] = transform(this.args[index]);\n this.keys.push(this.args[index]);\n }\n }\n }\n return this.keys;\n }\n /**\n * Convert the value from buffer to the target encoding.\n */\n _convertValue(resolve) {\n return (value) => {\n try {\n const existingTimer = this._commandTimeoutTimer;\n if (existingTimer) {\n clearTimeout(existingTimer);\n delete this._commandTimeoutTimer;\n }\n resolve(this.transformReply(value));\n this.isResolved = true;\n }\n catch (err) {\n this.reject(err);\n }\n return this.promise;\n };\n }\n}\nexports[\"default\"] = Command;\nCommand.FLAGS = {\n VALID_IN_SUBSCRIBER_MODE: [\n \"subscribe\",\n \"psubscribe\",\n \"unsubscribe\",\n \"punsubscribe\",\n \"ssubscribe\",\n \"sunsubscribe\",\n \"ping\",\n \"quit\",\n ],\n VALID_IN_MONITOR_MODE: [\"monitor\", \"auth\"],\n ENTER_SUBSCRIBER_MODE: [\"subscribe\", \"psubscribe\", \"ssubscribe\"],\n EXIT_SUBSCRIBER_MODE: [\"unsubscribe\", \"punsubscribe\", \"sunsubscribe\"],\n WILL_DISCONNECT: [\"quit\"],\n};\nCommand._transformer = {\n argument: {},\n reply: {},\n};\nconst msetArgumentTransformer = function (args) {\n if (args.length === 1) {\n if (args[0] instanceof Map) {\n return (0, utils_1.convertMapToArray)(args[0]);\n }\n if (typeof args[0] === \"object\" && args[0] !== null) {\n return (0, utils_1.convertObjectToArray)(args[0]);\n }\n }\n return args;\n};\nconst hsetArgumentTransformer = function (args) {\n if (args.length === 2) {\n if (args[1] instanceof Map) {\n return [args[0]].concat((0, utils_1.convertMapToArray)(args[1]));\n }\n if (typeof args[1] === \"object\" && args[1] !== null) {\n return [args[0]].concat((0, utils_1.convertObjectToArray)(args[1]));\n }\n }\n return args;\n};\nCommand.setArgumentTransformer(\"mset\", msetArgumentTransformer);\nCommand.setArgumentTransformer(\"msetnx\", msetArgumentTransformer);\nCommand.setArgumentTransformer(\"hset\", hsetArgumentTransformer);\nCommand.setArgumentTransformer(\"hmset\", hsetArgumentTransformer);\nCommand.setReplyTransformer(\"hgetall\", function (result) {\n if (Array.isArray(result)) {\n const obj = {};\n for (let i = 0; i < result.length; i += 2) {\n const key = result[i];\n const value = result[i + 1];\n if (key in obj) {\n // can only be truthy if the property is special somehow, like '__proto__' or 'constructor'\n // https://github.com/luin/ioredis/issues/1267\n Object.defineProperty(obj, key, {\n value,\n configurable: true,\n enumerable: true,\n writable: true,\n });\n }\n else {\n obj[key] = value;\n }\n }\n return obj;\n }\n return result;\n});\nclass MixedBuffers {\n constructor() {\n this.length = 0;\n this.items = [];\n }\n push(x) {\n this.length += Buffer.byteLength(x);\n this.items.push(x);\n }\n toBuffer() {\n const result = Buffer.allocUnsafe(this.length);\n let offset = 0;\n for (const item of this.items) {\n const length = Buffer.byteLength(item);\n Buffer.isBuffer(item)\n ? item.copy(result, offset)\n : result.write(item, offset, length);\n offset += length;\n }\n return result;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9Db21tYW5kLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELG1CQUFtQixtQkFBTyxDQUFDLGdGQUFtQjtBQUM5QyxzQkFBc0IsbUJBQU8sQ0FBQyw0RUFBa0I7QUFDaEQsK0JBQStCLG1CQUFPLENBQUMsc0ZBQXNCO0FBQzdELGdCQUFnQixtQkFBTyxDQUFDLGtFQUFTO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxhQUFhLElBQUk7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsc0JBQXNCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsc0JBQXNCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG1CQUFtQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L0NvbW1hbmQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb21tYW5kc18xID0gcmVxdWlyZShcIkBpb3JlZGlzL2NvbW1hbmRzXCIpO1xuY29uc3QgY2FsY3VsYXRlU2xvdCA9IHJlcXVpcmUoXCJjbHVzdGVyLWtleS1zbG90XCIpO1xuY29uc3Qgc3RhbmRhcmRfYXNfY2FsbGJhY2tfMSA9IHJlcXVpcmUoXCJzdGFuZGFyZC1hcy1jYWxsYmFja1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8qKlxuICogQ29tbWFuZCBpbnN0YW5jZVxuICpcbiAqIEl0J3MgcmFyZSB0aGF0IHlvdSBuZWVkIHRvIGNyZWF0ZSBhIENvbW1hbmQgaW5zdGFuY2UgeW91cnNlbGYuXG4gKlxuICogYGBganNcbiAqIHZhciBpbmZvQ29tbWFuZCA9IG5ldyBDb21tYW5kKCdpbmZvJywgbnVsbCwgZnVuY3Rpb24gKGVyciwgcmVzdWx0KSB7XG4gKiAgIGNvbnNvbGUubG9nKCdyZXN1bHQnLCByZXN1bHQpO1xuICogfSk7XG4gKlxuICogcmVkaXMuc2VuZENvbW1hbmQoaW5mb0NvbW1hbmQpO1xuICpcbiAqIC8vIFdoZW4gbm8gY2FsbGJhY2sgcHJvdmlkZWQsIENvbW1hbmQgaW5zdGFuY2Ugd2lsbCBoYXZlIGEgYHByb21pc2VgIHByb3BlcnR5LFxuICogLy8gd2hpY2ggd2lsbCByZXNvbHZlL3JlamVjdCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGNvbW1hbmQuXG4gKiB2YXIgZ2V0Q29tbWFuZCA9IG5ldyBDb21tYW5kKCdnZXQnLCBbJ2ZvbyddKTtcbiAqIGdldENvbW1hbmQucHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAqICAgY29uc29sZS5sb2coJ3Jlc3VsdCcsIHJlc3VsdCk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5jbGFzcyBDb21tYW5kIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIENvbW1hbmQuXG4gICAgICogQHBhcmFtIG5hbWUgQ29tbWFuZCBuYW1lXG4gICAgICogQHBhcmFtIGFyZ3MgQW4gYXJyYXkgb2YgY29tbWFuZCBhcmd1bWVudHNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdGhhdCBoYW5kbGVzIHRoZSByZXNwb25zZS5cbiAgICAgKiBJZiBvbWl0LCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSBoYW5kbGVkIHZpYSBQcm9taXNlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwgYXJncyA9IFtdLCBvcHRpb25zID0ge30sIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlcGx5RW5jb2RpbmcgPSBvcHRpb25zLnJlcGx5RW5jb2Rpbmc7XG4gICAgICAgIHRoaXMuZXJyb3JTdGFjayA9IG9wdGlvbnMuZXJyb3JTdGFjaztcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncy5mbGF0KCk7XG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgdGhpcy5pbml0UHJvbWlzZSgpO1xuICAgICAgICBpZiAob3B0aW9ucy5rZXlQcmVmaXgpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGNvbnN0IGlzQnVmZmVyS2V5UHJlZml4ID0gb3B0aW9ucy5rZXlQcmVmaXggaW5zdGFuY2VvZiBCdWZmZXI7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBsZXQga2V5UHJlZml4QnVmZmVyID0gaXNCdWZmZXJLZXlQcmVmaXhcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMua2V5UHJlZml4XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgdGhpcy5faXRlcmF0ZUtleXMoKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleVByZWZpeEJ1ZmZlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5UHJlZml4QnVmZmVyID0gQnVmZmVyLmZyb20ob3B0aW9ucy5rZXlQcmVmaXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtrZXlQcmVmaXhCdWZmZXIsIGtleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0J1ZmZlcktleVByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtvcHRpb25zLmtleVByZWZpeCwgQnVmZmVyLmZyb20oU3RyaW5nKGtleSkpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmtleVByZWZpeCArIGtleTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICB0aGlzLmlzUmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGNvbW1hbmQgaGFzIHRoZSBmbGFnXG4gICAgICovXG4gICAgc3RhdGljIGNoZWNrRmxhZyhmbGFnTmFtZSwgY29tbWFuZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXRGbGFnTWFwKClbZmxhZ05hbWVdW2NvbW1hbmROYW1lXTtcbiAgICB9XG4gICAgc3RhdGljIHNldEFyZ3VtZW50VHJhbnNmb3JtZXIobmFtZSwgZnVuYykge1xuICAgICAgICB0aGlzLl90cmFuc2Zvcm1lci5hcmd1bWVudFtuYW1lXSA9IGZ1bmM7XG4gICAgfVxuICAgIHN0YXRpYyBzZXRSZXBseVRyYW5zZm9ybWVyKG5hbWUsIGZ1bmMpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtZXIucmVwbHlbbmFtZV0gPSBmdW5jO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0RmxhZ01hcCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZsYWdNYXApIHtcbiAgICAgICAgICAgIHRoaXMuZmxhZ01hcCA9IE9iamVjdC5rZXlzKENvbW1hbmQuRkxBR1MpLnJlZHVjZSgobWFwLCBmbGFnTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIG1hcFtmbGFnTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBDb21tYW5kLkZMQUdTW2ZsYWdOYW1lXS5mb3JFYWNoKChjb21tYW5kTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBtYXBbZmxhZ05hbWVdW2NvbW1hbmROYW1lXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mbGFnTWFwO1xuICAgIH1cbiAgICBnZXRTbG90KCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2xvdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXlzKClbMF07XG4gICAgICAgICAgICB0aGlzLnNsb3QgPSBrZXkgPT0gbnVsbCA/IG51bGwgOiBjYWxjdWxhdGVTbG90KGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2xvdDtcbiAgICB9XG4gICAgZ2V0S2V5cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZXJhdGVLZXlzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgY29tbWFuZCB0byB3cml0YWJsZSBidWZmZXIgb3Igc3RyaW5nXG4gICAgICovXG4gICAgdG9Xcml0YWJsZShfc29ja2V0KSB7XG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRTdHIgPSBcIipcIiArXG4gICAgICAgICAgICAodGhpcy5hcmdzLmxlbmd0aCArIDEpICtcbiAgICAgICAgICAgIFwiXFxyXFxuJFwiICtcbiAgICAgICAgICAgIEJ1ZmZlci5ieXRlTGVuZ3RoKHRoaXMubmFtZSkgK1xuICAgICAgICAgICAgXCJcXHJcXG5cIiArXG4gICAgICAgICAgICB0aGlzLm5hbWUgK1xuICAgICAgICAgICAgXCJcXHJcXG5cIjtcbiAgICAgICAgaWYgKHRoaXMuYnVmZmVyTW9kZSkge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVycyA9IG5ldyBNaXhlZEJ1ZmZlcnMoKTtcbiAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChjb21tYW5kU3RyKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJnID0gdGhpcy5hcmdzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChcIiQwXFxyXFxuXFxyXFxuXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKFwiJFwiICsgYXJnLmxlbmd0aCArIFwiXFxyXFxuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnB1c2goXCJcXHJcXG5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChcIiRcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIuYnl0ZUxlbmd0aChhcmcpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxyXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxyXFxuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCA9IGJ1ZmZlcnMudG9CdWZmZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGNvbW1hbmRTdHI7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZyA9IHRoaXMuYXJnc1tpXTtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz1cbiAgICAgICAgICAgICAgICAgICAgXCIkXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyLmJ5dGVMZW5ndGgoYXJnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcclxcblwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcclxcblwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHN0cmluZ2lmeUFyZ3VtZW50cygpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFyZ3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IHRoaXMuYXJnc1tpXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgLy8gYnVmZmVycyBhbmQgc3RyaW5ncyBkb24ndCBuZWVkIGFueSB0cmFuc2Zvcm1hdGlvblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXJNb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYXJnc1tpXSA9ICgwLCB1dGlsc18xLnRvQXJnKShhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYnVmZmVyL2J1ZmZlcltdIHRvIHN0cmluZy9zdHJpbmdbXSxcbiAgICAgKiBhbmQgYXBwbHkgcmVwbHkgdHJhbnNmb3JtZXIuXG4gICAgICovXG4gICAgdHJhbnNmb3JtUmVwbHkocmVzdWx0KSB7XG4gICAgICAgIGlmICh0aGlzLnJlcGx5RW5jb2RpbmcpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9ICgwLCB1dGlsc18xLmNvbnZlcnRCdWZmZXJUb1N0cmluZykocmVzdWx0LCB0aGlzLnJlcGx5RW5jb2RpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gQ29tbWFuZC5fdHJhbnNmb3JtZXIucmVwbHlbdGhpcy5uYW1lXTtcbiAgICAgICAgaWYgKHRyYW5zZm9ybWVyKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0cmFuc2Zvcm1lcihyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgd2FpdCB0aW1lIGJlZm9yZSB0ZXJtaW5hdGluZyB0aGUgYXR0ZW1wdCB0byBleGVjdXRlIGEgY29tbWFuZFxuICAgICAqIGFuZCBnZW5lcmF0aW5nIGFuIGVycm9yLlxuICAgICAqL1xuICAgIHNldFRpbWVvdXQobXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jb21tYW5kVGltZW91dFRpbWVyKSB7XG4gICAgICAgICAgICB0aGlzLl9jb21tYW5kVGltZW91dFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWplY3QobmV3IEVycm9yKFwiQ29tbWFuZCB0aW1lZCBvdXRcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG1zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbml0UHJvbWlzZSgpIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy50cmFuc2Zvcm1lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gQ29tbWFuZC5fdHJhbnNmb3JtZXIuYXJndW1lbnRbdGhpcy5uYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmdzID0gdHJhbnNmb3JtZXIodGhpcy5hcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnlBcmd1bWVudHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IHRoaXMuX2NvbnZlcnRWYWx1ZShyZXNvbHZlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmVycm9yU3RhY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlamVjdCA9IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCgwLCB1dGlsc18xLm9wdGltaXplRXJyb3JTdGFjaykoZXJyLCB0aGlzLmVycm9yU3RhY2suc3RhY2ssIF9fZGlybmFtZSkpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucHJvbWlzZSA9ICgwLCBzdGFuZGFyZF9hc19jYWxsYmFja18xLmRlZmF1bHQpKHByb21pc2UsIHRoaXMuY2FsbGJhY2spO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlIHRocm91Z2ggdGhlIGNvbW1hbmQgYXJndW1lbnRzIHRoYXQgYXJlIGNvbnNpZGVyZWQga2V5cy5cbiAgICAgKi9cbiAgICBfaXRlcmF0ZUtleXModHJhbnNmb3JtID0gKGtleSkgPT4ga2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5rZXlzID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0aGlzLmtleXMgPSBbXTtcbiAgICAgICAgICAgIGlmICgoMCwgY29tbWFuZHNfMS5leGlzdHMpKHRoaXMubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5kZXhlcyA9ICgwLCBjb21tYW5kc18xLmdldEtleUluZGV4ZXMpKHRoaXMubmFtZSwgdGhpcy5hcmdzKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGtleUluZGV4ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmdzW2luZGV4XSA9IHRyYW5zZm9ybSh0aGlzLmFyZ3NbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5rZXlzLnB1c2godGhpcy5hcmdzW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmtleXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdGhlIHZhbHVlIGZyb20gYnVmZmVyIHRvIHRoZSB0YXJnZXQgZW5jb2RpbmcuXG4gICAgICovXG4gICAgX2NvbnZlcnRWYWx1ZShyZXNvbHZlKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdUaW1lciA9IHRoaXMuX2NvbW1hbmRUaW1lb3V0VGltZXI7XG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nVGltZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGV4aXN0aW5nVGltZXIpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY29tbWFuZFRpbWVvdXRUaW1lcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnRyYW5zZm9ybVJlcGx5KHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlamVjdChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBDb21tYW5kO1xuQ29tbWFuZC5GTEFHUyA9IHtcbiAgICBWQUxJRF9JTl9TVUJTQ1JJQkVSX01PREU6IFtcbiAgICAgICAgXCJzdWJzY3JpYmVcIixcbiAgICAgICAgXCJwc3Vic2NyaWJlXCIsXG4gICAgICAgIFwidW5zdWJzY3JpYmVcIixcbiAgICAgICAgXCJwdW5zdWJzY3JpYmVcIixcbiAgICAgICAgXCJzc3Vic2NyaWJlXCIsXG4gICAgICAgIFwic3Vuc3Vic2NyaWJlXCIsXG4gICAgICAgIFwicGluZ1wiLFxuICAgICAgICBcInF1aXRcIixcbiAgICBdLFxuICAgIFZBTElEX0lOX01PTklUT1JfTU9ERTogW1wibW9uaXRvclwiLCBcImF1dGhcIl0sXG4gICAgRU5URVJfU1VCU0NSSUJFUl9NT0RFOiBbXCJzdWJzY3JpYmVcIiwgXCJwc3Vic2NyaWJlXCIsIFwic3N1YnNjcmliZVwiXSxcbiAgICBFWElUX1NVQlNDUklCRVJfTU9ERTogW1widW5zdWJzY3JpYmVcIiwgXCJwdW5zdWJzY3JpYmVcIiwgXCJzdW5zdWJzY3JpYmVcIl0sXG4gICAgV0lMTF9ESVNDT05ORUNUOiBbXCJxdWl0XCJdLFxufTtcbkNvbW1hbmQuX3RyYW5zZm9ybWVyID0ge1xuICAgIGFyZ3VtZW50OiB7fSxcbiAgICByZXBseToge30sXG59O1xuY29uc3QgbXNldEFyZ3VtZW50VHJhbnNmb3JtZXIgPSBmdW5jdGlvbiAoYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBpZiAoYXJnc1swXSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCB1dGlsc18xLmNvbnZlcnRNYXBUb0FycmF5KShhcmdzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09IFwib2JqZWN0XCIgJiYgYXJnc1swXSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCB1dGlsc18xLmNvbnZlcnRPYmplY3RUb0FycmF5KShhcmdzWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn07XG5jb25zdCBoc2V0QXJndW1lbnRUcmFuc2Zvcm1lciA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChhcmdzWzFdIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICByZXR1cm4gW2FyZ3NbMF1dLmNvbmNhdCgoMCwgdXRpbHNfMS5jb252ZXJ0TWFwVG9BcnJheSkoYXJnc1sxXSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnc1sxXSA9PT0gXCJvYmplY3RcIiAmJiBhcmdzWzFdICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gW2FyZ3NbMF1dLmNvbmNhdCgoMCwgdXRpbHNfMS5jb252ZXJ0T2JqZWN0VG9BcnJheSkoYXJnc1sxXSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufTtcbkNvbW1hbmQuc2V0QXJndW1lbnRUcmFuc2Zvcm1lcihcIm1zZXRcIiwgbXNldEFyZ3VtZW50VHJhbnNmb3JtZXIpO1xuQ29tbWFuZC5zZXRBcmd1bWVudFRyYW5zZm9ybWVyKFwibXNldG54XCIsIG1zZXRBcmd1bWVudFRyYW5zZm9ybWVyKTtcbkNvbW1hbmQuc2V0QXJndW1lbnRUcmFuc2Zvcm1lcihcImhzZXRcIiwgaHNldEFyZ3VtZW50VHJhbnNmb3JtZXIpO1xuQ29tbWFuZC5zZXRBcmd1bWVudFRyYW5zZm9ybWVyKFwiaG1zZXRcIiwgaHNldEFyZ3VtZW50VHJhbnNmb3JtZXIpO1xuQ29tbWFuZC5zZXRSZXBseVRyYW5zZm9ybWVyKFwiaGdldGFsbFwiLCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHJlc3VsdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVzdWx0W2kgKyAxXTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FuIG9ubHkgYmUgdHJ1dGh5IGlmIHRoZSBwcm9wZXJ0eSBpcyBzcGVjaWFsIHNvbWVob3csIGxpa2UgJ19fcHJvdG9fXycgb3IgJ2NvbnN0cnVjdG9yJ1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sdWluL2lvcmVkaXMvaXNzdWVzLzEyNjdcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59KTtcbmNsYXNzIE1peGVkQnVmZmVycyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xuICAgIH1cbiAgICBwdXNoKHgpIHtcbiAgICAgICAgdGhpcy5sZW5ndGggKz0gQnVmZmVyLmJ5dGVMZW5ndGgoeCk7XG4gICAgICAgIHRoaXMuaXRlbXMucHVzaCh4KTtcbiAgICB9XG4gICAgdG9CdWZmZXIoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSh0aGlzLmxlbmd0aCk7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtcykge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgoaXRlbSk7XG4gICAgICAgICAgICBCdWZmZXIuaXNCdWZmZXIoaXRlbSlcbiAgICAgICAgICAgICAgICA/IGl0ZW0uY29weShyZXN1bHQsIG9mZnNldClcbiAgICAgICAgICAgICAgICA6IHJlc3VsdC53cml0ZShpdGVtLCBvZmZzZXQsIGxlbmd0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gbGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/Command.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/DataHandler.js":
/*!***************************************************!*\
!*** ./node_modules/ioredis/built/DataHandler.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst Command_1 = __webpack_require__(/*! ./Command */ \"(rsc)/./node_modules/ioredis/built/Command.js\");\nconst utils_1 = __webpack_require__(/*! ./utils */ \"(rsc)/./node_modules/ioredis/built/utils/index.js\");\nconst RedisParser = __webpack_require__(/*! redis-parser */ \"(rsc)/./node_modules/redis-parser/index.js\");\nconst SubscriptionSet_1 = __webpack_require__(/*! ./SubscriptionSet */ \"(rsc)/./node_modules/ioredis/built/SubscriptionSet.js\");\nconst debug = (0, utils_1.Debug)(\"dataHandler\");\nclass DataHandler {\n constructor(redis, parserOptions) {\n this.redis = redis;\n const parser = new RedisParser({\n stringNumbers: parserOptions.stringNumbers,\n returnBuffers: true,\n returnError: (err) => {\n this.returnError(err);\n },\n returnFatalError: (err) => {\n this.returnFatalError(err);\n },\n returnReply: (reply) => {\n this.returnReply(reply);\n },\n });\n // prependListener ensures the parser receives and processes data before socket timeout checks are performed\n redis.stream.prependListener(\"data\", (data) => {\n parser.execute(data);\n });\n // prependListener() doesn't enable flowing mode automatically - we need to resume the stream manually\n redis.stream.resume();\n }\n returnFatalError(err) {\n err.message += \". Please report this.\";\n this.redis.recoverFromFatalError(err, err, { offlineQueue: false });\n }\n returnError(err) {\n const item = this.shiftCommand(err);\n if (!item) {\n return;\n }\n err.command = {\n name: item.command.name,\n args: item.command.args,\n };\n this.redis.handleReconnection(err, item);\n }\n returnReply(reply) {\n if (this.handleMonitorReply(reply)) {\n return;\n }\n if (this.handleSubscriberReply(reply)) {\n return;\n }\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n if (Command_1.default.checkFlag(\"ENTER_SUBSCRIBER_MODE\", item.command.name)) {\n this.redis.condition.subscriber = new SubscriptionSet_1.default();\n this.redis.condition.subscriber.add(item.command.name, reply[1].toString());\n if (!fillSubCommand(item.command, reply[2])) {\n this.redis.commandQueue.unshift(item);\n }\n }\n else if (Command_1.default.checkFlag(\"EXIT_SUBSCRIBER_MODE\", item.command.name)) {\n if (!fillUnsubCommand(item.command, reply[2])) {\n this.redis.commandQueue.unshift(item);\n }\n }\n else {\n item.command.resolve(reply);\n }\n }\n handleSubscriberReply(reply) {\n if (!this.redis.condition.subscriber) {\n return false;\n }\n const replyType = Array.isArray(reply) ? reply[0].toString() : null;\n debug('receive reply \"%s\" in subscriber mode', replyType);\n switch (replyType) {\n case \"message\":\n if (this.redis.listeners(\"message\").length > 0) {\n // Check if there're listeners to avoid unnecessary `toString()`.\n this.redis.emit(\"message\", reply[1].toString(), reply[2] ? reply[2].toString() : \"\");\n }\n this.redis.emit(\"messageBuffer\", reply[1], reply[2]);\n break;\n case \"pmessage\": {\n const pattern = reply[1].toString();\n if (this.redis.listeners(\"pmessage\").length > 0) {\n this.redis.emit(\"pmessage\", pattern, reply[2].toString(), reply[3].toString());\n }\n this.redis.emit(\"pmessageBuffer\", pattern, reply[2], reply[3]);\n break;\n }\n case \"smessage\": {\n if (this.redis.listeners(\"smessage\").length > 0) {\n this.redis.emit(\"smessage\", reply[1].toString(), reply[2] ? reply[2].toString() : \"\");\n }\n this.redis.emit(\"smessageBuffer\", reply[1], reply[2]);\n break;\n }\n case \"ssubscribe\":\n case \"subscribe\":\n case \"psubscribe\": {\n const channel = reply[1].toString();\n this.redis.condition.subscriber.add(replyType, channel);\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n if (!fillSubCommand(item.command, reply[2])) {\n this.redis.commandQueue.unshift(item);\n }\n break;\n }\n case \"sunsubscribe\":\n case \"unsubscribe\":\n case \"punsubscribe\": {\n const channel = reply[1] ? reply[1].toString() : null;\n if (channel) {\n this.redis.condition.subscriber.del(replyType, channel);\n }\n const count = reply[2];\n if (Number(count) === 0) {\n this.redis.condition.subscriber = false;\n }\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n if (!fillUnsubCommand(item.command, count)) {\n this.redis.commandQueue.unshift(item);\n }\n break;\n }\n default: {\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n item.command.resolve(reply);\n }\n }\n return true;\n }\n handleMonitorReply(reply) {\n if (this.redis.status !== \"monitoring\") {\n return false;\n }\n const replyStr = reply.toString();\n if (replyStr === \"OK\") {\n // Valid commands in the monitoring mode are AUTH and MONITOR,\n // both of which always reply with 'OK'.\n // So if we got an 'OK', we can make certain that\n // the reply is made to AUTH & MONITOR.\n return false;\n }\n // Since commands sent in the monitoring mode will trigger an exception,\n // any replies we received in the monitoring mode should consider to be\n // realtime monitor data instead of result of commands.\n const len = replyStr.indexOf(\" \");\n const timestamp = replyStr.slice(0, len);\n const argIndex = replyStr.indexOf('\"');\n const args = replyStr\n .slice(argIndex + 1, -1)\n .split('\" \"')\n .map((elem) => elem.replace(/\\\\\"/g, '\"'));\n const dbAndSource = replyStr.slice(len + 2, argIndex - 2).split(\" \");\n this.redis.emit(\"monitor\", timestamp, args, dbAndSource[1], dbAndSource[0]);\n return true;\n }\n shiftCommand(reply) {\n const item = this.redis.commandQueue.shift();\n if (!item) {\n const message = \"Command queue state error. If you can reproduce this, please report it.\";\n const error = new Error(message +\n (reply instanceof Error\n ? ` Last error: ${reply.message}`\n : ` Last reply: ${reply.toString()}`));\n this.redis.emit(\"error\", error);\n return null;\n }\n return item;\n }\n}\nexports[\"default\"] = DataHandler;\nconst remainingRepliesMap = new WeakMap();\nfunction fillSubCommand(command, count) {\n let remainingReplies = remainingRepliesMap.has(command)\n ? remainingRepliesMap.get(command)\n : command.args.length;\n remainingReplies -= 1;\n if (remainingReplies <= 0) {\n command.resolve(count);\n remainingRepliesMap.delete(command);\n return true;\n }\n remainingRepliesMap.set(command, remainingReplies);\n return false;\n}\nfunction fillUnsubCommand(command, count) {\n let remainingReplies = remainingRepliesMap.has(command)\n ? remainingRepliesMap.get(command)\n : command.args.length;\n if (remainingReplies === 0) {\n if (Number(count) === 0) {\n remainingRepliesMap.delete(command);\n command.resolve(count);\n return true;\n }\n return false;\n }\n remainingReplies -= 1;\n if (remainingReplies <= 0) {\n command.resolve(count);\n return true;\n }\n remainingRepliesMap.set(command, remainingReplies);\n return false;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9EYXRhSGFuZGxlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxrQkFBa0IsbUJBQU8sQ0FBQyxnRUFBVztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxrRUFBUztBQUNqQyxvQkFBb0IsbUJBQU8sQ0FBQyxnRUFBYztBQUMxQywwQkFBMEIsbUJBQU8sQ0FBQyxnRkFBbUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQscUJBQXFCO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxjQUFjO0FBQ3BELHNDQUFzQyxpQkFBaUI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9EYXRhSGFuZGxlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IENvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL0NvbW1hbmRcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5jb25zdCBSZWRpc1BhcnNlciA9IHJlcXVpcmUoXCJyZWRpcy1wYXJzZXJcIik7XG5jb25zdCBTdWJzY3JpcHRpb25TZXRfMSA9IHJlcXVpcmUoXCIuL1N1YnNjcmlwdGlvblNldFwiKTtcbmNvbnN0IGRlYnVnID0gKDAsIHV0aWxzXzEuRGVidWcpKFwiZGF0YUhhbmRsZXJcIik7XG5jbGFzcyBEYXRhSGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IocmVkaXMsIHBhcnNlck9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5yZWRpcyA9IHJlZGlzO1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgUmVkaXNQYXJzZXIoe1xuICAgICAgICAgICAgc3RyaW5nTnVtYmVyczogcGFyc2VyT3B0aW9ucy5zdHJpbmdOdW1iZXJzLFxuICAgICAgICAgICAgcmV0dXJuQnVmZmVyczogdHJ1ZSxcbiAgICAgICAgICAgIHJldHVybkVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXR1cm5FcnJvcihlcnIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJldHVybkZhdGFsRXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJldHVybkZhdGFsRXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXR1cm5SZXBseTogKHJlcGx5KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXR1cm5SZXBseShyZXBseSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gcHJlcGVuZExpc3RlbmVyIGVuc3VyZXMgdGhlIHBhcnNlciByZWNlaXZlcyBhbmQgcHJvY2Vzc2VzIGRhdGEgYmVmb3JlIHNvY2tldCB0aW1lb3V0IGNoZWNrcyBhcmUgcGVyZm9ybWVkXG4gICAgICAgIHJlZGlzLnN0cmVhbS5wcmVwZW5kTGlzdGVuZXIoXCJkYXRhXCIsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICBwYXJzZXIuZXhlY3V0ZShkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHByZXBlbmRMaXN0ZW5lcigpIGRvZXNuJ3QgZW5hYmxlIGZsb3dpbmcgbW9kZSBhdXRvbWF0aWNhbGx5IC0gd2UgbmVlZCB0byByZXN1bWUgdGhlIHN0cmVhbSBtYW51YWxseVxuICAgICAgICByZWRpcy5zdHJlYW0ucmVzdW1lKCk7XG4gICAgfVxuICAgIHJldHVybkZhdGFsRXJyb3IoZXJyKSB7XG4gICAgICAgIGVyci5tZXNzYWdlICs9IFwiLiBQbGVhc2UgcmVwb3J0IHRoaXMuXCI7XG4gICAgICAgIHRoaXMucmVkaXMucmVjb3ZlckZyb21GYXRhbEVycm9yKGVyciwgZXJyLCB7IG9mZmxpbmVRdWV1ZTogZmFsc2UgfSk7XG4gICAgfVxuICAgIHJldHVybkVycm9yKGVycikge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zaGlmdENvbW1hbmQoZXJyKTtcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXJyLmNvbW1hbmQgPSB7XG4gICAgICAgICAgICBuYW1lOiBpdGVtLmNvbW1hbmQubmFtZSxcbiAgICAgICAgICAgIGFyZ3M6IGl0ZW0uY29tbWFuZC5hcmdzLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJlZGlzLmhhbmRsZVJlY29ubmVjdGlvbihlcnIsIGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm5SZXBseShyZXBseSkge1xuICAgICAgICBpZiAodGhpcy5oYW5kbGVNb25pdG9yUmVwbHkocmVwbHkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGFuZGxlU3Vic2NyaWJlclJlcGx5KHJlcGx5KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnNoaWZ0Q29tbWFuZChyZXBseSk7XG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChDb21tYW5kXzEuZGVmYXVsdC5jaGVja0ZsYWcoXCJFTlRFUl9TVUJTQ1JJQkVSX01PREVcIiwgaXRlbS5jb21tYW5kLm5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLnJlZGlzLmNvbmRpdGlvbi5zdWJzY3JpYmVyID0gbmV3IFN1YnNjcmlwdGlvblNldF8xLmRlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMucmVkaXMuY29uZGl0aW9uLnN1YnNjcmliZXIuYWRkKGl0ZW0uY29tbWFuZC5uYW1lLCByZXBseVsxXS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGlmICghZmlsbFN1YkNvbW1hbmQoaXRlbS5jb21tYW5kLCByZXBseVsyXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZGlzLmNvbW1hbmRRdWV1ZS51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKENvbW1hbmRfMS5kZWZhdWx0LmNoZWNrRmxhZyhcIkVYSVRfU1VCU0NSSUJFUl9NT0RFXCIsIGl0ZW0uY29tbWFuZC5uYW1lKSkge1xuICAgICAgICAgICAgaWYgKCFmaWxsVW5zdWJDb21tYW5kKGl0ZW0uY29tbWFuZCwgcmVwbHlbMl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWRpcy5jb21tYW5kUXVldWUudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0uY29tbWFuZC5yZXNvbHZlKHJlcGx5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVTdWJzY3JpYmVyUmVwbHkocmVwbHkpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlZGlzLmNvbmRpdGlvbi5zdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVwbHlUeXBlID0gQXJyYXkuaXNBcnJheShyZXBseSkgPyByZXBseVswXS50b1N0cmluZygpIDogbnVsbDtcbiAgICAgICAgZGVidWcoJ3JlY2VpdmUgcmVwbHkgXCIlc1wiIGluIHN1YnNjcmliZXIgbW9kZScsIHJlcGx5VHlwZSk7XG4gICAgICAgIHN3aXRjaCAocmVwbHlUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlZGlzLmxpc3RlbmVycyhcIm1lc3NhZ2VcIikubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSdyZSBsaXN0ZW5lcnMgdG8gYXZvaWQgdW5uZWNlc3NhcnkgYHRvU3RyaW5nKClgLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZGlzLmVtaXQoXCJtZXNzYWdlXCIsIHJlcGx5WzFdLnRvU3RyaW5nKCksIHJlcGx5WzJdID8gcmVwbHlbMl0udG9TdHJpbmcoKSA6IFwiXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlZGlzLmVtaXQoXCJtZXNzYWdlQnVmZmVyXCIsIHJlcGx5WzFdLCByZXBseVsyXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicG1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSByZXBseVsxXS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlZGlzLmxpc3RlbmVycyhcInBtZXNzYWdlXCIpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcy5lbWl0KFwicG1lc3NhZ2VcIiwgcGF0dGVybiwgcmVwbHlbMl0udG9TdHJpbmcoKSwgcmVwbHlbM10udG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVkaXMuZW1pdChcInBtZXNzYWdlQnVmZmVyXCIsIHBhdHRlcm4sIHJlcGx5WzJdLCByZXBseVszXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic21lc3NhZ2VcIjoge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlZGlzLmxpc3RlbmVycyhcInNtZXNzYWdlXCIpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcy5lbWl0KFwic21lc3NhZ2VcIiwgcmVwbHlbMV0udG9TdHJpbmcoKSwgcmVwbHlbMl0gPyByZXBseVsyXS50b1N0cmluZygpIDogXCJcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVkaXMuZW1pdChcInNtZXNzYWdlQnVmZmVyXCIsIHJlcGx5WzFdLCByZXBseVsyXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3N1YnNjcmliZVwiOlxuICAgICAgICAgICAgY2FzZSBcInN1YnNjcmliZVwiOlxuICAgICAgICAgICAgY2FzZSBcInBzdWJzY3JpYmVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5uZWwgPSByZXBseVsxXS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVkaXMuY29uZGl0aW9uLnN1YnNjcmliZXIuYWRkKHJlcGx5VHlwZSwgY2hhbm5lbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuc2hpZnRDb21tYW5kKHJlcGx5KTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWZpbGxTdWJDb21tYW5kKGl0ZW0uY29tbWFuZCwgcmVwbHlbMl0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVkaXMuY29tbWFuZFF1ZXVlLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInN1bnN1YnNjcmliZVwiOlxuICAgICAgICAgICAgY2FzZSBcInVuc3Vic2NyaWJlXCI6XG4gICAgICAgICAgICBjYXNlIFwicHVuc3Vic2NyaWJlXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFubmVsID0gcmVwbHlbMV0gPyByZXBseVsxXS50b1N0cmluZygpIDogbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZGlzLmNvbmRpdGlvbi5zdWJzY3JpYmVyLmRlbChyZXBseVR5cGUsIGNoYW5uZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IHJlcGx5WzJdO1xuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIoY291bnQpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVkaXMuY29uZGl0aW9uLnN1YnNjcmliZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuc2hpZnRDb21tYW5kKHJlcGx5KTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWZpbGxVbnN1YkNvbW1hbmQoaXRlbS5jb21tYW5kLCBjb3VudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcy5jb21tYW5kUXVldWUudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuc2hpZnRDb21tYW5kKHJlcGx5KTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtLmNvbW1hbmQucmVzb2x2ZShyZXBseSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGhhbmRsZU1vbml0b3JSZXBseShyZXBseSkge1xuICAgICAgICBpZiAodGhpcy5yZWRpcy5zdGF0dXMgIT09IFwibW9uaXRvcmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVwbHlTdHIgPSByZXBseS50b1N0cmluZygpO1xuICAgICAgICBpZiAocmVwbHlTdHIgPT09IFwiT0tcIikge1xuICAgICAgICAgICAgLy8gVmFsaWQgY29tbWFuZHMgaW4gdGhlIG1vbml0b3JpbmcgbW9kZSBhcmUgQVVUSCBhbmQgTU9OSVRPUixcbiAgICAgICAgICAgIC8vIGJvdGggb2Ygd2hpY2ggYWx3YXlzIHJlcGx5IHdpdGggJ09LJy5cbiAgICAgICAgICAgIC8vIFNvIGlmIHdlIGdvdCBhbiAnT0snLCB3ZSBjYW4gbWFrZSBjZXJ0YWluIHRoYXRcbiAgICAgICAgICAgIC8vIHRoZSByZXBseSBpcyBtYWRlIHRvIEFVVEggJiBNT05JVE9SLlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNpbmNlIGNvbW1hbmRzIHNlbnQgaW4gdGhlIG1vbml0b3JpbmcgbW9kZSB3aWxsIHRyaWdnZXIgYW4gZXhjZXB0aW9uLFxuICAgICAgICAvLyBhbnkgcmVwbGllcyB3ZSByZWNlaXZlZCBpbiB0aGUgbW9uaXRvcmluZyBtb2RlIHNob3VsZCBjb25zaWRlciB0byBiZVxuICAgICAgICAvLyByZWFsdGltZSBtb25pdG9yIGRhdGEgaW5zdGVhZCBvZiByZXN1bHQgb2YgY29tbWFuZHMuXG4gICAgICAgIGNvbnN0IGxlbiA9IHJlcGx5U3RyLmluZGV4T2YoXCIgXCIpO1xuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSByZXBseVN0ci5zbGljZSgwLCBsZW4pO1xuICAgICAgICBjb25zdCBhcmdJbmRleCA9IHJlcGx5U3RyLmluZGV4T2YoJ1wiJyk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSByZXBseVN0clxuICAgICAgICAgICAgLnNsaWNlKGFyZ0luZGV4ICsgMSwgLTEpXG4gICAgICAgICAgICAuc3BsaXQoJ1wiIFwiJylcbiAgICAgICAgICAgIC5tYXAoKGVsZW0pID0+IGVsZW0ucmVwbGFjZSgvXFxcXFwiL2csICdcIicpKTtcbiAgICAgICAgY29uc3QgZGJBbmRTb3VyY2UgPSByZXBseVN0ci5zbGljZShsZW4gKyAyLCBhcmdJbmRleCAtIDIpLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgdGhpcy5yZWRpcy5lbWl0KFwibW9uaXRvclwiLCB0aW1lc3RhbXAsIGFyZ3MsIGRiQW5kU291cmNlWzFdLCBkYkFuZFNvdXJjZVswXSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzaGlmdENvbW1hbmQocmVwbHkpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMucmVkaXMuY29tbWFuZFF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IFwiQ29tbWFuZCBxdWV1ZSBzdGF0ZSBlcnJvci4gSWYgeW91IGNhbiByZXByb2R1Y2UgdGhpcywgcGxlYXNlIHJlcG9ydCBpdC5cIjtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UgK1xuICAgICAgICAgICAgICAgIChyZXBseSBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICAgICAgICAgID8gYCBMYXN0IGVycm9yOiAke3JlcGx5Lm1lc3NhZ2V9YFxuICAgICAgICAgICAgICAgICAgICA6IGAgTGFzdCByZXBseTogJHtyZXBseS50b1N0cmluZygpfWApKTtcbiAgICAgICAgICAgIHRoaXMucmVkaXMuZW1pdChcImVycm9yXCIsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IERhdGFIYW5kbGVyO1xuY29uc3QgcmVtYWluaW5nUmVwbGllc01hcCA9IG5ldyBXZWFrTWFwKCk7XG5mdW5jdGlvbiBmaWxsU3ViQ29tbWFuZChjb21tYW5kLCBjb3VudCkge1xuICAgIGxldCByZW1haW5pbmdSZXBsaWVzID0gcmVtYWluaW5nUmVwbGllc01hcC5oYXMoY29tbWFuZClcbiAgICAgICAgPyByZW1haW5pbmdSZXBsaWVzTWFwLmdldChjb21tYW5kKVxuICAgICAgICA6IGNvbW1hbmQuYXJncy5sZW5ndGg7XG4gICAgcmVtYWluaW5nUmVwbGllcyAtPSAxO1xuICAgIGlmIChyZW1haW5pbmdSZXBsaWVzIDw9IDApIHtcbiAgICAgICAgY29tbWFuZC5yZXNvbHZlKGNvdW50KTtcbiAgICAgICAgcmVtYWluaW5nUmVwbGllc01hcC5kZWxldGUoY29tbWFuZCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZW1haW5pbmdSZXBsaWVzTWFwLnNldChjb21tYW5kLCByZW1haW5pbmdSZXBsaWVzKTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBmaWxsVW5zdWJDb21tYW5kKGNvbW1hbmQsIGNvdW50KSB7XG4gICAgbGV0IHJlbWFpbmluZ1JlcGxpZXMgPSByZW1haW5pbmdSZXBsaWVzTWFwLmhhcyhjb21tYW5kKVxuICAgICAgICA/IHJlbWFpbmluZ1JlcGxpZXNNYXAuZ2V0KGNvbW1hbmQpXG4gICAgICAgIDogY29tbWFuZC5hcmdzLmxlbmd0aDtcbiAgICBpZiAocmVtYWluaW5nUmVwbGllcyA9PT0gMCkge1xuICAgICAgICBpZiAoTnVtYmVyKGNvdW50KSA9PT0gMCkge1xuICAgICAgICAgICAgcmVtYWluaW5nUmVwbGllc01hcC5kZWxldGUoY29tbWFuZCk7XG4gICAgICAgICAgICBjb21tYW5kLnJlc29sdmUoY291bnQpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZW1haW5pbmdSZXBsaWVzIC09IDE7XG4gICAgaWYgKHJlbWFpbmluZ1JlcGxpZXMgPD0gMCkge1xuICAgICAgICBjb21tYW5kLnJlc29sdmUoY291bnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmVtYWluaW5nUmVwbGllc01hcC5zZXQoY29tbWFuZCwgcmVtYWluaW5nUmVwbGllcyk7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/DataHandler.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/Pipeline.js":
/*!************************************************!*\
!*** ./node_modules/ioredis/built/Pipeline.js ***!
\************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst calculateSlot = __webpack_require__(/*! cluster-key-slot */ \"(rsc)/./node_modules/cluster-key-slot/lib/index.js\");\nconst commands_1 = __webpack_require__(/*! @ioredis/commands */ \"(rsc)/./node_modules/@ioredis/commands/built/index.js\");\nconst standard_as_callback_1 = __webpack_require__(/*! standard-as-callback */ \"(rsc)/./node_modules/standard-as-callback/built/index.js\");\nconst util_1 = __webpack_require__(/*! util */ \"util\");\nconst Command_1 = __webpack_require__(/*! ./Command */ \"(rsc)/./node_modules/ioredis/built/Command.js\");\nconst utils_1 = __webpack_require__(/*! ./utils */ \"(rsc)/./node_modules/ioredis/built/utils/index.js\");\nconst Commander_1 = __webpack_require__(/*! ./utils/Commander */ \"(rsc)/./node_modules/ioredis/built/utils/Commander.js\");\n/*\n This function derives from the cluster-key-slot implementation.\n Instead of checking that all keys have the same slot, it checks that all slots are served by the same set of nodes.\n If this is satisfied, it returns the first key's slot.\n*/\nfunction generateMultiWithNodes(redis, keys) {\n const slot = calculateSlot(keys[0]);\n const target = redis._groupsBySlot[slot];\n for (let i = 1; i < keys.length; i++) {\n if (redis._groupsBySlot[calculateSlot(keys[i])] !== target) {\n return -1;\n }\n }\n return slot;\n}\nclass Pipeline extends Commander_1.default {\n constructor(redis) {\n super();\n this.redis = redis;\n this.isPipeline = true;\n this.replyPending = 0;\n this._queue = [];\n this._result = [];\n this._transactions = 0;\n this._shaToScript = {};\n this.isCluster =\n this.redis.constructor.name === \"Cluster\" || this.redis.isCluster;\n this.options = redis.options;\n Object.keys(redis.scriptsSet).forEach((name) => {\n const script = redis.scriptsSet[name];\n this._shaToScript[script.sha] = script;\n this[name] = redis[name];\n this[name + \"Buffer\"] = redis[name + \"Buffer\"];\n });\n redis.addedBuiltinSet.forEach((name) => {\n this[name] = redis[name];\n this[name + \"Buffer\"] = redis[name + \"Buffer\"];\n });\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n const _this = this;\n Object.defineProperty(this, \"length\", {\n get: function () {\n return _this._queue.length;\n },\n });\n }\n fillResult(value, position) {\n if (this._queue[position].name === \"exec\" && Array.isArray(value[1])) {\n const execLength = value[1].length;\n for (let i = 0; i < execLength; i++) {\n if (value[1][i] instanceof Error) {\n continue;\n }\n const cmd = this._queue[position - (execLength - i)];\n try {\n value[1][i] = cmd.transformReply(value[1][i]);\n }\n catch (err) {\n value[1][i] = err;\n }\n }\n }\n this._result[position] = value;\n if (--this.replyPending) {\n return;\n }\n if (this.isCluster) {\n let retriable = true;\n let commonError;\n for (let i = 0; i < this._result.length; ++i) {\n const error = this._result[i][0];\n const command = this._queue[i];\n if (error) {\n if (command.name === \"exec\" &&\n error.message ===\n \"EXECABORT Transaction discarded because of previous errors.\") {\n continue;\n }\n if (!commonError) {\n commonError = {\n name: error.name,\n message: error.message,\n };\n }\n else if (commonError.name !== error.name ||\n commonError.message !== error.message) {\n retriable = false;\n break;\n }\n }\n else if (!command.inTransaction) {\n const isReadOnly = (0, commands_1.exists)(command.name) && (0, commands_1.hasFlag)(command.name, \"readonly\");\n if (!isReadOnly) {\n retriable = false;\n break;\n }\n }\n }\n if (commonError && retriable) {\n const _this = this;\n const errv = commonError.message.split(\" \");\n const queue = this._queue;\n let inTransaction = false;\n this._queue = [];\n for (let i = 0; i < queue.length; ++i) {\n if (errv[0] === \"ASK\" &&\n !inTransaction &&\n queue[i].name !== \"asking\" &&\n (!queue[i - 1] || queue[i - 1].name !== \"asking\")) {\n const asking = new Command_1.default(\"asking\");\n asking.ignore = true;\n this.sendCommand(asking);\n }\n queue[i].initPromise();\n this.sendCommand(queue[i]);\n inTransaction = queue[i].inTransaction;\n }\n let matched = true;\n if (typeof this.leftRedirections === \"undefined\") {\n this.leftRedirections = {};\n }\n const exec = function () {\n _this.exec();\n };\n const cluster = this.redis;\n cluster.handleError(commonError, this.leftRedirections, {\n moved: function (_slot, key) {\n _this.preferKey = key;\n cluster.slots[errv[1]] = [key];\n cluster._groupsBySlot[errv[1]] =\n cluster._groupsIds[cluster.slots[errv[1]].join(\";\")];\n cluster.refreshSlotsCache();\n _this.exec();\n },\n ask: function (_slot, key) {\n _this.preferKey = key;\n _this.exec();\n },\n tryagain: exec,\n clusterDown: exec,\n connectionClosed: exec,\n maxRedirections: () => {\n matched = false;\n },\n defaults: () => {\n matched = false;\n },\n });\n if (matched) {\n return;\n }\n }\n }\n let ignoredCount = 0;\n for (let i = 0; i < this._queue.length - ignoredCount; ++i) {\n if (this._queue[i + ignoredCount].ignore) {\n ignoredCount += 1;\n }\n this._result[i] = this._result[i + ignoredCount];\n }\n this.resolve(this._result.slice(0, this._result.length - ignoredCount));\n }\n sendCommand(command) {\n if (this._transactions > 0) {\n command.inTransaction = true;\n }\n const position = this._queue.length;\n command.pipelineIndex = position;\n command.promise\n .then((result) => {\n this.fillResult([null, result], position);\n })\n .catch((error) => {\n this.fillResult([error], position);\n });\n this._queue.push(command);\n return this;\n }\n addBatch(commands) {\n let command, commandName, args;\n for (let i = 0; i < commands.length; ++i) {\n command = commands[i];\n commandName = command[0];\n args = command.slice(1);\n this[commandName].apply(this, args);\n }\n return this;\n }\n}\nexports[\"default\"] = Pipeline;\n// @ts-expect-error\nconst multi = Pipeline.prototype.multi;\n// @ts-expect-error\nPipeline.prototype.multi = function () {\n this._transactions += 1;\n return multi.apply(this, arguments);\n};\n// @ts-expect-error\nconst execBuffer = Pipeline.prototype.execBuffer;\n// @ts-expect-error\nPipeline.prototype.execBuffer = (0, util_1.deprecate)(function () {\n if (this._transactions > 0) {\n this._transactions -= 1;\n }\n return execBuffer.apply(this, arguments);\n}, \"Pipeline#execBuffer: Use Pipeline#exec instead\");\n// NOTE: To avoid an unhandled promise rejection, this will unconditionally always return this.promise,\n// which always has the rejection handled by standard-as-callback\n// adding the provided rejection callback.\n//\n// If a different promise instance were returned, that promise would cause its own unhandled promise rejection\n// errors, even if that promise unconditionally resolved to **the resolved value of** this.promise.\nPipeline.prototype.exec = function (callback) {\n // Wait for the cluster to be connected, since we need nodes information before continuing\n if (this.isCluster && !this.redis.slots.length) {\n if (this.redis.status === \"wait\")\n this.redis.connect().catch(utils_1.noop);\n if (callback && !this.nodeifiedPromise) {\n this.nodeifiedPromise = true;\n (0, standard_as_callback_1.default)(this.promise, callback);\n }\n this.redis.delayUntilReady((err) => {\n if (err) {\n this.reject(err);\n return;\n }\n this.exec(callback);\n });\n return this.promise;\n }\n if (this._transactions > 0) {\n this._transactions -= 1;\n return execBuffer.apply(this, arguments);\n }\n if (!this.nodeifiedPromise) {\n this.nodeifiedPromise = true;\n (0, standard_as_callback_1.default)(this.promise, callback);\n }\n if (!this._queue.length) {\n this.resolve([]);\n }\n let pipelineSlot;\n if (this.isCluster) {\n // List of the first key for each command\n const sampleKeys = [];\n for (let i = 0; i < this._queue.length; i++) {\n const keys = this._queue[i].getKeys();\n if (keys.length) {\n sampleKeys.push(keys[0]);\n }\n // For each command, check that the keys belong to the same slot\n if (keys.length && calculateSlot.generateMulti(keys) < 0) {\n this.reject(new Error(\"All the keys in a pipeline command should belong to the same slot\"));\n return this.promise;\n }\n }\n if (sampleKeys.length) {\n pipelineSlot = generateMultiWithNodes(this.redis, sampleKeys);\n if (pipelineSlot < 0) {\n this.reject(new Error(\"All keys in the pipeline should belong to the same slots allocation group\"));\n return this.promise;\n }\n }\n else {\n // Send the pipeline to a random node\n pipelineSlot = (Math.random() * 16384) | 0;\n }\n }\n const _this = this;\n execPipeline();\n return this.promise;\n function execPipeline() {\n let writePending = (_this.replyPending = _this._queue.length);\n let node;\n if (_this.isCluster) {\n node = {\n slot: pipelineSlot,\n redis: _this.redis.connectionPool.nodes.all[_this.preferKey],\n };\n }\n let data = \"\";\n let buffers;\n const stream = {\n isPipeline: true,\n destination: _this.isCluster ? node : { redis: _this.redis },\n write(writable) {\n if (typeof writable !== \"string\") {\n if (!buffers) {\n buffers = [];\n }\n if (data) {\n buffers.push(Buffer.from(data, \"utf8\"));\n data = \"\";\n }\n buffers.push(writable);\n }\n else {\n data += writable;\n }\n if (!--writePending) {\n if (buffers) {\n if (data) {\n buffers.push(Buffer.from(data, \"utf8\"));\n }\n stream.destination.redis.stream.write(Buffer.concat(buffers));\n }\n else {\n stream.destination.redis.stream.write(data);\n }\n // Reset writePending for resending\n writePending = _this._queue.length;\n data = \"\";\n buffers = undefined;\n }\n },\n };\n for (let i = 0; i < _this._queue.length; ++i) {\n _this.redis.sendCommand(_this._queue[i], stream, node);\n }\n return _this.promise;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9QaXBlbGluZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxzQkFBc0IsbUJBQU8sQ0FBQyw0RUFBa0I7QUFDaEQsbUJBQW1CLG1CQUFPLENBQUMsZ0ZBQW1CO0FBQzlDLCtCQUErQixtQkFBTyxDQUFDLHNGQUFzQjtBQUM3RCxlQUFlLG1CQUFPLENBQUMsa0JBQU07QUFDN0Isa0JBQWtCLG1CQUFPLENBQUMsZ0VBQVc7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsa0VBQVM7QUFDakMsb0JBQW9CLG1CQUFPLENBQUMsZ0ZBQW1CO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixnQkFBZ0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIseUJBQXlCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGtCQUFrQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RTtBQUM3RTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix1Q0FBdUM7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHFCQUFxQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isd0JBQXdCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Qsb0JBQW9CO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSx3QkFBd0IseUJBQXlCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvUGlwZWxpbmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjYWxjdWxhdGVTbG90ID0gcmVxdWlyZShcImNsdXN0ZXIta2V5LXNsb3RcIik7XG5jb25zdCBjb21tYW5kc18xID0gcmVxdWlyZShcIkBpb3JlZGlzL2NvbW1hbmRzXCIpO1xuY29uc3Qgc3RhbmRhcmRfYXNfY2FsbGJhY2tfMSA9IHJlcXVpcmUoXCJzdGFuZGFyZC1hcy1jYWxsYmFja1wiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCJ1dGlsXCIpO1xuY29uc3QgQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vQ29tbWFuZFwiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IENvbW1hbmRlcl8xID0gcmVxdWlyZShcIi4vdXRpbHMvQ29tbWFuZGVyXCIpO1xuLypcbiAgVGhpcyBmdW5jdGlvbiBkZXJpdmVzIGZyb20gdGhlIGNsdXN0ZXIta2V5LXNsb3QgaW1wbGVtZW50YXRpb24uXG4gIEluc3RlYWQgb2YgY2hlY2tpbmcgdGhhdCBhbGwga2V5cyBoYXZlIHRoZSBzYW1lIHNsb3QsIGl0IGNoZWNrcyB0aGF0IGFsbCBzbG90cyBhcmUgc2VydmVkIGJ5IHRoZSBzYW1lIHNldCBvZiBub2Rlcy5cbiAgSWYgdGhpcyBpcyBzYXRpc2ZpZWQsIGl0IHJldHVybnMgdGhlIGZpcnN0IGtleSdzIHNsb3QuXG4qL1xuZnVuY3Rpb24gZ2VuZXJhdGVNdWx0aVdpdGhOb2RlcyhyZWRpcywga2V5cykge1xuICAgIGNvbnN0IHNsb3QgPSBjYWxjdWxhdGVTbG90KGtleXNbMF0pO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlZGlzLl9ncm91cHNCeVNsb3Rbc2xvdF07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChyZWRpcy5fZ3JvdXBzQnlTbG90W2NhbGN1bGF0ZVNsb3Qoa2V5c1tpXSldICE9PSB0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2xvdDtcbn1cbmNsYXNzIFBpcGVsaW5lIGV4dGVuZHMgQ29tbWFuZGVyXzEuZGVmYXVsdCB7XG4gICAgY29uc3RydWN0b3IocmVkaXMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5yZWRpcyA9IHJlZGlzO1xuICAgICAgICB0aGlzLmlzUGlwZWxpbmUgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlcGx5UGVuZGluZyA9IDA7XG4gICAgICAgIHRoaXMuX3F1ZXVlID0gW107XG4gICAgICAgIHRoaXMuX3Jlc3VsdCA9IFtdO1xuICAgICAgICB0aGlzLl90cmFuc2FjdGlvbnMgPSAwO1xuICAgICAgICB0aGlzLl9zaGFUb1NjcmlwdCA9IHt9O1xuICAgICAgICB0aGlzLmlzQ2x1c3RlciA9XG4gICAgICAgICAgICB0aGlzLnJlZGlzLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiQ2x1c3RlclwiIHx8IHRoaXMucmVkaXMuaXNDbHVzdGVyO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSByZWRpcy5vcHRpb25zO1xuICAgICAgICBPYmplY3Qua2V5cyhyZWRpcy5zY3JpcHRzU2V0KS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY3JpcHQgPSByZWRpcy5zY3JpcHRzU2V0W25hbWVdO1xuICAgICAgICAgICAgdGhpcy5fc2hhVG9TY3JpcHRbc2NyaXB0LnNoYV0gPSBzY3JpcHQ7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gcmVkaXNbbmFtZV07XG4gICAgICAgICAgICB0aGlzW25hbWUgKyBcIkJ1ZmZlclwiXSA9IHJlZGlzW25hbWUgKyBcIkJ1ZmZlclwiXTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlZGlzLmFkZGVkQnVpbHRpblNldC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gcmVkaXNbbmFtZV07XG4gICAgICAgICAgICB0aGlzW25hbWUgKyBcIkJ1ZmZlclwiXSA9IHJlZGlzW25hbWUgKyBcIkJ1ZmZlclwiXTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICB0aGlzLnJlamVjdCA9IHJlamVjdDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibGVuZ3RoXCIsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fcXVldWUubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZpbGxSZXN1bHQodmFsdWUsIHBvc2l0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLl9xdWV1ZVtwb3NpdGlvbl0ubmFtZSA9PT0gXCJleGVjXCIgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZVsxXSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4ZWNMZW5ndGggPSB2YWx1ZVsxXS5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4ZWNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZVsxXVtpXSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjbWQgPSB0aGlzLl9xdWV1ZVtwb3NpdGlvbiAtIChleGVjTGVuZ3RoIC0gaSldO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlWzFdW2ldID0gY21kLnRyYW5zZm9ybVJlcGx5KHZhbHVlWzFdW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVsxXVtpXSA9IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVzdWx0W3Bvc2l0aW9uXSA9IHZhbHVlO1xuICAgICAgICBpZiAoLS10aGlzLnJlcGx5UGVuZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQ2x1c3Rlcikge1xuICAgICAgICAgICAgbGV0IHJldHJpYWJsZSA9IHRydWU7XG4gICAgICAgICAgICBsZXQgY29tbW9uRXJyb3I7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3Jlc3VsdC5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5fcmVzdWx0W2ldWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSB0aGlzLl9xdWV1ZVtpXTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmQubmFtZSA9PT0gXCJleGVjXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFWEVDQUJPUlQgVHJhbnNhY3Rpb24gZGlzY2FyZGVkIGJlY2F1c2Ugb2YgcHJldmlvdXMgZXJyb3JzLlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbW1vbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tb25FcnJvciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlcnJvci5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbW1vbkVycm9yLm5hbWUgIT09IGVycm9yLm5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbkVycm9yLm1lc3NhZ2UgIT09IGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHJpYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWNvbW1hbmQuaW5UcmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1JlYWRPbmx5ID0gKDAsIGNvbW1hbmRzXzEuZXhpc3RzKShjb21tYW5kLm5hbWUpICYmICgwLCBjb21tYW5kc18xLmhhc0ZsYWcpKGNvbW1hbmQubmFtZSwgXCJyZWFkb25seVwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXRyaWFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbW1vbkVycm9yICYmIHJldHJpYWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJ2ID0gY29tbW9uRXJyb3IubWVzc2FnZS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgcXVldWUgPSB0aGlzLl9xdWV1ZTtcbiAgICAgICAgICAgICAgICBsZXQgaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJydlswXSA9PT0gXCJBU0tcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWluVHJhbnNhY3Rpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlW2ldLm5hbWUgIT09IFwiYXNraW5nXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcXVldWVbaSAtIDFdIHx8IHF1ZXVlW2kgLSAxXS5uYW1lICE9PSBcImFza2luZ1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNraW5nID0gbmV3IENvbW1hbmRfMS5kZWZhdWx0KFwiYXNraW5nXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNraW5nLmlnbm9yZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmRDb21tYW5kKGFza2luZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcXVldWVbaV0uaW5pdFByb21pc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kQ29tbWFuZChxdWV1ZVtpXSk7XG4gICAgICAgICAgICAgICAgICAgIGluVHJhbnNhY3Rpb24gPSBxdWV1ZVtpXS5pblRyYW5zYWN0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxlZnRSZWRpcmVjdGlvbnMgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWZ0UmVkaXJlY3Rpb25zID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmV4ZWMoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsdXN0ZXIgPSB0aGlzLnJlZGlzO1xuICAgICAgICAgICAgICAgIGNsdXN0ZXIuaGFuZGxlRXJyb3IoY29tbW9uRXJyb3IsIHRoaXMubGVmdFJlZGlyZWN0aW9ucywge1xuICAgICAgICAgICAgICAgICAgICBtb3ZlZDogZnVuY3Rpb24gKF9zbG90LCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnByZWZlcktleSA9IGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXIuc2xvdHNbZXJydlsxXV0gPSBba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXIuX2dyb3Vwc0J5U2xvdFtlcnJ2WzFdXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlci5fZ3JvdXBzSWRzW2NsdXN0ZXIuc2xvdHNbZXJydlsxXV0uam9pbihcIjtcIildO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlci5yZWZyZXNoU2xvdHNDYWNoZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuZXhlYygpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhc2s6IGZ1bmN0aW9uIChfc2xvdCwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcmVmZXJLZXkgPSBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5leGVjKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRyeWFnYWluOiBleGVjLFxuICAgICAgICAgICAgICAgICAgICBjbHVzdGVyRG93bjogZXhlYyxcbiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbkNsb3NlZDogZXhlYyxcbiAgICAgICAgICAgICAgICAgICAgbWF4UmVkaXJlY3Rpb25zOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgaWdub3JlZENvdW50ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9xdWV1ZS5sZW5ndGggLSBpZ25vcmVkQ291bnQ7ICsraSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3F1ZXVlW2kgKyBpZ25vcmVkQ291bnRdLmlnbm9yZSkge1xuICAgICAgICAgICAgICAgIGlnbm9yZWRDb3VudCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVzdWx0W2ldID0gdGhpcy5fcmVzdWx0W2kgKyBpZ25vcmVkQ291bnRdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzb2x2ZSh0aGlzLl9yZXN1bHQuc2xpY2UoMCwgdGhpcy5fcmVzdWx0Lmxlbmd0aCAtIGlnbm9yZWRDb3VudCkpO1xuICAgIH1cbiAgICBzZW5kQ29tbWFuZChjb21tYW5kKSB7XG4gICAgICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbnMgPiAwKSB7XG4gICAgICAgICAgICBjb21tYW5kLmluVHJhbnNhY3Rpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5fcXVldWUubGVuZ3RoO1xuICAgICAgICBjb21tYW5kLnBpcGVsaW5lSW5kZXggPSBwb3NpdGlvbjtcbiAgICAgICAgY29tbWFuZC5wcm9taXNlXG4gICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbGxSZXN1bHQoW251bGwsIHJlc3VsdF0sIHBvc2l0aW9uKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmlsbFJlc3VsdChbZXJyb3JdLCBwb3NpdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKGNvbW1hbmQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkQmF0Y2goY29tbWFuZHMpIHtcbiAgICAgICAgbGV0IGNvbW1hbmQsIGNvbW1hbmROYW1lLCBhcmdzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1hbmRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBjb21tYW5kID0gY29tbWFuZHNbaV07XG4gICAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmRbMF07XG4gICAgICAgICAgICBhcmdzID0gY29tbWFuZC5zbGljZSgxKTtcbiAgICAgICAgICAgIHRoaXNbY29tbWFuZE5hbWVdLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFBpcGVsaW5lO1xuLy8gQHRzLWV4cGVjdC1lcnJvclxuY29uc3QgbXVsdGkgPSBQaXBlbGluZS5wcm90b3R5cGUubXVsdGk7XG4vLyBAdHMtZXhwZWN0LWVycm9yXG5QaXBlbGluZS5wcm90b3R5cGUubXVsdGkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25zICs9IDE7XG4gICAgcmV0dXJuIG11bHRpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuLy8gQHRzLWV4cGVjdC1lcnJvclxuY29uc3QgZXhlY0J1ZmZlciA9IFBpcGVsaW5lLnByb3RvdHlwZS5leGVjQnVmZmVyO1xuLy8gQHRzLWV4cGVjdC1lcnJvclxuUGlwZWxpbmUucHJvdG90eXBlLmV4ZWNCdWZmZXIgPSAoMCwgdXRpbF8xLmRlcHJlY2F0ZSkoZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbnMgPiAwKSB7XG4gICAgICAgIHRoaXMuX3RyYW5zYWN0aW9ucyAtPSAxO1xuICAgIH1cbiAgICByZXR1cm4gZXhlY0J1ZmZlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSwgXCJQaXBlbGluZSNleGVjQnVmZmVyOiBVc2UgUGlwZWxpbmUjZXhlYyBpbnN0ZWFkXCIpO1xuLy8gTk9URTogVG8gYXZvaWQgYW4gdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uLCB0aGlzIHdpbGwgdW5jb25kaXRpb25hbGx5IGFsd2F5cyByZXR1cm4gdGhpcy5wcm9taXNlLFxuLy8gd2hpY2ggYWx3YXlzIGhhcyB0aGUgcmVqZWN0aW9uIGhhbmRsZWQgYnkgc3RhbmRhcmQtYXMtY2FsbGJhY2tcbi8vIGFkZGluZyB0aGUgcHJvdmlkZWQgcmVqZWN0aW9uIGNhbGxiYWNrLlxuLy9cbi8vIElmIGEgZGlmZmVyZW50IHByb21pc2UgaW5zdGFuY2Ugd2VyZSByZXR1cm5lZCwgdGhhdCBwcm9taXNlIHdvdWxkIGNhdXNlIGl0cyBvd24gdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uXG4vLyBlcnJvcnMsIGV2ZW4gaWYgdGhhdCBwcm9taXNlIHVuY29uZGl0aW9uYWxseSByZXNvbHZlZCB0byAqKnRoZSByZXNvbHZlZCB2YWx1ZSBvZioqIHRoaXMucHJvbWlzZS5cblBpcGVsaW5lLnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gV2FpdCBmb3IgdGhlIGNsdXN0ZXIgdG8gYmUgY29ubmVjdGVkLCBzaW5jZSB3ZSBuZWVkIG5vZGVzIGluZm9ybWF0aW9uIGJlZm9yZSBjb250aW51aW5nXG4gICAgaWYgKHRoaXMuaXNDbHVzdGVyICYmICF0aGlzLnJlZGlzLnNsb3RzLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5yZWRpcy5zdGF0dXMgPT09IFwid2FpdFwiKVxuICAgICAgICAgICAgdGhpcy5yZWRpcy5jb25uZWN0KCkuY2F0Y2godXRpbHNfMS5ub29wKTtcbiAgICAgICAgaWYgKGNhbGxiYWNrICYmICF0aGlzLm5vZGVpZmllZFByb21pc2UpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZWlmaWVkUHJvbWlzZSA9IHRydWU7XG4gICAgICAgICAgICAoMCwgc3RhbmRhcmRfYXNfY2FsbGJhY2tfMS5kZWZhdWx0KSh0aGlzLnByb21pc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZGlzLmRlbGF5VW50aWxSZWFkeSgoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmV4ZWMoY2FsbGJhY2spO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9ucyA+IDApIHtcbiAgICAgICAgdGhpcy5fdHJhbnNhY3Rpb25zIC09IDE7XG4gICAgICAgIHJldHVybiBleGVjQnVmZmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5ub2RlaWZpZWRQcm9taXNlKSB7XG4gICAgICAgIHRoaXMubm9kZWlmaWVkUHJvbWlzZSA9IHRydWU7XG4gICAgICAgICgwLCBzdGFuZGFyZF9hc19jYWxsYmFja18xLmRlZmF1bHQpKHRoaXMucHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3F1ZXVlLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnJlc29sdmUoW10pO1xuICAgIH1cbiAgICBsZXQgcGlwZWxpbmVTbG90O1xuICAgIGlmICh0aGlzLmlzQ2x1c3Rlcikge1xuICAgICAgICAvLyBMaXN0IG9mIHRoZSBmaXJzdCBrZXkgZm9yIGVhY2ggY29tbWFuZFxuICAgICAgICBjb25zdCBzYW1wbGVLZXlzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSB0aGlzLl9xdWV1ZVtpXS5nZXRLZXlzKCk7XG4gICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBzYW1wbGVLZXlzLnB1c2goa2V5c1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBGb3IgZWFjaCBjb21tYW5kLCBjaGVjayB0aGF0IHRoZSBrZXlzIGJlbG9uZyB0byB0aGUgc2FtZSBzbG90XG4gICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggJiYgY2FsY3VsYXRlU2xvdC5nZW5lcmF0ZU11bHRpKGtleXMpIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0KG5ldyBFcnJvcihcIkFsbCB0aGUga2V5cyBpbiBhIHBpcGVsaW5lIGNvbW1hbmQgc2hvdWxkIGJlbG9uZyB0byB0aGUgc2FtZSBzbG90XCIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzYW1wbGVLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgcGlwZWxpbmVTbG90ID0gZ2VuZXJhdGVNdWx0aVdpdGhOb2Rlcyh0aGlzLnJlZGlzLCBzYW1wbGVLZXlzKTtcbiAgICAgICAgICAgIGlmIChwaXBlbGluZVNsb3QgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWplY3QobmV3IEVycm9yKFwiQWxsIGtleXMgaW4gdGhlIHBpcGVsaW5lIHNob3VsZCBiZWxvbmcgdG8gdGhlIHNhbWUgc2xvdHMgYWxsb2NhdGlvbiBncm91cFwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNlbmQgdGhlIHBpcGVsaW5lIHRvIGEgcmFuZG9tIG5vZGVcbiAgICAgICAgICAgIHBpcGVsaW5lU2xvdCA9IChNYXRoLnJhbmRvbSgpICogMTYzODQpIHwgMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgZXhlY1BpcGVsaW5lKCk7XG4gICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgICBmdW5jdGlvbiBleGVjUGlwZWxpbmUoKSB7XG4gICAgICAgIGxldCB3cml0ZVBlbmRpbmcgPSAoX3RoaXMucmVwbHlQZW5kaW5nID0gX3RoaXMuX3F1ZXVlLmxlbmd0aCk7XG4gICAgICAgIGxldCBub2RlO1xuICAgICAgICBpZiAoX3RoaXMuaXNDbHVzdGVyKSB7XG4gICAgICAgICAgICBub2RlID0ge1xuICAgICAgICAgICAgICAgIHNsb3Q6IHBpcGVsaW5lU2xvdCxcbiAgICAgICAgICAgICAgICByZWRpczogX3RoaXMucmVkaXMuY29ubmVjdGlvblBvb2wubm9kZXMuYWxsW190aGlzLnByZWZlcktleV0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCBkYXRhID0gXCJcIjtcbiAgICAgICAgbGV0IGJ1ZmZlcnM7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IHtcbiAgICAgICAgICAgIGlzUGlwZWxpbmU6IHRydWUsXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogX3RoaXMuaXNDbHVzdGVyID8gbm9kZSA6IHsgcmVkaXM6IF90aGlzLnJlZGlzIH0sXG4gICAgICAgICAgICB3cml0ZSh3cml0YWJsZSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd3JpdGFibGUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFidWZmZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChCdWZmZXIuZnJvbShkYXRhLCBcInV0ZjhcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKHdyaXRhYmxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgKz0gd3JpdGFibGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghLS13cml0ZVBlbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKEJ1ZmZlci5mcm9tKGRhdGEsIFwidXRmOFwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZGVzdGluYXRpb24ucmVkaXMuc3RyZWFtLndyaXRlKEJ1ZmZlci5jb25jYXQoYnVmZmVycykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmRlc3RpbmF0aW9uLnJlZGlzLnN0cmVhbS53cml0ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCB3cml0ZVBlbmRpbmcgZm9yIHJlc2VuZGluZ1xuICAgICAgICAgICAgICAgICAgICB3cml0ZVBlbmRpbmcgPSBfdGhpcy5fcXVldWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVycyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IF90aGlzLl9xdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgX3RoaXMucmVkaXMuc2VuZENvbW1hbmQoX3RoaXMuX3F1ZXVlW2ldLCBzdHJlYW0sIG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9taXNlO1xuICAgIH1cbn07XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/Pipeline.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/Redis.js":
/*!*********************************************!*\
!*** ./node_modules/ioredis/built/Redis.js ***!
\*********************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst commands_1 = __webpack_require__(/*! @ioredis/commands */ \"(rsc)/./node_modules/@ioredis/commands/built/index.js\");\nconst events_1 = __webpack_require__(/*! events */ \"events\");\nconst standard_as_callback_1 = __webpack_require__(/*! standard-as-callback */ \"(rsc)/./node_modules/standard-as-callback/built/index.js\");\nconst cluster_1 = __webpack_require__(/*! ./cluster */ \"(rsc)/./node_modules/ioredis/built/cluster/index.js\");\nconst Command_1 = __webpack_require__(/*! ./Command */ \"(rsc)/./node_modules/ioredis/built/Command.js\");\nconst connectors_1 = __webpack_require__(/*! ./connectors */ \"(rsc)/./node_modules/ioredis/built/connectors/index.js\");\nconst SentinelConnector_1 = __webpack_require__(/*! ./connectors/SentinelConnector */ \"(rsc)/./node_modules/ioredis/built/connectors/SentinelConnector/index.js\");\nconst eventHandler = __webpack_require__(/*! ./redis/event_handler */ \"(rsc)/./node_modules/ioredis/built/redis/event_handler.js\");\nconst RedisOptions_1 = __webpack_require__(/*! ./redis/RedisOptions */ \"(rsc)/./node_modules/ioredis/built/redis/RedisOptions.js\");\nconst ScanStream_1 = __webpack_require__(/*! ./ScanStream */ \"(rsc)/./node_modules/ioredis/built/ScanStream.js\");\nconst transaction_1 = __webpack_require__(/*! ./transaction */ \"(rsc)/./node_modules/ioredis/built/transaction.js\");\nconst utils_1 = __webpack_require__(/*! ./utils */ \"(rsc)/./node_modules/ioredis/built/utils/index.js\");\nconst applyMixin_1 = __webpack_require__(/*! ./utils/applyMixin */ \"(rsc)/./node_modules/ioredis/built/utils/applyMixin.js\");\nconst Commander_1 = __webpack_require__(/*! ./utils/Commander */ \"(rsc)/./node_modules/ioredis/built/utils/Commander.js\");\nconst lodash_1 = __webpack_require__(/*! ./utils/lodash */ \"(rsc)/./node_modules/ioredis/built/utils/lodash.js\");\nconst Deque = __webpack_require__(/*! denque */ \"(rsc)/./node_modules/denque/index.js\");\nconst debug = (0, utils_1.Debug)(\"redis\");\n/**\n * This is the major component of ioredis.\n * Use it to connect to a standalone Redis server or Sentinels.\n *\n * ```typescript\n * const redis = new Redis(); // Default port is 6379\n * async function main() {\n * redis.set(\"foo\", \"bar\");\n * redis.get(\"foo\", (err, result) => {\n * // `result` should be \"bar\"\n * console.log(err, result);\n * });\n * // Or use Promise\n * const result = await redis.get(\"foo\");\n * }\n * ```\n */\nclass Redis extends Commander_1.default {\n constructor(arg1, arg2, arg3) {\n super();\n this.status = \"wait\";\n /**\n * @ignore\n */\n this.isCluster = false;\n this.reconnectTimeout = null;\n this.connectionEpoch = 0;\n this.retryAttempts = 0;\n this.manuallyClosing = false;\n // Prepare autopipelines structures\n this._autoPipelines = new Map();\n this._runningAutoPipelines = new Set();\n this.parseOptions(arg1, arg2, arg3);\n events_1.EventEmitter.call(this);\n this.resetCommandQueue();\n this.resetOfflineQueue();\n if (this.options.Connector) {\n this.connector = new this.options.Connector(this.options);\n }\n else if (this.options.sentinels) {\n const sentinelConnector = new SentinelConnector_1.default(this.options);\n sentinelConnector.emitter = this;\n this.connector = sentinelConnector;\n }\n else {\n this.connector = new connectors_1.StandaloneConnector(this.options);\n }\n if (this.options.scripts) {\n Object.entries(this.options.scripts).forEach(([name, definition]) => {\n this.defineCommand(name, definition);\n });\n }\n // end(or wait) -> connecting -> connect -> ready -> end\n if (this.options.lazyConnect) {\n this.setStatus(\"wait\");\n }\n else {\n this.connect().catch(lodash_1.noop);\n }\n }\n /**\n * Create a Redis instance.\n * This is the same as `new Redis()` but is included for compatibility with node-redis.\n */\n static createClient(...args) {\n return new Redis(...args);\n }\n get autoPipelineQueueSize() {\n let queued = 0;\n for (const pipeline of this._autoPipelines.values()) {\n queued += pipeline.length;\n }\n return queued;\n }\n /**\n * Create a connection to Redis.\n * This method will be invoked automatically when creating a new Redis instance\n * unless `lazyConnect: true` is passed.\n *\n * When calling this method manually, a Promise is returned, which will\n * be resolved when the connection status is ready.\n */\n connect(callback) {\n const promise = new Promise((resolve, reject) => {\n if (this.status === \"connecting\" ||\n this.status === \"connect\" ||\n this.status === \"ready\") {\n reject(new Error(\"Redis is already connecting/connected\"));\n return;\n }\n this.connectionEpoch += 1;\n this.setStatus(\"connecting\");\n const { options } = this;\n this.condition = {\n select: options.db,\n auth: options.username\n ? [options.username, options.password]\n : options.password,\n subscriber: false,\n };\n const _this = this;\n (0, standard_as_callback_1.default)(this.connector.connect(function (type, err) {\n _this.silentEmit(type, err);\n }), function (err, stream) {\n if (err) {\n _this.flushQueue(err);\n _this.silentEmit(\"error\", err);\n reject(err);\n _this.setStatus(\"end\");\n return;\n }\n let CONNECT_EVENT = options.tls ? \"secureConnect\" : \"connect\";\n if (\"sentinels\" in options &&\n options.sentinels &&\n !options.enableTLSForSentinelMode) {\n CONNECT_EVENT = \"connect\";\n }\n _this.stream = stream;\n if (options.noDelay) {\n stream.setNoDelay(true);\n }\n // Node ignores setKeepAlive before connect, therefore we wait for the event:\n // https://github.com/nodejs/node/issues/31663\n if (typeof options.keepAlive === \"number\") {\n if (stream.connecting) {\n stream.once(CONNECT_EVENT, () => {\n stream.setKeepAlive(true, options.keepAlive);\n });\n }\n else {\n stream.setKeepAlive(true, options.keepAlive);\n }\n }\n if (stream.connecting) {\n stream.once(CONNECT_EVENT, eventHandler.connectHandler(_this));\n if (options.connectTimeout) {\n /*\n * Typically, Socket#setTimeout(0) will clear the timer\n * set before. However, in some platforms (Electron 3.x~4.x),\n * the timer will not be cleared. So we introduce a variable here.\n *\n * See https://github.com/electron/electron/issues/14915\n */\n let connectTimeoutCleared = false;\n stream.setTimeout(options.connectTimeout, function () {\n if (connectTimeoutCleared) {\n return;\n }\n stream.setTimeout(0);\n stream.destroy();\n const err = new Error(\"connect ETIMEDOUT\");\n // @ts-expect-error\n err.errorno = \"ETIMEDOUT\";\n // @ts-expect-error\n err.code = \"ETIMEDOUT\";\n // @ts-expect-error\n err.syscall = \"connect\";\n eventHandler.errorHandler(_this)(err);\n });\n stream.once(CONNECT_EVENT, function () {\n connectTimeoutCleared = true;\n stream.setTimeout(0);\n });\n }\n }\n else if (stream.destroyed) {\n const firstError = _this.connector.firstError;\n if (firstError) {\n process.nextTick(() => {\n eventHandler.errorHandler(_this)(firstError);\n });\n }\n process.nextTick(eventHandler.closeHandler(_this));\n }\n else {\n process.nextTick(eventHandler.connectHandler(_this));\n }\n if (!stream.destroyed) {\n stream.once(\"error\", eventHandler.errorHandler(_this));\n stream.once(\"close\", eventHandler.closeHandler(_this));\n }\n const connectionReadyHandler = function () {\n _this.removeListener(\"close\", connectionCloseHandler);\n resolve();\n };\n var connectionCloseHandler = function () {\n _this.removeListener(\"ready\", connectionReadyHandler);\n reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n };\n _this.once(\"ready\", connectionReadyHandler);\n _this.once(\"close\", connectionCloseHandler);\n });\n });\n return (0, standard_as_callback_1.default)(promise, callback);\n }\n /**\n * Disconnect from Redis.\n *\n * This method closes the connection immediately,\n * and may lose some pending replies that haven't written to client.\n * If you want to wait for the pending replies, use Redis#quit instead.\n */\n disconnect(reconnect = false) {\n if (!reconnect) {\n this.manuallyClosing = true;\n }\n if (this.reconnectTimeout && !reconnect) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n if (this.status === \"wait\") {\n eventHandler.closeHandler(this)();\n }\n else {\n this.connector.disconnect();\n }\n }\n /**\n * Disconnect from Redis.\n *\n * @deprecated\n */\n end() {\n this.disconnect();\n }\n /**\n * Create a new instance with the same options as the current one.\n *\n * @example\n * ```js\n * var redis = new Redis(6380);\n * var anotherRedis = redis.duplicate();\n * ```\n */\n duplicate(override) {\n return new Redis({ ...this.options, ...override });\n }\n /**\n * Mode of the connection.\n *\n * One of `\"normal\"`, `\"subscriber\"`, or `\"monitor\"`. When the connection is\n * not in `\"normal\"` mode, certain commands are not allowed.\n */\n get mode() {\n var _a;\n return this.options.monitor\n ? \"monitor\"\n : ((_a = this.condition) === null || _a === void 0 ? void 0 : _a.subscriber)\n ? \"subscriber\"\n : \"normal\";\n }\n /**\n * Listen for all requests received by the server in real time.\n *\n * This command will create a new connection to Redis and send a\n * MONITOR command via the new connection in order to avoid disturbing\n * the current connection.\n *\n * @param callback The callback function. If omit, a promise will be returned.\n * @example\n * ```js\n * var redis = new Redis();\n * redis.monitor(function (err, monitor) {\n * // Entering monitoring mode.\n * monitor.on('monitor', function (time, args, source, database) {\n * console.log(time + \": \" + util.inspect(args));\n * });\n * });\n *\n * // supports promise as well as other commands\n * redis.monitor().then(function (monitor) {\n * monitor.on('monitor', function (time, args, source, database) {\n * console.log(time + \": \" + util.inspect(args));\n * });\n * });\n * ```\n */\n monitor(callback) {\n const monitorInstance = this.duplicate({\n monitor: true,\n lazyConnect: false,\n });\n return (0, standard_as_callback_1.default)(new Promise(function (resolve, reject) {\n monitorInstance.once(\"error\", reject);\n monitorInstance.once(\"monitoring\", function () {\n resolve(monitorInstance);\n });\n }), callback);\n }\n /**\n * Send a command to Redis\n *\n * This method is used internally and in most cases you should not\n * use it directly. If you need to send a command that is not supported\n * by the library, you can use the `call` method:\n *\n * ```js\n * const redis = new Redis();\n *\n * redis.call('set', 'foo', 'bar');\n * // or\n * redis.call(['set', 'foo', 'bar']);\n * ```\n *\n * @ignore\n */\n sendCommand(command, stream) {\n var _a, _b;\n if (this.status === \"wait\") {\n this.connect().catch(lodash_1.noop);\n }\n if (this.status === \"end\") {\n command.reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n return command.promise;\n }\n if (((_a = this.condition) === null || _a === void 0 ? void 0 : _a.subscriber) &&\n !Command_1.default.checkFlag(\"VALID_IN_SUBSCRIBER_MODE\", command.name)) {\n command.reject(new Error(\"Connection in subscriber mode, only subscriber commands may be used\"));\n return command.promise;\n }\n if (typeof this.options.commandTimeout === \"number\") {\n command.setTimeout(this.options.commandTimeout);\n }\n let writable = this.status === \"ready\" ||\n (!stream &&\n this.status === \"connect\" &&\n (0, commands_1.exists)(command.name) &&\n (0, commands_1.hasFlag)(command.name, \"loading\"));\n if (!this.stream) {\n writable = false;\n }\n else if (!this.stream.writable) {\n writable = false;\n // @ts-expect-error\n }\n else if (this.stream._writableState && this.stream._writableState.ended) {\n // TODO: We should be able to remove this as the PR has already been merged.\n // https://github.com/iojs/io.js/pull/1217\n writable = false;\n }\n if (!writable) {\n if (!this.options.enableOfflineQueue) {\n command.reject(new Error(\"Stream isn't writeable and enableOfflineQueue options is false\"));\n return command.promise;\n }\n if (command.name === \"quit\" && this.offlineQueue.length === 0) {\n this.disconnect();\n command.resolve(Buffer.from(\"OK\"));\n return command.promise;\n }\n // @ts-expect-error\n if (debug.enabled) {\n debug(\"queue command[%s]: %d -> %s(%o)\", this._getDescription(), this.condition.select, command.name, command.args);\n }\n this.offlineQueue.push({\n command: command,\n stream: stream,\n select: this.condition.select,\n });\n }\n else {\n // @ts-expect-error\n if (debug.enabled) {\n debug(\"write command[%s]: %d -> %s(%o)\", this._getDescription(), (_b = this.condition) === null || _b === void 0 ? void 0 : _b.select, command.name, command.args);\n }\n if (stream) {\n if (\"isPipeline\" in stream && stream.isPipeline) {\n stream.write(command.toWritable(stream.destination.redis.stream));\n }\n else {\n stream.write(command.toWritable(stream));\n }\n }\n else {\n this.stream.write(command.toWritable(this.stream));\n }\n this.commandQueue.push({\n command: command,\n stream: stream,\n select: this.condition.select,\n });\n if (Command_1.default.checkFlag(\"WILL_DISCONNECT\", command.name)) {\n this.manuallyClosing = true;\n }\n if (this.options.socketTimeout !== undefined && this.socketTimeoutTimer === undefined) {\n this.setSocketTimeout();\n }\n }\n if (command.name === \"select\" && (0, utils_1.isInt)(command.args[0])) {\n const db = parseInt(command.args[0], 10);\n if (this.condition.select !== db) {\n this.condition.select = db;\n this.emit(\"select\", db);\n debug(\"switch to db [%d]\", this.condition.select);\n }\n }\n return command.promise;\n }\n setSocketTimeout() {\n this.socketTimeoutTimer = setTimeout(() => {\n this.stream.destroy(new Error(`Socket timeout. Expecting data, but didn't receive any in ${this.options.socketTimeout}ms.`));\n this.socketTimeoutTimer = undefined;\n }, this.options.socketTimeout);\n // this handler must run after the \"data\" handler in \"DataHandler\"\n // so that `this.commandQueue.length` will be updated\n this.stream.once(\"data\", () => {\n clearTimeout(this.socketTimeoutTimer);\n this.socketTimeoutTimer = undefined;\n if (this.commandQueue.length === 0)\n return;\n this.setSocketTimeout();\n });\n }\n scanStream(options) {\n return this.createScanStream(\"scan\", { options });\n }\n scanBufferStream(options) {\n return this.createScanStream(\"scanBuffer\", { options });\n }\n sscanStream(key, options) {\n return this.createScanStream(\"sscan\", { key, options });\n }\n sscanBufferStream(key, options) {\n return this.createScanStream(\"sscanBuffer\", { key, options });\n }\n hscanStream(key, options) {\n return this.createScanStream(\"hscan\", { key, options });\n }\n hscanBufferStream(key, options) {\n return this.createScanStream(\"hscanBuffer\", { key, options });\n }\n zscanStream(key, options) {\n return this.createScanStream(\"zscan\", { key, options });\n }\n zscanBufferStream(key, options) {\n return this.createScanStream(\"zscanBuffer\", { key, options });\n }\n /**\n * Emit only when there's at least one listener.\n *\n * @ignore\n */\n silentEmit(eventName, arg) {\n let error;\n if (eventName === \"error\") {\n error = arg;\n if (this.status === \"end\") {\n return;\n }\n if (this.manuallyClosing) {\n // ignore connection related errors when manually disconnecting\n if (error instanceof Error &&\n (error.message === utils_1.CONNECTION_CLOSED_ERROR_MSG ||\n // @ts-expect-error\n error.syscall === \"connect\" ||\n // @ts-expect-error\n error.syscall === \"read\")) {\n return;\n }\n }\n }\n if (this.listeners(eventName).length > 0) {\n return this.emit.apply(this, arguments);\n }\n if (error && error instanceof Error) {\n console.error(\"[ioredis] Unhandled error event:\", error.stack);\n }\n return false;\n }\n /**\n * @ignore\n */\n recoverFromFatalError(_commandError, err, options) {\n this.flushQueue(err, options);\n this.silentEmit(\"error\", err);\n this.disconnect(true);\n }\n /**\n * @ignore\n */\n handleReconnection(err, item) {\n var _a;\n let needReconnect = false;\n if (this.options.reconnectOnError) {\n needReconnect = this.options.reconnectOnError(err);\n }\n switch (needReconnect) {\n case 1:\n case true:\n if (this.status !== \"reconnecting\") {\n this.disconnect(true);\n }\n item.command.reject(err);\n break;\n case 2:\n if (this.status !== \"reconnecting\") {\n this.disconnect(true);\n }\n if (((_a = this.condition) === null || _a === void 0 ? void 0 : _a.select) !== item.select &&\n item.command.name !== \"select\") {\n this.select(item.select);\n }\n // TODO\n // @ts-expect-error\n this.sendCommand(item.command);\n break;\n default:\n item.command.reject(err);\n }\n }\n /**\n * Get description of the connection. Used for debugging.\n */\n _getDescription() {\n let description;\n if (\"path\" in this.options && this.options.path) {\n description = this.options.path;\n }\n else if (this.stream &&\n this.stream.remoteAddress &&\n this.stream.remotePort) {\n description = this.stream.remoteAddress + \":\" + this.stream.remotePort;\n }\n else if (\"host\" in this.options && this.options.host) {\n description = this.options.host + \":\" + this.options.port;\n }\n else {\n // Unexpected\n description = \"\";\n }\n if (this.options.connectionName) {\n description += ` (${this.options.connectionName})`;\n }\n return description;\n }\n resetCommandQueue() {\n this.commandQueue = new Deque();\n }\n resetOfflineQueue() {\n this.offlineQueue = new Deque();\n }\n parseOptions(...args) {\n const options = {};\n let isTls = false;\n for (let i = 0; i < args.length; ++i) {\n const arg = args[i];\n if (arg === null || typeof arg === \"undefined\") {\n continue;\n }\n if (typeof arg === \"object\") {\n (0, lodash_1.defaults)(options, arg);\n }\n else if (typeof arg === \"string\") {\n (0, lodash_1.defaults)(options, (0, utils_1.parseURL)(arg));\n if (arg.startsWith(\"rediss://\")) {\n isTls = true;\n }\n }\n else if (typeof arg === \"number\") {\n options.port = arg;\n }\n else {\n throw new Error(\"Invalid argument \" + arg);\n }\n }\n if (isTls) {\n (0, lodash_1.defaults)(options, { tls: true });\n }\n (0, lodash_1.defaults)(options, Redis.defaultOptions);\n if (typeof options.port === \"string\") {\n options.port = parseInt(options.port, 10);\n }\n if (typeof options.db === \"string\") {\n options.db = parseInt(options.db, 10);\n }\n // @ts-expect-error\n this.options = (0, utils_1.resolveTLSProfile)(options);\n }\n /**\n * Change instance's status\n */\n setStatus(status, arg) {\n // @ts-expect-error\n if (debug.enabled) {\n debug(\"status[%s]: %s -> %s\", this._getDescription(), this.status || \"[empty]\", status);\n }\n this.status = status;\n process.nextTick(this.emit.bind(this, status, arg));\n }\n createScanStream(command, { key, options = {} }) {\n return new ScanStream_1.default({\n objectMode: true,\n key: key,\n redis: this,\n command: command,\n ...options,\n });\n }\n /**\n * Flush offline queue and command queue with error.\n *\n * @param error The error object to send to the commands\n * @param options options\n */\n flushQueue(error, options) {\n options = (0, lodash_1.defaults)({}, options, {\n offlineQueue: true,\n commandQueue: true,\n });\n let item;\n if (options.offlineQueue) {\n while ((item = this.offlineQueue.shift())) {\n item.command.reject(error);\n }\n }\n if (options.commandQueue) {\n if (this.commandQueue.length > 0) {\n if (this.stream) {\n this.stream.removeAllListeners(\"data\");\n }\n while ((item = this.commandQueue.shift())) {\n item.command.reject(error);\n }\n }\n }\n }\n /**\n * Check whether Redis has finished loading the persistent data and is able to\n * process commands.\n */\n _readyCheck(callback) {\n const _this = this;\n this.info(function (err, res) {\n if (err) {\n if (err.message && err.message.includes(\"NOPERM\")) {\n console.warn(`Skipping the ready check because INFO command fails: \"${err.message}\". You can disable ready check with \"enableReadyCheck\". More: https://github.com/luin/ioredis/wiki/Disable-ready-check.`);\n return callback(null, {});\n }\n return callback(err);\n }\n if (typeof res !== \"string\") {\n return callback(null, res);\n }\n const info = {};\n const lines = res.split(\"\\r\\n\");\n for (let i = 0; i < lines.length; ++i) {\n const [fieldName, ...fieldValueParts] = lines[i].split(\":\");\n const fieldValue = fieldValueParts.join(\":\");\n if (fieldValue) {\n info[fieldName] = fieldValue;\n }\n }\n if (!info.loading || info.loading === \"0\") {\n callback(null, info);\n }\n else {\n const loadingEtaMs = (info.loading_eta_seconds || 1) * 1000;\n const retryTime = _this.options.maxLoadingRetryTime &&\n _this.options.maxLoadingRetryTime < loadingEtaMs\n ? _this.options.maxLoadingRetryTime\n : loadingEtaMs;\n debug(\"Redis server still loading, trying again in \" + retryTime + \"ms\");\n setTimeout(function () {\n _this._readyCheck(callback);\n }, retryTime);\n }\n }).catch(lodash_1.noop);\n }\n}\nRedis.Cluster = cluster_1.default;\nRedis.Command = Command_1.default;\n/**\n * Default options\n */\nRedis.defaultOptions = RedisOptions_1.DEFAULT_REDIS_OPTIONS;\n(0, applyMixin_1.default)(Redis, events_1.EventEmitter);\n(0, transaction_1.addTransactionSupport)(Redis.prototype);\nexports[\"default\"] = Redis;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9SZWRpcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxtQkFBbUIsbUJBQU8sQ0FBQyxnRkFBbUI7QUFDOUMsaUJBQWlCLG1CQUFPLENBQUMsc0JBQVE7QUFDakMsK0JBQStCLG1CQUFPLENBQUMsc0ZBQXNCO0FBQzdELGtCQUFrQixtQkFBTyxDQUFDLHNFQUFXO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLGdFQUFXO0FBQ3JDLHFCQUFxQixtQkFBTyxDQUFDLDRFQUFjO0FBQzNDLDRCQUE0QixtQkFBTyxDQUFDLGdIQUFnQztBQUNwRSxxQkFBcUIsbUJBQU8sQ0FBQyx3RkFBdUI7QUFDcEQsdUJBQXVCLG1CQUFPLENBQUMsc0ZBQXNCO0FBQ3JELHFCQUFxQixtQkFBTyxDQUFDLHNFQUFjO0FBQzNDLHNCQUFzQixtQkFBTyxDQUFDLHdFQUFlO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLGtFQUFTO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLGtGQUFvQjtBQUNqRCxvQkFBb0IsbUJBQU8sQ0FBQyxnRkFBbUI7QUFDL0MsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWdCO0FBQ3pDLGNBQWMsbUJBQU8sQ0FBQyxvREFBUTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsVUFBVTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLDhCQUE4QjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUdBQXVHLDJCQUEyQjtBQUNsSTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSwrQ0FBK0MsU0FBUztBQUN4RDtBQUNBO0FBQ0EscURBQXFELFNBQVM7QUFDOUQ7QUFDQTtBQUNBLGdEQUFnRCxjQUFjO0FBQzlEO0FBQ0E7QUFDQSxzREFBc0QsY0FBYztBQUNwRTtBQUNBO0FBQ0EsZ0RBQWdELGNBQWM7QUFDOUQ7QUFDQTtBQUNBLHNEQUFzRCxjQUFjO0FBQ3BFO0FBQ0E7QUFDQSxnREFBZ0QsY0FBYztBQUM5RDtBQUNBO0FBQ0Esc0RBQXNELGNBQWM7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyw0QkFBNEI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsV0FBVztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxtQkFBbUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEZBQTBGLFlBQVk7QUFDdEcsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsa0JBQWtCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L1JlZGlzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29tbWFuZHNfMSA9IHJlcXVpcmUoXCJAaW9yZWRpcy9jb21tYW5kc1wiKTtcbmNvbnN0IGV2ZW50c18xID0gcmVxdWlyZShcImV2ZW50c1wiKTtcbmNvbnN0IHN0YW5kYXJkX2FzX2NhbGxiYWNrXzEgPSByZXF1aXJlKFwic3RhbmRhcmQtYXMtY2FsbGJhY2tcIik7XG5jb25zdCBjbHVzdGVyXzEgPSByZXF1aXJlKFwiLi9jbHVzdGVyXCIpO1xuY29uc3QgQ29tbWFuZF8xID0gcmVxdWlyZShcIi4vQ29tbWFuZFwiKTtcbmNvbnN0IGNvbm5lY3RvcnNfMSA9IHJlcXVpcmUoXCIuL2Nvbm5lY3RvcnNcIik7XG5jb25zdCBTZW50aW5lbENvbm5lY3Rvcl8xID0gcmVxdWlyZShcIi4vY29ubmVjdG9ycy9TZW50aW5lbENvbm5lY3RvclwiKTtcbmNvbnN0IGV2ZW50SGFuZGxlciA9IHJlcXVpcmUoXCIuL3JlZGlzL2V2ZW50X2hhbmRsZXJcIik7XG5jb25zdCBSZWRpc09wdGlvbnNfMSA9IHJlcXVpcmUoXCIuL3JlZGlzL1JlZGlzT3B0aW9uc1wiKTtcbmNvbnN0IFNjYW5TdHJlYW1fMSA9IHJlcXVpcmUoXCIuL1NjYW5TdHJlYW1cIik7XG5jb25zdCB0cmFuc2FjdGlvbl8xID0gcmVxdWlyZShcIi4vdHJhbnNhY3Rpb25cIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5jb25zdCBhcHBseU1peGluXzEgPSByZXF1aXJlKFwiLi91dGlscy9hcHBseU1peGluXCIpO1xuY29uc3QgQ29tbWFuZGVyXzEgPSByZXF1aXJlKFwiLi91dGlscy9Db21tYW5kZXJcIik7XG5jb25zdCBsb2Rhc2hfMSA9IHJlcXVpcmUoXCIuL3V0aWxzL2xvZGFzaFwiKTtcbmNvbnN0IERlcXVlID0gcmVxdWlyZShcImRlbnF1ZVwiKTtcbmNvbnN0IGRlYnVnID0gKDAsIHV0aWxzXzEuRGVidWcpKFwicmVkaXNcIik7XG4vKipcbiAqIFRoaXMgaXMgdGhlIG1ham9yIGNvbXBvbmVudCBvZiBpb3JlZGlzLlxuICogVXNlIGl0IHRvIGNvbm5lY3QgdG8gYSBzdGFuZGFsb25lIFJlZGlzIHNlcnZlciBvciBTZW50aW5lbHMuXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVkaXMgPSBuZXcgUmVkaXMoKTsgLy8gRGVmYXVsdCBwb3J0IGlzIDYzNzlcbiAqIGFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gKiAgIHJlZGlzLnNldChcImZvb1wiLCBcImJhclwiKTtcbiAqICAgcmVkaXMuZ2V0KFwiZm9vXCIsIChlcnIsIHJlc3VsdCkgPT4ge1xuICogICAgIC8vIGByZXN1bHRgIHNob3VsZCBiZSBcImJhclwiXG4gKiAgICAgY29uc29sZS5sb2coZXJyLCByZXN1bHQpO1xuICogICB9KTtcbiAqICAgLy8gT3IgdXNlIFByb21pc2VcbiAqICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuZ2V0KFwiZm9vXCIpO1xuICogfVxuICogYGBgXG4gKi9cbmNsYXNzIFJlZGlzIGV4dGVuZHMgQ29tbWFuZGVyXzEuZGVmYXVsdCB7XG4gICAgY29uc3RydWN0b3IoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IFwid2FpdFwiO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGlnbm9yZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pc0NsdXN0ZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uRXBvY2ggPSAwO1xuICAgICAgICB0aGlzLnJldHJ5QXR0ZW1wdHMgPSAwO1xuICAgICAgICB0aGlzLm1hbnVhbGx5Q2xvc2luZyA9IGZhbHNlO1xuICAgICAgICAvLyBQcmVwYXJlIGF1dG9waXBlbGluZXMgc3RydWN0dXJlc1xuICAgICAgICB0aGlzLl9hdXRvUGlwZWxpbmVzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLl9ydW5uaW5nQXV0b1BpcGVsaW5lcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy5wYXJzZU9wdGlvbnMoYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICAgIGV2ZW50c18xLkV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnJlc2V0Q29tbWFuZFF1ZXVlKCk7XG4gICAgICAgIHRoaXMucmVzZXRPZmZsaW5lUXVldWUoKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5Db25uZWN0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdG9yID0gbmV3IHRoaXMub3B0aW9ucy5Db25uZWN0b3IodGhpcy5vcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc2VudGluZWxzKSB7XG4gICAgICAgICAgICBjb25zdCBzZW50aW5lbENvbm5lY3RvciA9IG5ldyBTZW50aW5lbENvbm5lY3Rvcl8xLmRlZmF1bHQodGhpcy5vcHRpb25zKTtcbiAgICAgICAgICAgIHNlbnRpbmVsQ29ubmVjdG9yLmVtaXR0ZXIgPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0b3IgPSBzZW50aW5lbENvbm5lY3RvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdG9yID0gbmV3IGNvbm5lY3RvcnNfMS5TdGFuZGFsb25lQ29ubmVjdG9yKHRoaXMub3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zY3JpcHRzKSB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLm9wdGlvbnMuc2NyaXB0cykuZm9yRWFjaCgoW25hbWUsIGRlZmluaXRpb25dKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVDb21tYW5kKG5hbWUsIGRlZmluaXRpb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZW5kKG9yIHdhaXQpIC0+IGNvbm5lY3RpbmcgLT4gY29ubmVjdCAtPiByZWFkeSAtPiBlbmRcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sYXp5Q29ubmVjdCkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoXCJ3YWl0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0KCkuY2F0Y2gobG9kYXNoXzEubm9vcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgUmVkaXMgaW5zdGFuY2UuXG4gICAgICogVGhpcyBpcyB0aGUgc2FtZSBhcyBgbmV3IFJlZGlzKClgIGJ1dCBpcyBpbmNsdWRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vZGUtcmVkaXMuXG4gICAgICovXG4gICAgc3RhdGljIGNyZWF0ZUNsaWVudCguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVkaXMoLi4uYXJncyk7XG4gICAgfVxuICAgIGdldCBhdXRvUGlwZWxpbmVRdWV1ZVNpemUoKSB7XG4gICAgICAgIGxldCBxdWV1ZWQgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHBpcGVsaW5lIG9mIHRoaXMuX2F1dG9QaXBlbGluZXMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIHF1ZXVlZCArPSBwaXBlbGluZS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXVlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgY29ubmVjdGlvbiB0byBSZWRpcy5cbiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgYXV0b21hdGljYWxseSB3aGVuIGNyZWF0aW5nIGEgbmV3IFJlZGlzIGluc3RhbmNlXG4gICAgICogdW5sZXNzIGBsYXp5Q29ubmVjdDogdHJ1ZWAgaXMgcGFzc2VkLlxuICAgICAqXG4gICAgICogV2hlbiBjYWxsaW5nIHRoaXMgbWV0aG9kIG1hbnVhbGx5LCBhIFByb21pc2UgaXMgcmV0dXJuZWQsIHdoaWNoIHdpbGxcbiAgICAgKiBiZSByZXNvbHZlZCB3aGVuIHRoZSBjb25uZWN0aW9uIHN0YXR1cyBpcyByZWFkeS5cbiAgICAgKi9cbiAgICBjb25uZWN0KGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IFwiY29ubmVjdGluZ1wiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT09IFwiY29ubmVjdFwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT09IFwicmVhZHlcIikge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJSZWRpcyBpcyBhbHJlYWR5IGNvbm5lY3RpbmcvY29ubmVjdGVkXCIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25FcG9jaCArPSAxO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoXCJjb25uZWN0aW5nXCIpO1xuICAgICAgICAgICAgY29uc3QgeyBvcHRpb25zIH0gPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24gPSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0OiBvcHRpb25zLmRiLFxuICAgICAgICAgICAgICAgIGF1dGg6IG9wdGlvbnMudXNlcm5hbWVcbiAgICAgICAgICAgICAgICAgICAgPyBbb3B0aW9ucy51c2VybmFtZSwgb3B0aW9ucy5wYXNzd29yZF1cbiAgICAgICAgICAgICAgICAgICAgOiBvcHRpb25zLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgIHN1YnNjcmliZXI6IGZhbHNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICAgICAgICAgICgwLCBzdGFuZGFyZF9hc19jYWxsYmFja18xLmRlZmF1bHQpKHRoaXMuY29ubmVjdG9yLmNvbm5lY3QoZnVuY3Rpb24gKHR5cGUsIGVycikge1xuICAgICAgICAgICAgICAgIF90aGlzLnNpbGVudEVtaXQodHlwZSwgZXJyKTtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoZXJyLCBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmZsdXNoUXVldWUoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuc2lsZW50RW1pdChcImVycm9yXCIsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZXRTdGF0dXMoXCJlbmRcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IENPTk5FQ1RfRVZFTlQgPSBvcHRpb25zLnRscyA/IFwic2VjdXJlQ29ubmVjdFwiIDogXCJjb25uZWN0XCI7XG4gICAgICAgICAgICAgICAgaWYgKFwic2VudGluZWxzXCIgaW4gb3B0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnNlbnRpbmVscyAmJlxuICAgICAgICAgICAgICAgICAgICAhb3B0aW9ucy5lbmFibGVUTFNGb3JTZW50aW5lbE1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgQ09OTkVDVF9FVkVOVCA9IFwiY29ubmVjdFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubm9EZWxheSkge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc2V0Tm9EZWxheSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTm9kZSBpZ25vcmVzIHNldEtlZXBBbGl2ZSBiZWZvcmUgY29ubmVjdCwgdGhlcmVmb3JlIHdlIHdhaXQgZm9yIHRoZSBldmVudDpcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzMxNjYzXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmtlZXBBbGl2ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmNvbm5lY3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5vbmNlKENPTk5FQ1RfRVZFTlQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc2V0S2VlcEFsaXZlKHRydWUsIG9wdGlvbnMua2VlcEFsaXZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNldEtlZXBBbGl2ZSh0cnVlLCBvcHRpb25zLmtlZXBBbGl2ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5jb25uZWN0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbS5vbmNlKENPTk5FQ1RfRVZFTlQsIGV2ZW50SGFuZGxlci5jb25uZWN0SGFuZGxlcihfdGhpcykpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jb25uZWN0VGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFR5cGljYWxseSwgU29ja2V0I3NldFRpbWVvdXQoMCkgd2lsbCBjbGVhciB0aGUgdGltZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIHNldCBiZWZvcmUuIEhvd2V2ZXIsIGluIHNvbWUgcGxhdGZvcm1zIChFbGVjdHJvbiAzLnh+NC54KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSB0aW1lciB3aWxsIG5vdCBiZSBjbGVhcmVkLiBTbyB3ZSBpbnRyb2R1Y2UgYSB2YXJpYWJsZSBoZXJlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxlY3Ryb24vZWxlY3Ryb24vaXNzdWVzLzE0OTE1XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25uZWN0VGltZW91dENsZWFyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5zZXRUaW1lb3V0KG9wdGlvbnMuY29ubmVjdFRpbWVvdXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdFRpbWVvdXRDbGVhcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNldFRpbWVvdXQoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoXCJjb25uZWN0IEVUSU1FRE9VVFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLmVycm9ybm8gPSBcIkVUSU1FRE9VVFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIuY29kZSA9IFwiRVRJTUVET1VUXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5zeXNjYWxsID0gXCJjb25uZWN0XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVyLmVycm9ySGFuZGxlcihfdGhpcykoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm9uY2UoQ09OTkVDVF9FVkVOVCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RUaW1lb3V0Q2xlYXJlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNldFRpbWVvdXQoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJlYW0uZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0RXJyb3IgPSBfdGhpcy5jb25uZWN0b3IuZmlyc3RFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlci5lcnJvckhhbmRsZXIoX3RoaXMpKGZpcnN0RXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhldmVudEhhbmRsZXIuY2xvc2VIYW5kbGVyKF90aGlzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGV2ZW50SGFuZGxlci5jb25uZWN0SGFuZGxlcihfdGhpcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXN0cmVhbS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm9uY2UoXCJlcnJvclwiLCBldmVudEhhbmRsZXIuZXJyb3JIYW5kbGVyKF90aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbS5vbmNlKFwiY2xvc2VcIiwgZXZlbnRIYW5kbGVyLmNsb3NlSGFuZGxlcihfdGhpcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uUmVhZHlIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIGNvbm5lY3Rpb25DbG9zZUhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB2YXIgY29ubmVjdGlvbkNsb3NlSGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVtb3ZlTGlzdGVuZXIoXCJyZWFkeVwiLCBjb25uZWN0aW9uUmVhZHlIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcih1dGlsc18xLkNPTk5FQ1RJT05fQ0xPU0VEX0VSUk9SX01TRykpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgX3RoaXMub25jZShcInJlYWR5XCIsIGNvbm5lY3Rpb25SZWFkeUhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIF90aGlzLm9uY2UoXCJjbG9zZVwiLCBjb25uZWN0aW9uQ2xvc2VIYW5kbGVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuICgwLCBzdGFuZGFyZF9hc19jYWxsYmFja18xLmRlZmF1bHQpKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGlzY29ubmVjdCBmcm9tIFJlZGlzLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgY2xvc2VzIHRoZSBjb25uZWN0aW9uIGltbWVkaWF0ZWx5LFxuICAgICAqIGFuZCBtYXkgbG9zZSBzb21lIHBlbmRpbmcgcmVwbGllcyB0aGF0IGhhdmVuJ3Qgd3JpdHRlbiB0byBjbGllbnQuXG4gICAgICogSWYgeW91IHdhbnQgdG8gd2FpdCBmb3IgdGhlIHBlbmRpbmcgcmVwbGllcywgdXNlIFJlZGlzI3F1aXQgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBkaXNjb25uZWN0KHJlY29ubmVjdCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghcmVjb25uZWN0KSB7XG4gICAgICAgICAgICB0aGlzLm1hbnVhbGx5Q2xvc2luZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVjb25uZWN0VGltZW91dCAmJiAhcmVjb25uZWN0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWNvbm5lY3RUaW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMucmVjb25uZWN0VGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSBcIndhaXRcIikge1xuICAgICAgICAgICAgZXZlbnRIYW5kbGVyLmNsb3NlSGFuZGxlcih0aGlzKSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0b3IuZGlzY29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERpc2Nvbm5lY3QgZnJvbSBSZWRpcy5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZW5kKCkge1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHNhbWUgb3B0aW9ucyBhcyB0aGUgY3VycmVudCBvbmUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogdmFyIHJlZGlzID0gbmV3IFJlZGlzKDYzODApO1xuICAgICAqIHZhciBhbm90aGVyUmVkaXMgPSByZWRpcy5kdXBsaWNhdGUoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkdXBsaWNhdGUob3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWRpcyh7IC4uLnRoaXMub3B0aW9ucywgLi4ub3ZlcnJpZGUgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vZGUgb2YgdGhlIGNvbm5lY3Rpb24uXG4gICAgICpcbiAgICAgKiBPbmUgb2YgYFwibm9ybWFsXCJgLCBgXCJzdWJzY3JpYmVyXCJgLCBvciBgXCJtb25pdG9yXCJgLiBXaGVuIHRoZSBjb25uZWN0aW9uIGlzXG4gICAgICogbm90IGluIGBcIm5vcm1hbFwiYCBtb2RlLCBjZXJ0YWluIGNvbW1hbmRzIGFyZSBub3QgYWxsb3dlZC5cbiAgICAgKi9cbiAgICBnZXQgbW9kZSgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1vbml0b3JcbiAgICAgICAgICAgID8gXCJtb25pdG9yXCJcbiAgICAgICAgICAgIDogKChfYSA9IHRoaXMuY29uZGl0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlcilcbiAgICAgICAgICAgICAgICA/IFwic3Vic2NyaWJlclwiXG4gICAgICAgICAgICAgICAgOiBcIm5vcm1hbFwiO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMaXN0ZW4gZm9yIGFsbCByZXF1ZXN0cyByZWNlaXZlZCBieSB0aGUgc2VydmVyIGluIHJlYWwgdGltZS5cbiAgICAgKlxuICAgICAqIFRoaXMgY29tbWFuZCB3aWxsIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uIHRvIFJlZGlzIGFuZCBzZW5kIGFcbiAgICAgKiBNT05JVE9SIGNvbW1hbmQgdmlhIHRoZSBuZXcgY29ubmVjdGlvbiBpbiBvcmRlciB0byBhdm9pZCBkaXN0dXJiaW5nXG4gICAgICogdGhlIGN1cnJlbnQgY29ubmVjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24uIElmIG9taXQsIGEgcHJvbWlzZSB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiB2YXIgcmVkaXMgPSBuZXcgUmVkaXMoKTtcbiAgICAgKiByZWRpcy5tb25pdG9yKGZ1bmN0aW9uIChlcnIsIG1vbml0b3IpIHtcbiAgICAgKiAgIC8vIEVudGVyaW5nIG1vbml0b3JpbmcgbW9kZS5cbiAgICAgKiAgIG1vbml0b3Iub24oJ21vbml0b3InLCBmdW5jdGlvbiAodGltZSwgYXJncywgc291cmNlLCBkYXRhYmFzZSkge1xuICAgICAqICAgICBjb25zb2xlLmxvZyh0aW1lICsgXCI6IFwiICsgdXRpbC5pbnNwZWN0KGFyZ3MpKTtcbiAgICAgKiAgIH0pO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gc3VwcG9ydHMgcHJvbWlzZSBhcyB3ZWxsIGFzIG90aGVyIGNvbW1hbmRzXG4gICAgICogcmVkaXMubW9uaXRvcigpLnRoZW4oZnVuY3Rpb24gKG1vbml0b3IpIHtcbiAgICAgKiAgIG1vbml0b3Iub24oJ21vbml0b3InLCBmdW5jdGlvbiAodGltZSwgYXJncywgc291cmNlLCBkYXRhYmFzZSkge1xuICAgICAqICAgICBjb25zb2xlLmxvZyh0aW1lICsgXCI6IFwiICsgdXRpbC5pbnNwZWN0KGFyZ3MpKTtcbiAgICAgKiAgIH0pO1xuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG1vbml0b3IoY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgbW9uaXRvckluc3RhbmNlID0gdGhpcy5kdXBsaWNhdGUoe1xuICAgICAgICAgICAgbW9uaXRvcjogdHJ1ZSxcbiAgICAgICAgICAgIGxhenlDb25uZWN0OiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAoMCwgc3RhbmRhcmRfYXNfY2FsbGJhY2tfMS5kZWZhdWx0KShuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBtb25pdG9ySW5zdGFuY2Uub25jZShcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgICAgICBtb25pdG9ySW5zdGFuY2Uub25jZShcIm1vbml0b3JpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUobW9uaXRvckluc3RhbmNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kIGEgY29tbWFuZCB0byBSZWRpc1xuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbnRlcm5hbGx5IGFuZCBpbiBtb3N0IGNhc2VzIHlvdSBzaG91bGQgbm90XG4gICAgICogdXNlIGl0IGRpcmVjdGx5LiBJZiB5b3UgbmVlZCB0byBzZW5kIGEgY29tbWFuZCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWRcbiAgICAgKiBieSB0aGUgbGlicmFyeSwgeW91IGNhbiB1c2UgdGhlIGBjYWxsYCBtZXRob2Q6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHJlZGlzID0gbmV3IFJlZGlzKCk7XG4gICAgICpcbiAgICAgKiByZWRpcy5jYWxsKCdzZXQnLCAnZm9vJywgJ2JhcicpO1xuICAgICAqIC8vIG9yXG4gICAgICogcmVkaXMuY2FsbChbJ3NldCcsICdmb28nLCAnYmFyJ10pO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIHNlbmRDb21tYW5kKGNvbW1hbmQsIHN0cmVhbSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IFwid2FpdFwiKSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3QoKS5jYXRjaChsb2Rhc2hfMS5ub29wKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IFwiZW5kXCIpIHtcbiAgICAgICAgICAgIGNvbW1hbmQucmVqZWN0KG5ldyBFcnJvcih1dGlsc18xLkNPTk5FQ1RJT05fQ0xPU0VEX0VSUk9SX01TRykpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmQucHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKChfYSA9IHRoaXMuY29uZGl0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlcikgJiZcbiAgICAgICAgICAgICFDb21tYW5kXzEuZGVmYXVsdC5jaGVja0ZsYWcoXCJWQUxJRF9JTl9TVUJTQ1JJQkVSX01PREVcIiwgY29tbWFuZC5uYW1lKSkge1xuICAgICAgICAgICAgY29tbWFuZC5yZWplY3QobmV3IEVycm9yKFwiQ29ubmVjdGlvbiBpbiBzdWJzY3JpYmVyIG1vZGUsIG9ubHkgc3Vic2NyaWJlciBjb21tYW5kcyBtYXkgYmUgdXNlZFwiKSk7XG4gICAgICAgICAgICByZXR1cm4gY29tbWFuZC5wcm9taXNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmNvbW1hbmRUaW1lb3V0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBjb21tYW5kLnNldFRpbWVvdXQodGhpcy5vcHRpb25zLmNvbW1hbmRUaW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgd3JpdGFibGUgPSB0aGlzLnN0YXR1cyA9PT0gXCJyZWFkeVwiIHx8XG4gICAgICAgICAgICAoIXN0cmVhbSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID09PSBcImNvbm5lY3RcIiAmJlxuICAgICAgICAgICAgICAgICgwLCBjb21tYW5kc18xLmV4aXN0cykoY29tbWFuZC5uYW1lKSAmJlxuICAgICAgICAgICAgICAgICgwLCBjb21tYW5kc18xLmhhc0ZsYWcpKGNvbW1hbmQubmFtZSwgXCJsb2FkaW5nXCIpKTtcbiAgICAgICAgaWYgKCF0aGlzLnN0cmVhbSkge1xuICAgICAgICAgICAgd3JpdGFibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghdGhpcy5zdHJlYW0ud3JpdGFibGUpIHtcbiAgICAgICAgICAgIHdyaXRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5zdHJlYW0uX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5zdHJlYW0uX3dyaXRhYmxlU3RhdGUuZW5kZWQpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlbW92ZSB0aGlzIGFzIHRoZSBQUiBoYXMgYWxyZWFkeSBiZWVuIG1lcmdlZC5cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9pb2pzL2lvLmpzL3B1bGwvMTIxN1xuICAgICAgICAgICAgd3JpdGFibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXdyaXRhYmxlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5lbmFibGVPZmZsaW5lUXVldWUpIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kLnJlamVjdChuZXcgRXJyb3IoXCJTdHJlYW0gaXNuJ3Qgd3JpdGVhYmxlIGFuZCBlbmFibGVPZmZsaW5lUXVldWUgb3B0aW9ucyBpcyBmYWxzZVwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmQucHJvbWlzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb21tYW5kLm5hbWUgPT09IFwicXVpdFwiICYmIHRoaXMub2ZmbGluZVF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbW1hbmQucmVzb2x2ZShCdWZmZXIuZnJvbShcIk9LXCIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZC5wcm9taXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgaWYgKGRlYnVnLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhcInF1ZXVlIGNvbW1hbmRbJXNdOiAlZCAtPiAlcyglbylcIiwgdGhpcy5fZ2V0RGVzY3JpcHRpb24oKSwgdGhpcy5jb25kaXRpb24uc2VsZWN0LCBjb21tYW5kLm5hbWUsIGNvbW1hbmQuYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9mZmxpbmVRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb21tYW5kOiBjb21tYW5kLFxuICAgICAgICAgICAgICAgIHN0cmVhbTogc3RyZWFtLFxuICAgICAgICAgICAgICAgIHNlbGVjdDogdGhpcy5jb25kaXRpb24uc2VsZWN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBpZiAoZGVidWcuZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIGRlYnVnKFwid3JpdGUgY29tbWFuZFslc106ICVkIC0+ICVzKCVvKVwiLCB0aGlzLl9nZXREZXNjcmlwdGlvbigpLCAoX2IgPSB0aGlzLmNvbmRpdGlvbikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNlbGVjdCwgY29tbWFuZC5uYW1lLCBjb21tYW5kLmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIGlmIChcImlzUGlwZWxpbmVcIiBpbiBzdHJlYW0gJiYgc3RyZWFtLmlzUGlwZWxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlKGNvbW1hbmQudG9Xcml0YWJsZShzdHJlYW0uZGVzdGluYXRpb24ucmVkaXMuc3RyZWFtKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoY29tbWFuZC50b1dyaXRhYmxlKHN0cmVhbSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKGNvbW1hbmQudG9Xcml0YWJsZSh0aGlzLnN0cmVhbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb21tYW5kUXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgY29tbWFuZDogY29tbWFuZCxcbiAgICAgICAgICAgICAgICBzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgICAgICAgICBzZWxlY3Q6IHRoaXMuY29uZGl0aW9uLnNlbGVjdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKENvbW1hbmRfMS5kZWZhdWx0LmNoZWNrRmxhZyhcIldJTExfRElTQ09OTkVDVFwiLCBjb21tYW5kLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYW51YWxseUNsb3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zb2NrZXRUaW1lb3V0ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zb2NrZXRUaW1lb3V0VGltZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U29ja2V0VGltZW91dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kLm5hbWUgPT09IFwic2VsZWN0XCIgJiYgKDAsIHV0aWxzXzEuaXNJbnQpKGNvbW1hbmQuYXJnc1swXSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRiID0gcGFyc2VJbnQoY29tbWFuZC5hcmdzWzBdLCAxMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jb25kaXRpb24uc2VsZWN0ICE9PSBkYikge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnNlbGVjdCA9IGRiO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChcInNlbGVjdFwiLCBkYik7XG4gICAgICAgICAgICAgICAgZGVidWcoXCJzd2l0Y2ggdG8gZGIgWyVkXVwiLCB0aGlzLmNvbmRpdGlvbi5zZWxlY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21tYW5kLnByb21pc2U7XG4gICAgfVxuICAgIHNldFNvY2tldFRpbWVvdXQoKSB7XG4gICAgICAgIHRoaXMuc29ja2V0VGltZW91dFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0cmVhbS5kZXN0cm95KG5ldyBFcnJvcihgU29ja2V0IHRpbWVvdXQuIEV4cGVjdGluZyBkYXRhLCBidXQgZGlkbid0IHJlY2VpdmUgYW55IGluICR7dGhpcy5vcHRpb25zLnNvY2tldFRpbWVvdXR9bXMuYCkpO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXRUaW1lb3V0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0sIHRoaXMub3B0aW9ucy5zb2NrZXRUaW1lb3V0KTtcbiAgICAgICAgLy8gdGhpcyBoYW5kbGVyIG11c3QgcnVuIGFmdGVyIHRoZSBcImRhdGFcIiBoYW5kbGVyIGluIFwiRGF0YUhhbmRsZXJcIlxuICAgICAgICAvLyBzbyB0aGF0IGB0aGlzLmNvbW1hbmRRdWV1ZS5sZW5ndGhgIHdpbGwgYmUgdXBkYXRlZFxuICAgICAgICB0aGlzLnN0cmVhbS5vbmNlKFwiZGF0YVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zb2NrZXRUaW1lb3V0VGltZXIpO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXRUaW1lb3V0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5jb21tYW5kUXVldWUubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2V0U29ja2V0VGltZW91dCgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2NhblN0cmVhbShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNjYW5TdHJlYW0oXCJzY2FuXCIsIHsgb3B0aW9ucyB9KTtcbiAgICB9XG4gICAgc2NhbkJ1ZmZlclN0cmVhbShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNjYW5TdHJlYW0oXCJzY2FuQnVmZmVyXCIsIHsgb3B0aW9ucyB9KTtcbiAgICB9XG4gICAgc3NjYW5TdHJlYW0oa2V5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNjYW5TdHJlYW0oXCJzc2NhblwiLCB7IGtleSwgb3B0aW9ucyB9KTtcbiAgICB9XG4gICAgc3NjYW5CdWZmZXJTdHJlYW0oa2V5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNjYW5TdHJlYW0oXCJzc2NhbkJ1ZmZlclwiLCB7IGtleSwgb3B0aW9ucyB9KTtcbiAgICB9XG4gICAgaHNjYW5TdHJlYW0oa2V5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNjYW5TdHJlYW0oXCJoc2NhblwiLCB7IGtleSwgb3B0aW9ucyB9KTtcbiAgICB9XG4gICAgaHNjYW5CdWZmZXJTdHJlYW0oa2V5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNjYW5TdHJlYW0oXCJoc2NhbkJ1ZmZlclwiLCB7IGtleSwgb3B0aW9ucyB9KTtcbiAgICB9XG4gICAgenNjYW5TdHJlYW0oa2V5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNjYW5TdHJlYW0oXCJ6c2NhblwiLCB7IGtleSwgb3B0aW9ucyB9KTtcbiAgICB9XG4gICAgenNjYW5CdWZmZXJTdHJlYW0oa2V5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNjYW5TdHJlYW0oXCJ6c2NhbkJ1ZmZlclwiLCB7IGtleSwgb3B0aW9ucyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW1pdCBvbmx5IHdoZW4gdGhlcmUncyBhdCBsZWFzdCBvbmUgbGlzdGVuZXIuXG4gICAgICpcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgc2lsZW50RW1pdChldmVudE5hbWUsIGFyZykge1xuICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgIGlmIChldmVudE5hbWUgPT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgZXJyb3IgPSBhcmc7XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IFwiZW5kXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tYW51YWxseUNsb3NpbmcpIHtcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgY29ubmVjdGlvbiByZWxhdGVkIGVycm9ycyB3aGVuIG1hbnVhbGx5IGRpc2Nvbm5lY3RpbmdcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IubWVzc2FnZSA9PT0gdXRpbHNfMS5DT05ORUNUSU9OX0NMT1NFRF9FUlJPUl9NU0cgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLnN5c2NhbGwgPT09IFwiY29ubmVjdFwiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5zeXNjYWxsID09PSBcInJlYWRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5saXN0ZW5lcnMoZXZlbnROYW1lKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbaW9yZWRpc10gVW5oYW5kbGVkIGVycm9yIGV2ZW50OlwiLCBlcnJvci5zdGFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgcmVjb3ZlckZyb21GYXRhbEVycm9yKF9jb21tYW5kRXJyb3IsIGVyciwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLmZsdXNoUXVldWUoZXJyLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5zaWxlbnRFbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgdGhpcy5kaXNjb25uZWN0KHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgaGFuZGxlUmVjb25uZWN0aW9uKGVyciwgaXRlbSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGxldCBuZWVkUmVjb25uZWN0ID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb25uZWN0T25FcnJvcikge1xuICAgICAgICAgICAgbmVlZFJlY29ubmVjdCA9IHRoaXMub3B0aW9ucy5yZWNvbm5lY3RPbkVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChuZWVkUmVjb25uZWN0KSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBjYXNlIHRydWU6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzICE9PSBcInJlY29ubmVjdGluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXRlbS5jb21tYW5kLnJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyAhPT0gXCJyZWNvbm5lY3RpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoKF9hID0gdGhpcy5jb25kaXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3QpICE9PSBpdGVtLnNlbGVjdCAmJlxuICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbW1hbmQubmFtZSAhPT0gXCJzZWxlY3RcIikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdChpdGVtLnNlbGVjdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kQ29tbWFuZChpdGVtLmNvbW1hbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpdGVtLmNvbW1hbmQucmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGRlc2NyaXB0aW9uIG9mIHRoZSBjb25uZWN0aW9uLiBVc2VkIGZvciBkZWJ1Z2dpbmcuXG4gICAgICovXG4gICAgX2dldERlc2NyaXB0aW9uKCkge1xuICAgICAgICBsZXQgZGVzY3JpcHRpb247XG4gICAgICAgIGlmIChcInBhdGhcIiBpbiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhdGgpIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5vcHRpb25zLnBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5zdHJlYW0gJiZcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtLnJlbW90ZUFkZHJlc3MgJiZcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtLnJlbW90ZVBvcnQpIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5zdHJlYW0ucmVtb3RlQWRkcmVzcyArIFwiOlwiICsgdGhpcy5zdHJlYW0ucmVtb3RlUG9ydDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChcImhvc3RcIiBpbiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmhvc3QpIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5vcHRpb25zLmhvc3QgKyBcIjpcIiArIHRoaXMub3B0aW9ucy5wb3J0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gVW5leHBlY3RlZFxuICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29ubmVjdGlvbk5hbWUpIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uICs9IGAgKCR7dGhpcy5vcHRpb25zLmNvbm5lY3Rpb25OYW1lfSlgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgcmVzZXRDb21tYW5kUXVldWUoKSB7XG4gICAgICAgIHRoaXMuY29tbWFuZFF1ZXVlID0gbmV3IERlcXVlKCk7XG4gICAgfVxuICAgIHJlc2V0T2ZmbGluZVF1ZXVlKCkge1xuICAgICAgICB0aGlzLm9mZmxpbmVRdWV1ZSA9IG5ldyBEZXF1ZSgpO1xuICAgIH1cbiAgICBwYXJzZU9wdGlvbnMoLi4uYXJncykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgIGxldCBpc1RscyA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV07XG4gICAgICAgICAgICBpZiAoYXJnID09PSBudWxsIHx8IHR5cGVvZiBhcmcgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgKDAsIGxvZGFzaF8xLmRlZmF1bHRzKShvcHRpb25zLCBhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICgwLCBsb2Rhc2hfMS5kZWZhdWx0cykob3B0aW9ucywgKDAsIHV0aWxzXzEucGFyc2VVUkwpKGFyZykpO1xuICAgICAgICAgICAgICAgIGlmIChhcmcuc3RhcnRzV2l0aChcInJlZGlzczovL1wiKSkge1xuICAgICAgICAgICAgICAgICAgICBpc1RscyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFyZyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMucG9ydCA9IGFyZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnQgXCIgKyBhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Rscykge1xuICAgICAgICAgICAgKDAsIGxvZGFzaF8xLmRlZmF1bHRzKShvcHRpb25zLCB7IHRsczogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICAoMCwgbG9kYXNoXzEuZGVmYXVsdHMpKG9wdGlvbnMsIFJlZGlzLmRlZmF1bHRPcHRpb25zKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnBvcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucG9ydCA9IHBhcnNlSW50KG9wdGlvbnMucG9ydCwgMTApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kYiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgb3B0aW9ucy5kYiA9IHBhcnNlSW50KG9wdGlvbnMuZGIsIDEwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHRoaXMub3B0aW9ucyA9ICgwLCB1dGlsc18xLnJlc29sdmVUTFNQcm9maWxlKShvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIGluc3RhbmNlJ3Mgc3RhdHVzXG4gICAgICovXG4gICAgc2V0U3RhdHVzKHN0YXR1cywgYXJnKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgaWYgKGRlYnVnLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGRlYnVnKFwic3RhdHVzWyVzXTogJXMgLT4gJXNcIiwgdGhpcy5fZ2V0RGVzY3JpcHRpb24oKSwgdGhpcy5zdGF0dXMgfHwgXCJbZW1wdHldXCIsIHN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2sodGhpcy5lbWl0LmJpbmQodGhpcywgc3RhdHVzLCBhcmcpKTtcbiAgICB9XG4gICAgY3JlYXRlU2NhblN0cmVhbShjb21tYW5kLCB7IGtleSwgb3B0aW9ucyA9IHt9IH0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTY2FuU3RyZWFtXzEuZGVmYXVsdCh7XG4gICAgICAgICAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICByZWRpczogdGhpcyxcbiAgICAgICAgICAgIGNvbW1hbmQ6IGNvbW1hbmQsXG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmx1c2ggb2ZmbGluZSBxdWV1ZSBhbmQgY29tbWFuZCBxdWV1ZSB3aXRoIGVycm9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVycm9yIFRoZSBlcnJvciBvYmplY3QgdG8gc2VuZCB0byB0aGUgY29tbWFuZHNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBvcHRpb25zXG4gICAgICovXG4gICAgZmx1c2hRdWV1ZShlcnJvciwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gKDAsIGxvZGFzaF8xLmRlZmF1bHRzKSh7fSwgb3B0aW9ucywge1xuICAgICAgICAgICAgb2ZmbGluZVF1ZXVlOiB0cnVlLFxuICAgICAgICAgICAgY29tbWFuZFF1ZXVlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGl0ZW07XG4gICAgICAgIGlmIChvcHRpb25zLm9mZmxpbmVRdWV1ZSkge1xuICAgICAgICAgICAgd2hpbGUgKChpdGVtID0gdGhpcy5vZmZsaW5lUXVldWUuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmNvbW1hbmQucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5jb21tYW5kUXVldWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbW1hbmRRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtLnJlbW92ZUFsbExpc3RlbmVycyhcImRhdGFcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlICgoaXRlbSA9IHRoaXMuY29tbWFuZFF1ZXVlLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY29tbWFuZC5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVjayB3aGV0aGVyIFJlZGlzIGhhcyBmaW5pc2hlZCBsb2FkaW5nIHRoZSBwZXJzaXN0ZW50IGRhdGEgYW5kIGlzIGFibGUgdG9cbiAgICAgKiBwcm9jZXNzIGNvbW1hbmRzLlxuICAgICAqL1xuICAgIF9yZWFkeUNoZWNrKGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5pbmZvKGZ1bmN0aW9uIChlcnIsIHJlcykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcyhcIk5PUEVSTVwiKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFNraXBwaW5nIHRoZSByZWFkeSBjaGVjayBiZWNhdXNlIElORk8gY29tbWFuZCBmYWlsczogXCIke2Vyci5tZXNzYWdlfVwiLiBZb3UgY2FuIGRpc2FibGUgcmVhZHkgY2hlY2sgd2l0aCBcImVuYWJsZVJlYWR5Q2hlY2tcIi4gTW9yZTogaHR0cHM6Ly9naXRodWIuY29tL2x1aW4vaW9yZWRpcy93aWtpL0Rpc2FibGUtcmVhZHktY2hlY2suYCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCB7fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXMgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgcmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gcmVzLnNwbGl0KFwiXFxyXFxuXCIpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtmaWVsZE5hbWUsIC4uLmZpZWxkVmFsdWVQYXJ0c10gPSBsaW5lc1tpXS5zcGxpdChcIjpcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IGZpZWxkVmFsdWVQYXJ0cy5qb2luKFwiOlwiKTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpbmZvW2ZpZWxkTmFtZV0gPSBmaWVsZFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaW5mby5sb2FkaW5nIHx8IGluZm8ubG9hZGluZyA9PT0gXCIwXCIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBpbmZvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvYWRpbmdFdGFNcyA9IChpbmZvLmxvYWRpbmdfZXRhX3NlY29uZHMgfHwgMSkgKiAxMDAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5VGltZSA9IF90aGlzLm9wdGlvbnMubWF4TG9hZGluZ1JldHJ5VGltZSAmJlxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5vcHRpb25zLm1heExvYWRpbmdSZXRyeVRpbWUgPCBsb2FkaW5nRXRhTXNcbiAgICAgICAgICAgICAgICAgICAgPyBfdGhpcy5vcHRpb25zLm1heExvYWRpbmdSZXRyeVRpbWVcbiAgICAgICAgICAgICAgICAgICAgOiBsb2FkaW5nRXRhTXM7XG4gICAgICAgICAgICAgICAgZGVidWcoXCJSZWRpcyBzZXJ2ZXIgc3RpbGwgbG9hZGluZywgdHJ5aW5nIGFnYWluIGluIFwiICsgcmV0cnlUaW1lICsgXCJtc1wiKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3JlYWR5Q2hlY2soY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH0sIHJldHJ5VGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKGxvZGFzaF8xLm5vb3ApO1xuICAgIH1cbn1cblJlZGlzLkNsdXN0ZXIgPSBjbHVzdGVyXzEuZGVmYXVsdDtcblJlZGlzLkNvbW1hbmQgPSBDb21tYW5kXzEuZGVmYXVsdDtcbi8qKlxuICogRGVmYXVsdCBvcHRpb25zXG4gKi9cblJlZGlzLmRlZmF1bHRPcHRpb25zID0gUmVkaXNPcHRpb25zXzEuREVGQVVMVF9SRURJU19PUFRJT05TO1xuKDAsIGFwcGx5TWl4aW5fMS5kZWZhdWx0KShSZWRpcywgZXZlbnRzXzEuRXZlbnRFbWl0dGVyKTtcbigwLCB0cmFuc2FjdGlvbl8xLmFkZFRyYW5zYWN0aW9uU3VwcG9ydCkoUmVkaXMucHJvdG90eXBlKTtcbmV4cG9ydHMuZGVmYXVsdCA9IFJlZGlzO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/Redis.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/ScanStream.js":
/*!**************************************************!*\
!*** ./node_modules/ioredis/built/ScanStream.js ***!
\**************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst stream_1 = __webpack_require__(/*! stream */ \"stream\");\n/**\n * Convenient class to convert the process of scanning keys to a readable stream.\n */\nclass ScanStream extends stream_1.Readable {\n constructor(opt) {\n super(opt);\n this.opt = opt;\n this._redisCursor = \"0\";\n this._redisDrained = false;\n }\n _read() {\n if (this._redisDrained) {\n this.push(null);\n return;\n }\n const args = [this._redisCursor];\n if (this.opt.key) {\n args.unshift(this.opt.key);\n }\n if (this.opt.match) {\n args.push(\"MATCH\", this.opt.match);\n }\n if (this.opt.type) {\n args.push(\"TYPE\", this.opt.type);\n }\n if (this.opt.count) {\n args.push(\"COUNT\", String(this.opt.count));\n }\n if (this.opt.noValues) {\n args.push(\"NOVALUES\");\n }\n this.opt.redis[this.opt.command](args, (err, res) => {\n if (err) {\n this.emit(\"error\", err);\n return;\n }\n this._redisCursor = res[0] instanceof Buffer ? res[0].toString() : res[0];\n if (this._redisCursor === \"0\") {\n this._redisDrained = true;\n }\n this.push(res[1]);\n });\n }\n close() {\n this._redisDrained = true;\n }\n}\nexports[\"default\"] = ScanStream;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9TY2FuU3RyZWFtLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGlCQUFpQixtQkFBTyxDQUFDLHNCQUFRO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L1NjYW5TdHJlYW0uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBzdHJlYW1fMSA9IHJlcXVpcmUoXCJzdHJlYW1cIik7XG4vKipcbiAqIENvbnZlbmllbnQgY2xhc3MgdG8gY29udmVydCB0aGUgcHJvY2VzcyBvZiBzY2FubmluZyBrZXlzIHRvIGEgcmVhZGFibGUgc3RyZWFtLlxuICovXG5jbGFzcyBTY2FuU3RyZWFtIGV4dGVuZHMgc3RyZWFtXzEuUmVhZGFibGUge1xuICAgIGNvbnN0cnVjdG9yKG9wdCkge1xuICAgICAgICBzdXBlcihvcHQpO1xuICAgICAgICB0aGlzLm9wdCA9IG9wdDtcbiAgICAgICAgdGhpcy5fcmVkaXNDdXJzb3IgPSBcIjBcIjtcbiAgICAgICAgdGhpcy5fcmVkaXNEcmFpbmVkID0gZmFsc2U7XG4gICAgfVxuICAgIF9yZWFkKCkge1xuICAgICAgICBpZiAodGhpcy5fcmVkaXNEcmFpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJncyA9IFt0aGlzLl9yZWRpc0N1cnNvcl07XG4gICAgICAgIGlmICh0aGlzLm9wdC5rZXkpIHtcbiAgICAgICAgICAgIGFyZ3MudW5zaGlmdCh0aGlzLm9wdC5rZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdC5tYXRjaCkge1xuICAgICAgICAgICAgYXJncy5wdXNoKFwiTUFUQ0hcIiwgdGhpcy5vcHQubWF0Y2gpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdC50eXBlKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goXCJUWVBFXCIsIHRoaXMub3B0LnR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdC5jb3VudCkge1xuICAgICAgICAgICAgYXJncy5wdXNoKFwiQ09VTlRcIiwgU3RyaW5nKHRoaXMub3B0LmNvdW50KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0Lm5vVmFsdWVzKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goXCJOT1ZBTFVFU1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdC5yZWRpc1t0aGlzLm9wdC5jb21tYW5kXShhcmdzLCAoZXJyLCByZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlZGlzQ3Vyc29yID0gcmVzWzBdIGluc3RhbmNlb2YgQnVmZmVyID8gcmVzWzBdLnRvU3RyaW5nKCkgOiByZXNbMF07XG4gICAgICAgICAgICBpZiAodGhpcy5fcmVkaXNDdXJzb3IgPT09IFwiMFwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVkaXNEcmFpbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHVzaChyZXNbMV0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuX3JlZGlzRHJhaW5lZCA9IHRydWU7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gU2NhblN0cmVhbTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/ScanStream.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/Script.js":
/*!**********************************************!*\
!*** ./node_modules/ioredis/built/Script.js ***!
\**********************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst crypto_1 = __webpack_require__(/*! crypto */ \"crypto\");\nconst Command_1 = __webpack_require__(/*! ./Command */ \"(rsc)/./node_modules/ioredis/built/Command.js\");\nconst standard_as_callback_1 = __webpack_require__(/*! standard-as-callback */ \"(rsc)/./node_modules/standard-as-callback/built/index.js\");\nclass Script {\n constructor(lua, numberOfKeys = null, keyPrefix = \"\", readOnly = false) {\n this.lua = lua;\n this.numberOfKeys = numberOfKeys;\n this.keyPrefix = keyPrefix;\n this.readOnly = readOnly;\n this.sha = (0, crypto_1.createHash)(\"sha1\").update(lua).digest(\"hex\");\n const sha = this.sha;\n const socketHasScriptLoaded = new WeakSet();\n this.Command = class CustomScriptCommand extends Command_1.default {\n toWritable(socket) {\n const origReject = this.reject;\n this.reject = (err) => {\n if (err.message.indexOf(\"NOSCRIPT\") !== -1) {\n socketHasScriptLoaded.delete(socket);\n }\n origReject.call(this, err);\n };\n if (!socketHasScriptLoaded.has(socket)) {\n socketHasScriptLoaded.add(socket);\n this.name = \"eval\";\n this.args[0] = lua;\n }\n else if (this.name === \"eval\") {\n this.name = \"evalsha\";\n this.args[0] = sha;\n }\n return super.toWritable(socket);\n }\n };\n }\n execute(container, args, options, callback) {\n if (typeof this.numberOfKeys === \"number\") {\n args.unshift(this.numberOfKeys);\n }\n if (this.keyPrefix) {\n options.keyPrefix = this.keyPrefix;\n }\n if (this.readOnly) {\n options.readOnly = true;\n }\n const evalsha = new this.Command(\"evalsha\", [this.sha, ...args], options);\n evalsha.promise = evalsha.promise.catch((err) => {\n if (err.message.indexOf(\"NOSCRIPT\") === -1) {\n throw err;\n }\n // Resend the same custom evalsha command that gets transformed\n // to an eval in case it's not loaded yet on the connection.\n const resend = new this.Command(\"evalsha\", [this.sha, ...args], options);\n const client = container.isPipeline ? container.redis : container;\n return client.sendCommand(resend);\n });\n (0, standard_as_callback_1.default)(evalsha.promise, callback);\n return container.sendCommand(evalsha);\n }\n}\nexports[\"default\"] = Script;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9TY3JpcHQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsaUJBQWlCLG1CQUFPLENBQUMsc0JBQVE7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsZ0VBQVc7QUFDckMsK0JBQStCLG1CQUFPLENBQUMsc0ZBQXNCO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L1NjcmlwdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNyeXB0b18xID0gcmVxdWlyZShcImNyeXB0b1wiKTtcbmNvbnN0IENvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL0NvbW1hbmRcIik7XG5jb25zdCBzdGFuZGFyZF9hc19jYWxsYmFja18xID0gcmVxdWlyZShcInN0YW5kYXJkLWFzLWNhbGxiYWNrXCIpO1xuY2xhc3MgU2NyaXB0IHtcbiAgICBjb25zdHJ1Y3RvcihsdWEsIG51bWJlck9mS2V5cyA9IG51bGwsIGtleVByZWZpeCA9IFwiXCIsIHJlYWRPbmx5ID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5sdWEgPSBsdWE7XG4gICAgICAgIHRoaXMubnVtYmVyT2ZLZXlzID0gbnVtYmVyT2ZLZXlzO1xuICAgICAgICB0aGlzLmtleVByZWZpeCA9IGtleVByZWZpeDtcbiAgICAgICAgdGhpcy5yZWFkT25seSA9IHJlYWRPbmx5O1xuICAgICAgICB0aGlzLnNoYSA9ICgwLCBjcnlwdG9fMS5jcmVhdGVIYXNoKShcInNoYTFcIikudXBkYXRlKGx1YSkuZGlnZXN0KFwiaGV4XCIpO1xuICAgICAgICBjb25zdCBzaGEgPSB0aGlzLnNoYTtcbiAgICAgICAgY29uc3Qgc29ja2V0SGFzU2NyaXB0TG9hZGVkID0gbmV3IFdlYWtTZXQoKTtcbiAgICAgICAgdGhpcy5Db21tYW5kID0gY2xhc3MgQ3VzdG9tU2NyaXB0Q29tbWFuZCBleHRlbmRzIENvbW1hbmRfMS5kZWZhdWx0IHtcbiAgICAgICAgICAgIHRvV3JpdGFibGUoc29ja2V0KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ1JlamVjdCA9IHRoaXMucmVqZWN0O1xuICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0ID0gKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5kZXhPZihcIk5PU0NSSVBUXCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0SGFzU2NyaXB0TG9hZGVkLmRlbGV0ZShzb2NrZXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9yaWdSZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKCFzb2NrZXRIYXNTY3JpcHRMb2FkZWQuaGFzKHNvY2tldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc29ja2V0SGFzU2NyaXB0TG9hZGVkLmFkZChzb2NrZXQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSBcImV2YWxcIjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmdzWzBdID0gbHVhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm5hbWUgPT09IFwiZXZhbFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9IFwiZXZhbHNoYVwiO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFyZ3NbMF0gPSBzaGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdXBlci50b1dyaXRhYmxlKHNvY2tldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIGV4ZWN1dGUoY29udGFpbmVyLCBhcmdzLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMubnVtYmVyT2ZLZXlzID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBhcmdzLnVuc2hpZnQodGhpcy5udW1iZXJPZktleXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmtleVByZWZpeCkge1xuICAgICAgICAgICAgb3B0aW9ucy5rZXlQcmVmaXggPSB0aGlzLmtleVByZWZpeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgICAgICAgb3B0aW9ucy5yZWFkT25seSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZhbHNoYSA9IG5ldyB0aGlzLkNvbW1hbmQoXCJldmFsc2hhXCIsIFt0aGlzLnNoYSwgLi4uYXJnc10sIG9wdGlvbnMpO1xuICAgICAgICBldmFsc2hhLnByb21pc2UgPSBldmFsc2hhLnByb21pc2UuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlLmluZGV4T2YoXCJOT1NDUklQVFwiKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZXNlbmQgdGhlIHNhbWUgY3VzdG9tIGV2YWxzaGEgY29tbWFuZCB0aGF0IGdldHMgdHJhbnNmb3JtZWRcbiAgICAgICAgICAgIC8vIHRvIGFuIGV2YWwgaW4gY2FzZSBpdCdzIG5vdCBsb2FkZWQgeWV0IG9uIHRoZSBjb25uZWN0aW9uLlxuICAgICAgICAgICAgY29uc3QgcmVzZW5kID0gbmV3IHRoaXMuQ29tbWFuZChcImV2YWxzaGFcIiwgW3RoaXMuc2hhLCAuLi5hcmdzXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBjbGllbnQgPSBjb250YWluZXIuaXNQaXBlbGluZSA/IGNvbnRhaW5lci5yZWRpcyA6IGNvbnRhaW5lcjtcbiAgICAgICAgICAgIHJldHVybiBjbGllbnQuc2VuZENvbW1hbmQocmVzZW5kKTtcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCBzdGFuZGFyZF9hc19jYWxsYmFja18xLmRlZmF1bHQpKGV2YWxzaGEucHJvbWlzZSwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gY29udGFpbmVyLnNlbmRDb21tYW5kKGV2YWxzaGEpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFNjcmlwdDtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/Script.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/SubscriptionSet.js":
/*!*******************************************************!*\
!*** ./node_modules/ioredis/built/SubscriptionSet.js ***!
\*******************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n/**\n * Tiny class to simplify dealing with subscription set\n */\nclass SubscriptionSet {\n constructor() {\n this.set = {\n subscribe: {},\n psubscribe: {},\n ssubscribe: {},\n };\n }\n add(set, channel) {\n this.set[mapSet(set)][channel] = true;\n }\n del(set, channel) {\n delete this.set[mapSet(set)][channel];\n }\n channels(set) {\n return Object.keys(this.set[mapSet(set)]);\n }\n isEmpty() {\n return (this.channels(\"subscribe\").length === 0 &&\n this.channels(\"psubscribe\").length === 0 &&\n this.channels(\"ssubscribe\").length === 0);\n }\n}\nexports[\"default\"] = SubscriptionSet;\nfunction mapSet(set) {\n if (set === \"unsubscribe\") {\n return \"subscribe\";\n }\n if (set === \"punsubscribe\") {\n return \"psubscribe\";\n }\n if (set === \"sunsubscribe\") {\n return \"ssubscribe\";\n }\n return set;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9TdWJzY3JpcHRpb25TZXQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L1N1YnNjcmlwdGlvblNldC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKlxuICogVGlueSBjbGFzcyB0byBzaW1wbGlmeSBkZWFsaW5nIHdpdGggc3Vic2NyaXB0aW9uIHNldFxuICovXG5jbGFzcyBTdWJzY3JpcHRpb25TZXQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnNldCA9IHtcbiAgICAgICAgICAgIHN1YnNjcmliZToge30sXG4gICAgICAgICAgICBwc3Vic2NyaWJlOiB7fSxcbiAgICAgICAgICAgIHNzdWJzY3JpYmU6IHt9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhZGQoc2V0LCBjaGFubmVsKSB7XG4gICAgICAgIHRoaXMuc2V0W21hcFNldChzZXQpXVtjaGFubmVsXSA9IHRydWU7XG4gICAgfVxuICAgIGRlbChzZXQsIGNoYW5uZWwpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2V0W21hcFNldChzZXQpXVtjaGFubmVsXTtcbiAgICB9XG4gICAgY2hhbm5lbHMoc2V0KSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnNldFttYXBTZXQoc2V0KV0pO1xuICAgIH1cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuY2hhbm5lbHMoXCJzdWJzY3JpYmVcIikubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxzKFwicHN1YnNjcmliZVwiKS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHMoXCJzc3Vic2NyaWJlXCIpLmxlbmd0aCA9PT0gMCk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gU3Vic2NyaXB0aW9uU2V0O1xuZnVuY3Rpb24gbWFwU2V0KHNldCkge1xuICAgIGlmIChzZXQgPT09IFwidW5zdWJzY3JpYmVcIikge1xuICAgICAgICByZXR1cm4gXCJzdWJzY3JpYmVcIjtcbiAgICB9XG4gICAgaWYgKHNldCA9PT0gXCJwdW5zdWJzY3JpYmVcIikge1xuICAgICAgICByZXR1cm4gXCJwc3Vic2NyaWJlXCI7XG4gICAgfVxuICAgIGlmIChzZXQgPT09IFwic3Vuc3Vic2NyaWJlXCIpIHtcbiAgICAgICAgcmV0dXJuIFwic3N1YnNjcmliZVwiO1xuICAgIH1cbiAgICByZXR1cm4gc2V0O1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/SubscriptionSet.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/autoPipelining.js":
/*!******************************************************!*\
!*** ./node_modules/ioredis/built/autoPipelining.js ***!
\******************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.executeWithAutoPipelining = exports.getFirstValueInFlattenedArray = exports.shouldUseAutoPipelining = exports.notAllowedAutoPipelineCommands = exports.kCallbacks = exports.kExec = void 0;\nconst lodash_1 = __webpack_require__(/*! ./utils/lodash */ \"(rsc)/./node_modules/ioredis/built/utils/lodash.js\");\nconst calculateSlot = __webpack_require__(/*! cluster-key-slot */ \"(rsc)/./node_modules/cluster-key-slot/lib/index.js\");\nconst standard_as_callback_1 = __webpack_require__(/*! standard-as-callback */ \"(rsc)/./node_modules/standard-as-callback/built/index.js\");\nexports.kExec = Symbol(\"exec\");\nexports.kCallbacks = Symbol(\"callbacks\");\nexports.notAllowedAutoPipelineCommands = [\n \"auth\",\n \"info\",\n \"script\",\n \"quit\",\n \"cluster\",\n \"pipeline\",\n \"multi\",\n \"subscribe\",\n \"psubscribe\",\n \"unsubscribe\",\n \"unpsubscribe\",\n \"select\",\n];\nfunction executeAutoPipeline(client, slotKey) {\n /*\n If a pipeline is already executing, keep queueing up commands\n since ioredis won't serve two pipelines at the same time\n */\n if (client._runningAutoPipelines.has(slotKey)) {\n return;\n }\n if (!client._autoPipelines.has(slotKey)) {\n /*\n Rare edge case. Somehow, something has deleted this running autopipeline in an immediate\n call to executeAutoPipeline.\n \n Maybe the callback in the pipeline.exec is sometimes called in the same tick,\n e.g. if redis is disconnected?\n */\n return;\n }\n client._runningAutoPipelines.add(slotKey);\n // Get the pipeline and immediately delete it so that new commands are queued on a new pipeline\n const pipeline = client._autoPipelines.get(slotKey);\n client._autoPipelines.delete(slotKey);\n const callbacks = pipeline[exports.kCallbacks];\n // Stop keeping a reference to callbacks immediately after the callbacks stop being used.\n // This allows the GC to reclaim objects referenced by callbacks, especially with 16384 slots\n // in Redis.Cluster\n pipeline[exports.kCallbacks] = null;\n // Perform the call\n pipeline.exec(function (err, results) {\n client._runningAutoPipelines.delete(slotKey);\n /*\n Invoke all callback in nextTick so the stack is cleared\n and callbacks can throw errors without affecting other callbacks.\n */\n if (err) {\n for (let i = 0; i < callbacks.length; i++) {\n process.nextTick(callbacks[i], err);\n }\n }\n else {\n for (let i = 0; i < callbacks.length; i++) {\n process.nextTick(callbacks[i], ...results[i]);\n }\n }\n // If there is another pipeline on the same node, immediately execute it without waiting for nextTick\n if (client._autoPipelines.has(slotKey)) {\n executeAutoPipeline(client, slotKey);\n }\n });\n}\nfunction shouldUseAutoPipelining(client, functionName, commandName) {\n return (functionName &&\n client.options.enableAutoPipelining &&\n !client.isPipeline &&\n !exports.notAllowedAutoPipelineCommands.includes(commandName) &&\n !client.options.autoPipeliningIgnoredCommands.includes(commandName));\n}\nexports.shouldUseAutoPipelining = shouldUseAutoPipelining;\nfunction getFirstValueInFlattenedArray(args) {\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (typeof arg === \"string\") {\n return arg;\n }\n else if (Array.isArray(arg) || (0, lodash_1.isArguments)(arg)) {\n if (arg.length === 0) {\n continue;\n }\n return arg[0];\n }\n const flattened = [arg].flat();\n if (flattened.length > 0) {\n return flattened[0];\n }\n }\n return undefined;\n}\nexports.getFirstValueInFlattenedArray = getFirstValueInFlattenedArray;\nfunction executeWithAutoPipelining(client, functionName, commandName, args, callback) {\n // On cluster mode let's wait for slots to be available\n if (client.isCluster && !client.slots.length) {\n if (client.status === \"wait\")\n client.connect().catch(lodash_1.noop);\n return (0, standard_as_callback_1.default)(new Promise(function (resolve, reject) {\n client.delayUntilReady((err) => {\n if (err) {\n reject(err);\n return;\n }\n executeWithAutoPipelining(client, functionName, commandName, args, null).then(resolve, reject);\n });\n }), callback);\n }\n // If we have slot information, we can improve routing by grouping slots served by the same subset of nodes\n // Note that the first value in args may be a (possibly empty) array.\n // ioredis will only flatten one level of the array, in the Command constructor.\n const prefix = client.options.keyPrefix || \"\";\n const slotKey = client.isCluster\n ? client.slots[calculateSlot(`${prefix}${getFirstValueInFlattenedArray(args)}`)].join(\",\")\n : \"main\";\n if (!client._autoPipelines.has(slotKey)) {\n const pipeline = client.pipeline();\n pipeline[exports.kExec] = false;\n pipeline[exports.kCallbacks] = [];\n client._autoPipelines.set(slotKey, pipeline);\n }\n const pipeline = client._autoPipelines.get(slotKey);\n /*\n Mark the pipeline as scheduled.\n The symbol will make sure that the pipeline is only scheduled once per tick.\n New commands are appended to an already scheduled pipeline.\n */\n if (!pipeline[exports.kExec]) {\n pipeline[exports.kExec] = true;\n /*\n Deferring with setImmediate so we have a chance to capture multiple\n commands that can be scheduled by I/O events already in the event loop queue.\n */\n setImmediate(executeAutoPipeline, client, slotKey);\n }\n // Create the promise which will execute the command in the pipeline.\n const autoPipelinePromise = new Promise(function (resolve, reject) {\n pipeline[exports.kCallbacks].push(function (err, value) {\n if (err) {\n reject(err);\n return;\n }\n resolve(value);\n });\n if (functionName === \"call\") {\n args.unshift(commandName);\n }\n pipeline[functionName](...args);\n });\n return (0, standard_as_callback_1.default)(autoPipelinePromise, callback);\n}\nexports.executeWithAutoPipelining = executeWithAutoPipelining;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9hdXRvUGlwZWxpbmluZy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxpQ0FBaUMsR0FBRyxxQ0FBcUMsR0FBRywrQkFBK0IsR0FBRyxzQ0FBc0MsR0FBRyxrQkFBa0IsR0FBRyxhQUFhO0FBQ3pMLGlCQUFpQixtQkFBTyxDQUFDLDBFQUFnQjtBQUN6QyxzQkFBc0IsbUJBQU8sQ0FBQyw0RUFBa0I7QUFDaEQsK0JBQStCLG1CQUFPLENBQUMsc0ZBQXNCO0FBQzdELGFBQWE7QUFDYixrQkFBa0I7QUFDbEIsc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixzQkFBc0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsc0JBQXNCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTyxFQUFFLG9DQUFvQztBQUNyRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxpQ0FBaUMiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvYXV0b1BpcGVsaW5pbmcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV4ZWN1dGVXaXRoQXV0b1BpcGVsaW5pbmcgPSBleHBvcnRzLmdldEZpcnN0VmFsdWVJbkZsYXR0ZW5lZEFycmF5ID0gZXhwb3J0cy5zaG91bGRVc2VBdXRvUGlwZWxpbmluZyA9IGV4cG9ydHMubm90QWxsb3dlZEF1dG9QaXBlbGluZUNvbW1hbmRzID0gZXhwb3J0cy5rQ2FsbGJhY2tzID0gZXhwb3J0cy5rRXhlYyA9IHZvaWQgMDtcbmNvbnN0IGxvZGFzaF8xID0gcmVxdWlyZShcIi4vdXRpbHMvbG9kYXNoXCIpO1xuY29uc3QgY2FsY3VsYXRlU2xvdCA9IHJlcXVpcmUoXCJjbHVzdGVyLWtleS1zbG90XCIpO1xuY29uc3Qgc3RhbmRhcmRfYXNfY2FsbGJhY2tfMSA9IHJlcXVpcmUoXCJzdGFuZGFyZC1hcy1jYWxsYmFja1wiKTtcbmV4cG9ydHMua0V4ZWMgPSBTeW1ib2woXCJleGVjXCIpO1xuZXhwb3J0cy5rQ2FsbGJhY2tzID0gU3ltYm9sKFwiY2FsbGJhY2tzXCIpO1xuZXhwb3J0cy5ub3RBbGxvd2VkQXV0b1BpcGVsaW5lQ29tbWFuZHMgPSBbXG4gICAgXCJhdXRoXCIsXG4gICAgXCJpbmZvXCIsXG4gICAgXCJzY3JpcHRcIixcbiAgICBcInF1aXRcIixcbiAgICBcImNsdXN0ZXJcIixcbiAgICBcInBpcGVsaW5lXCIsXG4gICAgXCJtdWx0aVwiLFxuICAgIFwic3Vic2NyaWJlXCIsXG4gICAgXCJwc3Vic2NyaWJlXCIsXG4gICAgXCJ1bnN1YnNjcmliZVwiLFxuICAgIFwidW5wc3Vic2NyaWJlXCIsXG4gICAgXCJzZWxlY3RcIixcbl07XG5mdW5jdGlvbiBleGVjdXRlQXV0b1BpcGVsaW5lKGNsaWVudCwgc2xvdEtleSkge1xuICAgIC8qXG4gICAgICBJZiBhIHBpcGVsaW5lIGlzIGFscmVhZHkgZXhlY3V0aW5nLCBrZWVwIHF1ZXVlaW5nIHVwIGNvbW1hbmRzXG4gICAgICBzaW5jZSBpb3JlZGlzIHdvbid0IHNlcnZlIHR3byBwaXBlbGluZXMgYXQgdGhlIHNhbWUgdGltZVxuICAgICovXG4gICAgaWYgKGNsaWVudC5fcnVubmluZ0F1dG9QaXBlbGluZXMuaGFzKHNsb3RLZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFjbGllbnQuX2F1dG9QaXBlbGluZXMuaGFzKHNsb3RLZXkpKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAgUmFyZSBlZGdlIGNhc2UuIFNvbWVob3csIHNvbWV0aGluZyBoYXMgZGVsZXRlZCB0aGlzIHJ1bm5pbmcgYXV0b3BpcGVsaW5lIGluIGFuIGltbWVkaWF0ZVxuICAgICAgICAgIGNhbGwgdG8gZXhlY3V0ZUF1dG9QaXBlbGluZS5cbiAgICAgICAgIFxuICAgICAgICAgIE1heWJlIHRoZSBjYWxsYmFjayBpbiB0aGUgcGlwZWxpbmUuZXhlYyBpcyBzb21ldGltZXMgY2FsbGVkIGluIHRoZSBzYW1lIHRpY2ssXG4gICAgICAgICAgZS5nLiBpZiByZWRpcyBpcyBkaXNjb25uZWN0ZWQ/XG4gICAgICAgICovXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2xpZW50Ll9ydW5uaW5nQXV0b1BpcGVsaW5lcy5hZGQoc2xvdEtleSk7XG4gICAgLy8gR2V0IHRoZSBwaXBlbGluZSBhbmQgaW1tZWRpYXRlbHkgZGVsZXRlIGl0IHNvIHRoYXQgbmV3IGNvbW1hbmRzIGFyZSBxdWV1ZWQgb24gYSBuZXcgcGlwZWxpbmVcbiAgICBjb25zdCBwaXBlbGluZSA9IGNsaWVudC5fYXV0b1BpcGVsaW5lcy5nZXQoc2xvdEtleSk7XG4gICAgY2xpZW50Ll9hdXRvUGlwZWxpbmVzLmRlbGV0ZShzbG90S2V5KTtcbiAgICBjb25zdCBjYWxsYmFja3MgPSBwaXBlbGluZVtleHBvcnRzLmtDYWxsYmFja3NdO1xuICAgIC8vIFN0b3Aga2VlcGluZyBhIHJlZmVyZW5jZSB0byBjYWxsYmFja3MgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBzdG9wIGJlaW5nIHVzZWQuXG4gICAgLy8gVGhpcyBhbGxvd3MgdGhlIEdDIHRvIHJlY2xhaW0gb2JqZWN0cyByZWZlcmVuY2VkIGJ5IGNhbGxiYWNrcywgZXNwZWNpYWxseSB3aXRoIDE2Mzg0IHNsb3RzXG4gICAgLy8gaW4gUmVkaXMuQ2x1c3RlclxuICAgIHBpcGVsaW5lW2V4cG9ydHMua0NhbGxiYWNrc10gPSBudWxsO1xuICAgIC8vIFBlcmZvcm0gdGhlIGNhbGxcbiAgICBwaXBlbGluZS5leGVjKGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgY2xpZW50Ll9ydW5uaW5nQXV0b1BpcGVsaW5lcy5kZWxldGUoc2xvdEtleSk7XG4gICAgICAgIC8qXG4gICAgICAgICAgSW52b2tlIGFsbCBjYWxsYmFjayBpbiBuZXh0VGljayBzbyB0aGUgc3RhY2sgaXMgY2xlYXJlZFxuICAgICAgICAgIGFuZCBjYWxsYmFja3MgY2FuIHRocm93IGVycm9ycyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBjYWxsYmFja3MuXG4gICAgICAgICovXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFja3NbaV0sIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2tzW2ldLCAuLi5yZXN1bHRzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbm90aGVyIHBpcGVsaW5lIG9uIHRoZSBzYW1lIG5vZGUsIGltbWVkaWF0ZWx5IGV4ZWN1dGUgaXQgd2l0aG91dCB3YWl0aW5nIGZvciBuZXh0VGlja1xuICAgICAgICBpZiAoY2xpZW50Ll9hdXRvUGlwZWxpbmVzLmhhcyhzbG90S2V5KSkge1xuICAgICAgICAgICAgZXhlY3V0ZUF1dG9QaXBlbGluZShjbGllbnQsIHNsb3RLZXkpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzaG91bGRVc2VBdXRvUGlwZWxpbmluZyhjbGllbnQsIGZ1bmN0aW9uTmFtZSwgY29tbWFuZE5hbWUpIHtcbiAgICByZXR1cm4gKGZ1bmN0aW9uTmFtZSAmJlxuICAgICAgICBjbGllbnQub3B0aW9ucy5lbmFibGVBdXRvUGlwZWxpbmluZyAmJlxuICAgICAgICAhY2xpZW50LmlzUGlwZWxpbmUgJiZcbiAgICAgICAgIWV4cG9ydHMubm90QWxsb3dlZEF1dG9QaXBlbGluZUNvbW1hbmRzLmluY2x1ZGVzKGNvbW1hbmROYW1lKSAmJlxuICAgICAgICAhY2xpZW50Lm9wdGlvbnMuYXV0b1BpcGVsaW5pbmdJZ25vcmVkQ29tbWFuZHMuaW5jbHVkZXMoY29tbWFuZE5hbWUpKTtcbn1cbmV4cG9ydHMuc2hvdWxkVXNlQXV0b1BpcGVsaW5pbmcgPSBzaG91bGRVc2VBdXRvUGlwZWxpbmluZztcbmZ1bmN0aW9uIGdldEZpcnN0VmFsdWVJbkZsYXR0ZW5lZEFycmF5KGFyZ3MpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYXJnID0gYXJnc1tpXTtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpIHx8ICgwLCBsb2Rhc2hfMS5pc0FyZ3VtZW50cykoYXJnKSkge1xuICAgICAgICAgICAgaWYgKGFyZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcmdbMF07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmxhdHRlbmVkID0gW2FyZ10uZmxhdCgpO1xuICAgICAgICBpZiAoZmxhdHRlbmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmbGF0dGVuZWRbMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMuZ2V0Rmlyc3RWYWx1ZUluRmxhdHRlbmVkQXJyYXkgPSBnZXRGaXJzdFZhbHVlSW5GbGF0dGVuZWRBcnJheTtcbmZ1bmN0aW9uIGV4ZWN1dGVXaXRoQXV0b1BpcGVsaW5pbmcoY2xpZW50LCBmdW5jdGlvbk5hbWUsIGNvbW1hbmROYW1lLCBhcmdzLCBjYWxsYmFjaykge1xuICAgIC8vIE9uIGNsdXN0ZXIgbW9kZSBsZXQncyB3YWl0IGZvciBzbG90cyB0byBiZSBhdmFpbGFibGVcbiAgICBpZiAoY2xpZW50LmlzQ2x1c3RlciAmJiAhY2xpZW50LnNsb3RzLmxlbmd0aCkge1xuICAgICAgICBpZiAoY2xpZW50LnN0YXR1cyA9PT0gXCJ3YWl0XCIpXG4gICAgICAgICAgICBjbGllbnQuY29ubmVjdCgpLmNhdGNoKGxvZGFzaF8xLm5vb3ApO1xuICAgICAgICByZXR1cm4gKDAsIHN0YW5kYXJkX2FzX2NhbGxiYWNrXzEuZGVmYXVsdCkobmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgY2xpZW50LmRlbGF5VW50aWxSZWFkeSgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleGVjdXRlV2l0aEF1dG9QaXBlbGluaW5nKGNsaWVudCwgZnVuY3Rpb25OYW1lLCBjb21tYW5kTmFtZSwgYXJncywgbnVsbCkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIC8vIElmIHdlIGhhdmUgc2xvdCBpbmZvcm1hdGlvbiwgd2UgY2FuIGltcHJvdmUgcm91dGluZyBieSBncm91cGluZyBzbG90cyBzZXJ2ZWQgYnkgdGhlIHNhbWUgc3Vic2V0IG9mIG5vZGVzXG4gICAgLy8gTm90ZSB0aGF0IHRoZSBmaXJzdCB2YWx1ZSBpbiBhcmdzIG1heSBiZSBhIChwb3NzaWJseSBlbXB0eSkgYXJyYXkuXG4gICAgLy8gaW9yZWRpcyB3aWxsIG9ubHkgZmxhdHRlbiBvbmUgbGV2ZWwgb2YgdGhlIGFycmF5LCBpbiB0aGUgQ29tbWFuZCBjb25zdHJ1Y3Rvci5cbiAgICBjb25zdCBwcmVmaXggPSBjbGllbnQub3B0aW9ucy5rZXlQcmVmaXggfHwgXCJcIjtcbiAgICBjb25zdCBzbG90S2V5ID0gY2xpZW50LmlzQ2x1c3RlclxuICAgICAgICA/IGNsaWVudC5zbG90c1tjYWxjdWxhdGVTbG90KGAke3ByZWZpeH0ke2dldEZpcnN0VmFsdWVJbkZsYXR0ZW5lZEFycmF5KGFyZ3MpfWApXS5qb2luKFwiLFwiKVxuICAgICAgICA6IFwibWFpblwiO1xuICAgIGlmICghY2xpZW50Ll9hdXRvUGlwZWxpbmVzLmhhcyhzbG90S2V5KSkge1xuICAgICAgICBjb25zdCBwaXBlbGluZSA9IGNsaWVudC5waXBlbGluZSgpO1xuICAgICAgICBwaXBlbGluZVtleHBvcnRzLmtFeGVjXSA9IGZhbHNlO1xuICAgICAgICBwaXBlbGluZVtleHBvcnRzLmtDYWxsYmFja3NdID0gW107XG4gICAgICAgIGNsaWVudC5fYXV0b1BpcGVsaW5lcy5zZXQoc2xvdEtleSwgcGlwZWxpbmUpO1xuICAgIH1cbiAgICBjb25zdCBwaXBlbGluZSA9IGNsaWVudC5fYXV0b1BpcGVsaW5lcy5nZXQoc2xvdEtleSk7XG4gICAgLypcbiAgICAgIE1hcmsgdGhlIHBpcGVsaW5lIGFzIHNjaGVkdWxlZC5cbiAgICAgIFRoZSBzeW1ib2wgd2lsbCBtYWtlIHN1cmUgdGhhdCB0aGUgcGlwZWxpbmUgaXMgb25seSBzY2hlZHVsZWQgb25jZSBwZXIgdGljay5cbiAgICAgIE5ldyBjb21tYW5kcyBhcmUgYXBwZW5kZWQgdG8gYW4gYWxyZWFkeSBzY2hlZHVsZWQgcGlwZWxpbmUuXG4gICAgKi9cbiAgICBpZiAoIXBpcGVsaW5lW2V4cG9ydHMua0V4ZWNdKSB7XG4gICAgICAgIHBpcGVsaW5lW2V4cG9ydHMua0V4ZWNdID0gdHJ1ZTtcbiAgICAgICAgLypcbiAgICAgICAgICBEZWZlcnJpbmcgd2l0aCBzZXRJbW1lZGlhdGUgc28gd2UgaGF2ZSBhIGNoYW5jZSB0byBjYXB0dXJlIG11bHRpcGxlXG4gICAgICAgICAgY29tbWFuZHMgdGhhdCBjYW4gYmUgc2NoZWR1bGVkIGJ5IEkvTyBldmVudHMgYWxyZWFkeSBpbiB0aGUgZXZlbnQgbG9vcCBxdWV1ZS5cbiAgICAgICAgKi9cbiAgICAgICAgc2V0SW1tZWRpYXRlKGV4ZWN1dGVBdXRvUGlwZWxpbmUsIGNsaWVudCwgc2xvdEtleSk7XG4gICAgfVxuICAgIC8vIENyZWF0ZSB0aGUgcHJvbWlzZSB3aGljaCB3aWxsIGV4ZWN1dGUgdGhlIGNvbW1hbmQgaW4gdGhlIHBpcGVsaW5lLlxuICAgIGNvbnN0IGF1dG9QaXBlbGluZVByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHBpcGVsaW5lW2V4cG9ydHMua0NhbGxiYWNrc10ucHVzaChmdW5jdGlvbiAoZXJyLCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGZ1bmN0aW9uTmFtZSA9PT0gXCJjYWxsXCIpIHtcbiAgICAgICAgICAgIGFyZ3MudW5zaGlmdChjb21tYW5kTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcGlwZWxpbmVbZnVuY3Rpb25OYW1lXSguLi5hcmdzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIHN0YW5kYXJkX2FzX2NhbGxiYWNrXzEuZGVmYXVsdCkoYXV0b1BpcGVsaW5lUHJvbWlzZSwgY2FsbGJhY2spO1xufVxuZXhwb3J0cy5leGVjdXRlV2l0aEF1dG9QaXBlbGluaW5nID0gZXhlY3V0ZVdpdGhBdXRvUGlwZWxpbmluZztcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/autoPipelining.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/cluster/ClusterOptions.js":
/*!**************************************************************!*\
!*** ./node_modules/ioredis/built/cluster/ClusterOptions.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.DEFAULT_CLUSTER_OPTIONS = void 0;\nconst dns_1 = __webpack_require__(/*! dns */ \"dns\");\nexports.DEFAULT_CLUSTER_OPTIONS = {\n clusterRetryStrategy: (times) => Math.min(100 + times * 2, 2000),\n enableOfflineQueue: true,\n enableReadyCheck: true,\n scaleReads: \"master\",\n maxRedirections: 16,\n retryDelayOnMoved: 0,\n retryDelayOnFailover: 100,\n retryDelayOnClusterDown: 100,\n retryDelayOnTryAgain: 100,\n slotsRefreshTimeout: 1000,\n useSRVRecords: false,\n resolveSrv: dns_1.resolveSrv,\n dnsLookup: dns_1.lookup,\n enableAutoPipelining: false,\n autoPipeliningIgnoredCommands: [],\n shardedSubscribers: false,\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jbHVzdGVyL0NsdXN0ZXJPcHRpb25zLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELCtCQUErQjtBQUMvQixjQUFjLG1CQUFPLENBQUMsZ0JBQUs7QUFDM0IsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvY2x1c3Rlci9DbHVzdGVyT3B0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuREVGQVVMVF9DTFVTVEVSX09QVElPTlMgPSB2b2lkIDA7XG5jb25zdCBkbnNfMSA9IHJlcXVpcmUoXCJkbnNcIik7XG5leHBvcnRzLkRFRkFVTFRfQ0xVU1RFUl9PUFRJT05TID0ge1xuICAgIGNsdXN0ZXJSZXRyeVN0cmF0ZWd5OiAodGltZXMpID0+IE1hdGgubWluKDEwMCArIHRpbWVzICogMiwgMjAwMCksXG4gICAgZW5hYmxlT2ZmbGluZVF1ZXVlOiB0cnVlLFxuICAgIGVuYWJsZVJlYWR5Q2hlY2s6IHRydWUsXG4gICAgc2NhbGVSZWFkczogXCJtYXN0ZXJcIixcbiAgICBtYXhSZWRpcmVjdGlvbnM6IDE2LFxuICAgIHJldHJ5RGVsYXlPbk1vdmVkOiAwLFxuICAgIHJldHJ5RGVsYXlPbkZhaWxvdmVyOiAxMDAsXG4gICAgcmV0cnlEZWxheU9uQ2x1c3RlckRvd246IDEwMCxcbiAgICByZXRyeURlbGF5T25UcnlBZ2FpbjogMTAwLFxuICAgIHNsb3RzUmVmcmVzaFRpbWVvdXQ6IDEwMDAsXG4gICAgdXNlU1JWUmVjb3JkczogZmFsc2UsXG4gICAgcmVzb2x2ZVNydjogZG5zXzEucmVzb2x2ZVNydixcbiAgICBkbnNMb29rdXA6IGRuc18xLmxvb2t1cCxcbiAgICBlbmFibGVBdXRvUGlwZWxpbmluZzogZmFsc2UsXG4gICAgYXV0b1BpcGVsaW5pbmdJZ25vcmVkQ29tbWFuZHM6IFtdLFxuICAgIHNoYXJkZWRTdWJzY3JpYmVyczogZmFsc2UsXG59O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/cluster/ClusterOptions.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/cluster/ClusterSubscriber.js":
/*!*****************************************************************!*\
!*** ./node_modules/ioredis/built/cluster/ClusterSubscriber.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst util_1 = __webpack_require__(/*! ./util */ \"(rsc)/./node_modules/ioredis/built/cluster/util.js\");\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(rsc)/./node_modules/ioredis/built/utils/index.js\");\nconst Redis_1 = __webpack_require__(/*! ../Redis */ \"(rsc)/./node_modules/ioredis/built/Redis.js\");\nconst debug = (0, utils_1.Debug)(\"cluster:subscriber\");\nclass ClusterSubscriber {\n constructor(connectionPool, emitter, isSharded = false) {\n this.connectionPool = connectionPool;\n this.emitter = emitter;\n this.isSharded = isSharded;\n this.started = false;\n //There is only one connection for the entire pool\n this.subscriber = null;\n //The slot range for which this subscriber is responsible\n this.slotRange = [];\n this.onSubscriberEnd = () => {\n if (!this.started) {\n debug(\"subscriber has disconnected, but ClusterSubscriber is not started, so not reconnecting.\");\n return;\n }\n // If the subscriber closes whilst it's still the active connection,\n // we might as well try to connecting to a new node if possible to\n // minimise the number of missed publishes.\n debug(\"subscriber has disconnected, selecting a new one...\");\n this.selectSubscriber();\n };\n // If the current node we're using as the subscriber disappears\n // from the node pool for some reason, we will select a new one\n // to connect to.\n // Note that this event is only triggered if the connection to\n // the node has been used; cluster subscriptions are setup with\n // lazyConnect = true. It's possible for the subscriber node to\n // disappear without this method being called!\n // See https://github.com/luin/ioredis/pull/1589\n this.connectionPool.on(\"-node\", (_, key) => {\n if (!this.started || !this.subscriber) {\n return;\n }\n if ((0, util_1.getNodeKey)(this.subscriber.options) === key) {\n debug(\"subscriber has left, selecting a new one...\");\n this.selectSubscriber();\n }\n });\n this.connectionPool.on(\"+node\", () => {\n if (!this.started || this.subscriber) {\n return;\n }\n debug(\"a new node is discovered and there is no subscriber, selecting a new one...\");\n this.selectSubscriber();\n });\n }\n getInstance() {\n return this.subscriber;\n }\n /**\n * Associate this subscriber to a specific slot range.\n *\n * Returns the range or an empty array if the slot range couldn't be associated.\n *\n * BTW: This is more for debugging and testing purposes.\n *\n * @param range\n */\n associateSlotRange(range) {\n if (this.isSharded) {\n this.slotRange = range;\n }\n return this.slotRange;\n }\n start() {\n this.started = true;\n this.selectSubscriber();\n debug(\"started\");\n }\n stop() {\n this.started = false;\n if (this.subscriber) {\n this.subscriber.disconnect();\n this.subscriber = null;\n }\n }\n isStarted() {\n return this.started;\n }\n selectSubscriber() {\n const lastActiveSubscriber = this.lastActiveSubscriber;\n // Disconnect the previous subscriber even if there\n // will not be a new one.\n if (lastActiveSubscriber) {\n lastActiveSubscriber.off(\"end\", this.onSubscriberEnd);\n lastActiveSubscriber.disconnect();\n }\n if (this.subscriber) {\n this.subscriber.off(\"end\", this.onSubscriberEnd);\n this.subscriber.disconnect();\n }\n const sampleNode = (0, utils_1.sample)(this.connectionPool.getNodes());\n if (!sampleNode) {\n debug(\"selecting subscriber failed since there is no node discovered in the cluster yet\");\n this.subscriber = null;\n return;\n }\n const { options } = sampleNode;\n debug(\"selected a subscriber %s:%s\", options.host, options.port);\n /*\n * Create a specialized Redis connection for the subscription.\n * Note that auto reconnection is enabled here.\n *\n * `enableReadyCheck` is also enabled because although subscription is allowed\n * while redis is loading data from the disk, we can check if the password\n * provided for the subscriber is correct, and if not, the current subscriber\n * will be disconnected and a new subscriber will be selected.\n */\n let connectionPrefix = \"subscriber\";\n if (this.isSharded)\n connectionPrefix = \"ssubscriber\";\n this.subscriber = new Redis_1.default({\n port: options.port,\n host: options.host,\n username: options.username,\n password: options.password,\n enableReadyCheck: true,\n connectionName: (0, util_1.getConnectionName)(connectionPrefix, options.connectionName),\n lazyConnect: true,\n tls: options.tls,\n // Don't try to reconnect the subscriber connection. If the connection fails\n // we will get an end event (handled below), at which point we'll pick a new\n // node from the pool and try to connect to that as the subscriber connection.\n retryStrategy: null,\n });\n // Ignore the errors since they're handled in the connection pool.\n this.subscriber.on(\"error\", utils_1.noop);\n // The node we lost connection to may not come back up in a\n // reasonable amount of time (e.g. a slave that's taken down\n // for maintainence), we could potentially miss many published\n // messages so we should reconnect as quickly as possible, to\n // a different node if needed.\n this.subscriber.once(\"end\", this.onSubscriberEnd);\n // Re-subscribe previous channels\n const previousChannels = { subscribe: [], psubscribe: [], ssubscribe: [] };\n if (lastActiveSubscriber) {\n const condition = lastActiveSubscriber.condition || lastActiveSubscriber.prevCondition;\n if (condition && condition.subscriber) {\n previousChannels.subscribe = condition.subscriber.channels(\"subscribe\");\n previousChannels.psubscribe =\n condition.subscriber.channels(\"psubscribe\");\n previousChannels.ssubscribe =\n condition.subscriber.channels(\"ssubscribe\");\n }\n }\n if (previousChannels.subscribe.length ||\n previousChannels.psubscribe.length ||\n previousChannels.ssubscribe.length) {\n let pending = 0;\n for (const type of [\"subscribe\", \"psubscribe\", \"ssubscribe\"]) {\n const channels = previousChannels[type];\n if (channels.length) {\n pending += 1;\n debug(\"%s %d channels\", type, channels.length);\n this.subscriber[type](channels)\n .then(() => {\n if (!--pending) {\n this.lastActiveSubscriber = this.subscriber;\n }\n })\n .catch(() => {\n // TODO: should probably disconnect the subscriber and try again.\n debug(\"failed to %s %d channels\", type, channels.length);\n });\n }\n }\n }\n else {\n this.lastActiveSubscriber = this.subscriber;\n }\n for (const event of [\n \"message\",\n \"messageBuffer\",\n ]) {\n this.subscriber.on(event, (arg1, arg2) => {\n this.emitter.emit(event, arg1, arg2);\n });\n }\n for (const event of [\"pmessage\", \"pmessageBuffer\"]) {\n this.subscriber.on(event, (arg1, arg2, arg3) => {\n this.emitter.emit(event, arg1, arg2, arg3);\n });\n }\n if (this.isSharded == true) {\n for (const event of [\n \"smessage\",\n \"smessageBuffer\",\n ]) {\n this.subscriber.on(event, (arg1, arg2) => {\n this.emitter.emit(event, arg1, arg2);\n });\n }\n }\n }\n}\nexports[\"default\"] = ClusterSubscriber;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jbHVzdGVyL0NsdXN0ZXJTdWJzY3JpYmVyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGVBQWUsbUJBQU8sQ0FBQyxrRUFBUTtBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxtRUFBVTtBQUNsQyxnQkFBZ0IsbUJBQU8sQ0FBQyw2REFBVTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2NsdXN0ZXIvQ2x1c3RlclN1YnNjcmliZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbmNvbnN0IFJlZGlzXzEgPSByZXF1aXJlKFwiLi4vUmVkaXNcIik7XG5jb25zdCBkZWJ1ZyA9ICgwLCB1dGlsc18xLkRlYnVnKShcImNsdXN0ZXI6c3Vic2NyaWJlclwiKTtcbmNsYXNzIENsdXN0ZXJTdWJzY3JpYmVyIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uUG9vbCwgZW1pdHRlciwgaXNTaGFyZGVkID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uUG9vbCA9IGNvbm5lY3Rpb25Qb29sO1xuICAgICAgICB0aGlzLmVtaXR0ZXIgPSBlbWl0dGVyO1xuICAgICAgICB0aGlzLmlzU2hhcmRlZCA9IGlzU2hhcmRlZDtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIC8vVGhlcmUgaXMgb25seSBvbmUgY29ubmVjdGlvbiBmb3IgdGhlIGVudGlyZSBwb29sXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgIC8vVGhlIHNsb3QgcmFuZ2UgZm9yIHdoaWNoIHRoaXMgc3Vic2NyaWJlciBpcyByZXNwb25zaWJsZVxuICAgICAgICB0aGlzLnNsb3RSYW5nZSA9IFtdO1xuICAgICAgICB0aGlzLm9uU3Vic2NyaWJlckVuZCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICAgICAgZGVidWcoXCJzdWJzY3JpYmVyIGhhcyBkaXNjb25uZWN0ZWQsIGJ1dCBDbHVzdGVyU3Vic2NyaWJlciBpcyBub3Qgc3RhcnRlZCwgc28gbm90IHJlY29ubmVjdGluZy5cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgY2xvc2VzIHdoaWxzdCBpdCdzIHN0aWxsIHRoZSBhY3RpdmUgY29ubmVjdGlvbixcbiAgICAgICAgICAgIC8vIHdlIG1pZ2h0IGFzIHdlbGwgdHJ5IHRvIGNvbm5lY3RpbmcgdG8gYSBuZXcgbm9kZSBpZiBwb3NzaWJsZSB0b1xuICAgICAgICAgICAgLy8gbWluaW1pc2UgdGhlIG51bWJlciBvZiBtaXNzZWQgcHVibGlzaGVzLlxuICAgICAgICAgICAgZGVidWcoXCJzdWJzY3JpYmVyIGhhcyBkaXNjb25uZWN0ZWQsIHNlbGVjdGluZyBhIG5ldyBvbmUuLi5cIik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFN1YnNjcmliZXIoKTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgbm9kZSB3ZSdyZSB1c2luZyBhcyB0aGUgc3Vic2NyaWJlciBkaXNhcHBlYXJzXG4gICAgICAgIC8vIGZyb20gdGhlIG5vZGUgcG9vbCBmb3Igc29tZSByZWFzb24sIHdlIHdpbGwgc2VsZWN0IGEgbmV3IG9uZVxuICAgICAgICAvLyB0byBjb25uZWN0IHRvLlxuICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBldmVudCBpcyBvbmx5IHRyaWdnZXJlZCBpZiB0aGUgY29ubmVjdGlvbiB0b1xuICAgICAgICAvLyB0aGUgbm9kZSBoYXMgYmVlbiB1c2VkOyBjbHVzdGVyIHN1YnNjcmlwdGlvbnMgYXJlIHNldHVwIHdpdGhcbiAgICAgICAgLy8gbGF6eUNvbm5lY3QgPSB0cnVlLiBJdCdzIHBvc3NpYmxlIGZvciB0aGUgc3Vic2NyaWJlciBub2RlIHRvXG4gICAgICAgIC8vIGRpc2FwcGVhciB3aXRob3V0IHRoaXMgbWV0aG9kIGJlaW5nIGNhbGxlZCFcbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9sdWluL2lvcmVkaXMvcHVsbC8xNTg5XG4gICAgICAgIHRoaXMuY29ubmVjdGlvblBvb2wub24oXCItbm9kZVwiLCAoXywga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCB8fCAhdGhpcy5zdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCgwLCB1dGlsXzEuZ2V0Tm9kZUtleSkodGhpcy5zdWJzY3JpYmVyLm9wdGlvbnMpID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhcInN1YnNjcmliZXIgaGFzIGxlZnQsIHNlbGVjdGluZyBhIG5ldyBvbmUuLi5cIik7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTdWJzY3JpYmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25Qb29sLm9uKFwiK25vZGVcIiwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0ZWQgfHwgdGhpcy5zdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVidWcoXCJhIG5ldyBub2RlIGlzIGRpc2NvdmVyZWQgYW5kIHRoZXJlIGlzIG5vIHN1YnNjcmliZXIsIHNlbGVjdGluZyBhIG5ldyBvbmUuLi5cIik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFN1YnNjcmliZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldEluc3RhbmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJzY3JpYmVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3NvY2lhdGUgdGhpcyBzdWJzY3JpYmVyIHRvIGEgc3BlY2lmaWMgc2xvdCByYW5nZS5cbiAgICAgKlxuICAgICAqIFJldHVybnMgdGhlIHJhbmdlIG9yIGFuIGVtcHR5IGFycmF5IGlmIHRoZSBzbG90IHJhbmdlIGNvdWxkbid0IGJlIGFzc29jaWF0ZWQuXG4gICAgICpcbiAgICAgKiBCVFc6IFRoaXMgaXMgbW9yZSBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJhbmdlXG4gICAgICovXG4gICAgYXNzb2NpYXRlU2xvdFJhbmdlKHJhbmdlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU2hhcmRlZCkge1xuICAgICAgICAgICAgdGhpcy5zbG90UmFuZ2UgPSByYW5nZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zbG90UmFuZ2U7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlbGVjdFN1YnNjcmliZXIoKTtcbiAgICAgICAgZGVidWcoXCJzdGFydGVkXCIpO1xuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNTdGFydGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydGVkO1xuICAgIH1cbiAgICBzZWxlY3RTdWJzY3JpYmVyKCkge1xuICAgICAgICBjb25zdCBsYXN0QWN0aXZlU3Vic2NyaWJlciA9IHRoaXMubGFzdEFjdGl2ZVN1YnNjcmliZXI7XG4gICAgICAgIC8vIERpc2Nvbm5lY3QgdGhlIHByZXZpb3VzIHN1YnNjcmliZXIgZXZlbiBpZiB0aGVyZVxuICAgICAgICAvLyB3aWxsIG5vdCBiZSBhIG5ldyBvbmUuXG4gICAgICAgIGlmIChsYXN0QWN0aXZlU3Vic2NyaWJlcikge1xuICAgICAgICAgICAgbGFzdEFjdGl2ZVN1YnNjcmliZXIub2ZmKFwiZW5kXCIsIHRoaXMub25TdWJzY3JpYmVyRW5kKTtcbiAgICAgICAgICAgIGxhc3RBY3RpdmVTdWJzY3JpYmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZXIub2ZmKFwiZW5kXCIsIHRoaXMub25TdWJzY3JpYmVyRW5kKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlci5kaXNjb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2FtcGxlTm9kZSA9ICgwLCB1dGlsc18xLnNhbXBsZSkodGhpcy5jb25uZWN0aW9uUG9vbC5nZXROb2RlcygpKTtcbiAgICAgICAgaWYgKCFzYW1wbGVOb2RlKSB7XG4gICAgICAgICAgICBkZWJ1ZyhcInNlbGVjdGluZyBzdWJzY3JpYmVyIGZhaWxlZCBzaW5jZSB0aGVyZSBpcyBubyBub2RlIGRpc2NvdmVyZWQgaW4gdGhlIGNsdXN0ZXIgeWV0XCIpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVyID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IG9wdGlvbnMgfSA9IHNhbXBsZU5vZGU7XG4gICAgICAgIGRlYnVnKFwic2VsZWN0ZWQgYSBzdWJzY3JpYmVyICVzOiVzXCIsIG9wdGlvbnMuaG9zdCwgb3B0aW9ucy5wb3J0KTtcbiAgICAgICAgLypcbiAgICAgICAgICogQ3JlYXRlIGEgc3BlY2lhbGl6ZWQgUmVkaXMgY29ubmVjdGlvbiBmb3IgdGhlIHN1YnNjcmlwdGlvbi5cbiAgICAgICAgICogTm90ZSB0aGF0IGF1dG8gcmVjb25uZWN0aW9uIGlzIGVuYWJsZWQgaGVyZS5cbiAgICAgICAgICpcbiAgICAgICAgICogYGVuYWJsZVJlYWR5Q2hlY2tgIGlzIGFsc28gZW5hYmxlZCBiZWNhdXNlIGFsdGhvdWdoIHN1YnNjcmlwdGlvbiBpcyBhbGxvd2VkXG4gICAgICAgICAqIHdoaWxlIHJlZGlzIGlzIGxvYWRpbmcgZGF0YSBmcm9tIHRoZSBkaXNrLCB3ZSBjYW4gY2hlY2sgaWYgdGhlIHBhc3N3b3JkXG4gICAgICAgICAqIHByb3ZpZGVkIGZvciB0aGUgc3Vic2NyaWJlciBpcyBjb3JyZWN0LCBhbmQgaWYgbm90LCB0aGUgY3VycmVudCBzdWJzY3JpYmVyXG4gICAgICAgICAqIHdpbGwgYmUgZGlzY29ubmVjdGVkIGFuZCBhIG5ldyBzdWJzY3JpYmVyIHdpbGwgYmUgc2VsZWN0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICBsZXQgY29ubmVjdGlvblByZWZpeCA9IFwic3Vic2NyaWJlclwiO1xuICAgICAgICBpZiAodGhpcy5pc1NoYXJkZWQpXG4gICAgICAgICAgICBjb25uZWN0aW9uUHJlZml4ID0gXCJzc3Vic2NyaWJlclwiO1xuICAgICAgICB0aGlzLnN1YnNjcmliZXIgPSBuZXcgUmVkaXNfMS5kZWZhdWx0KHtcbiAgICAgICAgICAgIHBvcnQ6IG9wdGlvbnMucG9ydCxcbiAgICAgICAgICAgIGhvc3Q6IG9wdGlvbnMuaG9zdCxcbiAgICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmQsXG4gICAgICAgICAgICBlbmFibGVSZWFkeUNoZWNrOiB0cnVlLFxuICAgICAgICAgICAgY29ubmVjdGlvbk5hbWU6ICgwLCB1dGlsXzEuZ2V0Q29ubmVjdGlvbk5hbWUpKGNvbm5lY3Rpb25QcmVmaXgsIG9wdGlvbnMuY29ubmVjdGlvbk5hbWUpLFxuICAgICAgICAgICAgbGF6eUNvbm5lY3Q6IHRydWUsXG4gICAgICAgICAgICB0bHM6IG9wdGlvbnMudGxzLFxuICAgICAgICAgICAgLy8gRG9uJ3QgdHJ5IHRvIHJlY29ubmVjdCB0aGUgc3Vic2NyaWJlciBjb25uZWN0aW9uLiBJZiB0aGUgY29ubmVjdGlvbiBmYWlsc1xuICAgICAgICAgICAgLy8gd2Ugd2lsbCBnZXQgYW4gZW5kIGV2ZW50IChoYW5kbGVkIGJlbG93KSwgYXQgd2hpY2ggcG9pbnQgd2UnbGwgcGljayBhIG5ld1xuICAgICAgICAgICAgLy8gbm9kZSBmcm9tIHRoZSBwb29sIGFuZCB0cnkgdG8gY29ubmVjdCB0byB0aGF0IGFzIHRoZSBzdWJzY3JpYmVyIGNvbm5lY3Rpb24uXG4gICAgICAgICAgICByZXRyeVN0cmF0ZWd5OiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBlcnJvcnMgc2luY2UgdGhleSdyZSBoYW5kbGVkIGluIHRoZSBjb25uZWN0aW9uIHBvb2wuXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlci5vbihcImVycm9yXCIsIHV0aWxzXzEubm9vcCk7XG4gICAgICAgIC8vIFRoZSBub2RlIHdlIGxvc3QgY29ubmVjdGlvbiB0byBtYXkgbm90IGNvbWUgYmFjayB1cCBpbiBhXG4gICAgICAgIC8vIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUgKGUuZy4gYSBzbGF2ZSB0aGF0J3MgdGFrZW4gZG93blxuICAgICAgICAvLyBmb3IgbWFpbnRhaW5lbmNlKSwgd2UgY291bGQgcG90ZW50aWFsbHkgbWlzcyBtYW55IHB1Ymxpc2hlZFxuICAgICAgICAvLyBtZXNzYWdlcyBzbyB3ZSBzaG91bGQgcmVjb25uZWN0IGFzIHF1aWNrbHkgYXMgcG9zc2libGUsIHRvXG4gICAgICAgIC8vIGEgZGlmZmVyZW50IG5vZGUgaWYgbmVlZGVkLlxuICAgICAgICB0aGlzLnN1YnNjcmliZXIub25jZShcImVuZFwiLCB0aGlzLm9uU3Vic2NyaWJlckVuZCk7XG4gICAgICAgIC8vIFJlLXN1YnNjcmliZSBwcmV2aW91cyBjaGFubmVsc1xuICAgICAgICBjb25zdCBwcmV2aW91c0NoYW5uZWxzID0geyBzdWJzY3JpYmU6IFtdLCBwc3Vic2NyaWJlOiBbXSwgc3N1YnNjcmliZTogW10gfTtcbiAgICAgICAgaWYgKGxhc3RBY3RpdmVTdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb24gPSBsYXN0QWN0aXZlU3Vic2NyaWJlci5jb25kaXRpb24gfHwgbGFzdEFjdGl2ZVN1YnNjcmliZXIucHJldkNvbmRpdGlvbjtcbiAgICAgICAgICAgIGlmIChjb25kaXRpb24gJiYgY29uZGl0aW9uLnN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0NoYW5uZWxzLnN1YnNjcmliZSA9IGNvbmRpdGlvbi5zdWJzY3JpYmVyLmNoYW5uZWxzKFwic3Vic2NyaWJlXCIpO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzQ2hhbm5lbHMucHN1YnNjcmliZSA9XG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5zdWJzY3JpYmVyLmNoYW5uZWxzKFwicHN1YnNjcmliZVwiKTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0NoYW5uZWxzLnNzdWJzY3JpYmUgPVxuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24uc3Vic2NyaWJlci5jaGFubmVscyhcInNzdWJzY3JpYmVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZpb3VzQ2hhbm5lbHMuc3Vic2NyaWJlLmxlbmd0aCB8fFxuICAgICAgICAgICAgcHJldmlvdXNDaGFubmVscy5wc3Vic2NyaWJlLmxlbmd0aCB8fFxuICAgICAgICAgICAgcHJldmlvdXNDaGFubmVscy5zc3Vic2NyaWJlLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IHBlbmRpbmcgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIFtcInN1YnNjcmliZVwiLCBcInBzdWJzY3JpYmVcIiwgXCJzc3Vic2NyaWJlXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhbm5lbHMgPSBwcmV2aW91c0NoYW5uZWxzW3R5cGVdO1xuICAgICAgICAgICAgICAgIGlmIChjaGFubmVscy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcIiVzICVkIGNoYW5uZWxzXCIsIHR5cGUsIGNoYW5uZWxzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlclt0eXBlXShjaGFubmVscylcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghLS1wZW5kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0QWN0aXZlU3Vic2NyaWJlciA9IHRoaXMuc3Vic2NyaWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgcHJvYmFibHkgZGlzY29ubmVjdCB0aGUgc3Vic2NyaWJlciBhbmQgdHJ5IGFnYWluLlxuICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoXCJmYWlsZWQgdG8gJXMgJWQgY2hhbm5lbHNcIiwgdHlwZSwgY2hhbm5lbHMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sYXN0QWN0aXZlU3Vic2NyaWJlciA9IHRoaXMuc3Vic2NyaWJlcjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIFtcbiAgICAgICAgICAgIFwibWVzc2FnZVwiLFxuICAgICAgICAgICAgXCJtZXNzYWdlQnVmZmVyXCIsXG4gICAgICAgIF0pIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlci5vbihldmVudCwgKGFyZzEsIGFyZzIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChldmVudCwgYXJnMSwgYXJnMik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIFtcInBtZXNzYWdlXCIsIFwicG1lc3NhZ2VCdWZmZXJcIl0pIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlci5vbihldmVudCwgKGFyZzEsIGFyZzIsIGFyZzMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChldmVudCwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1NoYXJkZWQgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBbXG4gICAgICAgICAgICAgICAgXCJzbWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgIFwic21lc3NhZ2VCdWZmZXJcIixcbiAgICAgICAgICAgIF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmliZXIub24oZXZlbnQsIChhcmcxLCBhcmcyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KGV2ZW50LCBhcmcxLCBhcmcyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IENsdXN0ZXJTdWJzY3JpYmVyO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/cluster/ClusterSubscriber.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/cluster/ClusterSubscriberGroup.js":
/*!**********************************************************************!*\
!*** ./node_modules/ioredis/built/cluster/ClusterSubscriberGroup.js ***!
\**********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(rsc)/./node_modules/ioredis/built/utils/index.js\");\nconst ClusterSubscriber_1 = __webpack_require__(/*! ./ClusterSubscriber */ \"(rsc)/./node_modules/ioredis/built/cluster/ClusterSubscriber.js\");\nconst ConnectionPool_1 = __webpack_require__(/*! ./ConnectionPool */ \"(rsc)/./node_modules/ioredis/built/cluster/ConnectionPool.js\");\nconst util_1 = __webpack_require__(/*! ./util */ \"(rsc)/./node_modules/ioredis/built/cluster/util.js\");\nconst calculateSlot = __webpack_require__(/*! cluster-key-slot */ \"(rsc)/./node_modules/cluster-key-slot/lib/index.js\");\nconst debug = (0, utils_1.Debug)(\"cluster:subscriberGroup\");\n/**\n * Redis differs between \"normal\" and sharded PubSub. If using the \"normal\" PubSub feature, exactly one\n * ClusterSubscriber exists per cluster instance. This works because the Redis cluster bus forwards m\n * messages between shards. However, this has scalability limitations, which is the reason why the sharded\n * PubSub feature was added to Redis. With sharded PubSub, each shard is responsible for its own messages.\n * Given that, we need at least one ClusterSubscriber per master endpoint/node.\n *\n * This class leverages the previously exising ClusterSubscriber by adding support for multiple such subscribers\n * in alignment to the master nodes of the cluster. The ClusterSubscriber class was extended in a non-breaking way\n * to support this feature.\n */\nclass ClusterSubscriberGroup {\n /**\n * Register callbacks\n *\n * @param cluster\n */\n constructor(cluster) {\n this.cluster = cluster;\n this.shardedSubscribers = new Map();\n this.clusterSlots = [];\n //Simple [min, max] slot ranges aren't enough because you can migrate single slots\n this.subscriberToSlotsIndex = new Map();\n this.channels = new Map();\n cluster.on(\"+node\", (redis) => {\n this._addSubscriber(redis);\n });\n cluster.on(\"-node\", (redis) => {\n this._removeSubscriber(redis);\n });\n cluster.on(\"refresh\", () => {\n this._refreshSlots(cluster);\n });\n }\n /**\n * Get the responsible subscriber.\n *\n * Returns null if no subscriber was found\n *\n * @param slot\n */\n getResponsibleSubscriber(slot) {\n const nodeKey = this.clusterSlots[slot][0];\n return this.shardedSubscribers.get(nodeKey);\n }\n /**\n * Adds a channel for which this subscriber group is responsible\n *\n * @param channels\n */\n addChannels(channels) {\n const slot = calculateSlot(channels[0]);\n //Check if the all channels belong to the same slot and otherwise reject the operation\n channels.forEach((c) => {\n if (calculateSlot(c) != slot)\n return -1;\n });\n const currChannels = this.channels.get(slot);\n if (!currChannels) {\n this.channels.set(slot, channels);\n }\n else {\n this.channels.set(slot, currChannels.concat(channels));\n }\n return [...this.channels.values()].flatMap(v => v).length;\n }\n /**\n * Removes channels for which the subscriber group is responsible by optionally unsubscribing\n * @param channels\n */\n removeChannels(channels) {\n const slot = calculateSlot(channels[0]);\n //Check if the all channels belong to the same slot and otherwise reject the operation\n channels.forEach((c) => {\n if (calculateSlot(c) != slot)\n return -1;\n });\n const slotChannels = this.channels.get(slot);\n if (slotChannels) {\n const updatedChannels = slotChannels.filter(c => !channels.includes(c));\n this.channels.set(slot, updatedChannels);\n }\n return [...this.channels.values()].flatMap(v => v).length;\n }\n /**\n * Disconnect all subscribers\n */\n stop() {\n for (const s of this.shardedSubscribers.values()) {\n s.stop();\n }\n }\n /**\n * Start all not yet started subscribers\n */\n start() {\n for (const s of this.shardedSubscribers.values()) {\n if (!s.isStarted()) {\n s.start();\n }\n }\n }\n /**\n * Add a subscriber to the group of subscribers\n *\n * @param redis\n */\n _addSubscriber(redis) {\n const pool = new ConnectionPool_1.default(redis.options);\n if (pool.addMasterNode(redis)) {\n const sub = new ClusterSubscriber_1.default(pool, this.cluster, true);\n const nodeKey = (0, util_1.getNodeKey)(redis.options);\n this.shardedSubscribers.set(nodeKey, sub);\n sub.start();\n // We need to attempt to resubscribe them in case the new node serves their slot\n this._resubscribe();\n this.cluster.emit(\"+subscriber\");\n return sub;\n }\n return null;\n }\n /**\n * Removes a subscriber from the group\n * @param redis\n */\n _removeSubscriber(redis) {\n const nodeKey = (0, util_1.getNodeKey)(redis.options);\n const sub = this.shardedSubscribers.get(nodeKey);\n if (sub) {\n sub.stop();\n this.shardedSubscribers.delete(nodeKey);\n // Even though the subscriber to this node is going down, we might have another subscriber\n // handling the same slots, so we need to attempt to subscribe the orphaned channels\n this._resubscribe();\n this.cluster.emit(\"-subscriber\");\n }\n return this.shardedSubscribers;\n }\n /**\n * Refreshes the subscriber-related slot ranges\n *\n * Returns false if no refresh was needed\n *\n * @param cluster\n */\n _refreshSlots(cluster) {\n //If there was an actual change, then reassign the slot ranges\n if (this._slotsAreEqual(cluster.slots)) {\n debug(\"Nothing to refresh because the new cluster map is equal to the previous one.\");\n }\n else {\n debug(\"Refreshing the slots of the subscriber group.\");\n //Rebuild the slots index\n this.subscriberToSlotsIndex = new Map();\n for (let slot = 0; slot < cluster.slots.length; slot++) {\n const node = cluster.slots[slot][0];\n if (!this.subscriberToSlotsIndex.has(node)) {\n this.subscriberToSlotsIndex.set(node, []);\n }\n this.subscriberToSlotsIndex.get(node).push(Number(slot));\n }\n //Update the subscribers from the index\n this._resubscribe();\n //Update the cached slots map\n this.clusterSlots = JSON.parse(JSON.stringify(cluster.slots));\n this.cluster.emit(\"subscribersReady\");\n return true;\n }\n return false;\n }\n /**\n * Resubscribes to the previous channels\n *\n * @private\n */\n _resubscribe() {\n if (this.shardedSubscribers) {\n this.shardedSubscribers.forEach((s, nodeKey) => {\n const subscriberSlots = this.subscriberToSlotsIndex.get(nodeKey);\n if (subscriberSlots) {\n //More for debugging purposes\n s.associateSlotRange(subscriberSlots);\n //Resubscribe on the underlying connection\n subscriberSlots.forEach((ss) => {\n //Might return null if being disconnected\n const redis = s.getInstance();\n const channels = this.channels.get(ss);\n if (channels && channels.length > 0) {\n //Try to subscribe now\n if (redis) {\n redis.ssubscribe(channels);\n //If the instance isn't ready yet, then register the re-subscription for later\n redis.on(\"ready\", () => {\n redis.ssubscribe(channels);\n });\n }\n }\n });\n }\n });\n }\n }\n /**\n * Deep equality of the cluster slots objects\n *\n * @param other\n * @private\n */\n _slotsAreEqual(other) {\n if (this.clusterSlots === undefined)\n return false;\n else\n return JSON.stringify(this.clusterSlots) === JSON.stringify(other);\n }\n}\nexports[\"default\"] = ClusterSubscriberGroup;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jbHVzdGVyL0NsdXN0ZXJTdWJzY3JpYmVyR3JvdXAuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsZ0JBQWdCLG1CQUFPLENBQUMsbUVBQVU7QUFDbEMsNEJBQTRCLG1CQUFPLENBQUMsNEZBQXFCO0FBQ3pELHlCQUF5QixtQkFBTyxDQUFDLHNGQUFrQjtBQUNuRCxlQUFlLG1CQUFPLENBQUMsa0VBQVE7QUFDL0Isc0JBQXNCLG1CQUFPLENBQUMsNEVBQWtCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLDZCQUE2QjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jbHVzdGVyL0NsdXN0ZXJTdWJzY3JpYmVyR3JvdXAuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgQ2x1c3RlclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL0NsdXN0ZXJTdWJzY3JpYmVyXCIpO1xuY29uc3QgQ29ubmVjdGlvblBvb2xfMSA9IHJlcXVpcmUoXCIuL0Nvbm5lY3Rpb25Qb29sXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmNvbnN0IGNhbGN1bGF0ZVNsb3QgPSByZXF1aXJlKFwiY2x1c3Rlci1rZXktc2xvdFwiKTtcbmNvbnN0IGRlYnVnID0gKDAsIHV0aWxzXzEuRGVidWcpKFwiY2x1c3RlcjpzdWJzY3JpYmVyR3JvdXBcIik7XG4vKipcbiAqIFJlZGlzIGRpZmZlcnMgYmV0d2VlbiBcIm5vcm1hbFwiIGFuZCBzaGFyZGVkIFB1YlN1Yi4gSWYgdXNpbmcgdGhlIFwibm9ybWFsXCIgUHViU3ViIGZlYXR1cmUsIGV4YWN0bHkgb25lXG4gKiBDbHVzdGVyU3Vic2NyaWJlciBleGlzdHMgcGVyIGNsdXN0ZXIgaW5zdGFuY2UuIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgUmVkaXMgY2x1c3RlciBidXMgZm9yd2FyZHMgbVxuICogbWVzc2FnZXMgYmV0d2VlbiBzaGFyZHMuIEhvd2V2ZXIsIHRoaXMgaGFzIHNjYWxhYmlsaXR5IGxpbWl0YXRpb25zLCB3aGljaCBpcyB0aGUgcmVhc29uIHdoeSB0aGUgc2hhcmRlZFxuICogUHViU3ViIGZlYXR1cmUgd2FzIGFkZGVkIHRvIFJlZGlzLiBXaXRoIHNoYXJkZWQgUHViU3ViLCBlYWNoIHNoYXJkIGlzIHJlc3BvbnNpYmxlIGZvciBpdHMgb3duIG1lc3NhZ2VzLlxuICogR2l2ZW4gdGhhdCwgd2UgbmVlZCBhdCBsZWFzdCBvbmUgQ2x1c3RlclN1YnNjcmliZXIgcGVyIG1hc3RlciBlbmRwb2ludC9ub2RlLlxuICpcbiAqIFRoaXMgY2xhc3MgbGV2ZXJhZ2VzIHRoZSBwcmV2aW91c2x5IGV4aXNpbmcgQ2x1c3RlclN1YnNjcmliZXIgYnkgYWRkaW5nIHN1cHBvcnQgZm9yIG11bHRpcGxlIHN1Y2ggc3Vic2NyaWJlcnNcbiAqIGluIGFsaWdubWVudCB0byB0aGUgbWFzdGVyIG5vZGVzIG9mIHRoZSBjbHVzdGVyLiBUaGUgQ2x1c3RlclN1YnNjcmliZXIgY2xhc3Mgd2FzIGV4dGVuZGVkIGluIGEgbm9uLWJyZWFraW5nIHdheVxuICogdG8gc3VwcG9ydCB0aGlzIGZlYXR1cmUuXG4gKi9cbmNsYXNzIENsdXN0ZXJTdWJzY3JpYmVyR3JvdXAge1xuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIGNhbGxiYWNrc1xuICAgICAqXG4gICAgICogQHBhcmFtIGNsdXN0ZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbHVzdGVyKSB7XG4gICAgICAgIHRoaXMuY2x1c3RlciA9IGNsdXN0ZXI7XG4gICAgICAgIHRoaXMuc2hhcmRlZFN1YnNjcmliZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmNsdXN0ZXJTbG90cyA9IFtdO1xuICAgICAgICAvL1NpbXBsZSBbbWluLCBtYXhdIHNsb3QgcmFuZ2VzIGFyZW4ndCBlbm91Z2ggYmVjYXVzZSB5b3UgY2FuIG1pZ3JhdGUgc2luZ2xlIHNsb3RzXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlclRvU2xvdHNJbmRleCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5jaGFubmVscyA9IG5ldyBNYXAoKTtcbiAgICAgICAgY2x1c3Rlci5vbihcIitub2RlXCIsIChyZWRpcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYWRkU3Vic2NyaWJlcihyZWRpcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBjbHVzdGVyLm9uKFwiLW5vZGVcIiwgKHJlZGlzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVTdWJzY3JpYmVyKHJlZGlzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNsdXN0ZXIub24oXCJyZWZyZXNoXCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hTbG90cyhjbHVzdGVyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgcmVzcG9uc2libGUgc3Vic2NyaWJlci5cbiAgICAgKlxuICAgICAqIFJldHVybnMgbnVsbCBpZiBubyBzdWJzY3JpYmVyIHdhcyBmb3VuZFxuICAgICAqXG4gICAgICogQHBhcmFtIHNsb3RcbiAgICAgKi9cbiAgICBnZXRSZXNwb25zaWJsZVN1YnNjcmliZXIoc2xvdCkge1xuICAgICAgICBjb25zdCBub2RlS2V5ID0gdGhpcy5jbHVzdGVyU2xvdHNbc2xvdF1bMF07XG4gICAgICAgIHJldHVybiB0aGlzLnNoYXJkZWRTdWJzY3JpYmVycy5nZXQobm9kZUtleSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjaGFubmVsIGZvciB3aGljaCB0aGlzIHN1YnNjcmliZXIgZ3JvdXAgaXMgcmVzcG9uc2libGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGFubmVsc1xuICAgICAqL1xuICAgIGFkZENoYW5uZWxzKGNoYW5uZWxzKSB7XG4gICAgICAgIGNvbnN0IHNsb3QgPSBjYWxjdWxhdGVTbG90KGNoYW5uZWxzWzBdKTtcbiAgICAgICAgLy9DaGVjayBpZiB0aGUgYWxsIGNoYW5uZWxzIGJlbG9uZyB0byB0aGUgc2FtZSBzbG90IGFuZCBvdGhlcndpc2UgcmVqZWN0IHRoZSBvcGVyYXRpb25cbiAgICAgICAgY2hhbm5lbHMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbGN1bGF0ZVNsb3QoYykgIT0gc2xvdClcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjdXJyQ2hhbm5lbHMgPSB0aGlzLmNoYW5uZWxzLmdldChzbG90KTtcbiAgICAgICAgaWYgKCFjdXJyQ2hhbm5lbHMpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHMuc2V0KHNsb3QsIGNoYW5uZWxzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHMuc2V0KHNsb3QsIGN1cnJDaGFubmVscy5jb25jYXQoY2hhbm5lbHMpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLnRoaXMuY2hhbm5lbHMudmFsdWVzKCldLmZsYXRNYXAodiA9PiB2KS5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgY2hhbm5lbHMgZm9yIHdoaWNoIHRoZSBzdWJzY3JpYmVyIGdyb3VwIGlzIHJlc3BvbnNpYmxlIGJ5IG9wdGlvbmFsbHkgdW5zdWJzY3JpYmluZ1xuICAgICAqIEBwYXJhbSBjaGFubmVsc1xuICAgICAqL1xuICAgIHJlbW92ZUNoYW5uZWxzKGNoYW5uZWxzKSB7XG4gICAgICAgIGNvbnN0IHNsb3QgPSBjYWxjdWxhdGVTbG90KGNoYW5uZWxzWzBdKTtcbiAgICAgICAgLy9DaGVjayBpZiB0aGUgYWxsIGNoYW5uZWxzIGJlbG9uZyB0byB0aGUgc2FtZSBzbG90IGFuZCBvdGhlcndpc2UgcmVqZWN0IHRoZSBvcGVyYXRpb25cbiAgICAgICAgY2hhbm5lbHMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbGN1bGF0ZVNsb3QoYykgIT0gc2xvdClcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzbG90Q2hhbm5lbHMgPSB0aGlzLmNoYW5uZWxzLmdldChzbG90KTtcbiAgICAgICAgaWYgKHNsb3RDaGFubmVscykge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZENoYW5uZWxzID0gc2xvdENoYW5uZWxzLmZpbHRlcihjID0+ICFjaGFubmVscy5pbmNsdWRlcyhjKSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxzLnNldChzbG90LCB1cGRhdGVkQ2hhbm5lbHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5jaGFubmVscy52YWx1ZXMoKV0uZmxhdE1hcCh2ID0+IHYpLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGlzY29ubmVjdCBhbGwgc3Vic2NyaWJlcnNcbiAgICAgKi9cbiAgICBzdG9wKCkge1xuICAgICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5zaGFyZGVkU3Vic2NyaWJlcnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIHMuc3RvcCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IGFsbCBub3QgeWV0IHN0YXJ0ZWQgc3Vic2NyaWJlcnNcbiAgICAgKi9cbiAgICBzdGFydCgpIHtcbiAgICAgICAgZm9yIChjb25zdCBzIG9mIHRoaXMuc2hhcmRlZFN1YnNjcmliZXJzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBpZiAoIXMuaXNTdGFydGVkKCkpIHtcbiAgICAgICAgICAgICAgICBzLnN0YXJ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIGEgc3Vic2NyaWJlciB0byB0aGUgZ3JvdXAgb2Ygc3Vic2NyaWJlcnNcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZWRpc1xuICAgICAqL1xuICAgIF9hZGRTdWJzY3JpYmVyKHJlZGlzKSB7XG4gICAgICAgIGNvbnN0IHBvb2wgPSBuZXcgQ29ubmVjdGlvblBvb2xfMS5kZWZhdWx0KHJlZGlzLm9wdGlvbnMpO1xuICAgICAgICBpZiAocG9vbC5hZGRNYXN0ZXJOb2RlKHJlZGlzKSkge1xuICAgICAgICAgICAgY29uc3Qgc3ViID0gbmV3IENsdXN0ZXJTdWJzY3JpYmVyXzEuZGVmYXVsdChwb29sLCB0aGlzLmNsdXN0ZXIsIHRydWUpO1xuICAgICAgICAgICAgY29uc3Qgbm9kZUtleSA9ICgwLCB1dGlsXzEuZ2V0Tm9kZUtleSkocmVkaXMub3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLnNoYXJkZWRTdWJzY3JpYmVycy5zZXQobm9kZUtleSwgc3ViKTtcbiAgICAgICAgICAgIHN1Yi5zdGFydCgpO1xuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBhdHRlbXB0IHRvIHJlc3Vic2NyaWJlIHRoZW0gaW4gY2FzZSB0aGUgbmV3IG5vZGUgc2VydmVzIHRoZWlyIHNsb3RcbiAgICAgICAgICAgIHRoaXMuX3Jlc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmNsdXN0ZXIuZW1pdChcIitzdWJzY3JpYmVyXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHN1YjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIHN1YnNjcmliZXIgZnJvbSB0aGUgZ3JvdXBcbiAgICAgKiBAcGFyYW0gcmVkaXNcbiAgICAgKi9cbiAgICBfcmVtb3ZlU3Vic2NyaWJlcihyZWRpcykge1xuICAgICAgICBjb25zdCBub2RlS2V5ID0gKDAsIHV0aWxfMS5nZXROb2RlS2V5KShyZWRpcy5vcHRpb25zKTtcbiAgICAgICAgY29uc3Qgc3ViID0gdGhpcy5zaGFyZGVkU3Vic2NyaWJlcnMuZ2V0KG5vZGVLZXkpO1xuICAgICAgICBpZiAoc3ViKSB7XG4gICAgICAgICAgICBzdWIuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5zaGFyZGVkU3Vic2NyaWJlcnMuZGVsZXRlKG5vZGVLZXkpO1xuICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggdGhlIHN1YnNjcmliZXIgdG8gdGhpcyBub2RlIGlzIGdvaW5nIGRvd24sIHdlIG1pZ2h0IGhhdmUgYW5vdGhlciBzdWJzY3JpYmVyXG4gICAgICAgICAgICAvLyBoYW5kbGluZyB0aGUgc2FtZSBzbG90cywgc28gd2UgbmVlZCB0byBhdHRlbXB0IHRvIHN1YnNjcmliZSB0aGUgb3JwaGFuZWQgY2hhbm5lbHNcbiAgICAgICAgICAgIHRoaXMuX3Jlc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmNsdXN0ZXIuZW1pdChcIi1zdWJzY3JpYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNoYXJkZWRTdWJzY3JpYmVycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVmcmVzaGVzIHRoZSBzdWJzY3JpYmVyLXJlbGF0ZWQgc2xvdCByYW5nZXNcbiAgICAgKlxuICAgICAqIFJldHVybnMgZmFsc2UgaWYgbm8gcmVmcmVzaCB3YXMgbmVlZGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2x1c3RlclxuICAgICAqL1xuICAgIF9yZWZyZXNoU2xvdHMoY2x1c3Rlcikge1xuICAgICAgICAvL0lmIHRoZXJlIHdhcyBhbiBhY3R1YWwgY2hhbmdlLCB0aGVuIHJlYXNzaWduIHRoZSBzbG90IHJhbmdlc1xuICAgICAgICBpZiAodGhpcy5fc2xvdHNBcmVFcXVhbChjbHVzdGVyLnNsb3RzKSkge1xuICAgICAgICAgICAgZGVidWcoXCJOb3RoaW5nIHRvIHJlZnJlc2ggYmVjYXVzZSB0aGUgbmV3IGNsdXN0ZXIgbWFwIGlzIGVxdWFsIHRvIHRoZSBwcmV2aW91cyBvbmUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVidWcoXCJSZWZyZXNoaW5nIHRoZSBzbG90cyBvZiB0aGUgc3Vic2NyaWJlciBncm91cC5cIik7XG4gICAgICAgICAgICAvL1JlYnVpbGQgdGhlIHNsb3RzIGluZGV4XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZXJUb1Nsb3RzSW5kZXggPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBmb3IgKGxldCBzbG90ID0gMDsgc2xvdCA8IGNsdXN0ZXIuc2xvdHMubGVuZ3RoOyBzbG90KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gY2x1c3Rlci5zbG90c1tzbG90XVswXTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3Vic2NyaWJlclRvU2xvdHNJbmRleC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVyVG9TbG90c0luZGV4LnNldChub2RlLCBbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlclRvU2xvdHNJbmRleC5nZXQobm9kZSkucHVzaChOdW1iZXIoc2xvdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9VcGRhdGUgdGhlIHN1YnNjcmliZXJzIGZyb20gdGhlIGluZGV4XG4gICAgICAgICAgICB0aGlzLl9yZXN1YnNjcmliZSgpO1xuICAgICAgICAgICAgLy9VcGRhdGUgdGhlIGNhY2hlZCBzbG90cyBtYXBcbiAgICAgICAgICAgIHRoaXMuY2x1c3RlclNsb3RzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjbHVzdGVyLnNsb3RzKSk7XG4gICAgICAgICAgICB0aGlzLmNsdXN0ZXIuZW1pdChcInN1YnNjcmliZXJzUmVhZHlcIik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc3Vic2NyaWJlcyB0byB0aGUgcHJldmlvdXMgY2hhbm5lbHNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3Jlc3Vic2NyaWJlKCkge1xuICAgICAgICBpZiAodGhpcy5zaGFyZGVkU3Vic2NyaWJlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2hhcmRlZFN1YnNjcmliZXJzLmZvckVhY2goKHMsIG5vZGVLZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJzY3JpYmVyU2xvdHMgPSB0aGlzLnN1YnNjcmliZXJUb1Nsb3RzSW5kZXguZ2V0KG5vZGVLZXkpO1xuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyU2xvdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9Nb3JlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXNcbiAgICAgICAgICAgICAgICAgICAgcy5hc3NvY2lhdGVTbG90UmFuZ2Uoc3Vic2NyaWJlclNsb3RzKTtcbiAgICAgICAgICAgICAgICAgICAgLy9SZXN1YnNjcmliZSBvbiB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXJTbG90cy5mb3JFYWNoKChzcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9NaWdodCByZXR1cm4gbnVsbCBpZiBiZWluZyBkaXNjb25uZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZGlzID0gcy5nZXRJbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhbm5lbHMgPSB0aGlzLmNoYW5uZWxzLmdldChzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhbm5lbHMgJiYgY2hhbm5lbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vVHJ5IHRvIHN1YnNjcmliZSBub3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVkaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXMuc3N1YnNjcmliZShjaGFubmVscyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgdGhlIGluc3RhbmNlIGlzbid0IHJlYWR5IHlldCwgdGhlbiByZWdpc3RlciB0aGUgcmUtc3Vic2NyaXB0aW9uIGZvciBsYXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcy5vbihcInJlYWR5XCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlzLnNzdWJzY3JpYmUoY2hhbm5lbHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZXAgZXF1YWxpdHkgb2YgdGhlIGNsdXN0ZXIgc2xvdHMgb2JqZWN0c1xuICAgICAqXG4gICAgICogQHBhcmFtIG90aGVyXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfc2xvdHNBcmVFcXVhbChvdGhlcikge1xuICAgICAgICBpZiAodGhpcy5jbHVzdGVyU2xvdHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuY2x1c3RlclNsb3RzKSA9PT0gSlNPTi5zdHJpbmdpZnkob3RoZXIpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IENsdXN0ZXJTdWJzY3JpYmVyR3JvdXA7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/cluster/ClusterSubscriberGroup.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/cluster/ConnectionPool.js":
/*!**************************************************************!*\
!*** ./node_modules/ioredis/built/cluster/ConnectionPool.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst events_1 = __webpack_require__(/*! events */ \"events\");\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(rsc)/./node_modules/ioredis/built/utils/index.js\");\nconst util_1 = __webpack_require__(/*! ./util */ \"(rsc)/./node_modules/ioredis/built/cluster/util.js\");\nconst Redis_1 = __webpack_require__(/*! ../Redis */ \"(rsc)/./node_modules/ioredis/built/Redis.js\");\nconst debug = (0, utils_1.Debug)(\"cluster:connectionPool\");\nclass ConnectionPool extends events_1.EventEmitter {\n constructor(redisOptions) {\n super();\n this.redisOptions = redisOptions;\n // master + slave = all\n this.nodes = {\n all: {},\n master: {},\n slave: {},\n };\n this.specifiedOptions = {};\n }\n getNodes(role = \"all\") {\n const nodes = this.nodes[role];\n return Object.keys(nodes).map((key) => nodes[key]);\n }\n getInstanceByKey(key) {\n return this.nodes.all[key];\n }\n getSampleInstance(role) {\n const keys = Object.keys(this.nodes[role]);\n const sampleKey = (0, utils_1.sample)(keys);\n return this.nodes[role][sampleKey];\n }\n /**\n * Add a master node to the pool\n * @param node\n */\n addMasterNode(node) {\n const key = (0, util_1.getNodeKey)(node.options);\n const redis = this.createRedisFromOptions(node, node.options.readOnly);\n //Master nodes aren't read-only\n if (!node.options.readOnly) {\n this.nodes.all[key] = redis;\n this.nodes.master[key] = redis;\n return true;\n }\n return false;\n }\n /**\n * Creates a Redis connection instance from the node options\n * @param node\n * @param readOnly\n */\n createRedisFromOptions(node, readOnly) {\n const redis = new Redis_1.default((0, utils_1.defaults)({\n // Never try to reconnect when a node is lose,\n // instead, waiting for a `MOVED` error and\n // fetch the slots again.\n retryStrategy: null,\n // Offline queue should be enabled so that\n // we don't need to wait for the `ready` event\n // before sending commands to the node.\n enableOfflineQueue: true,\n readOnly: readOnly,\n }, node, this.redisOptions, { lazyConnect: true }));\n return redis;\n }\n /**\n * Find or create a connection to the node\n */\n findOrCreate(node, readOnly = false) {\n const key = (0, util_1.getNodeKey)(node);\n readOnly = Boolean(readOnly);\n if (this.specifiedOptions[key]) {\n Object.assign(node, this.specifiedOptions[key]);\n }\n else {\n this.specifiedOptions[key] = node;\n }\n let redis;\n if (this.nodes.all[key]) {\n redis = this.nodes.all[key];\n if (redis.options.readOnly !== readOnly) {\n redis.options.readOnly = readOnly;\n debug(\"Change role of %s to %s\", key, readOnly ? \"slave\" : \"master\");\n redis[readOnly ? \"readonly\" : \"readwrite\"]().catch(utils_1.noop);\n if (readOnly) {\n delete this.nodes.master[key];\n this.nodes.slave[key] = redis;\n }\n else {\n delete this.nodes.slave[key];\n this.nodes.master[key] = redis;\n }\n }\n }\n else {\n debug(\"Connecting to %s as %s\", key, readOnly ? \"slave\" : \"master\");\n redis = this.createRedisFromOptions(node, readOnly);\n this.nodes.all[key] = redis;\n this.nodes[readOnly ? \"slave\" : \"master\"][key] = redis;\n redis.once(\"end\", () => {\n this.removeNode(key);\n this.emit(\"-node\", redis, key);\n if (!Object.keys(this.nodes.all).length) {\n this.emit(\"drain\");\n }\n });\n this.emit(\"+node\", redis, key);\n redis.on(\"error\", function (error) {\n this.emit(\"nodeError\", error, key);\n });\n }\n return redis;\n }\n /**\n * Reset the pool with a set of nodes.\n * The old node will be removed.\n */\n reset(nodes) {\n debug(\"Reset with %O\", nodes);\n const newNodes = {};\n nodes.forEach((node) => {\n const key = (0, util_1.getNodeKey)(node);\n // Don't override the existing (master) node\n // when the current one is slave.\n if (!(node.readOnly && newNodes[key])) {\n newNodes[key] = node;\n }\n });\n Object.keys(this.nodes.all).forEach((key) => {\n if (!newNodes[key]) {\n debug(\"Disconnect %s because the node does not hold any slot\", key);\n this.nodes.all[key].disconnect();\n this.removeNode(key);\n }\n });\n Object.keys(newNodes).forEach((key) => {\n const node = newNodes[key];\n this.findOrCreate(node, node.readOnly);\n });\n }\n /**\n * Remove a node from the pool.\n */\n removeNode(key) {\n const { nodes } = this;\n if (nodes.all[key]) {\n debug(\"Remove %s from the pool\", key);\n delete nodes.all[key];\n }\n delete nodes.master[key];\n delete nodes.slave[key];\n }\n}\nexports[\"default\"] = ConnectionPool;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jbHVzdGVyL0Nvbm5lY3Rpb25Qb29sLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGlCQUFpQixtQkFBTyxDQUFDLHNCQUFRO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLG1FQUFVO0FBQ2xDLGVBQWUsbUJBQU8sQ0FBQyxrRUFBUTtBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyw2REFBVTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQixzQkFBc0I7QUFDdEIscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyw2QkFBNkIsbUJBQW1CO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWUiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvY2x1c3Rlci9Db25uZWN0aW9uUG9vbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGV2ZW50c18xID0gcmVxdWlyZShcImV2ZW50c1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgUmVkaXNfMSA9IHJlcXVpcmUoXCIuLi9SZWRpc1wiKTtcbmNvbnN0IGRlYnVnID0gKDAsIHV0aWxzXzEuRGVidWcpKFwiY2x1c3Rlcjpjb25uZWN0aW9uUG9vbFwiKTtcbmNsYXNzIENvbm5lY3Rpb25Qb29sIGV4dGVuZHMgZXZlbnRzXzEuRXZlbnRFbWl0dGVyIHtcbiAgICBjb25zdHJ1Y3RvcihyZWRpc09wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5yZWRpc09wdGlvbnMgPSByZWRpc09wdGlvbnM7XG4gICAgICAgIC8vIG1hc3RlciArIHNsYXZlID0gYWxsXG4gICAgICAgIHRoaXMubm9kZXMgPSB7XG4gICAgICAgICAgICBhbGw6IHt9LFxuICAgICAgICAgICAgbWFzdGVyOiB7fSxcbiAgICAgICAgICAgIHNsYXZlOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zcGVjaWZpZWRPcHRpb25zID0ge307XG4gICAgfVxuICAgIGdldE5vZGVzKHJvbGUgPSBcImFsbFwiKSB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ub2Rlc1tyb2xlXTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG5vZGVzKS5tYXAoKGtleSkgPT4gbm9kZXNba2V5XSk7XG4gICAgfVxuICAgIGdldEluc3RhbmNlQnlLZXkoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzLmFsbFtrZXldO1xuICAgIH1cbiAgICBnZXRTYW1wbGVJbnN0YW5jZShyb2xlKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLm5vZGVzW3JvbGVdKTtcbiAgICAgICAgY29uc3Qgc2FtcGxlS2V5ID0gKDAsIHV0aWxzXzEuc2FtcGxlKShrZXlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZXNbcm9sZV1bc2FtcGxlS2V5XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIGEgbWFzdGVyIG5vZGUgdG8gdGhlIHBvb2xcbiAgICAgKiBAcGFyYW0gbm9kZVxuICAgICAqL1xuICAgIGFkZE1hc3Rlck5vZGUobm9kZSkge1xuICAgICAgICBjb25zdCBrZXkgPSAoMCwgdXRpbF8xLmdldE5vZGVLZXkpKG5vZGUub3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHJlZGlzID0gdGhpcy5jcmVhdGVSZWRpc0Zyb21PcHRpb25zKG5vZGUsIG5vZGUub3B0aW9ucy5yZWFkT25seSk7XG4gICAgICAgIC8vTWFzdGVyIG5vZGVzIGFyZW4ndCByZWFkLW9ubHlcbiAgICAgICAgaWYgKCFub2RlLm9wdGlvbnMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZXMuYWxsW2tleV0gPSByZWRpcztcbiAgICAgICAgICAgIHRoaXMubm9kZXMubWFzdGVyW2tleV0gPSByZWRpcztcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFJlZGlzIGNvbm5lY3Rpb24gaW5zdGFuY2UgZnJvbSB0aGUgbm9kZSBvcHRpb25zXG4gICAgICogQHBhcmFtIG5vZGVcbiAgICAgKiBAcGFyYW0gcmVhZE9ubHlcbiAgICAgKi9cbiAgICBjcmVhdGVSZWRpc0Zyb21PcHRpb25zKG5vZGUsIHJlYWRPbmx5KSB7XG4gICAgICAgIGNvbnN0IHJlZGlzID0gbmV3IFJlZGlzXzEuZGVmYXVsdCgoMCwgdXRpbHNfMS5kZWZhdWx0cykoe1xuICAgICAgICAgICAgLy8gTmV2ZXIgdHJ5IHRvIHJlY29ubmVjdCB3aGVuIGEgbm9kZSBpcyBsb3NlLFxuICAgICAgICAgICAgLy8gaW5zdGVhZCwgd2FpdGluZyBmb3IgYSBgTU9WRURgIGVycm9yIGFuZFxuICAgICAgICAgICAgLy8gZmV0Y2ggdGhlIHNsb3RzIGFnYWluLlxuICAgICAgICAgICAgcmV0cnlTdHJhdGVneTogbnVsbCxcbiAgICAgICAgICAgIC8vIE9mZmxpbmUgcXVldWUgc2hvdWxkIGJlIGVuYWJsZWQgc28gdGhhdFxuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGZvciB0aGUgYHJlYWR5YCBldmVudFxuICAgICAgICAgICAgLy8gYmVmb3JlIHNlbmRpbmcgY29tbWFuZHMgdG8gdGhlIG5vZGUuXG4gICAgICAgICAgICBlbmFibGVPZmZsaW5lUXVldWU6IHRydWUsXG4gICAgICAgICAgICByZWFkT25seTogcmVhZE9ubHksXG4gICAgICAgIH0sIG5vZGUsIHRoaXMucmVkaXNPcHRpb25zLCB7IGxhenlDb25uZWN0OiB0cnVlIH0pKTtcbiAgICAgICAgcmV0dXJuIHJlZGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaW5kIG9yIGNyZWF0ZSBhIGNvbm5lY3Rpb24gdG8gdGhlIG5vZGVcbiAgICAgKi9cbiAgICBmaW5kT3JDcmVhdGUobm9kZSwgcmVhZE9ubHkgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBrZXkgPSAoMCwgdXRpbF8xLmdldE5vZGVLZXkpKG5vZGUpO1xuICAgICAgICByZWFkT25seSA9IEJvb2xlYW4ocmVhZE9ubHkpO1xuICAgICAgICBpZiAodGhpcy5zcGVjaWZpZWRPcHRpb25zW2tleV0pIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obm9kZSwgdGhpcy5zcGVjaWZpZWRPcHRpb25zW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zcGVjaWZpZWRPcHRpb25zW2tleV0gPSBub2RlO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZWRpcztcbiAgICAgICAgaWYgKHRoaXMubm9kZXMuYWxsW2tleV0pIHtcbiAgICAgICAgICAgIHJlZGlzID0gdGhpcy5ub2Rlcy5hbGxba2V5XTtcbiAgICAgICAgICAgIGlmIChyZWRpcy5vcHRpb25zLnJlYWRPbmx5ICE9PSByZWFkT25seSkge1xuICAgICAgICAgICAgICAgIHJlZGlzLm9wdGlvbnMucmVhZE9ubHkgPSByZWFkT25seTtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhcIkNoYW5nZSByb2xlIG9mICVzIHRvICVzXCIsIGtleSwgcmVhZE9ubHkgPyBcInNsYXZlXCIgOiBcIm1hc3RlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpc1tyZWFkT25seSA/IFwicmVhZG9ubHlcIiA6IFwicmVhZHdyaXRlXCJdKCkuY2F0Y2godXRpbHNfMS5ub29wKTtcbiAgICAgICAgICAgICAgICBpZiAocmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMubm9kZXMubWFzdGVyW2tleV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZXMuc2xhdmVba2V5XSA9IHJlZGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMubm9kZXMuc2xhdmVba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2Rlcy5tYXN0ZXJba2V5XSA9IHJlZGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlYnVnKFwiQ29ubmVjdGluZyB0byAlcyBhcyAlc1wiLCBrZXksIHJlYWRPbmx5ID8gXCJzbGF2ZVwiIDogXCJtYXN0ZXJcIik7XG4gICAgICAgICAgICByZWRpcyA9IHRoaXMuY3JlYXRlUmVkaXNGcm9tT3B0aW9ucyhub2RlLCByZWFkT25seSk7XG4gICAgICAgICAgICB0aGlzLm5vZGVzLmFsbFtrZXldID0gcmVkaXM7XG4gICAgICAgICAgICB0aGlzLm5vZGVzW3JlYWRPbmx5ID8gXCJzbGF2ZVwiIDogXCJtYXN0ZXJcIl1ba2V5XSA9IHJlZGlzO1xuICAgICAgICAgICAgcmVkaXMub25jZShcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVOb2RlKGtleSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KFwiLW5vZGVcIiwgcmVkaXMsIGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLm5vZGVzLmFsbCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdChcImRyYWluXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5lbWl0KFwiK25vZGVcIiwgcmVkaXMsIGtleSk7XG4gICAgICAgICAgICByZWRpcy5vbihcImVycm9yXCIsIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChcIm5vZGVFcnJvclwiLCBlcnJvciwga2V5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWRpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzZXQgdGhlIHBvb2wgd2l0aCBhIHNldCBvZiBub2Rlcy5cbiAgICAgKiBUaGUgb2xkIG5vZGUgd2lsbCBiZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHJlc2V0KG5vZGVzKSB7XG4gICAgICAgIGRlYnVnKFwiUmVzZXQgd2l0aCAlT1wiLCBub2Rlcyk7XG4gICAgICAgIGNvbnN0IG5ld05vZGVzID0ge307XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9ICgwLCB1dGlsXzEuZ2V0Tm9kZUtleSkobm9kZSk7XG4gICAgICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGUgZXhpc3RpbmcgKG1hc3Rlcikgbm9kZVxuICAgICAgICAgICAgLy8gd2hlbiB0aGUgY3VycmVudCBvbmUgaXMgc2xhdmUuXG4gICAgICAgICAgICBpZiAoIShub2RlLnJlYWRPbmx5ICYmIG5ld05vZGVzW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgbmV3Tm9kZXNba2V5XSA9IG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLm5vZGVzLmFsbCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoIW5ld05vZGVzW2tleV0pIHtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhcIkRpc2Nvbm5lY3QgJXMgYmVjYXVzZSB0aGUgbm9kZSBkb2VzIG5vdCBob2xkIGFueSBzbG90XCIsIGtleSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlcy5hbGxba2V5XS5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVOb2RlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3Qua2V5cyhuZXdOb2RlcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbmV3Tm9kZXNba2V5XTtcbiAgICAgICAgICAgIHRoaXMuZmluZE9yQ3JlYXRlKG5vZGUsIG5vZGUucmVhZE9ubHkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgbm9kZSBmcm9tIHRoZSBwb29sLlxuICAgICAqL1xuICAgIHJlbW92ZU5vZGUoa2V5KSB7XG4gICAgICAgIGNvbnN0IHsgbm9kZXMgfSA9IHRoaXM7XG4gICAgICAgIGlmIChub2Rlcy5hbGxba2V5XSkge1xuICAgICAgICAgICAgZGVidWcoXCJSZW1vdmUgJXMgZnJvbSB0aGUgcG9vbFwiLCBrZXkpO1xuICAgICAgICAgICAgZGVsZXRlIG5vZGVzLmFsbFtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBub2Rlcy5tYXN0ZXJba2V5XTtcbiAgICAgICAgZGVsZXRlIG5vZGVzLnNsYXZlW2tleV07XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gQ29ubmVjdGlvblBvb2w7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/cluster/ConnectionPool.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/cluster/DelayQueue.js":
/*!**********************************************************!*\
!*** ./node_modules/ioredis/built/cluster/DelayQueue.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(rsc)/./node_modules/ioredis/built/utils/index.js\");\nconst Deque = __webpack_require__(/*! denque */ \"(rsc)/./node_modules/denque/index.js\");\nconst debug = (0, utils_1.Debug)(\"delayqueue\");\n/**\n * Queue that runs items after specified duration\n */\nclass DelayQueue {\n constructor() {\n this.queues = {};\n this.timeouts = {};\n }\n /**\n * Add a new item to the queue\n *\n * @param bucket bucket name\n * @param item function that will run later\n * @param options\n */\n push(bucket, item, options) {\n const callback = options.callback || process.nextTick;\n if (!this.queues[bucket]) {\n this.queues[bucket] = new Deque();\n }\n const queue = this.queues[bucket];\n queue.push(item);\n if (!this.timeouts[bucket]) {\n this.timeouts[bucket] = setTimeout(() => {\n callback(() => {\n this.timeouts[bucket] = null;\n this.execute(bucket);\n });\n }, options.timeout);\n }\n }\n execute(bucket) {\n const queue = this.queues[bucket];\n if (!queue) {\n return;\n }\n const { length } = queue;\n if (!length) {\n return;\n }\n debug(\"send %d commands in %s queue\", length, bucket);\n this.queues[bucket] = null;\n while (queue.length > 0) {\n queue.shift()();\n }\n }\n}\nexports[\"default\"] = DelayQueue;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jbHVzdGVyL0RlbGF5UXVldWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsZ0JBQWdCLG1CQUFPLENBQUMsbUVBQVU7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLG9EQUFRO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWUiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvY2x1c3Rlci9EZWxheVF1ZXVlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbmNvbnN0IERlcXVlID0gcmVxdWlyZShcImRlbnF1ZVwiKTtcbmNvbnN0IGRlYnVnID0gKDAsIHV0aWxzXzEuRGVidWcpKFwiZGVsYXlxdWV1ZVwiKTtcbi8qKlxuICogUXVldWUgdGhhdCBydW5zIGl0ZW1zIGFmdGVyIHNwZWNpZmllZCBkdXJhdGlvblxuICovXG5jbGFzcyBEZWxheVF1ZXVlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5xdWV1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy50aW1lb3V0cyA9IHt9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgYSBuZXcgaXRlbSB0byB0aGUgcXVldWVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBidWNrZXQgYnVja2V0IG5hbWVcbiAgICAgKiBAcGFyYW0gaXRlbSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuIGxhdGVyXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKi9cbiAgICBwdXNoKGJ1Y2tldCwgaXRlbSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBjYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2sgfHwgcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXVlc1tidWNrZXRdKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlc1tidWNrZXRdID0gbmV3IERlcXVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVldWUgPSB0aGlzLnF1ZXVlc1tidWNrZXRdO1xuICAgICAgICBxdWV1ZS5wdXNoKGl0ZW0pO1xuICAgICAgICBpZiAoIXRoaXMudGltZW91dHNbYnVja2V0XSkge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0c1tidWNrZXRdID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVvdXRzW2J1Y2tldF0gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGUoYnVja2V0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIG9wdGlvbnMudGltZW91dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZXhlY3V0ZShidWNrZXQpIHtcbiAgICAgICAgY29uc3QgcXVldWUgPSB0aGlzLnF1ZXVlc1tidWNrZXRdO1xuICAgICAgICBpZiAoIXF1ZXVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHF1ZXVlO1xuICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlYnVnKFwic2VuZCAlZCBjb21tYW5kcyBpbiAlcyBxdWV1ZVwiLCBsZW5ndGgsIGJ1Y2tldCk7XG4gICAgICAgIHRoaXMucXVldWVzW2J1Y2tldF0gPSBudWxsO1xuICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcXVldWUuc2hpZnQoKSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gRGVsYXlRdWV1ZTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/cluster/DelayQueue.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/cluster/index.js":
/*!*****************************************************!*\
!*** ./node_modules/ioredis/built/cluster/index.js ***!
\*****************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst commands_1 = __webpack_require__(/*! @ioredis/commands */ \"(rsc)/./node_modules/@ioredis/commands/built/index.js\");\nconst events_1 = __webpack_require__(/*! events */ \"events\");\nconst redis_errors_1 = __webpack_require__(/*! redis-errors */ \"(rsc)/./node_modules/redis-errors/index.js\");\nconst standard_as_callback_1 = __webpack_require__(/*! standard-as-callback */ \"(rsc)/./node_modules/standard-as-callback/built/index.js\");\nconst Command_1 = __webpack_require__(/*! ../Command */ \"(rsc)/./node_modules/ioredis/built/Command.js\");\nconst ClusterAllFailedError_1 = __webpack_require__(/*! ../errors/ClusterAllFailedError */ \"(rsc)/./node_modules/ioredis/built/errors/ClusterAllFailedError.js\");\nconst Redis_1 = __webpack_require__(/*! ../Redis */ \"(rsc)/./node_modules/ioredis/built/Redis.js\");\nconst ScanStream_1 = __webpack_require__(/*! ../ScanStream */ \"(rsc)/./node_modules/ioredis/built/ScanStream.js\");\nconst transaction_1 = __webpack_require__(/*! ../transaction */ \"(rsc)/./node_modules/ioredis/built/transaction.js\");\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(rsc)/./node_modules/ioredis/built/utils/index.js\");\nconst applyMixin_1 = __webpack_require__(/*! ../utils/applyMixin */ \"(rsc)/./node_modules/ioredis/built/utils/applyMixin.js\");\nconst Commander_1 = __webpack_require__(/*! ../utils/Commander */ \"(rsc)/./node_modules/ioredis/built/utils/Commander.js\");\nconst ClusterOptions_1 = __webpack_require__(/*! ./ClusterOptions */ \"(rsc)/./node_modules/ioredis/built/cluster/ClusterOptions.js\");\nconst ClusterSubscriber_1 = __webpack_require__(/*! ./ClusterSubscriber */ \"(rsc)/./node_modules/ioredis/built/cluster/ClusterSubscriber.js\");\nconst ConnectionPool_1 = __webpack_require__(/*! ./ConnectionPool */ \"(rsc)/./node_modules/ioredis/built/cluster/ConnectionPool.js\");\nconst DelayQueue_1 = __webpack_require__(/*! ./DelayQueue */ \"(rsc)/./node_modules/ioredis/built/cluster/DelayQueue.js\");\nconst util_1 = __webpack_require__(/*! ./util */ \"(rsc)/./node_modules/ioredis/built/cluster/util.js\");\nconst Deque = __webpack_require__(/*! denque */ \"(rsc)/./node_modules/denque/index.js\");\nconst ClusterSubscriberGroup_1 = __webpack_require__(/*! ./ClusterSubscriberGroup */ \"(rsc)/./node_modules/ioredis/built/cluster/ClusterSubscriberGroup.js\");\nconst debug = (0, utils_1.Debug)(\"cluster\");\nconst REJECT_OVERWRITTEN_COMMANDS = new WeakSet();\n/**\n * Client for the official Redis Cluster\n */\nclass Cluster extends Commander_1.default {\n /**\n * Creates an instance of Cluster.\n */\n //TODO: Add an option that enables or disables sharded PubSub\n constructor(startupNodes, options = {}) {\n super();\n this.slots = [];\n /**\n * @ignore\n */\n this._groupsIds = {};\n /**\n * @ignore\n */\n this._groupsBySlot = Array(16384);\n /**\n * @ignore\n */\n this.isCluster = true;\n this.retryAttempts = 0;\n this.delayQueue = new DelayQueue_1.default();\n this.offlineQueue = new Deque();\n this.isRefreshing = false;\n this._refreshSlotsCacheCallbacks = [];\n this._autoPipelines = new Map();\n this._runningAutoPipelines = new Set();\n this._readyDelayedCallbacks = [];\n /**\n * Every time Cluster#connect() is called, this value will be\n * auto-incrementing. The purpose of this value is used for\n * discarding previous connect attampts when creating a new\n * connection.\n */\n this.connectionEpoch = 0;\n events_1.EventEmitter.call(this);\n this.startupNodes = startupNodes;\n this.options = (0, utils_1.defaults)({}, options, ClusterOptions_1.DEFAULT_CLUSTER_OPTIONS, this.options);\n if (this.options.shardedSubscribers == true)\n this.shardedSubscribers = new ClusterSubscriberGroup_1.default(this);\n if (this.options.redisOptions &&\n this.options.redisOptions.keyPrefix &&\n !this.options.keyPrefix) {\n this.options.keyPrefix = this.options.redisOptions.keyPrefix;\n }\n // validate options\n if (typeof this.options.scaleReads !== \"function\" &&\n [\"all\", \"master\", \"slave\"].indexOf(this.options.scaleReads) === -1) {\n throw new Error('Invalid option scaleReads \"' +\n this.options.scaleReads +\n '\". Expected \"all\", \"master\", \"slave\" or a custom function');\n }\n this.connectionPool = new ConnectionPool_1.default(this.options.redisOptions);\n this.connectionPool.on(\"-node\", (redis, key) => {\n this.emit(\"-node\", redis);\n });\n this.connectionPool.on(\"+node\", (redis) => {\n this.emit(\"+node\", redis);\n });\n this.connectionPool.on(\"drain\", () => {\n this.setStatus(\"close\");\n });\n this.connectionPool.on(\"nodeError\", (error, key) => {\n this.emit(\"node error\", error, key);\n });\n this.subscriber = new ClusterSubscriber_1.default(this.connectionPool, this);\n if (this.options.scripts) {\n Object.entries(this.options.scripts).forEach(([name, definition]) => {\n this.defineCommand(name, definition);\n });\n }\n if (this.options.lazyConnect) {\n this.setStatus(\"wait\");\n }\n else {\n this.connect().catch((err) => {\n debug(\"connecting failed: %s\", err);\n });\n }\n }\n /**\n * Connect to a cluster\n */\n connect() {\n return new Promise((resolve, reject) => {\n if (this.status === \"connecting\" ||\n this.status === \"connect\" ||\n this.status === \"ready\") {\n reject(new Error(\"Redis is already connecting/connected\"));\n return;\n }\n const epoch = ++this.connectionEpoch;\n this.setStatus(\"connecting\");\n this.resolveStartupNodeHostnames()\n .then((nodes) => {\n if (this.connectionEpoch !== epoch) {\n debug(\"discard connecting after resolving startup nodes because epoch not match: %d != %d\", epoch, this.connectionEpoch);\n reject(new redis_errors_1.RedisError(\"Connection is discarded because a new connection is made\"));\n return;\n }\n if (this.status !== \"connecting\") {\n debug(\"discard connecting after resolving startup nodes because the status changed to %s\", this.status);\n reject(new redis_errors_1.RedisError(\"Connection is aborted\"));\n return;\n }\n this.connectionPool.reset(nodes);\n const readyHandler = () => {\n this.setStatus(\"ready\");\n this.retryAttempts = 0;\n this.executeOfflineCommands();\n this.resetNodesRefreshInterval();\n resolve();\n };\n let closeListener = undefined;\n const refreshListener = () => {\n this.invokeReadyDelayedCallbacks(undefined);\n this.removeListener(\"close\", closeListener);\n this.manuallyClosing = false;\n this.setStatus(\"connect\");\n if (this.options.enableReadyCheck) {\n this.readyCheck((err, fail) => {\n if (err || fail) {\n debug(\"Ready check failed (%s). Reconnecting...\", err || fail);\n if (this.status === \"connect\") {\n this.disconnect(true);\n }\n }\n else {\n readyHandler();\n }\n });\n }\n else {\n readyHandler();\n }\n };\n closeListener = () => {\n const error = new Error(\"None of startup nodes is available\");\n this.removeListener(\"refresh\", refreshListener);\n this.invokeReadyDelayedCallbacks(error);\n reject(error);\n };\n this.once(\"refresh\", refreshListener);\n this.once(\"close\", closeListener);\n this.once(\"close\", this.handleCloseEvent.bind(this));\n this.refreshSlotsCache((err) => {\n if (err && err.message === ClusterAllFailedError_1.default.defaultMessage) {\n Redis_1.default.prototype.silentEmit.call(this, \"error\", err);\n this.connectionPool.reset([]);\n }\n });\n this.subscriber.start();\n if (this.options.shardedSubscribers) {\n this.shardedSubscribers.start();\n }\n })\n .catch((err) => {\n this.setStatus(\"close\");\n this.handleCloseEvent(err);\n this.invokeReadyDelayedCallbacks(err);\n reject(err);\n });\n });\n }\n /**\n * Disconnect from every node in the cluster.\n */\n disconnect(reconnect = false) {\n const status = this.status;\n this.setStatus(\"disconnecting\");\n if (!reconnect) {\n this.manuallyClosing = true;\n }\n if (this.reconnectTimeout && !reconnect) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n debug(\"Canceled reconnecting attempts\");\n }\n this.clearNodesRefreshInterval();\n this.subscriber.stop();\n if (this.options.shardedSubscribers) {\n this.shardedSubscribers.stop();\n }\n if (status === \"wait\") {\n this.setStatus(\"close\");\n this.handleCloseEvent();\n }\n else {\n this.connectionPool.reset([]);\n }\n }\n /**\n * Quit the cluster gracefully.\n */\n quit(callback) {\n const status = this.status;\n this.setStatus(\"disconnecting\");\n this.manuallyClosing = true;\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n this.clearNodesRefreshInterval();\n this.subscriber.stop();\n if (this.options.shardedSubscribers) {\n this.shardedSubscribers.stop();\n }\n if (status === \"wait\") {\n const ret = (0, standard_as_callback_1.default)(Promise.resolve(\"OK\"), callback);\n // use setImmediate to make sure \"close\" event\n // being emitted after quit() is returned\n setImmediate(function () {\n this.setStatus(\"close\");\n this.handleCloseEvent();\n }.bind(this));\n return ret;\n }\n return (0, standard_as_callback_1.default)(Promise.all(this.nodes().map((node) => node.quit().catch((err) => {\n // Ignore the error caused by disconnecting since\n // we're disconnecting...\n if (err.message === utils_1.CONNECTION_CLOSED_ERROR_MSG) {\n return \"OK\";\n }\n throw err;\n }))).then(() => \"OK\"), callback);\n }\n /**\n * Create a new instance with the same startup nodes and options as the current one.\n *\n * @example\n * ```js\n * var cluster = new Redis.Cluster([{ host: \"127.0.0.1\", port: \"30001\" }]);\n * var anotherCluster = cluster.duplicate();\n * ```\n */\n duplicate(overrideStartupNodes = [], overrideOptions = {}) {\n const startupNodes = overrideStartupNodes.length > 0\n ? overrideStartupNodes\n : this.startupNodes.slice(0);\n const options = Object.assign({}, this.options, overrideOptions);\n return new Cluster(startupNodes, options);\n }\n /**\n * Get nodes with the specified role\n */\n nodes(role = \"all\") {\n if (role !== \"all\" && role !== \"master\" && role !== \"slave\") {\n throw new Error('Invalid role \"' + role + '\". Expected \"all\", \"master\" or \"slave\"');\n }\n return this.connectionPool.getNodes(role);\n }\n /**\n * This is needed in order not to install a listener for each auto pipeline\n *\n * @ignore\n */\n delayUntilReady(callback) {\n this._readyDelayedCallbacks.push(callback);\n }\n /**\n * Get the number of commands queued in automatic pipelines.\n *\n * This is not available (and returns 0) until the cluster is connected and slots information have been received.\n */\n get autoPipelineQueueSize() {\n let queued = 0;\n for (const pipeline of this._autoPipelines.values()) {\n queued += pipeline.length;\n }\n return queued;\n }\n /**\n * Refresh the slot cache\n *\n * @ignore\n */\n refreshSlotsCache(callback) {\n if (callback) {\n this._refreshSlotsCacheCallbacks.push(callback);\n }\n if (this.isRefreshing) {\n return;\n }\n this.isRefreshing = true;\n const _this = this;\n const wrapper = (error) => {\n this.isRefreshing = false;\n for (const callback of this._refreshSlotsCacheCallbacks) {\n callback(error);\n }\n this._refreshSlotsCacheCallbacks = [];\n };\n const nodes = (0, utils_1.shuffle)(this.connectionPool.getNodes());\n let lastNodeError = null;\n function tryNode(index) {\n if (index === nodes.length) {\n const error = new ClusterAllFailedError_1.default(ClusterAllFailedError_1.default.defaultMessage, lastNodeError);\n return wrapper(error);\n }\n const node = nodes[index];\n const key = `${node.options.host}:${node.options.port}`;\n debug(\"getting slot cache from %s\", key);\n _this.getInfoFromNode(node, function (err) {\n switch (_this.status) {\n case \"close\":\n case \"end\":\n return wrapper(new Error(\"Cluster is disconnected.\"));\n case \"disconnecting\":\n return wrapper(new Error(\"Cluster is disconnecting.\"));\n }\n if (err) {\n _this.emit(\"node error\", err, key);\n lastNodeError = err;\n tryNode(index + 1);\n }\n else {\n _this.emit(\"refresh\");\n wrapper();\n }\n });\n }\n tryNode(0);\n }\n /**\n * @ignore\n */\n sendCommand(command, stream, node) {\n if (this.status === \"wait\") {\n this.connect().catch(utils_1.noop);\n }\n if (this.status === \"end\") {\n command.reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n return command.promise;\n }\n let to = this.options.scaleReads;\n if (to !== \"master\") {\n const isCommandReadOnly = command.isReadOnly ||\n ((0, commands_1.exists)(command.name) && (0, commands_1.hasFlag)(command.name, \"readonly\"));\n if (!isCommandReadOnly) {\n to = \"master\";\n }\n }\n let targetSlot = node ? node.slot : command.getSlot();\n const ttl = {};\n const _this = this;\n if (!node && !REJECT_OVERWRITTEN_COMMANDS.has(command)) {\n REJECT_OVERWRITTEN_COMMANDS.add(command);\n const reject = command.reject;\n command.reject = function (err) {\n const partialTry = tryConnection.bind(null, true);\n _this.handleError(err, ttl, {\n moved: function (slot, key) {\n debug(\"command %s is moved to %s\", command.name, key);\n targetSlot = Number(slot);\n if (_this.slots[slot]) {\n _this.slots[slot][0] = key;\n }\n else {\n _this.slots[slot] = [key];\n }\n _this._groupsBySlot[slot] =\n _this._groupsIds[_this.slots[slot].join(\";\")];\n _this.connectionPool.findOrCreate(_this.natMapper(key));\n tryConnection();\n debug(\"refreshing slot caches... (triggered by MOVED error)\");\n _this.refreshSlotsCache();\n },\n ask: function (slot, key) {\n debug(\"command %s is required to ask %s:%s\", command.name, key);\n const mapped = _this.natMapper(key);\n _this.connectionPool.findOrCreate(mapped);\n tryConnection(false, `${mapped.host}:${mapped.port}`);\n },\n tryagain: partialTry,\n clusterDown: partialTry,\n connectionClosed: partialTry,\n maxRedirections: function (redirectionError) {\n reject.call(command, redirectionError);\n },\n defaults: function () {\n reject.call(command, err);\n },\n });\n };\n }\n tryConnection();\n function tryConnection(random, asking) {\n if (_this.status === \"end\") {\n command.reject(new redis_errors_1.AbortError(\"Cluster is ended.\"));\n return;\n }\n let redis;\n if (_this.status === \"ready\" || command.name === \"cluster\") {\n if (node && node.redis) {\n redis = node.redis;\n }\n else if (Command_1.default.checkFlag(\"ENTER_SUBSCRIBER_MODE\", command.name) ||\n Command_1.default.checkFlag(\"EXIT_SUBSCRIBER_MODE\", command.name)) {\n if (_this.options.shardedSubscribers == true &&\n (command.name == \"ssubscribe\" || command.name == \"sunsubscribe\")) {\n const sub = _this.shardedSubscribers.getResponsibleSubscriber(targetSlot);\n let status = -1;\n if (command.name == \"ssubscribe\")\n status = _this.shardedSubscribers.addChannels(command.getKeys());\n if (command.name == \"sunsubscribe\")\n status = _this.shardedSubscribers.removeChannels(command.getKeys());\n if (status !== -1) {\n redis = sub.getInstance();\n }\n else {\n command.reject(new redis_errors_1.AbortError(\"Can't add or remove the given channels. Are they in the same slot?\"));\n }\n }\n else {\n redis = _this.subscriber.getInstance();\n }\n if (!redis) {\n command.reject(new redis_errors_1.AbortError(\"No subscriber for the cluster\"));\n return;\n }\n }\n else {\n if (!random) {\n if (typeof targetSlot === \"number\" && _this.slots[targetSlot]) {\n const nodeKeys = _this.slots[targetSlot];\n if (typeof to === \"function\") {\n const nodes = nodeKeys.map(function (key) {\n return _this.connectionPool.getInstanceByKey(key);\n });\n redis = to(nodes, command);\n if (Array.isArray(redis)) {\n redis = (0, utils_1.sample)(redis);\n }\n if (!redis) {\n redis = nodes[0];\n }\n }\n else {\n let key;\n if (to === \"all\") {\n key = (0, utils_1.sample)(nodeKeys);\n }\n else if (to === \"slave\" && nodeKeys.length > 1) {\n key = (0, utils_1.sample)(nodeKeys, 1);\n }\n else {\n key = nodeKeys[0];\n }\n redis = _this.connectionPool.getInstanceByKey(key);\n }\n }\n if (asking) {\n redis = _this.connectionPool.getInstanceByKey(asking);\n redis.asking();\n }\n }\n if (!redis) {\n redis =\n (typeof to === \"function\"\n ? null\n : _this.connectionPool.getSampleInstance(to)) ||\n _this.connectionPool.getSampleInstance(\"all\");\n }\n }\n if (node && !node.redis) {\n node.redis = redis;\n }\n }\n if (redis) {\n redis.sendCommand(command, stream);\n }\n else if (_this.options.enableOfflineQueue) {\n _this.offlineQueue.push({\n command: command,\n stream: stream,\n node: node,\n });\n }\n else {\n command.reject(new Error(\"Cluster isn't ready and enableOfflineQueue options is false\"));\n }\n }\n return command.promise;\n }\n sscanStream(key, options) {\n return this.createScanStream(\"sscan\", { key, options });\n }\n sscanBufferStream(key, options) {\n return this.createScanStream(\"sscanBuffer\", { key, options });\n }\n hscanStream(key, options) {\n return this.createScanStream(\"hscan\", { key, options });\n }\n hscanBufferStream(key, options) {\n return this.createScanStream(\"hscanBuffer\", { key, options });\n }\n zscanStream(key, options) {\n return this.createScanStream(\"zscan\", { key, options });\n }\n zscanBufferStream(key, options) {\n return this.createScanStream(\"zscanBuffer\", { key, options });\n }\n /**\n * @ignore\n */\n handleError(error, ttl, handlers) {\n if (typeof ttl.value === \"undefined\") {\n ttl.value = this.options.maxRedirections;\n }\n else {\n ttl.value -= 1;\n }\n if (ttl.value <= 0) {\n handlers.maxRedirections(new Error(\"Too many Cluster redirections. Last error: \" + error));\n return;\n }\n const errv = error.message.split(\" \");\n if (errv[0] === \"MOVED\") {\n const timeout = this.options.retryDelayOnMoved;\n if (timeout && typeof timeout === \"number\") {\n this.delayQueue.push(\"moved\", handlers.moved.bind(null, errv[1], errv[2]), { timeout });\n }\n else {\n handlers.moved(errv[1], errv[2]);\n }\n }\n else if (errv[0] === \"ASK\") {\n handlers.ask(errv[1], errv[2]);\n }\n else if (errv[0] === \"TRYAGAIN\") {\n this.delayQueue.push(\"tryagain\", handlers.tryagain, {\n timeout: this.options.retryDelayOnTryAgain,\n });\n }\n else if (errv[0] === \"CLUSTERDOWN\" &&\n this.options.retryDelayOnClusterDown > 0) {\n this.delayQueue.push(\"clusterdown\", handlers.connectionClosed, {\n timeout: this.options.retryDelayOnClusterDown,\n callback: this.refreshSlotsCache.bind(this),\n });\n }\n else if (error.message === utils_1.CONNECTION_CLOSED_ERROR_MSG &&\n this.options.retryDelayOnFailover > 0 &&\n this.status === \"ready\") {\n this.delayQueue.push(\"failover\", handlers.connectionClosed, {\n timeout: this.options.retryDelayOnFailover,\n callback: this.refreshSlotsCache.bind(this),\n });\n }\n else {\n handlers.defaults();\n }\n }\n resetOfflineQueue() {\n this.offlineQueue = new Deque();\n }\n clearNodesRefreshInterval() {\n if (this.slotsTimer) {\n clearTimeout(this.slotsTimer);\n this.slotsTimer = null;\n }\n }\n resetNodesRefreshInterval() {\n if (this.slotsTimer || !this.options.slotsRefreshInterval) {\n return;\n }\n const nextRound = () => {\n this.slotsTimer = setTimeout(() => {\n debug('refreshing slot caches... (triggered by \"slotsRefreshInterval\" option)');\n this.refreshSlotsCache(() => {\n nextRound();\n });\n }, this.options.slotsRefreshInterval);\n };\n nextRound();\n }\n /**\n * Change cluster instance's status\n */\n setStatus(status) {\n debug(\"status: %s -> %s\", this.status || \"[empty]\", status);\n this.status = status;\n process.nextTick(() => {\n this.emit(status);\n });\n }\n /**\n * Called when closed to check whether a reconnection should be made\n */\n handleCloseEvent(reason) {\n if (reason) {\n debug(\"closed because %s\", reason);\n }\n let retryDelay;\n if (!this.manuallyClosing &&\n typeof this.options.clusterRetryStrategy === \"function\") {\n retryDelay = this.options.clusterRetryStrategy.call(this, ++this.retryAttempts, reason);\n }\n if (typeof retryDelay === \"number\") {\n this.setStatus(\"reconnecting\");\n this.reconnectTimeout = setTimeout(() => {\n this.reconnectTimeout = null;\n debug(\"Cluster is disconnected. Retrying after %dms\", retryDelay);\n this.connect().catch(function (err) {\n debug(\"Got error %s when reconnecting. Ignoring...\", err);\n });\n }, retryDelay);\n }\n else {\n this.setStatus(\"end\");\n this.flushQueue(new Error(\"None of startup nodes is available\"));\n }\n }\n /**\n * Flush offline queue with error.\n */\n flushQueue(error) {\n let item;\n while ((item = this.offlineQueue.shift())) {\n item.command.reject(error);\n }\n }\n executeOfflineCommands() {\n if (this.offlineQueue.length) {\n debug(\"send %d commands in offline queue\", this.offlineQueue.length);\n const offlineQueue = this.offlineQueue;\n this.resetOfflineQueue();\n let item;\n while ((item = offlineQueue.shift())) {\n this.sendCommand(item.command, item.stream, item.node);\n }\n }\n }\n natMapper(nodeKey) {\n const key = typeof nodeKey === \"string\"\n ? nodeKey\n : `${nodeKey.host}:${nodeKey.port}`;\n let mapped = null;\n if (this.options.natMap && typeof this.options.natMap === \"function\") {\n mapped = this.options.natMap(key);\n }\n else if (this.options.natMap && typeof this.options.natMap === \"object\") {\n mapped = this.options.natMap[key];\n }\n if (mapped) {\n debug(\"NAT mapping %s -> %O\", key, mapped);\n return Object.assign({}, mapped);\n }\n return typeof nodeKey === \"string\"\n ? (0, util_1.nodeKeyToRedisOptions)(nodeKey)\n : nodeKey;\n }\n getInfoFromNode(redis, callback) {\n if (!redis) {\n return callback(new Error(\"Node is disconnected\"));\n }\n // Use a duplication of the connection to avoid\n // timeouts when the connection is in the blocking\n // mode (e.g. waiting for BLPOP).\n const duplicatedConnection = redis.duplicate({\n enableOfflineQueue: true,\n enableReadyCheck: false,\n retryStrategy: null,\n connectionName: (0, util_1.getConnectionName)(\"refresher\", this.options.redisOptions && this.options.redisOptions.connectionName),\n });\n // Ignore error events since we will handle\n // exceptions for the CLUSTER SLOTS command.\n duplicatedConnection.on(\"error\", utils_1.noop);\n duplicatedConnection.cluster(\"SLOTS\", (0, utils_1.timeout)((err, result) => {\n duplicatedConnection.disconnect();\n if (err) {\n debug(\"error encountered running CLUSTER.SLOTS: %s\", err);\n return callback(err);\n }\n if (this.status === \"disconnecting\" ||\n this.status === \"close\" ||\n this.status === \"end\") {\n debug(\"ignore CLUSTER.SLOTS results (count: %d) since cluster status is %s\", result.length, this.status);\n callback();\n return;\n }\n const nodes = [];\n debug(\"cluster slots result count: %d\", result.length);\n for (let i = 0; i < result.length; ++i) {\n const items = result[i];\n const slotRangeStart = items[0];\n const slotRangeEnd = items[1];\n const keys = [];\n for (let j = 2; j < items.length; j++) {\n if (!items[j][0]) {\n continue;\n }\n const node = this.natMapper({\n host: items[j][0],\n port: items[j][1],\n });\n node.readOnly = j !== 2;\n nodes.push(node);\n keys.push(node.host + \":\" + node.port);\n }\n debug(\"cluster slots result [%d]: slots %d~%d served by %s\", i, slotRangeStart, slotRangeEnd, keys);\n for (let slot = slotRangeStart; slot <= slotRangeEnd; slot++) {\n this.slots[slot] = keys;\n }\n }\n // Assign to each node keys a numeric value to make autopipeline comparison faster.\n this._groupsIds = Object.create(null);\n let j = 0;\n for (let i = 0; i < 16384; i++) {\n const target = (this.slots[i] || []).join(\";\");\n if (!target.length) {\n this._groupsBySlot[i] = undefined;\n continue;\n }\n if (!this._groupsIds[target]) {\n this._groupsIds[target] = ++j;\n }\n this._groupsBySlot[i] = this._groupsIds[target];\n }\n this.connectionPool.reset(nodes);\n callback();\n }, this.options.slotsRefreshTimeout));\n }\n invokeReadyDelayedCallbacks(err) {\n for (const c of this._readyDelayedCallbacks) {\n process.nextTick(c, err);\n }\n this._readyDelayedCallbacks = [];\n }\n /**\n * Check whether Cluster is able to process commands\n */\n readyCheck(callback) {\n this.cluster(\"INFO\", (err, res) => {\n if (err) {\n return callback(err);\n }\n if (typeof res !== \"string\") {\n return callback();\n }\n let state;\n const lines = res.split(\"\\r\\n\");\n for (let i = 0; i < lines.length; ++i) {\n const parts = lines[i].split(\":\");\n if (parts[0] === \"cluster_state\") {\n state = parts[1];\n break;\n }\n }\n if (state === \"fail\") {\n debug(\"cluster state not ok (%s)\", state);\n callback(null, state);\n }\n else {\n callback();\n }\n });\n }\n resolveSrv(hostname) {\n return new Promise((resolve, reject) => {\n this.options.resolveSrv(hostname, (err, records) => {\n if (err) {\n return reject(err);\n }\n const self = this, groupedRecords = (0, util_1.groupSrvRecords)(records), sortedKeys = Object.keys(groupedRecords).sort((a, b) => parseInt(a) - parseInt(b));\n function tryFirstOne(err) {\n if (!sortedKeys.length) {\n return reject(err);\n }\n const key = sortedKeys[0], group = groupedRecords[key], record = (0, util_1.weightSrvRecords)(group);\n if (!group.records.length) {\n sortedKeys.shift();\n }\n self.dnsLookup(record.name).then((host) => resolve({\n host,\n port: record.port,\n }), tryFirstOne);\n }\n tryFirstOne();\n });\n });\n }\n dnsLookup(hostname) {\n return new Promise((resolve, reject) => {\n this.options.dnsLookup(hostname, (err, address) => {\n if (err) {\n debug(\"failed to resolve hostname %s to IP: %s\", hostname, err.message);\n reject(err);\n }\n else {\n debug(\"resolved hostname %s to IP %s\", hostname, address);\n resolve(address);\n }\n });\n });\n }\n /**\n * Normalize startup nodes, and resolving hostnames to IPs.\n *\n * This process happens every time when #connect() is called since\n * #startupNodes and DNS records may chanage.\n */\n async resolveStartupNodeHostnames() {\n if (!Array.isArray(this.startupNodes) || this.startupNodes.length === 0) {\n throw new Error(\"`startupNodes` should contain at least one node.\");\n }\n const startupNodes = (0, util_1.normalizeNodeOptions)(this.startupNodes);\n const hostnames = (0, util_1.getUniqueHostnamesFromOptions)(startupNodes);\n if (hostnames.length === 0) {\n return startupNodes;\n }\n const configs = await Promise.all(hostnames.map((this.options.useSRVRecords ? this.resolveSrv : this.dnsLookup).bind(this)));\n const hostnameToConfig = (0, utils_1.zipMap)(hostnames, configs);\n return startupNodes.map((node) => {\n const config = hostnameToConfig.get(node.host);\n if (!config) {\n return node;\n }\n if (this.options.useSRVRecords) {\n return Object.assign({}, node, config);\n }\n return Object.assign({}, node, { host: config });\n });\n }\n createScanStream(command, { key, options = {} }) {\n return new ScanStream_1.default({\n objectMode: true,\n key: key,\n redis: this,\n command: command,\n ...options,\n });\n }\n}\n(0, applyMixin_1.default)(Cluster, events_1.EventEmitter);\n(0, transaction_1.addTransactionSupport)(Cluster.prototype);\nexports[\"default\"] = Cluster;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jbHVzdGVyL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELG1CQUFtQixtQkFBTyxDQUFDLGdGQUFtQjtBQUM5QyxpQkFBaUIsbUJBQU8sQ0FBQyxzQkFBUTtBQUNqQyx1QkFBdUIsbUJBQU8sQ0FBQyxnRUFBYztBQUM3QywrQkFBK0IsbUJBQU8sQ0FBQyxzRkFBc0I7QUFDN0Qsa0JBQWtCLG1CQUFPLENBQUMsaUVBQVk7QUFDdEMsZ0NBQWdDLG1CQUFPLENBQUMsMkdBQWlDO0FBQ3pFLGdCQUFnQixtQkFBTyxDQUFDLDZEQUFVO0FBQ2xDLHFCQUFxQixtQkFBTyxDQUFDLHVFQUFlO0FBQzVDLHNCQUFzQixtQkFBTyxDQUFDLHlFQUFnQjtBQUM5QyxnQkFBZ0IsbUJBQU8sQ0FBQyxtRUFBVTtBQUNsQyxxQkFBcUIsbUJBQU8sQ0FBQyxtRkFBcUI7QUFDbEQsb0JBQW9CLG1CQUFPLENBQUMsaUZBQW9CO0FBQ2hELHlCQUF5QixtQkFBTyxDQUFDLHNGQUFrQjtBQUNuRCw0QkFBNEIsbUJBQU8sQ0FBQyw0RkFBcUI7QUFDekQseUJBQXlCLG1CQUFPLENBQUMsc0ZBQWtCO0FBQ25ELHFCQUFxQixtQkFBTyxDQUFDLDhFQUFjO0FBQzNDLGVBQWUsbUJBQU8sQ0FBQyxrRUFBUTtBQUMvQixjQUFjLG1CQUFPLENBQUMsb0RBQVE7QUFDOUIsaUNBQWlDLG1CQUFPLENBQUMsc0dBQTBCO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsa0NBQWtDO0FBQzVFO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RDtBQUM3RDtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGtCQUFrQixHQUFHLGtCQUFrQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNFQUFzRTtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxZQUFZLEdBQUcsWUFBWTtBQUMzRSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELGNBQWM7QUFDOUQ7QUFDQTtBQUNBLHNEQUFzRCxjQUFjO0FBQ3BFO0FBQ0E7QUFDQSxnREFBZ0QsY0FBYztBQUM5RDtBQUNBO0FBQ0Esc0RBQXNELGNBQWM7QUFDcEU7QUFDQTtBQUNBLGdEQUFnRCxjQUFjO0FBQzlEO0FBQ0E7QUFDQSxzREFBc0QsY0FBYztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZGQUE2RixTQUFTO0FBQ3RHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixhQUFhLEdBQUcsYUFBYTtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1CO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGtCQUFrQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxzQkFBc0I7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFdBQVc7QUFDdkMsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixrQkFBa0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQSxtQ0FBbUMsVUFBVSxjQUFjO0FBQzNELFNBQVM7QUFDVDtBQUNBLGdDQUFnQyxtQkFBbUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWUiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvY2x1c3Rlci9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvbW1hbmRzXzEgPSByZXF1aXJlKFwiQGlvcmVkaXMvY29tbWFuZHNcIik7XG5jb25zdCBldmVudHNfMSA9IHJlcXVpcmUoXCJldmVudHNcIik7XG5jb25zdCByZWRpc19lcnJvcnNfMSA9IHJlcXVpcmUoXCJyZWRpcy1lcnJvcnNcIik7XG5jb25zdCBzdGFuZGFyZF9hc19jYWxsYmFja18xID0gcmVxdWlyZShcInN0YW5kYXJkLWFzLWNhbGxiYWNrXCIpO1xuY29uc3QgQ29tbWFuZF8xID0gcmVxdWlyZShcIi4uL0NvbW1hbmRcIik7XG5jb25zdCBDbHVzdGVyQWxsRmFpbGVkRXJyb3JfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnMvQ2x1c3RlckFsbEZhaWxlZEVycm9yXCIpO1xuY29uc3QgUmVkaXNfMSA9IHJlcXVpcmUoXCIuLi9SZWRpc1wiKTtcbmNvbnN0IFNjYW5TdHJlYW1fMSA9IHJlcXVpcmUoXCIuLi9TY2FuU3RyZWFtXCIpO1xuY29uc3QgdHJhbnNhY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi90cmFuc2FjdGlvblwiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5jb25zdCBhcHBseU1peGluXzEgPSByZXF1aXJlKFwiLi4vdXRpbHMvYXBwbHlNaXhpblwiKTtcbmNvbnN0IENvbW1hbmRlcl8xID0gcmVxdWlyZShcIi4uL3V0aWxzL0NvbW1hbmRlclwiKTtcbmNvbnN0IENsdXN0ZXJPcHRpb25zXzEgPSByZXF1aXJlKFwiLi9DbHVzdGVyT3B0aW9uc1wiKTtcbmNvbnN0IENsdXN0ZXJTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9DbHVzdGVyU3Vic2NyaWJlclwiKTtcbmNvbnN0IENvbm5lY3Rpb25Qb29sXzEgPSByZXF1aXJlKFwiLi9Db25uZWN0aW9uUG9vbFwiKTtcbmNvbnN0IERlbGF5UXVldWVfMSA9IHJlcXVpcmUoXCIuL0RlbGF5UXVldWVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgRGVxdWUgPSByZXF1aXJlKFwiZGVucXVlXCIpO1xuY29uc3QgQ2x1c3RlclN1YnNjcmliZXJHcm91cF8xID0gcmVxdWlyZShcIi4vQ2x1c3RlclN1YnNjcmliZXJHcm91cFwiKTtcbmNvbnN0IGRlYnVnID0gKDAsIHV0aWxzXzEuRGVidWcpKFwiY2x1c3RlclwiKTtcbmNvbnN0IFJFSkVDVF9PVkVSV1JJVFRFTl9DT01NQU5EUyA9IG5ldyBXZWFrU2V0KCk7XG4vKipcbiAqIENsaWVudCBmb3IgdGhlIG9mZmljaWFsIFJlZGlzIENsdXN0ZXJcbiAqL1xuY2xhc3MgQ2x1c3RlciBleHRlbmRzIENvbW1hbmRlcl8xLmRlZmF1bHQge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQ2x1c3Rlci5cbiAgICAgKi9cbiAgICAvL1RPRE86IEFkZCBhbiBvcHRpb24gdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIHNoYXJkZWQgUHViU3ViXG4gICAgY29uc3RydWN0b3Ioc3RhcnR1cE5vZGVzLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zbG90cyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGlnbm9yZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fZ3JvdXBzSWRzID0ge307XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaWdub3JlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9ncm91cHNCeVNsb3QgPSBBcnJheSgxNjM4NCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaWdub3JlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlzQ2x1c3RlciA9IHRydWU7XG4gICAgICAgIHRoaXMucmV0cnlBdHRlbXB0cyA9IDA7XG4gICAgICAgIHRoaXMuZGVsYXlRdWV1ZSA9IG5ldyBEZWxheVF1ZXVlXzEuZGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9mZmxpbmVRdWV1ZSA9IG5ldyBEZXF1ZSgpO1xuICAgICAgICB0aGlzLmlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9yZWZyZXNoU2xvdHNDYWNoZUNhbGxiYWNrcyA9IFtdO1xuICAgICAgICB0aGlzLl9hdXRvUGlwZWxpbmVzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLl9ydW5uaW5nQXV0b1BpcGVsaW5lcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy5fcmVhZHlEZWxheWVkQ2FsbGJhY2tzID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFdmVyeSB0aW1lIENsdXN0ZXIjY29ubmVjdCgpIGlzIGNhbGxlZCwgdGhpcyB2YWx1ZSB3aWxsIGJlXG4gICAgICAgICAqIGF1dG8taW5jcmVtZW50aW5nLiBUaGUgcHVycG9zZSBvZiB0aGlzIHZhbHVlIGlzIHVzZWQgZm9yXG4gICAgICAgICAqIGRpc2NhcmRpbmcgcHJldmlvdXMgY29ubmVjdCBhdHRhbXB0cyB3aGVuIGNyZWF0aW5nIGEgbmV3XG4gICAgICAgICAqIGNvbm5lY3Rpb24uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25FcG9jaCA9IDA7XG4gICAgICAgIGV2ZW50c18xLkV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnN0YXJ0dXBOb2RlcyA9IHN0YXJ0dXBOb2RlcztcbiAgICAgICAgdGhpcy5vcHRpb25zID0gKDAsIHV0aWxzXzEuZGVmYXVsdHMpKHt9LCBvcHRpb25zLCBDbHVzdGVyT3B0aW9uc18xLkRFRkFVTFRfQ0xVU1RFUl9PUFRJT05TLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNoYXJkZWRTdWJzY3JpYmVycyA9PSB0cnVlKVxuICAgICAgICAgICAgdGhpcy5zaGFyZGVkU3Vic2NyaWJlcnMgPSBuZXcgQ2x1c3RlclN1YnNjcmliZXJHcm91cF8xLmRlZmF1bHQodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVkaXNPcHRpb25zICYmXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucmVkaXNPcHRpb25zLmtleVByZWZpeCAmJlxuICAgICAgICAgICAgIXRoaXMub3B0aW9ucy5rZXlQcmVmaXgpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5rZXlQcmVmaXggPSB0aGlzLm9wdGlvbnMucmVkaXNPcHRpb25zLmtleVByZWZpeDtcbiAgICAgICAgfVxuICAgICAgICAvLyB2YWxpZGF0ZSBvcHRpb25zXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLnNjYWxlUmVhZHMgIT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgICAgW1wiYWxsXCIsIFwibWFzdGVyXCIsIFwic2xhdmVcIl0uaW5kZXhPZih0aGlzLm9wdGlvbnMuc2NhbGVSZWFkcykgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgb3B0aW9uIHNjYWxlUmVhZHMgXCInICtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuc2NhbGVSZWFkcyArXG4gICAgICAgICAgICAgICAgJ1wiLiBFeHBlY3RlZCBcImFsbFwiLCBcIm1hc3RlclwiLCBcInNsYXZlXCIgb3IgYSBjdXN0b20gZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25Qb29sID0gbmV3IENvbm5lY3Rpb25Qb29sXzEuZGVmYXVsdCh0aGlzLm9wdGlvbnMucmVkaXNPcHRpb25zKTtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uUG9vbC5vbihcIi1ub2RlXCIsIChyZWRpcywga2V5KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoXCItbm9kZVwiLCByZWRpcyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25Qb29sLm9uKFwiK25vZGVcIiwgKHJlZGlzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoXCIrbm9kZVwiLCByZWRpcyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25Qb29sLm9uKFwiZHJhaW5cIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoXCJjbG9zZVwiKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvblBvb2wub24oXCJub2RlRXJyb3JcIiwgKGVycm9yLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW1pdChcIm5vZGUgZXJyb3JcIiwgZXJyb3IsIGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YnNjcmliZXIgPSBuZXcgQ2x1c3RlclN1YnNjcmliZXJfMS5kZWZhdWx0KHRoaXMuY29ubmVjdGlvblBvb2wsIHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNjcmlwdHMpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMub3B0aW9ucy5zY3JpcHRzKS5mb3JFYWNoKChbbmFtZSwgZGVmaW5pdGlvbl0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUNvbW1hbmQobmFtZSwgZGVmaW5pdGlvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxhenlDb25uZWN0KSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXR1cyhcIndhaXRcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3QoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVidWcoXCJjb25uZWN0aW5nIGZhaWxlZDogJXNcIiwgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbm5lY3QgdG8gYSBjbHVzdGVyXG4gICAgICovXG4gICAgY29ubmVjdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gXCJjb25uZWN0aW5nXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9PT0gXCJjb25uZWN0XCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9PT0gXCJyZWFkeVwiKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlJlZGlzIGlzIGFscmVhZHkgY29ubmVjdGluZy9jb25uZWN0ZWRcIikpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVwb2NoID0gKyt0aGlzLmNvbm5lY3Rpb25FcG9jaDtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKFwiY29ubmVjdGluZ1wiKTtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVN0YXJ0dXBOb2RlSG9zdG5hbWVzKClcbiAgICAgICAgICAgICAgICAudGhlbigobm9kZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uRXBvY2ggIT09IGVwb2NoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnKFwiZGlzY2FyZCBjb25uZWN0aW5nIGFmdGVyIHJlc29sdmluZyBzdGFydHVwIG5vZGVzIGJlY2F1c2UgZXBvY2ggbm90IG1hdGNoOiAlZCAhPSAlZFwiLCBlcG9jaCwgdGhpcy5jb25uZWN0aW9uRXBvY2gpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IHJlZGlzX2Vycm9yc18xLlJlZGlzRXJyb3IoXCJDb25uZWN0aW9uIGlzIGRpc2NhcmRlZCBiZWNhdXNlIGEgbmV3IGNvbm5lY3Rpb24gaXMgbWFkZVwiKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzICE9PSBcImNvbm5lY3RpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcImRpc2NhcmQgY29ubmVjdGluZyBhZnRlciByZXNvbHZpbmcgc3RhcnR1cCBub2RlcyBiZWNhdXNlIHRoZSBzdGF0dXMgY2hhbmdlZCB0byAlc1wiLCB0aGlzLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgcmVkaXNfZXJyb3JzXzEuUmVkaXNFcnJvcihcIkNvbm5lY3Rpb24gaXMgYWJvcnRlZFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uUG9vbC5yZXNldChub2Rlcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVhZHlIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXR1cyhcInJlYWR5XCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJldHJ5QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVPZmZsaW5lQ29tbWFuZHMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldE5vZGVzUmVmcmVzaEludGVydmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxldCBjbG9zZUxpc3RlbmVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VSZWFkeURlbGF5ZWRDYWxsYmFja3ModW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIGNsb3NlTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hbnVhbGx5Q2xvc2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXR1cyhcImNvbm5lY3RcIik7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlUmVhZHlDaGVjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkeUNoZWNrKChlcnIsIGZhaWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIHx8IGZhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoXCJSZWFkeSBjaGVjayBmYWlsZWQgKCVzKS4gUmVjb25uZWN0aW5nLi4uXCIsIGVyciB8fCBmYWlsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSBcImNvbm5lY3RcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkeUhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5SGFuZGxlcigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjbG9zZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcIk5vbmUgb2Ygc3RhcnR1cCBub2RlcyBpcyBhdmFpbGFibGVcIik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIoXCJyZWZyZXNoXCIsIHJlZnJlc2hMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlUmVhZHlEZWxheWVkQ2FsbGJhY2tzKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMub25jZShcInJlZnJlc2hcIiwgcmVmcmVzaExpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoXCJjbG9zZVwiLCBjbG9zZUxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoXCJjbG9zZVwiLCB0aGlzLmhhbmRsZUNsb3NlRXZlbnQuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoU2xvdHNDYWNoZSgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgJiYgZXJyLm1lc3NhZ2UgPT09IENsdXN0ZXJBbGxGYWlsZWRFcnJvcl8xLmRlZmF1bHQuZGVmYXVsdE1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlZGlzXzEuZGVmYXVsdC5wcm90b3R5cGUuc2lsZW50RW1pdC5jYWxsKHRoaXMsIFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblBvb2wucmVzZXQoW10pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVyLnN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaGFyZGVkU3Vic2NyaWJlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZGVkU3Vic2NyaWJlcnMuc3RhcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoXCJjbG9zZVwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNsb3NlRXZlbnQoZXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZVJlYWR5RGVsYXllZENhbGxiYWNrcyhlcnIpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEaXNjb25uZWN0IGZyb20gZXZlcnkgbm9kZSBpbiB0aGUgY2x1c3Rlci5cbiAgICAgKi9cbiAgICBkaXNjb25uZWN0KHJlY29ubmVjdCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuICAgICAgICB0aGlzLnNldFN0YXR1cyhcImRpc2Nvbm5lY3RpbmdcIik7XG4gICAgICAgIGlmICghcmVjb25uZWN0KSB7XG4gICAgICAgICAgICB0aGlzLm1hbnVhbGx5Q2xvc2luZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVjb25uZWN0VGltZW91dCAmJiAhcmVjb25uZWN0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWNvbm5lY3RUaW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMucmVjb25uZWN0VGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICBkZWJ1ZyhcIkNhbmNlbGVkIHJlY29ubmVjdGluZyBhdHRlbXB0c1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyTm9kZXNSZWZyZXNoSW50ZXJ2YWwoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVyLnN0b3AoKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaGFyZGVkU3Vic2NyaWJlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2hhcmRlZFN1YnNjcmliZXJzLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzID09PSBcIndhaXRcIikge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoXCJjbG9zZVwiKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xvc2VFdmVudCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uUG9vbC5yZXNldChbXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUXVpdCB0aGUgY2x1c3RlciBncmFjZWZ1bGx5LlxuICAgICAqL1xuICAgIHF1aXQoY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5zdGF0dXM7XG4gICAgICAgIHRoaXMuc2V0U3RhdHVzKFwiZGlzY29ubmVjdGluZ1wiKTtcbiAgICAgICAgdGhpcy5tYW51YWxseUNsb3NpbmcgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5yZWNvbm5lY3RUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWNvbm5lY3RUaW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMucmVjb25uZWN0VGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhck5vZGVzUmVmcmVzaEludGVydmFsKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlci5zdG9wKCk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hhcmRlZFN1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICB0aGlzLnNoYXJkZWRTdWJzY3JpYmVycy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJ3YWl0XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9ICgwLCBzdGFuZGFyZF9hc19jYWxsYmFja18xLmRlZmF1bHQpKFByb21pc2UucmVzb2x2ZShcIk9LXCIpLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAvLyB1c2Ugc2V0SW1tZWRpYXRlIHRvIG1ha2Ugc3VyZSBcImNsb3NlXCIgZXZlbnRcbiAgICAgICAgICAgIC8vIGJlaW5nIGVtaXR0ZWQgYWZ0ZXIgcXVpdCgpIGlzIHJldHVybmVkXG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKFwiY2xvc2VcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDbG9zZUV2ZW50KCk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKDAsIHN0YW5kYXJkX2FzX2NhbGxiYWNrXzEuZGVmYXVsdCkoUHJvbWlzZS5hbGwodGhpcy5ub2RlcygpLm1hcCgobm9kZSkgPT4gbm9kZS5xdWl0KCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgLy8gSWdub3JlIHRoZSBlcnJvciBjYXVzZWQgYnkgZGlzY29ubmVjdGluZyBzaW5jZVxuICAgICAgICAgICAgLy8gd2UncmUgZGlzY29ubmVjdGluZy4uLlxuICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlID09PSB1dGlsc18xLkNPTk5FQ1RJT05fQ0xPU0VEX0VSUk9SX01TRykge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIk9LXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pKSkudGhlbigoKSA9PiBcIk9LXCIpLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSB3aXRoIHRoZSBzYW1lIHN0YXJ0dXAgbm9kZXMgYW5kIG9wdGlvbnMgYXMgdGhlIGN1cnJlbnQgb25lLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIHZhciBjbHVzdGVyID0gbmV3IFJlZGlzLkNsdXN0ZXIoW3sgaG9zdDogXCIxMjcuMC4wLjFcIiwgcG9ydDogXCIzMDAwMVwiIH1dKTtcbiAgICAgKiB2YXIgYW5vdGhlckNsdXN0ZXIgPSBjbHVzdGVyLmR1cGxpY2F0ZSgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGR1cGxpY2F0ZShvdmVycmlkZVN0YXJ0dXBOb2RlcyA9IFtdLCBvdmVycmlkZU9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBzdGFydHVwTm9kZXMgPSBvdmVycmlkZVN0YXJ0dXBOb2Rlcy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IG92ZXJyaWRlU3RhcnR1cE5vZGVzXG4gICAgICAgICAgICA6IHRoaXMuc3RhcnR1cE5vZGVzLnNsaWNlKDApO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zLCBvdmVycmlkZU9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gbmV3IENsdXN0ZXIoc3RhcnR1cE5vZGVzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IG5vZGVzIHdpdGggdGhlIHNwZWNpZmllZCByb2xlXG4gICAgICovXG4gICAgbm9kZXMocm9sZSA9IFwiYWxsXCIpIHtcbiAgICAgICAgaWYgKHJvbGUgIT09IFwiYWxsXCIgJiYgcm9sZSAhPT0gXCJtYXN0ZXJcIiAmJiByb2xlICE9PSBcInNsYXZlXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByb2xlIFwiJyArIHJvbGUgKyAnXCIuIEV4cGVjdGVkIFwiYWxsXCIsIFwibWFzdGVyXCIgb3IgXCJzbGF2ZVwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblBvb2wuZ2V0Tm9kZXMocm9sZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgbmVlZGVkIGluIG9yZGVyIG5vdCB0byBpbnN0YWxsIGEgbGlzdGVuZXIgZm9yIGVhY2ggYXV0byBwaXBlbGluZVxuICAgICAqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIGRlbGF5VW50aWxSZWFkeShjYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9yZWFkeURlbGF5ZWRDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIGNvbW1hbmRzIHF1ZXVlZCBpbiBhdXRvbWF0aWMgcGlwZWxpbmVzLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBub3QgYXZhaWxhYmxlIChhbmQgcmV0dXJucyAwKSB1bnRpbCB0aGUgY2x1c3RlciBpcyBjb25uZWN0ZWQgYW5kIHNsb3RzIGluZm9ybWF0aW9uIGhhdmUgYmVlbiByZWNlaXZlZC5cbiAgICAgKi9cbiAgICBnZXQgYXV0b1BpcGVsaW5lUXVldWVTaXplKCkge1xuICAgICAgICBsZXQgcXVldWVkID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBwaXBlbGluZSBvZiB0aGlzLl9hdXRvUGlwZWxpbmVzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBxdWV1ZWQgKz0gcGlwZWxpbmUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBxdWV1ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZnJlc2ggdGhlIHNsb3QgY2FjaGVcbiAgICAgKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICByZWZyZXNoU2xvdHNDYWNoZShjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hTbG90c0NhY2hlQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzUmVmcmVzaGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLl9yZWZyZXNoU2xvdHNDYWNoZUNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hTbG90c0NhY2hlQ2FsbGJhY2tzID0gW107XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5vZGVzID0gKDAsIHV0aWxzXzEuc2h1ZmZsZSkodGhpcy5jb25uZWN0aW9uUG9vbC5nZXROb2RlcygpKTtcbiAgICAgICAgbGV0IGxhc3ROb2RlRXJyb3IgPSBudWxsO1xuICAgICAgICBmdW5jdGlvbiB0cnlOb2RlKGluZGV4KSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IG5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IENsdXN0ZXJBbGxGYWlsZWRFcnJvcl8xLmRlZmF1bHQoQ2x1c3RlckFsbEZhaWxlZEVycm9yXzEuZGVmYXVsdC5kZWZhdWx0TWVzc2FnZSwgbGFzdE5vZGVFcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGAke25vZGUub3B0aW9ucy5ob3N0fToke25vZGUub3B0aW9ucy5wb3J0fWA7XG4gICAgICAgICAgICBkZWJ1ZyhcImdldHRpbmcgc2xvdCBjYWNoZSBmcm9tICVzXCIsIGtleSk7XG4gICAgICAgICAgICBfdGhpcy5nZXRJbmZvRnJvbU5vZGUobm9kZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX3RoaXMuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjbG9zZVwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcihuZXcgRXJyb3IoXCJDbHVzdGVyIGlzIGRpc2Nvbm5lY3RlZC5cIikpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZGlzY29ubmVjdGluZ1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIobmV3IEVycm9yKFwiQ2x1c3RlciBpcyBkaXNjb25uZWN0aW5nLlwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZW1pdChcIm5vZGUgZXJyb3JcIiwgZXJyLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICBsYXN0Tm9kZUVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICB0cnlOb2RlKGluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KFwicmVmcmVzaFwiKTtcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRyeU5vZGUoMCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICBzZW5kQ29tbWFuZChjb21tYW5kLCBzdHJlYW0sIG5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSBcIndhaXRcIikge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0KCkuY2F0Y2godXRpbHNfMS5ub29wKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IFwiZW5kXCIpIHtcbiAgICAgICAgICAgIGNvbW1hbmQucmVqZWN0KG5ldyBFcnJvcih1dGlsc18xLkNPTk5FQ1RJT05fQ0xPU0VEX0VSUk9SX01TRykpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmQucHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdG8gPSB0aGlzLm9wdGlvbnMuc2NhbGVSZWFkcztcbiAgICAgICAgaWYgKHRvICE9PSBcIm1hc3RlclwiKSB7XG4gICAgICAgICAgICBjb25zdCBpc0NvbW1hbmRSZWFkT25seSA9IGNvbW1hbmQuaXNSZWFkT25seSB8fFxuICAgICAgICAgICAgICAgICgoMCwgY29tbWFuZHNfMS5leGlzdHMpKGNvbW1hbmQubmFtZSkgJiYgKDAsIGNvbW1hbmRzXzEuaGFzRmxhZykoY29tbWFuZC5uYW1lLCBcInJlYWRvbmx5XCIpKTtcbiAgICAgICAgICAgIGlmICghaXNDb21tYW5kUmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICB0byA9IFwibWFzdGVyXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRhcmdldFNsb3QgPSBub2RlID8gbm9kZS5zbG90IDogY29tbWFuZC5nZXRTbG90KCk7XG4gICAgICAgIGNvbnN0IHR0bCA9IHt9O1xuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghbm9kZSAmJiAhUkVKRUNUX09WRVJXUklUVEVOX0NPTU1BTkRTLmhhcyhjb21tYW5kKSkge1xuICAgICAgICAgICAgUkVKRUNUX09WRVJXUklUVEVOX0NPTU1BTkRTLmFkZChjb21tYW5kKTtcbiAgICAgICAgICAgIGNvbnN0IHJlamVjdCA9IGNvbW1hbmQucmVqZWN0O1xuICAgICAgICAgICAgY29tbWFuZC5yZWplY3QgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFydGlhbFRyeSA9IHRyeUNvbm5lY3Rpb24uYmluZChudWxsLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYW5kbGVFcnJvcihlcnIsIHR0bCwge1xuICAgICAgICAgICAgICAgICAgICBtb3ZlZDogZnVuY3Rpb24gKHNsb3QsIGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoXCJjb21tYW5kICVzIGlzIG1vdmVkIHRvICVzXCIsIGNvbW1hbmQubmFtZSwga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFNsb3QgPSBOdW1iZXIoc2xvdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuc2xvdHNbc2xvdF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5zbG90c1tzbG90XVswXSA9IGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnNsb3RzW3Nsb3RdID0gW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZ3JvdXBzQnlTbG90W3Nsb3RdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZ3JvdXBzSWRzW190aGlzLnNsb3RzW3Nsb3RdLmpvaW4oXCI7XCIpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNvbm5lY3Rpb25Qb29sLmZpbmRPckNyZWF0ZShfdGhpcy5uYXRNYXBwZXIoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnlDb25uZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcInJlZnJlc2hpbmcgc2xvdCBjYWNoZXMuLi4gKHRyaWdnZXJlZCBieSBNT1ZFRCBlcnJvcilcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZWZyZXNoU2xvdHNDYWNoZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhc2s6IGZ1bmN0aW9uIChzbG90LCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKFwiY29tbWFuZCAlcyBpcyByZXF1aXJlZCB0byBhc2sgJXM6JXNcIiwgY29tbWFuZC5uYW1lLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gX3RoaXMubmF0TWFwcGVyKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5jb25uZWN0aW9uUG9vbC5maW5kT3JDcmVhdGUobWFwcGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeUNvbm5lY3Rpb24oZmFsc2UsIGAke21hcHBlZC5ob3N0fToke21hcHBlZC5wb3J0fWApO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0cnlhZ2FpbjogcGFydGlhbFRyeSxcbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlckRvd246IHBhcnRpYWxUcnksXG4gICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25DbG9zZWQ6IHBhcnRpYWxUcnksXG4gICAgICAgICAgICAgICAgICAgIG1heFJlZGlyZWN0aW9uczogZnVuY3Rpb24gKHJlZGlyZWN0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdC5jYWxsKGNvbW1hbmQsIHJlZGlyZWN0aW9uRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0czogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0LmNhbGwoY29tbWFuZCwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdHJ5Q29ubmVjdGlvbigpO1xuICAgICAgICBmdW5jdGlvbiB0cnlDb25uZWN0aW9uKHJhbmRvbSwgYXNraW5nKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMuc3RhdHVzID09PSBcImVuZFwiKSB7XG4gICAgICAgICAgICAgICAgY29tbWFuZC5yZWplY3QobmV3IHJlZGlzX2Vycm9yc18xLkFib3J0RXJyb3IoXCJDbHVzdGVyIGlzIGVuZGVkLlwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHJlZGlzO1xuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXR1cyA9PT0gXCJyZWFkeVwiIHx8IGNvbW1hbmQubmFtZSA9PT0gXCJjbHVzdGVyXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZSAmJiBub2RlLnJlZGlzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZGlzID0gbm9kZS5yZWRpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQ29tbWFuZF8xLmRlZmF1bHQuY2hlY2tGbGFnKFwiRU5URVJfU1VCU0NSSUJFUl9NT0RFXCIsIGNvbW1hbmQubmFtZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgQ29tbWFuZF8xLmRlZmF1bHQuY2hlY2tGbGFnKFwiRVhJVF9TVUJTQ1JJQkVSX01PREVcIiwgY29tbWFuZC5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5zaGFyZGVkU3Vic2NyaWJlcnMgPT0gdHJ1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbW1hbmQubmFtZSA9PSBcInNzdWJzY3JpYmVcIiB8fCBjb21tYW5kLm5hbWUgPT0gXCJzdW5zdWJzY3JpYmVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YiA9IF90aGlzLnNoYXJkZWRTdWJzY3JpYmVycy5nZXRSZXNwb25zaWJsZVN1YnNjcmliZXIodGFyZ2V0U2xvdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RhdHVzID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZC5uYW1lID09IFwic3N1YnNjcmliZVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IF90aGlzLnNoYXJkZWRTdWJzY3JpYmVycy5hZGRDaGFubmVscyhjb21tYW5kLmdldEtleXMoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZC5uYW1lID09IFwic3Vuc3Vic2NyaWJlXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gX3RoaXMuc2hhcmRlZFN1YnNjcmliZXJzLnJlbW92ZUNoYW5uZWxzKGNvbW1hbmQuZ2V0S2V5cygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXMgPSBzdWIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQucmVqZWN0KG5ldyByZWRpc19lcnJvcnNfMS5BYm9ydEVycm9yKFwiQ2FuJ3QgYWRkIG9yIHJlbW92ZSB0aGUgZ2l2ZW4gY2hhbm5lbHMuIEFyZSB0aGV5IGluIHRoZSBzYW1lIHNsb3Q/XCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlzID0gX3RoaXMuc3Vic2NyaWJlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVkaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQucmVqZWN0KG5ldyByZWRpc19lcnJvcnNfMS5BYm9ydEVycm9yKFwiTm8gc3Vic2NyaWJlciBmb3IgdGhlIGNsdXN0ZXJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJhbmRvbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXRTbG90ID09PSBcIm51bWJlclwiICYmIF90aGlzLnNsb3RzW3RhcmdldFNsb3RdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZUtleXMgPSBfdGhpcy5zbG90c1t0YXJnZXRTbG90XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRvID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBub2RlS2V5cy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmNvbm5lY3Rpb25Qb29sLmdldEluc3RhbmNlQnlLZXkoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlzID0gdG8obm9kZXMsIGNvbW1hbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZWRpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlzID0gKDAsIHV0aWxzXzEuc2FtcGxlKShyZWRpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWRpcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXMgPSBub2Rlc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvID09PSBcImFsbFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSAoMCwgdXRpbHNfMS5zYW1wbGUpKG5vZGVLZXlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0byA9PT0gXCJzbGF2ZVwiICYmIG5vZGVLZXlzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9ICgwLCB1dGlsc18xLnNhbXBsZSkobm9kZUtleXMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gbm9kZUtleXNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXMgPSBfdGhpcy5jb25uZWN0aW9uUG9vbC5nZXRJbnN0YW5jZUJ5S2V5KGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFza2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlzID0gX3RoaXMuY29ubmVjdGlvblBvb2wuZ2V0SW5zdGFuY2VCeUtleShhc2tpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlzLmFza2luZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVkaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIHRvID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3RoaXMuY29ubmVjdGlvblBvb2wuZ2V0U2FtcGxlSW5zdGFuY2UodG8pKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5jb25uZWN0aW9uUG9vbC5nZXRTYW1wbGVJbnN0YW5jZShcImFsbFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobm9kZSAmJiAhbm9kZS5yZWRpcykge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnJlZGlzID0gcmVkaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlZGlzKSB7XG4gICAgICAgICAgICAgICAgcmVkaXMuc2VuZENvbW1hbmQoY29tbWFuZCwgc3RyZWFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKF90aGlzLm9wdGlvbnMuZW5hYmxlT2ZmbGluZVF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMub2ZmbGluZVF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiBjb21tYW5kLFxuICAgICAgICAgICAgICAgICAgICBzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbW1hbmQucmVqZWN0KG5ldyBFcnJvcihcIkNsdXN0ZXIgaXNuJ3QgcmVhZHkgYW5kIGVuYWJsZU9mZmxpbmVRdWV1ZSBvcHRpb25zIGlzIGZhbHNlXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tbWFuZC5wcm9taXNlO1xuICAgIH1cbiAgICBzc2NhblN0cmVhbShrZXksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2NhblN0cmVhbShcInNzY2FuXCIsIHsga2V5LCBvcHRpb25zIH0pO1xuICAgIH1cbiAgICBzc2NhbkJ1ZmZlclN0cmVhbShrZXksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2NhblN0cmVhbShcInNzY2FuQnVmZmVyXCIsIHsga2V5LCBvcHRpb25zIH0pO1xuICAgIH1cbiAgICBoc2NhblN0cmVhbShrZXksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2NhblN0cmVhbShcImhzY2FuXCIsIHsga2V5LCBvcHRpb25zIH0pO1xuICAgIH1cbiAgICBoc2NhbkJ1ZmZlclN0cmVhbShrZXksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2NhblN0cmVhbShcImhzY2FuQnVmZmVyXCIsIHsga2V5LCBvcHRpb25zIH0pO1xuICAgIH1cbiAgICB6c2NhblN0cmVhbShrZXksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2NhblN0cmVhbShcInpzY2FuXCIsIHsga2V5LCBvcHRpb25zIH0pO1xuICAgIH1cbiAgICB6c2NhbkJ1ZmZlclN0cmVhbShrZXksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2NhblN0cmVhbShcInpzY2FuQnVmZmVyXCIsIHsga2V5LCBvcHRpb25zIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgaGFuZGxlRXJyb3IoZXJyb3IsIHR0bCwgaGFuZGxlcnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0dGwudmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHR0bC52YWx1ZSA9IHRoaXMub3B0aW9ucy5tYXhSZWRpcmVjdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0dGwudmFsdWUgLT0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHRsLnZhbHVlIDw9IDApIHtcbiAgICAgICAgICAgIGhhbmRsZXJzLm1heFJlZGlyZWN0aW9ucyhuZXcgRXJyb3IoXCJUb28gbWFueSBDbHVzdGVyIHJlZGlyZWN0aW9ucy4gTGFzdCBlcnJvcjogXCIgKyBlcnJvcikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVycnYgPSBlcnJvci5tZXNzYWdlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgaWYgKGVycnZbMF0gPT09IFwiTU9WRURcIikge1xuICAgICAgICAgICAgY29uc3QgdGltZW91dCA9IHRoaXMub3B0aW9ucy5yZXRyeURlbGF5T25Nb3ZlZDtcbiAgICAgICAgICAgIGlmICh0aW1lb3V0ICYmIHR5cGVvZiB0aW1lb3V0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxheVF1ZXVlLnB1c2goXCJtb3ZlZFwiLCBoYW5kbGVycy5tb3ZlZC5iaW5kKG51bGwsIGVycnZbMV0sIGVycnZbMl0pLCB7IHRpbWVvdXQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVycy5tb3ZlZChlcnJ2WzFdLCBlcnJ2WzJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlcnJ2WzBdID09PSBcIkFTS1wiKSB7XG4gICAgICAgICAgICBoYW5kbGVycy5hc2soZXJydlsxXSwgZXJydlsyXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXJydlswXSA9PT0gXCJUUllBR0FJTlwiKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGF5UXVldWUucHVzaChcInRyeWFnYWluXCIsIGhhbmRsZXJzLnRyeWFnYWluLCB7XG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy5vcHRpb25zLnJldHJ5RGVsYXlPblRyeUFnYWluLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXJydlswXSA9PT0gXCJDTFVTVEVSRE9XTlwiICYmXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucmV0cnlEZWxheU9uQ2x1c3RlckRvd24gPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGF5UXVldWUucHVzaChcImNsdXN0ZXJkb3duXCIsIGhhbmRsZXJzLmNvbm5lY3Rpb25DbG9zZWQsIHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLm9wdGlvbnMucmV0cnlEZWxheU9uQ2x1c3RlckRvd24sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMucmVmcmVzaFNsb3RzQ2FjaGUuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UgPT09IHV0aWxzXzEuQ09OTkVDVElPTl9DTE9TRURfRVJST1JfTVNHICYmXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucmV0cnlEZWxheU9uRmFpbG92ZXIgPiAwICYmXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PT0gXCJyZWFkeVwiKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGF5UXVldWUucHVzaChcImZhaWxvdmVyXCIsIGhhbmRsZXJzLmNvbm5lY3Rpb25DbG9zZWQsIHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLm9wdGlvbnMucmV0cnlEZWxheU9uRmFpbG92ZXIsXG4gICAgICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMucmVmcmVzaFNsb3RzQ2FjaGUuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlcnMuZGVmYXVsdHMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXNldE9mZmxpbmVRdWV1ZSgpIHtcbiAgICAgICAgdGhpcy5vZmZsaW5lUXVldWUgPSBuZXcgRGVxdWUoKTtcbiAgICB9XG4gICAgY2xlYXJOb2Rlc1JlZnJlc2hJbnRlcnZhbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2xvdHNUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2xvdHNUaW1lcik7XG4gICAgICAgICAgICB0aGlzLnNsb3RzVGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlc2V0Tm9kZXNSZWZyZXNoSW50ZXJ2YWwoKSB7XG4gICAgICAgIGlmICh0aGlzLnNsb3RzVGltZXIgfHwgIXRoaXMub3B0aW9ucy5zbG90c1JlZnJlc2hJbnRlcnZhbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHRSb3VuZCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2xvdHNUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRlYnVnKCdyZWZyZXNoaW5nIHNsb3QgY2FjaGVzLi4uICh0cmlnZ2VyZWQgYnkgXCJzbG90c1JlZnJlc2hJbnRlcnZhbFwiIG9wdGlvbiknKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hTbG90c0NhY2hlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dFJvdW5kKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB0aGlzLm9wdGlvbnMuc2xvdHNSZWZyZXNoSW50ZXJ2YWwpO1xuICAgICAgICB9O1xuICAgICAgICBuZXh0Um91bmQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIGNsdXN0ZXIgaW5zdGFuY2UncyBzdGF0dXNcbiAgICAgKi9cbiAgICBzZXRTdGF0dXMoc3RhdHVzKSB7XG4gICAgICAgIGRlYnVnKFwic3RhdHVzOiAlcyAtPiAlc1wiLCB0aGlzLnN0YXR1cyB8fCBcIltlbXB0eV1cIiwgc3RhdHVzKTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbWl0KHN0YXR1cyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiBjbG9zZWQgdG8gY2hlY2sgd2hldGhlciBhIHJlY29ubmVjdGlvbiBzaG91bGQgYmUgbWFkZVxuICAgICAqL1xuICAgIGhhbmRsZUNsb3NlRXZlbnQocmVhc29uKSB7XG4gICAgICAgIGlmIChyZWFzb24pIHtcbiAgICAgICAgICAgIGRlYnVnKFwiY2xvc2VkIGJlY2F1c2UgJXNcIiwgcmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmV0cnlEZWxheTtcbiAgICAgICAgaWYgKCF0aGlzLm1hbnVhbGx5Q2xvc2luZyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5jbHVzdGVyUmV0cnlTdHJhdGVneSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXRyeURlbGF5ID0gdGhpcy5vcHRpb25zLmNsdXN0ZXJSZXRyeVN0cmF0ZWd5LmNhbGwodGhpcywgKyt0aGlzLnJldHJ5QXR0ZW1wdHMsIHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByZXRyeURlbGF5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXR1cyhcInJlY29ubmVjdGluZ1wiKTtcbiAgICAgICAgICAgIHRoaXMucmVjb25uZWN0VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0VGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgZGVidWcoXCJDbHVzdGVyIGlzIGRpc2Nvbm5lY3RlZC4gUmV0cnlpbmcgYWZ0ZXIgJWRtc1wiLCByZXRyeURlbGF5KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3QoKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnKFwiR290IGVycm9yICVzIHdoZW4gcmVjb25uZWN0aW5nLiBJZ25vcmluZy4uLlwiLCBlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgcmV0cnlEZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXR1cyhcImVuZFwiKTtcbiAgICAgICAgICAgIHRoaXMuZmx1c2hRdWV1ZShuZXcgRXJyb3IoXCJOb25lIG9mIHN0YXJ0dXAgbm9kZXMgaXMgYXZhaWxhYmxlXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGbHVzaCBvZmZsaW5lIHF1ZXVlIHdpdGggZXJyb3IuXG4gICAgICovXG4gICAgZmx1c2hRdWV1ZShlcnJvcikge1xuICAgICAgICBsZXQgaXRlbTtcbiAgICAgICAgd2hpbGUgKChpdGVtID0gdGhpcy5vZmZsaW5lUXVldWUuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgIGl0ZW0uY29tbWFuZC5yZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4ZWN1dGVPZmZsaW5lQ29tbWFuZHMoKSB7XG4gICAgICAgIGlmICh0aGlzLm9mZmxpbmVRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRlYnVnKFwic2VuZCAlZCBjb21tYW5kcyBpbiBvZmZsaW5lIHF1ZXVlXCIsIHRoaXMub2ZmbGluZVF1ZXVlLmxlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBvZmZsaW5lUXVldWUgPSB0aGlzLm9mZmxpbmVRdWV1ZTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRPZmZsaW5lUXVldWUoKTtcbiAgICAgICAgICAgIGxldCBpdGVtO1xuICAgICAgICAgICAgd2hpbGUgKChpdGVtID0gb2ZmbGluZVF1ZXVlLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kQ29tbWFuZChpdGVtLmNvbW1hbmQsIGl0ZW0uc3RyZWFtLCBpdGVtLm5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG5hdE1hcHBlcihub2RlS2V5KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHR5cGVvZiBub2RlS2V5ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICA/IG5vZGVLZXlcbiAgICAgICAgICAgIDogYCR7bm9kZUtleS5ob3N0fToke25vZGVLZXkucG9ydH1gO1xuICAgICAgICBsZXQgbWFwcGVkID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5uYXRNYXAgJiYgdHlwZW9mIHRoaXMub3B0aW9ucy5uYXRNYXAgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgbWFwcGVkID0gdGhpcy5vcHRpb25zLm5hdE1hcChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5uYXRNYXAgJiYgdHlwZW9mIHRoaXMub3B0aW9ucy5uYXRNYXAgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIG1hcHBlZCA9IHRoaXMub3B0aW9ucy5uYXRNYXBba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFwcGVkKSB7XG4gICAgICAgICAgICBkZWJ1ZyhcIk5BVCBtYXBwaW5nICVzIC0+ICVPXCIsIGtleSwgbWFwcGVkKTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBtYXBwZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlb2Ygbm9kZUtleSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgPyAoMCwgdXRpbF8xLm5vZGVLZXlUb1JlZGlzT3B0aW9ucykobm9kZUtleSlcbiAgICAgICAgICAgIDogbm9kZUtleTtcbiAgICB9XG4gICAgZ2V0SW5mb0Zyb21Ob2RlKHJlZGlzLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIXJlZGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKFwiTm9kZSBpcyBkaXNjb25uZWN0ZWRcIikpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVzZSBhIGR1cGxpY2F0aW9uIG9mIHRoZSBjb25uZWN0aW9uIHRvIGF2b2lkXG4gICAgICAgIC8vIHRpbWVvdXRzIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgaW4gdGhlIGJsb2NraW5nXG4gICAgICAgIC8vIG1vZGUgKGUuZy4gd2FpdGluZyBmb3IgQkxQT1ApLlxuICAgICAgICBjb25zdCBkdXBsaWNhdGVkQ29ubmVjdGlvbiA9IHJlZGlzLmR1cGxpY2F0ZSh7XG4gICAgICAgICAgICBlbmFibGVPZmZsaW5lUXVldWU6IHRydWUsXG4gICAgICAgICAgICBlbmFibGVSZWFkeUNoZWNrOiBmYWxzZSxcbiAgICAgICAgICAgIHJldHJ5U3RyYXRlZ3k6IG51bGwsXG4gICAgICAgICAgICBjb25uZWN0aW9uTmFtZTogKDAsIHV0aWxfMS5nZXRDb25uZWN0aW9uTmFtZSkoXCJyZWZyZXNoZXJcIiwgdGhpcy5vcHRpb25zLnJlZGlzT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucmVkaXNPcHRpb25zLmNvbm5lY3Rpb25OYW1lKSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElnbm9yZSBlcnJvciBldmVudHMgc2luY2Ugd2Ugd2lsbCBoYW5kbGVcbiAgICAgICAgLy8gZXhjZXB0aW9ucyBmb3IgdGhlIENMVVNURVIgU0xPVFMgY29tbWFuZC5cbiAgICAgICAgZHVwbGljYXRlZENvbm5lY3Rpb24ub24oXCJlcnJvclwiLCB1dGlsc18xLm5vb3ApO1xuICAgICAgICBkdXBsaWNhdGVkQ29ubmVjdGlvbi5jbHVzdGVyKFwiU0xPVFNcIiwgKDAsIHV0aWxzXzEudGltZW91dCkoKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBkdXBsaWNhdGVkQ29ubmVjdGlvbi5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgZGVidWcoXCJlcnJvciBlbmNvdW50ZXJlZCBydW5uaW5nIENMVVNURVIuU0xPVFM6ICVzXCIsIGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IFwiZGlzY29ubmVjdGluZ1wiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT09IFwiY2xvc2VcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID09PSBcImVuZFwiKSB7XG4gICAgICAgICAgICAgICAgZGVidWcoXCJpZ25vcmUgQ0xVU1RFUi5TTE9UUyByZXN1bHRzIChjb3VudDogJWQpIHNpbmNlIGNsdXN0ZXIgc3RhdHVzIGlzICVzXCIsIHJlc3VsdC5sZW5ndGgsIHRoaXMuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gW107XG4gICAgICAgICAgICBkZWJ1ZyhcImNsdXN0ZXIgc2xvdHMgcmVzdWx0IGNvdW50OiAlZFwiLCByZXN1bHQubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSByZXN1bHRbaV07XG4gICAgICAgICAgICAgICAgY29uc3Qgc2xvdFJhbmdlU3RhcnQgPSBpdGVtc1swXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzbG90UmFuZ2VFbmQgPSBpdGVtc1sxXTtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDI7IGogPCBpdGVtcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW1zW2pdWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5uYXRNYXBwZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaG9zdDogaXRlbXNbal1bMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3J0OiBpdGVtc1tqXVsxXSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmVhZE9ubHkgPSBqICE9PSAyO1xuICAgICAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2gobm9kZS5ob3N0ICsgXCI6XCIgKyBub2RlLnBvcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWJ1ZyhcImNsdXN0ZXIgc2xvdHMgcmVzdWx0IFslZF06IHNsb3RzICVkfiVkIHNlcnZlZCBieSAlc1wiLCBpLCBzbG90UmFuZ2VTdGFydCwgc2xvdFJhbmdlRW5kLCBrZXlzKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBzbG90ID0gc2xvdFJhbmdlU3RhcnQ7IHNsb3QgPD0gc2xvdFJhbmdlRW5kOyBzbG90KyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbG90c1tzbG90XSA9IGtleXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQXNzaWduIHRvIGVhY2ggbm9kZSBrZXlzIGEgbnVtZXJpYyB2YWx1ZSB0byBtYWtlIGF1dG9waXBlbGluZSBjb21wYXJpc29uIGZhc3Rlci5cbiAgICAgICAgICAgIHRoaXMuX2dyb3Vwc0lkcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICBsZXQgaiA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2Mzg0OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSAodGhpcy5zbG90c1tpXSB8fCBbXSkuam9pbihcIjtcIik7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dyb3Vwc0J5U2xvdFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZ3JvdXBzSWRzW3RhcmdldF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ3JvdXBzSWRzW3RhcmdldF0gPSArK2o7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2dyb3Vwc0J5U2xvdFtpXSA9IHRoaXMuX2dyb3Vwc0lkc1t0YXJnZXRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uUG9vbC5yZXNldChub2Rlcyk7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9LCB0aGlzLm9wdGlvbnMuc2xvdHNSZWZyZXNoVGltZW91dCkpO1xuICAgIH1cbiAgICBpbnZva2VSZWFkeURlbGF5ZWRDYWxsYmFja3MoZXJyKSB7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLl9yZWFkeURlbGF5ZWRDYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soYywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWFkeURlbGF5ZWRDYWxsYmFja3MgPSBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgd2hldGhlciBDbHVzdGVyIGlzIGFibGUgdG8gcHJvY2VzcyBjb21tYW5kc1xuICAgICAqL1xuICAgIHJlYWR5Q2hlY2soY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5jbHVzdGVyKFwiSU5GT1wiLCAoZXJyLCByZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc3RhdGU7XG4gICAgICAgICAgICBjb25zdCBsaW5lcyA9IHJlcy5zcGxpdChcIlxcclxcblwiKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGxpbmVzW2ldLnNwbGl0KFwiOlwiKTtcbiAgICAgICAgICAgICAgICBpZiAocGFydHNbMF0gPT09IFwiY2x1c3Rlcl9zdGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlID0gcGFydHNbMV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gXCJmYWlsXCIpIHtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhcImNsdXN0ZXIgc3RhdGUgbm90IG9rICglcylcIiwgc3RhdGUpO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXNvbHZlU3J2KGhvc3RuYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucmVzb2x2ZVNydihob3N0bmFtZSwgKGVyciwgcmVjb3JkcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzZWxmID0gdGhpcywgZ3JvdXBlZFJlY29yZHMgPSAoMCwgdXRpbF8xLmdyb3VwU3J2UmVjb3JkcykocmVjb3JkcyksIHNvcnRlZEtleXMgPSBPYmplY3Qua2V5cyhncm91cGVkUmVjb3Jkcykuc29ydCgoYSwgYikgPT4gcGFyc2VJbnQoYSkgLSBwYXJzZUludChiKSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdHJ5Rmlyc3RPbmUoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc29ydGVkS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBzb3J0ZWRLZXlzWzBdLCBncm91cCA9IGdyb3VwZWRSZWNvcmRzW2tleV0sIHJlY29yZCA9ICgwLCB1dGlsXzEud2VpZ2h0U3J2UmVjb3JkcykoZ3JvdXApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWdyb3VwLnJlY29yZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWRLZXlzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kbnNMb29rdXAocmVjb3JkLm5hbWUpLnRoZW4oKGhvc3QpID0+IHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ6IHJlY29yZC5wb3J0LFxuICAgICAgICAgICAgICAgICAgICB9KSwgdHJ5Rmlyc3RPbmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnlGaXJzdE9uZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkbnNMb29rdXAoaG9zdG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kbnNMb29rdXAoaG9zdG5hbWUsIChlcnIsIGFkZHJlc3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnKFwiZmFpbGVkIHRvIHJlc29sdmUgaG9zdG5hbWUgJXMgdG8gSVA6ICVzXCIsIGhvc3RuYW1lLCBlcnIubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoXCJyZXNvbHZlZCBob3N0bmFtZSAlcyB0byBJUCAlc1wiLCBob3N0bmFtZSwgYWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgc3RhcnR1cCBub2RlcywgYW5kIHJlc29sdmluZyBob3N0bmFtZXMgdG8gSVBzLlxuICAgICAqXG4gICAgICogVGhpcyBwcm9jZXNzIGhhcHBlbnMgZXZlcnkgdGltZSB3aGVuICNjb25uZWN0KCkgaXMgY2FsbGVkIHNpbmNlXG4gICAgICogI3N0YXJ0dXBOb2RlcyBhbmQgRE5TIHJlY29yZHMgbWF5IGNoYW5hZ2UuXG4gICAgICovXG4gICAgYXN5bmMgcmVzb2x2ZVN0YXJ0dXBOb2RlSG9zdG5hbWVzKCkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5zdGFydHVwTm9kZXMpIHx8IHRoaXMuc3RhcnR1cE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYHN0YXJ0dXBOb2Rlc2Agc2hvdWxkIGNvbnRhaW4gYXQgbGVhc3Qgb25lIG5vZGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0dXBOb2RlcyA9ICgwLCB1dGlsXzEubm9ybWFsaXplTm9kZU9wdGlvbnMpKHRoaXMuc3RhcnR1cE5vZGVzKTtcbiAgICAgICAgY29uc3QgaG9zdG5hbWVzID0gKDAsIHV0aWxfMS5nZXRVbmlxdWVIb3N0bmFtZXNGcm9tT3B0aW9ucykoc3RhcnR1cE5vZGVzKTtcbiAgICAgICAgaWYgKGhvc3RuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBzdGFydHVwTm9kZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uZmlncyA9IGF3YWl0IFByb21pc2UuYWxsKGhvc3RuYW1lcy5tYXAoKHRoaXMub3B0aW9ucy51c2VTUlZSZWNvcmRzID8gdGhpcy5yZXNvbHZlU3J2IDogdGhpcy5kbnNMb29rdXApLmJpbmQodGhpcykpKTtcbiAgICAgICAgY29uc3QgaG9zdG5hbWVUb0NvbmZpZyA9ICgwLCB1dGlsc18xLnppcE1hcCkoaG9zdG5hbWVzLCBjb25maWdzKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0dXBOb2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGhvc3RuYW1lVG9Db25maWcuZ2V0KG5vZGUuaG9zdCk7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy51c2VTUlZSZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG5vZGUsIGNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgbm9kZSwgeyBob3N0OiBjb25maWcgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjcmVhdGVTY2FuU3RyZWFtKGNvbW1hbmQsIHsga2V5LCBvcHRpb25zID0ge30gfSkge1xuICAgICAgICByZXR1cm4gbmV3IFNjYW5TdHJlYW1fMS5kZWZhdWx0KHtcbiAgICAgICAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIHJlZGlzOiB0aGlzLFxuICAgICAgICAgICAgY29tbWFuZDogY29tbWFuZCxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbigwLCBhcHBseU1peGluXzEuZGVmYXVsdCkoQ2x1c3RlciwgZXZlbnRzXzEuRXZlbnRFbWl0dGVyKTtcbigwLCB0cmFuc2FjdGlvbl8xLmFkZFRyYW5zYWN0aW9uU3VwcG9ydCkoQ2x1c3Rlci5wcm90b3R5cGUpO1xuZXhwb3J0cy5kZWZhdWx0ID0gQ2x1c3RlcjtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/cluster/index.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/cluster/util.js":
/*!****************************************************!*\
!*** ./node_modules/ioredis/built/cluster/util.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.getConnectionName = exports.weightSrvRecords = exports.groupSrvRecords = exports.getUniqueHostnamesFromOptions = exports.normalizeNodeOptions = exports.nodeKeyToRedisOptions = exports.getNodeKey = void 0;\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(rsc)/./node_modules/ioredis/built/utils/index.js\");\nconst net_1 = __webpack_require__(/*! net */ \"net\");\nfunction getNodeKey(node) {\n node.port = node.port || 6379;\n node.host = node.host || \"127.0.0.1\";\n return node.host + \":\" + node.port;\n}\nexports.getNodeKey = getNodeKey;\nfunction nodeKeyToRedisOptions(nodeKey) {\n const portIndex = nodeKey.lastIndexOf(\":\");\n if (portIndex === -1) {\n throw new Error(`Invalid node key ${nodeKey}`);\n }\n return {\n host: nodeKey.slice(0, portIndex),\n port: Number(nodeKey.slice(portIndex + 1)),\n };\n}\nexports.nodeKeyToRedisOptions = nodeKeyToRedisOptions;\nfunction normalizeNodeOptions(nodes) {\n return nodes.map((node) => {\n const options = {};\n if (typeof node === \"object\") {\n Object.assign(options, node);\n }\n else if (typeof node === \"string\") {\n Object.assign(options, (0, utils_1.parseURL)(node));\n }\n else if (typeof node === \"number\") {\n options.port = node;\n }\n else {\n throw new Error(\"Invalid argument \" + node);\n }\n if (typeof options.port === \"string\") {\n options.port = parseInt(options.port, 10);\n }\n // Cluster mode only support db 0\n delete options.db;\n if (!options.port) {\n options.port = 6379;\n }\n if (!options.host) {\n options.host = \"127.0.0.1\";\n }\n return (0, utils_1.resolveTLSProfile)(options);\n });\n}\nexports.normalizeNodeOptions = normalizeNodeOptions;\nfunction getUniqueHostnamesFromOptions(nodes) {\n const uniqueHostsMap = {};\n nodes.forEach((node) => {\n uniqueHostsMap[node.host] = true;\n });\n return Object.keys(uniqueHostsMap).filter((host) => !(0, net_1.isIP)(host));\n}\nexports.getUniqueHostnamesFromOptions = getUniqueHostnamesFromOptions;\nfunction groupSrvRecords(records) {\n const recordsByPriority = {};\n for (const record of records) {\n if (!recordsByPriority.hasOwnProperty(record.priority)) {\n recordsByPriority[record.priority] = {\n totalWeight: record.weight,\n records: [record],\n };\n }\n else {\n recordsByPriority[record.priority].totalWeight += record.weight;\n recordsByPriority[record.priority].records.push(record);\n }\n }\n return recordsByPriority;\n}\nexports.groupSrvRecords = groupSrvRecords;\nfunction weightSrvRecords(recordsGroup) {\n if (recordsGroup.records.length === 1) {\n recordsGroup.totalWeight = 0;\n return recordsGroup.records.shift();\n }\n // + `recordsGroup.records.length` to support `weight` 0\n const random = Math.floor(Math.random() * (recordsGroup.totalWeight + recordsGroup.records.length));\n let total = 0;\n for (const [i, record] of recordsGroup.records.entries()) {\n total += 1 + record.weight;\n if (total > random) {\n recordsGroup.totalWeight -= record.weight;\n recordsGroup.records.splice(i, 1);\n return record;\n }\n }\n}\nexports.weightSrvRecords = weightSrvRecords;\nfunction getConnectionName(component, nodeConnectionName) {\n const prefix = `ioredis-cluster(${component})`;\n return nodeConnectionName ? `${prefix}:${nodeConnectionName}` : prefix;\n}\nexports.getConnectionName = getConnectionName;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jbHVzdGVyL3V0aWwuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QseUJBQXlCLEdBQUcsd0JBQXdCLEdBQUcsdUJBQXVCLEdBQUcscUNBQXFDLEdBQUcsNEJBQTRCLEdBQUcsNkJBQTZCLEdBQUcsa0JBQWtCO0FBQzFNLGdCQUFnQixtQkFBTyxDQUFDLG1FQUFVO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxnQkFBSztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0Esc0NBQXNDLFVBQVU7QUFDaEQsbUNBQW1DLE9BQU8sR0FBRyxtQkFBbUI7QUFDaEU7QUFDQSx5QkFBeUIiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvY2x1c3Rlci91dGlsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDb25uZWN0aW9uTmFtZSA9IGV4cG9ydHMud2VpZ2h0U3J2UmVjb3JkcyA9IGV4cG9ydHMuZ3JvdXBTcnZSZWNvcmRzID0gZXhwb3J0cy5nZXRVbmlxdWVIb3N0bmFtZXNGcm9tT3B0aW9ucyA9IGV4cG9ydHMubm9ybWFsaXplTm9kZU9wdGlvbnMgPSBleHBvcnRzLm5vZGVLZXlUb1JlZGlzT3B0aW9ucyA9IGV4cG9ydHMuZ2V0Tm9kZUtleSA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5jb25zdCBuZXRfMSA9IHJlcXVpcmUoXCJuZXRcIik7XG5mdW5jdGlvbiBnZXROb2RlS2V5KG5vZGUpIHtcbiAgICBub2RlLnBvcnQgPSBub2RlLnBvcnQgfHwgNjM3OTtcbiAgICBub2RlLmhvc3QgPSBub2RlLmhvc3QgfHwgXCIxMjcuMC4wLjFcIjtcbiAgICByZXR1cm4gbm9kZS5ob3N0ICsgXCI6XCIgKyBub2RlLnBvcnQ7XG59XG5leHBvcnRzLmdldE5vZGVLZXkgPSBnZXROb2RlS2V5O1xuZnVuY3Rpb24gbm9kZUtleVRvUmVkaXNPcHRpb25zKG5vZGVLZXkpIHtcbiAgICBjb25zdCBwb3J0SW5kZXggPSBub2RlS2V5Lmxhc3RJbmRleE9mKFwiOlwiKTtcbiAgICBpZiAocG9ydEluZGV4ID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbm9kZSBrZXkgJHtub2RlS2V5fWApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBob3N0OiBub2RlS2V5LnNsaWNlKDAsIHBvcnRJbmRleCksXG4gICAgICAgIHBvcnQ6IE51bWJlcihub2RlS2V5LnNsaWNlKHBvcnRJbmRleCArIDEpKSxcbiAgICB9O1xufVxuZXhwb3J0cy5ub2RlS2V5VG9SZWRpc09wdGlvbnMgPSBub2RlS2V5VG9SZWRpc09wdGlvbnM7XG5mdW5jdGlvbiBub3JtYWxpemVOb2RlT3B0aW9ucyhub2Rlcykge1xuICAgIHJldHVybiBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgICBpZiAodHlwZW9mIG5vZGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ob3B0aW9ucywgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG5vZGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ob3B0aW9ucywgKDAsIHV0aWxzXzEucGFyc2VVUkwpKG5vZGUpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygbm9kZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgb3B0aW9ucy5wb3J0ID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnQgXCIgKyBub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucG9ydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgb3B0aW9ucy5wb3J0ID0gcGFyc2VJbnQob3B0aW9ucy5wb3J0LCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2x1c3RlciBtb2RlIG9ubHkgc3VwcG9ydCBkYiAwXG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLmRiO1xuICAgICAgICBpZiAoIW9wdGlvbnMucG9ydCkge1xuICAgICAgICAgICAgb3B0aW9ucy5wb3J0ID0gNjM3OTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbnMuaG9zdCkge1xuICAgICAgICAgICAgb3B0aW9ucy5ob3N0ID0gXCIxMjcuMC4wLjFcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKDAsIHV0aWxzXzEucmVzb2x2ZVRMU1Byb2ZpbGUpKG9wdGlvbnMpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5ub3JtYWxpemVOb2RlT3B0aW9ucyA9IG5vcm1hbGl6ZU5vZGVPcHRpb25zO1xuZnVuY3Rpb24gZ2V0VW5pcXVlSG9zdG5hbWVzRnJvbU9wdGlvbnMobm9kZXMpIHtcbiAgICBjb25zdCB1bmlxdWVIb3N0c01hcCA9IHt9O1xuICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgdW5pcXVlSG9zdHNNYXBbbm9kZS5ob3N0XSA9IHRydWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHVuaXF1ZUhvc3RzTWFwKS5maWx0ZXIoKGhvc3QpID0+ICEoMCwgbmV0XzEuaXNJUCkoaG9zdCkpO1xufVxuZXhwb3J0cy5nZXRVbmlxdWVIb3N0bmFtZXNGcm9tT3B0aW9ucyA9IGdldFVuaXF1ZUhvc3RuYW1lc0Zyb21PcHRpb25zO1xuZnVuY3Rpb24gZ3JvdXBTcnZSZWNvcmRzKHJlY29yZHMpIHtcbiAgICBjb25zdCByZWNvcmRzQnlQcmlvcml0eSA9IHt9O1xuICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgaWYgKCFyZWNvcmRzQnlQcmlvcml0eS5oYXNPd25Qcm9wZXJ0eShyZWNvcmQucHJpb3JpdHkpKSB7XG4gICAgICAgICAgICByZWNvcmRzQnlQcmlvcml0eVtyZWNvcmQucHJpb3JpdHldID0ge1xuICAgICAgICAgICAgICAgIHRvdGFsV2VpZ2h0OiByZWNvcmQud2VpZ2h0LFxuICAgICAgICAgICAgICAgIHJlY29yZHM6IFtyZWNvcmRdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlY29yZHNCeVByaW9yaXR5W3JlY29yZC5wcmlvcml0eV0udG90YWxXZWlnaHQgKz0gcmVjb3JkLndlaWdodDtcbiAgICAgICAgICAgIHJlY29yZHNCeVByaW9yaXR5W3JlY29yZC5wcmlvcml0eV0ucmVjb3Jkcy5wdXNoKHJlY29yZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZHNCeVByaW9yaXR5O1xufVxuZXhwb3J0cy5ncm91cFNydlJlY29yZHMgPSBncm91cFNydlJlY29yZHM7XG5mdW5jdGlvbiB3ZWlnaHRTcnZSZWNvcmRzKHJlY29yZHNHcm91cCkge1xuICAgIGlmIChyZWNvcmRzR3JvdXAucmVjb3Jkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmVjb3Jkc0dyb3VwLnRvdGFsV2VpZ2h0ID0gMDtcbiAgICAgICAgcmV0dXJuIHJlY29yZHNHcm91cC5yZWNvcmRzLnNoaWZ0KCk7XG4gICAgfVxuICAgIC8vICsgYHJlY29yZHNHcm91cC5yZWNvcmRzLmxlbmd0aGAgdG8gc3VwcG9ydCBgd2VpZ2h0YCAwXG4gICAgY29uc3QgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKHJlY29yZHNHcm91cC50b3RhbFdlaWdodCArIHJlY29yZHNHcm91cC5yZWNvcmRzLmxlbmd0aCkpO1xuICAgIGxldCB0b3RhbCA9IDA7XG4gICAgZm9yIChjb25zdCBbaSwgcmVjb3JkXSBvZiByZWNvcmRzR3JvdXAucmVjb3Jkcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgdG90YWwgKz0gMSArIHJlY29yZC53ZWlnaHQ7XG4gICAgICAgIGlmICh0b3RhbCA+IHJhbmRvbSkge1xuICAgICAgICAgICAgcmVjb3Jkc0dyb3VwLnRvdGFsV2VpZ2h0IC09IHJlY29yZC53ZWlnaHQ7XG4gICAgICAgICAgICByZWNvcmRzR3JvdXAucmVjb3Jkcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICByZXR1cm4gcmVjb3JkO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy53ZWlnaHRTcnZSZWNvcmRzID0gd2VpZ2h0U3J2UmVjb3JkcztcbmZ1bmN0aW9uIGdldENvbm5lY3Rpb25OYW1lKGNvbXBvbmVudCwgbm9kZUNvbm5lY3Rpb25OYW1lKSB7XG4gICAgY29uc3QgcHJlZml4ID0gYGlvcmVkaXMtY2x1c3Rlcigke2NvbXBvbmVudH0pYDtcbiAgICByZXR1cm4gbm9kZUNvbm5lY3Rpb25OYW1lID8gYCR7cHJlZml4fToke25vZGVDb25uZWN0aW9uTmFtZX1gIDogcHJlZml4O1xufVxuZXhwb3J0cy5nZXRDb25uZWN0aW9uTmFtZSA9IGdldENvbm5lY3Rpb25OYW1lO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/cluster/util.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/connectors/AbstractConnector.js":
/*!********************************************************************!*\
!*** ./node_modules/ioredis/built/connectors/AbstractConnector.js ***!
\********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(rsc)/./node_modules/ioredis/built/utils/index.js\");\nconst debug = (0, utils_1.Debug)(\"AbstractConnector\");\nclass AbstractConnector {\n constructor(disconnectTimeout) {\n this.connecting = false;\n this.disconnectTimeout = disconnectTimeout;\n }\n check(info) {\n return true;\n }\n disconnect() {\n this.connecting = false;\n if (this.stream) {\n const stream = this.stream; // Make sure callbacks refer to the same instance\n const timeout = setTimeout(() => {\n debug(\"stream %s:%s still open, destroying it\", stream.remoteAddress, stream.remotePort);\n stream.destroy();\n }, this.disconnectTimeout);\n stream.on(\"close\", () => clearTimeout(timeout));\n stream.end();\n }\n }\n}\nexports[\"default\"] = AbstractConnector;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jb25uZWN0b3JzL0Fic3RyYWN0Q29ubmVjdG9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGdCQUFnQixtQkFBTyxDQUFDLG1FQUFVO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2Nvbm5lY3RvcnMvQWJzdHJhY3RDb25uZWN0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgZGVidWcgPSAoMCwgdXRpbHNfMS5EZWJ1ZykoXCJBYnN0cmFjdENvbm5lY3RvclwiKTtcbmNsYXNzIEFic3RyYWN0Q29ubmVjdG9yIHtcbiAgICBjb25zdHJ1Y3RvcihkaXNjb25uZWN0VGltZW91dCkge1xuICAgICAgICB0aGlzLmNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kaXNjb25uZWN0VGltZW91dCA9IGRpc2Nvbm5lY3RUaW1lb3V0O1xuICAgIH1cbiAgICBjaGVjayhpbmZvKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICB0aGlzLmNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc3RyZWFtKSB7XG4gICAgICAgICAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbTsgLy8gTWFrZSBzdXJlIGNhbGxiYWNrcyByZWZlciB0byB0aGUgc2FtZSBpbnN0YW5jZVxuICAgICAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRlYnVnKFwic3RyZWFtICVzOiVzIHN0aWxsIG9wZW4sIGRlc3Ryb3lpbmcgaXRcIiwgc3RyZWFtLnJlbW90ZUFkZHJlc3MsIHN0cmVhbS5yZW1vdGVQb3J0KTtcbiAgICAgICAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICAgICAgfSwgdGhpcy5kaXNjb25uZWN0VGltZW91dCk7XG4gICAgICAgICAgICBzdHJlYW0ub24oXCJjbG9zZVwiLCAoKSA9PiBjbGVhclRpbWVvdXQodGltZW91dCkpO1xuICAgICAgICAgICAgc3RyZWFtLmVuZCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gQWJzdHJhY3RDb25uZWN0b3I7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/connectors/AbstractConnector.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/connectors/SentinelConnector/FailoverDetector.js":
/*!*************************************************************************************!*\
!*** ./node_modules/ioredis/built/connectors/SentinelConnector/FailoverDetector.js ***!
\*************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.FailoverDetector = void 0;\nconst utils_1 = __webpack_require__(/*! ../../utils */ \"(rsc)/./node_modules/ioredis/built/utils/index.js\");\nconst debug = (0, utils_1.Debug)(\"FailoverDetector\");\nconst CHANNEL_NAME = \"+switch-master\";\nclass FailoverDetector {\n // sentinels can't be used for regular commands after this\n constructor(connector, sentinels) {\n this.isDisconnected = false;\n this.connector = connector;\n this.sentinels = sentinels;\n }\n cleanup() {\n this.isDisconnected = true;\n for (const sentinel of this.sentinels) {\n sentinel.client.disconnect();\n }\n }\n async subscribe() {\n debug(\"Starting FailoverDetector\");\n const promises = [];\n for (const sentinel of this.sentinels) {\n const promise = sentinel.client.subscribe(CHANNEL_NAME).catch((err) => {\n debug(\"Failed to subscribe to failover messages on sentinel %s:%s (%s)\", sentinel.address.host || \"127.0.0.1\", sentinel.address.port || 26739, err.message);\n });\n promises.push(promise);\n sentinel.client.on(\"message\", (channel) => {\n if (!this.isDisconnected && channel === CHANNEL_NAME) {\n this.disconnect();\n }\n });\n }\n await Promise.all(promises);\n }\n disconnect() {\n // Avoid disconnecting more than once per failover.\n // A new FailoverDetector will be created after reconnecting.\n this.isDisconnected = true;\n debug(\"Failover detected, disconnecting\");\n // Will call this.cleanup()\n this.connector.disconnect();\n }\n}\nexports.FailoverDetector = FailoverDetector;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jb25uZWN0b3JzL1NlbnRpbmVsQ29ubmVjdG9yL0ZhaWxvdmVyRGV0ZWN0b3IuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsd0JBQXdCO0FBQ3hCLGdCQUFnQixtQkFBTyxDQUFDLHNFQUFhO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jb25uZWN0b3JzL1NlbnRpbmVsQ29ubmVjdG9yL0ZhaWxvdmVyRGV0ZWN0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkZhaWxvdmVyRGV0ZWN0b3IgPSB2b2lkIDA7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpO1xuY29uc3QgZGVidWcgPSAoMCwgdXRpbHNfMS5EZWJ1ZykoXCJGYWlsb3ZlckRldGVjdG9yXCIpO1xuY29uc3QgQ0hBTk5FTF9OQU1FID0gXCIrc3dpdGNoLW1hc3RlclwiO1xuY2xhc3MgRmFpbG92ZXJEZXRlY3RvciB7XG4gICAgLy8gc2VudGluZWxzIGNhbid0IGJlIHVzZWQgZm9yIHJlZ3VsYXIgY29tbWFuZHMgYWZ0ZXIgdGhpc1xuICAgIGNvbnN0cnVjdG9yKGNvbm5lY3Rvciwgc2VudGluZWxzKSB7XG4gICAgICAgIHRoaXMuaXNEaXNjb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb25uZWN0b3IgPSBjb25uZWN0b3I7XG4gICAgICAgIHRoaXMuc2VudGluZWxzID0gc2VudGluZWxzO1xuICAgIH1cbiAgICBjbGVhbnVwKCkge1xuICAgICAgICB0aGlzLmlzRGlzY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgZm9yIChjb25zdCBzZW50aW5lbCBvZiB0aGlzLnNlbnRpbmVscykge1xuICAgICAgICAgICAgc2VudGluZWwuY2xpZW50LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBzdWJzY3JpYmUoKSB7XG4gICAgICAgIGRlYnVnKFwiU3RhcnRpbmcgRmFpbG92ZXJEZXRlY3RvclwiKTtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBzZW50aW5lbCBvZiB0aGlzLnNlbnRpbmVscykge1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHNlbnRpbmVsLmNsaWVudC5zdWJzY3JpYmUoQ0hBTk5FTF9OQU1FKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVidWcoXCJGYWlsZWQgdG8gc3Vic2NyaWJlIHRvIGZhaWxvdmVyIG1lc3NhZ2VzIG9uIHNlbnRpbmVsICVzOiVzICglcylcIiwgc2VudGluZWwuYWRkcmVzcy5ob3N0IHx8IFwiMTI3LjAuMC4xXCIsIHNlbnRpbmVsLmFkZHJlc3MucG9ydCB8fCAyNjczOSwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xuICAgICAgICAgICAgc2VudGluZWwuY2xpZW50Lm9uKFwibWVzc2FnZVwiLCAoY2hhbm5lbCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0Rpc2Nvbm5lY3RlZCAmJiBjaGFubmVsID09PSBDSEFOTkVMX05BTUUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgIH1cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICAvLyBBdm9pZCBkaXNjb25uZWN0aW5nIG1vcmUgdGhhbiBvbmNlIHBlciBmYWlsb3Zlci5cbiAgICAgICAgLy8gQSBuZXcgRmFpbG92ZXJEZXRlY3RvciB3aWxsIGJlIGNyZWF0ZWQgYWZ0ZXIgcmVjb25uZWN0aW5nLlxuICAgICAgICB0aGlzLmlzRGlzY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgZGVidWcoXCJGYWlsb3ZlciBkZXRlY3RlZCwgZGlzY29ubmVjdGluZ1wiKTtcbiAgICAgICAgLy8gV2lsbCBjYWxsIHRoaXMuY2xlYW51cCgpXG4gICAgICAgIHRoaXMuY29ubmVjdG9yLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG59XG5leHBvcnRzLkZhaWxvdmVyRGV0ZWN0b3IgPSBGYWlsb3ZlckRldGVjdG9yO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/connectors/SentinelConnector/FailoverDetector.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.js":
/*!*************************************************************************************!*\
!*** ./node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.js ***!
\*************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nfunction isSentinelEql(a, b) {\n return ((a.host || \"127.0.0.1\") === (b.host || \"127.0.0.1\") &&\n (a.port || 26379) === (b.port || 26379));\n}\nclass SentinelIterator {\n constructor(sentinels) {\n this.cursor = 0;\n this.sentinels = sentinels.slice(0);\n }\n next() {\n const done = this.cursor >= this.sentinels.length;\n return { done, value: done ? undefined : this.sentinels[this.cursor++] };\n }\n reset(moveCurrentEndpointToFirst) {\n if (moveCurrentEndpointToFirst &&\n this.sentinels.length > 1 &&\n this.cursor !== 1) {\n this.sentinels.unshift(...this.sentinels.splice(this.cursor - 1));\n }\n this.cursor = 0;\n }\n add(sentinel) {\n for (let i = 0; i < this.sentinels.length; i++) {\n if (isSentinelEql(sentinel, this.sentinels[i])) {\n return false;\n }\n }\n this.sentinels.push(sentinel);\n return true;\n }\n toString() {\n return `${JSON.stringify(this.sentinels)} @${this.cursor}`;\n }\n}\nexports[\"default\"] = SentinelIterator;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jb25uZWN0b3JzL1NlbnRpbmVsQ29ubmVjdG9yL1NlbnRpbmVsSXRlcmF0b3IuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwyQkFBMkI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixnQ0FBZ0MsR0FBRyxZQUFZO0FBQ2pFO0FBQ0E7QUFDQSxrQkFBZSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jb25uZWN0b3JzL1NlbnRpbmVsQ29ubmVjdG9yL1NlbnRpbmVsSXRlcmF0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBpc1NlbnRpbmVsRXFsKGEsIGIpIHtcbiAgICByZXR1cm4gKChhLmhvc3QgfHwgXCIxMjcuMC4wLjFcIikgPT09IChiLmhvc3QgfHwgXCIxMjcuMC4wLjFcIikgJiZcbiAgICAgICAgKGEucG9ydCB8fCAyNjM3OSkgPT09IChiLnBvcnQgfHwgMjYzNzkpKTtcbn1cbmNsYXNzIFNlbnRpbmVsSXRlcmF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKHNlbnRpbmVscykge1xuICAgICAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgICAgIHRoaXMuc2VudGluZWxzID0gc2VudGluZWxzLnNsaWNlKDApO1xuICAgIH1cbiAgICBuZXh0KCkge1xuICAgICAgICBjb25zdCBkb25lID0gdGhpcy5jdXJzb3IgPj0gdGhpcy5zZW50aW5lbHMubGVuZ3RoO1xuICAgICAgICByZXR1cm4geyBkb25lLCB2YWx1ZTogZG9uZSA/IHVuZGVmaW5lZCA6IHRoaXMuc2VudGluZWxzW3RoaXMuY3Vyc29yKytdIH07XG4gICAgfVxuICAgIHJlc2V0KG1vdmVDdXJyZW50RW5kcG9pbnRUb0ZpcnN0KSB7XG4gICAgICAgIGlmIChtb3ZlQ3VycmVudEVuZHBvaW50VG9GaXJzdCAmJlxuICAgICAgICAgICAgdGhpcy5zZW50aW5lbHMubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgdGhpcy5jdXJzb3IgIT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VudGluZWxzLnVuc2hpZnQoLi4udGhpcy5zZW50aW5lbHMuc3BsaWNlKHRoaXMuY3Vyc29yIC0gMSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB9XG4gICAgYWRkKHNlbnRpbmVsKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZW50aW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpc1NlbnRpbmVsRXFsKHNlbnRpbmVsLCB0aGlzLnNlbnRpbmVsc1tpXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZW50aW5lbHMucHVzaChzZW50aW5lbCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGAke0pTT04uc3RyaW5naWZ5KHRoaXMuc2VudGluZWxzKX0gQCR7dGhpcy5jdXJzb3J9YDtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTZW50aW5lbEl0ZXJhdG9yO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/connectors/SentinelConnector/index.js":
/*!**************************************************************************!*\
!*** ./node_modules/ioredis/built/connectors/SentinelConnector/index.js ***!
\**************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.SentinelIterator = void 0;\nconst net_1 = __webpack_require__(/*! net */ \"net\");\nconst utils_1 = __webpack_require__(/*! ../../utils */ \"(rsc)/./node_modules/ioredis/built/utils/index.js\");\nconst tls_1 = __webpack_require__(/*! tls */ \"tls\");\nconst SentinelIterator_1 = __webpack_require__(/*! ./SentinelIterator */ \"(rsc)/./node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.js\");\nexports.SentinelIterator = SentinelIterator_1.default;\nconst AbstractConnector_1 = __webpack_require__(/*! ../AbstractConnector */ \"(rsc)/./node_modules/ioredis/built/connectors/AbstractConnector.js\");\nconst Redis_1 = __webpack_require__(/*! ../../Redis */ \"(rsc)/./node_modules/ioredis/built/Redis.js\");\nconst FailoverDetector_1 = __webpack_require__(/*! ./FailoverDetector */ \"(rsc)/./node_modules/ioredis/built/connectors/SentinelConnector/FailoverDetector.js\");\nconst debug = (0, utils_1.Debug)(\"SentinelConnector\");\nclass SentinelConnector extends AbstractConnector_1.default {\n constructor(options) {\n super(options.disconnectTimeout);\n this.options = options;\n this.emitter = null;\n this.failoverDetector = null;\n if (!this.options.sentinels.length) {\n throw new Error(\"Requires at least one sentinel to connect to.\");\n }\n if (!this.options.name) {\n throw new Error(\"Requires the name of master.\");\n }\n this.sentinelIterator = new SentinelIterator_1.default(this.options.sentinels);\n }\n check(info) {\n const roleMatches = !info.role || this.options.role === info.role;\n if (!roleMatches) {\n debug(\"role invalid, expected %s, but got %s\", this.options.role, info.role);\n // Start from the next item.\n // Note that `reset` will move the cursor to the previous element,\n // so we advance two steps here.\n this.sentinelIterator.next();\n this.sentinelIterator.next();\n this.sentinelIterator.reset(true);\n }\n return roleMatches;\n }\n disconnect() {\n super.disconnect();\n if (this.failoverDetector) {\n this.failoverDetector.cleanup();\n }\n }\n connect(eventEmitter) {\n this.connecting = true;\n this.retryAttempts = 0;\n let lastError;\n const connectToNext = async () => {\n const endpoint = this.sentinelIterator.next();\n if (endpoint.done) {\n this.sentinelIterator.reset(false);\n const retryDelay = typeof this.options.sentinelRetryStrategy === \"function\"\n ? this.options.sentinelRetryStrategy(++this.retryAttempts)\n : null;\n let errorMsg = typeof retryDelay !== \"number\"\n ? \"All sentinels are unreachable and retry is disabled.\"\n : `All sentinels are unreachable. Retrying from scratch after ${retryDelay}ms.`;\n if (lastError) {\n errorMsg += ` Last error: ${lastError.message}`;\n }\n debug(errorMsg);\n const error = new Error(errorMsg);\n if (typeof retryDelay === \"number\") {\n eventEmitter(\"error\", error);\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n return connectToNext();\n }\n else {\n throw error;\n }\n }\n let resolved = null;\n let err = null;\n try {\n resolved = await this.resolve(endpoint.value);\n }\n catch (error) {\n err = error;\n }\n if (!this.connecting) {\n throw new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG);\n }\n const endpointAddress = endpoint.value.host + \":\" + endpoint.value.port;\n if (resolved) {\n debug(\"resolved: %s:%s from sentinel %s\", resolved.host, resolved.port, endpointAddress);\n if (this.options.enableTLSForSentinelMode && this.options.tls) {\n Object.assign(resolved, this.options.tls);\n this.stream = (0, tls_1.connect)(resolved);\n this.stream.once(\"secureConnect\", this.initFailoverDetector.bind(this));\n }\n else {\n this.stream = (0, net_1.createConnection)(resolved);\n this.stream.once(\"connect\", this.initFailoverDetector.bind(this));\n }\n this.stream.once(\"error\", (err) => {\n this.firstError = err;\n });\n return this.stream;\n }\n else {\n const errorMsg = err\n ? \"failed to connect to sentinel \" +\n endpointAddress +\n \" because \" +\n err.message\n : \"connected to sentinel \" +\n endpointAddress +\n \" successfully, but got an invalid reply: \" +\n resolved;\n debug(errorMsg);\n eventEmitter(\"sentinelError\", new Error(errorMsg));\n if (err) {\n lastError = err;\n }\n return connectToNext();\n }\n };\n return connectToNext();\n }\n async updateSentinels(client) {\n if (!this.options.updateSentinels) {\n return;\n }\n const result = await client.sentinel(\"sentinels\", this.options.name);\n if (!Array.isArray(result)) {\n return;\n }\n result\n .map(utils_1.packObject)\n .forEach((sentinel) => {\n const flags = sentinel.flags ? sentinel.flags.split(\",\") : [];\n if (flags.indexOf(\"disconnected\") === -1 &&\n sentinel.ip &&\n sentinel.port) {\n const endpoint = this.sentinelNatResolve(addressResponseToAddress(sentinel));\n if (this.sentinelIterator.add(endpoint)) {\n debug(\"adding sentinel %s:%s\", endpoint.host, endpoint.port);\n }\n }\n });\n debug(\"Updated internal sentinels: %s\", this.sentinelIterator);\n }\n async resolveMaster(client) {\n const result = await client.sentinel(\"get-master-addr-by-name\", this.options.name);\n await this.updateSentinels(client);\n return this.sentinelNatResolve(Array.isArray(result)\n ? { host: result[0], port: Number(result[1]) }\n : null);\n }\n async resolveSlave(client) {\n const result = await client.sentinel(\"slaves\", this.options.name);\n if (!Array.isArray(result)) {\n return null;\n }\n const availableSlaves = result\n .map(utils_1.packObject)\n .filter((slave) => slave.flags && !slave.flags.match(/(disconnected|s_down|o_down)/));\n return this.sentinelNatResolve(selectPreferredSentinel(availableSlaves, this.options.preferredSlaves));\n }\n sentinelNatResolve(item) {\n if (!item || !this.options.natMap)\n return item;\n const key = `${item.host}:${item.port}`;\n let result = item;\n if (typeof this.options.natMap === \"function\") {\n result = this.options.natMap(key) || item;\n }\n else if (typeof this.options.natMap === \"object\") {\n result = this.options.natMap[key] || item;\n }\n return result;\n }\n connectToSentinel(endpoint, options) {\n const redis = new Redis_1.default({\n port: endpoint.port || 26379,\n host: endpoint.host,\n username: this.options.sentinelUsername || null,\n password: this.options.sentinelPassword || null,\n family: endpoint.family ||\n // @ts-expect-error\n (\"path\" in this.options && this.options.path\n ? undefined\n : // @ts-expect-error\n this.options.family),\n tls: this.options.sentinelTLS,\n retryStrategy: null,\n enableReadyCheck: false,\n connectTimeout: this.options.connectTimeout,\n commandTimeout: this.options.sentinelCommandTimeout,\n ...options,\n });\n // @ts-expect-error\n return redis;\n }\n async resolve(endpoint) {\n const client = this.connectToSentinel(endpoint);\n // ignore the errors since resolve* methods will handle them\n client.on(\"error\", noop);\n try {\n if (this.options.role === \"slave\") {\n return await this.resolveSlave(client);\n }\n else {\n return await this.resolveMaster(client);\n }\n }\n finally {\n client.disconnect();\n }\n }\n async initFailoverDetector() {\n var _a;\n if (!this.options.failoverDetector) {\n return;\n }\n // Move the current sentinel to the first position\n this.sentinelIterator.reset(true);\n const sentinels = [];\n // In case of a large amount of sentinels, limit the number of concurrent connections\n while (sentinels.length < this.options.sentinelMaxConnections) {\n const { done, value } = this.sentinelIterator.next();\n if (done) {\n break;\n }\n const client = this.connectToSentinel(value, {\n lazyConnect: true,\n retryStrategy: this.options.sentinelReconnectStrategy,\n });\n client.on(\"reconnecting\", () => {\n var _a;\n // Tests listen to this event\n (_a = this.emitter) === null || _a === void 0 ? void 0 : _a.emit(\"sentinelReconnecting\");\n });\n sentinels.push({ address: value, client });\n }\n this.sentinelIterator.reset(false);\n if (this.failoverDetector) {\n // Clean up previous detector\n this.failoverDetector.cleanup();\n }\n this.failoverDetector = new FailoverDetector_1.FailoverDetector(this, sentinels);\n await this.failoverDetector.subscribe();\n // Tests listen to this event\n (_a = this.emitter) === null || _a === void 0 ? void 0 : _a.emit(\"failoverSubscribed\");\n }\n}\nexports[\"default\"] = SentinelConnector;\nfunction selectPreferredSentinel(availableSlaves, preferredSlaves) {\n if (availableSlaves.length === 0) {\n return null;\n }\n let selectedSlave;\n if (typeof preferredSlaves === \"function\") {\n selectedSlave = preferredSlaves(availableSlaves);\n }\n else if (preferredSlaves !== null && typeof preferredSlaves === \"object\") {\n const preferredSlavesArray = Array.isArray(preferredSlaves)\n ? preferredSlaves\n : [preferredSlaves];\n // sort by priority\n preferredSlavesArray.sort((a, b) => {\n // default the priority to 1\n if (!a.prio) {\n a.prio = 1;\n }\n if (!b.prio) {\n b.prio = 1;\n }\n // lowest priority first\n if (a.prio < b.prio) {\n return -1;\n }\n if (a.prio > b.prio) {\n return 1;\n }\n return 0;\n });\n // loop over preferred slaves and return the first match\n for (let p = 0; p < preferredSlavesArray.length; p++) {\n for (let a = 0; a < availableSlaves.length; a++) {\n const slave = availableSlaves[a];\n if (slave.ip === preferredSlavesArray[p].ip) {\n if (slave.port === preferredSlavesArray[p].port) {\n selectedSlave = slave;\n break;\n }\n }\n }\n if (selectedSlave) {\n break;\n }\n }\n }\n // if none of the preferred slaves are available, a random available slave is returned\n if (!selectedSlave) {\n selectedSlave = (0, utils_1.sample)(availableSlaves);\n }\n return addressResponseToAddress(selectedSlave);\n}\nfunction addressResponseToAddress(input) {\n return { host: input.ip, port: Number(input.port) };\n}\nfunction noop() { }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jb25uZWN0b3JzL1NlbnRpbmVsQ29ubmVjdG9yL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHdCQUF3QjtBQUN4QixjQUFjLG1CQUFPLENBQUMsZ0JBQUs7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsc0VBQWE7QUFDckMsY0FBYyxtQkFBTyxDQUFDLGdCQUFLO0FBQzNCLDJCQUEyQixtQkFBTyxDQUFDLCtHQUFvQjtBQUN2RCx3QkFBd0I7QUFDeEIsNEJBQTRCLG1CQUFPLENBQUMsZ0dBQXNCO0FBQzFELGdCQUFnQixtQkFBTyxDQUFDLGdFQUFhO0FBQ3JDLDJCQUEyQixtQkFBTyxDQUFDLCtHQUFvQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0ZBQW9GLFdBQVc7QUFDL0Y7QUFDQSxnREFBZ0Qsa0JBQWtCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFVBQVUsR0FBRyxVQUFVO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGNBQWM7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLDZCQUE2Qix3QkFBd0I7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0Esd0JBQXdCLGlDQUFpQztBQUN6RCw0QkFBNEIsNEJBQTRCO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jb25uZWN0b3JzL1NlbnRpbmVsQ29ubmVjdG9yL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZW50aW5lbEl0ZXJhdG9yID0gdm9pZCAwO1xuY29uc3QgbmV0XzEgPSByZXF1aXJlKFwibmV0XCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKTtcbmNvbnN0IHRsc18xID0gcmVxdWlyZShcInRsc1wiKTtcbmNvbnN0IFNlbnRpbmVsSXRlcmF0b3JfMSA9IHJlcXVpcmUoXCIuL1NlbnRpbmVsSXRlcmF0b3JcIik7XG5leHBvcnRzLlNlbnRpbmVsSXRlcmF0b3IgPSBTZW50aW5lbEl0ZXJhdG9yXzEuZGVmYXVsdDtcbmNvbnN0IEFic3RyYWN0Q29ubmVjdG9yXzEgPSByZXF1aXJlKFwiLi4vQWJzdHJhY3RDb25uZWN0b3JcIik7XG5jb25zdCBSZWRpc18xID0gcmVxdWlyZShcIi4uLy4uL1JlZGlzXCIpO1xuY29uc3QgRmFpbG92ZXJEZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vRmFpbG92ZXJEZXRlY3RvclwiKTtcbmNvbnN0IGRlYnVnID0gKDAsIHV0aWxzXzEuRGVidWcpKFwiU2VudGluZWxDb25uZWN0b3JcIik7XG5jbGFzcyBTZW50aW5lbENvbm5lY3RvciBleHRlbmRzIEFic3RyYWN0Q29ubmVjdG9yXzEuZGVmYXVsdCB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zLmRpc2Nvbm5lY3RUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5lbWl0dGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5mYWlsb3ZlckRldGVjdG9yID0gbnVsbDtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2VudGluZWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVxdWlyZXMgYXQgbGVhc3Qgb25lIHNlbnRpbmVsIHRvIGNvbm5lY3QgdG8uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLm5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlcXVpcmVzIHRoZSBuYW1lIG9mIG1hc3Rlci5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZW50aW5lbEl0ZXJhdG9yID0gbmV3IFNlbnRpbmVsSXRlcmF0b3JfMS5kZWZhdWx0KHRoaXMub3B0aW9ucy5zZW50aW5lbHMpO1xuICAgIH1cbiAgICBjaGVjayhpbmZvKSB7XG4gICAgICAgIGNvbnN0IHJvbGVNYXRjaGVzID0gIWluZm8ucm9sZSB8fCB0aGlzLm9wdGlvbnMucm9sZSA9PT0gaW5mby5yb2xlO1xuICAgICAgICBpZiAoIXJvbGVNYXRjaGVzKSB7XG4gICAgICAgICAgICBkZWJ1ZyhcInJvbGUgaW52YWxpZCwgZXhwZWN0ZWQgJXMsIGJ1dCBnb3QgJXNcIiwgdGhpcy5vcHRpb25zLnJvbGUsIGluZm8ucm9sZSk7XG4gICAgICAgICAgICAvLyBTdGFydCBmcm9tIHRoZSBuZXh0IGl0ZW0uXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgYHJlc2V0YCB3aWxsIG1vdmUgdGhlIGN1cnNvciB0byB0aGUgcHJldmlvdXMgZWxlbWVudCxcbiAgICAgICAgICAgIC8vIHNvIHdlIGFkdmFuY2UgdHdvIHN0ZXBzIGhlcmUuXG4gICAgICAgICAgICB0aGlzLnNlbnRpbmVsSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy5zZW50aW5lbEl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMuc2VudGluZWxJdGVyYXRvci5yZXNldCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm9sZU1hdGNoZXM7XG4gICAgfVxuICAgIGRpc2Nvbm5lY3QoKSB7XG4gICAgICAgIHN1cGVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgaWYgKHRoaXMuZmFpbG92ZXJEZXRlY3Rvcikge1xuICAgICAgICAgICAgdGhpcy5mYWlsb3ZlckRldGVjdG9yLmNsZWFudXAoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25uZWN0KGV2ZW50RW1pdHRlcikge1xuICAgICAgICB0aGlzLmNvbm5lY3RpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnJldHJ5QXR0ZW1wdHMgPSAwO1xuICAgICAgICBsZXQgbGFzdEVycm9yO1xuICAgICAgICBjb25zdCBjb25uZWN0VG9OZXh0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLnNlbnRpbmVsSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgaWYgKGVuZHBvaW50LmRvbmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbnRpbmVsSXRlcmF0b3IucmVzZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5RGVsYXkgPSB0eXBlb2YgdGhpcy5vcHRpb25zLnNlbnRpbmVsUmV0cnlTdHJhdGVneSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5vcHRpb25zLnNlbnRpbmVsUmV0cnlTdHJhdGVneSgrK3RoaXMucmV0cnlBdHRlbXB0cylcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgIGxldCBlcnJvck1zZyA9IHR5cGVvZiByZXRyeURlbGF5ICE9PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgID8gXCJBbGwgc2VudGluZWxzIGFyZSB1bnJlYWNoYWJsZSBhbmQgcmV0cnkgaXMgZGlzYWJsZWQuXCJcbiAgICAgICAgICAgICAgICAgICAgOiBgQWxsIHNlbnRpbmVscyBhcmUgdW5yZWFjaGFibGUuIFJldHJ5aW5nIGZyb20gc2NyYXRjaCBhZnRlciAke3JldHJ5RGVsYXl9bXMuYDtcbiAgICAgICAgICAgICAgICBpZiAobGFzdEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTXNnICs9IGAgTGFzdCBlcnJvcjogJHtsYXN0RXJyb3IubWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWJ1ZyhlcnJvck1zZyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoZXJyb3JNc2cpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmV0cnlEZWxheSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBldmVudEVtaXR0ZXIoXCJlcnJvclwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHJldHJ5RGVsYXkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3RUb05leHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCByZXNvbHZlZCA9IG51bGw7XG4gICAgICAgICAgICBsZXQgZXJyID0gbnVsbDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWQgPSBhd2FpdCB0aGlzLnJlc29sdmUoZW5kcG9pbnQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyID0gZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29ubmVjdGluZykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih1dGlsc18xLkNPTk5FQ1RJT05fQ0xPU0VEX0VSUk9SX01TRyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbmRwb2ludEFkZHJlc3MgPSBlbmRwb2ludC52YWx1ZS5ob3N0ICsgXCI6XCIgKyBlbmRwb2ludC52YWx1ZS5wb3J0O1xuICAgICAgICAgICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICAgICAgICAgICAgZGVidWcoXCJyZXNvbHZlZDogJXM6JXMgZnJvbSBzZW50aW5lbCAlc1wiLCByZXNvbHZlZC5ob3N0LCByZXNvbHZlZC5wb3J0LCBlbmRwb2ludEFkZHJlc3MpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlVExTRm9yU2VudGluZWxNb2RlICYmIHRoaXMub3B0aW9ucy50bHMpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyZXNvbHZlZCwgdGhpcy5vcHRpb25zLnRscyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtID0gKDAsIHRsc18xLmNvbm5lY3QpKHJlc29sdmVkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0ub25jZShcInNlY3VyZUNvbm5lY3RcIiwgdGhpcy5pbml0RmFpbG92ZXJEZXRlY3Rvci5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtID0gKDAsIG5ldF8xLmNyZWF0ZUNvbm5lY3Rpb24pKHJlc29sdmVkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0ub25jZShcImNvbm5lY3RcIiwgdGhpcy5pbml0RmFpbG92ZXJEZXRlY3Rvci5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0ub25jZShcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdEVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVhbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTXNnID0gZXJyXG4gICAgICAgICAgICAgICAgICAgID8gXCJmYWlsZWQgdG8gY29ubmVjdCB0byBzZW50aW5lbCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludEFkZHJlc3MgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIgYmVjYXVzZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICA6IFwiY29ubmVjdGVkIHRvIHNlbnRpbmVsIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50QWRkcmVzcyArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBzdWNjZXNzZnVsbHksIGJ1dCBnb3QgYW4gaW52YWxpZCByZXBseTogXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWQ7XG4gICAgICAgICAgICAgICAgZGVidWcoZXJyb3JNc2cpO1xuICAgICAgICAgICAgICAgIGV2ZW50RW1pdHRlcihcInNlbnRpbmVsRXJyb3JcIiwgbmV3IEVycm9yKGVycm9yTXNnKSk7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb25uZWN0VG9OZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjb25uZWN0VG9OZXh0KCk7XG4gICAgfVxuICAgIGFzeW5jIHVwZGF0ZVNlbnRpbmVscyhjbGllbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMudXBkYXRlU2VudGluZWxzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnNlbnRpbmVsKFwic2VudGluZWxzXCIsIHRoaXMub3B0aW9ucy5uYW1lKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRcbiAgICAgICAgICAgIC5tYXAodXRpbHNfMS5wYWNrT2JqZWN0KVxuICAgICAgICAgICAgLmZvckVhY2goKHNlbnRpbmVsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmbGFncyA9IHNlbnRpbmVsLmZsYWdzID8gc2VudGluZWwuZmxhZ3Muc3BsaXQoXCIsXCIpIDogW107XG4gICAgICAgICAgICBpZiAoZmxhZ3MuaW5kZXhPZihcImRpc2Nvbm5lY3RlZFwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICBzZW50aW5lbC5pcCAmJlxuICAgICAgICAgICAgICAgIHNlbnRpbmVsLnBvcnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuc2VudGluZWxOYXRSZXNvbHZlKGFkZHJlc3NSZXNwb25zZVRvQWRkcmVzcyhzZW50aW5lbCkpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbnRpbmVsSXRlcmF0b3IuYWRkKGVuZHBvaW50KSkge1xuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcImFkZGluZyBzZW50aW5lbCAlczolc1wiLCBlbmRwb2ludC5ob3N0LCBlbmRwb2ludC5wb3J0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkZWJ1ZyhcIlVwZGF0ZWQgaW50ZXJuYWwgc2VudGluZWxzOiAlc1wiLCB0aGlzLnNlbnRpbmVsSXRlcmF0b3IpO1xuICAgIH1cbiAgICBhc3luYyByZXNvbHZlTWFzdGVyKGNsaWVudCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQuc2VudGluZWwoXCJnZXQtbWFzdGVyLWFkZHItYnktbmFtZVwiLCB0aGlzLm9wdGlvbnMubmFtZSk7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2VudGluZWxzKGNsaWVudCk7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbnRpbmVsTmF0UmVzb2x2ZShBcnJheS5pc0FycmF5KHJlc3VsdClcbiAgICAgICAgICAgID8geyBob3N0OiByZXN1bHRbMF0sIHBvcnQ6IE51bWJlcihyZXN1bHRbMV0pIH1cbiAgICAgICAgICAgIDogbnVsbCk7XG4gICAgfVxuICAgIGFzeW5jIHJlc29sdmVTbGF2ZShjbGllbnQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnNlbnRpbmVsKFwic2xhdmVzXCIsIHRoaXMub3B0aW9ucy5uYW1lKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVNsYXZlcyA9IHJlc3VsdFxuICAgICAgICAgICAgLm1hcCh1dGlsc18xLnBhY2tPYmplY3QpXG4gICAgICAgICAgICAuZmlsdGVyKChzbGF2ZSkgPT4gc2xhdmUuZmxhZ3MgJiYgIXNsYXZlLmZsYWdzLm1hdGNoKC8oZGlzY29ubmVjdGVkfHNfZG93bnxvX2Rvd24pLykpO1xuICAgICAgICByZXR1cm4gdGhpcy5zZW50aW5lbE5hdFJlc29sdmUoc2VsZWN0UHJlZmVycmVkU2VudGluZWwoYXZhaWxhYmxlU2xhdmVzLCB0aGlzLm9wdGlvbnMucHJlZmVycmVkU2xhdmVzKSk7XG4gICAgfVxuICAgIHNlbnRpbmVsTmF0UmVzb2x2ZShpdGVtKSB7XG4gICAgICAgIGlmICghaXRlbSB8fCAhdGhpcy5vcHRpb25zLm5hdE1hcClcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICBjb25zdCBrZXkgPSBgJHtpdGVtLmhvc3R9OiR7aXRlbS5wb3J0fWA7XG4gICAgICAgIGxldCByZXN1bHQgPSBpdGVtO1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5uYXRNYXAgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5vcHRpb25zLm5hdE1hcChrZXkpIHx8IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5uYXRNYXAgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMub3B0aW9ucy5uYXRNYXBba2V5XSB8fCBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGNvbm5lY3RUb1NlbnRpbmVsKGVuZHBvaW50LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJlZGlzID0gbmV3IFJlZGlzXzEuZGVmYXVsdCh7XG4gICAgICAgICAgICBwb3J0OiBlbmRwb2ludC5wb3J0IHx8IDI2Mzc5LFxuICAgICAgICAgICAgaG9zdDogZW5kcG9pbnQuaG9zdCxcbiAgICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLm9wdGlvbnMuc2VudGluZWxVc2VybmFtZSB8fCBudWxsLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IHRoaXMub3B0aW9ucy5zZW50aW5lbFBhc3N3b3JkIHx8IG51bGwsXG4gICAgICAgICAgICBmYW1pbHk6IGVuZHBvaW50LmZhbWlseSB8fFxuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICAoXCJwYXRoXCIgaW4gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXRoXG4gICAgICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIDogLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmZhbWlseSksXG4gICAgICAgICAgICB0bHM6IHRoaXMub3B0aW9ucy5zZW50aW5lbFRMUyxcbiAgICAgICAgICAgIHJldHJ5U3RyYXRlZ3k6IG51bGwsXG4gICAgICAgICAgICBlbmFibGVSZWFkeUNoZWNrOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbm5lY3RUaW1lb3V0OiB0aGlzLm9wdGlvbnMuY29ubmVjdFRpbWVvdXQsXG4gICAgICAgICAgICBjb21tYW5kVGltZW91dDogdGhpcy5vcHRpb25zLnNlbnRpbmVsQ29tbWFuZFRpbWVvdXQsXG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICByZXR1cm4gcmVkaXM7XG4gICAgfVxuICAgIGFzeW5jIHJlc29sdmUoZW5kcG9pbnQpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5jb25uZWN0VG9TZW50aW5lbChlbmRwb2ludCk7XG4gICAgICAgIC8vIGlnbm9yZSB0aGUgZXJyb3JzIHNpbmNlIHJlc29sdmUqIG1ldGhvZHMgd2lsbCBoYW5kbGUgdGhlbVxuICAgICAgICBjbGllbnQub24oXCJlcnJvclwiLCBub29wKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucm9sZSA9PT0gXCJzbGF2ZVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVzb2x2ZVNsYXZlKGNsaWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXNvbHZlTWFzdGVyKGNsaWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBjbGllbnQuZGlzY29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGluaXRGYWlsb3ZlckRldGVjdG9yKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLmZhaWxvdmVyRGV0ZWN0b3IpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBNb3ZlIHRoZSBjdXJyZW50IHNlbnRpbmVsIHRvIHRoZSBmaXJzdCBwb3NpdGlvblxuICAgICAgICB0aGlzLnNlbnRpbmVsSXRlcmF0b3IucmVzZXQodHJ1ZSk7XG4gICAgICAgIGNvbnN0IHNlbnRpbmVscyA9IFtdO1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGEgbGFyZ2UgYW1vdW50IG9mIHNlbnRpbmVscywgbGltaXQgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IGNvbm5lY3Rpb25zXG4gICAgICAgIHdoaWxlIChzZW50aW5lbHMubGVuZ3RoIDwgdGhpcy5vcHRpb25zLnNlbnRpbmVsTWF4Q29ubmVjdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IHRoaXMuc2VudGluZWxJdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5jb25uZWN0VG9TZW50aW5lbCh2YWx1ZSwge1xuICAgICAgICAgICAgICAgIGxhenlDb25uZWN0OiB0cnVlLFxuICAgICAgICAgICAgICAgIHJldHJ5U3RyYXRlZ3k6IHRoaXMub3B0aW9ucy5zZW50aW5lbFJlY29ubmVjdFN0cmF0ZWd5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjbGllbnQub24oXCJyZWNvbm5lY3RpbmdcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAvLyBUZXN0cyBsaXN0ZW4gdG8gdGhpcyBldmVudFxuICAgICAgICAgICAgICAgIChfYSA9IHRoaXMuZW1pdHRlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVtaXQoXCJzZW50aW5lbFJlY29ubmVjdGluZ1wiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VudGluZWxzLnB1c2goeyBhZGRyZXNzOiB2YWx1ZSwgY2xpZW50IH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VudGluZWxJdGVyYXRvci5yZXNldChmYWxzZSk7XG4gICAgICAgIGlmICh0aGlzLmZhaWxvdmVyRGV0ZWN0b3IpIHtcbiAgICAgICAgICAgIC8vIENsZWFuIHVwIHByZXZpb3VzIGRldGVjdG9yXG4gICAgICAgICAgICB0aGlzLmZhaWxvdmVyRGV0ZWN0b3IuY2xlYW51cCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmFpbG92ZXJEZXRlY3RvciA9IG5ldyBGYWlsb3ZlckRldGVjdG9yXzEuRmFpbG92ZXJEZXRlY3Rvcih0aGlzLCBzZW50aW5lbHMpO1xuICAgICAgICBhd2FpdCB0aGlzLmZhaWxvdmVyRGV0ZWN0b3Iuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIFRlc3RzIGxpc3RlbiB0byB0aGlzIGV2ZW50XG4gICAgICAgIChfYSA9IHRoaXMuZW1pdHRlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVtaXQoXCJmYWlsb3ZlclN1YnNjcmliZWRcIik7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gU2VudGluZWxDb25uZWN0b3I7XG5mdW5jdGlvbiBzZWxlY3RQcmVmZXJyZWRTZW50aW5lbChhdmFpbGFibGVTbGF2ZXMsIHByZWZlcnJlZFNsYXZlcykge1xuICAgIGlmIChhdmFpbGFibGVTbGF2ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBsZXQgc2VsZWN0ZWRTbGF2ZTtcbiAgICBpZiAodHlwZW9mIHByZWZlcnJlZFNsYXZlcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHNlbGVjdGVkU2xhdmUgPSBwcmVmZXJyZWRTbGF2ZXMoYXZhaWxhYmxlU2xhdmVzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJlZmVycmVkU2xhdmVzICE9PSBudWxsICYmIHR5cGVvZiBwcmVmZXJyZWRTbGF2ZXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgY29uc3QgcHJlZmVycmVkU2xhdmVzQXJyYXkgPSBBcnJheS5pc0FycmF5KHByZWZlcnJlZFNsYXZlcylcbiAgICAgICAgICAgID8gcHJlZmVycmVkU2xhdmVzXG4gICAgICAgICAgICA6IFtwcmVmZXJyZWRTbGF2ZXNdO1xuICAgICAgICAvLyBzb3J0IGJ5IHByaW9yaXR5XG4gICAgICAgIHByZWZlcnJlZFNsYXZlc0FycmF5LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIC8vIGRlZmF1bHQgdGhlIHByaW9yaXR5IHRvIDFcbiAgICAgICAgICAgIGlmICghYS5wcmlvKSB7XG4gICAgICAgICAgICAgICAgYS5wcmlvID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYi5wcmlvKSB7XG4gICAgICAgICAgICAgICAgYi5wcmlvID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGxvd2VzdCBwcmlvcml0eSBmaXJzdFxuICAgICAgICAgICAgaWYgKGEucHJpbyA8IGIucHJpbykge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhLnByaW8gPiBiLnByaW8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gbG9vcCBvdmVyIHByZWZlcnJlZCBzbGF2ZXMgYW5kIHJldHVybiB0aGUgZmlyc3QgbWF0Y2hcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBwcmVmZXJyZWRTbGF2ZXNBcnJheS5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgZm9yIChsZXQgYSA9IDA7IGEgPCBhdmFpbGFibGVTbGF2ZXMubGVuZ3RoOyBhKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzbGF2ZSA9IGF2YWlsYWJsZVNsYXZlc1thXTtcbiAgICAgICAgICAgICAgICBpZiAoc2xhdmUuaXAgPT09IHByZWZlcnJlZFNsYXZlc0FycmF5W3BdLmlwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzbGF2ZS5wb3J0ID09PSBwcmVmZXJyZWRTbGF2ZXNBcnJheVtwXS5wb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFNsYXZlID0gc2xhdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFNsYXZlKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gaWYgbm9uZSBvZiB0aGUgcHJlZmVycmVkIHNsYXZlcyBhcmUgYXZhaWxhYmxlLCBhIHJhbmRvbSBhdmFpbGFibGUgc2xhdmUgaXMgcmV0dXJuZWRcbiAgICBpZiAoIXNlbGVjdGVkU2xhdmUpIHtcbiAgICAgICAgc2VsZWN0ZWRTbGF2ZSA9ICgwLCB1dGlsc18xLnNhbXBsZSkoYXZhaWxhYmxlU2xhdmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZHJlc3NSZXNwb25zZVRvQWRkcmVzcyhzZWxlY3RlZFNsYXZlKTtcbn1cbmZ1bmN0aW9uIGFkZHJlc3NSZXNwb25zZVRvQWRkcmVzcyhpbnB1dCkge1xuICAgIHJldHVybiB7IGhvc3Q6IGlucHV0LmlwLCBwb3J0OiBOdW1iZXIoaW5wdXQucG9ydCkgfTtcbn1cbmZ1bmN0aW9uIG5vb3AoKSB7IH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/connectors/SentinelConnector/index.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/connectors/StandaloneConnector.js":
/*!**********************************************************************!*\
!*** ./node_modules/ioredis/built/connectors/StandaloneConnector.js ***!
\**********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst net_1 = __webpack_require__(/*! net */ \"net\");\nconst tls_1 = __webpack_require__(/*! tls */ \"tls\");\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(rsc)/./node_modules/ioredis/built/utils/index.js\");\nconst AbstractConnector_1 = __webpack_require__(/*! ./AbstractConnector */ \"(rsc)/./node_modules/ioredis/built/connectors/AbstractConnector.js\");\nclass StandaloneConnector extends AbstractConnector_1.default {\n constructor(options) {\n super(options.disconnectTimeout);\n this.options = options;\n }\n connect(_) {\n const { options } = this;\n this.connecting = true;\n let connectionOptions;\n if (\"path\" in options && options.path) {\n connectionOptions = {\n path: options.path,\n };\n }\n else {\n connectionOptions = {};\n if (\"port\" in options && options.port != null) {\n connectionOptions.port = options.port;\n }\n if (\"host\" in options && options.host != null) {\n connectionOptions.host = options.host;\n }\n if (\"family\" in options && options.family != null) {\n connectionOptions.family = options.family;\n }\n }\n if (options.tls) {\n Object.assign(connectionOptions, options.tls);\n }\n // TODO:\n // We use native Promise here since other Promise\n // implementation may use different schedulers that\n // cause issue when the stream is resolved in the\n // next tick.\n // Should use the provided promise in the next major\n // version and do not connect before resolved.\n return new Promise((resolve, reject) => {\n process.nextTick(() => {\n if (!this.connecting) {\n reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n return;\n }\n try {\n if (options.tls) {\n this.stream = (0, tls_1.connect)(connectionOptions);\n }\n else {\n this.stream = (0, net_1.createConnection)(connectionOptions);\n }\n }\n catch (err) {\n reject(err);\n return;\n }\n this.stream.once(\"error\", (err) => {\n this.firstError = err;\n });\n resolve(this.stream);\n });\n });\n }\n}\nexports[\"default\"] = StandaloneConnector;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jb25uZWN0b3JzL1N0YW5kYWxvbmVDb25uZWN0b3IuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsY0FBYyxtQkFBTyxDQUFDLGdCQUFLO0FBQzNCLGNBQWMsbUJBQU8sQ0FBQyxnQkFBSztBQUMzQixnQkFBZ0IsbUJBQU8sQ0FBQyxtRUFBVTtBQUNsQyw0QkFBNEIsbUJBQU8sQ0FBQywrRkFBcUI7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQSxrQkFBZSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jb25uZWN0b3JzL1N0YW5kYWxvbmVDb25uZWN0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBuZXRfMSA9IHJlcXVpcmUoXCJuZXRcIik7XG5jb25zdCB0bHNfMSA9IHJlcXVpcmUoXCJ0bHNcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgQWJzdHJhY3RDb25uZWN0b3JfMSA9IHJlcXVpcmUoXCIuL0Fic3RyYWN0Q29ubmVjdG9yXCIpO1xuY2xhc3MgU3RhbmRhbG9uZUNvbm5lY3RvciBleHRlbmRzIEFic3RyYWN0Q29ubmVjdG9yXzEuZGVmYXVsdCB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zLmRpc2Nvbm5lY3RUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgY29ubmVjdChfKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9ucyB9ID0gdGhpcztcbiAgICAgICAgdGhpcy5jb25uZWN0aW5nID0gdHJ1ZTtcbiAgICAgICAgbGV0IGNvbm5lY3Rpb25PcHRpb25zO1xuICAgICAgICBpZiAoXCJwYXRoXCIgaW4gb3B0aW9ucyAmJiBvcHRpb25zLnBhdGgpIHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb25PcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHBhdGg6IG9wdGlvbnMucGF0aCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25uZWN0aW9uT3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgaWYgKFwicG9ydFwiIGluIG9wdGlvbnMgJiYgb3B0aW9ucy5wb3J0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uT3B0aW9ucy5wb3J0ID0gb3B0aW9ucy5wb3J0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFwiaG9zdFwiIGluIG9wdGlvbnMgJiYgb3B0aW9ucy5ob3N0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uT3B0aW9ucy5ob3N0ID0gb3B0aW9ucy5ob3N0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFwiZmFtaWx5XCIgaW4gb3B0aW9ucyAmJiBvcHRpb25zLmZhbWlseSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbk9wdGlvbnMuZmFtaWx5ID0gb3B0aW9ucy5mYW1pbHk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMudGxzKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbm5lY3Rpb25PcHRpb25zLCBvcHRpb25zLnRscyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETzpcbiAgICAgICAgLy8gV2UgdXNlIG5hdGl2ZSBQcm9taXNlIGhlcmUgc2luY2Ugb3RoZXIgUHJvbWlzZVxuICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBtYXkgdXNlIGRpZmZlcmVudCBzY2hlZHVsZXJzIHRoYXRcbiAgICAgICAgLy8gY2F1c2UgaXNzdWUgd2hlbiB0aGUgc3RyZWFtIGlzIHJlc29sdmVkIGluIHRoZVxuICAgICAgICAvLyBuZXh0IHRpY2suXG4gICAgICAgIC8vIFNob3VsZCB1c2UgdGhlIHByb3ZpZGVkIHByb21pc2UgaW4gdGhlIG5leHQgbWFqb3JcbiAgICAgICAgLy8gdmVyc2lvbiBhbmQgZG8gbm90IGNvbm5lY3QgYmVmb3JlIHJlc29sdmVkLlxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbm5lY3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcih1dGlsc18xLkNPTk5FQ1RJT05fQ0xPU0VEX0VSUk9SX01TRykpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnRscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0gPSAoMCwgdGxzXzEuY29ubmVjdCkoY29ubmVjdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0gPSAoMCwgbmV0XzEuY3JlYXRlQ29ubmVjdGlvbikoY29ubmVjdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0ub25jZShcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdEVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zdHJlYW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFN0YW5kYWxvbmVDb25uZWN0b3I7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/connectors/StandaloneConnector.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/connectors/index.js":
/*!********************************************************!*\
!*** ./node_modules/ioredis/built/connectors/index.js ***!
\********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.SentinelConnector = exports.StandaloneConnector = void 0;\nconst StandaloneConnector_1 = __webpack_require__(/*! ./StandaloneConnector */ \"(rsc)/./node_modules/ioredis/built/connectors/StandaloneConnector.js\");\nexports.StandaloneConnector = StandaloneConnector_1.default;\nconst SentinelConnector_1 = __webpack_require__(/*! ./SentinelConnector */ \"(rsc)/./node_modules/ioredis/built/connectors/SentinelConnector/index.js\");\nexports.SentinelConnector = SentinelConnector_1.default;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jb25uZWN0b3JzL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHlCQUF5QixHQUFHLDJCQUEyQjtBQUN2RCw4QkFBOEIsbUJBQU8sQ0FBQyxtR0FBdUI7QUFDN0QsMkJBQTJCO0FBQzNCLDRCQUE0QixtQkFBTyxDQUFDLHFHQUFxQjtBQUN6RCx5QkFBeUIiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvY29ubmVjdG9ycy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2VudGluZWxDb25uZWN0b3IgPSBleHBvcnRzLlN0YW5kYWxvbmVDb25uZWN0b3IgPSB2b2lkIDA7XG5jb25zdCBTdGFuZGFsb25lQ29ubmVjdG9yXzEgPSByZXF1aXJlKFwiLi9TdGFuZGFsb25lQ29ubmVjdG9yXCIpO1xuZXhwb3J0cy5TdGFuZGFsb25lQ29ubmVjdG9yID0gU3RhbmRhbG9uZUNvbm5lY3Rvcl8xLmRlZmF1bHQ7XG5jb25zdCBTZW50aW5lbENvbm5lY3Rvcl8xID0gcmVxdWlyZShcIi4vU2VudGluZWxDb25uZWN0b3JcIik7XG5leHBvcnRzLlNlbnRpbmVsQ29ubmVjdG9yID0gU2VudGluZWxDb25uZWN0b3JfMS5kZWZhdWx0O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/connectors/index.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/constants/TLSProfiles.js":
/*!*************************************************************!*\
!*** ./node_modules/ioredis/built/constants/TLSProfiles.js ***!
\*************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n/**\n * TLS settings for Redis Cloud. Updated on 2022-08-19.\n */\nconst RedisCloudCA = `-----BEGIN CERTIFICATE-----\nMIIDTzCCAjegAwIBAgIJAKSVpiDswLcwMA0GCSqGSIb3DQEBBQUAMD4xFjAUBgNV\nBAoMDUdhcmFudGlhIERhdGExJDAiBgNVBAMMG1NTTCBDZXJ0aWZpY2F0aW9uIEF1\ndGhvcml0eTAeFw0xMzEwMDExMjE0NTVaFw0yMzA5MjkxMjE0NTVaMD4xFjAUBgNV\nBAoMDUdhcmFudGlhIERhdGExJDAiBgNVBAMMG1NTTCBDZXJ0aWZpY2F0aW9uIEF1\ndGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALZqkh/DczWP\nJnxnHLQ7QL0T4B4CDKWBKCcisriGbA6ZePWVNo4hfKQC6JrzfR+081NeD6VcWUiz\nrmd+jtPhIY4c+WVQYm5PKaN6DT1imYdxQw7aqO5j2KUCEh/cznpLxeSHoTxlR34E\nQwF28Wl3eg2vc5ct8LjU3eozWVk3gb7alx9mSA2SgmuX5lEQawl++rSjsBStemY2\nBDwOpAMXIrdEyP/cVn8mkvi/BDs5M5G+09j0gfhyCzRWMQ7Hn71u1eolRxwVxgi3\nTMn+/vTaFSqxKjgck6zuAYjBRPaHe7qLxHNr1So/Mc9nPy+3wHebFwbIcnUojwbp\n4nctkWbjb2cCAwEAAaNQME4wHQYDVR0OBBYEFP1whtcrydmW3ZJeuSoKZIKjze3w\nMB8GA1UdIwQYMBaAFP1whtcrydmW3ZJeuSoKZIKjze3wMAwGA1UdEwQFMAMBAf8w\nDQYJKoZIhvcNAQEFBQADggEBAG2erXhwRAa7+ZOBs0B6X57Hwyd1R4kfmXcs0rta\nlbPpvgULSiB+TCbf3EbhJnHGyvdCY1tvlffLjdA7HJ0PCOn+YYLBA0pTU/dyvrN6\nSu8NuS5yubnt9mb13nDGYo1rnt0YRfxN+8DM3fXIVr038A30UlPX2Ou1ExFJT0MZ\nuFKY6ZvLdI6/1cbgmguMlAhM+DhKyV6Sr5699LM3zqeI816pZmlREETYkGr91q7k\nBpXJu/dtHaGxg1ZGu6w/PCsYGUcECWENYD4VQPd8N32JjOfu6vEgoEAwfPP+3oGp\nZ4m3ewACcWOAenqflb+cQYC4PsF7qbXDmRaWrbKntOlZ3n0=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIGMTCCBBmgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwajELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMQswCQYDVQQHDAJDQTESMBAGA1UECgwJUmVkaXNMYWJzMS0w\nKwYDVQQDDCRSZWRpc0xhYnMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN\nMTgwMjI1MTUzNzM3WhcNMjgwMjIzMTUzNzM3WjBfMQswCQYDVQQGEwJVUzELMAkG\nA1UECAwCQ0ExEjAQBgNVBAoMCVJlZGlzTGFiczEvMC0GA1UEAwwmUkNQIEludGVy\nbWVkaWF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA\nA4ICDwAwggIKAoICAQDf9dqbxc8Bq7Ctq9rWcxrGNKKHivqLAFpPq02yLPx6fsOv\nTq7GsDChAYBBc4v7Y2Ap9RD5Vs3dIhEANcnolf27QwrG9RMnnvzk8pCvp1o6zSU4\nVuOE1W66/O1/7e2rVxyrnTcP7UgK43zNIXu7+tiAqWsO92uSnuMoGPGpeaUm1jym\nhjWKtkAwDFSqvHY+XL5qDVBEjeUe+WHkYUg40cAXjusAqgm2hZt29c2wnVrxW25W\nP0meNlzHGFdA2AC5z54iRiqj57dTfBTkHoBczQxcyw6hhzxZQ4e5I5zOKjXXEhZN\nr0tA3YC14CTabKRus/JmZieyZzRgEy2oti64tmLYTqSlAD78pRL40VNoaSYetXLw\nhhNsXCHgWaY6d5bLOc/aIQMAV5oLvZQKvuXAF1IDmhPA+bZbpWipp0zagf1P1H3s\nUzsMdn2KM0ejzgotbtNlj5TcrVwpmvE3ktvUAuA+hi3FkVx1US+2Gsp5x4YOzJ7u\nP1WPk6ShF0JgnJH2ILdj6kttTWwFzH17keSFICWDfH/+kM+k7Y1v3EXMQXE7y0T9\nMjvJskz6d/nv+sQhY04xt64xFMGTnZjlJMzfQNi7zWFLTZnDD0lPowq7l3YiPoTT\nt5Xky83lu0KZsZBo0WlWaDG00gLVdtRgVbcuSWxpi5BdLb1kRab66JptWjxwXQID\nAQABo4HrMIHoMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHBzOi8vcmwtY2Etc2VydmVy\nLnJlZGlzbGFicy5jb20vdjEvY3JsMEYGCCsGAQUFBwEBBDowODA2BggrBgEFBQcw\nAYYqaHR0cHM6Ly9ybC1jYS1zZXJ2ZXIucmVkaXNsYWJzLmNvbS92MS9vY3NwMB0G\nA1UdDgQWBBQHar5OKvQUpP2qWt6mckzToeCOHDAfBgNVHSMEGDAWgBQi42wH6hM4\nL2sujEvLM0/u8lRXTzASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB\nhjANBgkqhkiG9w0BAQsFAAOCAgEAirEn/iTsAKyhd+pu2W3Z5NjCko4NPU0EYUbr\nAP7+POK2rzjIrJO3nFYQ/LLuC7KCXG+2qwan2SAOGmqWst13Y+WHp44Kae0kaChW\nvcYLXXSoGQGC8QuFSNUdaeg3RbMDYFT04dOkqufeWVccoHVxyTSg9eD8LZuHn5jw\n7QDLiEECBmIJHk5Eeo2TAZrx4Yx6ufSUX5HeVjlAzqwtAqdt99uCJ/EL8bgpWbe+\nXoSpvUv0SEC1I1dCAhCKAvRlIOA6VBcmzg5Am12KzkqTul12/VEFIgzqu0Zy2Jbc\nAUPrYVu/+tOGXQaijy7YgwH8P8n3s7ZeUa1VABJHcxrxYduDDJBLZi+MjheUDaZ1\njQRHYevI2tlqeSBqdPKG4zBY5lS0GiAlmuze5oENt0P3XboHoZPHiqcK3VECgTVh\n/BkJcuudETSJcZDmQ8YfoKfBzRQNg2sv/hwvUv73Ss51Sco8GEt2lD8uEdib1Q6z\nzDT5lXJowSzOD5ZA9OGDjnSRL+2riNtKWKEqvtEG3VBJoBzu9GoxbAc7wIZLxmli\niF5a/Zf5X+UXD3s4TMmy6C4QZJpAA2egsSQCnraWO2ULhh7iXMysSkF/nzVfZn43\niqpaB8++9a37hWq14ZmOv0TJIDz//b2+KC4VFXWQ5W5QC6whsjT+OlG4p5ZYG0jo\n616pxqo=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIFujCCA6KgAwIBAgIJAJ1aTT1lu2ScMA0GCSqGSIb3DQEBCwUAMGoxCzAJBgNV\nBAYTAlVTMQswCQYDVQQIDAJDQTELMAkGA1UEBwwCQ0ExEjAQBgNVBAoMCVJlZGlz\nTGFiczEtMCsGA1UEAwwkUmVkaXNMYWJzIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9y\naXR5MB4XDTE4MDIyNTE1MjA0MloXDTM4MDIyMDE1MjA0MlowajELMAkGA1UEBhMC\nVVMxCzAJBgNVBAgMAkNBMQswCQYDVQQHDAJDQTESMBAGA1UECgwJUmVkaXNMYWJz\nMS0wKwYDVQQDDCRSZWRpc0xhYnMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw\nggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDLEjXy7YrbN5Waau5cd6g1\nG5C2tMmeTpZ0duFAPxNU4oE3RHS5gGiok346fUXuUxbZ6QkuzeN2/2Z+RmRcJhQY\nDm0ZgdG4x59An1TJfnzKKoWj8ISmoHS/TGNBdFzXV7FYNLBuqZouqePI6ReC6Qhl\npp45huV32Q3a6IDrrvx7Wo5ZczEQeFNbCeCOQYNDdTmCyEkHqc2AGo8eoIlSTutT\nULOC7R5gzJVTS0e1hesQ7jmqHjbO+VQS1NAL4/5K6cuTEqUl+XhVhPdLWBXJQ5ag\n54qhX4v+ojLzeU1R/Vc6NjMvVtptWY6JihpgplprN0Yh2556ewcXMeturcKgXfGJ\nxeYzsjzXerEjrVocX5V8BNrg64NlifzTMKNOOv4fVZszq1SIHR8F9ROrqiOdh8iC\nJpUbLpXH9hWCSEO6VRMB2xJoKu3cgl63kF30s77x7wLFMEHiwsQRKxooE1UhgS9K\n2sO4TlQ1eWUvFvHSTVDQDlGQ6zu4qjbOpb3Q8bQwoK+ai2alkXVR4Ltxe9QlgYK3\nStsnPhruzZGA0wbXdpw0bnM+YdlEm5ffSTpNIfgHeaa7Dtb801FtA71ZlH7A6TaI\nSIQuUST9EKmv7xrJyx0W1pGoPOLw5T029aTjnICSLdtV9bLwysrLhIYG5bnPq78B\ncS+jZHFGzD7PUVGQD01nOQIDAQABo2MwYTAdBgNVHQ4EFgQUIuNsB+oTOC9rLoxL\nyzNP7vJUV08wHwYDVR0jBBgwFoAUIuNsB+oTOC9rLoxLyzNP7vJUV08wDwYDVR0T\nAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAHfg\nz5pMNUAKdMzK1aS1EDdK9yKz4qicILz5czSLj1mC7HKDRy8cVADUxEICis++CsCu\nrYOvyCVergHQLREcxPq4rc5Nq1uj6J6649NEeh4WazOOjL4ZfQ1jVznMbGy+fJm3\n3Hoelv6jWRG9iqeJZja7/1s6YC6bWymI/OY1e4wUKeNHAo+Vger7MlHV+RuabaX+\nhSJ8bJAM59NCM7AgMTQpJCncrcdLeceYniGy5Q/qt2b5mJkQVkIdy4TPGGB+AXDJ\nD0q3I/JDRkDUFNFdeW0js7fHdsvCR7O3tJy5zIgEV/o/BCkmJVtuwPYOrw/yOlKj\nTY/U7ATAx9VFF6/vYEOMYSmrZlFX+98L6nJtwDqfLB5VTltqZ4H/KBxGE3IRSt9l\nFXy40U+LnXzhhW+7VBAvyYX8GEXhHkKU8Gqk1xitrqfBXY74xKgyUSTolFSfFVgj\nmcM/X4K45bka+qpkj7Kfv/8D4j6aZekwhN2ly6hhC1SmQ8qjMjpG/mrWOSSHZFmf\nybu9iD2AYHeIOkshIl6xYIa++Q/00/vs46IzAbQyriOi0XxlSMMVtPx0Q3isp+ji\nn8Mq9eOuxYOEQ4of8twUkUDd528iwGtEdwf0Q01UyT84S62N8AySl1ZBKXJz6W4F\nUhWfa/HQYOAPDdEjNgnVwLI23b8t0TozyCWw7q8h\n-----END CERTIFICATE-----\n\n-----BEGIN CERTIFICATE-----\nMIIEjzCCA3egAwIBAgIQe55B/ALCKJDZtdNT8kD6hTANBgkqhkiG9w0BAQsFADBM\nMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xv\nYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0yMjAxMjYxMjAwMDBaFw0y\nNTAxMjYwMDAwMDBaMFgxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWdu\nIG52LXNhMS4wLAYDVQQDEyVHbG9iYWxTaWduIEF0bGFzIFIzIE9WIFRMUyBDQSAy\nMDIyIFEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmGmg1LW9b7Lf\n8zDD83yBDTEkt+FOxKJZqF4veWc5KZsQj9HfnUS2e5nj/E+JImlGPsQuoiosLuXD\nBVBNAMcUFa11buFMGMeEMwiTmCXoXRrXQmH0qjpOfKgYc5gHG3BsRGaRrf7VR4eg\nofNMG9wUBw4/g/TT7+bQJdA4NfE7Y4d5gEryZiBGB/swaX6Jp/8MF4TgUmOWmalK\ndZCKyb4sPGQFRTtElk67F7vU+wdGcrcOx1tDcIB0ncjLPMnaFicagl+daWGsKqTh\ncounQb6QJtYHa91KvCfKWocMxQ7OIbB5UARLPmC4CJ1/f8YFm35ebfzAeULYdGXu\njE9CLor0OwIDAQABo4IBXzCCAVswDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQG\nCCsGAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW\nBBSH5Zq7a7B/t95GfJWkDBpA8HHqdjAfBgNVHSMEGDAWgBSP8Et/qC5FJK5NUPpj\nmove4t0bvDB7BggrBgEFBQcBAQRvMG0wLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3Nw\nMi5nbG9iYWxzaWduLmNvbS9yb290cjMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9zZWN1\ncmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L3Jvb3QtcjMuY3J0MDYGA1UdHwQvMC0w\nK6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vcm9vdC1yMy5jcmwwIQYD\nVR0gBBowGDAIBgZngQwBAgIwDAYKKwYBBAGgMgoBAjANBgkqhkiG9w0BAQsFAAOC\nAQEAKRic9/f+nmhQU/wz04APZLjgG5OgsuUOyUEZjKVhNGDwxGTvKhyXGGAMW2B/\n3bRi+aElpXwoxu3pL6fkElbX3B0BeS5LoDtxkyiVEBMZ8m+sXbocwlPyxrPbX6mY\n0rVIvnuUeBH8X0L5IwfpNVvKnBIilTbcebfHyXkPezGwz7E1yhUULjJFm2bt0SdX\ny+4X/WeiiYIv+fTVgZZgl+/2MKIsu/qdBJc3f3TvJ8nz+Eax1zgZmww+RSQWeOj3\n15Iw6Z5FX+NwzY/Ab+9PosR5UosSeq+9HhtaxZttXG1nVh+avYPGYddWmiMT90J5\nZgKnO/Fx2hBgTxhOTMYaD312kg==\n-----END CERTIFICATE-----\n\n-----BEGIN CERTIFICATE-----\nMIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G\nA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp\nZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4\nMTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG\nA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8\nRgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT\ngHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm\nKPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd\nQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ\nXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw\nDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o\nLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU\nRUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp\njjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK\n6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX\nmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs\nMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH\nWD9f\n-----END CERTIFICATE-----`;\nconst TLSProfiles = {\n RedisCloudFixed: { ca: RedisCloudCA },\n RedisCloudFlexible: { ca: RedisCloudCA },\n};\nexports[\"default\"] = TLSProfiles;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jb25zdGFudHMvVExTUHJvZmlsZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsa0JBQWtCO0FBQ3pDLDBCQUEwQixrQkFBa0I7QUFDNUM7QUFDQSxrQkFBZSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9jb25zdGFudHMvVExTUHJvZmlsZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKipcbiAqIFRMUyBzZXR0aW5ncyBmb3IgUmVkaXMgQ2xvdWQuIFVwZGF0ZWQgb24gMjAyMi0wOC0xOS5cbiAqL1xuY29uc3QgUmVkaXNDbG91ZENBID0gYC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxuTUlJRFR6Q0NBamVnQXdJQkFnSUpBS1NWcGlEc3dMY3dNQTBHQ1NxR1NJYjNEUUVCQlFVQU1ENHhGakFVQmdOVlxuQkFvTURVZGhjbUZ1ZEdsaElFUmhkR0V4SkRBaUJnTlZCQU1NRzFOVFRDQkRaWEowYVdacFkyRjBhVzl1SUVGMVxuZEdodmNtbDBlVEFlRncweE16RXdNREV4TWpFME5UVmFGdzB5TXpBNU1qa3hNakUwTlRWYU1ENHhGakFVQmdOVlxuQkFvTURVZGhjbUZ1ZEdsaElFUmhkR0V4SkRBaUJnTlZCQU1NRzFOVFRDQkRaWEowYVdacFkyRjBhVzl1SUVGMVxuZEdodmNtbDBlVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFMWnFraC9EY3pXUFxuSm54bkhMUTdRTDBUNEI0Q0RLV0JLQ2Npc3JpR2JBNlplUFdWTm80aGZLUUM2SnJ6ZlIrMDgxTmVENlZjV1Vpelxucm1kK2p0UGhJWTRjK1dWUVltNVBLYU42RFQxaW1ZZHhRdzdhcU81ajJLVUNFaC9jem5wTHhlU0hvVHhsUjM0RVxuUXdGMjhXbDNlZzJ2YzVjdDhMalUzZW96V1ZrM2diN2FseDltU0EyU2dtdVg1bEVRYXdsKytyU2pzQlN0ZW1ZMlxuQkR3T3BBTVhJcmRFeVAvY1ZuOG1rdmkvQkRzNU01RyswOWowZ2ZoeUN6UldNUTdIbjcxdTFlb2xSeHdWeGdpM1xuVE1uKy92VGFGU3F4S2pnY2s2enVBWWpCUlBhSGU3cUx4SE5yMVNvL01jOW5QeSszd0hlYkZ3YkljblVvandicFxuNG5jdGtXYmpiMmNDQXdFQUFhTlFNRTR3SFFZRFZSME9CQllFRlAxd2h0Y3J5ZG1XM1pKZXVTb0taSUtqemUzd1xuTUI4R0ExVWRJd1FZTUJhQUZQMXdodGNyeWRtVzNaSmV1U29LWklLanplM3dNQXdHQTFVZEV3UUZNQU1CQWY4d1xuRFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUcyZXJYaHdSQWE3K1pPQnMwQjZYNTdId3lkMVI0a2ZtWGNzMHJ0YVxubGJQcHZnVUxTaUIrVENiZjNFYmhKbkhHeXZkQ1kxdHZsZmZMamRBN0hKMFBDT24rWVlMQkEwcFRVL2R5dnJONlxuU3U4TnVTNXl1Ym50OW1iMTNuREdZbzFybnQwWVJmeE4rOERNM2ZYSVZyMDM4QTMwVWxQWDJPdTFFeEZKVDBNWlxudUZLWTZadkxkSTYvMWNiZ21ndU1sQWhNK0RoS3lWNlNyNTY5OUxNM3pxZUk4MTZwWm1sUkVFVFlrR3I5MXE3a1xuQnBYSnUvZHRIYUd4ZzFaR3U2dy9QQ3NZR1VjRUNXRU5ZRDRWUVBkOE4zMkpqT2Z1NnZFZ29FQXdmUFArM29HcFxuWjRtM2V3QUNjV09BZW5xZmxiK2NRWUM0UHNGN3FiWERtUmFXcmJLbnRPbFozbjA9XG4tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXG4tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cbk1JSUdNVENDQkJtZ0F3SUJBZ0lDRUFBd0RRWUpLb1pJaHZjTkFRRUxCUUF3YWpFTE1Ba0dBMVVFQmhNQ1ZWTXhcbkN6QUpCZ05WQkFnTUFrTkJNUXN3Q1FZRFZRUUhEQUpEUVRFU01CQUdBMVVFQ2d3SlVtVmthWE5NWVdKek1TMHdcbkt3WURWUVFERENSU1pXUnBjMHhoWW5NZ1VtOXZkQ0JEWlhKMGFXWnBZMkYwWlNCQmRYUm9iM0pwZEhrd0hoY05cbk1UZ3dNakkxTVRVek56TTNXaGNOTWpnd01qSXpNVFV6TnpNM1dqQmZNUXN3Q1FZRFZRUUdFd0pWVXpFTE1Ba0dcbkExVUVDQXdDUTBFeEVqQVFCZ05WQkFvTUNWSmxaR2x6VEdGaWN6RXZNQzBHQTFVRUF3d21Va05RSUVsdWRHVnlcbmJXVmthV0YwWlNCRFpYSjBhV1pwWTJGMFpTQkJkWFJvYjNKcGRIa3dnZ0lpTUEwR0NTcUdTSWIzRFFFQkFRVUFcbkE0SUNEd0F3Z2dJS0FvSUNBUURmOWRxYnhjOEJxN0N0cTlyV2N4ckdOS0tIaXZxTEFGcFBxMDJ5TFB4NmZzT3ZcblRxN0dzRENoQVlCQmM0djdZMkFwOVJENVZzM2RJaEVBTmNub2xmMjdRd3JHOVJNbm52ems4cEN2cDFvNnpTVTRcblZ1T0UxVzY2L08xLzdlMnJWeHlyblRjUDdVZ0s0M3pOSVh1Nyt0aUFxV3NPOTJ1U251TW9HUEdwZWFVbTFqeW1cbmhqV0t0a0F3REZTcXZIWStYTDVxRFZCRWplVWUrV0hrWVVnNDBjQVhqdXNBcWdtMmhadDI5YzJ3blZyeFcyNVdcblAwbWVObHpIR0ZkQTJBQzV6NTRpUmlxajU3ZFRmQlRrSG9CY3pReGN5dzZoaHp4WlE0ZTVJNXpPS2pYWEVoWk5cbnIwdEEzWUMxNENUYWJLUnVzL0ptWmlleVp6UmdFeTJvdGk2NHRtTFlUcVNsQUQ3OHBSTDQwVk5vYVNZZXRYTHdcbmhoTnNYQ0hnV2FZNmQ1YkxPYy9hSVFNQVY1b0x2WlFLdnVYQUYxSURtaFBBK2JaYnBXaXBwMHphZ2YxUDFIM3NcblV6c01kbjJLTTBlanpnb3RidE5sajVUY3JWd3BtdkUza3R2VUF1QStoaTNGa1Z4MVVTKzJHc3A1eDRZT3pKN3VcblAxV1BrNlNoRjBKZ25KSDJJTGRqNmt0dFRXd0Z6SDE3a2VTRklDV0RmSC8ra00razdZMXYzRVhNUVhFN3kwVDlcbk1qdkpza3o2ZC9uditzUWhZMDR4dDY0eEZNR1RuWmpsSk16ZlFOaTd6V0ZMVFpuREQwbFBvd3E3bDNZaVBvVFRcbnQ1WGt5ODNsdTBLWnNaQm8wV2xXYURHMDBnTFZkdFJnVmJjdVNXeHBpNUJkTGIxa1JhYjY2SnB0V2p4d1hRSURcbkFRQUJvNEhyTUlIb01Eb0dBMVVkSHdRek1ERXdMNkF0b0N1R0tXaDBkSEJ6T2k4dmNtd3RZMkV0YzJWeWRtVnlcbkxuSmxaR2x6YkdGaWN5NWpiMjB2ZGpFdlkzSnNNRVlHQ0NzR0FRVUZCd0VCQkRvd09EQTJCZ2dyQmdFRkJRY3dcbkFZWXFhSFIwY0hNNkx5OXliQzFqWVMxelpYSjJaWEl1Y21Wa2FYTnNZV0p6TG1OdmJTOTJNUzl2WTNOd01CMEdcbkExVWREZ1FXQkJRSGFyNU9LdlFVcFAycVd0Nm1ja3pUb2VDT0hEQWZCZ05WSFNNRUdEQVdnQlFpNDJ3SDZoTTRcbkwyc3VqRXZMTTAvdThsUlhUekFTQmdOVkhSTUJBZjhFQ0RBR0FRSC9BZ0VBTUE0R0ExVWREd0VCL3dRRUF3SUJcbmhqQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFpckVuL2lUc0FLeWhkK3B1MlczWjVOakNrbzROUFUwRVlVYnJcbkFQNytQT0sycnpqSXJKTzNuRllRL0xMdUM3S0NYRysycXdhbjJTQU9HbXFXc3QxM1krV0hwNDRLYWUwa2FDaFdcbnZjWUxYWFNvR1FHQzhRdUZTTlVkYWVnM1JiTURZRlQwNGRPa3F1ZmVXVmNjb0hWeHlUU2c5ZUQ4TFp1SG41andcbjdRRExpRUVDQm1JSkhrNUVlbzJUQVpyeDRZeDZ1ZlNVWDVIZVZqbEF6cXd0QXFkdDk5dUNKL0VMOGJncFdiZStcblhvU3B2VXYwU0VDMUkxZENBaENLQXZSbElPQTZWQmNtemc1QW0xMkt6a3FUdWwxMi9WRUZJZ3pxdTBaeTJKYmNcbkFVUHJZVnUvK3RPR1hRYWlqeTdZZ3dIOFA4bjNzN1plVWExVkFCSkhjeHJ4WWR1RERKQkxaaStNamhlVURhWjFcbmpRUkhZZXZJMnRscWVTQnFkUEtHNHpCWTVsUzBHaUFsbXV6ZTVvRU50MFAzWGJvSG9aUEhpcWNLM1ZFQ2dUVmhcbi9Ca0pjdXVkRVRTSmNaRG1ROFlmb0tmQnpSUU5nMnN2L2h3dlV2NzNTczUxU2NvOEdFdDJsRDh1RWRpYjFRNnpcbnpEVDVsWEpvd1N6T0Q1WkE5T0dEam5TUkwrMnJpTnRLV0tFcXZ0RUczVkJKb0J6dTlHb3hiQWM3d0laTHhtbGlcbmlGNWEvWmY1WCtVWEQzczRUTW15NkM0UVpKcEFBMmVnc1NRQ25yYVdPMlVMaGg3aVhNeXNTa0YvbnpWZlpuNDNcbmlxcGFCOCsrOWEzN2hXcTE0Wm1PdjBUSklEei8vYjIrS0M0VkZYV1E1VzVRQzZ3aHNqVCtPbEc0cDVaWUcwam9cbjYxNnB4cW89XG4tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXG4tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cbk1JSUZ1akNDQTZLZ0F3SUJBZ0lKQUoxYVRUMWx1MlNjTUEwR0NTcUdTSWIzRFFFQkN3VUFNR294Q3pBSkJnTlZcbkJBWVRBbFZUTVFzd0NRWURWUVFJREFKRFFURUxNQWtHQTFVRUJ3d0NRMEV4RWpBUUJnTlZCQW9NQ1ZKbFpHbHpcblRHRmljekV0TUNzR0ExVUVBd3drVW1Wa2FYTk1ZV0p6SUZKdmIzUWdRMlZ5ZEdsbWFXTmhkR1VnUVhWMGFHOXlcbmFYUjVNQjRYRFRFNE1ESXlOVEUxTWpBME1sb1hEVE00TURJeU1ERTFNakEwTWxvd2FqRUxNQWtHQTFVRUJoTUNcblZWTXhDekFKQmdOVkJBZ01Ba05CTVFzd0NRWURWUVFIREFKRFFURVNNQkFHQTFVRUNnd0pVbVZrYVhOTVlXSnpcbk1TMHdLd1lEVlFRRERDUlNaV1JwYzB4aFluTWdVbTl2ZENCRFpYSjBhV1pwWTJGMFpTQkJkWFJvYjNKcGRIa3dcbmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURMRWpYeTdZcmJONVdhYXU1Y2Q2ZzFcbkc1QzJ0TW1lVHBaMGR1RkFQeE5VNG9FM1JIUzVnR2lvazM0NmZVWHVVeGJaNlFrdXplTjIvMlorUm1SY0poUVlcbkRtMFpnZEc0eDU5QW4xVEpmbnpLS29XajhJU21vSFMvVEdOQmRGelhWN0ZZTkxCdXFab3VxZVBJNlJlQzZRaGxcbnBwNDVodVYzMlEzYTZJRHJydng3V281WmN6RVFlRk5iQ2VDT1FZTkRkVG1DeUVrSHFjMkFHbzhlb0lsU1R1dFRcblVMT0M3UjVnekpWVFMwZTFoZXNRN2ptcUhqYk8rVlFTMU5BTDQvNUs2Y3VURXFVbCtYaFZoUGRMV0JYSlE1YWdcbjU0cWhYNHYrb2pMemVVMVIvVmM2TmpNdlZ0cHRXWTZKaWhwZ3BscHJOMFloMjU1NmV3Y1hNZXR1cmNLZ1hmR0pcbnhlWXpzanpYZXJFanJWb2NYNVY4Qk5yZzY0TmxpZnpUTUtOT092NGZWWnN6cTFTSUhSOEY5Uk9ycWlPZGg4aUNcbkpwVWJMcFhIOWhXQ1NFTzZWUk1CMnhKb0t1M2NnbDYza0YzMHM3N3g3d0xGTUVIaXdzUVJLeG9vRTFVaGdTOUtcbjJzTzRUbFExZVdVdkZ2SFNUVkRRRGxHUTZ6dTRxamJPcGIzUThiUXdvSythaTJhbGtYVlI0THR4ZTlRbGdZSzNcblN0c25QaHJ1elpHQTB3YlhkcHcwYm5NK1lkbEVtNWZmU1RwTklmZ0hlYWE3RHRiODAxRnRBNzFabEg3QTZUYUlcblNJUXVVU1Q5RUttdjd4ckp5eDBXMXBHb1BPTHc1VDAyOWFUam5JQ1NMZHRWOWJMd3lzckxoSVlHNWJuUHE3OEJcbmNTK2paSEZHekQ3UFVWR1FEMDFuT1FJREFRQUJvMk13WVRBZEJnTlZIUTRFRmdRVUl1TnNCK29UT0M5ckxveExcbnl6TlA3dkpVVjA4d0h3WURWUjBqQkJnd0ZvQVVJdU5zQitvVE9DOXJMb3hMeXpOUDd2SlVWMDh3RHdZRFZSMFRcbkFRSC9CQVV3QXdFQi96QU9CZ05WSFE4QkFmOEVCQU1DQVlZd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFIZmdcbno1cE1OVUFLZE16SzFhUzFFRGRLOXlLejRxaWNJTHo1Y3pTTGoxbUM3SEtEUnk4Y1ZBRFV4RUlDaXMrK0NzQ3VcbnJZT3Z5Q1ZlcmdIUUxSRWN4UHE0cmM1TnExdWo2SjY2NDlORWVoNFdhek9Pakw0WmZRMWpWem5NYkd5K2ZKbTNcbjNIb2VsdjZqV1JHOWlxZUpaamE3LzFzNllDNmJXeW1JL09ZMWU0d1VLZU5IQW8rVmdlcjdNbEhWK1J1YWJhWCtcbmhTSjhiSkFNNTlOQ003QWdNVFFwSkNuY3JjZExlY2VZbmlHeTVRL3F0MmI1bUprUVZrSWR5NFRQR0dCK0FYREpcbkQwcTNJL0pEUmtEVUZORmRlVzBqczdmSGRzdkNSN08zdEp5NXpJZ0VWL28vQkNrbUpWdHV3UFlPcncveU9sS2pcblRZL1U3QVRBeDlWRkY2L3ZZRU9NWVNtclpsRlgrOThMNm5KdHdEcWZMQjVWVGx0cVo0SC9LQnhHRTNJUlN0OWxcbkZYeTQwVStMblh6aGhXKzdWQkF2eVlYOEdFWGhIa0tVOEdxazF4aXRycWZCWFk3NHhLZ3lVU1RvbEZTZkZWZ2pcbm1jTS9YNEs0NWJrYStxcGtqN0tmdi84RDRqNmFaZWt3aE4ybHk2aGhDMVNtUThxak1qcEcvbXJXT1NTSFpGbWZcbnlidTlpRDJBWUhlSU9rc2hJbDZ4WUlhKytRLzAwL3ZzNDZJekFiUXlyaU9pMFh4bFNNTVZ0UHgwUTNpc3Aramlcbm44TXE5ZU91eFlPRVE0b2Y4dHdVa1VEZDUyOGl3R3RFZHdmMFEwMVV5VDg0UzYyTjhBeVNsMVpCS1hKejZXNEZcblVoV2ZhL0hRWU9BUERkRWpOZ25Wd0xJMjNiOHQwVG96eUNXdzdxOGhcbi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cblxuLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXG5NSUlFanpDQ0EzZWdBd0lCQWdJUWU1NUIvQUxDS0pEWnRkTlQ4a0Q2aFRBTkJna3Foa2lHOXcwQkFRc0ZBREJNXG5NU0F3SGdZRFZRUUxFeGRIYkc5aVlXeFRhV2R1SUZKdmIzUWdRMEVnTFNCU016RVRNQkVHQTFVRUNoTUtSMnh2XG5ZbUZzVTJsbmJqRVRNQkVHQTFVRUF4TUtSMnh2WW1Gc1UybG5iakFlRncweU1qQXhNall4TWpBd01EQmFGdzB5XG5OVEF4TWpZd01EQXdNREJhTUZneEN6QUpCZ05WQkFZVEFrSkZNUmt3RndZRFZRUUtFeEJIYkc5aVlXeFRhV2R1XG5JRzUyTFhOaE1TNHdMQVlEVlFRREV5VkhiRzlpWVd4VGFXZHVJRUYwYkdGeklGSXpJRTlXSUZSTVV5QkRRU0F5XG5NREl5SUZFeU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBbUdtZzFMVzliN0xmXG44ekREODN5QkRURWt0K0ZPeEtKWnFGNHZlV2M1S1pzUWo5SGZuVVMyZTVuai9FK0pJbWxHUHNRdW9pb3NMdVhEXG5CVkJOQU1jVUZhMTFidUZNR01lRU13aVRtQ1hvWFJyWFFtSDBxanBPZktnWWM1Z0hHM0JzUkdhUnJmN1ZSNGVnXG5vZk5NRzl3VUJ3NC9nL1RUNytiUUpkQTROZkU3WTRkNWdFcnlaaUJHQi9zd2FYNkpwLzhNRjRUZ1VtT1dtYWxLXG5kWkNLeWI0c1BHUUZSVHRFbGs2N0Y3dlUrd2RHY3JjT3gxdERjSUIwbmNqTFBNbmFGaWNhZ2wrZGFXR3NLcVRoXG5jb3VuUWI2UUp0WUhhOTFLdkNmS1dvY014UTdPSWJCNVVBUkxQbUM0Q0oxL2Y4WUZtMzVlYmZ6QWVVTFlkR1h1XG5qRTlDTG9yME93SURBUUFCbzRJQlh6Q0NBVnN3RGdZRFZSMFBBUUgvQkFRREFnR0dNQjBHQTFVZEpRUVdNQlFHXG5DQ3NHQVFVRkJ3TUJCZ2dyQmdFRkJRY0RBakFTQmdOVkhSTUJBZjhFQ0RBR0FRSC9BZ0VBTUIwR0ExVWREZ1FXXG5CQlNINVpxN2E3Qi90OTVHZkpXa0RCcEE4SEhxZGpBZkJnTlZIU01FR0RBV2dCU1A4RXQvcUM1RkpLNU5VUHBqXG5tb3ZlNHQwYnZEQjdCZ2dyQmdFRkJRY0JBUVJ2TUcwd0xnWUlLd1lCQlFVSE1BR0dJbWgwZEhBNkx5OXZZM053XG5NaTVuYkc5aVlXeHphV2R1TG1OdmJTOXliMjkwY2pNd093WUlLd1lCQlFVSE1BS0dMMmgwZEhBNkx5OXpaV04xXG5jbVV1WjJ4dlltRnNjMmxuYmk1amIyMHZZMkZqWlhKMEwzSnZiM1F0Y2pNdVkzSjBNRFlHQTFVZEh3UXZNQzB3XG5LNkFwb0NlR0pXaDBkSEE2THk5amNtd3VaMnh2WW1Gc2MybG5iaTVqYjIwdmNtOXZkQzF5TXk1amNtd3dJUVlEXG5WUjBnQkJvd0dEQUlCZ1puZ1F3QkFnSXdEQVlLS3dZQkJBR2dNZ29CQWpBTkJna3Foa2lHOXcwQkFRc0ZBQU9DXG5BUUVBS1JpYzkvZitubWhRVS93ejA0QVBaTGpnRzVPZ3N1VU95VUVaaktWaE5HRHd4R1R2S2h5WEdHQU1XMkIvXG4zYlJpK2FFbHBYd294dTNwTDZma0VsYlgzQjBCZVM1TG9EdHhreWlWRUJNWjhtK3NYYm9jd2xQeXhyUGJYNm1ZXG4wclZJdm51VWVCSDhYMEw1SXdmcE5WdktuQklpbFRiY2ViZkh5WGtQZXpHd3o3RTF5aFVVTGpKRm0yYnQwU2RYXG55KzRYL1dlaWlZSXYrZlRWZ1paZ2wrLzJNS0lzdS9xZEJKYzNmM1R2SjhueitFYXgxemdabXd3K1JTUVdlT2ozXG4xNUl3Nlo1RlgrTnd6WS9BYis5UG9zUjVVb3NTZXErOUhodGF4WnR0WEcxblZoK2F2WVBHWWRkV21pTVQ5MEo1XG5aZ0tuTy9GeDJoQmdUeGhPVE1ZYUQzMTJrZz09XG4tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXG5cbi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxuTUlJRFh6Q0NBa2VnQXdJQkFnSUxCQUFBQUFBQklWaFRDS0l3RFFZSktvWklodmNOQVFFTEJRQXdUREVnTUI0R1xuQTFVRUN4TVhSMnh2WW1Gc1UybG5iaUJTYjI5MElFTkJJQzBnVWpNeEV6QVJCZ05WQkFvVENrZHNiMkpoYkZOcFxuWjI0eEV6QVJCZ05WQkFNVENrZHNiMkpoYkZOcFoyNHdIaGNOTURrd016RTRNVEF3TURBd1doY05Namt3TXpFNFxuTVRBd01EQXdXakJNTVNBd0hnWURWUVFMRXhkSGJHOWlZV3hUYVdkdUlGSnZiM1FnUTBFZ0xTQlNNekVUTUJFR1xuQTFVRUNoTUtSMnh2WW1Gc1UybG5iakVUTUJFR0ExVUVBeE1LUjJ4dlltRnNVMmxuYmpDQ0FTSXdEUVlKS29aSVxuaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFNd2xkcEI1Qm5naUZ2WEFnN2FFeWlpZS9RVjJFY1d0aUhMOFxuUmdKRHg3S0tuUVJmSk1zdVMrRmdna2JoVXFzTWdVZHdiTjFrMGV2MUxLTVBnajBNSzY2WDE3WVVoaEI1dXpzVFxuZ0hlTUNPRkowbXBpTHg5ZStwWm8zNGtubFRpZkJ0Yyt5Y3NtV1ExejNyREk2U1lPZ3hYRzcxdUwwZ1JneWttbVxuS1BacE8vYkx5Q2lSNVoyS1lWYzNySFFVM0hUZ091NXlMeTZjKzlDN3YvVTlBT0VHTStpQ0s2NVRwam9XYzR6ZFxuUVE0Z09zQzBwNkhwc2srUUxqSmc2VmZMdVFTU2FHamxPQ1pnZGJLZmQvK1JGTyt1SUVuOHJVQVZTTkVDTVdFWlxuWHJpWDc2MTN0MlNhZXI5ZndSUHZtMkw3RFd6Z1ZHa1dxUVBhYnVtRGszRjJ4bW1GZ2hjQ0F3RUFBYU5DTUVBd1xuRGdZRFZSMFBBUUgvQkFRREFnRUdNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGSS93UzMrb1xuTGtVa3JrMVErbU9haTk3aTNSdThNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUJMUU52QVVLcit5QXp2OTVaVVxuUlVtN2xnQUpRYXl6RTRhR0tBY3p5bXZtZExtNkFDMnVwQXJUOWZIeEQ0cS9jMmRLZzhkRWUzamdyMjVzYndNcFxuampNNVJjT081TGxYYktyOEVwYnNVOFl0NUNSc3VaUmorOXhUYUdkV1BvTzR6elVodzhsby9zN2F3bE9xekpDS1xuNmZCZFJveVYzWHBZS0JvdkhkN05BRGRCaisxRWJkZFRLSmQrODJjRUhoWFhpcGEwMDk1TUo2Uk1HM056ZHZRWFxubWNJZmVnN2pMUWl0Q2h3cy96eXJWUTRQa1g0MjY4TlhTYjdoTGkxOFlJdkRRVkVUSTUzTzl6SnJsQUdvbWVjc1xuTXg4Nk95WFNoa0RPT3l5R2VNbGhMeFM2N3R0VmI5K0U3Z1VKVGIwbzJITE8wMkpRWlI3cmtwZURNZG16dGNwSFxuV0Q5ZlxuLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLWA7XG5jb25zdCBUTFNQcm9maWxlcyA9IHtcbiAgICBSZWRpc0Nsb3VkRml4ZWQ6IHsgY2E6IFJlZGlzQ2xvdWRDQSB9LFxuICAgIFJlZGlzQ2xvdWRGbGV4aWJsZTogeyBjYTogUmVkaXNDbG91ZENBIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gVExTUHJvZmlsZXM7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/constants/TLSProfiles.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/errors/ClusterAllFailedError.js":
/*!********************************************************************!*\
!*** ./node_modules/ioredis/built/errors/ClusterAllFailedError.js ***!
\********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst redis_errors_1 = __webpack_require__(/*! redis-errors */ \"(rsc)/./node_modules/redis-errors/index.js\");\nclass ClusterAllFailedError extends redis_errors_1.RedisError {\n constructor(message, lastNodeError) {\n super(message);\n this.lastNodeError = lastNodeError;\n Error.captureStackTrace(this, this.constructor);\n }\n get name() {\n return this.constructor.name;\n }\n}\nexports[\"default\"] = ClusterAllFailedError;\nClusterAllFailedError.defaultMessage = \"Failed to refresh slots cache.\";\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9lcnJvcnMvQ2x1c3RlckFsbEZhaWxlZEVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHVCQUF1QixtQkFBTyxDQUFDLGdFQUFjO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9lcnJvcnMvQ2x1c3RlckFsbEZhaWxlZEVycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcmVkaXNfZXJyb3JzXzEgPSByZXF1aXJlKFwicmVkaXMtZXJyb3JzXCIpO1xuY2xhc3MgQ2x1c3RlckFsbEZhaWxlZEVycm9yIGV4dGVuZHMgcmVkaXNfZXJyb3JzXzEuUmVkaXNFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgbGFzdE5vZGVFcnJvcikge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5sYXN0Tm9kZUVycm9yID0gbGFzdE5vZGVFcnJvcjtcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IENsdXN0ZXJBbGxGYWlsZWRFcnJvcjtcbkNsdXN0ZXJBbGxGYWlsZWRFcnJvci5kZWZhdWx0TWVzc2FnZSA9IFwiRmFpbGVkIHRvIHJlZnJlc2ggc2xvdHMgY2FjaGUuXCI7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/errors/ClusterAllFailedError.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/errors/MaxRetriesPerRequestError.js":
/*!************************************************************************!*\
!*** ./node_modules/ioredis/built/errors/MaxRetriesPerRequestError.js ***!
\************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst redis_errors_1 = __webpack_require__(/*! redis-errors */ \"(rsc)/./node_modules/redis-errors/index.js\");\nclass MaxRetriesPerRequestError extends redis_errors_1.AbortError {\n constructor(maxRetriesPerRequest) {\n const message = `Reached the max retries per request limit (which is ${maxRetriesPerRequest}). Refer to \"maxRetriesPerRequest\" option for details.`;\n super(message);\n Error.captureStackTrace(this, this.constructor);\n }\n get name() {\n return this.constructor.name;\n }\n}\nexports[\"default\"] = MaxRetriesPerRequestError;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9lcnJvcnMvTWF4UmV0cmllc1BlclJlcXVlc3RFcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCx1QkFBdUIsbUJBQU8sQ0FBQyxnRUFBYztBQUM3QztBQUNBO0FBQ0EsK0VBQStFLHFCQUFxQjtBQUNwRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L2Vycm9ycy9NYXhSZXRyaWVzUGVyUmVxdWVzdEVycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcmVkaXNfZXJyb3JzXzEgPSByZXF1aXJlKFwicmVkaXMtZXJyb3JzXCIpO1xuY2xhc3MgTWF4UmV0cmllc1BlclJlcXVlc3RFcnJvciBleHRlbmRzIHJlZGlzX2Vycm9yc18xLkFib3J0RXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1heFJldHJpZXNQZXJSZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgUmVhY2hlZCB0aGUgbWF4IHJldHJpZXMgcGVyIHJlcXVlc3QgbGltaXQgKHdoaWNoIGlzICR7bWF4UmV0cmllc1BlclJlcXVlc3R9KS4gUmVmZXIgdG8gXCJtYXhSZXRyaWVzUGVyUmVxdWVzdFwiIG9wdGlvbiBmb3IgZGV0YWlscy5gO1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IE1heFJldHJpZXNQZXJSZXF1ZXN0RXJyb3I7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/errors/MaxRetriesPerRequestError.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/errors/index.js":
/*!****************************************************!*\
!*** ./node_modules/ioredis/built/errors/index.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.MaxRetriesPerRequestError = void 0;\nconst MaxRetriesPerRequestError_1 = __webpack_require__(/*! ./MaxRetriesPerRequestError */ \"(rsc)/./node_modules/ioredis/built/errors/MaxRetriesPerRequestError.js\");\nexports.MaxRetriesPerRequestError = MaxRetriesPerRequestError_1.default;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9lcnJvcnMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsaUNBQWlDO0FBQ2pDLG9DQUFvQyxtQkFBTyxDQUFDLDJHQUE2QjtBQUN6RSxpQ0FBaUMiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvZXJyb3JzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NYXhSZXRyaWVzUGVyUmVxdWVzdEVycm9yID0gdm9pZCAwO1xuY29uc3QgTWF4UmV0cmllc1BlclJlcXVlc3RFcnJvcl8xID0gcmVxdWlyZShcIi4vTWF4UmV0cmllc1BlclJlcXVlc3RFcnJvclwiKTtcbmV4cG9ydHMuTWF4UmV0cmllc1BlclJlcXVlc3RFcnJvciA9IE1heFJldHJpZXNQZXJSZXF1ZXN0RXJyb3JfMS5kZWZhdWx0O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/errors/index.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/index.js":
/*!*********************************************!*\
!*** ./node_modules/ioredis/built/index.js ***!
\*********************************************/
/***/ ((module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.print = exports.ReplyError = exports.SentinelIterator = exports.SentinelConnector = exports.AbstractConnector = exports.Pipeline = exports.ScanStream = exports.Command = exports.Cluster = exports.Redis = exports[\"default\"] = void 0;\nexports = module.exports = __webpack_require__(/*! ./Redis */ \"(rsc)/./node_modules/ioredis/built/Redis.js\")[\"default\"];\nvar Redis_1 = __webpack_require__(/*! ./Redis */ \"(rsc)/./node_modules/ioredis/built/Redis.js\");\nObject.defineProperty(exports, \"default\", ({ enumerable: true, get: function () { return Redis_1.default; } }));\nvar Redis_2 = __webpack_require__(/*! ./Redis */ \"(rsc)/./node_modules/ioredis/built/Redis.js\");\nObject.defineProperty(exports, \"Redis\", ({ enumerable: true, get: function () { return Redis_2.default; } }));\nvar cluster_1 = __webpack_require__(/*! ./cluster */ \"(rsc)/./node_modules/ioredis/built/cluster/index.js\");\nObject.defineProperty(exports, \"Cluster\", ({ enumerable: true, get: function () { return cluster_1.default; } }));\n/**\n * @ignore\n */\nvar Command_1 = __webpack_require__(/*! ./Command */ \"(rsc)/./node_modules/ioredis/built/Command.js\");\nObject.defineProperty(exports, \"Command\", ({ enumerable: true, get: function () { return Command_1.default; } }));\n/**\n * @ignore\n */\nvar ScanStream_1 = __webpack_require__(/*! ./ScanStream */ \"(rsc)/./node_modules/ioredis/built/ScanStream.js\");\nObject.defineProperty(exports, \"ScanStream\", ({ enumerable: true, get: function () { return ScanStream_1.default; } }));\n/**\n * @ignore\n */\nvar Pipeline_1 = __webpack_require__(/*! ./Pipeline */ \"(rsc)/./node_modules/ioredis/built/Pipeline.js\");\nObject.defineProperty(exports, \"Pipeline\", ({ enumerable: true, get: function () { return Pipeline_1.default; } }));\n/**\n * @ignore\n */\nvar AbstractConnector_1 = __webpack_require__(/*! ./connectors/AbstractConnector */ \"(rsc)/./node_modules/ioredis/built/connectors/AbstractConnector.js\");\nObject.defineProperty(exports, \"AbstractConnector\", ({ enumerable: true, get: function () { return AbstractConnector_1.default; } }));\n/**\n * @ignore\n */\nvar SentinelConnector_1 = __webpack_require__(/*! ./connectors/SentinelConnector */ \"(rsc)/./node_modules/ioredis/built/connectors/SentinelConnector/index.js\");\nObject.defineProperty(exports, \"SentinelConnector\", ({ enumerable: true, get: function () { return SentinelConnector_1.default; } }));\nObject.defineProperty(exports, \"SentinelIterator\", ({ enumerable: true, get: function () { return SentinelConnector_1.SentinelIterator; } }));\n// No TS typings\nexports.ReplyError = __webpack_require__(/*! redis-errors */ \"(rsc)/./node_modules/redis-errors/index.js\").ReplyError;\n/**\n * @ignore\n */\nObject.defineProperty(exports, \"Promise\", ({\n get() {\n console.warn(\"ioredis v5 does not support plugging third-party Promise library anymore. Native Promise will be used.\");\n return Promise;\n },\n set(_lib) {\n console.warn(\"ioredis v5 does not support plugging third-party Promise library anymore. Native Promise will be used.\");\n },\n}));\n/**\n * @ignore\n */\nfunction print(err, reply) {\n if (err) {\n console.log(\"Error: \" + err);\n }\n else {\n console.log(\"Reply: \" + reply);\n }\n}\nexports.print = print;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxhQUFhLEdBQUcsa0JBQWtCLEdBQUcsd0JBQXdCLEdBQUcseUJBQXlCLEdBQUcseUJBQXlCLEdBQUcsZ0JBQWdCLEdBQUcsa0JBQWtCLEdBQUcsZUFBZSxHQUFHLGVBQWUsR0FBRyxhQUFhLEdBQUcsa0JBQWU7QUFDbk8sVUFBVSw2R0FBMkM7QUFDckQsY0FBYyxtQkFBTyxDQUFDLDREQUFTO0FBQy9CLDJDQUEwQyxFQUFFLHFDQUFxQywyQkFBMkIsRUFBQztBQUM3RyxjQUFjLG1CQUFPLENBQUMsNERBQVM7QUFDL0IseUNBQXdDLEVBQUUscUNBQXFDLDJCQUEyQixFQUFDO0FBQzNHLGdCQUFnQixtQkFBTyxDQUFDLHNFQUFXO0FBQ25DLDJDQUEwQyxFQUFFLHFDQUFxQyw2QkFBNkIsRUFBQztBQUMvRztBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxnRUFBVztBQUNuQywyQ0FBMEMsRUFBRSxxQ0FBcUMsNkJBQTZCLEVBQUM7QUFDL0c7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsc0VBQWM7QUFDekMsOENBQTZDLEVBQUUscUNBQXFDLGdDQUFnQyxFQUFDO0FBQ3JIO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLGtFQUFZO0FBQ3JDLDRDQUEyQyxFQUFFLHFDQUFxQyw4QkFBOEIsRUFBQztBQUNqSDtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsbUJBQU8sQ0FBQywwR0FBZ0M7QUFDbEUscURBQW9ELEVBQUUscUNBQXFDLHVDQUF1QyxFQUFDO0FBQ25JO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixtQkFBTyxDQUFDLGdIQUFnQztBQUNsRSxxREFBb0QsRUFBRSxxQ0FBcUMsdUNBQXVDLEVBQUM7QUFDbkksb0RBQW1ELEVBQUUscUNBQXFDLGdEQUFnRCxFQUFDO0FBQzNJO0FBQ0EscUhBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBLDJDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLEVBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucHJpbnQgPSBleHBvcnRzLlJlcGx5RXJyb3IgPSBleHBvcnRzLlNlbnRpbmVsSXRlcmF0b3IgPSBleHBvcnRzLlNlbnRpbmVsQ29ubmVjdG9yID0gZXhwb3J0cy5BYnN0cmFjdENvbm5lY3RvciA9IGV4cG9ydHMuUGlwZWxpbmUgPSBleHBvcnRzLlNjYW5TdHJlYW0gPSBleHBvcnRzLkNvbW1hbmQgPSBleHBvcnRzLkNsdXN0ZXIgPSBleHBvcnRzLlJlZGlzID0gZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vUmVkaXNcIikuZGVmYXVsdDtcbnZhciBSZWRpc18xID0gcmVxdWlyZShcIi4vUmVkaXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBSZWRpc18xLmRlZmF1bHQ7IH0gfSk7XG52YXIgUmVkaXNfMiA9IHJlcXVpcmUoXCIuL1JlZGlzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVkaXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFJlZGlzXzIuZGVmYXVsdDsgfSB9KTtcbnZhciBjbHVzdGVyXzEgPSByZXF1aXJlKFwiLi9jbHVzdGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2x1c3RlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2x1c3Rlcl8xLmRlZmF1bHQ7IH0gfSk7XG4vKipcbiAqIEBpZ25vcmVcbiAqL1xudmFyIENvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL0NvbW1hbmRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb21tYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBDb21tYW5kXzEuZGVmYXVsdDsgfSB9KTtcbi8qKlxuICogQGlnbm9yZVxuICovXG52YXIgU2NhblN0cmVhbV8xID0gcmVxdWlyZShcIi4vU2NhblN0cmVhbVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNjYW5TdHJlYW1cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNjYW5TdHJlYW1fMS5kZWZhdWx0OyB9IH0pO1xuLyoqXG4gKiBAaWdub3JlXG4gKi9cbnZhciBQaXBlbGluZV8xID0gcmVxdWlyZShcIi4vUGlwZWxpbmVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQaXBlbGluZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUGlwZWxpbmVfMS5kZWZhdWx0OyB9IH0pO1xuLyoqXG4gKiBAaWdub3JlXG4gKi9cbnZhciBBYnN0cmFjdENvbm5lY3Rvcl8xID0gcmVxdWlyZShcIi4vY29ubmVjdG9ycy9BYnN0cmFjdENvbm5lY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFic3RyYWN0Q29ubmVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBYnN0cmFjdENvbm5lY3Rvcl8xLmRlZmF1bHQ7IH0gfSk7XG4vKipcbiAqIEBpZ25vcmVcbiAqL1xudmFyIFNlbnRpbmVsQ29ubmVjdG9yXzEgPSByZXF1aXJlKFwiLi9jb25uZWN0b3JzL1NlbnRpbmVsQ29ubmVjdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2VudGluZWxDb25uZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNlbnRpbmVsQ29ubmVjdG9yXzEuZGVmYXVsdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlbnRpbmVsSXRlcmF0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNlbnRpbmVsQ29ubmVjdG9yXzEuU2VudGluZWxJdGVyYXRvcjsgfSB9KTtcbi8vIE5vIFRTIHR5cGluZ3NcbmV4cG9ydHMuUmVwbHlFcnJvciA9IHJlcXVpcmUoXCJyZWRpcy1lcnJvcnNcIikuUmVwbHlFcnJvcjtcbi8qKlxuICogQGlnbm9yZVxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQcm9taXNlXCIsIHtcbiAgICBnZXQoKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcImlvcmVkaXMgdjUgZG9lcyBub3Qgc3VwcG9ydCBwbHVnZ2luZyB0aGlyZC1wYXJ0eSBQcm9taXNlIGxpYnJhcnkgYW55bW9yZS4gTmF0aXZlIFByb21pc2Ugd2lsbCBiZSB1c2VkLlwiKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2U7XG4gICAgfSxcbiAgICBzZXQoX2xpYikge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJpb3JlZGlzIHY1IGRvZXMgbm90IHN1cHBvcnQgcGx1Z2dpbmcgdGhpcmQtcGFydHkgUHJvbWlzZSBsaWJyYXJ5IGFueW1vcmUuIE5hdGl2ZSBQcm9taXNlIHdpbGwgYmUgdXNlZC5cIik7XG4gICAgfSxcbn0pO1xuLyoqXG4gKiBAaWdub3JlXG4gKi9cbmZ1bmN0aW9uIHByaW50KGVyciwgcmVwbHkpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3I6IFwiICsgZXJyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiUmVwbHk6IFwiICsgcmVwbHkpO1xuICAgIH1cbn1cbmV4cG9ydHMucHJpbnQgPSBwcmludDtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/index.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/redis/RedisOptions.js":
/*!**********************************************************!*\
!*** ./node_modules/ioredis/built/redis/RedisOptions.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.DEFAULT_REDIS_OPTIONS = void 0;\nexports.DEFAULT_REDIS_OPTIONS = {\n // Connection\n port: 6379,\n host: \"localhost\",\n family: 4,\n connectTimeout: 10000,\n disconnectTimeout: 2000,\n retryStrategy: function (times) {\n return Math.min(times * 50, 2000);\n },\n keepAlive: 0,\n noDelay: true,\n connectionName: null,\n // Sentinel\n sentinels: null,\n name: null,\n role: \"master\",\n sentinelRetryStrategy: function (times) {\n return Math.min(times * 10, 1000);\n },\n sentinelReconnectStrategy: function () {\n // This strategy only applies when sentinels are used for detecting\n // a failover, not during initial master resolution.\n // The deployment can still function when some of the sentinels are down\n // for a long period of time, so we may not want to attempt reconnection\n // very often. Therefore the default interval is fairly long (1 minute).\n return 60000;\n },\n natMap: null,\n enableTLSForSentinelMode: false,\n updateSentinels: true,\n failoverDetector: false,\n // Status\n username: null,\n password: null,\n db: 0,\n // Others\n enableOfflineQueue: true,\n enableReadyCheck: true,\n autoResubscribe: true,\n autoResendUnfulfilledCommands: true,\n lazyConnect: false,\n keyPrefix: \"\",\n reconnectOnError: null,\n readOnly: false,\n stringNumbers: false,\n maxRetriesPerRequest: 20,\n maxLoadingRetryTime: 10000,\n enableAutoPipelining: false,\n autoPipeliningIgnoredCommands: [],\n sentinelMaxConnections: 10,\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9yZWRpcy9SZWRpc09wdGlvbnMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsNkJBQTZCO0FBQzdCLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL2FsbWEvbmV4dGdlbi9OZWFoLW1haWwvbm9kZV9tb2R1bGVzL2lvcmVkaXMvYnVpbHQvcmVkaXMvUmVkaXNPcHRpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ERUZBVUxUX1JFRElTX09QVElPTlMgPSB2b2lkIDA7XG5leHBvcnRzLkRFRkFVTFRfUkVESVNfT1BUSU9OUyA9IHtcbiAgICAvLyBDb25uZWN0aW9uXG4gICAgcG9ydDogNjM3OSxcbiAgICBob3N0OiBcImxvY2FsaG9zdFwiLFxuICAgIGZhbWlseTogNCxcbiAgICBjb25uZWN0VGltZW91dDogMTAwMDAsXG4gICAgZGlzY29ubmVjdFRpbWVvdXQ6IDIwMDAsXG4gICAgcmV0cnlTdHJhdGVneTogZnVuY3Rpb24gKHRpbWVzKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbih0aW1lcyAqIDUwLCAyMDAwKTtcbiAgICB9LFxuICAgIGtlZXBBbGl2ZTogMCxcbiAgICBub0RlbGF5OiB0cnVlLFxuICAgIGNvbm5lY3Rpb25OYW1lOiBudWxsLFxuICAgIC8vIFNlbnRpbmVsXG4gICAgc2VudGluZWxzOiBudWxsLFxuICAgIG5hbWU6IG51bGwsXG4gICAgcm9sZTogXCJtYXN0ZXJcIixcbiAgICBzZW50aW5lbFJldHJ5U3RyYXRlZ3k6IGZ1bmN0aW9uICh0aW1lcykge1xuICAgICAgICByZXR1cm4gTWF0aC5taW4odGltZXMgKiAxMCwgMTAwMCk7XG4gICAgfSxcbiAgICBzZW50aW5lbFJlY29ubmVjdFN0cmF0ZWd5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRoaXMgc3RyYXRlZ3kgb25seSBhcHBsaWVzIHdoZW4gc2VudGluZWxzIGFyZSB1c2VkIGZvciBkZXRlY3RpbmdcbiAgICAgICAgLy8gYSBmYWlsb3Zlciwgbm90IGR1cmluZyBpbml0aWFsIG1hc3RlciByZXNvbHV0aW9uLlxuICAgICAgICAvLyBUaGUgZGVwbG95bWVudCBjYW4gc3RpbGwgZnVuY3Rpb24gd2hlbiBzb21lIG9mIHRoZSBzZW50aW5lbHMgYXJlIGRvd25cbiAgICAgICAgLy8gZm9yIGEgbG9uZyBwZXJpb2Qgb2YgdGltZSwgc28gd2UgbWF5IG5vdCB3YW50IHRvIGF0dGVtcHQgcmVjb25uZWN0aW9uXG4gICAgICAgIC8vIHZlcnkgb2Z0ZW4uIFRoZXJlZm9yZSB0aGUgZGVmYXVsdCBpbnRlcnZhbCBpcyBmYWlybHkgbG9uZyAoMSBtaW51dGUpLlxuICAgICAgICByZXR1cm4gNjAwMDA7XG4gICAgfSxcbiAgICBuYXRNYXA6IG51bGwsXG4gICAgZW5hYmxlVExTRm9yU2VudGluZWxNb2RlOiBmYWxzZSxcbiAgICB1cGRhdGVTZW50aW5lbHM6IHRydWUsXG4gICAgZmFpbG92ZXJEZXRlY3RvcjogZmFsc2UsXG4gICAgLy8gU3RhdHVzXG4gICAgdXNlcm5hbWU6IG51bGwsXG4gICAgcGFzc3dvcmQ6IG51bGwsXG4gICAgZGI6IDAsXG4gICAgLy8gT3RoZXJzXG4gICAgZW5hYmxlT2ZmbGluZVF1ZXVlOiB0cnVlLFxuICAgIGVuYWJsZVJlYWR5Q2hlY2s6IHRydWUsXG4gICAgYXV0b1Jlc3Vic2NyaWJlOiB0cnVlLFxuICAgIGF1dG9SZXNlbmRVbmZ1bGZpbGxlZENvbW1hbmRzOiB0cnVlLFxuICAgIGxhenlDb25uZWN0OiBmYWxzZSxcbiAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgcmVjb25uZWN0T25FcnJvcjogbnVsbCxcbiAgICByZWFkT25seTogZmFsc2UsXG4gICAgc3RyaW5nTnVtYmVyczogZmFsc2UsXG4gICAgbWF4UmV0cmllc1BlclJlcXVlc3Q6IDIwLFxuICAgIG1heExvYWRpbmdSZXRyeVRpbWU6IDEwMDAwLFxuICAgIGVuYWJsZUF1dG9QaXBlbGluaW5nOiBmYWxzZSxcbiAgICBhdXRvUGlwZWxpbmluZ0lnbm9yZWRDb21tYW5kczogW10sXG4gICAgc2VudGluZWxNYXhDb25uZWN0aW9uczogMTAsXG59O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/redis/RedisOptions.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/redis/event_handler.js":
/*!***********************************************************!*\
!*** ./node_modules/ioredis/built/redis/event_handler.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.readyHandler = exports.errorHandler = exports.closeHandler = exports.connectHandler = void 0;\nconst redis_errors_1 = __webpack_require__(/*! redis-errors */ \"(rsc)/./node_modules/redis-errors/index.js\");\nconst Command_1 = __webpack_require__(/*! ../Command */ \"(rsc)/./node_modules/ioredis/built/Command.js\");\nconst errors_1 = __webpack_require__(/*! ../errors */ \"(rsc)/./node_modules/ioredis/built/errors/index.js\");\nconst utils_1 = __webpack_require__(/*! ../utils */ \"(rsc)/./node_modules/ioredis/built/utils/index.js\");\nconst DataHandler_1 = __webpack_require__(/*! ../DataHandler */ \"(rsc)/./node_modules/ioredis/built/DataHandler.js\");\nconst debug = (0, utils_1.Debug)(\"connection\");\nfunction connectHandler(self) {\n return function () {\n self.setStatus(\"connect\");\n self.resetCommandQueue();\n // AUTH command should be processed before any other commands\n let flushed = false;\n const { connectionEpoch } = self;\n if (self.condition.auth) {\n self.auth(self.condition.auth, function (err) {\n if (connectionEpoch !== self.connectionEpoch) {\n return;\n }\n if (err) {\n if (err.message.indexOf(\"no password is set\") !== -1) {\n console.warn(\"[WARN] Redis server does not require a password, but a password was supplied.\");\n }\n else if (err.message.indexOf(\"without any password configured for the default user\") !== -1) {\n console.warn(\"[WARN] This Redis server's `default` user does not require a password, but a password was supplied\");\n }\n else if (err.message.indexOf(\"wrong number of arguments for 'auth' command\") !== -1) {\n console.warn(`[ERROR] The server returned \"wrong number of arguments for 'auth' command\". You are probably passing both username and password to Redis version 5 or below. You should only pass the 'password' option for Redis version 5 and under.`);\n }\n else {\n flushed = true;\n self.recoverFromFatalError(err, err);\n }\n }\n });\n }\n if (self.condition.select) {\n self.select(self.condition.select).catch((err) => {\n // If the node is in cluster mode, select is disallowed.\n // In this case, reconnect won't help.\n self.silentEmit(\"error\", err);\n });\n }\n if (!self.options.enableReadyCheck) {\n exports.readyHandler(self)();\n }\n /*\n No need to keep the reference of DataHandler here\n because we don't need to do the cleanup.\n `Stream#end()` will remove all listeners for us.\n */\n new DataHandler_1.default(self, {\n stringNumbers: self.options.stringNumbers,\n });\n if (self.options.enableReadyCheck) {\n self._readyCheck(function (err, info) {\n if (connectionEpoch !== self.connectionEpoch) {\n return;\n }\n if (err) {\n if (!flushed) {\n self.recoverFromFatalError(new Error(\"Ready check failed: \" + err.message), err);\n }\n }\n else {\n if (self.connector.check(info)) {\n exports.readyHandler(self)();\n }\n else {\n self.disconnect(true);\n }\n }\n });\n }\n };\n}\nexports.connectHandler = connectHandler;\nfunction abortError(command) {\n const err = new redis_errors_1.AbortError(\"Command aborted due to connection close\");\n err.command = {\n name: command.name,\n args: command.args,\n };\n return err;\n}\n// If a contiguous set of pipeline commands starts from index zero then they\n// can be safely reattempted. If however we have a chain of pipelined commands\n// starting at index 1 or more it means we received a partial response before\n// the connection close and those pipelined commands must be aborted. For\n// example, if the queue looks like this: [2, 3, 4, 0, 1, 2] then after\n// aborting and purging we'll have a queue that looks like this: [0, 1, 2]\nfunction abortIncompletePipelines(commandQueue) {\n var _a;\n let expectedIndex = 0;\n for (let i = 0; i < commandQueue.length;) {\n const command = (_a = commandQueue.peekAt(i)) === null || _a === void 0 ? void 0 : _a.command;\n const pipelineIndex = command.pipelineIndex;\n if (pipelineIndex === undefined || pipelineIndex === 0) {\n expectedIndex = 0;\n }\n if (pipelineIndex !== undefined && pipelineIndex !== expectedIndex++) {\n commandQueue.remove(i, 1);\n command.reject(abortError(command));\n continue;\n }\n i++;\n }\n}\n// If only a partial transaction result was received before connection close,\n// we have to abort any transaction fragments that may have ended up in the\n// offline queue\nfunction abortTransactionFragments(commandQueue) {\n var _a;\n for (let i = 0; i < commandQueue.length;) {\n const command = (_a = commandQueue.peekAt(i)) === null || _a === void 0 ? void 0 : _a.command;\n if (command.name === \"multi\") {\n break;\n }\n if (command.name === \"exec\") {\n commandQueue.remove(i, 1);\n command.reject(abortError(command));\n break;\n }\n if (command.inTransaction) {\n commandQueue.remove(i, 1);\n command.reject(abortError(command));\n }\n else {\n i++;\n }\n }\n}\nfunction closeHandler(self) {\n return function () {\n const prevStatus = self.status;\n self.setStatus(\"close\");\n if (self.commandQueue.length) {\n abortIncompletePipelines(self.commandQueue);\n }\n if (self.offlineQueue.length) {\n abortTransactionFragments(self.offlineQueue);\n }\n if (prevStatus === \"ready\") {\n if (!self.prevCondition) {\n self.prevCondition = self.condition;\n }\n if (self.commandQueue.length) {\n self.prevCommandQueue = self.commandQueue;\n }\n }\n if (self.manuallyClosing) {\n self.manuallyClosing = false;\n debug(\"skip reconnecting since the connection is manually closed.\");\n return close();\n }\n if (typeof self.options.retryStrategy !== \"function\") {\n debug(\"skip reconnecting because `retryStrategy` is not a function\");\n return close();\n }\n const retryDelay = self.options.retryStrategy(++self.retryAttempts);\n if (typeof retryDelay !== \"number\") {\n debug(\"skip reconnecting because `retryStrategy` doesn't return a number\");\n return close();\n }\n debug(\"reconnect in %sms\", retryDelay);\n self.setStatus(\"reconnecting\", retryDelay);\n self.reconnectTimeout = setTimeout(function () {\n self.reconnectTimeout = null;\n self.connect().catch(utils_1.noop);\n }, retryDelay);\n const { maxRetriesPerRequest } = self.options;\n if (typeof maxRetriesPerRequest === \"number\") {\n if (maxRetriesPerRequest < 0) {\n debug(\"maxRetriesPerRequest is negative, ignoring...\");\n }\n else {\n const remainder = self.retryAttempts % (maxRetriesPerRequest + 1);\n if (remainder === 0) {\n debug(\"reach maxRetriesPerRequest limitation, flushing command queue...\");\n self.flushQueue(new errors_1.MaxRetriesPerRequestError(maxRetriesPerRequest));\n }\n }\n }\n };\n function close() {\n self.setStatus(\"end\");\n self.flushQueue(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n }\n}\nexports.closeHandler = closeHandler;\nfunction errorHandler(self) {\n return function (error) {\n debug(\"error: %s\", error);\n self.silentEmit(\"error\", error);\n };\n}\nexports.errorHandler = errorHandler;\nfunction readyHandler(self) {\n return function () {\n self.setStatus(\"ready\");\n self.retryAttempts = 0;\n if (self.options.monitor) {\n self.call(\"monitor\").then(() => self.setStatus(\"monitoring\"), (error) => self.emit(\"error\", error));\n const { sendCommand } = self;\n self.sendCommand = function (command) {\n if (Command_1.default.checkFlag(\"VALID_IN_MONITOR_MODE\", command.name)) {\n return sendCommand.call(self, command);\n }\n command.reject(new Error(\"Connection is in monitoring mode, can't process commands.\"));\n return command.promise;\n };\n self.once(\"close\", function () {\n delete self.sendCommand;\n });\n return;\n }\n const finalSelect = self.prevCondition\n ? self.prevCondition.select\n : self.condition.select;\n if (self.options.connectionName) {\n debug(\"set the connection name [%s]\", self.options.connectionName);\n self.client(\"setname\", self.options.connectionName).catch(utils_1.noop);\n }\n if (self.options.readOnly) {\n debug(\"set the connection to readonly mode\");\n self.readonly().catch(utils_1.noop);\n }\n if (self.prevCondition) {\n const condition = self.prevCondition;\n self.prevCondition = null;\n if (condition.subscriber && self.options.autoResubscribe) {\n // We re-select the previous db first since\n // `SELECT` command is not valid in sub mode.\n if (self.condition.select !== finalSelect) {\n debug(\"connect to db [%d]\", finalSelect);\n self.select(finalSelect);\n }\n const subscribeChannels = condition.subscriber.channels(\"subscribe\");\n if (subscribeChannels.length) {\n debug(\"subscribe %d channels\", subscribeChannels.length);\n self.subscribe(subscribeChannels);\n }\n const psubscribeChannels = condition.subscriber.channels(\"psubscribe\");\n if (psubscribeChannels.length) {\n debug(\"psubscribe %d channels\", psubscribeChannels.length);\n self.psubscribe(psubscribeChannels);\n }\n const ssubscribeChannels = condition.subscriber.channels(\"ssubscribe\");\n if (ssubscribeChannels.length) {\n debug(\"ssubscribe %d channels\", ssubscribeChannels.length);\n self.ssubscribe(ssubscribeChannels);\n }\n }\n }\n if (self.prevCommandQueue) {\n if (self.options.autoResendUnfulfilledCommands) {\n debug(\"resend %d unfulfilled commands\", self.prevCommandQueue.length);\n while (self.prevCommandQueue.length > 0) {\n const item = self.prevCommandQueue.shift();\n if (item.select !== self.condition.select &&\n item.command.name !== \"select\") {\n self.select(item.select);\n }\n self.sendCommand(item.command, item.stream);\n }\n }\n else {\n self.prevCommandQueue = null;\n }\n }\n if (self.offlineQueue.length) {\n debug(\"send %d commands in offline queue\", self.offlineQueue.length);\n const offlineQueue = self.offlineQueue;\n self.resetOfflineQueue();\n while (offlineQueue.length > 0) {\n const item = offlineQueue.shift();\n if (item.select !== self.condition.select &&\n item.command.name !== \"select\") {\n self.select(item.select);\n }\n self.sendCommand(item.command, item.stream);\n }\n }\n if (self.condition.select !== finalSelect) {\n debug(\"connect to db [%d]\", finalSelect);\n self.select(finalSelect);\n }\n };\n}\nexports.readyHandler = readyHandler;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC9yZWRpcy9ldmVudF9oYW5kbGVyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELG9CQUFvQixHQUFHLG9CQUFvQixHQUFHLG9CQUFvQixHQUFHLHNCQUFzQjtBQUMzRix1QkFBdUIsbUJBQU8sQ0FBQyxnRUFBYztBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxpRUFBWTtBQUN0QyxpQkFBaUIsbUJBQU8sQ0FBQyxxRUFBVztBQUNwQyxnQkFBZ0IsbUJBQU8sQ0FBQyxtRUFBVTtBQUNsQyxzQkFBc0IsbUJBQU8sQ0FBQyx5RUFBZ0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHdCQUF3QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isd0JBQXdCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsY0FBYztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L3JlZGlzL2V2ZW50X2hhbmRsZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlYWR5SGFuZGxlciA9IGV4cG9ydHMuZXJyb3JIYW5kbGVyID0gZXhwb3J0cy5jbG9zZUhhbmRsZXIgPSBleHBvcnRzLmNvbm5lY3RIYW5kbGVyID0gdm9pZCAwO1xuY29uc3QgcmVkaXNfZXJyb3JzXzEgPSByZXF1aXJlKFwicmVkaXMtZXJyb3JzXCIpO1xuY29uc3QgQ29tbWFuZF8xID0gcmVxdWlyZShcIi4uL0NvbW1hbmRcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgRGF0YUhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuLi9EYXRhSGFuZGxlclwiKTtcbmNvbnN0IGRlYnVnID0gKDAsIHV0aWxzXzEuRGVidWcpKFwiY29ubmVjdGlvblwiKTtcbmZ1bmN0aW9uIGNvbm5lY3RIYW5kbGVyKHNlbGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLnNldFN0YXR1cyhcImNvbm5lY3RcIik7XG4gICAgICAgIHNlbGYucmVzZXRDb21tYW5kUXVldWUoKTtcbiAgICAgICAgLy8gQVVUSCBjb21tYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgYmVmb3JlIGFueSBvdGhlciBjb21tYW5kc1xuICAgICAgICBsZXQgZmx1c2hlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCB7IGNvbm5lY3Rpb25FcG9jaCB9ID0gc2VsZjtcbiAgICAgICAgaWYgKHNlbGYuY29uZGl0aW9uLmF1dGgpIHtcbiAgICAgICAgICAgIHNlbGYuYXV0aChzZWxmLmNvbmRpdGlvbi5hdXRoLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25FcG9jaCAhPT0gc2VsZi5jb25uZWN0aW9uRXBvY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZS5pbmRleE9mKFwibm8gcGFzc3dvcmQgaXMgc2V0XCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiW1dBUk5dIFJlZGlzIHNlcnZlciBkb2VzIG5vdCByZXF1aXJlIGEgcGFzc3dvcmQsIGJ1dCBhIHBhc3N3b3JkIHdhcyBzdXBwbGllZC5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UuaW5kZXhPZihcIndpdGhvdXQgYW55IHBhc3N3b3JkIGNvbmZpZ3VyZWQgZm9yIHRoZSBkZWZhdWx0IHVzZXJcIikgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJbV0FSTl0gVGhpcyBSZWRpcyBzZXJ2ZXIncyBgZGVmYXVsdGAgdXNlciBkb2VzIG5vdCByZXF1aXJlIGEgcGFzc3dvcmQsIGJ1dCBhIHBhc3N3b3JkIHdhcyBzdXBwbGllZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZS5pbmRleE9mKFwid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgJ2F1dGgnIGNvbW1hbmRcIikgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFtFUlJPUl0gVGhlIHNlcnZlciByZXR1cm5lZCBcIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yICdhdXRoJyBjb21tYW5kXCIuIFlvdSBhcmUgcHJvYmFibHkgcGFzc2luZyBib3RoIHVzZXJuYW1lIGFuZCBwYXNzd29yZCB0byBSZWRpcyB2ZXJzaW9uIDUgb3IgYmVsb3cuIFlvdSBzaG91bGQgb25seSBwYXNzIHRoZSAncGFzc3dvcmQnIG9wdGlvbiBmb3IgUmVkaXMgdmVyc2lvbiA1IGFuZCB1bmRlci5gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWNvdmVyRnJvbUZhdGFsRXJyb3IoZXJyLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYuY29uZGl0aW9uLnNlbGVjdCkge1xuICAgICAgICAgICAgc2VsZi5zZWxlY3Qoc2VsZi5jb25kaXRpb24uc2VsZWN0KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXMgaW4gY2x1c3RlciBtb2RlLCBzZWxlY3QgaXMgZGlzYWxsb3dlZC5cbiAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHJlY29ubmVjdCB3b24ndCBoZWxwLlxuICAgICAgICAgICAgICAgIHNlbGYuc2lsZW50RW1pdChcImVycm9yXCIsIGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlbGYub3B0aW9ucy5lbmFibGVSZWFkeUNoZWNrKSB7XG4gICAgICAgICAgICBleHBvcnRzLnJlYWR5SGFuZGxlcihzZWxmKSgpO1xuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgICAgTm8gbmVlZCB0byBrZWVwIHRoZSByZWZlcmVuY2Ugb2YgRGF0YUhhbmRsZXIgaGVyZVxuICAgICAgICAgIGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGUgY2xlYW51cC5cbiAgICAgICAgICBgU3RyZWFtI2VuZCgpYCB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvciB1cy5cbiAgICAgICAgKi9cbiAgICAgICAgbmV3IERhdGFIYW5kbGVyXzEuZGVmYXVsdChzZWxmLCB7XG4gICAgICAgICAgICBzdHJpbmdOdW1iZXJzOiBzZWxmLm9wdGlvbnMuc3RyaW5nTnVtYmVycyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChzZWxmLm9wdGlvbnMuZW5hYmxlUmVhZHlDaGVjaykge1xuICAgICAgICAgICAgc2VsZi5fcmVhZHlDaGVjayhmdW5jdGlvbiAoZXJyLCBpbmZvKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25FcG9jaCAhPT0gc2VsZi5jb25uZWN0aW9uRXBvY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmx1c2hlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWNvdmVyRnJvbUZhdGFsRXJyb3IobmV3IEVycm9yKFwiUmVhZHkgY2hlY2sgZmFpbGVkOiBcIiArIGVyci5tZXNzYWdlKSwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY29ubmVjdG9yLmNoZWNrKGluZm8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzLnJlYWR5SGFuZGxlcihzZWxmKSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXNjb25uZWN0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0cy5jb25uZWN0SGFuZGxlciA9IGNvbm5lY3RIYW5kbGVyO1xuZnVuY3Rpb24gYWJvcnRFcnJvcihjb21tYW5kKSB7XG4gICAgY29uc3QgZXJyID0gbmV3IHJlZGlzX2Vycm9yc18xLkFib3J0RXJyb3IoXCJDb21tYW5kIGFib3J0ZWQgZHVlIHRvIGNvbm5lY3Rpb24gY2xvc2VcIik7XG4gICAgZXJyLmNvbW1hbmQgPSB7XG4gICAgICAgIG5hbWU6IGNvbW1hbmQubmFtZSxcbiAgICAgICAgYXJnczogY29tbWFuZC5hcmdzLFxuICAgIH07XG4gICAgcmV0dXJuIGVycjtcbn1cbi8vIElmIGEgY29udGlndW91cyBzZXQgb2YgcGlwZWxpbmUgY29tbWFuZHMgc3RhcnRzIGZyb20gaW5kZXggemVybyB0aGVuIHRoZXlcbi8vIGNhbiBiZSBzYWZlbHkgcmVhdHRlbXB0ZWQuIElmIGhvd2V2ZXIgd2UgaGF2ZSBhIGNoYWluIG9mIHBpcGVsaW5lZCBjb21tYW5kc1xuLy8gc3RhcnRpbmcgYXQgaW5kZXggMSBvciBtb3JlIGl0IG1lYW5zIHdlIHJlY2VpdmVkIGEgcGFydGlhbCByZXNwb25zZSBiZWZvcmVcbi8vIHRoZSBjb25uZWN0aW9uIGNsb3NlIGFuZCB0aG9zZSBwaXBlbGluZWQgY29tbWFuZHMgbXVzdCBiZSBhYm9ydGVkLiBGb3Jcbi8vIGV4YW1wbGUsIGlmIHRoZSBxdWV1ZSBsb29rcyBsaWtlIHRoaXM6IFsyLCAzLCA0LCAwLCAxLCAyXSB0aGVuIGFmdGVyXG4vLyBhYm9ydGluZyBhbmQgcHVyZ2luZyB3ZSdsbCBoYXZlIGEgcXVldWUgdGhhdCBsb29rcyBsaWtlIHRoaXM6IFswLCAxLCAyXVxuZnVuY3Rpb24gYWJvcnRJbmNvbXBsZXRlUGlwZWxpbmVzKGNvbW1hbmRRdWV1ZSkge1xuICAgIHZhciBfYTtcbiAgICBsZXQgZXhwZWN0ZWRJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tYW5kUXVldWUubGVuZ3RoOykge1xuICAgICAgICBjb25zdCBjb21tYW5kID0gKF9hID0gY29tbWFuZFF1ZXVlLnBlZWtBdChpKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbW1hbmQ7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lSW5kZXggPSBjb21tYW5kLnBpcGVsaW5lSW5kZXg7XG4gICAgICAgIGlmIChwaXBlbGluZUluZGV4ID09PSB1bmRlZmluZWQgfHwgcGlwZWxpbmVJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgZXhwZWN0ZWRJbmRleCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBpcGVsaW5lSW5kZXggIT09IHVuZGVmaW5lZCAmJiBwaXBlbGluZUluZGV4ICE9PSBleHBlY3RlZEluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbW1hbmRRdWV1ZS5yZW1vdmUoaSwgMSk7XG4gICAgICAgICAgICBjb21tYW5kLnJlamVjdChhYm9ydEVycm9yKGNvbW1hbmQpKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG59XG4vLyBJZiBvbmx5IGEgcGFydGlhbCB0cmFuc2FjdGlvbiByZXN1bHQgd2FzIHJlY2VpdmVkIGJlZm9yZSBjb25uZWN0aW9uIGNsb3NlLFxuLy8gd2UgaGF2ZSB0byBhYm9ydCBhbnkgdHJhbnNhY3Rpb24gZnJhZ21lbnRzIHRoYXQgbWF5IGhhdmUgZW5kZWQgdXAgaW4gdGhlXG4vLyBvZmZsaW5lIHF1ZXVlXG5mdW5jdGlvbiBhYm9ydFRyYW5zYWN0aW9uRnJhZ21lbnRzKGNvbW1hbmRRdWV1ZSkge1xuICAgIHZhciBfYTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1hbmRRdWV1ZS5sZW5ndGg7KSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSAoX2EgPSBjb21tYW5kUXVldWUucGVla0F0KGkpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tbWFuZDtcbiAgICAgICAgaWYgKGNvbW1hbmQubmFtZSA9PT0gXCJtdWx0aVwiKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tbWFuZC5uYW1lID09PSBcImV4ZWNcIikge1xuICAgICAgICAgICAgY29tbWFuZFF1ZXVlLnJlbW92ZShpLCAxKTtcbiAgICAgICAgICAgIGNvbW1hbmQucmVqZWN0KGFib3J0RXJyb3IoY29tbWFuZCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmQuaW5UcmFuc2FjdGlvbikge1xuICAgICAgICAgICAgY29tbWFuZFF1ZXVlLnJlbW92ZShpLCAxKTtcbiAgICAgICAgICAgIGNvbW1hbmQucmVqZWN0KGFib3J0RXJyb3IoY29tbWFuZCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gY2xvc2VIYW5kbGVyKHNlbGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwcmV2U3RhdHVzID0gc2VsZi5zdGF0dXM7XG4gICAgICAgIHNlbGYuc2V0U3RhdHVzKFwiY2xvc2VcIik7XG4gICAgICAgIGlmIChzZWxmLmNvbW1hbmRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFib3J0SW5jb21wbGV0ZVBpcGVsaW5lcyhzZWxmLmNvbW1hbmRRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYub2ZmbGluZVF1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgYWJvcnRUcmFuc2FjdGlvbkZyYWdtZW50cyhzZWxmLm9mZmxpbmVRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZTdGF0dXMgPT09IFwicmVhZHlcIikge1xuICAgICAgICAgICAgaWYgKCFzZWxmLnByZXZDb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBzZWxmLnByZXZDb25kaXRpb24gPSBzZWxmLmNvbmRpdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbW1hbmRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnByZXZDb21tYW5kUXVldWUgPSBzZWxmLmNvbW1hbmRRdWV1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5tYW51YWxseUNsb3NpbmcpIHtcbiAgICAgICAgICAgIHNlbGYubWFudWFsbHlDbG9zaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBkZWJ1ZyhcInNraXAgcmVjb25uZWN0aW5nIHNpbmNlIHRoZSBjb25uZWN0aW9uIGlzIG1hbnVhbGx5IGNsb3NlZC5cIik7XG4gICAgICAgICAgICByZXR1cm4gY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHNlbGYub3B0aW9ucy5yZXRyeVN0cmF0ZWd5ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGRlYnVnKFwic2tpcCByZWNvbm5lY3RpbmcgYmVjYXVzZSBgcmV0cnlTdHJhdGVneWAgaXMgbm90IGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICByZXR1cm4gY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXRyeURlbGF5ID0gc2VsZi5vcHRpb25zLnJldHJ5U3RyYXRlZ3koKytzZWxmLnJldHJ5QXR0ZW1wdHMpO1xuICAgICAgICBpZiAodHlwZW9mIHJldHJ5RGVsYXkgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGRlYnVnKFwic2tpcCByZWNvbm5lY3RpbmcgYmVjYXVzZSBgcmV0cnlTdHJhdGVneWAgZG9lc24ndCByZXR1cm4gYSBudW1iZXJcIik7XG4gICAgICAgICAgICByZXR1cm4gY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBkZWJ1ZyhcInJlY29ubmVjdCBpbiAlc21zXCIsIHJldHJ5RGVsYXkpO1xuICAgICAgICBzZWxmLnNldFN0YXR1cyhcInJlY29ubmVjdGluZ1wiLCByZXRyeURlbGF5KTtcbiAgICAgICAgc2VsZi5yZWNvbm5lY3RUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZWxmLnJlY29ubmVjdFRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgc2VsZi5jb25uZWN0KCkuY2F0Y2godXRpbHNfMS5ub29wKTtcbiAgICAgICAgfSwgcmV0cnlEZWxheSk7XG4gICAgICAgIGNvbnN0IHsgbWF4UmV0cmllc1BlclJlcXVlc3QgfSA9IHNlbGYub3B0aW9ucztcbiAgICAgICAgaWYgKHR5cGVvZiBtYXhSZXRyaWVzUGVyUmVxdWVzdCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgaWYgKG1heFJldHJpZXNQZXJSZXF1ZXN0IDwgMCkge1xuICAgICAgICAgICAgICAgIGRlYnVnKFwibWF4UmV0cmllc1BlclJlcXVlc3QgaXMgbmVnYXRpdmUsIGlnbm9yaW5nLi4uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVtYWluZGVyID0gc2VsZi5yZXRyeUF0dGVtcHRzICUgKG1heFJldHJpZXNQZXJSZXF1ZXN0ICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlbWFpbmRlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcInJlYWNoIG1heFJldHJpZXNQZXJSZXF1ZXN0IGxpbWl0YXRpb24sIGZsdXNoaW5nIGNvbW1hbmQgcXVldWUuLi5cIik7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZmx1c2hRdWV1ZShuZXcgZXJyb3JzXzEuTWF4UmV0cmllc1BlclJlcXVlc3RFcnJvcihtYXhSZXRyaWVzUGVyUmVxdWVzdCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdHVzKFwiZW5kXCIpO1xuICAgICAgICBzZWxmLmZsdXNoUXVldWUobmV3IEVycm9yKHV0aWxzXzEuQ09OTkVDVElPTl9DTE9TRURfRVJST1JfTVNHKSk7XG4gICAgfVxufVxuZXhwb3J0cy5jbG9zZUhhbmRsZXIgPSBjbG9zZUhhbmRsZXI7XG5mdW5jdGlvbiBlcnJvckhhbmRsZXIoc2VsZikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgZGVidWcoXCJlcnJvcjogJXNcIiwgZXJyb3IpO1xuICAgICAgICBzZWxmLnNpbGVudEVtaXQoXCJlcnJvclwiLCBlcnJvcik7XG4gICAgfTtcbn1cbmV4cG9ydHMuZXJyb3JIYW5kbGVyID0gZXJyb3JIYW5kbGVyO1xuZnVuY3Rpb24gcmVhZHlIYW5kbGVyKHNlbGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLnNldFN0YXR1cyhcInJlYWR5XCIpO1xuICAgICAgICBzZWxmLnJldHJ5QXR0ZW1wdHMgPSAwO1xuICAgICAgICBpZiAoc2VsZi5vcHRpb25zLm1vbml0b3IpIHtcbiAgICAgICAgICAgIHNlbGYuY2FsbChcIm1vbml0b3JcIikudGhlbigoKSA9PiBzZWxmLnNldFN0YXR1cyhcIm1vbml0b3JpbmdcIiksIChlcnJvcikgPT4gc2VsZi5lbWl0KFwiZXJyb3JcIiwgZXJyb3IpKTtcbiAgICAgICAgICAgIGNvbnN0IHsgc2VuZENvbW1hbmQgfSA9IHNlbGY7XG4gICAgICAgICAgICBzZWxmLnNlbmRDb21tYW5kID0gZnVuY3Rpb24gKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICBpZiAoQ29tbWFuZF8xLmRlZmF1bHQuY2hlY2tGbGFnKFwiVkFMSURfSU5fTU9OSVRPUl9NT0RFXCIsIGNvbW1hbmQubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbmRDb21tYW5kLmNhbGwoc2VsZiwgY29tbWFuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbW1hbmQucmVqZWN0KG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gaXMgaW4gbW9uaXRvcmluZyBtb2RlLCBjYW4ndCBwcm9jZXNzIGNvbW1hbmRzLlwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmQucHJvbWlzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZWxmLm9uY2UoXCJjbG9zZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHNlbGYuc2VuZENvbW1hbmQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaW5hbFNlbGVjdCA9IHNlbGYucHJldkNvbmRpdGlvblxuICAgICAgICAgICAgPyBzZWxmLnByZXZDb25kaXRpb24uc2VsZWN0XG4gICAgICAgICAgICA6IHNlbGYuY29uZGl0aW9uLnNlbGVjdDtcbiAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5jb25uZWN0aW9uTmFtZSkge1xuICAgICAgICAgICAgZGVidWcoXCJzZXQgdGhlIGNvbm5lY3Rpb24gbmFtZSBbJXNdXCIsIHNlbGYub3B0aW9ucy5jb25uZWN0aW9uTmFtZSk7XG4gICAgICAgICAgICBzZWxmLmNsaWVudChcInNldG5hbWVcIiwgc2VsZi5vcHRpb25zLmNvbm5lY3Rpb25OYW1lKS5jYXRjaCh1dGlsc18xLm5vb3ApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLm9wdGlvbnMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIGRlYnVnKFwic2V0IHRoZSBjb25uZWN0aW9uIHRvIHJlYWRvbmx5IG1vZGVcIik7XG4gICAgICAgICAgICBzZWxmLnJlYWRvbmx5KCkuY2F0Y2godXRpbHNfMS5ub29wKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5wcmV2Q29uZGl0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb24gPSBzZWxmLnByZXZDb25kaXRpb247XG4gICAgICAgICAgICBzZWxmLnByZXZDb25kaXRpb24gPSBudWxsO1xuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbi5zdWJzY3JpYmVyICYmIHNlbGYub3B0aW9ucy5hdXRvUmVzdWJzY3JpYmUpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSByZS1zZWxlY3QgdGhlIHByZXZpb3VzIGRiIGZpcnN0IHNpbmNlXG4gICAgICAgICAgICAgICAgLy8gYFNFTEVDVGAgY29tbWFuZCBpcyBub3QgdmFsaWQgaW4gc3ViIG1vZGUuXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZGl0aW9uLnNlbGVjdCAhPT0gZmluYWxTZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoXCJjb25uZWN0IHRvIGRiIFslZF1cIiwgZmluYWxTZWxlY3QpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdChmaW5hbFNlbGVjdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHN1YnNjcmliZUNoYW5uZWxzID0gY29uZGl0aW9uLnN1YnNjcmliZXIuY2hhbm5lbHMoXCJzdWJzY3JpYmVcIik7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZUNoYW5uZWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcInN1YnNjcmliZSAlZCBjaGFubmVsc1wiLCBzdWJzY3JpYmVDaGFubmVscy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnN1YnNjcmliZShzdWJzY3JpYmVDaGFubmVscyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBzdWJzY3JpYmVDaGFubmVscyA9IGNvbmRpdGlvbi5zdWJzY3JpYmVyLmNoYW5uZWxzKFwicHN1YnNjcmliZVwiKTtcbiAgICAgICAgICAgICAgICBpZiAocHN1YnNjcmliZUNoYW5uZWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcInBzdWJzY3JpYmUgJWQgY2hhbm5lbHNcIiwgcHN1YnNjcmliZUNoYW5uZWxzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucHN1YnNjcmliZShwc3Vic2NyaWJlQ2hhbm5lbHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzc3Vic2NyaWJlQ2hhbm5lbHMgPSBjb25kaXRpb24uc3Vic2NyaWJlci5jaGFubmVscyhcInNzdWJzY3JpYmVcIik7XG4gICAgICAgICAgICAgICAgaWYgKHNzdWJzY3JpYmVDaGFubmVscy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoXCJzc3Vic2NyaWJlICVkIGNoYW5uZWxzXCIsIHNzdWJzY3JpYmVDaGFubmVscy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNzdWJzY3JpYmUoc3N1YnNjcmliZUNoYW5uZWxzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYucHJldkNvbW1hbmRRdWV1ZSkge1xuICAgICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5hdXRvUmVzZW5kVW5mdWxmaWxsZWRDb21tYW5kcykge1xuICAgICAgICAgICAgICAgIGRlYnVnKFwicmVzZW5kICVkIHVuZnVsZmlsbGVkIGNvbW1hbmRzXCIsIHNlbGYucHJldkNvbW1hbmRRdWV1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHdoaWxlIChzZWxmLnByZXZDb21tYW5kUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gc2VsZi5wcmV2Q29tbWFuZFF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnNlbGVjdCAhPT0gc2VsZi5jb25kaXRpb24uc2VsZWN0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbW1hbmQubmFtZSAhPT0gXCJzZWxlY3RcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3QoaXRlbS5zZWxlY3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VuZENvbW1hbmQoaXRlbS5jb21tYW5kLCBpdGVtLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZi5wcmV2Q29tbWFuZFF1ZXVlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5vZmZsaW5lUXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBkZWJ1ZyhcInNlbmQgJWQgY29tbWFuZHMgaW4gb2ZmbGluZSBxdWV1ZVwiLCBzZWxmLm9mZmxpbmVRdWV1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3Qgb2ZmbGluZVF1ZXVlID0gc2VsZi5vZmZsaW5lUXVldWU7XG4gICAgICAgICAgICBzZWxmLnJlc2V0T2ZmbGluZVF1ZXVlKCk7XG4gICAgICAgICAgICB3aGlsZSAob2ZmbGluZVF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gb2ZmbGluZVF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uc2VsZWN0ICE9PSBzZWxmLmNvbmRpdGlvbi5zZWxlY3QgJiZcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jb21tYW5kLm5hbWUgIT09IFwic2VsZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3QoaXRlbS5zZWxlY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxmLnNlbmRDb21tYW5kKGl0ZW0uY29tbWFuZCwgaXRlbS5zdHJlYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmNvbmRpdGlvbi5zZWxlY3QgIT09IGZpbmFsU2VsZWN0KSB7XG4gICAgICAgICAgICBkZWJ1ZyhcImNvbm5lY3QgdG8gZGIgWyVkXVwiLCBmaW5hbFNlbGVjdCk7XG4gICAgICAgICAgICBzZWxmLnNlbGVjdChmaW5hbFNlbGVjdCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0cy5yZWFkeUhhbmRsZXIgPSByZWFkeUhhbmRsZXI7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/redis/event_handler.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/transaction.js":
/*!***************************************************!*\
!*** ./node_modules/ioredis/built/transaction.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.addTransactionSupport = void 0;\nconst utils_1 = __webpack_require__(/*! ./utils */ \"(rsc)/./node_modules/ioredis/built/utils/index.js\");\nconst standard_as_callback_1 = __webpack_require__(/*! standard-as-callback */ \"(rsc)/./node_modules/standard-as-callback/built/index.js\");\nconst Pipeline_1 = __webpack_require__(/*! ./Pipeline */ \"(rsc)/./node_modules/ioredis/built/Pipeline.js\");\nfunction addTransactionSupport(redis) {\n redis.pipeline = function (commands) {\n const pipeline = new Pipeline_1.default(this);\n if (Array.isArray(commands)) {\n pipeline.addBatch(commands);\n }\n return pipeline;\n };\n const { multi } = redis;\n redis.multi = function (commands, options) {\n if (typeof options === \"undefined\" && !Array.isArray(commands)) {\n options = commands;\n commands = null;\n }\n if (options && options.pipeline === false) {\n return multi.call(this);\n }\n const pipeline = new Pipeline_1.default(this);\n // @ts-expect-error\n pipeline.multi();\n if (Array.isArray(commands)) {\n pipeline.addBatch(commands);\n }\n const exec = pipeline.exec;\n pipeline.exec = function (callback) {\n // Wait for the cluster to be connected, since we need nodes information before continuing\n if (this.isCluster && !this.redis.slots.length) {\n if (this.redis.status === \"wait\")\n this.redis.connect().catch(utils_1.noop);\n return (0, standard_as_callback_1.default)(new Promise((resolve, reject) => {\n this.redis.delayUntilReady((err) => {\n if (err) {\n reject(err);\n return;\n }\n this.exec(pipeline).then(resolve, reject);\n });\n }), callback);\n }\n if (this._transactions > 0) {\n exec.call(pipeline);\n }\n // Returns directly when the pipeline\n // has been called multiple times (retries).\n if (this.nodeifiedPromise) {\n return exec.call(pipeline);\n }\n const promise = exec.call(pipeline);\n return (0, standard_as_callback_1.default)(promise.then(function (result) {\n const execResult = result[result.length - 1];\n if (typeof execResult === \"undefined\") {\n throw new Error(\"Pipeline cannot be used to send any commands when the `exec()` has been called on it.\");\n }\n if (execResult[0]) {\n execResult[0].previousErrors = [];\n for (let i = 0; i < result.length - 1; ++i) {\n if (result[i][0]) {\n execResult[0].previousErrors.push(result[i][0]);\n }\n }\n throw execResult[0];\n }\n return (0, utils_1.wrapMultiResult)(execResult[1]);\n }), callback);\n };\n // @ts-expect-error\n const { execBuffer } = pipeline;\n // @ts-expect-error\n pipeline.execBuffer = function (callback) {\n if (this._transactions > 0) {\n execBuffer.call(pipeline);\n }\n return pipeline.exec(callback);\n };\n return pipeline;\n };\n const { exec } = redis;\n redis.exec = function (callback) {\n return (0, standard_as_callback_1.default)(exec.call(this).then(function (results) {\n if (Array.isArray(results)) {\n results = (0, utils_1.wrapMultiResult)(results);\n }\n return results;\n }), callback);\n };\n}\nexports.addTransactionSupport = addTransactionSupport;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC90cmFuc2FjdGlvbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCw2QkFBNkI7QUFDN0IsZ0JBQWdCLG1CQUFPLENBQUMsa0VBQVM7QUFDakMsK0JBQStCLG1CQUFPLENBQUMsc0ZBQXNCO0FBQzdELG1CQUFtQixtQkFBTyxDQUFDLGtFQUFZO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLHVCQUF1QjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsZ0JBQWdCLGFBQWE7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsNkJBQTZCIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L3RyYW5zYWN0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hZGRUcmFuc2FjdGlvblN1cHBvcnQgPSB2b2lkIDA7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5jb25zdCBzdGFuZGFyZF9hc19jYWxsYmFja18xID0gcmVxdWlyZShcInN0YW5kYXJkLWFzLWNhbGxiYWNrXCIpO1xuY29uc3QgUGlwZWxpbmVfMSA9IHJlcXVpcmUoXCIuL1BpcGVsaW5lXCIpO1xuZnVuY3Rpb24gYWRkVHJhbnNhY3Rpb25TdXBwb3J0KHJlZGlzKSB7XG4gICAgcmVkaXMucGlwZWxpbmUgPSBmdW5jdGlvbiAoY29tbWFuZHMpIHtcbiAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBuZXcgUGlwZWxpbmVfMS5kZWZhdWx0KHRoaXMpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb21tYW5kcykpIHtcbiAgICAgICAgICAgIHBpcGVsaW5lLmFkZEJhdGNoKGNvbW1hbmRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZWxpbmU7XG4gICAgfTtcbiAgICBjb25zdCB7IG11bHRpIH0gPSByZWRpcztcbiAgICByZWRpcy5tdWx0aSA9IGZ1bmN0aW9uIChjb21tYW5kcywgb3B0aW9ucykge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwidW5kZWZpbmVkXCIgJiYgIUFycmF5LmlzQXJyYXkoY29tbWFuZHMpKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gY29tbWFuZHM7XG4gICAgICAgICAgICBjb21tYW5kcyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5waXBlbGluZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBtdWx0aS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lID0gbmV3IFBpcGVsaW5lXzEuZGVmYXVsdCh0aGlzKTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBwaXBlbGluZS5tdWx0aSgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb21tYW5kcykpIHtcbiAgICAgICAgICAgIHBpcGVsaW5lLmFkZEJhdGNoKGNvbW1hbmRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleGVjID0gcGlwZWxpbmUuZXhlYztcbiAgICAgICAgcGlwZWxpbmUuZXhlYyA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGNsdXN0ZXIgdG8gYmUgY29ubmVjdGVkLCBzaW5jZSB3ZSBuZWVkIG5vZGVzIGluZm9ybWF0aW9uIGJlZm9yZSBjb250aW51aW5nXG4gICAgICAgICAgICBpZiAodGhpcy5pc0NsdXN0ZXIgJiYgIXRoaXMucmVkaXMuc2xvdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVkaXMuc3RhdHVzID09PSBcIndhaXRcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcy5jb25uZWN0KCkuY2F0Y2godXRpbHNfMS5ub29wKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIHN0YW5kYXJkX2FzX2NhbGxiYWNrXzEuZGVmYXVsdCkobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZGlzLmRlbGF5VW50aWxSZWFkeSgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjKHBpcGVsaW5lKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb25zID4gMCkge1xuICAgICAgICAgICAgICAgIGV4ZWMuY2FsbChwaXBlbGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZXR1cm5zIGRpcmVjdGx5IHdoZW4gdGhlIHBpcGVsaW5lXG4gICAgICAgICAgICAvLyBoYXMgYmVlbiBjYWxsZWQgbXVsdGlwbGUgdGltZXMgKHJldHJpZXMpLlxuICAgICAgICAgICAgaWYgKHRoaXMubm9kZWlmaWVkUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBleGVjLmNhbGwocGlwZWxpbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IGV4ZWMuY2FsbChwaXBlbGluZSk7XG4gICAgICAgICAgICByZXR1cm4gKDAsIHN0YW5kYXJkX2FzX2NhbGxiYWNrXzEuZGVmYXVsdCkocHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGVjUmVzdWx0ID0gcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGV4ZWNSZXN1bHQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGlwZWxpbmUgY2Fubm90IGJlIHVzZWQgdG8gc2VuZCBhbnkgY29tbWFuZHMgd2hlbiB0aGUgYGV4ZWMoKWAgaGFzIGJlZW4gY2FsbGVkIG9uIGl0LlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGV4ZWNSZXN1bHRbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgZXhlY1Jlc3VsdFswXS5wcmV2aW91c0Vycm9ycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGggLSAxOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbaV1bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjUmVzdWx0WzBdLnByZXZpb3VzRXJyb3JzLnB1c2gocmVzdWx0W2ldWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBleGVjUmVzdWx0WzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIHV0aWxzXzEud3JhcE11bHRpUmVzdWx0KShleGVjUmVzdWx0WzFdKTtcbiAgICAgICAgICAgIH0pLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgY29uc3QgeyBleGVjQnVmZmVyIH0gPSBwaXBlbGluZTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBwaXBlbGluZS5leGVjQnVmZmVyID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb25zID4gMCkge1xuICAgICAgICAgICAgICAgIGV4ZWNCdWZmZXIuY2FsbChwaXBlbGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGlwZWxpbmUuZXhlYyhjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBwaXBlbGluZTtcbiAgICB9O1xuICAgIGNvbnN0IHsgZXhlYyB9ID0gcmVkaXM7XG4gICAgcmVkaXMuZXhlYyA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gKDAsIHN0YW5kYXJkX2FzX2NhbGxiYWNrXzEuZGVmYXVsdCkoZXhlYy5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cyA9ICgwLCB1dGlsc18xLndyYXBNdWx0aVJlc3VsdCkocmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksIGNhbGxiYWNrKTtcbiAgICB9O1xufVxuZXhwb3J0cy5hZGRUcmFuc2FjdGlvblN1cHBvcnQgPSBhZGRUcmFuc2FjdGlvblN1cHBvcnQ7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/transaction.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/utils/Commander.js":
/*!*******************************************************!*\
!*** ./node_modules/ioredis/built/utils/Commander.js ***!
\*******************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst commands_1 = __webpack_require__(/*! @ioredis/commands */ \"(rsc)/./node_modules/@ioredis/commands/built/index.js\");\nconst autoPipelining_1 = __webpack_require__(/*! ../autoPipelining */ \"(rsc)/./node_modules/ioredis/built/autoPipelining.js\");\nconst Command_1 = __webpack_require__(/*! ../Command */ \"(rsc)/./node_modules/ioredis/built/Command.js\");\nconst Script_1 = __webpack_require__(/*! ../Script */ \"(rsc)/./node_modules/ioredis/built/Script.js\");\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nclass Commander {\n constructor() {\n this.options = {};\n /**\n * @ignore\n */\n this.scriptsSet = {};\n /**\n * @ignore\n */\n this.addedBuiltinSet = new Set();\n }\n /**\n * Return supported builtin commands\n */\n getBuiltinCommands() {\n return commands.slice(0);\n }\n /**\n * Create a builtin command\n */\n createBuiltinCommand(commandName) {\n return {\n string: generateFunction(null, commandName, \"utf8\"),\n buffer: generateFunction(null, commandName, null),\n };\n }\n /**\n * Create add builtin command\n */\n addBuiltinCommand(commandName) {\n this.addedBuiltinSet.add(commandName);\n this[commandName] = generateFunction(commandName, commandName, \"utf8\");\n this[commandName + \"Buffer\"] = generateFunction(commandName + \"Buffer\", commandName, null);\n }\n /**\n * Define a custom command using lua script\n */\n defineCommand(name, definition) {\n const script = new Script_1.default(definition.lua, definition.numberOfKeys, this.options.keyPrefix, definition.readOnly);\n this.scriptsSet[name] = script;\n this[name] = generateScriptingFunction(name, name, script, \"utf8\");\n this[name + \"Buffer\"] = generateScriptingFunction(name + \"Buffer\", name, script, null);\n }\n /**\n * @ignore\n */\n sendCommand(command, stream, node) {\n throw new Error('\"sendCommand\" is not implemented');\n }\n}\nconst commands = commands_1.list.filter((command) => command !== \"monitor\");\ncommands.push(\"sentinel\");\ncommands.forEach(function (commandName) {\n Commander.prototype[commandName] = generateFunction(commandName, commandName, \"utf8\");\n Commander.prototype[commandName + \"Buffer\"] = generateFunction(commandName + \"Buffer\", commandName, null);\n});\nCommander.prototype.call = generateFunction(\"call\", \"utf8\");\nCommander.prototype.callBuffer = generateFunction(\"callBuffer\", null);\n// @ts-expect-error\nCommander.prototype.send_command = Commander.prototype.call;\nfunction generateFunction(functionName, _commandName, _encoding) {\n if (typeof _encoding === \"undefined\") {\n _encoding = _commandName;\n _commandName = null;\n }\n return function (...args) {\n const commandName = (_commandName || args.shift());\n let callback = args[args.length - 1];\n if (typeof callback === \"function\") {\n args.pop();\n }\n else {\n callback = undefined;\n }\n const options = {\n errorStack: this.options.showFriendlyErrorStack ? new Error() : undefined,\n keyPrefix: this.options.keyPrefix,\n replyEncoding: _encoding,\n };\n // No auto pipeline, use regular command sending\n if (!(0, autoPipelining_1.shouldUseAutoPipelining)(this, functionName, commandName)) {\n return this.sendCommand(\n // @ts-expect-error\n new Command_1.default(commandName, args, options, callback));\n }\n // Create a new pipeline and make sure it's scheduled\n return (0, autoPipelining_1.executeWithAutoPipelining)(this, functionName, commandName, \n // @ts-expect-error\n args, callback);\n };\n}\nfunction generateScriptingFunction(functionName, commandName, script, encoding) {\n return function (...args) {\n const callback = typeof args[args.length - 1] === \"function\" ? args.pop() : undefined;\n const options = {\n replyEncoding: encoding,\n };\n if (this.options.showFriendlyErrorStack) {\n options.errorStack = new Error();\n }\n // No auto pipeline, use regular command sending\n if (!(0, autoPipelining_1.shouldUseAutoPipelining)(this, functionName, commandName)) {\n return script.execute(this, args, options, callback);\n }\n // Create a new pipeline and make sure it's scheduled\n return (0, autoPipelining_1.executeWithAutoPipelining)(this, functionName, commandName, args, callback);\n };\n}\nexports[\"default\"] = Commander;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC91dGlscy9Db21tYW5kZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsbUJBQW1CLG1CQUFPLENBQUMsZ0ZBQW1CO0FBQzlDLHlCQUF5QixtQkFBTyxDQUFDLCtFQUFtQjtBQUNwRCxrQkFBa0IsbUJBQU8sQ0FBQyxpRUFBWTtBQUN0QyxpQkFBaUIsbUJBQU8sQ0FBQywrREFBVztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZSIsInNvdXJjZXMiOlsiL2hvbWUvYWxtYS9uZXh0Z2VuL05lYWgtbWFpbC9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC91dGlscy9Db21tYW5kZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb21tYW5kc18xID0gcmVxdWlyZShcIkBpb3JlZGlzL2NvbW1hbmRzXCIpO1xuY29uc3QgYXV0b1BpcGVsaW5pbmdfMSA9IHJlcXVpcmUoXCIuLi9hdXRvUGlwZWxpbmluZ1wiKTtcbmNvbnN0IENvbW1hbmRfMSA9IHJlcXVpcmUoXCIuLi9Db21tYW5kXCIpO1xuY29uc3QgU2NyaXB0XzEgPSByZXF1aXJlKFwiLi4vU2NyaXB0XCIpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuY2xhc3MgQ29tbWFuZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaWdub3JlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNjcmlwdHNTZXQgPSB7fTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBpZ25vcmVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWRkZWRCdWlsdGluU2V0ID0gbmV3IFNldCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gc3VwcG9ydGVkIGJ1aWx0aW4gY29tbWFuZHNcbiAgICAgKi9cbiAgICBnZXRCdWlsdGluQ29tbWFuZHMoKSB7XG4gICAgICAgIHJldHVybiBjb21tYW5kcy5zbGljZSgwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgYnVpbHRpbiBjb21tYW5kXG4gICAgICovXG4gICAgY3JlYXRlQnVpbHRpbkNvbW1hbmQoY29tbWFuZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0cmluZzogZ2VuZXJhdGVGdW5jdGlvbihudWxsLCBjb21tYW5kTmFtZSwgXCJ1dGY4XCIpLFxuICAgICAgICAgICAgYnVmZmVyOiBnZW5lcmF0ZUZ1bmN0aW9uKG51bGwsIGNvbW1hbmROYW1lLCBudWxsKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFkZCBidWlsdGluIGNvbW1hbmRcbiAgICAgKi9cbiAgICBhZGRCdWlsdGluQ29tbWFuZChjb21tYW5kTmFtZSkge1xuICAgICAgICB0aGlzLmFkZGVkQnVpbHRpblNldC5hZGQoY29tbWFuZE5hbWUpO1xuICAgICAgICB0aGlzW2NvbW1hbmROYW1lXSA9IGdlbmVyYXRlRnVuY3Rpb24oY29tbWFuZE5hbWUsIGNvbW1hbmROYW1lLCBcInV0ZjhcIik7XG4gICAgICAgIHRoaXNbY29tbWFuZE5hbWUgKyBcIkJ1ZmZlclwiXSA9IGdlbmVyYXRlRnVuY3Rpb24oY29tbWFuZE5hbWUgKyBcIkJ1ZmZlclwiLCBjb21tYW5kTmFtZSwgbnVsbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmluZSBhIGN1c3RvbSBjb21tYW5kIHVzaW5nIGx1YSBzY3JpcHRcbiAgICAgKi9cbiAgICBkZWZpbmVDb21tYW5kKG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICAgICAgY29uc3Qgc2NyaXB0ID0gbmV3IFNjcmlwdF8xLmRlZmF1bHQoZGVmaW5pdGlvbi5sdWEsIGRlZmluaXRpb24ubnVtYmVyT2ZLZXlzLCB0aGlzLm9wdGlvbnMua2V5UHJlZml4LCBkZWZpbml0aW9uLnJlYWRPbmx5KTtcbiAgICAgICAgdGhpcy5zY3JpcHRzU2V0W25hbWVdID0gc2NyaXB0O1xuICAgICAgICB0aGlzW25hbWVdID0gZ2VuZXJhdGVTY3JpcHRpbmdGdW5jdGlvbihuYW1lLCBuYW1lLCBzY3JpcHQsIFwidXRmOFwiKTtcbiAgICAgICAgdGhpc1tuYW1lICsgXCJCdWZmZXJcIl0gPSBnZW5lcmF0ZVNjcmlwdGluZ0Z1bmN0aW9uKG5hbWUgKyBcIkJ1ZmZlclwiLCBuYW1lLCBzY3JpcHQsIG51bGwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgc2VuZENvbW1hbmQoY29tbWFuZCwgc3RyZWFtLCBub2RlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignXCJzZW5kQ29tbWFuZFwiIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICAgIH1cbn1cbmNvbnN0IGNvbW1hbmRzID0gY29tbWFuZHNfMS5saXN0LmZpbHRlcigoY29tbWFuZCkgPT4gY29tbWFuZCAhPT0gXCJtb25pdG9yXCIpO1xuY29tbWFuZHMucHVzaChcInNlbnRpbmVsXCIpO1xuY29tbWFuZHMuZm9yRWFjaChmdW5jdGlvbiAoY29tbWFuZE5hbWUpIHtcbiAgICBDb21tYW5kZXIucHJvdG90eXBlW2NvbW1hbmROYW1lXSA9IGdlbmVyYXRlRnVuY3Rpb24oY29tbWFuZE5hbWUsIGNvbW1hbmROYW1lLCBcInV0ZjhcIik7XG4gICAgQ29tbWFuZGVyLnByb3RvdHlwZVtjb21tYW5kTmFtZSArIFwiQnVmZmVyXCJdID0gZ2VuZXJhdGVGdW5jdGlvbihjb21tYW5kTmFtZSArIFwiQnVmZmVyXCIsIGNvbW1hbmROYW1lLCBudWxsKTtcbn0pO1xuQ29tbWFuZGVyLnByb3RvdHlwZS5jYWxsID0gZ2VuZXJhdGVGdW5jdGlvbihcImNhbGxcIiwgXCJ1dGY4XCIpO1xuQ29tbWFuZGVyLnByb3RvdHlwZS5jYWxsQnVmZmVyID0gZ2VuZXJhdGVGdW5jdGlvbihcImNhbGxCdWZmZXJcIiwgbnVsbCk7XG4vLyBAdHMtZXhwZWN0LWVycm9yXG5Db21tYW5kZXIucHJvdG90eXBlLnNlbmRfY29tbWFuZCA9IENvbW1hbmRlci5wcm90b3R5cGUuY2FsbDtcbmZ1bmN0aW9uIGdlbmVyYXRlRnVuY3Rpb24oZnVuY3Rpb25OYW1lLCBfY29tbWFuZE5hbWUsIF9lbmNvZGluZykge1xuICAgIGlmICh0eXBlb2YgX2VuY29kaW5nID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIF9lbmNvZGluZyA9IF9jb21tYW5kTmFtZTtcbiAgICAgICAgX2NvbW1hbmROYW1lID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gKF9jb21tYW5kTmFtZSB8fCBhcmdzLnNoaWZ0KCkpO1xuICAgICAgICBsZXQgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBlcnJvclN0YWNrOiB0aGlzLm9wdGlvbnMuc2hvd0ZyaWVuZGx5RXJyb3JTdGFjayA/IG5ldyBFcnJvcigpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAga2V5UHJlZml4OiB0aGlzLm9wdGlvbnMua2V5UHJlZml4LFxuICAgICAgICAgICAgcmVwbHlFbmNvZGluZzogX2VuY29kaW5nLFxuICAgICAgICB9O1xuICAgICAgICAvLyBObyBhdXRvIHBpcGVsaW5lLCB1c2UgcmVndWxhciBjb21tYW5kIHNlbmRpbmdcbiAgICAgICAgaWYgKCEoMCwgYXV0b1BpcGVsaW5pbmdfMS5zaG91bGRVc2VBdXRvUGlwZWxpbmluZykodGhpcywgZnVuY3Rpb25OYW1lLCBjb21tYW5kTmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbmRDb21tYW5kKFxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgbmV3IENvbW1hbmRfMS5kZWZhdWx0KGNvbW1hbmROYW1lLCBhcmdzLCBvcHRpb25zLCBjYWxsYmFjaykpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwaXBlbGluZSBhbmQgbWFrZSBzdXJlIGl0J3Mgc2NoZWR1bGVkXG4gICAgICAgIHJldHVybiAoMCwgYXV0b1BpcGVsaW5pbmdfMS5leGVjdXRlV2l0aEF1dG9QaXBlbGluaW5nKSh0aGlzLCBmdW5jdGlvbk5hbWUsIGNvbW1hbmROYW1lLCBcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBhcmdzLCBjYWxsYmFjayk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdlbmVyYXRlU2NyaXB0aW5nRnVuY3Rpb24oZnVuY3Rpb25OYW1lLCBjb21tYW5kTmFtZSwgc2NyaXB0LCBlbmNvZGluZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICBjb25zdCBjYWxsYmFjayA9IHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09IFwiZnVuY3Rpb25cIiA/IGFyZ3MucG9wKCkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICByZXBseUVuY29kaW5nOiBlbmNvZGluZyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93RnJpZW5kbHlFcnJvclN0YWNrKSB7XG4gICAgICAgICAgICBvcHRpb25zLmVycm9yU3RhY2sgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBObyBhdXRvIHBpcGVsaW5lLCB1c2UgcmVndWxhciBjb21tYW5kIHNlbmRpbmdcbiAgICAgICAgaWYgKCEoMCwgYXV0b1BpcGVsaW5pbmdfMS5zaG91bGRVc2VBdXRvUGlwZWxpbmluZykodGhpcywgZnVuY3Rpb25OYW1lLCBjb21tYW5kTmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY3JpcHQuZXhlY3V0ZSh0aGlzLCBhcmdzLCBvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHBpcGVsaW5lIGFuZCBtYWtlIHN1cmUgaXQncyBzY2hlZHVsZWRcbiAgICAgICAgcmV0dXJuICgwLCBhdXRvUGlwZWxpbmluZ18xLmV4ZWN1dGVXaXRoQXV0b1BpcGVsaW5pbmcpKHRoaXMsIGZ1bmN0aW9uTmFtZSwgY29tbWFuZE5hbWUsIGFyZ3MsIGNhbGxiYWNrKTtcbiAgICB9O1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gQ29tbWFuZGVyO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/utils/Commander.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/utils/applyMixin.js":
/*!********************************************************!*\
!*** ./node_modules/ioredis/built/utils/applyMixin.js ***!
\********************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nfunction applyMixin(derivedConstructor, mixinConstructor) {\n Object.getOwnPropertyNames(mixinConstructor.prototype).forEach((name) => {\n Object.defineProperty(derivedConstructor.prototype, name, Object.getOwnPropertyDescriptor(mixinConstructor.prototype, name));\n });\n}\nexports[\"default\"] = applyMixin;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC91dGlscy9hcHBseU1peGluLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGtCQUFlIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L3V0aWxzL2FwcGx5TWl4aW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBhcHBseU1peGluKGRlcml2ZWRDb25zdHJ1Y3RvciwgbWl4aW5Db25zdHJ1Y3Rvcikge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1peGluQ29uc3RydWN0b3IucHJvdG90eXBlKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZXJpdmVkQ29uc3RydWN0b3IucHJvdG90eXBlLCBuYW1lLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG1peGluQ29uc3RydWN0b3IucHJvdG90eXBlLCBuYW1lKSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBhcHBseU1peGluO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/utils/applyMixin.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/utils/debug.js":
/*!***************************************************!*\
!*** ./node_modules/ioredis/built/utils/debug.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.genRedactedString = exports.getStringValue = exports.MAX_ARGUMENT_LENGTH = void 0;\nconst debug_1 = __webpack_require__(/*! debug */ \"(rsc)/./node_modules/debug/src/index.js\");\nconst MAX_ARGUMENT_LENGTH = 200;\nexports.MAX_ARGUMENT_LENGTH = MAX_ARGUMENT_LENGTH;\nconst NAMESPACE_PREFIX = \"ioredis\";\n/**\n * helper function that tried to get a string value for\n * arbitrary \"debug\" arg\n */\nfunction getStringValue(v) {\n if (v === null) {\n return;\n }\n switch (typeof v) {\n case \"boolean\":\n return;\n case \"number\":\n return;\n case \"object\":\n if (Buffer.isBuffer(v)) {\n return v.toString(\"hex\");\n }\n if (Array.isArray(v)) {\n return v.join(\",\");\n }\n try {\n return JSON.stringify(v);\n }\n catch (e) {\n return;\n }\n case \"string\":\n return v;\n }\n}\nexports.getStringValue = getStringValue;\n/**\n * helper function that redacts a string representation of a \"debug\" arg\n */\nfunction genRedactedString(str, maxLen) {\n const { length } = str;\n return length <= maxLen\n ? str\n : str.slice(0, maxLen) + ' ... <REDACTED full-length=\"' + length + '\">';\n}\nexports.genRedactedString = genRedactedString;\n/**\n * a wrapper for the `debug` module, used to generate\n * \"debug functions\" that trim the values in their output\n */\nfunction genDebugFunction(namespace) {\n const fn = (0, debug_1.default)(`${NAMESPACE_PREFIX}:${namespace}`);\n function wrappedDebug(...args) {\n if (!fn.enabled) {\n return; // no-op\n }\n // we skip the first arg because that is the message\n for (let i = 1; i < args.length; i++) {\n const str = getStringValue(args[i]);\n if (typeof str === \"string\" && str.length > MAX_ARGUMENT_LENGTH) {\n args[i] = genRedactedString(str, MAX_ARGUMENT_LENGTH);\n }\n }\n return fn.apply(null, args);\n }\n Object.defineProperties(wrappedDebug, {\n namespace: {\n get() {\n return fn.namespace;\n },\n },\n enabled: {\n get() {\n return fn.enabled;\n },\n },\n destroy: {\n get() {\n return fn.destroy;\n },\n },\n log: {\n get() {\n return fn.log;\n },\n set(l) {\n fn.log = l;\n },\n },\n });\n return wrappedDebug;\n}\nexports[\"default\"] = genDebugFunction;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC91dGlscy9kZWJ1Zy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCx5QkFBeUIsR0FBRyxzQkFBc0IsR0FBRywyQkFBMkI7QUFDaEYsZ0JBQWdCLG1CQUFPLENBQUMsc0RBQU87QUFDL0I7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFNBQVM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxpQkFBaUIsR0FBRyxVQUFVO0FBQ3JFO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBLGtCQUFlIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L3V0aWxzL2RlYnVnLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZW5SZWRhY3RlZFN0cmluZyA9IGV4cG9ydHMuZ2V0U3RyaW5nVmFsdWUgPSBleHBvcnRzLk1BWF9BUkdVTUVOVF9MRU5HVEggPSB2b2lkIDA7XG5jb25zdCBkZWJ1Z18xID0gcmVxdWlyZShcImRlYnVnXCIpO1xuY29uc3QgTUFYX0FSR1VNRU5UX0xFTkdUSCA9IDIwMDtcbmV4cG9ydHMuTUFYX0FSR1VNRU5UX0xFTkdUSCA9IE1BWF9BUkdVTUVOVF9MRU5HVEg7XG5jb25zdCBOQU1FU1BBQ0VfUFJFRklYID0gXCJpb3JlZGlzXCI7XG4vKipcbiAqIGhlbHBlciBmdW5jdGlvbiB0aGF0IHRyaWVkIHRvIGdldCBhIHN0cmluZyB2YWx1ZSBmb3JcbiAqIGFyYml0cmFyeSBcImRlYnVnXCIgYXJnXG4gKi9cbmZ1bmN0aW9uIGdldFN0cmluZ1ZhbHVlKHYpIHtcbiAgICBpZiAodiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHYpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoXCJoZXhcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2LmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRTdHJpbmdWYWx1ZSA9IGdldFN0cmluZ1ZhbHVlO1xuLyoqXG4gKiBoZWxwZXIgZnVuY3Rpb24gdGhhdCByZWRhY3RzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgXCJkZWJ1Z1wiIGFyZ1xuICovXG5mdW5jdGlvbiBnZW5SZWRhY3RlZFN0cmluZyhzdHIsIG1heExlbikge1xuICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzdHI7XG4gICAgcmV0dXJuIGxlbmd0aCA8PSBtYXhMZW5cbiAgICAgICAgPyBzdHJcbiAgICAgICAgOiBzdHIuc2xpY2UoMCwgbWF4TGVuKSArICcgLi4uIDxSRURBQ1RFRCBmdWxsLWxlbmd0aD1cIicgKyBsZW5ndGggKyAnXCI+Jztcbn1cbmV4cG9ydHMuZ2VuUmVkYWN0ZWRTdHJpbmcgPSBnZW5SZWRhY3RlZFN0cmluZztcbi8qKlxuICogYSB3cmFwcGVyIGZvciB0aGUgYGRlYnVnYCBtb2R1bGUsIHVzZWQgdG8gZ2VuZXJhdGVcbiAqIFwiZGVidWcgZnVuY3Rpb25zXCIgdGhhdCB0cmltIHRoZSB2YWx1ZXMgaW4gdGhlaXIgb3V0cHV0XG4gKi9cbmZ1bmN0aW9uIGdlbkRlYnVnRnVuY3Rpb24obmFtZXNwYWNlKSB7XG4gICAgY29uc3QgZm4gPSAoMCwgZGVidWdfMS5kZWZhdWx0KShgJHtOQU1FU1BBQ0VfUFJFRklYfToke25hbWVzcGFjZX1gKTtcbiAgICBmdW5jdGlvbiB3cmFwcGVkRGVidWcoLi4uYXJncykge1xuICAgICAgICBpZiAoIWZuLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjsgLy8gbm8tb3BcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSBza2lwIHRoZSBmaXJzdCBhcmcgYmVjYXVzZSB0aGF0IGlzIHRoZSBtZXNzYWdlXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3RyID0gZ2V0U3RyaW5nVmFsdWUoYXJnc1tpXSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0ciA9PT0gXCJzdHJpbmdcIiAmJiBzdHIubGVuZ3RoID4gTUFYX0FSR1VNRU5UX0xFTkdUSCkge1xuICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBnZW5SZWRhY3RlZFN0cmluZyhzdHIsIE1BWF9BUkdVTUVOVF9MRU5HVEgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod3JhcHBlZERlYnVnLCB7XG4gICAgICAgIG5hbWVzcGFjZToge1xuICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmbi5uYW1lc3BhY2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBlbmFibGVkOiB7XG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLmVuYWJsZWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBkZXN0cm95OiB7XG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLmRlc3Ryb3k7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBsb2c6IHtcbiAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubG9nO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldChsKSB7XG4gICAgICAgICAgICAgICAgZm4ubG9nID0gbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIHdyYXBwZWREZWJ1Zztcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGdlbkRlYnVnRnVuY3Rpb247XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/utils/debug.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/utils/index.js":
/*!***************************************************!*\
!*** ./node_modules/ioredis/built/utils/index.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.noop = exports.defaults = exports.Debug = exports.zipMap = exports.CONNECTION_CLOSED_ERROR_MSG = exports.shuffle = exports.sample = exports.resolveTLSProfile = exports.parseURL = exports.optimizeErrorStack = exports.toArg = exports.convertMapToArray = exports.convertObjectToArray = exports.timeout = exports.packObject = exports.isInt = exports.wrapMultiResult = exports.convertBufferToString = void 0;\nconst url_1 = __webpack_require__(/*! url */ \"url\");\nconst lodash_1 = __webpack_require__(/*! ./lodash */ \"(rsc)/./node_modules/ioredis/built/utils/lodash.js\");\nObject.defineProperty(exports, \"defaults\", ({ enumerable: true, get: function () { return lodash_1.defaults; } }));\nObject.defineProperty(exports, \"noop\", ({ enumerable: true, get: function () { return lodash_1.noop; } }));\nconst debug_1 = __webpack_require__(/*! ./debug */ \"(rsc)/./node_modules/ioredis/built/utils/debug.js\");\nexports.Debug = debug_1.default;\nconst TLSProfiles_1 = __webpack_require__(/*! ../constants/TLSProfiles */ \"(rsc)/./node_modules/ioredis/built/constants/TLSProfiles.js\");\n/**\n * Convert a buffer to string, supports buffer array\n *\n * @example\n * ```js\n * const input = [Buffer.from('foo'), [Buffer.from('bar')]]\n * const res = convertBufferToString(input, 'utf8')\n * expect(res).to.eql(['foo', ['bar']])\n * ```\n */\nfunction convertBufferToString(value, encoding) {\n if (value instanceof Buffer) {\n return value.toString(encoding);\n }\n if (Array.isArray(value)) {\n const length = value.length;\n const res = Array(length);\n for (let i = 0; i < length; ++i) {\n res[i] =\n value[i] instanceof Buffer && encoding === \"utf8\"\n ? value[i].toString()\n : convertBufferToString(value[i], encoding);\n }\n return res;\n }\n return value;\n}\nexports.convertBufferToString = convertBufferToString;\n/**\n * Convert a list of results to node-style\n *\n * @example\n * ```js\n * const input = ['a', 'b', new Error('c'), 'd']\n * const output = exports.wrapMultiResult(input)\n * expect(output).to.eql([[null, 'a'], [null, 'b'], [new Error('c')], [null, 'd'])\n * ```\n */\nfunction wrapMultiResult(arr) {\n // When using WATCH/EXEC transactions, the EXEC will return\n // a null instead of an array\n if (!arr) {\n return null;\n }\n const result = [];\n const length = arr.length;\n for (let i = 0; i < length; ++i) {\n const item = arr[i];\n if (item instanceof Error) {\n result.push([item]);\n }\n else {\n result.push([null, item]);\n }\n }\n return result;\n}\nexports.wrapMultiResult = wrapMultiResult;\n/**\n * Detect if the argument is a int\n * @example\n * ```js\n * > isInt('123')\n * true\n * > isInt('123.3')\n * false\n * > isInt('1x')\n * false\n * > isInt(123)\n * true\n * > isInt(true)\n * false\n * ```\n */\nfunction isInt(value) {\n const x = parseFloat(value);\n return !isNaN(value) && (x | 0) === x;\n}\nexports.isInt = isInt;\n/**\n * Pack an array to an Object\n *\n * @example\n * ```js\n * > packObject(['a', 'b', 'c', 'd'])\n * { a: 'b', c: 'd' }\n * ```\n */\nfunction packObject(array) {\n const result = {};\n const length = array.length;\n for (let i = 1; i < length; i += 2) {\n result[array[i - 1]] = array[i];\n }\n return result;\n}\nexports.packObject = packObject;\n/**\n * Return a callback with timeout\n */\nfunction timeout(callback, timeout) {\n let timer = null;\n const run = function () {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n callback.apply(this, arguments);\n }\n };\n timer = setTimeout(run, timeout, new Error(\"timeout\"));\n return run;\n}\nexports.timeout = timeout;\n/**\n * Convert an object to an array\n * @example\n * ```js\n * > convertObjectToArray({ a: '1' })\n * ['a', '1']\n * ```\n */\nfunction convertObjectToArray(obj) {\n const result = [];\n const keys = Object.keys(obj); // Object.entries requires node 7+\n for (let i = 0, l = keys.length; i < l; i++) {\n result.push(keys[i], obj[keys[i]]);\n }\n return result;\n}\nexports.convertObjectToArray = convertObjectToArray;\n/**\n * Convert a map to an array\n * @example\n * ```js\n * > convertMapToArray(new Map([[1, '2']]))\n * [1, '2']\n * ```\n */\nfunction convertMapToArray(map) {\n const result = [];\n let pos = 0;\n map.forEach(function (value, key) {\n result[pos] = key;\n result[pos + 1] = value;\n pos += 2;\n });\n return result;\n}\nexports.convertMapToArray = convertMapToArray;\n/**\n * Convert a non-string arg to a string\n */\nfunction toArg(arg) {\n if (arg === null || typeof arg === \"undefined\") {\n return \"\";\n }\n return String(arg);\n}\nexports.toArg = toArg;\n/**\n * Optimize error stack\n *\n * @param error actually error\n * @param friendlyStack the stack that more meaningful\n * @param filterPath only show stacks with the specified path\n */\nfunction optimizeErrorStack(error, friendlyStack, filterPath) {\n const stacks = friendlyStack.split(\"\\n\");\n let lines = \"\";\n let i;\n for (i = 1; i < stacks.length; ++i) {\n if (stacks[i].indexOf(filterPath) === -1) {\n break;\n }\n }\n for (let j = i; j < stacks.length; ++j) {\n lines += \"\\n\" + stacks[j];\n }\n if (error.stack) {\n const pos = error.stack.indexOf(\"\\n\");\n error.stack = error.stack.slice(0, pos) + lines;\n }\n return error;\n}\nexports.optimizeErrorStack = optimizeErrorStack;\n/**\n * Parse the redis protocol url\n */\nfunction parseURL(url) {\n if (isInt(url)) {\n return { port: url };\n }\n let parsed = (0, url_1.parse)(url, true, true);\n if (!parsed.slashes && url[0] !== \"/\") {\n url = \"//\" + url;\n parsed = (0, url_1.parse)(url, true, true);\n }\n const options = parsed.query || {};\n const result = {};\n if (parsed.auth) {\n const index = parsed.auth.indexOf(\":\");\n result.username = index === -1 ? parsed.auth : parsed.auth.slice(0, index);\n result.password = index === -1 ? \"\" : parsed.auth.slice(index + 1);\n }\n if (parsed.pathname) {\n if (parsed.protocol === \"redis:\" || parsed.protocol === \"rediss:\") {\n if (parsed.pathname.length > 1) {\n result.db = parsed.pathname.slice(1);\n }\n }\n else {\n result.path = parsed.pathname;\n }\n }\n if (parsed.host) {\n result.host = parsed.hostname;\n }\n if (parsed.port) {\n result.port = parsed.port;\n }\n if (typeof options.family === \"string\") {\n const intFamily = Number.parseInt(options.family, 10);\n if (!Number.isNaN(intFamily)) {\n result.family = intFamily;\n }\n }\n (0, lodash_1.defaults)(result, options);\n return result;\n}\nexports.parseURL = parseURL;\n/**\n * Resolve TLS profile shortcut in connection options\n */\nfunction resolveTLSProfile(options) {\n let tls = options === null || options === void 0 ? void 0 : options.tls;\n if (typeof tls === \"string\")\n tls = { profile: tls };\n const profile = TLSProfiles_1.default[tls === null || tls === void 0 ? void 0 : tls.profile];\n if (profile) {\n tls = Object.assign({}, profile, tls);\n delete tls.profile;\n options = Object.assign({}, options, { tls });\n }\n return options;\n}\nexports.resolveTLSProfile = resolveTLSProfile;\n/**\n * Get a random element from `array`\n */\nfunction sample(array, from = 0) {\n const length = array.length;\n if (from >= length) {\n return null;\n }\n return array[from + Math.floor(Math.random() * (length - from))];\n}\nexports.sample = sample;\n/**\n * Shuffle the array using the Fisher-Yates Shuffle.\n * This method will mutate the original array.\n */\nfunction shuffle(array) {\n let counter = array.length;\n // While there are elements in the array\n while (counter > 0) {\n // Pick a random index\n const index = Math.floor(Math.random() * counter);\n // Decrease counter by 1\n counter--;\n // And swap the last element with it\n [array[counter], array[index]] = [array[index], array[counter]];\n }\n return array;\n}\nexports.shuffle = shuffle;\n/**\n * Error message for connection being disconnected\n */\nexports.CONNECTION_CLOSED_ERROR_MSG = \"Connection is closed.\";\nfunction zipMap(keys, values) {\n const map = new Map();\n keys.forEach((key, index) => {\n map.set(key, values[index]);\n });\n return map;\n}\nexports.zipMap = zipMap;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC91dGlscy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxZQUFZLEdBQUcsZ0JBQWdCLEdBQUcsYUFBYSxHQUFHLGNBQWMsR0FBRyxtQ0FBbUMsR0FBRyxlQUFlLEdBQUcsY0FBYyxHQUFHLHlCQUF5QixHQUFHLGdCQUFnQixHQUFHLDBCQUEwQixHQUFHLGFBQWEsR0FBRyx5QkFBeUIsR0FBRyw0QkFBNEIsR0FBRyxlQUFlLEdBQUcsa0JBQWtCLEdBQUcsYUFBYSxHQUFHLHVCQUF1QixHQUFHLDZCQUE2QjtBQUNqWixjQUFjLG1CQUFPLENBQUMsZ0JBQUs7QUFDM0IsaUJBQWlCLG1CQUFPLENBQUMsb0VBQVU7QUFDbkMsNENBQTJDLEVBQUUscUNBQXFDLDZCQUE2QixFQUFDO0FBQ2hILHdDQUF1QyxFQUFFLHFDQUFxQyx5QkFBeUIsRUFBQztBQUN4RyxnQkFBZ0IsbUJBQU8sQ0FBQyxrRUFBUztBQUNqQyxhQUFhO0FBQ2Isc0JBQXNCLG1CQUFPLENBQUMsNkZBQTBCO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsWUFBWTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFlBQVk7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixZQUFZO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixRQUFRO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMscUNBQXFDLE9BQU87QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG1CQUFtQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBLGtDQUFrQyxhQUFhLEtBQUs7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L3V0aWxzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ub29wID0gZXhwb3J0cy5kZWZhdWx0cyA9IGV4cG9ydHMuRGVidWcgPSBleHBvcnRzLnppcE1hcCA9IGV4cG9ydHMuQ09OTkVDVElPTl9DTE9TRURfRVJST1JfTVNHID0gZXhwb3J0cy5zaHVmZmxlID0gZXhwb3J0cy5zYW1wbGUgPSBleHBvcnRzLnJlc29sdmVUTFNQcm9maWxlID0gZXhwb3J0cy5wYXJzZVVSTCA9IGV4cG9ydHMub3B0aW1pemVFcnJvclN0YWNrID0gZXhwb3J0cy50b0FyZyA9IGV4cG9ydHMuY29udmVydE1hcFRvQXJyYXkgPSBleHBvcnRzLmNvbnZlcnRPYmplY3RUb0FycmF5ID0gZXhwb3J0cy50aW1lb3V0ID0gZXhwb3J0cy5wYWNrT2JqZWN0ID0gZXhwb3J0cy5pc0ludCA9IGV4cG9ydHMud3JhcE11bHRpUmVzdWx0ID0gZXhwb3J0cy5jb252ZXJ0QnVmZmVyVG9TdHJpbmcgPSB2b2lkIDA7XG5jb25zdCB1cmxfMSA9IHJlcXVpcmUoXCJ1cmxcIik7XG5jb25zdCBsb2Rhc2hfMSA9IHJlcXVpcmUoXCIuL2xvZGFzaFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsb2Rhc2hfMS5kZWZhdWx0czsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5vb3BcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvZGFzaF8xLm5vb3A7IH0gfSk7XG5jb25zdCBkZWJ1Z18xID0gcmVxdWlyZShcIi4vZGVidWdcIik7XG5leHBvcnRzLkRlYnVnID0gZGVidWdfMS5kZWZhdWx0O1xuY29uc3QgVExTUHJvZmlsZXNfMSA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMvVExTUHJvZmlsZXNcIik7XG4vKipcbiAqIENvbnZlcnQgYSBidWZmZXIgdG8gc3RyaW5nLCBzdXBwb3J0cyBidWZmZXIgYXJyYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBganNcbiAqIGNvbnN0IGlucHV0ID0gW0J1ZmZlci5mcm9tKCdmb28nKSwgW0J1ZmZlci5mcm9tKCdiYXInKV1dXG4gKiBjb25zdCByZXMgPSBjb252ZXJ0QnVmZmVyVG9TdHJpbmcoaW5wdXQsICd1dGY4JylcbiAqIGV4cGVjdChyZXMpLnRvLmVxbChbJ2ZvbycsIFsnYmFyJ11dKVxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRCdWZmZXJUb1N0cmluZyh2YWx1ZSwgZW5jb2RpbmcpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKGVuY29kaW5nKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVzID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgcmVzW2ldID1cbiAgICAgICAgICAgICAgICB2YWx1ZVtpXSBpbnN0YW5jZW9mIEJ1ZmZlciAmJiBlbmNvZGluZyA9PT0gXCJ1dGY4XCJcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVtpXS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIDogY29udmVydEJ1ZmZlclRvU3RyaW5nKHZhbHVlW2ldLCBlbmNvZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0cy5jb252ZXJ0QnVmZmVyVG9TdHJpbmcgPSBjb252ZXJ0QnVmZmVyVG9TdHJpbmc7XG4vKipcbiAqIENvbnZlcnQgYSBsaXN0IG9mIHJlc3VsdHMgdG8gbm9kZS1zdHlsZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBqc1xuICogY29uc3QgaW5wdXQgPSBbJ2EnLCAnYicsIG5ldyBFcnJvcignYycpLCAnZCddXG4gKiBjb25zdCBvdXRwdXQgPSBleHBvcnRzLndyYXBNdWx0aVJlc3VsdChpbnB1dClcbiAqIGV4cGVjdChvdXRwdXQpLnRvLmVxbChbW251bGwsICdhJ10sIFtudWxsLCAnYiddLCBbbmV3IEVycm9yKCdjJyldLCBbbnVsbCwgJ2QnXSlcbiAqIGBgYFxuICovXG5mdW5jdGlvbiB3cmFwTXVsdGlSZXN1bHQoYXJyKSB7XG4gICAgLy8gV2hlbiB1c2luZyBXQVRDSC9FWEVDIHRyYW5zYWN0aW9ucywgdGhlIEVYRUMgd2lsbCByZXR1cm5cbiAgICAvLyBhIG51bGwgaW5zdGVhZCBvZiBhbiBhcnJheVxuICAgIGlmICghYXJyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCBsZW5ndGggPSBhcnIubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGFycltpXTtcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goW2l0ZW1dKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFtudWxsLCBpdGVtXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMud3JhcE11bHRpUmVzdWx0ID0gd3JhcE11bHRpUmVzdWx0O1xuLyoqXG4gKiBEZXRlY3QgaWYgdGhlIGFyZ3VtZW50IGlzIGEgaW50XG4gKiBAZXhhbXBsZVxuICogYGBganNcbiAqID4gaXNJbnQoJzEyMycpXG4gKiB0cnVlXG4gKiA+IGlzSW50KCcxMjMuMycpXG4gKiBmYWxzZVxuICogPiBpc0ludCgnMXgnKVxuICogZmFsc2VcbiAqID4gaXNJbnQoMTIzKVxuICogdHJ1ZVxuICogPiBpc0ludCh0cnVlKVxuICogZmFsc2VcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBpc0ludCh2YWx1ZSkge1xuICAgIGNvbnN0IHggPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICByZXR1cm4gIWlzTmFOKHZhbHVlKSAmJiAoeCB8IDApID09PSB4O1xufVxuZXhwb3J0cy5pc0ludCA9IGlzSW50O1xuLyoqXG4gKiBQYWNrIGFuIGFycmF5IHRvIGFuIE9iamVjdFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBqc1xuICogPiBwYWNrT2JqZWN0KFsnYScsICdiJywgJ2MnLCAnZCddKVxuICogeyBhOiAnYicsIGM6ICdkJyB9XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gcGFja09iamVjdChhcnJheSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHJlc3VsdFthcnJheVtpIC0gMV1dID0gYXJyYXlbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnBhY2tPYmplY3QgPSBwYWNrT2JqZWN0O1xuLyoqXG4gKiBSZXR1cm4gYSBjYWxsYmFjayB3aXRoIHRpbWVvdXRcbiAqL1xuZnVuY3Rpb24gdGltZW91dChjYWxsYmFjaywgdGltZW91dCkge1xuICAgIGxldCB0aW1lciA9IG51bGw7XG4gICAgY29uc3QgcnVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aW1lciA9IHNldFRpbWVvdXQocnVuLCB0aW1lb3V0LCBuZXcgRXJyb3IoXCJ0aW1lb3V0XCIpKTtcbiAgICByZXR1cm4gcnVuO1xufVxuZXhwb3J0cy50aW1lb3V0ID0gdGltZW91dDtcbi8qKlxuICogQ29udmVydCBhbiBvYmplY3QgdG8gYW4gYXJyYXlcbiAqIEBleGFtcGxlXG4gKiBgYGBqc1xuICogPiBjb252ZXJ0T2JqZWN0VG9BcnJheSh7IGE6ICcxJyB9KVxuICogWydhJywgJzEnXVxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRPYmplY3RUb0FycmF5KG9iaikge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopOyAvLyBPYmplY3QuZW50cmllcyByZXF1aXJlcyBub2RlIDcrXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICByZXN1bHQucHVzaChrZXlzW2ldLCBvYmpba2V5c1tpXV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5jb252ZXJ0T2JqZWN0VG9BcnJheSA9IGNvbnZlcnRPYmplY3RUb0FycmF5O1xuLyoqXG4gKiBDb252ZXJ0IGEgbWFwIHRvIGFuIGFycmF5XG4gKiBAZXhhbXBsZVxuICogYGBganNcbiAqID4gY29udmVydE1hcFRvQXJyYXkobmV3IE1hcChbWzEsICcyJ11dKSlcbiAqIFsxLCAnMiddXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY29udmVydE1hcFRvQXJyYXkobWFwKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgbGV0IHBvcyA9IDA7XG4gICAgbWFwLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmVzdWx0W3Bvc10gPSBrZXk7XG4gICAgICAgIHJlc3VsdFtwb3MgKyAxXSA9IHZhbHVlO1xuICAgICAgICBwb3MgKz0gMjtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5jb252ZXJ0TWFwVG9BcnJheSA9IGNvbnZlcnRNYXBUb0FycmF5O1xuLyoqXG4gKiBDb252ZXJ0IGEgbm9uLXN0cmluZyBhcmcgdG8gYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gdG9BcmcoYXJnKSB7XG4gICAgaWYgKGFyZyA9PT0gbnVsbCB8fCB0eXBlb2YgYXJnID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKGFyZyk7XG59XG5leHBvcnRzLnRvQXJnID0gdG9Bcmc7XG4vKipcbiAqIE9wdGltaXplIGVycm9yIHN0YWNrXG4gKlxuICogQHBhcmFtIGVycm9yIGFjdHVhbGx5IGVycm9yXG4gKiBAcGFyYW0gZnJpZW5kbHlTdGFjayB0aGUgc3RhY2sgdGhhdCBtb3JlIG1lYW5pbmdmdWxcbiAqIEBwYXJhbSBmaWx0ZXJQYXRoIG9ubHkgc2hvdyBzdGFja3Mgd2l0aCB0aGUgc3BlY2lmaWVkIHBhdGhcbiAqL1xuZnVuY3Rpb24gb3B0aW1pemVFcnJvclN0YWNrKGVycm9yLCBmcmllbmRseVN0YWNrLCBmaWx0ZXJQYXRoKSB7XG4gICAgY29uc3Qgc3RhY2tzID0gZnJpZW5kbHlTdGFjay5zcGxpdChcIlxcblwiKTtcbiAgICBsZXQgbGluZXMgPSBcIlwiO1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDE7IGkgPCBzdGFja3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHN0YWNrc1tpXS5pbmRleE9mKGZpbHRlclBhdGgpID09PSAtMSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaiA9IGk7IGogPCBzdGFja3MubGVuZ3RoOyArK2opIHtcbiAgICAgICAgbGluZXMgKz0gXCJcXG5cIiArIHN0YWNrc1tqXTtcbiAgICB9XG4gICAgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgICAgIGNvbnN0IHBvcyA9IGVycm9yLnN0YWNrLmluZGV4T2YoXCJcXG5cIik7XG4gICAgICAgIGVycm9yLnN0YWNrID0gZXJyb3Iuc3RhY2suc2xpY2UoMCwgcG9zKSArIGxpbmVzO1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3I7XG59XG5leHBvcnRzLm9wdGltaXplRXJyb3JTdGFjayA9IG9wdGltaXplRXJyb3JTdGFjaztcbi8qKlxuICogUGFyc2UgdGhlIHJlZGlzIHByb3RvY29sIHVybFxuICovXG5mdW5jdGlvbiBwYXJzZVVSTCh1cmwpIHtcbiAgICBpZiAoaXNJbnQodXJsKSkge1xuICAgICAgICByZXR1cm4geyBwb3J0OiB1cmwgfTtcbiAgICB9XG4gICAgbGV0IHBhcnNlZCA9ICgwLCB1cmxfMS5wYXJzZSkodXJsLCB0cnVlLCB0cnVlKTtcbiAgICBpZiAoIXBhcnNlZC5zbGFzaGVzICYmIHVybFswXSAhPT0gXCIvXCIpIHtcbiAgICAgICAgdXJsID0gXCIvL1wiICsgdXJsO1xuICAgICAgICBwYXJzZWQgPSAoMCwgdXJsXzEucGFyc2UpKHVybCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnMgPSBwYXJzZWQucXVlcnkgfHwge307XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgaWYgKHBhcnNlZC5hdXRoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VkLmF1dGguaW5kZXhPZihcIjpcIik7XG4gICAgICAgIHJlc3VsdC51c2VybmFtZSA9IGluZGV4ID09PSAtMSA/IHBhcnNlZC5hdXRoIDogcGFyc2VkLmF1dGguc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICByZXN1bHQucGFzc3dvcmQgPSBpbmRleCA9PT0gLTEgPyBcIlwiIDogcGFyc2VkLmF1dGguc2xpY2UoaW5kZXggKyAxKTtcbiAgICB9XG4gICAgaWYgKHBhcnNlZC5wYXRobmFtZSkge1xuICAgICAgICBpZiAocGFyc2VkLnByb3RvY29sID09PSBcInJlZGlzOlwiIHx8IHBhcnNlZC5wcm90b2NvbCA9PT0gXCJyZWRpc3M6XCIpIHtcbiAgICAgICAgICAgIGlmIChwYXJzZWQucGF0aG5hbWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5kYiA9IHBhcnNlZC5wYXRobmFtZS5zbGljZSgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5wYXRoID0gcGFyc2VkLnBhdGhuYW1lO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChwYXJzZWQuaG9zdCkge1xuICAgICAgICByZXN1bHQuaG9zdCA9IHBhcnNlZC5ob3N0bmFtZTtcbiAgICB9XG4gICAgaWYgKHBhcnNlZC5wb3J0KSB7XG4gICAgICAgIHJlc3VsdC5wb3J0ID0gcGFyc2VkLnBvcnQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mYW1pbHkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3QgaW50RmFtaWx5ID0gTnVtYmVyLnBhcnNlSW50KG9wdGlvbnMuZmFtaWx5LCAxMCk7XG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGludEZhbWlseSkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5mYW1pbHkgPSBpbnRGYW1pbHk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKDAsIGxvZGFzaF8xLmRlZmF1bHRzKShyZXN1bHQsIG9wdGlvbnMpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnBhcnNlVVJMID0gcGFyc2VVUkw7XG4vKipcbiAqIFJlc29sdmUgVExTIHByb2ZpbGUgc2hvcnRjdXQgaW4gY29ubmVjdGlvbiBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVUTFNQcm9maWxlKG9wdGlvbnMpIHtcbiAgICBsZXQgdGxzID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnRscztcbiAgICBpZiAodHlwZW9mIHRscyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgdGxzID0geyBwcm9maWxlOiB0bHMgfTtcbiAgICBjb25zdCBwcm9maWxlID0gVExTUHJvZmlsZXNfMS5kZWZhdWx0W3RscyA9PT0gbnVsbCB8fCB0bHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRscy5wcm9maWxlXTtcbiAgICBpZiAocHJvZmlsZSkge1xuICAgICAgICB0bHMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9maWxlLCB0bHMpO1xuICAgICAgICBkZWxldGUgdGxzLnByb2ZpbGU7XG4gICAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7IHRscyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG59XG5leHBvcnRzLnJlc29sdmVUTFNQcm9maWxlID0gcmVzb2x2ZVRMU1Byb2ZpbGU7XG4vKipcbiAqIEdldCBhIHJhbmRvbSBlbGVtZW50IGZyb20gYGFycmF5YFxuICovXG5mdW5jdGlvbiBzYW1wbGUoYXJyYXksIGZyb20gPSAwKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgIGlmIChmcm9tID49IGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5W2Zyb20gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobGVuZ3RoIC0gZnJvbSkpXTtcbn1cbmV4cG9ydHMuc2FtcGxlID0gc2FtcGxlO1xuLyoqXG4gKiBTaHVmZmxlIHRoZSBhcnJheSB1c2luZyB0aGUgRmlzaGVyLVlhdGVzIFNodWZmbGUuXG4gKiBUaGlzIG1ldGhvZCB3aWxsIG11dGF0ZSB0aGUgb3JpZ2luYWwgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHNodWZmbGUoYXJyYXkpIHtcbiAgICBsZXQgY291bnRlciA9IGFycmF5Lmxlbmd0aDtcbiAgICAvLyBXaGlsZSB0aGVyZSBhcmUgZWxlbWVudHMgaW4gdGhlIGFycmF5XG4gICAgd2hpbGUgKGNvdW50ZXIgPiAwKSB7XG4gICAgICAgIC8vIFBpY2sgYSByYW5kb20gaW5kZXhcbiAgICAgICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjb3VudGVyKTtcbiAgICAgICAgLy8gRGVjcmVhc2UgY291bnRlciBieSAxXG4gICAgICAgIGNvdW50ZXItLTtcbiAgICAgICAgLy8gQW5kIHN3YXAgdGhlIGxhc3QgZWxlbWVudCB3aXRoIGl0XG4gICAgICAgIFthcnJheVtjb3VudGVyXSwgYXJyYXlbaW5kZXhdXSA9IFthcnJheVtpbmRleF0sIGFycmF5W2NvdW50ZXJdXTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xufVxuZXhwb3J0cy5zaHVmZmxlID0gc2h1ZmZsZTtcbi8qKlxuICogRXJyb3IgbWVzc2FnZSBmb3IgY29ubmVjdGlvbiBiZWluZyBkaXNjb25uZWN0ZWRcbiAqL1xuZXhwb3J0cy5DT05ORUNUSU9OX0NMT1NFRF9FUlJPUl9NU0cgPSBcIkNvbm5lY3Rpb24gaXMgY2xvc2VkLlwiO1xuZnVuY3Rpb24gemlwTWFwKGtleXMsIHZhbHVlcykge1xuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICBrZXlzLmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICAgICAgbWFwLnNldChrZXksIHZhbHVlc1tpbmRleF0pO1xuICAgIH0pO1xuICAgIHJldHVybiBtYXA7XG59XG5leHBvcnRzLnppcE1hcCA9IHppcE1hcDtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/utils/index.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/ioredis/built/utils/lodash.js":
/*!****************************************************!*\
!*** ./node_modules/ioredis/built/utils/lodash.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.isArguments = exports.defaults = exports.noop = void 0;\nconst defaults = __webpack_require__(/*! lodash.defaults */ \"(rsc)/./node_modules/lodash.defaults/index.js\");\nexports.defaults = defaults;\nconst isArguments = __webpack_require__(/*! lodash.isarguments */ \"(rsc)/./node_modules/lodash.isarguments/index.js\");\nexports.isArguments = isArguments;\nfunction noop() { }\nexports.noop = noop;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvaW9yZWRpcy9idWlsdC91dGlscy9sb2Rhc2guanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsbUJBQW1CLEdBQUcsZ0JBQWdCLEdBQUcsWUFBWTtBQUNyRCxpQkFBaUIsbUJBQU8sQ0FBQyxzRUFBaUI7QUFDMUMsZ0JBQWdCO0FBQ2hCLG9CQUFvQixtQkFBTyxDQUFDLDRFQUFvQjtBQUNoRCxtQkFBbUI7QUFDbkI7QUFDQSxZQUFZIiwic291cmNlcyI6WyIvaG9tZS9hbG1hL25leHRnZW4vTmVhaC1tYWlsL25vZGVfbW9kdWxlcy9pb3JlZGlzL2J1aWx0L3V0aWxzL2xvZGFzaC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNBcmd1bWVudHMgPSBleHBvcnRzLmRlZmF1bHRzID0gZXhwb3J0cy5ub29wID0gdm9pZCAwO1xuY29uc3QgZGVmYXVsdHMgPSByZXF1aXJlKFwibG9kYXNoLmRlZmF1bHRzXCIpO1xuZXhwb3J0cy5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuY29uc3QgaXNBcmd1bWVudHMgPSByZXF1aXJlKFwibG9kYXNoLmlzYXJndW1lbnRzXCIpO1xuZXhwb3J0cy5pc0FyZ3VtZW50cyA9IGlzQXJndW1lbnRzO1xuZnVuY3Rpb24gbm9vcCgpIHsgfVxuZXhwb3J0cy5ub29wID0gbm9vcDtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/ioredis/built/utils/lodash.js\n");
/***/ })
};
;